From ad7260cf228bef09f42247a78c2ae62658b5f579 Mon Sep 17 00:00:00 2001 From: xiejay97 Date: Wed, 21 Sep 2022 16:25:12 +0800 Subject: [PATCH] feat(platform): add `test` route --- .stylelintrc | 9 +- package.json | 46 +- packages/hooks/project.json | 1 + packages/hooks/tsconfig.lib.json | 2 +- packages/icons/project.json | 1 + packages/icons/tsconfig.lib.json | 2 +- packages/platform/package.json | 5 +- packages/platform/project.json | 2 +- packages/platform/src/app/App.tsx | 4 +- packages/platform/src/app/Routes.guard.tsx | 2 +- packages/platform/src/app/Routes.tsx | 129 +- packages/platform/src/app/components/index.ts | 3 + .../src/app/components/language/Language.tsx | 4 +- .../platform/src/app/components/list/List.tsx | 14 +- .../components/route-header/RouteHeader.tsx | 31 + .../route-header/RouteHeaderBreadcrumb.tsx | 63 + .../route-header/RouteHeaderHeader.tsx | 27 + .../src/app/components/route-header/hooks.ts | 15 + .../src/app/components/route-header/index.ts | 3 + packages/platform/src/app/hooks/index.ts | 3 - packages/platform/src/app/hooks/useInit.ts | 145 -- .../platform/src/app/routes/Exception.tsx | 5 - .../src/app/routes/dashboard/AMap.tsx | 3 + .../src/app/routes/dashboard/Amap.tsx | 3 - .../src/app/routes/dashboard/ECharts.tsx | 3 + .../src/app/routes/dashboard/Echarts.tsx | 3 - .../routes/exception/Exception.module.scss | 56 + .../src/app/routes/exception/Exception.tsx | 36 + .../src/app/routes/layout/Layout.module.scss | 10 + .../platform/src/app/routes/layout/Layout.tsx | 5 +- .../src/app/routes/layout/Sidebar.tsx | 42 - .../routes/layout/header/Header.module.scss | 67 + .../src/app/routes/layout/header/Header.tsx | 44 +- .../notification/Notification.module.scss | 42 + .../{ => notification}/Notification.tsx | 21 +- .../layout/header/user/User.module.scss | 4 + .../routes/layout/header/{ => user}/User.tsx | 12 +- .../routes/layout/sidebar/Sidebar.module.scss | 35 + .../src/app/routes/layout/sidebar/Sidebar.tsx | 65 + .../routes/login/Login.module.scss} | 3 +- .../src/app/routes/{ => login}/Login.tsx | 45 +- .../src/app/routes/test/acl/ACL.module.scss | 15 + .../platform/src/app/routes/test/acl/ACL.tsx | 57 + .../src/app/routes/test/http/Http.module.scss | 11 + .../src/app/routes/test/http/Http.tsx | 41 + packages/platform/src/app/utils/base64url.ts | 10 +- packages/platform/src/app/utils/index.ts | 1 + .../src/app/utils/registerRouteMate.ts | 13 + packages/platform/src/assets/403.svg | 508 ++++++ packages/platform/src/assets/404.svg | 314 ++++ packages/platform/src/assets/500.svg | 208 +++ packages/platform/src/config/acl.ts | 4 + packages/platform/src/config/menu.ts | 30 +- packages/platform/src/config/mock.ts | 62 +- packages/platform/src/config/state.ts | 12 +- packages/platform/src/config/token.ts | 12 +- packages/platform/src/core/index.ts | 4 + .../src/{app/hooks => core}/useACL.ts | 0 .../src/{app/hooks => core}/useHttp.ts | 41 +- packages/platform/src/core/useInit.ts | 73 + packages/platform/src/core/useMenu.ts | 72 + packages/platform/src/i18n/resources.json | 94 +- packages/platform/src/index.html | 2 +- packages/platform/src/styles.scss | 6 +- packages/platform/src/styles/_components.scss | 1 + packages/platform/src/styles/_mixins.scss | 3 + packages/platform/src/styles/_module.scss | 4 + packages/platform/src/styles/_routes.scss | 3 - packages/platform/src/styles/_variables.scss | 1 + .../src/styles/components/language.scss | 5 +- .../src/styles/components/route-header.scss | 38 + packages/platform/src/styles/index.scss | 2 +- .../platform/src/styles/routes/layout.scss | 153 -- packages/platform/tsconfig.app.json | 2 +- packages/platform/webpack.js | 15 + .../executors/build-base/files/resources.json | 8 +- packages/site/src/app/App.tsx | 2 +- .../site/src/app/components/footer/Footer.tsx | 36 + .../site/src/app/components/footer/index.ts | 1 + packages/site/src/app/components/index.ts | 2 + .../src/app/components/route/md/Route.tsx | 19 +- packages/site/src/app/routes/Home.tsx | 23 +- packages/site/src/styles.scss | 2 - packages/site/src/styles/_app.scss | 3 +- packages/site/src/styles/_components.scss | 1 + packages/site/src/styles/_variables.scss | 2 + .../site/src/styles/components/footer.scss | 52 + .../site/src/styles/components/md-route.scss | 10 + packages/site/src/styles/routes/home.scss | 42 - packages/site/tsconfig.app.json | 2 +- packages/ui/project.json | 1 + packages/ui/src/components/avatar/Avatar.tsx | 12 +- .../src/components/form/abstract-control.ts | 30 +- .../ui/src/components/form/form-control.ts | 4 +- packages/ui/src/components/form/form-group.ts | 22 +- packages/ui/src/components/form/hooks.ts | 3 +- packages/ui/src/styles/components/avatar.scss | 1 + packages/ui/src/styles/components/card.scss | 1 + packages/ui/tsconfig.lib.json | 2 +- packages/utils/project.json | 1 + packages/utils/tsconfig.lib.json | 2 +- packages/vscode-extension/tsconfig.lib.json | 4 +- yarn.lock | 1504 +++++++++-------- 103 files changed, 3186 insertions(+), 1438 deletions(-) create mode 100644 packages/platform/src/app/components/route-header/RouteHeader.tsx create mode 100644 packages/platform/src/app/components/route-header/RouteHeaderBreadcrumb.tsx create mode 100644 packages/platform/src/app/components/route-header/RouteHeaderHeader.tsx create mode 100644 packages/platform/src/app/components/route-header/hooks.ts create mode 100644 packages/platform/src/app/components/route-header/index.ts delete mode 100644 packages/platform/src/app/hooks/useInit.ts delete mode 100644 packages/platform/src/app/routes/Exception.tsx create mode 100644 packages/platform/src/app/routes/dashboard/AMap.tsx delete mode 100644 packages/platform/src/app/routes/dashboard/Amap.tsx create mode 100644 packages/platform/src/app/routes/dashboard/ECharts.tsx delete mode 100644 packages/platform/src/app/routes/dashboard/Echarts.tsx create mode 100644 packages/platform/src/app/routes/exception/Exception.module.scss create mode 100644 packages/platform/src/app/routes/exception/Exception.tsx create mode 100644 packages/platform/src/app/routes/layout/Layout.module.scss delete mode 100644 packages/platform/src/app/routes/layout/Sidebar.tsx create mode 100644 packages/platform/src/app/routes/layout/header/Header.module.scss create mode 100644 packages/platform/src/app/routes/layout/header/notification/Notification.module.scss rename packages/platform/src/app/routes/layout/header/{ => notification}/Notification.tsx (74%) create mode 100644 packages/platform/src/app/routes/layout/header/user/User.module.scss rename packages/platform/src/app/routes/layout/header/{ => user}/User.tsx (76%) create mode 100644 packages/platform/src/app/routes/layout/sidebar/Sidebar.module.scss create mode 100644 packages/platform/src/app/routes/layout/sidebar/Sidebar.tsx rename packages/platform/src/{styles/routes/login.scss => app/routes/login/Login.module.scss} (96%) rename packages/platform/src/app/routes/{ => login}/Login.tsx (78%) create mode 100644 packages/platform/src/app/routes/test/acl/ACL.module.scss create mode 100644 packages/platform/src/app/routes/test/acl/ACL.tsx create mode 100644 packages/platform/src/app/routes/test/http/Http.module.scss create mode 100644 packages/platform/src/app/routes/test/http/Http.tsx create mode 100644 packages/platform/src/app/utils/registerRouteMate.ts create mode 100644 packages/platform/src/assets/403.svg create mode 100644 packages/platform/src/assets/404.svg create mode 100644 packages/platform/src/assets/500.svg create mode 100644 packages/platform/src/core/index.ts rename packages/platform/src/{app/hooks => core}/useACL.ts (100%) rename packages/platform/src/{app/hooks => core}/useHttp.ts (57%) create mode 100644 packages/platform/src/core/useInit.ts create mode 100644 packages/platform/src/core/useMenu.ts create mode 100644 packages/platform/src/styles/_mixins.scss create mode 100644 packages/platform/src/styles/_module.scss delete mode 100644 packages/platform/src/styles/_routes.scss create mode 100644 packages/platform/src/styles/components/route-header.scss delete mode 100644 packages/platform/src/styles/routes/layout.scss create mode 100644 packages/platform/webpack.js create mode 100644 packages/site/src/app/components/footer/Footer.tsx create mode 100644 packages/site/src/app/components/footer/index.ts create mode 100644 packages/site/src/styles/components/footer.scss diff --git a/.stylelintrc b/.stylelintrc index 16cd5c3b..258b244e 100644 --- a/.stylelintrc +++ b/.stylelintrc @@ -8,7 +8,14 @@ "rules": { "custom-property-pattern": null, "no-invalid-position-at-import-rule": null, - "selector-class-pattern": null + "selector-class-pattern": null, + "block-no-empty": null, + "selector-pseudo-class-no-unknown": [ + true, + { + "ignorePseudoClasses": ["global"] + } + ] }, "overrides": [ { diff --git a/package.json b/package.json index 02a94e6c..cf4e742c 100644 --- a/package.json +++ b/package.json @@ -26,40 +26,40 @@ "@ant-design/icons-svg": "^4.2.1", "@commitlint/cli": "^17.1.2", "@commitlint/config-conventional": "^17.1.0", - "@nrwl/cli": "14.6.5", - "@nrwl/eslint-plugin-nx": "14.6.5", - "@nrwl/jest": "14.6.5", - "@nrwl/linter": "14.6.5", + "@nrwl/cli": "14.7.6", + "@nrwl/eslint-plugin-nx": "14.7.6", + "@nrwl/jest": "14.7.6", + "@nrwl/linter": "14.7.6", "@nrwl/nx-cloud": "14.6.2", - "@nrwl/react": "14.6.5", - "@nrwl/tao": "14.6.5", - "@nrwl/web": "14.6.5", - "@nrwl/workspace": "14.6.5", + "@nrwl/react": "14.7.6", + "@nrwl/tao": "14.7.6", + "@nrwl/web": "14.7.6", + "@nrwl/workspace": "14.7.6", "@stackblitz/sdk": "^1.8.0", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@types/fs-extra": "^9.0.13", "@types/glob": "^8.0.0", "@types/jest": "^27.4.1", - "@types/lodash": "^4.14.182", + "@types/lodash": "^4.14.185", "@types/marked": "^4.0.7", "@types/mocha": "^9.1.1", - "@types/node": "^18.7.16", - "@types/react": "^18.0.18", + "@types/node": "^18.7.18", + "@types/react": "^18.0.20", "@types/react-dom": "^18.0.6", "@types/vscode": "^1.71.0", "@types/yaml-front-matter": "^4.1.0", - "@typescript-eslint/eslint-plugin": "^5.36.2", - "@typescript-eslint/parser": "^5.36.2", + "@typescript-eslint/eslint-plugin": "^5.38.0", + "@typescript-eslint/parser": "^5.38.0", "@vscode/test-electron": "^2.1.5", "axios": "^0.27.2", "axios-mock-adapter": "^1.21.2", "babel-jest": "^27.5.1", "codesandbox": "^2.2.3", "colors": "^1.4.0", - "core-js": "^3.25.1", + "core-js": "^3.25.2", "dayjs": "^1.11.5", - "eslint": "^8.23.0", + "eslint": "^8.23.1", "eslint-config-prettier": "^8.5.0", "eslint-plugin-import": "^2.26.0", "eslint-plugin-jsdoc": "^39.3.6", @@ -68,27 +68,27 @@ "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-react": "^7.31.8", "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-tsdoc": "^0.2.16", + "eslint-plugin-tsdoc": "^0.2.17", "fs-extra": "^10.1.0", "glob": "^8.0.3", "highlight.js": "^11.6.0", "husky": "^8.0.1", - "i18next": "^21.9.0", + "i18next": "^21.9.2", "immer": "^9.0.15", "is-builtin-module": "^3.2.0", "jest": "^27.5.1", - "lerna": "^5.5.0", + "lerna": "^5.5.1", "lodash": "^4.17.21", "marked": "^4.1.0", "mocha": "^10.0.0", - "nx": "14.6.5", + "nx": "14.7.6", "postcss-html": "^1.5.0", "postcss-markdown": "^1.2.0", "prettier": "^2.7.1", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-i18next": "^11.18.5", - "react-router-dom": "^6.3.0", + "react-i18next": "^11.18.6", + "react-router-dom": "^6.4.0", "react-test-renderer": "^18.2.0", "regenerator-runtime": "^0.13.9", "rfs": "^9.0.6", @@ -96,13 +96,13 @@ "rxjs-for-await": "^1.0.0", "sass": "^1.54.9", "sort-package-json": "^1.57.0", - "stylelint": "^14.10.0", + "stylelint": "^14.12.0", "stylelint-config-prettier": "^9.0.3", "stylelint-config-recess-order": "^3.0.0", "stylelint-config-recommended-scss": "^7.0.0", "stylelint-config-standard": "^28.0.0", "stylelint-scss": "^4.3.0", - "swiper": "^8.3.2", + "swiper": "^8.4.2", "table": "^6.8.0", "ts-jest": "^27.1.4", "ts-node": "^10.9.1", diff --git a/packages/hooks/project.json b/packages/hooks/project.json index b48f2057..6596e797 100644 --- a/packages/hooks/project.json +++ b/packages/hooks/project.json @@ -10,6 +10,7 @@ "options": { "outputPath": "dist/packages/hooks", "tsConfig": "packages/hooks/tsconfig.lib.json", + "rootDir": "packages/hooks/src", "main": "packages/hooks/src/index.ts", "updateBuildableProjectDepsInPackageJson": false, "assets": [ diff --git a/packages/hooks/tsconfig.lib.json b/packages/hooks/tsconfig.lib.json index 67b677a3..5039e7d4 100644 --- a/packages/hooks/tsconfig.lib.json +++ b/packages/hooks/tsconfig.lib.json @@ -16,5 +16,5 @@ "**/*.spec.jsx", "**/*.test.jsx" ], - "include": ["**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"] + "include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"] } diff --git a/packages/icons/project.json b/packages/icons/project.json index 439bd2c9..0b1b4b4c 100644 --- a/packages/icons/project.json +++ b/packages/icons/project.json @@ -10,6 +10,7 @@ "options": { "outputPath": "dist/packages/icons", "tsConfig": "packages/icons/tsconfig.lib.json", + "rootDir": "packages/icons/src", "main": "packages/icons/src/index.ts", "updateBuildableProjectDepsInPackageJson": false, "assets": [ diff --git a/packages/icons/tsconfig.lib.json b/packages/icons/tsconfig.lib.json index 67b677a3..5039e7d4 100644 --- a/packages/icons/tsconfig.lib.json +++ b/packages/icons/tsconfig.lib.json @@ -16,5 +16,5 @@ "**/*.spec.jsx", "**/*.test.jsx" ], - "include": ["**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"] + "include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"] } diff --git a/packages/platform/package.json b/packages/platform/package.json index 4099db2d..0a2aec57 100644 --- a/packages/platform/package.json +++ b/packages/platform/package.json @@ -1,5 +1,5 @@ { - "name": "platform", + "name": "rd-platform", "version": "0.0.1", "private": true, "description": "An out-of-box solution for enterprise applications as a React boilerplate", @@ -7,7 +7,8 @@ "react", "devui", "admin", - "platform" + "platform", + "rd-platform" ], "homepage": "https://github.com/DevCloudFE/react-devui/tree/main/packages/platform#readme", "bugs": { diff --git a/packages/platform/project.json b/packages/platform/project.json index e4f06114..bc410738 100644 --- a/packages/platform/project.json +++ b/packages/platform/project.json @@ -18,7 +18,7 @@ "assets": ["packages/platform/src/assets"], "styles": ["packages/platform/src/styles.scss"], "scripts": [], - "webpackConfig": "@nrwl/react/plugins/webpack" + "webpackConfig": "packages/platform/webpack" }, "configurations": { "production": { diff --git a/packages/platform/src/app/App.tsx b/packages/platform/src/app/App.tsx index c53e2e32..a73a8dbe 100644 --- a/packages/platform/src/app/App.tsx +++ b/packages/platform/src/app/App.tsx @@ -11,8 +11,8 @@ import { DRoot } from '@react-devui/ui'; import { LOGIN_PATH } from '../config/other'; import { STORAGE_KEY } from '../config/storage'; +import { useHttp, useInit } from '../core'; import { AppRoutes } from './Routes'; -import { useHttp, useInit } from './hooks'; export type AppTheme = 'light' | 'dark'; @@ -73,7 +73,7 @@ export function App() { const rootContext = useMemo( () => ({ i18n: { lang: language }, - layout: { scrollEl: 'main.app-main', resizeEl: 'article.app-md-route' }, + layout: { scrollEl: 'main', resizeEl: '.app-md-route' }, }), [language] ); diff --git a/packages/platform/src/app/Routes.guard.tsx b/packages/platform/src/app/Routes.guard.tsx index e9880de6..e1eadebb 100644 --- a/packages/platform/src/app/Routes.guard.tsx +++ b/packages/platform/src/app/Routes.guard.tsx @@ -5,7 +5,7 @@ import { Navigate, useLocation } from 'react-router-dom'; import { LOGIN_PATH, PREV_ROUTE_KEY } from '../config/other'; import { TOKEN, TOKEN_EXPIRATION_OFFSET } from '../config/token'; -import { useACL } from './hooks'; +import { useACL } from '../core'; export function useACLGuard(): CanActivateFn { const acl = useACL(); diff --git a/packages/platform/src/app/Routes.tsx b/packages/platform/src/app/Routes.tsx index 35219cbd..b2a4be5f 100644 --- a/packages/platform/src/app/Routes.tsx +++ b/packages/platform/src/app/Routes.tsx @@ -1,25 +1,29 @@ -import type { Control, ControlMode } from './hooks/useACL'; +import type { Control, ControlMode } from '../core/useACL'; import type { RouteObject } from 'react-router-dom'; +import { isUndefined, nth } from 'lodash'; import React, { useEffect } from 'react'; -import { useTranslation } from 'react-i18next'; import { matchRoutes, Navigate, renderMatches, useLocation } from 'react-router-dom'; import { ROUTES_ACL } from '../config/acl'; import { LOGIN_PATH, TITLE_CONFIG } from '../config/other'; +import { useMenu } from '../core'; import { useACLGuard, useTokenGuard } from './Routes.guard'; -import AppExceptionRoute from './routes/Exception'; -import AppLoginRoute from './routes/Login'; +import { AppFCPLoader } from './components'; +import { useTitle } from './components/route-header/hooks'; +import AppExceptionRoute from './routes/exception/Exception'; import AppLayout from './routes/layout/Layout'; +import AppLoginRoute from './routes/login/Login'; -const AppAmapRoute = React.lazy(() => import('./routes/dashboard/Amap')); -const AppEchartsRoute = React.lazy(() => import('./routes/dashboard/Echarts')); +const AppAMapRoute = React.lazy(() => import('./routes/dashboard/AMap')); +const AppEChartsRoute = React.lazy(() => import('./routes/dashboard/ECharts')); + +const AppACLRoute = React.lazy(() => import('./routes/test/acl/ACL')); +const AppHttpRoute = React.lazy(() => import('./routes/test/http/Http')); export type CanActivateFn = (route: RouteItem) => true | React.ReactElement; export interface RouteData { - title?: string; - titleI18n?: string; acl?: | { control: Control | Control[]; @@ -39,20 +43,17 @@ export interface RouteItem extends Omit { // I have a great implementation of route caching, but considering the synchronization of data between pages (like modifying list or detail page data), I ended up not introducing route caching. export function AppRoutes() { - const { t } = useTranslation('title'); const ACLGuard = useACLGuard(); const tokenGuard = useTokenGuard(); const location = useLocation(); + const [, allItem] = useMenu(); + const titles = useTitle(); - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const routes = matchRoutes( [ { path: LOGIN_PATH, element: , - data: { - titleI18n: 'Login', - }, }, { path: '/', @@ -64,25 +65,23 @@ export function AppRoutes() { children: [ { index: true, - // TODO: Use first menu - element: , + element: '/', }, { path: 'dashboard', children: [ { index: true, - element: , + element: '/dashboard', }, { path: 'amap', element: ( - loader}> - + }> + ), data: { - title: 'AMap', acl: ROUTES_ACL.dashboard.amap, canActivate: [ACLGuard], }, @@ -90,12 +89,11 @@ export function AppRoutes() { { path: 'echarts', element: ( - loader}> - + }> + ), data: { - title: 'ECharts', acl: ROUTES_ACL.dashboard.echarts, canActivate: [ACLGuard], }, @@ -103,51 +101,76 @@ export function AppRoutes() { ], }, { - path: 'exception', + path: 'test', children: [ { index: true, - element: , - }, - { - path: '403', - element: , - data: { - title: '403', - }, + element: '/test', }, { - path: '404', - element: , + path: 'acl', + element: ( + }> + + + ), data: { - title: '404', + acl: ROUTES_ACL.test.acl, + canActivate: [ACLGuard], }, }, { - path: '500', - element: , + path: 'http', + element: ( + }> + + + ), data: { - title: '500', + acl: ROUTES_ACL.test.http, + canActivate: [ACLGuard], }, }, ], }, ], }, + { + path: 'exception', + children: [ + { + index: true, + element: '/exception', + }, + { + path: '403', + element: , + }, + { + path: '404', + element: , + }, + { + path: '500', + element: , + }, + ], + }, { path: '*', element: , }, ] as RouteItem[], location - )!; + ); - let currentRouteData: RouteData | undefined; const element: React.ReactNode = (() => { + if (!routes) { + return null; + } + let canActivateChild: CanActivateFn[] = []; - let index = -1; for (const route of routes) { - index += 1; const routeData = (route.route as RouteItem).data; if (routeData && routeData.canActivate) { for (const canActivate of routeData.canActivate.concat(canActivateChild)) { @@ -160,27 +183,29 @@ export function AppRoutes() { if (routeData && routeData.canActivateChild) { canActivateChild = canActivateChild.concat(routeData.canActivateChild); } - - if (index === routes.length - 1) { - currentRouteData = routeData; - } } + const currentRoute = routes[routes.length - 1].route; + if (currentRoute.index === true) { + const firstMenu = allItem.find((item) => item.id.startsWith(currentRoute.element as string)); + return ; + } return renderMatches(routes); })(); useEffect(() => { - if (currentRouteData && (currentRouteData.title || currentRouteData.titleI18n)) { - const title = [currentRouteData.title ? currentRouteData.title : t(currentRouteData.titleI18n!)]; + const title = nth(titles, -1)?.[1]; + if (isUndefined(title)) { + document.title = TITLE_CONFIG.default; + } else { + const arr = [title]; if (TITLE_CONFIG.prefix) { - title.unshift(TITLE_CONFIG.prefix); + arr.unshift(TITLE_CONFIG.prefix); } if (TITLE_CONFIG.suffix) { - title.push(TITLE_CONFIG.suffix); + arr.push(TITLE_CONFIG.suffix); } - document.title = title.join(TITLE_CONFIG.separator ?? ' - '); - } else { - document.title = TITLE_CONFIG.default; + document.title = arr.join(TITLE_CONFIG.separator ?? ' - '); } }); diff --git a/packages/platform/src/app/components/index.ts b/packages/platform/src/app/components/index.ts index 5d557210..43a93b12 100644 --- a/packages/platform/src/app/components/index.ts +++ b/packages/platform/src/app/components/index.ts @@ -4,3 +4,6 @@ export { AppLanguage } from './language'; export type { AppListProps } from './list'; export { AppList } from './list'; + +export type { AppRouteHeaderProps, AppRouteHeaderBreadcrumbProps, AppRouteHeaderHeaderProps } from './route-header'; +export { AppRouteHeader } from './route-header'; diff --git a/packages/platform/src/app/components/language/Language.tsx b/packages/platform/src/app/components/language/Language.tsx index e107bf23..ca7878c9 100644 --- a/packages/platform/src/app/components/language/Language.tsx +++ b/packages/platform/src/app/components/language/Language.tsx @@ -18,8 +18,8 @@ export function AppLanguage(props: React.ButtonHTMLAttributes >((item) => ({ id: item[2], diff --git a/packages/platform/src/app/components/list/List.tsx b/packages/platform/src/app/components/list/List.tsx index ff1c72c6..6c1d4124 100644 --- a/packages/platform/src/app/components/list/List.tsx +++ b/packages/platform/src/app/components/list/List.tsx @@ -3,27 +3,27 @@ import React from 'react'; import { DSeparator } from '@react-devui/ui'; import { checkNodeExist, getClassName } from '@react-devui/utils'; -export interface AppListProps extends React.HTMLAttributes { - list: { +export interface AppListProps extends Omit, 'children'> { + aList: { avatar?: React.ReactNode; title?: React.ReactNode; description?: React.ReactNode; props?: React.HTMLAttributes; }[]; - separator?: boolean; + aSeparator?: boolean; } export function AppList(props: AppListProps): JSX.Element | null { const { - list, - separator = true, + aList, + aSeparator = true, ...restProps } = props; return (
    - {list.map(({ avatar, title, description, props }, index) => ( + {aList.map(({ avatar, title, description, props }, index) => (
  • {checkNodeExist(avatar) &&
    {avatar}
    } @@ -32,7 +32,7 @@ export function AppList(props: AppListProps): JSX.Element | null { {checkNodeExist(description) &&
    {description}
    }
  • - {separator && index !== list.length - 1 && } + {aSeparator && index !== aList.length - 1 && }
    ))}
diff --git a/packages/platform/src/app/components/route-header/RouteHeader.tsx b/packages/platform/src/app/components/route-header/RouteHeader.tsx new file mode 100644 index 00000000..1b5d4701 --- /dev/null +++ b/packages/platform/src/app/components/route-header/RouteHeader.tsx @@ -0,0 +1,31 @@ +import { getClassName } from '@react-devui/utils'; + +import { AppRouteHeaderBreadcrumb } from './RouteHeaderBreadcrumb'; +import { AppRouteHeaderHeader } from './RouteHeaderHeader'; + +export interface AppRouteHeaderProps extends React.HTMLAttributes { + aBreadcrumb?: boolean | React.ReactElement; + aTitle?: React.ReactNode; + aFixed?: boolean; +} + +export const AppRouteHeader: { + (props: AppRouteHeaderProps): JSX.Element | null; + Breadcrumb: typeof AppRouteHeaderBreadcrumb; + Header: typeof AppRouteHeaderHeader; +} = (props) => { + const { + children, + + ...restProps + } = props; + + return ( +
+ {children} +
+ ); +}; + +AppRouteHeader.Breadcrumb = AppRouteHeaderBreadcrumb; +AppRouteHeader.Header = AppRouteHeaderHeader; diff --git a/packages/platform/src/app/components/route-header/RouteHeaderBreadcrumb.tsx b/packages/platform/src/app/components/route-header/RouteHeaderBreadcrumb.tsx new file mode 100644 index 00000000..f3ab2cd0 --- /dev/null +++ b/packages/platform/src/app/components/route-header/RouteHeaderBreadcrumb.tsx @@ -0,0 +1,63 @@ +import { isUndefined } from 'lodash'; +import { Link } from 'react-router-dom'; + +import { DBreadcrumb } from '@react-devui/ui'; +import { getClassName } from '@react-devui/utils'; + +import { useTitle } from './hooks'; + +export interface AppRouteHeaderBreadcrumbProps extends Omit, 'children'> { + aHome?: [string, React.ReactNode]; + aSeparator?: React.ReactNode; +} + +export function AppRouteHeaderBreadcrumb(props: AppRouteHeaderBreadcrumbProps): JSX.Element | null { + const { + aHome, + aSeparator, + + ...restProps + } = props; + + const titles = useTitle(); + + return ( +
+ { + const path = + '/' + + arr + .slice(0, index + 1) + .map(([p]) => p) + .join('/'); + const isLast = index === arr.length - 1; + + return { + id: path, + title: isLast ? ( + title + ) : ( + + {title} + + ), + link: !isLast, + }; + }) + )} + dSeparator={aSeparator} + /> +
+ ); +} diff --git a/packages/platform/src/app/components/route-header/RouteHeaderHeader.tsx b/packages/platform/src/app/components/route-header/RouteHeaderHeader.tsx new file mode 100644 index 00000000..bd11d997 --- /dev/null +++ b/packages/platform/src/app/components/route-header/RouteHeaderHeader.tsx @@ -0,0 +1,27 @@ +import { nth } from 'lodash'; + +import { getClassName } from '@react-devui/utils'; + +import { useTitle } from './hooks'; + +export interface AppRouteHeaderHeaderProps extends React.HTMLAttributes { + aActions?: React.ReactNode[]; +} + +export function AppRouteHeaderHeader(props: AppRouteHeaderHeaderProps): JSX.Element | null { + const { + children, + aActions, + + ...restProps + } = props; + + const titles = useTitle(); + + return ( +
+
{children ?? nth(titles, -1)?.[1]}
+
{aActions}
+
+ ); +} diff --git a/packages/platform/src/app/components/route-header/hooks.ts b/packages/platform/src/app/components/route-header/hooks.ts new file mode 100644 index 00000000..2c8a3693 --- /dev/null +++ b/packages/platform/src/app/components/route-header/hooks.ts @@ -0,0 +1,15 @@ +import { useTranslation } from 'react-i18next'; +import { useLocation } from 'react-router-dom'; + +export function useTitle(): [string, string][] { + const location = useLocation(); + const { t, i18n } = useTranslation(); + + return location.pathname + .split('/') + .filter((key) => key) + .map((key, index, arr) => { + const tKey = arr.slice(0, index + 1).join('.'); + return [key, t(i18n.exists(`${tKey}.index`, { ns: 'title' }) ? `${tKey}.index` : tKey, { ns: 'title' })]; + }); +} diff --git a/packages/platform/src/app/components/route-header/index.ts b/packages/platform/src/app/components/route-header/index.ts new file mode 100644 index 00000000..9bcd01aa --- /dev/null +++ b/packages/platform/src/app/components/route-header/index.ts @@ -0,0 +1,3 @@ +export * from './RouteHeader'; +export * from './RouteHeaderBreadcrumb'; +export * from './RouteHeaderHeader'; diff --git a/packages/platform/src/app/hooks/index.ts b/packages/platform/src/app/hooks/index.ts index dba9a595..7e0d4f99 100644 --- a/packages/platform/src/app/hooks/index.ts +++ b/packages/platform/src/app/hooks/index.ts @@ -1,4 +1 @@ -export { useHttp } from './useHttp'; -export { useACL } from './useACL'; export { useDeviceQuery } from './useDeviceQuery'; -export { useInit } from './useInit'; diff --git a/packages/platform/src/app/hooks/useInit.ts b/packages/platform/src/app/hooks/useInit.ts deleted file mode 100644 index 43afa2f1..00000000 --- a/packages/platform/src/app/hooks/useInit.ts +++ /dev/null @@ -1,145 +0,0 @@ -import type { MenuItem } from '../../config/menu'; -import type { PREV_ROUTE_KEY } from '../../config/other'; -import type { NotificationItem, UserState } from '../../config/state'; -import type { DMenuItem } from '@react-devui/ui/components/menu'; - -import { isNull, isObject, isUndefined } from 'lodash'; -import React from 'react'; -import { useTranslation } from 'react-i18next'; -import { Link, useLocation, useNavigate } from 'react-router-dom'; - -import { MENU } from '../../config/menu'; -import { useMenuState } from '../../config/state'; -import { useNotificationState } from '../../config/state'; -import { useUserState } from '../../config/state'; -import { TOKEN, TOKEN_REFRESH, TOKEN_REFRESH_OFFSET } from '../../config/token'; -import { useACL } from './useACL'; -import { useHttp } from './useHttp'; - -let CLEAR_TOKEN_REFRESH: (() => void) | undefined; - -export function useInit() { - const { t } = useTranslation(); - const navigate = useNavigate(); - const location = useLocation(); - const from = (location.state as null | { [PREV_ROUTE_KEY]?: Location })?.from?.pathname; - const createHttp = useHttp(); - const acl = useACL(); - - const [, setUser] = useUserState(); - const [, setMenu] = useMenuState(); - const [, setNotification] = useNotificationState(); - - const refreshToken = () => { - CLEAR_TOKEN_REFRESH?.(); - const expiration = TOKEN.expiration; - if (TOKEN_REFRESH && !isNull(expiration)) { - const refresh = () => { - const [http, abort] = createHttp({ unmount: false }); - const tid = window.setTimeout(() => { - http({ - url: '/api/auth/refresh', - method: 'post', - }).subscribe({ - next: (res) => { - TOKEN.token = res; - refresh(); - }, - }); - }, expiration - Date.now() - TOKEN_REFRESH_OFFSET); - CLEAR_TOKEN_REFRESH = () => { - clearTimeout(tid); - abort(); - }; - }; - refresh(); - } - }; - - const handleUser = (user: UserState) => { - setUser(user); - - //#region ACL - acl.setFull(user.role === 'admin'); - acl.set([]); - //#endregion - - //#region Menu - const allItem: { id: string; parentSub: string[] }[] = []; - const reduceMenu = (arr: MenuItem[], parentSub: string[] = []): DMenuItem[] => { - const newArr: DMenuItem[] = []; - for (const item of arr) { - if (item.acl) { - const params = - isObject(item.acl) && 'control' in item.acl - ? item.acl - : { - control: item.acl, - }; - if (!acl.can(params.control, params.mode)) { - continue; - } - } - - const title = item.title ?? t(item.titleI18n!); - const obj: DMenuItem = { - id: item.path, - title: - item.type === 'item' - ? React.createElement(Link, { className: 'app-layout-sidebar__link', tabIndex: -1, to: item.path }, title) - : title, - icon: item.icon ? React.createElement(item.icon) : undefined, - type: item.type, - }; - - if (item.children) { - obj.children = reduceMenu(item.children, parentSub.concat(item.type === 'sub' ? [item.path] : [])); - if (obj.children.length > 0) { - newArr.push(obj); - } - } else { - newArr.push(obj); - allItem.push({ id: item.path, parentSub }); - } - } - return newArr; - }; - - const menu = reduceMenu(MENU); - const toFirstItem = () => { - setMenu({ menu, expands: allItem[0].parentSub }); - navigate(allItem[0].id, { replace: true }); - }; - if (isUndefined(from)) { - toFirstItem(); - } else { - const findIndex = allItem.findIndex((item) => item.id === from); - if (findIndex === -1) { - toFirstItem(); - } else { - setMenu({ menu, expands: allItem[findIndex].parentSub }); - navigate(from, { replace: true }); - } - } - //#endregion - }; - - const getNotification = () => { - setNotification(undefined); - const [http] = createHttp({ unmount: false }); - http({ - url: '/api/notification', - method: 'get', - }).subscribe({ - next: (res) => { - setNotification(res); - }, - }); - }; - - return (user: UserState) => { - refreshToken(); - handleUser(user); - getNotification(); - }; -} diff --git a/packages/platform/src/app/routes/Exception.tsx b/packages/platform/src/app/routes/Exception.tsx deleted file mode 100644 index 93a1f9bd..00000000 --- a/packages/platform/src/app/routes/Exception.tsx +++ /dev/null @@ -1,5 +0,0 @@ -export default function Exception(props: { status: number }): JSX.Element | null { - const { status } = props; - - return
{status}
; -} diff --git a/packages/platform/src/app/routes/dashboard/AMap.tsx b/packages/platform/src/app/routes/dashboard/AMap.tsx new file mode 100644 index 00000000..97e612cb --- /dev/null +++ b/packages/platform/src/app/routes/dashboard/AMap.tsx @@ -0,0 +1,3 @@ +export default function AMap(): JSX.Element | null { + return
AMap
; +} diff --git a/packages/platform/src/app/routes/dashboard/Amap.tsx b/packages/platform/src/app/routes/dashboard/Amap.tsx deleted file mode 100644 index 5f04fac8..00000000 --- a/packages/platform/src/app/routes/dashboard/Amap.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function Amap(): JSX.Element | null { - return
Amap
; -} diff --git a/packages/platform/src/app/routes/dashboard/ECharts.tsx b/packages/platform/src/app/routes/dashboard/ECharts.tsx new file mode 100644 index 00000000..73b62937 --- /dev/null +++ b/packages/platform/src/app/routes/dashboard/ECharts.tsx @@ -0,0 +1,3 @@ +export default function ECharts(): JSX.Element | null { + return
ECharts
; +} diff --git a/packages/platform/src/app/routes/dashboard/Echarts.tsx b/packages/platform/src/app/routes/dashboard/Echarts.tsx deleted file mode 100644 index 968d9880..00000000 --- a/packages/platform/src/app/routes/dashboard/Echarts.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function Echarts(): JSX.Element | null { - return
Echarts
; -} diff --git a/packages/platform/src/app/routes/exception/Exception.module.scss b/packages/platform/src/app/routes/exception/Exception.module.scss new file mode 100644 index 00000000..079d0a3d --- /dev/null +++ b/packages/platform/src/app/routes/exception/Exception.module.scss @@ -0,0 +1,56 @@ +@import '~styles/module'; + +@include b(exception) { + display: flex; + flex-direction: row; + gap: 20px 100px; + justify-content: center; + width: 100%; + padding: 10% 20px 20px; + + @include m(phone) { + flex-direction: column; + align-items: center; + + @include e(info) { + align-items: center; + } + + @include e(status) { + /* stylelint-disable-next-line declaration-property-value-allowed-list */ + font-size: 56px; + } + + @include e(description) { + text-align: center; + } + } + + @include e(bg) { + width: calc(100% - 40px); + max-width: 320px; + } + + @include e(info) { + display: inline-flex; + flex-direction: column; + align-items: flex-start; + align-self: stretch; + justify-content: center; + } + + @include e(status) { + margin-bottom: 12px; + /* stylelint-disable-next-line declaration-property-value-allowed-list */ + font-size: 64px; + font-weight: 500; + font-variant-numeric: tabular-nums; + } + + @include e(description) { + margin-bottom: 16px; + /* stylelint-disable-next-line declaration-property-value-allowed-list */ + font-size: 24px; + color: var(--d-text-color-sub); + } +} diff --git a/packages/platform/src/app/routes/exception/Exception.tsx b/packages/platform/src/app/routes/exception/Exception.tsx new file mode 100644 index 00000000..c158bd8a --- /dev/null +++ b/packages/platform/src/app/routes/exception/Exception.tsx @@ -0,0 +1,36 @@ +import { useTranslation } from 'react-i18next'; +import { useNavigate } from 'react-router-dom'; + +import { DButton } from '@react-devui/ui'; +import { getClassName } from '@react-devui/utils'; + +import { useDeviceQuery } from '../../hooks'; +import styles from './Exception.module.scss'; + +export default function Exception(props: { status: number }): JSX.Element | null { + const { status } = props; + const { t } = useTranslation(); + const navigate = useNavigate(); + const deviceMatched = useDeviceQuery(); + + return ( +
+ bg +
+
{status}
+
{t(`routes.exception.${status}`)}
+ { + navigate('/', { replace: true }); + }} + > + {t('routes.exception.Back Home')} + +
+
+ ); +} diff --git a/packages/platform/src/app/routes/layout/Layout.module.scss b/packages/platform/src/app/routes/layout/Layout.module.scss new file mode 100644 index 00000000..c8463072 --- /dev/null +++ b/packages/platform/src/app/routes/layout/Layout.module.scss @@ -0,0 +1,10 @@ +@import '~styles/module'; + +@include b(layout) { + position: absolute; + right: 0; + bottom: 0; + height: calc(100% - 64px); + overflow: auto; + transition: width var(--d-animation-duration-base) linear; +} diff --git a/packages/platform/src/app/routes/layout/Layout.tsx b/packages/platform/src/app/routes/layout/Layout.tsx index 235787a6..b10be7c2 100644 --- a/packages/platform/src/app/routes/layout/Layout.tsx +++ b/packages/platform/src/app/routes/layout/Layout.tsx @@ -2,8 +2,9 @@ import { useState } from 'react'; import { Outlet } from 'react-router-dom'; import { useDeviceQuery } from '../../hooks'; -import { AppSidebar } from './Sidebar'; +import styles from './Layout.module.scss'; import { AppHeader } from './header/Header'; +import { AppSidebar } from './sidebar/Sidebar'; export interface AppLayoutProps { sidebar?: { @@ -26,7 +27,7 @@ export default function Layout(props: AppLayoutProps): JSX.Element | null {
diff --git a/packages/platform/src/app/routes/layout/Sidebar.tsx b/packages/platform/src/app/routes/layout/Sidebar.tsx deleted file mode 100644 index 9e635dd7..00000000 --- a/packages/platform/src/app/routes/layout/Sidebar.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import React from 'react'; -import { useLocation } from 'react-router-dom'; - -import { DDrawer, DMenu } from '@react-devui/ui'; - -import { useMenuState } from '../../../config/state'; -import { useDeviceQuery } from '../../hooks'; - -export interface AppSidebarProps { - menuOpen: boolean; - onMenuOpenChange: (open: boolean) => void; -} - -export function AppSidebar(props: AppSidebarProps): JSX.Element | null { - const { menuOpen, onMenuOpenChange } = props; - - const deviceMatched = useDeviceQuery(); - - const [{ menu, expands }, setMenu] = useMenuState(); - const location = useLocation(); - const menuNode = ( - { - setMenu((draft) => { - draft.expands = ids; - }); - }} - > - ); - - return deviceMatched === 'phone' ? ( - - {menuNode} - - ) : ( -
{React.cloneElement(menuNode, { dMode: menuOpen ? 'vertical' : 'icon' })}
- ); -} diff --git a/packages/platform/src/app/routes/layout/header/Header.module.scss b/packages/platform/src/app/routes/layout/header/Header.module.scss new file mode 100644 index 00000000..49835cd0 --- /dev/null +++ b/packages/platform/src/app/routes/layout/header/Header.module.scss @@ -0,0 +1,67 @@ +@use 'sass:map'; +@import '~styles/module'; + +@include b(header) { + position: relative; + z-index: 910; + display: flex; + align-items: center; + width: 100%; + height: 64px; + padding: 0 16px 0 0; + color: map.get($colors, 'white'); + /* stylelint-disable-next-line declaration-property-value-allowed-list */ + background-color: #001529; + box-shadow: 0 2px 8px 0 var(--d-shadow-color); + + @include e(logo-container) { + display: inline-flex; + align-items: center; + font: inherit; + color: inherit; + text-decoration: none; + } + + @include e(logo) { + display: inline-flex; + justify-content: center; + width: 64px; + } + + @include e(logo-title-wrapper) { + overflow: hidden; + } + + @include e(logo-title) { + white-space: nowrap; + transition: width var(--d-animation-duration-base) linear; + transform-origin: left; + + @include font-size(1.5rem); + } + + @include e(button) { + @include utils-button(true); + + align-self: stretch; + padding: 0 12px; + margin: 0; + /* stylelint-disable-next-line declaration-property-value-allowed-list */ + font-size: 18px; + color: inherit; + text-decoration: none; + background-color: transparent; + border: none; + transition: background-color var(--d-animation-duration-base) linear; + + &:hover { + /* stylelint-disable-next-line declaration-property-value-allowed-list */ + background-color: rgb(255 255 255 / 20%); + } + + &:active { + /* stylelint-disable-next-line declaration-property-value-allowed-list */ + background-color: rgb(255 255 255 / 14%); + } + } +} diff --git a/packages/platform/src/app/routes/layout/header/Header.tsx b/packages/platform/src/app/routes/layout/header/Header.tsx index 5aec49d4..407abe5e 100644 --- a/packages/platform/src/app/routes/layout/header/Header.tsx +++ b/packages/platform/src/app/routes/layout/header/Header.tsx @@ -9,8 +9,9 @@ import { DCustomIcon, MenuFoldOutlined, MenuUnfoldOutlined, SearchOutlined } fro import { AppLanguage } from '../../../components'; import { useDeviceQuery } from '../../../hooks'; -import { AppNotification } from './Notification'; -import { AppUser } from './User'; +import styles from './Header.module.scss'; +import { AppNotification } from './notification/Notification'; +import { AppUser } from './user/User'; export interface AppHeaderProps { sidebarWidth: number; @@ -21,36 +22,39 @@ export interface AppHeaderProps { export function AppHeader(props: AppHeaderProps): JSX.Element | null { const { sidebarWidth, menuOpen, onMenuOpenChange } = props; - const textRef = useRef(null); + const textRef = useRef(null); const { t } = useTranslation(); const deviceMatched = useDeviceQuery(); const [theme, setTheme] = useLocalStorage('theme', 'light'); useEffect(() => { if (menuOpen && textRef.current) { - const maxWidth = sidebarWidth - 64; - if (textRef.current.clientWidth > maxWidth) { - textRef.current.style.cssText = `transform:scale(${maxWidth / textRef.current.clientWidth});`; + const maxWidth = sidebarWidth - 64 - 14; + if (textRef.current.scrollWidth > maxWidth) { + textRef.current.style.transform = `scale(${maxWidth / textRef.current.scrollWidth})`; + } else { + textRef.current.style.transform = ''; } } }); return ( -
- -
+
+ +
Logo
- - DevUI - +
+ RD-Platform +
+
- - - - + + +
); } diff --git a/packages/platform/src/app/routes/layout/header/notification/Notification.module.scss b/packages/platform/src/app/routes/layout/header/notification/Notification.module.scss new file mode 100644 index 00000000..817712cf --- /dev/null +++ b/packages/platform/src/app/routes/layout/header/notification/Notification.module.scss @@ -0,0 +1,42 @@ +@import '~styles/module'; + +@include b(notification) { + :global .d-popover__body { + width: 320px; + padding: 0; + } + + @include m(spinner) { + :global .d-popover__body { + width: unset; + padding: 16px 32px; + } + } + + @include e(item) { + padding-right: 16px; + padding-left: 16px; + cursor: pointer; + transition: background-color var(--d-animation-duration-base) linear; + + &:hover { + background-color: var(--d-background-color-hover); + } + + @include m(read) { + pointer-events: none; + filter: opacity(50%); + } + } + + @include e(actions) { + display: flex; + align-items: stretch; + height: 44px; + border-top: 1px solid var(--d-color-divider); + + :global .d-button { + flex-grow: 1; + } + } +} diff --git a/packages/platform/src/app/routes/layout/header/Notification.tsx b/packages/platform/src/app/routes/layout/header/notification/Notification.tsx similarity index 74% rename from packages/platform/src/app/routes/layout/header/Notification.tsx rename to packages/platform/src/app/routes/layout/header/notification/Notification.tsx index 24201b55..99e779a8 100644 --- a/packages/platform/src/app/routes/layout/header/Notification.tsx +++ b/packages/platform/src/app/routes/layout/header/notification/Notification.tsx @@ -8,10 +8,11 @@ import { BellOutlined, LoadingOutlined } from '@react-devui/icons'; import { DAvatar, DBadge, DButton, DPopover, DSeparator, DTabs } from '@react-devui/ui'; import { getClassName } from '@react-devui/utils'; -import { useNotificationState } from '../../../../config/state'; -import { AppList } from '../../../components'; +import { useNotificationState } from '../../../../../config/state'; +import { AppList } from '../../../../components'; +import styles from './Notification.module.scss'; -export function AppNotification(): JSX.Element | null { +export function AppNotification(props: React.ButtonHTMLAttributes): JSX.Element | null { const [notification] = useNotificationState(); const { t } = useTranslation(); const tabsRef = useRef(null); @@ -28,8 +29,8 @@ export function AppNotification(): JSX.Element | null { return ( ({ + aList={notify.list.map((item) => ({ avatar: , title: 'name', description: item.message, props: { - className: getClassName('app-layout-header__notification-item', { - 'app-layout-header__notification-item--read': item.read, + className: getClassName(styles['app-notification__item'], { + [styles['app-notification__item--read']]: item.read, }), }, }))} @@ -58,7 +59,7 @@ export function AppNotification(): JSX.Element | null { }))} dCenter /> -
+
{t('routes.layout.Clear notifications')} {t('routes.layout.See more')} @@ -76,7 +77,7 @@ export function AppNotification(): JSX.Element | null { } }} > - diff --git a/packages/platform/src/app/routes/layout/sidebar/Sidebar.module.scss b/packages/platform/src/app/routes/layout/sidebar/Sidebar.module.scss new file mode 100644 index 00000000..a530dc53 --- /dev/null +++ b/packages/platform/src/app/routes/layout/sidebar/Sidebar.module.scss @@ -0,0 +1,35 @@ +@import '~styles/module'; + +@include b(sidebar) { + position: absolute; + bottom: 0; + left: 0; + z-index: 5; + height: calc(100% - 64px); + padding: 0; + overflow: auto; + background-color: var(--d-background-color); + box-shadow: -2px 0 8px 0 var(--d-shadow-color); + + @include e(menu) { + width: 200px; + + a { + font: inherit; + color: inherit; + text-decoration: none; + + &::after { + position: absolute; + inset: 0; + content: ''; + } + } + } + + @include e(drawer) { + :global .d-drawer__body { + padding: 0; + } + } +} diff --git a/packages/platform/src/app/routes/layout/sidebar/Sidebar.tsx b/packages/platform/src/app/routes/layout/sidebar/Sidebar.tsx new file mode 100644 index 00000000..d75cd4ef --- /dev/null +++ b/packages/platform/src/app/routes/layout/sidebar/Sidebar.tsx @@ -0,0 +1,65 @@ +import { isUndefined } from 'lodash'; +import { useLocation } from 'react-router-dom'; + +import { useIsomorphicLayoutEffect } from '@react-devui/hooks'; +import { DDrawer, DMenu } from '@react-devui/ui'; + +import { useMenuExpandsState } from '../../../../config/state'; +import { useMenu } from '../../../../core'; +import { useDeviceQuery } from '../../../hooks'; +import styles from './Sidebar.module.scss'; + +export interface AppSidebarProps { + menuOpen: boolean; + onMenuOpenChange: (open: boolean) => void; +} + +export function AppSidebar(props: AppSidebarProps): JSX.Element | null { + const { menuOpen, onMenuOpenChange } = props; + + const deviceMatched = useDeviceQuery(); + + const [menu, allItem] = useMenu(); + const location = useLocation(); + + const [expands, setExpands] = useMenuExpandsState(); + const hasInit = !isUndefined(expands); + const active = location.pathname; + + useIsomorphicLayoutEffect(() => { + if (!hasInit) { + const findIndex = allItem.findIndex((item) => item.id === active); + if (findIndex !== -1) { + setExpands(allItem[findIndex].parentSub); + } + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [hasInit]); + + const menuNode = (phone: boolean) => { + return hasInit ? ( + + ) : null; + }; + + return deviceMatched === 'phone' ? ( + + {menuNode(true)} + + ) : ( +
{menuNode(false)}
+ ); +} diff --git a/packages/platform/src/styles/routes/login.scss b/packages/platform/src/app/routes/login/Login.module.scss similarity index 96% rename from packages/platform/src/styles/routes/login.scss rename to packages/platform/src/app/routes/login/Login.module.scss index 3d82287f..2c77bd2d 100644 --- a/packages/platform/src/styles/routes/login.scss +++ b/packages/platform/src/app/routes/login/Login.module.scss @@ -1,6 +1,7 @@ @use 'sass:map'; +@import '~styles/module'; -@include b(login-route) { +@include b(login) { display: flex; flex-direction: column; align-items: center; diff --git a/packages/platform/src/app/routes/Login.tsx b/packages/platform/src/app/routes/login/Login.tsx similarity index 78% rename from packages/platform/src/app/routes/Login.tsx rename to packages/platform/src/app/routes/login/Login.tsx index 8948f663..bdb02e0f 100644 --- a/packages/platform/src/app/routes/Login.tsx +++ b/packages/platform/src/app/routes/login/Login.tsx @@ -1,16 +1,20 @@ -import type { UserState } from '../../config/state'; +import type { PREV_ROUTE_KEY } from '../../../config/other'; +import type { UserState } from '../../../config/state'; import { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; +import { useLocation, useNavigate } from 'react-router-dom'; import { useAsync } from '@react-devui/hooks'; import { LockOutlined, MobileOutlined, UserOutlined } from '@react-devui/icons'; import { DButton, DCheckbox, DForm, DInput, DTabs, FormControl, FormGroup, useForm, Validators } from '@react-devui/ui'; import { getClassName } from '@react-devui/utils'; -import { TOKEN } from '../../config/token'; -import { AppLanguage } from '../components'; -import { useDeviceQuery, useHttp, useInit } from '../hooks'; +import { TOKEN } from '../../../config/token'; +import { useHttp, useInit } from '../../../core'; +import { AppLanguage } from '../../components'; +import { useDeviceQuery } from '../../hooks'; +import styles from './Login.module.scss'; export default function Login(): JSX.Element | null { const { t } = useTranslation(); @@ -19,6 +23,9 @@ export default function Login(): JSX.Element | null { const init = useInit(); const async = useAsync(); const deviceMatched = useDeviceQuery(); + const location = useLocation(); + const from = (location.state as null | { [PREV_ROUTE_KEY]?: Location })?.from?.pathname; + const navigate = useNavigate(); const [loginType, setLoginType] = useState<'account' | 'phone'>('account'); const [remember, setRemember] = useState(true); @@ -34,10 +41,10 @@ export default function Login(): JSX.Element | null { const [accountForm, updateAccountForm] = useForm( () => new FormGroup({ - username: new FormControl('admin', [ + username: new FormControl('', [ Validators.required, (control) => { - return !control.value || control.value === 'admin' ? null : { checkValue: true }; + return control.value && control.value !== 'admin' && control.value !== 'user' ? { checkValue: true } : null; }, ]), password: new FormControl('', Validators.required), @@ -71,11 +78,13 @@ export default function Login(): JSX.Element | null { http<{ user: UserState; token: string }>({ url: '/api/login', method: 'post', + data: { username: accountForm.get('username').value }, }).subscribe({ next: (res) => { setLoginLoading(false); TOKEN.token = res.token; init(res.user); + navigate(from ?? '/', { replace: true }); }, }); }} @@ -89,18 +98,18 @@ export default function Login(): JSX.Element | null { ); return ( -
- +
+
- {deviceMatched === 'desktop' && bg} -
-
- Logo - React DevUI + {deviceMatched === 'desktop' && bg} +
+
+ Logo + RD-Platform
-
{t('routes.login.description')}
+
{t('routes.login.description')}
@@ -181,7 +190,7 @@ export default function Login(): JSX.Element | null { Xie Jay
-
+ diff --git a/packages/platform/src/app/routes/test/acl/ACL.module.scss b/packages/platform/src/app/routes/test/acl/ACL.module.scss new file mode 100644 index 00000000..ce0288c4 --- /dev/null +++ b/packages/platform/src/app/routes/test/acl/ACL.module.scss @@ -0,0 +1,15 @@ +@import '~styles/module'; + +@include b(acl) { + @include app-route; + + :global .d-card { + margin-top: 20px; + } + + @include e(button-container) { + display: flex; + flex-wrap: wrap; + gap: 8px 20px; + } +} diff --git a/packages/platform/src/app/routes/test/acl/ACL.tsx b/packages/platform/src/app/routes/test/acl/ACL.tsx new file mode 100644 index 00000000..5ceff4e2 --- /dev/null +++ b/packages/platform/src/app/routes/test/acl/ACL.tsx @@ -0,0 +1,57 @@ +import React from 'react'; +import { useTranslation } from 'react-i18next'; +import { useNavigate } from 'react-router-dom'; + +import { DAlert, DButton, DCard, DTag } from '@react-devui/ui'; + +import { useACL } from '../../../../core'; +import { AppRouteHeader } from '../../../components'; +import styles from './ACL.module.scss'; + +export default function ACL(): JSX.Element | null { + const acl = useACL(); + const { t } = useTranslation(); + const navigate = useNavigate(); + + return ( + <> + + + + +
+ + + {t('routes.test.acl.ACL Data')} + + {JSON.stringify({ + full: acl.full, + controls: acl.controls, + controlMode: acl.controlMode, + })} + + + + +
+ {[0, 1].map((control) => ( + {acl.can(control) && control-{control}} + ))} +
+
+
+ + + { + navigate('/dashboard/amap'); + }} + > + {t('routes.test.acl.Test Route Guard')} + + + +
+ + ); +} diff --git a/packages/platform/src/app/routes/test/http/Http.module.scss b/packages/platform/src/app/routes/test/http/Http.module.scss new file mode 100644 index 00000000..c4e7817a --- /dev/null +++ b/packages/platform/src/app/routes/test/http/Http.module.scss @@ -0,0 +1,11 @@ +@import '~styles/module'; + +@include b(http) { + @include app-route; + + @include e(button-container) { + display: flex; + flex-wrap: wrap; + gap: 8px 20px; + } +} diff --git a/packages/platform/src/app/routes/test/http/Http.tsx b/packages/platform/src/app/routes/test/http/Http.tsx new file mode 100644 index 00000000..5edb9b03 --- /dev/null +++ b/packages/platform/src/app/routes/test/http/Http.tsx @@ -0,0 +1,41 @@ +import { DButton, DCard } from '@react-devui/ui'; + +import { useHttp } from '../../../../core'; +import { AppRouteHeader } from '../../../components'; +import styles from './Http.module.scss'; + +export default function Http(): JSX.Element | null { + const createHttp = useHttp(); + + return ( + <> + + + + +
+ + +
+ {[401, 403, 404, 500].map((status) => ( + { + const [http] = createHttp(); + http({ + url: '/api/test/http', + method: 'post', + data: { status }, + }).subscribe(); + }} + > + {status} + + ))} +
+
+
+
+ + ); +} diff --git a/packages/platform/src/app/utils/base64url.ts b/packages/platform/src/app/utils/base64url.ts index 46aa17f5..68f07afd 100644 --- a/packages/platform/src/app/utils/base64url.ts +++ b/packages/platform/src/app/utils/base64url.ts @@ -3,7 +3,13 @@ export const base64url = { return window.btoa(str).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); }, decode: (str: string) => { - str = (str + '===').slice(0, str.length + (str.length % 4)); - return window.atob(str.replace(/-/g, '+').replace(/_/g, '/')); + str = str.replace(/-/g, '+').replace(/_/g, '/'); + const remainder = str.length % 4; + if (remainder !== 0) { + str += Array.from({ length: 4 - remainder }) + .fill('=') + .join(''); + } + return window.atob(str); }, }; diff --git a/packages/platform/src/app/utils/index.ts b/packages/platform/src/app/utils/index.ts index c05c6f2e..7df55c44 100644 --- a/packages/platform/src/app/utils/index.ts +++ b/packages/platform/src/app/utils/index.ts @@ -1 +1,2 @@ export { base64url } from './base64url'; +export { registerRouteMate } from './registerRouteMate'; diff --git a/packages/platform/src/app/utils/registerRouteMate.ts b/packages/platform/src/app/utils/registerRouteMate.ts new file mode 100644 index 00000000..52a7ab82 --- /dev/null +++ b/packages/platform/src/app/utils/registerRouteMate.ts @@ -0,0 +1,13 @@ +interface RouteMate { + CLASS_ROUTE: string; + CLASS_PREFIX: string; +} + +export function registerRouteMate(mate: { NAME: N }): RouteMate { + const { NAME } = mate; + + return { + CLASS_ROUTE: `app-${NAME}-route`, + CLASS_PREFIX: `app-${NAME}-route__`, + }; +} diff --git a/packages/platform/src/assets/403.svg b/packages/platform/src/assets/403.svg new file mode 100644 index 00000000..610f136f --- /dev/null +++ b/packages/platform/src/assets/403.svg @@ -0,0 +1,508 @@ + + + + Group 9 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/platform/src/assets/404.svg b/packages/platform/src/assets/404.svg new file mode 100644 index 00000000..5531d05c --- /dev/null +++ b/packages/platform/src/assets/404.svg @@ -0,0 +1,314 @@ + + + + Group 4 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/platform/src/assets/500.svg b/packages/platform/src/assets/500.svg new file mode 100644 index 00000000..de723b1e --- /dev/null +++ b/packages/platform/src/assets/500.svg @@ -0,0 +1,208 @@ + + + + Group 4 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/platform/src/config/acl.ts b/packages/platform/src/config/acl.ts index 0e1ec0ea..573cce8a 100644 --- a/packages/platform/src/config/acl.ts +++ b/packages/platform/src/config/acl.ts @@ -3,4 +3,8 @@ export const ROUTES_ACL = { amap: 'routes.dashboard.amap', echarts: 'routes.dashboard.echarts', }, + test: { + acl: 'routes.test.acl', + http: 'routes.test.http', + }, }; diff --git a/packages/platform/src/config/menu.ts b/packages/platform/src/config/menu.ts index 9389dc44..a47c95c0 100644 --- a/packages/platform/src/config/menu.ts +++ b/packages/platform/src/config/menu.ts @@ -1,13 +1,11 @@ -import type { Control, ControlMode } from '../app/hooks/useACL'; +import type { Control, ControlMode } from '../core/useACL'; -import { DashboardOutlined, ExceptionOutlined } from '@react-devui/icons'; +import { DashboardOutlined, ExceptionOutlined, ExperimentOutlined } from '@react-devui/icons'; import { ROUTES_ACL } from './acl'; export interface MenuItem { path: string; - title?: string; - titleI18n?: string; type: 'item' | 'group' | 'sub'; icon?: React.FunctionComponent; disabled?: boolean; @@ -24,43 +22,53 @@ export interface MenuItem { export const MENU: MenuItem[] = [ { path: '/dashboard', - titleI18n: 'Dashboard', type: 'sub', icon: DashboardOutlined, children: [ { path: '/dashboard/amap', - titleI18n: 'Amap', type: 'item', acl: ROUTES_ACL.dashboard.amap, }, { path: '/dashboard/echarts', - titleI18n: 'Echarts', type: 'item', acl: ROUTES_ACL.dashboard.echarts, }, ], }, + { + path: '/test', + type: 'sub', + icon: ExperimentOutlined, + children: [ + { + path: '/test/acl', + type: 'item', + acl: ROUTES_ACL.test.acl, + }, + { + path: '/test/http', + type: 'item', + acl: ROUTES_ACL.test.http, + }, + ], + }, { path: '/exception', - titleI18n: 'Exception', type: 'sub', icon: ExceptionOutlined, children: [ { path: '/exception/403', - titleI18n: '403', type: 'item', }, { path: '/exception/404', - titleI18n: '404', type: 'item', }, { path: '/exception/500', - titleI18n: '500', type: 'item', }, ], diff --git a/packages/platform/src/config/mock.ts b/packages/platform/src/config/mock.ts index a627e627..6f509708 100644 --- a/packages/platform/src/config/mock.ts +++ b/packages/platform/src/config/mock.ts @@ -1,19 +1,38 @@ import type { NotificationItem, UserState } from './state'; +import type { JWTToken, TokenPayload } from './token'; import axios from 'axios'; import MockAdapter from 'axios-mock-adapter'; import { base64url } from '../app/utils'; import { environment } from '../environments'; +import { ROUTES_ACL } from './acl'; +import { TOKEN } from './token'; if (environment.mock) { - const mock = new MockAdapter(axios, { delayResponse: 500 }); - const user: UserState = { + const mock = new MockAdapter(axios); + const withDelay = + (delay: number, response: T) => + () => { + return new Promise((resolve) => { + setTimeout(() => { + resolve(response); + }, delay); + }); + }; + + const admin: UserState = { name: 'admin', avatar: '/assets/avatar.png', role: 'admin', permission: [], }; + const user: UserState = { + name: 'user', + avatar: '/assets/avatar.png', + role: 'user', + permission: [0, ROUTES_ACL.test.acl, ROUTES_ACL.test.http], + }; const notification: NotificationItem[] = [ { id: '1', @@ -32,21 +51,38 @@ if (environment.mock) { }, ]; - mock.onPost('/api/login').reply(200, { - user, - token: `${base64url.encode(JSON.stringify({}))}.${base64url.encode( - JSON.stringify({ exp: ~~(Date.now() / 1000) + 6 * 60 * 60 }) - )}.signature`, - }); + mock.onGet('/api/notification').reply(withDelay(500, [200, notification])); + + mock + .onGet('/api/auth/me') + .reply(withDelay(500, [200, (TOKEN as JWTToken).payload?.admin ? admin : user])); + + for (const username of ['admin', 'user']) { + mock.onPost('/api/login', { username }).reply( + withDelay(500, [ + 200, + { + user: username === 'admin' ? admin : user, + token: `${base64url.encode(JSON.stringify({}))}.${base64url.encode( + JSON.stringify({ exp: ~~(Date.now() / 1000) + 6 * 60 * 60, admin: username === 'admin' }) + )}.signature`, + }, + ]) + ); + } mock .onPost('/api/auth/refresh') .reply( - 200, - `${base64url.encode(JSON.stringify({}))}.${base64url.encode(JSON.stringify({ exp: ~~(Date.now() / 1000) + 6 * 60 * 60 }))}.signature` + withDelay(500, [ + 200, + `${base64url.encode(JSON.stringify({}))}.${base64url.encode( + JSON.stringify({ exp: ~~(Date.now() / 1000) + 6 * 60 * 60 }) + )}.signature`, + ]) ); - mock.onGet('/api/auth/me').reply(200, user); - - mock.onGet('/api/notification').reply(200, notification); + for (const status of [401, 403, 404, 500]) { + mock.onPost('/api/test/http', { status }).reply(status); + } } diff --git a/packages/platform/src/config/state.ts b/packages/platform/src/config/state.ts index 492c8e14..b673f555 100644 --- a/packages/platform/src/config/state.ts +++ b/packages/platform/src/config/state.ts @@ -1,12 +1,10 @@ -import type { DMenuItem } from '@react-devui/ui/components/menu'; - import { createGlobalState } from '@react-devui/hooks'; export interface UserState { name: string; avatar: string; - role: 'admin'; - permission: string[]; + role: 'admin' | 'user'; + permission: (string | number)[]; } export const useUserState = createGlobalState(); @@ -20,8 +18,4 @@ export interface NotificationItem { } export const useNotificationState = createGlobalState(); -export interface MenuState { - menu: DMenuItem[]; - expands: string[]; -} -export const useMenuState = createGlobalState({ menu: [], expands: [] }); +export const useMenuExpandsState = createGlobalState(); diff --git a/packages/platform/src/config/token.ts b/packages/platform/src/config/token.ts index 14cf3658..b2579821 100644 --- a/packages/platform/src/config/token.ts +++ b/packages/platform/src/config/token.ts @@ -30,7 +30,7 @@ interface TokenInterface { expiration: number | null; } -class Token { +export class Token { public get token(): string | null { if (typeof window === 'undefined') { return null; @@ -48,14 +48,16 @@ class Token { } } -class JWTToken extends Token implements TokenInterface { - public get expiration(): number | null { +export class JWTToken extends Token implements TokenInterface { + public get payload(): T | null { if (isNull(this.token)) { return null; } const [, payload] = this.token.split('.'); - const { exp } = JSON.parse(base64url.decode(payload)) as TokenPayload; - return exp * 1000; + return JSON.parse(base64url.decode(payload)); + } + public get expiration(): number | null { + return this.payload ? this.payload.exp * 1000 : null; } public set expiration(val: number | null) { throw new Error('You should not change `expiration` when use JWT!'); diff --git a/packages/platform/src/core/index.ts b/packages/platform/src/core/index.ts new file mode 100644 index 00000000..8493e0ab --- /dev/null +++ b/packages/platform/src/core/index.ts @@ -0,0 +1,4 @@ +export { useHttp } from './useHttp'; +export { useACL } from './useACL'; +export { useInit } from './useInit'; +export { useMenu } from './useMenu'; diff --git a/packages/platform/src/app/hooks/useACL.ts b/packages/platform/src/core/useACL.ts similarity index 100% rename from packages/platform/src/app/hooks/useACL.ts rename to packages/platform/src/core/useACL.ts diff --git a/packages/platform/src/app/hooks/useHttp.ts b/packages/platform/src/core/useHttp.ts similarity index 57% rename from packages/platform/src/app/hooks/useHttp.ts rename to packages/platform/src/core/useHttp.ts index 666f2521..4fc107c2 100644 --- a/packages/platform/src/app/hooks/useHttp.ts +++ b/packages/platform/src/core/useHttp.ts @@ -3,19 +3,27 @@ import type { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios'; import axios from 'axios'; import { isNull } from 'lodash'; import { useCallback, useRef } from 'react'; -import { catchError, map, throwError } from 'rxjs'; +import { useTranslation } from 'react-i18next'; +import { useLocation, useNavigate } from 'react-router-dom'; +import { catchError, EMPTY, map, throwError } from 'rxjs'; import { from } from 'rxjs'; import { Subject, takeUntil } from 'rxjs'; import { useUnmount } from '@react-devui/hooks'; +import { ToastService } from '@react-devui/ui'; -import '../../config/mock'; -import { TOKEN } from '../../config/token'; -import { environment } from '../../environments'; +import '../config/mock'; +import { LOGIN_PATH, PREV_ROUTE_KEY } from '../config/other'; +import { TOKEN } from '../config/token'; +import { environment } from '../environments'; export function useHttp() { const abortFns = useRef(new Set<() => void>()); + const navigate = useNavigate(); + const location = useLocation(); + const { t } = useTranslation(); + useUnmount(() => { for (const abort of abortFns.current) { abort(); @@ -55,13 +63,28 @@ export function useHttp() { takeUntil(onDestroy$), catchError((error: AxiosError) => { if (error.response) { - console.log(error.response.data); - console.log(error.response.status); - console.log(error.response.headers); + switch (error.response.status) { + case 401: + ToastService.open({ + dContent: t('Not logged in or logged in has expired'), + dType: 'error', + }); + navigate(LOGIN_PATH, { state: { [PREV_ROUTE_KEY]: location } }); + return EMPTY; + + case 403: + case 404: + case 500: + navigate(`/exception/${error.response.status}`); + return EMPTY; + + default: + break; + } } else if (error.request) { - console.log(error.request); + // The request was made but no response was received. } else { - console.error(error); + // Something happened in setting up the request that triggered an Error. } return throwError(() => error); }), diff --git a/packages/platform/src/core/useInit.ts b/packages/platform/src/core/useInit.ts new file mode 100644 index 00000000..b7356f4c --- /dev/null +++ b/packages/platform/src/core/useInit.ts @@ -0,0 +1,73 @@ +import type { NotificationItem, UserState } from '../config/state'; + +import { isNull } from 'lodash'; + +import { useNotificationState } from '../config/state'; +import { useUserState } from '../config/state'; +import { TOKEN, TOKEN_REFRESH, TOKEN_REFRESH_OFFSET } from '../config/token'; +import { useACL } from './useACL'; +import { useHttp } from './useHttp'; + +let CLEAR_TOKEN_REFRESH: (() => void) | undefined; + +export function useInit() { + const createHttp = useHttp(); + const acl = useACL(); + + const [, setUser] = useUserState(); + const [, setNotification] = useNotificationState(); + + const refreshToken = () => { + CLEAR_TOKEN_REFRESH?.(); + const expiration = TOKEN.expiration; + if (TOKEN_REFRESH && !isNull(expiration)) { + const refresh = () => { + const [http, abort] = createHttp({ unmount: false }); + const tid = window.setTimeout(() => { + http({ + url: '/api/auth/refresh', + method: 'post', + }).subscribe({ + next: (res) => { + TOKEN.token = res; + refresh(); + }, + }); + }, expiration - Date.now() - TOKEN_REFRESH_OFFSET); + CLEAR_TOKEN_REFRESH = () => { + clearTimeout(tid); + abort(); + }; + }; + refresh(); + } + }; + + const handleUser = (user: UserState) => { + setUser(user); + + //#region ACL + acl.setFull(user.role === 'admin'); + acl.set(user.permission); + //#endregion + }; + + const getNotification = () => { + setNotification(undefined); + const [http] = createHttp({ unmount: false }); + http({ + url: '/api/notification', + method: 'get', + }).subscribe({ + next: (res) => { + setNotification(res); + }, + }); + }; + + return (user: UserState) => { + refreshToken(); + handleUser(user); + getNotification(); + }; +} diff --git a/packages/platform/src/core/useMenu.ts b/packages/platform/src/core/useMenu.ts new file mode 100644 index 00000000..486c67b0 --- /dev/null +++ b/packages/platform/src/core/useMenu.ts @@ -0,0 +1,72 @@ +import type { MenuItem } from '../config/menu'; +import type { DMenuItem } from '@react-devui/ui/components/menu'; + +import { isObject, isUndefined } from 'lodash'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; +import { Link, useNavigate } from 'react-router-dom'; + +import { NotificationService } from '@react-devui/ui'; + +import { MENU } from '../config/menu'; +import { LOGIN_PATH } from '../config/other'; +import { useACL } from './useACL'; + +export function useMenu() { + const acl = useACL(); + const { t } = useTranslation(); + const navigate = useNavigate(); + + const allItem: { id: string; parentSub: string[] }[] = []; + const reduceMenu = (arr: MenuItem[], parentSub: string[] = []): DMenuItem[] => { + const newArr: DMenuItem[] = []; + for (const item of arr) { + if (item.acl) { + const params = + isObject(item.acl) && 'control' in item.acl + ? item.acl + : { + control: item.acl, + }; + if (!acl.can(params.control, params.mode)) { + continue; + } + } + + const tKey = [...item.path.split('/'), isUndefined(item.children) ? '' : 'index'].filter((key) => key).join('.'); + const title = t(tKey, { ns: 'title' }); + const obj: DMenuItem = { + id: item.path, + title: item.type === 'item' ? React.createElement(Link, { tabIndex: -1, to: item.path }, title) : title, + icon: item.icon ? React.createElement(item.icon) : undefined, + type: item.type, + }; + + if (item.children) { + obj.children = reduceMenu(item.children, parentSub.concat(item.type === 'sub' ? [item.path] : [])); + if (obj.children.length > 0) { + newArr.push(obj); + } + } else { + newArr.push(obj); + allItem.push({ id: item.path, parentSub }); + } + } + return newArr; + }; + + const menu = reduceMenu(MENU); + + //#region Handle no menu + if (allItem.length === 0) { + NotificationService.open({ + dTitle: t('User has no menu'), + dDescription: t('Please contact the administrator'), + dType: 'error', + }); + navigate(LOGIN_PATH, { replace: true }); + } + //#endregion + + return [menu, allItem] as const; +} diff --git a/packages/platform/src/i18n/resources.json b/packages/platform/src/i18n/resources.json index b8a7702a..ca464c59 100644 --- a/packages/platform/src/i18n/resources.json +++ b/packages/platform/src/i18n/resources.json @@ -1,6 +1,9 @@ { "en-US": { "translation": { + "User has no menu": "User has no menu", + "Please contact the administrator": "Please contact the administrator", + "Not logged in or logged in has expired": "Not logged in or logged in has expired", "components": { "language": { "Change language": "Change language" @@ -21,10 +24,10 @@ }, "login": { "Login": "Login", - "description": "Elegant Design & Ultimate Performance", + "description": "RD-Platform provides solutions for enterprise-level background management systems", "Account Login": "Account Login", "Phone Login": "Phone Login", - "Username": "Username: 'admin'", + "Username": "Username: 'admin' or 'user'", "Password": "Password: any input", "Please enter your name": "Please enter your name!", "Please enter your password": "Please enter your password!", @@ -37,24 +40,47 @@ "Please enter verification code": "Please enter verification code!", "Terms": "Terms", "Privacy": "Privacy" + }, + "exception": { + "403": "Sorry, you do not have permission to access this page", + "404": "Sorry, the page you visited does not exist", + "500": "Sorry, there was an error with the server", + "Back Home": "Back Home" + }, + "test": { + "acl": { + "Switch between different users to compare effects": "Switch between different users to compare effects", + "ACL Data": "ACL Data", + "Test Route Guard": "Test Route Guard" + } } } }, "title": { - "Login": "Login" - }, - "menu": { - "Dashboard": "Dashboard", - "Amap": "Amap", - "Echarts": "Echarts", - "Exception": "Exception", - "403": "403", - "404": "404", - "500": "500" + "login": "Login", + "dashboard": { + "index": "Dashboard", + "amap": "AMap", + "echarts": "ECharts" + }, + "exception": { + "index": "Exception", + "403": "403", + "404": "404", + "500": "500" + }, + "test": { + "index": "Test", + "acl": "ACL", + "http": "Http" + } } }, "zh-CN": { "translation": { + "User has no menu": "用户无菜单", + "Please contact the administrator": "请联系管理员", + "Not logged in or logged in has expired": "未登录或登录已过期", "components": { "language": { "Change language": "改变语言" @@ -75,10 +101,10 @@ }, "login": { "Login": "登 录", - "description": "优雅的设计 & 极致的性能", + "description": "RD-Platform 提供了企业级后台管理系统的解决方案", "Account Login": "账号密码登录", "Phone Login": "手机号登录", - "Username": "用户名:'admin'", + "Username": "用户名:'admin' 或 'user'", "Password": "密码:任意输入", "Please enter your name": "请输入用户名!", "Please enter your password": "请输入密码!", @@ -91,20 +117,40 @@ "Please enter verification code": "请输入验证码!", "Terms": "条款", "Privacy": "隐私" + }, + "exception": { + "403": "抱歉,你无权访问该页面", + "404": "抱歉,你访问的页面不存在", + "500": "抱歉,服务器出错了", + "Back Home": "返回首页" + }, + "test": { + "acl": { + "Switch between different users to compare effects": "切换不同用户对比效果", + "ACL Data": "ACL数据", + "Test Route Guard": "测试路由守卫" + } } } }, "title": { - "Login": "登录" - }, - "menu": { - "Dashboard": "仪表盘", - "Amap": "高德地图", - "Echarts": "Echarts", - "Exception": "异常页", - "403": "403", - "404": "404", - "500": "500" + "login": "登录", + "dashboard": { + "index": "仪表盘", + "amap": "高德地图", + "echarts": "ECharts" + }, + "exception": { + "index": "异常页", + "403": "403", + "404": "404", + "500": "500" + }, + "test": { + "index": "测试", + "acl": "ACL", + "http": "Http" + } } } } diff --git a/packages/platform/src/index.html b/packages/platform/src/index.html index d777fd02..3decd5fa 100644 --- a/packages/platform/src/index.html +++ b/packages/platform/src/index.html @@ -4,7 +4,7 @@ Platform - + diff --git a/packages/platform/src/styles.scss b/packages/platform/src/styles.scss index 3bfd9d47..01642500 100644 --- a/packages/platform/src/styles.scss +++ b/packages/platform/src/styles.scss @@ -1,9 +1,7 @@ /* stylelint-disable declaration-property-value-allowed-list */ -@import '../../ui/src/styles/index'; -@import '../../ui/src/styles/theme-dark'; +@import '~@react-devui/ui/styles/index'; +@import '~@react-devui/ui/styles/theme-dark'; -// Use BEM -$namespace: 'app'; @import './styles/index'; body.dark { diff --git a/packages/platform/src/styles/_components.scss b/packages/platform/src/styles/_components.scss index 443424cb..5f784e96 100644 --- a/packages/platform/src/styles/_components.scss +++ b/packages/platform/src/styles/_components.scss @@ -1,3 +1,4 @@ @import 'components/fcp-loader'; @import 'components/language'; @import 'components/list'; +@import 'components/route-header'; diff --git a/packages/platform/src/styles/_mixins.scss b/packages/platform/src/styles/_mixins.scss new file mode 100644 index 00000000..f43fb634 --- /dev/null +++ b/packages/platform/src/styles/_mixins.scss @@ -0,0 +1,3 @@ +@mixin app-route { + padding: 20px; +} diff --git a/packages/platform/src/styles/_module.scss b/packages/platform/src/styles/_module.scss new file mode 100644 index 00000000..0e3930e1 --- /dev/null +++ b/packages/platform/src/styles/_module.scss @@ -0,0 +1,4 @@ +@import '~@react-devui/ui/styles/base'; + +@import 'variables'; +@import 'mixins'; diff --git a/packages/platform/src/styles/_routes.scss b/packages/platform/src/styles/_routes.scss deleted file mode 100644 index 7b09db98..00000000 --- a/packages/platform/src/styles/_routes.scss +++ /dev/null @@ -1,3 +0,0 @@ -@import 'routes/layout'; - -@import 'routes/login'; diff --git a/packages/platform/src/styles/_variables.scss b/packages/platform/src/styles/_variables.scss index ee7802e0..a3a0bdca 100644 --- a/packages/platform/src/styles/_variables.scss +++ b/packages/platform/src/styles/_variables.scss @@ -1 +1,2 @@ /* stylelint-disable declaration-property-value-allowed-list */ +$namespace: 'app'; diff --git a/packages/platform/src/styles/components/language.scss b/packages/platform/src/styles/components/language.scss index da2db72c..7e27c3ce 100644 --- a/packages/platform/src/styles/components/language.scss +++ b/packages/platform/src/styles/components/language.scss @@ -1,8 +1,7 @@ @include b(language) { @include e(item-region) { display: inline-block; - width: 2em; - font-family: Arial, sans-serif; - font-size: 0.9em; + margin-right: 8px; + font-size: 1.1em; } } diff --git a/packages/platform/src/styles/components/route-header.scss b/packages/platform/src/styles/components/route-header.scss new file mode 100644 index 00000000..d509f5ac --- /dev/null +++ b/packages/platform/src/styles/components/route-header.scss @@ -0,0 +1,38 @@ +@include b(route-header) { + position: static; + top: 0; + z-index: 1; + padding: 12px 20px 0; + background-color: var(--d-background-color); + + @include e(breadcrumb) { + height: 40px; + } + + @include e(breadcrumb-link) { + font: inherit; + color: inherit; + text-decoration: none; + } + + @include e(header) { + display: flex; + flex-wrap: wrap; + gap: 12px 20px; + align-items: center; + justify-content: space-between; + padding-bottom: 16px; + } + + @include e(header-title) { + font-size: 1.5em; + font-weight: 500; + } + + @include e(header-actions) { + display: inline-flex; + flex-wrap: wrap; + gap: 8px; + align-items: center; + } +} diff --git a/packages/platform/src/styles/index.scss b/packages/platform/src/styles/index.scss index daf3ad12..dd7f6af5 100644 --- a/packages/platform/src/styles/index.scss +++ b/packages/platform/src/styles/index.scss @@ -1,5 +1,5 @@ @import 'variables'; +@import 'mixins'; @import 'components'; -@import 'routes'; @import 'app'; diff --git a/packages/platform/src/styles/routes/layout.scss b/packages/platform/src/styles/routes/layout.scss deleted file mode 100644 index 874bb7fb..00000000 --- a/packages/platform/src/styles/routes/layout.scss +++ /dev/null @@ -1,153 +0,0 @@ -@use 'sass:map'; - -@include b(layout) { - @include e(main) { - position: absolute; - right: 0; - bottom: 0; - height: calc(100% - 64px); - padding: 20px; - overflow: auto; - transition: width var(--d-animation-duration-base) linear; - } -} - -@include b(layout-header) { - position: relative; - z-index: 910; - display: flex; - align-items: center; - width: 100%; - height: 64px; - padding: 0 16px 0 0; - color: map.get($colors, 'white'); - /* stylelint-disable-next-line declaration-property-value-allowed-list */ - background-color: #001529; - box-shadow: 0 2px 8px 0 var(--d-shadow-color); - - @include e(logo-container) { - display: inline-flex; - align-items: center; - font: inherit; - color: inherit; - text-decoration: none; - } - - @include e(logo) { - display: inline-flex; - justify-content: center; - width: 64px; - } - - @include e(logo-title) { - overflow: hidden; - transition: width var(--d-animation-duration-base) linear; - transform-origin: left; - - @include font-size(1.5rem); - } - - @include e(button) { - @include utils-button(true); - - align-self: stretch; - padding: 0 12px; - margin: 0; - /* stylelint-disable-next-line declaration-property-value-allowed-list */ - font-size: 18px; - color: inherit; - text-decoration: none; - background-color: transparent; - border: none; - transition: background-color var(--d-animation-duration-base) linear; - - &:hover { - /* stylelint-disable-next-line declaration-property-value-allowed-list */ - background-color: rgb(255 255 255 / 20%); - } - - &:active { - /* stylelint-disable-next-line declaration-property-value-allowed-list */ - background-color: rgb(255 255 255 / 14%); - } - - @include m(user) { - gap: 0 8px; - } - } - - @include e(notification-popover) { - .d-popover__body { - width: 320px; - padding: 0; - } - - @include m(spinner) { - .d-popover__body { - width: unset; - padding: 16px 32px; - } - } - } - - @include e(notification-item) { - padding-right: 16px; - padding-left: 16px; - cursor: pointer; - transition: background-color var(--d-animation-duration-base) linear; - - &:hover { - background-color: var(--d-background-color-hover); - } - - @include m(read) { - pointer-events: none; - filter: opacity(50%); - } - } - - @include e(notification-actions) { - display: flex; - align-items: stretch; - height: 44px; - border-top: 1px solid var(--d-color-divider); - - .d-button { - flex-grow: 1; - } - } -} - -@include b(layout-sidebar) { - position: absolute; - bottom: 0; - left: 0; - z-index: 5; - height: calc(100% - 64px); - padding: 0; - overflow: auto; - background-color: var(--d-background-color); - box-shadow: -2px 0 8px 0 var(--d-shadow-color); - - @include e(menu) { - width: 200px; - } - - @include e(link) { - font: inherit; - color: inherit; - text-decoration: none; - - &::after { - position: absolute; - inset: 0; - content: ''; - } - } - - @include e(drawer) { - .d-drawer__body { - padding: 0; - } - } -} diff --git a/packages/platform/tsconfig.app.json b/packages/platform/tsconfig.app.json index cb982a63..f384e4c5 100644 --- a/packages/platform/tsconfig.app.json +++ b/packages/platform/tsconfig.app.json @@ -15,5 +15,5 @@ "**/*.spec.jsx", "**/*.test.jsx" ], - "include": ["**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"] + "include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"] } diff --git a/packages/platform/webpack.js b/packages/platform/webpack.js new file mode 100644 index 00000000..a791d8d8 --- /dev/null +++ b/packages/platform/webpack.js @@ -0,0 +1,15 @@ +const path = require('path'); + +const getWebpackConfig = require('@nrwl/react/plugins/webpack'); +const { merge } = require('webpack-merge'); + +module.exports = (config, context) => { + return merge(getWebpackConfig(config), { + resolve: { + alias: { + '@react-devui/ui/styles': path.resolve(__dirname, '../ui/src/styles/'), + styles: path.resolve(__dirname, './src/styles/'), + }, + }, + }); +}; diff --git a/packages/site/executors/build-base/files/resources.json b/packages/site/executors/build-base/files/resources.json index 113a5de9..427f72f4 100644 --- a/packages/site/executors/build-base/files/resources.json +++ b/packages/site/executors/build-base/files/resources.json @@ -19,7 +19,9 @@ "GitHub repository": "GitHub repository", "home": { "Title": "Elegant Design & Ultimate Performance", - "Getting Started": "Getting Started", + "Getting Started": "Getting Started" + }, + "footer": { "Resources": "Resources", "Help": "Help" }, @@ -57,7 +59,9 @@ "GitHub repository": "GitHub 存储库", "home": { "Title": "优雅的设计 & 极致的性能", - "Getting Started": "快速开始", + "Getting Started": "快速开始" + }, + "footer": { "Resources": "相关资源", "Help": "帮助" }, diff --git a/packages/site/src/app/App.tsx b/packages/site/src/app/App.tsx index 1c2d9001..7483d647 100644 --- a/packages/site/src/app/App.tsx +++ b/packages/site/src/app/App.tsx @@ -67,7 +67,7 @@ export function App() { const rootContext = useMemo( () => ({ i18n: { lang: language }, - layout: { scrollEl: 'main.app-main', resizeEl: 'article.app-md-route' }, + layout: { scrollEl: '.app-main', resizeEl: '.app-md-route' }, }), [language] ); diff --git a/packages/site/src/app/components/footer/Footer.tsx b/packages/site/src/app/components/footer/Footer.tsx new file mode 100644 index 00000000..795ff6c2 --- /dev/null +++ b/packages/site/src/app/components/footer/Footer.tsx @@ -0,0 +1,36 @@ +import { useTranslation } from 'react-i18next'; + +import { GithubOutlined } from '@react-devui/icons'; +import { getClassName } from '@react-devui/utils'; + +export function AppFooter(props: React.HTMLAttributes): JSX.Element | null { + const { t } = useTranslation(); + + return ( + + ); +} diff --git a/packages/site/src/app/components/footer/index.ts b/packages/site/src/app/components/footer/index.ts new file mode 100644 index 00000000..ddcc5a9c --- /dev/null +++ b/packages/site/src/app/components/footer/index.ts @@ -0,0 +1 @@ +export * from './Footer'; diff --git a/packages/site/src/app/components/index.ts b/packages/site/src/app/components/index.ts index bbfd3475..fc4fac2e 100644 --- a/packages/site/src/app/components/index.ts +++ b/packages/site/src/app/components/index.ts @@ -1,5 +1,7 @@ export { AppFCPLoader } from './fcp-loader'; +export { AppFooter } from './footer'; + export type { AppComponentRouteProps } from './route/component'; export { AppComponentRoute } from './route/component'; diff --git a/packages/site/src/app/components/route/md/Route.tsx b/packages/site/src/app/components/route/md/Route.tsx index 989c1769..4b1975ea 100644 --- a/packages/site/src/app/components/route/md/Route.tsx +++ b/packages/site/src/app/components/route/md/Route.tsx @@ -8,7 +8,9 @@ import { useImmer, useLocalStorage } from '@react-devui/hooks'; import { DCustomIcon } from '@react-devui/icons'; import { DAnchor, DDrawer } from '@react-devui/ui'; import { useMediaQuery } from '@react-devui/ui/hooks'; +import { getClassName } from '@react-devui/utils'; +import { AppFooter } from '../../footer'; import marked, { toString } from '../utils'; export interface AppRouteProps { @@ -75,12 +77,17 @@ m -673.67664,1221.6502 -231.2455,-231.24803 55.6165, return ( <> -
- {props.children} +
+
+ {props.children} +
+
- {breakpointsMatched.includes('md') && links.length > 0 && ( - - )} + {breakpointsMatched.includes('md') && links.length > 0 && } {!breakpointsMatched.includes('md') && ( <> {links.length > 0 && ( @@ -92,7 +99,7 @@ m -673.67664,1221.6502 -231.2455,-231.24803 55.6165, dMask={false} onVisibleChange={setMenuOpen} > - setMenuOpen(false)} /> + setMenuOpen(false)} /> )}
); } diff --git a/packages/site/src/styles.scss b/packages/site/src/styles.scss index 8a993bd1..b02028b2 100644 --- a/packages/site/src/styles.scss +++ b/packages/site/src/styles.scss @@ -2,8 +2,6 @@ @import '../../ui/src/styles/index'; @import '../../ui/src/styles/theme-dark'; -// Use BEM -$namespace: 'app'; @import './styles/index'; body.light { diff --git a/packages/site/src/styles/_app.scss b/packages/site/src/styles/_app.scss index bc7776b5..24902312 100644 --- a/packages/site/src/styles/_app.scss +++ b/packages/site/src/styles/_app.scss @@ -24,14 +24,13 @@ body { bottom: 0; width: 100%; height: calc(100% - 64px); - padding: 20px; + padding: 32px 0 0; overflow: auto; } @media (min-width: 768px) { .app-main { width: calc(100% - 260px); - padding: 32px 200px 32px 64px; } } diff --git a/packages/site/src/styles/_components.scss b/packages/site/src/styles/_components.scss index afebb9b5..f64f2b04 100644 --- a/packages/site/src/styles/_components.scss +++ b/packages/site/src/styles/_components.scss @@ -1,3 +1,4 @@ @import 'components/component-route'; @import 'components/fcp-loader'; +@import 'components/footer'; @import 'components/md-route'; diff --git a/packages/site/src/styles/_variables.scss b/packages/site/src/styles/_variables.scss index 48e4acf8..005a3aa6 100644 --- a/packages/site/src/styles/_variables.scss +++ b/packages/site/src/styles/_variables.scss @@ -1,4 +1,6 @@ /* stylelint-disable declaration-property-value-allowed-list */ +$namespace: 'app'; + :root { --app-th-background-color: #f9f9f9; --app-code-background-color: #f2f4f5; diff --git a/packages/site/src/styles/components/footer.scss b/packages/site/src/styles/components/footer.scss new file mode 100644 index 00000000..0159a362 --- /dev/null +++ b/packages/site/src/styles/components/footer.scss @@ -0,0 +1,52 @@ +@use 'sass:map'; + +@include b(footer) { + display: flex; + flex-wrap: wrap; + gap: 0 40px; + justify-content: space-around; + padding: 20px; + background-color: map.get($colors, 'black'); + border-top: 1px solid var(--d-color-border); + + a { + display: inline-flex; + gap: 0 4px; + align-items: center; + font: inherit; + color: map.get($colors, 'white'); + text-decoration: none; + transition: color var(--d-animation-duration-fast) linear; + + &:hover { + color: var(--d-color-primary); + } + } + + @include e(col) { + display: inline-flex; + flex-direction: column; + gap: 12px 0; + margin-top: 40px; + } + + @include e(col-title) { + margin-bottom: 8px; + font-weight: 500; + color: map.get($colors, 'white'); + + @include font-size(1.1rem); + } + + @include e(bottom) { + display: flex; + justify-content: center; + width: 100%; + padding-top: 20px; + margin-top: 40px; + /* stylelint-disable-next-line declaration-property-value-allowed-list */ + color: rgb(155 155 159); + white-space: pre-wrap; + border-top: 1px solid rgb(71 71 71); + } +} diff --git a/packages/site/src/styles/components/md-route.scss b/packages/site/src/styles/components/md-route.scss index 23586811..cb6ef163 100644 --- a/packages/site/src/styles/components/md-route.scss +++ b/packages/site/src/styles/components/md-route.scss @@ -1,4 +1,14 @@ @include b(md-route) { + @include m(phone) { + @include e(content) { + padding: 0 20px 32px; + } + } + + @include e(content) { + padding: 0 200px 32px 64px; + } + @include e(anchor) { position: fixed; top: 120px; diff --git a/packages/site/src/styles/routes/home.scss b/packages/site/src/styles/routes/home.scss index 0b26ae3a..ff9f8178 100644 --- a/packages/site/src/styles/routes/home.scss +++ b/packages/site/src/styles/routes/home.scss @@ -1,5 +1,3 @@ -@use 'sass:map'; - @include b(home-route) { position: absolute; bottom: 0; @@ -45,44 +43,4 @@ @include font-size(1.25rem); } } - - @include e(footer) { - display: flex; - flex-grow: 1; - flex-wrap: wrap; - gap: 40px; - justify-content: space-around; - padding: 60px 20px; - margin: 40px -20px -20px; - color: map.get($colors, 'white'); - background-color: map.get($colors, 'black'); - border-top: 1px solid var(--d-color-border); - - a { - display: flex; - gap: 0 4px; - align-items: center; - font: inherit; - color: inherit; - text-decoration: none; - transition: color var(--d-animation-duration-fast) linear; - - &:hover { - color: var(--d-color-primary); - } - } - } - - @include e(col) { - display: inline-flex; - flex-direction: column; - gap: 12px 0; - } - - @include e(col-title) { - margin-bottom: 8px; - font-weight: 500; - - @include font-size(1.1rem); - } } diff --git a/packages/site/tsconfig.app.json b/packages/site/tsconfig.app.json index cb982a63..f384e4c5 100644 --- a/packages/site/tsconfig.app.json +++ b/packages/site/tsconfig.app.json @@ -15,5 +15,5 @@ "**/*.spec.jsx", "**/*.test.jsx" ], - "include": ["**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"] + "include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"] } diff --git a/packages/ui/project.json b/packages/ui/project.json index 015ac50d..47b6702c 100644 --- a/packages/ui/project.json +++ b/packages/ui/project.json @@ -10,6 +10,7 @@ "options": { "outputPath": "dist/packages/ui", "tsConfig": "packages/ui/tsconfig.lib.json", + "rootDir": "packages/ui/src", "main": "packages/ui/src/index.ts", "updateBuildableProjectDepsInPackageJson": false, "assets": [ diff --git a/packages/ui/src/components/avatar/Avatar.tsx b/packages/ui/src/components/avatar/Avatar.tsx index 3ca68214..21b03114 100644 --- a/packages/ui/src/components/avatar/Avatar.tsx +++ b/packages/ui/src/components/avatar/Avatar.tsx @@ -30,7 +30,7 @@ export function DAvatar(props: DAvatarProps): JSX.Element | null { //#endregion //#region Ref - const textRef = useRef(null); + const textRef = useRef(null); //#endregion const [imgError, setImgError] = useState(false); @@ -38,9 +38,11 @@ export function DAvatar(props: DAvatarProps): JSX.Element | null { useEffect(() => { if (textRef.current) { - const maxWidth = Math.sqrt(Math.pow(dSize / 2, 2) - Math.pow(textRef.current.clientHeight / 2, 2)) * 2; - if (textRef.current.clientWidth > maxWidth) { - textRef.current.style.cssText = `transform:scale(${maxWidth / textRef.current.clientWidth});`; + const maxWidth = Math.sqrt(Math.pow(dSize / 2, 2) - Math.pow(textRef.current.scrollHeight / 2, 2)) * 2; + if (textRef.current.scrollWidth > maxWidth) { + textRef.current.style.transform = `scale(${maxWidth / textRef.current.scrollWidth})`; + } else { + textRef.current.style.transform = ''; } } }); @@ -70,7 +72,7 @@ export function DAvatar(props: DAvatarProps): JSX.Element | null { ) : type === 'icon' ? ( dIcon ) : ( - {dText} +
{dText}
)} ); diff --git a/packages/ui/src/components/form/abstract-control.ts b/packages/ui/src/components/form/abstract-control.ts index 1ab942ec..582fd33d 100644 --- a/packages/ui/src/components/form/abstract-control.ts +++ b/packages/ui/src/components/form/abstract-control.ts @@ -12,6 +12,24 @@ export type FormControlStatus = 'VALID' | 'INVALID' | 'PENDING' | 'DISABLED'; export const [VALID, INVALID, PENDING, DISABLED] = ['VALID', 'INVALID', 'PENDING', 'DISABLED'] as FormControlStatus[]; +type Mutable = { + -readonly [P in keyof T]: T[P]; +}; + +type GetFormControlPropertyFromArray = Mutable extends [infer K, ...infer R] + ? K extends keyof T + ? GetFormControlPropertyFromArray + : null + : T; + +type GetFormControlProperty = S extends `${infer K}.${infer R}` + ? K extends keyof T + ? GetFormControlProperty + : null + : S extends keyof T + ? T[S] + : null; + function find(control: AbstractControl, path: string[] | string, delimiter: string) { if (path == null) return null; @@ -98,7 +116,7 @@ function removeValidators(validators: return makeValidatorsArray(currentValidators).filter((validator) => !hasValidator(validators, validator)); } -export abstract class AbstractControl { +export abstract class AbstractControl { private _parent: FormGroup | null = null; private _pristine: boolean = true; @@ -148,7 +166,7 @@ export abstract class AbstractControl { return control; } - get value(): any { + get value(): V { return this._value; } @@ -183,7 +201,7 @@ export abstract class AbstractControl { return !this._pristine; } - public readonly asyncVerifyComplete$ = new Subject(); + public readonly asyncVerifyComplete$ = new Subject>(); clone(): typeof this { return new Proxy(this, {}); @@ -305,6 +323,8 @@ export abstract class AbstractControl { } } + get(path: S): AbstractControl>; + get>(path: S): AbstractControl>; get(path: string[] | string): AbstractControl | null { return find(this, path, '.'); } @@ -318,11 +338,11 @@ export abstract class AbstractControl { return !!this.getError(errorCode, path); } - protected abstract _value: any; + protected abstract _value: V; protected abstract _status: FormControlStatus; - abstract setValue(value: any, onlySelf?: boolean): void; + abstract setValue(value: V, onlySelf?: boolean): void; abstract patchValue(value: any, onlySelf?: boolean): void; abstract reset(value?: any, onlySelf?: boolean): void; diff --git a/packages/ui/src/components/form/form-control.ts b/packages/ui/src/components/form/form-control.ts index 90766c2f..4968abd9 100644 --- a/packages/ui/src/components/form/form-control.ts +++ b/packages/ui/src/components/form/form-control.ts @@ -9,7 +9,7 @@ export interface FormControlState { disabled?: boolean; } -export class FormControl extends AbstractControl { +export class FormControl extends AbstractControl { public readonly defaultState: FormControlState | V; protected _value!: V; @@ -33,7 +33,7 @@ export class FormControl extends AbstractControl { override patchValue(value: V, onlySelf?: boolean): void { this.setValue(value, onlySelf); } - override reset(formState = this.defaultState, onlySelf?: boolean): void { + override reset(formState: V | FormControlState = this.defaultState, onlySelf?: boolean): void { this._applyFormState(formState); this.markAsPristine(onlySelf); this.setValue(this.value, onlySelf); diff --git a/packages/ui/src/components/form/form-group.ts b/packages/ui/src/components/form/form-group.ts index 511b721b..dc9a2279 100644 --- a/packages/ui/src/components/form/form-group.ts +++ b/packages/ui/src/components/form/form-group.ts @@ -3,12 +3,12 @@ import type { AsyncValidatorFn, ValidatorFn } from './validators'; import { AbstractControl, VALID } from './abstract-control'; -export class FormGroup extends AbstractControl { - protected _value: any; +export class FormGroup extends AbstractControl<{ [K in keyof T]: T[K]['value'] }> { + protected _value!: { [K in keyof T]: T[K]['value'] }; protected _status: FormControlStatus = VALID; constructor( - public controls: { [key: string]: AbstractControl }, + public controls: T, validators?: ValidatorFn | ValidatorFn[] | null, asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null ) { @@ -17,6 +17,8 @@ export class FormGroup extends AbstractControl { this.updateValueAndValidity(true); } + addControl(name: K, control: T[K]): void; + addControl(name: string, control: AbstractControl): void; addControl(name: string, control: AbstractControl): void { if (!(name in this.controls)) { this.controls[name] = control; @@ -24,20 +26,26 @@ export class FormGroup extends AbstractControl { } this.updateValueAndValidity(); } + removeControl(name: K): void; + removeControl(name: string): void; removeControl(name: string): void { delete this.controls[name]; this.updateValueAndValidity(); } + setControl(name: K, control: T[K]): void; + setControl(name: string, control: AbstractControl): void; setControl(name: string, control: AbstractControl): void { delete this.controls[name]; this.addControl(name, control); this.updateValueAndValidity(); } + contains(controlName: K): boolean; + contains(controlName: string): boolean; contains(controlName: string): boolean { return controlName in this.controls; } - override setValue(value: { [key: string]: any }, onlySelf?: boolean): void { + override setValue(value: { [K in keyof T]: T[K]['value'] } & { [K: string]: any }, onlySelf?: boolean): void { this._checkAllValuesPresent(value); Object.keys(value).forEach((name) => { this._throwIfControlMissing(name); @@ -45,7 +53,7 @@ export class FormGroup extends AbstractControl { }); this.updateValueAndValidity(onlySelf); } - override patchValue(value: { [key: string]: any }, onlySelf?: boolean): void { + override patchValue(value: { [K in keyof T]?: T[K]['value'] } & { [K: string]: any }, onlySelf?: boolean): void { Object.keys(value).forEach((name) => { if (this.controls[name]) { this.controls[name].patchValue(value[name], true); @@ -53,7 +61,7 @@ export class FormGroup extends AbstractControl { }); this.updateValueAndValidity(onlySelf); } - override reset(value: any = {}, onlySelf?: boolean): void { + override reset(value: { [K in keyof T]?: T[K]['value'] } & { [K: string]: any } = {}, onlySelf?: boolean): void { this._forEachChild((control, name) => { control.reset(value[name], true); }); @@ -100,7 +108,7 @@ export class FormGroup extends AbstractControl { }); } - private _reduceValue() { + private _reduceValue(): any { return this._reduceChildren({}, (acc: { [k: string]: any }, control, name): any => { acc[name] = control.value; return acc; diff --git a/packages/ui/src/components/form/hooks.ts b/packages/ui/src/components/form/hooks.ts index be1e8109..40a811bd 100644 --- a/packages/ui/src/components/form/hooks.ts +++ b/packages/ui/src/components/form/hooks.ts @@ -1,4 +1,5 @@ import type { DFormControl } from './FormItem'; +import type { AbstractControl } from './abstract-control'; import type { FormGroup } from './form-group'; import { isUndefined } from 'lodash'; @@ -8,7 +9,7 @@ import { useEventCallback, useForceUpdate } from '@react-devui/hooks'; export const DFormUpdateContext = React.createContext<(() => void) | null>(null); -export function useForm(cb: () => FormGroup) { +export function useForm(cb: () => FormGroup) { const [initValue] = useState(() => cb()); const form = useRef(initValue); diff --git a/packages/ui/src/styles/components/avatar.scss b/packages/ui/src/styles/components/avatar.scss index 984b152b..d498b313 100644 --- a/packages/ui/src/styles/components/avatar.scss +++ b/packages/ui/src/styles/components/avatar.scss @@ -5,6 +5,7 @@ align-items: center; justify-content: center; overflow: hidden; + white-space: nowrap; vertical-align: top; @include m(circular) { diff --git a/packages/ui/src/styles/components/card.scss b/packages/ui/src/styles/components/card.scss index 980e4cf0..dfa8dfc3 100644 --- a/packages/ui/src/styles/components/card.scss +++ b/packages/ui/src/styles/components/card.scss @@ -1,4 +1,5 @@ @include b(card) { + background-color: var(--#{$variable-prefix}background-color); border-radius: var(--#{$variable-prefix}border-radius); transition: box-shadow var(--#{$variable-prefix}animation-duration-base) linear; diff --git a/packages/ui/tsconfig.lib.json b/packages/ui/tsconfig.lib.json index abea1d86..112a7c0d 100644 --- a/packages/ui/tsconfig.lib.json +++ b/packages/ui/tsconfig.lib.json @@ -17,5 +17,5 @@ "**/*.spec.jsx", "**/*.test.jsx" ], - "include": ["**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"] + "include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"] } diff --git a/packages/utils/project.json b/packages/utils/project.json index 54a39605..3a849ec3 100644 --- a/packages/utils/project.json +++ b/packages/utils/project.json @@ -10,6 +10,7 @@ "options": { "outputPath": "dist/packages/utils", "tsConfig": "packages/utils/tsconfig.lib.json", + "rootDir": "packages/utils/src", "main": "packages/utils/src/index.ts", "updateBuildableProjectDepsInPackageJson": false, "assets": [ diff --git a/packages/utils/tsconfig.lib.json b/packages/utils/tsconfig.lib.json index 67b677a3..5039e7d4 100644 --- a/packages/utils/tsconfig.lib.json +++ b/packages/utils/tsconfig.lib.json @@ -16,5 +16,5 @@ "**/*.spec.jsx", "**/*.test.jsx" ], - "include": ["**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"] + "include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"] } diff --git a/packages/vscode-extension/tsconfig.lib.json b/packages/vscode-extension/tsconfig.lib.json index b6c1e751..9012c43a 100644 --- a/packages/vscode-extension/tsconfig.lib.json +++ b/packages/vscode-extension/tsconfig.lib.json @@ -6,6 +6,6 @@ "target": "ES2020", "lib": ["ES2020"] }, - "include": ["**/*.ts"], - "exclude": ["**/*.spec.ts", "**/*.test.ts"] + "exclude": ["**/*.spec.ts", "**/*.test.ts"], + "include": ["**/*.ts"] } diff --git a/yarn.lock b/yarn.lock index d268f2a6..1973568d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -880,7 +880,7 @@ "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-regenerator@^7.14.5", "@babel/plugin-transform-regenerator@^7.18.6": +"@babel/plugin-transform-regenerator@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz#585c66cb84d4b4bf72519a34cfce761b8676ca73" integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== @@ -1088,7 +1088,7 @@ core-js-pure "^3.20.2" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.5", "@babel/runtime@^7.14.8", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.9", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.5", "@babel/runtime@^7.14.8", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.9", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== @@ -1344,10 +1344,10 @@ esquery "^1.4.0" jsdoc-type-pratt-parser "~3.1.0" -"@eslint/eslintrc@^1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.1.tgz#de0807bfeffc37b964a7d0400e0c348ce5a2543d" - integrity sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ== +"@eslint/eslintrc@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.2.tgz#58b69582f3b7271d8fa67fe5251767a5b38ea356" + integrity sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -1812,39 +1812,39 @@ resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== -"@lerna/add@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/add/-/add-5.5.0.tgz#33c671dc01153f1bda8929de8ed7267d16858ce6" - integrity sha512-RdJ8yyE8BizzrYRjZuqeXtgkHBE/KzcS7tmBG+UKCQ5QFLnkdORzaVECNy2sfZl0vTtrxj4cv+kuwxIeg/4XVQ== - dependencies: - "@lerna/bootstrap" "5.5.0" - "@lerna/command" "5.5.0" - "@lerna/filter-options" "5.5.0" - "@lerna/npm-conf" "5.5.0" - "@lerna/validation-error" "5.5.0" +"@lerna/add@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/add/-/add-5.5.1.tgz#a218665ac0632dd06196f83aa0dca50e3828c204" + integrity sha512-Vi6Zm8bt1QAoDYl7YERTOgjEn2bwbZNBqYxNz0DlsxcqKHW2GkefEemZLXxmd9G8YgbsbC71W4sz/yFlkSSsxQ== + dependencies: + "@lerna/bootstrap" "5.5.1" + "@lerna/command" "5.5.1" + "@lerna/filter-options" "5.5.1" + "@lerna/npm-conf" "5.5.1" + "@lerna/validation-error" "5.5.1" dedent "^0.7.0" npm-package-arg "8.1.1" p-map "^4.0.0" pacote "^13.6.1" semver "^7.3.4" -"@lerna/bootstrap@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-5.5.0.tgz#6773c1357fb88d0cb203b233f9ad9269fb2f43ef" - integrity sha512-GeXLSDi6gxj2O3t5T7qgFabBKoC5EQwiFyQ4ufqx1Wm/mWxqRI+enTBnbaBbmhQaVQ9wfPvMPDukJ5Q9PCTUcQ== - dependencies: - "@lerna/command" "5.5.0" - "@lerna/filter-options" "5.5.0" - "@lerna/has-npm-version" "5.5.0" - "@lerna/npm-install" "5.5.0" - "@lerna/package-graph" "5.5.0" - "@lerna/pulse-till-done" "5.5.0" - "@lerna/rimraf-dir" "5.5.0" - "@lerna/run-lifecycle" "5.5.0" - "@lerna/run-topologically" "5.5.0" - "@lerna/symlink-binary" "5.5.0" - "@lerna/symlink-dependencies" "5.5.0" - "@lerna/validation-error" "5.5.0" +"@lerna/bootstrap@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-5.5.1.tgz#c151bdb621d6e8ab95323d1d54de317a08bb4500" + integrity sha512-BNfrwZD3peUiJll5ZBVgLRyURWSY9px6hJna1i7zTT1DNged/ehqd2hfMqWV+7iX6mO+CvcfH/v3zJaUwU1aOw== + dependencies: + "@lerna/command" "5.5.1" + "@lerna/filter-options" "5.5.1" + "@lerna/has-npm-version" "5.5.1" + "@lerna/npm-install" "5.5.1" + "@lerna/package-graph" "5.5.1" + "@lerna/pulse-till-done" "5.5.1" + "@lerna/rimraf-dir" "5.5.1" + "@lerna/run-lifecycle" "5.5.1" + "@lerna/run-topologically" "5.5.1" + "@lerna/symlink-binary" "5.5.1" + "@lerna/symlink-dependencies" "5.5.1" + "@lerna/validation-error" "5.5.1" "@npmcli/arborist" "5.3.0" dedent "^0.7.0" get-port "^5.1.1" @@ -1856,100 +1856,100 @@ p-waterfall "^2.1.1" semver "^7.3.4" -"@lerna/changed@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-5.5.0.tgz#7242804f3400491035399cc3108324c154963c8b" - integrity sha512-ZEnVHrPEpf2Iii/Z59g1lfKEwPA1V2an5L27MzNQjbWe6JQZqTU+8V6m+Vmbr4VdEH5jfRL5NVETGCLl7qN/pQ== +"@lerna/changed@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-5.5.1.tgz#4889578b1d731f4dd59c670532a7d760cbf29bf5" + integrity sha512-aDm+KQZhOdivNSs74lqC71BO7lVtKHu9oyisqhqCb5MdZn7yjO3Ef2Y0CYN4+dt355zW+xI87NzwSWYGQEd/5Q== dependencies: - "@lerna/collect-updates" "5.5.0" - "@lerna/command" "5.5.0" - "@lerna/listable" "5.5.0" - "@lerna/output" "5.5.0" + "@lerna/collect-updates" "5.5.1" + "@lerna/command" "5.5.1" + "@lerna/listable" "5.5.1" + "@lerna/output" "5.5.1" -"@lerna/check-working-tree@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-5.5.0.tgz#7b2e4725032fdb17f7d4823e96d443e617af07fb" - integrity sha512-U35yV8R+tv6zQgoDr0rnBt4wm4gyhDcE4tUEeB8m7JHVu7g45Fjv2jFLH1z5RM1PVaEbzKVebqfN5ccB0EBuyg== +"@lerna/check-working-tree@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-5.5.1.tgz#fa0d51c6006847a6fa14883654ca32043b285423" + integrity sha512-scfv1KDYQVy1US6SA8C4uj56HN021E2GXCL0bXzc6VKFewdZ9LreJTo0zSN6JwRitxc0c45lTAfTqDueVWANNQ== dependencies: - "@lerna/collect-uncommitted" "5.5.0" - "@lerna/describe-ref" "5.5.0" - "@lerna/validation-error" "5.5.0" + "@lerna/collect-uncommitted" "5.5.1" + "@lerna/describe-ref" "5.5.1" + "@lerna/validation-error" "5.5.1" -"@lerna/child-process@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-5.5.0.tgz#b3fbfadd766f79a2c54226de9d7e73643a82d79c" - integrity sha512-er7bsj2W/H8JWAIB+CkgCLk9IlMkyVzywbOZcMC+xic2fp7rmM/BdtAE4nTjkKwfaRYF/bwjHyZowZUR3s8cEg== +"@lerna/child-process@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-5.5.1.tgz#7cf0b790bf275c9e762c9317500c3e43e8773c6d" + integrity sha512-rGVK5DIJa2EljPb3RW4ZAvwgiyX6xL3hZzRGRkSQWV7866W/Xy0aCgWhfSmUvxB7iiH1NBw5ANlCuBLk31T0QQ== dependencies: chalk "^4.1.0" execa "^5.0.0" strong-log-transformer "^2.1.0" -"@lerna/clean@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-5.5.0.tgz#474e2e30bd3fa9a09482188659a87bcef0bd6f6e" - integrity sha512-TRW4Gkv6QpWSy0tm72NrxvgmTAC+W0LqhLPlFM5k5feFS75/HGOycpf97M4JSUueyBCuVjsPfzqp/e6MB3Ntng== - dependencies: - "@lerna/command" "5.5.0" - "@lerna/filter-options" "5.5.0" - "@lerna/prompt" "5.5.0" - "@lerna/pulse-till-done" "5.5.0" - "@lerna/rimraf-dir" "5.5.0" +"@lerna/clean@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-5.5.1.tgz#f50598665dc7487028ebe9021ff4296d8f22c31c" + integrity sha512-Be0nQpoppH43oRhNoevNms6unRvZFwFnuz3sGABii+hyFYqLIpZiAz98ur0LtV8OVq1bUYLXp8bHf+XylgvXQg== + dependencies: + "@lerna/command" "5.5.1" + "@lerna/filter-options" "5.5.1" + "@lerna/prompt" "5.5.1" + "@lerna/pulse-till-done" "5.5.1" + "@lerna/rimraf-dir" "5.5.1" p-map "^4.0.0" p-map-series "^2.1.0" p-waterfall "^2.1.1" -"@lerna/cli@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-5.5.0.tgz#3463fff62cc2233b6a85ccaed23fad1432b57c30" - integrity sha512-7TtnO2xfnfrpWGIui6ANrH4/AVHmSfjaExSoZKNhh2dKSSEOETEUfFIIzfEAirAVR7EOXAJwDdFbbpB4lQtyUg== +"@lerna/cli@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-5.5.1.tgz#9297b1df7e3b43fe283dd2c2423c1516e2a5dbf9" + integrity sha512-57dEQoiJnMhLIgS5zAEhPmL70LLrZHUqfxoXYBCg+yqlmsGqZ7t0Re5XtBUbFk6hsUm81sblf9A4YI2fssGVrA== dependencies: - "@lerna/global-options" "5.5.0" + "@lerna/global-options" "5.5.1" dedent "^0.7.0" npmlog "^6.0.2" yargs "^16.2.0" -"@lerna/collect-uncommitted@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-5.5.0.tgz#9ecd3a4fe852715aa83d02e0e0b072015e6ee196" - integrity sha512-oVGXS0fC8q2d1lG695eCd8dkr0fhmUx4bWA1IshVd/u0Puk7f8+m71POcLV3h1gR/2Fqs7vb7G/sPyuzGtwn8w== +"@lerna/collect-uncommitted@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-5.5.1.tgz#bc7e476bae48ad5e4a3f046e7a0bb8ef66db6d7f" + integrity sha512-BPGpov4aYRugkY5aieolHEqJRV/6IQ9y6Xy+Fv/892jNhe2dFwi6+u2JbdmO+9JOkz/ZeDDZ85qEbnaiuVQDWg== dependencies: - "@lerna/child-process" "5.5.0" + "@lerna/child-process" "5.5.1" chalk "^4.1.0" npmlog "^6.0.2" -"@lerna/collect-updates@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-5.5.0.tgz#2180052edd727a65a71d5a047f36166a1dee221f" - integrity sha512-6kBMi6K6PHIBvZKlfp/0PvRgmzvvfx+eZpmLjF+0yjcfwBn+QDkq7H+QohBiCzt2vxHVHsM6zutNhl2jNTmChg== +"@lerna/collect-updates@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-5.5.1.tgz#89c9fe8b01fe92fa4bbd78c7e493183af9d9fa68" + integrity sha512-Dco+0KwmbnKv1Uv/4jWmFObZKEVTcY7YpN863LsXjieOyD5hz1B5z/2fVk8g6QP5lUsVBG0WUnSKtdapUO5yBw== dependencies: - "@lerna/child-process" "5.5.0" - "@lerna/describe-ref" "5.5.0" + "@lerna/child-process" "5.5.1" + "@lerna/describe-ref" "5.5.1" minimatch "^3.0.4" npmlog "^6.0.2" slash "^3.0.0" -"@lerna/command@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/command/-/command-5.5.0.tgz#7be7228bd8f87181274974ff3e539bdd1b4b91e6" - integrity sha512-ut055kFWc1OJFdI9Cj1kDxtJ4ejvAsfRgUoVxWT1Fw4Me/OzQRHYmUupW0FK8Kc+7gcz4mGKzUVWmRmDBvn+Fw== - dependencies: - "@lerna/child-process" "5.5.0" - "@lerna/package-graph" "5.5.0" - "@lerna/project" "5.5.0" - "@lerna/validation-error" "5.5.0" - "@lerna/write-log-file" "5.5.0" +"@lerna/command@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/command/-/command-5.5.1.tgz#1ee592a0a7e4d6b5a96823ebbb565f93f8859254" + integrity sha512-HHnGQpUh7kiHja/mB5rlnHnL3B3B12y4RBpJTxX22IkdcwsiO8g/n2FWh9MPQvuVcR2FRh4PWXhmfVnboZCAaw== + dependencies: + "@lerna/child-process" "5.5.1" + "@lerna/package-graph" "5.5.1" + "@lerna/project" "5.5.1" + "@lerna/validation-error" "5.5.1" + "@lerna/write-log-file" "5.5.1" clone-deep "^4.0.1" dedent "^0.7.0" execa "^5.0.0" is-ci "^2.0.0" npmlog "^6.0.2" -"@lerna/conventional-commits@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-5.5.0.tgz#570a7766fd21fb8c9e78e5980a30fdfc54d549cb" - integrity sha512-qPTRNCm3H4MvZAdQLzyYq7ifJyofMSeZmel232b5mglW3OSehxPQUxzr/u/0p8Nqs89uZxZRHyznLnhRNdXcJQ== +"@lerna/conventional-commits@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-5.5.1.tgz#225b7b5b612384142f6a269b6a100355f58ea479" + integrity sha512-oYTt1SbCNc/5N98ESFFDjWImU61qcYmQZBVxdzBDeZku/VRlaXw7Km5lSnVy7GrGkIPRxayunL4r1k32w5SZpA== dependencies: - "@lerna/validation-error" "5.5.0" + "@lerna/validation-error" "5.5.1" conventional-changelog-angular "^5.0.12" conventional-changelog-core "^4.2.4" conventional-recommended-bump "^6.1.0" @@ -1960,24 +1960,24 @@ pify "^5.0.0" semver "^7.3.4" -"@lerna/create-symlink@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-5.5.0.tgz#8532b0a1651f1ca7363e7e0e25c1d3ebdb4cea26" - integrity sha512-vWGvRbTh3ji3J/8mVyLPa9Yst4MZzp9W2+8hyYHw8eAzCtHPuH3Z0AReIHpYRfoViUvxIl/rEEuD2D1sDh61BQ== +"@lerna/create-symlink@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-5.5.1.tgz#4bb7dd7170b66f017f537fdac2fd8876f5911550" + integrity sha512-yOo1dXzoyeqhX4QCeswS0FjMSFyfNmHxtwE73+1k4uIYPWHWPHA/PW3y3hkOqh6QbBBg+y6+KCRiCOPaftZb6g== dependencies: cmd-shim "^5.0.0" fs-extra "^9.1.0" npmlog "^6.0.2" -"@lerna/create@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-5.5.0.tgz#78fbe4f56efe7f6715a05faff5d6f70bb297419a" - integrity sha512-B+ERbzgFMYspsaU9We65Wqf9Y7sGsEYVFPi3EKpCXxkvVr65YRFL6Mz/WAVggwYkR49umduXXVmjnCWcuT0Ydw== +"@lerna/create@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-5.5.1.tgz#5c2c61a46f7e432ce2b8c37edeac5a357762ac16" + integrity sha512-ZkN0rTTrIRIk9B+FzMXsjL8tK8wy4Orw7U3lVu8xe7LkxmK+lYxSOqcgfwWJjmA1yyoiNK+Xn++RlqXF7LW++Q== dependencies: - "@lerna/child-process" "5.5.0" - "@lerna/command" "5.5.0" - "@lerna/npm-conf" "5.5.0" - "@lerna/validation-error" "5.5.0" + "@lerna/child-process" "5.5.1" + "@lerna/command" "5.5.1" + "@lerna/npm-conf" "5.5.1" + "@lerna/validation-error" "5.5.1" dedent "^0.7.0" fs-extra "^9.1.0" globby "^11.0.2" @@ -1992,218 +1992,218 @@ validate-npm-package-name "^4.0.0" yargs-parser "20.2.4" -"@lerna/describe-ref@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-5.5.0.tgz#9c50ffac8c761408e091a9e717ccc7a74dbe513d" - integrity sha512-gNt9deRWcDoIKCwKRHu/TEt2HcHhQxzVlP8GQHYp4NuWTG9c+gTQfyuXvbZd0K9jCijPUBNy/oMb6usXceJWeg== +"@lerna/describe-ref@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-5.5.1.tgz#91f9e98db1257939a892f7d2dbfa3001f0d98b1c" + integrity sha512-pioaEFDKUcYsdgqz/wnjJ5pZyfrh7etJMYdxDDxijysn/96R28zTQMBrgGgjrBmkFyV9zmaxNaQXz1gx+IMohA== dependencies: - "@lerna/child-process" "5.5.0" + "@lerna/child-process" "5.5.1" npmlog "^6.0.2" -"@lerna/diff@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-5.5.0.tgz#37790ce266ca139abf1f7f4597aa86e8f2f12d1d" - integrity sha512-2PIka/4kKDOsh5Ht+X2OuLNTWzRk+LcnN5bCin87w7vGw3esdvlT1fj1tKjoZ1/aC/O8tqtKXyeP9WE6YHWVpw== +"@lerna/diff@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-5.5.1.tgz#492917abf0ea7ed19fd71e410f274ae5b08be605" + integrity sha512-mqKSafF5hGteVbRUPI41b8OZutolr6vqg2ObkKXFXpT6RvAX2NPpppHf0c0XORLWjc47p14Iv8xsQMCNwJ0tzQ== dependencies: - "@lerna/child-process" "5.5.0" - "@lerna/command" "5.5.0" - "@lerna/validation-error" "5.5.0" + "@lerna/child-process" "5.5.1" + "@lerna/command" "5.5.1" + "@lerna/validation-error" "5.5.1" npmlog "^6.0.2" -"@lerna/exec@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-5.5.0.tgz#bf97d67e772f326e58a3f3d259e77c61ca508a72" - integrity sha512-4asvrCYFGgnEbXtSiKJLDd6DShUl7FIRRCWx7JXJfa0B6sg00cB9Cg3JTp+F+cQWCOspRkzqRetqu57o6wRpXg== - dependencies: - "@lerna/child-process" "5.5.0" - "@lerna/command" "5.5.0" - "@lerna/filter-options" "5.5.0" - "@lerna/profiler" "5.5.0" - "@lerna/run-topologically" "5.5.0" - "@lerna/validation-error" "5.5.0" +"@lerna/exec@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-5.5.1.tgz#a9ff624177e0dc3fb177cac058350aaabbdd0b65" + integrity sha512-eip4MlIYkbxibIoV0ANjKdf9CSAER87C2zGY+GwHZKUSOD0I3xfhbPTkJozHBE3aqez6dR0pebi6cpNWvzEdIg== + dependencies: + "@lerna/child-process" "5.5.1" + "@lerna/command" "5.5.1" + "@lerna/filter-options" "5.5.1" + "@lerna/profiler" "5.5.1" + "@lerna/run-topologically" "5.5.1" + "@lerna/validation-error" "5.5.1" p-map "^4.0.0" -"@lerna/filter-options@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-5.5.0.tgz#f71297519d4b4407013f9500db82f089bf45b80a" - integrity sha512-Hwn4sOixZdWVe6SFZ7aPFjhMYoSHz0zbwy3t40KXuhjLqT8T5RLmGWW1u2Al6dQ5fuQyhWXGS4DWfobs7Th62A== +"@lerna/filter-options@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-5.5.1.tgz#945f6fdcad7e5fe2a0d8433054451c0013df1df5" + integrity sha512-U4erQgGBawazN0eDLQzWf5xu1mTaucVguzUblBSOfQm+fUBsYG5WYJtn9AvVLrUCQMwAV3L2+/NWb1FOkqArMw== dependencies: - "@lerna/collect-updates" "5.5.0" - "@lerna/filter-packages" "5.5.0" + "@lerna/collect-updates" "5.5.1" + "@lerna/filter-packages" "5.5.1" dedent "^0.7.0" npmlog "^6.0.2" -"@lerna/filter-packages@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-5.5.0.tgz#5fad84745eec01779a830040bab79c222d8794f3" - integrity sha512-Ad23aRPKgr/zt6jMWi8xKL+2z47GBQyxC4HhsDEMp62OGeGhGyK1sGW+S8OTEh17sIVpGG2GX9eCfnG8pvfxUQ== +"@lerna/filter-packages@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-5.5.1.tgz#26355cab4ee7013f236a042c9c48bf40d0a17f5b" + integrity sha512-970kc2w6Bzr9FAL8DFisOonDocj7VDFdNnVVJpaTbNnbuMLnCT4vPXHKHQku2XEgxfr1lgyFA+srzxiiLQGWaQ== dependencies: - "@lerna/validation-error" "5.5.0" + "@lerna/validation-error" "5.5.1" multimatch "^5.0.0" npmlog "^6.0.2" -"@lerna/get-npm-exec-opts@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.5.0.tgz#55fb0c2ce17b304e98df1f6ce714825dd86c413f" - integrity sha512-WRt560FB6rsj4yVtR1wIJWJufITajECaw1omNi2KkL7/o7ky4NvHACVOtibETUNMXrnuPJ/QBww4roLFVIAyog== +"@lerna/get-npm-exec-opts@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.5.1.tgz#a6c7e74bcb97cac51e4c741e636553950f0354f2" + integrity sha512-z8HoeCHbKVoHRjsyEwEhFF37vubX52CQOI+7TcEhjMYDXRrfKYfGcLXFh++DGihRQ7qk7ir27VrJgweeu/rcNw== dependencies: npmlog "^6.0.2" -"@lerna/get-packed@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-5.5.0.tgz#d8d103ed01ca19e72b19d6807232a808dad414c8" - integrity sha512-X+91ma9SQPrsVctsrFRBABn4+T87lnTEd/BngB7OYlYFsJCc+a6vd+5pnIWxKK5OiUr6+tRpMbJp8BUXJFdb4Q== +"@lerna/get-packed@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-5.5.1.tgz#9e4fc5e1e2ec02d3605b43fc224e5572e8a6806b" + integrity sha512-8zlT1Yzl1f8XfmNzu+zqJFKIqX28icbfVJp/hrbz7CEyn8JtTy9oNFokt3wbolmQ53LZ69B1gECZ1vlKOtoCSQ== dependencies: fs-extra "^9.1.0" ssri "^9.0.1" tar "^6.1.0" -"@lerna/github-client@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-5.5.0.tgz#8653db4049525c55a10d2e8ce2693ed7913ecfd4" - integrity sha512-CaBleVR0F+8Yv4FQu6r7Ocqnh3DEq6dQeu0r4RX+mc9jBn9J/N2SdLKRdC7vcvmkcLCxacg8ewuesYqvakQ8HQ== +"@lerna/github-client@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-5.5.1.tgz#7a23c4d6c15a0b210cea1603ce76dd03492de5df" + integrity sha512-921aWALGJT3L7iF3pYkj9tzXS1D/nZw32qWNoGQweTyAs7ycqm037WhdJPS67k+bqZL8flC80CbGEOuEMQq8Xw== dependencies: - "@lerna/child-process" "5.5.0" + "@lerna/child-process" "5.5.1" "@octokit/plugin-enterprise-rest" "^6.0.1" "@octokit/rest" "^19.0.3" git-url-parse "^12.0.0" npmlog "^6.0.2" -"@lerna/gitlab-client@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-5.5.0.tgz#b97de42c044345bd28bf672c2322876f87c055cf" - integrity sha512-ktKfBgQnt0MtyiTM3wuec47Wk7nHc+k2YvoC1roDGaXpgWS7lOQnA8RyorX4Hal3ZsrL95qi9vZOolWvUnxS3w== +"@lerna/gitlab-client@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-5.5.1.tgz#71bc082e2d4bd479edb26dc8729df84b4b7b26bc" + integrity sha512-hp0/p6cITz6pdZ1ToYNHcLHh8iusdXzYNwoLZABSuMAqvvPBuJt2aOxhU7DXBYCB+sQUj8K8qcVP9qpvBs98Wg== dependencies: node-fetch "^2.6.1" npmlog "^6.0.2" -"@lerna/global-options@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-5.5.0.tgz#80d4fd02ce0789751aebf535c983048c8298668c" - integrity sha512-ydEsnXi2LRpxkzpSf8GFeCdh1roTKANZdqzjkhuUlBHrKzKxywpNPpGbXmh6JziHMYdgKGZUjnY35TxBlVRN6Q== +"@lerna/global-options@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-5.5.1.tgz#a1ee86b976b7da1c94e272fc3b74763b2331dec3" + integrity sha512-Hy/Yrskk5wuigpG+4GN8cAfBk9tGY/NlJlONmjqcZr5mKc3DkJ2It03jeGtUK/j7hP3GNZo2nx2VGnJf40RGuA== -"@lerna/has-npm-version@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-5.5.0.tgz#9bc4a09bd6b6b72b54b0eeed4d65b1fb57a51ac4" - integrity sha512-ALvz0fF1I7Dx+c+0rvkFdqEtp/hs4F/Av2blhOaFWTs78D7FTQa7IpURmvdVDi56H30fqa9b4nEQqnaCRJZKpQ== +"@lerna/has-npm-version@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-5.5.1.tgz#403e3cd1020c4e0cd2125576c82d33dafa3134ef" + integrity sha512-t/eff0L3pX31L97mt26LENvIkt+e9fye8hSHUiLoFmUqjmy2yA1qQz2g+oQpGbRXpy+oz9rCCpBx+G4i13aN9A== dependencies: - "@lerna/child-process" "5.5.0" + "@lerna/child-process" "5.5.1" semver "^7.3.4" -"@lerna/import@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/import/-/import-5.5.0.tgz#0e7f491edef25181d9dd8e4b30ad5d55b767167c" - integrity sha512-mn87JOcb/j4KBV37Kv589avN5uArcJcASBonm1iWcTwxTvcNFj2BjxnUoVVY6EFamDfBLwWBcAvCO+cvmJkj3Q== - dependencies: - "@lerna/child-process" "5.5.0" - "@lerna/command" "5.5.0" - "@lerna/prompt" "5.5.0" - "@lerna/pulse-till-done" "5.5.0" - "@lerna/validation-error" "5.5.0" +"@lerna/import@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/import/-/import-5.5.1.tgz#d3ec3309841bbb209e25ac427f97f86397cce031" + integrity sha512-9eeagJrw8EBXuONOIagm45zhdHlHrDN9iT5c9OWHV8yh1MBevd7ERbDc8UluHHg5/dP6aqFJxtv54cDdb/3aJg== + dependencies: + "@lerna/child-process" "5.5.1" + "@lerna/command" "5.5.1" + "@lerna/prompt" "5.5.1" + "@lerna/pulse-till-done" "5.5.1" + "@lerna/validation-error" "5.5.1" dedent "^0.7.0" fs-extra "^9.1.0" p-map-series "^2.1.0" -"@lerna/info@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/info/-/info-5.5.0.tgz#1dc31a67fdc5288433ec76e06c94d616c043174f" - integrity sha512-2pgogAahv8tqY2sFarOCSXcxJFEag9z1pPGnHwKsq8NtekR0exLwFp93iTbDKRff8ScSmH82lNh22GFKZKLm/A== +"@lerna/info@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/info/-/info-5.5.1.tgz#ce251b4dce3809e00b8da6290d0faaa1f85a9900" + integrity sha512-gRrC2yy0qm9scb0B2xSGlPWBGnFMurie5SbGTz4hPesOdZEoiplMaL+e5y5cr67KDEhYPwIkL1sUXHLkTYZekA== dependencies: - "@lerna/command" "5.5.0" - "@lerna/output" "5.5.0" + "@lerna/command" "5.5.1" + "@lerna/output" "5.5.1" envinfo "^7.7.4" -"@lerna/init@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/init/-/init-5.5.0.tgz#f0f573914600131041accbf7bbc986458dda61be" - integrity sha512-dPjuk12s2pSnSL6ib7KQ+RKFyFYvsWAnSMro3sanb07og3tJkwVne8srlmYQsd/NghU8sBdQFFKIV+pzg2sg9w== +"@lerna/init@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/init/-/init-5.5.1.tgz#3db34be12abeb1e61b19c9ed97d1893b0b07e429" + integrity sha512-jyi8DZK2hylI8wjX5NgI/CBZEx2UJmmt12PiQuIvnfEvyTbd90MK0zj4AtyVMKpEal5oZCyprGFBb8MY8lS5Dg== dependencies: - "@lerna/child-process" "5.5.0" - "@lerna/command" "5.5.0" - "@lerna/project" "5.5.0" + "@lerna/child-process" "5.5.1" + "@lerna/command" "5.5.1" + "@lerna/project" "5.5.1" fs-extra "^9.1.0" p-map "^4.0.0" write-json-file "^4.3.0" -"@lerna/link@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/link/-/link-5.5.0.tgz#7ff74081fe6beb864096f6d5fd768c65d1c12c26" - integrity sha512-wucP0DBKBG2Mkr9PNkPB9ez5pRxLEIY+6s0hB3iTxCTmef5GYPlQ+ftiaN2/IGVYb569AW97YilROuU2gDMrMw== +"@lerna/link@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/link/-/link-5.5.1.tgz#66415ee3da5e2f0445a40d1f01108d6cc2cccaa7" + integrity sha512-U/voZ0f/3CHiui3cf9r2ad+jESQZnUAMf6n5oIysBFrT5YtAHHN4FYXtzjXJQ4TLFNke2YnLaw67mLaHeQDW+w== dependencies: - "@lerna/command" "5.5.0" - "@lerna/package-graph" "5.5.0" - "@lerna/symlink-dependencies" "5.5.0" - "@lerna/validation-error" "5.5.0" + "@lerna/command" "5.5.1" + "@lerna/package-graph" "5.5.1" + "@lerna/symlink-dependencies" "5.5.1" + "@lerna/validation-error" "5.5.1" p-map "^4.0.0" slash "^3.0.0" -"@lerna/list@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/list/-/list-5.5.0.tgz#8a4a5b2d9a102283e4adf55daba9f2a7585b5140" - integrity sha512-vic7CeD/TL0bh6hzpgHK2Ogz7MW1NB6Sws1J7cl5CTn4sAGm/KZ/g4MNsLFVLJNAiPh+t2cmT0ndyNluShnjqA== +"@lerna/list@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/list/-/list-5.5.1.tgz#3e61e406ba0bf09e584dcd0ddc0cf58894547d63" + integrity sha512-tRDUpV06ZpV6g2MvqRf35ozsRjKweCTCvS8z1o1/4laZen6aPK+Y9TIihvd36biDzCdNYz3IOLzvz8nO8WIJiA== dependencies: - "@lerna/command" "5.5.0" - "@lerna/filter-options" "5.5.0" - "@lerna/listable" "5.5.0" - "@lerna/output" "5.5.0" + "@lerna/command" "5.5.1" + "@lerna/filter-options" "5.5.1" + "@lerna/listable" "5.5.1" + "@lerna/output" "5.5.1" -"@lerna/listable@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-5.5.0.tgz#91c2d3ea2b1edab73a12291d3f44fcdfb446f17b" - integrity sha512-2kCpn8vlmRTVA3tGr1XRkHOW2ljXjb/hRNxSK3DUf0k6sl9sEdQFSH7cf5qPnCAPcuLHS7b8kuFhA6x8nXFP3g== +"@lerna/listable@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-5.5.1.tgz#c31477fe97b3a1ed319ac18cc41f3ad2b471ef27" + integrity sha512-EU+OUBV0vrySrDhlMHvfdA0NgwRtaTx5nc4XUtNrTN4Zqjav9iElrf6Xx9k0fUq27smiQ1tyutQEwGaNab0VTQ== dependencies: - "@lerna/query-graph" "5.5.0" + "@lerna/query-graph" "5.5.1" chalk "^4.1.0" columnify "^1.6.0" -"@lerna/log-packed@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-5.5.0.tgz#9485d22db36d17d56ed9875e24fe924ff9e7c45f" - integrity sha512-kVDEy29VfBQeha92IBuPq9W/kP6ffboCWuU64lBIAljTDdpFrMFBeLRrWfLSLIVe2fq8FpGk8PInNlDHmvT5PA== +"@lerna/log-packed@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-5.5.1.tgz#a0d94f14efe9fd07b387cc529ab0b5e39a0caa6e" + integrity sha512-i6SomT53TquZwrl8Ib+bleU0xYo8z36jIWGqfb0OlbNZswEbHQ5nvVO73Kjjc14g+eM0JGHwGi79LHFictcjVw== dependencies: byte-size "^7.0.0" columnify "^1.6.0" has-unicode "^2.0.1" npmlog "^6.0.2" -"@lerna/npm-conf@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-5.5.0.tgz#e97aa65c6a94b4a9a74c6f6bc3a1c15537917bc8" - integrity sha512-ml1Pmn26a61y6nFijpNE9RAbsNOF2XL1Kqyd3x7+XFaDmqbSDqo2g5qlsb4gTdUj/Uy1niRGzy3XdC0FH5G+mg== +"@lerna/npm-conf@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-5.5.1.tgz#e6173dfbd17c841e7140cf7f6229a4ef2fb0a646" + integrity sha512-ARqXAUlkEfFL00fgZa84aFzvp9GSPxAm4Fy1wzGz9ltXTwg/1yyGu6AucSKO1qa/JvcF2giWuXuvkJ3jsY4Log== dependencies: config-chain "^1.1.12" pify "^5.0.0" -"@lerna/npm-dist-tag@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-5.5.0.tgz#a8d4139689fb13b13320175202f07bf42112e902" - integrity sha512-Hz6n9tqbGUuqI1q9IS3tAGx95TkOqLfXRay9kr/hjswj+HKp0Dtw1cu8YRtizA7CuIWw831eXCbqfFyILfytaA== +"@lerna/npm-dist-tag@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-5.5.1.tgz#2d305c4ca46e0670ab34a4b2cc77882f6f318d40" + integrity sha512-DN3l01gpgV3M2MYo7zhZOgZrl21ltr+PoxK2LBVv5Snbhc88WqKm6slCrF5LXnfM6FraZ2UQTjBYXx8fQnpIDw== dependencies: - "@lerna/otplease" "5.5.0" + "@lerna/otplease" "5.5.1" npm-package-arg "8.1.1" npm-registry-fetch "^13.3.0" npmlog "^6.0.2" -"@lerna/npm-install@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-5.5.0.tgz#1ddff558304f62897feaad120c7da28331f5844e" - integrity sha512-axMtqZYuAl5qGcRCBYKqINimMrbQRM1f09sz9rKtwnx15066qT0IaKUt9YYo5bsZm/i3BXpBqcUxZXlGzQNWBQ== +"@lerna/npm-install@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-5.5.1.tgz#f176590a13d409388814a1fc9ae1c975ee4e7db3" + integrity sha512-O99aYWrWAz+EuHrsED2Wv0X6Ge1O9CrAfcIu6dMf8r5Q58LL67engi9AtH98cwx2LTeyYYHwksjewIsL/kn0ig== dependencies: - "@lerna/child-process" "5.5.0" - "@lerna/get-npm-exec-opts" "5.5.0" + "@lerna/child-process" "5.5.1" + "@lerna/get-npm-exec-opts" "5.5.1" fs-extra "^9.1.0" npm-package-arg "8.1.1" npmlog "^6.0.2" signal-exit "^3.0.3" write-pkg "^4.0.0" -"@lerna/npm-publish@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-5.5.0.tgz#388e60b46315c3bdc2b3b7227e503adad13454f7" - integrity sha512-eDcmga5CcXGmSdVXBO75eCX3vypEwQO/lN7VqRpLSOsIHIRUGbfwo/stbz8sIF4+HAkaAFGj6BScjvjlyoh2pQ== +"@lerna/npm-publish@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-5.5.1.tgz#ae93902d7512b70564e41da25370e781964459dc" + integrity sha512-ajdV2Vb9SOGGp7E7pvb0q7gHqQpd8fQ4DztPOQYrhMUILobJgu4oR3tojMp0XN7vki+pG/OmsOqrQY6M02AkPw== dependencies: - "@lerna/otplease" "5.5.0" - "@lerna/run-lifecycle" "5.5.0" + "@lerna/otplease" "5.5.1" + "@lerna/run-lifecycle" "5.5.1" fs-extra "^9.1.0" libnpmpublish "^6.0.4" npm-package-arg "8.1.1" @@ -2211,85 +2211,85 @@ pify "^5.0.0" read-package-json "^5.0.1" -"@lerna/npm-run-script@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-5.5.0.tgz#f98377022358cb179b304fc05253972afc272bfb" - integrity sha512-ltEtw28CLpG/VaWX4PZ1enJ0wxA/Qw8ScAwhQTZj0xL6Lhkq5H0LoEALVRAq2gK10h1p2IUs/W034oXT1chH0w== +"@lerna/npm-run-script@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-5.5.1.tgz#6fd98e78d72005056c5728a02feed1f72258971b" + integrity sha512-/68rDfOHtAEHAeAVYC1KXidQkssMBnz/9kcXlcdUaqe88LXSCuhWz49w7qWsUJvSmqwCuD7BWtVR5zx4GnLXhQ== dependencies: - "@lerna/child-process" "5.5.0" - "@lerna/get-npm-exec-opts" "5.5.0" + "@lerna/child-process" "5.5.1" + "@lerna/get-npm-exec-opts" "5.5.1" npmlog "^6.0.2" -"@lerna/otplease@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-5.5.0.tgz#68ac55c9dd2e1589772852834e9012d29d1f2e7a" - integrity sha512-zNS315iH2VRQz/LJTrqUUuEqMnNsCoMXOMOaBzcB/AL29mYMvJlT05dMqenMPKrRtW0tAFzPC7jLTzybdRa7Qg== +"@lerna/otplease@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-5.5.1.tgz#8f7ba90d0fc0c7556e822025ad013f0122c9072c" + integrity sha512-I2SEuIb7JWWT4xNUNWvKP7qaRHeQslMuiSdJuO6dV1fnH7FM7xEiHnWIhgDsQqacsci17Ix92toORaYmkU/kqg== dependencies: - "@lerna/prompt" "5.5.0" + "@lerna/prompt" "5.5.1" -"@lerna/output@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/output/-/output-5.5.0.tgz#dff2b336d9f92403af23b9533f8448763422818c" - integrity sha512-f+MXc9X1xEe2w0AC+CAMr093MumCTNYmyIt8eUMYQMmoRkWT2n4tN8/KvWw9ucSWLKMkZtOTJiC+S6RJ4nWUig== +"@lerna/output@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/output/-/output-5.5.1.tgz#3d27308adba8025cc7e011f2ab64da3f7ca2fabb" + integrity sha512-G8WpRlXWUCaJqxtVTCrYRSu5hBy0lxsfdzoEJwkVW9wXL6mL4WwH5TkstPq8LFSEr+NkWa+Hz25VO7LywQQWaQ== dependencies: npmlog "^6.0.2" -"@lerna/pack-directory@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-5.5.0.tgz#502d67f9ae4772755c8211cb62d46865f8e5aa9d" - integrity sha512-zHpIAeZOpIH/Slb8vuh75XR46mc4RZNwPS6XpwRgMRpp3Y1Bazlv6hDcq+pZTg1FwYKIDQDRfxW3IQi/aDPIjA== +"@lerna/pack-directory@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-5.5.1.tgz#0620a46d6b97b289c91c1cbad222135efb294e69" + integrity sha512-gvKnq9spvIPV4KGK1sxCk23jUjKdpzXtZFZ77QSDWfv2ZXOLcU9MvNC9xx23wcQRkX1IhKFngwMtIfcxrUZN2Q== dependencies: - "@lerna/get-packed" "5.5.0" - "@lerna/package" "5.5.0" - "@lerna/run-lifecycle" "5.5.0" - "@lerna/temp-write" "5.5.0" + "@lerna/get-packed" "5.5.1" + "@lerna/package" "5.5.1" + "@lerna/run-lifecycle" "5.5.1" + "@lerna/temp-write" "5.5.1" npm-packlist "^5.1.1" npmlog "^6.0.2" tar "^6.1.0" -"@lerna/package-graph@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-5.5.0.tgz#d73b84aed819924250cbc21c8fcf1d7e945f809a" - integrity sha512-g378NrCTEmVXqkAkv9EX8L3K7JTioPNuxItXTHQxlHDhZ2RM9KCVbT/ihwefVujWwwMPNij10bmfJUaEp2TGPQ== +"@lerna/package-graph@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-5.5.1.tgz#85d9ed617df9e58f68870086c2e6bafea1e9748f" + integrity sha512-BgkJquJcm/GaGwLmZRTCSAdUBitlGP4HmEP1NI9xrR1x9/OHgfVfkp5yDZBipA/6jY7ucumShU6mYE0fIP9CVA== dependencies: - "@lerna/prerelease-id-from-version" "5.5.0" - "@lerna/validation-error" "5.5.0" + "@lerna/prerelease-id-from-version" "5.5.1" + "@lerna/validation-error" "5.5.1" npm-package-arg "8.1.1" npmlog "^6.0.2" semver "^7.3.4" -"@lerna/package@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/package/-/package-5.5.0.tgz#2189e43c4acbbeabf6cd4ae33ad097da7789596e" - integrity sha512-vP08ZdMd3A7B0hEI4ZNgCeBef64yCidrnFUIiIhXb/tAsDmGCGqS2IFdGRNE9vv01tVg0WrPLim4tl8AjoigKw== +"@lerna/package@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/package/-/package-5.5.1.tgz#fab195c5da8ccb98dea81037f53e055e08f0e255" + integrity sha512-K2ylaS3DJ2SU/ptWHMeXkN1AUVPAOKNCP5/K8S42z/ZAmuLlt1LcTMznWPaCbYf2h3HExda8j3UmbEsOtYuixw== dependencies: load-json-file "^6.2.0" npm-package-arg "8.1.1" write-pkg "^4.0.0" -"@lerna/prerelease-id-from-version@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.5.0.tgz#5f228106078a13d58a84b364c2aa8634451798df" - integrity sha512-cpy0EgfO/7fXPhl/EsJnD8uGv0f8d6FHG2R1Xr7sJvmkffhkIy90qkFA7uSaZAA+ar9QFSAUJ+wGox0bhGJhHA== +"@lerna/prerelease-id-from-version@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.5.1.tgz#e8bba66dbba124c5ae30709d98fb10a276908713" + integrity sha512-F12+2ubWOY3pnUyTpV/jgZUMaFWas0ehFwYs20WMAnQQVyRHCVjg+bBfvQPGVnuJ6r7n3kXzn69TLDzouhRJcQ== dependencies: semver "^7.3.4" -"@lerna/profiler@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-5.5.0.tgz#6ab9604ea2850e38ca654d0b8d1f5594c83c2d7d" - integrity sha512-2DkkMxYCq/RsBptN+gJtmqwdrFqji6QMpNlm7v9JgS9kN2aHUIxcavtHXDaYf9sdPoey/bGypRv9DDTDcuw9MA== +"@lerna/profiler@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-5.5.1.tgz#7177dfd6170ffae3b37837fe68471a3672e4c89f" + integrity sha512-WDPgXEYl0lU/dBZ7ejiiNLqwJkPFR+d4vmIkPAFR4RsKQV4VCOCtlJ2QxOHroOPLJ7FrKD71rKyX4cZUIrHl7Q== dependencies: fs-extra "^9.1.0" npmlog "^6.0.2" upath "^2.0.1" -"@lerna/project@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/project/-/project-5.5.0.tgz#92f1988c70606dbe1aba7f83f265428f7c1601a0" - integrity sha512-TD6/QGv/+Uh7GRXM/9m3EC0QpK2+U1WA+hoE5pSnpU5oDzwwUkynS3RuAcd2ID19e/u/ajfZtV+xcpaM7t+SHw== +"@lerna/project@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/project/-/project-5.5.1.tgz#71b9a82596810d7b342a3fdfc39cd169e9ea1502" + integrity sha512-If3HOjNk/hcbe1gJDysKPws0RKvyG7rrGzkEmBGQ6bi6+eDdaK98XRFHTTAnHfBVOLLd1eimprZCUsYuCATdLg== dependencies: - "@lerna/package" "5.5.0" - "@lerna/validation-error" "5.5.0" + "@lerna/package" "5.5.1" + "@lerna/validation-error" "5.5.1" cosmiconfig "^7.0.0" dedent "^0.7.0" dot-prop "^6.0.1" @@ -2302,38 +2302,38 @@ resolve-from "^5.0.0" write-json-file "^4.3.0" -"@lerna/prompt@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-5.5.0.tgz#5c77de96f09bbcecb45d0db40233f4db7a12a1df" - integrity sha512-B7QEmmyleR+1XAewqEPdgZPecekJgVoAZ8YZgR8l4QlAMvf5BTHI//3AJI/HPN4DYZWGcjDoGFLEkpX906T8Rw== +"@lerna/prompt@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-5.5.1.tgz#fc17ae06849c7ea2c204912c1ee7314a7ba982bb" + integrity sha512-pKxdfwW4VwIapLj3kZBR3V6usCbZmCfkYUJSO//Vcw/dYf8X1lI9a+qR6imXSa1VwGdU/29oimMGpFn89BjyCA== dependencies: inquirer "^8.2.4" npmlog "^6.0.2" -"@lerna/publish@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-5.5.0.tgz#0ac309bf9fb8a37321534ab83aaf8fa0b6a967e2" - integrity sha512-ZstILgupYxB8TpGkWgPZg1uoFIQUij07kizHau1BZXdV3xwPU6jtYAzGXuztinJDnnxfwjc7SjuinoYZcbmJXg== - dependencies: - "@lerna/check-working-tree" "5.5.0" - "@lerna/child-process" "5.5.0" - "@lerna/collect-updates" "5.5.0" - "@lerna/command" "5.5.0" - "@lerna/describe-ref" "5.5.0" - "@lerna/log-packed" "5.5.0" - "@lerna/npm-conf" "5.5.0" - "@lerna/npm-dist-tag" "5.5.0" - "@lerna/npm-publish" "5.5.0" - "@lerna/otplease" "5.5.0" - "@lerna/output" "5.5.0" - "@lerna/pack-directory" "5.5.0" - "@lerna/prerelease-id-from-version" "5.5.0" - "@lerna/prompt" "5.5.0" - "@lerna/pulse-till-done" "5.5.0" - "@lerna/run-lifecycle" "5.5.0" - "@lerna/run-topologically" "5.5.0" - "@lerna/validation-error" "5.5.0" - "@lerna/version" "5.5.0" +"@lerna/publish@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-5.5.1.tgz#b0f7097e1c0d71f2c438d9cf242406de9d53f8cc" + integrity sha512-hQCEHGLHR4Wd3M/Ay7bmOViL1HRekI/VoJGy+JoG3rn/0H13cTh+lVhvwmtOGKJHsHBQkQ0WaZzwZF16/XLTzA== + dependencies: + "@lerna/check-working-tree" "5.5.1" + "@lerna/child-process" "5.5.1" + "@lerna/collect-updates" "5.5.1" + "@lerna/command" "5.5.1" + "@lerna/describe-ref" "5.5.1" + "@lerna/log-packed" "5.5.1" + "@lerna/npm-conf" "5.5.1" + "@lerna/npm-dist-tag" "5.5.1" + "@lerna/npm-publish" "5.5.1" + "@lerna/otplease" "5.5.1" + "@lerna/output" "5.5.1" + "@lerna/pack-directory" "5.5.1" + "@lerna/prerelease-id-from-version" "5.5.1" + "@lerna/prompt" "5.5.1" + "@lerna/pulse-till-done" "5.5.1" + "@lerna/run-lifecycle" "5.5.1" + "@lerna/run-topologically" "5.5.1" + "@lerna/validation-error" "5.5.1" + "@lerna/version" "5.5.1" fs-extra "^9.1.0" libnpmaccess "^6.0.3" npm-package-arg "8.1.1" @@ -2344,98 +2344,98 @@ pacote "^13.6.1" semver "^7.3.4" -"@lerna/pulse-till-done@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-5.5.0.tgz#fc5fbba9494f1e6c2aa2dd2b366b0cb59b5a11f0" - integrity sha512-PcPSCWGzLp00UGJ5VHDpdqpBQ9C9Cs7E5FImEITGHE9UwcAC23LwSp7tOzdXWPyj3u8PLYLn+ebt9ml1jWSKgA== +"@lerna/pulse-till-done@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-5.5.1.tgz#904a3722ceed4d4905051cf01b5205c9ed8ef3f6" + integrity sha512-fIE9+LRy172Utfei34QpAg34CFy890j2GCZFln6A+0M3aMNrXkLgF3Zn2awPCugXNu7tLqHRrdZ9ZiSeuk5FYg== dependencies: npmlog "^6.0.2" -"@lerna/query-graph@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-5.5.0.tgz#8e3baee06bb5a5272f947c40451d5a0b3be20b29" - integrity sha512-mqCzZRF+IDPSj2zYJ1eO3PQsZshiKf54BXAe7HnYYJNbs1i8JMRpdaLr3TEyKDpVTcVzbEmFKwGi7KMhJG6rBQ== +"@lerna/query-graph@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-5.5.1.tgz#7c2cea2e075941680fc478352f9ff101e7d133e9" + integrity sha512-BqkxJntH/2o+s9Qz0WUOnbA/SW+ASjkvrS/DJ9jVeZ6KQQykPx/VN+ZRcWCBaSDlJEjSyMiTZUPGqtbN5qV+QQ== dependencies: - "@lerna/package-graph" "5.5.0" + "@lerna/package-graph" "5.5.1" -"@lerna/resolve-symlink@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-5.5.0.tgz#3a90a7c6be3d7622c4698636736a88af299b02d9" - integrity sha512-J44Kc6OWa1uNZh+YSWuIBorTpTuXhuuJ7DtX4vwfF3AAp2frW6pBrmFZMibOcyOQ6QCp+PeiHQCXCF42uSq8pA== +"@lerna/resolve-symlink@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-5.5.1.tgz#5fdef838f904ff941de6c004c27c3b0d18f482e5" + integrity sha512-xuVPN9SrtOfx9crgYbfJX7c/TpGKQj2cKlkGNt1HqfD2GvUvLzksn1Wjj1Mq23yinPNXo2QDXr7XgjHuDNd48w== dependencies: fs-extra "^9.1.0" npmlog "^6.0.2" read-cmd-shim "^3.0.0" -"@lerna/rimraf-dir@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-5.5.0.tgz#fe22c154f2ebd678f27f5258cb655f7b3c948bb4" - integrity sha512-dwWN5SGXQ39FocRAZ3uL7tYUuK98r/VHQZRcJjJ8hxpuxti+EPzGegtA05NsvvmW2PpFsBzYKITFQHX3GX4LWA== +"@lerna/rimraf-dir@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-5.5.1.tgz#ab969eace4aac50d6cfaf46d47bb0e11e80f1b98" + integrity sha512-bS7NUKFMT1HsqEFA8mxtHD3jDnpS2xLfQjCyCb7FHHatL46ByZ4oex2965XqL2/aOf+C5aCvYmLFHQ9JN7E2cQ== dependencies: - "@lerna/child-process" "5.5.0" + "@lerna/child-process" "5.5.1" npmlog "^6.0.2" path-exists "^4.0.0" rimraf "^3.0.2" -"@lerna/run-lifecycle@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-5.5.0.tgz#50a434b9fd55134bb285c7c7a24532996a6c0d8d" - integrity sha512-BtnEO3IlZ7znUmQtSxd7oSSmgzJbSH+v58foTpbuvMtOBFJxV4LNyv2uyto2t4bYdCWEnw4ybd8j32aEEG9UNQ== +"@lerna/run-lifecycle@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-5.5.1.tgz#3dffcd63a295782e0a851159679879ed210c7019" + integrity sha512-ZM66N7e1sUxsckBnJxdP1NenPNo3hKjPi8fop4do61kwHrWakyRZHl5EEw3CgCWtC7QT+d3zQ/XgDQeJMYEUZg== dependencies: - "@lerna/npm-conf" "5.5.0" + "@lerna/npm-conf" "5.5.1" "@npmcli/run-script" "^4.1.7" npmlog "^6.0.2" p-queue "^6.6.2" -"@lerna/run-topologically@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-5.5.0.tgz#39d94868ab39e4f3951bd5322603695a1ebba2e0" - integrity sha512-zl4I/SNg/yiLja1aF0B4X22CRzpRdvLB47KGjAgiGydcHwx2TUmI3MPoQVjvUbaOuctF/wSMS2tI6Hgdo60I0Q== +"@lerna/run-topologically@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-5.5.1.tgz#11954aa9419e6fc5d5d6eee6644d333dd13fce85" + integrity sha512-27n6SY2X8hWIU2VkttNx+G9D5pUXkxvkum6fvWkOrT/3a5miIwmeZvk0t1qhJ2VHxheB3hpd8HntAb2I2tR62g== dependencies: - "@lerna/query-graph" "5.5.0" + "@lerna/query-graph" "5.5.1" p-queue "^6.6.2" -"@lerna/run@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/run/-/run-5.5.0.tgz#294a1b374567255e70e545ae2567ec5c2565dcf6" - integrity sha512-yYR65A/GcDgEMmk2lMSBHGAbdgLMi6wICugLzVXfXISuTbEMzN1dCwSeGBOxzK2cvKV2Bpn4WeEYs64FNmNJbQ== - dependencies: - "@lerna/command" "5.5.0" - "@lerna/filter-options" "5.5.0" - "@lerna/npm-run-script" "5.5.0" - "@lerna/output" "5.5.0" - "@lerna/profiler" "5.5.0" - "@lerna/run-topologically" "5.5.0" - "@lerna/timer" "5.5.0" - "@lerna/validation-error" "5.5.0" +"@lerna/run@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/run/-/run-5.5.1.tgz#8671e0e47641ede8d8f6ef8464c819d8c192c357" + integrity sha512-IVXkiOmTMm1jtrDznunzQx796D9LrwKhlmsTv4YTNfnnyPBlyDAobm/PmOUekf30LKrKvcgTRnbEQ6vWXTR93Q== + dependencies: + "@lerna/command" "5.5.1" + "@lerna/filter-options" "5.5.1" + "@lerna/npm-run-script" "5.5.1" + "@lerna/output" "5.5.1" + "@lerna/profiler" "5.5.1" + "@lerna/run-topologically" "5.5.1" + "@lerna/timer" "5.5.1" + "@lerna/validation-error" "5.5.1" p-map "^4.0.0" -"@lerna/symlink-binary@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-5.5.0.tgz#1af7df1905dc01b5312af35f1f2f77269ebb9a65" - integrity sha512-vpVzEWgVfKGzMheb9XizF8hF/Ypfov0iMPBSAzVNxu5eNQVUz3KFrIZNgiBsFdIVN4W/y4jLwOSgXXKwvIodkA== +"@lerna/symlink-binary@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-5.5.1.tgz#d0b68e8dd37e8adce5fcb7eb382975328e167e83" + integrity sha512-PhrpeO2+3S1bYURb8y7QykmvwS/3KT2nF6Tvv23aqHJOBnrD61I2x0lQdjZK71+WOvi+EN+CatHckNWez14zpw== dependencies: - "@lerna/create-symlink" "5.5.0" - "@lerna/package" "5.5.0" + "@lerna/create-symlink" "5.5.1" + "@lerna/package" "5.5.1" fs-extra "^9.1.0" p-map "^4.0.0" -"@lerna/symlink-dependencies@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-5.5.0.tgz#7b94c8385397bea1c1be4b280c335155f2e431cf" - integrity sha512-gqFZ4AeVr+nqyfg8c2xNizGzBemfgtCpGv4NnjA/66HJWCE+/fT7NTIi8Qk2glbYf37ojRcjUfc0RvW7NGv5qA== +"@lerna/symlink-dependencies@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-5.5.1.tgz#0536f872d06abe8d6d28bc477eac1c6a9caf750c" + integrity sha512-xfxTIbg/fUC0afRODbXnFeJ7inEEow4Jkt3agrI10BrztjDKOmoG65KPPh8j0TGKk46TmeN5DI2Ob/5sKRiRzA== dependencies: - "@lerna/create-symlink" "5.5.0" - "@lerna/resolve-symlink" "5.5.0" - "@lerna/symlink-binary" "5.5.0" + "@lerna/create-symlink" "5.5.1" + "@lerna/resolve-symlink" "5.5.1" + "@lerna/symlink-binary" "5.5.1" fs-extra "^9.1.0" p-map "^4.0.0" p-map-series "^2.1.0" -"@lerna/temp-write@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/temp-write/-/temp-write-5.5.0.tgz#82eb605edaba76ea2d43b95f7585dc92d7cadffe" - integrity sha512-7MmqTfyWcjGkgPkWHaldmCmDBSLka50z0+lsmZuGLwIvQl72ZfC+ZJF/6107m+hgtUJBpJQ3UYEhrrdfR4L46Q== +"@lerna/temp-write@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/temp-write/-/temp-write-5.5.1.tgz#954a35744a5e5e2fe36095a79f1501b541758fb9" + integrity sha512-Msuv4OBXXKJlbxhD4kAUs95XsPYGshoKwQSI2sqOinFXnOkkbhdPdRz+7cd4JKs5qMCEy0+5dh7haruYDnSWmQ== dependencies: graceful-fs "^4.1.15" is-stream "^2.0.0" @@ -2443,37 +2443,37 @@ temp-dir "^1.0.0" uuid "^8.3.2" -"@lerna/timer@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-5.5.0.tgz#c70ecc74a02757d76f9dd4b6013a2bacdb1bb6ae" - integrity sha512-jgCL2ZmZNn7sWL+M/TuGJukTkUs/il6EwBYcgd10h0JazQ4fAiBhFq36ZzTvYkz6ujKvKOcqyWrMdmi8Q339qA== +"@lerna/timer@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-5.5.1.tgz#fac4d0540641798ec38f6009de5d2073c9695d61" + integrity sha512-DLmCZG0dKh7+Ie/CzK+iz6RPRyAJbXt+4D8OA7n6o/K/Q6AERuNabCDS/3AhJKTdReEjoA2UpswrHXfBN48xVg== -"@lerna/validation-error@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-5.5.0.tgz#aad031859878516707c83b9e4d1ea9aeb0180005" - integrity sha512-o/8sEaZKdZdE4/t+E/cFpnYIiDzt7uMHVpWmpCG0l6nZSDzB8+5ehAAudy2qJOwxEAKJ6QGvi7jWLjc2NWa4HQ== +"@lerna/validation-error@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-5.5.1.tgz#8d9908fc32c299d2658b0fb27d0a9095deb7ccb7" + integrity sha512-sO5Y6GKmMPtYSKHHR5bNXf/HKISb2g/7uny96X28h+/DihiLhHb0q09fIqmY5WHA1AHsJProZFVEN3BlNrtfEg== dependencies: npmlog "^6.0.2" -"@lerna/version@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/version/-/version-5.5.0.tgz#a40dfd48b3d751d5007e48bcc9828fc69ee812ab" - integrity sha512-E6ZrzTrYwof5cSvyTpztZKOiJKAK+aXi/gfsGbLdbYGMArY4B/pYOMOcRMXHBh7BuLicMih/mRUb4M7uCnuE0A== - dependencies: - "@lerna/check-working-tree" "5.5.0" - "@lerna/child-process" "5.5.0" - "@lerna/collect-updates" "5.5.0" - "@lerna/command" "5.5.0" - "@lerna/conventional-commits" "5.5.0" - "@lerna/github-client" "5.5.0" - "@lerna/gitlab-client" "5.5.0" - "@lerna/output" "5.5.0" - "@lerna/prerelease-id-from-version" "5.5.0" - "@lerna/prompt" "5.5.0" - "@lerna/run-lifecycle" "5.5.0" - "@lerna/run-topologically" "5.5.0" - "@lerna/temp-write" "5.5.0" - "@lerna/validation-error" "5.5.0" +"@lerna/version@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/version/-/version-5.5.1.tgz#791e4812a91fe2ddaec6ec1d62ad1b995f931677" + integrity sha512-P2AWTBKRytnSOSS243u3/cz1ecOPG2LTMbiyVBcFnYSAgzHf8AcJYtyfu4aMFzpSD5JfVyYSMvraRiZqK4r7+Q== + dependencies: + "@lerna/check-working-tree" "5.5.1" + "@lerna/child-process" "5.5.1" + "@lerna/collect-updates" "5.5.1" + "@lerna/command" "5.5.1" + "@lerna/conventional-commits" "5.5.1" + "@lerna/github-client" "5.5.1" + "@lerna/gitlab-client" "5.5.1" + "@lerna/output" "5.5.1" + "@lerna/prerelease-id-from-version" "5.5.1" + "@lerna/prompt" "5.5.1" + "@lerna/run-lifecycle" "5.5.1" + "@lerna/run-topologically" "5.5.1" + "@lerna/temp-write" "5.5.1" + "@lerna/validation-error" "5.5.1" chalk "^4.1.0" dedent "^0.7.0" load-json-file "^6.2.0" @@ -2487,28 +2487,28 @@ slash "^3.0.0" write-json-file "^4.3.0" -"@lerna/write-log-file@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-5.5.0.tgz#6f3d7945ee6dda220f9188d3160eda775bd8941e" - integrity sha512-XPnp5B+bcmwpXJpJn45V8e2SU6Z1oTwW0vW9uW3l0nmbOvpT9PbPkf9hC80cZOWovXSBefUDwEGqA5fQdhvqGg== +"@lerna/write-log-file@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-5.5.1.tgz#d9ee4bf21ce843de92249d15ae3b7d55710114d2" + integrity sha512-gWdDQsG6bHsExa+/1+oHyPI/W+pW6IoKw8fKxs62YOZKei3jKxyQbgMZyMqOTSs76kIe2LiY5JsoBD7saN/ORg== dependencies: npmlog "^6.0.2" write-file-atomic "^4.0.1" -"@microsoft/tsdoc-config@0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@microsoft/tsdoc-config/-/tsdoc-config-0.16.1.tgz#4de11976c1202854c4618f364bf499b4be33e657" - integrity sha512-2RqkwiD4uN6MLnHFljqBlZIXlt/SaUT6cuogU1w2ARw4nKuuppSmR0+s+NC+7kXBQykd9zzu0P4HtBpZT5zBpQ== +"@microsoft/tsdoc-config@0.16.2": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@microsoft/tsdoc-config/-/tsdoc-config-0.16.2.tgz#b786bb4ead00d54f53839a458ce626c8548d3adf" + integrity sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw== dependencies: - "@microsoft/tsdoc" "0.14.1" + "@microsoft/tsdoc" "0.14.2" ajv "~6.12.6" jju "~1.4.0" resolve "~1.19.0" -"@microsoft/tsdoc@0.14.1": - version "0.14.1" - resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.14.1.tgz#155ef21065427901994e765da8a0ba0eaae8b8bd" - integrity sha512-6Wci+Tp3CgPt/B9B0a3J4s3yMgLNSku6w5TV6mN+61C71UqsRBv2FUibBf3tPGlNxebgPHMEUzKpb1ggE8KCKw== +"@microsoft/tsdoc@0.14.2": + version "0.14.2" + resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz#c3ec604a0b54b9a9b87e9735dfc59e1a5da6a5fb" + integrity sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -2672,62 +2672,65 @@ dependencies: nx "14.6.5" -"@nrwl/cypress@14.6.5": - version "14.6.5" - resolved "https://registry.yarnpkg.com/@nrwl/cypress/-/cypress-14.6.5.tgz#f902ef18957f9a422870c9391adf1057dcd392d8" - integrity sha512-bs0ElKIYklQ0N4B3JUVZ7BspQ+GUk3vjvTrelb0U+dSQur0Hj4BNGxNOpocZsLl2it3H1wb0Oh29Kt9GZO/dtw== +"@nrwl/cli@14.7.6": + version "14.7.6" + resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-14.7.6.tgz#e03752dc8b9e13099f318de21c31c6c36e80a810" + integrity sha512-AGGkBodn5+aPGVCMK/jOImYNf54mzEKBkWM56cYRcONP19bJcs9mWO7je4uAgiX79z5M37bic0e608MA2GLcbQ== + dependencies: + nx "14.7.6" + +"@nrwl/cypress@14.7.6": + version "14.7.6" + resolved "https://registry.yarnpkg.com/@nrwl/cypress/-/cypress-14.7.6.tgz#fc6e0c8327d748dbbb8b66a1de9a6cceb0b4cc75" + integrity sha512-8BZWwVRNd98BqEw9fp0TkDerz9e6grJT1w2/j5PitKWCiO0rm5eMcQ2YBSufBVpOrGkICppIQLGF4Sn8QQVdkA== dependencies: "@babel/core" "^7.0.1" "@babel/preset-env" "^7.0.0" "@cypress/webpack-preprocessor" "^5.12.0" - "@nrwl/devkit" "14.6.5" - "@nrwl/linter" "14.6.5" - "@nrwl/workspace" "14.6.5" + "@nrwl/devkit" "14.7.6" + "@nrwl/linter" "14.7.6" + "@nrwl/workspace" "14.7.6" "@phenomnomnominal/tsquery" "4.1.1" babel-loader "^8.0.2" chalk "4.1.0" dotenv "~10.0.0" - enhanced-resolve "^5.8.3" fork-ts-checker-webpack-plugin "7.2.13" - rxjs "^6.5.4" ts-loader "^9.3.1" - tsconfig-paths "^3.9.0" tsconfig-paths-webpack-plugin "3.5.2" tslib "^2.3.0" webpack "^4 || ^5" webpack-node-externals "^3.0.0" -"@nrwl/devkit@14.6.5": - version "14.6.5" - resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-14.6.5.tgz#0d7842cdca638fcfe4df702132dd042b987792aa" - integrity sha512-vt2dv52C38msoiZi36pgdN5MC3G+vLEmwXtVsIEz5ZFG69jh1BKEaxHsZWbBM+uXdGYmDm9ffUlCENQ0ZP560A== +"@nrwl/devkit@14.7.6": + version "14.7.6" + resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-14.7.6.tgz#e48cc94a34e09c0c4252a8479101b14ea4046e6b" + integrity sha512-ne4plj2ZDWB2UsJeXXU1FnW0DM3Fr3UdhQTuHjhenP+HcxvFYGp33/bX1FjnJPp5ZCuAPw7kA6gOe56bh6QQgQ== dependencies: "@phenomnomnominal/tsquery" "4.1.1" ejs "^3.1.7" ignore "^5.0.4" - semver "7.3.4" tslib "^2.3.0" -"@nrwl/eslint-plugin-nx@14.6.5": - version "14.6.5" - resolved "https://registry.yarnpkg.com/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-14.6.5.tgz#7c966417aa820b578248bcfc8279edd494efbcfd" - integrity sha512-B9OckdqqGp72MbSp4NmhfQ/mFpnMWI82Bq8AfP/Z3AwsWvjCGi0Y244DCEU3LJ8d58J2di/e1Jec+VMtsIbUZg== +"@nrwl/eslint-plugin-nx@14.7.6": + version "14.7.6" + resolved "https://registry.yarnpkg.com/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-14.7.6.tgz#95158d69835f8c89e7dad982502ef7e9efa6484a" + integrity sha512-V0xNKUKDoivKJYQQJHkoLyS0Nof30oG8wrpFHxpfz2DjFKRMCMyvmdzrwrxOhL3SdmYo2/9eBLKzyJtjlEdyhA== dependencies: - "@nrwl/devkit" "14.6.5" - "@nrwl/workspace" "14.6.5" - "@typescript-eslint/utils" "~5.33.1" + "@nrwl/devkit" "14.7.6" + "@nrwl/workspace" "14.7.6" + "@typescript-eslint/utils" "^5.36.1" chalk "4.1.0" confusing-browser-globals "^1.0.9" semver "7.3.4" -"@nrwl/jest@14.6.5": - version "14.6.5" - resolved "https://registry.yarnpkg.com/@nrwl/jest/-/jest-14.6.5.tgz#e3394e9e6acaadeba0d2eb6c4184aaf99976ebac" - integrity sha512-mpZUKAMFn3W22UbWXCpspAkFHskNARJ57DDuTYHBAcHPnmNVzR570Quv0QKNPPjrYT36gJOGqAWA8VuyrvNzyQ== +"@nrwl/jest@14.7.6": + version "14.7.6" + resolved "https://registry.yarnpkg.com/@nrwl/jest/-/jest-14.7.6.tgz#768eb5d554ac57bbcbb0f9c80df255d8a726f769" + integrity sha512-lmm2mCoDmb2aGTpVMRoAZ7RtUAZEAtgcHUqECI15sB7ZN/Xzp72ZJI4HkEe7MyLasZSWIctftPAnH7w6Ef1MFQ== dependencies: "@jest/reporters" "28.1.1" "@jest/test-result" "28.1.1" - "@nrwl/devkit" "14.6.5" + "@nrwl/devkit" "14.7.6" "@phenomnomnominal/tsquery" "4.1.1" chalk "4.1.0" dotenv "~10.0.0" @@ -2736,18 +2739,17 @@ jest-resolve "28.1.1" jest-util "28.1.1" resolve.exports "1.1.0" - rxjs "^6.5.4" tslib "^2.3.0" -"@nrwl/js@14.6.5": - version "14.6.5" - resolved "https://registry.yarnpkg.com/@nrwl/js/-/js-14.6.5.tgz#31efb9f7087993a7413c2d4dbde715d070f49237" - integrity sha512-SUHK5Wuul26NdEtDD6m8EZCILGcqhnjbfJR4OD/rAKi+WnZScT+clMUwFKHYQTO7wqk5rer7yfgH3ht2t5SWew== +"@nrwl/js@14.7.6": + version "14.7.6" + resolved "https://registry.yarnpkg.com/@nrwl/js/-/js-14.7.6.tgz#939e5c85b3e3d130f7a4893b1348f55007b0e3ea" + integrity sha512-n4vnIzgsBro0lHxme+HWn0CkUcPh8IZ4dvZiS3XteNddRHlNk1M8jTuQfZr+mQ4aSkE4UkiuxR8gTjijBM5WCg== dependencies: - "@nrwl/devkit" "14.6.5" - "@nrwl/jest" "14.6.5" - "@nrwl/linter" "14.6.5" - "@nrwl/workspace" "14.6.5" + "@nrwl/devkit" "14.7.6" + "@nrwl/jest" "14.7.6" + "@nrwl/linter" "14.7.6" + "@nrwl/workspace" "14.7.6" "@parcel/watcher" "2.0.4" chalk "4.1.0" fast-glob "3.2.7" @@ -2758,15 +2760,15 @@ source-map-support "0.5.19" tree-kill "1.2.2" -"@nrwl/linter@14.6.5": - version "14.6.5" - resolved "https://registry.yarnpkg.com/@nrwl/linter/-/linter-14.6.5.tgz#2593eb866856434f6d7ea2f414811984e8f5aba8" - integrity sha512-h57GwQE4HohSuU6HjJTKZpOX2ModVnPWy5M5fE+pqjdCEIRt+ZyHPKI69JKr0g2OyRjwMLAYxP7TwwwWjmki/Q== +"@nrwl/linter@14.7.6": + version "14.7.6" + resolved "https://registry.yarnpkg.com/@nrwl/linter/-/linter-14.7.6.tgz#884a370ca07ea1d0a87d698287b22937580d2972" + integrity sha512-H4HQSFYzgNG1o/CosaZCa0b7gyFdIBfuoUXkNDmHodtB4mxB8afsV/Arw0EaXNEsiv473Gkjau0VouK3H/vjQA== dependencies: - "@nrwl/devkit" "14.6.5" - "@nrwl/jest" "14.6.5" + "@nrwl/devkit" "14.7.6" + "@nrwl/jest" "14.7.6" "@phenomnomnominal/tsquery" "4.1.1" - nx "14.6.5" + nx "14.7.6" tmp "~0.2.1" tslib "^2.3.0" @@ -2783,49 +2785,71 @@ tar "6.1.11" yargs-parser ">=21.0.1" -"@nrwl/react@14.6.5": - version "14.6.5" - resolved "https://registry.yarnpkg.com/@nrwl/react/-/react-14.6.5.tgz#7c30a69eacc98469fa36e1d3de8ed4bd750b5d0e" - integrity sha512-kSAeuWt7JHdysMYiQZH3x6mcy3eIiWiGD98BfguJ+BGy875YM2pVaBb1x65vjbAt8dcAPeNkSs744287vkh2Ig== +"@nrwl/react@14.7.6": + version "14.7.6" + resolved "https://registry.yarnpkg.com/@nrwl/react/-/react-14.7.6.tgz#4b9f5b6d0902d9d76f0dcbf628b3e5bdb60fa25a" + integrity sha512-57SSHmq9GmLdVfSdpCwdgbZE9tgj5zz92+CLG89dXS57Qvde3NV4eTbtY7Vi9U5U42aW95Lw+bJ8rMQBtn9VPQ== dependencies: "@babel/core" "^7.15.0" "@babel/preset-react" "^7.14.5" - "@nrwl/cypress" "14.6.5" - "@nrwl/devkit" "14.6.5" - "@nrwl/jest" "14.6.5" - "@nrwl/js" "14.6.5" - "@nrwl/linter" "14.6.5" - "@nrwl/storybook" "14.6.5" - "@nrwl/web" "14.6.5" - "@nrwl/workspace" "14.6.5" + "@nrwl/cypress" "14.7.6" + "@nrwl/devkit" "14.7.6" + "@nrwl/jest" "14.7.6" + "@nrwl/js" "14.7.6" + "@nrwl/linter" "14.7.6" + "@nrwl/storybook" "14.7.6" + "@nrwl/web" "14.7.6" + "@nrwl/webpack" "14.7.6" + "@nrwl/workspace" "14.7.6" "@pmmmwh/react-refresh-webpack-plugin" "^0.5.7" "@svgr/webpack" "^6.1.2" chalk "4.1.0" - eslint-plugin-import "^2.25.2" - eslint-plugin-jsx-a11y "^6.5.1" - eslint-plugin-react "7.30.0" - eslint-plugin-react-hooks "^4.3.0" + css-loader "^6.4.0" minimatch "3.0.5" react-refresh "^0.10.0" semver "7.3.4" + stylus-loader "^6.2.0" url-loader "^4.1.1" webpack "^5.58.1" webpack-merge "^5.8.0" -"@nrwl/storybook@14.6.5": - version "14.6.5" - resolved "https://registry.yarnpkg.com/@nrwl/storybook/-/storybook-14.6.5.tgz#bdd4ee4495f33c2fa37bc0c564e55e3a68efa8aa" - integrity sha512-YHXn0wxBk+LropGbyW8kf8pKIfZgdVkpRYg6dEYLbD/WBldBkzY+KVkiQCc9+ngb7+5u5Xo53ZjWeC+6MKn3Pg== - dependencies: - "@nrwl/cypress" "14.6.5" - "@nrwl/devkit" "14.6.5" - "@nrwl/linter" "14.6.5" - "@nrwl/workspace" "14.6.5" - core-js "^3.6.5" +"@nrwl/rollup@14.7.6": + version "14.7.6" + resolved "https://registry.yarnpkg.com/@nrwl/rollup/-/rollup-14.7.6.tgz#23aab5869019516383715906dd8c6aad25a3b739" + integrity sha512-epZ6/YNQQtE5b9SgP13yqgZrM8g0aDkeA8Mz3PnJYxBST21PlhDB1uciPfKCTbp11guGyqKovtc1KLxj5uldng== + dependencies: + "@nrwl/devkit" "14.7.6" + "@nrwl/js" "14.7.6" + "@nrwl/workspace" "14.7.6" + "@rollup/plugin-babel" "^5.3.0" + "@rollup/plugin-commonjs" "^20.0.0" + "@rollup/plugin-image" "^2.1.0" + "@rollup/plugin-json" "^4.1.0" + "@rollup/plugin-node-resolve" "^13.0.4" + autoprefixer "^10.4.9" + babel-plugin-transform-async-to-promises "^0.8.15" + chalk "4.1.0" + fs-extra "^10.1.0" + postcss "^8.4.14" + rollup "^2.56.2" + rollup-plugin-copy "^3.4.0" + rollup-plugin-peer-deps-external "^2.2.4" + rollup-plugin-postcss "^4.0.1" + rollup-plugin-typescript2 "^0.31.1" + rxjs "^6.5.4" + tslib "^2.3.0" + +"@nrwl/storybook@14.7.6": + version "14.7.6" + resolved "https://registry.yarnpkg.com/@nrwl/storybook/-/storybook-14.7.6.tgz#308029193a95ce92bc198dfbe7d68960db26d03e" + integrity sha512-+DmU8GvD4vZ8qYk3eGgeKe/VX1RRZwPt9f7kOgEatvY+AI1FigJlHFORCvHUCgKIlKUaCHXUkPHK78KZCoTGgw== + dependencies: + "@nrwl/cypress" "14.7.6" + "@nrwl/devkit" "14.7.6" + "@nrwl/linter" "14.7.6" + "@nrwl/workspace" "14.7.6" dotenv "~10.0.0" semver "7.3.4" - ts-loader "^9.3.1" - tsconfig-paths-webpack-plugin "3.5.2" "@nrwl/tao@14.6.5": version "14.6.5" @@ -2834,52 +2858,61 @@ dependencies: nx "14.6.5" -"@nrwl/web@14.6.5": - version "14.6.5" - resolved "https://registry.yarnpkg.com/@nrwl/web/-/web-14.6.5.tgz#e1d0ce4f749ecb35007f609265c27a1f504fd374" - integrity sha512-RyJfl/I4Ua8/6zWZ8Y2zAy30tyIbwUra/8tGFfh5YWVog0YGSexTJynTeKmZ0jo7JbqhTXKinzgmqpW9K9AOTQ== +"@nrwl/tao@14.7.6": + version "14.7.6" + resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-14.7.6.tgz#0932844260bffe556e2806de02730368a2db136e" + integrity sha512-yiIjpMPDN7N2asrIYPsoQMY9HZmBE9m0/EQCu9dWtmevYSMygbaEFEBO8hkNG+clvylWOoUMBE4RfVOMYQRK3g== + dependencies: + nx "14.7.6" + +"@nrwl/web@14.7.6": + version "14.7.6" + resolved "https://registry.yarnpkg.com/@nrwl/web/-/web-14.7.6.tgz#a1aba1e26cfe18edf7b4bf562bac6bd9770c9229" + integrity sha512-Aj9OcC287qqJPv4nx6uWP6LtoC2kdpXAm18eiYuBbVtsx1mSz7nOwmKf821qoBBH3JHqHtzy9LgXIT9IKPQsrw== dependencies: "@babel/core" "^7.15.0" "@babel/plugin-proposal-class-properties" "^7.14.5" "@babel/plugin-proposal-decorators" "^7.14.5" - "@babel/plugin-transform-regenerator" "^7.14.5" "@babel/plugin-transform-runtime" "^7.15.0" "@babel/preset-env" "^7.15.0" "@babel/preset-typescript" "^7.15.0" "@babel/runtime" "^7.14.8" - "@nrwl/cypress" "14.6.5" - "@nrwl/devkit" "14.6.5" - "@nrwl/jest" "14.6.5" - "@nrwl/js" "14.6.5" - "@nrwl/linter" "14.6.5" - "@nrwl/workspace" "14.6.5" - "@pmmmwh/react-refresh-webpack-plugin" "^0.5.7" - "@rollup/plugin-babel" "^5.3.0" - "@rollup/plugin-commonjs" "^20.0.0" - "@rollup/plugin-image" "^2.1.0" - "@rollup/plugin-json" "^4.1.0" - "@rollup/plugin-node-resolve" "^13.0.4" - autoprefixer "^10.4.7" - babel-loader "^8.2.2" + "@nrwl/cypress" "14.7.6" + "@nrwl/devkit" "14.7.6" + "@nrwl/jest" "14.7.6" + "@nrwl/js" "14.7.6" + "@nrwl/linter" "14.7.6" + "@nrwl/rollup" "14.7.6" + "@nrwl/webpack" "14.7.6" + "@nrwl/workspace" "14.7.6" babel-plugin-const-enum "^1.0.1" babel-plugin-macros "^2.8.0" - babel-plugin-transform-async-to-promises "^0.8.15" babel-plugin-transform-typescript-metadata "^0.3.1" + chalk "4.1.0" + chokidar "^3.5.1" + http-server "14.1.0" + ignore "^5.0.4" + tslib "^2.3.0" + +"@nrwl/webpack@14.7.6": + version "14.7.6" + resolved "https://registry.yarnpkg.com/@nrwl/webpack/-/webpack-14.7.6.tgz#97b06448bb3796621403c34c5e3bcf47346a08fe" + integrity sha512-4HWYj+tGMup/EKvfdbL13699iZTe2BBXmh2BXivExcLhEG9BRfXppQTgDpenfYJC72CqGfMieCEan/fR3phpVQ== + dependencies: + "@nrwl/devkit" "14.7.6" + "@nrwl/js" "14.7.6" + "@nrwl/workspace" "14.7.6" + autoprefixer "^10.4.9" + babel-loader "^8.2.2" browserslist "^4.16.6" - bytes "^3.1.0" - caniuse-lite "^1.0.30001251" + caniuse-lite "^1.0.30001394" chalk "4.1.0" chokidar "^3.5.1" copy-webpack-plugin "^10.2.4" - core-js "^3.6.5" - css-loader "^6.4.0" css-minimizer-webpack-plugin "^3.4.1" - enhanced-resolve "^5.8.3" file-loader "^6.2.0" fork-ts-checker-webpack-plugin "7.2.13" fs-extra "^10.1.0" - http-server "14.1.0" - identity-obj-proxy "3.0.0" ignore "^5.0.4" less "3.12.2" less-loader "^10.1.0" @@ -2892,17 +2925,9 @@ postcss-import "~14.1.0" postcss-loader "^6.1.1" raw-loader "^4.0.2" - react-refresh "^0.10.0" - rollup "^2.56.2" - rollup-plugin-copy "^3.4.0" - rollup-plugin-peer-deps-external "^2.2.4" - rollup-plugin-postcss "^4.0.1" - rollup-plugin-typescript2 "^0.31.1" rxjs "^6.5.4" sass "^1.42.1" sass-loader "^12.2.0" - semver "7.3.4" - source-map "0.7.3" source-map-loader "^3.0.0" style-loader "^3.3.0" stylus "^0.55.0" @@ -2916,17 +2941,18 @@ webpack "^5.58.1" webpack-dev-server "^4.9.3" webpack-merge "^5.8.0" + webpack-node-externals "^3.0.0" webpack-sources "^3.2.3" webpack-subresource-integrity "^5.1.0" -"@nrwl/workspace@14.6.5": - version "14.6.5" - resolved "https://registry.yarnpkg.com/@nrwl/workspace/-/workspace-14.6.5.tgz#0db6570a636b53323c0774978a3a85b004a7e0eb" - integrity sha512-ucsdkGf5j8gy4toMMUwLbCMjVl74pJ/QuhfY5DI9eXSnIFVlCLDhWm5AEmNd2NQm1QeUZ3hrBu3kkis/mVkT1w== +"@nrwl/workspace@14.7.6": + version "14.7.6" + resolved "https://registry.yarnpkg.com/@nrwl/workspace/-/workspace-14.7.6.tgz#f0a4a9395f3299bf893a05c58a0ddf075f8c11c2" + integrity sha512-zfHmqAlC/ST5EgWcsTWdoE8RsYRWFfoVI4VYT+y96gG+///moZD/djvTjz1E+EbXky7NzFPky2jpz8HcGIStZA== dependencies: - "@nrwl/devkit" "14.6.5" - "@nrwl/jest" "14.6.5" - "@nrwl/linter" "14.6.5" + "@nrwl/devkit" "14.7.6" + "@nrwl/jest" "14.7.6" + "@nrwl/linter" "14.7.6" "@parcel/watcher" "2.0.4" chalk "4.1.0" chokidar "^3.5.1" @@ -2941,7 +2967,7 @@ ignore "^5.0.4" minimatch "3.0.5" npm-run-path "^4.0.1" - nx "14.6.5" + nx "14.7.6" open "^8.4.0" rxjs "^6.5.4" semver "7.3.4" @@ -3086,6 +3112,11 @@ schema-utils "^3.0.0" source-map "^0.7.3" +"@remix-run/router@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.0.0.tgz#a2189335a5f6428aa904ccc291988567018b6e01" + integrity sha512-SCR1cxRSMNKjaVYptCzBApPDqGwa3FGdjVHc+rOToocNPHQdIYLZBfv/3f+KvYuXDkUGVIW9IAzmPNZDRL1I4A== + "@rollup/plugin-babel@^5.3.0": version "5.3.1" resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" @@ -3571,10 +3602,10 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/lodash@^4.14.182": - version "4.14.184" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.184.tgz#23f96cd2a21a28e106dc24d825d4aa966de7a9fe" - integrity sha512-RoZphVtHbxPZizt4IcILciSWiC6dcn+eZ8oX9IWEYfDMcocdd42f7NPI6fQj+6zI8y4E0L7gu2pcZKLGTRaV9Q== +"@types/lodash@^4.14.185": + version "4.14.185" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.185.tgz#c9843f5a40703a8f5edfd53358a58ae729816908" + integrity sha512-evMDG1bC4rgQg4ku9tKpuMh5iBNEwNa3tf9zRHdP1qlv+1WUg44xat4IxCE14gIpZRGUUWAx2VhItCZc25NfMA== "@types/marked@^4.0.7": version "4.0.7" @@ -3618,10 +3649,10 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.28.tgz#ddb82da2fff476a8e827e8773c84c19d9c235278" integrity sha512-CK2fnrQlIgKlCV3N2kM+Gznb5USlwA1KFX3rJVHmgVk6NJxFPuQ86pAcvKnu37IA4BGlSRz7sEE1lHL1aLZ/eQ== -"@types/node@^18.7.16": - version "18.7.16" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.16.tgz#0eb3cce1e37c79619943d2fd903919fc30850601" - integrity sha512-EQHhixfu+mkqHMZl1R2Ovuvn47PUw18azMJOTwSZr9/fhzHNGXAJ0ma0dayRVchprpCj0Kc1K1xKoWaATWF1qg== +"@types/node@^18.7.18": + version "18.7.18" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.18.tgz#633184f55c322e4fb08612307c274ee6d5ed3154" + integrity sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg== "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -3669,10 +3700,10 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/react@^18.0.18": - version "18.0.18" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.18.tgz#9f16f33d57bc5d9dca848d12c3572110ff9429ac" - integrity sha512-6hI08umYs6NaiHFEEGioXnxJ+oEhY3eRz8VCUaudZmGdtvPviCJB8mgaMxaDWAdPSYd4eFavrPk2QIolwbLYrg== +"@types/react@^18.0.20": + version "18.0.20" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.20.tgz#e4c36be3a55eb5b456ecf501bd4a00fd4fd0c9ab" + integrity sha512-MWul1teSPxujEHVwZl4a5HxQ9vVNsjTchVA+xRqv/VYGCuKGAU6UhfrTdF5aBefwD1BHUD8i/zq+O/vyCm/FrA== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -3773,131 +3804,84 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^5.36.2": - version "5.36.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.36.2.tgz#6df092a20e0f9ec748b27f293a12cb39d0c1fe4d" - integrity sha512-OwwR8LRwSnI98tdc2z7mJYgY60gf7I9ZfGjN5EjCwwns9bdTuQfAXcsjSB2wSQ/TVNYSGKf4kzVXbNGaZvwiXw== +"@typescript-eslint/eslint-plugin@^5.38.0": + version "5.38.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.38.0.tgz#ac919a199548861012e8c1fb2ec4899ac2bc22ae" + integrity sha512-GgHi/GNuUbTOeoJiEANi0oI6fF3gBQc3bGFYj40nnAPCbhrtEDf2rjBmefFadweBmO1Du1YovHeDP2h5JLhtTQ== dependencies: - "@typescript-eslint/scope-manager" "5.36.2" - "@typescript-eslint/type-utils" "5.36.2" - "@typescript-eslint/utils" "5.36.2" + "@typescript-eslint/scope-manager" "5.38.0" + "@typescript-eslint/type-utils" "5.38.0" + "@typescript-eslint/utils" "5.38.0" debug "^4.3.4" - functional-red-black-tree "^1.0.1" ignore "^5.2.0" regexpp "^3.2.0" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.36.2": - version "5.36.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.36.2.tgz#3ddf323d3ac85a25295a55fcb9c7a49ab4680ddd" - integrity sha512-qS/Kb0yzy8sR0idFspI9Z6+t7mqk/oRjnAYfewG+VN73opAUvmYL3oPIMmgOX6CnQS6gmVIXGshlb5RY/R22pA== +"@typescript-eslint/parser@^5.38.0": + version "5.38.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.38.0.tgz#5a59a1ff41a7b43aacd1bb2db54f6bf1c02b2ff8" + integrity sha512-/F63giJGLDr0ms1Cr8utDAxP2SPiglaD6V+pCOcG35P2jCqdfR7uuEhz1GIC3oy4hkUF8xA1XSXmd9hOh/a5EA== dependencies: - "@typescript-eslint/scope-manager" "5.36.2" - "@typescript-eslint/types" "5.36.2" - "@typescript-eslint/typescript-estree" "5.36.2" + "@typescript-eslint/scope-manager" "5.38.0" + "@typescript-eslint/types" "5.38.0" + "@typescript-eslint/typescript-estree" "5.38.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.33.1": - version "5.33.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz#8d31553e1b874210018ca069b3d192c6d23bc493" - integrity sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA== - dependencies: - "@typescript-eslint/types" "5.33.1" - "@typescript-eslint/visitor-keys" "5.33.1" - -"@typescript-eslint/scope-manager@5.36.2": - version "5.36.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.36.2.tgz#a75eb588a3879ae659514780831370642505d1cd" - integrity sha512-cNNP51L8SkIFSfce8B1NSUBTJTu2Ts4nWeWbFrdaqjmn9yKrAaJUBHkyTZc0cL06OFHpb+JZq5AUHROS398Orw== +"@typescript-eslint/scope-manager@5.38.0": + version "5.38.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.38.0.tgz#8f0927024b6b24e28671352c93b393a810ab4553" + integrity sha512-ByhHIuNyKD9giwkkLqzezZ9y5bALW8VNY6xXcP+VxoH4JBDKjU5WNnsiD4HJdglHECdV+lyaxhvQjTUbRboiTA== dependencies: - "@typescript-eslint/types" "5.36.2" - "@typescript-eslint/visitor-keys" "5.36.2" + "@typescript-eslint/types" "5.38.0" + "@typescript-eslint/visitor-keys" "5.38.0" -"@typescript-eslint/type-utils@5.36.2": - version "5.36.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.36.2.tgz#752373f4babf05e993adf2cd543a763632826391" - integrity sha512-rPQtS5rfijUWLouhy6UmyNquKDPhQjKsaKH0WnY6hl/07lasj8gPaH2UD8xWkePn6SC+jW2i9c2DZVDnL+Dokw== +"@typescript-eslint/type-utils@5.38.0": + version "5.38.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.38.0.tgz#c8b7f681da825fcfc66ff2b63d70693880496876" + integrity sha512-iZq5USgybUcj/lfnbuelJ0j3K9dbs1I3RICAJY9NZZpDgBYXmuUlYQGzftpQA9wC8cKgtS6DASTvF3HrXwwozA== dependencies: - "@typescript-eslint/typescript-estree" "5.36.2" - "@typescript-eslint/utils" "5.36.2" + "@typescript-eslint/typescript-estree" "5.38.0" + "@typescript-eslint/utils" "5.38.0" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.33.1": - version "5.33.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.33.1.tgz#3faef41793d527a519e19ab2747c12d6f3741ff7" - integrity sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ== - -"@typescript-eslint/types@5.36.2": - version "5.36.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.36.2.tgz#a5066e500ebcfcee36694186ccc57b955c05faf9" - integrity sha512-9OJSvvwuF1L5eS2EQgFUbECb99F0mwq501w0H0EkYULkhFa19Qq7WFbycdw1PexAc929asupbZcgjVIe6OK/XQ== - -"@typescript-eslint/typescript-estree@5.33.1": - version "5.33.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz#a573bd360790afdcba80844e962d8b2031984f34" - integrity sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA== - dependencies: - "@typescript-eslint/types" "5.33.1" - "@typescript-eslint/visitor-keys" "5.33.1" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" +"@typescript-eslint/types@5.38.0": + version "5.38.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.38.0.tgz#8cd15825e4874354e31800dcac321d07548b8a5f" + integrity sha512-HHu4yMjJ7i3Cb+8NUuRCdOGu2VMkfmKyIJsOr9PfkBVYLYrtMCK/Ap50Rpov+iKpxDTfnqvDbuPLgBE5FwUNfA== -"@typescript-eslint/typescript-estree@5.36.2": - version "5.36.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.36.2.tgz#0c93418b36c53ba0bc34c61fe9405c4d1d8fe560" - integrity sha512-8fyH+RfbKc0mTspfuEjlfqA4YywcwQK2Amcf6TDOwaRLg7Vwdu4bZzyvBZp4bjt1RRjQ5MDnOZahxMrt2l5v9w== +"@typescript-eslint/typescript-estree@5.38.0": + version "5.38.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.38.0.tgz#89f86b2279815c6fb7f57d68cf9b813f0dc25d98" + integrity sha512-6P0RuphkR+UuV7Avv7MU3hFoWaGcrgOdi8eTe1NwhMp2/GjUJoODBTRWzlHpZh6lFOaPmSvgxGlROa0Sg5Zbyg== dependencies: - "@typescript-eslint/types" "5.36.2" - "@typescript-eslint/visitor-keys" "5.36.2" + "@typescript-eslint/types" "5.38.0" + "@typescript-eslint/visitor-keys" "5.38.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.36.2": - version "5.36.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.36.2.tgz#b01a76f0ab244404c7aefc340c5015d5ce6da74c" - integrity sha512-uNcopWonEITX96v9pefk9DC1bWMdkweeSsewJ6GeC7L6j2t0SJywisgkr9wUTtXk90fi2Eljj90HSHm3OGdGRg== +"@typescript-eslint/utils@5.38.0", "@typescript-eslint/utils@^5.36.1": + version "5.38.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.38.0.tgz#5b31f4896471818153790700eb02ac869a1543f4" + integrity sha512-6sdeYaBgk9Fh7N2unEXGz+D+som2QCQGPAf1SxrkEr+Z32gMreQ0rparXTNGRRfYUWk/JzbGdcM8NSSd6oqnTA== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.36.2" - "@typescript-eslint/types" "5.36.2" - "@typescript-eslint/typescript-estree" "5.36.2" + "@typescript-eslint/scope-manager" "5.38.0" + "@typescript-eslint/types" "5.38.0" + "@typescript-eslint/typescript-estree" "5.38.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/utils@~5.33.1": - version "5.33.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.33.1.tgz#171725f924fe1fe82bb776522bb85bc034e88575" - integrity sha512-uphZjkMaZ4fE8CR4dU7BquOV6u0doeQAr8n6cQenl/poMaIyJtBu8eys5uk6u5HiDH01Mj5lzbJ5SfeDz7oqMQ== +"@typescript-eslint/visitor-keys@5.38.0": + version "5.38.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.38.0.tgz#60591ca3bf78aa12b25002c0993d067c00887e34" + integrity sha512-MxnrdIyArnTi+XyFLR+kt/uNAcdOnmT+879os7qDRI+EYySR4crXJq9BXPfRzzLGq0wgxkwidrCJ9WCAoacm1w== dependencies: - "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.33.1" - "@typescript-eslint/types" "5.33.1" - "@typescript-eslint/typescript-estree" "5.33.1" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - -"@typescript-eslint/visitor-keys@5.33.1": - version "5.33.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz#0155c7571c8cd08956580b880aea327d5c34a18b" - integrity sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg== - dependencies: - "@typescript-eslint/types" "5.33.1" - eslint-visitor-keys "^3.3.0" - -"@typescript-eslint/visitor-keys@5.36.2": - version "5.36.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.36.2.tgz#2f8f78da0a3bad3320d2ac24965791ac39dace5a" - integrity sha512-BtRvSR6dEdrNt7Net2/XDjbYKU5Ml6GqJgVfXT0CxTCJlnIqK7rAGreuWKMT2t8cFUT2Msv5oxw0GMRD7T5J7A== - dependencies: - "@typescript-eslint/types" "5.36.2" + "@typescript-eslint/types" "5.38.0" eslint-visitor-keys "^3.3.0" "@ungap/promise-all-settled@1.1.2": @@ -4438,13 +4422,13 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -autoprefixer@^10.4.7: - version "10.4.8" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.8.tgz#92c7a0199e1cfb2ad5d9427bd585a3d75895b9e5" - integrity sha512-75Jr6Q/XpTqEf6D2ltS5uMewJIx5irCU1oBYJrWjFenq/m12WRRrz6g15L1EIoYvPLXTbEry7rDOwrcYNj77xw== +autoprefixer@^10.4.9: + version "10.4.11" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.11.tgz#835136aff1d9cd43640151e0d2dba00f8eac7c1c" + integrity sha512-5lHp6DgRodxlBLSkzHOTcufWFflH1ewfy2hvFQyjrblBFlP/0Yh4O/Wrg4ow8WRlN3AAUFFLAQwX8hTptzqVHg== dependencies: browserslist "^4.21.3" - caniuse-lite "^1.0.30001373" + caniuse-lite "^1.0.30001399" fraction.js "^4.2.0" normalize-range "^0.1.2" picocolors "^1.0.0" @@ -4928,7 +4912,7 @@ bytes@3.0.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== -bytes@3.1.2, bytes@^3.1.0: +bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== @@ -5042,11 +5026,16 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001251, caniuse-lite@^1.0.30001370, caniuse-lite@^1.0.30001373: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001370: version "1.0.30001381" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001381.tgz#e62955310e6e69cdf4b40bc5bc0895aa24bc4b8b" integrity sha512-fEnkDOKpvp6qc+olg7+NzE1SqyfiyKf4uci7fAU38M3zxs0YOyKOxW/nMZ2l9sJbt7KZHcDIxUnbI0Iime7V4w== +caniuse-lite@^1.0.30001394, caniuse-lite@^1.0.30001399: + version "1.0.30001406" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001406.tgz#d0146e7919635479f873b4507517b627f66ab269" + integrity sha512-bWTlaXUy/rq0BBtYShc/jArYfBPjEV95euvZ8JVtO43oQExEN/WquoqpufFjNu4kSpi5cy5kMbNvzztWDfv1Jg== + capture-stack-trace@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" @@ -5648,15 +5637,10 @@ core-js-pure@^3.20.2, core-js-pure@^3.8.1: resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.24.1.tgz#8839dde5da545521bf282feb7dc6d0b425f39fd3" integrity sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg== -core-js@^3.25.1: - version "3.25.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.25.1.tgz#5818e09de0db8956e16bf10e2a7141e931b7c69c" - integrity sha512-sr0FY4lnO1hkQ4gLDr24K0DGnweGO1QwSj5BpfQjpSJPdqWalja4cTps29Y/PJVG/P7FYlPDkH3hO+Tr0CvDgQ== - -core-js@^3.6.5: - version "3.24.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.24.1.tgz#cf7724d41724154010a6576b7b57d94c5d66e64f" - integrity sha512-0QTBSYSUZ6Gq21utGzkfITDylE8jWC9Ne1D2MrhvlsZBI1x39OdDIVbzSqtgMndIy6BlHxBXpMGqzZmnztg2rg== +core-js@^3.25.2: + version "3.25.2" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.25.2.tgz#2d3670c1455432b53fa780300a6fc1bd8304932c" + integrity sha512-YB4IAT1bjEfxTJ1XYy11hJAKskO+qmhuDBM8/guIfMz4JvdsAQAqvyb97zXX7JgSrfPLG5mRGFWJwJD39ruq2A== core-util-is@~1.0.0: version "1.0.3" @@ -6356,7 +6340,7 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" -enhanced-resolve@^5.0.0, enhanced-resolve@^5.10.0, enhanced-resolve@^5.7.0, enhanced-resolve@^5.8.3: +enhanced-resolve@^5.0.0, enhanced-resolve@^5.10.0, enhanced-resolve@^5.7.0: version "5.10.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz#0dc579c3bb2a1032e357ac45b8f3a6f3ad4fb1e6" integrity sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ== @@ -6546,7 +6530,7 @@ eslint-module-utils@^2.7.3: dependencies: debug "^3.2.7" -eslint-plugin-import@^2.25.2, eslint-plugin-import@^2.26.0: +eslint-plugin-import@^2.26.0: version "2.26.0" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== @@ -6578,7 +6562,7 @@ eslint-plugin-jsdoc@^39.3.6: semver "^7.3.7" spdx-expression-parse "^3.0.1" -eslint-plugin-jsx-a11y@^6.5.1, eslint-plugin-jsx-a11y@^6.6.1: +eslint-plugin-jsx-a11y@^6.6.1: version "6.6.1" resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz#93736fc91b83fdc38cc8d115deedfc3091aef1ff" integrity sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q== @@ -6611,31 +6595,11 @@ eslint-plugin-prettier@^4.2.1: dependencies: prettier-linter-helpers "^1.0.0" -eslint-plugin-react-hooks@^4.3.0, eslint-plugin-react-hooks@^4.6.0: +eslint-plugin-react-hooks@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== -eslint-plugin-react@7.30.0: - version "7.30.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.30.0.tgz#8e7b1b2934b8426ac067a0febade1b13bd7064e3" - integrity sha512-RgwH7hjW48BleKsYyHK5vUAvxtE9SMPDKmcPRQgtRCYaZA0XQPt5FSkrU3nhz5ifzMZcA8opwmRJ2cmOO8tr5A== - dependencies: - array-includes "^3.1.5" - array.prototype.flatmap "^1.3.0" - doctrine "^2.1.0" - estraverse "^5.3.0" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.5" - object.fromentries "^2.0.5" - object.hasown "^1.1.1" - object.values "^1.1.5" - prop-types "^15.8.1" - resolve "^2.0.0-next.3" - semver "^6.3.0" - string.prototype.matchall "^4.0.7" - eslint-plugin-react@^7.31.8: version "7.31.8" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.8.tgz#3a4f80c10be1bcbc8197be9e8b641b2a3ef219bf" @@ -6656,13 +6620,13 @@ eslint-plugin-react@^7.31.8: semver "^6.3.0" string.prototype.matchall "^4.0.7" -eslint-plugin-tsdoc@^0.2.16: - version "0.2.16" - resolved "https://registry.yarnpkg.com/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.2.16.tgz#a3d31fb9c7955faa3c66a43dd43da7635f1c5e0d" - integrity sha512-F/RWMnyDQuGlg82vQEFHQtGyWi7++XJKdYNn0ulIbyMOFqYIjoJOUdE6olORxgwgLkpJxsCJpJbTHgxJ/ggfXw== +eslint-plugin-tsdoc@^0.2.17: + version "0.2.17" + resolved "https://registry.yarnpkg.com/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.2.17.tgz#27789495bbd8778abbf92db1707fec2ed3dfe281" + integrity sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA== dependencies: - "@microsoft/tsdoc" "0.14.1" - "@microsoft/tsdoc-config" "0.16.1" + "@microsoft/tsdoc" "0.14.2" + "@microsoft/tsdoc-config" "0.16.2" eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" @@ -6697,12 +6661,12 @@ eslint-visitor-keys@^3.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint@^8.23.0: - version "8.23.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.23.0.tgz#a184918d288820179c6041bb3ddcc99ce6eea040" - integrity sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA== +eslint@^8.23.1: + version "8.23.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.23.1.tgz#cfd7b3f7fdd07db8d16b4ac0516a29c8d8dca5dc" + integrity sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg== dependencies: - "@eslint/eslintrc" "^1.3.1" + "@eslint/eslintrc" "^1.3.2" "@humanwhocodes/config-array" "^0.10.4" "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" "@humanwhocodes/module-importer" "^1.0.1" @@ -6721,7 +6685,6 @@ eslint@^8.23.0: fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" find-up "^5.0.0" - functional-red-black-tree "^1.0.1" glob-parent "^6.0.1" globals "^13.15.0" globby "^11.1.0" @@ -6730,6 +6693,7 @@ eslint@^8.23.0: import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" + js-sdsl "^4.1.4" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" @@ -6950,7 +6914,7 @@ fast-glob@3.2.7: merge2 "^1.3.0" micromatch "^4.0.4" -fast-glob@^3.0.3, fast-glob@^3.2.11, fast-glob@^3.2.7, fast-glob@^3.2.9: +fast-glob@^3.0.3, fast-glob@^3.2.7, fast-glob@^3.2.9: version "3.2.11" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== @@ -6961,6 +6925,17 @@ fast-glob@^3.0.3, fast-glob@^3.2.11, fast-glob@^3.2.7, fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@^3.2.12: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -7323,11 +7298,6 @@ function.prototype.name@^1.1.5: es-abstract "^1.19.0" functions-have-names "^1.2.2" -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - functions-have-names@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" @@ -7787,13 +7757,6 @@ highlight.js@^11.6.0: resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.6.0.tgz#a50e9da05763f1bb0c1322c8f4f755242cff3f5a" integrity sha512-ig1eqDzJaB0pqEvlPVIpSSyMaO92bH1N2rJpLMN/nX396wTpDA4Eq0uK+7I/2XG17pFaaKE0kjV/XPeGt7Evjw== -history@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/history/-/history-5.3.0.tgz#1548abaa245ba47992f063a0783db91ef201c73b" - integrity sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ== - dependencies: - "@babel/runtime" "^7.7.6" - homedir-polyfill@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" @@ -8027,10 +7990,10 @@ husky@^8.0.1: resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.1.tgz#511cb3e57de3e3190514ae49ed50f6bc3f50b3e9" integrity sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw== -i18next@^21.9.0: - version "21.9.1" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-21.9.1.tgz#9e3428990f5b2cc9ac1b98dd025f3e411c368249" - integrity sha512-ITbDrAjbRR73spZAiu6+ex5WNlHRr1mY+acDi2ioTHuUiviJqSz269Le1xHAf0QaQ6GgIHResUhQNcxGwa/PhA== +i18next@^21.9.2: + version "21.9.2" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-21.9.2.tgz#3f7c5594393eb27117c1db4c38f5ec766e68de0e" + integrity sha512-00fVrLQOwy45nm3OtC9l1WiLK3nJlIYSljgCt0qzTaAy65aciMdRy9GsuW+a2AtKtdg9/njUGfRH30LRupV7ZQ== dependencies: "@babel/runtime" "^7.17.2" @@ -9426,6 +9389,11 @@ jju@~1.4.0: resolved "https://registry.yarnpkg.com/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a" integrity sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA== +js-sdsl@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.1.4.tgz#78793c90f80e8430b7d8dc94515b6c77d98a26a6" + integrity sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -9641,27 +9609,27 @@ lazy-cache@^1.0.4: resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" integrity sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ== -lerna@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-5.5.0.tgz#94ebc67ebe67079e5ac74f6ba7c0b130c88f3e90" - integrity sha512-1cZIijUWcI9ZqK+ejj1dBejTOLL64b0pIjYXb9KN8soNIONm/1zbJiSBiAyF4Hd6x4XuIC3kdFx7Ff3Pb9KsYA== - dependencies: - "@lerna/add" "5.5.0" - "@lerna/bootstrap" "5.5.0" - "@lerna/changed" "5.5.0" - "@lerna/clean" "5.5.0" - "@lerna/cli" "5.5.0" - "@lerna/create" "5.5.0" - "@lerna/diff" "5.5.0" - "@lerna/exec" "5.5.0" - "@lerna/import" "5.5.0" - "@lerna/info" "5.5.0" - "@lerna/init" "5.5.0" - "@lerna/link" "5.5.0" - "@lerna/list" "5.5.0" - "@lerna/publish" "5.5.0" - "@lerna/run" "5.5.0" - "@lerna/version" "5.5.0" +lerna@^5.5.1: + version "5.5.1" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-5.5.1.tgz#e3bd9bdcfcbe42585ab6168f0efe1c7043afc61e" + integrity sha512-Ofvlm5FRRxF8IQXnx47YbIXmRDHnDaegDwJ4Kq+cVnafbB0VZvRVy/S4ppmnftnqvd4MBXU022lhW9uGN66iZw== + dependencies: + "@lerna/add" "5.5.1" + "@lerna/bootstrap" "5.5.1" + "@lerna/changed" "5.5.1" + "@lerna/clean" "5.5.1" + "@lerna/cli" "5.5.1" + "@lerna/create" "5.5.1" + "@lerna/diff" "5.5.1" + "@lerna/exec" "5.5.1" + "@lerna/import" "5.5.1" + "@lerna/info" "5.5.1" + "@lerna/init" "5.5.1" + "@lerna/link" "5.5.1" + "@lerna/list" "5.5.1" + "@lerna/publish" "5.5.1" + "@lerna/run" "5.5.1" + "@lerna/version" "5.5.1" import-local "^3.0.2" npmlog "^6.0.2" nx ">=14.6.1 < 16" @@ -10748,6 +10716,42 @@ nx@14.6.5, "nx@>=14.6.1 < 16": yargs "^17.4.0" yargs-parser "21.0.1" +nx@14.7.6: + version "14.7.6" + resolved "https://registry.yarnpkg.com/nx/-/nx-14.7.6.tgz#a049c9d0acea372a759a698b5920afe2a22aae01" + integrity sha512-G+QaLMdTtFsWTmVno89SP/5St40IGmFW5wgrIwDGSeosV91G6S0OpU0Yot0D1exgH7gYLh5tE45qGpXFpGGbww== + dependencies: + "@nrwl/cli" "14.7.6" + "@nrwl/tao" "14.7.6" + "@parcel/watcher" "2.0.4" + chalk "4.1.0" + chokidar "^3.5.1" + cli-cursor "3.1.0" + cli-spinners "2.6.1" + cliui "^7.0.2" + dotenv "~10.0.0" + enquirer "~2.3.6" + fast-glob "3.2.7" + figures "3.2.0" + flat "^5.0.2" + fs-extra "^10.1.0" + glob "7.1.4" + ignore "^5.0.4" + js-yaml "4.1.0" + jsonc-parser "3.0.0" + minimatch "3.0.5" + npm-run-path "^4.0.1" + open "^8.4.0" + semver "7.3.4" + string-width "^4.2.3" + tar-stream "~2.2.0" + tmp "~0.2.1" + tsconfig-paths "^3.9.0" + tslib "^2.3.0" + v8-compile-cache "2.3.0" + yargs "^17.4.0" + yargs-parser "21.0.1" + object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -11958,10 +11962,10 @@ react-dom@^18.2.0: loose-envify "^1.1.0" scheduler "^0.23.0" -react-i18next@^11.18.5: - version "11.18.5" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.18.5.tgz#985e87bc66ed1316381b464a4ecfd35a2c951357" - integrity sha512-cKcyuuzIv0YUZ4l9WORflVNuhISPAqQShOAsxwFyYuJoCA7HlLmHm7XnvO6hfAGmGpDNRhJHoBX8hG49Cb2xZQ== +react-i18next@^11.18.6: + version "11.18.6" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.18.6.tgz#e159c2960c718c1314f1e8fcaa282d1c8b167887" + integrity sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA== dependencies: "@babel/runtime" "^7.14.5" html-parse-stringify "^3.0.1" @@ -11986,20 +11990,19 @@ react-refresh@^0.10.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.10.0.tgz#2f536c9660c0b9b1d500684d9e52a65e7404f7e3" integrity sha512-PgidR3wST3dDYKr6b4pJoqQFpPGNKDSCDx4cZoshjXipw3LzO7mG1My2pwEzz2JVkF+inx3xRpDeQLFQGH/hsQ== -react-router-dom@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.3.0.tgz#a0216da813454e521905b5fa55e0e5176123f43d" - integrity sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw== +react-router-dom@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.4.0.tgz#a7d7c394c9e730b045cdd4f5d6c2d1ccb9e26947" + integrity sha512-4Aw1xmXKeleYYQ3x0Lcl2undHR6yMjXZjd9DKZd53SGOYqirrUThyUb0wwAX5VZAyvSuzjNJmZlJ3rR9+/vzqg== dependencies: - history "^5.2.0" - react-router "6.3.0" + react-router "6.4.0" -react-router@6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.3.0.tgz#3970cc64b4cb4eae0c1ea5203a80334fdd175557" - integrity sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ== +react-router@6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.4.0.tgz#68449c23dc893fc7a57db068c19987be1de72edb" + integrity sha512-B+5bEXFlgR1XUdHYR6P94g299SjrfCBMmEDJNcFbpAyRH1j1748yt9NdDhW3++nw1lk3zQJ6aOO66zUx3KlTZg== dependencies: - history "^5.2.0" + "@remix-run/router" "1.0.0" react-shallow-renderer@^16.15.0: version "16.15.0" @@ -12890,11 +12893,6 @@ source-map-support@^0.5.6, source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -13267,10 +13265,10 @@ stylelint-scss@^4.0.0, stylelint-scss@^4.3.0: postcss-selector-parser "^6.0.6" postcss-value-parser "^4.1.0" -stylelint@^14.10.0: - version "14.11.0" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-14.11.0.tgz#e2ecb28bbacab05e1fbeb84cbba23883b27499cc" - integrity sha512-OTLjLPxpvGtojEfpESWM8Ir64Z01E89xsisaBMUP/ngOx1+4VG2DPRcUyCCiin9Rd3kPXPsh/uwHd9eqnvhsYA== +stylelint@^14.12.0: + version "14.12.0" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-14.12.0.tgz#86d5b60d0f30a6bd0b59e1d4c85a267f0caef97e" + integrity sha512-9Sa+IsT31PN9zf9q5ZVZNvhT6jMVu6YhpI38g3Akn7vONipGL0GNd9QCblwtJ3ysaoM80P/+9mOcFB1xnytiQQ== dependencies: "@csstools/selector-specificity" "^2.0.2" balanced-match "^2.0.0" @@ -13278,7 +13276,7 @@ stylelint@^14.10.0: cosmiconfig "^7.0.1" css-functions-list "^3.1.0" debug "^4.3.4" - fast-glob "^3.2.11" + fast-glob "^3.2.12" fastest-levenshtein "^1.0.16" file-entry-cache "^6.0.1" global-modules "^2.0.0" @@ -13305,7 +13303,7 @@ stylelint@^14.10.0: string-width "^4.2.3" strip-ansi "^6.0.1" style-search "^0.1.0" - supports-hyperlinks "^2.2.0" + supports-hyperlinks "^2.3.0" svg-tags "^1.0.0" table "^6.8.0" v8-compile-cache "^2.3.0" @@ -13355,7 +13353,7 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.2.0: +supports-hyperlinks@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== @@ -13363,6 +13361,14 @@ supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.2.0: has-flag "^4.0.0" supports-color "^7.0.0" +supports-hyperlinks@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -13391,10 +13397,10 @@ svgo@^2.7.0, svgo@^2.8.0: picocolors "^1.0.0" stable "^0.1.8" -swiper@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/swiper/-/swiper-8.3.2.tgz#55a2637125b0514e58715aa51e040dc070203b47" - integrity sha512-8wsC7ORYvVSnLUoxs2+xmfLrDPNjBVQXMCFbOlqtHeON6wtu/blOyySDr8TCBCdse1bdcIbn7m8xJNxVFL8o4Q== +swiper@^8.4.2: + version "8.4.2" + resolved "https://registry.yarnpkg.com/swiper/-/swiper-8.4.2.tgz#a52e091a92a52b230bd076fb3ef19ae73baed2a2" + integrity sha512-nMD/RHVYxJxrLqjWQX2n0B94ANwpnuUv/3PUDT8Aaf+mSteFvZGFng4ypAYq70zW4svryyV+8TRlbRZ+6cgv9A== dependencies: dom7 "^4.0.4" ssr-window "^4.0.2"