From 1ab39c703d4788059a92f20fc718860b20dd086a Mon Sep 17 00:00:00 2001 From: Luis Doebbel Date: Wed, 29 Jan 2025 15:06:25 -0500 Subject: [PATCH 1/7] complete rewrite using react router and react query --- azure-pipeline/build_frontend.yml | 6 +- frontend/.dockerignore | 4 + frontend/.editorconfig | 8 +- frontend/{example.env => .env.example} | 5 +- frontend/.eslintrc.cjs | 51 - frontend/.gitattributes | 217 + frontend/.gitignore | 20 +- frontend/.prettierignore | 6 + frontend/.stylelintrc | 17 - frontend/Dockerfile | 22 + frontend/README.md | 153 +- frontend/docker-compose.yml | 16 - frontend/docs/ComponentsAndContainers.md | 20 - frontend/docs/ReactStandards.md | 222 - frontend/docs/Styling.md | 73 - frontend/entrypoint.sh | 5 - frontend/eslint.config.js | 55 + frontend/index.html | 21 - frontend/package.json | 121 +- frontend/public/favicon.ico | Bin 207237 -> 15086 bytes frontend/public/robots.txt | 3 - frontend/public/vite.svg | 1 - frontend/react-router.config.ts | 8 + frontend/{src => }/sheet2i18n.config.cjs | 2 + frontend/sheet2i18n/index.cjs | 20 + frontend/sheet2i18n/sheet2i18n.cjs | 102 + frontend/src/App.tsx | 39 - frontend/src/app.css | 7 + .../app/components/accordion/Accordion.tsx | 9 +- .../accordionSummary/AccordionSummary.tsx | 4 +- frontend/src/app/components/button/Button.tsx | 3 +- .../cookieConsent/CookieConsent.tsx | 11 +- .../cookieBanner/CookieBanner.tsx | 53 +- .../cookieBanner/cookie-banner.module.css | 2 + .../cookieConsent/cookieConsent.config.ts | 2 +- .../cookieConsent/cookieConsentHelper.ts | 2 +- .../cookieConsent/cookieModal/CookieModal.tsx | 83 +- .../cookieConsent/interfaces/ICookieInfo.ts | 0 .../interfaces/ICookiePreferences.ts | 0 .../interfaces/ICookieSection.ts | 2 +- .../debugBanner/DebugBanner.tsx | 42 +- .../debugBanner/debug-banner.module.css | 2 + frontend/src/app/components/dialog/Dialog.tsx | 13 +- .../errorHelperText/ErrorHelperText.tsx | 50 +- .../errorHelperText.module.css | 17 + .../fieldHelperText/FieldHelperText.tsx | 8 +- .../app/components/iconButton/IconButton.tsx | 5 +- frontend/src/app/components/layout/Layout.tsx | 80 - frontend/src/app/components/link/Link.tsx | 35 +- .../src/app/components/loading/Loading.tsx | 41 +- .../app/components/loading/loading.module.css | 23 +- frontend/src/app/components/slide/Slide.tsx | 4 +- .../src/app/components/spinner/Spinner.tsx | 15 - .../app/components/spinner/spinner.module.css | 34 - frontend/src/app/components/switch/Switch.tsx | 3 +- frontend/src/app/components/table/Table.tsx | 2 +- .../src/app/components/tableRow/TableRow.tsx | 4 +- .../app/components/textField/TextField.tsx | 9 +- frontend/src/app/components/toast/Toast.tsx | 28 + .../uikit/uikitBlock/UikitBlock.tsx | 29 +- .../uikit/uikitColor/UikitColor.tsx | 9 +- .../components/uikit/uikitNav/UikitNav.tsx | 19 +- .../containers/authProvider/AuthProvider.tsx | 51 - .../app/forms/auth/loginForm/LoginForm.tsx | 102 +- .../forms/auth/loginForm/loginForm.module.css | 5 + frontend/src/app/hocs/withAuth.tsx | 16 - frontend/src/app/hooks/useChangeLanguage.ts | 28 + frontend/src/app/icons/AddRounded.tsx | 6 +- frontend/src/app/icons/CaretIcon.tsx | 6 +- frontend/src/app/icons/CloseIcon.tsx | 6 +- frontend/src/app/icons/CookieIcon.tsx | 8 +- .../src/app/icons/ExternalLinkOutlined.tsx | 6 +- frontend/src/app/icons/LogoutRounded.tsx | 9 +- .../src/app/pages/dashbaord/Dashboard.tsx | 7 - .../app/pages/dashbaord/dashboard.route.tsx | 15 - .../app/pages/dashbaord/withAuthDashboard.tsx | 7 - frontend/src/app/pages/home/Home.tsx | 93 - frontend/src/app/pages/home/home.route.tsx | 15 - frontend/src/app/pages/home/withAuthHome.tsx | 7 - frontend/src/app/pages/login/Login.tsx | 54 - frontend/src/app/pages/login/login.route.tsx | 15 - .../src/app/pages/notFound/notFound.route.tsx | 13 - .../src/app/pages/uikit/withAuthUikit.tsx | 7 - frontend/src/app/routes/Router.tsx | 56 - frontend/src/app/routes/findRoute.ts | 39 - frontend/src/app/routes/interfaces/IRoute.ts | 14 - frontend/src/app/routes/routes.ts | 12 - frontend/src/app/services/auth/authService.ts | 14 +- frontend/src/app/services/axiosInstance.ts | 2 +- .../app/services/posts/interfaces/IPost.ts | 12 + .../posts/interfaces/IPostsResponses.ts | 6 + .../src/app/services/posts/postsQueries.ts | 24 + .../src/app/services/posts/postsService.ts | 16 + .../app/services/todos/interfaces/ITodo.ts | 6 + .../todos/interfaces/ITodosResponses.ts | 6 + .../src/app/services/todos/todosQueries.ts | 13 + .../src/app/services/todos/todosService.ts | 16 + .../app/services/users/interfaces/IUser.ts | 2 +- .../src/app/services/users/userService.ts | 13 +- frontend/src/app/shared/queryClient.ts | 10 + frontend/src/app/stores/userStore.ts | 2 +- frontend/src/assets/images/loading.gif | Bin 0 -> 389251 bytes frontend/src/assets/images/logo.png | Bin 6087 -> 0 bytes frontend/src/assets/locales/en.json | 5 +- frontend/src/assets/locales/fr.json | 5 +- frontend/src/assets/react.svg | 1 - frontend/src/main.tsx | 16 - frontend/src/root.tsx | 89 + frontend/src/routes.ts | 30 + frontend/src/routes/auth-guard.ts | 31 + .../dashboard/dashboard.tsx | 124 + .../authenticated-routes/dashboard/posts.tsx | 23 + .../authenticated-routes/dashboard/todos.tsx | 24 + .../routes/authenticated-routes/layout.tsx | 200 + .../settings/settings.tsx | 51 + frontend/src/routes/index.tsx | 27 + .../not-found}/not-found.module.css | 0 .../not-found/not-found.tsx} | 34 +- .../src/routes/public-routes/home/home.tsx | 63 + frontend/src/routes/public-routes/layout.tsx | 34 + .../src/routes/public-routes/login/login.tsx | 112 + .../routes/public-routes/login/redirect.ts | 32 + .../routes/public-routes/login/useOnSubmit.ts | 84 + .../public-routes}/uikit/UiKit.tsx | 32 +- .../public-routes}/uikit/uikit.route.tsx | 2 +- frontend/src/styles/_export.scss | 49 - frontend/src/styles/_fonts.scss | 39 - frontend/src/styles/_globals.scss | 85 - frontend/src/styles/_variables.scss | 25 - frontend/src/styles/fonts.css | 39 + frontend/src/styles/index.scss | 9 - frontend/src/styles/mixins/_generics.scss | 17 - .../src/styles/mixins/_media-queries.scss | 32 - frontend/src/styles/mixins/_normalize.scss | 61 - .../src/styles/{vendors => }/toastify.css | 0 .../material-ui.d.ts} | 50 +- frontend/src/theme/palette.ts | 5 + frontend/src/{themes => theme}/theme.ts | 12 +- frontend/src/{themes => theme}/typography.ts | 12 +- frontend/src/theme/variables.ts | 41 + frontend/src/themes/palette.ts | 66 - frontend/src/themes/variables.ts | 34 - frontend/src/vite-env.d.ts | 16 +- frontend/stylelint.config.js | 10 + frontend/tsconfig.app.json | 47 - frontend/tsconfig.json | 41 +- frontend/tsconfig.node.json | 17 - frontend/vite.config.ts | 73 +- frontend/yarn.lock | 7520 +++++++---------- 149 files changed, 5578 insertions(+), 6347 deletions(-) create mode 100644 frontend/.dockerignore mode change 100755 => 100644 frontend/.editorconfig rename frontend/{example.env => .env.example} (65%) mode change 100755 => 100644 delete mode 100644 frontend/.eslintrc.cjs create mode 100644 frontend/.gitattributes create mode 100644 frontend/.prettierignore delete mode 100755 frontend/.stylelintrc create mode 100644 frontend/Dockerfile delete mode 100644 frontend/docker-compose.yml delete mode 100644 frontend/docs/ComponentsAndContainers.md delete mode 100644 frontend/docs/ReactStandards.md delete mode 100644 frontend/docs/Styling.md delete mode 100644 frontend/entrypoint.sh create mode 100644 frontend/eslint.config.js delete mode 100644 frontend/index.html delete mode 100644 frontend/public/robots.txt delete mode 100644 frontend/public/vite.svg create mode 100644 frontend/react-router.config.ts rename frontend/{src => }/sheet2i18n.config.cjs (89%) create mode 100644 frontend/sheet2i18n/index.cjs create mode 100644 frontend/sheet2i18n/sheet2i18n.cjs delete mode 100644 frontend/src/App.tsx create mode 100644 frontend/src/app.css rename frontend/src/app/{containers => components}/cookieConsent/CookieConsent.tsx (90%) rename frontend/src/app/{containers => components}/cookieConsent/cookieBanner/CookieBanner.tsx (80%) rename frontend/src/app/{containers => components}/cookieConsent/cookieBanner/cookie-banner.module.css (75%) rename frontend/src/app/{containers => components}/cookieConsent/cookieConsent.config.ts (97%) rename frontend/src/app/{containers => components}/cookieConsent/cookieConsentHelper.ts (88%) rename frontend/src/app/{containers => components}/cookieConsent/cookieModal/CookieModal.tsx (71%) rename frontend/src/app/{containers => components}/cookieConsent/interfaces/ICookieInfo.ts (100%) rename frontend/src/app/{containers => components}/cookieConsent/interfaces/ICookiePreferences.ts (100%) rename frontend/src/app/{containers => components}/cookieConsent/interfaces/ICookieSection.ts (66%) rename frontend/src/app/{containers => components}/debugBanner/DebugBanner.tsx (59%) rename frontend/src/app/{containers => components}/debugBanner/debug-banner.module.css (76%) create mode 100644 frontend/src/app/components/errorHelperText/errorHelperText.module.css delete mode 100644 frontend/src/app/components/layout/Layout.tsx delete mode 100755 frontend/src/app/components/spinner/Spinner.tsx delete mode 100644 frontend/src/app/components/spinner/spinner.module.css create mode 100644 frontend/src/app/components/toast/Toast.tsx delete mode 100644 frontend/src/app/containers/authProvider/AuthProvider.tsx create mode 100644 frontend/src/app/forms/auth/loginForm/loginForm.module.css delete mode 100644 frontend/src/app/hocs/withAuth.tsx create mode 100644 frontend/src/app/hooks/useChangeLanguage.ts delete mode 100644 frontend/src/app/pages/dashbaord/Dashboard.tsx delete mode 100755 frontend/src/app/pages/dashbaord/dashboard.route.tsx delete mode 100644 frontend/src/app/pages/dashbaord/withAuthDashboard.tsx delete mode 100644 frontend/src/app/pages/home/Home.tsx delete mode 100755 frontend/src/app/pages/home/home.route.tsx delete mode 100644 frontend/src/app/pages/home/withAuthHome.tsx delete mode 100644 frontend/src/app/pages/login/Login.tsx delete mode 100755 frontend/src/app/pages/login/login.route.tsx delete mode 100755 frontend/src/app/pages/notFound/notFound.route.tsx delete mode 100644 frontend/src/app/pages/uikit/withAuthUikit.tsx delete mode 100755 frontend/src/app/routes/Router.tsx delete mode 100644 frontend/src/app/routes/findRoute.ts delete mode 100644 frontend/src/app/routes/interfaces/IRoute.ts delete mode 100644 frontend/src/app/routes/routes.ts create mode 100644 frontend/src/app/services/posts/interfaces/IPost.ts create mode 100644 frontend/src/app/services/posts/interfaces/IPostsResponses.ts create mode 100644 frontend/src/app/services/posts/postsQueries.ts create mode 100644 frontend/src/app/services/posts/postsService.ts create mode 100644 frontend/src/app/services/todos/interfaces/ITodo.ts create mode 100644 frontend/src/app/services/todos/interfaces/ITodosResponses.ts create mode 100644 frontend/src/app/services/todos/todosQueries.ts create mode 100644 frontend/src/app/services/todos/todosService.ts create mode 100644 frontend/src/app/shared/queryClient.ts create mode 100644 frontend/src/assets/images/loading.gif delete mode 100644 frontend/src/assets/images/logo.png delete mode 100644 frontend/src/assets/react.svg delete mode 100644 frontend/src/main.tsx create mode 100644 frontend/src/root.tsx create mode 100644 frontend/src/routes.ts create mode 100644 frontend/src/routes/auth-guard.ts create mode 100644 frontend/src/routes/authenticated-routes/dashboard/dashboard.tsx create mode 100644 frontend/src/routes/authenticated-routes/dashboard/posts.tsx create mode 100644 frontend/src/routes/authenticated-routes/dashboard/todos.tsx create mode 100644 frontend/src/routes/authenticated-routes/layout.tsx create mode 100644 frontend/src/routes/authenticated-routes/settings/settings.tsx create mode 100644 frontend/src/routes/index.tsx rename frontend/src/{app/pages/notFound => routes/not-found}/not-found.module.css (100%) rename frontend/src/{app/pages/notFound/NotFound.tsx => routes/not-found/not-found.tsx} (58%) create mode 100644 frontend/src/routes/public-routes/home/home.tsx create mode 100644 frontend/src/routes/public-routes/layout.tsx create mode 100644 frontend/src/routes/public-routes/login/login.tsx create mode 100644 frontend/src/routes/public-routes/login/redirect.ts create mode 100644 frontend/src/routes/public-routes/login/useOnSubmit.ts rename frontend/src/{app/pages => routes/public-routes}/uikit/UiKit.tsx (90%) rename frontend/src/{app/pages => routes/public-routes}/uikit/uikit.route.tsx (87%) delete mode 100755 frontend/src/styles/_export.scss delete mode 100644 frontend/src/styles/_fonts.scss delete mode 100755 frontend/src/styles/_globals.scss delete mode 100755 frontend/src/styles/_variables.scss create mode 100644 frontend/src/styles/fonts.css delete mode 100755 frontend/src/styles/index.scss delete mode 100755 frontend/src/styles/mixins/_generics.scss delete mode 100644 frontend/src/styles/mixins/_media-queries.scss delete mode 100755 frontend/src/styles/mixins/_normalize.scss rename frontend/src/styles/{vendors => }/toastify.css (100%) rename frontend/src/{material-ui-pigment-css.d.ts => theme/material-ui.d.ts} (52%) create mode 100644 frontend/src/theme/palette.ts rename frontend/src/{themes => theme}/theme.ts (64%) rename frontend/src/{themes => theme}/typography.ts (81%) create mode 100644 frontend/src/theme/variables.ts delete mode 100644 frontend/src/themes/palette.ts delete mode 100644 frontend/src/themes/variables.ts create mode 100755 frontend/stylelint.config.js delete mode 100644 frontend/tsconfig.app.json delete mode 100644 frontend/tsconfig.node.json diff --git a/azure-pipeline/build_frontend.yml b/azure-pipeline/build_frontend.yml index e17e212..0e5f724 100644 --- a/azure-pipeline/build_frontend.yml +++ b/azure-pipeline/build_frontend.yml @@ -28,15 +28,15 @@ jobs: - script: | cd frontend corepack enable - yarn set version stable + yarn set version 4.6 yarn yarn build - displayName: "Install and Build using Yarn" + displayName: "Install and Build using Yarn 4.6" - task: CopyFiles@2 displayName: "Copy files to build folder" inputs: - sourceFolder: "$(System.DefaultWorkingDirectory)/frontend/dist" + sourceFolder: "$(System.DefaultWorkingDirectory)/frontend/build/client" targetFolder: "$(Build.ArtifactStagingDirectory)" cleanTargetFolder: true diff --git a/frontend/.dockerignore b/frontend/.dockerignore new file mode 100644 index 0000000..9b8d514 --- /dev/null +++ b/frontend/.dockerignore @@ -0,0 +1,4 @@ +.react-router +build +node_modules +README.md \ No newline at end of file diff --git a/frontend/.editorconfig b/frontend/.editorconfig old mode 100755 new mode 100644 index 4bfca33..1e63073 --- a/frontend/.editorconfig +++ b/frontend/.editorconfig @@ -1,9 +1,7 @@ -root = true - [*] +charset = utf-8 +end_of_line = lf indent_size = 2 indent_style = space -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true insert_final_newline = true +max_line_length = 80 \ No newline at end of file diff --git a/frontend/example.env b/frontend/.env.example old mode 100755 new mode 100644 similarity index 65% rename from frontend/example.env rename to frontend/.env.example index 1b52056..2439bd8 --- a/frontend/example.env +++ b/frontend/.env.example @@ -1,7 +1,6 @@ -VITE_PORT=8080 +VITE_PORT=8000 VITE_GENERATE_SOURCEMAP=true VITE_ENV=local VITE_VERSION_NUMBER=v0.0.1 -VITE_API_URL= VITE_GA_TRACKING_ID= -VITE_DOCKER=false +VITE_API_URL=https://dummyjson.com \ No newline at end of file diff --git a/frontend/.eslintrc.cjs b/frontend/.eslintrc.cjs deleted file mode 100644 index 4b3bed6..0000000 --- a/frontend/.eslintrc.cjs +++ /dev/null @@ -1,51 +0,0 @@ -const DISABLED = 0; -const WARNING = 1; -const ERROR = 2; - -module.exports = { - root: true, - env: { browser: true, es2020: true }, - extends: [ - "eslint:recommended", - "plugin:react/recommended", - "plugin:react/jsx-runtime", - "plugin:react-hooks/recommended", - "plugin:@typescript-eslint/recommended-type-checked", - ], - ignorePatterns: ["dist", ".eslintrc.cjs"], - parser: "@typescript-eslint/parser", - plugins: ["@typescript-eslint", "react-hooks", "prettier", "react-refresh"], - rules: { - "react-refresh/only-export-components": [ - WARNING, - { allowConstantExport: true }, - ], - "react/react-in-jsx-scope": DISABLED, - "@typescript-eslint/camelcase": DISABLED, - "@typescript-eslint/no-unsafe-call": DISABLED, - "@typescript-eslint/no-unsafe-return": DISABLED, - "@typescript-eslint/no-unsafe-argument": DISABLED, - "@typescript-eslint/no-unsafe-member-access": DISABLED, - "@typescript-eslint/no-unsafe-assignment": DISABLED, - "no-unused-expressions": WARNING, - "@typescript-eslint/no-unused-vars": WARNING, - "react-hooks/exhaustive-deps": WARNING, - "react-hooks/rules-of-hooks": ERROR, - eqeqeq: ERROR, - "@typescript-eslint/array-type": [WARNING, { default: "array-simple" }], - // With Pigment CSS, the SX property is now available on html elements - "react/no-unknown-property": ["error", { ignore: ["sx"] }], - // "sort-keys": WARNING, - }, - settings: { - react: { - version: "detect", - }, - }, - parserOptions: { - ecmaVersion: "latest", - sourceType: "module", - project: ["./tsconfig.eslint.json", "./src/material-ui-pigment-css.d.ts"], - tsconfigRootDir: __dirname, - }, -}; diff --git a/frontend/.gitattributes b/frontend/.gitattributes new file mode 100644 index 0000000..13d40e6 --- /dev/null +++ b/frontend/.gitattributes @@ -0,0 +1,217 @@ +## GITATTRIBUTES FOR WEB PROJECTS +# +# These settings are for any web project. +# +# Details per file setting: +# text These files should be normalized (i.e. convert CRLF to LF). +# binary These files are binary and should be left untouched. +# +# Note that binary is a macro for -text -diff. +###################################################################### + +# Auto detect +## Handle line endings automatically for files detected as +## text and leave all files detected as binary untouched. +## This will handle all files NOT defined below. +* text=auto + +# Source code +*.bash text eol=lf +*.bat text eol=crlf +*.cmd text eol=crlf +*.coffee text +*.css text diff=css +*.htm text diff=html +*.html text diff=html +*.inc text +*.ini text +*.js text +*.mjs text +*.cjs text +*.json text +*.jsx text +*.less text +*.ls text +*.map text -diff +*.od text +*.onlydata text +*.php text diff=php +*.pl text +*.ps1 text eol=crlf +*.py text diff=python +*.rb text diff=ruby +*.sass text +*.scm text +*.scss text diff=css +*.sh text eol=lf +.husky/* text eol=lf +*.sql text +*.styl text +*.tag text +*.ts text +*.tsx text +*.xml text +*.xhtml text diff=html + +# Docker +Dockerfile text + +# Documentation +*.ipynb text eol=lf +*.markdown text diff=markdown +*.md text diff=markdown +*.mdwn text diff=markdown +*.mdown text diff=markdown +*.mkd text diff=markdown +*.mkdn text diff=markdown +*.mdtxt text +*.mdtext text +*.txt text +AUTHORS text +CHANGELOG text +CHANGES text +CONTRIBUTING text +COPYING text +copyright text +*COPYRIGHT* text +INSTALL text +license text +LICENSE text +NEWS text +readme text +*README* text +TODO text + +# Templates +*.dot text +*.ejs text +*.erb text +*.haml text +*.handlebars text +*.hbs text +*.hbt text +*.jade text +*.latte text +*.mustache text +*.njk text +*.phtml text +*.svelte text +*.tmpl text +*.tpl text +*.twig text +*.vue text + +# Configs +*.cnf text +*.conf text +*.config text +.editorconfig text +.env text +.gitattributes text +.gitconfig text +.htaccess text +*.lock text -diff +package.json text eol=lf +package-lock.json text eol=lf -diff +pnpm-lock.yaml text eol=lf -diff +.prettierrc text +yarn.lock text -diff +*.toml text +*.yaml text +*.yml text +browserslist text +Makefile text +makefile text +# Fixes syntax highlighting on GitHub to allow comments +tsconfig.json linguist-language=JSON-with-Comments + +# Heroku +Procfile text + +# Graphics +*.ai binary +*.bmp binary +*.eps binary +*.gif binary +*.gifv binary +*.ico binary +*.jng binary +*.jp2 binary +*.jpg binary +*.jpeg binary +*.jpx binary +*.jxr binary +*.pdf binary +*.png binary +*.psb binary +*.psd binary +# SVG treated as an asset (binary) by default. +*.svg text +# If you want to treat it as binary, +# use the following line instead. +# *.svg binary +*.svgz binary +*.tif binary +*.tiff binary +*.wbmp binary +*.webp binary + +# Audio +*.kar binary +*.m4a binary +*.mid binary +*.midi binary +*.mp3 binary +*.ogg binary +*.ra binary + +# Video +*.3gpp binary +*.3gp binary +*.as binary +*.asf binary +*.asx binary +*.avi binary +*.fla binary +*.flv binary +*.m4v binary +*.mng binary +*.mov binary +*.mp4 binary +*.mpeg binary +*.mpg binary +*.ogv binary +*.swc binary +*.swf binary +*.webm binary + +# Archives +*.7z binary +*.gz binary +*.jar binary +*.rar binary +*.tar binary +*.zip binary + +# Fonts +*.ttf binary +*.eot binary +*.otf binary +*.woff binary +*.woff2 binary + +# Executables +*.exe binary +*.pyc binary +# Prevents massive diffs caused by vendored, minified files +**/.yarn/releases/** binary +**/.yarn/plugins/** binary + +# RC files (like .babelrc or .eslintrc) +*.*rc text + +# Ignore files (like .npmignore or .gitignore) +*.*ignore text + +# Prevents massive diffs from built files +dist/* binary \ No newline at end of file diff --git a/frontend/.gitignore b/frontend/.gitignore index 98e16bb..6c46600 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -1,3 +1,10 @@ +.DS_Store +/node_modules/ + +# React Router +/.react-router/ +/build/ + # Logs logs *.log @@ -7,7 +14,6 @@ yarn-error.log* pnpm-debug.log* lerna-debug.log* -node_modules build dist dist-ssr @@ -17,7 +23,8 @@ dist-ssr # Editor directories and files .vscode/* !.vscode/extensions.json -.vscode/settings.json +!.vscode/settings.json +!.vscode/README.md .idea .DS_Store *.suo @@ -25,3 +32,12 @@ dist-ssr *.njsproj *.sln *.sw? + +# yarn related files when not using zero-installs feature +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions \ No newline at end of file diff --git a/frontend/.prettierignore b/frontend/.prettierignore new file mode 100644 index 0000000..93ceff3 --- /dev/null +++ b/frontend/.prettierignore @@ -0,0 +1,6 @@ +# By default prettier ignores files in version control systems directories (".git", ".jj", ".sl", ".svn" and ".hg") and node_modules +# Prettier will also follow rules specified in the ".gitignore" file if it exists in the same directory from which it is run. +dist +build +pnpm-lock.yaml +yarn.lock \ No newline at end of file diff --git a/frontend/.stylelintrc b/frontend/.stylelintrc deleted file mode 100755 index 969cef1..0000000 --- a/frontend/.stylelintrc +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": [ - "stylelint-config-prettier-scss", - "stylelint-config-standard-scss" - ], - "plugins": ["stylelint-prettier", "stylelint-scss"], - "customSyntax": "postcss-scss", - "rules": { - "value-keyword-case": null, - "at-rule-empty-line-before": null, - "scss/dollar-variable-empty-line-before": null, - "selector-pseudo-element-colon-notation": "single", - "selector-pseudo-class-no-unknown": null, - "color-no-hex": true, - "color-named": "never" - } -} diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..207bf93 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,22 @@ +FROM node:20-alpine AS development-dependencies-env +COPY . /app +WORKDIR /app +RUN npm ci + +FROM node:20-alpine AS production-dependencies-env +COPY ./package.json package-lock.json /app/ +WORKDIR /app +RUN npm ci --omit=dev + +FROM node:20-alpine AS build-env +COPY . /app/ +COPY --from=development-dependencies-env /app/node_modules /app/node_modules +WORKDIR /app +RUN npm run build + +FROM node:20-alpine +COPY ./package.json package-lock.json /app/ +COPY --from=production-dependencies-env /app/node_modules /app/node_modules +COPY --from=build-env /app/build /app/build +WORKDIR /app +CMD ["npm", "run", "start"] \ No newline at end of file diff --git a/frontend/README.md b/frontend/README.md index 4062b95..e0d2066 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -1,53 +1,100 @@ -# Frontend - -Run `yarn install` and `yarn dev` in this directory to launch the react project in your browser - -## Windows - -To run on windows, use docker. - -1. Set VITE_DOCKER to true in .env -2. Run `docker compose up -d` -3. Navigate to http://localhost:8000/ - -Note: If you change your environment variables in .env, you will have to rebuild the container to see the changes using the `docker compose up --build -d` command. - -To see the logs directly in your console, you can remove the -d flag. Otherwise, you can view output in Docker Desktop. - -## Update locale files - -Pull key:value from google sheets to create json file. -`https://docs.google.com/spreadsheets/d/1Kk8OIOhXxzyMA3ZgyiIiQtdwJNBJvGaUTNsarYHcFsM/` - -> **IMPORTANT** Please create a new google sheet for each new project. Do not use this one for one of your projects - -Run `yarn sheet2i18n` to update your local keys with what is in the spreadsheet. - -## File Structure - - . - ├── ... - ├── public # Public root - ├── src - │ ├── app # Typescript app + sass files - │ │ ├── components - │ │ ├── containers - │ │ ├── enums - │ │ ├── forms - │ │ ├── hocs - │ │ ├── icons - │ │ ├── pages - │ │ ├── routes - │ │ ├── services - │ │ ├── shared - │ │ ├── stores - │ ├── assets # Static assets - │ │ ├── fonts - │ │ ├── images - │ │ ├── locales - │ └── styles # Global Sass files. - │ │ ├── mixins - │ │ ├── vendors - ├── example.env - ├── .env - └── ... +# Welcome to React Router! + +A modern, production-ready template for building full-stack React applications using React Router. + +[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/remix-run/react-router-templates/tree/main/default) + +## Features + +- 🚀 Server-side rendering +- ⚡️ Hot Module Replacement (HMR) +- 📦 Asset bundling and optimization +- 🔄 Data loading and mutations +- 🔒 TypeScript by default +- 🎉 TailwindCSS for styling +- 📖 [React Router docs](https://reactrouter.com/) + +## Getting Started + +### Installation + +Install the dependencies: + +```bash +npm install +``` + +### Development + +Start the development server with HMR: + +```bash +npm run dev +``` + +Your application will be available at `http://localhost:5173`. + +## Building for Production + +Create a production build: + +```bash +npm run build +``` + +## Deployment + +### Docker Deployment + +This template includes three Dockerfiles optimized for different package managers: + +- `Dockerfile` - for npm +- `Dockerfile.pnpm` - for pnpm +- `Dockerfile.bun` - for bun + +To build and run using Docker: + +```bash +# For npm +docker build -t my-app . + +# For pnpm +docker build -f Dockerfile.pnpm -t my-app . + +# For bun +docker build -f Dockerfile.bun -t my-app . + +# Run the container +docker run -p 3000:3000 my-app +``` + +The containerized application can be deployed to any platform that supports Docker, including: + +- AWS ECS +- Google Cloud Run +- Azure Container Apps +- Digital Ocean App Platform +- Fly.io +- Railway + +### DIY Deployment + +If you're familiar with deploying Node applications, the built-in app server is production-ready. + +Make sure to deploy the output of `npm run build` + +``` +├── package.json +├── package-lock.json (or pnpm-lock.yaml, or bun.lockb) +├── build/ +│ ├── client/ # Static assets +│ └── server/ # Server-side code +``` + +## Styling + +This template comes with [Tailwind CSS](https://tailwindcss.com/) already configured for a simple default starting experience. You can use whatever CSS framework you prefer. + +--- + +Built with ❤️ using React Router. diff --git a/frontend/docker-compose.yml b/frontend/docker-compose.yml deleted file mode 100644 index c61faae..0000000 --- a/frontend/docker-compose.yml +++ /dev/null @@ -1,16 +0,0 @@ -version: "3.4" -services: - vite_docker: - image: node:20.11.1 - container_name: vite_docker - env_file: - - .env - entrypoint: /srv/app/entrypoint.sh - ports: - - 8000:8000 - working_dir: /srv/app - volumes: - - type: bind - source: ./ - target: /srv/app - tty: true diff --git a/frontend/docs/ComponentsAndContainers.md b/frontend/docs/ComponentsAndContainers.md deleted file mode 100644 index 26fb89e..0000000 --- a/frontend/docs/ComponentsAndContainers.md +++ /dev/null @@ -1,20 +0,0 @@ -# How to choose between Component or Container - -## Component - -- Manages how things look -- Has no dependencies on the rest of the app -- Doesn't specify how data is loaded or mutated -- Receives data and callbacks exclusively via props -- Rarely has own state (when it does, it’s UI state rather than data) -- Easy examples: Button, Table, Spinner, etc... - -## Container - -- Is often stateful, as it tends to serve as data sources. -- Is concerned with how things work -- May contain both presentational and container components inside but usually don’t have any DOM markup of their own except for some wrapping divs, and never have any styles. -- Provides the data and behavior to presentational or other container components. -- Examples: UserInfo, ShoppingCart, etc... - -> Don’t take the component VS container separation as a dogma. Sometimes it doesn’t matter or it’s hard to draw the line. If you feel unsure about whether a specific element should be a component or a container, it might be too early to decide. Don’t sweat it! diff --git a/frontend/docs/ReactStandards.md b/frontend/docs/ReactStandards.md deleted file mode 100644 index 67bb10d..0000000 --- a/frontend/docs/ReactStandards.md +++ /dev/null @@ -1,222 +0,0 @@ -# React Standards - -## Code formatting - -- Prettier is used to format all TypeScript code -- You should set your editor of choice to format on save using prettier. This will prevent code changes on formatting - -## Designs - -- UI designs should be followed as closely as possible. If it's not possible or costly to match the design, the designer and the developer need to plan a meeting to discuss options. -- Most design viewing tools have ways to inspect the design to see values like colors & spacing. Currently we use Figma which has an Inspector tab on the right which provides this functionality -- Sometimes a element may not be selectable with the inspector due to it being hidden under a different element, to access the element underneath use the panel on the left to find your element - -## Functions - -- Only use functions when needed. - - - For example: - -```ts -const showButton = (): boolean => { - return providerId === client.providerId; -}; -``` - -- Should be a constant variable - `const showButton = providerId === client.providerId;` -- Callbacks should be named after the event -- For example a `onClick` callback function name should always start with "onClick" - `onClick={onClickAmountOption}` - -- Functions that aren't React components should be camel case: `onChange` not `OnChange` -- Use arrow functions -- Use a normal function for react components. (The benefit of lexical scope of `this` is not present for components) - -## Interfaces and Types - -- We favor using `interface` most of the time, but `type` can be used in certain scenarios -- We avoid `any` or `unknown` as much as possible -- Use an `interface` to define an object - -```ts -interface User { - id: number; - name: string; - email: string; -} - -const user: User = { id: 1, name: "John Doe", email: "john.doe@gmail.com" }; -``` - -- Use an `interface` to extend another `interface` - -```ts -interface Admin extends User { - canDeleteUsers: boolean; -} - -const adminUser: Admin = { - id: 2, - name: "Jane Doe", - email: "jane.doe@gmail.com", - canDeleteUsers: true, -}; -``` - -Use `type` when defining a complex type - -```ts -type ID = number | string; -type UserResponse = User | null; -type Dictionary = { [key: string]: T }; -``` - -Use `type` when you want a simpler `enum` using a string union. -Results with easier type inference(intellisense can be easier with this than `enum`) -and can simplify usage for API endpoints return objects - -```ts -type Status = "success" | "info" | "warning" | "error"; -``` - -## Labels - -- Labels should always be passed between components as the translated value -- You should never see code like below where a property is being translated: - `` -- The translate function should be called in the parent component and the child just renders the property as is: - `` -- Use the built in [interpolation functionality](https://www.i18next.com/translation-function/interpolation) instead of `.replace()` for example: - -```ts -t("Plan_coMemberFee_label", { - CoMemberFee: formatCurrency(amount), - CoMemberFeeType: feeTypeLabel, -}); -``` - -## Plurals - -- Here is how you should manage translations with plurals. [Reference](https://www.i18next.com/translation-function/plurals) - -`component.tsx` - -```ts -t("asset__share_modal_title", { - count: assets.length, -}); -``` - -`en.json` - -```json -{ - "asset__share_modal_title": "Share asset", - "asset__share_modal_title_other": "Share assets" -} -``` - -- Do not do this in your `component.tsx` - -```ts -{ - assets.length === 1 - ? t("asset__share_modal_title") - : t("asset__share_modal_title_other"); -} -``` - -## State - -- When using useState, the set function should always be named `set[NameOfVariable]` - -```ts -const [hasModification, setHasModification] = useState(false); -``` - -## Skeletons - -[Mui Skeleton](https://mui.com/components/skeleton) - -- Skeletons should match the content about to be rendered as closely as possible -- Where possible use the same container elements for the skeletons as the content being rendered - -Ex: -Good - -```tsx -
- {isFetchingData ? ( - - ) : ( - - )} -
-``` - -Wrong - -```tsx -{ - isFetchingData ? ( -
- -
- ) : ( -
- -
- ); -} -``` - -## Styles - -- All styling that affects basic MUI components should be in the theme -- Styling for specific component or specific container should be in proper styled component or proper `.scss` file -- Avoid inline styles on components at all costs -- All colors should be in theme.palette -- Use the MaterialUI Typography component for re-usable font styles which are defined in the theme -- Avoid `!important` at all costs, if it must be used, it must have a comment explaining why -- All media queries should be below the other styles of the same level, separated by a blank line -- Avoid using selectors for internal Material UI elements as they can change on upgrades, try to find other properties on the elements that reference those elements instead -- All style names must be in camel case format starting with a lowercase letter, ex: `listItem: { display: block; }` - -## Responsiveness - -- Always test using different screen sizes to check for layout issues -- The MaterialUI layout components have properties built for responsiveness, see their [official documentation](https://mui.com/material-ui/guides/responsive-ui/) -- `useMediaQuery` should only be used when css media queries would be significantly more work, since `useMediaQuery` is less efficient (it uses JavaScript and requires the component to re-render) - -## Files - -- The `tsx` extension should only be used when needed, if the file doesn't use the React syntax, it should be a ts file -- File name & case should match their default export For example a file that has a default export of: - - A component called `AccessCard` should be called `AccessCard.tsx` - - A hook called `useCustomerInfo` should be called `useCustomerInfo.ts` - -## Order - -- Try to keep the order of content between similar files consistent where possible -- Basic order of React component file contents: - - Imports - - Interfaces, types & enums - - Variables - - Functions - - Styles - - Private components - - Public/exported components (typically only one) -- Basic order of React component content: - - Hooks - - Variables - - Functions - - Effects - - Return -- Within the groups use alphabetical sorting when possible - -## Misc - -- Never use `dangerouslySetInnerHTML` -- Only use functionnal components. -- Business logic should be in the API instead of the client when possible diff --git a/frontend/docs/Styling.md b/frontend/docs/Styling.md deleted file mode 100644 index c7e6933..0000000 --- a/frontend/docs/Styling.md +++ /dev/null @@ -1,73 +0,0 @@ -# Styling - -There is multiple ways to go about styling in a react project. -This will explain to you the standard we propose to your project. - -> If any of this does not fit the team working on the project, please feel free to change it and to update this file to reflect the standard in the project - -## .scss files - -The main way you will be styling your components, will be by creating a new `.scss` file in the same directory as your component. -For example, if you have an `Admin.tsx` component, you would create an `admin.scss` file and import it in your `.tsx` -Here is a short code snippet showing how it would look like: - -> Please follow the [BEM standards](https://getbem.com/naming/) for you class naming convention - -```tsx -import "./admin.scss"; - -export const Admin = () => { - return
...
; -}; -``` - -```scss -.admin { - display: flex; - flex-direction: column; - gap: get-spacing(xs); - background-color: get-color(primary, main); -} -``` - -We also created a couple of utility `.scss` classes that you would be able to use. -They are mainly meant to be used as spacing classes. -See them in the `/frontend/src/styles` directory. - -Here is the example from above but using the utility classes - -```tsx -import "./admin.scss"; - -export const Admin = () => { - return
...
; -}; -``` - -```scss -.admin { - background-color: get-color(primary, main); -} -``` - -> You are not forced to use any of the spacing classes, but with our experience, we find it usefull to be able to quickly align items using these - -## Styled components (MUI) - -When you want to change a component coming from MUI, we recommend that you create a styled component of it inside the components folder. -You should go look at the `Button.tsx` component to see an example. - -This allows us to have the same styling for every button in the app, without messing with MUI theme. -You can still go and change components everywhere by changing it in `createTheme`, but we found that in most cases, when the app grows, it can cause a lot of annoying bugs. - -## SX (MUI) - -You have probably done something similar in the past - -```tsx -export const Example = () => { - return ...; -}; -``` - -We do not recommend you using that, and would point you toward using a simple div and style it with our utility classes. diff --git a/frontend/entrypoint.sh b/frontend/entrypoint.sh deleted file mode 100644 index ad61ba3..0000000 --- a/frontend/entrypoint.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -corepack enable -yarn install -yarn dev diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js new file mode 100644 index 0000000..8343663 --- /dev/null +++ b/frontend/eslint.config.js @@ -0,0 +1,55 @@ +import js from "@eslint/js"; +import eslintConfigPrettier from "eslint-config-prettier"; +import react from "eslint-plugin-react"; +import reactHooks from "eslint-plugin-react-hooks"; +import reactRefresh from "eslint-plugin-react-refresh"; +import globals from "globals"; +import tseslint from "typescript-eslint"; + +export default tseslint.config( + { ignores: ["dist", "build", ".react-router"] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ["**/*.{js,jsx,mjs,cjs,ts,tsx}"], + languageOptions: { + ecmaVersion: "latest", + globals: globals.browser, + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + }, + }, + plugins: { + react: react, + "react-hooks": reactHooks, + "react-refresh": reactRefresh.configs.vite, + }, + rules: { + ...reactHooks.configs.recommended.rules, + // allow unused variables that start with an underscore + "@typescript-eslint/no-unused-vars": [ + "error", + { + args: "all", + argsIgnorePattern: "^_", + caughtErrors: "all", + caughtErrorsIgnorePattern: "^_", + destructuredArrayIgnorePattern: "^_", + varsIgnorePattern: "^_", + ignoreRestSiblings: true, + }, + ], + }, + settings: { + react: { + version: "detect", + }, + env: { + node: true, + browser: true, + }, + }, + }, + eslintConfigPrettier, // turn off rules that conflict with Prettier +); diff --git a/frontend/index.html b/frontend/index.html deleted file mode 100644 index 8630eb2..0000000 --- a/frontend/index.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - React Template - - -
- - - diff --git a/frontend/package.json b/frontend/package.json index 5f6513c..0dc0fba 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,70 +1,71 @@ { - "name": "react-template-demo", + "name": "web-react-skeleton-react-router", "private": true, - "version": "0.0.0", "type": "module", "scripts": { - "dev": "vite", - "build": "tsc -b && vite build", - "sheet2i18n": "sheet2i18n src/sheet2i18n.config.cjs", - "lint": "yarn lint:scripts && yarn lint:styles && yarn lint:editor && yarn prettier --write .", - "lint:scripts": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", - "lint:styles": "stylelint \"./src/**/*.(scss)\"", - "lint:editor": "eclint check ./src/app", - "preview": "vite preview" + "build": "react-router build", + "dev": "react-router dev", + "start": "react-router-serve ./build/server/index.js", + "typecheck": "react-router typegen && tsc", + "lint": "yarn lint:scripts && yarn lint:styles && yarn prettier", + "lint:scripts": "eslint ./src", + "lint:styles": "stylelint '**/*.css'", + "prettier": "prettier --write ./src", + "sheet2i18n": "node ./sheet2i18n/index.cjs src/sheet2i18n.config.cjs" }, "dependencies": { - "@mui/icons-material": "^6.1.0", - "@mui/material": "^6.1.0", - "@mui/material-pigment-css": "^6.1.0", - "axios": "^1.7.4", - "classnames": "^2.5.1", - "dayjs": "^1.11.11", - "i18next": "^23.11.5", - "i18next-browser-languagedetector": "^8.0.0", - "prism-react-renderer": "^2.3.1", - "qs": "^6.12.2", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-ga4": "^2.1.0", - "react-helmet-async": "^2.0.5", - "react-i18next": "^14.1.2", - "react-router-dom": "^6.24.0", - "react-toastify": "^10.0.5", - "react-transition-group": "^4.4.5", - "yup": "^1.4.0", - "zustand": "^4.5.4" + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.0", + "@mui/icons-material": "^6.4.1", + "@mui/material": "^6.4.1", + "@react-router/node": "^7.1.3", + "@react-router/serve": "^7.1.3", + "@tanstack/react-query": "^5.64.2", + "@tanstack/react-query-devtools": "^5.64.2", + "axios": "^1.7.9", + "clsx": "^2.1.1", + "i18next": "^24.2.1", + "i18next-browser-languagedetector": "^8.0.2", + "isbot": "^5.1.17", + "prism-react-renderer": "^2.4.1", + "qs": "^6.14.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-i18next": "^15.4.0", + "react-router": "^7.1.3", + "react-toastify": "^11.0.3", + "yup": "^1.6.1", + "zustand": "^5.0.3" }, "devDependencies": { - "@pigment-css/vite-plugin": "^0.0.23", - "@types/classnames": "^2.3.1", - "@types/node": "^20.14.9", - "@types/qs": "^6.9.15", - "@types/react": "^18.3.3", - "@types/react-dom": "^18.3.0", - "@types/react-helmet": "^6.1.11", - "@types/react-router-dom": "^5.3.3", - "@types/sass": "^1.45.0", - "@typescript-eslint/eslint-plugin": "^7.13.1", - "@typescript-eslint/parser": "^7.13.1", - "@vitejs/plugin-react": "^4.3.1", - "eclint": "^2.8.1", - "eslint": "^8.57.0", - "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-react": "^7.34.3", - "eslint-plugin-react-hooks": "^4.6.2", - "eslint-plugin-react-refresh": "^0.4.7", - "postcss": "^8.4.29", - "prettier": "^3.3.2", - "sass": "^1.77.6", - "sheet2i18n": "^1.1.2", - "stylelint": "^16.6.1", - "stylelint-config-prettier-scss": "^1.0.0", - "stylelint-config-standard-scss": "^13.1.0", - "stylelint-prettier": "^5.0.0", - "stylelint-scss": "^6.3.2", - "typescript": "^5.2.2", - "vite": "^5.3.1" + "@eslint/js": "^9.18.0", + "@react-router/dev": "^7.1.3", + "@types/node": "^20", + "@types/qs": "^6", + "@types/react": "^19.0.1", + "@types/react-dom": "^19.0.1", + "autoprefixer": "^10.4.20", + "csv-parse": "^5.6.0", + "eslint": "^9.18.0", + "eslint-config-prettier": "^10.0.1", + "eslint-plugin-react": "^7.37.4", + "eslint-plugin-react-hooks": "^5.1.0", + "eslint-plugin-react-refresh": "^0.4.18", + "node-fetch": "^3.3.2", + "postcss": "^8.4.49", + "prettier": "^3.4.2", + "stylelint": "^16.13.2", + "stylelint-config-css-modules": "^4.4.0", + "stylelint-config-standard": "^37.0.0", + "stylelint-order": "^6.0.4", + "stylelint-prettier": "^5.0.2", + "typescript": "^5.7.2", + "typescript-eslint": "^8.21.0", + "vite": "^5.4.11", + "vite-tsconfig-paths": "^5.1.4" }, - "packageManager": "yarn@4.5.0" + "packageManager": "yarn@4.6.0+sha512.5383cc12567a95f1d668fbe762dfe0075c595b4bfff433be478dbbe24e05251a8e8c3eb992a986667c1d53b6c3a9c85b8398c35a960587fbd9fa3a0915406728", + "resolutions": { + "@babel/traverse/globals": "14.0.0" + } } diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico index e4b91964092ce8a43d2085cb1379bd51ded1a1fe..5dbdfcddcb14182535f6d32d1c900681321b1aa3 100644 GIT binary patch literal 15086 zcmeI33v3ic7{|AFEmuJ-;v>ep_G*NPi6KM`qNryCe1PIJ8siIN1WZ(7qVa)RVtmC% z)Ch?tN+afMKm;5@rvorJk zcXnoOc4q51HBQnQH_jn!cAg&XI1?PlX>Kl^k8qq0;zkha`kY$Fxt#=KNJAE9CMdpW zqr4#g8`nTw191(+H4xW8Tmyru2I^3=J1G3emPxkPXA=3{vvuvse_WWSshqaqls^-m zgB7q8&Vk*aYRe?sn$n53dGH#%3y%^vxv{pL*-h0Z4bmb_(k6{FL7HWIz(V*HT#IcS z-wE{)+0x1U!RUPt3gB97%p}@oHxF4|6S*+Yw=_tLtxZ~`S=z6J?O^AfU>7qOX`JNBbV&8+bO0%@fhQitKIJ^O^ zpgIa__qD_y07t@DFlBJ)8SP_#^j{6jpaXt{U%=dx!qu=4u7^21lWEYHPPY5U3TcoQ zX_7W+lvZi>TapNk_X>k-KO%MC9iZp>1E`N34gHKd9tK&){jq2~7OsJ>!G0FzxQFw6G zm&Vb(2#-T|rM|n3>uAsG_hnbvUKFf3#ay@u4uTzia~NY%XgCHfx4^To4BDU@)HlV? z@EN=g^ymETa1sQK{kRwyE4Ax8?wT&GvaG@ASO}{&a17&^v`y z!oPdiSiia^oov(Z)QhG2&|FgE{M9_4hJROGbnj>#$~ZF$-G^|zPj*QApltKe?;u;uKHJ~-V!=VLkg7Kgct)l7u39f@%VG8e3f$N-B zAu3a4%ZGf)r+jPAYCSLt73m_J3}p>}6Tx0j(wg4vvKhP!DzgiWANiE;Ppvp}P2W@m z-VbYn+NXFF?6ngef5CfY6ZwKnWvNV4z6s^~yMXw2i5mv}jC$6$46g?G|CPAu{W5qF zDobS=zb2ILX9D827g*NtGe5w;>frjanY{f)hrBP_2ehBt1?`~ypvg_Ot4x1V+43P@Ve8>qd)9NX_jWdLo`Zfy zoeam9)@Dpym{4m@+LNxXBPjPKA7{3a&H+~xQvr>C_A;7=JrfK~$M2pCh>|xLz>W6SCs4qC|#V`)# z)0C|?$o>jzh<|-cpf

K7osU{Xp5PG4-K+L2G=)c3f&}H&M3wo7TlO_UJjQ-Oq&_ zjAc9=nNIYz{c3zxOiS5UfcE1}8#iI4@uy;$Q7>}u`j+OU0N<*Ezx$k{x_27+{s2Eg z`^=rhtIzCm!_UcJ?Db~Lh-=_))PT3{Q0{Mwdq;0>ZL%l3+;B&4!&xm#%HYAK|;b456Iv&&f$VQHf` z>$*K9w8T+paVwc7fLfMlhQ4)*zL_SG{~v4QR;IuX-(oRtYAhWOlh`NLoX0k$RUYMi z2Y!bqpdN}wz8q`-%>&Le@q|jFw92ErW-hma-le?S z-@OZt2EEUm4wLsuEMkt4zlyy29_3S50JAcQHTtgTC{P~%-mvCTzrjXOc|{}N`Cz`W zSj7CrXfa7lcsU0J(0uSX6G`54t^7}+OLM0n(|g4waOQ}bd3%!XLh?NX9|8G_|06Ie zD5F1)w5I~!et7lA{G^;uf7aqT`KE&2qx9|~O;s6t!gb`+zVLJyT2T)l*8l(j literal 207237 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 z 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 O0000

+
); } diff --git a/frontend/src/app/containers/cookieConsent/cookieBanner/cookie-banner.module.css b/frontend/src/app/components/cookieConsent/cookieBanner/cookie-banner.module.css similarity index 75% rename from frontend/src/app/containers/cookieConsent/cookieBanner/cookie-banner.module.css rename to frontend/src/app/components/cookieConsent/cookieBanner/cookie-banner.module.css index 5390453..247dae9 100644 --- a/frontend/src/app/containers/cookieConsent/cookieBanner/cookie-banner.module.css +++ b/frontend/src/app/components/cookieConsent/cookieBanner/cookie-banner.module.css @@ -1,6 +1,8 @@ .cookie-banner { width: 100%; position: fixed; + /* stylelint-disable-next-line custom-property-pattern */ + z-index: calc(var(--mui-zIndex-drawer) + 2); } .container { diff --git a/frontend/src/app/containers/cookieConsent/cookieConsent.config.ts b/frontend/src/app/components/cookieConsent/cookieConsent.config.ts similarity index 97% rename from frontend/src/app/containers/cookieConsent/cookieConsent.config.ts rename to frontend/src/app/components/cookieConsent/cookieConsent.config.ts index a7fb3c8..8e58a1b 100644 --- a/frontend/src/app/containers/cookieConsent/cookieConsent.config.ts +++ b/frontend/src/app/components/cookieConsent/cookieConsent.config.ts @@ -1,4 +1,4 @@ -import ICookieSection from "@containers/cookieConsent/interfaces/ICookieSection"; +import type ICookieSection from "./interfaces/ICookieSection"; const cookieConsentConfig: ICookieSection[] = [ { diff --git a/frontend/src/app/containers/cookieConsent/cookieConsentHelper.ts b/frontend/src/app/components/cookieConsent/cookieConsentHelper.ts similarity index 88% rename from frontend/src/app/containers/cookieConsent/cookieConsentHelper.ts rename to frontend/src/app/components/cookieConsent/cookieConsentHelper.ts index b5f6a73..7a52f7c 100644 --- a/frontend/src/app/containers/cookieConsent/cookieConsentHelper.ts +++ b/frontend/src/app/components/cookieConsent/cookieConsentHelper.ts @@ -1,4 +1,4 @@ -import ICookiePreferences from "@containers/cookieConsent/interfaces/ICookiePreferences"; +import type ICookiePreferences from "./interfaces/ICookiePreferences"; export const COOKIE_PREFERENCES = "COOKIE_PREFERENCES"; export const COOKIE_CONSENT_DURATION = 1000 * 60 * 60 * 24 * 365; diff --git a/frontend/src/app/containers/cookieConsent/cookieModal/CookieModal.tsx b/frontend/src/app/components/cookieConsent/cookieModal/CookieModal.tsx similarity index 71% rename from frontend/src/app/containers/cookieConsent/cookieModal/CookieModal.tsx rename to frontend/src/app/components/cookieConsent/cookieModal/CookieModal.tsx index 89a3dd6..913d1df 100644 --- a/frontend/src/app/containers/cookieConsent/cookieModal/CookieModal.tsx +++ b/frontend/src/app/components/cookieConsent/cookieModal/CookieModal.tsx @@ -7,18 +7,19 @@ import Link from "@components/link/Link"; import Switch from "@components/switch/Switch"; import Table from "@components/table/Table"; import TableRow from "@components/tableRow/TableRow"; -import Typography from "@mui/material/Typography"; -import ICookieSection from "@containers/cookieConsent/interfaces/ICookieSection"; import CloseIcon from "@icons/CloseIcon"; +import { Box } from "@mui/material"; +import Typography from "@mui/material/Typography"; import { - Dispatch, - MouseEvent, - SetStateAction, - SyntheticEvent, + type Dispatch, + type MouseEvent, + type SetStateAction, + type SyntheticEvent, useCallback, useState, } from "react"; import { useTranslation } from "react-i18next"; +import type ICookieSection from "../interfaces/ICookieSection"; interface ICookieModal { open: boolean; @@ -64,15 +65,28 @@ export default function CookieModal({ ); return ( - -
-
-
+ + ({ margin: theme.customProperties.spacing.lg })}> + ({ + display: "flex", + flexDirection: "column", + gap: theme.customProperties.spacing.md, + marginBottom: theme.customProperties.spacing.md, + })} + > + {t("cookie_modal__title")} -
+ {t("cookie_modal__description_1")} @@ -80,7 +94,7 @@ export default function CookieModal({ {t("cookie_modal__description_2")} ({ marginRight: theme.customProperties.spacing.a })} href={t("cookie_consent_link")} underline="always" external @@ -89,8 +103,14 @@ export default function CookieModal({ {t("cookie_consent__learn_more")} -
-
+ + ({ + display: "flex", + flexDirection: "column", + gap: theme.customProperties.spacing.lg, + })} + > {t("cookie_modal__description_3")} @@ -103,7 +123,12 @@ export default function CookieModal({ onChange={handleExpand(index)} > - + ({ + marginRight: theme.customProperties.spacing.a, + })} + > {t(cookieType.title)} ({ + marginX: theme.customProperties.spacing.md, + marginBottom: theme.customProperties.spacing.md, + })} > {t(description)} ))} {cookieType.cookies && ( -
+ ({ + margin: theme.customProperties.spacing.md, + })} + > ))}
-
+
)} ))}
-
+ ({ + display: "flex", + flexDirection: "column", + gap: theme.customProperties.spacing.sm, + justifyContent: "center", + })} + > -
-
- + + +
); } diff --git a/frontend/src/app/containers/cookieConsent/interfaces/ICookieInfo.ts b/frontend/src/app/components/cookieConsent/interfaces/ICookieInfo.ts similarity index 100% rename from frontend/src/app/containers/cookieConsent/interfaces/ICookieInfo.ts rename to frontend/src/app/components/cookieConsent/interfaces/ICookieInfo.ts diff --git a/frontend/src/app/containers/cookieConsent/interfaces/ICookiePreferences.ts b/frontend/src/app/components/cookieConsent/interfaces/ICookiePreferences.ts similarity index 100% rename from frontend/src/app/containers/cookieConsent/interfaces/ICookiePreferences.ts rename to frontend/src/app/components/cookieConsent/interfaces/ICookiePreferences.ts diff --git a/frontend/src/app/containers/cookieConsent/interfaces/ICookieSection.ts b/frontend/src/app/components/cookieConsent/interfaces/ICookieSection.ts similarity index 66% rename from frontend/src/app/containers/cookieConsent/interfaces/ICookieSection.ts rename to frontend/src/app/components/cookieConsent/interfaces/ICookieSection.ts index 2d30f94..32d4771 100644 --- a/frontend/src/app/containers/cookieConsent/interfaces/ICookieSection.ts +++ b/frontend/src/app/components/cookieConsent/interfaces/ICookieSection.ts @@ -1,4 +1,4 @@ -import ICookieInfo from "@containers/cookieConsent/interfaces/ICookieInfo"; +import type ICookieInfo from "./ICookieInfo"; export default interface ICookieSection { id: string; diff --git a/frontend/src/app/containers/debugBanner/DebugBanner.tsx b/frontend/src/app/components/debugBanner/DebugBanner.tsx similarity index 59% rename from frontend/src/app/containers/debugBanner/DebugBanner.tsx rename to frontend/src/app/components/debugBanner/DebugBanner.tsx index 6598590..52b7a64 100644 --- a/frontend/src/app/containers/debugBanner/DebugBanner.tsx +++ b/frontend/src/app/components/debugBanner/DebugBanner.tsx @@ -1,31 +1,32 @@ import Button from "@components/button/Button"; -import homeRoute from "@pages/home/home.route"; -import uikitRoute from "@pages/uikit/uikit.route"; -import classNames from "classnames"; +import { Box } from "@mui/material"; +import i18next from "@shared/i18n"; +import clsx from "clsx"; import { useState } from "react"; import { useTranslation } from "react-i18next"; -import { Link } from "react-router-dom"; +import { Link } from "react-router"; import classes from "./debug-banner.module.css"; const HIDE_BANNER_UNTIL_KEY = "hideBannerUntil"; const FOUR_HOURS = 4 * 60 * 60 * 1000; +const env = import.meta.env.VITE_ENV; export default function DebugBanner() { const [t] = useTranslation(); - const hideBannerUntil = localStorage.getItem(HIDE_BANNER_UNTIL_KEY); + const hideBannerUntil = localStorage.getItem(HIDE_BANNER_UNTIL_KEY); const [isBannerOpen, setIsBannerOpen] = useState( hideBannerUntil ? Number(hideBannerUntil) < Date.now() : true, ); const pages = [ { - name: t(homeRoute.name), - to: homeRoute.paths[t("locale__key")], + name: t("home__page_title"), + to: `/${i18next.language}/home`, }, { - name: t(uikitRoute.name), - to: uikitRoute.paths[t("locale__key")], + name: t("dashboard__page_title"), + to: `/${i18next.language}/dashboard`, }, ]; @@ -37,28 +38,29 @@ export default function DebugBanner() { ); }; - if (__ENV__ === "prod" || !isBannerOpen) { + if (env === "prod" || !isBannerOpen) { return null; } return ( -
-
+ ({ zIndex: theme.zIndex.debugBanner, })} - className={classNames(classes["content"], { - [classes["local"]]: __ENV__ === "local", - [classes["dev"]]: __ENV__ === "dev", - [classes["qa"]]: __ENV__ === "qa", - [classes["uat"]]: __ENV__ === "uat", - [classes["staging"]]: __ENV__ === "staging", + className={clsx(classes["content"], { + [classes["local"]]: env === "local", + [classes["dev"]]: env === "dev", + [classes["qa"]]: env === "qa", + [classes["uat"]]: env === "uat", + [classes["staging"]]: env === "staging", })} >
{pages.map((page, i) => ( - + ))}
@@ -66,7 +68,7 @@ export default function DebugBanner() { -
+
); } diff --git a/frontend/src/app/containers/debugBanner/debug-banner.module.css b/frontend/src/app/components/debugBanner/debug-banner.module.css similarity index 76% rename from frontend/src/app/containers/debugBanner/debug-banner.module.css rename to frontend/src/app/components/debugBanner/debug-banner.module.css index df5427b..44086a3 100644 --- a/frontend/src/app/containers/debugBanner/debug-banner.module.css +++ b/frontend/src/app/components/debugBanner/debug-banner.module.css @@ -2,6 +2,8 @@ position: fixed; width: 100%; bottom: 0; + /* stylelint-disable-next-line custom-property-pattern */ + z-index: calc(var(--mui-zIndex-drawer) + 1); } .content { diff --git a/frontend/src/app/components/dialog/Dialog.tsx b/frontend/src/app/components/dialog/Dialog.tsx index 0a20a88..117aecb 100644 --- a/frontend/src/app/components/dialog/Dialog.tsx +++ b/frontend/src/app/components/dialog/Dialog.tsx @@ -1,6 +1,4 @@ -import Slide from "@components/slide/Slide"; -import { DialogProps, Dialog as MuiDialog } from "@mui/material"; -import { styled } from "@mui/material-pigment-css"; +import { type DialogProps, Dialog as MuiDialog, styled } from "@mui/material"; const StyledMuiDialog = styled(MuiDialog)(({ theme }) => ({ "& .MuiDialog-paper": { @@ -10,14 +8,7 @@ const StyledMuiDialog = styled(MuiDialog)(({ theme }) => ({ export default function Dialog({ ...props }: DialogProps) { return ( - + {props.children} ); diff --git a/frontend/src/app/components/errorHelperText/ErrorHelperText.tsx b/frontend/src/app/components/errorHelperText/ErrorHelperText.tsx index c469b37..a43739e 100644 --- a/frontend/src/app/components/errorHelperText/ErrorHelperText.tsx +++ b/frontend/src/app/components/errorHelperText/ErrorHelperText.tsx @@ -1,53 +1,47 @@ +import { Box, useTheme } from "@mui/material"; import Typography from "@mui/material/Typography"; -import { RefObject, useEffect, useRef, useState } from "react"; +import { type RefObject, useEffect, useRef, useState } from "react"; import { CSSTransition, TransitionGroup } from "react-transition-group"; -import { css } from "@mui/material-pigment-css"; +import classes from "./errorHelperText.module.css"; interface IErrorBox { message: string; } -const enter = css` - opacity: 0; -`; - -const enterActive = css(({ theme }) => ({ - opacity: 1, - transition: `opacity ${theme.transitions.duration.short}ms ${theme.transitions.easing.easeIn}`, -})); - -const exit = css` - opacity: 0; -`; - -const exitActive = css(({ theme }) => ({ - opacity: 0, - transition: `opacity ${theme.transitions.duration.short}ms ${theme.transitions.easing.easeOut}`, -})); - export default function ErrorHelperText({ message }: IErrorBox) { + const theme = useTheme(); const [activeMessage, setActiveMessage] = useState( undefined, ); - const nodeRef: RefObject = useRef(null); + const nodeRef: RefObject = useRef(null); useEffect(() => setActiveMessage(message), [message]); return ( - + {activeMessage && ( -
({ marginTop: theme.spacing(0), @@ -56,7 +50,7 @@ export default function ErrorHelperText({ message }: IErrorBox) { })} > {activeMessage} -
+
)}
diff --git a/frontend/src/app/components/errorHelperText/errorHelperText.module.css b/frontend/src/app/components/errorHelperText/errorHelperText.module.css new file mode 100644 index 0000000..795faa3 --- /dev/null +++ b/frontend/src/app/components/errorHelperText/errorHelperText.module.css @@ -0,0 +1,17 @@ +.enter { + opacity: 0; +} + +.enter-active { + opacity: 1; + transition: opacity var(--transition-duration) var(--transition-easing-in); +} + +.exit { + opacity: 0; +} + +.exit-active { + opacity: 0; + transition: opacity var(--transition-duration) var(--transition-easing-out); +} diff --git a/frontend/src/app/components/fieldHelperText/FieldHelperText.tsx b/frontend/src/app/components/fieldHelperText/FieldHelperText.tsx index 73d2762..ebea487 100644 --- a/frontend/src/app/components/fieldHelperText/FieldHelperText.tsx +++ b/frontend/src/app/components/fieldHelperText/FieldHelperText.tsx @@ -44,7 +44,13 @@ export default function FieldHelperText({ } return ( - + ({ + marginTop: theme.customProperties.spacing.xxs, + marginLeft: theme.customProperties.spacing.md, + })} + > {helperText} ); diff --git a/frontend/src/app/components/iconButton/IconButton.tsx b/frontend/src/app/components/iconButton/IconButton.tsx index 74ffdf5..4e5f545 100644 --- a/frontend/src/app/components/iconButton/IconButton.tsx +++ b/frontend/src/app/components/iconButton/IconButton.tsx @@ -1,4 +1,7 @@ -import { IconButtonProps, IconButton as MuiIconButton } from "@mui/material"; +import { + type IconButtonProps, + IconButton as MuiIconButton, +} from "@mui/material"; export default function IconButton({ ...props }: IconButtonProps) { return ; diff --git a/frontend/src/app/components/layout/Layout.tsx b/frontend/src/app/components/layout/Layout.tsx deleted file mode 100644 index 377555e..0000000 --- a/frontend/src/app/components/layout/Layout.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { ReactNode } from "react"; -import { styled } from "@mui/material-pigment-css"; - -interface ILayout { - children: ReactNode; - className?: string; -} - -const LayoutContainer = styled("main")(({ theme }) => ({ - width: "100%", - display: "flex", - flexDirection: "column", - flexGrow: 1, - padding: theme.spacing(2), - alignItems: "center", - backgroundColor: "#fafafb", // TODO: get this from theme - - [theme.breakpoints.up("md")]: { - padding: theme.spacing(4), - }, - - [theme.breakpoints.up("lg")]: { - padding: theme.spacing(6), - }, - - [theme.breakpoints.up("xl")]: { - padding: theme.spacing(8), - }, - - "> .content": { - maxWidth: "82.5rem", - width: "100%", - }, -})); - -function Container({ children, className }: ILayout) { - return ( - -
{children}
-
- ); -} - -const LayoutAuth = styled("main")(({ theme }) => ({ - width: "100%", - display: "flex", - flexDirection: "column", - justifyContent: "center", - alignItems: "center", - backgroundColor: "#fafafb", // TODO: get this from theme - - [theme.breakpoints.up("xs")]: { - flex: "1 1 auto", - }, - - "> .content": { - maxWidth: "82.5rem", - width: "100%", - - [theme.breakpoints.up("xs")]: { - maxWidth: 442, - padding: theme.spacing(2), - }, - }, -})); - -function Auth({ children, className }: ILayout) { - return ( - -
{children}
-
- ); -} - -const Layout = { - Container, - Auth, -}; - -export default Layout; diff --git a/frontend/src/app/components/link/Link.tsx b/frontend/src/app/components/link/Link.tsx index f60faa7..ad49f5e 100644 --- a/frontend/src/app/components/link/Link.tsx +++ b/frontend/src/app/components/link/Link.tsx @@ -1,17 +1,11 @@ import ExternalLinkOutlined from "@icons/ExternalLinkOutlined"; -import { LinkProps, Link as MuiLink } from "@mui/material"; -import { styled } from "@mui/material-pigment-css"; +import { Link as MuiLink, type LinkProps as MuiLinkProps } from "@mui/material"; +import { Link as RRLink, type LinkProps as RRLinkProps } from "react-router"; -const StyledMuiLink = styled(MuiLink)(({ theme }) => ({ - display: "flex", - color: theme.palette.primary.main, - textDecorationColor: "unset", - cursor: "pointer", -})); - -interface ILink extends LinkProps { - external?: boolean; -} +type ILink = MuiLinkProps & + RRLinkProps & { + external?: boolean; + }; export default function Link({ children, @@ -22,14 +16,25 @@ export default function Link({ ...props }: ILink) { return ( - ({ + display: "inline-flex", + alignItems: "center", + color: theme.palette.primary.main, + textDecorationColor: "unset", + cursor: "pointer", + ".external-link": { + marginLeft: theme.customProperties.spacing.xxs, + }, + })} + component={RRLink} underline={underline} rel={rel || external ? "noreferrer" : undefined} target={target || external ? "_blank" : undefined} > {children} - {external && } - + {external && } + ); } diff --git a/frontend/src/app/components/loading/Loading.tsx b/frontend/src/app/components/loading/Loading.tsx index 5bc0f87..af78f07 100755 --- a/frontend/src/app/components/loading/Loading.tsx +++ b/frontend/src/app/components/loading/Loading.tsx @@ -1,40 +1,39 @@ -import Spinner from "@components/spinner/Spinner"; -import { RefObject, useRef } from "react"; +import { Box, CircularProgress, useTheme } from "@mui/material"; +import { type RefObject, useRef } from "react"; import { CSSTransition, TransitionGroup } from "react-transition-group"; import classes from "./loading.module.css"; -import { css } from "@mui/material-pigment-css"; - -const enterActive = css(({ theme }) => ({ - opacity: 1, - transition: `opacity ${theme.transitions.duration.standard}ms ${theme.transitions.easing.easeIn}`, -})); - -const exitActive = css(({ theme }) => ({ - opacity: 0, - transition: `opacity ${theme.transitions.duration.standard}ms ${theme.transitions.easing.easeOut}`, -})); interface ILoading { isLoading?: boolean; } export default function Loading({ isLoading = true }: ILoading) { - const nodeRef: RefObject = useRef(null); + const theme = useTheme(); + const nodeRef: RefObject = useRef(null); return ( - + {isLoading && ( -
({ @@ -43,9 +42,9 @@ export default function Loading({ isLoading = true }: ILoading) { })} >
- +
-
+
)}
diff --git a/frontend/src/app/components/loading/loading.module.css b/frontend/src/app/components/loading/loading.module.css index c180671..caac33a 100644 --- a/frontend/src/app/components/loading/loading.module.css +++ b/frontend/src/app/components/loading/loading.module.css @@ -1,20 +1,21 @@ .loading { - display: flex; - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; -} - -.spinner { - margin: auto; + display: block; } .enter { opacity: 0; } -.exit { +.enter-active { opacity: 1; + transition: opacity var(--transition-duration) var(--transition-easing-in); +} + +.exit { + opacity: 0; +} + +.exit-active { + opacity: 0; + transition: opacity var(--transition-duration) var(--transition-easing-out); } diff --git a/frontend/src/app/components/slide/Slide.tsx b/frontend/src/app/components/slide/Slide.tsx index 29eb63f..d4fde3a 100644 --- a/frontend/src/app/components/slide/Slide.tsx +++ b/frontend/src/app/components/slide/Slide.tsx @@ -1,5 +1,5 @@ -import { Slide as MuiSlide, SlideProps } from "@mui/material"; -import { forwardRef, Ref } from "react"; +import { Slide as MuiSlide, type SlideProps } from "@mui/material"; +import { forwardRef, type Ref } from "react"; const Slide = forwardRef(function Slide( { direction = "up", timeout = 500, ...props }: SlideProps, diff --git a/frontend/src/app/components/spinner/Spinner.tsx b/frontend/src/app/components/spinner/Spinner.tsx deleted file mode 100755 index 0ee64a0..0000000 --- a/frontend/src/app/components/spinner/Spinner.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import classes from "./spinner.module.css"; - -export default function Spinner() { - return ( - ({ - backgroundImage: `linear-gradient(${theme.palette.primary.dark} 16px,transparent 0), - linear-gradient(${theme.palette.primary.main} 16px, transparent 0), - linear-gradient(${theme.palette.primary.main} 16px, transparent 0), - linear-gradient(${theme.palette.primary.dark} 16px, transparent 0)`, - })} - className={classes["spinner"]} - /> - ); -} diff --git a/frontend/src/app/components/spinner/spinner.module.css b/frontend/src/app/components/spinner/spinner.module.css deleted file mode 100644 index d74fb71..0000000 --- a/frontend/src/app/components/spinner/spinner.module.css +++ /dev/null @@ -1,34 +0,0 @@ -@keyframes spinner-rotate { - 0% { - width: 64px; - height: 64px; - transform: rotate(0deg); - } - - 50% { - width: 30px; - height: 30px; - transform: rotate(180deg); - } - - 100% { - width: 64px; - height: 64px; - transform: rotate(360deg); - } -} - -.spinner { - width: 64px; - height: 64px; - display: block; - position: relative; - background-repeat: no-repeat; - background-size: 16px 16px; - background-position: - left top, - left bottom, - right top, - right bottom; - animation: spinner-rotate 1s linear infinite; -} diff --git a/frontend/src/app/components/switch/Switch.tsx b/frontend/src/app/components/switch/Switch.tsx index 0b66d26..178602e 100644 --- a/frontend/src/app/components/switch/Switch.tsx +++ b/frontend/src/app/components/switch/Switch.tsx @@ -1,5 +1,4 @@ -import { Switch as MuiSwitch, SwitchProps } from "@mui/material"; -import { styled } from "@mui/material-pigment-css"; +import { Switch as MuiSwitch, styled, type SwitchProps } from "@mui/material"; const StyledMuiSwitch = styled(MuiSwitch)(({ theme }) => ({ transform: "scale(1.125)", diff --git a/frontend/src/app/components/table/Table.tsx b/frontend/src/app/components/table/Table.tsx index bfb550e..eaf715e 100644 --- a/frontend/src/app/components/table/Table.tsx +++ b/frontend/src/app/components/table/Table.tsx @@ -4,7 +4,7 @@ import { TableCell, TableContainer, TableHead, - TableProps, + type TableProps, TableRow, } from "@mui/material"; diff --git a/frontend/src/app/components/tableRow/TableRow.tsx b/frontend/src/app/components/tableRow/TableRow.tsx index b1efec8..82dcb0d 100644 --- a/frontend/src/app/components/tableRow/TableRow.tsx +++ b/frontend/src/app/components/tableRow/TableRow.tsx @@ -1,9 +1,9 @@ import { TableRow as MuiTableRow, + styled, TableCell, - TableRowProps, + type TableRowProps, } from "@mui/material"; -import { styled } from "@mui/material-pigment-css"; interface ITableRow extends TableRowProps { columns: string[]; diff --git a/frontend/src/app/components/textField/TextField.tsx b/frontend/src/app/components/textField/TextField.tsx index a71e29f..eea64ba 100644 --- a/frontend/src/app/components/textField/TextField.tsx +++ b/frontend/src/app/components/textField/TextField.tsx @@ -1,6 +1,9 @@ -import { TextField as MuiTextField, TextFieldProps } from "@mui/material"; -import { styled } from "@mui/material-pigment-css"; -import { ChangeEvent } from "react"; +import { + TextField as MuiTextField, + styled, + type TextFieldProps, +} from "@mui/material"; +import { type ChangeEvent } from "react"; interface ITextField extends Omit { onChange: (value: string) => void; diff --git a/frontend/src/app/components/toast/Toast.tsx b/frontend/src/app/components/toast/Toast.tsx new file mode 100644 index 0000000..4206b25 --- /dev/null +++ b/frontend/src/app/components/toast/Toast.tsx @@ -0,0 +1,28 @@ +import { lazy, useEffect, useState } from "react"; +const ToastContainer = lazy(() => + import("react-toastify").then((module) => ({ + default: module.ToastContainer, + })), +); + +// We need to wrap react-toastify here to avoid the hydration issue on app startup. +export const Toast = () => { + const [isClient, setIsClient] = useState(false); + + useEffect(() => { + setIsClient(true); + }, []); + + return isClient ? ( + + ) : null; +}; diff --git a/frontend/src/app/components/uikit/uikitBlock/UikitBlock.tsx b/frontend/src/app/components/uikit/uikitBlock/UikitBlock.tsx index aabe4e4..b40981a 100644 --- a/frontend/src/app/components/uikit/uikitBlock/UikitBlock.tsx +++ b/frontend/src/app/components/uikit/uikitBlock/UikitBlock.tsx @@ -1,9 +1,10 @@ -import { ReactNode } from "react"; -import { Highlight, themes } from "prism-react-renderer"; -import Typography from "@mui/material/Typography"; import Button from "@components/button/Button"; -import { toast } from "react-toastify"; +import { Box } from "@mui/material"; +import Typography from "@mui/material/Typography"; +import { Highlight, themes } from "prism-react-renderer"; +import { type ReactNode } from "react"; import { useTranslation } from "react-i18next"; +import { toast } from "react-toastify"; interface IUikitBlock { id: string; @@ -26,7 +27,8 @@ export default function UikitBlock({ }; return ( -
- {title} + + {title} + {children} {codeBlock && ( {({ style, tokens, getLineProps, getTokenProps }) => ( -
 ({
                 borderRadius: theme.customProperties.borderRadius.sm,
@@ -57,7 +63,8 @@ export default function UikitBlock({
                 
))} -
({ top: theme.spacing(1), right: theme.spacing(1), @@ -71,11 +78,11 @@ export default function UikitBlock({ > Copy -
- + + )} )} - + ); } diff --git a/frontend/src/app/components/uikit/uikitColor/UikitColor.tsx b/frontend/src/app/components/uikit/uikitColor/UikitColor.tsx index 23adc9c..1fa1ae7 100644 --- a/frontend/src/app/components/uikit/uikitColor/UikitColor.tsx +++ b/frontend/src/app/components/uikit/uikitColor/UikitColor.tsx @@ -1,6 +1,5 @@ -import { Palette, PaletteColor } from "@mui/material"; +import { type Palette, type PaletteColor, useTheme } from "@mui/material"; import Grid from "@mui/material/Grid2"; -import { useTheme } from "@mui/material-pigment-css"; import { useCallback, useMemo } from "react"; interface IUikitColor { @@ -17,7 +16,11 @@ export default function UikitColor({ color }: IUikitColor) { const colorItem = useCallback((bgColor: string, label: string) => { return ( ({ display: "none", @@ -28,14 +30,21 @@ function UikitNav({ items }: IUikitNav) { })} > Components -
    + ({ + display: "flex", + flexDirection: "column", + gap: theme.customProperties.spacing.xs, + })} + > {items.map((item) => (
  • {item.text}
  • ))} -
- + + ); } diff --git a/frontend/src/app/containers/authProvider/AuthProvider.tsx b/frontend/src/app/containers/authProvider/AuthProvider.tsx deleted file mode 100644 index 9968b6d..0000000 --- a/frontend/src/app/containers/authProvider/AuthProvider.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import Loading from "@components/loading/Loading"; -import EPermission from "@enums/EPermission"; -import loginRoute from "@pages/login/login.route"; -import { getMe } from "@services/users/userService"; -import { ACCESS_TOKEN } from "@shared/constants"; -import { useUserStore } from "@stores/userStore"; -import { ReactNode, useEffect } from "react"; -import { useTranslation } from "react-i18next"; -import { useNavigate } from "react-router-dom"; -import { toast } from "react-toastify"; - -export default function AuthProvider({ - children, - permission, -}: { - children: ReactNode; - permission: EPermission; -}) { - const [t] = useTranslation(); - const navigate = useNavigate(); - const { setUser, user } = useUserStore(); - - useEffect(() => { - const accessToken = localStorage.getItem(ACCESS_TOKEN); - if (!accessToken) { - navigate(loginRoute.paths[t("locale__key")], { replace: true }); - } else if (!user) { - getMe() - .then(({ data }) => { - setUser(data); - }) - .catch((error) => { - if (error.response?.status === 401) { - toast.error(t("errors__expired_session"), { - toastId: "expired-session", - }); - localStorage.removeItem(ACCESS_TOKEN); - } else { - toast.error(t("errors__generic"), { - toastId: "generic", - }); - } - navigate(loginRoute.paths[t("locale__key")], { replace: true }); - }); - } - - // TODO: validate permission - }, [navigate, permission, setUser, t, user]); - - return !user ? : children; -} diff --git a/frontend/src/app/forms/auth/loginForm/LoginForm.tsx b/frontend/src/app/forms/auth/loginForm/LoginForm.tsx index c088a0c..6b77751 100644 --- a/frontend/src/app/forms/auth/loginForm/LoginForm.tsx +++ b/frontend/src/app/forms/auth/loginForm/LoginForm.tsx @@ -2,104 +2,53 @@ import Button from "@components/button/Button"; import FieldHelperText from "@components/fieldHelperText/FieldHelperText"; import TextField from "@components/textField/TextField"; import loginFormSchema from "@forms/auth/loginForm/loginForm.schema"; -import homeRoute from "@pages/home/home.route"; -import { postLogin } from "@services/auth/authService"; -import ILogin from "@services/auth/interfaces/ILogin"; -import { ACCESS_TOKEN, REFRESH_TOKEN } from "@shared/constants"; -import { useUserStore } from "@stores/userStore"; -import { - Dispatch, - FormEvent, - SetStateAction, - useCallback, - useState, -} from "react"; +import type ILogin from "@services/auth/interfaces/ILogin"; +import { useCallback, useState } from "react"; import { useTranslation } from "react-i18next"; -import { useNavigate } from "react-router-dom"; -import { toast } from "react-toastify"; +import { useOnSubmit } from "src/routes/public-routes/login/useOnSubmit"; import { ValidationError } from "yup"; +import classes from "./loginForm.module.css"; -interface ILoginForm { - setIsLoading: Dispatch>; +export interface ILoginFormProps { + onSuccessfulLogin: () => void; } -export default function LoginForm({ setIsLoading }: ILoginForm) { +export default function LoginForm(props: ILoginFormProps) { const { t } = useTranslation(); - const navigate = useNavigate(); - const { setUser } = useUserStore(); const [loginForm, setLoginForm] = useState({ username: "", password: "", }); - const [loginFormValidated, setLoginFormValidated] = useState(false); const [formErrors, setFormErrors] = useState([]); - const onSubmit = useCallback( - (event: FormEvent) => { - event.preventDefault(); - try { - setLoginFormValidated(true); - loginFormSchema.validateSync(loginForm, { - abortEarly: false, - }); - setFormErrors([]); - setIsLoading(true); - postLogin(loginForm) - .then(({ data }) => { - if (data.token && data.refreshToken) { - localStorage.setItem(ACCESS_TOKEN, data.token); - localStorage.setItem(REFRESH_TOKEN, data.refreshToken); - } - setUser(data); - navigate(homeRoute.paths[t("locale__key")]); - }) - .catch((error) => { - if (error.response?.data?.message === "Invalid credentials") { - toast.error(t("errors__invalid_credentials"), { - toastId: "invalid-credentials", - }); - } else { - toast.error(t("errors__generic"), { - toastId: "generic", - }); - } - }) - .finally(() => { - setIsLoading(false); - }); - } catch (error) { - if (error instanceof ValidationError) { - setFormErrors(error.inner); - } - } - }, - [loginForm, navigate, setIsLoading, setUser, t], + const { isLoading, onSubmit } = useOnSubmit( + loginForm, + props.onSuccessfulLogin, ); const onValidate = useCallback(() => { try { - if (loginFormValidated) { - loginFormSchema.validateSync(loginForm, { - abortEarly: false, - }); - setFormErrors([]); - } + loginFormSchema.validateSync(loginForm, { + abortEarly: false, + }); + setFormErrors([]); } catch (error) { if (error instanceof ValidationError) { setFormErrors(error.inner); } } - }, [loginForm, loginFormValidated]); + }, [loginForm]); return ( -
-
+ +
setLoginForm((prevState) => ({ ...prevState, @@ -110,12 +59,14 @@ export default function LoginForm({ setIsLoading }: ILoginForm) { />
-
+ +
setLoginForm((prevState) => ({ @@ -127,7 +78,16 @@ export default function LoginForm({ setIsLoading }: ILoginForm) { />
- diff --git a/frontend/src/app/forms/auth/loginForm/loginForm.module.css b/frontend/src/app/forms/auth/loginForm/loginForm.module.css new file mode 100644 index 0000000..d44c3a2 --- /dev/null +++ b/frontend/src/app/forms/auth/loginForm/loginForm.module.css @@ -0,0 +1,5 @@ +.container { + display: flex; + flex-direction: column; + gap: var(--mui-customProperties-spacing-xl); +} diff --git a/frontend/src/app/hocs/withAuth.tsx b/frontend/src/app/hocs/withAuth.tsx deleted file mode 100644 index 0f8d279..0000000 --- a/frontend/src/app/hocs/withAuth.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import AuthProvider from "@containers/authProvider/AuthProvider"; -import EPermission from "@enums/EPermission"; -import { ComponentType } from "react"; - -export default function withAuth( - WrappedComponent: ComponentType, - permission: EPermission, -) { - return function WrappedWithAuth() { - return ( - - - - ); - }; -} diff --git a/frontend/src/app/hooks/useChangeLanguage.ts b/frontend/src/app/hooks/useChangeLanguage.ts new file mode 100644 index 0000000..35c3ab9 --- /dev/null +++ b/frontend/src/app/hooks/useChangeLanguage.ts @@ -0,0 +1,28 @@ +import i18n from "@shared/i18n"; +import { useCallback } from "react"; +import { useTranslation } from "react-i18next"; +import { useNavigate } from "react-router"; + +const replaceLanguage = (location: string, language: string) => { + const locationChange = location.split("/"); + locationChange.splice(1, 1, language); + return locationChange.join("/"); +}; + +export const useChangeLanguage = () => { + const navigate = useNavigate(); + const { t } = useTranslation(); + + const onChangeLanguage = useCallback(() => { + const { search } = location; + const newLocation = replaceLanguage( + location.pathname, + t("locale__switch_key"), + ); + navigate(newLocation + search, { replace: true }); + void i18n.changeLanguage(t("locale__switch_key")); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return { onChangeLanguage }; +}; diff --git a/frontend/src/app/icons/AddRounded.tsx b/frontend/src/app/icons/AddRounded.tsx index 75454b2..a25d57e 100644 --- a/frontend/src/app/icons/AddRounded.tsx +++ b/frontend/src/app/icons/AddRounded.tsx @@ -1,4 +1,5 @@ -import IIcon from "./IIcon"; +import { Box } from "@mui/material"; +import type IIcon from "./IIcon"; export default function AddRounded({ className, @@ -16,7 +17,8 @@ export default function AddRounded({ xmlns="http://www.w3.org/2000/svg" > {alt} - ({ fill: theme.palette.common.white, diff --git a/frontend/src/app/icons/CaretIcon.tsx b/frontend/src/app/icons/CaretIcon.tsx index 2abf125..2d0abed 100644 --- a/frontend/src/app/icons/CaretIcon.tsx +++ b/frontend/src/app/icons/CaretIcon.tsx @@ -1,4 +1,5 @@ -import IIcon from "./IIcon"; +import { Box } from "@mui/material"; +import type IIcon from "./IIcon"; export default function CaretIcon({ className, @@ -16,7 +17,8 @@ export default function CaretIcon({ xmlns="http://www.w3.org/2000/svg" > {alt} - ({ fill: theme.palette.grey[800], diff --git a/frontend/src/app/icons/CloseIcon.tsx b/frontend/src/app/icons/CloseIcon.tsx index f6fd101..8ee942f 100644 --- a/frontend/src/app/icons/CloseIcon.tsx +++ b/frontend/src/app/icons/CloseIcon.tsx @@ -1,4 +1,5 @@ -import IIcon from "./IIcon"; +import { Box } from "@mui/material"; +import type IIcon from "./IIcon"; export default function CloseIcon({ className, @@ -16,7 +17,8 @@ export default function CloseIcon({ xmlns="http://www.w3.org/2000/svg" > {alt} - ({ fill: theme.palette.grey[800], diff --git a/frontend/src/app/icons/CookieIcon.tsx b/frontend/src/app/icons/CookieIcon.tsx index e5258ca..58867c4 100644 --- a/frontend/src/app/icons/CookieIcon.tsx +++ b/frontend/src/app/icons/CookieIcon.tsx @@ -1,4 +1,5 @@ -import IIcon from "./IIcon"; +import { Box } from "@mui/material"; +import type IIcon from "./IIcon"; export default function CookieIcon({ className, @@ -7,7 +8,8 @@ export default function CookieIcon({ alt = "Cookie Icon", }: IIcon) { return ( - - + ); } diff --git a/frontend/src/app/icons/ExternalLinkOutlined.tsx b/frontend/src/app/icons/ExternalLinkOutlined.tsx index 1f9076a..df2f92b 100644 --- a/frontend/src/app/icons/ExternalLinkOutlined.tsx +++ b/frontend/src/app/icons/ExternalLinkOutlined.tsx @@ -1,4 +1,5 @@ -import IIcon from "./IIcon"; +import { Box } from "@mui/material"; +import type IIcon from "./IIcon"; export default function ExternalLinkOutlined({ className, @@ -16,7 +17,8 @@ export default function ExternalLinkOutlined({ xmlns="http://www.w3.org/2000/svg" > {alt} - ({ fill: theme.palette.primary.main, diff --git a/frontend/src/app/icons/LogoutRounded.tsx b/frontend/src/app/icons/LogoutRounded.tsx index 796094b..67d7d3e 100644 --- a/frontend/src/app/icons/LogoutRounded.tsx +++ b/frontend/src/app/icons/LogoutRounded.tsx @@ -1,4 +1,5 @@ -import IIcon from "./IIcon"; +import { Box } from "@mui/material"; +import type IIcon from "./IIcon"; export default function LogoutRounded({ className, @@ -16,13 +17,15 @@ export default function LogoutRounded({ xmlns="http://www.w3.org/2000/svg" > {alt} - ({ fill: theme.palette.common.white, })} /> - ({ fill: theme.palette.common.white, diff --git a/frontend/src/app/pages/dashbaord/Dashboard.tsx b/frontend/src/app/pages/dashbaord/Dashboard.tsx deleted file mode 100644 index a968fe7..0000000 --- a/frontend/src/app/pages/dashbaord/Dashboard.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import Layout from "@components/layout/Layout"; - -function Home() { - return DASHBOARD; -} - -export default Home; diff --git a/frontend/src/app/pages/dashbaord/dashboard.route.tsx b/frontend/src/app/pages/dashbaord/dashboard.route.tsx deleted file mode 100755 index 5bb90e7..0000000 --- a/frontend/src/app/pages/dashbaord/dashboard.route.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import en from "@assets/locales/en.json"; -import fr from "@assets/locales/fr.json"; -import { IRoute } from "@routes/interfaces/IRoute"; -import { lazy } from "react"; - -const dashboardRoute: IRoute = { - name: "dashboard__page_title", - component: lazy(() => import("./withAuthDashboard")), - paths: { - en: `/${en.locale__key}/${en.routes__dashboard}`, - fr: `/${fr.locale__key}/${fr.routes__dashboard}`, - }, -}; - -export default dashboardRoute; diff --git a/frontend/src/app/pages/dashbaord/withAuthDashboard.tsx b/frontend/src/app/pages/dashbaord/withAuthDashboard.tsx deleted file mode 100644 index 4cdd944..0000000 --- a/frontend/src/app/pages/dashbaord/withAuthDashboard.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import EPermission from "@enums/EPermission"; -import withAuth from "@hocs/withAuth"; -import Dashboard from "@pages/dashbaord/Dashboard"; - -const withAuthDashboard = withAuth(Dashboard, EPermission.DashboardRead); - -export default withAuthDashboard; diff --git a/frontend/src/app/pages/home/Home.tsx b/frontend/src/app/pages/home/Home.tsx deleted file mode 100644 index a968ac9..0000000 --- a/frontend/src/app/pages/home/Home.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import logo from "@assets/images/logo.png"; -import reactLogo from "@assets/react.svg"; -import Button from "@components/button/Button"; -import Layout from "@components/layout/Layout"; -import Typography from "@mui/material/Typography"; -import AddRounded from "@icons/AddRounded"; -import LogoutRounded from "@icons/LogoutRounded"; -import loginRoute from "@pages/login/login.route"; -import { ACCESS_TOKEN, REFRESH_TOKEN } from "@shared/constants"; -import { useUserStore } from "@stores/userStore"; -import { useCallback, useState } from "react"; -import { useTranslation } from "react-i18next"; -import { useNavigate } from "react-router-dom"; -import viteLogo from "/vite.svg"; - -function Home() { - const { t } = useTranslation(); - const { user, setUser } = useUserStore(); - const navigate = useNavigate(); - const [count, setCount] = useState(0); - - const onLogout = useCallback(() => { - localStorage.removeItem(ACCESS_TOKEN); - localStorage.removeItem(REFRESH_TOKEN); - setUser(undefined); - navigate(loginRoute.paths[t("locale__key")]); - }, [navigate, setUser, t]); - - return ( - -
- -
- - -
- - {`${t("home__welcome")} ${user?.firstName} ${user?.lastName}`} - - - VERSION: {__VERSION_NUMBER__} - - - API_URL: {__API_URL__} - - -
- -
-
- -
-
-
- ); -} - -export default Home; diff --git a/frontend/src/app/pages/home/home.route.tsx b/frontend/src/app/pages/home/home.route.tsx deleted file mode 100755 index 973087a..0000000 --- a/frontend/src/app/pages/home/home.route.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import en from "@assets/locales/en.json"; -import fr from "@assets/locales/fr.json"; -import { IRoute } from "@routes/interfaces/IRoute"; -import { lazy } from "react"; - -const homeRoute: IRoute = { - name: "home__page_title", - component: lazy(() => import("./withAuthHome")), - paths: { - en: `/${en.locale__key}/${en.routes__home}`, - fr: `/${fr.locale__key}/${fr.routes__home}`, - }, -}; - -export default homeRoute; diff --git a/frontend/src/app/pages/home/withAuthHome.tsx b/frontend/src/app/pages/home/withAuthHome.tsx deleted file mode 100644 index ed0c377..0000000 --- a/frontend/src/app/pages/home/withAuthHome.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import EPermission from "@enums/EPermission"; -import withAuth from "@hocs/withAuth"; -import Home from "@pages/home/Home"; - -const withAuthHome = withAuth(Home, EPermission.HomeRead); - -export default withAuthHome; diff --git a/frontend/src/app/pages/login/Login.tsx b/frontend/src/app/pages/login/Login.tsx deleted file mode 100644 index 0837d47..0000000 --- a/frontend/src/app/pages/login/Login.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import Link from "@components/link/Link"; -import Loading from "@components/loading/Loading"; -import Typography from "@mui/material/Typography"; -import LoginForm from "@forms/auth/loginForm/LoginForm"; -import findRoute from "@routes/findRoute"; -import i18n from "@shared/i18n"; -import { useCallback, useState } from "react"; -import { useTranslation } from "react-i18next"; -import { useNavigate } from "react-router-dom"; -import Layout from "@components/layout/Layout"; -// import Container from "@mui/material-pigment-css/Container"; - -export default function Login() { - const { t } = useTranslation(); - const navigate = useNavigate(); - const [isLoading, setIsLoading] = useState(false); - - const onChangeLanguage = useCallback(() => { - navigate(findRoute(location.pathname, t("locale__switch_key"))); - i18n.changeLanguage(t("locale__switch_key")); - }, [navigate, t]); - - return ( - <> - - - -
- - {t("login__page_title")} - - - User: oliviaw - - - Password: oliviawpass - - - {t("login__more_user")} - -
- -
- - {t("locale__switch")} - - - {`${t("global__version")}: ${__VERSION_NUMBER__}`} - -
-
- - ); -} diff --git a/frontend/src/app/pages/login/login.route.tsx b/frontend/src/app/pages/login/login.route.tsx deleted file mode 100755 index ee8b3f2..0000000 --- a/frontend/src/app/pages/login/login.route.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import en from "@assets/locales/en.json"; -import fr from "@assets/locales/fr.json"; -import { IRoute } from "@routes/interfaces/IRoute"; -import { lazy } from "react"; - -const loginRoute: IRoute = { - name: "login__page_title", - component: lazy(() => import("./Login")), - paths: { - en: `/${en.locale__key}/${en.routes__login}`, - fr: `/${fr.locale__key}/${fr.routes__login}`, - }, -}; - -export default loginRoute; diff --git a/frontend/src/app/pages/notFound/notFound.route.tsx b/frontend/src/app/pages/notFound/notFound.route.tsx deleted file mode 100755 index 08dc4af..0000000 --- a/frontend/src/app/pages/notFound/notFound.route.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { IRoute } from "@routes/interfaces/IRoute"; -import { lazy } from "react"; - -const notFoundRoute: IRoute = { - name: "not_found__page_title", - component: lazy(() => import("./NotFound")), - paths: { - en: "*", - fr: "*", - }, -}; - -export default notFoundRoute; diff --git a/frontend/src/app/pages/uikit/withAuthUikit.tsx b/frontend/src/app/pages/uikit/withAuthUikit.tsx deleted file mode 100644 index 98af659..0000000 --- a/frontend/src/app/pages/uikit/withAuthUikit.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import EPermission from "@enums/EPermission"; -import withAuth from "@hocs/withAuth"; -import UiKit from "./UiKit"; - -const withAuthUikit = withAuth(UiKit, EPermission.UikitRead); - -export default withAuthUikit; diff --git a/frontend/src/app/routes/Router.tsx b/frontend/src/app/routes/Router.tsx deleted file mode 100755 index 89997e4..0000000 --- a/frontend/src/app/routes/Router.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import DebugBanner from "@containers/debugBanner/DebugBanner"; -import homeRoute from "@pages/home/home.route"; -import notFoundRoute from "@pages/notFound/notFound.route"; -import routes from "@routes/routes"; -import { useMemo } from "react"; -import { Helmet } from "react-helmet-async"; -import { useTranslation } from "react-i18next"; -import { - Navigate, - RouterProvider, - createBrowserRouter, -} from "react-router-dom"; - -export default function Router() { - const { t } = useTranslation(); - const localePath = t("locale__key"); - - const routesObj = useMemo( - () => - routes.flatMap((route) => - Object.values(route.paths).map((path) => ({ - path, - element: ( - <> - - - {t(route.name)} - {t("routes__page_title")} - - - - - - ), - })), - ), - [t, localePath], - ); - - const router = useMemo( - () => - createBrowserRouter([ - { - path: "/", - element: , - }, - ...routesObj, - { - path: notFoundRoute.paths[localePath], - element: , - }, - ]), - [routesObj, localePath], - ); - - return ; -} diff --git a/frontend/src/app/routes/findRoute.ts b/frontend/src/app/routes/findRoute.ts deleted file mode 100644 index 7857de3..0000000 --- a/frontend/src/app/routes/findRoute.ts +++ /dev/null @@ -1,39 +0,0 @@ -import routes from "@routes/routes"; - -const findRoute = (path: string, locale: string): string => { - let segmentValues: string[] = []; - let segmentNames: string[] = []; - - const route = routes.find((route) => { - return Object.values(route.paths).some((pattern) => { - segmentNames = (pattern.match(/:([^\s/]+)/g) || []).map((s) => - s.substring(1), - ); - - const regexPattern = pattern.replace(/:[^\s/]+/g, "([\\w-]+)"); - const regex = new RegExp(`^${regexPattern}$`); - - if (regex.test(path)) { - const match = path.match(regex); - if (match) { - segmentValues = match.slice(1); - } - return true; - } - return false; - }); - }); - - if (!route) { - return path; - } - - let newPath = route.paths[locale]; - segmentNames.forEach((segmentName, index) => { - newPath = newPath.replace(`:${segmentName}`, segmentValues[index] || ""); - }); - - return newPath; -}; - -export default findRoute; diff --git a/frontend/src/app/routes/interfaces/IRoute.ts b/frontend/src/app/routes/interfaces/IRoute.ts deleted file mode 100644 index 3ee19f2..0000000 --- a/frontend/src/app/routes/interfaces/IRoute.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { LazyExoticComponent } from "react"; - -export type IPaths = { - [key: string]: string; - en: string; - fr: string; -}; - -export interface IRoute { - name: string; - component: LazyExoticComponent<() => JSX.Element>; - paths: IPaths; - getPath?: (locale: string, id: string) => string; -} diff --git a/frontend/src/app/routes/routes.ts b/frontend/src/app/routes/routes.ts deleted file mode 100644 index f5ff3ac..0000000 --- a/frontend/src/app/routes/routes.ts +++ /dev/null @@ -1,12 +0,0 @@ -import dashboardRoute from "@pages/dashbaord/dashboard.route"; -import homeRoute from "@pages/home/home.route"; -import loginRoute from "@pages/login/login.route"; -import uikitRoute from "@pages/uikit/uikit.route"; - -const routes = [homeRoute, loginRoute, dashboardRoute]; - -if (__ENV__ !== "prod") { - routes.push(uikitRoute); -} - -export default routes; diff --git a/frontend/src/app/services/auth/authService.ts b/frontend/src/app/services/auth/authService.ts index b23641b..732543b 100644 --- a/frontend/src/app/services/auth/authService.ts +++ b/frontend/src/app/services/auth/authService.ts @@ -1,16 +1,16 @@ -import ILogin from "@services/auth/interfaces/ILogin"; +import type ILogin from "@services/auth/interfaces/ILogin"; import axiosInstance from "@services/axiosInstance"; -import IUser from "@services/users/interfaces/IUser"; -import { AxiosResponse, CancelToken } from "axios"; - -const AUTH_PREFIX = "/auth"; -const POST_LOGIN = `${AUTH_PREFIX}/login`; +import type IUser from "@services/users/interfaces/IUser"; +import { type AxiosResponse, type CancelToken } from "axios"; export async function postLogin( login: ILogin, cancelToken?: CancelToken, ): Promise> { - return await axiosInstance.post(POST_LOGIN, login, { + // Simulate a delay of 1.5s to show form behavior + await new Promise((resolve) => setTimeout(resolve, 1500)); + + return await axiosInstance.post("/auth/login", login, { cancelToken, }); } diff --git a/frontend/src/app/services/axiosInstance.ts b/frontend/src/app/services/axiosInstance.ts index 3009a02..5a55a17 100644 --- a/frontend/src/app/services/axiosInstance.ts +++ b/frontend/src/app/services/axiosInstance.ts @@ -3,7 +3,7 @@ import axios from "axios"; import qs from "qs"; const axiosInstance = axios.create({ - baseURL: __API_URL__, + baseURL: import.meta.env.VITE_API_URL, headers: { "Content-Type": "application/json", }, diff --git a/frontend/src/app/services/posts/interfaces/IPost.ts b/frontend/src/app/services/posts/interfaces/IPost.ts new file mode 100644 index 0000000..d31be2d --- /dev/null +++ b/frontend/src/app/services/posts/interfaces/IPost.ts @@ -0,0 +1,12 @@ +export default interface ITodo { + id: number; + title: string; + body: string; + tags: string[]; + reactions: { + likes: number; + dislikes: number; + }; + views: number; + userId: number; +} diff --git a/frontend/src/app/services/posts/interfaces/IPostsResponses.ts b/frontend/src/app/services/posts/interfaces/IPostsResponses.ts new file mode 100644 index 0000000..ac4bc89 --- /dev/null +++ b/frontend/src/app/services/posts/interfaces/IPostsResponses.ts @@ -0,0 +1,6 @@ +export interface IPostsResponse { + limit: number; + skip: number; + total: number; + posts: T[]; +} diff --git a/frontend/src/app/services/posts/postsQueries.ts b/frontend/src/app/services/posts/postsQueries.ts new file mode 100644 index 0000000..32e61c7 --- /dev/null +++ b/frontend/src/app/services/posts/postsQueries.ts @@ -0,0 +1,24 @@ +import { queryOptions } from "@tanstack/react-query"; +import { getPosts } from "./postsService"; + +export const postsQueryOptions = () => { + return queryOptions({ + queryKey: ["dummyjson:posts-untracked"], + queryFn: async () => { + // Simulate a delay of 3s to show behavior + await new Promise((resolve) => setTimeout(resolve, 3000)); + return await getPosts(); + }, + }); +}; + +export const postsQueryWithBiggerDelayOptions = () => { + return queryOptions({ + queryKey: ["dummyjson:posts-tracked"], + queryFn: async () => { + // Simulate a delay of 5s to show behavior + await new Promise((resolve) => setTimeout(resolve, 5000)); + return await getPosts(); + }, + }); +}; diff --git a/frontend/src/app/services/posts/postsService.ts b/frontend/src/app/services/posts/postsService.ts new file mode 100644 index 0000000..e59bfb1 --- /dev/null +++ b/frontend/src/app/services/posts/postsService.ts @@ -0,0 +1,16 @@ +import axiosInstance from "@services/axiosInstance"; +import { type CancelToken } from "axios"; +import type IPost from "./interfaces/IPost"; +import type { IPostsResponse } from "./interfaces/IPostsResponses"; + +export async function getPosts( + cancelToken?: CancelToken, +): Promise> { + const response = await axiosInstance.get(`/posts`, { + params: { + limit: 3, + }, + cancelToken, + }); + return response.data; +} diff --git a/frontend/src/app/services/todos/interfaces/ITodo.ts b/frontend/src/app/services/todos/interfaces/ITodo.ts new file mode 100644 index 0000000..2dc195c --- /dev/null +++ b/frontend/src/app/services/todos/interfaces/ITodo.ts @@ -0,0 +1,6 @@ +export default interface ITodo { + id: number; + todo: string; + completed: string; + userId: number; +} diff --git a/frontend/src/app/services/todos/interfaces/ITodosResponses.ts b/frontend/src/app/services/todos/interfaces/ITodosResponses.ts new file mode 100644 index 0000000..80a39eb --- /dev/null +++ b/frontend/src/app/services/todos/interfaces/ITodosResponses.ts @@ -0,0 +1,6 @@ +export interface ITodosResponse { + limit: number; + skip: number; + total: number; + todos: T[]; +} diff --git a/frontend/src/app/services/todos/todosQueries.ts b/frontend/src/app/services/todos/todosQueries.ts new file mode 100644 index 0000000..a532ed4 --- /dev/null +++ b/frontend/src/app/services/todos/todosQueries.ts @@ -0,0 +1,13 @@ +import { queryOptions } from "@tanstack/react-query"; +import { getTodos } from "./todosService"; + +export const todosQueryOptions = () => { + return queryOptions({ + queryKey: ["dummyjson:todos"], + queryFn: async () => { + // Simulate a delay of 1.5s to show behavior + await new Promise((resolve) => setTimeout(resolve, 1500)); + return await getTodos(); + }, + }); +}; diff --git a/frontend/src/app/services/todos/todosService.ts b/frontend/src/app/services/todos/todosService.ts new file mode 100644 index 0000000..5515946 --- /dev/null +++ b/frontend/src/app/services/todos/todosService.ts @@ -0,0 +1,16 @@ +import axiosInstance from "@services/axiosInstance"; +import { type CancelToken } from "axios"; +import type ITodo from "./interfaces/ITodo"; +import type { ITodosResponse } from "./interfaces/ITodosResponses"; + +export async function getTodos( + cancelToken?: CancelToken, +): Promise> { + const response = await axiosInstance.get(`/todos`, { + params: { + limit: 5, + }, + cancelToken, + }); + return response.data; +} diff --git a/frontend/src/app/services/users/interfaces/IUser.ts b/frontend/src/app/services/users/interfaces/IUser.ts index 0b2228a..9a0fba9 100644 --- a/frontend/src/app/services/users/interfaces/IUser.ts +++ b/frontend/src/app/services/users/interfaces/IUser.ts @@ -5,6 +5,6 @@ export default interface IUser { lastName: string; gender: string; image: string; - token?: string; + accessToken?: string; refreshToken?: string; } diff --git a/frontend/src/app/services/users/userService.ts b/frontend/src/app/services/users/userService.ts index 6561459..6df1026 100644 --- a/frontend/src/app/services/users/userService.ts +++ b/frontend/src/app/services/users/userService.ts @@ -1,14 +1,15 @@ import axiosInstance from "@services/axiosInstance"; -import IUser from "@services/users/interfaces/IUser"; -import { AxiosResponse, CancelToken } from "axios"; - -const USER_PREFIX = "/user"; -const GET_ME = `${USER_PREFIX}/me`; +import type IUser from "@services/users/interfaces/IUser"; +import { type AxiosResponse, type CancelToken } from "axios"; +/** + * the ACCESS_TOKEN is automatically added to the request headers (see axiosInstance.ts) + * However, the token is not automatically refreshed when it expires. + */ export async function getMe( cancelToken?: CancelToken, ): Promise> { - return await axiosInstance.get(GET_ME, { + return await axiosInstance.get("/user/me", { cancelToken, }); } diff --git a/frontend/src/app/shared/queryClient.ts b/frontend/src/app/shared/queryClient.ts new file mode 100644 index 0000000..9a9633e --- /dev/null +++ b/frontend/src/app/shared/queryClient.ts @@ -0,0 +1,10 @@ +import { QueryClient } from "@tanstack/react-query"; + +export const queryClient = new QueryClient({ + defaultOptions: { + queries: { + experimental_prefetchInRender: true, + staleTime: 1000 * 60 * 10, + }, + }, +}); diff --git a/frontend/src/app/stores/userStore.ts b/frontend/src/app/stores/userStore.ts index 3d5757d..45d5d91 100644 --- a/frontend/src/app/stores/userStore.ts +++ b/frontend/src/app/stores/userStore.ts @@ -1,4 +1,4 @@ -import IUser from "@services/users/interfaces/IUser"; +import type IUser from "@services/users/interfaces/IUser"; import { create } from "zustand"; interface IUserStore { diff --git a/frontend/src/assets/images/loading.gif b/frontend/src/assets/images/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..5f10c15aac2d232a7e43ba74d2053ecbff450eee GIT binary patch literal 389251 zcmeFZWl&seo3R@rLRjXJ3>L2&9&hwU(mf+zvI!8K3x_a>70mb_V6o$VY z5yOAr5sk&)@|f20Z$V|SL1(hVU~zcD?u5zV{Pc|r7Ps3oJ`bF?UiiZP0EytgKqwhP zBppgD8$qTVL#`G_rV@h~n0f8^>9hrCG!VS|g*pNWS~WKo`K5OP*TQ`NjLElxpLj)D zc}2R!HCuQ@f2Wy8w1G#oluJB{UB;JH&gUP<`>@J;{}=J()N~PY@|F&;kc}}=$$6(* z^G3auO|yeptA|m$pF!szFzO8a-_h%1H0WhA>S8wQU>p8t!xP3eM{6_>rri8*5gd!J&qZWmu z7ll78ihNiSiTRD#C6V}f(S$kCq*>AAX;JXhFCdemkO@&Jf^o5waWU9$q>hRGPTH7Q z+L$$F-Fc+bee%!H?K%Dbm7hO< zQvQ6RAg-n=Dy$^V&diF8g!n~J-k>}{M*L?){5|;fGkJgpe}IlgCRLTy5rl?Euh(Cd z-4%vSC6gvqozoLV#9_7AU!B_*`$9C5Ou8m-AdyzJL~o!be+a^AGMFY^TQHK!c0g?}@gTZi9^;%yXm28GwbIryO zl*9VlaC7a}mn_jJ3i+10orxmVQiG9}`n{Pdlc5ax)`o+HCg;6xBdv``%b$auJXiSG zbh6f;$Y417vH5K4Yp!gj!l#ytz1dpp<AS4ZEw;8D*N+dkf$ZBLXMerfx3cXhlr zl&RR>c7Jz$wzvGHz5VCU2ajpL`=bCXz6YRD7kv-JSfR&s>v3WL z%k_9E>f-eTIj)`cL?sEjjU+V<%Z+3$^WqJ#p4-j_=Yp^OVfTxkrZWYx{TkY`|KYrnRT&{dxir|#F!Qp2qEV-#=>8oxL2F+Dxbk2`4Ie%W%M z`z>_uu(cGc)c_;2!20M@Q$-XY@Az_$rC>dQo1qP5t+Y}r7G8SXIS~l7>%b=TKGuj~ zwmIoJwYzfYCc}GMt&VQU$li;jI@8fhUTDKws~+<9bO->%T>4Buv(Gl9)QovHiV68h zHo}Ga=~VUL)P{3l5Q*u0{JNk@ZA?;4;LSP%> z&pF$_Yw80|2VCzzmu-`r&twrS9k&O2-(5eug-e`#Icm?p=o-F1g|q{_yFGr&zAt^K zm4bxJ>Q}OW_K-lTLzYd69n1R#${Ud&49~CXgx+$G-#`UT-amUu{v!)xO+Cdk{x~F; z&q(yPu@eJe#6B66jV1hAG$gMo6fV@QW-8Itg)6fjCM=gzC8pI)9Y`PeR5%AWkw~Ny zdn|&~r5~jbt(*SwW~A2eG90r;oY{?y?fa8llBaKa1Cqv~ft+$AGg6ZGuY*G!)UpXL z*!%dV9sNMVxfJMYB7)P7b|~n1FVvxJAN|MTP+o=O6I%9?KHQ9t!_Ot9lO7Nl&5unv z&z<DG|t{5Z_Rra(Kgd4&4qMCu?)A#sm1 z7zlO_8yDMRnzHOwY~zStf+qp_b}VI@o6a&=-WI;Q8u;>}=8Rz;WqbdW_p1khGrYz0 z2`_<+NB|cn^x2ytUAVOJ!`|BLH%E&7?R0WpP*P%UiGmKM9fMI)icy9Bh_nEsu&IA_l`OTr>k40yv=PfbT(vK>ucWRx!*5q ztqy8Vj$Kr`J!L#UElK(WxODNoXLwJ*&|ZaoS)G}NEI0w0a-(dO%=z`2 zZW`+Q#F;mfo+K@Cx!d&Amy71hek^CbYMGrn6mQmjyL-9b`rT~a**5C&DK1NnMzx(M z1gwA30s+n140jf8dtx@BDK4;mrQ$dHJfns`2-zg=Oul zekQ0%_aVSUQ`&8`fF0!DiaLGlUYl-|$+E8dD)v)n!4|lKE6UR{N#U?D$ zjcy)hC}?lcq&FEvErfOY$^7H$%bAfLg@EdWgC0{7{y969boM!yx9beZqkUpyr{J(* zji+9`wvsUsaA=q8W70o`*F?dSCzQiMzO5`ugddepTkbR!(Bs2k%@a9t{|Z5>Z-@RzKLBa$z=UMl+t5KI!?h*Snv%7CsxJ?C5;4FSeC@bhQjqlJ$j~zboy~b{YbcV^DL`ojf z5i8F0!rk{z-1W&`Q%cVC*DstT2=1-ZNZ&MT*e!rt$+WO$&_6Gv+xsm1*lZi*4Kj-< z&*&oEUcu#4aC>K$n@YN~&CfHIxZz?idao1;ieZ~v(uu88yF6T0BY&o=TI z$+5d?3+B1Z=Mc^7T^PA@(6^Q!xCz z5N>?0|Aiv2RnS{Ky3(qX;pcw$mB5W;h!5EMr^@6P=_|7(--Wj4aP^e-vQ`RsyP?^A z?zrpLmFo@!f7IOvm)l>H(2p3@pqpOa&Me+AMu3dmk{#+9ObG^<6{ zZ+l$euOu1plqWFkVL;tgKvE3>J&1PGJWz@-PhZO`N_XP2M4|=;29M)hZD&=oz6nsc+B?EFEmc-ML0xD^NRHQ=Q zb%X@Jw2TS!HDU|3)(9Oq4`B`qeTNigJ#DUi?P_9#X?2a|w5`KT6smI-cEoB5_X4?^ z8HJlkg}s&xp8|&aQ-=UM!r$}-#c2gt^#?|vxmp@UB=-f$fe1iFW*0LNQot|?q{so9 z$hq?{`p`(B89+Xd+1IUb3P^+?WyIT!NIT^y84cGOkaI~Bei@Hr+cn^Gk?GSn(ahY0 zL*XU@VNnE{(Fz?=+moR>QiNkfCL5d4uYn&_`a+f@K42C`Nd|bWnJdqOTyre|OX0>h zC@~Z?F;!P#^ZN(nE8nDOTAvlrJrK5vmGoafsMJOep zies=P_G=`*KS>A)Nqmx>SY8mXyOL=6C<&7?DM=zp&nQW4N)%mK=6i3FzES+yqht)q zXw4jqpPlrkH`zoOynvsGw*n@83^ApId=!J& zqT9YDCZvqe_SVL6+cEH?BMcbO46?)tiO{2-Bf@>3EL;yIT!~i*h14~fKTg86Kz|S2 z0Yq4;Bn{wvAl3>Sh!y67kqaZIqw8g&f1qthVI6}NT)x+YXVZH2>TVZk@E^ zh&It@X%RPL{K;bV4G*H36x9_vJ_&V{g9wQ&x_2j*cni%U7Xw5`+6p%*cz5XP_cug8 zd1a9X@%AEQV^zpecO}E(vIMKMhSjpbCs{_XXbgn2_3G%p1!S`(Wf*s4zY)t^N6LW( z1767p19V7mzdpPgU?Z6aFkt91!ARnXb1&I*9ak7nC$i4tb8EYDK^?HQoj2!m>4TJc zUQ{&WyoBB_>7a>u$hb7FFFAYP(|{6)ls)s{BAMKtWDXB=FAMTpUJ@6*%*Q;VrGQa- z;L>K~((jj^(^a$l?}F(4bPX2-j;nODIe!6pVTRz z_AH-;mCv`7FV2^LyDk4tQnAWcv943G=~=N2tJrO+*q^UBysbDUsXXPYJlCnb^sKyw zRo=E#{+O?X-&Q^#t$N5`g`!*a*sBUHwF;xP3Ui?f>#ho$v>KPc8b68{3F-e_X#Nk_yNJN`FA06?}Fw80%rOBCV9O^8Fl(OJexSYYX43z{8KyeCy7ywP!sH) zRji;27S}Q+$6`kNLOK0>#A9C@r@eX)qcTW&sRyCd0l&~nqEL?~Q~p3K6OK?u|BS!L zrN2ET5DmnB>xHmVn4B&ML-ilvbbiX|^6ZTZ0hjZ0Zbw!gTU}nGYyrh>A%Tm3E}alE zYWl5Um$=p+#_9I~A)N}jB%qv9$sE!N9MZAu(jVAm5DqGWO(uv{*8d+G>X(x8W|993 z9xU>vj7r9gN`?%|`V7iC49Z&cDr)p9zuT}s9e-D3zm9@58p5=ik_@`CO!|tD#yYc@;vGV3tR zV|c%!@DEpYV|5Kx_n(T`RJFrz4PUiNFfgT~Z$Dz>?4m9`XjpXf+OHa&2JY6a?^;>Z zJE89#wCp#O?z4V{o>A0oOf%S4S|M4Nwf?vqI%HjeNmhPBk&I%|p1nm#j=fHXN)R$3 z<4FaoS2AlC5pbC4^EdIgCw-eaty4WD5F7RyGLtQ~e#R}G6SY^FjJ3mbvRhU|Jj)F1 zY8|8dXI}>2{a762B_y|g^;Q)5d|YrQjciOpGJSVQf^Ot|O8$vH*`$j52l{cTUy|b; zKRMZqLE$~!)Vm1z%LR_q5#5JPCAQpU?~ymS;EUc9W%YIz%S@mG{=GW)=zPx%1X7#lZ8SE{yfB36+qR1BihS3ijW*X@UBS`y2weYbp_;xp9S@IN8q1?D@|(P zK23Z_Js#_f?O}}H2r8q)q9)M5%+1sTVKX_!M;V}C9(B`7u;X?|1I2QUt@?X0TdE&8 zMCXz{6Yb-hXQT9(T%$l&6&HMn?Hz!>{sI|ULUbA@%3dw+Rr8c!TiIB=D+&cB4Z3*8 zIZonBlm%*Dk8Yy}1#wxJ?~z_g4Qjk(_~6uRNc$zz;U7f#XJ);}&2{p@r%Ng(^-zo&| zvN7Mw(IOuVD0%a##Xi2k5P40)@2{bjMMz*O(Ks#@W9*Rqyxv0U%Qhep&XGS(wk_lA z0dQz>abTU=lv|q}u3oGQz#l1=bI0h3*Xbz`tk+c-kXD1;auz?p+*JviSEI_w&r`a{ zkc7~Wlt_#fsmxhu9EGY>1WuMp%57;)HLBNU5R~(y?5TFQOxGn(m75(u(kmbQ(xOmV z4zk@g5Tw;CcrjJU+iLwDwY97ID?zmcvd#NPLt5wnE;^hLn@xQFxxwD!EZD)4=~1!f z7tiAwi2)l6RGPUlm8rTrQMj!#R_lC(qg!3o#e2ol)7kmJvijT+YdfYrf@SbwLj`#S zN^6eJS^-lNrure08EMitzQ*^TL+mW`O9dS0Ua($`#&0He@J-!d7}%%m$PwmmdMSnd1c80iMdgql<&5bh29h;;Qf+#z z(bJ0HG!qs-UV1@5Ej+(}(TJmRG|5Q)tS{-KnI-Prh$1*LP4IG+a_z>MlX)=1Ru>q` zb@N4QuUhUgQ?&>w$ylN)r(EZ-g<5rUS6Jxz`1c?9GMXf65M~F+o2AAg(CtLVu5*gC zzE#mI(NutnYpV80qtKI$sVaD4*>gGTra3;^rqPQhWcp+LS1`*2H)&XifQ>QgxFJlUvY9&witO<$c=VBHbQUuI_g8YkGq}@_2g7O{%vk{g?z1Un=TY6Gut!jVd)7!TYxplq8t^E(@dQBX$sV9 z`xQ6%;a|E#1Y|kefxVR^7yB};@*o!AaumrmXC}r0lbQEL2E|Q(&fw{DagUF;OQ+ef zKhDYF8=i~p0(U9PzPWnO?p@J;Qs)9eXOee6PBVW}uL37;O$>bPwKul3E8b~-@^d@3 z7K8^qbUi@zfp6hI;Gu1hR6q{*J_^HAcJL2i_p|Hq1J3x%qXziD3@}&syL2bmX|x}0 z@c*pouNV;EziLk=C9N&&ZCnt*D;}T^4B$Bl*xL-GdmUIL8R!TM^j)=J<#FZHa(R3G zkgLgnu8D~qipMEsCr+fq6Yi(t*k;UV9ky9g zu+SHrfG{azd7f~7&G2_);iLtA-XM?_h#*PIhzl)(V=GLsBQ()9B8(R~+&8+(gq*L*(^%Rhl@G25(XqS$AN9W_GmomPlDQJOI6z0Fa_? zhoAVBJ5g6TQP5TLkx&BmR-AiBBDEPB7E;oKz6AZ1gwDs(PXm&+3z7_k<8C&Ru(A_~ z3KNZllb6kspN)kjbR_p~B%%i->K7)PQi4mx!5Bth(J-)?Fn4k<_{j>G9u)$_Ng#6- zBr<|vhe0falU(s1iK^lFM%eq`$ZMM?J$HnzfT32D5N-(w-U_tuaf(egq*g2i-zcRl zG{u$@`ch4Rd?h9BG0ZL-yw{!L6OpVQ3UjEAZ|i~3A|>CyPWGfssqcZ28>KG3PJ&Uw z2D?%zj9~1KQ{A&uUB%O0P`(QfP4l2kgPEWWTMB?4r#Ba;T)^vt!g9%U45uosCJthIq^RnG)6X5Bn6X*~><4eQ9z$a}{A%_vWIA=E} zWE-&M+^FTGS5wp8@>9a_8C&F-=}Bn#c(xK)Dm)~(tw^jNW=WXPa>x+8p_e)qd2Vw` z{YW$~4i&ED3TX;n&*a-&&Qen*^%ZwNkOg?(e0@^T$=&;gh3$kJutEW zts~!Nw?LTko%Jo(@XJEUY!+7;j+4MbrR)MPPY?Iq!UN4Q#!eB&9%PmvnIhmAW6XR( z^#2UWp<4~`swPUUCTXoETd1bEt7gN+{(I>G#0tzImC7lV^+vMbjYJujcrCZsUsl9_oVN0cB0?H}fXHn0ifbMU z@&B`2$G>v@Qkd^ph=1&@5cx~p-_k6IK+7NehfK>KR_8wshSXHrZ>co|e&@IF$?p*q z4jOHI8WRi}AS#W;V+8*s`tq303YFd(jmh@+^a~c38y2_wGhWc|(H8>opugyde;EmvS8Z^Wm!F`a^my~5xD5$KRe%CIPGR4nzYSQ-LEgkxMHeM&N8Ml5MjI(tDT z=bLQas$Bk>e8I-QS*G8OQ}LE!$+lAY&fi+8KQ8`1Qeh{$J%7)^!NK9-;nC62@$vD= z$;s*I>Dk%Y`T6<9#l_|2<<-^I_4W15&CTuY?cLqoj~_qo@9*JoI3oUmkRIv(D?R?Z zN{@nA%cPWEXh1S=KP)JkU54ACmu@S~p{3b8#iFK%I^FwnXDiKZH3g_?S$4CT8BPt` zrVUEtwNSUFr{BqoY@yrEl_Bt?%};Z?-J*>#=2Oed09%!0W<~De6&E(_mZZU}^GbH* zgFagAl{@y5?3OWCNA6WN3=Wpc)IYS|uk6H!O>!{5%{B9kHZ9_W;Ddh32P3xeOqGl%3)tugwE!PFm9UT{3$@I$s_mc3P zoBOxm36FC{j34FKi>^lvmMd|j`mXX3EOs}G7~5Q+^|U@-54mJR=9a~jg$9qUqCO+l z<=jR)x3#MD7`|Pv_N2PKCdgBM>zXeL{M*f_inrEr*LH6U!)ozcj)x)oEmpD5Sp;$h z3hTVjW=%fbS&S(j`D9K(TzoFqIqu(DF8Niy%cAzdalARUe$HdDQ)%y){_4Z?pYV5? z%i1K>O_>jF@Y`ZO#`>YD!O(^9J|podDa2ie!*QiLpd-&XF1)_qTZP4=Ya9nron@M_ z7j-kfJ$XVe1-Px+So)txLU{7y}(D?=Zfo!OfblPR#1p^m?ApR21D&hGj3G5GIPU zlYEIr;eAiCHCxwXI`%RIM1>=(t=Rer zPk+AzUjnOpQXb%minOeO3aiQFI&#mnv?3RKG$w^f!BKYGRnmVXF2!77E~+aV@O>1d6W2- zl&^0Iyus%nfH<9m`n)9AttXv@X;IP)CI?;gT#NBd2tU8L7P8ue1NY0Ba zQ7mL3w*onU`a-4rHL9T;wUR)l0?l+wjSdhv%TvA3Xk$xj2Ly=8P&d+$FV&hU5lhv` z53m>4SKYW(YoV`ZG#_CQ-6+v$PjF?_Cny`al$mWKX$Up#C^e=e)a*3AsCFfgeNRLB zrdMaW8Y-Wyg*!C&L4CT$`Kc|&!7cs(xWP6<9A0kqlW%GU_pq+09Oa4mp6E1tNL@p@ zrX4wk&Nr1~hK>m@#Y>ZS+8}z{^@ny_x*eBTJ#AM9U{~Q11Gu>&!^YF&%GDvg zEfQ!T{HaVJfp_T-tm_W!UJQS_{W7Fn{I0%FgQ2`OjF0ySyV0Vn6shG_HMBvWA4xbK zsx9IH8fVogBrK!NqFYNBK_=7<6+s@Dg2m>$eNViq!y?E8N%l;;rF@eUP(K<{1MN$d z0-TZ*2~3G}o4w=a*_&HzmdO3)oD_N^;2(O*is+t!`hn&KF#8&FE~>#1k(jf9LKPtY z9bMnsklKtO;Ck-$oQ`SRan{D$WKm7)W`E}WoFHx>%wldVp|duJCY_&=1Ci`dP|Nes zF;i$&pkH|E%8e^;rn-eSRq_~6s<>}8Lja>K#(I+{>7&3gqhp;6mabqcw`BS0>CzE1 zP(`l4&;H!YB|~Gd=GoHz`8zKc<&=g@4<=PZLodrlKxD(gur0aYozn`|U{lXqYhb3A zvmno0bl7%^-p_Fq!-_yL4$3g`nF!kZ@(+1xF^@NsylUNkZs7R-VEAq*vGYzZOSCx z4C||(MSUaN5{MccHJm!zd#Gb~cG1<^JyZJiVY-!v&fVcv z6>^43V0+07x}ST~^LG>0hHuws9`E%rlq@e++^zo%cONqJJ%BBLY!}JE|3ZUt_7QMD zBo&K4L4|P<5B|9OGx-P_zBGE#P__?Tt^`FbT=))t8uEC~zKr_%h@Xc4BubIs`_Gi! zRvKSux?*8>F6V76&__iAu3$9l#dAK_h;gyAey_peXFRVscrZ8Ovj3&+l4GSUFa--f zNBXmUEfeqli(>WNv)4bJjD1ixd`lp{^f7z>(wW5rDCNk;30b{)j!9xN5E_kcD8YbrSPDi|ls z-`_k?fd~M02%#tlNel~2=JwU1ReawRVv-%)abd1T%c=+RziAA$;SNi?3Vks9-V=@0 zwF%$BLKid}YNrK&2Wjb869wmlg=)ly=O^p>p@mx@MI^osiKY#<91C+Y3k}nXaMub< z(3ANmaNF)sR14e3^g{N)-z_eNz&bHwXF`7j7mifQtXJ7zl!?#Qg&@iskbT0H9lIcUT+u_S}f*sI{9H1M7Squ49JiA zRz&z|R&V^8rR17Gblux!CPrhDaGqAJ;YCd172(yjO3?A6^I19nu~__Mj>c}U(IS0t zBX>S$KnD>ainPLtbDWVB5ssx?q#8E<00J;A&sESDnAtm%}L5iOdRCXhU7zy@*8fIw>`DOwm34lE=fCUMsu&l$#kP_o9 z`EE>8DcD43G?Jmhu#erTlmRJn)TwUWDZL_TR7Pp+p=mLcX##ZkRX18+(TT^kQ-|RZ zxNXG1g)`DQZ3!9WbS2kxurhVo9Fz4pev`E6W(x84jlhC5-e|GT(T(7WHc#|Jh^%l1 z+$A#$C-VbuCjVIa-lMGiY&w z87b^YQuEGiyH)B;m27t>I){}k?Ke5Ht2y-f%-;iX*l#mgNnUdg%5m!Ce$vi-lboyF z$@hIdcM(1B>+3wDKxV0VLkSW*xm$68+dK}Od``}MwMaa<`MjKd4Vj+Jk;{M}B1s^sAgw5FaUz_pY&}O^_!GejY*-gQ8=1{}aeCZU~L7w7+8UEBIMLDwAI<)Fxr_I}WN$|NM>ezQ7 z76_ZMTbK?tx0)>YWi!$~M3UgAAZ&(J8oam!hF4lSZB?3;JxGto-f+3g@T_`w9=Ea` zu)x6HS>RGsJ$xH!Q$sa2zhBq5iE$t?u2O1S-eF*kQ@jv5R9^p0LaeN5d;Zp@`B{4E zVQZz^5VJ_X>4T$Bjiae?t=E?eyDhha9hL1Usq~eN34pTW;s=fDqg~Ios2ty63t}#R zega(F>3E+^#fFR&jIbH6AY|;ww5oav9z@prPWexP8;1am2O zD>TF-;F@#j(`QEpl1dKFgER+E;EK3I2Up8f6Z-BBx?8qQY077l+~1?Q6&f9W^;A+L z){+$0pg@YxYoEm5-E8I2R@`huoikFmGX1`B$weg|@~sujTsrU8eQD;CEpM;j|Bi4! zUI(AMJoshokL=za1vOrJ9S@(ezLkbNXYtt?C~WXP8y0-7az5ey%;tDF3Zp5o3v2RySjEi$Ld@(`@MoN-PRGF-$S=%FZHWn*q= z2o8r=hOA9I7m?%XqM#TFf`hAHV4Z2=P~0AeYvq174(1WVlz9~@6`eC{g+>hEst(~x z3c|_n7f)0kW8?n#^6tE`hZ)A^5Nnh}WJ$;unsgHFu&8G;*(5@?|#kOY|mVVFbiX1J7@!+nhNtdqjKMiMjEI`9UY$sGd-5 zTG3k?Jw$$Y-!?0K6&?(v-`D}WOglrb@wfOdZlrxTcQP?efkGdom6WD?GSS|oi4gLA z4doiovd9LCS-O7-!I;c>l>9`DyMznqd7k^Ce4V8yM>#>^Fz>p|LIxEb65n!ei5FtY z{EBrVs%@iSc&|u7d459Jn3Iv|(eAt)-=sGnIiBGlQa*XNCXGwIKv7^#`BQ>giPMK- zc~>iqvnKTlxvA18wN_dlh@4=_Mw!KHs8ZLwLRmv{l-Y=k=GrZL)wp_@yMT#WSYNy!JR3;9RL4AB?S1*>zXjo>Vu! z20G=Ufj9Xy_2LEW*a}M*D~~T*dIAsa4Ttp6JqbUO3{|)-X&Vf=^|Wl~gF$`_OP80& zpHB3lo-;#AccTu?Qa5(KhHsYF5@y=rYlHp-y~~LdL>*_yRmuRls{7N%Htfx;;E0EY z7&K0r%?x%v1+ZaoGbX)<&8oeaX4X|_6b7J*e`eWKi+(C+f@S`wk2eE9 zlJv)S3dJwIg6K{yZr*yBq;r0YX)+PXdL@saO${g>E~^*FnJGM-8`O?@k>Ihq%FGfu zK#6q*N6IB5c#%4%Xz}hadg`rUY17S!bIqyx&VD=F-ufsgbOKVYXZo&n^b0SNOV$!T zkb+dl*T#1+CuM5;6+bJu}wRx}N40MS5J+%ttc4p~GgIuV*4FwT@Pd_-LEVBHrDp2~s#!fn$$n4&Rtsl@&#*J2+jqf(2!wGB7HQm^Wj;w;lH(2(d`tE!t^zb(C2 z<<-=+U0Rz_=aGv3!qO@V=(9)Re4zW_;+X#R9?9XcjPS>L3`o;5t-*=3{>QqI>84ru z`axohCdLZi)8_tiiPH?)+Y#EZ;z7-rI`G;0hIveLkYz@5Kx^J`>2$N?*0A%f_@iyu z<&|fIfeQ)6(t4DNCoC0?mCEpk61NIWf z))&8}IE`22*%&at&MiASbrRtR-n8AMY2R;UJ@eV@k-i;Y-apq=^hp!@IWy4OW?E$* zvArm%a`c zgNDDH2$n|jj0u;QZ3?jH2+w&9j3Z)4q78y*A|e_7mTW%Mo8ge~2&?Rf*eM-x9=`-0 z>sZvVT#%1#M`UP^b~-J)5n6EVwPqz+ls%3wwWMZ!QKX=m+a4q`4~?)XT*I&->LU-~ zmu>Yx!syO$1;ax3zVK-0>}ZOf=n*NxsUo!*>X>g*F@`|(S?C9Mx7&nD5R9Kh-hM`r+u|ai^N>&5(O8lqg-LPMw7Nee z;vb&G5fCAYj&Y^=@yH#r?jWKUH(D=wu`|TN2|WPssH{r6;PDboL_g5fx~LK#6%)OY zR+$$K&y)i2M<^WyC01M|M$MYpu49Wydr<5UUh;@NO2U2>5tMk6Kmis`-ZvNQb_G8CB!jxUgc4C@ zuLw2Y2^2{(ErJq?8JzYuJ8io+Eovo=7axC|*cJpwCz(zW1Qz4@dRQ&+k}RcgfAzqx zjd))#O=|4~!^BHti_bU^PfuOpIBceE!X2jG>?MQ7_L*qK0jnR@Fv`PzP%Q`D&0mzsTl~6s!P@x;7 zqOme$+NGM?$wKPFes!zHCi99#N1NB`6+fSb0PK|@pQ`ZSE71}~T-981$GrZeJege~ z?m;PW*lW36RmDi$XL$M1Z!$DJvDHiTROuO><>jNU=jmJFY0rzAI~Tl*FF>m+u#v%6 z6)o^XE_58k$5G{op<)9#7iucA;fZq4aum%3lN5Om=KKCn>Z#~b{FfRkzZTj5WUr3D zTu1a&P+plM$`)^T|XtW%t)$gm;?x|GoDp&0)SMDfP z>>%O;N@WPP6%myFJ0-v5%3t`mn#;dO4-jDlL?l5rcSR=qyL8q!smvwG^aY8ud5P3H zaoCJl%Cs2tkNqmf5&Kn$ri_WgzKX)W{2Qsi4_`%75RCo00kN|M0`R0*@|0-&ym->2 zM8bqr{J31q7nR6C-QZ4>_a*)gSrGNWUP--i3AGt<Zy7H2HJzqj zD*vpS{+R!T>Q60)M+1j@3x{(%heHpW0eB`QL3g{`+mi z@me4KmC!Kcy|4Bt)YNy*45E9ukq_mm+xew8h=GV*IR-QsyOXH4GQ2P8wxF)_=+iLY zU)yl-Jb?LUY2&P6=EOq7id&r`6Vyf}o8Bg;jF-T7PY0tDz z!8C>YPH9Be%_l>ghCc}Ci;{BAsG;YGhKi6$&A?Z_wdg^2^vN>Lyyv>f&U9~4nJy;P zetwju<1v{z9oLgBn;caSV``Wc1(GjK>lJ=tS5}NYxLh!SERoGymii=(I&775!{;Qa zB;A)R``Gcnc@f%OPo_ed7MJ}|;dm=ylFZFhTF8B%wU|AWoAosJ43IsJ3r4D7+G|3ONva{)|Ik9{iN;Jq8fO^GISdkeQ59TtTXfqSH16p6IBB#epUo zeEc;`DmwKk@mUe&W>q-K&U@TKt)|!1kHZuujYMOldYCm1K(RQ+fQWuayy$E0i=~3z&bqI$dJIy(^hOnd3ag9Q zE8<5r{SrD(Rxi9Mw+~vQTuW?{K9Rj2*}`G4tuYxCTGjj3;4DBENfFJ*abA zmJFhM&3Hf~>;1h8{JA?{-=JCc@?soPhhokY!b_+RIP>Z|-(X2@mTSX4OPPu);7pX3 zS7$$C8tpbe&UrE7bX${JU-we4f^Kvnej;sSotjTLWyoz_k^C6Wx%E~Zy}P+;A_Lk5 ze7Dy8Mah?gX$6J$dmXQm2cRwCR}pH zh<;x*F2?sY!JsD7=A=l*l3EEIGno%w-_A0hZ;6{%%j5|u(ls5NNV>1f7PigPjU@S+ zyP23L9g?fioS;$=Ib5i~1XLsDRWHY$Dj^%9S81g0ulFV>!!9k>LYL7HaJ!&a7iZ|M zYSFN4P>-`O9~9e&EN{W$%yl23(it7p3@DzeT)?!UIHON)0%*K<5#Q$}AeF4;xvak9 zD>L;$*BZ=-uU4XDG+!c^8xfhRl}0I7m55>=u>(905P~z2s1GF#)m-Z3`;^-N8Ni>u zX=qgVFiE(3NmPelHqH$mSS!lvk&JWE_19}TgbXcijye>M`9Q@(_J(G4Adz3*MB3Jp zG95;qx9b0hv>!;N+i+^E-M%maML6kQKD2JxEVuKfK~pW8oN23dVsXD{HAElPqn2#tzPx~nN>Ff7romZW-!BvXzRwETAXvg!%C#a1gtGL!B zT{r60&YyOToztNmC}6f9xBST@K~H+wrX4X9TXde&GT;V`B|wG^ z%cQOc5=2fFi=#ytOn7yK%vm8Rm@_O441)v;CvfOm-&&!??68Hz35*7m%x%Iu?3BUr zFx5K|klL*1I9i)=(+5nwzWL&XQ5S~#L8z3BWXz$nHj9|NU1VZ?EY2-4k5GQ+UfYuz zI?9QKPrj~j)I^^>%2|wRvwNSdGg&rXqw2i4JBve1S1fT}AgjN3;KN7V3_q*TUfMgo zC!y{Ltu2d{*)vX!p&x*smP8!b90-$6m*`w7Pw5>jEzQ%qRh(2UFW4TCFT7rHJ823T zI&gBfr{7^dscYUl+^W~6JNb6}F+}%hOMYW;)-JKZk8i{GD25)1aO!iS&GD*FD=qrW zWT&>yacJ)0idY0s!Swxnr0$~2mYsAR+-KNv!q?lK5;)M`Bj6a%b+_&zdn0rD^!q`B zcN42$V?HMZU25aUC0_2uPl+PVcZa%-!jj~j9x+9^veRqQv5Vs=cC>|5mmA8@7wU@* zic){R+4~a8J=1#V3VKMs?~#jv-1n`prVH;Ny%b{s>A=lWg#6Gm@oo`M|LSnn$H{Z4 zHLc8GruL_g4H1pZSgq`JJqi5SNcM-)gNofYZlY85$=2`7lhp{n;v5{kDieiWDLt%HMj`<|&86jwr}90!iy&&+;OTo-o@9!FJf zEKmtrh}sVx9t?TE;{SQ$gb&}Ag)>jD2@2lU=L=lbM*1`jkWqKB++7TP8I%}n+yCa* zw*Nuo?%S60{eEBfkEqVuvH9iwn=P)pLQt-z&pE(fr;)&z)9rDS9-0&vaf8RxChe0e zAAL4YyfD8TZvXEM9(bAor&|QLJPssKzung$JT1^Ov;c!KzmPY+O!a|A$iBvn?(?Cp z`+WgYD}mlqUay-1j5>lWk^>89f{Zx;UXsBmz+es@fQW@UE3N#Ca34+!0xm5hL9}26 z9(Ng971eMb^NtXe-e7qxfMUN|qC}{0Zjb_-Pvca`ac~e)I3P*W#6e3z8|tTCL;&np z-7g4L?+VTC@ux-&SECAtD+z~(Cx?0V1AK~95-vhE8pHI*#N=i|oWlLXX$kZSgQI7| z?M}k+^8-Uc;SQ9M50V2@i2Rd?0D2JhQX>DYFnm`YqsP|~NKFwM0g;z=w)stxt{qXU z-QEdBAug2BU(~#-`y)Xsq23!#?L;0P9nK3OQD{Yk^%jO#gdbw+2>Y94G1a4;`w5rP zWH(>M^lpE^ahKcf_bn%i+zWSJw21Uqj!DQvEo6=TOiOgREg6*)d)^;gHBD!48h*q> zc)u;y^DxdDM1;;OLi!5(k#s1kHsKtt=5>(dSwGQexcuuRnZ=?g`;)jmRWZC9e}ZDd zSK0!|V%RjiF|m&DcnpI0Cv34V=j6x-B$U*!S)@af;}dN;aRef~A=L@`COG+^#AcMF zS1vfB5uS9GQXv~}a88oq2$Msz*(~Z4pJm54UlU7MvN^oqAvX$^K_}8FR?(xwd7b^-Tbd;h`ow_3%=e_!?kv>8l1T*CqX1ewn90hyZ8A77Dt#A_s z+{l?%?)Fc#W2ua=nDh*2RP~`s?CAij(2vc~C(Y0k$N-yUfNaw&Z)ehArMCpa1Y*x!(}7C4;9YEx%O|b{O!UjKX1ddaS6`y@&N&s zKb-4S%a2IQZwZ$_I=D%=N{Kr2iMq3jdeMpcP>TAIi26Sk^CuGXC-`%D#$VG7fBy^+ zcKG|7Kkh&Pdu#9`x$x@^6_r>39RO(yz}NvqPOe8A3Jj2{08Ac06op(bg~Bk6$~03_ zI}ZR*j80{M{Nwi|;ir(x&w-bJc&=vksA2Q0=kRXf^6%sg92JP16O5i0ik-don#4~D zCryhaPm86^LNeyWvw$s@rN3Wc`5jjJv&-MHtlwS!V<7h1zXA|L`M(*B|G#83W>&G) zXtMK2TkK)ONxF`JOEgsP(m%oD)yy5}%Q^sJyb4tZ)S~cH|3u67A^>7k%}^vdBs!R; zd*E46XLyYfZmMWJ-QLUzI8#{9R(jq>0YD7+Mn*h1FE~Fl5W|$g+tFeoFFU`O2AWG_ z0YHq1asXoFw!+5?s@H+sN8RK##8?NLS1^1d+O4dCOYDkwlkSw3Hq%QgR1d2(S=5ZV zUT>Tf6G_xPx!yP_qCuh;4HXvJhd0rHT&AFr1bHJ&Y$9K0QY&sAVt zAiZSF{d%8HjvAGt)Pey6fA@1|5QbD~Cywby)Alig(!(CtNy}~QXGwQydeU599`##g zKQ8R2>$#ghpn^qnJQOg-lQ+b9-fW)6^M&ptg_OT&e*|)1UKvYHwO5laNj!5hu2k=? zd{a#}^AttH{$BT#HUKg3u=TWWI7up%)uqTkQudzIaDRUO(SGVx{YU+zh*N~UV#S^l z->WYtb(2m2#8|R-YH_mj_`c`#i3>CGVl`e?=4_^yZNFhrpyi3vT4s=E!*bWHmd4qK z$K;KhrS&=uc+l@AS6hW*d_Fr38=f4yEp1XwBSpg}b^D$8{2W^imx!hja7kzF;fR=Q z-K&0v;bzGau?pUk<{p)nQ$dExvAwyZw;tzZ=Jyd>pcre!m)V?(+1;J*-(HDdYc@_Q zGtNA|O<{{8&cxnro?5eRBY)aTc8a-)_t~dAPS*?v?L`#MC%cD(nJ1z`{1{+*XF{9I z+hUMrbnkVqr;mw{iAe>q;EYaKol;1O5bj=3ZUDnz){cQ1?Ect@4dOfn?Y;w~a}xHD zh5Bn21_g67DY(*EqhauF0;DPU?qP@;%996AR)lE4RskrD26#P?Mlw;8P#vvjLiCVs z_V&--;adhoPwF2s!4D&Y{0t3ZIeREbJ0qR%uFek@60n}dc%ZgrKEp5S;(QwGON~rU zM&;5h$T#MvpPNf5RM7LT_b}FLC5fCvykF+3D?0PzM@ms~2?eaNxFV%Y=G~Eg4VC?b zf^g$+Bl4j-lWmFbcplSV9*Jx7MI^P*busw$Nj2SLVJKu>XNrRj8nYiK>$Gv>znGsMhn;(&LR1H zHr?T#3ggM&@8*LR+lPFrN;7XuuhU?;4h2++WZw5M6K)e9wVch%BD_T?%waJcd7CBF z{-!yEB~d2!Y%F)sol1idJ{EO2o<|W-^xW72FJW>*pRB8h!J&Ah;j6uw0PePAh=pYQ z>{cP4WsyQh--O1I5*=T__FF6Phb)y3#a5#<0!_v5D`v;C^|Ol9zEdbyRgIUH8A+;4 z_0v~PVrRY1TUBmiR)t4~l{oIL2_I|p*A#xJ*tM|KL*J3;AazXlX`wabXq+lNIjtO) zurO)?t4n0BRY7?Z4LIi1rB%*ovW5usI8p}d6BA6j698u0+F!!-W=UjJ|joPYF zQgqpMyXmsu%DG5FhbOSBVe`X;^%VEQnaOCgl#jJLNy5iX`l(hclrYcpox;oVdYl{G zWS$9vdbX#kP36*zge?a1w+GJO-Hv$Ue=wJTp$UCUfOimxJc#?itKl8VzNv?pROhXX z?ao^1%20JJo$|W`-PX*ngH@$g9?uf=^o}tFexEa>f`Gz*quXpTFy4T zllt|lv#tE(4GVN*dErW~Byuw$sfEAfvtxhb`Bvi;(s$Eht8I?H9yQhH|MTAS|3|oHt)qRH$1$K-Iind8Oikv zHTp(eLyq=-pwNQ_Hhs0uCDub_)sM?v9h}mL)o=QaLFX&ark=EB2-@CB(Q4w6;W|{= z$MG3XS=>IUAB+h49MOcnVLX5NrPOx!fx_8X}M7vP})md4ib+JH9WkY^= zz9Yim_<<(x8?|BhPMuYJes$4G1m2gkULBl>lqY-4GVoaes-u{cZ<4QNZKgNq;qdX* z{mWjr;PdxR@HzOFFTUfFq%&@@7ssKrPV?bcKI|S{{G%m`=2a@OOW4OJ#}5~HRw@)u zHhiBp*y6V=ff=v|h|f<-KQwQvMkSOV;Gd-=eA`7eSMNmTJ#DIgG#9n(I=lRIx2*B8u<^V5L`f#nye zi;JfGLj|peNlp&m)-w2&^S`Tok!3>wP~wr3yI_FVT94}%o()Q{;*DOk;cm!(3yY=>ZZC>_kUgWrT#0}gAF|Y3s$OAybfW+6J)|bW6*MkFZ zn9|2r#IMxQNAjkhMxGOx8r7%rhmT|_uN4oGZe?)q>s=JozFuZ^Cfzqsyam7g)v~}g*p@( z&IHvkkDkW%cWES0tAfsxf>>>mB%EN8hbUQ@u--8!$zjq6YO?7n1!oQgw@-3YK{8uk z@-s3JI}Y|6kgE^ZBbaz{;BvCiO^>FKM}EuaNGby%PB6MDK{TbkWQ8nP)o0&(E#etM{S;UBT zGlR|~Yo{;k#(LHR4I@$_a-3v23NSeVSQ}(PPOFhc1jl4ZR@K1HdBT(T9 z4~FNEjOOf}^@5*7~4<6h!Y z(O}onz|nx`eHLO@1m|122cH~{O>6jBZB<(efsAw=YccOk^&$E zfE)lZ4Zu43_YmU$gVGf584u?@-fQSKy!`Qz!_G29OW9;_Bz-O{LwX(Q0u(;L$p3|Syr9X;T{$kwt zjbZ%l;g8iDe@rqwYFIt%*uCJKzVE;R-8?~qd|{)2gHWP#Tfth7^6JbA4^^)U-*{VS++65nLSX6qHR?~k*KJ$HI;yCh7MGs)b-^j8YhGB z6RjrAH_~+5#q&~4vO)k`=mI)bhMw{>fy`h^3sVN%UGYL?^J{U2)!Fi9j?Ad|R(`6l zIVfMk9C(AuWp)J>zEFO#U0fRILQ{<33Ypz5&1=Odk*XRi-YLvj2;C`v_kOmdg02X_ z7-jb*ORq5oT}eOv9fjOsl{;l+V_hEuk+MP2Z7&?{rIU z)$g~`9<
Ha%>dA-zbh?r~(2xJIx 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

N{3Jn&8k7z;W}i$D5C2j35H?pv4Z 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

}ZVE7>gb+eL4jVUj#i~Gl_`} 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 z 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 diff --git a/frontend/src/assets/locales/en.json b/frontend/src/assets/locales/en.json index eada460..687d695 100644 --- a/frontend/src/assets/locales/en.json +++ b/frontend/src/assets/locales/en.json @@ -39,8 +39,8 @@ "routes__page_title": "React Template", "routes__login": "login", "routes__home": "home", + "routes__my_account": "my-account", "routes__uikit": "uikit", - "routes__dashboard": "dashboard", "routes__not_found": "not-found", "validations__required": "{{ field }} is required.", "validations__max_characters": "{{ field }} can have a maximum of {{ max }} characters.", @@ -51,7 +51,6 @@ "errors__expired_session": "The session has expired.", "home__page_title": "Home", "home__welcome": "Welcome", - "home__count": "Count is at", "home__logout": "Logout", "login__page_title": "Log in", "login__username": "Username", @@ -59,5 +58,5 @@ "login__sign_in": "Sign in", "login__more_user": "More user", "uikit__page_title": "Uikit", - "dashboard__page_title": "Dashboard" + "my_account__page_title": "My Account" } diff --git a/frontend/src/assets/locales/fr.json b/frontend/src/assets/locales/fr.json index 194d920..ea91530 100644 --- a/frontend/src/assets/locales/fr.json +++ b/frontend/src/assets/locales/fr.json @@ -39,8 +39,8 @@ "routes__page_title": "React Template", "routes__login": "connexion", "routes__home": "accueil", + "routes__my_account": "mon-compte", "routes__uikit": "uikit", - "routes__dashboard": "dashboard", "routes__not_found": "page-introuvable", "validations__required": "{{ field }} est obligatoire.", "validations__max_characters": "{{ field }} peut avoir un maximum de {{ max }} caractères.", @@ -51,7 +51,6 @@ "errors__expired_session": "La session est expirée.", "home__page_title": "Accueil", "home__welcome": "Bienvenue", - "home__count": "Le comte est à", "home__logout": "Se déconnecter", "login__page_title": "Connectez-vous", "login__username": "Nom d'utilisateur", @@ -59,5 +58,5 @@ "login__sign_in": "Se connecter", "login__more_user": "Plus d'utilisateur", "uikit__page_title": "Uikit", - "dashboard__page_title": "Dashboard" + "my_account__page_title": "Mon compte" } diff --git a/frontend/src/assets/react.svg b/frontend/src/assets/react.svg deleted file mode 100644 index 6c87de9..0000000 --- a/frontend/src/assets/react.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx deleted file mode 100644 index c337e85..0000000 --- a/frontend/src/main.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { StrictMode } from "react"; -import * as ReactDOM from "react-dom/client"; -import { HelmetProvider } from "react-helmet-async"; -import App from "./App"; - -import "@mui/material-pigment-css/styles.css"; - -ReactDOM.createRoot( - document.getElementById("root") as ReactDOM.Container, -).render( - - - - - , -); diff --git a/frontend/src/root.tsx b/frontend/src/root.tsx new file mode 100644 index 0000000..6e13e10 --- /dev/null +++ b/frontend/src/root.tsx @@ -0,0 +1,89 @@ +import CookieConsent from "@components/cookieConsent/CookieConsent"; +import DebugBanner from "@components/debugBanner/DebugBanner"; +import { Toast } from "@components/toast/Toast"; +import { CssBaseline, ThemeProvider } from "@mui/material"; +import i18next from "@shared/i18n"; +import { queryClient } from "@shared/queryClient"; +import { QueryClientProvider } from "@tanstack/react-query"; +import { StrictMode } from "react"; +import { I18nextProvider } from "react-i18next"; +import { + isRouteErrorResponse, + Links, + Meta, + Outlet, + Scripts, + ScrollRestoration, +} from "react-router"; +import type { Route } from "./+types/root"; +import stylesheet from "./app.css?url"; +import theme from "./theme/theme"; + +export const links: Route.LinksFunction = () => [ + { rel: "stylesheet", href: stylesheet }, +]; + +export function Layout({ children }: { children: React.ReactNode }) { + return ( + + + + + + + + + {children} + + + + + ); +} + +export default function App() { + return ( + + + + + + + + + + + + + + ); +} + +export function ErrorBoundary({ error }: Route.ErrorBoundaryProps) { + let message = "Oops!"; + let details = "An unexpected error occurred."; + let stack: string | undefined; + + if (isRouteErrorResponse(error)) { + message = error.status === 404 ? "404" : "Error"; + details = + error.status === 404 + ? "The requested page could not be found." + : error.statusText || details; + } else if (import.meta.env.DEV && error && error instanceof Error) { + details = error.message; + stack = error.stack; + } + + return ( +

+

{message}

+

{details}

+ {stack && ( +
+          {stack}
+        
+ )} +
+ ); +} diff --git a/frontend/src/routes.ts b/frontend/src/routes.ts new file mode 100644 index 0000000..823bfa3 --- /dev/null +++ b/frontend/src/routes.ts @@ -0,0 +1,30 @@ +import { + type RouteConfig, + index, + layout, + prefix, + route, +} from "@react-router/dev/routes"; + +const PUBLIC_ROUTES = "./routes/public-routes"; +const AUTHENTICATED_ROUTES = "./routes/authenticated-routes"; + +export default [ + index("./routes/index.tsx"), + + ...prefix(":lang", [ + // public routes + layout(`${PUBLIC_ROUTES}/layout.tsx`, [ + route("home", `${PUBLIC_ROUTES}/home/home.tsx`), + route("login", `${PUBLIC_ROUTES}/login/login.tsx`), + ]), + + // authenticated routes + layout(`${AUTHENTICATED_ROUTES}/layout.tsx`, [ + route("dashboard", `${AUTHENTICATED_ROUTES}/dashboard/dashboard.tsx`), + route("settings", `${AUTHENTICATED_ROUTES}/settings/settings.tsx`), + ]), + + route("*", "./routes/not-found/not-found.tsx"), + ]), +] satisfies RouteConfig; diff --git a/frontend/src/routes/auth-guard.ts b/frontend/src/routes/auth-guard.ts new file mode 100644 index 0000000..821dbe3 --- /dev/null +++ b/frontend/src/routes/auth-guard.ts @@ -0,0 +1,31 @@ +import i18next from "@shared/i18n"; +import { useUserStore } from "@stores/userStore"; +import { createSearchParams, redirectDocument } from "react-router"; + +export const clientLoaderAuthGuard = ( + includeRedirectPath?: boolean, +): Promise => { + return new Promise((resolve, reject) => { + const { user } = useUserStore.getState(); + + if (user) { + resolve(); + return; + } + + if (!includeRedirectPath) { + reject(redirectDocument(`/${i18next.language}/login`)); + return; + } + + if (includeRedirectPath) { + // adds redirect search param to the url so, once logged in, user is redirected to the page they were trying to access + const url = new URL(window.location.href); + const redirectUrl = url.pathname + url.search; + const parsedRedirectUrl = createSearchParams({ redirect: redirectUrl }); + const loginUrlWithRedirect = `/${i18next.language}/login?${parsedRedirectUrl.toString()}`; + + reject(redirectDocument(loginUrlWithRedirect)); + } + }); +}; diff --git a/frontend/src/routes/authenticated-routes/dashboard/dashboard.tsx b/frontend/src/routes/authenticated-routes/dashboard/dashboard.tsx new file mode 100644 index 0000000..69d7337 --- /dev/null +++ b/frontend/src/routes/authenticated-routes/dashboard/dashboard.tsx @@ -0,0 +1,124 @@ +import Loading from "@components/loading/Loading"; +import { Grid2 as Grid, Typography } from "@mui/material"; +import { + postsQueryOptions, + postsQueryWithBiggerDelayOptions, +} from "@services/posts/postsQueries"; +import { todosQueryOptions } from "@services/todos/todosQueries"; +import i18next from "@shared/i18n"; +import { queryClient } from "@shared/queryClient"; +import { useUserStore } from "@stores/userStore"; +import { useQuery } from "@tanstack/react-query"; +import { lazy, Suspense } from "react"; +import { useTranslation } from "react-i18next"; +import { Await, type MetaFunction } from "react-router"; +import type { Route } from "./+types/dashboard"; +import { Todos } from "./todos"; + +const Posts = lazy(() => import("./posts")); + +export const clientLoader = async ({ + params: _params, +}: Route.ClientLoaderArgs) => { + const { user } = useUserStore.getState(); + + if (user) { + // A first approach is to use the loader to prefetch the queries and have the components call + // react-query's useQuery hook. The API call is done not on-render, but before. + const todos = todosQueryOptions(); + queryClient.prefetchQuery(todos); + + const postsWithBigDelay = postsQueryWithBiggerDelayOptions(); + queryClient.prefetchQuery(postsWithBigDelay); + + // For a different approach, notice how this is not awaited. We want to return this as a non-blocking promise + const postsQuery = queryClient.fetchQuery(postsQueryOptions()); + + return { + postsQuery, + }; + } + + return {}; +}; + +export const meta: MetaFunction = ({ params }) => { + const t = i18next.getFixedT(params.lang as string); + const title = t("dashboard__page_title"); + + return [{ title }]; +}; + +export default function Home({ loaderData }: Route.ComponentProps) { + const { t } = useTranslation(); + const { user } = useUserStore(); + + // We are getting the promise from the loaderData, which is the recommended way + // This approach is great for rendering parts of the component taht do not depend on the data + // while the data is being fetched. We can wrap those inside & components. + // HOWEVER, since we are not calling react-query's useQuery hook, the query is not being tracked + const { postsQuery } = loaderData; + + // For this approach, we are using useQuery().promise and the component from react-router + // Keep in mind that this is only possible by enabling the experimental_prefetchInRender flag in the QueryClient + // Since we a calling the useQuery hook from the component, react-query will track this query + const postsWithBigDelay = useQuery( + postsQueryWithBiggerDelayOptions(), + ).promise; + + return ( +
+ {`${t("home__welcome")} ${user?.firstName} ${user?.lastName}`} + + + + {t("10 todos!")} + + Using a promise returned by the loader. This query is not tracked by + react-query (since no hook is called from the componend) + + + {/* Inside the component, we are using useSuspenseQuery(). + Until that is resolved, the rendering is blocked by the component. */} + + + + + {t("10 posts!")} + + Using a promise returned by the loader. This query is not tracked by + react-query (since no hook is called from the componend) + + + }> + {postsQuery && ( + + {(data) => } + + )} + + + + + {t("10 posts!")} + + This approach used the experimental_prefetchInRender flag in the + QueryClient. The query is prefectehd in the loader and called again + from the component, which allows react-query to track it. + + + }> + {postsWithBigDelay && ( + + {(data) => } + + )} + + + +
+ ); +} diff --git a/frontend/src/routes/authenticated-routes/dashboard/posts.tsx b/frontend/src/routes/authenticated-routes/dashboard/posts.tsx new file mode 100644 index 0000000..71be9b7 --- /dev/null +++ b/frontend/src/routes/authenticated-routes/dashboard/posts.tsx @@ -0,0 +1,23 @@ +import { Box, Paper, Typography } from "@mui/material"; +import type IPost from "@services/posts/interfaces/IPost"; +import type { IPostsResponse } from "@services/posts/interfaces/IPostsResponses"; + +export const Posts = ({ data }: { data: IPostsResponse }) => { + return ( + + {data.posts.map((post) => ( + + {post.title} + {post.body} + + ))} + + ); +}; + +export default Posts; diff --git a/frontend/src/routes/authenticated-routes/dashboard/todos.tsx b/frontend/src/routes/authenticated-routes/dashboard/todos.tsx new file mode 100644 index 0000000..1ad7f91 --- /dev/null +++ b/frontend/src/routes/authenticated-routes/dashboard/todos.tsx @@ -0,0 +1,24 @@ +import { Box, Typography } from "@mui/material"; +import { todosQueryOptions } from "@services/todos/todosQueries"; +import { useSuspenseQuery } from "@tanstack/react-query"; + +export const Todos = () => { + // Here, we are using the useSuspenseQuery hook to fetch the todos (that were prefetched on the loader) + // By using this hook instead of useQuery(), the first time this component is rendered, it will suspend + // until the query is resolved. The component wrapping this component will display the fallback + const { data: todos } = useSuspenseQuery(todosQueryOptions()); + + // NOTE: the useSuspenseQuery call, after the initial render, will return STALE data + // while the query is being refetched. This is the expected behavior. Keep this in mind when + // designing your UI (UX pattern Stale-While-Revalidate) + + return ( + + {todos?.todos?.map((todo) => ( + {todo.todo} + ))} + + ); +}; + +export default Todos; diff --git a/frontend/src/routes/authenticated-routes/layout.tsx b/frontend/src/routes/authenticated-routes/layout.tsx new file mode 100644 index 0000000..de90875 --- /dev/null +++ b/frontend/src/routes/authenticated-routes/layout.tsx @@ -0,0 +1,200 @@ +import Loading from "@components/loading/Loading"; +import MailIcon from "@mui/icons-material/Mail"; +import MenuIcon from "@mui/icons-material/Menu"; +import InboxIcon from "@mui/icons-material/MoveToInbox"; +import { Box } from "@mui/material"; +import AppBar from "@mui/material/AppBar"; +import Divider from "@mui/material/Divider"; +import Drawer from "@mui/material/Drawer"; +import IconButton from "@mui/material/IconButton"; +import List from "@mui/material/List"; +import ListItem from "@mui/material/ListItem"; +import ListItemButton from "@mui/material/ListItemButton"; +import ListItemIcon from "@mui/material/ListItemIcon"; +import ListItemText from "@mui/material/ListItemText"; +import Toolbar from "@mui/material/Toolbar"; +import Typography from "@mui/material/Typography"; +import i18next from "@shared/i18n"; +import { useUserStore } from "@stores/userStore"; +import React, { lazy, Suspense, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { Link, Outlet, type ClientLoaderFunctionArgs } from "react-router"; +import { clientLoaderAuthGuard } from "../auth-guard"; + +const ReactQueryDevtools = lazy(() => + import("@tanstack/react-query-devtools").then((module) => ({ + default: module.ReactQueryDevtools, + })), +); + +const drawerWidth = 250; + +const ListItems: React.FC = () => { + const { t } = useTranslation(); + + return [ + { + text: t("dashboard__page_title"), + to: `/${i18next.language}/dashboard`, + }, + { + text: t("my_account__page_title"), + to: `/${i18next.language}/settings`, + }, + ].map(({ text, to }, index) => ( + + + + {index % 2 === 0 ? : } + + + + + )); +}; + +const DrawerContent: React.FC = () => { + return ( +
+ + + + + +
+ ); +}; + +export const clientLoader = async ({ + params: _params, +}: ClientLoaderFunctionArgs) => { + await clientLoaderAuthGuard(true); + return {}; +}; + +export default function Layout() { + const { user } = useUserStore(); + const [mobileOpen, setMobileOpen] = useState(false); + const [isClosing, setIsClosing] = useState(false); + + const handleDrawerClose = () => { + setIsClosing(true); + setMobileOpen(false); + }; + + const handleDrawerTransitionEnd = () => { + setIsClosing(false); + }; + + const handleDrawerToggle = () => { + if (!isClosing) { + setMobileOpen(!mobileOpen); + } + }; + + const container = + window !== undefined ? () => window.document.body : undefined; + + if (!user) { + return ; + } + + return ( + + + + + + + + + nventive + + + + + + {/* The implementation can be swapped with js to avoid SEO duplication of links. */} + + + + + + + + + + + + + }> + + + +
+ + VERSION: {import.meta.env.VITE_VERSION_NUMBER} + + + API_URL: {import.meta.env.VITE_API_URL} + +
+ + +
+
+ ); +} diff --git a/frontend/src/routes/authenticated-routes/settings/settings.tsx b/frontend/src/routes/authenticated-routes/settings/settings.tsx new file mode 100644 index 0000000..f16fa15 --- /dev/null +++ b/frontend/src/routes/authenticated-routes/settings/settings.tsx @@ -0,0 +1,51 @@ +import Button from "@components/button/Button"; +import LogoutRounded from "@icons/LogoutRounded"; +import { Box, Typography } from "@mui/material"; +import { ACCESS_TOKEN, REFRESH_TOKEN } from "@shared/constants"; +import { default as i18next } from "@shared/i18n"; +import { useUserStore } from "@stores/userStore"; +import { useTranslation } from "react-i18next"; +import { useNavigate, type ClientLoaderFunctionArgs } from "react-router"; +import { useChangeLanguage } from "src/app/hooks/useChangeLanguage"; + +export const clientLoader = async ({ + params: _params, +}: ClientLoaderFunctionArgs) => { + return {}; +}; + +export default function Settings() { + const { t } = useTranslation(); + const navigate = useNavigate(); + const { setUser } = useUserStore(); + const { onChangeLanguage } = useChangeLanguage(); + + const onLogout = () => { + localStorage.removeItem(ACCESS_TOKEN); + localStorage.removeItem(REFRESH_TOKEN); + setUser(undefined); + navigate(`/${i18next.language}/login`); + }; + + return ( +
+

My Account

+ + ({ + display: "flex", + gap: theme.customProperties.spacing.md, + })} + > + + + + +
+ ); +} diff --git a/frontend/src/routes/index.tsx b/frontend/src/routes/index.tsx new file mode 100644 index 0000000..c81ffde --- /dev/null +++ b/frontend/src/routes/index.tsx @@ -0,0 +1,27 @@ +import Loading from "@components/loading/Loading"; +import i18next from "@shared/i18n"; +import { useUserStore } from "@stores/userStore"; +import { type MetaFunction, redirect } from "react-router"; +import type { Route } from "./+types"; + +export const clientLoader = ({ + params: _params, + request: _request, +}: Route.ClientLoaderArgs) => { + const { user } = useUserStore.getState(); + if (user) { + return redirect(`/${i18next.language}/dashboard`); + } else { + return redirect(`/${i18next.language}/home`); + } +}; + +export const meta: MetaFunction = ({ + params: _params, +}) => { + return [{ title: "..." }]; +}; + +export default function Home() { + return ; +} diff --git a/frontend/src/app/pages/notFound/not-found.module.css b/frontend/src/routes/not-found/not-found.module.css similarity index 100% rename from frontend/src/app/pages/notFound/not-found.module.css rename to frontend/src/routes/not-found/not-found.module.css diff --git a/frontend/src/app/pages/notFound/NotFound.tsx b/frontend/src/routes/not-found/not-found.tsx similarity index 58% rename from frontend/src/app/pages/notFound/NotFound.tsx rename to frontend/src/routes/not-found/not-found.tsx index 0da0742..d289a0e 100644 --- a/frontend/src/app/pages/notFound/NotFound.tsx +++ b/frontend/src/routes/not-found/not-found.tsx @@ -1,8 +1,9 @@ import Button from "@components/button/Button"; +import { Box } from "@mui/material"; import Typography from "@mui/material/Typography"; -import homeRoute from "@pages/home/home.route"; +import i18next from "@shared/i18n"; import { useTranslation } from "react-i18next"; -import { useNavigate } from "react-router-dom"; +import { useNavigate } from "react-router"; import classes from "./not-found.module.css"; export default function NotFound() { @@ -10,33 +11,42 @@ export default function NotFound() { const navigate = useNavigate(); return ( -
({ padding: theme.spacing(4), })} className={classes["not-found"]} >
- + {t("not_found__title")} - + + ({ + marginBottom: theme.customProperties.spacing.xl, + })} + > {t("not_found__description")} - + + ({ + marginBottom: theme.customProperties.spacing.lg, + })} + > {t("not_found__description_secondary")} +
-
+ ); } diff --git a/frontend/src/routes/public-routes/home/home.tsx b/frontend/src/routes/public-routes/home/home.tsx new file mode 100644 index 0000000..9974844 --- /dev/null +++ b/frontend/src/routes/public-routes/home/home.tsx @@ -0,0 +1,63 @@ +import Button from "@components/button/Button"; +import Link from "@components/link/Link"; +import { Box, Typography } from "@mui/material"; +import { default as i18next } from "@shared/i18n"; +import { useUserStore } from "@stores/userStore"; +import { useTranslation } from "react-i18next"; +import { useChangeLanguage } from "src/app/hooks/useChangeLanguage"; + +const UserLoggedIn: React.FC = () => { + const { user } = useUserStore(); + + if (!user) { + return ( + + Click here to login + + ); + } + + return ( + <> + + {`Welcome ${user?.firstName} ${user?.lastName}`} + + + + Click here to go to + the dashboard + + + ); +}; + +export default function Home() { + const { t } = useTranslation(); + const { onChangeLanguage } = useChangeLanguage(); + + return ( + +

Home!

+ + + + + + {`${t("global__version")}: ${import.meta.env.VITE_VERSION_NUMBER}`} + +
+ ); +} diff --git a/frontend/src/routes/public-routes/layout.tsx b/frontend/src/routes/public-routes/layout.tsx new file mode 100644 index 0000000..3a2c0c9 --- /dev/null +++ b/frontend/src/routes/public-routes/layout.tsx @@ -0,0 +1,34 @@ +import { styled } from "@mui/material"; +import { Outlet } from "react-router"; + +const Layout = styled("main")(({ theme }) => ({ + width: "100%", + display: "flex", + flexDirection: "column", + justifyContent: "center", + alignItems: "center", + padding: theme.spacing(2), + + [theme.breakpoints.up("xs")]: { + flex: "1 1 auto", + }, + + "> .content": { + maxWidth: 442, + width: "100%", + + [theme.breakpoints.up("sm")]: { + maxWidth: 442, + }, + }, +})); + +export default function Centered() { + return ( + +
+ +
+
+ ); +} diff --git a/frontend/src/routes/public-routes/login/login.tsx b/frontend/src/routes/public-routes/login/login.tsx new file mode 100644 index 0000000..9b606ba --- /dev/null +++ b/frontend/src/routes/public-routes/login/login.tsx @@ -0,0 +1,112 @@ +import Button from "@components/button/Button"; +import Link from "@components/link/Link"; +import LoginForm from "@forms/auth/loginForm/LoginForm"; +import { Box } from "@mui/material"; +import Typography from "@mui/material/Typography"; +import { getMe } from "@services/users/userService"; +import { ACCESS_TOKEN } from "@shared/constants"; +import { default as i18next } from "@shared/i18n"; +import { useUserStore } from "@stores/userStore"; +import { useTranslation } from "react-i18next"; +import { type MetaFunction } from "react-router"; +import { useChangeLanguage } from "src/app/hooks/useChangeLanguage"; +import type { Route } from "../login/+types/route"; +import { handleRedirect, useHandleRedirect } from "./redirect"; + +/** + * Exceptionnaly, for this loader, we will check if the user's access token + * is present in the localStorage. If it is, we will call the getMe function + * and set the user in the store. We will redirect the user to the home page + * or whatever route the user was trying to access. + */ +export const clientLoader = async ({ + params: _params, + request: _quest, +}: Route.ClientLoaderArgs) => { + const accessToken = localStorage.getItem(ACCESS_TOKEN); + + if (!accessToken) { + return {}; + } + + try { + const { data } = await getMe(); + const { setUser } = useUserStore.getState(); + setUser(data); + + return handleRedirect(); + } catch (_error) { + localStorage.removeItem(ACCESS_TOKEN); + } + + return {}; +}; + +export const meta: MetaFunction = ({ params }) => { + const t = i18next.getFixedT(params.lang as string); + const title = t("login__page_title"); + + return [{ title }]; +}; + +export default function Login() { + const { t } = useTranslation(); + const { onChangeLanguage } = useChangeLanguage(); + const handleRedirect = useHandleRedirect(); + + return ( + <> + ({ + display: "flex", + flexDirection: "column", + marginTop: theme.customProperties.spacing.lg, + marginBottom: theme.customProperties.spacing.lg, + })} + > + ({ + marginBottom: theme.customProperties.spacing.md, + })} + > + {t("login__page_title")} + + User: oliviaw + ({ + marginBottom: theme.customProperties.spacing.xxs, + })} + > + Password: oliviawpass + + + {t("login__more_user")} + + + + + + + + + {`${t("global__version")}: ${import.meta.env.VITE_VERSION_NUMBER}`} + + + + ); +} diff --git a/frontend/src/routes/public-routes/login/redirect.ts b/frontend/src/routes/public-routes/login/redirect.ts new file mode 100644 index 0000000..46c0937 --- /dev/null +++ b/frontend/src/routes/public-routes/login/redirect.ts @@ -0,0 +1,32 @@ +import { EN, FR } from "@shared/constants"; +import i18next from "@shared/i18n"; +import { redirect, useNavigate } from "react-router"; + +// the redirect url could have a language param different from the current language +const getRedirectUrl = () => { + const url = new URL(window.location.href); + const urlSearchParams = new URLSearchParams(url.search); + const redirectUrl = urlSearchParams.get("redirect"); + + if (redirectUrl) { + const currentLanguage = i18next.language; + const regex = new RegExp(`^/${EN}|${FR}`); + return redirectUrl.replace(regex, `/${currentLanguage}`); + } else { + return `/${i18next.language}/dashboard`; + } +}; + +// To be used inside loaders +export const handleRedirect = () => { + const redirectUrl = getRedirectUrl(); + return redirect(redirectUrl); +}; + +// To be used inside components +export const useHandleRedirect = () => { + const navigate = useNavigate(); + return () => { + return navigate(getRedirectUrl(), { replace: true }); + }; +}; diff --git a/frontend/src/routes/public-routes/login/useOnSubmit.ts b/frontend/src/routes/public-routes/login/useOnSubmit.ts new file mode 100644 index 0000000..971ceb8 --- /dev/null +++ b/frontend/src/routes/public-routes/login/useOnSubmit.ts @@ -0,0 +1,84 @@ +import loginFormSchema from "@forms/auth/loginForm/loginForm.schema"; +import { postLogin } from "@services/auth/authService"; +import type ILogin from "@services/auth/interfaces/ILogin"; +import { ACCESS_TOKEN, REFRESH_TOKEN } from "@shared/constants"; +import { useUserStore } from "@stores/userStore"; +import axios from "axios"; +import { t } from "i18next"; +import { useState, type FormEvent } from "react"; +import { toast } from "react-toastify"; +import { ValidationError } from "yup"; + +export const useOnSubmit = ( + loginForm: ILogin, + onSuccessfulLogin: () => void, +) => { + const [isLoading, setIsLoading] = useState(false); + const { setUser } = useUserStore(); + + const validateForm = (loginForm: ILogin) => { + try { + loginFormSchema.validateSync(loginForm, { + abortEarly: false, + }); + return []; + } catch (error) { + if (error instanceof ValidationError) { + return error.inner; + } else { + toast.error(t("errors__generic"), { + toastId: "generic", + }); + return null; + } + } + }; + + const validateCredentials = async (loginForm: ILogin) => { + try { + const { data } = await postLogin(loginForm); + if (data.accessToken && data.refreshToken) { + localStorage.setItem(ACCESS_TOKEN, data.accessToken); + localStorage.setItem(REFRESH_TOKEN, data.refreshToken); + return data; + } + throw new Error("An error occured when loging in with dummyjson.com"); + } catch (error) { + if (axios.isAxiosError(error)) { + if (error.response?.data?.message === "Invalid credentials") { + toast.error(t("errors__invalid_credentials"), { + toastId: "invalid-credentials", + }); + } + } else { + toast.error(t("errors__generic"), { + toastId: "generic", + }); + } + throw error; + } + }; + + const onSubmit = async (event: FormEvent) => { + event.preventDefault(); + + const errors = validateForm(loginForm); + if (errors === null) return; + if (errors.length > 0) return; + + setIsLoading(true); + + try { + const data = await validateCredentials(loginForm); + setUser(data); + onSuccessfulLogin(); + } finally { + setIsLoading(false); + } + }; + + return { + isLoading, + onSubmit, + }; +}; diff --git a/frontend/src/app/pages/uikit/UiKit.tsx b/frontend/src/routes/public-routes/uikit/UiKit.tsx similarity index 90% rename from frontend/src/app/pages/uikit/UiKit.tsx rename to frontend/src/routes/public-routes/uikit/UiKit.tsx index c04d125..8fd2825 100644 --- a/frontend/src/app/pages/uikit/UiKit.tsx +++ b/frontend/src/routes/public-routes/uikit/UiKit.tsx @@ -1,6 +1,5 @@ import Button from "@components/button/Button"; import FieldHelperText from "@components/fieldHelperText/FieldHelperText"; -import Layout from "@components/layout/Layout"; import Link from "@components/link/Link"; import Loading from "@components/loading/Loading"; import Spinner from "@components/spinner/Spinner"; @@ -73,22 +72,41 @@ export default function UiKit() { }, []); return ( - -
+
({ padding: theme.customProperties.spacing.xl })}> +
({ + display: "flex", + gap: theme.customProperties.spacing.xl, + position: "relative", + })} + > -
+ +
UiKit This is where you can display all your custom components/containers. - + ({ + display: "flex", + gap: theme.customProperties.spacing.md, + })} + > For all the Styled MUI components, please refer to MUI documentation -
+
({ + display: "flex", + flexDirection: "column", + gap: theme.customProperties.spacing.xs, + })} + > H1. Heading H2. Heading @@ -188,6 +206,6 @@ export default function UiKit() {
- +
); } diff --git a/frontend/src/app/pages/uikit/uikit.route.tsx b/frontend/src/routes/public-routes/uikit/uikit.route.tsx similarity index 87% rename from frontend/src/app/pages/uikit/uikit.route.tsx rename to frontend/src/routes/public-routes/uikit/uikit.route.tsx index 63407b0..3baefd2 100755 --- a/frontend/src/app/pages/uikit/uikit.route.tsx +++ b/frontend/src/routes/public-routes/uikit/uikit.route.tsx @@ -5,7 +5,7 @@ import { lazy } from "react"; const uikitRoute: IRoute = { name: "uikit__page_title", - component: lazy(() => import("./withAuthUikit")), + component: lazy(() => import("./UiKit")), paths: { en: `/${en.locale__key}/${en.routes__uikit}`, fr: `/${fr.locale__key}/${fr.routes__uikit}`, diff --git a/frontend/src/styles/_export.scss b/frontend/src/styles/_export.scss deleted file mode 100755 index 95b0e83..0000000 --- a/frontend/src/styles/_export.scss +++ /dev/null @@ -1,49 +0,0 @@ -@use "variables" as v; - -/* ============================================ -= Exports = -============================================ */ - -$_property: (gap); - -$_property-with-direction: ( - m: margin, - p: padding, -); - -$_position: (top, bottom, left, right); - -// Property-spacing (eg: gap-xs -> gap: get-spacing(xs)) -@each $propertyKey in $_property { - @each $spacingKey, $spacingValue in v.$spacing { - #body .#{$propertyKey}-#{$spacingKey} { - #{$propertyKey}: $spacingValue; - } - } -} - -// Property with direction-spacing (eg: mr-xs -> margin-right: get-spacing(xs)) -@each $propertyKey, $propertyValue in $_property-with-direction { - @each $spacingKey, $spacingValue in v.$spacing { - @each $directionKey, $directionValues in v.$direction { - #body .#{$propertyKey}#{$directionKey}-#{$spacingKey} { - @if $directionValues == all { - #{$propertyValue}: $spacingValue; - } @else { - @each $directionValue in $directionValues { - #{$propertyValue}-#{$directionValue}: $spacingValue; - } - } - } - } - } -} - -// Position-spacing (eg: top-xs -> top: get-spacing(xs)) -@each $positionKey in $_position { - @each $spacingKey, $spacingValue in v.$spacing { - #body .#{$positionKey}-#{$spacingKey} { - #{$positionKey}: $spacingValue; - } - } -} diff --git a/frontend/src/styles/_fonts.scss b/frontend/src/styles/_fonts.scss deleted file mode 100644 index 2ba2fc0..0000000 --- a/frontend/src/styles/_fonts.scss +++ /dev/null @@ -1,39 +0,0 @@ -@font-face { - font-family: InterTight; - font-style: normal; - font-weight: 400; - font-display: swap; - src: - url("@assets/fonts/InterTight/InterTight-Regular.woff2") format("woff2"), - url("@assets/fonts/InterTight/InterTight-Regular.ttf") format("truetype"); -} - -@font-face { - font-family: InterTight; - font-style: normal; - font-weight: 500; - font-display: swap; - src: - url("@assets/fonts/InterTight/InterTight-Medium.woff2") format("woff2"), - url("@assets/fonts/InterTight/InterTight-Medium.ttf") format("truetype"); -} - -@font-face { - font-family: InterTight; - font-style: normal; - font-weight: 600; - font-display: swap; - src: - url("@assets/fonts/InterTight/InterTight-SemiBold.woff2") format("woff2"), - url("@assets/fonts/InterTight/InterTight-SemiBold.ttf") format("truetype"); -} - -@font-face { - font-family: InterTight; - font-style: normal; - font-weight: 700; - font-display: swap; - src: - url("@assets/fonts/InterTight/InterTight-Bold.woff2") format("woff2"), - url("@assets/fonts/InterTight/InterTight-Bold.ttf") format("truetype"); -} diff --git a/frontend/src/styles/_globals.scss b/frontend/src/styles/_globals.scss deleted file mode 100755 index 68755fe..0000000 --- a/frontend/src/styles/_globals.scss +++ /dev/null @@ -1,85 +0,0 @@ -/* ============================================ -= Globals = -============================================ */ - -html { - height: 100%; - width: 100%; -} - -body { - display: flex; - flex-direction: column; - min-height: 100%; - width: 100%; - overflow-y: scroll; -} - -#root { - display: flex; - flex-direction: column; - flex: 1 1 auto; - height: 100%; - width: 100%; -} - -.flex { - display: flex; - - &-column { - display: flex; - flex-direction: column; - } - - &-1 { - flex: 1; - } - - &-grow { - flex-grow: 1; - } -} - -.align-center { - align-items: center; -} - -.justify { - &-center { - justify-content: center; - } - - &-between { - justify-content: space-between; - } - - &-start { - justify-content: flex-start; - } - - &-end { - justify-content: flex-end; - } -} - -.text-center { - text-align: center; -} - -.position { - &-absolute { - position: absolute; - } - - &-fixed { - position: fixed; - } - - &-relative { - position: relative; - } - - &-sticky { - position: sticky; - } -} diff --git a/frontend/src/styles/_variables.scss b/frontend/src/styles/_variables.scss deleted file mode 100755 index 7440938..0000000 --- a/frontend/src/styles/_variables.scss +++ /dev/null @@ -1,25 +0,0 @@ -/* ============================================ -= Variables = -============================================ */ - -// Allow utility classes to use the same spacing properties defined in the MUI theme -$spacing: ( - a: var(--mui-customProperties-spacing-a), - xxs: var(--mui-customProperties-spacing-xxs), - xs: var(--mui-customProperties-spacing-xs), - sm: var(--mui-customProperties-spacing-sm), - md: var(--mui-customProperties-spacing-md), - lg: var(--mui-customProperties-spacing-lg), - xl: var(--mui-customProperties-spacing-xl), - xxl: var(--mui-customProperties-spacing-xxl), -); - -$direction: ( - "": all, - l: left, - r: right, - t: top, - b: bottom, - x: left right, - y: top bottom, -); diff --git a/frontend/src/styles/fonts.css b/frontend/src/styles/fonts.css new file mode 100644 index 0000000..3541b2c --- /dev/null +++ b/frontend/src/styles/fonts.css @@ -0,0 +1,39 @@ +@font-face { + font-family: InterTight; + font-style: normal; + font-weight: 400; + font-display: swap; + src: + url("../assets/fonts/InterTight/InterTight-Regular.woff2") format("woff2"), + url("../assets/fonts/InterTight/InterTight-Regular.ttf") format("truetype"); +} + +@font-face { + font-family: InterTight; + font-style: normal; + font-weight: 500; + font-display: swap; + src: + url("../assets/fonts/InterTight/InterTight-Medium.woff2") format("woff2"), + url("../assets/fonts/InterTight/InterTight-Medium.ttf") format("truetype"); +} + +@font-face { + font-family: InterTight; + font-style: normal; + font-weight: 600; + font-display: swap; + src: + url("../assets/fonts/InterTight/InterTight-SemiBold.woff2") format("woff2"), + url("../assets/fonts/InterTight/InterTight-SemiBold.ttf") format("truetype"); +} + +@font-face { + font-family: InterTight; + font-style: normal; + font-weight: 700; + font-display: swap; + src: + url("../assets/fonts/InterTight/InterTight-Bold.woff2") format("woff2"), + url("../assets/fonts/InterTight/InterTight-Bold.ttf") format("truetype"); +} diff --git a/frontend/src/styles/index.scss b/frontend/src/styles/index.scss deleted file mode 100755 index bc3e9f4..0000000 --- a/frontend/src/styles/index.scss +++ /dev/null @@ -1,9 +0,0 @@ -@forward "mixins/normalize"; - -@forward "vendors/toastify.css"; - -@forward "export"; - -@forward "fonts"; - -@forward "globals"; diff --git a/frontend/src/styles/mixins/_generics.scss b/frontend/src/styles/mixins/_generics.scss deleted file mode 100755 index 54706df..0000000 --- a/frontend/src/styles/mixins/_generics.scss +++ /dev/null @@ -1,17 +0,0 @@ -/* ============================================ -= Generics = -============================================ */ -/* stylelint-disable scss/no-global-function-names */ - -$_font-base-size: 16; - -@function rem($sizeInPx) { - @return calc($sizeInPx / $_font-base-size) * 1rem; -} - -@function get($map, $key) { - @if map-has-key($map, $key) { - @return map-get($map, $key); - } - @error 'Invalid key: `#{$key}` for map `#{$map}`'; -} diff --git a/frontend/src/styles/mixins/_media-queries.scss b/frontend/src/styles/mixins/_media-queries.scss deleted file mode 100644 index d413eab..0000000 --- a/frontend/src/styles/mixins/_media-queries.scss +++ /dev/null @@ -1,32 +0,0 @@ -@use "../variables" as v; - -/* ============================================ -= Media queries = -Use these mixins like this: -.example-class{ - display: flex; - flex-direction: row; - - @include media-min(xs){ - flex-direction: column; - } -} -============================================ */ - -@mixin media-min($breakpoint) { - @media (min-width: v.get-media($breakpoint)) { - @content; - } -} - -@mixin media-max($breakpoint) { - @media (max-width: (v.get-media($breakpoint) - 1)) { - @content; - } -} - -@mixin media-range($breakpoint-start, $breakpoint-end) { - @media (min-width: v.get-media($breakpoint-start)) and (max-width: (v.get-media($breakpoint-end) - 1)) { - @content; - } -} diff --git a/frontend/src/styles/mixins/_normalize.scss b/frontend/src/styles/mixins/_normalize.scss deleted file mode 100755 index 4d3159e..0000000 --- a/frontend/src/styles/mixins/_normalize.scss +++ /dev/null @@ -1,61 +0,0 @@ -/* ============================================ -= Normalize = -============================================ */ - -*, -*:before, -*:after { - box-sizing: border-box; -} - -ul { - list-style: none; - margin: 0; - padding: 0; -} - -a, -a:active, -a:hover, -a:visited { - text-decoration: none; -} - -h1, -h2, -h3, -h4, -h5, -h6, -p { - margin: 0; -} - -html, -body { - margin: 0; -} - -button { - background: none; - color: inherit; - border: none; - padding: 0; - outline: inherit; - appearance: none; - cursor: pointer; -} - -::-ms-reveal { - display: none; -} - -input::-webkit-outer-spin-button, -input::-webkit-inner-spin-button { - appearance: none; - margin: 0; -} - -input[type="number"] { - appearance: textfield; -} diff --git a/frontend/src/styles/vendors/toastify.css b/frontend/src/styles/toastify.css similarity index 100% rename from frontend/src/styles/vendors/toastify.css rename to frontend/src/styles/toastify.css diff --git a/frontend/src/material-ui-pigment-css.d.ts b/frontend/src/theme/material-ui.d.ts similarity index 52% rename from frontend/src/material-ui-pigment-css.d.ts rename to frontend/src/theme/material-ui.d.ts index d8ccce6..3de9804 100644 --- a/frontend/src/material-ui-pigment-css.d.ts +++ b/frontend/src/theme/material-ui.d.ts @@ -1,37 +1,33 @@ -import { Theme, SxProps } from "@mui/material/styles"; +import "@mui/material/styles"; import {} from "@mui/material/themeCssVarsAugmentation"; -// Extend the Pigment CSS theme types with Material UI Theme -declare module "@mui/material-pigment-css" { - interface ThemeArgs { - theme: Theme; - } -} - declare module "@mui/material/styles" { // Named like this to augment the existing ZIndex theme type interface ZIndex { debugBanner: number; - cookieBanner: number; loading: number; } interface CustomSpacing { a: string; - xxs: string; - xs: string; - sm: string; - md: string; - lg: string; - xl: string; - xxl: string; + xxs: number; + xs: number; + sm: number; + md: number; + lg: number; + xl: number; + xxl: number; } interface CustomBorderRadius { - xs: string; - sm: string; - md: string; - lg: string; + xxs: number; + xs: number; + sm: number; + md: number; + lg: number; + xl: number; + xxl: number; + xxxl: number; } interface Theme { @@ -39,6 +35,7 @@ declare module "@mui/material/styles" { customProperties: { spacing: CustomSpacing; borderRadius: CustomBorderRadius; + bottomNavigationHeight: number; }; } @@ -48,18 +45,7 @@ declare module "@mui/material/styles" { customProperties?: { spacing?: Partial; borderRadius?: Partial; + bottomNavigationHeight?: number; }; } } - -// Allows typescript to recognize sx prop on HTML elements -declare global { - namespace React { - interface HTMLAttributes { - sx?: SxProps; - } - interface SVGProps { - sx?: SxProps; - } - } -} diff --git a/frontend/src/theme/palette.ts b/frontend/src/theme/palette.ts new file mode 100644 index 0000000..7e94bee --- /dev/null +++ b/frontend/src/theme/palette.ts @@ -0,0 +1,5 @@ +import type { PaletteOptions } from "@mui/material/styles"; + +export default function getPalette(): PaletteOptions { + return {}; +} diff --git a/frontend/src/themes/theme.ts b/frontend/src/theme/theme.ts similarity index 64% rename from frontend/src/themes/theme.ts rename to frontend/src/theme/theme.ts index 93bf7c4..fca38b8 100644 --- a/frontend/src/themes/theme.ts +++ b/frontend/src/theme/theme.ts @@ -1,16 +1,22 @@ import { createTheme } from "@mui/material/styles"; import palette from "./palette"; import typography from "./typography"; -import { breakpoints, zIndex, spacingValues, borderRadius } from "./variables"; +import { borderRadius, breakpoints, spacingValues, zIndex } from "./variables"; const theme = createTheme({ cssVariables: true, // creates css variables for theme values breakpoints: { values: breakpoints, }, + shape: { + // Resetting the default multiplier of 4 for borderRadius + // We can use fixed values from the variables.ts file + borderRadius: 1, + }, zIndex: zIndex, palette: palette(), typography, + // You can use the spacingValues from the variables.ts file or numbers (used as multiplier values) spacing: (value: number | keyof typeof spacingValues) => { if (typeof value === "number") { return `${0.25 * value}rem`; @@ -22,6 +28,10 @@ const theme = createTheme({ customProperties: { spacing: spacingValues, borderRadius: borderRadius, + bottomNavigationHeight: 76, + }, + components: { + MuiCssBaseline: {}, }, }); diff --git a/frontend/src/themes/typography.ts b/frontend/src/theme/typography.ts similarity index 81% rename from frontend/src/themes/typography.ts rename to frontend/src/theme/typography.ts index 831eb47..dd34012 100644 --- a/frontend/src/themes/typography.ts +++ b/frontend/src/theme/typography.ts @@ -1,4 +1,4 @@ -import { TypographyOptions } from "@mui/material/styles/createTypography"; +import type { TypographyOptions } from "@mui/material/styles/createTypography"; const typography: TypographyOptions = { fontFamily: "InterTight", @@ -15,16 +15,16 @@ const typography: TypographyOptions = { fontWeight: 600, }, h4: { - fontSize: "1.5rem", - fontWeight: 600, + fontSize: "2.125rem", + fontWeight: 500, }, h5: { fontSize: "1.25rem", fontWeight: 600, }, h6: { - fontSize: "1rem", - fontWeight: 600, + fontSize: "1.25rem", + fontWeight: 500, }, subtitle1: { fontSize: "1rem", @@ -32,7 +32,7 @@ const typography: TypographyOptions = { }, subtitle2: { fontSize: "0.875rem", - fontWeight: 400, + fontWeight: 500, }, body1: { fontSize: "1rem", diff --git a/frontend/src/theme/variables.ts b/frontend/src/theme/variables.ts new file mode 100644 index 0000000..2ea9568 --- /dev/null +++ b/frontend/src/theme/variables.ts @@ -0,0 +1,41 @@ +import type { CustomBorderRadius, CustomSpacing } from "@mui/material"; +import type { BreakpointsOptions, ZIndex } from "@mui/material/styles"; + +export const breakpoints: BreakpointsOptions["values"] = { + xs: 0, + sm: 444, + md: 900, + lg: 1200, + xl: 1440, +}; + +export const zIndex: Partial = { + appBar: 9, + /** + * You can define z-index values for your custom components here. For example, you can define the following: + * debugBanner: 100, + * and this will be available as a css variable like so: --mui-zIndex-debugBanner + */ +}; + +export const spacingValues: CustomSpacing = { + a: "auto", + xxs: 1, + xs: 2, + sm: 4, + md: 8, + lg: 12, + xl: 16, + xxl: 20, +}; + +export const borderRadius: CustomBorderRadius = { + xxs: 2, + xs: 4, + sm: 8, + md: 16, + lg: 24, + xl: 32, + xxl: 40, + xxxl: 50, +}; diff --git a/frontend/src/themes/palette.ts b/frontend/src/themes/palette.ts deleted file mode 100644 index ececd60..0000000 --- a/frontend/src/themes/palette.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { PaletteOptions } from "@mui/material/styles"; -// this is an example - colors can come from any other place -import colors from "@mui/material/colors"; - -export default function getPalette(): PaletteOptions { - const { blue, red, orange, cyan, green, grey } = colors; - - const contrastText = "#fff"; - - return { - common: { - black: "#000", - white: "#fff", - }, - primary: { - 100: blue[100], - 200: blue[200], - light: blue[300], - 400: blue[400], - main: blue[500], - 600: blue[600], - 700: blue[700], - dark: blue[900], - contrastText, - }, - secondary: { - 100: grey[100], - 200: grey[200], - light: grey[300], - 400: grey[400], - main: grey[500], - 600: grey[600], - dark: grey[700], - 800: grey[800], - A100: grey.A100, - A200: grey.A400, - A400: grey.A700, - contrastText, - }, - error: { - light: red[200], - main: red[400], - dark: red[700], - contrastText, - }, - warning: { - light: orange[300], - main: orange[500], - dark: orange[700], - contrastText: grey[100], - }, - info: { - light: cyan[300], - main: cyan[500], - dark: cyan[700], - contrastText, - }, - success: { - light: green[300], - main: green[500], - dark: green[700], - contrastText, - }, - grey, - }; -} diff --git a/frontend/src/themes/variables.ts b/frontend/src/themes/variables.ts deleted file mode 100644 index 2f4a658..0000000 --- a/frontend/src/themes/variables.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { CustomBorderRadius, CustomSpacing } from "@mui/material"; -import { BreakpointsOptions, ZIndex } from "@mui/material/styles"; - -export const breakpoints: BreakpointsOptions["values"] = { - xs: 640, - sm: 768, - md: 1024, - lg: 1280, - xl: 1440, -}; - -export const zIndex: Partial = { - debugBanner: 100, - cookieBanner: 200, - loading: 1000, -}; - -export const spacingValues: CustomSpacing = { - a: "auto", - xxs: "0.25rem", - xs: "0.5rem", - sm: "0.75rem", - md: "1rem", - lg: "1.5rem", - xl: "2rem", - xxl: "3rem", -}; - -export const borderRadius: CustomBorderRadius = { - xs: "4px", - sm: "8px", - md: "16px", - lg: "24px", -}; diff --git a/frontend/src/vite-env.d.ts b/frontend/src/vite-env.d.ts index cb73a4b..84f700b 100644 --- a/frontend/src/vite-env.d.ts +++ b/frontend/src/vite-env.d.ts @@ -1,6 +1,14 @@ /// -declare const __ENV__: string; -declare const __API_URL__: string; -declare const __VERSION_NUMBER__: string; -declare const __GA_TRACKING_ID__: string; +interface ImportMetaEnv { + readonly VITE_PORT: string; + readonly VITE_ENV: string; + readonly VITE_GENERATE_SOURCEMAP: string; + readonly VITE_VERSION_NUMBER: string; + readonly VITE_GA_TRACKING_ID: string; + readonly VITE_API_URL: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} diff --git a/frontend/stylelint.config.js b/frontend/stylelint.config.js new file mode 100755 index 0000000..5165f63 --- /dev/null +++ b/frontend/stylelint.config.js @@ -0,0 +1,10 @@ +/** @type {import('stylelint').Config} */ +export default { + ignoreFiles: ["dist/**", "build/**", "node_modules/**"], + extends: [ + "stylelint-config-standard", + "stylelint-config-css-modules", + "stylelint-prettier/recommended", + ], + plugins: ["stylelint-order"], +}; diff --git a/frontend/tsconfig.app.json b/frontend/tsconfig.app.json deleted file mode 100644 index 06efcac..0000000 --- a/frontend/tsconfig.app.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", - "target": "ES2020", - "useDefineForClassFields": true, - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "module": "ESNext", - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, - "moduleDetection": "force", - "noEmit": true, - "jsx": "react-jsx", - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true, - - /* Project */ - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "baseUrl": ".", - "paths": { - "@assets/*": ["src/assets/*"], - "@components/*": ["src/app/components/*"], - "@containers/*": ["src/app/containers/*"], - "@enums/*": ["src/app/enums/*"], - "@forms/*": ["src/app/forms/*"], - "@hocs/*": ["src/app/hocs/*"], - "@icons/*": ["src/app/icons/*"], - "@pages/*": ["src/app/pages/*"], - "@routes/*": ["src/app/routes/*"], - "@services/*": ["src/app/services/*"], - "@shared/*": ["src/app/shared/*"], - "@stores/*": ["src/app/stores/*"], - "@styles/*": ["src/styles/*"] - } - }, - "include": ["src"] -} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index ea9d0cd..3daa950 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -1,11 +1,36 @@ { - "files": [], - "references": [ - { - "path": "./tsconfig.app.json" + "include": [ + "**/*", + "**/.server/**/*", + "**/.client/**/*", + ".react-router/types/**/*" + ], + "compilerOptions": { + "lib": ["DOM", "DOM.Iterable", "ES2022"], + "types": ["node", "vite/client"], + "target": "ES2022", + "module": "ES2022", + "moduleResolution": "bundler", + "jsx": "react-jsx", + "rootDirs": [".", "./.react-router/types"], + "baseUrl": ".", + "paths": { + "@assets/*": ["src/assets/*"], + "@components/*": ["src/app/components/*"], + "@containers/*": ["src/app/containers/*"], + "@enums/*": ["src/app/enums/*"], + "@forms/*": ["src/app/forms/*"], + "@hocs/*": ["src/app/hocs/*"], + "@icons/*": ["src/app/icons/*"], + "@services/*": ["src/app/services/*"], + "@shared/*": ["src/app/shared/*"], + "@stores/*": ["src/app/stores/*"] }, - { - "path": "./tsconfig.node.json" - } - ] + "esModuleInterop": true, + "verbatimModuleSyntax": true, + "noEmit": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": true + } } diff --git a/frontend/tsconfig.node.json b/frontend/tsconfig.node.json deleted file mode 100644 index 7dac597..0000000 --- a/frontend/tsconfig.node.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", - "skipLibCheck": true, - "module": "ESNext", - "moduleResolution": "bundler", - "allowSyntheticDefaultImports": true, - "strict": true, - "noEmit": true - }, - "include": [ - "vite.config.ts", - "src/material-ui-pigment-css.d.ts", - "src/themes/**/*.ts" - ] -} diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 90e7bf6..2ae2eac 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -1,54 +1,29 @@ -import { defineConfig, loadEnv, ServerOptions } from "vite"; -import react from "@vitejs/plugin-react"; -import { pigment } from "@pigment-css/vite-plugin"; -import theme from "./src/themes/theme"; -import path from "path"; +import { reactRouter } from "@react-router/dev/vite"; +import autoprefixer from "autoprefixer"; +import { defineConfig, loadEnv } from "vite"; +import tsconfigPaths from "vite-tsconfig-paths"; -export default ({ mode }: { mode: string }) => { - process.env = { ...process.env, ...loadEnv(mode, process.cwd()) }; +export default defineConfig(({ mode }) => { + const env = { ...process.env, ...loadEnv(mode, process.cwd()) }; - const serverOptions: ServerOptions = { - port: Number(process.env.VITE_PORT), - }; - if (process.env.VITE_DOCKER === "true") { - serverOptions.host = true; - serverOptions.watch = { usePolling: true }; - } - - return defineConfig({ - plugins: [ - react(), - pigment({ - theme, - transformLibraries: ["@mui/material"], - }), - ], - build: { - sourcemap: process.env.VITE_GENERATE_SOURCEMAP === "true", + return { + css: { + postcss: { + plugins: [autoprefixer], + }, }, - server: serverOptions, - define: { - __ENV__: JSON.stringify(process.env.VITE_ENV), - __API_URL__: JSON.stringify(process.env.VITE_API_URL), - __VERSION_NUMBER__: JSON.stringify(process.env.VITE_VERSION_NUMBER), - __GA_TRACKING_ID__: JSON.stringify(process.env.VITE_GA_TRACKING_ID), + ssr: { + noExternal: [ + "@mui/*", // fix material-ui ES modules imported error. + ], }, - resolve: { - alias: { - "@assets": path.resolve(__dirname, "src/assets"), - "@components": path.resolve(__dirname, "src/app/components"), - "@containers": path.resolve(__dirname, "src/app/containers"), - "@enums": path.resolve(__dirname, "src/app/enums"), - "@forms": path.resolve(__dirname, "src/app/forms"), - "@hocs": path.resolve(__dirname, "src/app/hocs"), - "@icons": path.resolve(__dirname, "src/app/icons"), - "@pages": path.resolve(__dirname, "src/app/pages"), - "@routes": path.resolve(__dirname, "src/app/routes"), - "@services": path.resolve(__dirname, "src/app/services"), - "@shared": path.resolve(__dirname, "src/app/shared"), - "@stores": path.resolve(__dirname, "src/app/stores"), - "@styles": path.resolve(__dirname, "src/styles"), - }, + plugins: [reactRouter(), tsconfigPaths()], + build: { + sourcemap: + env.VITE_GENERATE_SOURCEMAP === "true" && mode !== "production", }, - }); -}; + server: { + port: Number(env.VITE_PORT), + }, + }; +}); diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 3785c81..c696547 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -15,620 +15,365 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/code-frame@npm:7.24.7" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.0, @babel/code-frame@npm:^7.26.2": + version: 7.26.2 + resolution: "@babel/code-frame@npm:7.26.2" dependencies: - "@babel/highlight": "npm:^7.24.7" + "@babel/helper-validator-identifier": "npm:^7.25.9" + js-tokens: "npm:^4.0.0" picocolors: "npm:^1.0.0" - checksum: 10c0/ab0af539473a9f5aeaac7047e377cb4f4edd255a81d84a76058595f8540784cc3fbe8acf73f1e073981104562490aabfb23008cd66dc677a456a4ed5390fdde6 - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/compat-data@npm:7.24.7" - checksum: 10c0/dcd93a5632b04536498fbe2be5af1057f635fd7f7090483d8e797878559037e5130b26862ceb359acbae93ed27e076d395ddb4663db6b28a665756ffd02d324f + checksum: 10c0/7d79621a6849183c415486af99b1a20b84737e8c11cd55b6544f688c51ce1fd710e6d869c3dd21232023da272a79b91efb3e83b5bc2dc65c1187c5fcd1b72ea8 languageName: node linkType: hard -"@babel/compat-data@npm:^7.25.2": - version: 7.25.4 - resolution: "@babel/compat-data@npm:7.25.4" - checksum: 10c0/50d79734d584a28c69d6f5b99adfaa064d0f41609a378aef04eb06accc5b44f8520e68549eba3a082478180957b7d5783f1bfb1672e4ae8574e797ce8bae79fa - languageName: node - linkType: hard - -"@babel/core@npm:^7.23.5, @babel/core@npm:^7.24.4": - version: 7.25.2 - resolution: "@babel/core@npm:7.25.2" - dependencies: - "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.24.7" - "@babel/generator": "npm:^7.25.0" - "@babel/helper-compilation-targets": "npm:^7.25.2" - "@babel/helper-module-transforms": "npm:^7.25.2" - "@babel/helpers": "npm:^7.25.0" - "@babel/parser": "npm:^7.25.0" - "@babel/template": "npm:^7.25.0" - "@babel/traverse": "npm:^7.25.2" - "@babel/types": "npm:^7.25.2" - convert-source-map: "npm:^2.0.0" - debug: "npm:^4.1.0" - gensync: "npm:^1.0.0-beta.2" - json5: "npm:^2.2.3" - semver: "npm:^6.3.1" - checksum: 10c0/a425fa40e73cb72b6464063a57c478bc2de9dbcc19c280f1b55a3d88b35d572e87e8594e7d7b4880331addb6faef641bbeb701b91b41b8806cd4deae5d74f401 +"@babel/compat-data@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/compat-data@npm:7.26.5" + checksum: 10c0/9d2b41f0948c3dfc5de44d9f789d2208c2ea1fd7eb896dfbb297fe955e696728d6f363c600cd211e7f58ccbc2d834fe516bb1e4cf883bbabed8a32b038afc1a0 languageName: node linkType: hard -"@babel/core@npm:^7.24.5": - version: 7.24.7 - resolution: "@babel/core@npm:7.24.7" +"@babel/core@npm:^7.21.8, @babel/core@npm:^7.23.7": + version: 7.26.0 + resolution: "@babel/core@npm:7.26.0" dependencies: "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.24.7" - "@babel/generator": "npm:^7.24.7" - "@babel/helper-compilation-targets": "npm:^7.24.7" - "@babel/helper-module-transforms": "npm:^7.24.7" - "@babel/helpers": "npm:^7.24.7" - "@babel/parser": "npm:^7.24.7" - "@babel/template": "npm:^7.24.7" - "@babel/traverse": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" + "@babel/code-frame": "npm:^7.26.0" + "@babel/generator": "npm:^7.26.0" + "@babel/helper-compilation-targets": "npm:^7.25.9" + "@babel/helper-module-transforms": "npm:^7.26.0" + "@babel/helpers": "npm:^7.26.0" + "@babel/parser": "npm:^7.26.0" + "@babel/template": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.26.0" convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: 10c0/4004ba454d3c20a46ea66264e06c15b82e9f6bdc35f88819907d24620da70dbf896abac1cb4cc4b6bb8642969e45f4d808497c9054a1388a386cf8c12e9b9e0d - languageName: node - linkType: hard - -"@babel/generator@npm:^7.23.5, @babel/generator@npm:^7.25.0, @babel/generator@npm:^7.25.6": - version: 7.25.6 - resolution: "@babel/generator@npm:7.25.6" - dependencies: - "@babel/types": "npm:^7.25.6" - "@jridgewell/gen-mapping": "npm:^0.3.5" - "@jridgewell/trace-mapping": "npm:^0.3.25" - jsesc: "npm:^2.5.1" - checksum: 10c0/f89282cce4ddc63654470b98086994d219407d025497f483eb03ba102086e11e2b685b27122f6ff2e1d93b5b5fa0c3a6b7e974fbf2e4a75b685041a746a4291e + checksum: 10c0/91de73a7ff5c4049fbc747930aa039300e4d2670c2a91f5aa622f1b4868600fc89b01b6278385fbcd46f9574186fa3d9b376a9e7538e50f8d118ec13cfbcb63e languageName: node linkType: hard -"@babel/generator@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/generator@npm:7.24.7" +"@babel/generator@npm:^7.21.5, @babel/generator@npm:^7.26.0, @babel/generator@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/generator@npm:7.26.5" dependencies: - "@babel/types": "npm:^7.24.7" + "@babel/parser": "npm:^7.26.5" + "@babel/types": "npm:^7.26.5" "@jridgewell/gen-mapping": "npm:^0.3.5" "@jridgewell/trace-mapping": "npm:^0.3.25" - jsesc: "npm:^2.5.1" - checksum: 10c0/06b1f3350baf527a3309e50ffd7065f7aee04dd06e1e7db794ddfde7fe9d81f28df64edd587173f8f9295496a7ddb74b9a185d4bf4de7bb619e6d4ec45c8fd35 - languageName: node - linkType: hard - -"@babel/helper-annotate-as-pure@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-annotate-as-pure@npm:7.24.7" - dependencies: - "@babel/types": "npm:^7.24.7" - checksum: 10c0/4679f7df4dffd5b3e26083ae65228116c3da34c3fff2c11ae11b259a61baec440f51e30fd236f7a0435b9d471acd93d0bc5a95df8213cbf02b1e083503d81b9a + jsesc: "npm:^3.0.2" + checksum: 10c0/3be79e0aa03f38858a465d12ee2e468320b9122dc44fc85984713e32f16f4d77ce34a16a1a9505972782590e0b8d847b6f373621f9c6fafa1906d90f31416cb0 languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-compilation-targets@npm:7.24.7" +"@babel/helper-annotate-as-pure@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-annotate-as-pure@npm:7.25.9" dependencies: - "@babel/compat-data": "npm:^7.24.7" - "@babel/helper-validator-option": "npm:^7.24.7" - browserslist: "npm:^4.22.2" - lru-cache: "npm:^5.1.1" - semver: "npm:^6.3.1" - checksum: 10c0/1d580a9bcacefe65e6bf02ba1dafd7ab278269fef45b5e281d8354d95c53031e019890464e7f9351898c01502dd2e633184eb0bcda49ed2ecd538675ce310f51 + "@babel/types": "npm:^7.25.9" + checksum: 10c0/095b6ba50489d797733abebc4596a81918316a99e3632755c9f02508882912b00c2ae5e468532a25a5c2108d109ddbe9b7da78333ee7cc13817fc50c00cf06fe languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/helper-compilation-targets@npm:7.25.2" +"@babel/helper-compilation-targets@npm:^7.25.9": + version: 7.26.5 + resolution: "@babel/helper-compilation-targets@npm:7.26.5" dependencies: - "@babel/compat-data": "npm:^7.25.2" - "@babel/helper-validator-option": "npm:^7.24.8" - browserslist: "npm:^4.23.1" + "@babel/compat-data": "npm:^7.26.5" + "@babel/helper-validator-option": "npm:^7.25.9" + browserslist: "npm:^4.24.0" lru-cache: "npm:^5.1.1" semver: "npm:^6.3.1" - checksum: 10c0/de10e986b5322c9f807350467dc845ec59df9e596a5926a3b5edbb4710d8e3b8009d4396690e70b88c3844fe8ec4042d61436dd4b92d1f5f75655cf43ab07e99 + checksum: 10c0/9da5c77e5722f1a2fcb3e893049a01d414124522bbf51323bb1a0c9dcd326f15279836450fc36f83c9e8a846f3c40e88be032ed939c5a9840922bed6073edfb4 languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.25.0": - version: 7.25.4 - resolution: "@babel/helper-create-class-features-plugin@npm:7.25.4" +"@babel/helper-create-class-features-plugin@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-create-class-features-plugin@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.24.7" - "@babel/helper-member-expression-to-functions": "npm:^7.24.8" - "@babel/helper-optimise-call-expression": "npm:^7.24.7" - "@babel/helper-replace-supers": "npm:^7.25.0" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" - "@babel/traverse": "npm:^7.25.4" + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-member-expression-to-functions": "npm:^7.25.9" + "@babel/helper-optimise-call-expression": "npm:^7.25.9" + "@babel/helper-replace-supers": "npm:^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/a765d9e0482e13cf96642fa8aa28e6f7d4d7d39f37840d6246e5e10a7c47f47c52d52522edd3073f229449d17ec0db6f9b7b5e398bff6bb0b4994d65957a164c - languageName: node - linkType: hard - -"@babel/helper-environment-visitor@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-environment-visitor@npm:7.24.7" - dependencies: - "@babel/types": "npm:^7.24.7" - checksum: 10c0/36ece78882b5960e2d26abf13cf15ff5689bf7c325b10a2895a74a499e712de0d305f8d78bb382dd3c05cfba7e47ec98fe28aab5674243e0625cd38438dd0b2d - languageName: node - linkType: hard - -"@babel/helper-function-name@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-function-name@npm:7.24.7" - dependencies: - "@babel/template": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10c0/e5e41e6cf86bd0f8bf272cbb6e7c5ee0f3e9660414174435a46653efba4f2479ce03ce04abff2aa2ef9359cf057c79c06cb7b134a565ad9c0e8a50dcdc3b43c4 - languageName: node - linkType: hard - -"@babel/helper-hoist-variables@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-hoist-variables@npm:7.24.7" - dependencies: - "@babel/types": "npm:^7.24.7" - checksum: 10c0/19ee37563bbd1219f9d98991ad0e9abef77803ee5945fd85aa7aa62a67c69efca9a801696a1b58dda27f211e878b3327789e6fd2a6f6c725ccefe36774b5ce95 - languageName: node - linkType: hard - -"@babel/helper-member-expression-to-functions@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/helper-member-expression-to-functions@npm:7.24.8" - dependencies: - "@babel/traverse": "npm:^7.24.8" - "@babel/types": "npm:^7.24.8" - checksum: 10c0/7e14a5acc91f6cd26305a4441b82eb6f616bd70b096a4d2099a968f16b26d50207eec0b9ebfc466fefd62bd91587ac3be878117cdfec819b7151911183cb0e5a + checksum: 10c0/b2bdd39f38056a76b9ba00ec5b209dd84f5c5ebd998d0f4033cf0e73d5f2c357fbb49d1ce52db77a2709fb29ee22321f84a5734dc9914849bdfee9ad12ce8caf languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.22.15, @babel/helper-module-imports@npm:^7.24.3, @babel/helper-module-imports@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-module-imports@npm:7.24.7" +"@babel/helper-member-expression-to-functions@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-member-expression-to-functions@npm:7.25.9" dependencies: - "@babel/traverse": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10c0/97c57db6c3eeaea31564286e328a9fb52b0313c5cfcc7eee4bc226aebcf0418ea5b6fe78673c0e4a774512ec6c86e309d0f326e99d2b37bfc16a25a032498af0 + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/e08c7616f111e1fb56f398365e78858e26e466d4ac46dff25921adc5ccae9b232f66e952a2f4162bbe336627ba336c7fd9eca4835b6548935973d3380d77eaff languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-module-transforms@npm:7.24.7" +"@babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-module-imports@npm:7.25.9" dependencies: - "@babel/helper-environment-visitor": "npm:^7.24.7" - "@babel/helper-module-imports": "npm:^7.24.7" - "@babel/helper-simple-access": "npm:^7.24.7" - "@babel/helper-split-export-declaration": "npm:^7.24.7" - "@babel/helper-validator-identifier": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/4f311755fcc3b4cbdb689386309cdb349cf0575a938f0b9ab5d678e1a81bbb265aa34ad93174838245f2ac7ff6d5ddbd0104638a75e4e961958ed514355687b6 + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/078d3c2b45d1f97ffe6bb47f61961be4785d2342a4156d8b42c92ee4e1b7b9e365655dd6cb25329e8fe1a675c91eeac7e3d04f0c518b67e417e29d6e27b6aa70 languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.24.8, @babel/helper-module-transforms@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/helper-module-transforms@npm:7.25.2" +"@babel/helper-module-transforms@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/helper-module-transforms@npm:7.26.0" dependencies: - "@babel/helper-module-imports": "npm:^7.24.7" - "@babel/helper-simple-access": "npm:^7.24.7" - "@babel/helper-validator-identifier": "npm:^7.24.7" - "@babel/traverse": "npm:^7.25.2" + "@babel/helper-module-imports": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/adaa15970ace0aee5934b5a633789b5795b6229c6a9cf3e09a7e80aa33e478675eee807006a862aa9aa517935d81f88a6db8a9f5936e3a2a40ec75f8062bc329 + checksum: 10c0/ee111b68a5933481d76633dad9cdab30c41df4479f0e5e1cc4756dc9447c1afd2c9473b5ba006362e35b17f4ebddd5fca090233bef8dfc84dca9d9127e56ec3a languageName: node linkType: hard -"@babel/helper-optimise-call-expression@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-optimise-call-expression@npm:7.24.7" +"@babel/helper-optimise-call-expression@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-optimise-call-expression@npm:7.25.9" dependencies: - "@babel/types": "npm:^7.24.7" - checksum: 10c0/ca6a9884705dea5c95a8b3ce132d1e3f2ae951ff74987d400d1d9c215dae9c0f9e29924d8f8e131e116533d182675bc261927be72f6a9a2968eaeeaa51eb1d0f + "@babel/types": "npm:^7.25.9" + checksum: 10c0/90203e6607edeadd2a154940803fd616c0ed92c1013d6774c4b8eb491f1a5a3448b68faae6268141caa5c456e55e3ee49a4ed2bd7ddaf2365daea321c435914c languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.24.0, @babel/helper-plugin-utils@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/helper-plugin-utils@npm:7.24.8" - checksum: 10c0/0376037f94a3bfe6b820a39f81220ac04f243eaee7193774b983e956c1750883ff236b30785795abbcda43fac3ece74750566830c2daa4d6e3870bb0dff34c2d +"@babel/helper-plugin-utils@npm:^7.25.9, @babel/helper-plugin-utils@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/helper-plugin-utils@npm:7.26.5" + checksum: 10c0/cdaba71d4b891aa6a8dfbe5bac2f94effb13e5fa4c2c487667fdbaa04eae059b78b28d85a885071f45f7205aeb56d16759e1bed9c118b94b16e4720ef1ab0f65 languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-plugin-utils@npm:7.24.7" - checksum: 10c0/c3d38cd9b3520757bb4a279255cc3f956fc0ac1c193964bd0816ebd5c86e30710be8e35252227e0c9d9e0f4f56d9b5f916537f2bc588084b0988b4787a967d31 - languageName: node - linkType: hard - -"@babel/helper-replace-supers@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/helper-replace-supers@npm:7.25.0" +"@babel/helper-replace-supers@npm:^7.25.9": + version: 7.26.5 + resolution: "@babel/helper-replace-supers@npm:7.26.5" dependencies: - "@babel/helper-member-expression-to-functions": "npm:^7.24.8" - "@babel/helper-optimise-call-expression": "npm:^7.24.7" - "@babel/traverse": "npm:^7.25.0" + "@babel/helper-member-expression-to-functions": "npm:^7.25.9" + "@babel/helper-optimise-call-expression": "npm:^7.25.9" + "@babel/traverse": "npm:^7.26.5" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/b4b6650ab3d56c39a259367cd97f8df2f21c9cebb3716fea7bca40a150f8847bfb82f481e98927c7c6579b48a977b5a8f77318a1c6aeb497f41ecd6dbc3fdfef - languageName: node - linkType: hard - -"@babel/helper-simple-access@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-simple-access@npm:7.24.7" - dependencies: - "@babel/traverse": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10c0/7230e419d59a85f93153415100a5faff23c133d7442c19e0cd070da1784d13cd29096ee6c5a5761065c44e8164f9f80e3a518c41a0256df39e38f7ad6744fed7 - languageName: node - linkType: hard - -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.24.7" - dependencies: - "@babel/traverse": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10c0/e3a9b8ac9c262ac976a1bcb5fe59694db5e6f0b4f9e7bdba5c7693b8b5e28113c23bdaa60fe8d3ec32a337091b67720b2053bcb3d5655f5406536c3d0584242b + checksum: 10c0/b19b1245caf835207aaaaac3a494f03a16069ae55e76a2e1350b5acd560e6a820026997a8160e8ebab82ae873e8208759aa008eb8422a67a775df41f0a4633d4 languageName: node linkType: hard -"@babel/helper-split-export-declaration@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-split-export-declaration@npm:7.24.7" +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.25.9" dependencies: - "@babel/types": "npm:^7.24.7" - checksum: 10c0/0254577d7086bf09b01bbde98f731d4fcf4b7c3fa9634fdb87929801307c1f6202a1352e3faa5492450fa8da4420542d44de604daf540704ff349594a78184f6 - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-string-parser@npm:7.24.7" - checksum: 10c0/47840c7004e735f3dc93939c77b099bb41a64bf3dda0cae62f60e6f74a5ff80b63e9b7cf77b5ec25a324516381fc994e1f62f922533236a8e3a6af57decb5e1e - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/helper-string-parser@npm:7.24.8" - checksum: 10c0/6361f72076c17fabf305e252bf6d580106429014b3ab3c1f5c4eb3e6d465536ea6b670cc0e9a637a77a9ad40454d3e41361a2909e70e305116a23d68ce094c08 - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-string-parser@npm:7.25.7" - checksum: 10c0/73ef2ceb81f8294678a0afe8ab0103729c0370cac2e830e0d5128b03be5f6a2635838af31d391d763e3c5a4460ed96f42fd7c9b552130670d525be665913bc4c + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/09ace0c6156961624ac9524329ce7f45350bab94bbe24335cbe0da7dfaa1448e658771831983cb83fe91cf6635b15d0a3cab57c03b92657480bfb49fb56dd184 languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-validator-identifier@npm:7.24.7" - checksum: 10c0/87ad608694c9477814093ed5b5c080c2e06d44cb1924ae8320474a74415241223cc2a725eea2640dd783ff1e3390e5f95eede978bc540e870053152e58f1d651 +"@babel/helper-string-parser@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-string-parser@npm:7.25.9" + checksum: 10c0/7244b45d8e65f6b4338a6a68a8556f2cb161b782343e97281a5f2b9b93e420cad0d9f5773a59d79f61d0c448913d06f6a2358a87f2e203cf112e3c5b53522ee6 languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-validator-identifier@npm:7.25.7" - checksum: 10c0/07438e5bf01ab2882a15027fdf39ac3b0ba1b251774a5130917907014684e2f70fef8fd620137ca062c4c4eedc388508d2ea7a3a7d9936a32785f4fe116c68c0 +"@babel/helper-validator-identifier@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-identifier@npm:7.25.9" + checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-validator-option@npm:7.24.7" - checksum: 10c0/21aea2b7bc5cc8ddfb828741d5c8116a84cbc35b4a3184ec53124f08e09746f1f67a6f9217850188995ca86059a7942e36d8965a6730784901def777b7e8a436 +"@babel/helper-validator-option@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-option@npm:7.25.9" + checksum: 10c0/27fb195d14c7dcb07f14e58fe77c44eea19a6a40a74472ec05c441478fa0bb49fa1c32b2d64be7a38870ee48ef6601bdebe98d512f0253aea0b39756c4014f3e languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/helper-validator-option@npm:7.24.8" - checksum: 10c0/73db93a34ae89201351288bee7623eed81a54000779462a986105b54ffe82069e764afd15171a428b82e7c7a9b5fec10b5d5603b216317a414062edf5c67a21f - languageName: node - linkType: hard - -"@babel/helpers@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helpers@npm:7.24.7" - dependencies: - "@babel/template": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10c0/aa8e230f6668773e17e141dbcab63e935c514b4b0bf1fed04d2eaefda17df68e16b61a56573f7f1d4d1e605ce6cc162b5f7e9fdf159fde1fd9b77c920ae47d27 - languageName: node - linkType: hard - -"@babel/helpers@npm:^7.25.0": - version: 7.25.6 - resolution: "@babel/helpers@npm:7.25.6" - dependencies: - "@babel/template": "npm:^7.25.0" - "@babel/types": "npm:^7.25.6" - checksum: 10c0/448c1cdabccca42fd97a252f73f1e4bcd93776dbf24044f3b4f49b756bf2ece73ee6df05177473bb74ea7456dddd18d6f481e4d96d2cc7839d078900d48c696c - languageName: node - linkType: hard - -"@babel/highlight@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/highlight@npm:7.24.7" +"@babel/helpers@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/helpers@npm:7.26.0" dependencies: - "@babel/helper-validator-identifier": "npm:^7.24.7" - chalk: "npm:^2.4.2" - js-tokens: "npm:^4.0.0" - picocolors: "npm:^1.0.0" - checksum: 10c0/674334c571d2bb9d1c89bdd87566383f59231e16bcdcf5bb7835babdf03c9ae585ca0887a7b25bdf78f303984af028df52831c7989fecebb5101cc132da9393a - languageName: node - linkType: hard - -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/parser@npm:7.24.7" - bin: - parser: ./bin/babel-parser.js - checksum: 10c0/8b244756872185a1c6f14b979b3535e682ff08cb5a2a5fd97cc36c017c7ef431ba76439e95e419d43000c5b07720495b00cf29a7f0d9a483643d08802b58819b + "@babel/template": "npm:^7.25.9" + "@babel/types": "npm:^7.26.0" + checksum: 10c0/343333cced6946fe46617690a1d0789346960910225ce359021a88a60a65bc0d791f0c5d240c0ed46cf8cc63b5fd7df52734ff14e43b9c32feae2b61b1647097 languageName: node linkType: hard -"@babel/parser@npm:^7.24.4, @babel/parser@npm:^7.25.0, @babel/parser@npm:^7.25.6": - version: 7.25.6 - resolution: "@babel/parser@npm:7.25.6" +"@babel/parser@npm:^7.21.8, @babel/parser@npm:^7.23.6, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.0, @babel/parser@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/parser@npm:7.26.5" dependencies: - "@babel/types": "npm:^7.25.6" + "@babel/types": "npm:^7.26.5" bin: parser: ./bin/babel-parser.js - checksum: 10c0/f88a0e895dbb096fd37c4527ea97d12b5fc013720602580a941ac3a339698872f0c911e318c292b184c36b5fbe23b612f05aff9d24071bc847c7b1c21552c41d - languageName: node - linkType: hard - -"@babel/plugin-syntax-jsx@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-syntax-jsx@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/f44d927a9ae8d5ef016ff5b450e1671e56629ddc12e56b938e41fd46e141170d9dfc9a53d6cb2b9a20a7dd266a938885e6a3981c60c052a2e1daed602ac80e51 + checksum: 10c0/2e77dd99ee028ee3c10fa03517ae1169f2432751adf71315e4dc0d90b61639d51760d622f418f6ac665ae4ea65f8485232a112ea0e76f18e5900225d3d19a61e languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.24.7": - version: 7.25.4 - resolution: "@babel/plugin-syntax-typescript@npm:7.25.4" +"@babel/plugin-syntax-decorators@npm:^7.22.10": + version: 7.25.9 + resolution: "@babel/plugin-syntax-decorators@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/199919d44c73e5edee9ffd311cf638f88d26a810189e32d338c46c7600441fd5c4a2e431f9be377707cbf318410895304e90b83bf8d9011d205150fa7f260e63 + checksum: 10c0/47e44a7d61b76dac4f18fd61edc186012e084eb8f1fe253c483b0fe90b73366b4ebd2b0b03728e000fd1fdedc8af3aa6e93246caf97183a8d9d42a0eb57ecfcc languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.23.3, @babel/plugin-transform-modules-commonjs@npm:^7.24.7": - version: 7.24.8 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.8" +"@babel/plugin-syntax-jsx@npm:^7.21.4, @babel/plugin-syntax-jsx@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-syntax-jsx@npm:7.25.9" dependencies: - "@babel/helper-module-transforms": "npm:^7.24.8" - "@babel/helper-plugin-utils": "npm:^7.24.8" - "@babel/helper-simple-access": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/f1cf552307ebfced20d3907c1dd8be941b277f0364aa655e2b5fee828c84c54065745183104dae86f1f93ea0406db970a463ef7ceaaed897623748e99640e5a7 + checksum: 10c0/d56597aff4df39d3decda50193b6dfbe596ca53f437ff2934622ce19a743bf7f43492d3fb3308b0289f5cee2b825d99ceb56526a2b9e7b68bf04901546c5618c languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-self@npm:^7.24.5": - version: 7.24.7 - resolution: "@babel/plugin-transform-react-jsx-self@npm:7.24.7" +"@babel/plugin-syntax-typescript@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-syntax-typescript@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/dcf3b732401f47f06bb29d6016e48066f66de00029a0ded98ddd9983c770a00a109d91cd04d2700d15ee0bcec3ae3027a5f12d69e15ec56efc0bcbfac65e92cb + checksum: 10c0/5192ebe11bd46aea68b7a60fd9555465c59af7e279e71126788e59121b86e00b505816685ab4782abe159232b0f73854e804b54449820b0d950b397ee158caa2 languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-source@npm:^7.24.1": - version: 7.24.7 - resolution: "@babel/plugin-transform-react-jsx-source@npm:7.24.7" +"@babel/plugin-transform-modules-commonjs@npm:^7.25.9": + version: 7.26.3 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.26.3" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-module-transforms": "npm:^7.26.0" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/970ef1264c7c6c416ab11610665d5309aec2bd2b9086ae394e1132e65138d97b060a7dc9d31054e050d6dc475b5a213938c9707c0202a5022d55dcb4c5abe28f + checksum: 10c0/82e59708f19f36da29531a64a7a94eabbf6ff46a615e0f5d9b49f3f59e8ef10e2bac607d749091508d3fa655146c9e5647c3ffeca781060cdabedb4c7a33c6f2 languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.24.7": - version: 7.25.2 - resolution: "@babel/plugin-transform-typescript@npm:7.25.2" +"@babel/plugin-transform-typescript@npm:^7.25.9": + version: 7.26.5 + resolution: "@babel/plugin-transform-typescript@npm:7.26.5" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.24.7" - "@babel/helper-create-class-features-plugin": "npm:^7.25.0" - "@babel/helper-plugin-utils": "npm:^7.24.8" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" - "@babel/plugin-syntax-typescript": "npm:^7.24.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-create-class-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.26.5" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" + "@babel/plugin-syntax-typescript": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/b3c941da39ee7ecf72df1b78a01d4108160438245f2ab61befe182f51d17fd0034733c6d079b7efad81e03a66438aa3881a671cd68c5eb0fc775df86b88df996 + checksum: 10c0/64204b1f1c77d896142071cc174e7bb4fbc597bdc0ea73aec8de1a72d252755db381b9ed40342fc283c32387d7375d0803d0aed8262dd503633f5035148d47a0 languageName: node linkType: hard -"@babel/preset-typescript@npm:^7.24.1": - version: 7.24.7 - resolution: "@babel/preset-typescript@npm:7.24.7" +"@babel/preset-typescript@npm:^7.21.5": + version: 7.26.0 + resolution: "@babel/preset-typescript@npm:7.26.0" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-validator-option": "npm:^7.24.7" - "@babel/plugin-syntax-jsx": "npm:^7.24.7" - "@babel/plugin-transform-modules-commonjs": "npm:^7.24.7" - "@babel/plugin-transform-typescript": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-validator-option": "npm:^7.25.9" + "@babel/plugin-syntax-jsx": "npm:^7.25.9" + "@babel/plugin-transform-modules-commonjs": "npm:^7.25.9" + "@babel/plugin-transform-typescript": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/986bc0978eedb4da33aba8e1e13a3426dd1829515313b7e8f4ba5d8c18aff1663b468939d471814e7acf4045d326ae6cff37239878d169ac3fe53a8fde71f8ee + checksum: 10c0/20d86bc45d2bbfde2f84fc7d7b38746fa6481d4bde6643039ad4b1ff0b804c6d210ee43e6830effd8571f2ff43fa7ffd27369f42f2b3a2518bb92dc86c780c61 languageName: node linkType: hard -"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.7": - version: 7.24.7 - resolution: "@babel/runtime@npm:7.24.7" +"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.25.0, @babel/runtime@npm:^7.26.0, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.7": + version: 7.26.0 + resolution: "@babel/runtime@npm:7.26.0" dependencies: regenerator-runtime: "npm:^0.14.0" - checksum: 10c0/b6fa3ec61a53402f3c1d75f4d808f48b35e0dfae0ec8e2bb5c6fc79fb95935da75766e0ca534d0f1c84871f6ae0d2ebdd950727cfadb745a2cdbef13faef5513 - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.25.0, @babel/runtime@npm:^7.25.6": - version: 7.25.6 - resolution: "@babel/runtime@npm:7.25.6" - dependencies: - regenerator-runtime: "npm:^0.14.0" - checksum: 10c0/d6143adf5aa1ce79ed374e33fdfd74fa975055a80bc6e479672ab1eadc4e4bfd7484444e17dd063a1d180e051f3ec62b357c7a2b817e7657687b47313158c3d2 - languageName: node - linkType: hard - -"@babel/template@npm:^7.22.15, @babel/template@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/template@npm:7.25.0" - dependencies: - "@babel/code-frame": "npm:^7.24.7" - "@babel/parser": "npm:^7.25.0" - "@babel/types": "npm:^7.25.0" - checksum: 10c0/4e31afd873215744c016e02b04f43b9fa23205d6d0766fb2e93eb4091c60c1b88897936adb895fb04e3c23de98dfdcbe31bc98daaa1a4e0133f78bb948e1209b - languageName: node - linkType: hard - -"@babel/template@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/template@npm:7.24.7" - dependencies: - "@babel/code-frame": "npm:^7.24.7" - "@babel/parser": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10c0/95b0b3ee80fcef685b7f4426f5713a855ea2cd5ac4da829b213f8fb5afe48a2a14683c2ea04d446dbc7f711c33c5cd4a965ef34dcbe5bc387c9e966b67877ae3 + checksum: 10c0/12c01357e0345f89f4f7e8c0e81921f2a3e3e101f06e8eaa18a382b517376520cd2fa8c237726eb094dab25532855df28a7baaf1c26342b52782f6936b07c287 languageName: node linkType: hard -"@babel/traverse@npm:^7.23.5, @babel/traverse@npm:^7.24.8, @babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.2, @babel/traverse@npm:^7.25.4": - version: 7.25.6 - resolution: "@babel/traverse@npm:7.25.6" +"@babel/template@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/template@npm:7.25.9" dependencies: - "@babel/code-frame": "npm:^7.24.7" - "@babel/generator": "npm:^7.25.6" - "@babel/parser": "npm:^7.25.6" - "@babel/template": "npm:^7.25.0" - "@babel/types": "npm:^7.25.6" - debug: "npm:^4.3.1" - globals: "npm:^11.1.0" - checksum: 10c0/964304c6fa46bd705428ba380bf73177eeb481c3f26d82ea3d0661242b59e0dd4329d23886035e9ca9a4ceb565c03a76fd615109830687a27bcd350059d6377e + "@babel/code-frame": "npm:^7.25.9" + "@babel/parser": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/ebe677273f96a36c92cc15b7aa7b11cc8bc8a3bb7a01d55b2125baca8f19cae94ff3ce15f1b1880fb8437f3a690d9f89d4e91f16fc1dc4d3eb66226d128983ab languageName: node linkType: hard -"@babel/traverse@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/traverse@npm:7.24.7" +"@babel/traverse@npm:^7.23.2, @babel/traverse@npm:^7.23.7, @babel/traverse@npm:^7.25.9, @babel/traverse@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/traverse@npm:7.26.5" dependencies: - "@babel/code-frame": "npm:^7.24.7" - "@babel/generator": "npm:^7.24.7" - "@babel/helper-environment-visitor": "npm:^7.24.7" - "@babel/helper-function-name": "npm:^7.24.7" - "@babel/helper-hoist-variables": "npm:^7.24.7" - "@babel/helper-split-export-declaration": "npm:^7.24.7" - "@babel/parser": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" + "@babel/code-frame": "npm:^7.26.2" + "@babel/generator": "npm:^7.26.5" + "@babel/parser": "npm:^7.26.5" + "@babel/template": "npm:^7.25.9" + "@babel/types": "npm:^7.26.5" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: 10c0/a5135e589c3f1972b8877805f50a084a04865ccb1d68e5e1f3b94a8841b3485da4142e33413d8fd76bc0e6444531d3adf1f59f359c11ffac452b743d835068ab - languageName: node - linkType: hard - -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/types@npm:7.24.7" - dependencies: - "@babel/helper-string-parser": "npm:^7.24.7" - "@babel/helper-validator-identifier": "npm:^7.24.7" - to-fast-properties: "npm:^2.0.0" - checksum: 10c0/d9ecbfc3eb2b05fb1e6eeea546836ac30d990f395ef3fe3f75ced777a222c3cfc4489492f72e0ce3d9a5a28860a1ce5f81e66b88cf5088909068b3ff4fab72c1 - languageName: node - linkType: hard - -"@babel/types@npm:^7.23.5, @babel/types@npm:^7.24.0, @babel/types@npm:^7.24.8, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.25.6": - version: 7.25.6 - resolution: "@babel/types@npm:7.25.6" - dependencies: - "@babel/helper-string-parser": "npm:^7.24.8" - "@babel/helper-validator-identifier": "npm:^7.24.7" - to-fast-properties: "npm:^2.0.0" - checksum: 10c0/89d45fbee24e27a05dca2d08300a26b905bd384a480448823f6723c72d3a30327c517476389b7280ce8cb9a2c48ef8f47da7f9f6d326faf6f53fd6b68237bdc4 + checksum: 10c0/0779059ecf63e31446564cf31adf170e701e8017ef02c819c57924a9a83d6b2ce41dbff3ef295589da9410497a3e575655bb8084ca470e0ab1bc193128afa9fe languageName: node linkType: hard -"@babel/types@npm:^7.8.3": - version: 7.25.7 - resolution: "@babel/types@npm:7.25.7" +"@babel/types@npm:^7.22.5, @babel/types@npm:^7.23.6, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/types@npm:7.26.5" dependencies: - "@babel/helper-string-parser": "npm:^7.25.7" - "@babel/helper-validator-identifier": "npm:^7.25.7" - to-fast-properties: "npm:^2.0.0" - checksum: 10c0/e03e1e2e08600fa1e8eb90632ac9c253dd748176c8d670d85f85b0dc83a0573b26ae748a1cbcb81f401903a3d95f43c3f4f8d516a5ed779929db27de56289633 + "@babel/helper-string-parser": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + checksum: 10c0/0278053b69d7c2b8573aa36dc5242cad95f0d965e1c0ed21ccacac6330092e59ba5949753448f6d6eccf6ad59baaef270295cc05218352e060ea8c68388638c4 languageName: node linkType: hard -"@csstools/css-parser-algorithms@npm:^2.6.3": - version: 2.7.1 - resolution: "@csstools/css-parser-algorithms@npm:2.7.1" +"@csstools/css-parser-algorithms@npm:^3.0.4": + version: 3.0.4 + resolution: "@csstools/css-parser-algorithms@npm:3.0.4" peerDependencies: - "@csstools/css-tokenizer": ^2.4.1 - checksum: 10c0/7d29bef6f5790ddb67d922ad232253bf910e4fa5293f5e4a5ed8b920ae9bd4e8171942df7d8943af23b42fd4e9fb460181394d20c97da9562e6ce98a875e8c47 + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/d411f07765e14eede17bccc6bd4f90ff303694df09aabfede3fd104b2dfacfd4fe3697cd25ddad14684c850328f3f9420ebfa9f78380892492974db24ae47dbd languageName: node linkType: hard -"@csstools/css-tokenizer@npm:^2.3.1": - version: 2.4.1 - resolution: "@csstools/css-tokenizer@npm:2.4.1" - checksum: 10c0/fe71cee85ec7372da07083d088b6a704f43e5d3d2d8071c4b8a86fae60408b559a218a43f8625bf2f0be5c7f90c8f3ad20a1aae1921119a1c02b51c310cc2b6b +"@csstools/css-tokenizer@npm:^3.0.3": + version: 3.0.3 + resolution: "@csstools/css-tokenizer@npm:3.0.3" + checksum: 10c0/c31bf410e1244b942e71798e37c54639d040cb59e0121b21712b40015fced2b0fb1ffe588434c5f8923c9cd0017cfc1c1c8f3921abc94c96edf471aac2eba5e5 languageName: node linkType: hard -"@csstools/media-query-list-parser@npm:^2.1.11": - version: 2.1.13 - resolution: "@csstools/media-query-list-parser@npm:2.1.13" +"@csstools/media-query-list-parser@npm:^4.0.2": + version: 4.0.2 + resolution: "@csstools/media-query-list-parser@npm:4.0.2" peerDependencies: - "@csstools/css-parser-algorithms": ^2.7.1 - "@csstools/css-tokenizer": ^2.4.1 - checksum: 10c0/8bf72342c15581b8f658633436d83c26a214056f6b960ff121b940271f4b1b5b07e9cc3990a73e684fb72319592f0c392408b4f0e08bbe242b2065aa456e2733 + "@csstools/css-parser-algorithms": ^3.0.4 + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/5d008a70f5d4fd96224066a433f5cdefa76cfd78a74416a20d6d5b2bb1bc8282b140e8373015d807d4dadb91daf3deb73eb13f853ec4e0479d0cb92e80c6f20d languageName: node linkType: hard -"@csstools/selector-specificity@npm:^3.1.1": - version: 3.1.1 - resolution: "@csstools/selector-specificity@npm:3.1.1" +"@csstools/selector-specificity@npm:^5.0.0": + version: 5.0.0 + resolution: "@csstools/selector-specificity@npm:5.0.0" peerDependencies: - postcss-selector-parser: ^6.0.13 - checksum: 10c0/1d4a3f8015904d6aeb3203afe0e1f6db09b191d9c1557520e3e960c9204ad852df9db4cbde848643f78a26f6ea09101b4e528dbb9193052db28258dbcc8a6e1d + postcss-selector-parser: ^7.0.0 + checksum: 10c0/186b444cabcdcdeb553bfe021f80c58bfe9ef38dcc444f2b1f34a5aab9be063ab4e753022b2d5792049c041c28cfbb78e4b707ec398459300e402030d35c07eb languageName: node linkType: hard @@ -639,48 +384,35 @@ __metadata: languageName: node linkType: hard -"@emotion/babel-plugin@npm:^11.12.0": - version: 11.12.0 - resolution: "@emotion/babel-plugin@npm:11.12.0" +"@emotion/babel-plugin@npm:^11.13.5": + version: 11.13.5 + resolution: "@emotion/babel-plugin@npm:11.13.5" dependencies: "@babel/helper-module-imports": "npm:^7.16.7" "@babel/runtime": "npm:^7.18.3" "@emotion/hash": "npm:^0.9.2" "@emotion/memoize": "npm:^0.9.0" - "@emotion/serialize": "npm:^1.2.0" + "@emotion/serialize": "npm:^1.3.3" babel-plugin-macros: "npm:^3.1.0" convert-source-map: "npm:^1.5.0" escape-string-regexp: "npm:^4.0.0" find-root: "npm:^1.1.0" source-map: "npm:^0.5.7" stylis: "npm:4.2.0" - checksum: 10c0/930ff6f8768b0c24d05896ad696be20e1c65f32ed61fb5c1488f571120a947ef0a2cf69187b17114cc76e7886f771fac150876ed7b5341324fec2377185d6573 + checksum: 10c0/8ccbfec7defd0e513cb8a1568fa179eac1e20c35fda18aed767f6c59ea7314363ebf2de3e9d2df66c8ad78928dc3dceeded84e6fa8059087cae5c280090aeeeb languageName: node linkType: hard -"@emotion/cache@npm:^11.13.0, @emotion/cache@npm:^11.13.1": - version: 11.13.1 - resolution: "@emotion/cache@npm:11.13.1" +"@emotion/cache@npm:^11.13.5, @emotion/cache@npm:^11.14.0": + version: 11.14.0 + resolution: "@emotion/cache@npm:11.14.0" dependencies: "@emotion/memoize": "npm:^0.9.0" "@emotion/sheet": "npm:^1.4.0" - "@emotion/utils": "npm:^1.4.0" + "@emotion/utils": "npm:^1.4.2" "@emotion/weak-memoize": "npm:^0.4.0" stylis: "npm:4.2.0" - checksum: 10c0/321e97d8980885737de13b47e41fd4febfbd83086f10c620f865fcbddb29b8fe198adec7e1c69cc7b137638ea9242d7c475c57f954f7ca229157fa92e368f473 - languageName: node - linkType: hard - -"@emotion/css@npm:^11.11.2": - version: 11.13.0 - resolution: "@emotion/css@npm:11.13.0" - dependencies: - "@emotion/babel-plugin": "npm:^11.12.0" - "@emotion/cache": "npm:^11.13.0" - "@emotion/serialize": "npm:^1.3.0" - "@emotion/sheet": "npm:^1.4.0" - "@emotion/utils": "npm:^1.4.0" - checksum: 10c0/45ab5d3c9c3f0a6febf965c801c5e1112889bfb3ead532372c56076e778cd20552d2e5ad5782eeb4577c6dbbd0eaa400e4dbf503026e1258a1b143e8824c05c9 + checksum: 10c0/3fa3e7a431ab6f8a47c67132a00ac8358f428c1b6c8421d4b20de9df7c18e95eec04a5a6ff5a68908f98d3280044f247b4965ac63df8302d2c94dba718769724 languageName: node linkType: hard @@ -691,12 +423,12 @@ __metadata: languageName: node linkType: hard -"@emotion/is-prop-valid@npm:^1.2.2, @emotion/is-prop-valid@npm:^1.3.0": - version: 1.3.0 - resolution: "@emotion/is-prop-valid@npm:1.3.0" +"@emotion/is-prop-valid@npm:^1.3.0": + version: 1.3.1 + resolution: "@emotion/is-prop-valid@npm:1.3.1" dependencies: "@emotion/memoize": "npm:^0.9.0" - checksum: 10c0/4620b62aaca4b3b610202513652872756d7f4a8b84b2cea6b798dd6e8ccdfe43944b956c6a6a8cb5da0b0fe61bef6caca273d198ba32b5c658df22a6c7371b1b + checksum: 10c0/123215540c816ff510737ec68dcc499c53ea4deb0bb6c2c27c03ed21046e2e69f6ad07a7a174d271c6cfcbcc9ea44e1763e0cf3875c92192f7689216174803cd languageName: node linkType: hard @@ -707,16 +439,16 @@ __metadata: languageName: node linkType: hard -"@emotion/react@npm:^11.11.4": - version: 11.13.3 - resolution: "@emotion/react@npm:11.13.3" +"@emotion/react@npm:^11.14.0": + version: 11.14.0 + resolution: "@emotion/react@npm:11.14.0" dependencies: "@babel/runtime": "npm:^7.18.3" - "@emotion/babel-plugin": "npm:^11.12.0" - "@emotion/cache": "npm:^11.13.0" - "@emotion/serialize": "npm:^1.3.1" - "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.1.0" - "@emotion/utils": "npm:^1.4.0" + "@emotion/babel-plugin": "npm:^11.13.5" + "@emotion/cache": "npm:^11.14.0" + "@emotion/serialize": "npm:^1.3.3" + "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.2.0" + "@emotion/utils": "npm:^1.4.2" "@emotion/weak-memoize": "npm:^0.4.0" hoist-non-react-statics: "npm:^3.3.1" peerDependencies: @@ -724,20 +456,20 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/a55e770b9ea35de5d35db05a7ad40a4a3f442809fa8e4fabaf56da63ac9444f09aaf691c4e75a1455dc388991ab0c0ab4e253ce67c5836f27513e45ebd01b673 + checksum: 10c0/d0864f571a9f99ec643420ef31fde09e2006d3943a6aba079980e4d5f6e9f9fecbcc54b8f617fe003c00092ff9d5241179149ffff2810cb05cf72b4620cfc031 languageName: node linkType: hard -"@emotion/serialize@npm:^1.1.4, @emotion/serialize@npm:^1.2.0, @emotion/serialize@npm:^1.3.0, @emotion/serialize@npm:^1.3.1": - version: 1.3.1 - resolution: "@emotion/serialize@npm:1.3.1" +"@emotion/serialize@npm:^1.3.3": + version: 1.3.3 + resolution: "@emotion/serialize@npm:1.3.3" dependencies: "@emotion/hash": "npm:^0.9.2" "@emotion/memoize": "npm:^0.9.0" "@emotion/unitless": "npm:^0.10.0" - "@emotion/utils": "npm:^1.4.0" + "@emotion/utils": "npm:^1.4.2" csstype: "npm:^3.0.2" - checksum: 10c0/ac7158e2881b5f3f9ca1e4d865186d38623f997de888675297e0928b202d16273e43b0a19aa021c0b706edefae31118bc97c5fab095820109d09d502dbcf2092 + checksum: 10c0/b28cb7de59de382021de2b26c0c94ebbfb16967a1b969a56fdb6408465a8993df243bfbd66430badaa6800e1834724e84895f5a6a9d97d0d224de3d77852acb4 languageName: node linkType: hard @@ -748,23 +480,23 @@ __metadata: languageName: node linkType: hard -"@emotion/styled@npm:^11.11.5": - version: 11.13.0 - resolution: "@emotion/styled@npm:11.13.0" +"@emotion/styled@npm:^11.14.0": + version: 11.14.0 + resolution: "@emotion/styled@npm:11.14.0" dependencies: "@babel/runtime": "npm:^7.18.3" - "@emotion/babel-plugin": "npm:^11.12.0" + "@emotion/babel-plugin": "npm:^11.13.5" "@emotion/is-prop-valid": "npm:^1.3.0" - "@emotion/serialize": "npm:^1.3.0" - "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.1.0" - "@emotion/utils": "npm:^1.4.0" + "@emotion/serialize": "npm:^1.3.3" + "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.2.0" + "@emotion/utils": "npm:^1.4.2" peerDependencies: "@emotion/react": ^11.0.0-rc.0 react: ">=16.8.0" peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/5e2cc85c8a2f6e7bd012731cf0b6da3aef5906225e87e8d4a5c19da50572e24d9aaf92615aa36aa863f0fe6b62a121033356e1cad62617c48bfdaa2c3cf0d8a4 + checksum: 10c0/20aa5c488e4edecf63659212fc5ba1ccff2d3a66593fc8461de7cd5fe9192a741db357ffcd270a455bd61898d7f37cd5c84b4fd2b7974dade712badf7860ca9c languageName: node linkType: hard @@ -775,19 +507,19 @@ __metadata: languageName: node linkType: hard -"@emotion/use-insertion-effect-with-fallbacks@npm:^1.1.0": - version: 1.1.0 - resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.1.0" +"@emotion/use-insertion-effect-with-fallbacks@npm:^1.2.0": + version: 1.2.0 + resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.2.0" peerDependencies: react: ">=16.8.0" - checksum: 10c0/a883480f3a7139fb4a43e71d3114ca57e2b7ae5ff204e05cd9e59251a113773b8f64eb75d3997726250aca85eb73447638c8f51930734bdd16b96762b65e58c3 + checksum: 10c0/074dbc92b96bdc09209871070076e3b0351b6b47efefa849a7d9c37ab142130767609ca1831da0055988974e3b895c1de7606e4c421fecaa27c3e56a2afd3b08 languageName: node linkType: hard -"@emotion/utils@npm:^1.4.0": - version: 1.4.0 - resolution: "@emotion/utils@npm:1.4.0" - checksum: 10c0/b2ae698d6e935f4961a8349286b5b0a6117a16e179459cbf9c8d97d5daa7d96c99876b950f09b1a793d6b295713b2c8f89544bd8c3f26b8e4db60a218a0d4c42 +"@emotion/utils@npm:^1.4.2": + version: 1.4.2 + resolution: "@emotion/utils@npm:1.4.2" + checksum: 10c0/7d0010bf60a2a8c1a033b6431469de4c80e47aeb8fd856a17c1d1f76bbc3a03161a34aeaa78803566e29681ca551e7bf9994b68e9c5f5c796159923e44f78d9a languageName: node linkType: hard @@ -805,6 +537,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/aix-ppc64@npm:0.24.2" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/android-arm64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/android-arm64@npm:0.21.5" @@ -812,6 +551,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/android-arm64@npm:0.24.2" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/android-arm@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/android-arm@npm:0.21.5" @@ -819,6 +565,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/android-arm@npm:0.24.2" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@esbuild/android-x64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/android-x64@npm:0.21.5" @@ -826,6 +579,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/android-x64@npm:0.24.2" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + "@esbuild/darwin-arm64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/darwin-arm64@npm:0.21.5" @@ -833,6 +593,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/darwin-arm64@npm:0.24.2" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/darwin-x64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/darwin-x64@npm:0.21.5" @@ -840,6 +607,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/darwin-x64@npm:0.24.2" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@esbuild/freebsd-arm64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/freebsd-arm64@npm:0.21.5" @@ -847,6 +621,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/freebsd-arm64@npm:0.24.2" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/freebsd-x64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/freebsd-x64@npm:0.21.5" @@ -854,6 +635,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/freebsd-x64@npm:0.24.2" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/linux-arm64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/linux-arm64@npm:0.21.5" @@ -861,6 +649,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-arm64@npm:0.24.2" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/linux-arm@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/linux-arm@npm:0.21.5" @@ -868,6 +663,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-arm@npm:0.24.2" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@esbuild/linux-ia32@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/linux-ia32@npm:0.21.5" @@ -875,6 +677,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ia32@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-ia32@npm:0.24.2" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/linux-loong64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/linux-loong64@npm:0.21.5" @@ -882,6 +691,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-loong64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-loong64@npm:0.24.2" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + "@esbuild/linux-mips64el@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/linux-mips64el@npm:0.21.5" @@ -889,6 +705,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-mips64el@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-mips64el@npm:0.24.2" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + "@esbuild/linux-ppc64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/linux-ppc64@npm:0.21.5" @@ -896,6 +719,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ppc64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-ppc64@npm:0.24.2" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/linux-riscv64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/linux-riscv64@npm:0.21.5" @@ -903,6 +733,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-riscv64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-riscv64@npm:0.24.2" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + "@esbuild/linux-s390x@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/linux-s390x@npm:0.21.5" @@ -910,6 +747,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-s390x@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-s390x@npm:0.24.2" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + "@esbuild/linux-x64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/linux-x64@npm:0.21.5" @@ -917,6 +761,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-x64@npm:0.24.2" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/netbsd-arm64@npm:0.24.2" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/netbsd-x64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/netbsd-x64@npm:0.21.5" @@ -924,6 +782,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/netbsd-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/netbsd-x64@npm:0.24.2" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/openbsd-arm64@npm:0.24.2" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/openbsd-x64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/openbsd-x64@npm:0.21.5" @@ -931,6 +803,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/openbsd-x64@npm:0.24.2" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/sunos-x64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/sunos-x64@npm:0.21.5" @@ -938,6 +817,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/sunos-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/sunos-x64@npm:0.24.2" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + "@esbuild/win32-arm64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/win32-arm64@npm:0.21.5" @@ -945,6 +831,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/win32-arm64@npm:0.24.2" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/win32-ia32@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/win32-ia32@npm:0.21.5" @@ -952,6 +845,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-ia32@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/win32-ia32@npm:0.24.2" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/win32-x64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/win32-x64@npm:0.21.5" @@ -959,56 +859,106 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/win32-x64@npm:0.24.2" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": - version: 4.4.0 - resolution: "@eslint-community/eslint-utils@npm:4.4.0" + version: 4.4.1 + resolution: "@eslint-community/eslint-utils@npm:4.4.1" dependencies: - eslint-visitor-keys: "npm:^3.3.0" + eslint-visitor-keys: "npm:^3.4.3" peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: 10c0/7e559c4ce59cd3a06b1b5a517b593912e680a7f981ae7affab0d01d709e99cd5647019be8fafa38c350305bc32f1f7d42c7073edde2ab536c745e365f37b607e + checksum: 10c0/2aa0ac2fc50ff3f234408b10900ed4f1a0b19352f21346ad4cc3d83a1271481bdda11097baa45d484dd564c895e0762a27a8240be7a256b3ad47129e96528252 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.12.1": + version: 4.12.1 + resolution: "@eslint-community/regexpp@npm:4.12.1" + checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6 + languageName: node + linkType: hard + +"@eslint/config-array@npm:^0.19.0": + version: 0.19.1 + resolution: "@eslint/config-array@npm:0.19.1" + dependencies: + "@eslint/object-schema": "npm:^2.1.5" + debug: "npm:^4.3.1" + minimatch: "npm:^3.1.2" + checksum: 10c0/43b01f596ddad404473beae5cf95c013d29301c72778d0f5bf8a6699939c8a9a5663dbd723b53c5f476b88b0c694f76ea145d1aa9652230d140fe1161e4a4b49 languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.6.1": - version: 4.11.0 - resolution: "@eslint-community/regexpp@npm:4.11.0" - checksum: 10c0/0f6328869b2741e2794da4ad80beac55cba7de2d3b44f796a60955b0586212ec75e6b0253291fd4aad2100ad471d1480d8895f2b54f1605439ba4c875e05e523 +"@eslint/core@npm:^0.10.0": + version: 0.10.0 + resolution: "@eslint/core@npm:0.10.0" + dependencies: + "@types/json-schema": "npm:^7.0.15" + checksum: 10c0/074018075079b3ed1f14fab9d116f11a8824cdfae3e822badf7ad546962fafe717a31e61459bad8cc59cf7070dc413ea9064ddb75c114f05b05921029cde0a64 languageName: node linkType: hard -"@eslint/eslintrc@npm:^2.1.4": - version: 2.1.4 - resolution: "@eslint/eslintrc@npm:2.1.4" +"@eslint/eslintrc@npm:^3.2.0": + version: 3.2.0 + resolution: "@eslint/eslintrc@npm:3.2.0" dependencies: ajv: "npm:^6.12.4" debug: "npm:^4.3.2" - espree: "npm:^9.6.0" - globals: "npm:^13.19.0" + espree: "npm:^10.0.1" + globals: "npm:^14.0.0" ignore: "npm:^5.2.0" import-fresh: "npm:^3.2.1" js-yaml: "npm:^4.1.0" minimatch: "npm:^3.1.2" strip-json-comments: "npm:^3.1.1" - checksum: 10c0/32f67052b81768ae876c84569ffd562491ec5a5091b0c1e1ca1e0f3c24fb42f804952fdd0a137873bc64303ba368a71ba079a6f691cee25beee9722d94cc8573 + checksum: 10c0/43867a07ff9884d895d9855edba41acf325ef7664a8df41d957135a81a477ff4df4196f5f74dc3382627e5cc8b7ad6b815c2cea1b58f04a75aced7c43414ab8b + languageName: node + linkType: hard + +"@eslint/js@npm:9.18.0, @eslint/js@npm:^9.18.0": + version: 9.18.0 + resolution: "@eslint/js@npm:9.18.0" + checksum: 10c0/3938344c5ac7feef4b73fcb30f3c3e753570cea74c24904bb5d07e9c42fcd34fcbc40f545b081356a299e11f360c9c274b348c05fb0113fc3d492e5175eee140 languageName: node linkType: hard -"@eslint/js@npm:8.57.0": - version: 8.57.0 - resolution: "@eslint/js@npm:8.57.0" - checksum: 10c0/9a518bb8625ba3350613903a6d8c622352ab0c6557a59fe6ff6178bf882bf57123f9d92aa826ee8ac3ee74b9c6203fe630e9ee00efb03d753962dcf65ee4bd94 +"@eslint/object-schema@npm:^2.1.5": + version: 2.1.5 + resolution: "@eslint/object-schema@npm:2.1.5" + checksum: 10c0/5320691ed41ecd09a55aff40ce8e56596b4eb81f3d4d6fe530c50fdd6552d88102d1c1a29d970ae798ce30849752a708772de38ded07a6f25b3da32ebea081d8 languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.11.14": - version: 0.11.14 - resolution: "@humanwhocodes/config-array@npm:0.11.14" +"@eslint/plugin-kit@npm:^0.2.5": + version: 0.2.5 + resolution: "@eslint/plugin-kit@npm:0.2.5" dependencies: - "@humanwhocodes/object-schema": "npm:^2.0.2" - debug: "npm:^4.3.1" - minimatch: "npm:^3.0.5" - checksum: 10c0/66f725b4ee5fdd8322c737cb5013e19fac72d4d69c8bf4b7feb192fcb83442b035b92186f8e9497c220e58b2d51a080f28a73f7899bc1ab288c3be172c467541 + "@eslint/core": "npm:^0.10.0" + levn: "npm:^0.4.1" + checksum: 10c0/ba9832b8409af618cf61791805fe201dd62f3c82c783adfcec0f5cd391e68b40beaecb47b9a3209e926dbcab65135f410cae405b69a559197795793399f61176 + languageName: node + linkType: hard + +"@humanfs/core@npm:^0.19.1": + version: 0.19.1 + resolution: "@humanfs/core@npm:0.19.1" + checksum: 10c0/aa4e0152171c07879b458d0e8a704b8c3a89a8c0541726c6b65b81e84fd8b7564b5d6c633feadc6598307d34564bd53294b533491424e8e313d7ab6c7bc5dc67 + languageName: node + linkType: hard + +"@humanfs/node@npm:^0.16.6": + version: 0.16.6 + resolution: "@humanfs/node@npm:0.16.6" + dependencies: + "@humanfs/core": "npm:^0.19.1" + "@humanwhocodes/retry": "npm:^0.3.0" + checksum: 10c0/8356359c9f60108ec204cbd249ecd0356667359b2524886b357617c4a7c3b6aace0fd5a369f63747b926a762a88f8a25bc066fa1778508d110195ce7686243e1 languageName: node linkType: hard @@ -1019,10 +969,17 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^2.0.2": - version: 2.0.3 - resolution: "@humanwhocodes/object-schema@npm:2.0.3" - checksum: 10c0/80520eabbfc2d32fe195a93557cef50dfe8c8905de447f022675aaf66abc33ae54098f5ea78548d925aa671cd4ab7c7daa5ad704fe42358c9b5e7db60f80696c +"@humanwhocodes/retry@npm:^0.3.0": + version: 0.3.1 + resolution: "@humanwhocodes/retry@npm:0.3.1" + checksum: 10c0/f0da1282dfb45e8120480b9e2e275e2ac9bbe1cf016d046fdad8e27cc1285c45bb9e711681237944445157b430093412b4446c1ab3fc4bb037861b5904101d3b + languageName: node + linkType: hard + +"@humanwhocodes/retry@npm:^0.4.1": + version: 0.4.1 + resolution: "@humanwhocodes/retry@npm:0.4.1" + checksum: 10c0/be7bb6841c4c01d0b767d9bb1ec1c9359ee61421ce8ba66c249d035c5acdfd080f32d55a5c9e859cdd7868788b8935774f65b2caf24ec0b7bd7bf333791f063b languageName: node linkType: hard @@ -1040,14 +997,23 @@ __metadata: languageName: node linkType: hard +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: "npm:^7.0.4" + checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 + languageName: node + linkType: hard + "@jridgewell/gen-mapping@npm:^0.3.5": - version: 0.3.5 - resolution: "@jridgewell/gen-mapping@npm:0.3.5" + version: 0.3.8 + resolution: "@jridgewell/gen-mapping@npm:0.3.8" dependencies: "@jridgewell/set-array": "npm:^1.2.1" "@jridgewell/sourcemap-codec": "npm:^1.4.10" "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10c0/1be4fd4a6b0f41337c4f5fdf4afc3bd19e39c3691924817108b82ffcb9c9e609c273f936932b9fba4b3a298ce2eb06d9bff4eb1cc3bd81c4f4ee1b4917e25feb + checksum: 10c0/c668feaf86c501d7c804904a61c23c67447b2137b813b9ce03eca82cb9d65ac7006d766c218685d76e3d72828279b6ee26c347aa1119dab23fbaf36aed51585a languageName: node linkType: hard @@ -1082,60 +1048,65 @@ __metadata: languageName: node linkType: hard -"@mui/core-downloads-tracker@npm:^6.1.0": - version: 6.1.0 - resolution: "@mui/core-downloads-tracker@npm:6.1.0" - checksum: 10c0/9cf0470456567b51450fe1e60b53aac7fb95bdb47ba3400153d29ae3c78c737f9fd1019df24ca553a6127154b92c7ab68547981ab3539ecc9a34a6e2135aac56 +"@keyv/serialize@npm:^1.0.2": + version: 1.0.2 + resolution: "@keyv/serialize@npm:1.0.2" + dependencies: + buffer: "npm:^6.0.3" + checksum: 10c0/31c5cb0938d22ce890314befc4d00c248c4c9be9664885978d6449b1787993dbc91999041076d53437888bb5f4280233276fbc4c72f97955d111d7a6ccd4cd67 languageName: node linkType: hard -"@mui/icons-material@npm:^6.1.0": - version: 6.1.0 - resolution: "@mui/icons-material@npm:6.1.0" +"@mjackson/node-fetch-server@npm:^0.2.0": + version: 0.2.0 + resolution: "@mjackson/node-fetch-server@npm:0.2.0" + checksum: 10c0/f22eb4cd50801f07eb187df666d0987a7bd5662caaf005faf62e035e00d7b92d6236852f69e9331dabe7737c0f69eabe967ef2d695f3d2e844d439f4489d6f36 + languageName: node + linkType: hard + +"@mui/core-downloads-tracker@npm:^6.4.1": + version: 6.4.1 + resolution: "@mui/core-downloads-tracker@npm:6.4.1" + checksum: 10c0/5c35592eecb6b9b64b23003975a8ce20fadb9e9b712a78dd552b5ea835d06e8e4d7b7cb84f471f5658b5285de317a860b40597ad3c5e494e84f0ae0daf35fd6b + languageName: node + linkType: hard + +"@mui/icons-material@npm:^6.4.1": + version: 6.4.1 + resolution: "@mui/icons-material@npm:6.4.1" dependencies: - "@babel/runtime": "npm:^7.25.6" + "@babel/runtime": "npm:^7.26.0" peerDependencies: - "@mui/material": ^6.1.0 + "@mui/material": ^6.4.1 "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/4ca4cc1e39c9a09ab5d9589bb795f57e28aa99a7bd9a1715b4e86c501788a05e28db24c78eecf621698ebfc4b6fb316ea1f6257380948f8c8d36a1ea267a7703 - languageName: node - linkType: hard - -"@mui/material-pigment-css@npm:^6.1.0": - version: 6.1.0 - resolution: "@mui/material-pigment-css@npm:6.1.0" - dependencies: - "@babel/runtime": "npm:^7.25.6" - "@mui/system": "npm:6.1.0" - "@pigment-css/react": "npm:0.0.22" - checksum: 10c0/f8d67ef601d31f50a2cf39ec257ff7b0ddcbc71222fd78593ca8d475d44a4e9d92af11fa18e2a1ce3a7dcba0a6ef8bf1c944ba50c8a8f06456b85fc36f9f9be3 + checksum: 10c0/f551aea11f0c3a6ff0336333e1cf28b69d7965e5984643067e5f8563eabf1434dee910c9b4beb530f785f191b0ec14520d9c41fd8ee6649f4f8d26f831f02ba8 languageName: node linkType: hard -"@mui/material@npm:^6.1.0": - version: 6.1.0 - resolution: "@mui/material@npm:6.1.0" +"@mui/material@npm:^6.4.1": + version: 6.4.1 + resolution: "@mui/material@npm:6.4.1" dependencies: - "@babel/runtime": "npm:^7.25.6" - "@mui/core-downloads-tracker": "npm:^6.1.0" - "@mui/system": "npm:^6.1.0" - "@mui/types": "npm:^7.2.16" - "@mui/utils": "npm:^6.1.0" + "@babel/runtime": "npm:^7.26.0" + "@mui/core-downloads-tracker": "npm:^6.4.1" + "@mui/system": "npm:^6.4.1" + "@mui/types": "npm:^7.2.21" + "@mui/utils": "npm:^6.4.1" "@popperjs/core": "npm:^2.11.8" - "@types/react-transition-group": "npm:^4.4.11" + "@types/react-transition-group": "npm:^4.4.12" clsx: "npm:^2.1.1" csstype: "npm:^3.1.3" prop-types: "npm:^15.8.1" - react-is: "npm:^18.3.1" + react-is: "npm:^19.0.0" react-transition-group: "npm:^4.4.5" peerDependencies: "@emotion/react": ^11.5.0 "@emotion/styled": ^11.3.0 - "@mui/material-pigment-css": ^6.1.0 + "@mui/material-pigment-css": ^6.4.1 "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -1148,33 +1119,16 @@ __metadata: optional: true "@types/react": optional: true - checksum: 10c0/fcfd1f0ebbda77e5d1afcf6883becd52965840b61c55e3e73f18b28b67c9211ffd371055697992d886b371ca3cd8860c3e55aa22a84512b36f8bd5f4fabb43a8 - languageName: node - linkType: hard - -"@mui/private-theming@npm:^6.0.2": - version: 6.0.2 - resolution: "@mui/private-theming@npm:6.0.2" - dependencies: - "@babel/runtime": "npm:^7.25.0" - "@mui/utils": "npm:^6.0.2" - prop-types: "npm:^15.8.1" - peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/981bef131b755256d2942f92c7ca22a1baf11ef19f76824e44751d0eca0dc0ff62361b744d46efc5746c82816415597ec5e6248307619ccd79f79d70e98938d7 + checksum: 10c0/c5ad8ab4339e145cac815cd9fdd9c909d5e2e5edf4997b8afe5edc320f3a020ddb857b5939f6a4453a34d996e3f334804c3858c5dc5f0bfede087e7d6b5e574e languageName: node linkType: hard -"@mui/private-theming@npm:^6.1.0": - version: 6.1.0 - resolution: "@mui/private-theming@npm:6.1.0" +"@mui/private-theming@npm:^6.4.1": + version: 6.4.1 + resolution: "@mui/private-theming@npm:6.4.1" dependencies: - "@babel/runtime": "npm:^7.25.6" - "@mui/utils": "npm:^6.1.0" + "@babel/runtime": "npm:^7.26.0" + "@mui/utils": "npm:^6.4.1" prop-types: "npm:^15.8.1" peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -1182,37 +1136,17 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/b5ca8cd192bb2979dabb5af91faeb3873f652f4129661eee2feb3473b54a08b78140756154f1128d9b4c1a1d048d97bd186f7c353e6551428b64912dae47a549 - languageName: node - linkType: hard - -"@mui/styled-engine@npm:^6.0.2": - version: 6.0.2 - resolution: "@mui/styled-engine@npm:6.0.2" - dependencies: - "@babel/runtime": "npm:^7.25.0" - "@emotion/cache": "npm:^11.13.1" - csstype: "npm:^3.1.3" - prop-types: "npm:^15.8.1" - peerDependencies: - "@emotion/react": ^11.4.1 - "@emotion/styled": ^11.3.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - "@emotion/react": - optional: true - "@emotion/styled": - optional: true - checksum: 10c0/36eb8298805e005dec6e564c83e63313f2f654bdac61d31b99785178478f5a9673660f67796633a0beeacc3c66e4bc3b2f33ec473d2cce400dfca707c8e10b37 + checksum: 10c0/5b6936e6dff6218373579f901aabba01eea1953e97a5b4b695736aeebca2d39fc7c2b4d0e54ab064d1ba99a6ffce0d907098791ecec28795f7da25c1bd0d33cb languageName: node linkType: hard -"@mui/styled-engine@npm:^6.1.0": - version: 6.1.0 - resolution: "@mui/styled-engine@npm:6.1.0" +"@mui/styled-engine@npm:^6.4.0": + version: 6.4.0 + resolution: "@mui/styled-engine@npm:6.4.0" dependencies: - "@babel/runtime": "npm:^7.25.6" - "@emotion/cache": "npm:^11.13.1" + "@babel/runtime": "npm:^7.26.0" + "@emotion/cache": "npm:^11.13.5" + "@emotion/serialize": "npm:^1.3.3" "@emotion/sheet": "npm:^1.4.0" csstype: "npm:^3.1.3" prop-types: "npm:^15.8.1" @@ -1225,47 +1159,19 @@ __metadata: optional: true "@emotion/styled": optional: true - checksum: 10c0/2466bb2d990ae05c29a3643d0d9687dc901e396e12b352ddf8278698c5cc1b6fa565fc38620e04e436f17f0d340cf999cf51b3beb1779f7188e4e9099a4fe5ab - languageName: node - linkType: hard - -"@mui/system@npm:6.1.0, @mui/system@npm:^6.1.0": - version: 6.1.0 - resolution: "@mui/system@npm:6.1.0" - dependencies: - "@babel/runtime": "npm:^7.25.6" - "@mui/private-theming": "npm:^6.1.0" - "@mui/styled-engine": "npm:^6.1.0" - "@mui/types": "npm:^7.2.16" - "@mui/utils": "npm:^6.1.0" - clsx: "npm:^2.1.1" - csstype: "npm:^3.1.3" - prop-types: "npm:^15.8.1" - peerDependencies: - "@emotion/react": ^11.5.0 - "@emotion/styled": ^11.3.0 - "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - "@emotion/react": - optional: true - "@emotion/styled": - optional: true - "@types/react": - optional: true - checksum: 10c0/8c545e828404532f4e2ae7b54d934ff32d3722322997415e2b5de21250b86174a8ca799fc8103e96ddab8875f866f74dfffd360633f8c49d89712ac56663899d + checksum: 10c0/bff35147ca9ef586679b53786d840e98837f0c1e5bf10a3510d4b2b68c340ae4ab69befe94b69ef25f6846bada5b3c355d25fa3a179d1598499e28c51f28d5d2 languageName: node linkType: hard -"@mui/system@npm:^6.0.0-alpha.6": - version: 6.0.2 - resolution: "@mui/system@npm:6.0.2" +"@mui/system@npm:^6.4.1": + version: 6.4.1 + resolution: "@mui/system@npm:6.4.1" dependencies: - "@babel/runtime": "npm:^7.25.0" - "@mui/private-theming": "npm:^6.0.2" - "@mui/styled-engine": "npm:^6.0.2" - "@mui/types": "npm:^7.2.16" - "@mui/utils": "npm:^6.0.2" + "@babel/runtime": "npm:^7.26.0" + "@mui/private-theming": "npm:^6.4.1" + "@mui/styled-engine": "npm:^6.4.0" + "@mui/types": "npm:^7.2.21" + "@mui/utils": "npm:^6.4.1" clsx: "npm:^2.1.1" csstype: "npm:^3.1.3" prop-types: "npm:^15.8.1" @@ -1281,59 +1187,39 @@ __metadata: optional: true "@types/react": optional: true - checksum: 10c0/bcb77617467f2b6ad22dd7d5c384f8e1a86511065f4384d7d45d4e2ca34db383454556f59a97f44fbd82bbe38ee0f45fb25e22fb39536e7f42d99c3ee88dcdb2 - languageName: node - linkType: hard - -"@mui/types@npm:^7.2.16": - version: 7.2.16 - resolution: "@mui/types@npm:7.2.16" - peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/e51189d464e4217616a0d2bf45468b949c5b660b154fa03f1153456e4ef1422157454ed442dc9bde6a247166c8db7de6c405c629829525e3ca500ee9cf48f507 + checksum: 10c0/34d731fb5faf1a6242c9faca5672a4b8722ac97cf5d1fd58cf85cce093cfbd2249ed57dd4c33e8f3b879c611e0fab56bb9e0e8fc1b7c8a49cbe4dd39ba32f98d languageName: node linkType: hard -"@mui/utils@npm:^6.0.0-alpha.6, @mui/utils@npm:^6.0.2": - version: 6.0.2 - resolution: "@mui/utils@npm:6.0.2" - dependencies: - "@babel/runtime": "npm:^7.25.0" - "@mui/types": "npm:^7.2.16" - "@types/prop-types": "npm:^15.7.12" - clsx: "npm:^2.1.1" - prop-types: "npm:^15.8.1" - react-is: "npm:^18.3.1" +"@mui/types@npm:^7.2.21": + version: 7.2.21 + resolution: "@mui/types@npm:7.2.21" peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/7a7d45878727bb154cd2bed4b8bbe536f24cda9431688e64a87f82dfe313e82cb948865cacc3c416588a3988d5715f3546c636e2b341c6fa0f5409bbe287a133 + checksum: 10c0/c0038ae402a3cfb2805a19167362fb5ac2ca1403f0ef3dad688d1e2276afe757b69d5fb1e3af4cd0e985b9221d287fd863c5b00f29fd07a276c7de9e3423a0f3 languageName: node linkType: hard -"@mui/utils@npm:^6.1.0": - version: 6.1.0 - resolution: "@mui/utils@npm:6.1.0" +"@mui/utils@npm:^6.4.1": + version: 6.4.1 + resolution: "@mui/utils@npm:6.4.1" dependencies: - "@babel/runtime": "npm:^7.25.6" - "@mui/types": "npm:^7.2.16" - "@types/prop-types": "npm:^15.7.12" + "@babel/runtime": "npm:^7.26.0" + "@mui/types": "npm:^7.2.21" + "@types/prop-types": "npm:^15.7.14" clsx: "npm:^2.1.1" prop-types: "npm:^15.8.1" - react-is: "npm:^18.3.1" + react-is: "npm:^19.0.0" peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/a20120b8ee2ebbc0774ab54bd92d513aefc35f4f1caafe7fe4bb7aec49389e553033cb74f4b8adc8292b84485cce7965f6570dc902b8195306a64a97cff9a8fd + checksum: 10c0/c0cfb8737db7c5709ce35ebdf739c5014914a1344e1b305d13a75b061b970656777eaf01f6fbdb8f209da91c086ab36dd3f5ddc1c94237c5868a383cdd1aad81 languageName: node linkType: hard @@ -1354,7 +1240,7 @@ __metadata: languageName: node linkType: hard -"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": +"@nodelib/fs.walk@npm:^1.2.3": version: 1.2.8 resolution: "@nodelib/fs.walk@npm:1.2.8" dependencies: @@ -1364,103 +1250,65 @@ __metadata: languageName: node linkType: hard -"@npmcli/agent@npm:^2.0.0": - version: 2.2.2 - resolution: "@npmcli/agent@npm:2.2.2" +"@npmcli/agent@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/agent@npm:3.0.0" dependencies: agent-base: "npm:^7.1.0" http-proxy-agent: "npm:^7.0.0" https-proxy-agent: "npm:^7.0.1" lru-cache: "npm:^10.0.1" socks-proxy-agent: "npm:^8.0.3" - checksum: 10c0/325e0db7b287d4154ecd164c0815c08007abfb07653cc57bceded17bb7fd240998a3cbdbe87d700e30bef494885eccc725ab73b668020811d56623d145b524ae + checksum: 10c0/efe37b982f30740ee77696a80c196912c274ecd2cb243bc6ae7053a50c733ce0f6c09fda085145f33ecf453be19654acca74b69e81eaad4c90f00ccffe2f9271 languageName: node linkType: hard -"@npmcli/fs@npm:^3.1.0": - version: 3.1.1 - resolution: "@npmcli/fs@npm:3.1.1" +"@npmcli/fs@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/fs@npm:4.0.0" dependencies: semver: "npm:^7.3.5" - checksum: 10c0/c37a5b4842bfdece3d14dfdb054f73fe15ed2d3da61b34ff76629fb5b1731647c49166fd2a8bf8b56fcfa51200382385ea8909a3cbecdad612310c114d3f6c99 - languageName: node - linkType: hard - -"@pigment-css/react@npm:0.0.22": - version: 0.0.22 - resolution: "@pigment-css/react@npm:0.0.22" - dependencies: - "@babel/core": "npm:^7.24.4" - "@babel/helper-module-imports": "npm:^7.24.3" - "@babel/helper-plugin-utils": "npm:^7.24.0" - "@babel/parser": "npm:^7.24.4" - "@babel/types": "npm:^7.24.0" - "@emotion/css": "npm:^11.11.2" - "@emotion/is-prop-valid": "npm:^1.2.2" - "@emotion/react": "npm:^11.11.4" - "@emotion/serialize": "npm:^1.1.4" - "@emotion/styled": "npm:^11.11.5" - "@mui/system": "npm:^6.0.0-alpha.6" - "@mui/utils": "npm:^6.0.0-alpha.6" - "@wyw-in-js/processor-utils": "npm:^0.5.4" - "@wyw-in-js/shared": "npm:^0.5.4" - "@wyw-in-js/transform": "npm:^0.5.4" - clsx: "npm:^2.1.0" - cssesc: "npm:^3.0.0" - csstype: "npm:^3.1.3" - lodash: "npm:^4.17.21" - stylis: "npm:^4.3.1" - stylis-plugin-rtl: "npm:^2.1.1" - peerDependencies: - react: ^17.0.0 || ^18.0.0 - checksum: 10c0/3348cc91f0e50bf568f37acadcbf5fdeabb7788d2d244ee5c8c9e8bbdd6a3159c1562b5e6f46588a80e65abc6afa329d3543a8f2d9251d7e901552ad852508ca - languageName: node - linkType: hard - -"@pigment-css/react@npm:^0.0.23": - version: 0.0.23 - resolution: "@pigment-css/react@npm:0.0.23" - dependencies: - "@babel/core": "npm:^7.24.4" - "@babel/helper-module-imports": "npm:^7.24.3" - "@babel/helper-plugin-utils": "npm:^7.24.0" - "@babel/parser": "npm:^7.24.4" - "@babel/types": "npm:^7.24.0" - "@emotion/css": "npm:^11.11.2" - "@emotion/is-prop-valid": "npm:^1.2.2" - "@emotion/react": "npm:^11.11.4" - "@emotion/serialize": "npm:^1.1.4" - "@emotion/styled": "npm:^11.11.5" - "@mui/system": "npm:^6.0.0-alpha.6" - "@mui/utils": "npm:^6.0.0-alpha.6" - "@wyw-in-js/processor-utils": "npm:^0.5.4" - "@wyw-in-js/shared": "npm:^0.5.4" - "@wyw-in-js/transform": "npm:^0.5.4" - clsx: "npm:^2.1.0" - cssesc: "npm:^3.0.0" - csstype: "npm:^3.1.3" - lodash: "npm:^4.17.21" - stylis: "npm:^4.3.1" - stylis-plugin-rtl: "npm:^2.1.1" - peerDependencies: - react: ^17.0.0 || ^18.0.0 - checksum: 10c0/561fb2476ca4b50635c2c81c7fe613546278abe359aeb585ffcfe1bde6e50f7bed7fd1ee5676cbb5cbc29a37780bc7249d4106ce3a225171c68b0f0fa9221fd8 + checksum: 10c0/c90935d5ce670c87b6b14fab04a965a3b8137e585f8b2a6257263bd7f97756dd736cb165bb470e5156a9e718ecd99413dccc54b1138c1a46d6ec7cf325982fe5 languageName: node linkType: hard -"@pigment-css/vite-plugin@npm:^0.0.23": - version: 0.0.23 - resolution: "@pigment-css/vite-plugin@npm:0.0.23" +"@npmcli/git@npm:^4.1.0": + version: 4.1.0 + resolution: "@npmcli/git@npm:4.1.0" dependencies: - "@babel/core": "npm:^7.24.4" - "@babel/preset-typescript": "npm:^7.24.1" - "@pigment-css/react": "npm:^0.0.23" - "@wyw-in-js/shared": "npm:^0.5.4" - "@wyw-in-js/transform": "npm:^0.5.4" - babel-plugin-define-var: "npm:^0.1.0" - peerDependencies: - vite: ^4.0.0 || ^5.0.0 - checksum: 10c0/bfcb82faa5ce097da9c7b91c07ece901418f716fea5e7eacd8dec0ce21b6397694cbaf59e2876df42a2f8812e3604b7cd99eb606706b295db53b82026cf1685e + "@npmcli/promise-spawn": "npm:^6.0.0" + lru-cache: "npm:^7.4.4" + npm-pick-manifest: "npm:^8.0.0" + proc-log: "npm:^3.0.0" + promise-inflight: "npm:^1.0.1" + promise-retry: "npm:^2.0.1" + semver: "npm:^7.3.5" + which: "npm:^3.0.0" + checksum: 10c0/78591ba8f03de3954a5b5b83533455696635a8f8140c74038685fec4ee28674783a5b34a3d43840b2c5f9aa37fd0dce57eaf4ef136b52a8ec2ee183af2e40724 + languageName: node + linkType: hard + +"@npmcli/package-json@npm:^4.0.1": + version: 4.0.1 + resolution: "@npmcli/package-json@npm:4.0.1" + dependencies: + "@npmcli/git": "npm:^4.1.0" + glob: "npm:^10.2.2" + hosted-git-info: "npm:^6.1.1" + json-parse-even-better-errors: "npm:^3.0.0" + normalize-package-data: "npm:^5.0.0" + proc-log: "npm:^3.0.0" + semver: "npm:^7.5.3" + checksum: 10c0/61adec288372827e482d4c6bda8186e239b1419a6f018552a0444520720022fb2903d08438f32881fe2eccabb8cf29dcb1c5c5c62c4fc970d79ad71fe9a41e46 + languageName: node + linkType: hard + +"@npmcli/promise-spawn@npm:^6.0.0": + version: 6.0.2 + resolution: "@npmcli/promise-spawn@npm:6.0.2" + dependencies: + which: "npm:^3.0.0" + checksum: 10c0/d0696b8d9f7e16562cd1e520e4919000164be042b5c9998a45b4e87d41d9619fcecf2a343621c6fa85ed2671cbe87ab07e381a7faea4e5132c371dbb05893f31 languageName: node linkType: hard @@ -1471,13 +1319,6 @@ __metadata: languageName: node linkType: hard -"@pkgr/core@npm:^0.1.0": - version: 0.1.1 - resolution: "@pkgr/core@npm:0.1.1" - checksum: 10c0/3f7536bc7f57320ab2cf96f8973664bef624710c403357429fbf680a5c3b4843c1dbd389bb43daa6b1f6f1f007bb082f5abcb76bb2b5dc9f421647743b71d3d8 - languageName: node - linkType: hard - "@popperjs/core@npm:^2.11.8": version: 2.11.8 resolution: "@popperjs/core@npm:2.11.8" @@ -1485,195 +1326,308 @@ __metadata: languageName: node linkType: hard -"@remix-run/router@npm:1.17.1": - version: 1.17.1 - resolution: "@remix-run/router@npm:1.17.1" - checksum: 10c0/bee1631feb03975b64e1c7b574da432a05095dda2ff0f164c737e4952841a58d7b9861de87bd13a977fd970c74dcf8c558fc2d26c6ec01a9ae9041b1b4430869 +"@react-router/dev@npm:^7.1.3": + version: 7.1.3 + resolution: "@react-router/dev@npm:7.1.3" + dependencies: + "@babel/core": "npm:^7.21.8" + "@babel/generator": "npm:^7.21.5" + "@babel/parser": "npm:^7.21.8" + "@babel/plugin-syntax-decorators": "npm:^7.22.10" + "@babel/plugin-syntax-jsx": "npm:^7.21.4" + "@babel/preset-typescript": "npm:^7.21.5" + "@babel/traverse": "npm:^7.23.2" + "@babel/types": "npm:^7.22.5" + "@npmcli/package-json": "npm:^4.0.1" + "@react-router/node": "npm:7.1.3" + arg: "npm:^5.0.1" + babel-dead-code-elimination: "npm:^1.0.6" + chokidar: "npm:^4.0.0" + dedent: "npm:^1.5.3" + es-module-lexer: "npm:^1.3.1" + exit-hook: "npm:2.2.1" + fs-extra: "npm:^10.0.0" + gunzip-maybe: "npm:^1.4.2" + jsesc: "npm:3.0.2" + lodash: "npm:^4.17.21" + pathe: "npm:^1.1.2" + picocolors: "npm:^1.1.1" + picomatch: "npm:^2.3.1" + prettier: "npm:^2.7.1" + react-refresh: "npm:^0.14.0" + semver: "npm:^7.3.7" + set-cookie-parser: "npm:^2.6.0" + valibot: "npm:^0.41.0" + vite-node: "npm:3.0.0-beta.2" + peerDependencies: + "@react-router/serve": ^7.1.3 + react-router: ^7.1.3 + typescript: ^5.1.0 + vite: ^5.1.0 || ^6.0.0 + wrangler: ^3.28.2 + peerDependenciesMeta: + "@react-router/serve": + optional: true + typescript: + optional: true + wrangler: + optional: true + bin: + react-router: bin.js + checksum: 10c0/3d0e8f910ca30293b9f2d86a0e7c3d33eb8187182295c528fadc6eb12ff70cb977d22d8845261344e893ada7efd19486f38f49eaae1427b41449a9572f83e87d + languageName: node + linkType: hard + +"@react-router/express@npm:7.1.3": + version: 7.1.3 + resolution: "@react-router/express@npm:7.1.3" + dependencies: + "@react-router/node": "npm:7.1.3" + peerDependencies: + express: ^4.17.1 + react-router: 7.1.3 + typescript: ^5.1.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/530a64cec25bca99f4433186784b7effe591dc90956a173f89795bed90561a879544b41b5a90c1688ae38102cb666fecea252237b64b31a007803a3dff878140 + languageName: node + linkType: hard + +"@react-router/node@npm:7.1.3, @react-router/node@npm:^7.1.3": + version: 7.1.3 + resolution: "@react-router/node@npm:7.1.3" + dependencies: + "@mjackson/node-fetch-server": "npm:^0.2.0" + source-map-support: "npm:^0.5.21" + stream-slice: "npm:^0.1.2" + undici: "npm:^6.19.2" + peerDependencies: + react-router: 7.1.3 + typescript: ^5.1.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/fc9abbaa9315e9433fda52677470e266af03be528a18eda89f598431b68c626abbde3109d9ef2c17eaf5c30fe6a63c7e9f77f5a152059eaae48a2cf75b6937bb + languageName: node + linkType: hard + +"@react-router/serve@npm:^7.1.3": + version: 7.1.3 + resolution: "@react-router/serve@npm:7.1.3" + dependencies: + "@react-router/express": "npm:7.1.3" + "@react-router/node": "npm:7.1.3" + compression: "npm:^1.7.4" + express: "npm:^4.19.2" + get-port: "npm:5.1.1" + morgan: "npm:^1.10.0" + source-map-support: "npm:^0.5.21" + peerDependencies: + react-router: 7.1.3 + bin: + react-router-serve: bin.js + checksum: 10c0/1f383e2f32c4b65f967a3abe280aa7ac0df85893d711e13e95d1f22b0b89987fdab455c8ee77e91e91d05ed9f6ffeb183915fe34228c069c23435491c2c0ad98 languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.18.1": - version: 4.18.1 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.18.1" +"@rollup/rollup-android-arm-eabi@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.31.0" conditions: os=android & cpu=arm languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.18.1": - version: 4.18.1 - resolution: "@rollup/rollup-android-arm64@npm:4.18.1" +"@rollup/rollup-android-arm64@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-android-arm64@npm:4.31.0" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.18.1": - version: 4.18.1 - resolution: "@rollup/rollup-darwin-arm64@npm:4.18.1" +"@rollup/rollup-darwin-arm64@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-darwin-arm64@npm:4.31.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.18.1": - version: 4.18.1 - resolution: "@rollup/rollup-darwin-x64@npm:4.18.1" +"@rollup/rollup-darwin-x64@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-darwin-x64@npm:4.31.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.18.1": - version: 4.18.1 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.18.1" +"@rollup/rollup-freebsd-arm64@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.31.0" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-x64@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-freebsd-x64@npm:4.31.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.31.0" conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.18.1": - version: 4.18.1 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.18.1" +"@rollup/rollup-linux-arm-musleabihf@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.31.0" conditions: os=linux & cpu=arm & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.18.1": - version: 4.18.1 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.18.1" +"@rollup/rollup-linux-arm64-gnu@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.31.0" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.18.1": - version: 4.18.1 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.18.1" +"@rollup/rollup-linux-arm64-musl@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.31.0" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.18.1": - version: 4.18.1 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.18.1" +"@rollup/rollup-linux-loongarch64-gnu@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.31.0" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.31.0" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.18.1": - version: 4.18.1 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.18.1" +"@rollup/rollup-linux-riscv64-gnu@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.31.0" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.18.1": - version: 4.18.1 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.18.1" +"@rollup/rollup-linux-s390x-gnu@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.31.0" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.18.1": - version: 4.18.1 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.18.1" +"@rollup/rollup-linux-x64-gnu@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.31.0" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.18.1": - version: 4.18.1 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.18.1" +"@rollup/rollup-linux-x64-musl@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.31.0" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.18.1": - version: 4.18.1 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.18.1" +"@rollup/rollup-win32-arm64-msvc@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.31.0" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.18.1": - version: 4.18.1 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.18.1" +"@rollup/rollup-win32-ia32-msvc@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.31.0" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.18.1": - version: 4.18.1 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.18.1" +"@rollup/rollup-win32-x64-msvc@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.31.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@types/babel__core@npm:^7.20.5": - version: 7.20.5 - resolution: "@types/babel__core@npm:7.20.5" - dependencies: - "@babel/parser": "npm:^7.20.7" - "@babel/types": "npm:^7.20.7" - "@types/babel__generator": "npm:*" - "@types/babel__template": "npm:*" - "@types/babel__traverse": "npm:*" - checksum: 10c0/bdee3bb69951e833a4b811b8ee9356b69a61ed5b7a23e1a081ec9249769117fa83aaaf023bb06562a038eb5845155ff663e2d5c75dd95c1d5ccc91db012868ff +"@tanstack/query-core@npm:5.64.2": + version: 5.64.2 + resolution: "@tanstack/query-core@npm:5.64.2" + checksum: 10c0/96dfaa334d2e3aeb3bcd55a3b8b3f3b4f7283b435d90681302ca6c08d0a597a5745c3c790d0242908266af6188efe804aac3c82ca8ed3fd7cd73c24220d93acc languageName: node linkType: hard -"@types/babel__generator@npm:*": - version: 7.6.8 - resolution: "@types/babel__generator@npm:7.6.8" - dependencies: - "@babel/types": "npm:^7.0.0" - checksum: 10c0/f0ba105e7d2296bf367d6e055bb22996886c114261e2cb70bf9359556d0076c7a57239d019dee42bb063f565bade5ccb46009bce2044b2952d964bf9a454d6d2 +"@tanstack/query-devtools@npm:5.64.2": + version: 5.64.2 + resolution: "@tanstack/query-devtools@npm:5.64.2" + checksum: 10c0/6ed57ad727be66c79ce82149cee1ad94255af2e2e29a0985c42f5bd589a206c8dcdc7a9c8611496a55e6463bd047c55fe0cf1f59455cb2735aee1090ce37ae0b languageName: node linkType: hard -"@types/babel__template@npm:*": - version: 7.4.4 - resolution: "@types/babel__template@npm:7.4.4" +"@tanstack/react-query-devtools@npm:^5.64.2": + version: 5.64.2 + resolution: "@tanstack/react-query-devtools@npm:5.64.2" dependencies: - "@babel/parser": "npm:^7.1.0" - "@babel/types": "npm:^7.0.0" - checksum: 10c0/cc84f6c6ab1eab1427e90dd2b76ccee65ce940b778a9a67be2c8c39e1994e6f5bbc8efa309f6cea8dc6754994524cd4d2896558df76d92e7a1f46ecffee7112b + "@tanstack/query-devtools": "npm:5.64.2" + peerDependencies: + "@tanstack/react-query": ^5.64.2 + react: ^18 || ^19 + checksum: 10c0/d4dfeb2f3b91848c724668c1226a69dfec311ccaa830d4dea8b5de2c2e42d762b5c1d03f44dff8d95651d0ec203dd98535b330725b2e38d0ae6f41f4f5d9c1b4 languageName: node linkType: hard -"@types/babel__traverse@npm:*": - version: 7.20.6 - resolution: "@types/babel__traverse@npm:7.20.6" +"@tanstack/react-query@npm:^5.64.2": + version: 5.64.2 + resolution: "@tanstack/react-query@npm:5.64.2" dependencies: - "@babel/types": "npm:^7.20.7" - checksum: 10c0/7ba7db61a53e28cac955aa99af280d2600f15a8c056619c05b6fc911cbe02c61aa4f2823299221b23ce0cce00b294c0e5f618ec772aa3f247523c2e48cf7b888 + "@tanstack/query-core": "npm:5.64.2" + peerDependencies: + react: ^18 || ^19 + checksum: 10c0/4e81c8e922ced8ef5f2e5975d7784409b532ce007b1771fe8569e380d08666b5323a90fa91de6ef10f9f2f8882d3fdf1be109eeb99a54bd84b1fa2075de9e75b languageName: node linkType: hard -"@types/classnames@npm:^2.3.1": - version: 2.3.1 - resolution: "@types/classnames@npm:2.3.1" - dependencies: - classnames: "npm:*" - checksum: 10c0/6b71e5220aa3f04dbe1eba910f7755b880a2c6e3ba0ebf71fe73db99d58628022de06340a029c97db093e31d7981bc695b6c2ce65b2a58492d245e2cbe44a47d +"@types/cookie@npm:^0.6.0": + version: 0.6.0 + resolution: "@types/cookie@npm:0.6.0" + checksum: 10c0/5b326bd0188120fb32c0be086b141b1481fec9941b76ad537f9110e10d61ee2636beac145463319c71e4be67a17e85b81ca9e13ceb6e3bb63b93d16824d6c149 languageName: node linkType: hard -"@types/estree@npm:1.0.5": - version: 1.0.5 - resolution: "@types/estree@npm:1.0.5" - checksum: 10c0/b3b0e334288ddb407c7b3357ca67dbee75ee22db242ca7c56fe27db4e1a31989cb8af48a84dd401deb787fe10cc6b2ab1ee82dc4783be87ededbe3d53c79c70d +"@types/estree@npm:1.0.6, @types/estree@npm:^1.0.6": + version: 1.0.6 + resolution: "@types/estree@npm:1.0.6" + checksum: 10c0/cdfd751f6f9065442cd40957c07fd80361c962869aa853c1c2fd03e101af8b9389d8ff4955a43a6fcfa223dd387a089937f95be0f3eec21ca527039fd2d9859a languageName: node linkType: hard -"@types/history@npm:^4.7.11": - version: 4.7.11 - resolution: "@types/history@npm:4.7.11" - checksum: 10c0/3facf37c2493d1f92b2e93a22cac7ea70b06351c2ab9aaceaa3c56aa6099fb63516f6c4ec1616deb5c56b4093c026a043ea2d3373e6c0644d55710364d02c934 +"@types/json-schema@npm:^7.0.15": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db languageName: node linkType: hard -"@types/node@npm:^20.14.9": - version: 20.14.10 - resolution: "@types/node@npm:20.14.10" +"@types/node@npm:^20": + version: 20.17.16 + resolution: "@types/node@npm:20.17.16" dependencies: - undici-types: "npm:~5.26.4" - checksum: 10c0/0b06cff14365c2d0085dc16cc8cbea5c40ec09cfc1fea966be9eeecf35562760bfde8f88e86de6edfaf394501236e229d9c1084fad04fb4dec472ae245d8ae69 + undici-types: "npm:~6.19.2" + checksum: 10c0/50c589dd6a377238bc51b6fb5b8fc60ff6d688df0bde621d4a9fc59f480eb956cdf6d46052e1cb9536f150bc62e9194ddc733aa78b65e812155b4d3a32717de2 languageName: node linkType: hard @@ -1685,281 +1639,179 @@ __metadata: linkType: hard "@types/prismjs@npm:^1.26.0": - version: 1.26.4 - resolution: "@types/prismjs@npm:1.26.4" - checksum: 10c0/996be7d119779c4cbe66e58342115a12d35a02226dae3aaa4a744c9652d5a3939c93c26182e18156965ac4f93575ebb309c3469c36f52e60ee5c0f8f27e874df - languageName: node - linkType: hard - -"@types/prop-types@npm:*, @types/prop-types@npm:^15.7.12": - version: 15.7.12 - resolution: "@types/prop-types@npm:15.7.12" - checksum: 10c0/1babcc7db6a1177779f8fde0ccc78d64d459906e6ef69a4ed4dd6339c920c2e05b074ee5a92120fe4e9d9f1a01c952f843ebd550bee2332fc2ef81d1706878f8 + version: 1.26.5 + resolution: "@types/prismjs@npm:1.26.5" + checksum: 10c0/5619cb449e0d8df098c8759d6f47bf8fdd510abf5dbdfa999e55c6a2545efbd1e209cc85a33d8d9f4ff2898089a1a6d9a70737c9baffaae635c46852c40d384a languageName: node linkType: hard -"@types/qs@npm:^6.9.15": - version: 6.9.15 - resolution: "@types/qs@npm:6.9.15" - checksum: 10c0/49c5ff75ca3adb18a1939310042d273c9fc55920861bd8e5100c8a923b3cda90d759e1a95e18334092da1c8f7b820084687770c83a1ccef04fb2c6908117c823 - languageName: node - linkType: hard - -"@types/react-dom@npm:^18.3.0": - version: 18.3.0 - resolution: "@types/react-dom@npm:18.3.0" - dependencies: - "@types/react": "npm:*" - checksum: 10c0/6c90d2ed72c5a0e440d2c75d99287e4b5df3e7b011838cdc03ae5cd518ab52164d86990e73246b9d812eaf02ec351d74e3b4f5bd325bf341e13bf980392fd53b - languageName: node - linkType: hard - -"@types/react-helmet@npm:^6.1.11": - version: 6.1.11 - resolution: "@types/react-helmet@npm:6.1.11" - dependencies: - "@types/react": "npm:*" - checksum: 10c0/f7b3bb2151d992a108ae46fed876fb9c8119108397d9a01d150c5642782997542c8b3c52e742b56e8689b7dbfa62ca9cfc76aa7e05dec4e60c652f7ef53fa783 +"@types/prop-types@npm:^15.7.14": + version: 15.7.14 + resolution: "@types/prop-types@npm:15.7.14" + checksum: 10c0/1ec775160bfab90b67a782d735952158c7e702ca4502968aa82565bd8e452c2de8601c8dfe349733073c31179116cf7340710160d3836aa8a1ef76d1532893b1 languageName: node linkType: hard -"@types/react-router-dom@npm:^5.3.3": - version: 5.3.3 - resolution: "@types/react-router-dom@npm:5.3.3" - dependencies: - "@types/history": "npm:^4.7.11" - "@types/react": "npm:*" - "@types/react-router": "npm:*" - checksum: 10c0/a9231a16afb9ed5142678147eafec9d48582809295754fb60946e29fcd3757a4c7a3180fa94b45763e4c7f6e3f02379e2fcb8dd986db479dcab40eff5fc62a91 +"@types/qs@npm:^6": + version: 6.9.18 + resolution: "@types/qs@npm:6.9.18" + checksum: 10c0/790b9091348e06dde2c8e4118b5771ab386a8c22a952139a2eb0675360a2070d0b155663bf6f75b23f258fd0a1f7ffc0ba0f059d99a719332c03c40d9e9cd63b languageName: node linkType: hard -"@types/react-router@npm:*": - version: 5.1.20 - resolution: "@types/react-router@npm:5.1.20" - dependencies: - "@types/history": "npm:^4.7.11" - "@types/react": "npm:*" - checksum: 10c0/1f7eee61981d2f807fa01a34a0ef98ebc0774023832b6611a69c7f28fdff01de5a38cabf399f32e376bf8099dcb7afaf724775bea9d38870224492bea4cb5737 +"@types/react-dom@npm:^19.0.1": + version: 19.0.3 + resolution: "@types/react-dom@npm:19.0.3" + peerDependencies: + "@types/react": ^19.0.0 + checksum: 10c0/3867427b333cbe8cbba496d7cc20ec9676d32c25ae44f4d1263a4129d42e57cf4adf0039ad263432f1215b88075c27d326e7eb4ed646128235d01a76e661d48f languageName: node linkType: hard -"@types/react-transition-group@npm:^4.4.11": - version: 4.4.11 - resolution: "@types/react-transition-group@npm:4.4.11" - dependencies: - "@types/react": "npm:*" - checksum: 10c0/8fbf0dcc1b81985cdcebe3c59d769fe2ea3f4525f12c3a10a7429a59f93e303c82b2abb744d21cb762879f4514969d70a7ab11b9bf486f92213e8fe70e04098d +"@types/react-transition-group@npm:^4.4.12": + version: 4.4.12 + resolution: "@types/react-transition-group@npm:4.4.12" + peerDependencies: + "@types/react": "*" + checksum: 10c0/0441b8b47c69312c89ec0760ba477ba1a0808a10ceef8dc1c64b1013ed78517332c30f18681b0ec0b53542731f1ed015169fed1d127cc91222638ed955478ec7 languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:^18.3.3": - version: 18.3.3 - resolution: "@types/react@npm:18.3.3" +"@types/react@npm:^19.0.1": + version: 19.0.8 + resolution: "@types/react@npm:19.0.8" dependencies: - "@types/prop-types": "npm:*" csstype: "npm:^3.0.2" - checksum: 10c0/fe455f805c5da13b89964c3d68060cebd43e73ec15001a68b34634604a78140e6fc202f3f61679b9d809dde6d7a7c2cb3ed51e0fd1462557911db09879b55114 - languageName: node - linkType: hard - -"@types/sass@npm:^1.45.0": - version: 1.45.0 - resolution: "@types/sass@npm:1.45.0" - dependencies: - sass: "npm:*" - checksum: 10c0/e2628516d16f9232226a693ff5e512ef64445df3b675a17b84c7af865f68a1c1156b5d0e2b6b9341c571348f719b705ac8a622caa304ea5700755cb7019a0071 + checksum: 10c0/5fa7236356b1476de03519c66ef65d4fd904826956105619e2ad60cb0b55ae7b251dd5fff02234076225b5e15333d0d936bf9dbe1d461406f8a2ba01c197ddcd languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^7.13.1": - version: 7.16.0 - resolution: "@typescript-eslint/eslint-plugin@npm:7.16.0" +"@typescript-eslint/eslint-plugin@npm:8.21.0": + version: 8.21.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.21.0" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:7.16.0" - "@typescript-eslint/type-utils": "npm:7.16.0" - "@typescript-eslint/utils": "npm:7.16.0" - "@typescript-eslint/visitor-keys": "npm:7.16.0" + "@typescript-eslint/scope-manager": "npm:8.21.0" + "@typescript-eslint/type-utils": "npm:8.21.0" + "@typescript-eslint/utils": "npm:8.21.0" + "@typescript-eslint/visitor-keys": "npm:8.21.0" graphemer: "npm:^1.4.0" ignore: "npm:^5.3.1" natural-compare: "npm:^1.4.0" - ts-api-utils: "npm:^1.3.0" + ts-api-utils: "npm:^2.0.0" peerDependencies: - "@typescript-eslint/parser": ^7.0.0 - eslint: ^8.56.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/a6c4c93bd7ec1604079018b95416d8ac28af3345d50620f815ffd36e705c4964d88edc434e710ef8722690497f1eeab1e9a0f48faa6d448405980f5d05c888b7 + "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.8.0" + checksum: 10c0/4601d21ec35b9fa5cfc1ad0330733ab40d6c6822c7fc15c3584a16f678c9a72e077a1725a950823fe0f499a15f3981795b1ea5d1e7a1be5c7b8296ea9ae6327c languageName: node linkType: hard -"@typescript-eslint/parser@npm:^7.13.1": - version: 7.16.0 - resolution: "@typescript-eslint/parser@npm:7.16.0" +"@typescript-eslint/parser@npm:8.21.0": + version: 8.21.0 + resolution: "@typescript-eslint/parser@npm:8.21.0" dependencies: - "@typescript-eslint/scope-manager": "npm:7.16.0" - "@typescript-eslint/types": "npm:7.16.0" - "@typescript-eslint/typescript-estree": "npm:7.16.0" - "@typescript-eslint/visitor-keys": "npm:7.16.0" + "@typescript-eslint/scope-manager": "npm:8.21.0" + "@typescript-eslint/types": "npm:8.21.0" + "@typescript-eslint/typescript-estree": "npm:8.21.0" + "@typescript-eslint/visitor-keys": "npm:8.21.0" debug: "npm:^4.3.4" peerDependencies: - eslint: ^8.56.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/bf809c5a59dddc72fc2f11a5d10c78825fa2ffbec72a711e3f783b022d77266a1b709ad450912ebbff24ca9ac20c6baae1d12477735e00aafce662fdbdfa66ef + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.8.0" + checksum: 10c0/aadebd50ca7aa2d61ad85d890c0d7010f2c293ec4d50a7833ef9674f232f0bc7118faa93a898771fbea50f02d542d687cf3569421b23f72fe6fed6895d5506fc languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:7.16.0": - version: 7.16.0 - resolution: "@typescript-eslint/scope-manager@npm:7.16.0" +"@typescript-eslint/scope-manager@npm:8.21.0": + version: 8.21.0 + resolution: "@typescript-eslint/scope-manager@npm:8.21.0" dependencies: - "@typescript-eslint/types": "npm:7.16.0" - "@typescript-eslint/visitor-keys": "npm:7.16.0" - checksum: 10c0/e00f57908a1b30fb93ae0e35c46a798669782428e98f927a4d39ef3b1e7d5ad4a48e4e121bd136ed9732c2d1c09cf0b99e4029b1a1a11aadf6f2b92e1003f41c + "@typescript-eslint/types": "npm:8.21.0" + "@typescript-eslint/visitor-keys": "npm:8.21.0" + checksum: 10c0/ea405e79dc884ea1c76465604db52f9b0941d6cbb0bde6bce1af689ef212f782e214de69d46503c7c47bfc180d763369b7433f1965e3be3c442b417e8c9f8f75 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:7.16.0": - version: 7.16.0 - resolution: "@typescript-eslint/type-utils@npm:7.16.0" +"@typescript-eslint/type-utils@npm:8.21.0": + version: 8.21.0 + resolution: "@typescript-eslint/type-utils@npm:8.21.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:7.16.0" - "@typescript-eslint/utils": "npm:7.16.0" + "@typescript-eslint/typescript-estree": "npm:8.21.0" + "@typescript-eslint/utils": "npm:8.21.0" debug: "npm:^4.3.4" - ts-api-utils: "npm:^1.3.0" + ts-api-utils: "npm:^2.0.0" peerDependencies: - eslint: ^8.56.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/91ef86e173d2d86487d669ddda7a0f754485e82a671a64cfbf7790639dfb4c691f6f002ae19d4d82a90e4cca9cd7563e38100c1dfabab461632b0da1eac2b39b + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.8.0" + checksum: 10c0/617f5dfe83fd9a7c722b27fa4e7f0c84f29baa94f75a4e8e5ccfd5b0a373437f65724e21b9642870fb0960f204b1a7f516a038200a12f8118f21b1bf86315bf3 languageName: node linkType: hard -"@typescript-eslint/types@npm:7.16.0": - version: 7.16.0 - resolution: "@typescript-eslint/types@npm:7.16.0" - checksum: 10c0/5d7080991241232072c50c1e1be35976631f764fe0f4fd43cf1026a2722aab772a14906dfaa322183b040c6ca8ae4494a78f653dd3b22bcdbdfe063a301240b0 +"@typescript-eslint/types@npm:8.21.0": + version: 8.21.0 + resolution: "@typescript-eslint/types@npm:8.21.0" + checksum: 10c0/67dfd300cc614d7b02e94d0dacfb228a7f4c3fd4eede29c43adb9e9fcc16365ae3df8d6165018da3c123dce65545bef03e3e8183f35e9b3a911ffc727e3274c2 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:7.16.0": - version: 7.16.0 - resolution: "@typescript-eslint/typescript-estree@npm:7.16.0" +"@typescript-eslint/typescript-estree@npm:8.21.0": + version: 8.21.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.21.0" dependencies: - "@typescript-eslint/types": "npm:7.16.0" - "@typescript-eslint/visitor-keys": "npm:7.16.0" + "@typescript-eslint/types": "npm:8.21.0" + "@typescript-eslint/visitor-keys": "npm:8.21.0" debug: "npm:^4.3.4" - globby: "npm:^11.1.0" + fast-glob: "npm:^3.3.2" is-glob: "npm:^4.0.3" minimatch: "npm:^9.0.4" semver: "npm:^7.6.0" - ts-api-utils: "npm:^1.3.0" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/2b4e7cbdb1b43d937d1dde057ab18111e0f2bb16cb2d3f48a60c5611ff81d0b64455b325475bcce6213c54653b6c4d3b475526f7ffcf8f74014ab9b64a3d6d92 + ts-api-utils: "npm:^2.0.0" + peerDependencies: + typescript: ">=4.8.4 <5.8.0" + checksum: 10c0/0cf5b0382524f4af54fb5ec71ca7e939ec922711f2d77b383740b28dd4b21407b0ab5dded62df6819d01c12c0b354e95667e3c7025a5d27d05b805161ab94855 languageName: node linkType: hard -"@typescript-eslint/utils@npm:7.16.0": - version: 7.16.0 - resolution: "@typescript-eslint/utils@npm:7.16.0" +"@typescript-eslint/utils@npm:8.21.0": + version: 8.21.0 + resolution: "@typescript-eslint/utils@npm:8.21.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:7.16.0" - "@typescript-eslint/types": "npm:7.16.0" - "@typescript-eslint/typescript-estree": "npm:7.16.0" + "@typescript-eslint/scope-manager": "npm:8.21.0" + "@typescript-eslint/types": "npm:8.21.0" + "@typescript-eslint/typescript-estree": "npm:8.21.0" peerDependencies: - eslint: ^8.56.0 - checksum: 10c0/1b835cbd243a4266a84655bcfcd08a14003e9740efbb032d60ab4403f03838280e7ad759b1f362d88939beaee08d7a1752fa6b049aad8d33793758853469fe76 - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:7.16.0": - version: 7.16.0 - resolution: "@typescript-eslint/visitor-keys@npm:7.16.0" - dependencies: - "@typescript-eslint/types": "npm:7.16.0" - eslint-visitor-keys: "npm:^3.4.3" - checksum: 10c0/a3c614cdc2e9c37e007e15e1ee169a9ad040fac189d0abd2b840f78910b499b362493bbf0019c5979785567ae30839a799b4dd219f70a668bac930fd79fdc5d3 - languageName: node - linkType: hard - -"@ungap/structured-clone@npm:^1.2.0": - version: 1.2.0 - resolution: "@ungap/structured-clone@npm:1.2.0" - checksum: 10c0/8209c937cb39119f44eb63cf90c0b73e7c754209a6411c707be08e50e29ee81356dca1a848a405c8bdeebfe2f5e4f831ad310ae1689eeef65e7445c090c6657d + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.8.0" + checksum: 10c0/d8347dbe9176417220aa62902cfc1b2007a9246bb7a8cccdf8590120903eb50ca14cb668efaab4646d086277f2367559985b62230e43ebd8b0723d237eeaa2f2 languageName: node linkType: hard -"@vitejs/plugin-react@npm:^4.3.1": - version: 4.3.1 - resolution: "@vitejs/plugin-react@npm:4.3.1" +"@typescript-eslint/visitor-keys@npm:8.21.0": + version: 8.21.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.21.0" dependencies: - "@babel/core": "npm:^7.24.5" - "@babel/plugin-transform-react-jsx-self": "npm:^7.24.5" - "@babel/plugin-transform-react-jsx-source": "npm:^7.24.1" - "@types/babel__core": "npm:^7.20.5" - react-refresh: "npm:^0.14.2" - peerDependencies: - vite: ^4.2.0 || ^5.0.0 - checksum: 10c0/39a027feddfd6b3e307121d79631462ef1aae05714ba7a2f9a73d240d0f89c2bf281132568eb27b55d6ddaf08d86ad1bd8b0066090240e570de8c6320eb9a903 + "@typescript-eslint/types": "npm:8.21.0" + eslint-visitor-keys: "npm:^4.2.0" + checksum: 10c0/b3f1412f550e35c0d7ae0410db616951116b365167539f9b85710d8bc2b36b322c5e637caee84cc1ae5df8f1d961880250d52ffdef352b31e5bdbef74ba6fea9 languageName: node linkType: hard -"@wyw-in-js/processor-utils@npm:0.5.4, @wyw-in-js/processor-utils@npm:^0.5.4": - version: 0.5.4 - resolution: "@wyw-in-js/processor-utils@npm:0.5.4" - dependencies: - "@babel/generator": "npm:^7.23.5" - "@wyw-in-js/shared": "npm:0.5.4" - checksum: 10c0/f6f34f780d116bc5fc976f7fa550d297795cef9447d8c531323886fa33e4bac6e1a80db1115e63f928b9fb0e677fdb28e00228c1a13631572341dbffbf9aecd0 +"abbrev@npm:^3.0.0": + version: 3.0.0 + resolution: "abbrev@npm:3.0.0" + checksum: 10c0/049704186396f571650eb7b22ed3627b77a5aedf98bb83caf2eac81ca2a3e25e795394b0464cfb2d6076df3db6a5312139eac5b6a126ca296ac53c5008069c28 languageName: node linkType: hard -"@wyw-in-js/shared@npm:0.5.4, @wyw-in-js/shared@npm:^0.5.4": - version: 0.5.4 - resolution: "@wyw-in-js/shared@npm:0.5.4" +"accepts@npm:~1.3.8": + version: 1.3.8 + resolution: "accepts@npm:1.3.8" dependencies: - debug: "npm:^4.3.4" - find-up: "npm:^5.0.0" - minimatch: "npm:^9.0.3" - checksum: 10c0/47ec8bf5196679c42bdd1fa0f9831171fd8d8727031bbf7dcafbdbe19ee658660343405249d77ab2b9e7c1004ff30e4e6eaa4790784f223118089812020d0d4b - languageName: node - linkType: hard - -"@wyw-in-js/transform@npm:^0.5.4": - version: 0.5.4 - resolution: "@wyw-in-js/transform@npm:0.5.4" - dependencies: - "@babel/core": "npm:^7.23.5" - "@babel/generator": "npm:^7.23.5" - "@babel/helper-module-imports": "npm:^7.22.15" - "@babel/plugin-transform-modules-commonjs": "npm:^7.23.3" - "@babel/template": "npm:^7.22.15" - "@babel/traverse": "npm:^7.23.5" - "@babel/types": "npm:^7.23.5" - "@wyw-in-js/processor-utils": "npm:0.5.4" - "@wyw-in-js/shared": "npm:0.5.4" - babel-merge: "npm:^3.0.0" - cosmiconfig: "npm:^8.0.0" - happy-dom: "npm:^12.5.0" - source-map: "npm:^0.7.4" - stylis: "npm:^4.3.0" - ts-invariant: "npm:^0.10.3" - checksum: 10c0/ec083911264f0e607f3b29afe3d8b661efa69b4563580786ac47fe425ee32679293930fa0e78dc5269948035fb25dc0c1a4c2c8b0963c5fd396e406b1110f79b - languageName: node - linkType: hard - -"abbrev@npm:^2.0.0": - version: 2.0.0 - resolution: "abbrev@npm:2.0.0" - checksum: 10c0/f742a5a107473946f426c691c08daba61a1d15942616f300b5d32fd735be88fef5cba24201757b6c407fd564555fb48c751cfa33519b2605c8a7aadd22baf372 + mime-types: "npm:~2.1.34" + negotiator: "npm:0.6.3" + checksum: 10c0/3a35c5f5586cfb9a21163ca47a5f77ac34fa8ceb5d17d2fa2c0d81f41cbd7f8c6fa52c77e2c039acc0f4d09e71abdc51144246900f6bef5e3c4b333f77d89362 languageName: node linkType: hard @@ -1972,31 +1824,19 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.9.0": - version: 8.12.1 - resolution: "acorn@npm:8.12.1" +"acorn@npm:^8.14.0": + version: 8.14.0 + resolution: "acorn@npm:8.14.0" bin: acorn: bin/acorn - checksum: 10c0/51fb26cd678f914e13287e886da2d7021f8c2bc0ccc95e03d3e0447ee278dd3b40b9c57dc222acd5881adcf26f3edc40901a4953403232129e3876793cd17386 - languageName: node - linkType: hard - -"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": - version: 7.1.1 - resolution: "agent-base@npm:7.1.1" - dependencies: - debug: "npm:^4.3.4" - checksum: 10c0/e59ce7bed9c63bf071a30cc471f2933862044c97fd9958967bfe22521d7a0f601ce4ed5a8c011799d0c726ca70312142ae193bbebb60f576b52be19d4a363b50 + checksum: 10c0/6d4ee461a7734b2f48836ee0fbb752903606e576cc100eb49340295129ca0b452f3ba91ddd4424a1d4406a98adfb2ebb6bd0ff4c49d7a0930c10e462719bbfd7 languageName: node linkType: hard -"aggregate-error@npm:^3.0.0": - version: 3.1.0 - resolution: "aggregate-error@npm:3.1.0" - dependencies: - clean-stack: "npm:^2.0.0" - indent-string: "npm:^4.0.0" - checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": + version: 7.1.3 + resolution: "agent-base@npm:7.1.3" + checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11 languageName: node linkType: hard @@ -2013,101 +1853,28 @@ __metadata: linkType: hard "ajv@npm:^8.0.1": - version: 8.16.0 - resolution: "ajv@npm:8.16.0" + version: 8.17.1 + resolution: "ajv@npm:8.17.1" dependencies: fast-deep-equal: "npm:^3.1.3" + fast-uri: "npm:^3.0.1" json-schema-traverse: "npm:^1.0.0" require-from-string: "npm:^2.0.2" - uri-js: "npm:^4.4.1" - checksum: 10c0/6fc38aa8fd4fbfaa7096ac049e48c0cb440db36b76fef2d7d5b7d92b102735670d055d412d19176c08c9d48eaa9d06661b67e59f04943dc71ab1551e0484f88c + checksum: 10c0/ec3ba10a573c6b60f94639ffc53526275917a2df6810e4ab5a6b959d87459f9ef3f00d5e7865b82677cb7d21590355b34da14d1d0b9c32d75f95a187e76fff35 languageName: node linkType: hard -"ansi-colors@npm:^1.0.1": - version: 1.1.0 - resolution: "ansi-colors@npm:1.1.0" - dependencies: - ansi-wrap: "npm:^0.1.0" - checksum: 10c0/c5f3ae4710ed564ca173cd2cf3e85a3bf8dabb7b20688f84299caaf0a4af01e6b7825b32739336c9437492058d3b07d90ef42e3e6223fbba3dc9d52f63e29056 +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 languageName: node linkType: hard -"ansi-cyan@npm:^0.1.1": - version: 0.1.1 - resolution: "ansi-cyan@npm:0.1.1" - dependencies: - ansi-wrap: "npm:0.1.0" - checksum: 10c0/194a33c4234a9b5150efa22f66d9820bcb44a0aa394767d2203bb49751064a52d5547ff878ec7cfaaa02543490172b405914e0a8647954be29f05474ad0c452f - languageName: node - linkType: hard - -"ansi-escapes@npm:^3.1.0": - version: 3.2.0 - resolution: "ansi-escapes@npm:3.2.0" - checksum: 10c0/084e1ce38139ad2406f18a8e7efe2b850ddd06ce3c00f633392d1ce67756dab44fe290e573d09ef3c9a0cb13c12881e0e35a8f77a017d39a0a4ab85ae2fae04f - languageName: node - linkType: hard - -"ansi-gray@npm:^0.1.1": - version: 0.1.1 - resolution: "ansi-gray@npm:0.1.1" - dependencies: - ansi-wrap: "npm:0.1.0" - checksum: 10c0/f15a0c069f81a343afe2af5e111624603ce9e6059996d44a0338d7e44b88171a05dc975debdf4df01a86e62395027ae0615499a1e4adfefbebd417061b506079 - languageName: node - linkType: hard - -"ansi-red@npm:^0.1.1": - version: 0.1.1 - resolution: "ansi-red@npm:0.1.1" - dependencies: - ansi-wrap: "npm:0.1.0" - checksum: 10c0/e7f1ae80770d190d5aa0f2169cebd5caae0fa1e5cf20945d843d4bbb98428194e2fa062e285eb8807820612d30453573e89eb2c5c6a4aba257b725d37852bb11 - languageName: node - linkType: hard - -"ansi-regex@npm:^2.0.0": - version: 2.1.1 - resolution: "ansi-regex@npm:2.1.1" - checksum: 10c0/78cebaf50bce2cb96341a7230adf28d804611da3ce6bf338efa7b72f06cc6ff648e29f80cd95e582617ba58d5fdbec38abfeed3500a98bce8381a9daec7c548b - languageName: node - linkType: hard - -"ansi-regex@npm:^3.0.0": - version: 3.0.1 - resolution: "ansi-regex@npm:3.0.1" - checksum: 10c0/d108a7498b8568caf4a46eea4f1784ab4e0dfb2e3f3938c697dee21443d622d765c958f2b7e2b9f6b9e55e2e2af0584eaa9915d51782b89a841c28e744e7a167 - languageName: node - linkType: hard - -"ansi-regex@npm:^4.1.0": - version: 4.1.1 - resolution: "ansi-regex@npm:4.1.1" - checksum: 10c0/d36d34234d077e8770169d980fed7b2f3724bfa2a01da150ccd75ef9707c80e883d27cdf7a0eac2f145ac1d10a785a8a855cffd05b85f778629a0db62e7033da - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 - languageName: node - linkType: hard - -"ansi-regex@npm:^6.0.1": - version: 6.0.1 - resolution: "ansi-regex@npm:6.0.1" - checksum: 10c0/cbe16dbd2c6b2735d1df7976a7070dd277326434f0212f43abf6d87674095d247968209babdaad31bb00882fa68807256ba9be340eec2f1004de14ca75f52a08 - languageName: node - linkType: hard - -"ansi-styles@npm:^3.2.1": - version: 3.2.1 - resolution: "ansi-styles@npm:3.2.1" - dependencies: - color-convert: "npm:^1.9.0" - checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b +"ansi-regex@npm:^6.0.1": + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 10c0/a91daeddd54746338478eef88af3439a7edf30f8e23196e2d6ed182da9add559c601266dbef01c2efa46a958ad6f1f8b176799657616c702b5b02e799e7fd8dc languageName: node linkType: hard @@ -2127,38 +1894,10 @@ __metadata: languageName: node linkType: hard -"ansi-wrap@npm:0.1.0, ansi-wrap@npm:^0.1.0": - version: 0.1.0 - resolution: "ansi-wrap@npm:0.1.0" - checksum: 10c0/1e0a53ae0d1a3fc5ceeb5d1868cb5b0a61543a1ff11f3efc51bab7923cc01fe8180db1f9250ce5003b425c53f568bcf3c2dea9d90b5c1cd0a1dae13f76c601dd - languageName: node - linkType: hard - -"anymatch@npm:~3.1.2": - version: 3.1.3 - resolution: "anymatch@npm:3.1.3" - dependencies: - normalize-path: "npm:^3.0.0" - picomatch: "npm:^2.0.4" - checksum: 10c0/57b06ae984bc32a0d22592c87384cd88fe4511b1dd7581497831c56d41939c8a001b28e7b853e1450f2bf61992dfcaa8ae2d0d161a0a90c4fb631ef07098fbac - languageName: node - linkType: hard - -"append-buffer@npm:^1.0.2": - version: 1.0.2 - resolution: "append-buffer@npm:1.0.2" - dependencies: - buffer-equal: "npm:^1.0.0" - checksum: 10c0/909c34059ddd418ddd7c5a050b2891f971eafd17ffdcf4b39411fcb6ecb780db3e147a17dd8c4482381ee2c3a3447689d6e2ef5529dd9c1f9bb630b763a5aab5 - languageName: node - linkType: hard - -"argparse@npm:^1.0.7": - version: 1.0.10 - resolution: "argparse@npm:1.0.10" - dependencies: - sprintf-js: "npm:~1.0.2" - checksum: 10c0/b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de +"arg@npm:^5.0.1": + version: 5.0.2 + resolution: "arg@npm:5.0.2" + checksum: 10c0/ccaf86f4e05d342af6666c569f844bec426595c567d32a8289715087825c2ca7edd8a3d204e4d2fb2aa4602e09a57d0c13ea8c9eea75aac3dbb4af5514e6800e languageName: node linkType: hard @@ -2169,58 +1908,20 @@ __metadata: languageName: node linkType: hard -"arr-diff@npm:^1.0.1": - version: 1.1.0 - resolution: "arr-diff@npm:1.1.0" - dependencies: - arr-flatten: "npm:^1.0.1" - array-slice: "npm:^0.2.3" - checksum: 10c0/72e93f94b39b0edc792ffd0c09658ddbecc1ec19ac50411408f720a6aab833cbf1df3947a7c9d5a6aea5fa4861ea508b6a04419a95b85bf9b256c8d65cc64388 - languageName: node - linkType: hard - -"arr-diff@npm:^4.0.0": - version: 4.0.0 - resolution: "arr-diff@npm:4.0.0" - checksum: 10c0/67b80067137f70c89953b95f5c6279ad379c3ee39f7143578e13bd51580a40066ee2a55da066e22d498dce10f68c2d70056d7823f972fab99dfbf4c78d0bc0f7 - languageName: node - linkType: hard - -"arr-flatten@npm:^1.0.1": - version: 1.1.0 - resolution: "arr-flatten@npm:1.1.0" - checksum: 10c0/bef53be02ed3bc58f202b3861a5b1eb6e1ae4fecf39c3ad4d15b1e0433f941077d16e019a33312d820844b0661777322acbb7d0c447b04d9bdf7d6f9c532548a - languageName: node - linkType: hard - -"arr-union@npm:^2.0.1": - version: 2.1.0 - resolution: "arr-union@npm:2.1.0" - checksum: 10c0/27d270a77ebbccf1fb7b8544ebdcca3fcf1bcf10b3d01bbef127466b1bd1c877ead79f607f3404de21880e675582b453f7fefbe48b6818516be3f075f46c5172 - languageName: node - linkType: hard - -"arr-union@npm:^3.1.0": - version: 3.1.0 - resolution: "arr-union@npm:3.1.0" - checksum: 10c0/7d5aa05894e54aa93c77c5726c1dd5d8e8d3afe4f77983c0aa8a14a8a5cbe8b18f0cf4ecaa4ac8c908ef5f744d2cbbdaa83fd6e96724d15fea56cfa7f5efdd51 - languageName: node - linkType: hard - -"array-buffer-byte-length@npm:^1.0.1": - version: 1.0.1 - resolution: "array-buffer-byte-length@npm:1.0.1" +"array-buffer-byte-length@npm:^1.0.1, array-buffer-byte-length@npm:^1.0.2": + version: 1.0.2 + resolution: "array-buffer-byte-length@npm:1.0.2" dependencies: - call-bind: "npm:^1.0.5" - is-array-buffer: "npm:^3.0.4" - checksum: 10c0/f5cdf54527cd18a3d2852ddf73df79efec03829e7373a8322ef5df2b4ef546fb365c19c71d6b42d641cb6bfe0f1a2f19bc0ece5b533295f86d7c3d522f228917 + call-bound: "npm:^1.0.3" + is-array-buffer: "npm:^3.0.5" + checksum: 10c0/74e1d2d996941c7a1badda9cabb7caab8c449db9086407cad8a1b71d2604cc8abf105db8ca4e02c04579ec58b7be40279ddb09aea4784832984485499f48432d languageName: node linkType: hard -"array-differ@npm:^1.0.0": - version: 1.0.0 - resolution: "array-differ@npm:1.0.0" - checksum: 10c0/8782c01cfe58555416fbf63ceb30d8e17076297f067357a5a9eff9b4cc9aa02731aa27c06966758d09a18b1740f9643e1ff563f1a7040428ba1c796e2ad75050 +"array-flatten@npm:1.1.1": + version: 1.1.1 + resolution: "array-flatten@npm:1.1.1" + checksum: 10c0/806966c8abb2f858b08f5324d9d18d7737480610f3bd5d3498aaae6eb5efdc501a884ba019c9b4a8f02ff67002058749d05548fd42fa8643f02c9c7f22198b91 languageName: node linkType: hard @@ -2238,22 +1939,6 @@ __metadata: languageName: node linkType: hard -"array-slice@npm:^0.2.3": - version: 0.2.3 - resolution: "array-slice@npm:0.2.3" - checksum: 10c0/aba296c769a8a6f772e26261510d33ae0be231e0f3acb2eb7da5c65becf0769e0f339d722739af49fea429941c19d23ce85a4ba2fc475df645a4d4d1289d65c3 - languageName: node - linkType: hard - -"array-union@npm:^1.0.1": - version: 1.0.2 - resolution: "array-union@npm:1.0.2" - dependencies: - array-uniq: "npm:^1.0.1" - checksum: 10c0/18686767c0cfdae8dc4acf5ac119b0f0eacad82b7fcc0aa62cc41f93c5ad406d494b6a6e53d85e52e8f0349b67a4fec815feeb537e95c02510d747bc9a4157c7 - languageName: node - linkType: hard - "array-union@npm:^2.1.0": version: 2.1.0 resolution: "array-union@npm:2.1.0" @@ -2261,13 +1946,6 @@ __metadata: languageName: node linkType: hard -"array-uniq@npm:^1.0.1": - version: 1.0.3 - resolution: "array-uniq@npm:1.0.3" - checksum: 10c0/3acbaf9e6d5faeb1010e2db04ab171b8d265889e46c61762e502979bdc5e55656013726e9a61507de3c82d329a0dc1e8072630a3454b4f2b881cb19ba7fd8aa6 - languageName: node - linkType: hard - "array.prototype.findlast@npm:^1.2.5": version: 1.2.5 resolution: "array.prototype.findlast@npm:1.2.5" @@ -2283,38 +1961,26 @@ __metadata: linkType: hard "array.prototype.flat@npm:^1.3.1": - version: 1.3.2 - resolution: "array.prototype.flat@npm:1.3.2" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - es-abstract: "npm:^1.22.1" - es-shim-unscopables: "npm:^1.0.0" - checksum: 10c0/a578ed836a786efbb6c2db0899ae80781b476200617f65a44846cb1ed8bd8b24c8821b83703375d8af639c689497b7b07277060024b9919db94ac3e10dc8a49b - languageName: node - linkType: hard - -"array.prototype.flatmap@npm:^1.3.2": - version: 1.3.2 - resolution: "array.prototype.flatmap@npm:1.3.2" + version: 1.3.3 + resolution: "array.prototype.flat@npm:1.3.3" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - es-abstract: "npm:^1.22.1" - es-shim-unscopables: "npm:^1.0.0" - checksum: 10c0/67b3f1d602bb73713265145853128b1ad77cc0f9b833c7e1e056b323fbeac41a4ff1c9c99c7b9445903caea924d9ca2450578d9011913191aa88cc3c3a4b54f4 + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10c0/d90e04dfbc43bb96b3d2248576753d1fb2298d2d972e29ca7ad5ec621f0d9e16ff8074dae647eac4f31f4fb7d3f561a7ac005fb01a71f51705a13b5af06a7d8a languageName: node linkType: hard -"array.prototype.toreversed@npm:^1.1.2": - version: 1.1.2 - resolution: "array.prototype.toreversed@npm:1.1.2" +"array.prototype.flatmap@npm:^1.3.3": + version: 1.3.3 + resolution: "array.prototype.flatmap@npm:1.3.3" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - es-abstract: "npm:^1.22.1" - es-shim-unscopables: "npm:^1.0.0" - checksum: 10c0/2b7627ea85eae1e80ecce665a500cc0f3355ac83ee4a1a727562c7c2a1d5f1c0b4dd7b65c468ec6867207e452ba01256910a2c0b41486bfdd11acf875a7a3435 + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10c0/ba899ea22b9dc9bf276e773e98ac84638ed5e0236de06f13d63a90b18ca9e0ec7c97d622d899796e3773930b946cd2413d098656c0c5d8cc58c6f25c21e6bd54 languageName: node linkType: hard @@ -2331,33 +1997,18 @@ __metadata: languageName: node linkType: hard -"arraybuffer.prototype.slice@npm:^1.0.3": - version: 1.0.3 - resolution: "arraybuffer.prototype.slice@npm:1.0.3" +"arraybuffer.prototype.slice@npm:^1.0.4": + version: 1.0.4 + resolution: "arraybuffer.prototype.slice@npm:1.0.4" dependencies: array-buffer-byte-length: "npm:^1.0.1" - call-bind: "npm:^1.0.5" + call-bind: "npm:^1.0.8" define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.22.3" - es-errors: "npm:^1.2.1" - get-intrinsic: "npm:^1.2.3" + es-abstract: "npm:^1.23.5" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" is-array-buffer: "npm:^3.0.4" - is-shared-array-buffer: "npm:^1.0.2" - checksum: 10c0/d32754045bcb2294ade881d45140a5e52bda2321b9e98fa514797b7f0d252c4c5ab0d1edb34112652c62fa6a9398def568da63a4d7544672229afea283358c36 - languageName: node - linkType: hard - -"arrify@npm:^1.0.0": - version: 1.0.1 - resolution: "arrify@npm:1.0.1" - checksum: 10c0/c35c8d1a81bcd5474c0c57fe3f4bad1a4d46a5fa353cedcff7a54da315df60db71829e69104b859dff96c5d68af46bd2be259fe5e50dc6aa9df3b36bea0383ab - languageName: node - linkType: hard - -"assign-symbols@npm:^1.0.0": - version: 1.0.0 - resolution: "assign-symbols@npm:1.0.0" - checksum: 10c0/29a654b8a6da6889a190d0d0efef4b1bfb5948fa06cbc245054aef05139f889f2f7c75b989917e3fde853fc4093b88048e4de8578a73a76f113d41bfd66e5775 + checksum: 10c0/2f2459caa06ae0f7f615003f9104b01f6435cc803e11bd2a655107d52a1781dc040532dc44d93026b694cc18793993246237423e13a5337e86b43ed604932c06 languageName: node linkType: hard @@ -2368,6 +2019,13 @@ __metadata: languageName: node linkType: hard +"async-function@npm:^1.0.0": + version: 1.0.0 + resolution: "async-function@npm:1.0.0" + checksum: 10c0/669a32c2cb7e45091330c680e92eaeb791bc1d4132d827591e499cd1f776ff5a873e77e5f92d0ce795a8d60f10761dec9ddfe7225a5de680f5d357f67b1aac73 + languageName: node + linkType: hard + "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" @@ -2375,6 +2033,24 @@ __metadata: languageName: node linkType: hard +"autoprefixer@npm:^10.4.20": + version: 10.4.20 + resolution: "autoprefixer@npm:10.4.20" + dependencies: + browserslist: "npm:^4.23.3" + caniuse-lite: "npm:^1.0.30001646" + fraction.js: "npm:^4.3.7" + normalize-range: "npm:^0.1.2" + picocolors: "npm:^1.0.1" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.1.0 + bin: + autoprefixer: bin/autoprefixer + checksum: 10c0/e1f00978a26e7c5b54ab12036d8c13833fad7222828fc90914771b1263f51b28c7ddb5803049de4e77696cbd02bb25cfc3634e80533025bb26c26aacdf938940 + languageName: node + linkType: hard + "available-typed-arrays@npm:^1.0.7": version: 1.0.7 resolution: "available-typed-arrays@npm:1.0.7" @@ -2384,43 +2060,26 @@ __metadata: languageName: node linkType: hard -"axios@npm:^0.18.0": - version: 0.18.1 - resolution: "axios@npm:0.18.1" - dependencies: - follow-redirects: "npm:1.5.10" - is-buffer: "npm:^2.0.2" - checksum: 10c0/13d86542ad3e1de286a6262213b1cd62654307d89617bef5015e82aad389408c6f66bafa1e467b80af971cfe5ac5ed0b40a250f682f46ab9a1487060f0b6b661 - languageName: node - linkType: hard - -"axios@npm:^1.7.4": - version: 1.7.4 - resolution: "axios@npm:1.7.4" +"axios@npm:^1.7.9": + version: 1.7.9 + resolution: "axios@npm:1.7.9" dependencies: follow-redirects: "npm:^1.15.6" form-data: "npm:^4.0.0" proxy-from-env: "npm:^1.1.0" - checksum: 10c0/5ea1a93140ca1d49db25ef8e1bd8cfc59da6f9220159a944168860ad15a2743ea21c5df2967795acb15cbe81362f5b157fdebbea39d53117ca27658bab9f7f17 + checksum: 10c0/b7a41e24b59fee5f0f26c1fc844b45b17442832eb3a0fb42dd4f1430eb4abc571fe168e67913e8a1d91c993232bd1d1ab03e20e4d1fee8c6147649b576fc1b0b languageName: node linkType: hard -"babel-merge@npm:^3.0.0": - version: 3.0.0 - resolution: "babel-merge@npm:3.0.0" +"babel-dead-code-elimination@npm:^1.0.6": + version: 1.0.8 + resolution: "babel-dead-code-elimination@npm:1.0.8" dependencies: - deepmerge: "npm:^2.2.1" - object.omit: "npm:^3.0.0" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/8337358ba69553305ba0ee6ddfdeb79b58d37012d5c99953d87e608eb22299a565501a854e451c2daa8f7b2310d1a52c66ed92f17e18a9858153e9fd9f3090e5 - languageName: node - linkType: hard - -"babel-plugin-define-var@npm:^0.1.0": - version: 0.1.0 - resolution: "babel-plugin-define-var@npm:0.1.0" - checksum: 10c0/4377d5f2f020ed4b053a304a186b59b26aae512eb3d55beb41aee26ddba5ac00a9633bd0f4e689b9e4dd53453c86b4009978b5c4e965fae773d3502d956a477c + "@babel/core": "npm:^7.23.7" + "@babel/parser": "npm:^7.23.6" + "@babel/traverse": "npm:^7.23.7" + "@babel/types": "npm:^7.23.6" + checksum: 10c0/ad6333c70ec483a8373a379221efcf619aa8259a13e1d2570ee07fd6eb75d9b4355533cc300d7d36d397cd8fd2d2a34a32482772e7f9fe0c414dce8e3d484b77 languageName: node linkType: hard @@ -2449,17 +2108,39 @@ __metadata: languageName: node linkType: hard -"bignumber.js@npm:^2.4.0": - version: 2.4.0 - resolution: "bignumber.js@npm:2.4.0" - checksum: 10c0/254648de38df34ca2dbeb6eb8a61d19b74c59afec4918455fc2e3de7e5327d9018ccfaa1825c27d0df12daa1c98e12b6fa679dfcf7acd0287016c4586a04a68a +"base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf languageName: node linkType: hard -"binary-extensions@npm:^2.0.0": - version: 2.3.0 - resolution: "binary-extensions@npm:2.3.0" - checksum: 10c0/75a59cafc10fb12a11d510e77110c6c7ae3f4ca22463d52487709ca7f18f69d886aa387557cc9864fbdb10153d0bdb4caacabf11541f55e89ed6e18d12ece2b5 +"basic-auth@npm:~2.0.1": + version: 2.0.1 + resolution: "basic-auth@npm:2.0.1" + dependencies: + safe-buffer: "npm:5.1.2" + checksum: 10c0/05f56db3a0fc31c89c86b605231e32ee143fb6ae38dc60616bc0970ae6a0f034172def99e69d3aed0e2c9e7cac84e2d63bc51a0b5ff6ab5fc8808cc8b29923c1 + languageName: node + linkType: hard + +"body-parser@npm:1.20.3": + version: 1.20.3 + resolution: "body-parser@npm:1.20.3" + dependencies: + bytes: "npm:3.1.2" + content-type: "npm:~1.0.5" + debug: "npm:2.6.9" + depd: "npm:2.0.0" + destroy: "npm:1.2.0" + http-errors: "npm:2.0.0" + iconv-lite: "npm:0.4.24" + on-finished: "npm:2.4.1" + qs: "npm:6.13.0" + raw-body: "npm:2.5.2" + type-is: "npm:~1.6.18" + unpipe: "npm:1.0.0" + checksum: 10c0/0a9a93b7518f222885498dcecaad528cf010dd109b071bf471c93def4bfe30958b83e03496eb9c1ad4896db543d999bb62be1a3087294162a88cfa1b42c16310 languageName: node linkType: hard @@ -2482,7 +2163,7 @@ __metadata: languageName: node linkType: hard -"braces@npm:^3.0.3, braces@npm:~3.0.2": +"braces@npm:^3.0.3": version: 3.0.3 resolution: "braces@npm:3.0.3" dependencies: @@ -2491,71 +2172,65 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.22.2": - version: 4.23.2 - resolution: "browserslist@npm:4.23.2" +"browserify-zlib@npm:^0.1.4": + version: 0.1.4 + resolution: "browserify-zlib@npm:0.1.4" dependencies: - caniuse-lite: "npm:^1.0.30001640" - electron-to-chromium: "npm:^1.4.820" - node-releases: "npm:^2.0.14" - update-browserslist-db: "npm:^1.1.0" - bin: - browserslist: cli.js - checksum: 10c0/0217d23c69ed61cdd2530c7019bf7c822cd74c51f8baab18dd62457fed3129f52499f8d3a6f809ae1fb7bb3050aa70caa9a529cc36c7478427966dbf429723a5 + pako: "npm:~0.2.0" + checksum: 10c0/0cde7ca5d33d43125649330fd75c056397e53731956a2593c4a2529f4e609a8e6abdb2b8e1921683abf5645375b92cfb2a21baa42fe3c9fc3e2556d32043af93 languageName: node linkType: hard -"browserslist@npm:^4.23.1": - version: 4.23.3 - resolution: "browserslist@npm:4.23.3" +"browserslist@npm:^4.23.3, browserslist@npm:^4.24.0": + version: 4.24.4 + resolution: "browserslist@npm:4.24.4" dependencies: - caniuse-lite: "npm:^1.0.30001646" - electron-to-chromium: "npm:^1.5.4" - node-releases: "npm:^2.0.18" - update-browserslist-db: "npm:^1.1.0" + caniuse-lite: "npm:^1.0.30001688" + electron-to-chromium: "npm:^1.5.73" + node-releases: "npm:^2.0.19" + update-browserslist-db: "npm:^1.1.1" bin: browserslist: cli.js - checksum: 10c0/3063bfdf812815346447f4796c8f04601bf5d62003374305fd323c2a463e42776475bcc5309264e39bcf9a8605851e53560695991a623be988138b3ff8c66642 + checksum: 10c0/db7ebc1733cf471e0b490b4f47e3e2ea2947ce417192c9246644e92c667dd56a71406cc58f62ca7587caf828364892e9952904a02b7aead752bc65b62a37cfe9 languageName: node linkType: hard -"buffer-equal@npm:^1.0.0": - version: 1.0.1 - resolution: "buffer-equal@npm:1.0.1" - checksum: 10c0/578f03cc9458f9151f68478ab80ebee99a4203de0647a47b491aa3d5fb821938cb4139119a2dae1a1ef9ed5506e0eee4d6a37178efbf2e2e0ee3a9886898fffd +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 languageName: node linkType: hard -"buffer-equals@npm:^1.0.4": - version: 1.0.4 - resolution: "buffer-equals@npm:1.0.4" - checksum: 10c0/ea79e067167e9df058f97960848aed1d3ce4507ae1162925a89c9e1e01b380e74579f10891bc34ade9f9ff013a8cf129956bad1e5818bb71888b8174d05d867b +"buffer@npm:^6.0.3": + version: 6.0.3 + resolution: "buffer@npm:6.0.3" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.2.1" + checksum: 10c0/2a905fbbcde73cc5d8bd18d1caa23715d5f83a5935867c2329f0ac06104204ba7947be098fe1317fbd8830e26090ff8e764f08cd14fefc977bb248c3487bcbd0 languageName: node linkType: hard -"buffered-spawn@npm:^3.3.2": - version: 3.3.2 - resolution: "buffered-spawn@npm:3.3.2" - dependencies: - cross-spawn: "npm:^4.0.0" - checksum: 10c0/867c57e615c6905172e12dc4e3a08f29778e573d4a04a3dcd0dbef92010737720a2c8ffc8c3efbc9b3e7b97b60680bdb4ecef4520b2a2838e3688f9d1689704e +"bytes@npm:3.1.2": + version: 3.1.2 + resolution: "bytes@npm:3.1.2" + checksum: 10c0/76d1c43cbd602794ad8ad2ae94095cddeb1de78c5dddaa7005c51af10b0176c69971a6d88e805a90c2b6550d76636e43c40d8427a808b8645ede885de4a0358e languageName: node linkType: hard -"bufferstreams@npm:^2.0.1": - version: 2.0.1 - resolution: "bufferstreams@npm:2.0.1" - dependencies: - readable-stream: "npm:^2.3.6" - checksum: 10c0/a28f81deea6897309f454e0d7cb3afd1cf0ba3df4e8987379f7a0a90a7c0e52277688c389953af85d6175e6aefb8734f2fa41d967de703b3b9cbb71f8465be61 +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 10c0/4ee06aaa7bab8981f0d54e5f5f9d4adcd64058e9697563ce336d8a3878ed018ee18ebe5359b2430eceae87e0758e62ea2019c3f52ae6e211b1bd2e133856cd10 languageName: node linkType: hard -"cacache@npm:^18.0.0": - version: 18.0.4 - resolution: "cacache@npm:18.0.4" +"cacache@npm:^19.0.1": + version: 19.0.1 + resolution: "cacache@npm:19.0.1" dependencies: - "@npmcli/fs": "npm:^3.1.0" + "@npmcli/fs": "npm:^4.0.0" fs-minipass: "npm:^3.0.0" glob: "npm:^10.2.2" lru-cache: "npm:^10.0.1" @@ -2563,63 +2238,67 @@ __metadata: minipass-collect: "npm:^2.0.1" minipass-flush: "npm:^1.0.5" minipass-pipeline: "npm:^1.2.4" - p-map: "npm:^4.0.0" - ssri: "npm:^10.0.0" - tar: "npm:^6.1.11" - unique-filename: "npm:^3.0.0" - checksum: 10c0/6c055bafed9de4f3dcc64ac3dc7dd24e863210902b7c470eb9ce55a806309b3efff78033e3d8b4f7dcc5d467f2db43c6a2857aaaf26f0094b8a351d44c42179f + p-map: "npm:^7.0.2" + ssri: "npm:^12.0.0" + tar: "npm:^7.4.3" + unique-filename: "npm:^4.0.0" + checksum: 10c0/01f2134e1bd7d3ab68be851df96c8d63b492b1853b67f2eecb2c37bb682d37cb70bb858a16f2f0554d3c0071be6dfe21456a1ff6fa4b7eed996570d6a25ffe9c languageName: node linkType: hard -"call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": - version: 1.0.7 - resolution: "call-bind@npm:1.0.7" +"cacheable@npm:^1.8.7": + version: 1.8.7 + resolution: "cacheable@npm:1.8.7" dependencies: - es-define-property: "npm:^1.0.0" - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - get-intrinsic: "npm:^1.2.4" - set-function-length: "npm:^1.2.1" - checksum: 10c0/a3ded2e423b8e2a265983dba81c27e125b48eefb2655e7dfab6be597088da3d47c47976c24bc51b8fd9af1061f8f87b4ab78a314f3c77784b2ae2ba535ad8b8d + hookified: "npm:^1.6.0" + keyv: "npm:^5.2.3" + checksum: 10c0/3403c2afe9f8bb804b2371e2aa45f10c1f817945ce20b3da2338d2f0b099c9a9d28e59939592e832ba0e6b1d932f8555cc0a0d815ca7bd68a086e1ad131ae40a languageName: node linkType: hard -"callsites@npm:^3.0.0": - version: 3.1.0 - resolution: "callsites@npm:3.1.0" - checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 +"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1": + version: 1.0.1 + resolution: "call-bind-apply-helpers@npm:1.0.1" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + checksum: 10c0/acb2ab68bf2718e68a3e895f0d0b73ccc9e45b9b6f210f163512ba76f91dab409eb8792f6dae188356f9095747512a3101646b3dea9d37fb8c7c6bf37796d18c languageName: node linkType: hard -"camelcase@npm:^5.0.0": - version: 5.3.1 - resolution: "camelcase@npm:5.3.1" - checksum: 10c0/92ff9b443bfe8abb15f2b1513ca182d16126359ad4f955ebc83dc4ddcc4ef3fdd2c078bc223f2673dc223488e75c99b16cc4d056624374b799e6a1555cf61b23 +"call-bind@npm:^1.0.7, call-bind@npm:^1.0.8": + version: 1.0.8 + resolution: "call-bind@npm:1.0.8" + dependencies: + call-bind-apply-helpers: "npm:^1.0.0" + es-define-property: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.4" + set-function-length: "npm:^1.2.2" + checksum: 10c0/a13819be0681d915144467741b69875ae5f4eba8961eb0bf322aab63ec87f8250eb6d6b0dcbb2e1349876412a56129ca338592b3829ef4343527f5f18a0752d4 languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001640": - version: 1.0.30001641 - resolution: "caniuse-lite@npm:1.0.30001641" - checksum: 10c0/a065b641cfcc84b36955ee909bfd7313ad103d6a299f0fd261e0e4160e8f1cec79d685c5a9f11097a77687cf47154eddb8133163f2a34bcb8d73c45033a014d2 +"call-bound@npm:^1.0.2, call-bound@npm:^1.0.3": + version: 1.0.3 + resolution: "call-bound@npm:1.0.3" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/45257b8e7621067304b30dbd638e856cac913d31e8e00a80d6cf172911acd057846572d0b256b45e652d515db6601e2974a1b1a040e91b4fc36fb3dd86fa69cf languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001646": - version: 1.0.30001658 - resolution: "caniuse-lite@npm:1.0.30001658" - checksum: 10c0/e01f19ac72f056d2b4b680ff2e83d1abf99c0ce0863593bc6abbc40c53589a5c1697b4605b0937a3a431addb2145615e941b91c10d6b63475b7292500339406f +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 languageName: node linkType: hard -"chalk@npm:^2.4.0, chalk@npm:^2.4.1, chalk@npm:^2.4.2": - version: 2.4.2 - resolution: "chalk@npm:2.4.2" - dependencies: - ansi-styles: "npm:^3.2.1" - escape-string-regexp: "npm:^1.0.5" - supports-color: "npm:^5.3.0" - checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 +"caniuse-lite@npm:^1.0.30001646, caniuse-lite@npm:^1.0.30001688": + version: 1.0.30001695 + resolution: "caniuse-lite@npm:1.0.30001695" + checksum: 10c0/acf90a767051fdd8083711b3ff9f07a28149c55e394115d8f874f149aa4f130e6bc50cea1dd94fe03035b9ebbe13b64f446518a6d2e19f72650962bdff44b2c5 languageName: node linkType: hard @@ -2633,138 +2312,29 @@ __metadata: languageName: node linkType: hard -"checkstyle-formatter@npm:^1.1.0": - version: 1.1.0 - resolution: "checkstyle-formatter@npm:1.1.0" - dependencies: - xml-escape: "npm:^1.0.0" - checksum: 10c0/85e63d281eabb13b12f54db09ca0082800c2fce67a42fdd36b8233d298e48b09bf5888ffd82d8262f0b75daf8fa404c2e6323aec02481fbc21a37c8d6a8a2d1a - languageName: node - linkType: hard - -"chokidar@npm:>=3.0.0 <4.0.0": - version: 3.6.0 - resolution: "chokidar@npm:3.6.0" - dependencies: - anymatch: "npm:~3.1.2" - braces: "npm:~3.0.2" - fsevents: "npm:~2.3.2" - glob-parent: "npm:~5.1.2" - is-binary-path: "npm:~2.1.0" - is-glob: "npm:~4.0.1" - normalize-path: "npm:~3.0.0" - readdirp: "npm:~3.6.0" - dependenciesMeta: - fsevents: - optional: true - checksum: 10c0/8361dcd013f2ddbe260eacb1f3cb2f2c6f2b0ad118708a343a5ed8158941a39cb8fb1d272e0f389712e74ee90ce8ba864eece9e0e62b9705cb468a2f6d917462 - languageName: node - linkType: hard - -"chownr@npm:^2.0.0": - version: 2.0.0 - resolution: "chownr@npm:2.0.0" - checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 - languageName: node - linkType: hard - -"ci-info@npm:^2.0.0": - version: 2.0.0 - resolution: "ci-info@npm:2.0.0" - checksum: 10c0/8c5fa3830a2bcee2b53c2e5018226f0141db9ec9f7b1e27a5c57db5512332cde8a0beb769bcbaf0d8775a78afbf2bb841928feca4ea6219638a5b088f9884b46 - languageName: node - linkType: hard - -"classnames@npm:*, classnames@npm:^2.5.1": - version: 2.5.1 - resolution: "classnames@npm:2.5.1" - checksum: 10c0/afff4f77e62cea2d79c39962980bf316bacb0d7c49e13a21adaadb9221e1c6b9d3cdb829d8bb1b23c406f4e740507f37e1dcf506f7e3b7113d17c5bab787aa69 - languageName: node - linkType: hard - -"clean-stack@npm:^2.0.0": - version: 2.2.0 - resolution: "clean-stack@npm:2.2.0" - checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 - languageName: node - linkType: hard - -"cli-truncate@npm:^1.1.0": - version: 1.1.0 - resolution: "cli-truncate@npm:1.1.0" - dependencies: - slice-ansi: "npm:^1.0.0" - string-width: "npm:^2.0.0" - checksum: 10c0/1083425d2c0d88dfec49b621973d5e79e59acdca33c26498c53d6ca4b854646c906c15b0bb4e2ac88fb7f1e8eaa306a586002b0f50d3e87d0ce608dce1ee8222 - languageName: node - linkType: hard - -"cliui@npm:^4.0.0": - version: 4.1.0 - resolution: "cliui@npm:4.1.0" +"chokidar@npm:^4.0.0": + version: 4.0.3 + resolution: "chokidar@npm:4.0.3" dependencies: - string-width: "npm:^2.1.1" - strip-ansi: "npm:^4.0.0" - wrap-ansi: "npm:^2.0.0" - checksum: 10c0/5cee4720850655365014f158407f65f92e22e6a46be17d4844889d2173bd9327fabf41d08b309016e825a3888a558b606f1a89c7d2f805720b24902235bae4e5 - languageName: node - linkType: hard - -"clone-buffer@npm:^1.0.0": - version: 1.0.0 - resolution: "clone-buffer@npm:1.0.0" - checksum: 10c0/d813f4d12651bc4951d5e4869e2076d34ccfc3b23d0aae4e2e20e5a5e97bc7edbba84038356d222c54b25e3a83b5f45e8b637c18c6bd1794b2f1b49114122c50 - languageName: node - linkType: hard - -"clone-stats@npm:^1.0.0": - version: 1.0.0 - resolution: "clone-stats@npm:1.0.0" - checksum: 10c0/bb1e05991e034e1eb104173c25bb652ea5b2b4dad5a49057a857e00f8d1da39de3bd689128a25bab8cbdfbea8ae8f6066030d106ed5c299a7d92be7967c50217 + readdirp: "npm:^4.0.1" + checksum: 10c0/a58b9df05bb452f7d105d9e7229ac82fa873741c0c40ddcc7bb82f8a909fbe3f7814c9ebe9bc9a2bef9b737c0ec6e2d699d179048ef06ad3ec46315df0ebe6ad languageName: node linkType: hard -"clone@npm:^2.1.1": - version: 2.1.2 - resolution: "clone@npm:2.1.2" - checksum: 10c0/ed0601cd0b1606bc7d82ee7175b97e68d1dd9b91fd1250a3617b38d34a095f8ee0431d40a1a611122dcccb4f93295b4fdb94942aa763392b5fe44effa50c2d5e - languageName: node - linkType: hard - -"cloneable-readable@npm:^1.0.0": - version: 1.1.3 - resolution: "cloneable-readable@npm:1.1.3" - dependencies: - inherits: "npm:^2.0.1" - process-nextick-args: "npm:^2.0.0" - readable-stream: "npm:^2.3.5" - checksum: 10c0/52db2904dcfcd117e4e9605b69607167096c954352eff0fcded0a16132c9cfc187b36b5db020bee2dc1b3a968ca354f8b30aef3d8b4ea74e3ea83a81d43e47bb +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 languageName: node linkType: hard -"clsx@npm:^2.0.0, clsx@npm:^2.1.0, clsx@npm:^2.1.1": +"clsx@npm:^2.0.0, clsx@npm:^2.1.1": version: 2.1.1 resolution: "clsx@npm:2.1.1" checksum: 10c0/c4c8eb865f8c82baab07e71bfa8897c73454881c4f99d6bc81585aecd7c441746c1399d08363dc096c550cceaf97bd4ce1e8854e1771e9998d9f94c4fe075839 languageName: node linkType: hard -"code-point-at@npm:^1.0.0": - version: 1.1.0 - resolution: "code-point-at@npm:1.1.0" - checksum: 10c0/33f6b234084e46e6e369b6f0b07949392651b4dde70fc6a592a8d3dafa08d5bb32e3981a02f31f6fc323a26bc03a4c063a9d56834848695bda7611c2417ea2e6 - languageName: node - linkType: hard - -"color-convert@npm:^1.9.0": - version: 1.9.3 - resolution: "color-convert@npm:1.9.3" - dependencies: - color-name: "npm:1.1.3" - checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c - languageName: node - linkType: hard - "color-convert@npm:^2.0.1": version: 2.0.1 resolution: "color-convert@npm:2.0.1" @@ -2774,13 +2344,6 @@ __metadata: languageName: node linkType: hard -"color-name@npm:1.1.3": - version: 1.1.3 - resolution: "color-name@npm:1.1.3" - checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 - languageName: node - linkType: hard - "color-name@npm:~1.1.4": version: 1.1.4 resolution: "color-name@npm:1.1.4" @@ -2788,15 +2351,6 @@ __metadata: languageName: node linkType: hard -"color-support@npm:^1.1.3": - version: 1.1.3 - resolution: "color-support@npm:1.1.3" - bin: - color-support: bin.js - checksum: 10c0/8ffeaa270a784dc382f62d9be0a98581db43e11eee301af14734a6d089bd456478b1a8b3e7db7ca7dc5b18a75f828f775c44074020b51c05fc00e6d0992b1cc6 - languageName: node - linkType: hard - "colord@npm:^2.9.3": version: 2.9.3 resolution: "colord@npm:2.9.3" @@ -2813,10 +2367,27 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.19.0": - version: 2.20.3 - resolution: "commander@npm:2.20.3" - checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 +"compressible@npm:~2.0.18": + version: 2.0.18 + resolution: "compressible@npm:2.0.18" + dependencies: + mime-db: "npm:>= 1.43.0 < 2" + checksum: 10c0/8a03712bc9f5b9fe530cc5a79e164e665550d5171a64575d7dcf3e0395d7b4afa2d79ab176c61b5b596e28228b350dd07c1a2a6ead12fd81d1b6cd632af2fef7 + languageName: node + linkType: hard + +"compression@npm:^1.7.4": + version: 1.7.5 + resolution: "compression@npm:1.7.5" + dependencies: + bytes: "npm:3.1.2" + compressible: "npm:~2.0.18" + debug: "npm:2.6.9" + negotiator: "npm:~0.6.4" + on-headers: "npm:~1.0.2" + safe-buffer: "npm:5.2.1" + vary: "npm:~1.1.2" + checksum: 10c0/35c9d2d57c86d8107eab5e637f2146fcefec8475a2ff3e162f5eb0982ff856d385fb5d8c9823c3d50e075f2d9304bc622dac3df27bfef0355309c0a5307861c5 languageName: node linkType: hard @@ -2827,6 +2398,22 @@ __metadata: languageName: node linkType: hard +"content-disposition@npm:0.5.4": + version: 0.5.4 + resolution: "content-disposition@npm:0.5.4" + dependencies: + safe-buffer: "npm:5.2.1" + checksum: 10c0/bac0316ebfeacb8f381b38285dc691c9939bf0a78b0b7c2d5758acadad242d04783cee5337ba7d12a565a19075af1b3c11c728e1e4946de73c6ff7ce45f3f1bb + languageName: node + linkType: hard + +"content-type@npm:~1.0.4, content-type@npm:~1.0.5": + version: 1.0.5 + resolution: "content-type@npm:1.0.5" + checksum: 10c0/b76ebed15c000aee4678c3707e0860cb6abd4e680a598c0a26e17f0bfae723ec9cc2802f0ff1bc6e4d80603719010431d2231018373d4dde10f9ccff9dadf5af + languageName: node + linkType: hard + "convert-source-map@npm:^1.5.0": version: 1.9.0 resolution: "convert-source-map@npm:1.9.0" @@ -2841,6 +2428,27 @@ __metadata: languageName: node linkType: hard +"cookie-signature@npm:1.0.6": + version: 1.0.6 + resolution: "cookie-signature@npm:1.0.6" + checksum: 10c0/b36fd0d4e3fef8456915fcf7742e58fbfcc12a17a018e0eb9501c9d5ef6893b596466f03b0564b81af29ff2538fd0aa4b9d54fe5ccbfb4c90ea50ad29fe2d221 + languageName: node + linkType: hard + +"cookie@npm:0.7.1": + version: 0.7.1 + resolution: "cookie@npm:0.7.1" + checksum: 10c0/5de60c67a410e7c8dc8a46a4b72eb0fe925871d057c9a5d2c0e8145c4270a4f81076de83410c4d397179744b478e33cd80ccbcc457abf40a9409ad27dcd21dde + languageName: node + linkType: hard + +"cookie@npm:^1.0.1": + version: 1.0.2 + resolution: "cookie@npm:1.0.2" + checksum: 10c0/fd25fe79e8fbcfcaf6aa61cd081c55d144eeeba755206c058682257cb38c4bd6795c6620de3f064c740695bb65b7949ebb1db7a95e4636efb8357a335ad3f54b + languageName: node + linkType: hard + "core-util-is@npm:~1.0.0": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" @@ -2861,23 +2469,6 @@ __metadata: languageName: node linkType: hard -"cosmiconfig@npm:^8.0.0": - version: 8.3.6 - resolution: "cosmiconfig@npm:8.3.6" - dependencies: - import-fresh: "npm:^3.3.0" - js-yaml: "npm:^4.1.0" - parse-json: "npm:^5.2.0" - path-type: "npm:^4.0.0" - peerDependencies: - typescript: ">=4.9.5" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/0382a9ed13208f8bfc22ca2f62b364855207dffdb73dc26e150ade78c3093f1cf56172df2dd460c8caf2afa91c0ed4ec8a88c62f8f9cd1cf423d26506aa8797a - languageName: node - linkType: hard - "cosmiconfig@npm:^9.0.0": version: 9.0.0 resolution: "cosmiconfig@npm:9.0.0" @@ -2895,72 +2486,31 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^4.0.0": - version: 4.0.2 - resolution: "cross-spawn@npm:4.0.2" - dependencies: - lru-cache: "npm:^4.0.1" - which: "npm:^1.2.9" - checksum: 10c0/4de7254653b658776be8e1050473349723d2ac8bc10b912fbeb159ad32d06c7fa2135b04b896b7cbe0141d274dae9d7543cc6e5c9c919e2062e44a66c2184665 - languageName: node - linkType: hard - -"cross-spawn@npm:^5.0.1": - version: 5.1.0 - resolution: "cross-spawn@npm:5.1.0" - dependencies: - lru-cache: "npm:^4.0.1" - shebang-command: "npm:^1.2.0" - which: "npm:^1.2.9" - checksum: 10c0/1918621fddb9f8c61e02118b2dbf81f611ccd1544ceaca0d026525341832b8511ce2504c60f935dbc06b35e5ef156fe8c1e72708c27dd486f034e9c0e1e07201 - languageName: node - linkType: hard - -"cross-spawn@npm:^6.0.0": - version: 6.0.5 - resolution: "cross-spawn@npm:6.0.5" - dependencies: - nice-try: "npm:^1.0.4" - path-key: "npm:^2.0.1" - semver: "npm:^5.5.0" - shebang-command: "npm:^1.2.0" - which: "npm:^1.2.9" - checksum: 10c0/e05544722e9d7189b4292c66e42b7abeb21db0d07c91b785f4ae5fefceb1f89e626da2703744657b287e86dcd4af57b54567cef75159957ff7a8a761d9055012 - languageName: node - linkType: hard - -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.6": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" dependencies: path-key: "npm:^3.1.0" shebang-command: "npm:^2.0.0" which: "npm:^2.0.1" - checksum: 10c0/5738c312387081c98d69c98e105b6327b069197f864a60593245d64c8089c8a0a744e16349281210d56835bb9274130d825a78b2ad6853ca13cfbeffc0c31750 + checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 languageName: node linkType: hard -"css-functions-list@npm:^3.2.2": - version: 3.2.2 - resolution: "css-functions-list@npm:3.2.2" - checksum: 10c0/8638a63d0cf1bdc50d4a752ec1c94a57e9953c3b03eace4f5526db20bec3c061e95089f905dbb4999c44b9780ce777ba856967560f6d15119a303f6030901c10 +"css-functions-list@npm:^3.2.3": + version: 3.2.3 + resolution: "css-functions-list@npm:3.2.3" + checksum: 10c0/03f9ed34eeed310d2b1cf0e524eea02bc5f87854a4de85f8957ea432ab1036841a3fb00879590519f7bb8fda40d992ce7a72fa9b61696ca1dc53b90064858f96 languageName: node linkType: hard -"css-tree@npm:^2.3.1": - version: 2.3.1 - resolution: "css-tree@npm:2.3.1" +"css-tree@npm:^3.0.1, css-tree@npm:^3.1.0": + version: 3.1.0 + resolution: "css-tree@npm:3.1.0" dependencies: - mdn-data: "npm:2.0.30" + mdn-data: "npm:2.12.2" source-map-js: "npm:^1.0.1" - checksum: 10c0/6f8c1a11d5e9b14bf02d10717fc0351b66ba12594166f65abfbd8eb8b5b490dd367f5c7721db241a3c792d935fc6751fbc09f7e1598d421477ad9fadc30f4f24 - languageName: node - linkType: hard - -"css.escape@npm:^1.5.1": - version: 1.5.1 - resolution: "css.escape@npm:1.5.1" - checksum: 10c0/5e09035e5bf6c2c422b40c6df2eb1529657a17df37fda5d0433d722609527ab98090baf25b13970ca754079a0f3161dd3dfc0e743563ded8cfa0749d861c1525 + checksum: 10c0/b5715852c2f397c715ca00d56ec53fc83ea596295ae112eb1ba6a1bda3b31086380e596b1d8c4b980fe6da09e7d0fc99c64d5bb7313030dd0fba9c1415f30979 languageName: node linkType: hard @@ -2973,13 +2523,6 @@ __metadata: languageName: node linkType: hard -"cssjanus@npm:^2.0.1": - version: 2.3.0 - resolution: "cssjanus@npm:2.3.0" - checksum: 10c0/b410c6f31c80947cc4508f232bab13beb3de6c38f1824962d12ef64b754d0191230efc2211815bc144ddbf50e509d63d0f120fc2402f657762e1f6bd60edf6a3 - languageName: node - linkType: hard - "csstype@npm:^3.0.2, csstype@npm:^3.1.3": version: 3.1.3 resolution: "csstype@npm:3.1.3" @@ -2987,97 +2530,83 @@ __metadata: languageName: node linkType: hard -"csv-parse@npm:^5.5.6": - version: 5.5.6 - resolution: "csv-parse@npm:5.5.6" - checksum: 10c0/b4f6e9b885e4488829356455157bd009f3fed4119c5fbaadab1a879e85f0a9a1b62cd01e6de68ff77a50f820a6261722bce1b799da1ace2e2126e0b7c8d86760 +"csv-parse@npm:^5.6.0": + version: 5.6.0 + resolution: "csv-parse@npm:5.6.0" + checksum: 10c0/52f5e6c45359902e0c8e57fc2eeed41366dc6b6d283b495b538dd50c8e8510413d6f924096ea056319cbbb8ed26e111c3a3485d7985c021bcf5abaa9e92425c7 languageName: node linkType: hard -"data-view-buffer@npm:^1.0.1": - version: 1.0.1 - resolution: "data-view-buffer@npm:1.0.1" - dependencies: - call-bind: "npm:^1.0.6" - es-errors: "npm:^1.3.0" - is-data-view: "npm:^1.0.1" - checksum: 10c0/8984119e59dbed906a11fcfb417d7d861936f16697a0e7216fe2c6c810f6b5e8f4a5281e73f2c28e8e9259027190ac4a33e2a65fdd7fa86ac06b76e838918583 +"data-uri-to-buffer@npm:^4.0.0": + version: 4.0.1 + resolution: "data-uri-to-buffer@npm:4.0.1" + checksum: 10c0/20a6b93107597530d71d4cb285acee17f66bcdfc03fd81040921a81252f19db27588d87fc8fc69e1950c55cfb0bf8ae40d0e5e21d907230813eb5d5a7f9eb45b languageName: node linkType: hard -"data-view-byte-length@npm:^1.0.1": - version: 1.0.1 - resolution: "data-view-byte-length@npm:1.0.1" +"data-view-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "data-view-buffer@npm:1.0.2" dependencies: - call-bind: "npm:^1.0.7" + call-bound: "npm:^1.0.3" es-errors: "npm:^1.3.0" - is-data-view: "npm:^1.0.1" - checksum: 10c0/b7d9e48a0cf5aefed9ab7d123559917b2d7e0d65531f43b2fd95b9d3a6b46042dd3fca597c42bba384e66b70d7ad66ff23932f8367b241f53d93af42cfe04ec2 + is-data-view: "npm:^1.0.2" + checksum: 10c0/7986d40fc7979e9e6241f85db8d17060dd9a71bd53c894fa29d126061715e322a4cd47a00b0b8c710394854183d4120462b980b8554012acc1c0fa49df7ad38c languageName: node linkType: hard -"data-view-byte-offset@npm:^1.0.0": - version: 1.0.0 - resolution: "data-view-byte-offset@npm:1.0.0" +"data-view-byte-length@npm:^1.0.2": + version: 1.0.2 + resolution: "data-view-byte-length@npm:1.0.2" dependencies: - call-bind: "npm:^1.0.6" + call-bound: "npm:^1.0.3" es-errors: "npm:^1.3.0" - is-data-view: "npm:^1.0.1" - checksum: 10c0/21b0d2e53fd6e20cc4257c873bf6d36d77bd6185624b84076c0a1ddaa757b49aaf076254006341d35568e89f52eecd1ccb1a502cfb620f2beca04f48a6a62a8f + is-data-view: "npm:^1.0.2" + checksum: 10c0/f8a4534b5c69384d95ac18137d381f18a5cfae1f0fc1df0ef6feef51ef0d568606d970b69e02ea186c6c0f0eac77fe4e6ad96fec2569cc86c3afcc7475068c55 languageName: node linkType: hard -"date-format@npm:0.0.2": - version: 0.0.2 - resolution: "date-format@npm:0.0.2" - checksum: 10c0/ef6117bd0ca7b646c022909b15396a8492e8e3ef5bfcd560420faac0a0c45292a13a2f541da56f78dd79035ffb04eeb7a219edfbb6c7b98ac3b091666dc69e55 - languageName: node - linkType: hard - -"dayjs@npm:^1.11.11": - version: 1.11.11 - resolution: "dayjs@npm:1.11.11" - checksum: 10c0/0131d10516b9945f05a57e13f4af49a6814de5573a494824e103131a3bbe4cc470b1aefe8e17e51f9a478a22cd116084be1ee5725cedb66ec4c3f9091202dc4b - languageName: node - linkType: hard - -"debug@npm:4": - version: 4.3.7 - resolution: "debug@npm:4.3.7" +"data-view-byte-offset@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-byte-offset@npm:1.0.1" dependencies: - ms: "npm:^2.1.3" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10c0/1471db19c3b06d485a622d62f65947a19a23fbd0dd73f7fd3eafb697eec5360cde447fb075919987899b1a2096e85d35d4eb5a4de09a57600ac9cf7e6c8e768b + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 10c0/fa7aa40078025b7810dcffc16df02c480573b7b53ef1205aa6a61533011005c1890e5ba17018c692ce7c900212b547262d33279fde801ad9843edc0863bf78c4 languageName: node linkType: hard -"debug@npm:=3.1.0": - version: 3.1.0 - resolution: "debug@npm:3.1.0" +"debug@npm:2.6.9": + version: 2.6.9 + resolution: "debug@npm:2.6.9" dependencies: ms: "npm:2.0.0" - checksum: 10c0/5bff34a352d7b2eaa31886eeaf2ee534b5461ec0548315b2f9f80bd1d2533cab7df1fa52e130ce27bc31c3945fbffb0fc72baacdceb274b95ce853db89254ea4 + checksum: 10c0/121908fb839f7801180b69a7e218a40b5a0b718813b886b7d6bdb82001b931c938e2941d1e4450f33a1b1df1da653f5f7a0440c197f29fbf8a6e9d45ff6ef589 languageName: node linkType: hard -"debug@npm:^4.1.0, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4": - version: 4.3.5 - resolution: "debug@npm:4.3.5" +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.7, debug@npm:^4.4.0": + version: 4.4.0 + resolution: "debug@npm:4.4.0" dependencies: - ms: "npm:2.1.2" + ms: "npm:^2.1.3" peerDependenciesMeta: supports-color: optional: true - checksum: 10c0/082c375a2bdc4f4469c99f325ff458adad62a3fc2c482d59923c260cb08152f34e2659f72b3767db8bb2f21ca81a60a42d1019605a412132d7b9f59363a005cc + checksum: 10c0/db94f1a182bf886f57b4755f85b3a74c39b5114b9377b7ab375dc2cfa3454f09490cc6c30f829df3fc8042bc8b8995f6567ce5cd96f3bc3688bd24027197d9de languageName: node linkType: hard -"decamelize@npm:^1.2.0": - version: 1.2.0 - resolution: "decamelize@npm:1.2.0" - checksum: 10c0/85c39fe8fbf0482d4a1e224ef0119db5c1897f8503bcef8b826adff7a1b11414972f6fef2d7dec2ee0b4be3863cf64ac1439137ae9e6af23a3d8dcbe26a5b4b2 +"dedent@npm:^1.5.3": + version: 1.5.3 + resolution: "dedent@npm:1.5.3" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: 10c0/d94bde6e6f780be4da4fd760288fcf755ec368872f4ac5218197200d86430aeb8d90a003a840bff1c20221188e3f23adced0119cb811c6873c70d0ac66d12832 languageName: node linkType: hard @@ -3088,13 +2617,6 @@ __metadata: languageName: node linkType: hard -"deepmerge@npm:^2.2.1": - version: 2.2.1 - resolution: "deepmerge@npm:2.2.1" - checksum: 10c0/4379288cabd817587cee92a095ea65d18317b45e48010a2e0d87982b5f432239a144f9c8ebd4ab090cc21f0cb47e51ebfe32921f329b3b3084a2711d5d63e450 - languageName: node - linkType: hard - "define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": version: 1.1.4 resolution: "define-data-property@npm:1.1.4" @@ -3106,7 +2628,7 @@ __metadata: languageName: node linkType: hard -"define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": +"define-properties@npm:^1.1.3, define-properties@npm:^1.2.1": version: 1.2.1 resolution: "define-properties@npm:1.2.1" dependencies: @@ -3124,6 +2646,20 @@ __metadata: languageName: node linkType: hard +"depd@npm:2.0.0, depd@npm:~2.0.0": + version: 2.0.0 + resolution: "depd@npm:2.0.0" + checksum: 10c0/58bd06ec20e19529b06f7ad07ddab60e504d9e0faca4bd23079fac2d279c3594334d736508dc350e06e510aba5e22e4594483b3a6562ce7c17dd797f4cc4ad2c + languageName: node + linkType: hard + +"destroy@npm:1.2.0": + version: 1.2.0 + resolution: "destroy@npm:1.2.0" + checksum: 10c0/bd7633942f57418f5a3b80d5cb53898127bcf53e24cdf5d5f4396be471417671f0fee48a4ebe9a1e9defbde2a31280011af58a57e090ff822f589b443ed4e643 + languageName: node + linkType: hard + "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -3142,15 +2678,6 @@ __metadata: languageName: node linkType: hard -"doctrine@npm:^3.0.0": - version: 3.0.0 - resolution: "doctrine@npm:3.0.0" - dependencies: - esutils: "npm:^2.0.2" - checksum: 10c0/c96bdccabe9d62ab6fea9399fdff04a66e6563c1d6fb3a3a063e8d53c3bb136ba63e84250bbf63d00086a769ad53aef92d2bd483f03f837fc97b71cbee6b2520 - languageName: node - linkType: hard - "dom-helpers@npm:^5.0.1": version: 5.2.1 resolution: "dom-helpers@npm:5.2.1" @@ -3161,7 +2688,18 @@ __metadata: languageName: node linkType: hard -"duplexify@npm:^3.6.0": +"dunder-proto@npm:^1.0.0, dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.2.0" + checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 + languageName: node + linkType: hard + +"duplexify@npm:^3.5.0, duplexify@npm:^3.6.0": version: 3.7.1 resolution: "duplexify@npm:3.7.1" dependencies: @@ -3180,63 +2718,17 @@ __metadata: languageName: node linkType: hard -"eclint@npm:^2.8.1": - version: 2.8.1 - resolution: "eclint@npm:2.8.1" - dependencies: - editorconfig: "npm:^0.15.2" - file-type: "npm:^10.1.0" - gulp-exclude-gitignore: "npm:^1.2.0" - gulp-filter: "npm:^5.1.0" - gulp-reporter: "npm:^2.9.0" - gulp-tap: "npm:^1.0.1" - linez: "npm:^4.1.4" - lodash: "npm:^4.17.11" - minimatch: "npm:^3.0.4" - os-locale: "npm:^3.0.1" - plugin-error: "npm:^1.0.1" - through2: "npm:^2.0.3" - vinyl: "npm:^2.2.0" - vinyl-fs: "npm:^3.0.3" - yargs: "npm:^12.0.2" - bin: - eclint: bin/eclint.js - checksum: 10c0/9689000a4b147d19ff401f90d3c92866375845fc3db7ee5868f4ead0fcf27e8080c480eda693bde00a171dd07f98f1fffb0c6039cb50a0319d901f40a2e40398 - languageName: node - linkType: hard - -"editorconfig@npm:^0.15.2": - version: 0.15.3 - resolution: "editorconfig@npm:0.15.3" - dependencies: - commander: "npm:^2.19.0" - lru-cache: "npm:^4.1.5" - semver: "npm:^5.6.0" - sigmund: "npm:^1.0.1" - bin: - editorconfig: bin/editorconfig - checksum: 10c0/801f433299a7500f15ed770d2dc9e5b763f71c1eda61c4e9a1222d3bab1be7d591632dfe9698872df845ccfa97bba394bcbf074a2ad367d1c0377a59abe0c00e - languageName: node - linkType: hard - -"electron-to-chromium@npm:^1.4.820": - version: 1.4.823 - resolution: "electron-to-chromium@npm:1.4.823" - checksum: 10c0/772ad25e1305ab4a1a18beb9edae5d62ba55c5660c9d20a86c90e195d22da64dcf209ba8c9fb8172c76d1cbff12ea56a83eb75863bd2b22fb7ddabcd1d73c1e7 - languageName: node - linkType: hard - -"electron-to-chromium@npm:^1.5.4": - version: 1.5.17 - resolution: "electron-to-chromium@npm:1.5.17" - checksum: 10c0/7d0f7bc89505a3d96b4632416c331fa23c1fa80c5b6550c5e618dcb34579240d5748b64010fe6cb64ebcc998ab7f2f5a39b8645130e9786685b4031fb5dc926f +"ee-first@npm:1.1.1": + version: 1.1.1 + resolution: "ee-first@npm:1.1.1" + checksum: 10c0/b5bb125ee93161bc16bfe6e56c6b04de5ad2aa44234d8f644813cc95d861a6910903132b05093706de2b706599367c4130eb6d170f6b46895686b95f87d017b7 languageName: node linkType: hard -"emoji-regex@npm:^7.0.1": - version: 7.0.3 - resolution: "emoji-regex@npm:7.0.3" - checksum: 10c0/a8917d695c3a3384e4b7230a6a06fd2de6b3db3709116792e8b7b36ddbb3db4deb28ad3e983e70d4f2a1f9063b5dab9025e4e26e9ca08278da4fbb73e213743f +"electron-to-chromium@npm:^1.5.73": + version: 1.5.86 + resolution: "electron-to-chromium@npm:1.5.86" + checksum: 10c0/f0af8465d9390d21cb3ffec5ed6ce011b5026615f59ebc7a70bb0da806a27918888b2ec446432a5080da0e0bea4f3c6a3a4dcff24c9eb8e884813b0ccceedc59 languageName: node linkType: hard @@ -3254,14 +2746,17 @@ __metadata: languageName: node linkType: hard -"emphasize@npm:^2.0.0": - version: 2.1.0 - resolution: "emphasize@npm:2.1.0" - dependencies: - chalk: "npm:^2.4.0" - highlight.js: "npm:~9.12.0" - lowlight: "npm:~1.9.0" - checksum: 10c0/88fc7cce628dec539f96c208212303bf152c56318fa149617b33f2df18f6cfe966ab4c4d0c50b5976f68257da8f1130d2c2e00f5ef74773f9ef5cd96f8b1c4cb +"encodeurl@npm:~1.0.2": + version: 1.0.2 + resolution: "encodeurl@npm:1.0.2" + checksum: 10c0/f6c2387379a9e7c1156c1c3d4f9cb7bb11cf16dd4c1682e1f6746512564b053df5781029b6061296832b59fb22f459dbe250386d217c2f6e203601abb2ee0bec + languageName: node + linkType: hard + +"encodeurl@npm:~2.0.0": + version: 2.0.0 + resolution: "encodeurl@npm:2.0.0" + checksum: 10c0/5d317306acb13e6590e28e27924c754163946a2480de11865c991a3a7eed4315cd3fba378b543ca145829569eefe9b899f3d84bb09870f675ae60bc924b01ceb languageName: node linkType: hard @@ -3283,13 +2778,6 @@ __metadata: languageName: node linkType: hard -"entities@npm:^4.5.0": - version: 4.5.0 - resolution: "entities@npm:4.5.0" - checksum: 10c0/5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250 - languageName: node - linkType: hard - "env-paths@npm:^2.2.0, env-paths@npm:^2.2.1": version: 2.2.1 resolution: "env-paths@npm:2.2.1" @@ -3313,119 +2801,132 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.1, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3": - version: 1.23.3 - resolution: "es-abstract@npm:1.23.3" +"es-abstract@npm:^1.17.5, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.6, es-abstract@npm:^1.23.9": + version: 1.23.9 + resolution: "es-abstract@npm:1.23.9" dependencies: - array-buffer-byte-length: "npm:^1.0.1" - arraybuffer.prototype.slice: "npm:^1.0.3" + array-buffer-byte-length: "npm:^1.0.2" + arraybuffer.prototype.slice: "npm:^1.0.4" available-typed-arrays: "npm:^1.0.7" - call-bind: "npm:^1.0.7" - data-view-buffer: "npm:^1.0.1" - data-view-byte-length: "npm:^1.0.1" - data-view-byte-offset: "npm:^1.0.0" - es-define-property: "npm:^1.0.0" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + data-view-buffer: "npm:^1.0.2" + data-view-byte-length: "npm:^1.0.2" + data-view-byte-offset: "npm:^1.0.1" + es-define-property: "npm:^1.0.1" es-errors: "npm:^1.3.0" es-object-atoms: "npm:^1.0.0" - es-set-tostringtag: "npm:^2.0.3" - es-to-primitive: "npm:^1.2.1" - function.prototype.name: "npm:^1.1.6" - get-intrinsic: "npm:^1.2.4" - get-symbol-description: "npm:^1.0.2" - globalthis: "npm:^1.0.3" - gopd: "npm:^1.0.1" + es-set-tostringtag: "npm:^2.1.0" + es-to-primitive: "npm:^1.3.0" + function.prototype.name: "npm:^1.1.8" + get-intrinsic: "npm:^1.2.7" + get-proto: "npm:^1.0.0" + get-symbol-description: "npm:^1.1.0" + globalthis: "npm:^1.0.4" + gopd: "npm:^1.2.0" has-property-descriptors: "npm:^1.0.2" - has-proto: "npm:^1.0.3" - has-symbols: "npm:^1.0.3" + has-proto: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" hasown: "npm:^2.0.2" - internal-slot: "npm:^1.0.7" - is-array-buffer: "npm:^3.0.4" + internal-slot: "npm:^1.1.0" + is-array-buffer: "npm:^3.0.5" is-callable: "npm:^1.2.7" - is-data-view: "npm:^1.0.1" - is-negative-zero: "npm:^2.0.3" - is-regex: "npm:^1.1.4" - is-shared-array-buffer: "npm:^1.0.3" - is-string: "npm:^1.0.7" - is-typed-array: "npm:^1.1.13" - is-weakref: "npm:^1.0.2" - object-inspect: "npm:^1.13.1" + is-data-view: "npm:^1.0.2" + is-regex: "npm:^1.2.1" + is-shared-array-buffer: "npm:^1.0.4" + is-string: "npm:^1.1.1" + is-typed-array: "npm:^1.1.15" + is-weakref: "npm:^1.1.0" + math-intrinsics: "npm:^1.1.0" + object-inspect: "npm:^1.13.3" object-keys: "npm:^1.1.1" - object.assign: "npm:^4.1.5" - regexp.prototype.flags: "npm:^1.5.2" - safe-array-concat: "npm:^1.1.2" - safe-regex-test: "npm:^1.0.3" - string.prototype.trim: "npm:^1.2.9" - string.prototype.trimend: "npm:^1.0.8" + object.assign: "npm:^4.1.7" + own-keys: "npm:^1.0.1" + regexp.prototype.flags: "npm:^1.5.3" + safe-array-concat: "npm:^1.1.3" + safe-push-apply: "npm:^1.0.0" + safe-regex-test: "npm:^1.1.0" + set-proto: "npm:^1.0.0" + string.prototype.trim: "npm:^1.2.10" + string.prototype.trimend: "npm:^1.0.9" string.prototype.trimstart: "npm:^1.0.8" - typed-array-buffer: "npm:^1.0.2" - typed-array-byte-length: "npm:^1.0.1" - typed-array-byte-offset: "npm:^1.0.2" - typed-array-length: "npm:^1.0.6" - unbox-primitive: "npm:^1.0.2" - which-typed-array: "npm:^1.1.15" - checksum: 10c0/d27e9afafb225c6924bee9971a7f25f20c314f2d6cb93a63cada4ac11dcf42040896a6c22e5fb8f2a10767055ed4ddf400be3b1eb12297d281726de470b75666 + typed-array-buffer: "npm:^1.0.3" + typed-array-byte-length: "npm:^1.0.3" + typed-array-byte-offset: "npm:^1.0.4" + typed-array-length: "npm:^1.0.7" + unbox-primitive: "npm:^1.1.0" + which-typed-array: "npm:^1.1.18" + checksum: 10c0/1de229c9e08fe13c17fe5abaec8221545dfcd57e51f64909599a6ae896df84b8fd2f7d16c60cb00d7bf495b9298ca3581aded19939d4b7276854a4b066f8422b languageName: node linkType: hard -"es-define-property@npm:^1.0.0": - version: 1.0.0 - resolution: "es-define-property@npm:1.0.0" - dependencies: - get-intrinsic: "npm:^1.2.4" - checksum: 10c0/6bf3191feb7ea2ebda48b577f69bdfac7a2b3c9bcf97307f55fd6ef1bbca0b49f0c219a935aca506c993d8c5d8bddd937766cb760cd5e5a1071351f2df9f9aa4 +"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c languageName: node linkType: hard -"es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": +"es-errors@npm:^1.3.0": version: 1.3.0 resolution: "es-errors@npm:1.3.0" checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 languageName: node linkType: hard -"es-iterator-helpers@npm:^1.0.19": - version: 1.0.19 - resolution: "es-iterator-helpers@npm:1.0.19" +"es-iterator-helpers@npm:^1.2.1": + version: 1.2.1 + resolution: "es-iterator-helpers@npm:1.2.1" dependencies: - call-bind: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.3" + es-abstract: "npm:^1.23.6" es-errors: "npm:^1.3.0" es-set-tostringtag: "npm:^2.0.3" function-bind: "npm:^1.1.2" - get-intrinsic: "npm:^1.2.4" - globalthis: "npm:^1.0.3" + get-intrinsic: "npm:^1.2.6" + globalthis: "npm:^1.0.4" + gopd: "npm:^1.2.0" has-property-descriptors: "npm:^1.0.2" - has-proto: "npm:^1.0.3" - has-symbols: "npm:^1.0.3" - internal-slot: "npm:^1.0.7" - iterator.prototype: "npm:^1.1.2" - safe-array-concat: "npm:^1.1.2" - checksum: 10c0/ae8f0241e383b3d197383b9842c48def7fce0255fb6ed049311b686ce295595d9e389b466f6a1b7d4e7bb92d82f5e716d6fae55e20c1040249bf976743b038c5 + has-proto: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + internal-slot: "npm:^1.1.0" + iterator.prototype: "npm:^1.1.4" + safe-array-concat: "npm:^1.1.3" + checksum: 10c0/97e3125ca472d82d8aceea11b790397648b52c26d8768ea1c1ee6309ef45a8755bb63225a43f3150c7591cffc17caf5752459f1e70d583b4184370a8f04ebd2f + languageName: node + linkType: hard + +"es-module-lexer@npm:^1.3.1, es-module-lexer@npm:^1.5.4": + version: 1.6.0 + resolution: "es-module-lexer@npm:1.6.0" + checksum: 10c0/667309454411c0b95c476025929881e71400d74a746ffa1ff4cb450bd87f8e33e8eef7854d68e401895039ac0bac64e7809acbebb6253e055dd49ea9e3ea9212 languageName: node linkType: hard "es-object-atoms@npm:^1.0.0": - version: 1.0.0 - resolution: "es-object-atoms@npm:1.0.0" + version: 1.1.1 + resolution: "es-object-atoms@npm:1.1.1" dependencies: es-errors: "npm:^1.3.0" - checksum: 10c0/1fed3d102eb27ab8d983337bb7c8b159dd2a1e63ff833ec54eea1311c96d5b08223b433060ba240541ca8adba9eee6b0a60cdbf2f80634b784febc9cc8b687b4 + checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c languageName: node linkType: hard -"es-set-tostringtag@npm:^2.0.3": - version: 2.0.3 - resolution: "es-set-tostringtag@npm:2.0.3" +"es-set-tostringtag@npm:^2.0.3, es-set-tostringtag@npm:^2.1.0": + version: 2.1.0 + resolution: "es-set-tostringtag@npm:2.1.0" dependencies: - get-intrinsic: "npm:^1.2.4" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" has-tostringtag: "npm:^1.0.2" - hasown: "npm:^2.0.1" - checksum: 10c0/f22aff1585eb33569c326323f0b0d175844a1f11618b86e193b386f8be0ea9474cfbe46df39c45d959f7aa8f6c06985dc51dd6bce5401645ec5a74c4ceaa836a + hasown: "npm:^2.0.2" + checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af languageName: node linkType: hard -"es-shim-unscopables@npm:^1.0.0, es-shim-unscopables@npm:^1.0.2": +"es-shim-unscopables@npm:^1.0.2": version: 1.0.2 resolution: "es-shim-unscopables@npm:1.0.2" dependencies: @@ -3434,44 +2935,126 @@ __metadata: languageName: node linkType: hard -"es-to-primitive@npm:^1.2.1": - version: 1.2.1 - resolution: "es-to-primitive@npm:1.2.1" +"es-to-primitive@npm:^1.3.0": + version: 1.3.0 + resolution: "es-to-primitive@npm:1.3.0" + dependencies: + is-callable: "npm:^1.2.7" + is-date-object: "npm:^1.0.5" + is-symbol: "npm:^1.0.4" + checksum: 10c0/c7e87467abb0b438639baa8139f701a06537d2b9bc758f23e8622c3b42fd0fdb5bde0f535686119e446dd9d5e4c0f238af4e14960f4771877cf818d023f6730b + languageName: node + linkType: hard + +"esbuild@npm:^0.21.3": + version: 0.21.5 + resolution: "esbuild@npm:0.21.5" dependencies: - is-callable: "npm:^1.1.4" - is-date-object: "npm:^1.0.1" - is-symbol: "npm:^1.0.2" - checksum: 10c0/0886572b8dc075cb10e50c0af62a03d03a68e1e69c388bd4f10c0649ee41b1fbb24840a1b7e590b393011b5cdbe0144b776da316762653685432df37d6de60f1 + "@esbuild/aix-ppc64": "npm:0.21.5" + "@esbuild/android-arm": "npm:0.21.5" + "@esbuild/android-arm64": "npm:0.21.5" + "@esbuild/android-x64": "npm:0.21.5" + "@esbuild/darwin-arm64": "npm:0.21.5" + "@esbuild/darwin-x64": "npm:0.21.5" + "@esbuild/freebsd-arm64": "npm:0.21.5" + "@esbuild/freebsd-x64": "npm:0.21.5" + "@esbuild/linux-arm": "npm:0.21.5" + "@esbuild/linux-arm64": "npm:0.21.5" + "@esbuild/linux-ia32": "npm:0.21.5" + "@esbuild/linux-loong64": "npm:0.21.5" + "@esbuild/linux-mips64el": "npm:0.21.5" + "@esbuild/linux-ppc64": "npm:0.21.5" + "@esbuild/linux-riscv64": "npm:0.21.5" + "@esbuild/linux-s390x": "npm:0.21.5" + "@esbuild/linux-x64": "npm:0.21.5" + "@esbuild/netbsd-x64": "npm:0.21.5" + "@esbuild/openbsd-x64": "npm:0.21.5" + "@esbuild/sunos-x64": "npm:0.21.5" + "@esbuild/win32-arm64": "npm:0.21.5" + "@esbuild/win32-ia32": "npm:0.21.5" + "@esbuild/win32-x64": "npm:0.21.5" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/fa08508adf683c3f399e8a014a6382a6b65542213431e26206c0720e536b31c09b50798747c2a105a4bbba1d9767b8d3615a74c2f7bf1ddf6d836cd11eb672de languageName: node linkType: hard -"esbuild@npm:^0.21.3": - version: 0.21.5 - resolution: "esbuild@npm:0.21.5" - dependencies: - "@esbuild/aix-ppc64": "npm:0.21.5" - "@esbuild/android-arm": "npm:0.21.5" - "@esbuild/android-arm64": "npm:0.21.5" - "@esbuild/android-x64": "npm:0.21.5" - "@esbuild/darwin-arm64": "npm:0.21.5" - "@esbuild/darwin-x64": "npm:0.21.5" - "@esbuild/freebsd-arm64": "npm:0.21.5" - "@esbuild/freebsd-x64": "npm:0.21.5" - "@esbuild/linux-arm": "npm:0.21.5" - "@esbuild/linux-arm64": "npm:0.21.5" - "@esbuild/linux-ia32": "npm:0.21.5" - "@esbuild/linux-loong64": "npm:0.21.5" - "@esbuild/linux-mips64el": "npm:0.21.5" - "@esbuild/linux-ppc64": "npm:0.21.5" - "@esbuild/linux-riscv64": "npm:0.21.5" - "@esbuild/linux-s390x": "npm:0.21.5" - "@esbuild/linux-x64": "npm:0.21.5" - "@esbuild/netbsd-x64": "npm:0.21.5" - "@esbuild/openbsd-x64": "npm:0.21.5" - "@esbuild/sunos-x64": "npm:0.21.5" - "@esbuild/win32-arm64": "npm:0.21.5" - "@esbuild/win32-ia32": "npm:0.21.5" - "@esbuild/win32-x64": "npm:0.21.5" +"esbuild@npm:^0.24.2": + version: 0.24.2 + resolution: "esbuild@npm:0.24.2" + dependencies: + "@esbuild/aix-ppc64": "npm:0.24.2" + "@esbuild/android-arm": "npm:0.24.2" + "@esbuild/android-arm64": "npm:0.24.2" + "@esbuild/android-x64": "npm:0.24.2" + "@esbuild/darwin-arm64": "npm:0.24.2" + "@esbuild/darwin-x64": "npm:0.24.2" + "@esbuild/freebsd-arm64": "npm:0.24.2" + "@esbuild/freebsd-x64": "npm:0.24.2" + "@esbuild/linux-arm": "npm:0.24.2" + "@esbuild/linux-arm64": "npm:0.24.2" + "@esbuild/linux-ia32": "npm:0.24.2" + "@esbuild/linux-loong64": "npm:0.24.2" + "@esbuild/linux-mips64el": "npm:0.24.2" + "@esbuild/linux-ppc64": "npm:0.24.2" + "@esbuild/linux-riscv64": "npm:0.24.2" + "@esbuild/linux-s390x": "npm:0.24.2" + "@esbuild/linux-x64": "npm:0.24.2" + "@esbuild/netbsd-arm64": "npm:0.24.2" + "@esbuild/netbsd-x64": "npm:0.24.2" + "@esbuild/openbsd-arm64": "npm:0.24.2" + "@esbuild/openbsd-x64": "npm:0.24.2" + "@esbuild/sunos-x64": "npm:0.24.2" + "@esbuild/win32-arm64": "npm:0.24.2" + "@esbuild/win32-ia32": "npm:0.24.2" + "@esbuild/win32-x64": "npm:0.24.2" dependenciesMeta: "@esbuild/aix-ppc64": optional: true @@ -3507,8 +3090,12 @@ __metadata: optional: true "@esbuild/linux-x64": optional: true + "@esbuild/netbsd-arm64": + optional: true "@esbuild/netbsd-x64": optional: true + "@esbuild/openbsd-arm64": + optional: true "@esbuild/openbsd-x64": optional: true "@esbuild/sunos-x64": @@ -3521,21 +3108,21 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: 10c0/fa08508adf683c3f399e8a014a6382a6b65542213431e26206c0720e536b31c09b50798747c2a105a4bbba1d9767b8d3615a74c2f7bf1ddf6d836cd11eb672de + checksum: 10c0/5a25bb08b6ba23db6e66851828d848bd3ff87c005a48c02d83e38879058929878a6baa5a414e1141faee0d1dece3f32b5fbc2a87b82ed6a7aa857cf40359aeb5 languageName: node linkType: hard -"escalade@npm:^3.1.2": - version: 3.1.2 - resolution: "escalade@npm:3.1.2" - checksum: 10c0/6b4adafecd0682f3aa1cd1106b8fff30e492c7015b178bc81b2d2f75106dabea6c6d6e8508fc491bd58e597c74abb0e8e2368f943ecb9393d4162e3c2f3cf287 +"escalade@npm:^3.2.0": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 languageName: node linkType: hard -"escape-string-regexp@npm:^1.0.5": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 +"escape-html@npm:~1.0.3": + version: 1.0.3 + resolution: "escape-html@npm:1.0.3" + checksum: 10c0/524c739d776b36c3d29fa08a22e03e8824e3b2fd57500e5e44ecf3cc4707c34c60f9ca0781c0e33d191f2991161504c295e98f68c78fe7baa6e57081ec6ac0a3 languageName: node linkType: hard @@ -3546,159 +3133,148 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-prettier@npm:^5.1.3": - version: 5.1.3 - resolution: "eslint-plugin-prettier@npm:5.1.3" - dependencies: - prettier-linter-helpers: "npm:^1.0.0" - synckit: "npm:^0.8.6" +"eslint-config-prettier@npm:^10.0.1": + version: 10.0.1 + resolution: "eslint-config-prettier@npm:10.0.1" peerDependencies: - "@types/eslint": ">=8.0.0" - eslint: ">=8.0.0" - eslint-config-prettier: "*" - prettier: ">=3.0.0" - peerDependenciesMeta: - "@types/eslint": - optional: true - eslint-config-prettier: - optional: true - checksum: 10c0/f45d5fc1fcfec6b0cf038a7a65ddd10a25df4fe3f9e1f6b7f0d5100e66f046a26a2492e69ee765dddf461b93c114cf2e1eb18d4970aafa6f385448985c136e09 + eslint: ">=7.0.0" + bin: + eslint-config-prettier: build/bin/cli.js + checksum: 10c0/e2434931669d211663c0493f2c1640a670a02ba4503a68f056a7eda133f383acbbb983a4a7bd0ad6cb3b2bc4d5731c3be8b32fe28e35087a76fea45f7061ae70 languageName: node linkType: hard -"eslint-plugin-react-hooks@npm:^4.6.2": - version: 4.6.2 - resolution: "eslint-plugin-react-hooks@npm:4.6.2" +"eslint-plugin-react-hooks@npm:^5.1.0": + version: 5.1.0 + resolution: "eslint-plugin-react-hooks@npm:5.1.0" peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - checksum: 10c0/4844e58c929bc05157fb70ba1e462e34f1f4abcbc8dd5bbe5b04513d33e2699effb8bca668297976ceea8e7ebee4e8fc29b9af9d131bcef52886feaa2308b2cc + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + checksum: 10c0/37ef76e1d916d46ab8e93a596078efcf2162e2c653614437e0c54e31d02a5dadabec22802fab717effe257aeb4bdc20c2a710666a89ab1cf07e01e614dde75d8 languageName: node linkType: hard -"eslint-plugin-react-refresh@npm:^0.4.7": - version: 0.4.8 - resolution: "eslint-plugin-react-refresh@npm:0.4.8" +"eslint-plugin-react-refresh@npm:^0.4.18": + version: 0.4.18 + resolution: "eslint-plugin-react-refresh@npm:0.4.18" peerDependencies: - eslint: ">=7" - checksum: 10c0/5ed0c1a59c09baf072fb6db4eb18cb72977f0d0f32f77f78fb82f6cca5385e236a3c19a7ef4821cacbc9f7ae19ecb9f5e7b064d7b11f690c1bfcd8fe20288a5c + eslint: ">=8.40" + checksum: 10c0/19140a0d90e126c198c07337bc106af24f398dd8f061314f42c17511a647bea93880a11b7d40219088ac0eaea598eb591d320cfc6f82262bfb05f602101b2acc languageName: node linkType: hard -"eslint-plugin-react@npm:^7.34.3": - version: 7.34.3 - resolution: "eslint-plugin-react@npm:7.34.3" +"eslint-plugin-react@npm:^7.37.4": + version: 7.37.4 + resolution: "eslint-plugin-react@npm:7.37.4" dependencies: array-includes: "npm:^3.1.8" array.prototype.findlast: "npm:^1.2.5" - array.prototype.flatmap: "npm:^1.3.2" - array.prototype.toreversed: "npm:^1.1.2" + array.prototype.flatmap: "npm:^1.3.3" array.prototype.tosorted: "npm:^1.1.4" doctrine: "npm:^2.1.0" - es-iterator-helpers: "npm:^1.0.19" + es-iterator-helpers: "npm:^1.2.1" estraverse: "npm:^5.3.0" + hasown: "npm:^2.0.2" jsx-ast-utils: "npm:^2.4.1 || ^3.0.0" minimatch: "npm:^3.1.2" object.entries: "npm:^1.1.8" object.fromentries: "npm:^2.0.8" - object.hasown: "npm:^1.1.4" - object.values: "npm:^1.2.0" + object.values: "npm:^1.2.1" prop-types: "npm:^15.8.1" resolve: "npm:^2.0.0-next.5" semver: "npm:^6.3.1" - string.prototype.matchall: "npm:^4.0.11" + string.prototype.matchall: "npm:^4.0.12" + string.prototype.repeat: "npm:^1.0.0" peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 10c0/60717e32c9948e2b4ddc53dac7c4b62c68fc7129c3249079191c941c08ebe7d1f4793d65182922d19427c2a6634e05231a7b74ceee34169afdfd0e43d4a43d26 + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + checksum: 10c0/4acbbdb19669dfa9a162ed8847c3ad1918f6aea1ceb675ee320b5d903b4e463fdef25e15233295b6d0a726fef2ea8b015c527da769c7690932ddc52d5b82ba12 languageName: node linkType: hard -"eslint-scope@npm:^7.2.2": - version: 7.2.2 - resolution: "eslint-scope@npm:7.2.2" +"eslint-scope@npm:^8.2.0": + version: 8.2.0 + resolution: "eslint-scope@npm:8.2.0" dependencies: esrecurse: "npm:^4.3.0" estraverse: "npm:^5.2.0" - checksum: 10c0/613c267aea34b5a6d6c00514e8545ef1f1433108097e857225fed40d397dd6b1809dffd11c2fde23b37ca53d7bf935fe04d2a18e6fc932b31837b6ad67e1c116 + checksum: 10c0/8d2d58e2136d548ac7e0099b1a90d9fab56f990d86eb518de1247a7066d38c908be2f3df477a79cf60d70b30ba18735d6c6e70e9914dca2ee515a729975d70d6 languageName: node linkType: hard -"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": +"eslint-visitor-keys@npm:^3.4.3": version: 3.4.3 resolution: "eslint-visitor-keys@npm:3.4.3" checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 languageName: node linkType: hard -"eslint@npm:^8.57.0": - version: 8.57.0 - resolution: "eslint@npm:8.57.0" +"eslint-visitor-keys@npm:^4.2.0": + version: 4.2.0 + resolution: "eslint-visitor-keys@npm:4.2.0" + checksum: 10c0/2ed81c663b147ca6f578312919483eb040295bbab759e5a371953456c636c5b49a559883e2677112453728d66293c0a4c90ab11cab3428cf02a0236d2e738269 + languageName: node + linkType: hard + +"eslint@npm:^9.18.0": + version: 9.18.0 + resolution: "eslint@npm:9.18.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" - "@eslint-community/regexpp": "npm:^4.6.1" - "@eslint/eslintrc": "npm:^2.1.4" - "@eslint/js": "npm:8.57.0" - "@humanwhocodes/config-array": "npm:^0.11.14" + "@eslint-community/regexpp": "npm:^4.12.1" + "@eslint/config-array": "npm:^0.19.0" + "@eslint/core": "npm:^0.10.0" + "@eslint/eslintrc": "npm:^3.2.0" + "@eslint/js": "npm:9.18.0" + "@eslint/plugin-kit": "npm:^0.2.5" + "@humanfs/node": "npm:^0.16.6" "@humanwhocodes/module-importer": "npm:^1.0.1" - "@nodelib/fs.walk": "npm:^1.2.8" - "@ungap/structured-clone": "npm:^1.2.0" + "@humanwhocodes/retry": "npm:^0.4.1" + "@types/estree": "npm:^1.0.6" + "@types/json-schema": "npm:^7.0.15" ajv: "npm:^6.12.4" chalk: "npm:^4.0.0" - cross-spawn: "npm:^7.0.2" + cross-spawn: "npm:^7.0.6" debug: "npm:^4.3.2" - doctrine: "npm:^3.0.0" escape-string-regexp: "npm:^4.0.0" - eslint-scope: "npm:^7.2.2" - eslint-visitor-keys: "npm:^3.4.3" - espree: "npm:^9.6.1" - esquery: "npm:^1.4.2" + eslint-scope: "npm:^8.2.0" + eslint-visitor-keys: "npm:^4.2.0" + espree: "npm:^10.3.0" + esquery: "npm:^1.5.0" esutils: "npm:^2.0.2" fast-deep-equal: "npm:^3.1.3" - file-entry-cache: "npm:^6.0.1" + file-entry-cache: "npm:^8.0.0" find-up: "npm:^5.0.0" glob-parent: "npm:^6.0.2" - globals: "npm:^13.19.0" - graphemer: "npm:^1.4.0" ignore: "npm:^5.2.0" imurmurhash: "npm:^0.1.4" is-glob: "npm:^4.0.0" - is-path-inside: "npm:^3.0.3" - js-yaml: "npm:^4.1.0" json-stable-stringify-without-jsonify: "npm:^1.0.1" - levn: "npm:^0.4.1" lodash.merge: "npm:^4.6.2" minimatch: "npm:^3.1.2" natural-compare: "npm:^1.4.0" optionator: "npm:^0.9.3" - strip-ansi: "npm:^6.0.1" - text-table: "npm:^0.2.0" + peerDependencies: + jiti: "*" + peerDependenciesMeta: + jiti: + optional: true bin: eslint: bin/eslint.js - checksum: 10c0/00bb96fd2471039a312435a6776fe1fd557c056755eaa2b96093ef3a8508c92c8775d5f754768be6b1dddd09fdd3379ddb231eeb9b6c579ee17ea7d68000a529 + checksum: 10c0/7f592ad228b9bd627a24870fdc875bacdab7bf535d4b67316c4cb791e90d0125130a74769f3c407b0c4b7027b3082ef33864a63ee1024552a60a17db60493f15 languageName: node linkType: hard -"espree@npm:^9.6.0, espree@npm:^9.6.1": - version: 9.6.1 - resolution: "espree@npm:9.6.1" +"espree@npm:^10.0.1, espree@npm:^10.3.0": + version: 10.3.0 + resolution: "espree@npm:10.3.0" dependencies: - acorn: "npm:^8.9.0" + acorn: "npm:^8.14.0" acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^3.4.1" - checksum: 10c0/1a2e9b4699b715347f62330bcc76aee224390c28bb02b31a3752e9d07549c473f5f986720483c6469cf3cfb3c9d05df612ffc69eb1ee94b54b739e67de9bb460 - languageName: node - linkType: hard - -"esprima@npm:^4.0.0": - version: 4.0.1 - resolution: "esprima@npm:4.0.1" - bin: - esparse: ./bin/esparse.js - esvalidate: ./bin/esvalidate.js - checksum: 10c0/ad4bab9ead0808cf56501750fd9d3fb276f6b105f987707d059005d57e182d18a7c9ec7f3a01794ebddcca676773e42ca48a32d67a250c9d35e009ca613caba3 + eslint-visitor-keys: "npm:^4.2.0" + checksum: 10c0/272beeaca70d0a1a047d61baff64db04664a33d7cfb5d144f84bc8a5c6194c6c8ebe9cc594093ca53add88baa23e59b01e69e8a0160ab32eac570482e165c462 languageName: node linkType: hard -"esquery@npm:^1.4.2": +"esquery@npm:^1.5.0": version: 1.6.0 resolution: "esquery@npm:1.6.0" dependencies: @@ -3730,33 +3306,17 @@ __metadata: languageName: node linkType: hard -"execa@npm:^0.7.0": - version: 0.7.0 - resolution: "execa@npm:0.7.0" - dependencies: - cross-spawn: "npm:^5.0.1" - get-stream: "npm:^3.0.0" - is-stream: "npm:^1.1.0" - npm-run-path: "npm:^2.0.0" - p-finally: "npm:^1.0.0" - signal-exit: "npm:^3.0.0" - strip-eof: "npm:^1.0.0" - checksum: 10c0/812f1776e2a6b2226532e43c1af87d8a12e26de03a06e7e043f653acf5565e0656f5f6c64d66726fefa17178ac129caaa419a50905934e7c4a846417abb25d4a +"etag@npm:~1.8.1": + version: 1.8.1 + resolution: "etag@npm:1.8.1" + checksum: 10c0/12be11ef62fb9817314d790089a0a49fae4e1b50594135dcb8076312b7d7e470884b5100d249b28c18581b7fd52f8b485689ffae22a11ed9ec17377a33a08f84 languageName: node linkType: hard -"execa@npm:^1.0.0": - version: 1.0.0 - resolution: "execa@npm:1.0.0" - dependencies: - cross-spawn: "npm:^6.0.0" - get-stream: "npm:^4.0.0" - is-stream: "npm:^1.1.0" - npm-run-path: "npm:^2.0.0" - p-finally: "npm:^1.0.0" - signal-exit: "npm:^3.0.0" - strip-eof: "npm:^1.0.0" - checksum: 10c0/cc71707c9aa4a2552346893ee63198bf70a04b5a1bc4f8a0ef40f1d03c319eae80932c59191f037990d7d102193e83a38ec72115fff814ec2fb3099f3661a590 +"exit-hook@npm:2.2.1": + version: 2.2.1 + resolution: "exit-hook@npm:2.2.1" + checksum: 10c0/0803726d1b60aade6afd10c73e5a7e1bf256ac9bee78362a88e91a4f735e8c67899f2853ddc613072c05af07bbb067a9978a740e614db1aeef167d50c6dc5c09 languageName: node linkType: hard @@ -3767,41 +3327,42 @@ __metadata: languageName: node linkType: hard -"extend-shallow@npm:^1.1.2": - version: 1.1.4 - resolution: "extend-shallow@npm:1.1.4" - dependencies: - kind-of: "npm:^1.1.0" - checksum: 10c0/f3509ee4ed8894ea109de203f907a3bf7d55f62352f5aab1591bd64ca84663e06e6d484dcf80ff8566e6c523632e37b58f6c34d55d8f749ca51c28c0b7ce7004 - languageName: node - linkType: hard - -"extend-shallow@npm:^3.0.2": - version: 3.0.2 - resolution: "extend-shallow@npm:3.0.2" - dependencies: - assign-symbols: "npm:^1.0.0" - is-extendable: "npm:^1.0.1" - checksum: 10c0/f39581b8f98e3ad94995e33214fff725b0297cf09f2725b6f624551cfb71e0764accfd0af80becc0182af5014d2a57b31b85ec999f9eb8a6c45af81752feac9a - languageName: node - linkType: hard - -"extend@npm:^3.0.0": - version: 3.0.2 - resolution: "extend@npm:3.0.2" - checksum: 10c0/73bf6e27406e80aa3e85b0d1c4fd987261e628064e170ca781125c0b635a3dabad5e05adbf07595ea0cf1e6c5396cacb214af933da7cbaf24fe75ff14818e8f9 - languageName: node - linkType: hard - -"fancy-log@npm:^1.3.3": - version: 1.3.3 - resolution: "fancy-log@npm:1.3.3" - dependencies: - ansi-gray: "npm:^0.1.1" - color-support: "npm:^1.1.3" - parse-node-version: "npm:^1.0.0" - time-stamp: "npm:^1.0.0" - checksum: 10c0/2fd9070191c8671065fbe3523d283b4a4eb240e37121e99b3b3260b2ea2934961b166cf48dcadeb6cdce877039e27499f1403808b455bd29b1b66060a03eb041 +"express@npm:^4.19.2": + version: 4.21.2 + resolution: "express@npm:4.21.2" + dependencies: + accepts: "npm:~1.3.8" + array-flatten: "npm:1.1.1" + body-parser: "npm:1.20.3" + content-disposition: "npm:0.5.4" + content-type: "npm:~1.0.4" + cookie: "npm:0.7.1" + cookie-signature: "npm:1.0.6" + debug: "npm:2.6.9" + depd: "npm:2.0.0" + encodeurl: "npm:~2.0.0" + escape-html: "npm:~1.0.3" + etag: "npm:~1.8.1" + finalhandler: "npm:1.3.1" + fresh: "npm:0.5.2" + http-errors: "npm:2.0.0" + merge-descriptors: "npm:1.0.3" + methods: "npm:~1.1.2" + on-finished: "npm:2.4.1" + parseurl: "npm:~1.3.3" + path-to-regexp: "npm:0.1.12" + proxy-addr: "npm:~2.0.7" + qs: "npm:6.13.0" + range-parser: "npm:~1.2.1" + safe-buffer: "npm:5.2.1" + send: "npm:0.19.0" + serve-static: "npm:1.16.2" + setprototypeof: "npm:1.2.0" + statuses: "npm:2.0.1" + type-is: "npm:~1.6.18" + utils-merge: "npm:1.0.1" + vary: "npm:~1.1.2" + checksum: 10c0/38168fd0a32756600b56e6214afecf4fc79ec28eca7f7a91c2ab8d50df4f47562ca3f9dee412da7f5cea6b1a1544b33b40f9f8586dbacfbdada0fe90dbb10a1f languageName: node linkType: hard @@ -3819,16 +3380,16 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2": - version: 3.3.2 - resolution: "fast-glob@npm:3.3.2" +"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2, fast-glob@npm:^3.3.3": + version: 3.3.3 + resolution: "fast-glob@npm:3.3.3" dependencies: "@nodelib/fs.stat": "npm:^2.0.2" "@nodelib/fs.walk": "npm:^1.2.3" glob-parent: "npm:^5.1.2" merge2: "npm:^1.3.0" - micromatch: "npm:^4.0.4" - checksum: 10c0/42baad7b9cd40b63e42039132bde27ca2cb3a4950d0a0f9abe4639ea1aa9d3e3b40f98b1fe31cbc0cc17b664c9ea7447d911a152fa34ec5b72977b125a6fc845 + micromatch: "npm:^4.0.8" + checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe languageName: node linkType: hard @@ -3846,6 +3407,13 @@ __metadata: languageName: node linkType: hard +"fast-uri@npm:^3.0.1": + version: 3.0.6 + resolution: "fast-uri@npm:3.0.6" + checksum: 10c0/74a513c2af0584448aee71ce56005185f81239eab7a2343110e5bad50c39ad4fb19c5a6f99783ead1cac7ccaf3461a6034fda89fffa2b30b6d99b9f21c2f9d29 + languageName: node + linkType: hard + "fastest-levenshtein@npm:^1.0.16": version: 1.0.16 resolution: "fastest-levenshtein@npm:1.0.16" @@ -3854,45 +3422,39 @@ __metadata: linkType: hard "fastq@npm:^1.6.0": - version: 1.17.1 - resolution: "fastq@npm:1.17.1" + version: 1.18.0 + resolution: "fastq@npm:1.18.0" dependencies: reusify: "npm:^1.0.4" - checksum: 10c0/1095f16cea45fb3beff558bb3afa74ca7a9250f5a670b65db7ed585f92b4b48381445cd328b3d87323da81e43232b5d5978a8201bde84e0cd514310f1ea6da34 + checksum: 10c0/7be87ecc41762adbddf558d24182f50a4b1a3ef3ee807d33b7623da7aee5faecdcc94fce5aa13fe91df93e269f383232bbcdb2dc5338cd1826503d6063221f36 languageName: node linkType: hard -"fault@npm:^1.0.2": - version: 1.0.4 - resolution: "fault@npm:1.0.4" +"fetch-blob@npm:^3.1.2, fetch-blob@npm:^3.1.4": + version: 3.2.0 + resolution: "fetch-blob@npm:3.2.0" dependencies: - format: "npm:^0.2.0" - checksum: 10c0/c86c11500c1b676787296f31ade8473adcc6784f118f07c1a9429730b6288d0412f96e069ce010aa57e4f65a9cccb5abee8868bbe3c5f10de63b20482c9baebd + node-domexception: "npm:^1.0.0" + web-streams-polyfill: "npm:^3.0.3" + checksum: 10c0/60054bf47bfa10fb0ba6cb7742acec2f37c1f56344f79a70bb8b1c48d77675927c720ff3191fa546410a0442c998d27ab05e9144c32d530d8a52fbe68f843b69 languageName: node linkType: hard -"file-entry-cache@npm:^6.0.1": - version: 6.0.1 - resolution: "file-entry-cache@npm:6.0.1" +"file-entry-cache@npm:^10.0.5": + version: 10.0.5 + resolution: "file-entry-cache@npm:10.0.5" dependencies: - flat-cache: "npm:^3.0.4" - checksum: 10c0/58473e8a82794d01b38e5e435f6feaf648e3f36fdb3a56e98f417f4efae71ad1c0d4ebd8a9a7c50c3ad085820a93fc7494ad721e0e4ebc1da3573f4e1c3c7cdd + flat-cache: "npm:^6.1.5" + checksum: 10c0/c7d9bd537d1862db5357ecc688a22dc9287c2590e9eba04e85e0601d6143905eaa5edc5534f1dd92e24713f230ee69d99e150d7b6120c6d940f40beccdd5caf3 languageName: node linkType: hard -"file-entry-cache@npm:^9.0.0": - version: 9.0.0 - resolution: "file-entry-cache@npm:9.0.0" +"file-entry-cache@npm:^8.0.0": + version: 8.0.0 + resolution: "file-entry-cache@npm:8.0.0" dependencies: - flat-cache: "npm:^5.0.0" - checksum: 10c0/07b0a4f062dc0aa258f3e1b06ac083ea25313f5e289943e146fafdaf3315dcc031635545eea7fe98fe5598b91d6c7f48dba7a251dd7ac20108a6ebf7d00b0b1c - languageName: node - linkType: hard - -"file-type@npm:^10.1.0": - version: 10.11.0 - resolution: "file-type@npm:10.11.0" - checksum: 10c0/2d6280d84f2499878ebdf8236a6e83b3c747f08b91d84cf99785afe3c9ac52775e52dcec15a4141cc24eb3006f274eb46dc7d13395920a1763d936c6d6e8afde + flat-cache: "npm:^4.0.0" + checksum: 10c0/9e2b5938b1cd9b6d7e3612bdc533afd4ac17b2fc646569e9a8abbf2eb48e5eb8e316bc38815a3ef6a1b456f4107f0d0f055a614ca613e75db6bf9ff4d72c1638 languageName: node linkType: hard @@ -3905,6 +3467,21 @@ __metadata: languageName: node linkType: hard +"finalhandler@npm:1.3.1": + version: 1.3.1 + resolution: "finalhandler@npm:1.3.1" + dependencies: + debug: "npm:2.6.9" + encodeurl: "npm:~2.0.0" + escape-html: "npm:~1.0.3" + on-finished: "npm:2.4.1" + parseurl: "npm:~1.3.3" + statuses: "npm:2.0.1" + unpipe: "npm:~1.0.0" + checksum: 10c0/d38035831865a49b5610206a3a9a9aae4e8523cbbcd01175d0480ffbf1278c47f11d89be3ca7f617ae6d94f29cf797546a4619cd84dd109009ef33f12f69019f + languageName: node + linkType: hard + "find-root@npm:^1.1.0": version: 1.1.0 resolution: "find-root@npm:1.1.0" @@ -3912,15 +3489,6 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^3.0.0": - version: 3.0.0 - resolution: "find-up@npm:3.0.0" - dependencies: - locate-path: "npm:^3.0.0" - checksum: 10c0/2c2e7d0a26db858e2f624f39038c74739e38306dee42b45f404f770db357947be9d0d587f1cac72d20c114deb38aa57316e879eb0a78b17b46da7dab0a3bd6e3 - languageName: node - linkType: hard - "find-up@npm:^5.0.0": version: 5.0.0 resolution: "find-up@npm:5.0.0" @@ -3931,60 +3499,41 @@ __metadata: languageName: node linkType: hard -"flat-cache@npm:^3.0.4": - version: 3.2.0 - resolution: "flat-cache@npm:3.2.0" +"flat-cache@npm:^4.0.0": + version: 4.0.1 + resolution: "flat-cache@npm:4.0.1" dependencies: flatted: "npm:^3.2.9" - keyv: "npm:^4.5.3" - rimraf: "npm:^3.0.2" - checksum: 10c0/b76f611bd5f5d68f7ae632e3ae503e678d205cf97a17c6ab5b12f6ca61188b5f1f7464503efae6dc18683ed8f0b41460beb48ac4b9ac63fe6201296a91ba2f75 - languageName: node - linkType: hard - -"flat-cache@npm:^5.0.0": - version: 5.0.0 - resolution: "flat-cache@npm:5.0.0" - dependencies: - flatted: "npm:^3.3.1" keyv: "npm:^4.5.4" - checksum: 10c0/847f25eefec5d6614fdce76dc6097ee98f63fd4dfbcb908718905ac56610f939f4c28b1f908d6e8857d49286fe73235095d2e7ac9df096c35a3e8a15204c361b - languageName: node - linkType: hard - -"flatted@npm:^3.2.9, flatted@npm:^3.3.1": - version: 3.3.1 - resolution: "flatted@npm:3.3.1" - checksum: 10c0/324166b125ee07d4ca9bcf3a5f98d915d5db4f39d711fba640a3178b959919aae1f7cfd8aabcfef5826ed8aa8a2aa14cc85b2d7d18ff638ddf4ae3df39573eaf + checksum: 10c0/2c59d93e9faa2523e4fda6b4ada749bed432cfa28c8e251f33b25795e426a1c6dbada777afb1f74fcfff33934fdbdea921ee738fcc33e71adc9d6eca984a1cfc languageName: node linkType: hard -"flush-write-stream@npm:^1.0.2": - version: 1.1.1 - resolution: "flush-write-stream@npm:1.1.1" +"flat-cache@npm:^6.1.5": + version: 6.1.5 + resolution: "flat-cache@npm:6.1.5" dependencies: - inherits: "npm:^2.0.3" - readable-stream: "npm:^2.3.6" - checksum: 10c0/2cd4f65b728d5f388197a03dafabc6a5e4f0c2ed1a2d912e288f7aa1c2996dd90875e55b50cf32c78dca55ad2e2dfae5d3db09b223838388033d87cf5920dd87 + cacheable: "npm:^1.8.7" + flatted: "npm:^3.3.2" + hookified: "npm:^1.6.0" + checksum: 10c0/b107edc1c24a8fabe89645001fb8b1479016177d92be45dc6ba739e688131fe35fffbf13516d2f7bb3dc5c1256ff8721f16ec1858c4ee77e46f93c9093c53689 languageName: node linkType: hard -"follow-redirects@npm:1.5.10": - version: 1.5.10 - resolution: "follow-redirects@npm:1.5.10" - dependencies: - debug: "npm:=3.1.0" - checksum: 10c0/f56ca26dcf3c9996a6cf8868b61e369a35d4000ade0292bdd27b5e0934902681b037060b9fabe58e7042bb8b85166d5db8bbcf027f1825c1577e4cffd904fd3f +"flatted@npm:^3.2.9, flatted@npm:^3.3.2": + version: 3.3.2 + resolution: "flatted@npm:3.3.2" + checksum: 10c0/24cc735e74d593b6c767fe04f2ef369abe15b62f6906158079b9874bdb3ee5ae7110bb75042e70cd3f99d409d766f357caf78d5ecee9780206f5fdc5edbad334 languageName: node linkType: hard "follow-redirects@npm:^1.15.6": - version: 1.15.6 - resolution: "follow-redirects@npm:1.15.6" + version: 1.15.9 + resolution: "follow-redirects@npm:1.15.9" peerDependenciesMeta: debug: optional: true - checksum: 10c0/9ff767f0d7be6aa6870c82ac79cf0368cd73e01bbc00e9eb1c2a16fbb198ec105e3c9b6628bb98e9f3ac66fe29a957b9645bcb9a490bb7aa0d35f908b6b85071 + checksum: 10c0/5829165bd112c3c0e82be6c15b1a58fa9dcfaede3b3c54697a82fe4a62dd5ae5e8222956b448d2f98e331525f05d00404aba7d696de9e761ef6e42fdc780244f languageName: node linkType: hard @@ -4008,66 +3557,63 @@ __metadata: linkType: hard "form-data@npm:^4.0.0": - version: 4.0.0 - resolution: "form-data@npm:4.0.0" + version: 4.0.1 + resolution: "form-data@npm:4.0.1" dependencies: asynckit: "npm:^0.4.0" combined-stream: "npm:^1.0.8" mime-types: "npm:^2.1.12" - checksum: 10c0/cb6f3ac49180be03ff07ba3ff125f9eba2ff0b277fb33c7fc47569fc5e616882c5b1c69b9904c4c4187e97dd0419dd03b134174756f296dec62041e6527e2c6e + checksum: 10c0/bb102d570be8592c23f4ea72d7df9daa50c7792eb0cf1c5d7e506c1706e7426a4e4ae48a35b109e91c85f1c0ec63774a21ae252b66f4eb981cb8efef7d0463c8 languageName: node linkType: hard -"format@npm:^0.2.0": - version: 0.2.2 - resolution: "format@npm:0.2.2" - checksum: 10c0/6032ba747541a43abf3e37b402b2f72ee08ebcb58bf84d816443dd228959837f1cddf1e8775b29fa27ff133f4bd146d041bfca5f9cf27f048edf3d493cf8fee6 +"formdata-polyfill@npm:^4.0.10": + version: 4.0.10 + resolution: "formdata-polyfill@npm:4.0.10" + dependencies: + fetch-blob: "npm:^3.1.2" + checksum: 10c0/5392ec484f9ce0d5e0d52fb5a78e7486637d516179b0eb84d81389d7eccf9ca2f663079da56f761355c0a65792810e3b345dc24db9a8bbbcf24ef3c8c88570c6 languageName: node linkType: hard -"fs-extra@npm:^7.0.1": - version: 7.0.1 - resolution: "fs-extra@npm:7.0.1" - dependencies: - graceful-fs: "npm:^4.1.2" - jsonfile: "npm:^4.0.0" - universalify: "npm:^0.1.0" - checksum: 10c0/1943bb2150007e3739921b8d13d4109abdc3cc481e53b97b7ea7f77eda1c3c642e27ae49eac3af074e3496ea02fde30f411ef410c760c70a38b92e656e5da784 +"forwarded@npm:0.2.0": + version: 0.2.0 + resolution: "forwarded@npm:0.2.0" + checksum: 10c0/9b67c3fac86acdbc9ae47ba1ddd5f2f81526fa4c8226863ede5600a3f7c7416ef451f6f1e240a3cc32d0fd79fcfe6beb08fd0da454f360032bde70bf80afbb33 languageName: node linkType: hard -"fs-minipass@npm:^2.0.0": - version: 2.1.0 - resolution: "fs-minipass@npm:2.1.0" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 +"fraction.js@npm:^4.3.7": + version: 4.3.7 + resolution: "fraction.js@npm:4.3.7" + checksum: 10c0/df291391beea9ab4c263487ffd9d17fed162dbb736982dee1379b2a8cc94e4e24e46ed508c6d278aded9080ba51872f1bc5f3a5fd8d7c74e5f105b508ac28711 languageName: node linkType: hard -"fs-minipass@npm:^3.0.0": - version: 3.0.3 - resolution: "fs-minipass@npm:3.0.3" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 +"fresh@npm:0.5.2": + version: 0.5.2 + resolution: "fresh@npm:0.5.2" + checksum: 10c0/c6d27f3ed86cc5b601404822f31c900dd165ba63fff8152a3ef714e2012e7535027063bc67ded4cb5b3a49fa596495d46cacd9f47d6328459cf570f08b7d9e5a languageName: node linkType: hard -"fs-mkdirp-stream@npm:^1.0.0": - version: 1.0.0 - resolution: "fs-mkdirp-stream@npm:1.0.0" +"fs-extra@npm:^10.0.0": + version: 10.1.0 + resolution: "fs-extra@npm:10.1.0" dependencies: - graceful-fs: "npm:^4.1.11" - through2: "npm:^2.0.3" - checksum: 10c0/c1a6a8913e6cda1741e1d146d05baa21fe6a91802b836b3a0ae1b0654269b5097727d77d97cf5f242317b2c5e44831f834fd3bb36853a2083494d94523221a39 + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/5f579466e7109719d162a9249abbeffe7f426eb133ea486e020b89bc6d67a741134076bf439983f2eb79276ceaf6bd7b7c1e43c3fd67fe889863e69072fb0a5e languageName: node linkType: hard -"fs.realpath@npm:^1.0.0": - version: 1.0.0 - resolution: "fs.realpath@npm:1.0.0" - checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 languageName: node linkType: hard @@ -4097,15 +3643,17 @@ __metadata: languageName: node linkType: hard -"function.prototype.name@npm:^1.1.5, function.prototype.name@npm:^1.1.6": - version: 1.1.6 - resolution: "function.prototype.name@npm:1.1.6" +"function.prototype.name@npm:^1.1.6, function.prototype.name@npm:^1.1.8": + version: 1.1.8 + resolution: "function.prototype.name@npm:1.1.8" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - es-abstract: "npm:^1.22.1" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-properties: "npm:^1.2.1" functions-have-names: "npm:^1.2.3" - checksum: 10c0/9eae11294905b62cb16874adb4fc687927cda3162285e0ad9612e6a1d04934005d46907362ea9cdb7428edce05a2f2c3dabc3b2d21e9fd343e9bb278230ad94b + hasown: "npm:^2.0.2" + is-callable: "npm:^1.2.7" + checksum: 10c0/e920a2ab52663005f3cbe7ee3373e3c71c1fb5558b0b0548648cdf3e51961085032458e26c71ff1a8c8c20e7ee7caeb03d43a5d1fa8610c459333323a2e71253 languageName: node linkType: hard @@ -4123,64 +3671,53 @@ __metadata: languageName: node linkType: hard -"get-caller-file@npm:^1.0.1": - version: 1.0.3 - resolution: "get-caller-file@npm:1.0.3" - checksum: 10c0/763dcee2de8ff60ae7e13a4bad8306205a2fbe108e555686344ddd9ef211b8bebfe459d3a739669257014c59e7cc1e7a44003c21af805c1214673e6a45f06c51 - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": - version: 1.2.4 - resolution: "get-intrinsic@npm:1.2.4" +"get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7": + version: 1.2.7 + resolution: "get-intrinsic@npm:1.2.7" dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + es-define-property: "npm:^1.0.1" es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" function-bind: "npm:^1.1.2" - has-proto: "npm:^1.0.1" - has-symbols: "npm:^1.0.3" - hasown: "npm:^2.0.0" - checksum: 10c0/0a9b82c16696ed6da5e39b1267104475c47e3a9bdbe8b509dfe1710946e38a87be70d759f4bb3cda042d76a41ef47fe769660f3b7c0d1f68750299344ffb15b7 + get-proto: "npm:^1.0.0" + gopd: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + math-intrinsics: "npm:^1.1.0" + checksum: 10c0/b475dec9f8bff6f7422f51ff4b7b8d0b68e6776ee83a753c1d627e3008c3442090992788038b37eff72e93e43dceed8c1acbdf2d6751672687ec22127933080d languageName: node linkType: hard -"get-stream@npm:^3.0.0": - version: 3.0.0 - resolution: "get-stream@npm:3.0.0" - checksum: 10c0/003f5f3b8870da59c6aafdf6ed7e7b07b48c2f8629cd461bd3900726548b6b8cfa2e14d6b7814fbb08f07a42f4f738407fa70b989928b2783a76b278505bba22 +"get-port@npm:5.1.1": + version: 5.1.1 + resolution: "get-port@npm:5.1.1" + checksum: 10c0/2873877a469b24e6d5e0be490724a17edb39fafc795d1d662e7bea951ca649713b4a50117a473f9d162312cb0e946597bd0e049ed2f866e79e576e8e213d3d1c languageName: node linkType: hard -"get-stream@npm:^4.0.0": - version: 4.1.0 - resolution: "get-stream@npm:4.1.0" +"get-proto@npm:^1.0.0, get-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" dependencies: - pump: "npm:^3.0.0" - checksum: 10c0/294d876f667694a5ca23f0ca2156de67da950433b6fb53024833733975d32582896dbc7f257842d331809979efccf04d5e0b6b75ad4d45744c45f193fd497539 + dunder-proto: "npm:^1.0.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c languageName: node linkType: hard -"get-symbol-description@npm:^1.0.2": - version: 1.0.2 - resolution: "get-symbol-description@npm:1.0.2" +"get-symbol-description@npm:^1.1.0": + version: 1.1.0 + resolution: "get-symbol-description@npm:1.1.0" dependencies: - call-bind: "npm:^1.0.5" + call-bound: "npm:^1.0.3" es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.4" - checksum: 10c0/867be6d63f5e0eb026cb3b0ef695ec9ecf9310febb041072d2e142f260bd91ced9eeb426b3af98791d1064e324e653424afa6fd1af17dee373bea48ae03162bc - languageName: node - linkType: hard - -"glob-parent@npm:^3.1.0": - version: 3.1.0 - resolution: "glob-parent@npm:3.1.0" - dependencies: - is-glob: "npm:^3.1.0" - path-dirname: "npm:^1.0.0" - checksum: 10c0/bfa89ce5ae1dfea4c2ece7b61d2ea230d87fcbec7472915cfdb3f4caf688a91ecb0dc86ae39b1e17505adce7e64cae3b971d64dc66091f3a0131169fd631b00d + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/d6a7d6afca375779a4b307738c9e80dbf7afc0bdbe5948768d54ab9653c865523d8920e670991a925936eb524b7cb6a6361d199a760b21d0ca7620194455aa4b languageName: node linkType: hard -"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": +"glob-parent@npm:^5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" dependencies: @@ -4198,25 +3735,7 @@ __metadata: languageName: node linkType: hard -"glob-stream@npm:^6.1.0": - version: 6.1.0 - resolution: "glob-stream@npm:6.1.0" - dependencies: - extend: "npm:^3.0.0" - glob: "npm:^7.1.1" - glob-parent: "npm:^3.1.0" - is-negated-glob: "npm:^1.0.0" - ordered-read-streams: "npm:^1.0.0" - pumpify: "npm:^1.3.5" - readable-stream: "npm:^2.1.5" - remove-trailing-separator: "npm:^1.0.1" - to-absolute-glob: "npm:^2.0.0" - unique-stream: "npm:^2.0.2" - checksum: 10c0/6b2653f2aafe99f17c0348de34dc0782cc20c3425ade4d4e354ef125b6e049e71cb4a209c6ea624a6a72bf99e0d7a25f1c2f04f81e42b0b8091b48d210fc48f5 - languageName: node - linkType: hard - -"glob@npm:^10.2.2, glob@npm:^10.3.10": +"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7": version: 10.4.5 resolution: "glob@npm:10.4.5" dependencies: @@ -4232,20 +3751,6 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3": - version: 7.2.3 - resolution: "glob@npm:7.2.3" - dependencies: - fs.realpath: "npm:^1.0.0" - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:^3.1.1" - once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe - languageName: node - linkType: hard - "global-modules@npm:^2.0.0": version: 2.0.0 resolution: "global-modules@npm:2.0.0" @@ -4266,23 +3771,14 @@ __metadata: languageName: node linkType: hard -"globals@npm:^11.1.0": - version: 11.12.0 - resolution: "globals@npm:11.12.0" - checksum: 10c0/758f9f258e7b19226bd8d4af5d3b0dcf7038780fb23d82e6f98932c44e239f884847f1766e8fa9cc5635ccb3204f7fa7314d4408dd4002a5e8ea827b4018f0a1 - languageName: node - linkType: hard - -"globals@npm:^13.19.0": - version: 13.24.0 - resolution: "globals@npm:13.24.0" - dependencies: - type-fest: "npm:^0.20.2" - checksum: 10c0/d3c11aeea898eb83d5ec7a99508600fbe8f83d2cf00cbb77f873dbf2bcb39428eff1b538e4915c993d8a3b3473fa71eeebfe22c9bb3a3003d1e26b1f2c8a42cd +"globals@npm:14.0.0, globals@npm:^14.0.0": + version: 14.0.0 + resolution: "globals@npm:14.0.0" + checksum: 10c0/b96ff42620c9231ad468d4c58ff42afee7777ee1c963013ff8aabe095a451d0ceeb8dcd8ef4cbd64d2538cef45f787a78ba3a9574f4a634438963e334471302d languageName: node linkType: hard -"globalthis@npm:^1.0.3": +"globalthis@npm:^1.0.4": version: 1.0.4 resolution: "globalthis@npm:1.0.4" dependencies: @@ -4313,16 +3809,21 @@ __metadata: languageName: node linkType: hard -"gopd@npm:^1.0.1": - version: 1.0.1 - resolution: "gopd@npm:1.0.1" - dependencies: - get-intrinsic: "npm:^1.1.3" - checksum: 10c0/505c05487f7944c552cee72087bf1567debb470d4355b1335f2c262d218ebbff805cd3715448fe29b4b380bae6912561d0467233e4165830efd28da241418c63 +"globrex@npm:^0.1.2": + version: 0.1.2 + resolution: "globrex@npm:0.1.2" + checksum: 10c0/a54c029520cf58bda1d8884f72bd49b4cd74e977883268d931fd83bcbd1a9eb96d57c7dbd4ad80148fb9247467ebfb9b215630b2ed7563b2a8de02e1ff7f89d1 languageName: node linkType: hard -"graceful-fs@npm:^4.0.0, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.6": +"gopd@npm:^1.0.1, gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 @@ -4336,109 +3837,26 @@ __metadata: languageName: node linkType: hard -"gulp-exclude-gitignore@npm:^1.2.0": - version: 1.2.0 - resolution: "gulp-exclude-gitignore@npm:1.2.0" - dependencies: - gulp-ignore: "npm:^2.0.2" - checksum: 10c0/a230cde24f93dbae423bc846559b6a0aabffe4f4c10c5988ccd8720f6913c1ef4c648e2bafad8a6b728001ef3319b8c4d2a98af2a6721d83dd08aa949991fbec - languageName: node - linkType: hard - -"gulp-filter@npm:^5.1.0": - version: 5.1.0 - resolution: "gulp-filter@npm:5.1.0" - dependencies: - multimatch: "npm:^2.0.0" - plugin-error: "npm:^0.1.2" - streamfilter: "npm:^1.0.5" - checksum: 10c0/cfa683e2e3484e57a66b07f00e7bf8de6322db08f5b4bc5c428041c2302d6e497e7bb229fd3bd4ae08044734f0fea8eefb12bd207ff2d642c348b6a2cadddc76 - languageName: node - linkType: hard - -"gulp-ignore@npm:^2.0.2": - version: 2.0.2 - resolution: "gulp-ignore@npm:2.0.2" - dependencies: - gulp-match: "npm:^1.0.3" - through2: "npm:^2.0.1" - checksum: 10c0/dd95c6efab93d33e972313ada54610d1814c9b866a08a10a5f1c7ee78e28b0d8673aa215b2e0b7419f7596b320fb418b25562222e5ed365292074a8e38347e7f - languageName: node - linkType: hard - -"gulp-match@npm:^1.0.3": - version: 1.1.0 - resolution: "gulp-match@npm:1.1.0" - dependencies: - minimatch: "npm:^3.0.3" - checksum: 10c0/229733c79ba1e158158010c81265f1b7e5e11c69044859fa5101069b3a6bda28d647703b70928758e5008755507d49809edd88c4ce9417d7539f7460d3bb2f73 - languageName: node - linkType: hard - -"gulp-reporter@npm:^2.9.0": - version: 2.10.0 - resolution: "gulp-reporter@npm:2.10.0" - dependencies: - ansi-escapes: "npm:^3.1.0" - axios: "npm:^0.18.0" - buffered-spawn: "npm:^3.3.2" - bufferstreams: "npm:^2.0.1" - chalk: "npm:^2.4.1" - checkstyle-formatter: "npm:^1.1.0" - ci-info: "npm:^2.0.0" - cli-truncate: "npm:^1.1.0" - emphasize: "npm:^2.0.0" - fancy-log: "npm:^1.3.3" - fs-extra: "npm:^7.0.1" - in-gfw: "npm:^1.2.0" - is-windows: "npm:^1.0.2" - js-yaml: "npm:^3.12.0" - junit-report-builder: "npm:^1.3.1" - lodash.get: "npm:^4.4.2" - os-locale: "npm:^3.0.1" - plugin-error: "npm:^1.0.1" - string-width: "npm:^3.0.0" - term-size: "npm:^1.2.0" - through2: "npm:^3.0.0" - to-time: "npm:^1.0.2" - checksum: 10c0/a70c8d13742536c4d31d6775ea81f0e9340778c69ea1ff01c90108f4b3b05d80337999e9e61524b8897e790fdfe9fd488f1f44dada792a419c3aaba75aed27b3 - languageName: node - linkType: hard - -"gulp-tap@npm:^1.0.1": - version: 1.0.1 - resolution: "gulp-tap@npm:1.0.1" +"gunzip-maybe@npm:^1.4.2": + version: 1.4.2 + resolution: "gunzip-maybe@npm:1.4.2" dependencies: + browserify-zlib: "npm:^0.1.4" + is-deflate: "npm:^1.0.0" + is-gzip: "npm:^1.0.0" + peek-stream: "npm:^1.1.0" + pumpify: "npm:^1.3.3" through2: "npm:^2.0.3" - checksum: 10c0/31506af37f6aa2ba8b05d45f59a06a8b45aa0174e97e7ade79c6768ff7612143d6948828fab1a6dbd15c9bd2eb8364ba8772f3bcd3b72ad59fdbbc91fb11f828 - languageName: node - linkType: hard - -"happy-dom@npm:^12.5.0": - version: 12.10.3 - resolution: "happy-dom@npm:12.10.3" - dependencies: - css.escape: "npm:^1.5.1" - entities: "npm:^4.5.0" - iconv-lite: "npm:^0.6.3" - webidl-conversions: "npm:^7.0.0" - whatwg-encoding: "npm:^2.0.0" - whatwg-mimetype: "npm:^3.0.0" - checksum: 10c0/fbf8647e17c4af5c166d7c4b6963f4bbc9d1c279e94a4c77234b1fecca98c59989b894c7b186f5107e1062d40ffd84f12350b757f51330a5fc1c5228eb199517 - languageName: node - linkType: hard - -"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": - version: 1.0.2 - resolution: "has-bigints@npm:1.0.2" - checksum: 10c0/724eb1485bfa3cdff6f18d95130aa190561f00b3fcf9f19dc640baf8176b5917c143b81ec2123f8cddb6c05164a198c94b13e1377c497705ccc8e1a80306e83b + bin: + gunzip-maybe: bin.js + checksum: 10c0/42798a8061759885c2084e1804e51313d14f2dc9cf6c137e222953ec802f914e592d6f9dbf6ad67f4e78eb036e86db017d9c7c93bb23e90cd5ae09326296ed77 languageName: node linkType: hard -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 +"has-bigints@npm:^1.0.2": + version: 1.1.0 + resolution: "has-bigints@npm:1.1.0" + checksum: 10c0/2de0cdc4a1ccf7a1e75ffede1876994525ac03cc6f5ae7392d3415dd475cd9eee5bceec63669ab61aa997ff6cceebb50ef75561c7002bed8988de2b9d1b40788 languageName: node linkType: hard @@ -4458,21 +3876,23 @@ __metadata: languageName: node linkType: hard -"has-proto@npm:^1.0.1, has-proto@npm:^1.0.3": - version: 1.0.3 - resolution: "has-proto@npm:1.0.3" - checksum: 10c0/35a6989f81e9f8022c2f4027f8b48a552de714938765d019dbea6bb547bd49ce5010a3c7c32ec6ddac6e48fc546166a3583b128f5a7add8b058a6d8b4afec205 +"has-proto@npm:^1.2.0": + version: 1.2.0 + resolution: "has-proto@npm:1.2.0" + dependencies: + dunder-proto: "npm:^1.0.0" + checksum: 10c0/46538dddab297ec2f43923c3d35237df45d8c55a6fc1067031e04c13ed8a9a8f94954460632fd4da84c31a1721eefee16d901cbb1ae9602bab93bb6e08f93b95 languageName: node linkType: hard -"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": - version: 1.0.3 - resolution: "has-symbols@npm:1.0.3" - checksum: 10c0/e6922b4345a3f37069cdfe8600febbca791c94988c01af3394d86ca3360b4b93928bbf395859158f88099cb10b19d98e3bbab7c9ff2c1bd09cf665ee90afa2c3 +"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e languageName: node linkType: hard -"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2": +"has-tostringtag@npm:^1.0.2": version: 1.0.2 resolution: "has-tostringtag@npm:1.0.2" dependencies: @@ -4481,7 +3901,7 @@ __metadata: languageName: node linkType: hard -"hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": +"hasown@npm:^2.0.0, hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" dependencies: @@ -4490,13 +3910,6 @@ __metadata: languageName: node linkType: hard -"highlight.js@npm:~9.12.0": - version: 9.12.0 - resolution: "highlight.js@npm:9.12.0" - checksum: 10c0/8e310eaf66d7f347f2a92e2017a114e5e8c2e38cc313e57bbd1c4d169f6217daffdbba5c52a76013db2232c8c519672a4f6aa5ebc1841b2a69e75a2c422ffbcf - languageName: node - linkType: hard - "hoist-non-react-statics@npm:^3.3.1": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" @@ -4506,6 +3919,22 @@ __metadata: languageName: node linkType: hard +"hookified@npm:^1.6.0": + version: 1.7.0 + resolution: "hookified@npm:1.7.0" + checksum: 10c0/039424cbeb8cc55cd9bd6b17e9fb48c5d619899f49d560abf39a4cd3ae3d9197e434732218641ebaec22ff0a0b195fdb96fc4c42df12477f464bfe63a35a4b66 + languageName: node + linkType: hard + +"hosted-git-info@npm:^6.0.0, hosted-git-info@npm:^6.1.1": + version: 6.1.3 + resolution: "hosted-git-info@npm:6.1.3" + dependencies: + lru-cache: "npm:^7.5.1" + checksum: 10c0/a1fc10faf67d04d575ebabf89cd5c9e3ebca041d99f42f31143bc8027684da4612c2f6deaf7cf2c09ac3b04dd502ad3957caa49d913628f0558964b2e1e7b414 + languageName: node + linkType: hard + "html-parse-stringify@npm:^3.0.1": version: 3.0.1 resolution: "html-parse-stringify@npm:3.0.1" @@ -4529,6 +3958,19 @@ __metadata: languageName: node linkType: hard +"http-errors@npm:2.0.0": + version: 2.0.0 + resolution: "http-errors@npm:2.0.0" + dependencies: + depd: "npm:2.0.0" + inherits: "npm:2.0.4" + setprototypeof: "npm:1.2.0" + statuses: "npm:2.0.1" + toidentifier: "npm:1.0.1" + checksum: 10c0/fc6f2715fe188d091274b5ffc8b3657bd85c63e969daa68ccb77afb05b071a4b62841acb7a21e417b5539014dff2ebf9550f0b14a9ff126f2734a7c1387f8e19 + languageName: node + linkType: hard + "http-proxy-agent@npm:^7.0.0": version: 7.0.2 resolution: "http-proxy-agent@npm:7.0.2" @@ -4540,34 +3982,48 @@ __metadata: linkType: hard "https-proxy-agent@npm:^7.0.1": - version: 7.0.5 - resolution: "https-proxy-agent@npm:7.0.5" + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" dependencies: - agent-base: "npm:^7.0.2" + agent-base: "npm:^7.1.2" debug: "npm:4" - checksum: 10c0/2490e3acec397abeb88807db52cac59102d5ed758feee6df6112ab3ccd8325e8a1ce8bce6f4b66e5470eca102d31e425ace904242e4fa28dbe0c59c4bafa7b2c + checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac languageName: node linkType: hard -"i18next-browser-languagedetector@npm:^8.0.0": - version: 8.0.0 - resolution: "i18next-browser-languagedetector@npm:8.0.0" +"i18next-browser-languagedetector@npm:^8.0.2": + version: 8.0.2 + resolution: "i18next-browser-languagedetector@npm:8.0.2" dependencies: "@babel/runtime": "npm:^7.23.2" - checksum: 10c0/08a7c747ec18a0743b54390a0b42836d814b15fb49c92b90c259298e6a6e7e001ff9df99d0fd308283a34fceea53b4d9053aa1695a37f696bc04160017bbb524 + checksum: 10c0/b4ed7531ab503da12e043209c396b1aa9a0bdb2bbb397c0c85605bf16f08bf4cdacf9c1866cd32be1f19266488accb8d15dc8a76a6046e9ee359284199a8dcbc languageName: node linkType: hard -"i18next@npm:^23.11.5": - version: 23.11.5 - resolution: "i18next@npm:23.11.5" +"i18next@npm:^24.2.1": + version: 24.2.1 + resolution: "i18next@npm:24.2.1" dependencies: "@babel/runtime": "npm:^7.23.2" - checksum: 10c0/b0bec64250a3e529d4c51e2fc511406a85c5dde3d005d3aabe919551ca31dfc0a8f5490bf6e44649822e895a1fa91a58092d112367669cd11b2eb89e6ba90d1a + peerDependencies: + typescript: ^5 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/f4193ec0c84b292f12fb734bb93f0dae09bdb5deed2f6b888694b4309b15d1703b2b61088b9a50772deeab4b53868ec204a0e932e44b3474358910995b88627b + languageName: node + linkType: hard + +"iconv-lite@npm:0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3" + checksum: 10c0/c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4 languageName: node linkType: hard -"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2, iconv-lite@npm:^0.6.3": +"iconv-lite@npm:^0.6.2": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" dependencies: @@ -4576,26 +4032,24 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:^0.4.15": - version: 0.4.24 - resolution: "iconv-lite@npm:0.4.24" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3" - checksum: 10c0/c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4 +"ieee754@npm:^1.2.1": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 10c0/b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb languageName: node linkType: hard "ignore@npm:^5.2.0, ignore@npm:^5.3.1": - version: 5.3.1 - resolution: "ignore@npm:5.3.1" - checksum: 10c0/703f7f45ffb2a27fb2c5a8db0c32e7dee66b33a225d28e8db4e1be6474795f606686a6e3bcc50e1aa12f2042db4c9d4a7d60af3250511de74620fbed052ea4cd + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 languageName: node linkType: hard -"immutable@npm:^4.0.0": - version: 4.3.6 - resolution: "immutable@npm:4.3.6" - checksum: 10c0/7d0952a768b4fadcee47230ed86dc9505a4517095eceaf5a47e65288571c42400c6e4a2ae21eca4eda957cb7bc50720213135b62cf6a181639111f8acae128c3 +"ignore@npm:^7.0.1": + version: 7.0.3 + resolution: "ignore@npm:7.0.3" + checksum: 10c0/8e21637513cbcd888a4873d34d5c651a2e24b3c4c9a6b159335a26bed348c3c386c51d6fab23577f59140e1b226323138fbd50e63882d4568fd12aa6c822029e languageName: node linkType: hard @@ -4616,35 +4070,7 @@ __metadata: languageName: node linkType: hard -"in-gfw@npm:^1.2.0": - version: 1.2.0 - resolution: "in-gfw@npm:1.2.0" - dependencies: - glob: "npm:^7.1.2" - is-wsl: "npm:^1.1.0" - mem: "npm:^3.0.1" - checksum: 10c0/9c4f4827bff2a4c2f5ec9c7837d9b3f68de9245c7fe08aa5acc07da041706166a0905bb4f78f9edf8c5e19bcd8991a8ec8fa8436a6f1d838227c774f59ba12f1 - languageName: node - linkType: hard - -"indent-string@npm:^4.0.0": - version: 4.0.0 - resolution: "indent-string@npm:4.0.0" - checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f - languageName: node - linkType: hard - -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" - dependencies: - once: "npm:^1.3.0" - wrappy: "npm:1" - checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 - languageName: node - linkType: hard - -"inherits@npm:2, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": +"inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 @@ -4658,30 +4084,14 @@ __metadata: languageName: node linkType: hard -"internal-slot@npm:^1.0.7": - version: 1.0.7 - resolution: "internal-slot@npm:1.0.7" +"internal-slot@npm:^1.1.0": + version: 1.1.0 + resolution: "internal-slot@npm:1.1.0" dependencies: es-errors: "npm:^1.3.0" - hasown: "npm:^2.0.0" - side-channel: "npm:^1.0.4" - checksum: 10c0/f8b294a4e6ea3855fc59551bbf35f2b832cf01fd5e6e2a97f5c201a071cc09b49048f856e484b67a6c721da5e55736c5b6ddafaf19e2dbeb4a3ff1821680de6c - languageName: node - linkType: hard - -"invariant@npm:^2.2.4": - version: 2.2.4 - resolution: "invariant@npm:2.2.4" - dependencies: - loose-envify: "npm:^1.0.0" - checksum: 10c0/5af133a917c0bcf65e84e7f23e779e7abc1cd49cb7fdc62d00d1de74b0d8c1b5ee74ac7766099fb3be1b05b26dfc67bab76a17030d2fe7ea2eef867434362dfc - languageName: node - linkType: hard - -"invert-kv@npm:^2.0.0": - version: 2.0.0 - resolution: "invert-kv@npm:2.0.0" - checksum: 10c0/1a614b9025875e2009a23b8b56bfcbc7727e81ce949ccb6e0700caa6ce04ef92f0cbbcdb120528b6409317d08a7d5671044e520df48719437b5005ae6a1cbf74 + hasown: "npm:^2.0.2" + side-channel: "npm:^1.1.0" + checksum: 10c0/03966f5e259b009a9bf1a78d60da920df198af4318ec004f57b8aef1dd3fe377fbc8cce63a96e8c810010302654de89f9e19de1cd8ad0061d15be28a695465c7 languageName: node linkType: hard @@ -4695,23 +4105,21 @@ __metadata: languageName: node linkType: hard -"is-absolute@npm:^1.0.0": - version: 1.0.0 - resolution: "is-absolute@npm:1.0.0" - dependencies: - is-relative: "npm:^1.0.0" - is-windows: "npm:^1.0.1" - checksum: 10c0/422302ce879d4f3ca6848499b6f3ddcc8fd2dc9f3e9cad3f6bcedff58cdfbbbd7f4c28600fffa7c59a858f1b15c27fb6cfe1d5275e58a36d2bf098a44ef5abc4 +"ipaddr.js@npm:1.9.1": + version: 1.9.1 + resolution: "ipaddr.js@npm:1.9.1" + checksum: 10c0/0486e775047971d3fdb5fb4f063829bac45af299ae0b82dcf3afa2145338e08290563a2a70f34b732d795ecc8311902e541a8530eeb30d75860a78ff4e94ce2a languageName: node linkType: hard -"is-array-buffer@npm:^3.0.4": - version: 3.0.4 - resolution: "is-array-buffer@npm:3.0.4" +"is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5": + version: 3.0.5 + resolution: "is-array-buffer@npm:3.0.5" dependencies: - call-bind: "npm:^1.0.2" - get-intrinsic: "npm:^1.2.1" - checksum: 10c0/42a49d006cc6130bc5424eae113e948c146f31f9d24460fc0958f855d9d810e6fd2e4519bf19aab75179af9c298ea6092459d8cafdec523cd19e529b26eab860 + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/c5c9f25606e86dbb12e756694afbbff64bc8b348d1bc989324c037e1068695131930199d6ad381952715dad3a9569333817f0b1a72ce5af7f883ce802e49c83d languageName: node linkType: hard @@ -4723,128 +4131,94 @@ __metadata: linkType: hard "is-async-function@npm:^2.0.0": - version: 2.0.0 - resolution: "is-async-function@npm:2.0.0" - dependencies: - has-tostringtag: "npm:^1.0.0" - checksum: 10c0/787bc931576aad525d751fc5ce211960fe91e49ac84a5c22d6ae0bc9541945fbc3f686dc590c3175722ce4f6d7b798a93f6f8ff4847fdb2199aea6f4baf5d668 - languageName: node - linkType: hard - -"is-bigint@npm:^1.0.1": - version: 1.0.4 - resolution: "is-bigint@npm:1.0.4" + version: 2.1.1 + resolution: "is-async-function@npm:2.1.1" dependencies: - has-bigints: "npm:^1.0.1" - checksum: 10c0/eb9c88e418a0d195ca545aff2b715c9903d9b0a5033bc5922fec600eb0c3d7b1ee7f882dbf2e0d5a6e694e42391be3683e4368737bd3c4a77f8ac293e7773696 + async-function: "npm:^1.0.0" + call-bound: "npm:^1.0.3" + get-proto: "npm:^1.0.1" + has-tostringtag: "npm:^1.0.2" + safe-regex-test: "npm:^1.1.0" + checksum: 10c0/d70c236a5e82de6fc4d44368ffd0c2fee2b088b893511ce21e679da275a5ecc6015ff59a7d7e1bdd7ca39f71a8dbdd253cf8cce5c6b3c91cdd5b42b5ce677298 languageName: node linkType: hard -"is-binary-path@npm:~2.1.0": - version: 2.1.0 - resolution: "is-binary-path@npm:2.1.0" +"is-bigint@npm:^1.1.0": + version: 1.1.0 + resolution: "is-bigint@npm:1.1.0" dependencies: - binary-extensions: "npm:^2.0.0" - checksum: 10c0/a16eaee59ae2b315ba36fad5c5dcaf8e49c3e27318f8ab8fa3cdb8772bf559c8d1ba750a589c2ccb096113bb64497084361a25960899cb6172a6925ab6123d38 + has-bigints: "npm:^1.0.2" + checksum: 10c0/f4f4b905ceb195be90a6ea7f34323bf1c18e3793f18922e3e9a73c684c29eeeeff5175605c3a3a74cc38185fe27758f07efba3dbae812e5c5afbc0d2316b40e4 languageName: node linkType: hard -"is-boolean-object@npm:^1.1.0": - version: 1.1.2 - resolution: "is-boolean-object@npm:1.1.2" +"is-boolean-object@npm:^1.2.1": + version: 1.2.1 + resolution: "is-boolean-object@npm:1.2.1" dependencies: - call-bind: "npm:^1.0.2" - has-tostringtag: "npm:^1.0.0" - checksum: 10c0/6090587f8a8a8534c0f816da868bc94f32810f08807aa72fa7e79f7e11c466d281486ffe7a788178809c2aa71fe3e700b167fe80dd96dad68026bfff8ebf39f7 - languageName: node - linkType: hard - -"is-buffer@npm:^1.1.5": - version: 1.1.6 - resolution: "is-buffer@npm:1.1.6" - checksum: 10c0/ae18aa0b6e113d6c490ad1db5e8df9bdb57758382b313f5a22c9c61084875c6396d50bbf49315f5b1926d142d74dfb8d31b40d993a383e0a158b15fea7a82234 - languageName: node - linkType: hard - -"is-buffer@npm:^2.0.2": - version: 2.0.5 - resolution: "is-buffer@npm:2.0.5" - checksum: 10c0/e603f6fced83cf94c53399cff3bda1a9f08e391b872b64a73793b0928be3e5f047f2bcece230edb7632eaea2acdbfcb56c23b33d8a20c820023b230f1485679a + call-bound: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/2ef601d255a39fdbde79cfe6be80c27b47430ed6712407f29b17d002e20f64c1e3d6692f1d842ba16bf1e9d8ddf1c4f13cac3ed7d9a4a21290f44879ebb4e8f5 languageName: node linkType: hard -"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": +"is-callable@npm:^1.1.3, is-callable@npm:^1.2.7": version: 1.2.7 resolution: "is-callable@npm:1.2.7" checksum: 10c0/ceebaeb9d92e8adee604076971dd6000d38d6afc40bb843ea8e45c5579b57671c3f3b50d7f04869618242c6cee08d1b67806a8cb8edaaaf7c0748b3720d6066f languageName: node linkType: hard -"is-core-module@npm:^2.13.0": - version: 2.14.0 - resolution: "is-core-module@npm:2.14.0" +"is-core-module@npm:^2.13.0, is-core-module@npm:^2.16.0, is-core-module@npm:^2.8.1": + version: 2.16.1 + resolution: "is-core-module@npm:2.16.1" dependencies: hasown: "npm:^2.0.2" - checksum: 10c0/ae8dbc82bd20426558bc8d20ce290ce301c1cfd6ae4446266d10cacff4c63c67ab16440ade1d72ced9ec41c569fbacbcee01e293782ce568527c4cdf35936e4c + checksum: 10c0/898443c14780a577e807618aaae2b6f745c8538eca5c7bc11388a3f2dc6de82b9902bcc7eb74f07be672b11bbe82dd6a6edded44a00cb3d8f933d0459905eedd languageName: node linkType: hard -"is-data-view@npm:^1.0.1": - version: 1.0.1 - resolution: "is-data-view@npm:1.0.1" +"is-data-view@npm:^1.0.1, is-data-view@npm:^1.0.2": + version: 1.0.2 + resolution: "is-data-view@npm:1.0.2" dependencies: + call-bound: "npm:^1.0.2" + get-intrinsic: "npm:^1.2.6" is-typed-array: "npm:^1.1.13" - checksum: 10c0/a3e6ec84efe303da859107aed9b970e018e2bee7ffcb48e2f8096921a493608134240e672a2072577e5f23a729846241d9634806e8a0e51d9129c56d5f65442d + checksum: 10c0/ef3548a99d7e7f1370ce21006baca6d40c73e9f15c941f89f0049c79714c873d03b02dae1c64b3f861f55163ecc16da06506c5b8a1d4f16650b3d9351c380153 languageName: node linkType: hard -"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": - version: 1.0.5 - resolution: "is-date-object@npm:1.0.5" +"is-date-object@npm:^1.0.5, is-date-object@npm:^1.1.0": + version: 1.1.0 + resolution: "is-date-object@npm:1.1.0" dependencies: - has-tostringtag: "npm:^1.0.0" - checksum: 10c0/eed21e5dcc619c48ccef804dfc83a739dbb2abee6ca202838ee1bd5f760fe8d8a93444f0d49012ad19bb7c006186e2884a1b92f6e1c056da7fd23d0a9ad5992e + call-bound: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/1a4d199c8e9e9cac5128d32e6626fa7805175af9df015620ac0d5d45854ccf348ba494679d872d37301032e35a54fc7978fba1687e8721b2139aea7870cafa2f languageName: node linkType: hard -"is-extendable@npm:^1.0.0, is-extendable@npm:^1.0.1": - version: 1.0.1 - resolution: "is-extendable@npm:1.0.1" - dependencies: - is-plain-object: "npm:^2.0.4" - checksum: 10c0/1d6678a5be1563db6ecb121331c819c38059703f0179f52aa80c242c223ee9c6b66470286636c0e63d7163e4d905c0a7d82a096e0b5eaeabb51b9f8d0af0d73f +"is-deflate@npm:^1.0.0": + version: 1.0.0 + resolution: "is-deflate@npm:1.0.0" + checksum: 10c0/35f7ffcbef3549dd8a4d8df5dc09b4f4656a0fc88326e8b5201cda54114a9c2d8efb689d87c16f3f35c95bd71dcf13dc790d62b7504745b42c53ab4b40238f5a languageName: node linkType: hard -"is-extglob@npm:^2.1.0, is-extglob@npm:^2.1.1": +"is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 languageName: node linkType: hard -"is-finalizationregistry@npm:^1.0.2": - version: 1.0.2 - resolution: "is-finalizationregistry@npm:1.0.2" - dependencies: - call-bind: "npm:^1.0.2" - checksum: 10c0/81caecc984d27b1a35c68741156fc651fb1fa5e3e6710d21410abc527eb226d400c0943a167922b2e920f6b3e58b0dede9aa795882b038b85f50b3a4b877db86 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^1.0.0": - version: 1.0.0 - resolution: "is-fullwidth-code-point@npm:1.0.0" +"is-finalizationregistry@npm:^1.1.0": + version: 1.1.1 + resolution: "is-finalizationregistry@npm:1.1.1" dependencies: - number-is-nan: "npm:^1.0.0" - checksum: 10c0/12acfcf16142f2d431bf6af25d68569d3198e81b9799b4ae41058247aafcc666b0127d64384ea28e67a746372611fcbe9b802f69175287aba466da3eddd5ba0f - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^2.0.0": - version: 2.0.0 - resolution: "is-fullwidth-code-point@npm:2.0.0" - checksum: 10c0/e58f3e4a601fc0500d8b2677e26e9fe0cd450980e66adb29d85b6addf7969731e38f8e43ed2ec868a09c101a55ac3d8b78902209269f38c5286bc98f5bc1b4d9 + call-bound: "npm:^1.0.3" + checksum: 10c0/818dff679b64f19e228a8205a1e2d09989a98e98def3a817f889208cfcbf918d321b251aadf2c05918194803ebd2eb01b14fc9d0b2bea53d984f4137bfca5e97 languageName: node linkType: hard @@ -4856,24 +4230,18 @@ __metadata: linkType: hard "is-generator-function@npm:^1.0.10": - version: 1.0.10 - resolution: "is-generator-function@npm:1.0.10" - dependencies: - has-tostringtag: "npm:^1.0.0" - checksum: 10c0/df03514df01a6098945b5a0cfa1abff715807c8e72f57c49a0686ad54b3b74d394e2d8714e6f709a71eb00c9630d48e73ca1796c1ccc84ac95092c1fecc0d98b - languageName: node - linkType: hard - -"is-glob@npm:^3.1.0": - version: 3.1.0 - resolution: "is-glob@npm:3.1.0" + version: 1.1.0 + resolution: "is-generator-function@npm:1.1.0" dependencies: - is-extglob: "npm:^2.1.0" - checksum: 10c0/ba816a35dcf5285de924a8a4654df7b183a86381d73ea3bbf3df3cc61b3ba61fdddf90ee205709a2235b210ee600ee86e5e8600093cf291a662607fd032e2ff4 + call-bound: "npm:^1.0.3" + get-proto: "npm:^1.0.0" + has-tostringtag: "npm:^1.0.2" + safe-regex-test: "npm:^1.1.0" + checksum: 10c0/fdfa96c8087bf36fc4cd514b474ba2ff404219a4dd4cfa6cf5426404a1eed259bdcdb98f082a71029a48d01f27733e3436ecc6690129a7ec09cb0434bee03a2a languageName: node linkType: hard -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": version: 4.0.3 resolution: "is-glob@npm:4.0.3" dependencies: @@ -4882,10 +4250,10 @@ __metadata: languageName: node linkType: hard -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 10c0/85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d +"is-gzip@npm:^1.0.0": + version: 1.0.0 + resolution: "is-gzip@npm:1.0.0" + checksum: 10c0/cbc1db080c636a6fb0f7346e3076f8276a29a9d8b52ae67c1971a8131c43f308e98ed227d1a6f49970e6c6ebabee0568e60aed7a3579dd4e1817cddf2faaf9b7 languageName: node linkType: hard @@ -4896,26 +4264,13 @@ __metadata: languageName: node linkType: hard -"is-negated-glob@npm:^1.0.0": - version: 1.0.0 - resolution: "is-negated-glob@npm:1.0.0" - checksum: 10c0/f9d4fb2effd7a6d0e4770463e4cf708fbff2d5b660ab2043e5703e21e3234dfbe9974fdd8c08eb80f9898d5dd3d21b020e8d07fce387cd394a79991f01cd8d1c - languageName: node - linkType: hard - -"is-negative-zero@npm:^2.0.3": - version: 2.0.3 - resolution: "is-negative-zero@npm:2.0.3" - checksum: 10c0/bcdcf6b8b9714063ffcfa9929c575ac69bfdabb8f4574ff557dfc086df2836cf07e3906f5bbc4f2a5c12f8f3ba56af640c843cdfc74da8caed86c7c7d66fd08e - languageName: node - linkType: hard - -"is-number-object@npm:^1.0.4": - version: 1.0.7 - resolution: "is-number-object@npm:1.0.7" +"is-number-object@npm:^1.1.1": + version: 1.1.1 + resolution: "is-number-object@npm:1.1.1" dependencies: - has-tostringtag: "npm:^1.0.0" - checksum: 10c0/aad266da1e530f1804a2b7bd2e874b4869f71c98590b3964f9d06cc9869b18f8d1f4778f838ecd2a11011bce20aeecb53cb269ba916209b79c24580416b74b1b + call-bound: "npm:^1.0.3" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/97b451b41f25135ff021d85c436ff0100d84a039bb87ffd799cbcdbea81ef30c464ced38258cdd34f080be08fc3b076ca1f472086286d2aa43521d6ec6a79f53 languageName: node linkType: hard @@ -4926,22 +4281,6 @@ __metadata: languageName: node linkType: hard -"is-path-inside@npm:^3.0.3": - version: 3.0.3 - resolution: "is-path-inside@npm:3.0.3" - checksum: 10c0/cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 - languageName: node - linkType: hard - -"is-plain-object@npm:^2.0.4": - version: 2.0.4 - resolution: "is-plain-object@npm:2.0.4" - dependencies: - isobject: "npm:^3.0.1" - checksum: 10c0/f050fdd5203d9c81e8c4df1b3ff461c4bc64e8b5ca383bcdde46131361d0a678e80bcf00b5257646f6c636197629644d53bd8e2375aea633de09a82d57e942f4 - languageName: node - linkType: hard - "is-plain-object@npm:^5.0.0": version: 5.0.0 resolution: "is-plain-object@npm:5.0.0" @@ -4949,22 +4288,15 @@ __metadata: languageName: node linkType: hard -"is-regex@npm:^1.1.4": - version: 1.1.4 - resolution: "is-regex@npm:1.1.4" - dependencies: - call-bind: "npm:^1.0.2" - has-tostringtag: "npm:^1.0.0" - checksum: 10c0/bb72aae604a69eafd4a82a93002058c416ace8cde95873589a97fc5dac96a6c6c78a9977d487b7b95426a8f5073969124dd228f043f9f604f041f32fcc465fc1 - languageName: node - linkType: hard - -"is-relative@npm:^1.0.0": - version: 1.0.0 - resolution: "is-relative@npm:1.0.0" +"is-regex@npm:^1.2.1": + version: 1.2.1 + resolution: "is-regex@npm:1.2.1" dependencies: - is-unc-path: "npm:^1.0.0" - checksum: 10c0/61157c4be8594dd25ac6f0ef29b1218c36667259ea26698367a4d9f39ff9018368bc365c490b3c79be92dfb1e389e43c4b865c95709e7b3bc72c5932f751fb60 + call-bound: "npm:^1.0.2" + gopd: "npm:^1.2.0" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.2" + checksum: 10c0/1d3715d2b7889932349241680032e85d0b492cfcb045acb75ffc2c3085e8d561184f1f7e84b6f8321935b4aea39bc9c6ba74ed595b57ce4881a51dfdbc214e04 languageName: node linkType: hard @@ -4975,69 +4307,42 @@ __metadata: languageName: node linkType: hard -"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.3": - version: 1.0.3 - resolution: "is-shared-array-buffer@npm:1.0.3" - dependencies: - call-bind: "npm:^1.0.7" - checksum: 10c0/adc11ab0acbc934a7b9e5e9d6c588d4ec6682f6fea8cda5180721704fa32927582ede5b123349e32517fdadd07958973d24716c80e7ab198970c47acc09e59c7 - languageName: node - linkType: hard - -"is-stream@npm:^1.1.0": - version: 1.1.0 - resolution: "is-stream@npm:1.1.0" - checksum: 10c0/b8ae7971e78d2e8488d15f804229c6eed7ed36a28f8807a1815938771f4adff0e705218b7dab968270433f67103e4fef98062a0beea55d64835f705ee72c7002 - languageName: node - linkType: hard - -"is-string@npm:^1.0.5, is-string@npm:^1.0.7": - version: 1.0.7 - resolution: "is-string@npm:1.0.7" - dependencies: - has-tostringtag: "npm:^1.0.0" - checksum: 10c0/905f805cbc6eedfa678aaa103ab7f626aac9ebbdc8737abb5243acaa61d9820f8edc5819106b8fcd1839e33db21de9f0116ae20de380c8382d16dc2a601921f6 - languageName: node - linkType: hard - -"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": +"is-shared-array-buffer@npm:^1.0.4": version: 1.0.4 - resolution: "is-symbol@npm:1.0.4" + resolution: "is-shared-array-buffer@npm:1.0.4" dependencies: - has-symbols: "npm:^1.0.2" - checksum: 10c0/9381dd015f7c8906154dbcbf93fad769de16b4b961edc94f88d26eb8c555935caa23af88bda0c93a18e65560f6d7cca0fd5a3f8a8e1df6f1abbb9bead4502ef7 + call-bound: "npm:^1.0.3" + checksum: 10c0/65158c2feb41ff1edd6bbd6fd8403a69861cf273ff36077982b5d4d68e1d59278c71691216a4a64632bd76d4792d4d1d2553901b6666d84ade13bba5ea7bc7db languageName: node linkType: hard -"is-typed-array@npm:^1.1.13": - version: 1.1.13 - resolution: "is-typed-array@npm:1.1.13" +"is-string@npm:^1.0.7, is-string@npm:^1.1.1": + version: 1.1.1 + resolution: "is-string@npm:1.1.1" dependencies: - which-typed-array: "npm:^1.1.14" - checksum: 10c0/fa5cb97d4a80e52c2cc8ed3778e39f175a1a2ae4ddf3adae3187d69586a1fd57cfa0b095db31f66aa90331e9e3da79184cea9c6abdcd1abc722dc3c3edd51cca + call-bound: "npm:^1.0.3" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/2f518b4e47886bb81567faba6ffd0d8a8333cf84336e2e78bf160693972e32ad00fe84b0926491cc598dee576fdc55642c92e62d0cbe96bf36f643b6f956f94d languageName: node linkType: hard -"is-unc-path@npm:^1.0.0": - version: 1.0.0 - resolution: "is-unc-path@npm:1.0.0" +"is-symbol@npm:^1.0.4, is-symbol@npm:^1.1.1": + version: 1.1.1 + resolution: "is-symbol@npm:1.1.1" dependencies: - unc-path-regex: "npm:^0.1.2" - checksum: 10c0/ac1b78f9b748196e3be3d0e722cd4b0f98639247a130a8f2473a58b29baf63fdb1b1c5a12c830660c5ee6ef0279c5418ca8e346f98cbe1a29e433d7ae531d42e - languageName: node - linkType: hard - -"is-utf8@npm:^0.2.1": - version: 0.2.1 - resolution: "is-utf8@npm:0.2.1" - checksum: 10c0/3ed45e5b4ddfa04ed7e32c63d29c61b980ecd6df74698f45978b8c17a54034943bcbffb6ae243202e799682a66f90fef526f465dd39438745e9fe70794c1ef09 + call-bound: "npm:^1.0.2" + has-symbols: "npm:^1.1.0" + safe-regex-test: "npm:^1.1.0" + checksum: 10c0/f08f3e255c12442e833f75a9e2b84b2d4882fdfd920513cf2a4a2324f0a5b076c8fd913778e3ea5d258d5183e9d92c0cd20e04b03ab3df05316b049b2670af1e languageName: node linkType: hard -"is-valid-glob@npm:^1.0.0": - version: 1.0.0 - resolution: "is-valid-glob@npm:1.0.0" - checksum: 10c0/73aef3a2dc218b677362c876d1bc69699e10cfb50ecae6ac5fa946d7f5bb783721e81d9383bd120e4fb7bcfaa7ebe1edab0b707fd93051cc6e04f90f02d689b6 +"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.15": + version: 1.1.15 + resolution: "is-typed-array@npm:1.1.15" + dependencies: + which-typed-array: "npm:^1.1.16" + checksum: 10c0/415511da3669e36e002820584e264997ffe277ff136643a3126cc949197e6ca3334d0f12d084e83b1994af2e9c8141275c741cf2b7da5a2ff62dd0cac26f76c4 languageName: node linkType: hard @@ -5048,36 +4353,22 @@ __metadata: languageName: node linkType: hard -"is-weakref@npm:^1.0.2": - version: 1.0.2 - resolution: "is-weakref@npm:1.0.2" +"is-weakref@npm:^1.0.2, is-weakref@npm:^1.1.0": + version: 1.1.0 + resolution: "is-weakref@npm:1.1.0" dependencies: - call-bind: "npm:^1.0.2" - checksum: 10c0/1545c5d172cb690c392f2136c23eec07d8d78a7f57d0e41f10078aa4f5daf5d7f57b6513a67514ab4f073275ad00c9822fc8935e00229d0a2089e1c02685d4b1 + call-bound: "npm:^1.0.2" + checksum: 10c0/aa835f62e29cb60132ecb3ec7d11bd0f39ec7322325abe8412b805aef47153ec2daefdb21759b049711c674f49b13202a31d8d126bcdff7d8671c78babd4ae5b languageName: node linkType: hard "is-weakset@npm:^2.0.3": - version: 2.0.3 - resolution: "is-weakset@npm:2.0.3" + version: 2.0.4 + resolution: "is-weakset@npm:2.0.4" dependencies: - call-bind: "npm:^1.0.7" - get-intrinsic: "npm:^1.2.4" - checksum: 10c0/8ad6141b6a400e7ce7c7442a13928c676d07b1f315ab77d9912920bf5f4170622f43126f111615788f26c3b1871158a6797c862233124507db0bcc33a9537d1a - languageName: node - linkType: hard - -"is-windows@npm:^1.0.1, is-windows@npm:^1.0.2": - version: 1.0.2 - resolution: "is-windows@npm:1.0.2" - checksum: 10c0/b32f418ab3385604a66f1b7a3ce39d25e8881dee0bd30816dc8344ef6ff9df473a732bcc1ec4e84fe99b2f229ae474f7133e8e93f9241686cfcf7eebe53ba7a5 - languageName: node - linkType: hard - -"is-wsl@npm:^1.1.0": - version: 1.1.0 - resolution: "is-wsl@npm:1.1.0" - checksum: 10c0/7ad0012f21092d6f586c7faad84755a8ef0da9b9ec295e4dc82313cce4e1a93a3da3c217265016461f9b141503fe55fa6eb1fd5457d3f05e8d1bdbb48e50c13a + call-bound: "npm:^1.0.3" + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/6491eba08acb8dc9532da23cb226b7d0192ede0b88f16199e592e4769db0a077119c1f5d2283d1e0d16d739115f70046e887e477eb0e66cd90e1bb29f28ba647 languageName: node linkType: hard @@ -5095,6 +4386,13 @@ __metadata: languageName: node linkType: hard +"isbot@npm:^5.1.17": + version: 5.1.21 + resolution: "isbot@npm:5.1.21" + checksum: 10c0/242229272e85cae0bd6194743e88a390b7010ce7b7a39d32c589d3d4d60cb9da81edd61206cc11edf2f180953a5f9f82cb0d37ce4e0cf1b954da2697387dba0a + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -5109,23 +4407,17 @@ __metadata: languageName: node linkType: hard -"isobject@npm:^3.0.1": - version: 3.0.1 - resolution: "isobject@npm:3.0.1" - checksum: 10c0/03344f5064a82f099a0cd1a8a407f4c0d20b7b8485e8e816c39f249e9416b06c322e8dec5b842b6bb8a06de0af9cb48e7bc1b5352f0fadc2f0abac033db3d4db - languageName: node - linkType: hard - -"iterator.prototype@npm:^1.1.2": - version: 1.1.2 - resolution: "iterator.prototype@npm:1.1.2" +"iterator.prototype@npm:^1.1.4": + version: 1.1.5 + resolution: "iterator.prototype@npm:1.1.5" dependencies: - define-properties: "npm:^1.2.1" - get-intrinsic: "npm:^1.2.1" - has-symbols: "npm:^1.0.3" - reflect.getprototypeof: "npm:^1.0.4" - set-function-name: "npm:^2.0.1" - checksum: 10c0/a32151326095e916f306990d909f6bbf23e3221999a18ba686419535dcd1749b10ded505e89334b77dc4c7a58a8508978f0eb16c2c8573e6d412eb7eb894ea79 + define-data-property: "npm:^1.1.4" + es-object-atoms: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.6" + get-proto: "npm:^1.0.0" + has-symbols: "npm:^1.1.0" + set-function-name: "npm:^2.0.2" + checksum: 10c0/f7a262808e1b41049ab55f1e9c29af7ec1025a000d243b83edf34ce2416eedd56079b117fa59376bb4a724110690f13aa8427f2ee29a09eec63a7e72367626d0 languageName: node linkType: hard @@ -5149,18 +4441,6 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^3.12.0": - version: 3.14.1 - resolution: "js-yaml@npm:3.14.1" - dependencies: - argparse: "npm:^1.0.7" - esprima: "npm:^4.0.0" - bin: - js-yaml: bin/js-yaml.js - checksum: 10c0/6746baaaeac312c4db8e75fa22331d9a04cccb7792d126ed8ce6a0bbcfef0cedaddd0c5098fade53db067c09fe00aa1c957674b4765610a8b06a5a189e46433b - languageName: node - linkType: hard - "js-yaml@npm:^4.1.0": version: 4.1.0 resolution: "js-yaml@npm:4.1.0" @@ -5179,12 +4459,21 @@ __metadata: languageName: node linkType: hard -"jsesc@npm:^2.5.1": - version: 2.5.2 - resolution: "jsesc@npm:2.5.2" +"jsesc@npm:3.0.2": + version: 3.0.2 + resolution: "jsesc@npm:3.0.2" + bin: + jsesc: bin/jsesc + checksum: 10c0/ef22148f9e793180b14d8a145ee6f9f60f301abf443288117b4b6c53d0ecd58354898dc506ccbb553a5f7827965cd38bc5fb726575aae93c5e8915e2de8290e1 + languageName: node + linkType: hard + +"jsesc@npm:^3.0.2": + version: 3.1.0 + resolution: "jsesc@npm:3.1.0" bin: jsesc: bin/jsesc - checksum: 10c0/dbf59312e0ebf2b4405ef413ec2b25abb5f8f4d9bc5fb8d9f90381622ebca5f2af6a6aa9a8578f65903f9e33990a6dc798edd0ce5586894bf0e9e31803a1de88 + checksum: 10c0/531779df5ec94f47e462da26b4cbf05eb88a83d9f08aac2ba04206508fc598527a153d08bd462bae82fc78b3eaa1a908e1a4a79f886e9238641c4cdefaf118b1 languageName: node linkType: hard @@ -5202,6 +4491,13 @@ __metadata: languageName: node linkType: hard +"json-parse-even-better-errors@npm:^3.0.0": + version: 3.0.2 + resolution: "json-parse-even-better-errors@npm:3.0.2" + checksum: 10c0/147f12b005768abe9fab78d2521ce2b7e1381a118413d634a40e6d907d7d10f5e9a05e47141e96d6853af7cc36d2c834d0a014251be48791e037ff2f13d2b94b + languageName: node + linkType: hard + "json-schema-traverse@npm:^0.4.1": version: 0.4.1 resolution: "json-schema-traverse@npm:0.4.1" @@ -5232,15 +4528,16 @@ __metadata: languageName: node linkType: hard -"jsonfile@npm:^4.0.0": - version: 4.0.0 - resolution: "jsonfile@npm:4.0.0" +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" dependencies: graceful-fs: "npm:^4.1.6" + universalify: "npm:^2.0.0" dependenciesMeta: graceful-fs: optional: true - checksum: 10c0/7dc94b628d57a66b71fb1b79510d460d662eb975b5f876d723f81549c2e9cd316d58a2ddf742b2b93a4fa6b17b2accaf1a738a0e2ea114bdfb13a32e5377e480 + checksum: 10c0/4f95b5e8a5622b1e9e8f33c96b7ef3158122f595998114d1e7f03985649ea99cb3cd99ce1ed1831ae94c8c8543ab45ebd044207612f31a56fd08462140e46865 languageName: node linkType: hard @@ -5256,19 +4553,7 @@ __metadata: languageName: node linkType: hard -"junit-report-builder@npm:^1.3.1": - version: 1.3.3 - resolution: "junit-report-builder@npm:1.3.3" - dependencies: - date-format: "npm:0.0.2" - lodash: "npm:^4.17.15" - mkdirp: "npm:^0.5.0" - xmlbuilder: "npm:^10.0.0" - checksum: 10c0/9371df1ebbd9b3782b9a45d75e2768228a2cc0bf30d95a007e9ec0702f2ea7c8b8ee189e7b50838dab36622749ef233b56f5fdabb136a7a62ae0116c0494f9f1 - languageName: node - linkType: hard - -"keyv@npm:^4.5.3, keyv@npm:^4.5.4": +"keyv@npm:^4.5.4": version: 4.5.4 resolution: "keyv@npm:4.5.4" dependencies: @@ -5277,10 +4562,12 @@ __metadata: languageName: node linkType: hard -"kind-of@npm:^1.1.0": - version: 1.1.0 - resolution: "kind-of@npm:1.1.0" - checksum: 10c0/24bded3cda73094d61a3f0780d6a5cac2fc25a898885eaf4f2bb1a8ce497e3eee5f3fa30b11455d35d3e8153f82724f43837524c2c80737211d8dc7c17ffe572 +"keyv@npm:^5.2.3": + version: 5.2.3 + resolution: "keyv@npm:5.2.3" + dependencies: + "@keyv/serialize": "npm:^1.0.2" + checksum: 10c0/76b87dd2c21a4c1c5c05e9ff3b85670beab98f153429aaa9aee544b72b65411a7d80d96c29f3fef3e9dcebb672c8268e7209d6f80beb5da939b4e019722948b4 languageName: node linkType: hard @@ -5291,44 +4578,10 @@ __metadata: languageName: node linkType: hard -"known-css-properties@npm:^0.31.0": - version: 0.31.0 - resolution: "known-css-properties@npm:0.31.0" - checksum: 10c0/8e643cbed32d7733278ba215c43dfc38fc7e77d391f66b81f07228af97d69ce2cebba03a9bc1ac859479e162aea812e258b30f4c93cb7b7adfd0622a141d36da - languageName: node - linkType: hard - -"known-css-properties@npm:^0.34.0": - version: 0.34.0 - resolution: "known-css-properties@npm:0.34.0" - checksum: 10c0/8549969f02b1858554e89faf4548ece37625d0d21b42e8d54fa53184e68e1512ef2531bb15941575ad816361ab7447b598c1b18c1b96ce0a868333d1a68f2e2c - languageName: node - linkType: hard - -"lazystream@npm:^1.0.0": - version: 1.0.1 - resolution: "lazystream@npm:1.0.1" - dependencies: - readable-stream: "npm:^2.0.5" - checksum: 10c0/ea4e509a5226ecfcc303ba6782cc269be8867d372b9bcbd625c88955df1987ea1a20da4643bf9270336415a398d33531ebf0d5f0d393b9283dc7c98bfcbd7b69 - languageName: node - linkType: hard - -"lcid@npm:^2.0.0": - version: 2.0.0 - resolution: "lcid@npm:2.0.0" - dependencies: - invert-kv: "npm:^2.0.0" - checksum: 10c0/53777f5946ee7cfa600ebdd8f18019c110f5ca1fd776e183a1f24e74cd200eb3718e535b2693caf762af1efed0714559192a095c4665e7808fd6d807b9797502 - languageName: node - linkType: hard - -"lead@npm:^1.0.0": - version: 1.0.0 - resolution: "lead@npm:1.0.0" - dependencies: - flush-write-stream: "npm:^1.0.2" - checksum: 10c0/355fa4cce74a62cec9d4dc4520a8a6a3bd0472e88e070208a895aa1d144bd5f35a099e0f0d4938f4bc909b6a40fb64cc389e0ec32cc86471540e7a643ffe0519 +"known-css-properties@npm:^0.35.0": + version: 0.35.0 + resolution: "known-css-properties@npm:0.35.0" + checksum: 10c0/04a4a2859d62670bb25b5b28091a1f03f6f0d3298a5ed3e7476397c5287b98c434f6dd9c004a0c67a53b7f21acc93f83c972e98c122f568d4d0bd21fd2b90fb6 languageName: node linkType: hard @@ -5349,26 +4602,6 @@ __metadata: languageName: node linkType: hard -"linez@npm:^4.1.4": - version: 4.1.4 - resolution: "linez@npm:4.1.4" - dependencies: - buffer-equals: "npm:^1.0.4" - iconv-lite: "npm:^0.4.15" - checksum: 10c0/ce3f5715b20c4e51b2e50e26058f5c0aa49d9be82edc8b2ca662b3ca3cfe4a97d020125686af5f94450094f36e09bbb86f55362d8d5167ddc0329f8bc999cd15 - languageName: node - linkType: hard - -"locate-path@npm:^3.0.0": - version: 3.0.0 - resolution: "locate-path@npm:3.0.0" - dependencies: - p-locate: "npm:^3.0.0" - path-exists: "npm:^3.0.0" - checksum: 10c0/3db394b7829a7fe2f4fbdd25d3c4689b85f003c318c5da4052c7e56eed697da8f1bce5294f685c69ff76e32cba7a33629d94396976f6d05fb7f4c755c5e2ae8b - languageName: node - linkType: hard - "locate-path@npm:^6.0.0": version: 6.0.0 resolution: "locate-path@npm:6.0.0" @@ -5378,13 +4611,6 @@ __metadata: languageName: node linkType: hard -"lodash.get@npm:^4.4.2": - version: 4.4.2 - resolution: "lodash.get@npm:4.4.2" - checksum: 10c0/48f40d471a1654397ed41685495acb31498d5ed696185ac8973daef424a749ca0c7871bf7b665d5c14f5cc479394479e0307e781f61d5573831769593411be6e - languageName: node - linkType: hard - "lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" @@ -5399,14 +4625,14 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.11, lodash@npm:^4.17.15, lodash@npm:^4.17.21": +"lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c languageName: node linkType: hard -"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": +"loose-envify@npm:^1.4.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" dependencies: @@ -5417,30 +4643,10 @@ __metadata: languageName: node linkType: hard -"lowlight@npm:~1.9.0": - version: 1.9.2 - resolution: "lowlight@npm:1.9.2" - dependencies: - fault: "npm:^1.0.2" - highlight.js: "npm:~9.12.0" - checksum: 10c0/e9f5182ff5196905b3ac6ed5f74f92078eb60f17a5dcb08cbdc83aa21903d59416876dafd77995f9e3d7780b390d3df378aed9f9404dfc81fe83237d0fbef952 - languageName: node - linkType: hard - "lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": version: 10.4.3 resolution: "lru-cache@npm:10.4.3" - checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb - languageName: node - linkType: hard - -"lru-cache@npm:^4.0.1, lru-cache@npm:^4.1.5": - version: 4.1.5 - resolution: "lru-cache@npm:4.1.5" - dependencies: - pseudomap: "npm:^1.0.2" - yallist: "npm:^2.1.2" - checksum: 10c0/1ca5306814e5add9ec63556d6fd9b24a4ecdeaef8e9cea52cbf30301e6b88c8d8ddc7cab45b59b56eb763e6c45af911585dc89925a074ab65e1502e3fe8103cf + checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb languageName: node linkType: hard @@ -5453,32 +4659,36 @@ __metadata: languageName: node linkType: hard -"make-fetch-happen@npm:^13.0.0": - version: 13.0.1 - resolution: "make-fetch-happen@npm:13.0.1" +"lru-cache@npm:^7.4.4, lru-cache@npm:^7.5.1": + version: 7.18.3 + resolution: "lru-cache@npm:7.18.3" + checksum: 10c0/b3a452b491433db885beed95041eb104c157ef7794b9c9b4d647be503be91769d11206bb573849a16b4cc0d03cbd15ffd22df7960997788b74c1d399ac7a4fed + languageName: node + linkType: hard + +"make-fetch-happen@npm:^14.0.3": + version: 14.0.3 + resolution: "make-fetch-happen@npm:14.0.3" dependencies: - "@npmcli/agent": "npm:^2.0.0" - cacache: "npm:^18.0.0" + "@npmcli/agent": "npm:^3.0.0" + cacache: "npm:^19.0.1" http-cache-semantics: "npm:^4.1.1" - is-lambda: "npm:^1.0.1" minipass: "npm:^7.0.2" - minipass-fetch: "npm:^3.0.0" + minipass-fetch: "npm:^4.0.0" minipass-flush: "npm:^1.0.5" minipass-pipeline: "npm:^1.2.4" - negotiator: "npm:^0.6.3" - proc-log: "npm:^4.2.0" + negotiator: "npm:^1.0.0" + proc-log: "npm:^5.0.0" promise-retry: "npm:^2.0.1" - ssri: "npm:^10.0.0" - checksum: 10c0/df5f4dbb6d98153b751bccf4dc4cc500de85a96a9331db9805596c46aa9f99d9555983954e6c1266d9f981ae37a9e4647f42b9a4bb5466f867f4012e582c9e7e + ssri: "npm:^12.0.0" + checksum: 10c0/c40efb5e5296e7feb8e37155bde8eb70bc57d731b1f7d90e35a092fde403d7697c56fb49334d92d330d6f1ca29a98142036d6480a12681133a0a1453164cb2f0 languageName: node linkType: hard -"map-age-cleaner@npm:^0.1.1": - version: 0.1.3 - resolution: "map-age-cleaner@npm:0.1.3" - dependencies: - p-defer: "npm:^1.0.0" - checksum: 10c0/7495236c7b0950956c144fd8b4bc6399d4e78072a8840a4232fe1c4faccbb5eb5d842e5c0a56a60afc36d723f315c1c672325ca03c1b328650f7fcc478f385fd +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f languageName: node linkType: hard @@ -5489,31 +4699,24 @@ __metadata: languageName: node linkType: hard -"mdn-data@npm:2.0.30": - version: 2.0.30 - resolution: "mdn-data@npm:2.0.30" - checksum: 10c0/a2c472ea16cee3911ae742593715aa4c634eb3d4b9f1e6ada0902aa90df13dcbb7285d19435f3ff213ebaa3b2e0c0265c1eb0e3fb278fda7f8919f046a410cd9 +"mdn-data@npm:2.12.2": + version: 2.12.2 + resolution: "mdn-data@npm:2.12.2" + checksum: 10c0/b22443b71d70f72ccc3c6ba1608035431a8fc18c3c8fc53523f06d20e05c2ac10f9b53092759a2ca85cf02f0d37036f310b581ce03e7b99ac74d388ef8152ade languageName: node linkType: hard -"mem@npm:^3.0.1": - version: 3.0.1 - resolution: "mem@npm:3.0.1" - dependencies: - mimic-fn: "npm:^1.0.0" - p-is-promise: "npm:^1.1.0" - checksum: 10c0/5fdd03a26dbf8f1b8f080771ba442dd220ff6e0f25d652b2dbeeb1318f077c22ee4c02aefca9cafdfc544468ea7e6d153fea2ccf85e59761f9f185305d87c734 +"mdn-data@npm:^2.14.0": + version: 2.15.0 + resolution: "mdn-data@npm:2.15.0" + checksum: 10c0/8a0c83198b013d43c2c43bd19c38d44e397b3fe097d269fa3c093d8c112acf12d0be4d892ba50a4802cccb91dd4f720218a66e675150ea2cc3d8aa0d32247e76 languageName: node linkType: hard -"mem@npm:^4.0.0": - version: 4.3.0 - resolution: "mem@npm:4.3.0" - dependencies: - map-age-cleaner: "npm:^0.1.1" - mimic-fn: "npm:^2.0.0" - p-is-promise: "npm:^2.0.0" - checksum: 10c0/fc74e16d877322aafe869fe92a5c3109b1683195f4ef507920322a2fc8cd9998f3299f716c9853e10304c06a528fd9b763de24bdd7ce0b448155f05c9fad8612 +"media-typer@npm:0.3.0": + version: 0.3.0 + resolution: "media-typer@npm:0.3.0" + checksum: 10c0/d160f31246907e79fed398470285f21bafb45a62869dc469b1c8877f3f064f5eabc4bcc122f9479b8b605bc5c76187d7871cf84c4ee3ecd3e487da1993279928 languageName: node linkType: hard @@ -5524,6 +4727,13 @@ __metadata: languageName: node linkType: hard +"merge-descriptors@npm:1.0.3": + version: 1.0.3 + resolution: "merge-descriptors@npm:1.0.3" + checksum: 10c0/866b7094afd9293b5ea5dcd82d71f80e51514bed33b4c4e9f516795dc366612a4cbb4dc94356e943a8a6914889a914530badff27f397191b9b75cda20b6bae93 + languageName: node + linkType: hard + "merge2@npm:^1.3.0, merge2@npm:^1.4.1": version: 1.4.1 resolution: "merge2@npm:1.4.1" @@ -5531,13 +4741,20 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^4.0.4, micromatch@npm:^4.0.7": - version: 4.0.7 - resolution: "micromatch@npm:4.0.7" +"methods@npm:~1.1.2": + version: 1.1.2 + resolution: "methods@npm:1.1.2" + checksum: 10c0/bdf7cc72ff0a33e3eede03708c08983c4d7a173f91348b4b1e4f47d4cdbf734433ad971e7d1e8c77247d9e5cd8adb81ea4c67b0a2db526b758b2233d7814b8b2 + languageName: node + linkType: hard + +"micromatch@npm:^4.0.8": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" dependencies: braces: "npm:^3.0.3" picomatch: "npm:^2.3.1" - checksum: 10c0/58fa99bc5265edec206e9163a1d2cec5fabc46a5b473c45f4a700adce88c2520456ae35f2b301e4410fb3afb27e9521fb2813f6fc96be0a48a89430e0916a772 + checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 languageName: node linkType: hard @@ -5548,7 +4765,14 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12": +"mime-db@npm:>= 1.43.0 < 2": + version: 1.53.0 + resolution: "mime-db@npm:1.53.0" + checksum: 10c0/1dcc37ba8ed5d1c179f5c6f0837e8db19371d5f2ea3690c3c2f3fa8c3858f976851d3460b172b4dee78ebd606762cbb407aa398545fbacd539e519f858cd7bf4 + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -5557,21 +4781,16 @@ __metadata: languageName: node linkType: hard -"mimic-fn@npm:^1.0.0": - version: 1.2.0 - resolution: "mimic-fn@npm:1.2.0" - checksum: 10c0/ad55214aec6094c0af4c0beec1a13787556f8116ed88807cf3f05828500f21f93a9482326bcd5a077ae91e3e8795b4e76b5b4c8bb12237ff0e4043a365516cba - languageName: node - linkType: hard - -"mimic-fn@npm:^2.0.0": - version: 2.1.0 - resolution: "mimic-fn@npm:2.1.0" - checksum: 10c0/b26f5479d7ec6cc2bce275a08f146cf78f5e7b661b18114e2506dd91ec7ec47e7a25bf4360e5438094db0560bcc868079fb3b1fb3892b833c1ecbf63f80c95a4 +"mime@npm:1.6.0": + version: 1.6.0 + resolution: "mime@npm:1.6.0" + bin: + mime: cli.js + checksum: 10c0/b92cd0adc44888c7135a185bfd0dddc42c32606401c72896a842ae15da71eb88858f17669af41e498b463cd7eb998f7b48939a25b08374c7924a9c8a6f8a81b0 languageName: node linkType: hard -"minimatch@npm:^3.0.0, minimatch@npm:^3.0.3, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": +"minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -5580,7 +4799,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^9.0.3, minimatch@npm:^9.0.4": +"minimatch@npm:^9.0.4": version: 9.0.5 resolution: "minimatch@npm:9.0.5" dependencies: @@ -5589,13 +4808,6 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.2.6": - version: 1.2.8 - resolution: "minimist@npm:1.2.8" - checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 - languageName: node - linkType: hard - "minipass-collect@npm:^2.0.1": version: 2.0.1 resolution: "minipass-collect@npm:2.0.1" @@ -5605,18 +4817,18 @@ __metadata: languageName: node linkType: hard -"minipass-fetch@npm:^3.0.0": - version: 3.0.5 - resolution: "minipass-fetch@npm:3.0.5" +"minipass-fetch@npm:^4.0.0": + version: 4.0.0 + resolution: "minipass-fetch@npm:4.0.0" dependencies: encoding: "npm:^0.1.13" minipass: "npm:^7.0.3" minipass-sized: "npm:^1.0.3" - minizlib: "npm:^2.1.2" + minizlib: "npm:^3.0.1" dependenciesMeta: encoding: optional: true - checksum: 10c0/9d702d57f556274286fdd97e406fc38a2f5c8d15e158b498d7393b1105974b21249289ec571fa2b51e038a4872bfc82710111cf75fae98c662f3d6f95e72152b + checksum: 10c0/7fa30ce7c373fb6f94c086b374fff1589fd7e78451855d2d06c2e2d9df936d131e73e952163063016592ed3081444bd8d1ea608533313b0149156ce23311da4b languageName: node linkType: hard @@ -5656,47 +4868,42 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^5.0.0": - version: 5.0.0 - resolution: "minipass@npm:5.0.0" - checksum: 10c0/a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462 - languageName: node - linkType: hard - -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": version: 7.1.2 resolution: "minipass@npm:7.1.2" checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 languageName: node linkType: hard -"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": - version: 2.1.2 - resolution: "minizlib@npm:2.1.2" +"minizlib@npm:^3.0.1": + version: 3.0.1 + resolution: "minizlib@npm:3.0.1" dependencies: - minipass: "npm:^3.0.0" - yallist: "npm:^4.0.0" - checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 + minipass: "npm:^7.0.4" + rimraf: "npm:^5.0.5" + checksum: 10c0/82f8bf70da8af656909a8ee299d7ed3b3372636749d29e105f97f20e88971be31f5ed7642f2e898f00283b68b701cc01307401cdc209b0efc5dd3818220e5093 languageName: node linkType: hard -"mkdirp@npm:^0.5.0": - version: 0.5.6 - resolution: "mkdirp@npm:0.5.6" - dependencies: - minimist: "npm:^1.2.6" +"mkdirp@npm:^3.0.1": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" bin: - mkdirp: bin/cmd.js - checksum: 10c0/e2e2be789218807b58abced04e7b49851d9e46e88a2f9539242cc8a92c9b5c3a0b9bab360bd3014e02a140fc4fbc58e31176c408b493f8a2a6f4986bd7527b01 + mkdirp: dist/cjs/src/bin.js + checksum: 10c0/9f2b975e9246351f5e3a40dcfac99fcd0baa31fbfab615fe059fb11e51f10e4803c63de1f384c54d656e4db31d000e4767e9ef076a22e12a641357602e31d57d languageName: node linkType: hard -"mkdirp@npm:^1.0.3": - version: 1.0.4 - resolution: "mkdirp@npm:1.0.4" - bin: - mkdirp: bin/cmd.js - checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf +"morgan@npm:^1.10.0": + version: 1.10.0 + resolution: "morgan@npm:1.10.0" + dependencies: + basic-auth: "npm:~2.0.1" + debug: "npm:2.6.9" + depd: "npm:~2.0.0" + on-finished: "npm:~2.3.0" + on-headers: "npm:~1.0.2" + checksum: 10c0/684db061daca28f8d8e3bfd50bd0d21734401b46f74ea76f6df7785d45698fcd98f6d3b81a6bad59f8288c429183afba728c428e8f66d2e8c30fd277af3b5b3a languageName: node linkType: hard @@ -5707,38 +4914,19 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.2": - version: 2.1.2 - resolution: "ms@npm:2.1.2" - checksum: 10c0/a437714e2f90dbf881b5191d35a6db792efbca5badf112f87b9e1c712aace4b4b9b742dd6537f3edf90fd6f684de897cec230abde57e87883766712ddda297cc - languageName: node - linkType: hard - -"ms@npm:^2.1.3": +"ms@npm:2.1.3, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 languageName: node linkType: hard -"multimatch@npm:^2.0.0": - version: 2.1.0 - resolution: "multimatch@npm:2.1.0" - dependencies: - array-differ: "npm:^1.0.0" - array-union: "npm:^1.0.1" - arrify: "npm:^1.0.0" - minimatch: "npm:^3.0.0" - checksum: 10c0/acfdecb0bb259009abb4c484f2107c99974d7c4fb590fb2e4e170456ca4ced322335883e26ef874afaa6a6189cc9325a3c68498371644a3b6776f08a6820fbb1 - languageName: node - linkType: hard - -"nanoid@npm:^3.3.7": - version: 3.3.7 - resolution: "nanoid@npm:3.3.7" +"nanoid@npm:^3.3.8": + version: 3.3.8 + resolution: "nanoid@npm:3.3.8" bin: nanoid: bin/nanoid.cjs - checksum: 10c0/e3fb661aa083454f40500473bb69eedb85dc160e763150b9a2c567c7e9ff560ce028a9f833123b618a6ea742e311138b591910e795614a629029e86e180660f3 + checksum: 10c0/4b1bb29f6cfebf3be3bc4ad1f1296fb0a10a3043a79f34fbffe75d1621b4318319211cd420549459018ea3592f0d2f159247a6f874911d6d26eaaadda2478120 languageName: node linkType: hard @@ -5749,103 +4937,146 @@ __metadata: languageName: node linkType: hard -"negotiator@npm:^0.6.3": +"negotiator@npm:0.6.3": version: 0.6.3 resolution: "negotiator@npm:0.6.3" checksum: 10c0/3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2 languageName: node linkType: hard -"nice-try@npm:^1.0.4": - version: 1.0.5 - resolution: "nice-try@npm:1.0.5" - checksum: 10c0/95568c1b73e1d0d4069a3e3061a2102d854513d37bcfda73300015b7ba4868d3b27c198d1dbbd8ebdef4112fc2ed9e895d4a0f2e1cce0bd334f2a1346dc9205f +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b + languageName: node + linkType: hard + +"negotiator@npm:~0.6.4": + version: 0.6.4 + resolution: "negotiator@npm:0.6.4" + checksum: 10c0/3e677139c7fb7628a6f36335bf11a885a62c21d5390204590a1a214a5631fcbe5ea74ef6a610b60afe84b4d975cbe0566a23f20ee17c77c73e74b80032108dea + languageName: node + linkType: hard + +"node-domexception@npm:^1.0.0": + version: 1.0.0 + resolution: "node-domexception@npm:1.0.0" + checksum: 10c0/5e5d63cda29856402df9472335af4bb13875e1927ad3be861dc5ebde38917aecbf9ae337923777af52a48c426b70148815e890a5d72760f1b4d758cc671b1a2b + languageName: node + linkType: hard + +"node-fetch@npm:^3.3.2": + version: 3.3.2 + resolution: "node-fetch@npm:3.3.2" + dependencies: + data-uri-to-buffer: "npm:^4.0.0" + fetch-blob: "npm:^3.1.4" + formdata-polyfill: "npm:^4.0.10" + checksum: 10c0/f3d5e56190562221398c9f5750198b34cf6113aa304e34ee97c94fd300ec578b25b2c2906edba922050fce983338fde0d5d34fcb0fc3336ade5bd0e429ad7538 languageName: node linkType: hard "node-gyp@npm:latest": - version: 10.2.0 - resolution: "node-gyp@npm:10.2.0" + version: 11.0.0 + resolution: "node-gyp@npm:11.0.0" dependencies: env-paths: "npm:^2.2.0" exponential-backoff: "npm:^3.1.1" glob: "npm:^10.3.10" graceful-fs: "npm:^4.2.6" - make-fetch-happen: "npm:^13.0.0" - nopt: "npm:^7.0.0" - proc-log: "npm:^4.1.0" + make-fetch-happen: "npm:^14.0.3" + nopt: "npm:^8.0.0" + proc-log: "npm:^5.0.0" semver: "npm:^7.3.5" - tar: "npm:^6.2.1" - which: "npm:^4.0.0" + tar: "npm:^7.4.3" + which: "npm:^5.0.0" bin: node-gyp: bin/node-gyp.js - checksum: 10c0/00630d67dbd09a45aee0a5d55c05e3916ca9e6d427ee4f7bc392d2d3dc5fad7449b21fc098dd38260a53d9dcc9c879b36704a1994235d4707e7271af7e9a835b - languageName: node - linkType: hard - -"node-releases@npm:^2.0.14": - version: 2.0.14 - resolution: "node-releases@npm:2.0.14" - checksum: 10c0/199fc93773ae70ec9969bc6d5ac5b2bbd6eb986ed1907d751f411fef3ede0e4bfdb45ceb43711f8078bea237b6036db8b1bf208f6ff2b70c7d615afd157f3ab9 + checksum: 10c0/a3b885bbee2d271f1def32ba2e30ffcf4562a3db33af06b8b365e053153e2dd2051b9945783c3c8e852d26a0f20f65b251c7e83361623383a99635c0280ee573 languageName: node linkType: hard -"node-releases@npm:^2.0.18": - version: 2.0.18 - resolution: "node-releases@npm:2.0.18" - checksum: 10c0/786ac9db9d7226339e1dc84bbb42007cb054a346bd9257e6aa154d294f01bc6a6cddb1348fa099f079be6580acbb470e3c048effd5f719325abd0179e566fd27 +"node-releases@npm:^2.0.19": + version: 2.0.19 + resolution: "node-releases@npm:2.0.19" + checksum: 10c0/52a0dbd25ccf545892670d1551690fe0facb6a471e15f2cfa1b20142a5b255b3aa254af5f59d6ecb69c2bec7390bc643c43aa63b13bf5e64b6075952e716b1aa languageName: node linkType: hard -"nopt@npm:^7.0.0": - version: 7.2.1 - resolution: "nopt@npm:7.2.1" +"nopt@npm:^8.0.0": + version: 8.1.0 + resolution: "nopt@npm:8.1.0" dependencies: - abbrev: "npm:^2.0.0" + abbrev: "npm:^3.0.0" bin: nopt: bin/nopt.js - checksum: 10c0/a069c7c736767121242037a22a788863accfa932ab285a1eb569eb8cd534b09d17206f68c37f096ae785647435e0c5a5a0a67b42ec743e481a455e5ae6a6df81 + checksum: 10c0/62e9ea70c7a3eb91d162d2c706b6606c041e4e7b547cbbb48f8b3695af457dd6479904d7ace600856bf923dd8d1ed0696f06195c8c20f02ac87c1da0e1d315ef languageName: node linkType: hard -"normalize-path@npm:^2.1.1": - version: 2.1.1 - resolution: "normalize-path@npm:2.1.1" +"normalize-package-data@npm:^5.0.0": + version: 5.0.0 + resolution: "normalize-package-data@npm:5.0.0" dependencies: - remove-trailing-separator: "npm:^1.0.1" - checksum: 10c0/db814326ff88057437233361b4c7e9cac7b54815b051b57f2d341ce89b1d8ec8cbd43e7fa95d7652b3b69ea8fcc294b89b8530d556a84d1bdace94229e1e9a8b + hosted-git-info: "npm:^6.0.0" + is-core-module: "npm:^2.8.1" + semver: "npm:^7.3.5" + validate-npm-package-license: "npm:^3.0.4" + checksum: 10c0/705fe66279edad2f93f6e504d5dc37984e404361a3df921a76ab61447eb285132d20ff261cc0bee9566b8ce895d75fcfec913417170add267e2873429fe38392 languageName: node linkType: hard -"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": +"normalize-path@npm:^3.0.0": version: 3.0.0 resolution: "normalize-path@npm:3.0.0" checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 languageName: node linkType: hard -"now-and-later@npm:^2.0.0": - version: 2.0.1 - resolution: "now-and-later@npm:2.0.1" +"normalize-range@npm:^0.1.2": + version: 0.1.2 + resolution: "normalize-range@npm:0.1.2" + checksum: 10c0/bf39b73a63e0a42ad1a48c2bd1bda5a07ede64a7e2567307a407674e595bcff0fa0d57e8e5f1e7fa5e91000797c7615e13613227aaaa4d6d6e87f5bd5cc95de6 + languageName: node + linkType: hard + +"npm-install-checks@npm:^6.0.0": + version: 6.3.0 + resolution: "npm-install-checks@npm:6.3.0" dependencies: - once: "npm:^1.3.2" - checksum: 10c0/a3b123b6a7378f300cf45b381efb69b7d085a4151dceeca8442e7e08aa50f6e44d15af114261dca201e19be85f9e25dd61ad74aab62ad3675210bfc60f1f19f5 + semver: "npm:^7.1.1" + checksum: 10c0/b046ef1de9b40f5d3a9831ce198e1770140a1c3f253dae22eb7b06045191ef79f18f1dcc15a945c919b3c161426861a28050abd321bf439190185794783b6452 languageName: node linkType: hard -"npm-run-path@npm:^2.0.0": - version: 2.0.2 - resolution: "npm-run-path@npm:2.0.2" +"npm-normalize-package-bin@npm:^3.0.0": + version: 3.0.1 + resolution: "npm-normalize-package-bin@npm:3.0.1" + checksum: 10c0/f1831a7f12622840e1375c785c3dab7b1d82dd521211c17ee5e9610cd1a34d8b232d3fdeebf50c170eddcb321d2c644bf73dbe35545da7d588c6b3fa488db0a5 + languageName: node + linkType: hard + +"npm-package-arg@npm:^10.0.0": + version: 10.1.0 + resolution: "npm-package-arg@npm:10.1.0" dependencies: - path-key: "npm:^2.0.0" - checksum: 10c0/95549a477886f48346568c97b08c4fda9cdbf7ce8a4fbc2213f36896d0d19249e32d68d7451bdcbca8041b5fba04a6b2c4a618beaf19849505c05b700740f1de + hosted-git-info: "npm:^6.0.0" + proc-log: "npm:^3.0.0" + semver: "npm:^7.3.5" + validate-npm-package-name: "npm:^5.0.0" + checksum: 10c0/ab56ed775b48e22755c324536336e3749b6a17763602bc0fb0d7e8b298100c2de8b5e2fb1d4fb3f451e9e076707a27096782e9b3a8da0c5b7de296be184b5a90 languageName: node linkType: hard -"number-is-nan@npm:^1.0.0": - version: 1.0.1 - resolution: "number-is-nan@npm:1.0.1" - checksum: 10c0/cb97149006acc5cd512c13c1838223abdf202e76ddfa059c5e8e7507aff2c3a78cd19057516885a2f6f5b576543dc4f7b6f3c997cc7df53ae26c260855466df5 +"npm-pick-manifest@npm:^8.0.0": + version: 8.0.2 + resolution: "npm-pick-manifest@npm:8.0.2" + dependencies: + npm-install-checks: "npm:^6.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + npm-package-arg: "npm:^10.0.0" + semver: "npm:^7.3.5" + checksum: 10c0/9e58f7732203dbfdd7a338d6fd691c564017fd2ebfaa0ea39528a21db0c99f26370c759d99a0c5684307b79dbf76fa20e387010358a8651e273dc89930e922a0 languageName: node linkType: hard @@ -5856,10 +5087,10 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.13.1": - version: 1.13.2 - resolution: "object-inspect@npm:1.13.2" - checksum: 10c0/b97835b4c91ec37b5fd71add84f21c3f1047d1d155d00c0fcd6699516c256d4fcc6ff17a1aced873197fe447f91a3964178fd2a67a1ee2120cdaf60e81a050b4 +"object-inspect@npm:^1.13.3": + version: 1.13.3 + resolution: "object-inspect@npm:1.13.3" + checksum: 10c0/cc3f15213406be89ffdc54b525e115156086796a515410a8d390215915db9f23c8eab485a06f1297402f440a33715fe8f71a528c1dcbad6e1a3bcaf5a46921d4 languageName: node linkType: hard @@ -5870,15 +5101,17 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.0.4, object.assign@npm:^4.1.4, object.assign@npm:^4.1.5": - version: 4.1.5 - resolution: "object.assign@npm:4.1.5" +"object.assign@npm:^4.1.4, object.assign@npm:^4.1.7": + version: 4.1.7 + resolution: "object.assign@npm:4.1.7" dependencies: - call-bind: "npm:^1.0.5" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" define-properties: "npm:^1.2.1" - has-symbols: "npm:^1.0.3" + es-object-atoms: "npm:^1.0.0" + has-symbols: "npm:^1.1.0" object-keys: "npm:^1.1.1" - checksum: 10c0/60108e1fa2706f22554a4648299b0955236c62b3685c52abf4988d14fffb0e7731e00aa8c6448397e3eb63d087dcc124a9f21e1980f36d0b2667f3c18bacd469 + checksum: 10c0/3b2732bd860567ea2579d1567525168de925a8d852638612846bd8082b3a1602b7b89b67b09913cbb5b9bd6e95923b2ae73580baa9d99cb4e990564e8cbf5ddc languageName: node linkType: hard @@ -5905,38 +5138,44 @@ __metadata: languageName: node linkType: hard -"object.hasown@npm:^1.1.4": - version: 1.1.4 - resolution: "object.hasown@npm:1.1.4" +"object.values@npm:^1.1.6, object.values@npm:^1.2.1": + version: 1.2.1 + resolution: "object.values@npm:1.2.1" dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" es-object-atoms: "npm:^1.0.0" - checksum: 10c0/f23187b08d874ef1aea060118c8259eb7f99f93c15a50771d710569534119062b90e087b92952b2d0fb1bb8914d61fb0b43c57fb06f622aaad538fe6868ab987 + checksum: 10c0/3c47814fdc64842ae3d5a74bc9d06bdd8d21563c04d9939bf6716a9c00596a4ebc342552f8934013d1ec991c74e3671b26710a0c51815f0b603795605ab6b2c9 languageName: node linkType: hard -"object.omit@npm:^3.0.0": - version: 3.0.0 - resolution: "object.omit@npm:3.0.0" +"on-finished@npm:2.4.1": + version: 2.4.1 + resolution: "on-finished@npm:2.4.1" dependencies: - is-extendable: "npm:^1.0.0" - checksum: 10c0/8e16a3087580b67ca7532539930dc5cf2eb1b12112cfdfc539412db8d2e5d5ba541ea9ffc9df936fc84cf362832806b8a4091d064610728614193eee8f26c473 + ee-first: "npm:1.1.1" + checksum: 10c0/46fb11b9063782f2d9968863d9cbba33d77aa13c17f895f56129c274318b86500b22af3a160fe9995aa41317efcd22941b6eba747f718ced08d9a73afdb087b4 languageName: node linkType: hard -"object.values@npm:^1.1.6, object.values@npm:^1.2.0": - version: 1.2.0 - resolution: "object.values@npm:1.2.0" +"on-finished@npm:~2.3.0": + version: 2.3.0 + resolution: "on-finished@npm:2.3.0" dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/15809dc40fd6c5529501324fec5ff08570b7d70fb5ebbe8e2b3901afec35cf2b3dc484d1210c6c642cd3e7e0a5e18dd1d6850115337fef46bdae14ab0cb18ac3 + ee-first: "npm:1.1.1" + checksum: 10c0/c904f9e518b11941eb60279a3cbfaf1289bd0001f600a950255b1dede9fe3df8cd74f38483550b3bb9485165166acb5db500c3b4c4337aec2815c88c96fcc2ea + languageName: node + linkType: hard + +"on-headers@npm:~1.0.2": + version: 1.0.2 + resolution: "on-headers@npm:1.0.2" + checksum: 10c0/f649e65c197bf31505a4c0444875db0258e198292f34b884d73c2f751e91792ef96bb5cf89aa0f4fecc2e4dc662461dda606b1274b0e564f539cae5d2f5fc32f languageName: node linkType: hard -"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.3.2, once@npm:^1.4.0": +"once@npm:^1.3.1, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" dependencies: @@ -5959,60 +5198,14 @@ __metadata: languageName: node linkType: hard -"ordered-read-streams@npm:^1.0.0": +"own-keys@npm:^1.0.1": version: 1.0.1 - resolution: "ordered-read-streams@npm:1.0.1" - dependencies: - readable-stream: "npm:^2.0.1" - checksum: 10c0/6243667adbcea69527cfebd1e483f0d06109dea578e4bbd6f185acfd1c3cc5f059b887fe600ba3084498924b9566405c0595819e02caf9ce88bc604e90b652b8 - languageName: node - linkType: hard - -"os-locale@npm:^3.0.0, os-locale@npm:^3.0.1": - version: 3.1.0 - resolution: "os-locale@npm:3.1.0" - dependencies: - execa: "npm:^1.0.0" - lcid: "npm:^2.0.0" - mem: "npm:^4.0.0" - checksum: 10c0/db017958884d111af9060613f55aa8a41d67d7210a96cd8e20ac2bc93daed945f6d6dbb0e2085355fe954258fe42e82bfc180c5b6bdbc90151d135d435dde2da - languageName: node - linkType: hard - -"p-defer@npm:^1.0.0": - version: 1.0.0 - resolution: "p-defer@npm:1.0.0" - checksum: 10c0/ed603c3790e74b061ac2cb07eb6e65802cf58dce0fbee646c113a7b71edb711101329ad38f99e462bd2e343a74f6e9366b496a35f1d766c187084d3109900487 - languageName: node - linkType: hard - -"p-finally@npm:^1.0.0": - version: 1.0.0 - resolution: "p-finally@npm:1.0.0" - checksum: 10c0/6b8552339a71fe7bd424d01d8451eea92d379a711fc62f6b2fe64cad8a472c7259a236c9a22b4733abca0b5666ad503cb497792a0478c5af31ded793d00937e7 - languageName: node - linkType: hard - -"p-is-promise@npm:^1.1.0": - version: 1.1.0 - resolution: "p-is-promise@npm:1.1.0" - checksum: 10c0/b3f945a18e3e16a7a5fda131250f7a96f59ceb6fdceee87576044790b99b97a5ab5d4a9ae878d2746f762b99efc0a8c1e3b21b5269e3537fbfdb443a38eeb9bf - languageName: node - linkType: hard - -"p-is-promise@npm:^2.0.0": - version: 2.1.0 - resolution: "p-is-promise@npm:2.1.0" - checksum: 10c0/115c50960739c26e9b3e8a3bd453341a3b02a2e5ba41109b904ff53deb0b941ef81b196e106dc11f71698f591b23055c82d81188b7b670e9d5e28bc544b0674d - languageName: node - linkType: hard - -"p-limit@npm:^2.0.0": - version: 2.3.0 - resolution: "p-limit@npm:2.3.0" + resolution: "own-keys@npm:1.0.1" dependencies: - p-try: "npm:^2.0.0" - checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 + get-intrinsic: "npm:^1.2.6" + object-keys: "npm:^1.1.1" + safe-push-apply: "npm:^1.0.0" + checksum: 10c0/6dfeb3455bff92ec3f16a982d4e3e65676345f6902d9f5ded1d8265a6318d0200ce461956d6d1c70053c7fe9f9fe65e552faac03f8140d37ef0fdd108e67013a languageName: node linkType: hard @@ -6025,15 +5218,6 @@ __metadata: languageName: node linkType: hard -"p-locate@npm:^3.0.0": - version: 3.0.0 - resolution: "p-locate@npm:3.0.0" - dependencies: - p-limit: "npm:^2.0.0" - checksum: 10c0/7b7f06f718f19e989ce6280ed4396fb3c34dabdee0df948376483032f9d5ec22fdf7077ec942143a75827bb85b11da72016497fc10dac1106c837ed593969ee8 - languageName: node - linkType: hard - "p-locate@npm:^5.0.0": version: 5.0.0 resolution: "p-locate@npm:5.0.0" @@ -6043,19 +5227,10 @@ __metadata: languageName: node linkType: hard -"p-map@npm:^4.0.0": - version: 4.0.0 - resolution: "p-map@npm:4.0.0" - dependencies: - aggregate-error: "npm:^3.0.0" - checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 - languageName: node - linkType: hard - -"p-try@npm:^2.0.0": - version: 2.2.0 - resolution: "p-try@npm:2.2.0" - checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f +"p-map@npm:^7.0.2": + version: 7.0.3 + resolution: "p-map@npm:7.0.3" + checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c languageName: node linkType: hard @@ -6066,6 +5241,13 @@ __metadata: languageName: node linkType: hard +"pako@npm:~0.2.0": + version: 0.2.9 + resolution: "pako@npm:0.2.9" + checksum: 10c0/79c1806ebcf325b60ae599e4d7227c2e346d7b829dc20f5cf24cef07c934079dc3a61c5b3c8278a2f7a190c4a613e343ea11e5302dbe252efd11712df4b6b041 + languageName: node + linkType: hard + "parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" @@ -6087,24 +5269,10 @@ __metadata: languageName: node linkType: hard -"parse-node-version@npm:^1.0.0": - version: 1.0.1 - resolution: "parse-node-version@npm:1.0.1" - checksum: 10c0/999cd3d7da1425c2e182dce82b226c6dc842562d3ed79ec47f5c719c32a7f6c1a5352495b894fc25df164be7f2ede4224758255da9902ddef81f2b77ba46bb2c - languageName: node - linkType: hard - -"path-dirname@npm:^1.0.0": - version: 1.0.2 - resolution: "path-dirname@npm:1.0.2" - checksum: 10c0/71e59be2bada7c91f62b976245fd421b7cb01fde3207fe53a82d8880621ad04fd8b434e628c9cf4e796259fc168a107d77cd56837725267c5b2c58cefe2c4e1b - languageName: node - linkType: hard - -"path-exists@npm:^3.0.0": - version: 3.0.0 - resolution: "path-exists@npm:3.0.0" - checksum: 10c0/17d6a5664bc0a11d48e2b2127d28a0e58822c6740bde30403f08013da599182289c56518bec89407e3f31d3c2b6b296a4220bc3f867f0911fee6952208b04167 +"parseurl@npm:~1.3.3": + version: 1.3.3 + resolution: "parseurl@npm:1.3.3" + checksum: 10c0/90dd4760d6f6174adb9f20cf0965ae12e23879b5f5464f38e92fce8073354341e4b3b76fa3d878351efe7d01e617121955284cfd002ab087fba1a0726ec0b4f5 languageName: node linkType: hard @@ -6115,20 +5283,6 @@ __metadata: languageName: node linkType: hard -"path-is-absolute@npm:^1.0.0": - version: 1.0.1 - resolution: "path-is-absolute@npm:1.0.1" - checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 - languageName: node - linkType: hard - -"path-key@npm:^2.0.0, path-key@npm:^2.0.1": - version: 2.0.1 - resolution: "path-key@npm:2.0.1" - checksum: 10c0/dd2044f029a8e58ac31d2bf34c34b93c3095c1481942960e84dd2faa95bbb71b9b762a106aead0646695330936414b31ca0bd862bf488a937ad17c8c5d73b32b - languageName: node - linkType: hard - "path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" @@ -6153,6 +5307,13 @@ __metadata: languageName: node linkType: hard +"path-to-regexp@npm:0.1.12": + version: 0.1.12 + resolution: "path-to-regexp@npm:0.1.12" + checksum: 10c0/1c6ff10ca169b773f3bba943bbc6a07182e332464704572962d277b900aeee81ac6aa5d060ff9e01149636c30b1f63af6e69dd7786ba6e0ddb39d4dee1f0645b + languageName: node + linkType: hard + "path-type@npm:^4.0.0": version: 4.0.0 resolution: "path-type@npm:4.0.0" @@ -6160,42 +5321,35 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1": - version: 1.0.1 - resolution: "picocolors@npm:1.0.1" - checksum: 10c0/c63cdad2bf812ef0d66c8db29583802355d4ca67b9285d846f390cc15c2f6ccb94e8cb7eb6a6e97fc5990a6d3ad4ae42d86c84d3146e667c739a4234ed50d400 +"pathe@npm:^1.1.2": + version: 1.1.2 + resolution: "pathe@npm:1.1.2" + checksum: 10c0/64ee0a4e587fb0f208d9777a6c56e4f9050039268faaaaecd50e959ef01bf847b7872785c36483fa5cdcdbdfdb31fef2ff222684d4fc21c330ab60395c681897 languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": - version: 2.3.1 - resolution: "picomatch@npm:2.3.1" - checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be +"peek-stream@npm:^1.1.0": + version: 1.1.3 + resolution: "peek-stream@npm:1.1.3" + dependencies: + buffer-from: "npm:^1.0.0" + duplexify: "npm:^3.5.0" + through2: "npm:^2.0.3" + checksum: 10c0/3c35d1951b8640036f93b1b5628a90f849e49ca4f2e6aba393ff4978413931d9c491c83f71a92f878d5ea4c670af0bba04dfcfb79b310ead22601db7c1420e36 languageName: node linkType: hard -"plugin-error@npm:^0.1.2": - version: 0.1.2 - resolution: "plugin-error@npm:0.1.2" - dependencies: - ansi-cyan: "npm:^0.1.1" - ansi-red: "npm:^0.1.1" - arr-diff: "npm:^1.0.1" - arr-union: "npm:^2.0.1" - extend-shallow: "npm:^1.1.2" - checksum: 10c0/bc08395a4ae874c4d3215b827be8e86c5535b4c834a1025ebbdea5b33bdfd82ac6db600f15df5a22eefc0f2adfce0da388b4c49fa4543af64220fbf1b6cd381a +"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1, picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 languageName: node linkType: hard -"plugin-error@npm:^1.0.1": - version: 1.0.1 - resolution: "plugin-error@npm:1.0.1" - dependencies: - ansi-colors: "npm:^1.0.1" - arr-diff: "npm:^4.0.0" - arr-union: "npm:^3.1.0" - extend-shallow: "npm:^3.0.2" - checksum: 10c0/9b0ef44f8d2749013dfeb4a86c8082f2f277bf72e0c694c30dd504d0b329f321db91fe9d9cb0f7e8579f7ffa4260b7792827bc5ef4f87d6bcc0fc691de3d91a1 +"picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be languageName: node linkType: hard @@ -6213,38 +5367,38 @@ __metadata: languageName: node linkType: hard -"postcss-resolve-nested-selector@npm:^0.1.1": - version: 0.1.1 - resolution: "postcss-resolve-nested-selector@npm:0.1.1" - checksum: 10c0/e86412064c5d805fbee20f4e851395304102addd7d583b6a991adaa5616e8d5f45549864eb6292d4cf15075cd261c289f069acdf6a2556689fc44fe72bcb306e +"postcss-resolve-nested-selector@npm:^0.1.6": + version: 0.1.6 + resolution: "postcss-resolve-nested-selector@npm:0.1.6" + checksum: 10c0/84213a2bccce481b1569c595a3c547b25c6ef1cca839fbd6c82c12ab407559966e968613c7454b573aa54f38cfd7e900c1fd603f0efc9f51939ab9f93f115455 languageName: node linkType: hard -"postcss-safe-parser@npm:^7.0.0": - version: 7.0.0 - resolution: "postcss-safe-parser@npm:7.0.0" +"postcss-safe-parser@npm:^7.0.1": + version: 7.0.1 + resolution: "postcss-safe-parser@npm:7.0.1" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/4217afd8ce2809e959dc365e4675f499303cc6b91f94db06c8164422822db2d3b3124df701ee2234db4127ad05619b016bfb9c2bccae9bf9cf898a396f1632c9 - languageName: node - linkType: hard - -"postcss-scss@npm:^4.0.9": - version: 4.0.9 - resolution: "postcss-scss@npm:4.0.9" - peerDependencies: - postcss: ^8.4.29 - checksum: 10c0/f917ecfd4b9113a6648e966a41f027ff7e14238393914978d44596e227a50f084667dc8818742348dc7d8b20130b30d4259aca1d4db86754a9c141202ae03714 + checksum: 10c0/6957b10b818bd8d4664ec0e548af967f7549abedfb37f844d389571d36af681340f41f9477b9ccf34bcc7599bdef222d1d72e79c64373001fae77089fba6d965 languageName: node linkType: hard -"postcss-selector-parser@npm:^6.1.0": - version: 6.1.0 - resolution: "postcss-selector-parser@npm:6.1.0" +"postcss-selector-parser@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-selector-parser@npm:7.0.0" dependencies: cssesc: "npm:^3.0.0" util-deprecate: "npm:^1.0.2" - checksum: 10c0/91e9c6434772506bc7f318699dd9d19d32178b52dfa05bed24cb0babbdab54f8fb765d9920f01ac548be0a642aab56bce493811406ceb00ae182bbb53754c473 + checksum: 10c0/e96e096afcce70bf5c97789f5ea09d7415ae5eb701d82b05b5e8532885d31363b484fcb1ca9488c9a331f30508d9e5bb6c3109eb2eb5067ef3d3919f9928cd9d + languageName: node + linkType: hard + +"postcss-sorting@npm:^8.0.2": + version: 8.0.2 + resolution: "postcss-sorting@npm:8.0.2" + peerDependencies: + postcss: ^8.4.20 + checksum: 10c0/955c72d8d71b6b54dcdcbcef765a593803512d215cef12a49b71d1abf8ab8d2dacb5645dbb5a0a6535609aab6bffb834599d6073f28fe61e589a4437af85e243 languageName: node linkType: hard @@ -6255,14 +5409,14 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.4.29, postcss@npm:^8.4.38, postcss@npm:^8.4.39": - version: 8.4.39 - resolution: "postcss@npm:8.4.39" +"postcss@npm:^8.4.32, postcss@npm:^8.4.43, postcss@npm:^8.4.49": + version: 8.5.1 + resolution: "postcss@npm:8.5.1" dependencies: - nanoid: "npm:^3.3.7" - picocolors: "npm:^1.0.1" - source-map-js: "npm:^1.2.0" - checksum: 10c0/16f5ac3c4e32ee76d1582b3c0dcf1a1fdb91334a45ad755eeb881ccc50318fb8d64047de4f1601ac96e30061df203f0f2e2edbdc0bfc49b9c57bc9fb9bedaea3 + nanoid: "npm:^3.3.8" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10c0/c4d90c59c98e8a0c102b77d3f4cac190f883b42d63dc60e2f3ed840f16197c0c8e25a4327d2e9a847b45a985612317dc0534178feeebd0a1cf3eb0eecf75cae4 languageName: node linkType: hard @@ -6282,41 +5436,64 @@ __metadata: languageName: node linkType: hard -"prettier@npm:^3.3.2": - version: 3.3.2 - resolution: "prettier@npm:3.3.2" +"prettier@npm:^2.7.1": + version: 2.8.8 + resolution: "prettier@npm:2.8.8" + bin: + prettier: bin-prettier.js + checksum: 10c0/463ea8f9a0946cd5b828d8cf27bd8b567345cf02f56562d5ecde198b91f47a76b7ac9eae0facd247ace70e927143af6135e8cf411986b8cb8478784a4d6d724a + languageName: node + linkType: hard + +"prettier@npm:^3.4.2": + version: 3.4.2 + resolution: "prettier@npm:3.4.2" bin: prettier: bin/prettier.cjs - checksum: 10c0/39ed27d17f0238da6dd6571d63026566bd790d3d0edac57c285fbab525982060c8f1e01955fe38134ab10f0951a6076da37f015db8173c02f14bc7f0803a384c + checksum: 10c0/99e076a26ed0aba4ebc043880d0f08bbb8c59a4c6641cdee6cdadf2205bdd87aa1d7823f50c3aea41e015e99878d37c58d7b5f0e663bba0ef047f94e36b96446 languageName: node linkType: hard -"prism-react-renderer@npm:^2.3.1": - version: 2.3.1 - resolution: "prism-react-renderer@npm:2.3.1" +"prism-react-renderer@npm:^2.4.1": + version: 2.4.1 + resolution: "prism-react-renderer@npm:2.4.1" dependencies: "@types/prismjs": "npm:^1.26.0" clsx: "npm:^2.0.0" peerDependencies: react: ">=16.0.0" - checksum: 10c0/566932127ca18049a651aa038a8f8c7c1ca15950d21b659c2ce71fd95bd03bef2b5d40c489e7aa3453eaf15d984deef542a609d7842e423e6a13427dd90bd371 + checksum: 10c0/ebbe8feb975224344bbdd046b3a937d121592dbe4b8f22ba0be31f5af37b9a8219f441138ef6cab1c5b96f2aa6b529015200959f7e5e85b60ca69c81d35edcd4 languageName: node linkType: hard -"proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": - version: 4.2.0 - resolution: "proc-log@npm:4.2.0" - checksum: 10c0/17db4757c2a5c44c1e545170e6c70a26f7de58feb985091fb1763f5081cab3d01b181fb2dd240c9f4a4255a1d9227d163d5771b7e69c9e49a561692db865efb9 +"proc-log@npm:^3.0.0": + version: 3.0.0 + resolution: "proc-log@npm:3.0.0" + checksum: 10c0/f66430e4ff947dbb996058f6fd22de2c66612ae1a89b097744e17fb18a4e8e7a86db99eda52ccf15e53f00b63f4ec0b0911581ff2aac0355b625c8eac509b0dc + languageName: node + linkType: hard + +"proc-log@npm:^5.0.0": + version: 5.0.0 + resolution: "proc-log@npm:5.0.0" + checksum: 10c0/bbe5edb944b0ad63387a1d5b1911ae93e05ce8d0f60de1035b218cdcceedfe39dbd2c697853355b70f1a090f8f58fe90da487c85216bf9671f9499d1a897e9e3 languageName: node linkType: hard -"process-nextick-args@npm:^2.0.0, process-nextick-args@npm:~2.0.0": +"process-nextick-args@npm:~2.0.0": version: 2.0.1 resolution: "process-nextick-args@npm:2.0.1" checksum: 10c0/bec089239487833d46b59d80327a1605e1c5287eaad770a291add7f45fda1bb5e28b38e0e061add0a1d0ee0984788ce74fa394d345eed1c420cacf392c554367 languageName: node linkType: hard +"promise-inflight@npm:^1.0.1": + version: 1.0.1 + resolution: "promise-inflight@npm:1.0.1" + checksum: 10c0/d179d148d98fbff3d815752fa9a08a87d3190551d1420f17c4467f628214db12235ae068d98cd001f024453676d8985af8f28f002345646c4ece4600a79620bc + languageName: node + linkType: hard + "promise-retry@npm:^2.0.1": version: 2.0.1 resolution: "promise-retry@npm:2.0.1" @@ -6345,6 +5522,16 @@ __metadata: languageName: node linkType: hard +"proxy-addr@npm:~2.0.7": + version: 2.0.7 + resolution: "proxy-addr@npm:2.0.7" + dependencies: + forwarded: "npm:0.2.0" + ipaddr.js: "npm:1.9.1" + checksum: 10c0/c3eed999781a35f7fd935f398b6d8920b6fb00bbc14287bc6de78128ccc1a02c89b95b56742bf7cf0362cc333c61d138532049c7dedc7a328ef13343eff81210 + languageName: node + linkType: hard + "proxy-from-env@npm:^1.1.0": version: 1.1.0 resolution: "proxy-from-env@npm:1.1.0" @@ -6352,13 +5539,6 @@ __metadata: languageName: node linkType: hard -"pseudomap@npm:^1.0.2": - version: 1.0.2 - resolution: "pseudomap@npm:1.0.2" - checksum: 10c0/5a91ce114c64ed3a6a553aa7d2943868811377388bb31447f9d8028271bae9b05b340fe0b6961a64e45b9c72946aeb0a4ab635e8f7cb3715ffd0ff2beeb6a679 - languageName: node - linkType: hard - "pump@npm:^2.0.0": version: 2.0.1 resolution: "pump@npm:2.0.1" @@ -6369,17 +5549,7 @@ __metadata: languageName: node linkType: hard -"pump@npm:^3.0.0": - version: 3.0.0 - resolution: "pump@npm:3.0.0" - dependencies: - end-of-stream: "npm:^1.1.0" - once: "npm:^1.3.1" - checksum: 10c0/bbdeda4f747cdf47db97428f3a135728669e56a0ae5f354a9ac5b74556556f5446a46f720a8f14ca2ece5be9b4d5d23c346db02b555f46739934cc6c093a5478 - languageName: node - linkType: hard - -"pumpify@npm:^1.3.5": +"pumpify@npm:^1.3.3": version: 1.5.1 resolution: "pumpify@npm:1.5.1" dependencies: @@ -6397,12 +5567,21 @@ __metadata: languageName: node linkType: hard -"qs@npm:^6.12.2": - version: 6.12.3 - resolution: "qs@npm:6.12.3" +"qs@npm:6.13.0": + version: 6.13.0 + resolution: "qs@npm:6.13.0" dependencies: side-channel: "npm:^1.0.6" - checksum: 10c0/243ddcc8f49dab78fc51041f7f64c500b47c671c45a101a8aca565d8537cb562921da7ef1a831b4a7051596ec88bb35a0d5e25a240025e8b32c6bfb69f00bf2f + checksum: 10c0/62372cdeec24dc83a9fb240b7533c0fdcf0c5f7e0b83343edd7310f0ab4c8205a5e7c56406531f2e47e1b4878a3821d652be4192c841de5b032ca83619d8f860 + languageName: node + linkType: hard + +"qs@npm:^6.14.0": + version: 6.14.0 + resolution: "qs@npm:6.14.0" + dependencies: + side-channel: "npm:^1.1.0" + checksum: 10c0/8ea5d91bf34f440598ee389d4a7d95820e3b837d3fd9f433871f7924801becaa0cd3b3b4628d49a7784d06a8aea9bc4554d2b6d8d584e2d221dc06238a42909c languageName: node linkType: hard @@ -6413,50 +5592,41 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:^18.3.1": - version: 18.3.1 - resolution: "react-dom@npm:18.3.1" - dependencies: - loose-envify: "npm:^1.1.0" - scheduler: "npm:^0.23.2" - peerDependencies: - react: ^18.3.1 - checksum: 10c0/a752496c1941f958f2e8ac56239172296fcddce1365ce45222d04a1947e0cc5547df3e8447f855a81d6d39f008d7c32eab43db3712077f09e3f67c4874973e85 - languageName: node - linkType: hard - -"react-fast-compare@npm:^3.2.2": - version: 3.2.2 - resolution: "react-fast-compare@npm:3.2.2" - checksum: 10c0/0bbd2f3eb41ab2ff7380daaa55105db698d965c396df73e6874831dbafec8c4b5b08ba36ff09df01526caa3c61595247e3269558c284e37646241cba2b90a367 +"range-parser@npm:~1.2.1": + version: 1.2.1 + resolution: "range-parser@npm:1.2.1" + checksum: 10c0/96c032ac2475c8027b7a4e9fe22dc0dfe0f6d90b85e496e0f016fbdb99d6d066de0112e680805075bd989905e2123b3b3d002765149294dce0c1f7f01fcc2ea0 languageName: node linkType: hard -"react-ga4@npm:^2.1.0": - version: 2.1.0 - resolution: "react-ga4@npm:2.1.0" - checksum: 10c0/314aa86dd7cb868535f26bfb8b537d3b3c20649c66b2b942fba72e081295441446932a4ae96499231c8a4836ab0a222a97b1bd03633b8cc1477991efe93444cd +"raw-body@npm:2.5.2": + version: 2.5.2 + resolution: "raw-body@npm:2.5.2" + dependencies: + bytes: "npm:3.1.2" + http-errors: "npm:2.0.0" + iconv-lite: "npm:0.4.24" + unpipe: "npm:1.0.0" + checksum: 10c0/b201c4b66049369a60e766318caff5cb3cc5a900efd89bdac431463822d976ad0670912c931fdbdcf5543207daf6f6833bca57aa116e1661d2ea91e12ca692c4 languageName: node linkType: hard -"react-helmet-async@npm:^2.0.5": - version: 2.0.5 - resolution: "react-helmet-async@npm:2.0.5" +"react-dom@npm:^19.0.0": + version: 19.0.0 + resolution: "react-dom@npm:19.0.0" dependencies: - invariant: "npm:^2.2.4" - react-fast-compare: "npm:^3.2.2" - shallowequal: "npm:^1.1.0" + scheduler: "npm:^0.25.0" peerDependencies: - react: ^16.6.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/f390ea8bf13c2681850e5f8eb5b73d8613f407c245a5fd23e9db9b2cc14a3700dd1ce992d3966632886d1d613083294c2aeee009193f49dfa7d145d9f13ea2b0 + react: ^19.0.0 + checksum: 10c0/a36ce7ab507b237ae2759c984cdaad4af4096d8199fb65b3815c16825e5cfeb7293da790a3fc2184b52bfba7ba3ff31c058c01947aff6fd1a3701632aabaa6a9 languageName: node linkType: hard -"react-i18next@npm:^14.1.2": - version: 14.1.2 - resolution: "react-i18next@npm:14.1.2" +"react-i18next@npm:^15.4.0": + version: 15.4.0 + resolution: "react-i18next@npm:15.4.0" dependencies: - "@babel/runtime": "npm:^7.23.9" + "@babel/runtime": "npm:^7.25.0" html-parse-stringify: "npm:^3.0.1" peerDependencies: i18next: ">= 23.2.3" @@ -6466,7 +5636,7 @@ __metadata: optional: true react-native: optional: true - checksum: 10c0/cb8a83b3696639f083dc9f770d9d9e0681c0fe56f6b5fe24cd6facce08d363c37bd3440078e9d63abacabd7037b783e6b4e4d0c935de9c8dda7820bd4ef7e329 + checksum: 10c0/dc26e5a0f90f9038156e0908cb4489906d18dd2dedac6ec76d68cf6d545d9e070a3f450880548d0750caee5adf0653d7971fdabc9ef67c750d1c2df60be74d77 languageName: node linkType: hard @@ -6477,109 +5647,47 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^18.3.1": - version: 18.3.1 - resolution: "react-is@npm:18.3.1" - checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072 +"react-is@npm:^19.0.0": + version: 19.0.0 + resolution: "react-is@npm:19.0.0" + checksum: 10c0/d1be8e8500cf04f76df71942a21ef3a71266397a383d7ec8885f35190df818d35c65efd35aed7be47a89ad99aaff2c52e0c4e39e8930844a6b997622e50625a8 languageName: node linkType: hard -"react-refresh@npm:^0.14.2": - version: 0.14.2 - resolution: "react-refresh@npm:0.14.2" - checksum: 10c0/875b72ef56b147a131e33f2abd6ec059d1989854b3ff438898e4f9310bfcc73acff709445b7ba843318a953cb9424bcc2c05af2b3d80011cee28f25aef3e2ebb - languageName: node - linkType: hard - -"react-router-dom@npm:^6.24.0": - version: 6.24.1 - resolution: "react-router-dom@npm:6.24.1" - dependencies: - "@remix-run/router": "npm:1.17.1" - react-router: "npm:6.24.1" - peerDependencies: - react: ">=16.8" - react-dom: ">=16.8" - checksum: 10c0/458c6c539304984c47b0ad8d5d5b1f8859cc0845e47591d530cb4fcb13498f70a89b42bc4daeea55d57cfa08408b453bcf601cabb2c987f554cdcac13805caa8 +"react-refresh@npm:^0.14.0": + version: 0.14.2 + resolution: "react-refresh@npm:0.14.2" + checksum: 10c0/875b72ef56b147a131e33f2abd6ec059d1989854b3ff438898e4f9310bfcc73acff709445b7ba843318a953cb9424bcc2c05af2b3d80011cee28f25aef3e2ebb languageName: node linkType: hard -"react-router@npm:6.24.1": - version: 6.24.1 - resolution: "react-router@npm:6.24.1" +"react-router@npm:^7.1.3": + version: 7.1.3 + resolution: "react-router@npm:7.1.3" dependencies: - "@remix-run/router": "npm:1.17.1" + "@types/cookie": "npm:^0.6.0" + cookie: "npm:^1.0.1" + set-cookie-parser: "npm:^2.6.0" + turbo-stream: "npm:2.4.0" peerDependencies: - react: ">=16.8" - checksum: 10c0/f50c78ca52c5154ab933c17708125e8bf71ccf2072993a80302526a0a23db9ceac6e36d5c891d62ccd16f13e60cd1b6533a2036523d1b09e0148ac49e34b2e83 + react: ">=18" + react-dom: ">=18" + peerDependenciesMeta: + react-dom: + optional: true + checksum: 10c0/f42f7b245533d1adaa00779a0287993a836d5b56039d97a6643a8b3a721ffb92ff47c97cfb36409fec8794ac3c8a884339f588cf21fcd7f6dccdfc834520c76f languageName: node linkType: hard -"react-template-demo@workspace:.": - version: 0.0.0-use.local - resolution: "react-template-demo@workspace:." - dependencies: - "@mui/icons-material": "npm:^6.1.0" - "@mui/material": "npm:^6.1.0" - "@mui/material-pigment-css": "npm:^6.1.0" - "@pigment-css/vite-plugin": "npm:^0.0.23" - "@types/classnames": "npm:^2.3.1" - "@types/node": "npm:^20.14.9" - "@types/qs": "npm:^6.9.15" - "@types/react": "npm:^18.3.3" - "@types/react-dom": "npm:^18.3.0" - "@types/react-helmet": "npm:^6.1.11" - "@types/react-router-dom": "npm:^5.3.3" - "@types/sass": "npm:^1.45.0" - "@typescript-eslint/eslint-plugin": "npm:^7.13.1" - "@typescript-eslint/parser": "npm:^7.13.1" - "@vitejs/plugin-react": "npm:^4.3.1" - axios: "npm:^1.7.4" - classnames: "npm:^2.5.1" - dayjs: "npm:^1.11.11" - eclint: "npm:^2.8.1" - eslint: "npm:^8.57.0" - eslint-plugin-prettier: "npm:^5.1.3" - eslint-plugin-react: "npm:^7.34.3" - eslint-plugin-react-hooks: "npm:^4.6.2" - eslint-plugin-react-refresh: "npm:^0.4.7" - i18next: "npm:^23.11.5" - i18next-browser-languagedetector: "npm:^8.0.0" - postcss: "npm:^8.4.29" - prettier: "npm:^3.3.2" - prism-react-renderer: "npm:^2.3.1" - qs: "npm:^6.12.2" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" - react-ga4: "npm:^2.1.0" - react-helmet-async: "npm:^2.0.5" - react-i18next: "npm:^14.1.2" - react-router-dom: "npm:^6.24.0" - react-toastify: "npm:^10.0.5" - react-transition-group: "npm:^4.4.5" - sass: "npm:^1.77.6" - sheet2i18n: "npm:^1.1.2" - stylelint: "npm:^16.6.1" - stylelint-config-prettier-scss: "npm:^1.0.0" - stylelint-config-standard-scss: "npm:^13.1.0" - stylelint-prettier: "npm:^5.0.0" - stylelint-scss: "npm:^6.3.2" - typescript: "npm:^5.2.2" - vite: "npm:^5.3.1" - yup: "npm:^1.4.0" - zustand: "npm:^4.5.4" - languageName: unknown - linkType: soft - -"react-toastify@npm:^10.0.5": - version: 10.0.5 - resolution: "react-toastify@npm:10.0.5" +"react-toastify@npm:^11.0.3": + version: 11.0.3 + resolution: "react-toastify@npm:11.0.3" dependencies: - clsx: "npm:^2.1.0" + clsx: "npm:^2.1.1" peerDependencies: - react: ">=18" - react-dom: ">=18" - checksum: 10c0/66c68ec3d6c017d9f32652d73bb925224921c6a80b629b9d481430d5b4fd504abb7a99995a64b9aef0fc31326c74f3cbe088b3287b978dd0c355079c4bbf4158 + react: ^18 || ^19 + react-dom: ^18 || ^19 + checksum: 10c0/23b989c6080bc5bf0eb0c1f7ed17bd53d067d9beb33baf93c520119cd69cf75c9f2d1ee524dfe6c8a2a5d326029772b576de00e018b379d03a0e37630b83adea languageName: node linkType: hard @@ -6598,27 +5706,14 @@ __metadata: languageName: node linkType: hard -"react@npm:^18.3.1": - version: 18.3.1 - resolution: "react@npm:18.3.1" - dependencies: - loose-envify: "npm:^1.1.0" - checksum: 10c0/283e8c5efcf37802c9d1ce767f302dd569dd97a70d9bb8c7be79a789b9902451e0d16334b05d73299b20f048cbc3c7d288bbbde10b701fa194e2089c237dbea3 - languageName: node - linkType: hard - -"readable-stream@npm:2 || 3, readable-stream@npm:3": - version: 3.6.2 - resolution: "readable-stream@npm:3.6.2" - dependencies: - inherits: "npm:^2.0.3" - string_decoder: "npm:^1.1.1" - util-deprecate: "npm:^1.0.1" - checksum: 10c0/e37be5c79c376fdd088a45fa31ea2e423e5d48854be7a22a58869b4e84d25047b193f6acb54f1012331e1bcd667ffb569c01b99d36b0bd59658fb33f513511b7 +"react@npm:^19.0.0": + version: 19.0.0 + resolution: "react@npm:19.0.0" + checksum: 10c0/9cad8f103e8e3a16d15cb18a0d8115d8bd9f9e1ce3420310aea381eb42aa0a4f812cf047bb5441349257a05fba8a291515691e3cb51267279b2d2c3253f38471 languageName: node linkType: hard -"readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.2, readable-stream@npm:^2.0.5, readable-stream@npm:^2.1.5, readable-stream@npm:^2.3.3, readable-stream@npm:^2.3.5, readable-stream@npm:^2.3.6, readable-stream@npm:~2.3.6": +"readable-stream@npm:^2.0.0, readable-stream@npm:~2.3.6": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" dependencies: @@ -6633,27 +5728,26 @@ __metadata: languageName: node linkType: hard -"readdirp@npm:~3.6.0": - version: 3.6.0 - resolution: "readdirp@npm:3.6.0" - dependencies: - picomatch: "npm:^2.2.1" - checksum: 10c0/6fa848cf63d1b82ab4e985f4cf72bd55b7dcfd8e0a376905804e48c3634b7e749170940ba77b32804d5fe93b3cc521aa95a8d7e7d725f830da6d93f3669ce66b +"readdirp@npm:^4.0.1": + version: 4.1.1 + resolution: "readdirp@npm:4.1.1" + checksum: 10c0/a1afc90d0e57ce4caa28046875519453fd09663ade0d0c29fe0d6a117eca4596cfdf1a9ebb0859ad34cca7b9351d4f0d8d962a4363d40f3f37e57dba51ffb6b6 languageName: node linkType: hard -"reflect.getprototypeof@npm:^1.0.4": - version: 1.0.6 - resolution: "reflect.getprototypeof@npm:1.0.6" +"reflect.getprototypeof@npm:^1.0.6, reflect.getprototypeof@npm:^1.0.9": + version: 1.0.10 + resolution: "reflect.getprototypeof@npm:1.0.10" dependencies: - call-bind: "npm:^1.0.7" + call-bind: "npm:^1.0.8" define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.1" + es-abstract: "npm:^1.23.9" es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.4" - globalthis: "npm:^1.0.3" - which-builtin-type: "npm:^1.1.3" - checksum: 10c0/baf4ef8ee6ff341600f4720b251cf5a6cb552d6a6ab0fdc036988c451bf16f920e5feb0d46bd4f530a5cce568f1f7aca2d77447ca798920749cfc52783c39b55 + es-object-atoms: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.7" + get-proto: "npm:^1.0.1" + which-builtin-type: "npm:^1.2.1" + checksum: 10c0/7facec28c8008876f8ab98e80b7b9cb4b1e9224353fd4756dda5f2a4ab0d30fa0a5074777c6df24e1e0af463a2697513b0a11e548d99cf52f21f7bc6ba48d3ac languageName: node linkType: hard @@ -6664,57 +5758,17 @@ __metadata: languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.5.2": - version: 1.5.2 - resolution: "regexp.prototype.flags@npm:1.5.2" +"regexp.prototype.flags@npm:^1.5.3": + version: 1.5.4 + resolution: "regexp.prototype.flags@npm:1.5.4" dependencies: - call-bind: "npm:^1.0.6" + call-bind: "npm:^1.0.8" define-properties: "npm:^1.2.1" es-errors: "npm:^1.3.0" - set-function-name: "npm:^2.0.1" - checksum: 10c0/0f3fc4f580d9c349f8b560b012725eb9c002f36daa0041b3fbf6f4238cb05932191a4d7d5db3b5e2caa336d5150ad0402ed2be81f711f9308fe7e1a9bf9bd552 - languageName: node - linkType: hard - -"remove-bom-buffer@npm:^3.0.0": - version: 3.0.0 - resolution: "remove-bom-buffer@npm:3.0.0" - dependencies: - is-buffer: "npm:^1.1.5" - is-utf8: "npm:^0.2.1" - checksum: 10c0/5179a73424893880709fff54ba2160d6175abfb587031a4cdf16f43acb5952d219fe342a40ea45a4d2ef40cd7af19722b0ba6447a6605b42b6c0674eff320896 - languageName: node - linkType: hard - -"remove-bom-stream@npm:^1.2.0": - version: 1.2.0 - resolution: "remove-bom-stream@npm:1.2.0" - dependencies: - remove-bom-buffer: "npm:^3.0.0" - safe-buffer: "npm:^5.1.0" - through2: "npm:^2.0.3" - checksum: 10c0/c5f34d3308c7864579838a3741a08983bd47d3bac5e6f9e4f498c1eccdc6784805ce52aec1700c420eff09d05184e6c96bb6a3380cf18aadce6dd3d4138399cb - languageName: node - linkType: hard - -"remove-trailing-separator@npm:^1.0.1": - version: 1.1.0 - resolution: "remove-trailing-separator@npm:1.1.0" - checksum: 10c0/3568f9f8f5af3737b4aee9e6e1e8ec4be65a92da9cb27f989e0893714d50aa95ed2ff02d40d1fa35e1b1a234dc9c2437050ef356704a3999feaca6667d9e9bfc - languageName: node - linkType: hard - -"replace-ext@npm:^1.0.0": - version: 1.0.1 - resolution: "replace-ext@npm:1.0.1" - checksum: 10c0/9a9c3d68d0d31f20533ed23e9f6990cff8320cf357eebfa56c0d7b63746ae9f2d6267f3321e80e0bffcad854f710fc9a48dbcf7615579d767db69e9cd4a43168 - languageName: node - linkType: hard - -"require-directory@npm:^2.1.1": - version: 2.1.1 - resolution: "require-directory@npm:2.1.1" - checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 + get-proto: "npm:^1.0.1" + gopd: "npm:^1.2.0" + set-function-name: "npm:^2.0.2" + checksum: 10c0/83b88e6115b4af1c537f8dabf5c3744032cb875d63bc05c288b1b8c0ef37cbe55353f95d8ca817e8843806e3e150b118bc624e4279b24b4776b4198232735a77 languageName: node linkType: hard @@ -6725,13 +5779,6 @@ __metadata: languageName: node linkType: hard -"require-main-filename@npm:^1.0.1": - version: 1.0.1 - resolution: "require-main-filename@npm:1.0.1" - checksum: 10c0/1ab87efb72a0e223a667154e92f29ca753fd42eb87f22db142b91c86d134e29ecf18af929111ccd255fd340b57d84a9d39489498d8dfd5136b300ded30a5f0b6 - languageName: node - linkType: hard - "resolve-from@npm:^4.0.0": version: 4.0.0 resolution: "resolve-from@npm:4.0.0" @@ -6746,25 +5793,16 @@ __metadata: languageName: node linkType: hard -"resolve-options@npm:^1.1.0": - version: 1.1.0 - resolution: "resolve-options@npm:1.1.0" - dependencies: - value-or-function: "npm:^3.0.0" - checksum: 10c0/2f55cbe96ef8260771fc52a4335bb4a04e0d7b52e616c2538a0eb48fd8335a932a3bfc67356a21db965e4bc3e4be869e7925d475c8fb556adf771cc5409fbf3d - languageName: node - linkType: hard - "resolve@npm:^1.19.0": - version: 1.22.8 - resolution: "resolve@npm:1.22.8" + version: 1.22.10 + resolution: "resolve@npm:1.22.10" dependencies: - is-core-module: "npm:^2.13.0" + is-core-module: "npm:^2.16.0" path-parse: "npm:^1.0.7" supports-preserve-symlinks-flag: "npm:^1.0.0" bin: resolve: bin/resolve - checksum: 10c0/07e179f4375e1fd072cfb72ad66d78547f86e6196c4014b31cb0b8bb1db5f7ca871f922d08da0fbc05b94e9fd42206f819648fa3b5b873ebbc8e1dc68fec433a + checksum: 10c0/8967e1f4e2cc40f79b7e080b4582b9a8c5ee36ffb46041dccb20e6461161adf69f843b43067b4a375de926a2cd669157e29a29578191def399dd5ef89a1b5203 languageName: node linkType: hard @@ -6782,15 +5820,15 @@ __metadata: linkType: hard "resolve@patch:resolve@npm%3A^1.19.0#optional!builtin": - version: 1.22.8 - resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" + version: 1.22.10 + resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d" dependencies: - is-core-module: "npm:^2.13.0" + is-core-module: "npm:^2.16.0" path-parse: "npm:^1.0.7" supports-preserve-symlinks-flag: "npm:^1.0.0" bin: resolve: bin/resolve - checksum: 10c0/0446f024439cd2e50c6c8fa8ba77eaa8370b4180f401a96abf3d1ebc770ac51c1955e12764cde449fde3fff480a61f84388e3505ecdbab778f4bef5f8212c729 + checksum: 10c0/52a4e505bbfc7925ac8f4cd91fd8c4e096b6a89728b9f46861d3b405ac9a1ccf4dcbf8befb4e89a2e11370dacd0160918163885cbc669369590f2f31f4c58939 languageName: node linkType: hard @@ -6821,38 +5859,41 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^3.0.2": - version: 3.0.2 - resolution: "rimraf@npm:3.0.2" +"rimraf@npm:^5.0.5": + version: 5.0.10 + resolution: "rimraf@npm:5.0.10" dependencies: - glob: "npm:^7.1.3" + glob: "npm:^10.3.7" bin: - rimraf: bin.js - checksum: 10c0/9cb7757acb489bd83757ba1a274ab545eafd75598a9d817e0c3f8b164238dd90eba50d6b848bd4dcc5f3040912e882dc7ba71653e35af660d77b25c381d402e8 - languageName: node - linkType: hard - -"rollup@npm:^4.13.0": - version: 4.18.1 - resolution: "rollup@npm:4.18.1" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.18.1" - "@rollup/rollup-android-arm64": "npm:4.18.1" - "@rollup/rollup-darwin-arm64": "npm:4.18.1" - "@rollup/rollup-darwin-x64": "npm:4.18.1" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.18.1" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.18.1" - "@rollup/rollup-linux-arm64-gnu": "npm:4.18.1" - "@rollup/rollup-linux-arm64-musl": "npm:4.18.1" - "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.18.1" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.18.1" - "@rollup/rollup-linux-s390x-gnu": "npm:4.18.1" - "@rollup/rollup-linux-x64-gnu": "npm:4.18.1" - "@rollup/rollup-linux-x64-musl": "npm:4.18.1" - "@rollup/rollup-win32-arm64-msvc": "npm:4.18.1" - "@rollup/rollup-win32-ia32-msvc": "npm:4.18.1" - "@rollup/rollup-win32-x64-msvc": "npm:4.18.1" - "@types/estree": "npm:1.0.5" + rimraf: dist/esm/bin.mjs + checksum: 10c0/7da4fd0e15118ee05b918359462cfa1e7fe4b1228c7765195a45b55576e8c15b95db513b8466ec89129666f4af45ad978a3057a02139afba1a63512a2d9644cc + languageName: node + linkType: hard + +"rollup@npm:^4.20.0, rollup@npm:^4.23.0": + version: 4.31.0 + resolution: "rollup@npm:4.31.0" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.31.0" + "@rollup/rollup-android-arm64": "npm:4.31.0" + "@rollup/rollup-darwin-arm64": "npm:4.31.0" + "@rollup/rollup-darwin-x64": "npm:4.31.0" + "@rollup/rollup-freebsd-arm64": "npm:4.31.0" + "@rollup/rollup-freebsd-x64": "npm:4.31.0" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.31.0" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.31.0" + "@rollup/rollup-linux-arm64-gnu": "npm:4.31.0" + "@rollup/rollup-linux-arm64-musl": "npm:4.31.0" + "@rollup/rollup-linux-loongarch64-gnu": "npm:4.31.0" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.31.0" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.31.0" + "@rollup/rollup-linux-s390x-gnu": "npm:4.31.0" + "@rollup/rollup-linux-x64-gnu": "npm:4.31.0" + "@rollup/rollup-linux-x64-musl": "npm:4.31.0" + "@rollup/rollup-win32-arm64-msvc": "npm:4.31.0" + "@rollup/rollup-win32-ia32-msvc": "npm:4.31.0" + "@rollup/rollup-win32-x64-msvc": "npm:4.31.0" + "@types/estree": "npm:1.0.6" fsevents: "npm:~2.3.2" dependenciesMeta: "@rollup/rollup-android-arm-eabi": @@ -6863,6 +5904,10 @@ __metadata: optional: true "@rollup/rollup-darwin-x64": optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true "@rollup/rollup-linux-arm-gnueabihf": optional: true "@rollup/rollup-linux-arm-musleabihf": @@ -6871,6 +5916,8 @@ __metadata: optional: true "@rollup/rollup-linux-arm64-musl": optional: true + "@rollup/rollup-linux-loongarch64-gnu": + optional: true "@rollup/rollup-linux-powerpc64le-gnu": optional: true "@rollup/rollup-linux-riscv64-gnu": @@ -6891,7 +5938,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 10c0/c3c73252fd9f1d39eaeb44aa860141d9daf10d6eada73791a0ef453d38fe8f2c2dfef103ac1f387ed192dd5a2994534f91c026eed9ba1cfb50f5781f48c1f44f + checksum: 10c0/0d6da45098af14c678e78be887fefefbf5a97fef6277c5a1c24ca722537bb3a02e695c6fcad8880218d8fbef8a7a17d865786afd99bb6e70409fad73844ca8cf languageName: node linkType: hard @@ -6904,40 +5951,51 @@ __metadata: languageName: node linkType: hard -"safe-array-concat@npm:^1.1.2": - version: 1.1.2 - resolution: "safe-array-concat@npm:1.1.2" +"safe-array-concat@npm:^1.1.3": + version: 1.1.3 + resolution: "safe-array-concat@npm:1.1.3" dependencies: - call-bind: "npm:^1.0.7" - get-intrinsic: "npm:^1.2.4" - has-symbols: "npm:^1.0.3" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.2" + get-intrinsic: "npm:^1.2.6" + has-symbols: "npm:^1.1.0" isarray: "npm:^2.0.5" - checksum: 10c0/12f9fdb01c8585e199a347eacc3bae7b5164ae805cdc8c6707199dbad5b9e30001a50a43c4ee24dc9ea32dbb7279397850e9208a7e217f4d8b1cf5d90129dec9 + checksum: 10c0/43c86ffdddc461fb17ff8a17c5324f392f4868f3c7dd2c6a5d9f5971713bc5fd755667212c80eab9567595f9a7509cc2f83e590ddaebd1bd19b780f9c79f9a8d + languageName: node + linkType: hard + +"safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: 10c0/780ba6b5d99cc9a40f7b951d47152297d0e260f0df01472a1b99d4889679a4b94a13d644f7dbc4f022572f09ae9005fa2fbb93bbbd83643316f365a3e9a45b21 languageName: node linkType: hard -"safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.2.1": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 languageName: node linkType: hard -"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": - version: 5.1.2 - resolution: "safe-buffer@npm:5.1.2" - checksum: 10c0/780ba6b5d99cc9a40f7b951d47152297d0e260f0df01472a1b99d4889679a4b94a13d644f7dbc4f022572f09ae9005fa2fbb93bbbd83643316f365a3e9a45b21 +"safe-push-apply@npm:^1.0.0": + version: 1.0.0 + resolution: "safe-push-apply@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + isarray: "npm:^2.0.5" + checksum: 10c0/831f1c9aae7436429e7862c7e46f847dfe490afac20d0ee61bae06108dbf5c745a0de3568ada30ccdd3eeb0864ca8331b2eef703abd69bfea0745b21fd320750 languageName: node linkType: hard -"safe-regex-test@npm:^1.0.3": - version: 1.0.3 - resolution: "safe-regex-test@npm:1.0.3" +"safe-regex-test@npm:^1.1.0": + version: 1.1.0 + resolution: "safe-regex-test@npm:1.1.0" dependencies: - call-bind: "npm:^1.0.6" + call-bound: "npm:^1.0.2" es-errors: "npm:^1.3.0" - is-regex: "npm:^1.1.4" - checksum: 10c0/900bf7c98dc58f08d8523b7012b468e4eb757afa624f198902c0643d7008ba777b0bdc35810ba0b758671ce887617295fb742b3f3968991b178ceca54cb07603 + is-regex: "npm:^1.2.1" + checksum: 10c0/f2c25281bbe5d39cddbbce7f86fca5ea9b3ce3354ea6cd7c81c31b006a5a9fff4286acc5450a3b9122c56c33eba69c56b9131ad751457b2b4a585825e6a10665 languageName: node linkType: hard @@ -6948,34 +6006,10 @@ __metadata: languageName: node linkType: hard -"sass@npm:*, sass@npm:^1.77.6": - version: 1.77.7 - resolution: "sass@npm:1.77.7" - dependencies: - chokidar: "npm:>=3.0.0 <4.0.0" - immutable: "npm:^4.0.0" - source-map-js: "npm:>=0.6.2 <2.0.0" - bin: - sass: sass.js - checksum: 10c0/6cacbf4b5165d30a9be0f09438aed85ff0617e5087442e65c23c8464750ff1b9988855a58f36b420b62f992d1e82403f99810aba7731519d3d026847e21a5635 - languageName: node - linkType: hard - -"scheduler@npm:^0.23.2": - version: 0.23.2 - resolution: "scheduler@npm:0.23.2" - dependencies: - loose-envify: "npm:^1.1.0" - checksum: 10c0/26383305e249651d4c58e6705d5f8425f153211aef95f15161c151f7b8de885f24751b377e4a0b3dd42cce09aad3f87a61dab7636859c0d89b7daf1a1e2a5c78 - languageName: node - linkType: hard - -"semver@npm:^5.5.0, semver@npm:^5.6.0": - version: 5.7.2 - resolution: "semver@npm:5.7.2" - bin: - semver: bin/semver - checksum: 10c0/e4cf10f86f168db772ae95d86ba65b3fd6c5967c94d97c708ccb463b778c2ee53b914cd7167620950fc07faf5a564e6efe903836639e512a1aa15fbc9667fa25 +"scheduler@npm:^0.25.0": + version: 0.25.0 + resolution: "scheduler@npm:0.25.0" + checksum: 10c0/a4bb1da406b613ce72c1299db43759526058fdcc413999c3c3e0db8956df7633acf395cb20eb2303b6a65d658d66b6585d344460abaee8080b4aa931f10eaafe languageName: node linkType: hard @@ -6988,7 +6022,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.5": +"semver@npm:^7.1.1, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.3, semver@npm:^7.6.0": version: 7.6.3 resolution: "semver@npm:7.6.3" bin: @@ -6997,23 +6031,47 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.6.0": - version: 7.6.2 - resolution: "semver@npm:7.6.2" - bin: - semver: bin/semver.js - checksum: 10c0/97d3441e97ace8be4b1976433d1c32658f6afaff09f143e52c593bae7eef33de19e3e369c88bd985ce1042c6f441c80c6803078d1de2a9988080b66684cbb30c +"send@npm:0.19.0": + version: 0.19.0 + resolution: "send@npm:0.19.0" + dependencies: + debug: "npm:2.6.9" + depd: "npm:2.0.0" + destroy: "npm:1.2.0" + encodeurl: "npm:~1.0.2" + escape-html: "npm:~1.0.3" + etag: "npm:~1.8.1" + fresh: "npm:0.5.2" + http-errors: "npm:2.0.0" + mime: "npm:1.6.0" + ms: "npm:2.1.3" + on-finished: "npm:2.4.1" + range-parser: "npm:~1.2.1" + statuses: "npm:2.0.1" + checksum: 10c0/ea3f8a67a8f0be3d6bf9080f0baed6d2c51d11d4f7b4470de96a5029c598a7011c497511ccc28968b70ef05508675cebff27da9151dd2ceadd60be4e6cf845e3 languageName: node linkType: hard -"set-blocking@npm:^2.0.0": - version: 2.0.0 - resolution: "set-blocking@npm:2.0.0" - checksum: 10c0/9f8c1b2d800800d0b589de1477c753492de5c1548d4ade52f57f1d1f5e04af5481554d75ce5e5c43d4004b80a3eb714398d6907027dc0534177b7539119f4454 +"serve-static@npm:1.16.2": + version: 1.16.2 + resolution: "serve-static@npm:1.16.2" + dependencies: + encodeurl: "npm:~2.0.0" + escape-html: "npm:~1.0.3" + parseurl: "npm:~1.3.3" + send: "npm:0.19.0" + checksum: 10c0/528fff6f5e12d0c5a391229ad893910709bc51b5705962b09404a1d813857578149b8815f35d3ee5752f44cd378d0f31669d4b1d7e2d11f41e08283d5134bd1f languageName: node linkType: hard -"set-function-length@npm:^1.2.1": +"set-cookie-parser@npm:^2.6.0": + version: 2.7.1 + resolution: "set-cookie-parser@npm:2.7.1" + checksum: 10c0/060c198c4c92547ac15988256f445eae523f57f2ceefeccf52d30d75dedf6bff22b9c26f756bd44e8e560d44ff4ab2130b178bd2e52ef5571bf7be3bd7632d9a + languageName: node + linkType: hard + +"set-function-length@npm:^1.2.2": version: 1.2.2 resolution: "set-function-length@npm:1.2.2" dependencies: @@ -7027,7 +6085,7 @@ __metadata: languageName: node linkType: hard -"set-function-name@npm:^2.0.1, set-function-name@npm:^2.0.2": +"set-function-name@npm:^2.0.2": version: 2.0.2 resolution: "set-function-name@npm:2.0.2" dependencies: @@ -7039,19 +6097,21 @@ __metadata: languageName: node linkType: hard -"shallowequal@npm:^1.1.0": - version: 1.1.0 - resolution: "shallowequal@npm:1.1.0" - checksum: 10c0/b926efb51cd0f47aa9bc061add788a4a650550bbe50647962113a4579b60af2abe7b62f9b02314acc6f97151d4cf87033a2b15fc20852fae306d1a095215396c +"set-proto@npm:^1.0.0": + version: 1.0.0 + resolution: "set-proto@npm:1.0.0" + dependencies: + dunder-proto: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/ca5c3ccbba479d07c30460e367e66337cec825560b11e8ba9c5ebe13a2a0d6021ae34eddf94ff3dfe17a3104dc1f191519cb6c48378b503e5c3f36393938776a languageName: node linkType: hard -"shebang-command@npm:^1.2.0": +"setprototypeof@npm:1.2.0": version: 1.2.0 - resolution: "shebang-command@npm:1.2.0" - dependencies: - shebang-regex: "npm:^1.0.0" - checksum: 10c0/7b20dbf04112c456b7fc258622dafd566553184ac9b6938dd30b943b065b21dabd3776460df534cc02480db5e1b6aec44700d985153a3da46e7db7f9bd21326d + resolution: "setprototypeof@npm:1.2.0" + checksum: 10c0/68733173026766fa0d9ecaeb07f0483f4c2dc70ca376b3b7c40b7cda909f94b0918f6c5ad5ce27a9160bdfb475efaa9d5e705a11d8eaae18f9835d20976028bc languageName: node linkType: hard @@ -7064,13 +6124,6 @@ __metadata: languageName: node linkType: hard -"shebang-regex@npm:^1.0.0": - version: 1.0.0 - resolution: "shebang-regex@npm:1.0.0" - checksum: 10c0/9abc45dee35f554ae9453098a13fdc2f1730e525a5eb33c51f096cc31f6f10a4b38074c1ebf354ae7bffa7229506083844008dfc3bb7818228568c0b2dc1fff2 - languageName: node - linkType: hard - "shebang-regex@npm:^3.0.0": version: 3.0.0 resolution: "shebang-regex@npm:3.0.0" @@ -7078,40 +6131,51 @@ __metadata: languageName: node linkType: hard -"sheet2i18n@npm:^1.1.2": - version: 1.1.2 - resolution: "sheet2i18n@npm:1.1.2" +"side-channel-list@npm:^1.0.0": + version: 1.0.0 + resolution: "side-channel-list@npm:1.0.0" dependencies: - csv-parse: "npm:^5.5.6" - bin: - sheet2i18n: bin/sheet2i18n.js - checksum: 10c0/3afcc9abcc13e7addf2f7cf7d4314e5b6a153006a657e1c22257829d782a0a0663a274e364f90aee3507ec3c4f310f2069e32a17ea34e754b72f6edf60c61d57 + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + checksum: 10c0/644f4ac893456c9490ff388bf78aea9d333d5e5bfc64cfb84be8f04bf31ddc111a8d4b83b85d7e7e8a7b845bc185a9ad02c052d20e086983cf59f0be517d9b3d languageName: node linkType: hard -"side-channel@npm:^1.0.4, side-channel@npm:^1.0.6": - version: 1.0.6 - resolution: "side-channel@npm:1.0.6" +"side-channel-map@npm:^1.0.1": + version: 1.0.1 + resolution: "side-channel-map@npm:1.0.1" dependencies: - call-bind: "npm:^1.0.7" + call-bound: "npm:^1.0.2" es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.4" - object-inspect: "npm:^1.13.1" - checksum: 10c0/d2afd163dc733cc0a39aa6f7e39bf0c436293510dbccbff446733daeaf295857dbccf94297092ec8c53e2503acac30f0b78830876f0485991d62a90e9cad305f + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672 languageName: node linkType: hard -"sigmund@npm:^1.0.1": - version: 1.0.1 - resolution: "sigmund@npm:1.0.1" - checksum: 10c0/0cc9cf0acf4ee1e29bc324ec60b81865c30c4cf6738c6677646b101df1b1b1663759106d96de4199648e5fff3d1d2468ba06ec437cfcef16ee8ff19133fcbb9d +"side-channel-weakmap@npm:^1.0.2": + version: 1.0.2 + resolution: "side-channel-weakmap@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + side-channel-map: "npm:^1.0.1" + checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185 languageName: node linkType: hard -"signal-exit@npm:^3.0.0": - version: 3.0.7 - resolution: "signal-exit@npm:3.0.7" - checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 +"side-channel@npm:^1.0.6, side-channel@npm:^1.1.0": + version: 1.1.0 + resolution: "side-channel@npm:1.1.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + side-channel-list: "npm:^1.0.0" + side-channel-map: "npm:^1.0.1" + side-channel-weakmap: "npm:^1.0.2" + checksum: 10c0/cb20dad41eb032e6c24c0982e1e5a24963a28aa6122b4f05b3f3d6bf8ae7fd5474ef382c8f54a6a3ab86e0cac4d41a23bd64ede3970e5bfb50326ba02a7996e6 languageName: node linkType: hard @@ -7129,15 +6193,6 @@ __metadata: languageName: node linkType: hard -"slice-ansi@npm:^1.0.0": - version: 1.0.0 - resolution: "slice-ansi@npm:1.0.0" - dependencies: - is-fullwidth-code-point: "npm:^2.0.0" - checksum: 10c0/589d9b80b33b8274f88942d4da7c3698cebb8bba0d367c79a42f95a4f69eb7645fdf51821ffbd6d0af6aea6dda70f725925b6cf5e670a53b7ae2c31e7fd10a2e - languageName: node - linkType: hard - "slice-ansi@npm:^4.0.0": version: 4.0.0 resolution: "slice-ansi@npm:4.0.0" @@ -7157,13 +6212,13 @@ __metadata: linkType: hard "socks-proxy-agent@npm:^8.0.3": - version: 8.0.4 - resolution: "socks-proxy-agent@npm:8.0.4" + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" dependencies: - agent-base: "npm:^7.1.1" + agent-base: "npm:^7.1.2" debug: "npm:^4.3.4" socks: "npm:^2.8.3" - checksum: 10c0/345593bb21b95b0508e63e703c84da11549f0a2657d6b4e3ee3612c312cb3a907eac10e53b23ede3557c6601d63252103494caa306b66560f43af7b98f53957a + checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 languageName: node linkType: hard @@ -7177,10 +6232,20 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.1, source-map-js@npm:^1.2.0": - version: 1.2.0 - resolution: "source-map-js@npm:1.2.0" - checksum: 10c0/7e5f896ac10a3a50fe2898e5009c58ff0dc102dcb056ed27a354623a0ece8954d4b2649e1a1b2b52ef2e161d26f8859c7710350930751640e71e374fe2d321a4 +"source-map-js@npm:^1.0.1, source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf + languageName: node + linkType: hard + +"source-map-support@npm:^0.5.21": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: "npm:^1.0.0" + source-map: "npm:^0.6.0" + checksum: 10c0/9ee09942f415e0f721d6daad3917ec1516af746a8120bba7bb56278707a37f1eb8642bde456e98454b8a885023af81a16e646869975f06afc1a711fb90484e7d languageName: node linkType: hard @@ -7191,10 +6256,44 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.7.4": - version: 0.7.4 - resolution: "source-map@npm:0.7.4" - checksum: 10c0/dc0cf3768fe23c345ea8760487f8c97ef6fca8a73c83cd7c9bf2fde8bc2c34adb9c0824d6feb14bc4f9e37fb522e18af621543f1289038a66ac7586da29aa7dc +"source-map@npm:^0.6.0": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 + languageName: node + linkType: hard + +"spdx-correct@npm:^3.0.0": + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" + dependencies: + spdx-expression-parse: "npm:^3.0.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10c0/49208f008618b9119208b0dadc9208a3a55053f4fd6a0ae8116861bd22696fc50f4142a35ebfdb389e05ccf2de8ad142573fefc9e26f670522d899f7b2fe7386 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.5.0 + resolution: "spdx-exceptions@npm:2.5.0" + checksum: 10c0/37217b7762ee0ea0d8b7d0c29fd48b7e4dfb94096b109d6255b589c561f57da93bf4e328c0290046115961b9209a8051ad9f525e48d433082fc79f496a4ea940 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: "npm:^2.1.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10c0/6f8a41c87759fa184a58713b86c6a8b028250f158159f1d03ed9d1b6ee4d9eefdc74181c8ddc581a341aa971c3e7b79e30b59c23b05d2436d5de1c30bdef7171 + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.21 + resolution: "spdx-license-ids@npm:3.0.21" + checksum: 10c0/ecb24c698d8496aa9efe23e0b1f751f8a7a89faedcdfcbfabae772b546c2db46ccde8f3bc447a238eb86bbcd4f73fea88720ef3b8394f7896381bec3d7736411 languageName: node linkType: hard @@ -7205,19 +6304,19 @@ __metadata: languageName: node linkType: hard -"sprintf-js@npm:~1.0.2": - version: 1.0.3 - resolution: "sprintf-js@npm:1.0.3" - checksum: 10c0/ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb +"ssri@npm:^12.0.0": + version: 12.0.0 + resolution: "ssri@npm:12.0.0" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/caddd5f544b2006e88fa6b0124d8d7b28208b83c72d7672d5ade44d794525d23b540f3396108c4eb9280dcb7c01f0bef50682f5b4b2c34291f7c5e211fd1417d languageName: node linkType: hard -"ssri@npm:^10.0.0": - version: 10.0.6 - resolution: "ssri@npm:10.0.6" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/e5a1e23a4057a86a97971465418f22ea89bd439ac36ade88812dd920e4e61873e8abd6a9b72a03a67ef50faa00a2daf1ab745c5a15b46d03e0544a0296354227 +"statuses@npm:2.0.1": + version: 2.0.1 + resolution: "statuses@npm:2.0.1" + checksum: 10c0/34378b207a1620a24804ce8b5d230fea0c279f00b18a7209646d5d47e419d1cc23e7cbf33a25a1e51ac38973dc2ac2e1e9c647a8e481ef365f77668d72becfd0 languageName: node linkType: hard @@ -7228,12 +6327,10 @@ __metadata: languageName: node linkType: hard -"streamfilter@npm:^1.0.5": - version: 1.0.7 - resolution: "streamfilter@npm:1.0.7" - dependencies: - readable-stream: "npm:^2.0.2" - checksum: 10c0/457cfeb40c565e4efba968c71f60bf83e11329342c1dd9ee8f76bdf5d5b01afa5149e8741a6d0cb55aedac63d2128d48d8e43bb145a8cc0b6edd4c3292b4a8e0 +"stream-slice@npm:^0.1.2": + version: 0.1.2 + resolution: "stream-slice@npm:0.1.2" + checksum: 10c0/fe9ccd8adfff2e2754617d3fd4afe9aa677c69d51ccd94b34909ae669d5882ed4b2753893c4dbd4100495c0deda51adbaa7bfe340e6b340e52211b32faa0e835 languageName: node linkType: hard @@ -7248,38 +6345,6 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^1.0.1": - version: 1.0.2 - resolution: "string-width@npm:1.0.2" - dependencies: - code-point-at: "npm:^1.0.0" - is-fullwidth-code-point: "npm:^1.0.0" - strip-ansi: "npm:^3.0.0" - checksum: 10c0/c558438baed23a9ab9370bb6a939acbdb2b2ffc517838d651aad0f5b2b674fb85d460d9b1d0b6a4c210dffd09e3235222d89a5bd4c0c1587f78b2bb7bc00c65e - languageName: node - linkType: hard - -"string-width@npm:^2.0.0, string-width@npm:^2.1.1": - version: 2.1.1 - resolution: "string-width@npm:2.1.1" - dependencies: - is-fullwidth-code-point: "npm:^2.0.0" - strip-ansi: "npm:^4.0.0" - checksum: 10c0/e5f2b169fcf8a4257a399f95d069522f056e92ec97dbdcb9b0cdf14d688b7ca0b1b1439a1c7b9773cd79446cbafd582727279d6bfdd9f8edd306ea5e90e5b610 - languageName: node - linkType: hard - -"string-width@npm:^3.0.0": - version: 3.1.0 - resolution: "string-width@npm:3.1.0" - dependencies: - emoji-regex: "npm:^7.0.1" - is-fullwidth-code-point: "npm:^2.0.0" - strip-ansi: "npm:^5.1.0" - checksum: 10c0/85fa0d4f106e7999bb68c1c640c76fa69fb8c069dab75b009e29c123914e2d3b532e6cfa4b9d1bd913176fc83dedd7a2d7bf40d21a81a8a1978432cedfb65b91 - languageName: node - linkType: hard - "string-width@npm:^5.0.1, string-width@npm:^5.1.2": version: 5.1.2 resolution: "string-width@npm:5.1.2" @@ -7291,46 +6356,61 @@ __metadata: languageName: node linkType: hard -"string.prototype.matchall@npm:^4.0.11": - version: 4.0.11 - resolution: "string.prototype.matchall@npm:4.0.11" +"string.prototype.matchall@npm:^4.0.12": + version: 4.0.12 + resolution: "string.prototype.matchall@npm:4.0.12" dependencies: - call-bind: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" + es-abstract: "npm:^1.23.6" es-errors: "npm:^1.3.0" es-object-atoms: "npm:^1.0.0" - get-intrinsic: "npm:^1.2.4" - gopd: "npm:^1.0.1" - has-symbols: "npm:^1.0.3" - internal-slot: "npm:^1.0.7" - regexp.prototype.flags: "npm:^1.5.2" + get-intrinsic: "npm:^1.2.6" + gopd: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + internal-slot: "npm:^1.1.0" + regexp.prototype.flags: "npm:^1.5.3" set-function-name: "npm:^2.0.2" - side-channel: "npm:^1.0.6" - checksum: 10c0/915a2562ac9ab5e01b7be6fd8baa0b2b233a0a9aa975fcb2ec13cc26f08fb9a3e85d5abdaa533c99c6fc4c5b65b914eba3d80c4aff9792a4c9fed403f28f7d9d + side-channel: "npm:^1.1.0" + checksum: 10c0/1a53328ada73f4a77f1fdf1c79414700cf718d0a8ef6672af5603e709d26a24f2181208144aed7e858b1bcc1a0d08567a570abfb45567db4ae47637ed2c2f85c languageName: node linkType: hard -"string.prototype.trim@npm:^1.2.9": - version: 1.2.9 - resolution: "string.prototype.trim@npm:1.2.9" +"string.prototype.repeat@npm:^1.0.0": + version: 1.0.0 + resolution: "string.prototype.repeat@npm:1.0.0" dependencies: - call-bind: "npm:^1.0.7" + define-properties: "npm:^1.1.3" + es-abstract: "npm:^1.17.5" + checksum: 10c0/94c7978566cffa1327d470fd924366438af9b04b497c43a9805e476e2e908aa37a1fd34cc0911156c17556dab62159d12c7b92b3cc304c3e1281fe4c8e668f40 + languageName: node + linkType: hard + +"string.prototype.trim@npm:^1.2.10": + version: 1.2.10 + resolution: "string.prototype.trim@npm:1.2.10" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.2" + define-data-property: "npm:^1.1.4" define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.0" + es-abstract: "npm:^1.23.5" es-object-atoms: "npm:^1.0.0" - checksum: 10c0/dcef1a0fb61d255778155006b372dff8cc6c4394bc39869117e4241f41a2c52899c0d263ffc7738a1f9e61488c490b05c0427faa15151efad721e1a9fb2663c2 + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/8a8854241c4b54a948e992eb7dd6b8b3a97185112deb0037a134f5ba57541d8248dd610c966311887b6c2fd1181a3877bffb14d873ce937a344535dabcc648f8 languageName: node linkType: hard -"string.prototype.trimend@npm:^1.0.8": - version: 1.0.8 - resolution: "string.prototype.trimend@npm:1.0.8" +"string.prototype.trimend@npm:^1.0.9": + version: 1.0.9 + resolution: "string.prototype.trimend@npm:1.0.9" dependencies: - call-bind: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.2" define-properties: "npm:^1.2.1" es-object-atoms: "npm:^1.0.0" - checksum: 10c0/0a0b54c17c070551b38e756ae271865ac6cc5f60dabf2e7e343cceae7d9b02e1a1120a824e090e79da1b041a74464e8477e2da43e2775c85392be30a6f60963c + checksum: 10c0/59e1a70bf9414cb4c536a6e31bef5553c8ceb0cf44d8b4d0ed65c9653358d1c64dd0ec203b100df83d0413bbcde38b8c5d49e14bc4b86737d74adc593a0d35b6 languageName: node linkType: hard @@ -7345,15 +6425,6 @@ __metadata: languageName: node linkType: hard -"string_decoder@npm:^1.1.1": - version: 1.3.0 - resolution: "string_decoder@npm:1.3.0" - dependencies: - safe-buffer: "npm:~5.2.0" - checksum: 10c0/810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d - languageName: node - linkType: hard - "string_decoder@npm:~1.1.1": version: 1.1.1 resolution: "string_decoder@npm:1.1.1" @@ -7372,34 +6443,7 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1": - version: 3.0.1 - resolution: "strip-ansi@npm:3.0.1" - dependencies: - ansi-regex: "npm:^2.0.0" - checksum: 10c0/f6e7fbe8e700105dccf7102eae20e4f03477537c74b286fd22cfc970f139002ed6f0d9c10d0e21aa9ed9245e0fa3c9275930e8795c5b947da136e4ecb644a70f - languageName: node - linkType: hard - -"strip-ansi@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-ansi@npm:4.0.0" - dependencies: - ansi-regex: "npm:^3.0.0" - checksum: 10c0/d75d9681e0637ea316ddbd7d4d3be010b1895a17e885155e0ed6a39755ae0fd7ef46e14b22162e66a62db122d3a98ab7917794e255532ab461bb0a04feb03e7d - languageName: node - linkType: hard - -"strip-ansi@npm:^5.1.0": - version: 5.2.0 - resolution: "strip-ansi@npm:5.2.0" - dependencies: - ansi-regex: "npm:^4.1.0" - checksum: 10c0/de4658c8a097ce3b15955bc6008f67c0790f85748bdc025b7bc8c52c7aee94bc4f9e50624516150ed173c3db72d851826cd57e7a85fe4e4bb6dbbebd5d297fdf - languageName: node - linkType: hard - -"strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0": +"strip-ansi@npm:^7.0.1": version: 7.1.0 resolution: "strip-ansi@npm:7.1.0" dependencies: @@ -7408,13 +6452,6 @@ __metadata: languageName: node linkType: hard -"strip-eof@npm:^1.0.0": - version: 1.0.0 - resolution: "strip-eof@npm:1.0.0" - checksum: 10c0/f336beed8622f7c1dd02f2cbd8422da9208fae81daf184f73656332899978919d5c0ca84dc6cfc49ad1fc4dd7badcde5412a063cf4e0d7f8ed95a13a63f68f45 - languageName: node - linkType: hard - "strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" @@ -7422,178 +6459,134 @@ __metadata: languageName: node linkType: hard -"stylelint-config-prettier-scss@npm:^1.0.0": - version: 1.0.0 - resolution: "stylelint-config-prettier-scss@npm:1.0.0" - peerDependencies: - stylelint: ">=15.0.0" - bin: - stylelint-config-prettier-scss: bin/check.js - stylelint-config-prettier-scss-check: bin/check.js - checksum: 10c0/4d5e1d1c200d4611b5b7bd2d2528cc9e301f26645802a2774aec192c4c2949cbf5a0147eba8b2e6e4ff14a071b03024f3034bb1b4fda37a8ed5a0081a9597d4d - languageName: node - linkType: hard - -"stylelint-config-recommended-scss@npm:^14.0.0": - version: 14.1.0 - resolution: "stylelint-config-recommended-scss@npm:14.1.0" +"stylelint-config-css-modules@npm:^4.4.0": + version: 4.4.0 + resolution: "stylelint-config-css-modules@npm:4.4.0" dependencies: - postcss-scss: "npm:^4.0.9" - stylelint-config-recommended: "npm:^14.0.1" - stylelint-scss: "npm:^6.4.0" + stylelint-scss: "npm:^6.0.0" peerDependencies: - postcss: ^8.3.3 - stylelint: ^16.6.1 - peerDependenciesMeta: - postcss: + stylelint: ^14.5.1 || ^15.0.0 || ^16.0.0 + dependenciesMeta: + stylelint-scss: optional: true - checksum: 10c0/0a1c1bb6d9f7a21acea82e12fee1b36a195181ae1dd0d8b59145a56f76232a80d5b706269bc4ca4929680d36f10371bd8a7d0aeeee468fa9119a3b56410b052f + checksum: 10c0/4611720edafeebde80ba55337ec0853667bc02a6fad3723c5260ae7d891aa8920812896f420b327b526c53d9fb688910f3a2e20bdb28a1ec6823272804db13af languageName: node linkType: hard -"stylelint-config-recommended@npm:^14.0.1": - version: 14.0.1 - resolution: "stylelint-config-recommended@npm:14.0.1" +"stylelint-config-recommended@npm:^15.0.0": + version: 15.0.0 + resolution: "stylelint-config-recommended@npm:15.0.0" peerDependencies: - stylelint: ^16.1.0 - checksum: 10c0/a0a0ecd91f4d193bbe2cc3408228f8a2d8fcb2b2578d77233f86780c9247c796a04e16aad7a91d97cb918e2de34b6a8062bab66ee017c3835d855081d94f4828 + stylelint: ^16.13.0 + checksum: 10c0/de82e675e7d0cdbc486beee1f76002d5a5676247c1780fbe04f6adb617b016033f18f3361f4e99a76fc4d2115fbfc97786d9cf87ee7d90a345e146de35b04ab8 languageName: node linkType: hard -"stylelint-config-standard-scss@npm:^13.1.0": - version: 13.1.0 - resolution: "stylelint-config-standard-scss@npm:13.1.0" +"stylelint-config-standard@npm:^37.0.0": + version: 37.0.0 + resolution: "stylelint-config-standard@npm:37.0.0" dependencies: - stylelint-config-recommended-scss: "npm:^14.0.0" - stylelint-config-standard: "npm:^36.0.0" + stylelint-config-recommended: "npm:^15.0.0" peerDependencies: - postcss: ^8.3.3 - stylelint: ^16.3.1 - peerDependenciesMeta: - postcss: - optional: true - checksum: 10c0/d07cae806ee8b3e77684f019a8b22cc32642373da8053e6ae7ed716f8ddbe6ea1f7323633a6a1bbc9aa08c6a3dceb1dcf053d83fdd10d076b5a01da6e86801ae + stylelint: ^16.13.0 + checksum: 10c0/99c184384126f8676061c857e36d6d58fd9b391c1c1ec94a3f019c23ba1e0dc7665fc064a630f6ee66bc8624a6fd850fc7ab33ff086f5fde7b46d4ae0d92edf5 languageName: node linkType: hard -"stylelint-config-standard@npm:^36.0.0": - version: 36.0.1 - resolution: "stylelint-config-standard@npm:36.0.1" +"stylelint-order@npm:^6.0.4": + version: 6.0.4 + resolution: "stylelint-order@npm:6.0.4" dependencies: - stylelint-config-recommended: "npm:^14.0.1" + postcss: "npm:^8.4.32" + postcss-sorting: "npm:^8.0.2" peerDependencies: - stylelint: ^16.1.0 - checksum: 10c0/7f9b954694358e77be5110418f31335be579ce59dd952bc3c6a9449265297db3170ec520e0905769253b48b99c3109a95c71f5b985bf402e48fd6c89b5364cb2 + stylelint: ^14.0.0 || ^15.0.0 || ^16.0.1 + checksum: 10c0/9a1f6ba7ab04855462bfae28fe36ad2a297fec56f42da2f588b57295b89b72e6f517d5e35ecbcefb11fcc373f3db40f0e6a8eefb41a4d267550ac6324f12a3ca languageName: node linkType: hard -"stylelint-prettier@npm:^5.0.0": - version: 5.0.0 - resolution: "stylelint-prettier@npm:5.0.0" +"stylelint-prettier@npm:^5.0.2": + version: 5.0.2 + resolution: "stylelint-prettier@npm:5.0.2" dependencies: prettier-linter-helpers: "npm:^1.0.0" peerDependencies: prettier: ">=3.0.0" stylelint: ">=16.0.0" - checksum: 10c0/e884377890c8183658c96eb6f5f93d673994fb58c0c979357b1ed8fa0eda24eddde1f26821c862b8dd458589f30b9d7d8bf05a101f5086c7d2b75c64b4ee1d18 + checksum: 10c0/4755471cd8c8f3d308b25c3ad5db9eb1546dea6f6ba048ca0b83e9ca58169d29456deb50cfa13198a7f7178f9b7e64fddcbb7d0dd0c59669680f5bc6432c438b languageName: node linkType: hard -"stylelint-scss@npm:^6.3.2, stylelint-scss@npm:^6.4.0": - version: 6.4.1 - resolution: "stylelint-scss@npm:6.4.1" +"stylelint-scss@npm:^6.0.0": + version: 6.10.1 + resolution: "stylelint-scss@npm:6.10.1" dependencies: - known-css-properties: "npm:^0.34.0" + css-tree: "npm:^3.0.1" + is-plain-object: "npm:^5.0.0" + known-css-properties: "npm:^0.35.0" + mdn-data: "npm:^2.14.0" postcss-media-query-parser: "npm:^0.2.3" - postcss-resolve-nested-selector: "npm:^0.1.1" - postcss-selector-parser: "npm:^6.1.0" + postcss-resolve-nested-selector: "npm:^0.1.6" + postcss-selector-parser: "npm:^7.0.0" postcss-value-parser: "npm:^4.2.0" peerDependencies: stylelint: ^16.0.2 - checksum: 10c0/0ff90a3403cf3a2fc8e2f911389d0ab0d4d611fbb9b2cd902ae0cb68fa0627767816ce715d4db6b2017fbec11764d3097b0215a8f61c0b5fc2e0443cdce32d07 + checksum: 10c0/3fc9b456bff649840783b92365fc30f5e54539794711744f09df45020d2a3d86164e8e16948a35b3b167f6fc8109837d487253faebd8b1ac29800e67a7f7adc9 languageName: node linkType: hard -"stylelint@npm:^16.6.1": - version: 16.6.1 - resolution: "stylelint@npm:16.6.1" +"stylelint@npm:^16.13.2": + version: 16.13.2 + resolution: "stylelint@npm:16.13.2" dependencies: - "@csstools/css-parser-algorithms": "npm:^2.6.3" - "@csstools/css-tokenizer": "npm:^2.3.1" - "@csstools/media-query-list-parser": "npm:^2.1.11" - "@csstools/selector-specificity": "npm:^3.1.1" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/media-query-list-parser": "npm:^4.0.2" + "@csstools/selector-specificity": "npm:^5.0.0" "@dual-bundle/import-meta-resolve": "npm:^4.1.0" balanced-match: "npm:^2.0.0" colord: "npm:^2.9.3" cosmiconfig: "npm:^9.0.0" - css-functions-list: "npm:^3.2.2" - css-tree: "npm:^2.3.1" - debug: "npm:^4.3.4" - fast-glob: "npm:^3.3.2" + css-functions-list: "npm:^3.2.3" + css-tree: "npm:^3.1.0" + debug: "npm:^4.3.7" + fast-glob: "npm:^3.3.3" fastest-levenshtein: "npm:^1.0.16" - file-entry-cache: "npm:^9.0.0" + file-entry-cache: "npm:^10.0.5" global-modules: "npm:^2.0.0" globby: "npm:^11.1.0" globjoin: "npm:^0.1.4" html-tags: "npm:^3.3.1" - ignore: "npm:^5.3.1" + ignore: "npm:^7.0.1" imurmurhash: "npm:^0.1.4" is-plain-object: "npm:^5.0.0" - known-css-properties: "npm:^0.31.0" + known-css-properties: "npm:^0.35.0" mathml-tag-names: "npm:^2.1.3" meow: "npm:^13.2.0" - micromatch: "npm:^4.0.7" + micromatch: "npm:^4.0.8" normalize-path: "npm:^3.0.0" - picocolors: "npm:^1.0.1" - postcss: "npm:^8.4.38" - postcss-resolve-nested-selector: "npm:^0.1.1" - postcss-safe-parser: "npm:^7.0.0" - postcss-selector-parser: "npm:^6.1.0" + picocolors: "npm:^1.1.1" + postcss: "npm:^8.4.49" + postcss-resolve-nested-selector: "npm:^0.1.6" + postcss-safe-parser: "npm:^7.0.1" + postcss-selector-parser: "npm:^7.0.0" postcss-value-parser: "npm:^4.2.0" resolve-from: "npm:^5.0.0" string-width: "npm:^4.2.3" - strip-ansi: "npm:^7.1.0" - supports-hyperlinks: "npm:^3.0.0" + supports-hyperlinks: "npm:^3.1.0" svg-tags: "npm:^1.0.0" - table: "npm:^6.8.2" + table: "npm:^6.9.0" write-file-atomic: "npm:^5.0.1" bin: stylelint: bin/stylelint.mjs - checksum: 10c0/8dc9b0024d6fb109380a142171ab8a134c3863aa8b8736f0083310a0d05f173dcda5680f29267697dfa0aaeb2f08aef4ef113e4bb4f8582fcfdd97f35be51d71 - languageName: node - linkType: hard - -"stylis-plugin-rtl@npm:^2.1.1": - version: 2.1.1 - resolution: "stylis-plugin-rtl@npm:2.1.1" - dependencies: - cssjanus: "npm:^2.0.1" - peerDependencies: - stylis: 4.x - checksum: 10c0/706640bba51ca75e3a824f781b59e8d8b8d034a10b839aa93daea166aac6cc67a4e7c063496ea8a09c396b639cff9859a42f5d03937d8f89f8922fd6c7435739 + checksum: 10c0/07d5f6f80a6671d0a02ef448977c45b2ba45060b2942a5619297694b6b653b931284a174b36154b03c23ae302abfdbbba0ca61f4142734e98e6703511f1f363b languageName: node linkType: hard "stylis@npm:4.2.0": version: 4.2.0 resolution: "stylis@npm:4.2.0" - checksum: 10c0/a7128ad5a8ed72652c6eba46bed4f416521bc9745a460ef5741edc725252cebf36ee45e33a8615a7057403c93df0866ab9ee955960792db210bb80abd5ac6543 - languageName: node - linkType: hard - -"stylis@npm:^4.3.0, stylis@npm:^4.3.1": - version: 4.3.4 - resolution: "stylis@npm:4.3.4" - checksum: 10c0/4899c2674cd2538e314257abd1ba7ea3c2176439659ddac6593c78192cfd4a06f814a0a4fc69bc7f8fcc6b997e13d383dd9b578b71074746a0fb86045a83e42d - languageName: node - linkType: hard - -"supports-color@npm:^5.3.0": - version: 5.5.0 - resolution: "supports-color@npm:5.5.0" - dependencies: - has-flag: "npm:^3.0.0" - checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 + checksum: 10c0/a7128ad5a8ed72652c6eba46bed4f416521bc9745a460ef5741edc725252cebf36ee45e33a8615a7057403c93df0866ab9ee955960792db210bb80abd5ac6543 languageName: node linkType: hard @@ -7606,13 +6599,13 @@ __metadata: languageName: node linkType: hard -"supports-hyperlinks@npm:^3.0.0": - version: 3.0.0 - resolution: "supports-hyperlinks@npm:3.0.0" +"supports-hyperlinks@npm:^3.1.0": + version: 3.1.0 + resolution: "supports-hyperlinks@npm:3.1.0" dependencies: has-flag: "npm:^4.0.0" supports-color: "npm:^7.0.0" - checksum: 10c0/36aaa55e67645dded8e0f846fd81d7dd05ce82ea81e62347f58d86213577eb627b2b45298656ce7a70e7155e39f071d0d3f83be91e112aed801ebaa8db1ef1d0 + checksum: 10c0/78cc3e17eb27e6846fa355a8ebf343befe36272899cd409e45317a06c1997e95c23ff99d91080a517bd8c96508d4fa456e6ceb338c02ba5d7544277dbec0f10f languageName: node linkType: hard @@ -7630,69 +6623,34 @@ __metadata: languageName: node linkType: hard -"synckit@npm:^0.8.6": - version: 0.8.8 - resolution: "synckit@npm:0.8.8" - dependencies: - "@pkgr/core": "npm:^0.1.0" - tslib: "npm:^2.6.2" - checksum: 10c0/c3d3aa8e284f3f84f2f868b960c9f49239b364e35f6d20825a448449a3e9c8f49fe36cdd5196b30615682f007830d46f2ea354003954c7336723cb821e4b6519 - languageName: node - linkType: hard - -"table@npm:^6.8.2": - version: 6.8.2 - resolution: "table@npm:6.8.2" +"table@npm:^6.9.0": + version: 6.9.0 + resolution: "table@npm:6.9.0" dependencies: ajv: "npm:^8.0.1" lodash.truncate: "npm:^4.4.2" slice-ansi: "npm:^4.0.0" string-width: "npm:^4.2.3" strip-ansi: "npm:^6.0.1" - checksum: 10c0/f8b348af38ee34e419d8ce7306ba00671ce6f20e861ccff22555f491ba264e8416086063ce278a8d81abfa8d23b736ec2cca7ac4029b5472f63daa4b4688b803 - languageName: node - linkType: hard - -"tar@npm:^6.1.11, tar@npm:^6.2.1": - version: 6.2.1 - resolution: "tar@npm:6.2.1" - dependencies: - chownr: "npm:^2.0.0" - fs-minipass: "npm:^2.0.0" - minipass: "npm:^5.0.0" - minizlib: "npm:^2.1.1" - mkdirp: "npm:^1.0.3" - yallist: "npm:^4.0.0" - checksum: 10c0/a5eca3eb50bc11552d453488344e6507156b9193efd7635e98e867fab275d527af53d8866e2370cd09dfe74378a18111622ace35af6a608e5223a7d27fe99537 - languageName: node - linkType: hard - -"term-size@npm:^1.2.0": - version: 1.2.0 - resolution: "term-size@npm:1.2.0" - dependencies: - execa: "npm:^0.7.0" - checksum: 10c0/2fbb2668cdd3b5e63038c28355145e98789d16143fc6754462cd4a194706c7153f15c2a6f05f579ffed27bcf2f35bdf752007927457128cc9a9ce3ec20075649 - languageName: node - linkType: hard - -"text-table@npm:^0.2.0": - version: 0.2.0 - resolution: "text-table@npm:0.2.0" - checksum: 10c0/02805740c12851ea5982686810702e2f14369a5f4c5c40a836821e3eefc65ffeec3131ba324692a37608294b0fd8c1e55a2dd571ffed4909822787668ddbee5c + checksum: 10c0/35646185712bb65985fbae5975dda46696325844b78735f95faefae83e86df0a265277819a3e67d189de6e858c509b54e66ca3958ffd51bde56ef1118d455bf4 languageName: node linkType: hard -"through2-filter@npm:^3.0.0": - version: 3.1.0 - resolution: "through2-filter@npm:3.1.0" +"tar@npm:^7.4.3": + version: 7.4.3 + resolution: "tar@npm:7.4.3" dependencies: - through2: "npm:^4.0.2" - checksum: 10c0/78efd97421df7dbb6b5186266a45c0f3e26d371328d3fea42f4bd8998974c5a67f676ad20b46c4c69bf6720f9fe0be3dc0fc5d2d4566482efd2f1371aac478de + "@isaacs/fs-minipass": "npm:^4.0.0" + chownr: "npm:^3.0.0" + minipass: "npm:^7.1.2" + minizlib: "npm:^3.0.1" + mkdirp: "npm:^3.0.1" + yallist: "npm:^5.0.0" + checksum: 10c0/d4679609bb2a9b48eeaf84632b6d844128d2412b95b6de07d53d8ee8baf4ca0857c9331dfa510390a0727b550fd543d4d1a10995ad86cdf078423fbb8d99831d languageName: node linkType: hard -"through2@npm:^2.0.0, through2@npm:^2.0.1, through2@npm:^2.0.3": +"through2@npm:^2.0.3": version: 2.0.5 resolution: "through2@npm:2.0.5" dependencies: @@ -7702,32 +6660,6 @@ __metadata: languageName: node linkType: hard -"through2@npm:^3.0.0": - version: 3.0.2 - resolution: "through2@npm:3.0.2" - dependencies: - inherits: "npm:^2.0.4" - readable-stream: "npm:2 || 3" - checksum: 10c0/8ea17efa2ce5b78ef5c52d08e29d0dbdad9c321c2add5192bba3434cae25b2319bf9cdac1c54c3bfbd721438a30565ca6f3f19eb79f62341dafc5a12429d2ccc - languageName: node - linkType: hard - -"through2@npm:^4.0.2": - version: 4.0.2 - resolution: "through2@npm:4.0.2" - dependencies: - readable-stream: "npm:3" - checksum: 10c0/3741564ae99990a4a79097fe7a4152c22348adc4faf2df9199a07a66c81ed2011da39f631e479fdc56483996a9d34a037ad64e76d79f18c782ab178ea9b6778c - languageName: node - linkType: hard - -"time-stamp@npm:^1.0.0": - version: 1.1.0 - resolution: "time-stamp@npm:1.1.0" - checksum: 10c0/99340b52a6ab3ce805c30c1884baee06251c54ef37d852979edf2b2b1d649664fc1ced50e0c7df90f8deb3dc28cb310af3e6002c2b63966c68f488e0bac3e5c5 - languageName: node - linkType: hard - "tiny-case@npm:^1.0.3": version: 1.0.3 resolution: "tiny-case@npm:1.0.3" @@ -7735,23 +6667,6 @@ __metadata: languageName: node linkType: hard -"to-absolute-glob@npm:^2.0.0": - version: 2.0.2 - resolution: "to-absolute-glob@npm:2.0.2" - dependencies: - is-absolute: "npm:^1.0.0" - is-negated-glob: "npm:^1.0.0" - checksum: 10c0/7c5384222d6bd8f68d105bcc618794dfc3433de74eea195da172f27e107e8b2e1e1991e4adaf837f65e04623e4b03d90e19fd48aaeecfc89b6f642da2510c4d5 - languageName: node - linkType: hard - -"to-fast-properties@npm:^2.0.0": - version: 2.0.0 - resolution: "to-fast-properties@npm:2.0.0" - checksum: 10c0/b214d21dbfb4bce3452b6244b336806ffea9c05297148d32ebb428d5c43ce7545bdfc65a1ceb58c9ef4376a65c0cb2854d645f33961658b3e3b4f84910ddcdd7 - languageName: node - linkType: hard - "to-regex-range@npm:^5.0.1": version: 5.0.1 resolution: "to-regex-range@npm:5.0.1" @@ -7761,21 +6676,10 @@ __metadata: languageName: node linkType: hard -"to-through@npm:^2.0.0": - version: 2.0.0 - resolution: "to-through@npm:2.0.0" - dependencies: - through2: "npm:^2.0.3" - checksum: 10c0/f8a7b0b38c51bcc018c38e6867588ac72120bd62232250b49a0fc209bd53ed66461ff85dc50b398c8e3686aa3e61165bce1dce4e89930f2f973b0fd3f64e4d2c - languageName: node - linkType: hard - -"to-time@npm:^1.0.2": - version: 1.0.2 - resolution: "to-time@npm:1.0.2" - dependencies: - bignumber.js: "npm:^2.4.0" - checksum: 10c0/6399da74331197654ff3ee3b6aa969831c667aeb7b8527a07e7bb1bac2b599eda700631137430442bd946e3570c6a97f8a9b7347af19a6bd4733b82ada1f04ca +"toidentifier@npm:1.0.1": + version: 1.0.1 + resolution: "toidentifier@npm:1.0.1" + checksum: 10c0/93937279934bd66cc3270016dd8d0afec14fb7c94a05c72dc57321f8bd1fa97e5bea6d1f7c89e728d077ca31ea125b78320a616a6c6cd0e6b9cb94cb864381c1 languageName: node linkType: hard @@ -7786,35 +6690,33 @@ __metadata: languageName: node linkType: hard -"ts-api-utils@npm:^1.3.0": - version: 1.3.0 - resolution: "ts-api-utils@npm:1.3.0" +"ts-api-utils@npm:^2.0.0": + version: 2.0.0 + resolution: "ts-api-utils@npm:2.0.0" peerDependencies: - typescript: ">=4.2.0" - checksum: 10c0/f54a0ba9ed56ce66baea90a3fa087a484002e807f28a8ccb2d070c75e76bde64bd0f6dce98b3802834156306050871b67eec325cb4e918015a360a3f0868c77c - languageName: node - linkType: hard - -"ts-invariant@npm:^0.10.3": - version: 0.10.3 - resolution: "ts-invariant@npm:0.10.3" - dependencies: - tslib: "npm:^2.1.0" - checksum: 10c0/2fbc178d5903d325ee0b87fad38827eac11888b6e86979b06754fd4bcdcf44c2a99b8bcd5d59d149c0464ede55ae810b02a2aee6835ad10efe4dd0e22efd68c0 + typescript: ">=4.8.4" + checksum: 10c0/6165e29a5b75bd0218e3cb0f9ee31aa893dbd819c2e46dbb086c841121eb0436ed47c2c18a20cb3463d74fd1fb5af62e2604ba5971cc48e5b38ebbdc56746dfc languageName: node linkType: hard -"tslib@npm:^2.1.0": - version: 2.7.0 - resolution: "tslib@npm:2.7.0" - checksum: 10c0/469e1d5bf1af585742128827000711efa61010b699cb040ab1800bcd3ccdd37f63ec30642c9e07c4439c1db6e46345582614275daca3e0f4abae29b0083f04a6 +"tsconfck@npm:^3.0.3": + version: 3.1.4 + resolution: "tsconfck@npm:3.1.4" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + bin: + tsconfck: bin/tsconfck.js + checksum: 10c0/5120e91b3388574b449d57d08f45d05d9966cf4b9d6aa1018652c1fff6d7d37b1ed099b07e6ebf6099aa40b8a16968dd337198c55b7274892849112b942861ed languageName: node linkType: hard -"tslib@npm:^2.6.2": - version: 2.6.3 - resolution: "tslib@npm:2.6.3" - checksum: 10c0/2598aef53d9dbe711af75522464b2104724d6467b26a60f2bdac8297d2b5f1f6b86a71f61717384aa8fd897240467aaa7bcc36a0700a0faf751293d1331db39a +"turbo-stream@npm:2.4.0": + version: 2.4.0 + resolution: "turbo-stream@npm:2.4.0" + checksum: 10c0/e68b2569f1f16e6e9633d090c6024b2ae9f0e97bfeacb572451ca3732e120ebbb546f3bc4afc717c46cb57b5aea6104e04ef497f9912eef6a7641e809518e98a languageName: node linkType: hard @@ -7827,13 +6729,6 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^0.20.2": - version: 0.20.2 - resolution: "type-fest@npm:0.20.2" - checksum: 10c0/dea9df45ea1f0aaa4e2d3bed3f9a0bfe9e5b2592bddb92eb1bf06e50bcf98dbb78189668cd8bc31a0511d3fc25539b4cd5c704497e53e93e2d40ca764b10bfc3 - languageName: node - linkType: hard - "type-fest@npm:^2.19.0": version: 2.19.0 resolution: "type-fest@npm:2.19.0" @@ -7841,154 +6736,176 @@ __metadata: languageName: node linkType: hard -"typed-array-buffer@npm:^1.0.2": - version: 1.0.2 - resolution: "typed-array-buffer@npm:1.0.2" +"type-is@npm:~1.6.18": + version: 1.6.18 + resolution: "type-is@npm:1.6.18" dependencies: - call-bind: "npm:^1.0.7" + media-typer: "npm:0.3.0" + mime-types: "npm:~2.1.24" + checksum: 10c0/a23daeb538591b7efbd61ecf06b6feb2501b683ffdc9a19c74ef5baba362b4347e42f1b4ed81f5882a8c96a3bfff7f93ce3ffaf0cbbc879b532b04c97a55db9d + languageName: node + linkType: hard + +"typed-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "typed-array-buffer@npm:1.0.3" + dependencies: + call-bound: "npm:^1.0.3" es-errors: "npm:^1.3.0" - is-typed-array: "npm:^1.1.13" - checksum: 10c0/9e043eb38e1b4df4ddf9dde1aa64919ae8bb909571c1cc4490ba777d55d23a0c74c7d73afcdd29ec98616d91bb3ae0f705fad4421ea147e1daf9528200b562da + is-typed-array: "npm:^1.1.14" + checksum: 10c0/1105071756eb248774bc71646bfe45b682efcad93b55532c6ffa4518969fb6241354e4aa62af679ae83899ec296d69ef88f1f3763657cdb3a4d29321f7b83079 languageName: node linkType: hard -"typed-array-byte-length@npm:^1.0.1": - version: 1.0.1 - resolution: "typed-array-byte-length@npm:1.0.1" +"typed-array-byte-length@npm:^1.0.3": + version: 1.0.3 + resolution: "typed-array-byte-length@npm:1.0.3" dependencies: - call-bind: "npm:^1.0.7" + call-bind: "npm:^1.0.8" for-each: "npm:^0.3.3" - gopd: "npm:^1.0.1" - has-proto: "npm:^1.0.3" - is-typed-array: "npm:^1.1.13" - checksum: 10c0/fcebeffb2436c9f355e91bd19e2368273b88c11d1acc0948a2a306792f1ab672bce4cfe524ab9f51a0505c9d7cd1c98eff4235c4f6bfef6a198f6cfc4ff3d4f3 + gopd: "npm:^1.2.0" + has-proto: "npm:^1.2.0" + is-typed-array: "npm:^1.1.14" + checksum: 10c0/6ae083c6f0354f1fce18b90b243343b9982affd8d839c57bbd2c174a5d5dc71be9eb7019ffd12628a96a4815e7afa85d718d6f1e758615151d5f35df841ffb3e languageName: node linkType: hard -"typed-array-byte-offset@npm:^1.0.2": - version: 1.0.2 - resolution: "typed-array-byte-offset@npm:1.0.2" +"typed-array-byte-offset@npm:^1.0.4": + version: 1.0.4 + resolution: "typed-array-byte-offset@npm:1.0.4" dependencies: available-typed-arrays: "npm:^1.0.7" - call-bind: "npm:^1.0.7" + call-bind: "npm:^1.0.8" for-each: "npm:^0.3.3" - gopd: "npm:^1.0.1" - has-proto: "npm:^1.0.3" - is-typed-array: "npm:^1.1.13" - checksum: 10c0/d2628bc739732072e39269389a758025f75339de2ed40c4f91357023c5512d237f255b633e3106c461ced41907c1bf9a533c7e8578066b0163690ca8bc61b22f + gopd: "npm:^1.2.0" + has-proto: "npm:^1.2.0" + is-typed-array: "npm:^1.1.15" + reflect.getprototypeof: "npm:^1.0.9" + checksum: 10c0/3d805b050c0c33b51719ee52de17c1cd8e6a571abdf0fffb110e45e8dd87a657e8b56eee94b776b13006d3d347a0c18a730b903cf05293ab6d92e99ff8f77e53 languageName: node linkType: hard -"typed-array-length@npm:^1.0.6": - version: 1.0.6 - resolution: "typed-array-length@npm:1.0.6" +"typed-array-length@npm:^1.0.7": + version: 1.0.7 + resolution: "typed-array-length@npm:1.0.7" dependencies: call-bind: "npm:^1.0.7" for-each: "npm:^0.3.3" gopd: "npm:^1.0.1" - has-proto: "npm:^1.0.3" is-typed-array: "npm:^1.1.13" possible-typed-array-names: "npm:^1.0.0" - checksum: 10c0/74253d7dc488eb28b6b2711cf31f5a9dcefc9c41b0681fd1c178ed0a1681b4468581a3626d39cd4df7aee3d3927ab62be06aa9ca74e5baf81827f61641445b77 + reflect.getprototypeof: "npm:^1.0.6" + checksum: 10c0/e38f2ae3779584c138a2d8adfa8ecf749f494af3cd3cdafe4e688ce51418c7d2c5c88df1bd6be2bbea099c3f7cea58c02ca02ed438119e91f162a9de23f61295 + languageName: node + linkType: hard + +"typescript-eslint@npm:^8.21.0": + version: 8.21.0 + resolution: "typescript-eslint@npm:8.21.0" + dependencies: + "@typescript-eslint/eslint-plugin": "npm:8.21.0" + "@typescript-eslint/parser": "npm:8.21.0" + "@typescript-eslint/utils": "npm:8.21.0" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.8.0" + checksum: 10c0/44e5c341ad7f0b41dce3b4ca7a4c0a399ebe51a5323d930750db1e308367b4813a620f4c2332a5774a1dccd0047ebbaf993a8b7effd67389e9069b29b5701520 languageName: node linkType: hard -"typescript@npm:^5.2.2": - version: 5.5.3 - resolution: "typescript@npm:5.5.3" +"typescript@npm:^5.7.2": + version: 5.7.3 + resolution: "typescript@npm:5.7.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/f52c71ccbc7080b034b9d3b72051d563601a4815bf3e39ded188e6ce60813f75dbedf11ad15dd4d32a12996a9ed8c7155b46c93a9b9c9bad1049766fe614bbdd + checksum: 10c0/b7580d716cf1824736cc6e628ab4cd8b51877408ba2be0869d2866da35ef8366dd6ae9eb9d0851470a39be17cbd61df1126f9e211d8799d764ea7431d5435afa languageName: node linkType: hard -"typescript@patch:typescript@npm%3A^5.2.2#optional!builtin": - version: 5.5.3 - resolution: "typescript@patch:typescript@npm%3A5.5.3#optional!builtin::version=5.5.3&hash=379a07" +"typescript@patch:typescript@npm%3A^5.7.2#optional!builtin": + version: 5.7.3 + resolution: "typescript@patch:typescript@npm%3A5.7.3#optional!builtin::version=5.7.3&hash=5786d5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/911c7811d61f57f07df79c4a35f56a0f426a65426a020e5fcd792f66559f399017205f5f10255329ab5a3d8c2d1f1d19530aeceffda70758a521fae1d469432e + checksum: 10c0/6fd7e0ed3bf23a81246878c613423730c40e8bdbfec4c6e4d7bf1b847cbb39076e56ad5f50aa9d7ebd89877999abaee216002d3f2818885e41c907caaa192cc4 languageName: node linkType: hard -"unbox-primitive@npm:^1.0.2": - version: 1.0.2 - resolution: "unbox-primitive@npm:1.0.2" +"unbox-primitive@npm:^1.1.0": + version: 1.1.0 + resolution: "unbox-primitive@npm:1.1.0" dependencies: - call-bind: "npm:^1.0.2" + call-bound: "npm:^1.0.3" has-bigints: "npm:^1.0.2" - has-symbols: "npm:^1.0.3" - which-boxed-primitive: "npm:^1.0.2" - checksum: 10c0/81ca2e81134167cc8f75fa79fbcc8a94379d6c61de67090986a2273850989dd3bae8440c163121b77434b68263e34787a675cbdcb34bb2f764c6b9c843a11b66 + has-symbols: "npm:^1.1.0" + which-boxed-primitive: "npm:^1.1.1" + checksum: 10c0/7dbd35ab02b0e05fe07136c72cb9355091242455473ec15057c11430129bab38b7b3624019b8778d02a881c13de44d63cd02d122ee782fb519e1de7775b5b982 languageName: node linkType: hard -"unc-path-regex@npm:^0.1.2": - version: 0.1.2 - resolution: "unc-path-regex@npm:0.1.2" - checksum: 10c0/bf9c781c4e2f38e6613ea17a51072e4b416840fbe6eeb244597ce9b028fac2fb6cfd3dde1f14111b02c245e665dc461aab8168ecc30b14364d02caa37f812996 +"undici-types@npm:~6.19.2": + version: 6.19.8 + resolution: "undici-types@npm:6.19.8" + checksum: 10c0/078afa5990fba110f6824823ace86073b4638f1d5112ee26e790155f481f2a868cc3e0615505b6f4282bdf74a3d8caad715fd809e870c2bb0704e3ea6082f344 languageName: node linkType: hard -"undici-types@npm:~5.26.4": - version: 5.26.5 - resolution: "undici-types@npm:5.26.5" - checksum: 10c0/bb673d7876c2d411b6eb6c560e0c571eef4a01c1c19925175d16e3a30c4c428181fb8d7ae802a261f283e4166a0ac435e2f505743aa9e45d893f9a3df017b501 +"undici@npm:^6.19.2": + version: 6.21.1 + resolution: "undici@npm:6.21.1" + checksum: 10c0/d604080e4f8db89b35a63b483b5f96a5f8b19ec9f716e934639345449405809d2997e1dd7212d67048f210e54534143384d712bd9075e4394f0788895ef9ca8e languageName: node linkType: hard -"unique-filename@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-filename@npm:3.0.0" +"unique-filename@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-filename@npm:4.0.0" dependencies: - unique-slug: "npm:^4.0.0" - checksum: 10c0/6363e40b2fa758eb5ec5e21b3c7fb83e5da8dcfbd866cc0c199d5534c42f03b9ea9ab069769cc388e1d7ab93b4eeef28ef506ab5f18d910ef29617715101884f + unique-slug: "npm:^5.0.0" + checksum: 10c0/38ae681cceb1408ea0587b6b01e29b00eee3c84baee1e41fd5c16b9ed443b80fba90c40e0ba69627e30855570a34ba8b06702d4a35035d4b5e198bf5a64c9ddc languageName: node linkType: hard -"unique-slug@npm:^4.0.0": - version: 4.0.0 - resolution: "unique-slug@npm:4.0.0" +"unique-slug@npm:^5.0.0": + version: 5.0.0 + resolution: "unique-slug@npm:5.0.0" dependencies: imurmurhash: "npm:^0.1.4" - checksum: 10c0/cb811d9d54eb5821b81b18205750be84cb015c20a4a44280794e915f5a0a70223ce39066781a354e872df3572e8155c228f43ff0cce94c7cbf4da2cc7cbdd635 + checksum: 10c0/d324c5a44887bd7e105ce800fcf7533d43f29c48757ac410afd42975de82cc38ea2035c0483f4de82d186691bf3208ef35c644f73aa2b1b20b8e651be5afd293 languageName: node linkType: hard -"unique-stream@npm:^2.0.2": - version: 2.3.1 - resolution: "unique-stream@npm:2.3.1" - dependencies: - json-stable-stringify-without-jsonify: "npm:^1.0.1" - through2-filter: "npm:^3.0.0" - checksum: 10c0/4827c5f249d1d760076d64e087d18618104ce5511112c85150b0dd76cea5ddd5a5fd143559597d07b519c2a19abd83f5cdaac3a30204d66cff63e986dd4cd18c +"universalify@npm:^2.0.0": + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a languageName: node linkType: hard -"universalify@npm:^0.1.0": - version: 0.1.2 - resolution: "universalify@npm:0.1.2" - checksum: 10c0/e70e0339f6b36f34c9816f6bf9662372bd241714dc77508d231d08386d94f2c4aa1ba1318614f92015f40d45aae1b9075cd30bd490efbe39387b60a76ca3f045 +"unpipe@npm:1.0.0, unpipe@npm:~1.0.0": + version: 1.0.0 + resolution: "unpipe@npm:1.0.0" + checksum: 10c0/193400255bd48968e5c5383730344fbb4fa114cdedfab26e329e50dd2d81b134244bb8a72c6ac1b10ab0281a58b363d06405632c9d49ca9dfd5e90cbd7d0f32c languageName: node linkType: hard -"update-browserslist-db@npm:^1.1.0": - version: 1.1.0 - resolution: "update-browserslist-db@npm:1.1.0" +"update-browserslist-db@npm:^1.1.1": + version: 1.1.2 + resolution: "update-browserslist-db@npm:1.1.2" dependencies: - escalade: "npm:^3.1.2" - picocolors: "npm:^1.0.1" + escalade: "npm:^3.2.0" + picocolors: "npm:^1.1.1" peerDependencies: browserslist: ">= 4.21.0" bin: update-browserslist-db: cli.js - checksum: 10c0/a7452de47785842736fb71547651c5bbe5b4dc1e3722ccf48a704b7b34e4dcf633991eaa8e4a6a517ffb738b3252eede3773bef673ef9021baa26b056d63a5b9 + checksum: 10c0/9cb353998d6d7d6ba1e46b8fa3db888822dd972212da4eda609d185eb5c3557a93fd59780ceb757afd4d84240518df08542736969e6a5d6d6ce2d58e9363aac6 languageName: node linkType: hard -"uri-js@npm:^4.2.2, uri-js@npm:^4.4.1": +"uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1" dependencies: @@ -7997,96 +6914,153 @@ __metadata: languageName: node linkType: hard -"use-sync-external-store@npm:1.2.0": - version: 1.2.0 - resolution: "use-sync-external-store@npm:1.2.0" +"util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 + languageName: node + linkType: hard + +"utils-merge@npm:1.0.1": + version: 1.0.1 + resolution: "utils-merge@npm:1.0.1" + checksum: 10c0/02ba649de1b7ca8854bfe20a82f1dfbdda3fb57a22ab4a8972a63a34553cf7aa51bc9081cf7e001b035b88186d23689d69e71b510e610a09a4c66f68aa95b672 + languageName: node + linkType: hard + +"valibot@npm:^0.41.0": + version: 0.41.0 + resolution: "valibot@npm:0.41.0" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/ac4814e5592524f242921157e791b022efe36e451fe0d4fd4d204322d5433a4fc300d63b0ade5185f8e0735ded044c70bcf6d2352db0f74d097a238cebd2da02 + typescript: ">=5" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/60485ac1235a83b09590cfb011d0ea17f0810ebe413132380b98bf3dfac7236205e22f2ca2a4c4b356c2324e450c119a39a3753b79764e2c113bb91d46ec4598 languageName: node linkType: hard -"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": - version: 1.0.2 - resolution: "util-deprecate@npm:1.0.2" - checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 +"validate-npm-package-license@npm:^3.0.4": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: "npm:^3.0.0" + spdx-expression-parse: "npm:^3.0.0" + checksum: 10c0/7b91e455a8de9a0beaa9fe961e536b677da7f48c9a493edf4d4d4a87fd80a7a10267d438723364e432c2fcd00b5650b5378275cded362383ef570276e6312f4f languageName: node linkType: hard -"value-or-function@npm:^3.0.0": - version: 3.0.0 - resolution: "value-or-function@npm:3.0.0" - checksum: 10c0/78a75b44543bb70ea3eee1804bbb101558f422335e3b62ed8864deeb85295efab1b109f607c3806b13c2fc48630d93f6c564b2796377a01a6302d355323ecebe +"validate-npm-package-name@npm:^5.0.0": + version: 5.0.1 + resolution: "validate-npm-package-name@npm:5.0.1" + checksum: 10c0/903e738f7387404bb72f7ac34e45d7010c877abd2803dc2d614612527927a40a6d024420033132e667b1bade94544b8a1f65c9431a4eb30d0ce0d80093cd1f74 languageName: node linkType: hard -"vinyl-fs@npm:^3.0.3": - version: 3.0.3 - resolution: "vinyl-fs@npm:3.0.3" - dependencies: - fs-mkdirp-stream: "npm:^1.0.0" - glob-stream: "npm:^6.1.0" - graceful-fs: "npm:^4.0.0" - is-valid-glob: "npm:^1.0.0" - lazystream: "npm:^1.0.0" - lead: "npm:^1.0.0" - object.assign: "npm:^4.0.4" - pumpify: "npm:^1.3.5" - readable-stream: "npm:^2.3.3" - remove-bom-buffer: "npm:^3.0.0" - remove-bom-stream: "npm:^1.2.0" - resolve-options: "npm:^1.1.0" - through2: "npm:^2.0.0" - to-through: "npm:^2.0.0" - value-or-function: "npm:^3.0.0" - vinyl: "npm:^2.0.0" - vinyl-sourcemap: "npm:^1.1.0" - checksum: 10c0/c7e52624b8a32fd5164210d0ce45050ddfcd535ac0b172c59138a402ca730bd1083ee78e43dc71d8ee21475869e9c080ff212e98926a2b980eb3aa644a561777 - languageName: node - linkType: hard - -"vinyl-sourcemap@npm:^1.1.0": - version: 1.1.0 - resolution: "vinyl-sourcemap@npm:1.1.0" +"vary@npm:~1.1.2": + version: 1.1.2 + resolution: "vary@npm:1.1.2" + checksum: 10c0/f15d588d79f3675135ba783c91a4083dcd290a2a5be9fcb6514220a1634e23df116847b1cc51f66bfb0644cf9353b2abb7815ae499bab06e46dd33c1a6bf1f4f + languageName: node + linkType: hard + +"vite-node@npm:3.0.0-beta.2": + version: 3.0.0-beta.2 + resolution: "vite-node@npm:3.0.0-beta.2" dependencies: - append-buffer: "npm:^1.0.2" - convert-source-map: "npm:^1.5.0" - graceful-fs: "npm:^4.1.6" - normalize-path: "npm:^2.1.1" - now-and-later: "npm:^2.0.0" - remove-bom-buffer: "npm:^3.0.0" - vinyl: "npm:^2.0.0" - checksum: 10c0/5945250fbc04ed8be348f27adfcf842d310f2e4eea88c4821b48768d12bc8407c332c26b0eeabc63f5808843a2859d902020572bdc42e625a9d049a298d8cf68 + cac: "npm:^6.7.14" + debug: "npm:^4.4.0" + es-module-lexer: "npm:^1.5.4" + pathe: "npm:^1.1.2" + vite: "npm:^5.0.0 || ^6.0.0" + bin: + vite-node: vite-node.mjs + checksum: 10c0/02beeb3c37f3c3637dd4f96f79c3efda7dd5a66e4e9290692501d70090c7ed40063c60cf7386afd2477f72986316eeee9f6f3e4812c0e4788d94cdb7b291e2c2 languageName: node linkType: hard -"vinyl@npm:^2.0.0, vinyl@npm:^2.2.0": - version: 2.2.1 - resolution: "vinyl@npm:2.2.1" +"vite-tsconfig-paths@npm:^5.1.4": + version: 5.1.4 + resolution: "vite-tsconfig-paths@npm:5.1.4" dependencies: - clone: "npm:^2.1.1" - clone-buffer: "npm:^1.0.0" - clone-stats: "npm:^1.0.0" - cloneable-readable: "npm:^1.0.0" - remove-trailing-separator: "npm:^1.0.1" - replace-ext: "npm:^1.0.0" - checksum: 10c0/e7073fe5a3e10bbd5a3abe7ccf3351ed1b784178576b09642c08b0ef4056265476610aabd29eabfaaf456ada45f05f4112a35687d502f33aab33b025fc6ec38f + debug: "npm:^4.1.1" + globrex: "npm:^0.1.2" + tsconfck: "npm:^3.0.3" + peerDependencies: + vite: "*" + peerDependenciesMeta: + vite: + optional: true + checksum: 10c0/6228f23155ea25d92b1e1702284cf8dc52ad3c683c5ca691edd5a4c82d2913e7326d00708cef1cbfde9bb226261df0e0a12e03ef1d43b6a92d8f02b483ef37e3 + languageName: node + linkType: hard + +"vite@npm:^5.0.0 || ^6.0.0": + version: 6.0.11 + resolution: "vite@npm:6.0.11" + dependencies: + esbuild: "npm:^0.24.2" + fsevents: "npm:~2.3.3" + postcss: "npm:^8.4.49" + rollup: "npm:^4.23.0" + peerDependencies: + "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: ">=1.21.0" + less: "*" + lightningcss: ^1.21.0 + sass: "*" + sass-embedded: "*" + stylus: "*" + sugarss: "*" + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + bin: + vite: bin/vite.js + checksum: 10c0/a0537f9bf8d6ded740646a4aa44b8dbf442d3005e75f7b27e981ef6011f22d4759f5eb643a393c0ffb8d21e2f50fb5f774d3a53108fb96a10b0f83697e8efe84 languageName: node linkType: hard -"vite@npm:^5.3.1": - version: 5.3.3 - resolution: "vite@npm:5.3.3" +"vite@npm:^5.4.11": + version: 5.4.14 + resolution: "vite@npm:5.4.14" dependencies: esbuild: "npm:^0.21.3" fsevents: "npm:~2.3.3" - postcss: "npm:^8.4.39" - rollup: "npm:^4.13.0" + postcss: "npm:^8.4.43" + rollup: "npm:^4.20.0" peerDependencies: "@types/node": ^18.0.0 || >=20.0.0 less: "*" lightningcss: ^1.21.0 sass: "*" + sass-embedded: "*" stylus: "*" sugarss: "*" terser: ^5.4.0 @@ -8102,6 +7076,8 @@ __metadata: optional: true sass: optional: true + sass-embedded: + optional: true stylus: optional: true sugarss: @@ -8110,7 +7086,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10c0/a796872e1d11875d994615cd00da185c80eeb7753034d35c096050bf3c269c02004070cf623c5fe2a4a90ea2f12488e6f9d13933ec810f117f1b931e1b5e3385 + checksum: 10c0/8842933bd70ca6a98489a0bb9c8464bec373de00f9a97c8c7a4e64b24d15c88bfaa8c1acb38a68c3e5eb49072ffbccb146842c2d4edcdd036a9802964cffe3d1 languageName: node linkType: hard @@ -8121,63 +7097,102 @@ __metadata: languageName: node linkType: hard -"webidl-conversions@npm:^7.0.0": - version: 7.0.0 - resolution: "webidl-conversions@npm:7.0.0" - checksum: 10c0/228d8cb6d270c23b0720cb2d95c579202db3aaf8f633b4e9dd94ec2000a04e7e6e43b76a94509cdb30479bd00ae253ab2371a2da9f81446cc313f89a4213a2c4 - languageName: node - linkType: hard - -"whatwg-encoding@npm:^2.0.0": - version: 2.0.0 - resolution: "whatwg-encoding@npm:2.0.0" - dependencies: - iconv-lite: "npm:0.6.3" - checksum: 10c0/91b90a49f312dc751496fd23a7e68981e62f33afe938b97281ad766235c4872fc4e66319f925c5e9001502b3040dd25a33b02a9c693b73a4cbbfdc4ad10c3e3e - languageName: node - linkType: hard +"web-react-skeleton-react-router@workspace:.": + version: 0.0.0-use.local + resolution: "web-react-skeleton-react-router@workspace:." + dependencies: + "@emotion/react": "npm:^11.14.0" + "@emotion/styled": "npm:^11.14.0" + "@eslint/js": "npm:^9.18.0" + "@mui/icons-material": "npm:^6.4.1" + "@mui/material": "npm:^6.4.1" + "@react-router/dev": "npm:^7.1.3" + "@react-router/node": "npm:^7.1.3" + "@react-router/serve": "npm:^7.1.3" + "@tanstack/react-query": "npm:^5.64.2" + "@tanstack/react-query-devtools": "npm:^5.64.2" + "@types/node": "npm:^20" + "@types/qs": "npm:^6" + "@types/react": "npm:^19.0.1" + "@types/react-dom": "npm:^19.0.1" + autoprefixer: "npm:^10.4.20" + axios: "npm:^1.7.9" + clsx: "npm:^2.1.1" + csv-parse: "npm:^5.6.0" + eslint: "npm:^9.18.0" + eslint-config-prettier: "npm:^10.0.1" + eslint-plugin-react: "npm:^7.37.4" + eslint-plugin-react-hooks: "npm:^5.1.0" + eslint-plugin-react-refresh: "npm:^0.4.18" + i18next: "npm:^24.2.1" + i18next-browser-languagedetector: "npm:^8.0.2" + isbot: "npm:^5.1.17" + node-fetch: "npm:^3.3.2" + postcss: "npm:^8.4.49" + prettier: "npm:^3.4.2" + prism-react-renderer: "npm:^2.4.1" + qs: "npm:^6.14.0" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" + react-i18next: "npm:^15.4.0" + react-router: "npm:^7.1.3" + react-toastify: "npm:^11.0.3" + stylelint: "npm:^16.13.2" + stylelint-config-css-modules: "npm:^4.4.0" + stylelint-config-standard: "npm:^37.0.0" + stylelint-order: "npm:^6.0.4" + stylelint-prettier: "npm:^5.0.2" + typescript: "npm:^5.7.2" + typescript-eslint: "npm:^8.21.0" + vite: "npm:^5.4.11" + vite-tsconfig-paths: "npm:^5.1.4" + yup: "npm:^1.6.1" + zustand: "npm:^5.0.3" + languageName: unknown + linkType: soft -"whatwg-mimetype@npm:^3.0.0": - version: 3.0.0 - resolution: "whatwg-mimetype@npm:3.0.0" - checksum: 10c0/323895a1cda29a5fb0b9ca82831d2c316309fede0365047c4c323073e3239067a304a09a1f4b123b9532641ab604203f33a1403b5ca6a62ef405bcd7a204080f +"web-streams-polyfill@npm:^3.0.3": + version: 3.3.3 + resolution: "web-streams-polyfill@npm:3.3.3" + checksum: 10c0/64e855c47f6c8330b5436147db1c75cb7e7474d924166800e8e2aab5eb6c76aac4981a84261dd2982b3e754490900b99791c80ae1407a9fa0dcff74f82ea3a7f languageName: node linkType: hard -"which-boxed-primitive@npm:^1.0.2": - version: 1.0.2 - resolution: "which-boxed-primitive@npm:1.0.2" +"which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": + version: 1.1.1 + resolution: "which-boxed-primitive@npm:1.1.1" dependencies: - is-bigint: "npm:^1.0.1" - is-boolean-object: "npm:^1.1.0" - is-number-object: "npm:^1.0.4" - is-string: "npm:^1.0.5" - is-symbol: "npm:^1.0.3" - checksum: 10c0/0a62a03c00c91dd4fb1035b2f0733c341d805753b027eebd3a304b9cb70e8ce33e25317add2fe9b5fea6f53a175c0633ae701ff812e604410ddd049777cd435e + is-bigint: "npm:^1.1.0" + is-boolean-object: "npm:^1.2.1" + is-number-object: "npm:^1.1.1" + is-string: "npm:^1.1.1" + is-symbol: "npm:^1.1.1" + checksum: 10c0/aceea8ede3b08dede7dce168f3883323f7c62272b49801716e8332ff750e7ae59a511ae088840bc6874f16c1b7fd296c05c949b0e5b357bfe3c431b98c417abe languageName: node linkType: hard -"which-builtin-type@npm:^1.1.3": - version: 1.1.3 - resolution: "which-builtin-type@npm:1.1.3" +"which-builtin-type@npm:^1.2.1": + version: 1.2.1 + resolution: "which-builtin-type@npm:1.2.1" dependencies: - function.prototype.name: "npm:^1.1.5" - has-tostringtag: "npm:^1.0.0" + call-bound: "npm:^1.0.2" + function.prototype.name: "npm:^1.1.6" + has-tostringtag: "npm:^1.0.2" is-async-function: "npm:^2.0.0" - is-date-object: "npm:^1.0.5" - is-finalizationregistry: "npm:^1.0.2" + is-date-object: "npm:^1.1.0" + is-finalizationregistry: "npm:^1.1.0" is-generator-function: "npm:^1.0.10" - is-regex: "npm:^1.1.4" + is-regex: "npm:^1.2.1" is-weakref: "npm:^1.0.2" isarray: "npm:^2.0.5" - which-boxed-primitive: "npm:^1.0.2" - which-collection: "npm:^1.0.1" - which-typed-array: "npm:^1.1.9" - checksum: 10c0/2b7b234df3443b52f4fbd2b65b731804de8d30bcc4210ec84107ef377a81923cea7f2763b7fb78b394175cea59118bf3c41b9ffd2d643cb1d748ef93b33b6bd4 + which-boxed-primitive: "npm:^1.1.0" + which-collection: "npm:^1.0.2" + which-typed-array: "npm:^1.1.16" + checksum: 10c0/8dcf323c45e5c27887800df42fbe0431d0b66b1163849bb7d46b5a730ad6a96ee8bfe827d078303f825537844ebf20c02459de41239a0a9805e2fcb3cae0d471 languageName: node linkType: hard -"which-collection@npm:^1.0.1": +"which-collection@npm:^1.0.2": version: 1.0.2 resolution: "which-collection@npm:1.0.2" dependencies: @@ -8189,27 +7204,21 @@ __metadata: languageName: node linkType: hard -"which-module@npm:^2.0.0": - version: 2.0.1 - resolution: "which-module@npm:2.0.1" - checksum: 10c0/087038e7992649eaffa6c7a4f3158d5b53b14cf5b6c1f0e043dccfacb1ba179d12f17545d5b85ebd94a42ce280a6fe65d0cbcab70f4fc6daad1dfae85e0e6a3e - languageName: node - linkType: hard - -"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.9": - version: 1.1.15 - resolution: "which-typed-array@npm:1.1.15" +"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.18": + version: 1.1.18 + resolution: "which-typed-array@npm:1.1.18" dependencies: available-typed-arrays: "npm:^1.0.7" - call-bind: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" for-each: "npm:^0.3.3" - gopd: "npm:^1.0.1" + gopd: "npm:^1.2.0" has-tostringtag: "npm:^1.0.2" - checksum: 10c0/4465d5348c044032032251be54d8988270e69c6b7154f8fcb2a47ff706fe36f7624b3a24246b8d9089435a8f4ec48c1c1025c5d6b499456b9e5eff4f48212983 + checksum: 10c0/0412f4a91880ca1a2a63056187c2e3de6b129b2b5b6c17bc3729f0f7041047ae48fb7424813e51506addb2c97320003ee18b8c57469d2cde37983ef62126143c languageName: node linkType: hard -"which@npm:^1.2.9, which@npm:^1.3.1": +"which@npm:^1.3.1": version: 1.3.1 resolution: "which@npm:1.3.1" dependencies: @@ -8231,14 +7240,25 @@ __metadata: languageName: node linkType: hard -"which@npm:^4.0.0": - version: 4.0.0 - resolution: "which@npm:4.0.0" +"which@npm:^3.0.0": + version: 3.0.1 + resolution: "which@npm:3.0.1" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: bin/which.js + checksum: 10c0/15263b06161a7c377328fd2066cb1f093f5e8a8f429618b63212b5b8847489be7bcab0ab3eb07f3ecc0eda99a5a7ea52105cf5fa8266bedd083cc5a9f6da24f1 + languageName: node + linkType: hard + +"which@npm:^5.0.0": + version: 5.0.0 + resolution: "which@npm:5.0.0" dependencies: isexe: "npm:^3.1.1" bin: node-which: bin/which.js - checksum: 10c0/449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a + checksum: 10c0/e556e4cd8b7dbf5df52408c9a9dd5ac6518c8c5267c8953f5b0564073c66ed5bf9503b14d876d0e9c7844d4db9725fb0dcf45d6e911e17e26ab363dc3965ae7b languageName: node linkType: hard @@ -8260,16 +7280,6 @@ __metadata: languageName: node linkType: hard -"wrap-ansi@npm:^2.0.0": - version: 2.1.0 - resolution: "wrap-ansi@npm:2.1.0" - dependencies: - string-width: "npm:^1.0.1" - strip-ansi: "npm:^3.0.1" - checksum: 10c0/1a47367eef192fc9ecaf00238bad5de8987c3368082b619ab36c5e2d6d7b0a2aef95a2ca65840be598c56ced5090a3ba487956c7aee0cac7c45017502fa980fb - languageName: node - linkType: hard - "wrap-ansi@npm:^8.1.0": version: 8.1.0 resolution: "wrap-ansi@npm:8.1.0" @@ -8298,20 +7308,6 @@ __metadata: languageName: node linkType: hard -"xml-escape@npm:^1.0.0": - version: 1.1.0 - resolution: "xml-escape@npm:1.1.0" - checksum: 10c0/973cef0e383c373d1ccbacbba33ac49e7f2afd60d2710ed1308e153d2aa3b3189477f79315eb10eed43b7221add040a5eab18107170b658559e4d29ce7653a76 - languageName: node - linkType: hard - -"xmlbuilder@npm:^10.0.0": - version: 10.1.1 - resolution: "xmlbuilder@npm:10.1.1" - checksum: 10c0/26c465e8bd16b4e882d39c2e2a29bb277434d254717aa05df117dd0009041d92855426714b2d1a6a5f76983640349f4edb80073b6ae374e0e6c3d13029ea8237 - languageName: node - linkType: hard - "xtend@npm:~4.0.1": version: 4.0.2 resolution: "xtend@npm:4.0.2" @@ -8319,20 +7315,6 @@ __metadata: languageName: node linkType: hard -"y18n@npm:^3.2.1 || ^4.0.0": - version: 4.0.3 - resolution: "y18n@npm:4.0.3" - checksum: 10c0/308a2efd7cc296ab2c0f3b9284fd4827be01cfeb647b3ba18230e3a416eb1bc887ac050de9f8c4fd9e7856b2e8246e05d190b53c96c5ad8d8cb56dffb6f81024 - languageName: node - linkType: hard - -"yallist@npm:^2.1.2": - version: 2.1.2 - resolution: "yallist@npm:2.1.2" - checksum: 10c0/0b9e25aa00adf19e01d2bcd4b208aee2b0db643d9927131797b7af5ff69480fc80f1c3db738cbf3946f0bddf39d8f2d0a5709c644fd42d4aa3a4e6e786c087b5 - languageName: node - linkType: hard - "yallist@npm:^3.0.2": version: 3.1.1 resolution: "yallist@npm:3.1.1" @@ -8347,6 +7329,13 @@ __metadata: languageName: node linkType: hard +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 + languageName: node + linkType: hard + "yaml@npm:^1.10.0": version: 1.10.2 resolution: "yaml@npm:1.10.2" @@ -8354,36 +7343,6 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^11.1.1": - version: 11.1.1 - resolution: "yargs-parser@npm:11.1.1" - dependencies: - camelcase: "npm:^5.0.0" - decamelize: "npm:^1.2.0" - checksum: 10c0/970101d8140b4a28f465e61949e62fd43daca3eaf079682b7873f7372deeba602e3b2ddfb9970480bcf4001e91b849eb9a61e543e604b88d03f734a8749db2c6 - languageName: node - linkType: hard - -"yargs@npm:^12.0.2": - version: 12.0.5 - resolution: "yargs@npm:12.0.5" - dependencies: - cliui: "npm:^4.0.0" - decamelize: "npm:^1.2.0" - find-up: "npm:^3.0.0" - get-caller-file: "npm:^1.0.1" - os-locale: "npm:^3.0.0" - require-directory: "npm:^2.1.1" - require-main-filename: "npm:^1.0.1" - set-blocking: "npm:^2.0.0" - string-width: "npm:^2.0.0" - which-module: "npm:^2.0.0" - y18n: "npm:^3.2.1 || ^4.0.0" - yargs-parser: "npm:^11.1.1" - checksum: 10c0/4cb2dd471ceb18bcbe5994f25e93ae817a7897966ada8ac9401ded1d1540b05640018d19b49d76ecb40079cbe81c2ae2efe78592c2301bd0bc80808b3b0c70d3 - languageName: node - linkType: hard - "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0" @@ -8391,27 +7350,26 @@ __metadata: languageName: node linkType: hard -"yup@npm:^1.4.0": - version: 1.4.0 - resolution: "yup@npm:1.4.0" +"yup@npm:^1.6.1": + version: 1.6.1 + resolution: "yup@npm:1.6.1" dependencies: property-expr: "npm:^2.0.5" tiny-case: "npm:^1.0.3" toposort: "npm:^2.0.2" type-fest: "npm:^2.19.0" - checksum: 10c0/fe142141365eed0f78fb2e18bdd2f10bf101385dae12a5f9de14884448067bdca16a54b547fc0bffec04a098dd70b4519ff366422f3da006fd11a0717a7863ac + checksum: 10c0/84c2b53996e8001041239cf2719851719f67063ec7cd843067df73562353216f5ad4f8a222319696882d5a6058e528fade1e463c59d70cbffb41b99cd0d7571b languageName: node linkType: hard -"zustand@npm:^4.5.4": - version: 4.5.4 - resolution: "zustand@npm:4.5.4" - dependencies: - use-sync-external-store: "npm:1.2.0" +"zustand@npm:^5.0.3": + version: 5.0.3 + resolution: "zustand@npm:5.0.3" peerDependencies: - "@types/react": ">=16.8" + "@types/react": ">=18.0.0" immer: ">=9.0.6" - react: ">=16.8" + react: ">=18.0.0" + use-sync-external-store: ">=1.2.0" peerDependenciesMeta: "@types/react": optional: true @@ -8419,6 +7377,8 @@ __metadata: optional: true react: optional: true - checksum: 10c0/479af491ffa1f1eb2c38b3ba25dc4e14339e8b35a60033d3f6c165b22f8be8163f7e1370015ded9c6e28548cd25af84a73fb40b5fad0bd7882d16ddd5ed613c6 + use-sync-external-store: + optional: true + checksum: 10c0/dad96c6c123fda088c583d5df6692e9245cd207583078dc15f93d255a67b0f346bad4535545c98852ecde93d254812a0c799579dfde2ab595016b99fbe20e4d5 languageName: node linkType: hard From ab13fb1dae8ecc540689ffcab8b96972a6bf75be Mon Sep 17 00:00:00 2001 From: Luis Doebbel Date: Wed, 29 Jan 2025 15:08:40 -0500 Subject: [PATCH 2/7] docs for data fetching and routing --- doc/data-fetching-strategies.md | 98 ++++++++++++++++++++++++++++++++ doc/react-router-7-routing.png | Bin 0 -> 135356 bytes doc/routing.md | 64 +++++++++++++++++++++ 3 files changed, 162 insertions(+) create mode 100644 doc/data-fetching-strategies.md create mode 100644 doc/react-router-7-routing.png create mode 100644 doc/routing.md diff --git a/doc/data-fetching-strategies.md b/doc/data-fetching-strategies.md new file mode 100644 index 0000000..e0ea7c5 --- /dev/null +++ b/doc/data-fetching-strategies.md @@ -0,0 +1,98 @@ +# Data Fetching Strategies + +This project demonstrates three different data fetching strategies using `react-query` and `react-router` loaders. Below is a high-level explanation of each strategy: + +## 1. Prefetching in loader + `useSuspenseQuery` + +```tsx +export const clientLoader = async () => { + queryClient.prefetchQuery(queryOptions()); + return {}; +}; + +export default function MyRoute() { + const { data: todos } = useSuspenseQuery(queryOptions()); + return ( +
+ {todos.map((todo) => ( +
{todo.todo}
+ ))} +
+ ); +} +``` + +In this approach, we use the loader to **prefetch** our data, but notice the loader does not return the data itself. +In the rendered component, we use the `useSuspenseQuery` hook to get the data (you can call the `useQuery` too, but will need to handle loading states). +**`On the very first render`**, the `useSuspenseQuery` hook suspends the component until the query is resolved. +The `Suspense` component wrapping the component displays a fallback while the data is being fetched. +**`On subsequent renders`**, the `useSuspenseQuery` hook will return stale data while fetching any new data. + +- **Pros**: The `useSuspenseQuery` hook ensures the component only renders when data is available. +- **Cons**: Initial render of the whole page is blocked until data is fetched. + +## 2. Prefetching in Loader + `useQuery().promise` + +```tsx +export const clientLoader = async () => { + queryClient.prefetchQuery(queryOptions()); + return {}; +}; + +export default function MyRoute() { + const query = useSuspenseQuery(queryOptions()).promise; + + return ( +
+

This will be rendered immediately

+ + }> + {(data) => } + +
+ ); +} +``` + +This strategy also prefetches data in the loader but uses the `useQuery().promise` hook within the component. +The `experimental_prefetchInRender` flag in the `QueryClient` is enabled to allow this behavior. +The `Await` component is used to handle the promise resolution. + +- **Pros**: The query is tracked by `react-query`, allowing for better state management, caching and refetching. +- **Cons**: Requires enabling an experimental flag in `react-query`. + +## 3. Fetching in loader + `Await` + +```tsx +export const clientLoader = async () => { + const query = queryClient.fetchQuery(postsQueryOptions()); + return { query }; +}; + +export default function MyRoute({ loaderData }: Route.ComponentProps) { + const { query } = loaderData; + return ( +
+

This will be rendered immediately

+ + }> + {(data) => } + +
+ ); +} + +const Posts = ({ data }) => ( +
+ {data.posts.map((post) => ( +
{post.title}
+ ))} +
+); +``` + +Here, the data is fetched in the loader **but is not awaited**. +The promise returned by the loader is passed to the component, and the `Await` component from `react-router` is used to handle the promise resolution. + +- **Pros**: Allows rendering parts of the page that do not depend on the data while the data is being fetched. +- **Cons**: The query is not tracked by `react-query` since no hook is called from inside the component. diff --git a/doc/react-router-7-routing.png b/doc/react-router-7-routing.png new file mode 100644 index 0000000000000000000000000000000000000000..1c394f7a28f4df680289bf321c9870c547acdcef GIT binary patch literal 135356 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%0Duhx*y?y$(hze2j7?pUOG->} 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 R*|rEiyLau~S+;|A;$JYbnQ8z4 literal 0 HcmV?d00001 diff --git a/doc/routing.md b/doc/routing.md new file mode 100644 index 0000000..ff59d3d --- /dev/null +++ b/doc/routing.md @@ -0,0 +1,64 @@ +# Project Routing and Auth Guard Overview + +Project Routing Diagram + +## Routing + +This project uses React Router v7 to manage the application's routing. The routes are defined in the `src/routes.ts` file and are organized into public and authenticated routes. + +### Public Routes + +Public routes are accessible without authentication and are defined under the `src/routes/public-routes` directory. These include: + +- **Home**: Accessible at `/:lang/home`, defined in `src/routes/public-routes/home/route.tsx`. +- **Login**: Accessible at `/:lang/login`, defined in `src/routes/public-routes/login/route.tsx`. + +The layout for public routes is defined in `src/routes/public-routes/layout.tsx`. + +### Authenticated Routes + +Authenticated routes require the user to be logged in and are defined under the `src/routes/authenticated-routes` directory. These include: + +- **Dashboard**: Accessible at `/:lang/dashboard`, defined in `src/routes/authenticated-routes/dashboard/route.tsx`. +- **Settings**: Accessible at `/:lang/settings`, defined in `src/routes/authenticated-routes/settings/route.tsx`. + +The layout for authenticated routes is defined in `src/routes/authenticated-routes/layout.tsx`. + +### Route Configuration + +The route configuration is defined in `src/routes.ts` using the `@react-router/dev/routes` package. The routes are prefixed with a language parameter (`:lang`) to support internationalization. + +## Auth Guard + +The auth guard ensures that only authenticated users can access certain routes. It is implemented in the `src/routes/auth-guard.ts` file. + +### How It Works + +1. **Check User Authentication**: The `clientLoaderAuthGuard` function checks if the user is authenticated by accessing the user state from the `useUserStore`. + +2. **Redirect if Not Authenticated**: If the user is not authenticated, the function redirects them to the login page. If `includeRedirectPath` is true, the current path is included as a redirect parameter so the user can be redirected back after logging in. + +3. **Resolve if Authenticated**: If the user is authenticated, the function resolves, allowing access to the protected route. + +### Usage + +In Remix.js or React Router v7, auth guards are implemented in the client loaders rather than as component-based guards. This ensures that the authentication check happens before the component is rendered, providing a smoother user experience. + +The `clientLoaderAuthGuard` function is used in the client loaders of authenticated routes to enforce authentication. For example: + +```typescript +// src/routes/authenticated-routes/layout.tsx +export const clientLoader = async ({ + params: _params, +}: ClientLoaderFunctionArgs) => { + await clientLoaderAuthGuard(false); + return {}; +}; +``` + +This ensures that the dashboard route is only accessible to authenticated users. + +At the moment, react rouvet v7 does not support middlewares (it is planned though). You have a couple of options as to **where** to use the `clientLoaderAuthGuard`: + +- You can add it to the loader functions inside each route (this could be useful for more granular, role based access rules) +- You can add it to the loader of a common layout (for example, `authenticated-routes/layout.tsx`), mimicking the behavior of component based auth guards (this could be useful for higher level access, like "is the user logged in?") From 37e9eae3dbd8d8743a41643e5489795bd59d2041 Mon Sep 17 00:00:00 2001 From: Luis Doebbel Date: Wed, 29 Jan 2025 15:16:55 -0500 Subject: [PATCH 3/7] doc updates --- README.md | 5 +++-- frontend/README.md | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 49c1be6..895e537 100644 --- a/README.md +++ b/README.md @@ -12,13 +12,14 @@ The goal is to standardize how we build web projects in the company. ## Packages +- [React router v7 as a framework](https://reactrouter.com/start/framework/installation) using the `default` template and SPA mode - [Vite](https://vitejs.dev/) using the `react-ts` installation - [MUI](https://mui.com/material-ui/getting-started/) for our components library -- [React router](https://reactrouter.com/en/main) for the pages routing - [Axios](https://axios-http.com/docs/intro) for API calls +- [React query](https://tanstack.com/query/latest/docs/framework/react/overview) for server-state management +- [Zustand](https://docs.pmnd.rs/zustand/getting-started/introduction) for client-state management - [i18next](https://www.i18next.com/) for internationalization - [Yup](https://github.com/jquense/yup?tab=readme-ov-file) for schema validation -- [Zustand](https://docs.pmnd.rs/zustand/getting-started/introduction) for global store ## License diff --git a/frontend/README.md b/frontend/README.md index e0d2066..79ae43d 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -6,12 +6,12 @@ A modern, production-ready template for building full-stack React applications u ## Features -- 🚀 Server-side rendering +- 🚀 SPA mode - ⚡️ Hot Module Replacement (HMR) - 📦 Asset bundling and optimization - 🔄 Data loading and mutations - 🔒 TypeScript by default -- 🎉 TailwindCSS for styling +- 🎉 MUI for styling - 📖 [React Router docs](https://reactrouter.com/) ## Getting Started @@ -93,7 +93,7 @@ Make sure to deploy the output of `npm run build` ## Styling -This template comes with [Tailwind CSS](https://tailwindcss.com/) already configured for a simple default starting experience. You can use whatever CSS framework you prefer. +This template comes with [MUI](https://mui.com/material-ui/getting-started/installation/) already configured. --- From 712dbc6467e8bb1a12cf7a75782b0c88f5919d23 Mon Sep 17 00:00:00 2001 From: Luis Doebbel Date: Wed, 29 Jan 2025 17:02:55 -0500 Subject: [PATCH 4/7] updates docs, adds vscode workspace configuration --- .vscode/launch.json | 12 -- .vscode/settings.json | 7 - .../azure-pipelines.md | 0 {.vscode => frontend/.vscode}/extensions.json | 6 +- frontend/.vscode/settings.json | 14 ++ frontend/docs/components-and-containers.md | 20 ++ .../docs}/data-fetching-strategies.md | 0 .../docs}/react-router-7-routing.png | Bin frontend/docs/react-standards.md | 189 ++++++++++++++++++ {doc => frontend/docs}/routing.md | 0 frontend/docs/styling.md | 39 ++++ frontend/eslint.config.js | 2 + web-react-skeleton.code-workspace | 17 ++ 13 files changed, 282 insertions(+), 24 deletions(-) delete mode 100644 .vscode/launch.json delete mode 100644 .vscode/settings.json rename doc/AzurePipelines.md => docs/azure-pipelines.md (100%) rename {.vscode => frontend/.vscode}/extensions.json (59%) create mode 100644 frontend/.vscode/settings.json create mode 100644 frontend/docs/components-and-containers.md rename {doc => frontend/docs}/data-fetching-strategies.md (100%) rename {doc => frontend/docs}/react-router-7-routing.png (100%) create mode 100644 frontend/docs/react-standards.md rename {doc => frontend/docs}/routing.md (100%) create mode 100644 frontend/docs/styling.md create mode 100644 web-react-skeleton.code-workspace diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 981b83d..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "type": "chrome", - "request": "launch", - "name": "Launch Chrome", - "url": "http://localhost:8085", - "webRoot": "${workspaceFolder}/frontend" - } - ] -} diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index ed77a4f..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "i18n-ally.localesPaths": ["frontend/src/assets/locales"], - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": true, - "typescript.enablePromptUseWorkspaceTsdk": true, - "typescript.tsdk": "frontend/node_modules/typescript/lib" -} diff --git a/doc/AzurePipelines.md b/docs/azure-pipelines.md similarity index 100% rename from doc/AzurePipelines.md rename to docs/azure-pipelines.md diff --git a/.vscode/extensions.json b/frontend/.vscode/extensions.json similarity index 59% rename from .vscode/extensions.json rename to frontend/.vscode/extensions.json index 9281b2e..ffa870e 100644 --- a/.vscode/extensions.json +++ b/frontend/.vscode/extensions.json @@ -1,15 +1,11 @@ { "recommendations": [ - "steoates.autoimport", "aaron-bond.better-comments", "dbaeumer.vscode-eslint", "oderwat.indent-rainbow", "wix.vscode-import-cost", "christian-kohler.path-intellisense", "esbenp.prettier-vscode", - "rvest.vs-code-prettier-eslint", - "wayou.vscode-todo-highlight", - "lokalise.i18n-ally", - "arcanis.vscode-zipfs" + "wayou.vscode-todo-highlight" ] } diff --git a/frontend/.vscode/settings.json b/frontend/.vscode/settings.json new file mode 100644 index 0000000..0a6827a --- /dev/null +++ b/frontend/.vscode/settings.json @@ -0,0 +1,14 @@ +{ + "css.validate": false, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "always", + "source.fixAll.stylelint": "always", + "source.organizeImports": "explicit", + "source.removeUnusedImports": "always" + }, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true, + "editor.linkedEditing": true, + "less.validate": false, + "scss.validate": false +} diff --git a/frontend/docs/components-and-containers.md b/frontend/docs/components-and-containers.md new file mode 100644 index 0000000..37d6d63 --- /dev/null +++ b/frontend/docs/components-and-containers.md @@ -0,0 +1,20 @@ +# How to Choose Between a Component or a Container + +## Component + +- Manages how things look. +- Has no dependencies on the rest of the app. +- Doesn't specify how data is loaded or mutated. +- Receives data and callbacks exclusively via props. +- Rarely has its own state (when it does, it’s UI state rather than data). +- Easy examples: Button, Table, Spinner, etc. + +## Container + +- Is often stateful, as it tends to serve as a data source. +- Is concerned with how things work. +- May contain both presentational and container components inside but usually doesn’t have any DOM markup of its own except for some wrapping divs, and never has any styles. +- Provides the data and behavior to presentational or other container components. +- Examples: UserInfo, ShoppingCart, etc. + +> Don’t take the component vs. container separation as a dogma. Sometimes it doesn’t matter or it’s hard to draw the line. If you feel unsure about whether a specific element should be a component or a container, it might be too early to decide. Don’t sweat it! diff --git a/doc/data-fetching-strategies.md b/frontend/docs/data-fetching-strategies.md similarity index 100% rename from doc/data-fetching-strategies.md rename to frontend/docs/data-fetching-strategies.md diff --git a/doc/react-router-7-routing.png b/frontend/docs/react-router-7-routing.png similarity index 100% rename from doc/react-router-7-routing.png rename to frontend/docs/react-router-7-routing.png diff --git a/frontend/docs/react-standards.md b/frontend/docs/react-standards.md new file mode 100644 index 0000000..b056739 --- /dev/null +++ b/frontend/docs/react-standards.md @@ -0,0 +1,189 @@ +# React Standards + +## Code Formatting + +- Use Prettier to format all TypeScript code. +- Configure your editor to format on save using Prettier (the VSCode settings provided in this template support this behavior). + +## Designs + +- Follow UI designs as closely as possible. If it's not feasible or too costly to match the design, the designer and developer should plan a meeting to discuss options. +- Most design tools have ways to inspect the design for values like colors and spacing. Currently, we use Figma, which has an Inspector tab on the right that provides this functionality. +- Sometimes an element may not be selectable with the inspector due to being hidden under another element. To access the element underneath, use the panel on the left to find your element. + +## Functions + +- Only use functions when necessary. For example: + +> ```ts +> const showButton = (): boolean => { +> return providerId === client.providerId; +> }; +> ``` + +- Should be a constant variable: `const showButton = providerId === client.providerId;` +- Name callbacks after the event. For example, an `onClick` callback function should always start with "onClick": `onClick={onClickAmountOption}` +- Functions that aren't React components should be camel case: `onChange` not `OnChange`. +- Use arrow functions. +- Use normal functions for React components. (The benefit of lexical scope of `this` is not present for components.) + +## Interfaces and Types + +- Avoid `any` or `unknown` as much as possible. +- Use both `interfaces` and `types`, depending on the situation. + +```ts +interface User { + id: number; + name: string; + email: string; +} + +const user: User = { id: 1, name: "John Doe", email: "john.doe@gmail.com" }; +``` + +- Use an `interface` to extend another `interface`: + +```ts +interface Admin extends User { + canDeleteUsers: boolean; +} + +const adminUser: Admin = { + id: 2, + name: "Jane Doe", + email: "jane.doe@gmail.com", + canDeleteUsers: true, +}; +``` + +- Use `type` when defining a complex type: + +```ts +type ID = number | string; +type UserResponse = User | null; +type Dictionary = { [key: string]: T }; +``` + +- Use `type` when you want a simple `enum` using a string union. This results in easier type inference and can simplify usage for API endpoint return objects: + +```ts +type Status = "success" | "info" | "warning" | "error"; +``` + +## Labels + +- Always pass labels between components as the translated value. +- Avoid code like the following where a property is being translated: `` +- The translate function should be called in the parent component, and the child should just render the property as is: `` +- Use the built-in [interpolation functionality](https://www.i18next.com/translation-function/interpolation) instead of `.replace()`. For example: + +```ts +t("Plan_coMemberFee_label", { + CoMemberFee: formatCurrency(amount), + CoMemberFeeType: feeTypeLabel, +}); +``` + +## Plurals + +- Manage translations with plurals as follows. [Reference](https://www.i18next.com/translation-function/plurals) + +`component.tsx` + +```ts +t("asset__share_modal_title", { + count: assets.length, +}); +``` + +`en.json` + +```json +{ + "asset__share_modal_title": "Share asset", + "asset__share_modal_title_other": "Share assets" +} +``` + +- Do not do this in your `component.tsx`: + +```ts +{ + assets.length === 1 + ? t("asset__share_modal_title") + : t("asset__share_modal_title_other"); +} +``` + +## State + +- When using `useState`, the set function should always be named `set[NameOfVariable]`: + +```ts +const [hasModification, setHasModification] = useState(false); +``` + +## Skeletons + +[MUI Skeleton](https://mui.com/components/skeleton) + +- Skeletons should match the content about to be rendered as closely as possible. +- Where possible, use the same container elements for the skeletons as the content being rendered. + +Example: +Good + +```tsx +
+ {isFetchingData ? : } +
+``` + +Wrong + +```tsx +{ + isFetchingData ? ( +
+ +
+ ) : ( +
+ +
+ ); +} +``` + +## Files + +- The `tsx` extension should only be used when needed. If the file doesn't use the React syntax, it should be a `.ts` file. +- File names and cases should match their default export. For example, a file that has a default export of: + - A component called `AccessCard` should be called `AccessCard.tsx`. + - A hook called `useCustomerInfo` should be called `useCustomerInfo.ts`. + +## Order + +- Try to keep the order of content between similar files consistent where possible. +- Basic order of React component file contents: + - Imports + - Interfaces, types, and enums + - Variables + - Functions + - Styles + - Private components + - Public/exported components (typically only one) +- Basic order of React component content: + - Hooks + - Variables + - Functions + - Effects + - Return +- Within the groups, use alphabetical sorting when possible. + +## Miscellaneous + +- Never use `dangerouslySetInnerHTML`. +- Only use functional components. +- Business logic should be in the API instead of the client when possible. diff --git a/doc/routing.md b/frontend/docs/routing.md similarity index 100% rename from doc/routing.md rename to frontend/docs/routing.md diff --git a/frontend/docs/styling.md b/frontend/docs/styling.md new file mode 100644 index 0000000..f992150 --- /dev/null +++ b/frontend/docs/styling.md @@ -0,0 +1,39 @@ +# Styling + +There are multiple ways to go about styling in a React project. +This will explain the standard we propose for your project. + +> If any of this does not fit the team working on the project, please feel free to change it and update this file to reflect the standard in the project. + +## .module.css files + +We recommend using CSS modules as much as possible. CSS modules help in: + +- **Scoping**: CSS modules automatically scope CSS by generating unique class names. This prevents styles from leaking into other components and avoids naming conflicts. +- **Maintainability**: With scoped styles, it's easier to maintain and update styles without worrying about affecting other parts of the application. +- **Modularity**: CSS modules promote modularity, making it easier to reason about and manage styles for individual components. + +## Styles + +- All styling that affects basic MUI components should be in the theme. +- Styling for specific components or specific containers should be in proper styled components or proper `.module.css` files. +- Avoid inline styles on components at all costs. +- All colors should be in `theme.palette`. +- Use the MaterialUI Typography component for reusable font styles defined in the theme. +- Avoid `!important` at all costs. If it must be used, it must have a comment explaining why. +- All media queries should be below the other styles of the same level, separated by a blank line. +- MUI has been configured to expose its properties as CSS variables. Use them as much as possible. + +## Responsiveness + +- Always test using different screen sizes to check for layout issues. +- The MaterialUI layout components have properties built for responsiveness. See their [official documentation](https://mui.com/material-ui/guides/responsive-ui/). +- `useMediaQuery` should only be used when CSS media queries would be significantly more work, as `useMediaQuery` is less efficient (it uses JavaScript and requires the component to re-render). + +## Styled Components (MUI) + +When you want to change a component coming from MUI, we recommend that you create a styled component of it inside the components folder. +You should look at the `Button.tsx` component to see an example. + +This allows us to have the same styling for every button in the app, without messing with the MUI theme. +You can still change components everywhere by modifying them in `createTheme`, but we found that in most cases, when the app grows, it can cause a lot of annoying bugs. diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js index 8343663..c2101cf 100644 --- a/frontend/eslint.config.js +++ b/frontend/eslint.config.js @@ -27,6 +27,8 @@ export default tseslint.config( }, rules: { ...reactHooks.configs.recommended.rules, + "no-debugger": "warn", + eqeqeq: "error", // allow unused variables that start with an underscore "@typescript-eslint/no-unused-vars": [ "error", diff --git a/web-react-skeleton.code-workspace b/web-react-skeleton.code-workspace new file mode 100644 index 0000000..041fdc5 --- /dev/null +++ b/web-react-skeleton.code-workspace @@ -0,0 +1,17 @@ +{ + "folders": [ + { + "path": "." + }, + { + "path": "frontend" + } + ], + "settings": { + "typescript.enablePromptUseWorkspaceTsdk": true, + "typescript.tsdk": "frontend/node_modules/typescript/lib", + "files.exclude": { + "frontend": true + } + } +} From 8fd153e83597ac4492028f715101150c5dfac94e Mon Sep 17 00:00:00 2001 From: Luis Doebbel Date: Fri, 31 Jan 2025 17:35:26 -0500 Subject: [PATCH 5/7] Vite config adjusted to avoid errors on very first load --- .../src/routes/public-routes/uikit/UiKit.tsx | 32 +- .../public-routes/uikit/uikit.route.tsx | 15 - frontend/vite.config.ts | 5 + frontend/yarn.lock | 646 +++++++++--------- 4 files changed, 338 insertions(+), 360 deletions(-) delete mode 100755 frontend/src/routes/public-routes/uikit/uikit.route.tsx diff --git a/frontend/src/routes/public-routes/uikit/UiKit.tsx b/frontend/src/routes/public-routes/uikit/UiKit.tsx index 8fd2825..3daf284 100644 --- a/frontend/src/routes/public-routes/uikit/UiKit.tsx +++ b/frontend/src/routes/public-routes/uikit/UiKit.tsx @@ -2,13 +2,12 @@ import Button from "@components/button/Button"; import FieldHelperText from "@components/fieldHelperText/FieldHelperText"; import Link from "@components/link/Link"; import Loading from "@components/loading/Loading"; -import Spinner from "@components/spinner/Spinner"; -import Typography from "@mui/material/Typography"; import UikitBlock from "@components/uikit/uikitBlock/UikitBlock"; import UikitColor from "@components/uikit/uikitColor/UikitColor"; -import UikitNav, { INavItem } from "@components/uikit/uikitNav/UikitNav"; +import UikitNav, { type INavItem } from "@components/uikit/uikitNav/UikitNav"; +import { Box, TextField } from "@mui/material"; import Grid from "@mui/material/Grid2"; -import { TextField } from "@mui/material"; +import Typography from "@mui/material/Typography"; import { useCallback, useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { ValidationError } from "yup"; @@ -72,8 +71,8 @@ export default function UiKit() { }, []); return ( -
({ padding: theme.customProperties.spacing.xl })}> -
({ padding: theme.customProperties.spacing.xl })}> + ({ display: "flex", gap: theme.customProperties.spacing.xl, @@ -95,12 +94,12 @@ export default function UiKit() { })} > For all the Styled MUI components, please refer to - + MUI documentation -
({ display: "flex", flexDirection: "column", @@ -184,17 +183,6 @@ export default function UiKit() { /> - - {/* styling inline like this to prevent the spinner from changing the height of the page while spinning, do not style inline in projects */} -
- -
-
- Show Loading {showLoading && } -
+
-
-
+ + ); } diff --git a/frontend/src/routes/public-routes/uikit/uikit.route.tsx b/frontend/src/routes/public-routes/uikit/uikit.route.tsx deleted file mode 100755 index 3baefd2..0000000 --- a/frontend/src/routes/public-routes/uikit/uikit.route.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import en from "@assets/locales/en.json"; -import fr from "@assets/locales/fr.json"; -import { IRoute } from "@routes/interfaces/IRoute"; -import { lazy } from "react"; - -const uikitRoute: IRoute = { - name: "uikit__page_title", - component: lazy(() => import("./UiKit")), - paths: { - en: `/${en.locale__key}/${en.routes__uikit}`, - fr: `/${fr.locale__key}/${fr.routes__uikit}`, - }, -}; - -export default uikitRoute; diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 2ae2eac..9b188ce 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -25,5 +25,10 @@ export default defineConfig(({ mode }) => { server: { port: Number(env.VITE_PORT), }, + optimizeDeps: { + // this fixes a bug where the app crashes on the first load while optimizing dependencies + // https://github.com/remix-run/remix/issues/10156 + entries: ["src/**/*.tsx", "src/**/*.ts"], + }, }; }); diff --git a/frontend/yarn.lock b/frontend/yarn.lock index c696547..e1b6e9b 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -15,7 +15,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.0, @babel/code-frame@npm:^7.26.2": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.2": version: 7.26.2 resolution: "@babel/code-frame@npm:7.26.2" dependencies: @@ -34,29 +34,29 @@ __metadata: linkType: hard "@babel/core@npm:^7.21.8, @babel/core@npm:^7.23.7": - version: 7.26.0 - resolution: "@babel/core@npm:7.26.0" + version: 7.26.7 + resolution: "@babel/core@npm:7.26.7" dependencies: "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.26.0" - "@babel/generator": "npm:^7.26.0" - "@babel/helper-compilation-targets": "npm:^7.25.9" + "@babel/code-frame": "npm:^7.26.2" + "@babel/generator": "npm:^7.26.5" + "@babel/helper-compilation-targets": "npm:^7.26.5" "@babel/helper-module-transforms": "npm:^7.26.0" - "@babel/helpers": "npm:^7.26.0" - "@babel/parser": "npm:^7.26.0" + "@babel/helpers": "npm:^7.26.7" + "@babel/parser": "npm:^7.26.7" "@babel/template": "npm:^7.25.9" - "@babel/traverse": "npm:^7.25.9" - "@babel/types": "npm:^7.26.0" + "@babel/traverse": "npm:^7.26.7" + "@babel/types": "npm:^7.26.7" convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: 10c0/91de73a7ff5c4049fbc747930aa039300e4d2670c2a91f5aa622f1b4868600fc89b01b6278385fbcd46f9574186fa3d9b376a9e7538e50f8d118ec13cfbcb63e + checksum: 10c0/fbd2cd9fc23280bdcaca556e558f715c0a42d940b9913c52582e8e3d24e391d269cb8a9cd6589172593983569021c379e28bba6b19ea2ee08674f6068c210a9d languageName: node linkType: hard -"@babel/generator@npm:^7.21.5, @babel/generator@npm:^7.26.0, @babel/generator@npm:^7.26.5": +"@babel/generator@npm:^7.21.5, @babel/generator@npm:^7.26.5": version: 7.26.5 resolution: "@babel/generator@npm:7.26.5" dependencies: @@ -78,7 +78,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.25.9": +"@babel/helper-compilation-targets@npm:^7.26.5": version: 7.26.5 resolution: "@babel/helper-compilation-targets@npm:7.26.5" dependencies: @@ -201,24 +201,24 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.26.0": - version: 7.26.0 - resolution: "@babel/helpers@npm:7.26.0" +"@babel/helpers@npm:^7.26.7": + version: 7.26.7 + resolution: "@babel/helpers@npm:7.26.7" dependencies: "@babel/template": "npm:^7.25.9" - "@babel/types": "npm:^7.26.0" - checksum: 10c0/343333cced6946fe46617690a1d0789346960910225ce359021a88a60a65bc0d791f0c5d240c0ed46cf8cc63b5fd7df52734ff14e43b9c32feae2b61b1647097 + "@babel/types": "npm:^7.26.7" + checksum: 10c0/37fec398e53a2dbbf24bc2a025c4d571b2556cef18d8116d05d04b153f13ef659cdfbaab96c8eed875e629d39bdf9b3ea5d099ccf80544537de224e2d94f9b11 languageName: node linkType: hard -"@babel/parser@npm:^7.21.8, @babel/parser@npm:^7.23.6, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.0, @babel/parser@npm:^7.26.5": - version: 7.26.5 - resolution: "@babel/parser@npm:7.26.5" +"@babel/parser@npm:^7.21.8, @babel/parser@npm:^7.23.6, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.5, @babel/parser@npm:^7.26.7": + version: 7.26.7 + resolution: "@babel/parser@npm:7.26.7" dependencies: - "@babel/types": "npm:^7.26.5" + "@babel/types": "npm:^7.26.7" bin: parser: ./bin/babel-parser.js - checksum: 10c0/2e77dd99ee028ee3c10fa03517ae1169f2432751adf71315e4dc0d90b61639d51760d622f418f6ac665ae4ea65f8485232a112ea0e76f18e5900225d3d19a61e + checksum: 10c0/dcb08a4f2878ece33caffefe43b71488d753324bae7ca58d64bca3bc4af34dcfa1b58abdf9972516d76af760fceb25bb9294ca33461d56b31c5059ccfe32001f languageName: node linkType: hard @@ -268,8 +268,8 @@ __metadata: linkType: hard "@babel/plugin-transform-typescript@npm:^7.25.9": - version: 7.26.5 - resolution: "@babel/plugin-transform-typescript@npm:7.26.5" + version: 7.26.7 + resolution: "@babel/plugin-transform-typescript@npm:7.26.7" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.25.9" "@babel/helper-create-class-features-plugin": "npm:^7.25.9" @@ -278,7 +278,7 @@ __metadata: "@babel/plugin-syntax-typescript": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/64204b1f1c77d896142071cc174e7bb4fbc597bdc0ea73aec8de1a72d252755db381b9ed40342fc283c32387d7375d0803d0aed8262dd503633f5035148d47a0 + checksum: 10c0/4cb3a1939cd585563f56b7860f88c3154869189bcf555840486bd0402bf2bddac40d8fa897321295a911f4b8ec71b690b09eaa241e69fc5f8f7f4718a3d971fd languageName: node linkType: hard @@ -298,11 +298,11 @@ __metadata: linkType: hard "@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.25.0, @babel/runtime@npm:^7.26.0, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.7": - version: 7.26.0 - resolution: "@babel/runtime@npm:7.26.0" + version: 7.26.7 + resolution: "@babel/runtime@npm:7.26.7" dependencies: regenerator-runtime: "npm:^0.14.0" - checksum: 10c0/12c01357e0345f89f4f7e8c0e81921f2a3e3e101f06e8eaa18a382b517376520cd2fa8c237726eb094dab25532855df28a7baaf1c26342b52782f6936b07c287 + checksum: 10c0/60199c049f90e5e41c687687430052a370aca60bac7859ff4ee761c5c1739b8ba1604d391d01588c22dc0e93828cbadb8ada742578ad1b1df240746bce98729a languageName: node linkType: hard @@ -317,28 +317,28 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.23.2, @babel/traverse@npm:^7.23.7, @babel/traverse@npm:^7.25.9, @babel/traverse@npm:^7.26.5": - version: 7.26.5 - resolution: "@babel/traverse@npm:7.26.5" +"@babel/traverse@npm:^7.23.2, @babel/traverse@npm:^7.23.7, @babel/traverse@npm:^7.25.9, @babel/traverse@npm:^7.26.5, @babel/traverse@npm:^7.26.7": + version: 7.26.7 + resolution: "@babel/traverse@npm:7.26.7" dependencies: "@babel/code-frame": "npm:^7.26.2" "@babel/generator": "npm:^7.26.5" - "@babel/parser": "npm:^7.26.5" + "@babel/parser": "npm:^7.26.7" "@babel/template": "npm:^7.25.9" - "@babel/types": "npm:^7.26.5" + "@babel/types": "npm:^7.26.7" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: 10c0/0779059ecf63e31446564cf31adf170e701e8017ef02c819c57924a9a83d6b2ce41dbff3ef295589da9410497a3e575655bb8084ca470e0ab1bc193128afa9fe + checksum: 10c0/b23a36ce40d2e4970741431c45d4f92e3f4c2895c0a421456516b2729bd9e17278846e01ee3d9039b0adf5fc5a071768061c17fcad040e74a5c3e39517449d5b languageName: node linkType: hard -"@babel/types@npm:^7.22.5, @babel/types@npm:^7.23.6, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.26.5": - version: 7.26.5 - resolution: "@babel/types@npm:7.26.5" +"@babel/types@npm:^7.22.5, @babel/types@npm:^7.23.6, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.5, @babel/types@npm:^7.26.7": + version: 7.26.7 + resolution: "@babel/types@npm:7.26.7" dependencies: "@babel/helper-string-parser": "npm:^7.25.9" "@babel/helper-validator-identifier": "npm:^7.25.9" - checksum: 10c0/0278053b69d7c2b8573aa36dc5242cad95f0d965e1c0ed21ccacac6330092e59ba5949753448f6d6eccf6ad59baaef270295cc05218352e060ea8c68388638c4 + checksum: 10c0/7810a2bca97b13c253f07a0863a628d33dbe76ee3c163367f24be93bfaf4c8c0a325f73208abaaa050a6b36059efc2950c2e4b71fb109c0f07fa62221d8473d4 languageName: node linkType: hard @@ -885,13 +885,13 @@ __metadata: linkType: hard "@eslint/config-array@npm:^0.19.0": - version: 0.19.1 - resolution: "@eslint/config-array@npm:0.19.1" + version: 0.19.2 + resolution: "@eslint/config-array@npm:0.19.2" dependencies: - "@eslint/object-schema": "npm:^2.1.5" + "@eslint/object-schema": "npm:^2.1.6" debug: "npm:^4.3.1" minimatch: "npm:^3.1.2" - checksum: 10c0/43b01f596ddad404473beae5cf95c013d29301c72778d0f5bf8a6699939c8a9a5663dbd723b53c5f476b88b0c694f76ea145d1aa9652230d140fe1161e4a4b49 + checksum: 10c0/dd68da9abb32d336233ac4fe0db1e15a0a8d794b6e69abb9e57545d746a97f6f542496ff9db0d7e27fab1438546250d810d90b1904ac67677215b8d8e7573f3d languageName: node linkType: hard @@ -921,17 +921,17 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:9.18.0, @eslint/js@npm:^9.18.0": - version: 9.18.0 - resolution: "@eslint/js@npm:9.18.0" - checksum: 10c0/3938344c5ac7feef4b73fcb30f3c3e753570cea74c24904bb5d07e9c42fcd34fcbc40f545b081356a299e11f360c9c274b348c05fb0113fc3d492e5175eee140 +"@eslint/js@npm:9.19.0, @eslint/js@npm:^9.18.0": + version: 9.19.0 + resolution: "@eslint/js@npm:9.19.0" + checksum: 10c0/45dc544c8803984f80a438b47a8e578fae4f6e15bc8478a703827aaf05e21380b42a43560374ce4dad0d5cb6349e17430fc9ce1686fed2efe5d1ff117939ff90 languageName: node linkType: hard -"@eslint/object-schema@npm:^2.1.5": - version: 2.1.5 - resolution: "@eslint/object-schema@npm:2.1.5" - checksum: 10c0/5320691ed41ecd09a55aff40ce8e56596b4eb81f3d4d6fe530c50fdd6552d88102d1c1a29d970ae798ce30849752a708772de38ded07a6f25b3da32ebea081d8 +"@eslint/object-schema@npm:^2.1.6": + version: 2.1.6 + resolution: "@eslint/object-schema@npm:2.1.6" + checksum: 10c0/b8cdb7edea5bc5f6a96173f8d768d3554a628327af536da2fc6967a93b040f2557114d98dbcdbf389d5a7b290985ad6a9ce5babc547f36fc1fde42e674d11a56 languageName: node linkType: hard @@ -1064,38 +1064,38 @@ __metadata: languageName: node linkType: hard -"@mui/core-downloads-tracker@npm:^6.4.1": - version: 6.4.1 - resolution: "@mui/core-downloads-tracker@npm:6.4.1" - checksum: 10c0/5c35592eecb6b9b64b23003975a8ce20fadb9e9b712a78dd552b5ea835d06e8e4d7b7cb84f471f5658b5285de317a860b40597ad3c5e494e84f0ae0daf35fd6b +"@mui/core-downloads-tracker@npm:^6.4.2": + version: 6.4.2 + resolution: "@mui/core-downloads-tracker@npm:6.4.2" + checksum: 10c0/7df1784d2b79fc90b808b0f02c1f2f2f5ab58f7b4967c11703571202a5ab0cf9ebc20708d2c6c7b09c3bf6d03669ffa32ad7e47246439fbe2642f51a85744069 languageName: node linkType: hard "@mui/icons-material@npm:^6.4.1": - version: 6.4.1 - resolution: "@mui/icons-material@npm:6.4.1" + version: 6.4.2 + resolution: "@mui/icons-material@npm:6.4.2" dependencies: "@babel/runtime": "npm:^7.26.0" peerDependencies: - "@mui/material": ^6.4.1 + "@mui/material": ^6.4.2 "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/f551aea11f0c3a6ff0336333e1cf28b69d7965e5984643067e5f8563eabf1434dee910c9b4beb530f785f191b0ec14520d9c41fd8ee6649f4f8d26f831f02ba8 + checksum: 10c0/b182f0ba58fd400852a4b7e3497f0ad5e6d3051f7a6d1b442e823d04c14f3e1d65958bfe41782573622cb77c4628078fd1f30d262642597c6aa2dca95e1554d7 languageName: node linkType: hard "@mui/material@npm:^6.4.1": - version: 6.4.1 - resolution: "@mui/material@npm:6.4.1" + version: 6.4.2 + resolution: "@mui/material@npm:6.4.2" dependencies: "@babel/runtime": "npm:^7.26.0" - "@mui/core-downloads-tracker": "npm:^6.4.1" - "@mui/system": "npm:^6.4.1" + "@mui/core-downloads-tracker": "npm:^6.4.2" + "@mui/system": "npm:^6.4.2" "@mui/types": "npm:^7.2.21" - "@mui/utils": "npm:^6.4.1" + "@mui/utils": "npm:^6.4.2" "@popperjs/core": "npm:^2.11.8" "@types/react-transition-group": "npm:^4.4.12" clsx: "npm:^2.1.1" @@ -1106,7 +1106,7 @@ __metadata: peerDependencies: "@emotion/react": ^11.5.0 "@emotion/styled": ^11.3.0 - "@mui/material-pigment-css": ^6.4.1 + "@mui/material-pigment-css": ^6.4.2 "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -1119,16 +1119,16 @@ __metadata: optional: true "@types/react": optional: true - checksum: 10c0/c5ad8ab4339e145cac815cd9fdd9c909d5e2e5edf4997b8afe5edc320f3a020ddb857b5939f6a4453a34d996e3f334804c3858c5dc5f0bfede087e7d6b5e574e + checksum: 10c0/e77604a7f83a5f8526077a9b7394e644d919dee5661f676d8b60ec6a7b9ae6a11eb5cf6656e9383d45467b7eb8e6d7e559f942df494f0bec908ff018874b97ae languageName: node linkType: hard -"@mui/private-theming@npm:^6.4.1": - version: 6.4.1 - resolution: "@mui/private-theming@npm:6.4.1" +"@mui/private-theming@npm:^6.4.2": + version: 6.4.2 + resolution: "@mui/private-theming@npm:6.4.2" dependencies: "@babel/runtime": "npm:^7.26.0" - "@mui/utils": "npm:^6.4.1" + "@mui/utils": "npm:^6.4.2" prop-types: "npm:^15.8.1" peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -1136,13 +1136,13 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/5b6936e6dff6218373579f901aabba01eea1953e97a5b4b695736aeebca2d39fc7c2b4d0e54ab064d1ba99a6ffce0d907098791ecec28795f7da25c1bd0d33cb + checksum: 10c0/23d5a51a91db3ff6849e3511d95c7726969c888ff67a06b9f1d91a6aa322d37f9376baaf9ac53a21fa1ec200c7be2a7c7eb6205bf3f20042460da19d52a6d83d languageName: node linkType: hard -"@mui/styled-engine@npm:^6.4.0": - version: 6.4.0 - resolution: "@mui/styled-engine@npm:6.4.0" +"@mui/styled-engine@npm:^6.4.2": + version: 6.4.2 + resolution: "@mui/styled-engine@npm:6.4.2" dependencies: "@babel/runtime": "npm:^7.26.0" "@emotion/cache": "npm:^11.13.5" @@ -1159,19 +1159,19 @@ __metadata: optional: true "@emotion/styled": optional: true - checksum: 10c0/bff35147ca9ef586679b53786d840e98837f0c1e5bf10a3510d4b2b68c340ae4ab69befe94b69ef25f6846bada5b3c355d25fa3a179d1598499e28c51f28d5d2 + checksum: 10c0/c60622d11d2f039d48c182674206b6117df8399dfe3f28a7b5ac21bc6f838ee3b6d2c637243c7bb39b067f042097d3ebf87e410c959435d419aaf8f9d78b366c languageName: node linkType: hard -"@mui/system@npm:^6.4.1": - version: 6.4.1 - resolution: "@mui/system@npm:6.4.1" +"@mui/system@npm:^6.4.2": + version: 6.4.2 + resolution: "@mui/system@npm:6.4.2" dependencies: "@babel/runtime": "npm:^7.26.0" - "@mui/private-theming": "npm:^6.4.1" - "@mui/styled-engine": "npm:^6.4.0" + "@mui/private-theming": "npm:^6.4.2" + "@mui/styled-engine": "npm:^6.4.2" "@mui/types": "npm:^7.2.21" - "@mui/utils": "npm:^6.4.1" + "@mui/utils": "npm:^6.4.2" clsx: "npm:^2.1.1" csstype: "npm:^3.1.3" prop-types: "npm:^15.8.1" @@ -1187,7 +1187,7 @@ __metadata: optional: true "@types/react": optional: true - checksum: 10c0/34d731fb5faf1a6242c9faca5672a4b8722ac97cf5d1fd58cf85cce093cfbd2249ed57dd4c33e8f3b879c611e0fab56bb9e0e8fc1b7c8a49cbe4dd39ba32f98d + checksum: 10c0/4a298140eb354b4842bcb00c45da0a8803fd41a2c7fa3ef9fa1218c9931e6ba3bb3fcf44b92e628042b5420ff4979ae089d9327da89d3bfb0c67b38d8a432d64 languageName: node linkType: hard @@ -1203,9 +1203,9 @@ __metadata: languageName: node linkType: hard -"@mui/utils@npm:^6.4.1": - version: 6.4.1 - resolution: "@mui/utils@npm:6.4.1" +"@mui/utils@npm:^6.4.2": + version: 6.4.2 + resolution: "@mui/utils@npm:6.4.2" dependencies: "@babel/runtime": "npm:^7.26.0" "@mui/types": "npm:^7.2.21" @@ -1219,7 +1219,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/c0cfb8737db7c5709ce35ebdf739c5014914a1344e1b305d13a75b061b970656777eaf01f6fbdb8f209da91c086ab36dd3f5ddc1c94237c5868a383cdd1aad81 + checksum: 10c0/981a267c87d4ed9e9880dd98e31a16b8ff9e268295d4bcc7d185bf5e19a0d7b0afe14e9e37263acb054694f4520a8c5bf6d8ced6f6df1cbef4e8163d44a52da4 languageName: node linkType: hard @@ -1327,8 +1327,8 @@ __metadata: linkType: hard "@react-router/dev@npm:^7.1.3": - version: 7.1.3 - resolution: "@react-router/dev@npm:7.1.3" + version: 7.1.5 + resolution: "@react-router/dev@npm:7.1.5" dependencies: "@babel/core": "npm:^7.21.8" "@babel/generator": "npm:^7.21.5" @@ -1339,7 +1339,7 @@ __metadata: "@babel/traverse": "npm:^7.23.2" "@babel/types": "npm:^7.22.5" "@npmcli/package-json": "npm:^4.0.1" - "@react-router/node": "npm:7.1.3" + "@react-router/node": "npm:7.1.5" arg: "npm:^5.0.1" babel-dead-code-elimination: "npm:^1.0.6" chokidar: "npm:^4.0.0" @@ -1360,8 +1360,8 @@ __metadata: valibot: "npm:^0.41.0" vite-node: "npm:3.0.0-beta.2" peerDependencies: - "@react-router/serve": ^7.1.3 - react-router: ^7.1.3 + "@react-router/serve": ^7.1.5 + react-router: ^7.1.5 typescript: ^5.1.0 vite: ^5.1.0 || ^6.0.0 wrangler: ^3.28.2 @@ -1374,230 +1374,230 @@ __metadata: optional: true bin: react-router: bin.js - checksum: 10c0/3d0e8f910ca30293b9f2d86a0e7c3d33eb8187182295c528fadc6eb12ff70cb977d22d8845261344e893ada7efd19486f38f49eaae1427b41449a9572f83e87d + checksum: 10c0/32a35b73dddffba789eacf2ed15e65c693c87f9e0fbca03ca15999faeef68ab5c2a2da6c2f205e5100557fcf907e81f79e3b34c3c49c98b4489c34f5a20dd83a languageName: node linkType: hard -"@react-router/express@npm:7.1.3": - version: 7.1.3 - resolution: "@react-router/express@npm:7.1.3" +"@react-router/express@npm:7.1.5": + version: 7.1.5 + resolution: "@react-router/express@npm:7.1.5" dependencies: - "@react-router/node": "npm:7.1.3" + "@react-router/node": "npm:7.1.5" peerDependencies: express: ^4.17.1 - react-router: 7.1.3 + react-router: 7.1.5 typescript: ^5.1.0 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/530a64cec25bca99f4433186784b7effe591dc90956a173f89795bed90561a879544b41b5a90c1688ae38102cb666fecea252237b64b31a007803a3dff878140 + checksum: 10c0/db026b322aa14dca227ca255e41c09332d5e6f1c1bc789805ceffc154f9e597b54ae368b1b0e93790cb749ba6988b682ebe2f029b6851f32e16dbb4c168d4e62 languageName: node linkType: hard -"@react-router/node@npm:7.1.3, @react-router/node@npm:^7.1.3": - version: 7.1.3 - resolution: "@react-router/node@npm:7.1.3" +"@react-router/node@npm:7.1.5, @react-router/node@npm:^7.1.3": + version: 7.1.5 + resolution: "@react-router/node@npm:7.1.5" dependencies: "@mjackson/node-fetch-server": "npm:^0.2.0" source-map-support: "npm:^0.5.21" stream-slice: "npm:^0.1.2" undici: "npm:^6.19.2" peerDependencies: - react-router: 7.1.3 + react-router: 7.1.5 typescript: ^5.1.0 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/fc9abbaa9315e9433fda52677470e266af03be528a18eda89f598431b68c626abbde3109d9ef2c17eaf5c30fe6a63c7e9f77f5a152059eaae48a2cf75b6937bb + checksum: 10c0/44dafd5f426f874c959c24480d504468f2ba69ca655783cf4428615f2d0f9eb8385546580465e145684181bdb69d7e730dba01720798f05a238dcf84143ae3da languageName: node linkType: hard "@react-router/serve@npm:^7.1.3": - version: 7.1.3 - resolution: "@react-router/serve@npm:7.1.3" + version: 7.1.5 + resolution: "@react-router/serve@npm:7.1.5" dependencies: - "@react-router/express": "npm:7.1.3" - "@react-router/node": "npm:7.1.3" + "@react-router/express": "npm:7.1.5" + "@react-router/node": "npm:7.1.5" compression: "npm:^1.7.4" express: "npm:^4.19.2" get-port: "npm:5.1.1" morgan: "npm:^1.10.0" source-map-support: "npm:^0.5.21" peerDependencies: - react-router: 7.1.3 + react-router: 7.1.5 bin: react-router-serve: bin.js - checksum: 10c0/1f383e2f32c4b65f967a3abe280aa7ac0df85893d711e13e95d1f22b0b89987fdab455c8ee77e91e91d05ed9f6ffeb183915fe34228c069c23435491c2c0ad98 + checksum: 10c0/8b2f04ef6c1d4f761376a25a12a8727b9527064380bf2721bc09dce863a9a13d139bcdede89878c96602d0fc3824c5891f64148b03dd518b26d3922707efa89c languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.31.0" +"@rollup/rollup-android-arm-eabi@npm:4.32.1": + version: 4.32.1 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.32.1" conditions: os=android & cpu=arm languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-android-arm64@npm:4.31.0" +"@rollup/rollup-android-arm64@npm:4.32.1": + version: 4.32.1 + resolution: "@rollup/rollup-android-arm64@npm:4.32.1" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-darwin-arm64@npm:4.31.0" +"@rollup/rollup-darwin-arm64@npm:4.32.1": + version: 4.32.1 + resolution: "@rollup/rollup-darwin-arm64@npm:4.32.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-darwin-x64@npm:4.31.0" +"@rollup/rollup-darwin-x64@npm:4.32.1": + version: 4.32.1 + resolution: "@rollup/rollup-darwin-x64@npm:4.32.1" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-freebsd-arm64@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-freebsd-arm64@npm:4.31.0" +"@rollup/rollup-freebsd-arm64@npm:4.32.1": + version: 4.32.1 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.32.1" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-freebsd-x64@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-freebsd-x64@npm:4.31.0" +"@rollup/rollup-freebsd-x64@npm:4.32.1": + version: 4.32.1 + resolution: "@rollup/rollup-freebsd-x64@npm:4.32.1" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.31.0" +"@rollup/rollup-linux-arm-gnueabihf@npm:4.32.1": + version: 4.32.1 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.32.1" conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.31.0" +"@rollup/rollup-linux-arm-musleabihf@npm:4.32.1": + version: 4.32.1 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.32.1" conditions: os=linux & cpu=arm & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.31.0" +"@rollup/rollup-linux-arm64-gnu@npm:4.32.1": + version: 4.32.1 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.32.1" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.31.0" +"@rollup/rollup-linux-arm64-musl@npm:4.32.1": + version: 4.32.1 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.32.1" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-loongarch64-gnu@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.31.0" +"@rollup/rollup-linux-loongarch64-gnu@npm:4.32.1": + version: 4.32.1 + resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.32.1" conditions: os=linux & cpu=loong64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.31.0" +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.32.1": + version: 4.32.1 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.32.1" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.31.0" +"@rollup/rollup-linux-riscv64-gnu@npm:4.32.1": + version: 4.32.1 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.32.1" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.31.0" +"@rollup/rollup-linux-s390x-gnu@npm:4.32.1": + version: 4.32.1 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.32.1" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.31.0" +"@rollup/rollup-linux-x64-gnu@npm:4.32.1": + version: 4.32.1 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.32.1" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.31.0" +"@rollup/rollup-linux-x64-musl@npm:4.32.1": + version: 4.32.1 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.32.1" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.31.0" +"@rollup/rollup-win32-arm64-msvc@npm:4.32.1": + version: 4.32.1 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.32.1" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.31.0" +"@rollup/rollup-win32-ia32-msvc@npm:4.32.1": + version: 4.32.1 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.32.1" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.31.0" +"@rollup/rollup-win32-x64-msvc@npm:4.32.1": + version: 4.32.1 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.32.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@tanstack/query-core@npm:5.64.2": - version: 5.64.2 - resolution: "@tanstack/query-core@npm:5.64.2" - checksum: 10c0/96dfaa334d2e3aeb3bcd55a3b8b3f3b4f7283b435d90681302ca6c08d0a597a5745c3c790d0242908266af6188efe804aac3c82ca8ed3fd7cd73c24220d93acc +"@tanstack/query-core@npm:5.66.0": + version: 5.66.0 + resolution: "@tanstack/query-core@npm:5.66.0" + checksum: 10c0/a03afcb3a075f1923ce3d03dcb16662bb35159280bf87598b9d446366cfd47f5c736be41fb90938c4e6848633c036087d7019f0dbb95f2f2450a9fea4764adbb languageName: node linkType: hard -"@tanstack/query-devtools@npm:5.64.2": - version: 5.64.2 - resolution: "@tanstack/query-devtools@npm:5.64.2" - checksum: 10c0/6ed57ad727be66c79ce82149cee1ad94255af2e2e29a0985c42f5bd589a206c8dcdc7a9c8611496a55e6463bd047c55fe0cf1f59455cb2735aee1090ce37ae0b +"@tanstack/query-devtools@npm:5.65.0": + version: 5.65.0 + resolution: "@tanstack/query-devtools@npm:5.65.0" + checksum: 10c0/7d223e267d7d807d8d597edf08403dbd08e033079fe235e1a37e1449a9922a00cf68d4d1feeb2852f99e2efe386d0c3242856cb0568da0f574778a3187e67a38 languageName: node linkType: hard "@tanstack/react-query-devtools@npm:^5.64.2": - version: 5.64.2 - resolution: "@tanstack/react-query-devtools@npm:5.64.2" + version: 5.66.0 + resolution: "@tanstack/react-query-devtools@npm:5.66.0" dependencies: - "@tanstack/query-devtools": "npm:5.64.2" + "@tanstack/query-devtools": "npm:5.65.0" peerDependencies: - "@tanstack/react-query": ^5.64.2 + "@tanstack/react-query": ^5.66.0 react: ^18 || ^19 - checksum: 10c0/d4dfeb2f3b91848c724668c1226a69dfec311ccaa830d4dea8b5de2c2e42d762b5c1d03f44dff8d95651d0ec203dd98535b330725b2e38d0ae6f41f4f5d9c1b4 + checksum: 10c0/2b4781d21a33fb3d412cd448a227ff7ec8eb8774db573cf27e9192ab649ae9298e975dc418920effd468f3fe310fd8e8bd3c8091c1c2299963a5f889b5d6c061 languageName: node linkType: hard "@tanstack/react-query@npm:^5.64.2": - version: 5.64.2 - resolution: "@tanstack/react-query@npm:5.64.2" + version: 5.66.0 + resolution: "@tanstack/react-query@npm:5.66.0" dependencies: - "@tanstack/query-core": "npm:5.64.2" + "@tanstack/query-core": "npm:5.66.0" peerDependencies: react: ^18 || ^19 - checksum: 10c0/4e81c8e922ced8ef5f2e5975d7784409b532ce007b1771fe8569e380d08666b5323a90fa91de6ef10f9f2f8882d3fdf1be109eeb99a54bd84b1fa2075de9e75b + checksum: 10c0/60e1a3fd7f2f8b2038d70954b51eeb84c31273d09a68537babdc2ac3d8c200968a1f7865a8e189ffd63be0c30387985b4b4eaf1d9065990bd3699ac5872b7523 languageName: node linkType: hard @@ -1686,15 +1686,15 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:8.21.0": - version: 8.21.0 - resolution: "@typescript-eslint/eslint-plugin@npm:8.21.0" +"@typescript-eslint/eslint-plugin@npm:8.22.0": + version: 8.22.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.22.0" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:8.21.0" - "@typescript-eslint/type-utils": "npm:8.21.0" - "@typescript-eslint/utils": "npm:8.21.0" - "@typescript-eslint/visitor-keys": "npm:8.21.0" + "@typescript-eslint/scope-manager": "npm:8.22.0" + "@typescript-eslint/type-utils": "npm:8.22.0" + "@typescript-eslint/utils": "npm:8.22.0" + "@typescript-eslint/visitor-keys": "npm:8.22.0" graphemer: "npm:^1.4.0" ignore: "npm:^5.3.1" natural-compare: "npm:^1.4.0" @@ -1703,64 +1703,64 @@ __metadata: "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.8.0" - checksum: 10c0/4601d21ec35b9fa5cfc1ad0330733ab40d6c6822c7fc15c3584a16f678c9a72e077a1725a950823fe0f499a15f3981795b1ea5d1e7a1be5c7b8296ea9ae6327c + checksum: 10c0/eecc23e05287cc99a43855d64c0f0898f690ee14b8c31b60ba92ce9732443f6b0c9695514b276fb2ecd27e64c15d4c38cd28b570779115525b4dfdbba60e81ca languageName: node linkType: hard -"@typescript-eslint/parser@npm:8.21.0": - version: 8.21.0 - resolution: "@typescript-eslint/parser@npm:8.21.0" +"@typescript-eslint/parser@npm:8.22.0": + version: 8.22.0 + resolution: "@typescript-eslint/parser@npm:8.22.0" dependencies: - "@typescript-eslint/scope-manager": "npm:8.21.0" - "@typescript-eslint/types": "npm:8.21.0" - "@typescript-eslint/typescript-estree": "npm:8.21.0" - "@typescript-eslint/visitor-keys": "npm:8.21.0" + "@typescript-eslint/scope-manager": "npm:8.22.0" + "@typescript-eslint/types": "npm:8.22.0" + "@typescript-eslint/typescript-estree": "npm:8.22.0" + "@typescript-eslint/visitor-keys": "npm:8.22.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.8.0" - checksum: 10c0/aadebd50ca7aa2d61ad85d890c0d7010f2c293ec4d50a7833ef9674f232f0bc7118faa93a898771fbea50f02d542d687cf3569421b23f72fe6fed6895d5506fc + checksum: 10c0/6575684d4724aa908b0d6a29db5d5054b9277804844ee4179c77371f8b8b84534b9b7e4df0e282c5f39729ae6f0019208a6b83f0ca5d0f06f9da5a06d8ddb4fd languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.21.0": - version: 8.21.0 - resolution: "@typescript-eslint/scope-manager@npm:8.21.0" +"@typescript-eslint/scope-manager@npm:8.22.0": + version: 8.22.0 + resolution: "@typescript-eslint/scope-manager@npm:8.22.0" dependencies: - "@typescript-eslint/types": "npm:8.21.0" - "@typescript-eslint/visitor-keys": "npm:8.21.0" - checksum: 10c0/ea405e79dc884ea1c76465604db52f9b0941d6cbb0bde6bce1af689ef212f782e214de69d46503c7c47bfc180d763369b7433f1965e3be3c442b417e8c9f8f75 + "@typescript-eslint/types": "npm:8.22.0" + "@typescript-eslint/visitor-keys": "npm:8.22.0" + checksum: 10c0/f393ab32086f4b095fcd77169abb5200ad94f282860944d164cec8c9b70090c36235f49b066ba24dfd953201b7730e48200a254e5950a9a3565acdacbbc0fd64 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.21.0": - version: 8.21.0 - resolution: "@typescript-eslint/type-utils@npm:8.21.0" +"@typescript-eslint/type-utils@npm:8.22.0": + version: 8.22.0 + resolution: "@typescript-eslint/type-utils@npm:8.22.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:8.21.0" - "@typescript-eslint/utils": "npm:8.21.0" + "@typescript-eslint/typescript-estree": "npm:8.22.0" + "@typescript-eslint/utils": "npm:8.22.0" debug: "npm:^4.3.4" ts-api-utils: "npm:^2.0.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.8.0" - checksum: 10c0/617f5dfe83fd9a7c722b27fa4e7f0c84f29baa94f75a4e8e5ccfd5b0a373437f65724e21b9642870fb0960f204b1a7f516a038200a12f8118f21b1bf86315bf3 + checksum: 10c0/dc457d9184dc2156eda225c63de03b1052d75464d6393edaf0f1728eecf64170f73e19bc9b9d4a4a029870ce25015b59bd6705e1e18b731ca4fcecac4398bfb7 languageName: node linkType: hard -"@typescript-eslint/types@npm:8.21.0": - version: 8.21.0 - resolution: "@typescript-eslint/types@npm:8.21.0" - checksum: 10c0/67dfd300cc614d7b02e94d0dacfb228a7f4c3fd4eede29c43adb9e9fcc16365ae3df8d6165018da3c123dce65545bef03e3e8183f35e9b3a911ffc727e3274c2 +"@typescript-eslint/types@npm:8.22.0": + version: 8.22.0 + resolution: "@typescript-eslint/types@npm:8.22.0" + checksum: 10c0/6357d0937e2b84ddb00763d05053fe50f2270fa428aa11f1ad6a1293827cf54da7e6d4d20b00b9d4f633b6982a2eb0e494f05285daa1279d8a3493f0d8abae18 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.21.0": - version: 8.21.0 - resolution: "@typescript-eslint/typescript-estree@npm:8.21.0" +"@typescript-eslint/typescript-estree@npm:8.22.0": + version: 8.22.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.22.0" dependencies: - "@typescript-eslint/types": "npm:8.21.0" - "@typescript-eslint/visitor-keys": "npm:8.21.0" + "@typescript-eslint/types": "npm:8.22.0" + "@typescript-eslint/visitor-keys": "npm:8.22.0" debug: "npm:^4.3.4" fast-glob: "npm:^3.3.2" is-glob: "npm:^4.0.3" @@ -1769,32 +1769,32 @@ __metadata: ts-api-utils: "npm:^2.0.0" peerDependencies: typescript: ">=4.8.4 <5.8.0" - checksum: 10c0/0cf5b0382524f4af54fb5ec71ca7e939ec922711f2d77b383740b28dd4b21407b0ab5dded62df6819d01c12c0b354e95667e3c7025a5d27d05b805161ab94855 + checksum: 10c0/0a9d77fbadfb1e54c06abde424e461103576595c70e50ae8a15a3d7c07f125f253f505208e1ea5cc483b9073d95fc10ce0c4ddfe0fe08ec2aceda6314c341e0d languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.21.0": - version: 8.21.0 - resolution: "@typescript-eslint/utils@npm:8.21.0" +"@typescript-eslint/utils@npm:8.22.0": + version: 8.22.0 + resolution: "@typescript-eslint/utils@npm:8.22.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:8.21.0" - "@typescript-eslint/types": "npm:8.21.0" - "@typescript-eslint/typescript-estree": "npm:8.21.0" + "@typescript-eslint/scope-manager": "npm:8.22.0" + "@typescript-eslint/types": "npm:8.22.0" + "@typescript-eslint/typescript-estree": "npm:8.22.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.8.0" - checksum: 10c0/d8347dbe9176417220aa62902cfc1b2007a9246bb7a8cccdf8590120903eb50ca14cb668efaab4646d086277f2367559985b62230e43ebd8b0723d237eeaa2f2 + checksum: 10c0/6f1e3f9c0fb865c8cef4fdca04679cea7357ed011338b54d80550e9ad5369a3f24cbe4b0985d293192fe351fa133e5f4ea401f47af90bb46c21903bfe087b398 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.21.0": - version: 8.21.0 - resolution: "@typescript-eslint/visitor-keys@npm:8.21.0" +"@typescript-eslint/visitor-keys@npm:8.22.0": + version: 8.22.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.22.0" dependencies: - "@typescript-eslint/types": "npm:8.21.0" + "@typescript-eslint/types": "npm:8.22.0" eslint-visitor-keys: "npm:^4.2.0" - checksum: 10c0/b3f1412f550e35c0d7ae0410db616951116b365167539f9b85710d8bc2b36b322c5e637caee84cc1ae5df8f1d961880250d52ffdef352b31e5bdbef74ba6fea9 + checksum: 10c0/fd83d2feadaf79950427fbbc3d23ca01cf4646ce7e0dd515a9c881d31ec1cc768e7b8898d3af065e31df39452501a3345092581cbfccac89e89d293519540557 languageName: node linkType: hard @@ -2246,13 +2246,13 @@ __metadata: languageName: node linkType: hard -"cacheable@npm:^1.8.7": - version: 1.8.7 - resolution: "cacheable@npm:1.8.7" +"cacheable@npm:^1.8.8": + version: 1.8.8 + resolution: "cacheable@npm:1.8.8" dependencies: - hookified: "npm:^1.6.0" + hookified: "npm:^1.7.0" keyv: "npm:^5.2.3" - checksum: 10c0/3403c2afe9f8bb804b2371e2aa45f10c1f817945ce20b3da2338d2f0b099c9a9d28e59939592e832ba0e6b1d932f8555cc0a0d815ca7bd68a086e1ad131ae40a + checksum: 10c0/24e0f93782015be75b1ec9fe3fb151b2921f61c282091b873f78a0efeb141e95a21d8aa5f4c6bd99a8acb0b485deb5801aa32b4ecf4b666efa7446739368588b languageName: node linkType: hard @@ -2296,9 +2296,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30001646, caniuse-lite@npm:^1.0.30001688": - version: 1.0.30001695 - resolution: "caniuse-lite@npm:1.0.30001695" - checksum: 10c0/acf90a767051fdd8083711b3ff9f07a28149c55e394115d8f874f149aa4f130e6bc50cea1dd94fe03035b9ebbe13b64f446518a6d2e19f72650962bdff44b2c5 + version: 1.0.30001696 + resolution: "caniuse-lite@npm:1.0.30001696" + checksum: 10c0/8060584c612b2bc232995a6e31153432de7946b5417d3b3505a3ab76e632e5568ccc7bae38f1a977f21d4fc214f9e64be829213f810694172c9109e258cb5be8 languageName: node linkType: hard @@ -2726,9 +2726,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.5.73": - version: 1.5.86 - resolution: "electron-to-chromium@npm:1.5.86" - checksum: 10c0/f0af8465d9390d21cb3ffec5ed6ce011b5026615f59ebc7a70bb0da806a27918888b2ec446432a5080da0e0bea4f3c6a3a4dcff24c9eb8e884813b0ccceedc59 + version: 1.5.90 + resolution: "electron-to-chromium@npm:1.5.90" + checksum: 10c0/864715adfebb5932a78f776c99f28a50942884302b42ee6de0ab64ca135891a5a43af3a7c719a7335687c0ee201561011e37d4994558a795f67b9e44f20fc6ee languageName: node linkType: hard @@ -3215,15 +3215,15 @@ __metadata: linkType: hard "eslint@npm:^9.18.0": - version: 9.18.0 - resolution: "eslint@npm:9.18.0" + version: 9.19.0 + resolution: "eslint@npm:9.19.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" "@eslint-community/regexpp": "npm:^4.12.1" "@eslint/config-array": "npm:^0.19.0" "@eslint/core": "npm:^0.10.0" "@eslint/eslintrc": "npm:^3.2.0" - "@eslint/js": "npm:9.18.0" + "@eslint/js": "npm:9.19.0" "@eslint/plugin-kit": "npm:^0.2.5" "@humanfs/node": "npm:^0.16.6" "@humanwhocodes/module-importer": "npm:^1.0.1" @@ -3259,7 +3259,7 @@ __metadata: optional: true bin: eslint: bin/eslint.js - checksum: 10c0/7f592ad228b9bd627a24870fdc875bacdab7bf535d4b67316c4cb791e90d0125130a74769f3c407b0c4b7027b3082ef33864a63ee1024552a60a17db60493f15 + checksum: 10c0/3b0dfaeff6a831de086884a3e2432f18468fe37c69f35e1a0a9a2833d9994a65b6dd2a524aaee28f361c849035ad9d15e3841029b67d261d0abd62c7de6d51f5 languageName: node linkType: hard @@ -3422,11 +3422,11 @@ __metadata: linkType: hard "fastq@npm:^1.6.0": - version: 1.18.0 - resolution: "fastq@npm:1.18.0" + version: 1.19.0 + resolution: "fastq@npm:1.19.0" dependencies: reusify: "npm:^1.0.4" - checksum: 10c0/7be87ecc41762adbddf558d24182f50a4b1a3ef3ee807d33b7623da7aee5faecdcc94fce5aa13fe91df93e269f383232bbcdb2dc5338cd1826503d6063221f36 + checksum: 10c0/d6a001638f1574a696660fcbba5300d017760432372c801632c325ca7c16819604841c92fd3ccadcdacec0966ca336363a5ff57bc5f0be335d8ea7ac6087b98f languageName: node linkType: hard @@ -3441,11 +3441,11 @@ __metadata: linkType: hard "file-entry-cache@npm:^10.0.5": - version: 10.0.5 - resolution: "file-entry-cache@npm:10.0.5" + version: 10.0.6 + resolution: "file-entry-cache@npm:10.0.6" dependencies: - flat-cache: "npm:^6.1.5" - checksum: 10c0/c7d9bd537d1862db5357ecc688a22dc9287c2590e9eba04e85e0601d6143905eaa5edc5534f1dd92e24713f230ee69d99e150d7b6120c6d940f40beccdd5caf3 + flat-cache: "npm:^6.1.6" + checksum: 10c0/4e7226a5dbe7b5130c848c5fd3a352bb16e4ddb1de10cb4b3ea8375f6ab6085ed10da4db2db8119c61fc7e56fc59a40eeb837a4ae1a3a7c8357a17e69004f113 languageName: node linkType: hard @@ -3509,14 +3509,14 @@ __metadata: languageName: node linkType: hard -"flat-cache@npm:^6.1.5": - version: 6.1.5 - resolution: "flat-cache@npm:6.1.5" +"flat-cache@npm:^6.1.6": + version: 6.1.6 + resolution: "flat-cache@npm:6.1.6" dependencies: - cacheable: "npm:^1.8.7" + cacheable: "npm:^1.8.8" flatted: "npm:^3.3.2" - hookified: "npm:^1.6.0" - checksum: 10c0/b107edc1c24a8fabe89645001fb8b1479016177d92be45dc6ba739e688131fe35fffbf13516d2f7bb3dc5c1256ff8721f16ec1858c4ee77e46f93c9093c53689 + hookified: "npm:^1.7.0" + checksum: 10c0/2aeba555b61d32d7f0803e6b6b3ba959610cdc0e5b591ed0f80a3ad70c4e80e81afb6853c495cafdcbc3a02386d76a1522babcf04e50c4a1e81df2decfd02e9f languageName: node linkType: hard @@ -3538,11 +3538,11 @@ __metadata: linkType: hard "for-each@npm:^0.3.3": - version: 0.3.3 - resolution: "for-each@npm:0.3.3" + version: 0.3.4 + resolution: "for-each@npm:0.3.4" dependencies: - is-callable: "npm:^1.1.3" - checksum: 10c0/22330d8a2db728dbf003ec9182c2d421fbcd2969b02b4f97ec288721cda63eb28f2c08585ddccd0f77cb2930af8d958005c9e72f47141dc51816127a118f39aa + is-callable: "npm:^1.2.7" + checksum: 10c0/6b2016c0a0fe3107c70a233923cac74f07bedb5a1847636039fa6bcc3df09aefa554cfec23c3342ad365acac1f95e799d9f8e220cb82a4c7b8a84f969234302f languageName: node linkType: hard @@ -3919,7 +3919,7 @@ __metadata: languageName: node linkType: hard -"hookified@npm:^1.6.0": +"hookified@npm:^1.7.0": version: 1.7.0 resolution: "hookified@npm:1.7.0" checksum: 10c0/039424cbeb8cc55cd9bd6b17e9fb48c5d619899f49d560abf39a4cd3ae3d9197e434732218641ebaec22ff0a0b195fdb96fc4c42df12477f464bfe63a35a4b66 @@ -4001,8 +4001,8 @@ __metadata: linkType: hard "i18next@npm:^24.2.1": - version: 24.2.1 - resolution: "i18next@npm:24.2.1" + version: 24.2.2 + resolution: "i18next@npm:24.2.2" dependencies: "@babel/runtime": "npm:^7.23.2" peerDependencies: @@ -4010,7 +4010,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/f4193ec0c84b292f12fb734bb93f0dae09bdb5deed2f6b888694b4309b15d1703b2b61088b9a50772deeab4b53868ec204a0e932e44b3474358910995b88627b + checksum: 10c0/df2f08f7e7a813d0c38f67e9a9f67f6e86cd105a58b6419cab1118833e0a8ebf8d31e2df9033c12890fc1db18740fc227acc593c0a30887f8f7f94cd0293d051 languageName: node linkType: hard @@ -4046,7 +4046,7 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^7.0.1": +"ignore@npm:^7.0.3": version: 7.0.3 resolution: "ignore@npm:7.0.3" checksum: 10c0/8e21637513cbcd888a4873d34d5c651a2e24b3c4c9a6b159335a26bed348c3c386c51d6fab23577f59140e1b226323138fbd50e63882d4568fd12aa6c822029e @@ -4162,7 +4162,7 @@ __metadata: languageName: node linkType: hard -"is-callable@npm:^1.1.3, is-callable@npm:^1.2.7": +"is-callable@npm:^1.2.7": version: 1.2.7 resolution: "is-callable@npm:1.2.7" checksum: 10c0/ceebaeb9d92e8adee604076971dd6000d38d6afc40bb843ea8e45c5579b57671c3f3b50d7f04869618242c6cee08d1b67806a8cb8edaaaf7c0748b3720d6066f @@ -4387,9 +4387,9 @@ __metadata: linkType: hard "isbot@npm:^5.1.17": - version: 5.1.21 - resolution: "isbot@npm:5.1.21" - checksum: 10c0/242229272e85cae0bd6194743e88a390b7010ce7b7a39d32c589d3d4d60cb9da81edd61206cc11edf2f180953a5f9f82cb0d37ce4e0cf1b954da2697387dba0a + version: 5.1.22 + resolution: "isbot@npm:5.1.22" + checksum: 10c0/377b030dafcbc2e1f6eea36fc2a6072b769baffbd058b1ebc302a9ca1d8656d50039d1696238c9b955ed44a034cabe2bf30a89ab7a0e60f6ef67ffacb394d6c5 languageName: node linkType: hard @@ -4706,7 +4706,7 @@ __metadata: languageName: node linkType: hard -"mdn-data@npm:^2.14.0": +"mdn-data@npm:^2.15.0": version: 2.15.0 resolution: "mdn-data@npm:2.15.0" checksum: 10c0/8a0c83198b013d43c2c43bd19c38d44e397b3fe097d269fa3c093d8c112acf12d0be4d892ba50a4802cccb91dd4f720218a66e675150ea2cc3d8aa0d32247e76 @@ -5409,7 +5409,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.4.32, postcss@npm:^8.4.43, postcss@npm:^8.4.49": +"postcss@npm:^8.4.32, postcss@npm:^8.4.43, postcss@npm:^8.4.49, postcss@npm:^8.5.1": version: 8.5.1 resolution: "postcss@npm:8.5.1" dependencies: @@ -5662,8 +5662,8 @@ __metadata: linkType: hard "react-router@npm:^7.1.3": - version: 7.1.3 - resolution: "react-router@npm:7.1.3" + version: 7.1.5 + resolution: "react-router@npm:7.1.5" dependencies: "@types/cookie": "npm:^0.6.0" cookie: "npm:^1.0.1" @@ -5675,7 +5675,7 @@ __metadata: peerDependenciesMeta: react-dom: optional: true - checksum: 10c0/f42f7b245533d1adaa00779a0287993a836d5b56039d97a6643a8b3a721ffb92ff47c97cfb36409fec8794ac3c8a884339f588cf21fcd7f6dccdfc834520c76f + checksum: 10c0/c0013102c7a02d26cd2353fa3749bd229fbcfedd291710540be1765d703861f96a34ef0114dd5ee8d9a728e87f3a5698387058f9539b39604f331505f507d912 languageName: node linkType: hard @@ -5871,28 +5871,28 @@ __metadata: linkType: hard "rollup@npm:^4.20.0, rollup@npm:^4.23.0": - version: 4.31.0 - resolution: "rollup@npm:4.31.0" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.31.0" - "@rollup/rollup-android-arm64": "npm:4.31.0" - "@rollup/rollup-darwin-arm64": "npm:4.31.0" - "@rollup/rollup-darwin-x64": "npm:4.31.0" - "@rollup/rollup-freebsd-arm64": "npm:4.31.0" - "@rollup/rollup-freebsd-x64": "npm:4.31.0" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.31.0" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.31.0" - "@rollup/rollup-linux-arm64-gnu": "npm:4.31.0" - "@rollup/rollup-linux-arm64-musl": "npm:4.31.0" - "@rollup/rollup-linux-loongarch64-gnu": "npm:4.31.0" - "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.31.0" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.31.0" - "@rollup/rollup-linux-s390x-gnu": "npm:4.31.0" - "@rollup/rollup-linux-x64-gnu": "npm:4.31.0" - "@rollup/rollup-linux-x64-musl": "npm:4.31.0" - "@rollup/rollup-win32-arm64-msvc": "npm:4.31.0" - "@rollup/rollup-win32-ia32-msvc": "npm:4.31.0" - "@rollup/rollup-win32-x64-msvc": "npm:4.31.0" + version: 4.32.1 + resolution: "rollup@npm:4.32.1" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.32.1" + "@rollup/rollup-android-arm64": "npm:4.32.1" + "@rollup/rollup-darwin-arm64": "npm:4.32.1" + "@rollup/rollup-darwin-x64": "npm:4.32.1" + "@rollup/rollup-freebsd-arm64": "npm:4.32.1" + "@rollup/rollup-freebsd-x64": "npm:4.32.1" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.32.1" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.32.1" + "@rollup/rollup-linux-arm64-gnu": "npm:4.32.1" + "@rollup/rollup-linux-arm64-musl": "npm:4.32.1" + "@rollup/rollup-linux-loongarch64-gnu": "npm:4.32.1" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.32.1" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.32.1" + "@rollup/rollup-linux-s390x-gnu": "npm:4.32.1" + "@rollup/rollup-linux-x64-gnu": "npm:4.32.1" + "@rollup/rollup-linux-x64-musl": "npm:4.32.1" + "@rollup/rollup-win32-arm64-msvc": "npm:4.32.1" + "@rollup/rollup-win32-ia32-msvc": "npm:4.32.1" + "@rollup/rollup-win32-x64-msvc": "npm:4.32.1" "@types/estree": "npm:1.0.6" fsevents: "npm:~2.3.2" dependenciesMeta: @@ -5938,7 +5938,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 10c0/0d6da45098af14c678e78be887fefefbf5a97fef6277c5a1c24ca722537bb3a02e695c6fcad8880218d8fbef8a7a17d865786afd99bb6e70409fad73844ca8cf + checksum: 10c0/b40339d207ee873d5cb78456381d11be367ed44bf02506bb7b1e70ad24537b4e2f06f7b24a1d9dff054c34330e032cfbedecf217228dfdc850d421b49d640144 languageName: node linkType: hard @@ -6023,11 +6023,11 @@ __metadata: linkType: hard "semver@npm:^7.1.1, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.3, semver@npm:^7.6.0": - version: 7.6.3 - resolution: "semver@npm:7.6.3" + version: 7.7.0 + resolution: "semver@npm:7.7.0" bin: semver: bin/semver.js - checksum: 10c0/88f33e148b210c153873cb08cfe1e281d518aaa9a666d4d148add6560db5cd3c582f3a08ccb91f38d5f379ead256da9931234ed122057f40bb5766e65e58adaf + checksum: 10c0/bcd1c03209b4be7d8ca86c976a0410beba7d4ec1d49d846a4be154b958db1ff5eaee50760c1d4f4070b19dee3236b8672d3e09642c53ea23740398bba2538a2d languageName: node linkType: hard @@ -6506,38 +6506,38 @@ __metadata: linkType: hard "stylelint-prettier@npm:^5.0.2": - version: 5.0.2 - resolution: "stylelint-prettier@npm:5.0.2" + version: 5.0.3 + resolution: "stylelint-prettier@npm:5.0.3" dependencies: prettier-linter-helpers: "npm:^1.0.0" peerDependencies: prettier: ">=3.0.0" stylelint: ">=16.0.0" - checksum: 10c0/4755471cd8c8f3d308b25c3ad5db9eb1546dea6f6ba048ca0b83e9ca58169d29456deb50cfa13198a7f7178f9b7e64fddcbb7d0dd0c59669680f5bc6432c438b + checksum: 10c0/955e647131b96e088f3ea80ef409772aff8854d9f9831ac5826b76780fc9a49e0ad0f5aac1b5e6ed714848bea85068a7ba815585ed8b9f1e4da41a29b5666e4d languageName: node linkType: hard "stylelint-scss@npm:^6.0.0": - version: 6.10.1 - resolution: "stylelint-scss@npm:6.10.1" + version: 6.11.0 + resolution: "stylelint-scss@npm:6.11.0" dependencies: css-tree: "npm:^3.0.1" is-plain-object: "npm:^5.0.0" known-css-properties: "npm:^0.35.0" - mdn-data: "npm:^2.14.0" + mdn-data: "npm:^2.15.0" postcss-media-query-parser: "npm:^0.2.3" postcss-resolve-nested-selector: "npm:^0.1.6" postcss-selector-parser: "npm:^7.0.0" postcss-value-parser: "npm:^4.2.0" peerDependencies: stylelint: ^16.0.2 - checksum: 10c0/3fc9b456bff649840783b92365fc30f5e54539794711744f09df45020d2a3d86164e8e16948a35b3b167f6fc8109837d487253faebd8b1ac29800e67a7f7adc9 + checksum: 10c0/d02a51a8ac0cc26f582654eddd0883c3c7794b7474c86fbf86079689d0ebc1d2b878c1459f45ab6c1ea6a33b8a16ab26d8e9cf7a25769ff368002751290f0a08 languageName: node linkType: hard "stylelint@npm:^16.13.2": - version: 16.13.2 - resolution: "stylelint@npm:16.13.2" + version: 16.14.1 + resolution: "stylelint@npm:16.14.1" dependencies: "@csstools/css-parser-algorithms": "npm:^3.0.4" "@csstools/css-tokenizer": "npm:^3.0.3" @@ -6557,7 +6557,7 @@ __metadata: globby: "npm:^11.1.0" globjoin: "npm:^0.1.4" html-tags: "npm:^3.3.1" - ignore: "npm:^7.0.1" + ignore: "npm:^7.0.3" imurmurhash: "npm:^0.1.4" is-plain-object: "npm:^5.0.0" known-css-properties: "npm:^0.35.0" @@ -6566,7 +6566,7 @@ __metadata: micromatch: "npm:^4.0.8" normalize-path: "npm:^3.0.0" picocolors: "npm:^1.1.1" - postcss: "npm:^8.4.49" + postcss: "npm:^8.5.1" postcss-resolve-nested-selector: "npm:^0.1.6" postcss-safe-parser: "npm:^7.0.1" postcss-selector-parser: "npm:^7.0.0" @@ -6579,7 +6579,7 @@ __metadata: write-file-atomic: "npm:^5.0.1" bin: stylelint: bin/stylelint.mjs - checksum: 10c0/07d5f6f80a6671d0a02ef448977c45b2ba45060b2942a5619297694b6b653b931284a174b36154b03c23ae302abfdbbba0ca61f4142734e98e6703511f1f363b + checksum: 10c0/cce94374dc721d491d955f548ee81ba835d4955fa37d58a11323454f9f3721e5644fa89a04c14f85bdfa12790bdd043a41be2001a99cb0bfe23b38eb933199d7 languageName: node linkType: hard @@ -6800,16 +6800,16 @@ __metadata: linkType: hard "typescript-eslint@npm:^8.21.0": - version: 8.21.0 - resolution: "typescript-eslint@npm:8.21.0" + version: 8.22.0 + resolution: "typescript-eslint@npm:8.22.0" dependencies: - "@typescript-eslint/eslint-plugin": "npm:8.21.0" - "@typescript-eslint/parser": "npm:8.21.0" - "@typescript-eslint/utils": "npm:8.21.0" + "@typescript-eslint/eslint-plugin": "npm:8.22.0" + "@typescript-eslint/parser": "npm:8.22.0" + "@typescript-eslint/utils": "npm:8.22.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.8.0" - checksum: 10c0/44e5c341ad7f0b41dce3b4ca7a4c0a399ebe51a5323d930750db1e308367b4813a620f4c2332a5774a1dccd0047ebbaf993a8b7effd67389e9069b29b5701520 + checksum: 10c0/d7a5ec4a08d0eb0a7cc0bf81919f0305a9fbb091b187cef6d3fa220c1673414dcb46e6cd5c9325050d3df2bbb283756399c1b2720eb4eadaab0bdc3cc8302405 languageName: node linkType: hard From 245d439a8831014a6eece1013a13998b5dfd767c Mon Sep 17 00:00:00 2001 From: Luis Doebbel Date: Tue, 4 Feb 2025 16:34:28 -0500 Subject: [PATCH 6/7] login page rewrite with clientAction and fetcher. Updated translations. --- frontend/README.md | 2 +- frontend/package.json | 2 +- frontend/sheet2i18n.config.cjs | 5 +- .../uikit/uikitBlock/UikitBlock.tsx | 2 +- frontend/src/assets/locales/en.json | 19 +- frontend/src/assets/locales/fr.json | 23 ++- frontend/src/routes.ts | 13 +- .../{dashboard.tsx => dashboard.route.tsx} | 27 +-- .../routes/authenticated-routes/layout.tsx | 2 +- .../{settings.tsx => settings.route.tsx} | 14 +- .../{not-found.tsx => not-found.route.tsx} | 0 .../home/{home.tsx => home.route.tsx} | 12 +- .../public-routes/login/login.route.tsx | 184 ++++++++++++++++++ .../src/routes/public-routes/login/login.tsx | 112 ----------- .../login}/loginForm/LoginForm.tsx | 40 ++-- .../login}/loginForm/loginForm.module.css | 0 .../login}/loginForm/loginForm.schema.ts | 0 .../public-routes/login/useFormValidation.ts | 59 ++++++ .../routes/public-routes/login/useOnSubmit.ts | 84 -------- .../login/validateCredentials.ts | 12 ++ 20 files changed, 340 insertions(+), 272 deletions(-) rename frontend/src/routes/authenticated-routes/dashboard/{dashboard.tsx => dashboard.route.tsx} (74%) rename frontend/src/routes/authenticated-routes/settings/{settings.tsx => settings.route.tsx} (78%) rename frontend/src/routes/not-found/{not-found.tsx => not-found.route.tsx} (100%) rename frontend/src/routes/public-routes/home/{home.tsx => home.route.tsx} (80%) create mode 100644 frontend/src/routes/public-routes/login/login.route.tsx delete mode 100644 frontend/src/routes/public-routes/login/login.tsx rename frontend/src/{app/forms/auth => routes/public-routes/login}/loginForm/LoginForm.tsx (66%) rename frontend/src/{app/forms/auth => routes/public-routes/login}/loginForm/loginForm.module.css (100%) rename frontend/src/{app/forms/auth => routes/public-routes/login}/loginForm/loginForm.schema.ts (100%) create mode 100644 frontend/src/routes/public-routes/login/useFormValidation.ts delete mode 100644 frontend/src/routes/public-routes/login/useOnSubmit.ts create mode 100644 frontend/src/routes/public-routes/login/validateCredentials.ts diff --git a/frontend/README.md b/frontend/README.md index 79ae43d..c90fade 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -32,7 +32,7 @@ Start the development server with HMR: npm run dev ``` -Your application will be available at `http://localhost:5173`. +Your application will be available at `http://localhost:8000`. ## Building for Production diff --git a/frontend/package.json b/frontend/package.json index 0dc0fba..ad429ba 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -11,7 +11,7 @@ "lint:scripts": "eslint ./src", "lint:styles": "stylelint '**/*.css'", "prettier": "prettier --write ./src", - "sheet2i18n": "node ./sheet2i18n/index.cjs src/sheet2i18n.config.cjs" + "sheet2i18n": "node ./sheet2i18n/index.cjs sheet2i18n.config.cjs" }, "dependencies": { "@emotion/react": "^11.14.0", diff --git a/frontend/sheet2i18n.config.cjs b/frontend/sheet2i18n.config.cjs index 09a4e56..24e483c 100644 --- a/frontend/sheet2i18n.config.cjs +++ b/frontend/sheet2i18n.config.cjs @@ -1,4 +1,3 @@ -// eslint-disable-next-line no-undef module.exports = { exportPath: "src/assets/locales", tabsUrl: [ @@ -18,8 +17,10 @@ module.exports = { "https://docs.google.com/spreadsheets/d/e/2PACX-1vQe6sBfW-7S3xGPlYVaOB8v39yfZHx0FqCOeGEChuWlkObw-F5EsuVag_olya-psWYyKOuCl9y8ZGcf/pub?gid=1136921178&single=true&output=csv", // Uikit "https://docs.google.com/spreadsheets/d/e/2PACX-1vQe6sBfW-7S3xGPlYVaOB8v39yfZHx0FqCOeGEChuWlkObw-F5EsuVag_olya-psWYyKOuCl9y8ZGcf/pub?gid=268501364&single=true&output=csv", - // My Account + // Settings "https://docs.google.com/spreadsheets/d/e/2PACX-1vQe6sBfW-7S3xGPlYVaOB8v39yfZHx0FqCOeGEChuWlkObw-F5EsuVag_olya-psWYyKOuCl9y8ZGcf/pub?gid=204236050&single=true&output=csv", + // Dashboard + "https://docs.google.com/spreadsheets/d/e/2PACX-1vQe6sBfW-7S3xGPlYVaOB8v39yfZHx0FqCOeGEChuWlkObw-F5EsuVag_olya-psWYyKOuCl9y8ZGcf/pub?gid=1298367712&single=true&output=csv", ], localesKey: ["en", "fr"], }; diff --git a/frontend/src/app/components/uikit/uikitBlock/UikitBlock.tsx b/frontend/src/app/components/uikit/uikitBlock/UikitBlock.tsx index b40981a..6e85314 100644 --- a/frontend/src/app/components/uikit/uikitBlock/UikitBlock.tsx +++ b/frontend/src/app/components/uikit/uikitBlock/UikitBlock.tsx @@ -23,7 +23,7 @@ export default function UikitBlock({ const onClickCopyBtn = async (content: string) => { await navigator.clipboard.writeText(content); - toast.success(t("global__clipboard_copy")); + toast.success(t("uikit__clipboard_copy")); }; return ( diff --git a/frontend/src/assets/locales/en.json b/frontend/src/assets/locales/en.json index 687d695..9a40a4e 100644 --- a/frontend/src/assets/locales/en.json +++ b/frontend/src/assets/locales/en.json @@ -8,12 +8,12 @@ "global__version": "Version", "global__hide": "Hide", "global__close": "Close", - "global__clipboard_copy": "Copied to clipboard", "not_found__page_title": "Page not found", "not_found__title": "We're sorry, but the page you are looking for cannot be found.", "not_found__description": "Error code 404", "not_found__description_secondary": "The URL may be spelled incorrectly or the page you are looking for may no longer exist.", "not_found__go_to_home_page": "Go to the home page", + "global__logout": "Logout", "cookie_consent_link": "https://nventive.com/en/privacy-policy/", "cookie_consent__learn_more": "Learn more about privacy policy", "cookie_banner__description": "This website uses cookies to ensure you get the best experience on our website.", @@ -39,24 +39,33 @@ "routes__page_title": "React Template", "routes__login": "login", "routes__home": "home", - "routes__my_account": "my-account", + "routes__dashboard": "dashboard", + "routes__settings": "mysettings", "routes__uikit": "uikit", "routes__not_found": "not-found", "validations__required": "{{ field }} is required.", "validations__max_characters": "{{ field }} can have a maximum of {{ max }} characters.", "validations__min_characters": "{{ field }} must have a minimum of {{ min }} characters.", "errors__generic": "An error has occured.", - "errors__form_validation": "Please make sure to correct any errors before submitting the form.", "errors__invalid_credentials": "Invalid credentials. Please try again.", "errors__expired_session": "The session has expired.", "home__page_title": "Home", "home__welcome": "Welcome", - "home__logout": "Logout", + "home__login_here": "Click here to login", + "home__dashboard_here": "Click here to go to the dashboard", "login__page_title": "Log in", "login__username": "Username", "login__password": "Password", "login__sign_in": "Sign in", "login__more_user": "More user", "uikit__page_title": "Uikit", - "my_account__page_title": "My Account" + "uikit__clipboard_copy": "Copied to clipboard", + "settings__page_title": "Settings", + "dashboard__page_title": "Dashboard", + "dashboard__welcome": "Welcome", + "dashboard__five_todos": "Five todos", + "dashboard__three_posts": "Three posts", + "dashboard__loading_strategy_one": "Inside the component, we are using useSuspenseQuery(). Until that is resolved, the rendering is blocked by the component.", + "dashboard__loading_strategy_two": "Using a promise returned by the loader. This query is not tracked by react-query (since no hook is called from the componend)", + "dashboard__loading_strategy_three": "This approach used the experimental_prefetchInRender flag in the QueryClient. The query is prefectehd in the loader and called again from the component, which allows react-query to track it." } diff --git a/frontend/src/assets/locales/fr.json b/frontend/src/assets/locales/fr.json index ea91530..da30da4 100644 --- a/frontend/src/assets/locales/fr.json +++ b/frontend/src/assets/locales/fr.json @@ -8,12 +8,12 @@ "global__version": "Version", "global__hide": "Cacher", "global__close": "Fermer", - "global__clipboard_copy": "Copié dans le presse-papiers", "not_found__page_title": "Page non trouvée", "not_found__title": "Nous sommes désolés, mais la page que vous recherchez semble introuvable.", "not_found__description": "Code d’erreur 404", "not_found__description_secondary": "Il est possible que l'URL soit incorrectement orthographiée ou que la page que vous cherchez n'existe plus.", "not_found__go_to_home_page": "Aller à la page d’accueil", + "global__logout": "Se déconnecter", "cookie_consent_link": "https://nventive.com/fr/politique-confidentialite/", "cookie_consent__learn_more": "En savoir plus sur la politique de confidentialité", "cookie_banner__description": "Ce site Web utilise des cookies pour vous garantir la meilleure expérience sur notre site.", @@ -39,24 +39,33 @@ "routes__page_title": "React Template", "routes__login": "connexion", "routes__home": "accueil", - "routes__my_account": "mon-compte", + "routes__dashboard": "tableau-de-bord", + "routes__settings": "paramètres", "routes__uikit": "uikit", "routes__not_found": "page-introuvable", "validations__required": "{{ field }} est obligatoire.", "validations__max_characters": "{{ field }} peut avoir un maximum de {{ max }} caractères.", "validations__min_characters": "{{ field }} doit avoir un minimum de {{ min }} caractères.", "errors__generic": "Une erreur est survenue.", - "errors__form_validation": "Veuillez vous assurer de corriger toute erreur avant de soumettre le formulaire.", - "errors__invalid_credentials": "Les informations d'identification invalides. Veuillez réessayer.", - "errors__expired_session": "La session est expirée.", + "errors__invalid_credentials": "Les informations d'identification sont invalides. Veuillez réessayer.", + "errors__expired_session": "La session a expirée.", "home__page_title": "Accueil", "home__welcome": "Bienvenue", - "home__logout": "Se déconnecter", + "home__login_here": "Cliquez ici pour vous connecter", + "home__dashboard_here": "Cliquez ici pour accéder au tableau de bord", "login__page_title": "Connectez-vous", "login__username": "Nom d'utilisateur", "login__password": "Mot de passe", "login__sign_in": "Se connecter", "login__more_user": "Plus d'utilisateur", "uikit__page_title": "Uikit", - "my_account__page_title": "Mon compte" + "uikit__clipboard_copy": "Copié dans le presse-papiers", + "settings__page_title": "Paramètres", + "dashboard__page_title": "Tableau de bord", + "dashboard__welcome": "Bienvenue", + "dashboard__five_todos": "Cinq tâches", + "dashboard__three_posts": "Trois messages", + "dashboard__loading_strategy_one": "Dans le composant , nous utilisons useSuspenseQuery(). Jusqu'à ce que cela soit résolu, le rendu est bloqué par le composant .", + "dashboard__loading_strategy_two": "Utilisation d'une promesse renvoyée par le chargeur. Cette requête n'est pas suivie par React-Query (puisqu'aucun hook n'est appelé depuis le composant)", + "dashboard__loading_strategy_three": "Cette approche utilisait l'indicateur experimental_prefetchInRender dans QueryClient. La requête est prédéfinie dans le chargeur et appelée à nouveau depuis le composant, ce qui permet à React-Query de la suivre." } diff --git a/frontend/src/routes.ts b/frontend/src/routes.ts index 823bfa3..63cdbcb 100644 --- a/frontend/src/routes.ts +++ b/frontend/src/routes.ts @@ -15,16 +15,19 @@ export default [ ...prefix(":lang", [ // public routes layout(`${PUBLIC_ROUTES}/layout.tsx`, [ - route("home", `${PUBLIC_ROUTES}/home/home.tsx`), - route("login", `${PUBLIC_ROUTES}/login/login.tsx`), + route("home", `${PUBLIC_ROUTES}/home/home.route.tsx`), + route("login", `${PUBLIC_ROUTES}/login/login.route.tsx`), ]), // authenticated routes layout(`${AUTHENTICATED_ROUTES}/layout.tsx`, [ - route("dashboard", `${AUTHENTICATED_ROUTES}/dashboard/dashboard.tsx`), - route("settings", `${AUTHENTICATED_ROUTES}/settings/settings.tsx`), + route( + "dashboard", + `${AUTHENTICATED_ROUTES}/dashboard/dashboard.route.tsx`, + ), + route("settings", `${AUTHENTICATED_ROUTES}/settings/settings.route.tsx`), ]), - route("*", "./routes/not-found/not-found.tsx"), + route("*", "./routes/not-found/not-found.route.tsx"), ]), ] satisfies RouteConfig; diff --git a/frontend/src/routes/authenticated-routes/dashboard/dashboard.tsx b/frontend/src/routes/authenticated-routes/dashboard/dashboard.route.tsx similarity index 74% rename from frontend/src/routes/authenticated-routes/dashboard/dashboard.tsx rename to frontend/src/routes/authenticated-routes/dashboard/dashboard.route.tsx index 69d7337..889a238 100644 --- a/frontend/src/routes/authenticated-routes/dashboard/dashboard.tsx +++ b/frontend/src/routes/authenticated-routes/dashboard/dashboard.route.tsx @@ -11,8 +11,8 @@ import { useUserStore } from "@stores/userStore"; import { useQuery } from "@tanstack/react-query"; import { lazy, Suspense } from "react"; import { useTranslation } from "react-i18next"; -import { Await, type MetaFunction } from "react-router"; -import type { Route } from "./+types/dashboard"; +import { Await } from "react-router"; +import type { Route } from "./+types/dashboard.route"; import { Todos } from "./todos"; const Posts = lazy(() => import("./posts")); @@ -42,7 +42,7 @@ export const clientLoader = async ({ return {}; }; -export const meta: MetaFunction = ({ params }) => { +export const meta = ({ params }: Route.MetaArgs) => { const t = i18next.getFixedT(params.lang as string); const title = t("dashboard__page_title"); @@ -71,26 +71,21 @@ export default function Home({ loaderData }: Route.ComponentProps) { {`${t("home__welcome")} ${user?.firstName} ${user?.lastName}`} + >{`${t("dashboard__welcome")} ${user?.firstName} ${user?.lastName}`} - {t("10 todos!")} + {t("dashboard__five_todos")} - Using a promise returned by the loader. This query is not tracked by - react-query (since no hook is called from the componend) + {t("dashboard__loading_strategy_one")} - - {/* Inside the component, we are using useSuspenseQuery(). - Until that is resolved, the rendering is blocked by the component. */} - {t("10 posts!")} + {t("dashboard__three_posts")} - Using a promise returned by the loader. This query is not tracked by - react-query (since no hook is called from the componend) + {t("dashboard__loading_strategy_two")} }> @@ -103,11 +98,9 @@ export default function Home({ loaderData }: Route.ComponentProps) { - {t("10 posts!")} + {t("dashboard__three_posts")} - This approach used the experimental_prefetchInRender flag in the - QueryClient. The query is prefectehd in the loader and called again - from the component, which allows react-query to track it. + {t("dashboard__loading_strategy_three")} }> diff --git a/frontend/src/routes/authenticated-routes/layout.tsx b/frontend/src/routes/authenticated-routes/layout.tsx index de90875..ded3228 100644 --- a/frontend/src/routes/authenticated-routes/layout.tsx +++ b/frontend/src/routes/authenticated-routes/layout.tsx @@ -38,7 +38,7 @@ const ListItems: React.FC = () => { to: `/${i18next.language}/dashboard`, }, { - text: t("my_account__page_title"), + text: t("settings__page_title"), to: `/${i18next.language}/settings`, }, ].map(({ text, to }, index) => ( diff --git a/frontend/src/routes/authenticated-routes/settings/settings.tsx b/frontend/src/routes/authenticated-routes/settings/settings.route.tsx similarity index 78% rename from frontend/src/routes/authenticated-routes/settings/settings.tsx rename to frontend/src/routes/authenticated-routes/settings/settings.route.tsx index f16fa15..7763539 100644 --- a/frontend/src/routes/authenticated-routes/settings/settings.tsx +++ b/frontend/src/routes/authenticated-routes/settings/settings.route.tsx @@ -5,15 +5,23 @@ import { ACCESS_TOKEN, REFRESH_TOKEN } from "@shared/constants"; import { default as i18next } from "@shared/i18n"; import { useUserStore } from "@stores/userStore"; import { useTranslation } from "react-i18next"; -import { useNavigate, type ClientLoaderFunctionArgs } from "react-router"; +import { useNavigate } from "react-router"; import { useChangeLanguage } from "src/app/hooks/useChangeLanguage"; +import type { Route } from "./+types/settings.route"; export const clientLoader = async ({ params: _params, -}: ClientLoaderFunctionArgs) => { +}: Route.ClientLoaderArgs) => { return {}; }; +export const meta = ({ params }: Route.MetaArgs) => { + const t = i18next.getFixedT(params.lang as string); + const title = t("dashboard__page_title"); + + return [{ title }]; +}; + export default function Settings() { const { t } = useTranslation(); const navigate = useNavigate(); @@ -43,7 +51,7 @@ export default function Settings() {
diff --git a/frontend/src/routes/not-found/not-found.tsx b/frontend/src/routes/not-found/not-found.route.tsx similarity index 100% rename from frontend/src/routes/not-found/not-found.tsx rename to frontend/src/routes/not-found/not-found.route.tsx diff --git a/frontend/src/routes/public-routes/home/home.tsx b/frontend/src/routes/public-routes/home/home.route.tsx similarity index 80% rename from frontend/src/routes/public-routes/home/home.tsx rename to frontend/src/routes/public-routes/home/home.route.tsx index 9974844..75089a5 100644 --- a/frontend/src/routes/public-routes/home/home.tsx +++ b/frontend/src/routes/public-routes/home/home.route.tsx @@ -8,11 +8,12 @@ import { useChangeLanguage } from "src/app/hooks/useChangeLanguage"; const UserLoggedIn: React.FC = () => { const { user } = useUserStore(); + const { t } = useTranslation(); if (!user) { return ( - Click here to login + {t("home__login_here")} ); } @@ -20,12 +21,13 @@ const UserLoggedIn: React.FC = () => { return ( <> - {`Welcome ${user?.firstName} ${user?.lastName}`} + {`${t("home__welcome")} ${user?.firstName} ${user?.lastName}`} - Click here to go to - the dashboard + + Click here to go to the dashboard + ); @@ -43,7 +45,7 @@ export default function Home() { alignItems: "center", }} > -

Home!

+

{t("home__page_title")}

diff --git a/frontend/src/routes/public-routes/login/login.route.tsx b/frontend/src/routes/public-routes/login/login.route.tsx new file mode 100644 index 0000000..78d6ec4 --- /dev/null +++ b/frontend/src/routes/public-routes/login/login.route.tsx @@ -0,0 +1,184 @@ +import Button from "@components/button/Button"; +import Link from "@components/link/Link"; +import { Box } from "@mui/material"; +import Typography from "@mui/material/Typography"; +import type ILogin from "@services/auth/interfaces/ILogin"; +import { getMe } from "@services/users/userService"; +import { ACCESS_TOKEN } from "@shared/constants"; +import { default as i18next } from "@shared/i18n"; +import { useUserStore } from "@stores/userStore"; +import axios from "axios"; +import { useEffect } from "react"; +import { useTranslation } from "react-i18next"; +import { useFetcher, type MetaFunction } from "react-router"; +import { toast } from "react-toastify"; +import { useChangeLanguage } from "src/app/hooks/useChangeLanguage"; +import type { Route } from "./+types/login.route"; +import LoginForm from "./loginForm/LoginForm"; +import { handleRedirect } from "./redirect"; +import { validateCredentials } from "./validateCredentials"; + +/** + * Exceptionnaly, for this loader, we will check if the user's access token + * is present in the localStorage. If it is, we will call the getMe function + * and set the user in the store. We will redirect the user to the home page + * or whatever route the user was trying to access. + */ +export const clientLoader = async ({ + params: _params, + request: _request, +}: Route.ClientLoaderArgs) => { + const accessToken = localStorage.getItem(ACCESS_TOKEN); + + if (!accessToken) { + return {}; + } + + try { + const { data } = await getMe(); + const { setUser } = useUserStore.getState(); + setUser(data); + + return handleRedirect(); + } catch (_error) { + localStorage.removeItem(ACCESS_TOKEN); + } + + return {}; +}; + +export const meta: MetaFunction = ({ params }) => { + const t = i18next.getFixedT(params.lang as string); + const title = t("login__page_title"); + + return [{ title }]; +}; + +export const clientAction = async ({ + request, + params, +}: Route.ClientActionArgs) => { + const t = i18next.getFixedT(params.lang); + const { setUser } = useUserStore.getState(); + const form = (await request.json()) as ILogin; + + try { + const data = await validateCredentials(form); + setUser(data); + + return handleRedirect(); + } catch (error) { + if (axios.isAxiosError(error)) { + if (error.response?.data?.message === "Invalid credentials") { + /** + * The tutorials in the react router website suggest using the data() function to return errors here. + * However, the data returned by this function is not typed properly. For now, we will return an object. + * https://github.com/remix-run/react-router/issues/12919 + */ + return { + message: t("errors__invalid_credentials"), + toastId: "invalid-credentials", + status: 400, + }; + } + } + + return { + message: t("errors__generic"), + toastId: "generic", + status: 400, + }; + } +}; + +export default function Login() { + const { t } = useTranslation(); + const { onChangeLanguage } = useChangeLanguage(); + const fetcher = useFetcher(); + + /** + * It is possible to set a key to the fetcher - useful when the fetcher is used across multiple components or files. + * For that approach to work properly, everytime this component is mounted, we will generate a new key for the fetcher. + * This allows us to reset the fetcher state when the user navigates to another page. + * (since a fetcher.reset() function is not available https://github.com/remix-run/remix/discussions/2749 ) + * When using useFetcher() without a key, the fetcher state resets when the user navigates to another page. + */ + // const [fetcherKey] = useState(`login-${Date.now()}`); + // const fetcher = useFetcher({ key: fetcherKey }); + + useEffect(() => { + if (fetcher.state !== "idle") return; + + const status = fetcher.data?.status; + if (status && status >= 400 && status < 600) { + const { message, toastId } = fetcher.data ?? {}; + toast.error(message, { + toastId: toastId, + }); + } + }, [fetcher.state, fetcher.data, t]); + + const submit = (loginForm: ILogin) => { + const { username, password } = loginForm; + fetcher.submit( + { username, password }, + { method: "POST", encType: "application/json" }, + ); + }; + + return ( + <> + ({ + display: "flex", + flexDirection: "column", + marginTop: theme.customProperties.spacing.lg, + marginBottom: theme.customProperties.spacing.lg, + })} + > + ({ + marginBottom: theme.customProperties.spacing.md, + })} + > + {t("login__page_title")} + + {t("login__username")}: oliviaw + ({ + marginBottom: theme.customProperties.spacing.xxs, + })} + > + {t("login__password")}: oliviawpass + + + {t("login__more_user")} + + + + + + + + + {`${t("global__version")}: ${import.meta.env.VITE_VERSION_NUMBER}`} + + + + ); +} diff --git a/frontend/src/routes/public-routes/login/login.tsx b/frontend/src/routes/public-routes/login/login.tsx deleted file mode 100644 index 9b606ba..0000000 --- a/frontend/src/routes/public-routes/login/login.tsx +++ /dev/null @@ -1,112 +0,0 @@ -import Button from "@components/button/Button"; -import Link from "@components/link/Link"; -import LoginForm from "@forms/auth/loginForm/LoginForm"; -import { Box } from "@mui/material"; -import Typography from "@mui/material/Typography"; -import { getMe } from "@services/users/userService"; -import { ACCESS_TOKEN } from "@shared/constants"; -import { default as i18next } from "@shared/i18n"; -import { useUserStore } from "@stores/userStore"; -import { useTranslation } from "react-i18next"; -import { type MetaFunction } from "react-router"; -import { useChangeLanguage } from "src/app/hooks/useChangeLanguage"; -import type { Route } from "../login/+types/route"; -import { handleRedirect, useHandleRedirect } from "./redirect"; - -/** - * Exceptionnaly, for this loader, we will check if the user's access token - * is present in the localStorage. If it is, we will call the getMe function - * and set the user in the store. We will redirect the user to the home page - * or whatever route the user was trying to access. - */ -export const clientLoader = async ({ - params: _params, - request: _quest, -}: Route.ClientLoaderArgs) => { - const accessToken = localStorage.getItem(ACCESS_TOKEN); - - if (!accessToken) { - return {}; - } - - try { - const { data } = await getMe(); - const { setUser } = useUserStore.getState(); - setUser(data); - - return handleRedirect(); - } catch (_error) { - localStorage.removeItem(ACCESS_TOKEN); - } - - return {}; -}; - -export const meta: MetaFunction = ({ params }) => { - const t = i18next.getFixedT(params.lang as string); - const title = t("login__page_title"); - - return [{ title }]; -}; - -export default function Login() { - const { t } = useTranslation(); - const { onChangeLanguage } = useChangeLanguage(); - const handleRedirect = useHandleRedirect(); - - return ( - <> - ({ - display: "flex", - flexDirection: "column", - marginTop: theme.customProperties.spacing.lg, - marginBottom: theme.customProperties.spacing.lg, - })} - > - ({ - marginBottom: theme.customProperties.spacing.md, - })} - > - {t("login__page_title")} - - User: oliviaw - ({ - marginBottom: theme.customProperties.spacing.xxs, - })} - > - Password: oliviawpass - - - {t("login__more_user")} - - - - - - - - - {`${t("global__version")}: ${import.meta.env.VITE_VERSION_NUMBER}`} - - - - ); -} diff --git a/frontend/src/app/forms/auth/loginForm/LoginForm.tsx b/frontend/src/routes/public-routes/login/loginForm/LoginForm.tsx similarity index 66% rename from frontend/src/app/forms/auth/loginForm/LoginForm.tsx rename to frontend/src/routes/public-routes/login/loginForm/LoginForm.tsx index 6b77751..ffd59d5 100644 --- a/frontend/src/app/forms/auth/loginForm/LoginForm.tsx +++ b/frontend/src/routes/public-routes/login/loginForm/LoginForm.tsx @@ -1,46 +1,30 @@ import Button from "@components/button/Button"; import FieldHelperText from "@components/fieldHelperText/FieldHelperText"; import TextField from "@components/textField/TextField"; -import loginFormSchema from "@forms/auth/loginForm/loginForm.schema"; import type ILogin from "@services/auth/interfaces/ILogin"; -import { useCallback, useState } from "react"; +import { useState } from "react"; import { useTranslation } from "react-i18next"; -import { useOnSubmit } from "src/routes/public-routes/login/useOnSubmit"; -import { ValidationError } from "yup"; +import { type FetcherWithComponents } from "react-router"; +import { useFormValidation } from "src/routes/public-routes/login/useFormValidation"; import classes from "./loginForm.module.css"; -export interface ILoginFormProps { - onSuccessfulLogin: () => void; -} +type LoginFormProps = { + submit: (form: ILogin) => void; + fetcher: FetcherWithComponents; +}; -export default function LoginForm(props: ILoginFormProps) { +export default function LoginForm({ submit, fetcher }: LoginFormProps) { const { t } = useTranslation(); const [loginForm, setLoginForm] = useState({ username: "", password: "", }); - const [formErrors, setFormErrors] = useState([]); - - const { isLoading, onSubmit } = useOnSubmit( - loginForm, - props.onSuccessfulLogin, - ); - const onValidate = useCallback(() => { - try { - loginFormSchema.validateSync(loginForm, { - abortEarly: false, - }); - setFormErrors([]); - } catch (error) { - if (error instanceof ValidationError) { - setFormErrors(error.inner); - } - } - }, [loginForm]); + const { onSubmit, onValidate, formErrors } = useFormValidation(loginForm); + const isLoading = fetcher.state !== "idle"; return ( -
+
{t("login__sign_in")} - + ); } diff --git a/frontend/src/app/forms/auth/loginForm/loginForm.module.css b/frontend/src/routes/public-routes/login/loginForm/loginForm.module.css similarity index 100% rename from frontend/src/app/forms/auth/loginForm/loginForm.module.css rename to frontend/src/routes/public-routes/login/loginForm/loginForm.module.css diff --git a/frontend/src/app/forms/auth/loginForm/loginForm.schema.ts b/frontend/src/routes/public-routes/login/loginForm/loginForm.schema.ts similarity index 100% rename from frontend/src/app/forms/auth/loginForm/loginForm.schema.ts rename to frontend/src/routes/public-routes/login/loginForm/loginForm.schema.ts diff --git a/frontend/src/routes/public-routes/login/useFormValidation.ts b/frontend/src/routes/public-routes/login/useFormValidation.ts new file mode 100644 index 0000000..4c8c975 --- /dev/null +++ b/frontend/src/routes/public-routes/login/useFormValidation.ts @@ -0,0 +1,59 @@ +import type ILogin from "@services/auth/interfaces/ILogin"; +import { t } from "i18next"; +import { useState, type FormEvent } from "react"; +import { toast } from "react-toastify"; +import { ValidationError } from "yup"; +import loginFormSchema from "./loginForm/loginForm.schema"; + +export const useFormValidation = (loginForm: ILogin) => { + const [formErrors, setFormErrors] = useState([]); + + const onSubmit = (submit: (form: ILogin) => void) => { + return async (event: FormEvent) => { + event.preventDefault(); + + const errors = validateForm(loginForm); + if (errors === null) return; + if (errors.length > 0) return; + + submit(loginForm); + }; + }; + + const onValidate = () => { + try { + loginFormSchema.validateSync(loginForm, { + abortEarly: false, + }); + setFormErrors([]); + } catch (error) { + if (error instanceof ValidationError) { + setFormErrors(error.inner); + } + } + }; + + const validateForm = (loginForm: ILogin) => { + try { + loginFormSchema.validateSync(loginForm, { + abortEarly: false, + }); + return []; + } catch (error) { + if (error instanceof ValidationError) { + return error.inner; + } else { + toast.error(t("errors__generic"), { + toastId: "generic", + }); + return null; + } + } + }; + + return { + onSubmit, + onValidate, + formErrors, + }; +}; diff --git a/frontend/src/routes/public-routes/login/useOnSubmit.ts b/frontend/src/routes/public-routes/login/useOnSubmit.ts deleted file mode 100644 index 971ceb8..0000000 --- a/frontend/src/routes/public-routes/login/useOnSubmit.ts +++ /dev/null @@ -1,84 +0,0 @@ -import loginFormSchema from "@forms/auth/loginForm/loginForm.schema"; -import { postLogin } from "@services/auth/authService"; -import type ILogin from "@services/auth/interfaces/ILogin"; -import { ACCESS_TOKEN, REFRESH_TOKEN } from "@shared/constants"; -import { useUserStore } from "@stores/userStore"; -import axios from "axios"; -import { t } from "i18next"; -import { useState, type FormEvent } from "react"; -import { toast } from "react-toastify"; -import { ValidationError } from "yup"; - -export const useOnSubmit = ( - loginForm: ILogin, - onSuccessfulLogin: () => void, -) => { - const [isLoading, setIsLoading] = useState(false); - const { setUser } = useUserStore(); - - const validateForm = (loginForm: ILogin) => { - try { - loginFormSchema.validateSync(loginForm, { - abortEarly: false, - }); - return []; - } catch (error) { - if (error instanceof ValidationError) { - return error.inner; - } else { - toast.error(t("errors__generic"), { - toastId: "generic", - }); - return null; - } - } - }; - - const validateCredentials = async (loginForm: ILogin) => { - try { - const { data } = await postLogin(loginForm); - if (data.accessToken && data.refreshToken) { - localStorage.setItem(ACCESS_TOKEN, data.accessToken); - localStorage.setItem(REFRESH_TOKEN, data.refreshToken); - return data; - } - throw new Error("An error occured when loging in with dummyjson.com"); - } catch (error) { - if (axios.isAxiosError(error)) { - if (error.response?.data?.message === "Invalid credentials") { - toast.error(t("errors__invalid_credentials"), { - toastId: "invalid-credentials", - }); - } - } else { - toast.error(t("errors__generic"), { - toastId: "generic", - }); - } - throw error; - } - }; - - const onSubmit = async (event: FormEvent) => { - event.preventDefault(); - - const errors = validateForm(loginForm); - if (errors === null) return; - if (errors.length > 0) return; - - setIsLoading(true); - - try { - const data = await validateCredentials(loginForm); - setUser(data); - onSuccessfulLogin(); - } finally { - setIsLoading(false); - } - }; - - return { - isLoading, - onSubmit, - }; -}; diff --git a/frontend/src/routes/public-routes/login/validateCredentials.ts b/frontend/src/routes/public-routes/login/validateCredentials.ts new file mode 100644 index 0000000..f47c7fc --- /dev/null +++ b/frontend/src/routes/public-routes/login/validateCredentials.ts @@ -0,0 +1,12 @@ +import { postLogin } from "@services/auth/authService"; +import type ILogin from "@services/auth/interfaces/ILogin"; +import { ACCESS_TOKEN, REFRESH_TOKEN } from "@shared/constants"; + +export const validateCredentials = async (loginForm: ILogin) => { + const { data } = await postLogin(loginForm); + if (data.accessToken && data.refreshToken) { + localStorage.setItem(ACCESS_TOKEN, data.accessToken); + localStorage.setItem(REFRESH_TOKEN, data.refreshToken); + return data; + } +}; From cb249d27c9d4381eebd6b5b3cb274d9e45afea90 Mon Sep 17 00:00:00 2001 From: Luis Doebbel Date: Thu, 6 Feb 2025 15:55:23 -0500 Subject: [PATCH 7/7] more code refactor, localized routes, update to docs. --- frontend/docs/data-fetching-strategies.md | 11 +- frontend/docs/routing.md | 21 +- frontend/package.json | 3 + .../cookieConsent/cookieModal/CookieModal.tsx | 3 +- .../components/debugBanner/DebugBanner.tsx | 11 +- .../uikit/uikitBlock/UikitBlock.tsx | 2 +- .../components/uikit/uikitNav/UikitNav.tsx | 2 +- frontend/src/app/hooks/useChangeLanguage.ts | 15 +- .../src/app/services/posts/postsQueries.ts | 15 +- frontend/src/assets/locales/en.json | 2 +- frontend/src/routes.ts | 94 ++++++-- frontend/src/routes/auth-guard.ts | 11 +- .../dashboard/{ => components}/posts.tsx | 0 .../dashboard/{ => components}/todos.tsx | 0 .../{dashboard.route.tsx => dashboard.tsx} | 61 +---- .../authenticated-routes/dashboard/route.ts | 11 + .../routes/authenticated-routes/layout.tsx | 6 +- .../authenticated-routes/settings/route.ts | 11 + .../{settings.route.tsx => settings.tsx} | 9 +- frontend/src/routes/index.tsx | 6 +- .../src/routes/not-found/not-found.route.tsx | 3 +- .../home/{home.route.tsx => home.tsx} | 11 +- .../src/routes/public-routes/home/route.ts | 11 + .../login/{login.route.tsx => login.tsx} | 22 +- .../login/loginForm/LoginForm.tsx | 2 +- .../{ => loginForm}/useFormValidation.ts | 2 +- .../src/routes/public-routes/login/route.ts | 11 + .../handleRedirect.ts} | 11 +- .../validateCredentials.ts | 0 .../src/routes/public-routes/uikit/UiKit.tsx | 211 +++++++++--------- .../src/routes/public-routes/uikit/route.ts | 11 + frontend/tsconfig.json | 33 +-- 32 files changed, 349 insertions(+), 273 deletions(-) rename frontend/src/routes/authenticated-routes/dashboard/{ => components}/posts.tsx (100%) rename frontend/src/routes/authenticated-routes/dashboard/{ => components}/todos.tsx (100%) rename frontend/src/routes/authenticated-routes/dashboard/{dashboard.route.tsx => dashboard.tsx} (51%) create mode 100644 frontend/src/routes/authenticated-routes/dashboard/route.ts create mode 100644 frontend/src/routes/authenticated-routes/settings/route.ts rename frontend/src/routes/authenticated-routes/settings/{settings.route.tsx => settings.tsx} (86%) rename frontend/src/routes/public-routes/home/{home.route.tsx => home.tsx} (80%) create mode 100644 frontend/src/routes/public-routes/home/route.ts rename frontend/src/routes/public-routes/login/{login.route.tsx => login.tsx} (90%) rename frontend/src/routes/public-routes/login/{ => loginForm}/useFormValidation.ts (95%) create mode 100644 frontend/src/routes/public-routes/login/route.ts rename frontend/src/routes/public-routes/login/{redirect.ts => submissionHelpers/handleRedirect.ts} (67%) rename frontend/src/routes/public-routes/login/{ => submissionHelpers}/validateCredentials.ts (100%) create mode 100644 frontend/src/routes/public-routes/uikit/route.ts diff --git a/frontend/docs/data-fetching-strategies.md b/frontend/docs/data-fetching-strategies.md index e0ea7c5..7b1d10d 100644 --- a/frontend/docs/data-fetching-strategies.md +++ b/frontend/docs/data-fetching-strategies.md @@ -1,6 +1,6 @@ # Data Fetching Strategies -This project demonstrates three different data fetching strategies using `react-query` and `react-router` loaders. Below is a high-level explanation of each strategy: +This project demonstrates the 2 different data fetching strategies using `react-query` and `react-router` loaders. Below is a high-level explanation of each strategy: ## 1. Prefetching in loader + `useSuspenseQuery` @@ -23,13 +23,14 @@ export default function MyRoute() { ``` In this approach, we use the loader to **prefetch** our data, but notice the loader does not return the data itself. -In the rendered component, we use the `useSuspenseQuery` hook to get the data (you can call the `useQuery` too, but will need to handle loading states). +In the rendered component, we use the `useSuspenseQuery` hook to get the data (you can call the `useQuery` too, but will need to handle loading / pending states). **`On the very first render`**, the `useSuspenseQuery` hook suspends the component until the query is resolved. The `Suspense` component wrapping the component displays a fallback while the data is being fetched. **`On subsequent renders`**, the `useSuspenseQuery` hook will return stale data while fetching any new data. - **Pros**: The `useSuspenseQuery` hook ensures the component only renders when data is available. -- **Cons**: Initial render of the whole page is blocked until data is fetched. +- **Pros**: The `useSuspenseQuery` returns stale data immediately (if available) while new data is fetched. +- **Cons**: Initial render of the whole page is blocked until data is fetched (which will be caugh by the Suspense compoenent wrapping this page). ## 2. Prefetching in Loader + `useQuery().promise` @@ -54,14 +55,14 @@ export default function MyRoute() { } ``` -This strategy also prefetches data in the loader but uses the `useQuery().promise` hook within the component. +This strategy also prefetches data in the loader but uses the `useQuery().promise` hook within the component, allowing for . The `experimental_prefetchInRender` flag in the `QueryClient` is enabled to allow this behavior. The `Await` component is used to handle the promise resolution. - **Pros**: The query is tracked by `react-query`, allowing for better state management, caching and refetching. - **Cons**: Requires enabling an experimental flag in `react-query`. -## 3. Fetching in loader + `Await` +## Warning: Fetching in loader + `Await` ```tsx export const clientLoader = async () => { diff --git a/frontend/docs/routing.md b/frontend/docs/routing.md index ff59d3d..985d139 100644 --- a/frontend/docs/routing.md +++ b/frontend/docs/routing.md @@ -4,14 +4,14 @@ ## Routing -This project uses React Router v7 to manage the application's routing. The routes are defined in the `src/routes.ts` file and are organized into public and authenticated routes. +This project uses React Router v7 **as a framework** to manage the application's routing. The routes are defined in the `src/routes.ts` file and are organized into public and authenticated routes. ### Public Routes Public routes are accessible without authentication and are defined under the `src/routes/public-routes` directory. These include: -- **Home**: Accessible at `/:lang/home`, defined in `src/routes/public-routes/home/route.tsx`. -- **Login**: Accessible at `/:lang/login`, defined in `src/routes/public-routes/login/route.tsx`. +- **Home**: Accessible at `/en|fr/home`, defined in `src/routes/public-routes/home/home.tsx`. +- **Login**: Accessible at `/en|fr/login`, defined in `src/routes/public-routes/login/login.tsx`. The layout for public routes is defined in `src/routes/public-routes/layout.tsx`. @@ -19,14 +19,23 @@ The layout for public routes is defined in `src/routes/public-routes/layout.tsx` Authenticated routes require the user to be logged in and are defined under the `src/routes/authenticated-routes` directory. These include: -- **Dashboard**: Accessible at `/:lang/dashboard`, defined in `src/routes/authenticated-routes/dashboard/route.tsx`. -- **Settings**: Accessible at `/:lang/settings`, defined in `src/routes/authenticated-routes/settings/route.tsx`. +- **Dashboard**: Accessible at `/en|fr/dashboard`, defined in `src/routes/authenticated-routes/dashboard/dashboard.tsx`. +- **Settings**: Accessible at `/en|fr/settings`, defined in `src/routes/authenticated-routes/settings/dashboard.tsx`. The layout for authenticated routes is defined in `src/routes/authenticated-routes/layout.tsx`. ### Route Configuration -The route configuration is defined in `src/routes.ts` using the `@react-router/dev/routes` package. The routes are prefixed with a language parameter (`:lang`) to support internationalization. +The routing configuration is defined in `src/routes.ts` using the `@react-router/dev/routes` package. The routes are localized (but keep in mind, the language in the url is not a :param). + +### Route Internationalization + +Each route is defined inside a `route.ts` file (for example, `src/routes/authenticated-routes/dashboard/route.ts`). +These files have the localized paths and a path to the route module needed by react router. + +Note that the path to the locales in these files is different (`#assets` instead of the expcted `@assets`). +When using react router as a framework, the routes are built via a vite.js plugin, running in node.js (not in the browser). +The alias here is different than the one define in the tsconfig file. This alias comes from the `imports` property in the package.json file. ## Auth Guard diff --git a/frontend/package.json b/frontend/package.json index ad429ba..52f626c 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -67,5 +67,8 @@ "packageManager": "yarn@4.6.0+sha512.5383cc12567a95f1d668fbe762dfe0075c595b4bfff433be478dbbe24e05251a8e8c3eb992a986667c1d53b6c3a9c85b8398c35a960587fbd9fa3a0915406728", "resolutions": { "@babel/traverse/globals": "14.0.0" + }, + "imports": { + "#assets/*": "./src/assets/*" } } diff --git a/frontend/src/app/components/cookieConsent/cookieModal/CookieModal.tsx b/frontend/src/app/components/cookieConsent/cookieModal/CookieModal.tsx index 913d1df..75aeb47 100644 --- a/frontend/src/app/components/cookieConsent/cookieModal/CookieModal.tsx +++ b/frontend/src/app/components/cookieConsent/cookieModal/CookieModal.tsx @@ -95,7 +95,7 @@ export default function CookieModal({ ({ marginRight: theme.customProperties.spacing.a })} - href={t("cookie_consent_link")} + to={t("cookie_consent_link")} underline="always" external > @@ -104,6 +104,7 @@ export default function CookieModal({ + ({ display: "flex", diff --git a/frontend/src/app/components/debugBanner/DebugBanner.tsx b/frontend/src/app/components/debugBanner/DebugBanner.tsx index 52b7a64..9c4753f 100644 --- a/frontend/src/app/components/debugBanner/DebugBanner.tsx +++ b/frontend/src/app/components/debugBanner/DebugBanner.tsx @@ -1,5 +1,8 @@ import Button from "@components/button/Button"; import { Box } from "@mui/material"; +import { route as dashboardRoute } from "@routes/authenticated-routes/dashboard/route"; +import { route as homeRoute } from "@routes/public-routes/home/route"; +import { route as uikitRoute } from "@routes/public-routes/uikit/route"; import i18next from "@shared/i18n"; import clsx from "clsx"; import { useState } from "react"; @@ -22,11 +25,15 @@ export default function DebugBanner() { const pages = [ { name: t("home__page_title"), - to: `/${i18next.language}/home`, + to: homeRoute.paths[i18next.language], }, { name: t("dashboard__page_title"), - to: `/${i18next.language}/dashboard`, + to: dashboardRoute.paths[i18next.language], + }, + { + name: t("uikit__page_title"), + to: uikitRoute.paths[i18next.language], }, ]; diff --git a/frontend/src/app/components/uikit/uikitBlock/UikitBlock.tsx b/frontend/src/app/components/uikit/uikitBlock/UikitBlock.tsx index 6e85314..135324b 100644 --- a/frontend/src/app/components/uikit/uikitBlock/UikitBlock.tsx +++ b/frontend/src/app/components/uikit/uikitBlock/UikitBlock.tsx @@ -36,7 +36,7 @@ export default function UikitBlock({ display: "flex", flexDirection: "column", gap: theme.spacing(1), - marginBottom: theme.spacing(8), + marginTop: theme.spacing(8), })} > diff --git a/frontend/src/app/components/uikit/uikitNav/UikitNav.tsx b/frontend/src/app/components/uikit/uikitNav/UikitNav.tsx index ede55b6..43b2833 100644 --- a/frontend/src/app/components/uikit/uikitNav/UikitNav.tsx +++ b/frontend/src/app/components/uikit/uikitNav/UikitNav.tsx @@ -40,7 +40,7 @@ function UikitNav({ items }: IUikitNav) { > {items.map((item) => (
  • - {item.text} + {item.text}
  • ))}
    diff --git a/frontend/src/app/hooks/useChangeLanguage.ts b/frontend/src/app/hooks/useChangeLanguage.ts index 35c3ab9..c8f0f56 100644 --- a/frontend/src/app/hooks/useChangeLanguage.ts +++ b/frontend/src/app/hooks/useChangeLanguage.ts @@ -2,12 +2,7 @@ import i18n from "@shared/i18n"; import { useCallback } from "react"; import { useTranslation } from "react-i18next"; import { useNavigate } from "react-router"; - -const replaceLanguage = (location: string, language: string) => { - const locationChange = location.split("/"); - locationChange.splice(1, 1, language); - return locationChange.join("/"); -}; +import { findRoute } from "src/routes"; export const useChangeLanguage = () => { const navigate = useNavigate(); @@ -15,14 +10,10 @@ export const useChangeLanguage = () => { const onChangeLanguage = useCallback(() => { const { search } = location; - const newLocation = replaceLanguage( - location.pathname, - t("locale__switch_key"), - ); + const newLocation = findRoute(location.pathname, t("locale__switch_key")); navigate(newLocation + search, { replace: true }); void i18n.changeLanguage(t("locale__switch_key")); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); + }, [navigate, t]); return { onChangeLanguage }; }; diff --git a/frontend/src/app/services/posts/postsQueries.ts b/frontend/src/app/services/posts/postsQueries.ts index 32e61c7..f958942 100644 --- a/frontend/src/app/services/posts/postsQueries.ts +++ b/frontend/src/app/services/posts/postsQueries.ts @@ -5,19 +5,8 @@ export const postsQueryOptions = () => { return queryOptions({ queryKey: ["dummyjson:posts-untracked"], queryFn: async () => { - // Simulate a delay of 3s to show behavior - await new Promise((resolve) => setTimeout(resolve, 3000)); - return await getPosts(); - }, - }); -}; - -export const postsQueryWithBiggerDelayOptions = () => { - return queryOptions({ - queryKey: ["dummyjson:posts-tracked"], - queryFn: async () => { - // Simulate a delay of 5s to show behavior - await new Promise((resolve) => setTimeout(resolve, 5000)); + // Simulate a delay of 4s to show behavior + await new Promise((resolve) => setTimeout(resolve, 4000)); return await getPosts(); }, }); diff --git a/frontend/src/assets/locales/en.json b/frontend/src/assets/locales/en.json index 9a40a4e..1c6efce 100644 --- a/frontend/src/assets/locales/en.json +++ b/frontend/src/assets/locales/en.json @@ -40,7 +40,7 @@ "routes__login": "login", "routes__home": "home", "routes__dashboard": "dashboard", - "routes__settings": "mysettings", + "routes__settings": "settings", "routes__uikit": "uikit", "routes__not_found": "not-found", "validations__required": "{{ field }} is required.", diff --git a/frontend/src/routes.ts b/frontend/src/routes.ts index 63cdbcb..c190e23 100644 --- a/frontend/src/routes.ts +++ b/frontend/src/routes.ts @@ -2,32 +2,84 @@ import { type RouteConfig, index, layout, - prefix, route, } from "@react-router/dev/routes"; +import { route as dashboardRoute } from "./routes/authenticated-routes/dashboard/route"; +import { route as settingsRoute } from "./routes/authenticated-routes/settings/route"; +import { route as homeRoute } from "./routes/public-routes/home/route"; +import { route as loginRoute } from "./routes/public-routes/login/route"; +import { route as uikitRoute } from "./routes/public-routes/uikit/route"; -const PUBLIC_ROUTES = "./routes/public-routes"; -const AUTHENTICATED_ROUTES = "./routes/authenticated-routes"; +const PUBLIC_ROUTES_PREFIX = "./routes/public-routes"; +const AUTHENTICATED_ROUTES_PREFIX = "./routes/authenticated-routes"; + +export interface IRoute { + paths: { + [key: string]: string; + }; + file: string; +} + +const PUBLIC_ROUTES: IRoute[] = [homeRoute, loginRoute]; +const AUTHENTICATED_ROUTES: IRoute[] = [dashboardRoute, settingsRoute]; +const ROUTES = [...PUBLIC_ROUTES, ...AUTHENTICATED_ROUTES]; + +const buildRoute = ({ paths, file }: IRoute) => { + const keys = Object.keys(paths); + return keys.map((key) => { + return route(paths[key], file, { id: paths[key] }); + }); +}; export default [ index("./routes/index.tsx"), - ...prefix(":lang", [ - // public routes - layout(`${PUBLIC_ROUTES}/layout.tsx`, [ - route("home", `${PUBLIC_ROUTES}/home/home.route.tsx`), - route("login", `${PUBLIC_ROUTES}/login/login.route.tsx`), - ]), - - // authenticated routes - layout(`${AUTHENTICATED_ROUTES}/layout.tsx`, [ - route( - "dashboard", - `${AUTHENTICATED_ROUTES}/dashboard/dashboard.route.tsx`, - ), - route("settings", `${AUTHENTICATED_ROUTES}/settings/settings.route.tsx`), - ]), - - route("*", "./routes/not-found/not-found.route.tsx"), - ]), + layout( + `${PUBLIC_ROUTES_PREFIX}/layout.tsx`, + PUBLIC_ROUTES.map(buildRoute).flat(), + ), + + layout( + `${AUTHENTICATED_ROUTES_PREFIX}/layout.tsx`, + AUTHENTICATED_ROUTES.map(buildRoute).flat(), + ), + + route("uikit", uikitRoute.file), + route("*", "./routes/not-found/not-found.route.tsx"), ] satisfies RouteConfig; + +export const findRoute = (path: string, locale: string): string => { + let segmentValues: string[] = []; + let segmentNames: string[] = []; + + const route = ROUTES.find((route) => { + return Object.values(route.paths).some((pattern) => { + segmentNames = (pattern.match(/:([^\s/]+)/g) || []).map((s) => + s.substring(1), + ); + + const regexPattern = pattern.replace(/:[^\s/]+/g, "([\\w-]+)"); + const regex = new RegExp(`^${regexPattern}$`); + + if (regex.test(path)) { + const match = path.match(regex); + if (match) { + segmentValues = match.slice(1); + } + return true; + } + return false; + }); + }); + + if (!route) { + return path; + } + + let newPath = route.paths[locale as keyof IRoute["paths"]]; + segmentNames.forEach((segmentName, index) => { + newPath = newPath.replace(`:${segmentName}`, segmentValues[index] || ""); + }); + + return newPath; +}; diff --git a/frontend/src/routes/auth-guard.ts b/frontend/src/routes/auth-guard.ts index 821dbe3..b06ded4 100644 --- a/frontend/src/routes/auth-guard.ts +++ b/frontend/src/routes/auth-guard.ts @@ -1,3 +1,4 @@ +import { route as loginRoute } from "@routes/public-routes/login/route"; import i18next from "@shared/i18n"; import { useUserStore } from "@stores/userStore"; import { createSearchParams, redirectDocument } from "react-router"; @@ -14,16 +15,18 @@ export const clientLoaderAuthGuard = ( } if (!includeRedirectPath) { - reject(redirectDocument(`/${i18next.language}/login`)); + reject(redirectDocument(loginRoute.paths[i18next.language])); return; } if (includeRedirectPath) { // adds redirect search param to the url so, once logged in, user is redirected to the page they were trying to access const url = new URL(window.location.href); - const redirectUrl = url.pathname + url.search; - const parsedRedirectUrl = createSearchParams({ redirect: redirectUrl }); - const loginUrlWithRedirect = `/${i18next.language}/login?${parsedRedirectUrl.toString()}`; + const redirectUrl = url.pathname; + const parsedRedirectUrl = createSearchParams(url.search); + parsedRedirectUrl.delete("redirect"); + parsedRedirectUrl.set("redirect", redirectUrl); + const loginUrlWithRedirect = `${loginRoute.paths[i18next.language]}?${parsedRedirectUrl.toString()}`; reject(redirectDocument(loginUrlWithRedirect)); } diff --git a/frontend/src/routes/authenticated-routes/dashboard/posts.tsx b/frontend/src/routes/authenticated-routes/dashboard/components/posts.tsx similarity index 100% rename from frontend/src/routes/authenticated-routes/dashboard/posts.tsx rename to frontend/src/routes/authenticated-routes/dashboard/components/posts.tsx diff --git a/frontend/src/routes/authenticated-routes/dashboard/todos.tsx b/frontend/src/routes/authenticated-routes/dashboard/components/todos.tsx similarity index 100% rename from frontend/src/routes/authenticated-routes/dashboard/todos.tsx rename to frontend/src/routes/authenticated-routes/dashboard/components/todos.tsx diff --git a/frontend/src/routes/authenticated-routes/dashboard/dashboard.route.tsx b/frontend/src/routes/authenticated-routes/dashboard/dashboard.tsx similarity index 51% rename from frontend/src/routes/authenticated-routes/dashboard/dashboard.route.tsx rename to frontend/src/routes/authenticated-routes/dashboard/dashboard.tsx index 889a238..b479bfd 100644 --- a/frontend/src/routes/authenticated-routes/dashboard/dashboard.route.tsx +++ b/frontend/src/routes/authenticated-routes/dashboard/dashboard.tsx @@ -1,9 +1,6 @@ import Loading from "@components/loading/Loading"; import { Grid2 as Grid, Typography } from "@mui/material"; -import { - postsQueryOptions, - postsQueryWithBiggerDelayOptions, -} from "@services/posts/postsQueries"; +import { postsQueryOptions } from "@services/posts/postsQueries"; import { todosQueryOptions } from "@services/todos/todosQueries"; import i18next from "@shared/i18n"; import { queryClient } from "@shared/queryClient"; @@ -12,10 +9,10 @@ import { useQuery } from "@tanstack/react-query"; import { lazy, Suspense } from "react"; import { useTranslation } from "react-i18next"; import { Await } from "react-router"; -import type { Route } from "./+types/dashboard.route"; -import { Todos } from "./todos"; +import type { Route } from "./+types/dashboard"; +import { Todos } from "./components/todos"; -const Posts = lazy(() => import("./posts")); +const Posts = lazy(() => import("./components/posts")); export const clientLoader = async ({ params: _params, @@ -23,48 +20,28 @@ export const clientLoader = async ({ const { user } = useUserStore.getState(); if (user) { - // A first approach is to use the loader to prefetch the queries and have the components call - // react-query's useQuery hook. The API call is done not on-render, but before. - const todos = todosQueryOptions(); - queryClient.prefetchQuery(todos); - - const postsWithBigDelay = postsQueryWithBiggerDelayOptions(); - queryClient.prefetchQuery(postsWithBigDelay); - - // For a different approach, notice how this is not awaited. We want to return this as a non-blocking promise - const postsQuery = queryClient.fetchQuery(postsQueryOptions()); - - return { - postsQuery, - }; + queryClient.prefetchQuery(todosQueryOptions()); + queryClient.prefetchQuery(postsQueryOptions()); } return {}; }; -export const meta = ({ params }: Route.MetaArgs) => { - const t = i18next.getFixedT(params.lang as string); +export const meta = () => { + const t = i18next.getFixedT(i18next.language); const title = t("dashboard__page_title"); return [{ title }]; }; -export default function Home({ loaderData }: Route.ComponentProps) { +export default function Home() { const { t } = useTranslation(); const { user } = useUserStore(); - // We are getting the promise from the loaderData, which is the recommended way - // This approach is great for rendering parts of the component taht do not depend on the data - // while the data is being fetched. We can wrap those inside & components. - // HOWEVER, since we are not calling react-query's useQuery hook, the query is not being tracked - const { postsQuery } = loaderData; - // For this approach, we are using useQuery().promise and the component from react-router // Keep in mind that this is only possible by enabling the experimental_prefetchInRender flag in the QueryClient // Since we a calling the useQuery hook from the component, react-query will track this query - const postsWithBigDelay = useQuery( - postsQueryWithBiggerDelayOptions(), - ).promise; + const postsWithBigDelay = useQuery(postsQueryOptions()).promise; return (
    @@ -74,27 +51,13 @@ export default function Home({ loaderData }: Route.ComponentProps) { >{`${t("dashboard__welcome")} ${user?.firstName} ${user?.lastName}`} - + {t("dashboard__five_todos")} {t("dashboard__loading_strategy_one")} - - - - - {t("dashboard__three_posts")} - - {t("dashboard__loading_strategy_two")} - - }> - {postsQuery && ( - - {(data) => } - - )} - + diff --git a/frontend/src/routes/authenticated-routes/dashboard/route.ts b/frontend/src/routes/authenticated-routes/dashboard/route.ts new file mode 100644 index 0000000..4d4cc3d --- /dev/null +++ b/frontend/src/routes/authenticated-routes/dashboard/route.ts @@ -0,0 +1,11 @@ +import en from "#assets/locales/en.json"; +import fr from "#assets/locales/fr.json"; +import type { IRoute } from "src/routes"; + +export const route: IRoute = { + paths: { + en: `/${en.locale__key}/${en.routes__dashboard}`, + fr: `/${fr.locale__key}/${fr.routes__dashboard}`, + }, + file: `./routes/authenticated-routes/dashboard/dashboard.tsx`, +}; diff --git a/frontend/src/routes/authenticated-routes/layout.tsx b/frontend/src/routes/authenticated-routes/layout.tsx index ded3228..cc98f1b 100644 --- a/frontend/src/routes/authenticated-routes/layout.tsx +++ b/frontend/src/routes/authenticated-routes/layout.tsx @@ -14,6 +14,8 @@ import ListItemIcon from "@mui/material/ListItemIcon"; import ListItemText from "@mui/material/ListItemText"; import Toolbar from "@mui/material/Toolbar"; import Typography from "@mui/material/Typography"; +import { route as dashboardRoute } from "@routes/authenticated-routes/dashboard/route"; +import { route as settingsRoute } from "@routes/authenticated-routes/settings/route"; import i18next from "@shared/i18n"; import { useUserStore } from "@stores/userStore"; import React, { lazy, Suspense, useState } from "react"; @@ -35,11 +37,11 @@ const ListItems: React.FC = () => { return [ { text: t("dashboard__page_title"), - to: `/${i18next.language}/dashboard`, + to: dashboardRoute.paths[i18next.language], }, { text: t("settings__page_title"), - to: `/${i18next.language}/settings`, + to: settingsRoute.paths[i18next.language], }, ].map(({ text, to }, index) => ( diff --git a/frontend/src/routes/authenticated-routes/settings/route.ts b/frontend/src/routes/authenticated-routes/settings/route.ts new file mode 100644 index 0000000..b668004 --- /dev/null +++ b/frontend/src/routes/authenticated-routes/settings/route.ts @@ -0,0 +1,11 @@ +import en from "#assets/locales/en.json"; +import fr from "#assets/locales/fr.json"; +import type { IRoute } from "src/routes"; + +export const route: IRoute = { + paths: { + en: `/${en.locale__key}/${en.routes__settings}`, + fr: `/${fr.locale__key}/${fr.routes__settings}`, + }, + file: `./routes/authenticated-routes/settings/settings.tsx`, +}; diff --git a/frontend/src/routes/authenticated-routes/settings/settings.route.tsx b/frontend/src/routes/authenticated-routes/settings/settings.tsx similarity index 86% rename from frontend/src/routes/authenticated-routes/settings/settings.route.tsx rename to frontend/src/routes/authenticated-routes/settings/settings.tsx index 7763539..da2446e 100644 --- a/frontend/src/routes/authenticated-routes/settings/settings.route.tsx +++ b/frontend/src/routes/authenticated-routes/settings/settings.tsx @@ -1,13 +1,14 @@ import Button from "@components/button/Button"; import LogoutRounded from "@icons/LogoutRounded"; import { Box, Typography } from "@mui/material"; +import { route as loginRoute } from "@routes/public-routes/login/route"; import { ACCESS_TOKEN, REFRESH_TOKEN } from "@shared/constants"; import { default as i18next } from "@shared/i18n"; import { useUserStore } from "@stores/userStore"; import { useTranslation } from "react-i18next"; import { useNavigate } from "react-router"; import { useChangeLanguage } from "src/app/hooks/useChangeLanguage"; -import type { Route } from "./+types/settings.route"; +import type { Route } from "./+types/settings"; export const clientLoader = async ({ params: _params, @@ -15,8 +16,8 @@ export const clientLoader = async ({ return {}; }; -export const meta = ({ params }: Route.MetaArgs) => { - const t = i18next.getFixedT(params.lang as string); +export const meta = () => { + const t = i18next.getFixedT(i18next.language); const title = t("dashboard__page_title"); return [{ title }]; @@ -32,7 +33,7 @@ export default function Settings() { localStorage.removeItem(ACCESS_TOKEN); localStorage.removeItem(REFRESH_TOKEN); setUser(undefined); - navigate(`/${i18next.language}/login`); + navigate(loginRoute.paths[i18next.language]); }; return ( diff --git a/frontend/src/routes/index.tsx b/frontend/src/routes/index.tsx index c81ffde..1d21fd3 100644 --- a/frontend/src/routes/index.tsx +++ b/frontend/src/routes/index.tsx @@ -1,4 +1,6 @@ import Loading from "@components/loading/Loading"; +import { route as dashboardRoute } from "@routes/authenticated-routes/dashboard/route"; +import { route as homeRoute } from "@routes/public-routes/home/route"; import i18next from "@shared/i18n"; import { useUserStore } from "@stores/userStore"; import { type MetaFunction, redirect } from "react-router"; @@ -10,9 +12,9 @@ export const clientLoader = ({ }: Route.ClientLoaderArgs) => { const { user } = useUserStore.getState(); if (user) { - return redirect(`/${i18next.language}/dashboard`); + return redirect(dashboardRoute.paths[i18next.language]); } else { - return redirect(`/${i18next.language}/home`); + return redirect(homeRoute.paths[i18next.language]); } }; diff --git a/frontend/src/routes/not-found/not-found.route.tsx b/frontend/src/routes/not-found/not-found.route.tsx index d289a0e..b2391a8 100644 --- a/frontend/src/routes/not-found/not-found.route.tsx +++ b/frontend/src/routes/not-found/not-found.route.tsx @@ -1,6 +1,7 @@ import Button from "@components/button/Button"; import { Box } from "@mui/material"; import Typography from "@mui/material/Typography"; +import { route as homeRoute } from "@routes/public-routes/home/route"; import i18next from "@shared/i18n"; import { useTranslation } from "react-i18next"; import { useNavigate } from "react-router"; @@ -41,7 +42,7 @@ export default function NotFound() { + {`${t("global__version")}: ${import.meta.env.VITE_VERSION_NUMBER}`} diff --git a/frontend/src/routes/public-routes/home/route.ts b/frontend/src/routes/public-routes/home/route.ts new file mode 100644 index 0000000..7157705 --- /dev/null +++ b/frontend/src/routes/public-routes/home/route.ts @@ -0,0 +1,11 @@ +import en from "#assets/locales/en.json"; +import fr from "#assets/locales/fr.json"; +import type { IRoute } from "src/routes"; + +export const route: IRoute = { + paths: { + en: `/${en.locale__key}/${en.routes__home}`, + fr: `/${fr.locale__key}/${fr.routes__home}`, + }, + file: `./routes/public-routes/home/home.tsx`, +}; diff --git a/frontend/src/routes/public-routes/login/login.route.tsx b/frontend/src/routes/public-routes/login/login.tsx similarity index 90% rename from frontend/src/routes/public-routes/login/login.route.tsx rename to frontend/src/routes/public-routes/login/login.tsx index 78d6ec4..16f292a 100644 --- a/frontend/src/routes/public-routes/login/login.route.tsx +++ b/frontend/src/routes/public-routes/login/login.tsx @@ -13,10 +13,10 @@ import { useTranslation } from "react-i18next"; import { useFetcher, type MetaFunction } from "react-router"; import { toast } from "react-toastify"; import { useChangeLanguage } from "src/app/hooks/useChangeLanguage"; -import type { Route } from "./+types/login.route"; +import type { Route } from "./+types/login"; import LoginForm from "./loginForm/LoginForm"; -import { handleRedirect } from "./redirect"; -import { validateCredentials } from "./validateCredentials"; +import { handleRedirect } from "./submissionHelpers/handleRedirect"; +import { validateCredentials } from "./submissionHelpers/validateCredentials"; /** * Exceptionnaly, for this loader, we will check if the user's access token @@ -24,10 +24,7 @@ import { validateCredentials } from "./validateCredentials"; * and set the user in the store. We will redirect the user to the home page * or whatever route the user was trying to access. */ -export const clientLoader = async ({ - params: _params, - request: _request, -}: Route.ClientLoaderArgs) => { +export const clientLoader = async () => { const accessToken = localStorage.getItem(ACCESS_TOKEN); if (!accessToken) { @@ -47,18 +44,15 @@ export const clientLoader = async ({ return {}; }; -export const meta: MetaFunction = ({ params }) => { - const t = i18next.getFixedT(params.lang as string); +export const meta: MetaFunction = () => { + const t = i18next.getFixedT(i18next.language); const title = t("login__page_title"); return [{ title }]; }; -export const clientAction = async ({ - request, - params, -}: Route.ClientActionArgs) => { - const t = i18next.getFixedT(params.lang); +export const clientAction = async ({ request }: Route.ClientActionArgs) => { + const t = i18next.getFixedT(i18next.language); const { setUser } = useUserStore.getState(); const form = (await request.json()) as ILogin; diff --git a/frontend/src/routes/public-routes/login/loginForm/LoginForm.tsx b/frontend/src/routes/public-routes/login/loginForm/LoginForm.tsx index ffd59d5..f100898 100644 --- a/frontend/src/routes/public-routes/login/loginForm/LoginForm.tsx +++ b/frontend/src/routes/public-routes/login/loginForm/LoginForm.tsx @@ -1,11 +1,11 @@ import Button from "@components/button/Button"; import FieldHelperText from "@components/fieldHelperText/FieldHelperText"; import TextField from "@components/textField/TextField"; +import { useFormValidation } from "@routes/public-routes/login/loginForm/useFormValidation"; import type ILogin from "@services/auth/interfaces/ILogin"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import { type FetcherWithComponents } from "react-router"; -import { useFormValidation } from "src/routes/public-routes/login/useFormValidation"; import classes from "./loginForm.module.css"; type LoginFormProps = { diff --git a/frontend/src/routes/public-routes/login/useFormValidation.ts b/frontend/src/routes/public-routes/login/loginForm/useFormValidation.ts similarity index 95% rename from frontend/src/routes/public-routes/login/useFormValidation.ts rename to frontend/src/routes/public-routes/login/loginForm/useFormValidation.ts index 4c8c975..bae15ad 100644 --- a/frontend/src/routes/public-routes/login/useFormValidation.ts +++ b/frontend/src/routes/public-routes/login/loginForm/useFormValidation.ts @@ -3,7 +3,7 @@ import { t } from "i18next"; import { useState, type FormEvent } from "react"; import { toast } from "react-toastify"; import { ValidationError } from "yup"; -import loginFormSchema from "./loginForm/loginForm.schema"; +import loginFormSchema from "./loginForm.schema"; export const useFormValidation = (loginForm: ILogin) => { const [formErrors, setFormErrors] = useState([]); diff --git a/frontend/src/routes/public-routes/login/route.ts b/frontend/src/routes/public-routes/login/route.ts new file mode 100644 index 0000000..97f5194 --- /dev/null +++ b/frontend/src/routes/public-routes/login/route.ts @@ -0,0 +1,11 @@ +import en from "#assets/locales/en.json"; +import fr from "#assets/locales/fr.json"; +import type { IRoute } from "src/routes"; + +export const route: IRoute = { + paths: { + en: `/${en.locale__key}/${en.routes__login}`, + fr: `/${fr.locale__key}/${fr.routes__login}`, + }, + file: `./routes/public-routes/login/login.tsx`, +}; diff --git a/frontend/src/routes/public-routes/login/redirect.ts b/frontend/src/routes/public-routes/login/submissionHelpers/handleRedirect.ts similarity index 67% rename from frontend/src/routes/public-routes/login/redirect.ts rename to frontend/src/routes/public-routes/login/submissionHelpers/handleRedirect.ts index 46c0937..5366ca8 100644 --- a/frontend/src/routes/public-routes/login/redirect.ts +++ b/frontend/src/routes/public-routes/login/submissionHelpers/handleRedirect.ts @@ -1,6 +1,7 @@ -import { EN, FR } from "@shared/constants"; +import { route as dashboardRoute } from "@routes/authenticated-routes/dashboard/route"; import i18next from "@shared/i18n"; import { redirect, useNavigate } from "react-router"; +import { findRoute } from "src/routes"; // the redirect url could have a language param different from the current language const getRedirectUrl = () => { @@ -9,11 +10,11 @@ const getRedirectUrl = () => { const redirectUrl = urlSearchParams.get("redirect"); if (redirectUrl) { - const currentLanguage = i18next.language; - const regex = new RegExp(`^/${EN}|${FR}`); - return redirectUrl.replace(regex, `/${currentLanguage}`); + const localizedRoute = findRoute(redirectUrl, i18next.language); + urlSearchParams.delete("redirect"); + return `${localizedRoute}?${urlSearchParams.toString()}`; } else { - return `/${i18next.language}/dashboard`; + return dashboardRoute.paths[i18next.language]; } }; diff --git a/frontend/src/routes/public-routes/login/validateCredentials.ts b/frontend/src/routes/public-routes/login/submissionHelpers/validateCredentials.ts similarity index 100% rename from frontend/src/routes/public-routes/login/validateCredentials.ts rename to frontend/src/routes/public-routes/login/submissionHelpers/validateCredentials.ts diff --git a/frontend/src/routes/public-routes/uikit/UiKit.tsx b/frontend/src/routes/public-routes/uikit/UiKit.tsx index 3daf284..417349c 100644 --- a/frontend/src/routes/public-routes/uikit/UiKit.tsx +++ b/frontend/src/routes/public-routes/uikit/UiKit.tsx @@ -71,129 +71,124 @@ export default function UiKit() { }, []); return ( - ({ padding: theme.customProperties.spacing.xl })}> - ({ - display: "flex", - gap: theme.customProperties.spacing.xl, - position: "relative", - })} - > - + ({ + display: "flex", + gap: theme.customProperties.spacing.xl, + position: "relative", + padding: theme.customProperties.spacing.xl, + })} + > + -
    - UiKit - - This is where you can display all your custom components/containers. - - ({ - display: "flex", - gap: theme.customProperties.spacing.md, - })} - > - For all the Styled MUI components, please refer to - - MUI documentation - - +
    + UiKit + + This is where you can display all your custom components/containers. + + ({ + display: "flex", + gap: theme.customProperties.spacing.md, + })} + > + For all the Styled MUI components, please refer to + + MUI documentation + + - ({ - display: "flex", - flexDirection: "column", - gap: theme.customProperties.spacing.xs, - })} - > - - H1. Heading - H2. Heading - H3. Heading - H4. Heading - H5. Heading - H6. Heading - - subtitle1. Lorem ipsum dolor sit amet, consectetur adipisicing - elit. Quos blanditiis tenetur - - - subtitle2. Lorem ipsum dolor sit amet, consectetur adipisicing - elit. Quos blanditiis tenetur - - - body1. Lorem ipsum dolor sit amet, consectetur adipisicing elit. - Quos blanditiis tenetur unde suscipit, quam beatae rerum - inventore consectetur, neque doloribus, cupiditate numquam - dignissimos laborum fugiat deleniti? Eum quasi quidem quibusdam. - - - body2. Lorem ipsum dolor sit amet, consectetur adipisicing elit. - Quos blanditiis tenetur unde suscipit, quam beatae rerum - inventore consectetur, neque doloribus, cupiditate numquam - dignissimos laborum fugiat deleniti? Eum quasi quidem quibusdam. - - button text - caption text - overline text - + ({ + display: "flex", + flexDirection: "column", + gap: theme.customProperties.spacing.xs, + })} + > + + H1. Heading + H2. Heading + H3. Heading + H4. Heading + H5. Heading + H6. Heading + + subtitle1. Lorem ipsum dolor sit amet, consectetur adipisicing + elit. Quos blanditiis tenetur + + + subtitle2. Lorem ipsum dolor sit amet, consectetur adipisicing + elit. Quos blanditiis tenetur + + + body1. Lorem ipsum dolor sit amet, consectetur adipisicing elit. + Quos blanditiis tenetur unde suscipit, quam beatae rerum inventore + consectetur, neque doloribus, cupiditate numquam dignissimos + laborum fugiat deleniti? Eum quasi quidem quibusdam. + + + body2. Lorem ipsum dolor sit amet, consectetur adipisicing elit. + Quos blanditiis tenetur unde suscipit, quam beatae rerum inventore + consectetur, neque doloribus, cupiditate numquam dignissimos + laborum fugiat deleniti? Eum quasi quidem quibusdam. + + button text + caption text + overline text + - - - - - - - - - - + + + + + + + + + + - + `} - > - - - + > + + + - + `} - > - - - + > + + + - - - {showLoading && } - - -
    - + + + {showLoading && } + + +
    ); } diff --git a/frontend/src/routes/public-routes/uikit/route.ts b/frontend/src/routes/public-routes/uikit/route.ts new file mode 100644 index 0000000..c892a03 --- /dev/null +++ b/frontend/src/routes/public-routes/uikit/route.ts @@ -0,0 +1,11 @@ +import en from "#assets/locales/en.json"; +import fr from "#assets/locales/fr.json"; +import type { IRoute } from "src/routes"; + +export const route: IRoute = { + paths: { + en: `${en.routes__uikit}`, + fr: `${fr.routes__uikit}`, + }, + file: `./routes/public-routes/uikit/uikit.tsx`, +}; diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index 3daa950..15c7f38 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -1,19 +1,12 @@ { - "include": [ - "**/*", - "**/.server/**/*", - "**/.client/**/*", - ".react-router/types/**/*" - ], "compilerOptions": { + "baseUrl": ".", + "esModuleInterop": true, + "jsx": "react-jsx", "lib": ["DOM", "DOM.Iterable", "ES2022"], - "types": ["node", "vite/client"], - "target": "ES2022", "module": "ES2022", "moduleResolution": "bundler", - "jsx": "react-jsx", - "rootDirs": [".", "./.react-router/types"], - "baseUrl": ".", + "noEmit": true, "paths": { "@assets/*": ["src/assets/*"], "@components/*": ["src/app/components/*"], @@ -22,15 +15,23 @@ "@forms/*": ["src/app/forms/*"], "@hocs/*": ["src/app/hocs/*"], "@icons/*": ["src/app/icons/*"], + "@routes/*": ["src/routes/*"], "@services/*": ["src/app/services/*"], "@shared/*": ["src/app/shared/*"], "@stores/*": ["src/app/stores/*"] }, - "esModuleInterop": true, - "verbatimModuleSyntax": true, - "noEmit": true, "resolveJsonModule": true, + "rootDirs": [".", "./.react-router/types"], "skipLibCheck": true, - "strict": true - } + "strict": true, + "target": "ES2022", + "types": ["node", "vite/client"], + "verbatimModuleSyntax": true + }, + "include": [ + "**/*", + "**/.server/**/*", + "**/.client/**/*", + ".react-router/types/**/*" + ] }

    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