From 8b1f7451dba6f3f22eee104426d972b5f86c581c Mon Sep 17 00:00:00 2001 From: Guus van Meerveld Date: Sun, 16 Apr 2023 17:18:36 +0200 Subject: [PATCH] move files over from monorepo --- .env | 3 + .eslintrc.json | 55 + .gitignore | 28 + .prettierrc | 45 + Dockerfile | 31 + README.md | 5 + index.html | 37 + package.json | 84 + pnpm-lock.yaml | 6522 +++++++++++++++++++ public/android-chrome-192x192.png | Bin 0 -> 5537 bytes public/android-chrome-512x512.png | Bin 0 -> 22488 bytes public/apple-touch-icon-114x114.png | Bin 0 -> 1612 bytes public/apple-touch-icon-120x120.png | Bin 0 -> 1628 bytes public/apple-touch-icon-144x144.png | Bin 0 -> 1890 bytes public/apple-touch-icon-152x152.png | Bin 0 -> 2045 bytes public/apple-touch-icon-180x180.png | Bin 0 -> 3120 bytes public/apple-touch-icon-57x57.png | Bin 0 -> 1060 bytes public/apple-touch-icon-60x60.png | Bin 0 -> 1045 bytes public/apple-touch-icon-72x72.png | Bin 0 -> 1215 bytes public/apple-touch-icon-76x76.png | Bin 0 -> 1217 bytes public/apple-touch-icon.png | Bin 0 -> 3120 bytes public/browserconfig.xml | 9 + public/logo/google.png | Bin 0 -> 12625 bytes public/mstile-150x150.png | Bin 0 -> 3892 bytes public/robots.txt | 3 + public/safari-pinned-tab.svg | 342 + src-tauri/.gitignore | 4 + src-tauri/Cargo.toml | 37 + src-tauri/build.rs | 3 + src-tauri/icons/128x128.png | Bin 0 -> 4240 bytes src-tauri/icons/128x128@2x.png | Bin 0 -> 10414 bytes src-tauri/icons/32x32.png | Bin 0 -> 1117 bytes src-tauri/icons/Square107x107Logo.png | Bin 0 -> 3617 bytes src-tauri/icons/Square142x142Logo.png | Bin 0 -> 5020 bytes src-tauri/icons/Square150x150Logo.png | Bin 0 -> 5489 bytes src-tauri/icons/Square284x284Logo.png | Bin 0 -> 13229 bytes src-tauri/icons/Square30x30Logo.png | Bin 0 -> 1019 bytes src-tauri/icons/Square310x310Logo.png | Bin 0 -> 15182 bytes src-tauri/icons/Square44x44Logo.png | Bin 0 -> 1490 bytes src-tauri/icons/Square71x71Logo.png | Bin 0 -> 2348 bytes src-tauri/icons/Square89x89Logo.png | Bin 0 -> 2965 bytes src-tauri/icons/StoreLogo.png | Bin 0 -> 1688 bytes src-tauri/icons/icon.icns | Bin 0 -> 84104 bytes src-tauri/icons/icon.ico | Bin 0 -> 285478 bytes src-tauri/icons/icon.png | Bin 0 -> 28600 bytes src-tauri/isolation-dist/index.html | 10 + src-tauri/isolation-dist/index.js | 3 + src-tauri/src/commands.rs | 115 + src-tauri/src/hash.rs | 31 + src-tauri/src/identifier.rs | 47 + src-tauri/src/keyring.rs | 31 + src-tauri/src/main.rs | 91 + src-tauri/src/menu.rs | 25 + src-tauri/src/parse.rs | 11 + src-tauri/src/sessions.rs | 64 + src-tauri/src/tray.rs | 15 + src-tauri/src/types/mod.rs | 109 + src-tauri/tauri.conf.json | 85 + src/components/About.tsx | 115 + src/components/Boxes/Add.tsx | 321 + src/components/Boxes/Delete.tsx | 98 + src/components/Boxes/FolderTree.tsx | 211 + src/components/Boxes/List.tsx | 313 + src/components/Boxes/Rename.tsx | 122 + src/components/Changelog.tsx | 57 + src/components/DarkModeSwitch.tsx | 23 + src/components/Layout.tsx | 23 + src/components/Login/Form.tsx | 637 ++ src/components/Login/Settings.tsx | 223 + src/components/Message/ActionButton.tsx | 41 + src/components/Message/Composer.tsx | 265 + src/components/Message/List.tsx | 347 + src/components/Message/ListItem.tsx | 153 + src/components/Message/Overview.tsx | 455 ++ src/components/Navbar/Avatar.tsx | 198 + src/components/Navbar/Drawer.tsx | 59 + src/components/Navbar/index.tsx | 190 + src/components/ParamStateHandler.tsx | 49 + src/components/Settings/index.tsx | 92 + src/components/Slider.tsx | 59 + src/components/Snackbar.tsx | 71 + src/constants.ts | 2 + src/favicon-16x16.png | Bin 0 -> 732 bytes src/favicon-32x32.png | Bin 0 -> 1126 bytes src/favicon.ico | Bin 0 -> 15086 bytes src/interfaces/api.ts | 13 + src/interfaces/box.ts | 5 + src/interfaces/client.ts | 24 + src/interfaces/messageAction.ts | 7 + src/interfaces/oauth2.ts | 10 + src/interfaces/result.ts | 13 + src/interfaces/slate.ts | 14 + src/interfaces/user.ts | 7 + src/main.tsx | 18 + src/pages/404.tsx | 45 + src/pages/addAccount.tsx | 59 + src/pages/app.tsx | 43 + src/pages/dashboard.tsx | 147 + src/pages/login.tsx | 110 + src/styles/index.ts | 3 + src/styles/modal.ts | 19 + src/styles/scrollbar.ts | 19 + src/utils/avatarUrl.ts | 14 + src/utils/createQueryClient.ts | 11 + src/utils/defaultErrors.ts | 23 + src/utils/findBox.ts | 23 + src/utils/findBoxInPrimaryBoxesList.tsx | 63 + src/utils/hooks/useAddBox.ts | 29 + src/utils/hooks/useApiClient.ts | 87 + src/utils/hooks/useBoxes.ts | 48 + src/utils/hooks/useDeleteBox.ts | 17 + src/utils/hooks/useFetchClient.ts | 117 + src/utils/hooks/useLogin.ts | 161 + src/utils/hooks/useLogout.ts | 43 + src/utils/hooks/useMailClient.ts | 272 + src/utils/hooks/useMessageActions.tsx | 37 + src/utils/hooks/useMultiServerLoginStore.ts | 183 + src/utils/hooks/useOAuth2Client.ts | 143 + src/utils/hooks/useRenameBox.ts | 19 + src/utils/hooks/useSelected.ts | 22 + src/utils/hooks/useSelectedBox.ts | 80 + src/utils/hooks/useSelectedMessage.ts | 94 + src/utils/hooks/useSettings.ts | 29 + src/utils/hooks/useSnackbar.ts | 18 + src/utils/hooks/useStore.ts | 56 + src/utils/hooks/useTheme.ts | 37 + src/utils/hooks/useUser.ts | 101 + src/utils/hooks/useWindowWidth.ts | 19 + src/utils/parseEmail.ts | 30 + src/utils/parseError.ts | 56 + src/utils/parseJson.ts | 11 + src/utils/parseZodOutput.ts | 21 + src/vite-env.d.ts | 14 + tsconfig.json | 36 + tsconfig.node.json | 9 + vite.config.ts | 68 + 136 files changed, 14516 insertions(+) create mode 100644 .env create mode 100644 .eslintrc.json create mode 100644 .gitignore create mode 100644 .prettierrc create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 index.html create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 public/android-chrome-192x192.png create mode 100644 public/android-chrome-512x512.png create mode 100644 public/apple-touch-icon-114x114.png create mode 100644 public/apple-touch-icon-120x120.png create mode 100644 public/apple-touch-icon-144x144.png create mode 100644 public/apple-touch-icon-152x152.png create mode 100644 public/apple-touch-icon-180x180.png create mode 100644 public/apple-touch-icon-57x57.png create mode 100644 public/apple-touch-icon-60x60.png create mode 100644 public/apple-touch-icon-72x72.png create mode 100644 public/apple-touch-icon-76x76.png create mode 100644 public/apple-touch-icon.png create mode 100644 public/browserconfig.xml create mode 100644 public/logo/google.png create mode 100644 public/mstile-150x150.png create mode 100644 public/robots.txt create mode 100644 public/safari-pinned-tab.svg create mode 100644 src-tauri/.gitignore create mode 100644 src-tauri/Cargo.toml create mode 100644 src-tauri/build.rs create mode 100644 src-tauri/icons/128x128.png create mode 100644 src-tauri/icons/128x128@2x.png create mode 100644 src-tauri/icons/32x32.png create mode 100644 src-tauri/icons/Square107x107Logo.png create mode 100644 src-tauri/icons/Square142x142Logo.png create mode 100644 src-tauri/icons/Square150x150Logo.png create mode 100644 src-tauri/icons/Square284x284Logo.png create mode 100644 src-tauri/icons/Square30x30Logo.png create mode 100644 src-tauri/icons/Square310x310Logo.png create mode 100644 src-tauri/icons/Square44x44Logo.png create mode 100644 src-tauri/icons/Square71x71Logo.png create mode 100644 src-tauri/icons/Square89x89Logo.png create mode 100644 src-tauri/icons/StoreLogo.png create mode 100644 src-tauri/icons/icon.icns create mode 100644 src-tauri/icons/icon.ico create mode 100644 src-tauri/icons/icon.png create mode 100644 src-tauri/isolation-dist/index.html create mode 100644 src-tauri/isolation-dist/index.js create mode 100644 src-tauri/src/commands.rs create mode 100644 src-tauri/src/hash.rs create mode 100644 src-tauri/src/identifier.rs create mode 100644 src-tauri/src/keyring.rs create mode 100644 src-tauri/src/main.rs create mode 100644 src-tauri/src/menu.rs create mode 100644 src-tauri/src/parse.rs create mode 100644 src-tauri/src/sessions.rs create mode 100644 src-tauri/src/tray.rs create mode 100644 src-tauri/src/types/mod.rs create mode 100644 src-tauri/tauri.conf.json create mode 100644 src/components/About.tsx create mode 100644 src/components/Boxes/Add.tsx create mode 100644 src/components/Boxes/Delete.tsx create mode 100644 src/components/Boxes/FolderTree.tsx create mode 100644 src/components/Boxes/List.tsx create mode 100644 src/components/Boxes/Rename.tsx create mode 100644 src/components/Changelog.tsx create mode 100644 src/components/DarkModeSwitch.tsx create mode 100644 src/components/Layout.tsx create mode 100644 src/components/Login/Form.tsx create mode 100644 src/components/Login/Settings.tsx create mode 100644 src/components/Message/ActionButton.tsx create mode 100644 src/components/Message/Composer.tsx create mode 100644 src/components/Message/List.tsx create mode 100644 src/components/Message/ListItem.tsx create mode 100644 src/components/Message/Overview.tsx create mode 100644 src/components/Navbar/Avatar.tsx create mode 100644 src/components/Navbar/Drawer.tsx create mode 100644 src/components/Navbar/index.tsx create mode 100644 src/components/ParamStateHandler.tsx create mode 100644 src/components/Settings/index.tsx create mode 100644 src/components/Slider.tsx create mode 100644 src/components/Snackbar.tsx create mode 100644 src/constants.ts create mode 100644 src/favicon-16x16.png create mode 100644 src/favicon-32x32.png create mode 100644 src/favicon.ico create mode 100644 src/interfaces/api.ts create mode 100644 src/interfaces/box.ts create mode 100644 src/interfaces/client.ts create mode 100644 src/interfaces/messageAction.ts create mode 100644 src/interfaces/oauth2.ts create mode 100644 src/interfaces/result.ts create mode 100644 src/interfaces/slate.ts create mode 100644 src/interfaces/user.ts create mode 100644 src/main.tsx create mode 100644 src/pages/404.tsx create mode 100644 src/pages/addAccount.tsx create mode 100644 src/pages/app.tsx create mode 100644 src/pages/dashboard.tsx create mode 100644 src/pages/login.tsx create mode 100644 src/styles/index.ts create mode 100644 src/styles/modal.ts create mode 100644 src/styles/scrollbar.ts create mode 100644 src/utils/avatarUrl.ts create mode 100644 src/utils/createQueryClient.ts create mode 100644 src/utils/defaultErrors.ts create mode 100644 src/utils/findBox.ts create mode 100644 src/utils/findBoxInPrimaryBoxesList.tsx create mode 100644 src/utils/hooks/useAddBox.ts create mode 100644 src/utils/hooks/useApiClient.ts create mode 100644 src/utils/hooks/useBoxes.ts create mode 100644 src/utils/hooks/useDeleteBox.ts create mode 100644 src/utils/hooks/useFetchClient.ts create mode 100644 src/utils/hooks/useLogin.ts create mode 100644 src/utils/hooks/useLogout.ts create mode 100644 src/utils/hooks/useMailClient.ts create mode 100644 src/utils/hooks/useMessageActions.tsx create mode 100644 src/utils/hooks/useMultiServerLoginStore.ts create mode 100644 src/utils/hooks/useOAuth2Client.ts create mode 100644 src/utils/hooks/useRenameBox.ts create mode 100644 src/utils/hooks/useSelected.ts create mode 100644 src/utils/hooks/useSelectedBox.ts create mode 100644 src/utils/hooks/useSelectedMessage.ts create mode 100644 src/utils/hooks/useSettings.ts create mode 100644 src/utils/hooks/useSnackbar.ts create mode 100644 src/utils/hooks/useStore.ts create mode 100644 src/utils/hooks/useTheme.ts create mode 100644 src/utils/hooks/useUser.ts create mode 100644 src/utils/hooks/useWindowWidth.ts create mode 100644 src/utils/parseEmail.ts create mode 100644 src/utils/parseError.ts create mode 100644 src/utils/parseJson.ts create mode 100644 src/utils/parseZodOutput.ts create mode 100644 src/vite-env.d.ts create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.env b/.env new file mode 100644 index 0000000..94d94fa --- /dev/null +++ b/.env @@ -0,0 +1,3 @@ +VITE_APP_NAME=Dust Mail +VITE_DEFAULT_SERVER=https://app.dust.email/api +VITE_REPO=Guusvanmeerveld/Dust-Mail \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..2962aae --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,55 @@ +{ + "root": true, + "env": { + "node": true, + "es6": true + }, + "parserOptions": { + "ecmaVersion": 8 + }, + "plugins": ["prettier"], + "ignorePatterns": ["node_modules/*", ".next/*", ".out/*", "isolation-dist/*"], + "extends": ["eslint:recommended"], + "overrides": [ + { + "files": ["**/*.ts", "**/*.tsx"], + "parser": "@typescript-eslint/parser", + "settings": { + "react": { + "version": "detect" + } + }, + "env": { + "browser": true, + "node": true, + "es6": true + }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:react/recommended", + "plugin:react-hooks/recommended", + "plugin:jsx-a11y/recommended" + ], + "rules": { + "prettier/prettier": "error", + "react/prop-types": "off", + "no-sparse-arrays": "off", + "react/react-in-jsx-scope": "off", + "react-hooks/exhaustive-deps": "off", + "jsx-a11y/anchor-is-valid": "off", + "jsx-a11y/no-autofocus": "off", + "no-mixed-spaces-and-tabs": "off", + "@typescript-eslint/no-unused-vars": ["warn"], + "@typescript-eslint/explicit-function-return-type": [ + "warn", + { + "allowExpressions": true, + "allowConciseArrowFunctionExpressionsStartingWithVoid": true, + "allowTypedFunctionExpressions": true + } + ] + } + } + ] +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7f9c95f --- /dev/null +++ b/.gitignore @@ -0,0 +1,28 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +/dist +node_modules +target + +dist-ssr +*.local + +/stats.* + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..3c1f6b9 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,45 @@ +{ + "trailingComma": "none", + "useTabs": true, + "semi": true, + "printWidth": 80, + "arrowParens": "always", + "importOrderParserPlugins": [ + "classProperties", + "decorators-legacy", + "typescript", + "jsx" + ], + "importOrderSeparation": true, + "importOrder": [ + "@rollup/.*", + "rollup-.*", + "^..?/.*", + "^slate.*", + "^react.*", + "^preact$", + "^preact.*", + "^axios.*", + "^redis.*", + "@redis/.*", + "@dust-mail/.*", + "^@nestjs/.*", + "^@emotion/.*", + "^@mui/material/.*", + "^@mui/.*", + "^@src/.*", + "^@models/.*", + "^@interfaces/.*", + "^@styles/.*", + "^@shared/.*", + "^@utils/.*", + "^@cache/.*", + "^@mail/.*", + "^@auth/.*", + "^@components/.*", + ".*sass$", + ".*css$", + "^@svg/.*" + ], + "plugins": ["@trivago/prettier-plugin-sort-imports"] +} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..2d50808 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,31 @@ +ARG BASE_IMAGE=node:16-alpine + +# Builder +FROM $BASE_IMAGE as deployer + +RUN apk add --no-cache curl git + +RUN curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm + +WORKDIR /repo + +COPY pnpm-lock.yaml ./ + +RUN pnpm fetch + +COPY apps ./apps +COPY packages ./packages + +COPY package.json pnpm-workspace.yaml .npmrc turbo.json ./ + +RUN pnpm install -r --offline --ignore-scripts + +RUN pnpm run build --filter @dust-mail/web + +RUN pnpm --filter @dust-mail/web --prod deploy /app + +FROM nginx:alpine AS runner + +COPY --from=deployer /app/dist /usr/share/nginx/html + +EXPOSE 80 \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..b173683 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# @dust-mail/web + +This the Dust mail web and desktop client. It's build using React and Material UI for the frontend and uses Vite as its main build tool. It uses Tauri to turn this exported static html into a multiplatform desktop app + +For more information about setting up a client, contributing or implementing the client api, please check the [docs](https://docs.dust.email). diff --git a/index.html b/index.html new file mode 100644 index 0000000..57fe6cb --- /dev/null +++ b/index.html @@ -0,0 +1,37 @@ + + + + + + Dust Mail + + + + + + + + + + + +
+ + + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..0243c55 --- /dev/null +++ b/package.json @@ -0,0 +1,84 @@ +{ + "name": "@dust-mail/web", + "displayName": "Dust Mail Client", + "description": "A simple and fast mail client", + "version": "0.2.4", + "repository": { + "url": "https://github.com/Guusvanmeerveld/Dust-Mail" + }, + "homepage": "https://github.com/Guusvanmeerveld/Dust-Mail", + "author": { + "name": "Guus van Meerveld", + "url": "https://guusvanmeerveld.dev", + "email": "contact@guusvanmeerveld.dev" + }, + "contributors": [], + "packageManager": "pnpm@7.5.2", + "size-limit": [ + { + "path": "dist/assets/*.js", + "limit": "500 kB" + } + ], + "license": "MIT", + "scripts": { + "dev": "vite", + "size": "size-limit", + "lint": "eslint src", + "build": "tsc && vite build", + "test": "vitest --passWithNoTests", + "coverage": "vitest run --coverage", + "preview": "vite preview", + "tauri": "tauri" + }, + "dependencies": { + "@emotion/react": "^11.9.3", + "@emotion/styled": "^11.9.3", + "@fontsource/roboto": "^4.5.7", + "@mui/icons-material": "^5.8.0", + "@mui/material": "^5.8.0", + "@mui/styled-engine": "^5.8.0", + "@tauri-apps/api": "^1.2.0", + "js-md5": "^0.7.3", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-markdown": "^8.0.3", + "react-query": "^3.39.1", + "react-router": "^6.3.0", + "react-router-dom": "^6.3.0", + "slate": "^0.81.1", + "slate-react": "^0.81.0", + "use-local-storage-state": "^17.2.0", + "zod": "^3.21.4", + "zustand": "^4.0.0-rc.1" + }, + "devDependencies": { + "@babel/plugin-transform-react-jsx-source": "^7.18.6", + "@rollup/plugin-alias": "^3.1.9", + "@size-limit/preset-app": "^7.0.8", + "@tauri-apps/cli": "^1.0.4", + "@types/jest": "^28.1.4", + "@types/js-md5": "^0.7.0", + "@types/node": "^17.0.35", + "@types/react": "^18.0.15", + "@types/react-dom": "^18.0.6", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "@vitejs/plugin-react": "^2.0.0", + "c8": "^7.12.0", + "eslint": "^8.20.0", + "eslint-plugin-jsx-a11y": "^6.6.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-react": "^7.30.1", + "eslint-plugin-react-hooks": "^4.6.0", + "prettier": "^2.7.1", + "rollup-plugin-visualizer": "^5.8.1", + "size-limit": "^7.0.8", + "typescript": "^4.5.4", + "vite": "^3.0.3", + "vite-plugin-pwa": "^0.12.2", + "vite-tsconfig-paths": "^3.4.1", + "vitest": "^0.20.3", + "workbox-window": "^6.5.3" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..babd4ce --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,6522 @@ +lockfileVersion: 5.4 + +specifiers: + '@babel/plugin-transform-react-jsx-source': ^7.18.6 + '@emotion/react': ^11.9.3 + '@emotion/styled': ^11.9.3 + '@fontsource/roboto': ^4.5.7 + '@mui/icons-material': ^5.8.0 + '@mui/material': ^5.8.0 + '@mui/styled-engine': ^5.8.0 + '@rollup/plugin-alias': ^3.1.9 + '@size-limit/preset-app': ^7.0.8 + '@tauri-apps/api': ^1.2.0 + '@tauri-apps/cli': ^1.0.4 + '@types/jest': ^28.1.4 + '@types/js-md5': ^0.7.0 + '@types/node': ^17.0.35 + '@types/react': ^18.0.15 + '@types/react-dom': ^18.0.6 + '@typescript-eslint/eslint-plugin': ^5.30.7 + '@typescript-eslint/parser': ^5.30.7 + '@vitejs/plugin-react': ^2.0.0 + c8: ^7.12.0 + eslint: ^8.20.0 + eslint-plugin-jsx-a11y: ^6.6.0 + eslint-plugin-prettier: ^4.2.1 + eslint-plugin-react: ^7.30.1 + eslint-plugin-react-hooks: ^4.6.0 + js-md5: ^0.7.3 + prettier: ^2.7.1 + react: ^18.2.0 + react-dom: ^18.2.0 + react-markdown: ^8.0.3 + react-query: ^3.39.1 + react-router: ^6.3.0 + react-router-dom: ^6.3.0 + rollup-plugin-visualizer: ^5.8.1 + size-limit: ^7.0.8 + slate: ^0.81.1 + slate-react: ^0.81.0 + typescript: ^4.5.4 + use-local-storage-state: ^17.2.0 + vite: ^3.0.3 + vite-plugin-pwa: ^0.12.2 + vite-tsconfig-paths: ^3.4.1 + vitest: ^0.20.3 + workbox-window: ^6.5.3 + zod: ^3.21.4 + zustand: ^4.0.0-rc.1 + +dependencies: + '@emotion/react': 11.10.6_yuz6bkerhkjfjuf6zeb7j6ybc4 + '@emotion/styled': 11.10.6_bpa2amdickk76qs7xzoz3lzv3m + '@fontsource/roboto': 4.5.8 + '@mui/icons-material': 5.11.16_i5qtfz56gxv345p4d7l42p6ta4 + '@mui/material': 5.12.0_rg2yyp2bpmu7sjcft7cf5grtye + '@mui/styled-engine': 5.12.0_xqp3pgpqjlfxxa3zxu4zoc4fba + '@tauri-apps/api': 1.2.0 + js-md5: 0.7.3 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + react-markdown: 8.0.7_yuz6bkerhkjfjuf6zeb7j6ybc4 + react-query: 3.39.3_biqbaboplfbrettd7655fr4n2y + react-router: 6.10.0_react@18.2.0 + react-router-dom: 6.10.0_biqbaboplfbrettd7655fr4n2y + slate: 0.81.3 + slate-react: 0.81.0_njwfekudbehx2lwpmvgkrdxmhi + use-local-storage-state: 17.3.0_biqbaboplfbrettd7655fr4n2y + zod: 3.21.4 + zustand: 4.3.7_react@18.2.0 + +devDependencies: + '@babel/plugin-transform-react-jsx-source': 7.19.6 + '@rollup/plugin-alias': 3.1.9 + '@size-limit/preset-app': 7.0.8_size-limit@7.0.8 + '@tauri-apps/cli': 1.2.3 + '@types/jest': 28.1.8 + '@types/js-md5': 0.7.0 + '@types/node': 17.0.45 + '@types/react': 18.0.35 + '@types/react-dom': 18.0.11 + '@typescript-eslint/eslint-plugin': 5.58.0_hzv37tkb63et4viajosjuuyxgi + '@typescript-eslint/parser': 5.58.0_ze6bmax3gcsfve3yrzu6npguhe + '@vitejs/plugin-react': 2.2.0_vite@3.2.5 + c8: 7.13.0 + eslint: 8.38.0 + eslint-plugin-jsx-a11y: 6.7.1_eslint@8.38.0 + eslint-plugin-prettier: 4.2.1_7bukkzi2qfqwzn63s5moor2wwy + eslint-plugin-react: 7.32.2_eslint@8.38.0 + eslint-plugin-react-hooks: 4.6.0_eslint@8.38.0 + prettier: 2.8.7 + rollup-plugin-visualizer: 5.9.0 + size-limit: 7.0.8 + typescript: 4.9.5 + vite: 3.2.5_@types+node@17.0.45 + vite-plugin-pwa: 0.12.8_vite@3.2.5 + vite-tsconfig-paths: 3.6.0_vite@3.2.5 + vitest: 0.20.3_c8@7.13.0 + workbox-window: 6.5.4 + +packages: + + /@ampproject/remapping/2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + dev: true + + /@apideck/better-ajv-errors/0.3.6_ajv@8.12.0: + resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} + engines: {node: '>=10'} + peerDependencies: + ajv: '>=8' + dependencies: + ajv: 8.12.0 + json-schema: 0.4.0 + jsonpointer: 5.0.1 + leven: 3.1.0 + dev: true + + /@babel/code-frame/7.21.4: + resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.18.6 + + /@babel/compat-data/7.21.4: + resolution: {integrity: sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core/7.21.4: + resolution: {integrity: sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.21.4 + '@babel/generator': 7.21.4 + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helpers': 7.21.0 + '@babel/parser': 7.21.4 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 + convert-source-map: 1.9.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/generator/7.21.4: + resolution: {integrity: sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.4 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + jsesc: 2.5.2 + dev: true + + /@babel/helper-annotate-as-pure/7.18.6: + resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.4 + dev: true + + /@babel/helper-builder-binary-assignment-operator-visitor/7.18.9: + resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-explode-assignable-expression': 7.18.6 + '@babel/types': 7.21.4 + dev: true + + /@babel/helper-compilation-targets/7.21.4_@babel+core@7.21.4: + resolution: {integrity: sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.21.4 + '@babel/core': 7.21.4 + '@babel/helper-validator-option': 7.21.0 + browserslist: 4.21.5 + lru-cache: 5.1.1 + semver: 6.3.0 + dev: true + + /@babel/helper-create-class-features-plugin/7.21.4_@babel+core@7.21.4: + resolution: {integrity: sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-member-expression-to-functions': 7.21.0 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-replace-supers': 7.20.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/helper-split-export-declaration': 7.18.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-create-regexp-features-plugin/7.21.4_@babel+core@7.21.4: + resolution: {integrity: sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-annotate-as-pure': 7.18.6 + regexpu-core: 5.3.2 + dev: true + + /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.21.4: + resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} + peerDependencies: + '@babel/core': ^7.4.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.3 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-environment-visitor/7.18.9: + resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-explode-assignable-expression/7.18.6: + resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.4 + dev: true + + /@babel/helper-function-name/7.21.0: + resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.20.7 + '@babel/types': 7.21.4 + dev: true + + /@babel/helper-hoist-variables/7.18.6: + resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.4 + dev: true + + /@babel/helper-member-expression-to-functions/7.21.0: + resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.4 + dev: true + + /@babel/helper-module-imports/7.21.4: + resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.4 + + /@babel/helper-module-transforms/7.21.2: + resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-module-imports': 7.21.4 + '@babel/helper-simple-access': 7.20.2 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-validator-identifier': 7.19.1 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-optimise-call-expression/7.18.6: + resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.4 + dev: true + + /@babel/helper-plugin-utils/7.20.2: + resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.21.4: + resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-wrap-function': 7.20.5 + '@babel/types': 7.21.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-replace-supers/7.20.7: + resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-member-expression-to-functions': 7.21.0 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-simple-access/7.20.2: + resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.4 + dev: true + + /@babel/helper-skip-transparent-expression-wrappers/7.20.0: + resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.4 + dev: true + + /@babel/helper-split-export-declaration/7.18.6: + resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.4 + dev: true + + /@babel/helper-string-parser/7.19.4: + resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-identifier/7.19.1: + resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-option/7.21.0: + resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-wrap-function/7.20.5: + resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': 7.21.0 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helpers/7.21.0: + resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight/7.18.6: + resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.19.1 + chalk: 2.4.2 + js-tokens: 4.0.0 + + /@babel/parser/7.21.4: + resolution: {integrity: sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.21.4 + dev: true + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.21.4: + resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.21.4: + resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.4 + dev: true + + /@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.21.4: + resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.21.4: + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-class-static-block/7.21.0_@babel+core@7.21.4: + resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.21.4: + resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.4 + dev: true + + /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.21.4: + resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.4 + dev: true + + /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.21.4: + resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.4 + dev: true + + /@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.21.4: + resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.4 + dev: true + + /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.21.4: + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.4 + dev: true + + /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.21.4: + resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.4 + dev: true + + /@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.21.4: + resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.21.4 + '@babel/core': 7.21.4 + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.21.4 + dev: true + + /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.21.4: + resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.4 + dev: true + + /@babel/plugin-proposal-optional-chaining/7.21.0_@babel+core@7.21.4: + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.4 + dev: true + + /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.21.4: + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-private-property-in-object/7.21.0_@babel+core@7.21.4: + resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.21.4: + resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} + engines: {node: '>=4'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-create-regexp-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.21.4: + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.21.4: + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.21.4: + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.21.4: + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.21.4: + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.21.4: + resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.21.4: + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-syntax-jsx/7.21.4_@babel+core@7.21.4: + resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.21.4: + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.21.4: + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.21.4: + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.21.4: + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.21.4: + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.21.4: + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.21.4: + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.21.4: + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.21.4: + resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.21.4: + resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-module-imports': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.21.4: + resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-block-scoping/7.21.0_@babel+core@7.21.4: + resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-classes/7.21.0_@babel+core@7.21.4: + resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-replace-supers': 7.20.7 + '@babel/helper-split-export-declaration': 7.18.6 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-computed-properties/7.20.7_@babel+core@7.21.4: + resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/template': 7.20.7 + dev: true + + /@babel/plugin-transform-destructuring/7.21.3_@babel+core@7.21.4: + resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.21.4: + resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-create-regexp-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.21.4: + resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.21.4: + resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-for-of/7.21.0_@babel+core@7.21.4: + resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.21.4: + resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-literals/7.18.9_@babel+core@7.21.4: + resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.21.4: + resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.21.4: + resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-commonjs/7.21.2_@babel+core@7.21.4: + resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-simple-access': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.21.4: + resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-validator-identifier': 7.19.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.21.4: + resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.21.4: + resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-create-regexp-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.21.4: + resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.21.4: + resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-replace-supers': 7.20.7 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-parameters/7.21.3_@babel+core@7.21.4: + resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.21.4: + resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-react-jsx-development/7.18.6_@babel+core@7.21.4: + resolution: {integrity: sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/plugin-transform-react-jsx': 7.21.0_@babel+core@7.21.4 + dev: true + + /@babel/plugin-transform-react-jsx-self/7.21.0_@babel+core@7.21.4: + resolution: {integrity: sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-react-jsx-source/7.19.6: + resolution: {integrity: sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-react-jsx-source/7.19.6_@babel+core@7.21.4: + resolution: {integrity: sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-react-jsx/7.21.0_@babel+core@7.21.4: + resolution: {integrity: sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-module-imports': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-jsx': 7.21.4_@babel+core@7.21.4 + '@babel/types': 7.21.4 + dev: true + + /@babel/plugin-transform-regenerator/7.20.5_@babel+core@7.21.4: + resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + regenerator-transform: 0.15.1 + dev: true + + /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.21.4: + resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.21.4: + resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-spread/7.20.7_@babel+core@7.21.4: + resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + dev: true + + /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.21.4: + resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.21.4: + resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.21.4: + resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.21.4: + resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.21.4: + resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-create-regexp-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/preset-env/7.21.4_@babel+core@7.21.4: + resolution: {integrity: sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.21.4 + '@babel/core': 7.21.4 + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-validator-option': 7.21.0 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-proposal-async-generator-functions': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-class-static-block': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-logical-assignment-operators': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-proposal-private-property-in-object': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.4 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.4 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.4 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.21.4 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.4 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.4 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.4 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.4 + '@babel/plugin-transform-arrow-functions': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-transform-async-to-generator': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-block-scoping': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-transform-classes': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-transform-computed-properties': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-transform-destructuring': 7.21.3_@babel+core@7.21.4 + '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-for-of': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-modules-amd': 7.20.11_@babel+core@7.21.4 + '@babel/plugin-transform-modules-commonjs': 7.21.2_@babel+core@7.21.4 + '@babel/plugin-transform-modules-systemjs': 7.20.11_@babel+core@7.21.4 + '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5_@babel+core@7.21.4 + '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.21.4 + '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-regenerator': 7.20.5_@babel+core@7.21.4 + '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.21.4 + '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.21.4 + '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.21.4 + '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.21.4 + '@babel/preset-modules': 0.1.5_@babel+core@7.21.4 + '@babel/types': 7.21.4 + babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.21.4 + babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.21.4 + babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.21.4 + core-js-compat: 3.30.1 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-modules/0.1.5_@babel+core@7.21.4: + resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.4 + '@babel/types': 7.21.4 + esutils: 2.0.3 + dev: true + + /@babel/regjsgen/0.8.0: + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + dev: true + + /@babel/runtime/7.21.0: + resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.11 + + /@babel/template/7.20.7: + resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.21.4 + '@babel/parser': 7.21.4 + '@babel/types': 7.21.4 + dev: true + + /@babel/traverse/7.21.4: + resolution: {integrity: sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.21.4 + '@babel/generator': 7.21.4 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/parser': 7.21.4 + '@babel/types': 7.21.4 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types/7.21.4: + resolution: {integrity: sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.19.4 + '@babel/helper-validator-identifier': 7.19.1 + to-fast-properties: 2.0.0 + + /@bcoe/v8-coverage/0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: true + + /@cush/relative/1.0.0: + resolution: {integrity: sha512-RpfLEtTlyIxeNPGKcokS+p3BZII/Q3bYxryFRglh5H3A3T8q9fsLYm72VYAMEOOIBLEa8o93kFLiBDUWKrwXZA==} + dev: true + + /@emotion/babel-plugin/11.10.6: + resolution: {integrity: sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==} + dependencies: + '@babel/helper-module-imports': 7.21.4 + '@babel/runtime': 7.21.0 + '@emotion/hash': 0.9.0 + '@emotion/memoize': 0.8.0 + '@emotion/serialize': 1.1.1 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.1.3 + dev: false + + /@emotion/cache/11.10.7: + resolution: {integrity: sha512-VLl1/2D6LOjH57Y8Vem1RoZ9haWF4jesHDGiHtKozDQuBIkJm2gimVo0I02sWCuzZtVACeixTVB4jeE8qvCBoQ==} + dependencies: + '@emotion/memoize': 0.8.0 + '@emotion/sheet': 1.2.1 + '@emotion/utils': 1.2.0 + '@emotion/weak-memoize': 0.3.0 + stylis: 4.1.3 + dev: false + + /@emotion/hash/0.9.0: + resolution: {integrity: sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==} + dev: false + + /@emotion/is-prop-valid/1.2.0: + resolution: {integrity: sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==} + dependencies: + '@emotion/memoize': 0.8.0 + dev: false + + /@emotion/memoize/0.8.0: + resolution: {integrity: sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==} + dev: false + + /@emotion/react/11.10.6_yuz6bkerhkjfjuf6zeb7j6ybc4: + resolution: {integrity: sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@emotion/babel-plugin': 11.10.6 + '@emotion/cache': 11.10.7 + '@emotion/serialize': 1.1.1 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.0_react@18.2.0 + '@emotion/utils': 1.2.0 + '@emotion/weak-memoize': 0.3.0 + '@types/react': 18.0.35 + hoist-non-react-statics: 3.3.2 + react: 18.2.0 + dev: false + + /@emotion/serialize/1.1.1: + resolution: {integrity: sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==} + dependencies: + '@emotion/hash': 0.9.0 + '@emotion/memoize': 0.8.0 + '@emotion/unitless': 0.8.0 + '@emotion/utils': 1.2.0 + csstype: 3.1.2 + dev: false + + /@emotion/sheet/1.2.1: + resolution: {integrity: sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==} + dev: false + + /@emotion/styled/11.10.6_bpa2amdickk76qs7xzoz3lzv3m: + resolution: {integrity: sha512-OXtBzOmDSJo5Q0AFemHCfl+bUueT8BIcPSxu0EGTpGk6DmI5dnhSzQANm1e1ze0YZL7TDyAyy6s/b/zmGOS3Og==} + peerDependencies: + '@emotion/react': ^11.0.0-rc.0 + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@emotion/babel-plugin': 11.10.6 + '@emotion/is-prop-valid': 1.2.0 + '@emotion/react': 11.10.6_yuz6bkerhkjfjuf6zeb7j6ybc4 + '@emotion/serialize': 1.1.1 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.0_react@18.2.0 + '@emotion/utils': 1.2.0 + '@types/react': 18.0.35 + react: 18.2.0 + dev: false + + /@emotion/unitless/0.8.0: + resolution: {integrity: sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==} + dev: false + + /@emotion/use-insertion-effect-with-fallbacks/1.0.0_react@18.2.0: + resolution: {integrity: sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==} + peerDependencies: + react: '>=16.8.0' + dependencies: + react: 18.2.0 + dev: false + + /@emotion/utils/1.2.0: + resolution: {integrity: sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==} + dev: false + + /@emotion/weak-memoize/0.3.0: + resolution: {integrity: sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==} + dev: false + + /@esbuild/android-arm/0.15.18: + resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.18: + resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@eslint-community/eslint-utils/4.4.0_eslint@8.38.0: + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.38.0 + eslint-visitor-keys: 3.4.0 + dev: true + + /@eslint-community/regexpp/4.5.0: + resolution: {integrity: sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc/2.0.2: + resolution: {integrity: sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.5.1 + globals: 13.20.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js/8.38.0: + resolution: {integrity: sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@fontsource/roboto/4.5.8: + resolution: {integrity: sha512-CnD7zLItIzt86q4Sj3kZUiLcBk1dSk81qcqgMGaZe7SQ1P8hFNxhMl5AZthK1zrDM5m74VVhaOpuMGIL4gagaA==} + dev: false + + /@humanwhocodes/config-array/0.11.8: + resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/module-importer/1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + + /@humanwhocodes/object-schema/1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + dev: true + + /@istanbuljs/schema/0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + dev: true + + /@jest/expect-utils/28.1.3: + resolution: {integrity: sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + jest-get-type: 28.0.2 + dev: true + + /@jest/schemas/28.1.3: + resolution: {integrity: sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@sinclair/typebox': 0.24.51 + dev: true + + /@jest/types/28.1.3: + resolution: {integrity: sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/schemas': 28.1.3 + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.1 + '@types/node': 17.0.45 + '@types/yargs': 17.0.24 + chalk: 4.1.2 + dev: true + + /@jridgewell/gen-mapping/0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.18 + dev: true + + /@jridgewell/resolve-uri/3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array/1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/source-map/0.3.3: + resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + dev: true + + /@jridgewell/sourcemap-codec/1.4.14: + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + dev: true + + /@jridgewell/sourcemap-codec/1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@jridgewell/trace-mapping/0.3.18: + resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@mui/base/5.0.0-alpha.125_7geocmx3442bocz6x6zwg5lxxi: + resolution: {integrity: sha512-hAHJJ97SATu6SrkLH/HsAayK1zMZt89lrWyKuAInBKVyn363H78d1MnwyZwre9vDK5MrPoDL/NnZxtAXhwTnBA==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@emotion/is-prop-valid': 1.2.0 + '@mui/types': 7.2.4_@types+react@18.0.35 + '@mui/utils': 5.12.0_react@18.2.0 + '@popperjs/core': 2.11.7 + '@types/react': 18.0.35 + clsx: 1.2.1 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + react-is: 18.2.0 + dev: false + + /@mui/core-downloads-tracker/5.12.0: + resolution: {integrity: sha512-1hoFIdlLI0sG+mkJgm70FjgIVpfLcE1vxPtNolg1tLFXrvbXGUYp9NHy3d6c41nDkg2OajuVS+Mn6A8UirFuMw==} + dev: false + + /@mui/icons-material/5.11.16_i5qtfz56gxv345p4d7l42p6ta4: + resolution: {integrity: sha512-oKkx9z9Kwg40NtcIajF9uOXhxiyTZrrm9nmIJ4UjkU2IdHpd4QVLbCc/5hZN/y0C6qzi2Zlxyr9TGddQx2vx2A==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@mui/material': ^5.0.0 + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@mui/material': 5.12.0_rg2yyp2bpmu7sjcft7cf5grtye + '@types/react': 18.0.35 + react: 18.2.0 + dev: false + + /@mui/material/5.12.0_rg2yyp2bpmu7sjcft7cf5grtye: + resolution: {integrity: sha512-IMellv153zJ6+xfhLWgXpAm/9hsX8qE6gP66xWcW/Pf2B8ubyVhmkTXsp8pAJxk81D6p/EyYcnAjo5DiDVkj9g==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@emotion/react': 11.10.6_yuz6bkerhkjfjuf6zeb7j6ybc4 + '@emotion/styled': 11.10.6_bpa2amdickk76qs7xzoz3lzv3m + '@mui/base': 5.0.0-alpha.125_7geocmx3442bocz6x6zwg5lxxi + '@mui/core-downloads-tracker': 5.12.0 + '@mui/system': 5.12.0_lc5335i77nvisulh5l5jax5g44 + '@mui/types': 7.2.4_@types+react@18.0.35 + '@mui/utils': 5.12.0_react@18.2.0 + '@types/react': 18.0.35 + '@types/react-transition-group': 4.4.5 + clsx: 1.2.1 + csstype: 3.1.2 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + react-is: 18.2.0 + react-transition-group: 4.4.5_biqbaboplfbrettd7655fr4n2y + dev: false + + /@mui/private-theming/5.12.0_yuz6bkerhkjfjuf6zeb7j6ybc4: + resolution: {integrity: sha512-w5dwMen1CUm1puAtubqxY9BIzrBxbOThsg2iWMvRJmWyJAPdf3Z583fPXpqeA2lhTW79uH2jajk5Ka4FuGlTPg==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@mui/utils': 5.12.0_react@18.2.0 + '@types/react': 18.0.35 + prop-types: 15.8.1 + react: 18.2.0 + dev: false + + /@mui/styled-engine/5.12.0_xqp3pgpqjlfxxa3zxu4zoc4fba: + resolution: {integrity: sha512-frh8L7CRnvD0RDmIqEv6jFeKQUIXqW90BaZ6OrxJ2j4kIsiVLu29Gss4SbBvvrWwwatR72sBmC3w1aG4fjp9mQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@emotion/react': ^11.4.1 + '@emotion/styled': ^11.3.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@emotion/cache': 11.10.7 + '@emotion/react': 11.10.6_yuz6bkerhkjfjuf6zeb7j6ybc4 + '@emotion/styled': 11.10.6_bpa2amdickk76qs7xzoz3lzv3m + csstype: 3.1.2 + prop-types: 15.8.1 + react: 18.2.0 + dev: false + + /@mui/system/5.12.0_lc5335i77nvisulh5l5jax5g44: + resolution: {integrity: sha512-Zi+WHuiJfK1ya+9+oeJQ1rLIBdY8CGDYT5oVlQg/6kIuyiCaE6SnN9PVzxBxfY77wHuOPwz4kxcPe9srdZc12Q==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@emotion/react': 11.10.6_yuz6bkerhkjfjuf6zeb7j6ybc4 + '@emotion/styled': 11.10.6_bpa2amdickk76qs7xzoz3lzv3m + '@mui/private-theming': 5.12.0_yuz6bkerhkjfjuf6zeb7j6ybc4 + '@mui/styled-engine': 5.12.0_xqp3pgpqjlfxxa3zxu4zoc4fba + '@mui/types': 7.2.4_@types+react@18.0.35 + '@mui/utils': 5.12.0_react@18.2.0 + '@types/react': 18.0.35 + clsx: 1.2.1 + csstype: 3.1.2 + prop-types: 15.8.1 + react: 18.2.0 + dev: false + + /@mui/types/7.2.4_@types+react@18.0.35: + resolution: {integrity: sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==} + peerDependencies: + '@types/react': '*' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.35 + dev: false + + /@mui/utils/5.12.0_react@18.2.0: + resolution: {integrity: sha512-RmQwgzF72p7Yr4+AAUO6j1v2uzt6wr7SWXn68KBsnfVpdOHyclCzH2lr/Xu6YOw9su4JRtdAIYfJFXsS6Cjkmw==} + engines: {node: '>=12.0.0'} + peerDependencies: + react: ^17.0.0 || ^18.0.0 + dependencies: + '@babel/runtime': 7.21.0 + '@types/prop-types': 15.7.5 + '@types/react-is': 17.0.3 + prop-types: 15.8.1 + react: 18.2.0 + react-is: 18.2.0 + dev: false + + /@nodelib/fs.scandir/2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat/2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk/1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + dev: true + + /@popperjs/core/2.11.7: + resolution: {integrity: sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==} + dev: false + + /@remix-run/router/1.5.0: + resolution: {integrity: sha512-bkUDCp8o1MvFO+qxkODcbhSqRa6P2GXgrGZVpt0dCXNW2HCSCqYI0ZoAqEOSAjRWmmlKcYgFvN4B4S+zo/f8kg==} + engines: {node: '>=14'} + dev: false + + /@rollup/plugin-alias/3.1.9: + resolution: {integrity: sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==} + engines: {node: '>=8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + slash: 3.0.0 + dev: true + + /@rollup/plugin-babel/5.3.1_b6cdhqm2xsfe2bpl424qdsl4ei: + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-module-imports': 7.21.4 + '@rollup/pluginutils': 3.1.0_rollup@2.79.1 + rollup: 2.79.1 + dev: true + + /@rollup/plugin-node-resolve/11.2.1_rollup@2.79.1: + resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.79.1 + '@types/resolve': 1.17.1 + builtin-modules: 3.3.0 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.3 + rollup: 2.79.1 + dev: true + + /@rollup/plugin-replace/2.4.2_rollup@2.79.1: + resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.79.1 + magic-string: 0.25.9 + rollup: 2.79.1 + dev: true + + /@rollup/pluginutils/3.1.0_rollup@2.79.1: + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.1 + dev: true + + /@sinclair/typebox/0.24.51: + resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} + dev: true + + /@sitespeed.io/tracium/0.3.3: + resolution: {integrity: sha512-dNZafjM93Y+F+sfwTO5gTpsGXlnc/0Q+c2+62ViqP3gkMWvHEMSKkaEHgVJLcLg3i/g19GSIPziiKpgyne07Bw==} + engines: {node: '>=8'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@size-limit/file/7.0.8_size-limit@7.0.8: + resolution: {integrity: sha512-1KeFQuMXIXAH/iELqIX7x+YNYDFvzIvmxcp9PrdwEoSNL0dXdaDIo9WE/yz8xvOmUcKaLfqbWkL75DM0k91WHQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + peerDependencies: + size-limit: 7.0.8 + dependencies: + semver: 7.3.5 + size-limit: 7.0.8 + dev: true + + /@size-limit/preset-app/7.0.8_size-limit@7.0.8: + resolution: {integrity: sha512-s1mgOXODeFCD1RCnx0ynyCbyQGrhFg4gIzVRSzVDUIVxIQWKstX/OiAXtudEYYF4XJWX6+jgGTwNwrgBZmGqMQ==} + peerDependencies: + size-limit: 7.0.8 + dependencies: + '@size-limit/file': 7.0.8_size-limit@7.0.8 + '@size-limit/time': 7.0.8_size-limit@7.0.8 + size-limit: 7.0.8 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@size-limit/time/7.0.8_size-limit@7.0.8: + resolution: {integrity: sha512-CS3pHTxeQXgrrMbhlqYfSR+b4QGp1rjEcYYkByIP+X/Go88R44yp19tyBFmmCQzs2Te2BAxfq3jv8FG+54oBew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + peerDependencies: + size-limit: 7.0.8 + dependencies: + estimo: 2.3.6 + react: 17.0.2 + size-limit: 7.0.8 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@surma/rollup-plugin-off-main-thread/2.2.3: + resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} + dependencies: + ejs: 3.1.9 + json5: 2.2.3 + magic-string: 0.25.9 + string.prototype.matchall: 4.0.8 + dev: true + + /@tauri-apps/api/1.2.0: + resolution: {integrity: sha512-lsI54KI6HGf7VImuf/T9pnoejfgkNoXveP14pVV7XarrQ46rOejIVJLFqHI9sRReJMGdh2YuCoI3cc/yCWCsrw==} + engines: {node: '>= 14.6.0', npm: '>= 6.6.0', yarn: '>= 1.19.1'} + dev: false + + /@tauri-apps/cli-darwin-arm64/1.2.3: + resolution: {integrity: sha512-phJN3fN8FtZZwqXg08bcxfq1+X1JSDglLvRxOxB7VWPq+O5SuB8uLyssjJsu+PIhyZZnIhTGdjhzLSFhSXfLsw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-darwin-x64/1.2.3: + resolution: {integrity: sha512-jFZ/y6z8z6v4yliIbXKBXA7BJgtZVMsITmEXSuD6s5+eCOpDhQxbRkr6CA+FFfr+/r96rWSDSgDenDQuSvPAKw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-linux-arm-gnueabihf/1.2.3: + resolution: {integrity: sha512-C7h5vqAwXzY0kRGSU00Fj8PudiDWFCiQqqUNI1N+fhCILrzWZB9TPBwdx33ZfXKt/U4+emdIoo/N34v3TiAOmQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-linux-arm64-gnu/1.2.3: + resolution: {integrity: sha512-buf1c8sdkuUzVDkGPQpyUdAIIdn5r0UgXU6+H5fGPq/Xzt5K69JzXaeo6fHsZEZghbV0hOK+taKV4J0m30UUMQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-linux-arm64-musl/1.2.3: + resolution: {integrity: sha512-x88wPS9W5xAyk392vc4uNHcKBBvCp0wf4H9JFMF9OBwB7vfd59LbQCFcPSu8f0BI7bPrOsyHqspWHuFL8ojQEA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-linux-x64-gnu/1.2.3: + resolution: {integrity: sha512-ZMz1jxEVe0B4/7NJnlPHmwmSIuwiD6ViXKs8F+OWWz2Y4jn5TGxWKFg7DLx5OwQTRvEIZxxT7lXHi5CuTNAxKg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-linux-x64-musl/1.2.3: + resolution: {integrity: sha512-B/az59EjJhdbZDzawEVox0LQu2ZHCZlk8rJf85AMIktIUoAZPFbwyiUv7/zjzA/sY6Nb58OSJgaPL2/IBy7E0A==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-win32-ia32-msvc/1.2.3: + resolution: {integrity: sha512-ypdO1OdC5ugNJAKO2m3sb1nsd+0TSvMS9Tr5qN/ZSMvtSduaNwrcZ3D7G/iOIanrqu/Nl8t3LYlgPZGBKlw7Ng==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli-win32-x64-msvc/1.2.3: + resolution: {integrity: sha512-CsbHQ+XhnV/2csOBBDVfH16cdK00gNyNYUW68isedmqcn8j+s0e9cQ1xXIqi+Hue3awp8g3ImYN5KPepf3UExw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@tauri-apps/cli/1.2.3: + resolution: {integrity: sha512-erxtXuPhMEGJPBtnhPILD4AjuT81GZsraqpFvXAmEJZ2p8P6t7MVBifCL8LznRknznM3jn90D3M8RNBP3wcXTw==} + engines: {node: '>= 10'} + hasBin: true + optionalDependencies: + '@tauri-apps/cli-darwin-arm64': 1.2.3 + '@tauri-apps/cli-darwin-x64': 1.2.3 + '@tauri-apps/cli-linux-arm-gnueabihf': 1.2.3 + '@tauri-apps/cli-linux-arm64-gnu': 1.2.3 + '@tauri-apps/cli-linux-arm64-musl': 1.2.3 + '@tauri-apps/cli-linux-x64-gnu': 1.2.3 + '@tauri-apps/cli-linux-x64-musl': 1.2.3 + '@tauri-apps/cli-win32-ia32-msvc': 1.2.3 + '@tauri-apps/cli-win32-x64-msvc': 1.2.3 + dev: true + + /@types/chai-subset/1.3.3: + resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} + dependencies: + '@types/chai': 4.3.4 + dev: true + + /@types/chai/4.3.4: + resolution: {integrity: sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==} + dev: true + + /@types/debug/4.1.7: + resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} + dependencies: + '@types/ms': 0.7.31 + dev: false + + /@types/estree/0.0.39: + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + dev: true + + /@types/hast/2.3.4: + resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==} + dependencies: + '@types/unist': 2.0.6 + dev: false + + /@types/is-hotkey/0.1.7: + resolution: {integrity: sha512-yB5C7zcOM7idwYZZ1wKQ3pTfjA9BbvFqRWvKB46GFddxnJtHwi/b9y84ykQtxQPg5qhdpg4Q/kWU3EGoCTmLzQ==} + dev: false + + /@types/istanbul-lib-coverage/2.0.4: + resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + dev: true + + /@types/istanbul-lib-report/3.0.0: + resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} + dependencies: + '@types/istanbul-lib-coverage': 2.0.4 + dev: true + + /@types/istanbul-reports/3.0.1: + resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} + dependencies: + '@types/istanbul-lib-report': 3.0.0 + dev: true + + /@types/jest/28.1.8: + resolution: {integrity: sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw==} + dependencies: + expect: 28.1.3 + pretty-format: 28.1.3 + dev: true + + /@types/js-md5/0.7.0: + resolution: {integrity: sha512-4mN02EhCni6MlvCUl9bpcbMfu7R3G+ac+J37b7gKCu3tWhZc5/Ya41T+2QNR2aFt6vnMe+uTa5rFQ+nT2kl6cA==} + dev: true + + /@types/json-schema/7.0.11: + resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + dev: true + + /@types/lodash/4.14.194: + resolution: {integrity: sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g==} + dev: false + + /@types/mdast/3.0.11: + resolution: {integrity: sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==} + dependencies: + '@types/unist': 2.0.6 + dev: false + + /@types/ms/0.7.31: + resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} + dev: false + + /@types/node/17.0.45: + resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} + dev: true + + /@types/parse-json/4.0.0: + resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} + dev: false + + /@types/prop-types/15.7.5: + resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + + /@types/react-dom/18.0.11: + resolution: {integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==} + dependencies: + '@types/react': 18.0.35 + dev: true + + /@types/react-is/17.0.3: + resolution: {integrity: sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==} + dependencies: + '@types/react': 18.0.35 + dev: false + + /@types/react-transition-group/4.4.5: + resolution: {integrity: sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==} + dependencies: + '@types/react': 18.0.35 + dev: false + + /@types/react/18.0.35: + resolution: {integrity: sha512-6Laome31HpetaIUGFWl1VQ3mdSImwxtFZ39rh059a1MNnKGqBpC88J6NJ8n/Is3Qx7CefDGLgf/KhN/sYCf7ag==} + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.3 + csstype: 3.1.2 + + /@types/resolve/1.17.1: + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + dependencies: + '@types/node': 17.0.45 + dev: true + + /@types/scheduler/0.16.3: + resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} + + /@types/semver/7.3.13: + resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} + dev: true + + /@types/stack-utils/2.0.1: + resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} + dev: true + + /@types/trusted-types/2.0.3: + resolution: {integrity: sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==} + dev: true + + /@types/unist/2.0.6: + resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} + dev: false + + /@types/yargs-parser/21.0.0: + resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} + dev: true + + /@types/yargs/17.0.24: + resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} + dependencies: + '@types/yargs-parser': 21.0.0 + dev: true + + /@types/yauzl/2.10.0: + resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} + requiresBuild: true + dependencies: + '@types/node': 17.0.45 + dev: true + optional: true + + /@typescript-eslint/eslint-plugin/5.58.0_hzv37tkb63et4viajosjuuyxgi: + resolution: {integrity: sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.5.0 + '@typescript-eslint/parser': 5.58.0_ze6bmax3gcsfve3yrzu6npguhe + '@typescript-eslint/scope-manager': 5.58.0 + '@typescript-eslint/type-utils': 5.58.0_ze6bmax3gcsfve3yrzu6npguhe + '@typescript-eslint/utils': 5.58.0_ze6bmax3gcsfve3yrzu6npguhe + debug: 4.3.4 + eslint: 8.38.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.4 + natural-compare-lite: 1.4.0 + semver: 7.4.0 + tsutils: 3.21.0_typescript@4.9.5 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser/5.58.0_ze6bmax3gcsfve3yrzu6npguhe: + resolution: {integrity: sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.58.0 + '@typescript-eslint/types': 5.58.0 + '@typescript-eslint/typescript-estree': 5.58.0_typescript@4.9.5 + debug: 4.3.4 + eslint: 8.38.0 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager/5.58.0: + resolution: {integrity: sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.58.0 + '@typescript-eslint/visitor-keys': 5.58.0 + dev: true + + /@typescript-eslint/type-utils/5.58.0_ze6bmax3gcsfve3yrzu6npguhe: + resolution: {integrity: sha512-FF5vP/SKAFJ+LmR9PENql7fQVVgGDOS+dq3j+cKl9iW/9VuZC/8CFmzIP0DLKXfWKpRHawJiG70rVH+xZZbp8w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.58.0_typescript@4.9.5 + '@typescript-eslint/utils': 5.58.0_ze6bmax3gcsfve3yrzu6npguhe + debug: 4.3.4 + eslint: 8.38.0 + tsutils: 3.21.0_typescript@4.9.5 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types/5.58.0: + resolution: {integrity: sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/typescript-estree/5.58.0_typescript@4.9.5: + resolution: {integrity: sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.58.0 + '@typescript-eslint/visitor-keys': 5.58.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.4.0 + tsutils: 3.21.0_typescript@4.9.5 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils/5.58.0_ze6bmax3gcsfve3yrzu6npguhe: + resolution: {integrity: sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0_eslint@8.38.0 + '@types/json-schema': 7.0.11 + '@types/semver': 7.3.13 + '@typescript-eslint/scope-manager': 5.58.0 + '@typescript-eslint/types': 5.58.0 + '@typescript-eslint/typescript-estree': 5.58.0_typescript@4.9.5 + eslint: 8.38.0 + eslint-scope: 5.1.1 + semver: 7.4.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys/5.58.0: + resolution: {integrity: sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.58.0 + eslint-visitor-keys: 3.4.0 + dev: true + + /@vitejs/plugin-react/2.2.0_vite@3.2.5: + resolution: {integrity: sha512-FFpefhvExd1toVRlokZgxgy2JtnBOdp4ZDsq7ldCWaqGSGn9UhWMAVm/1lxPL14JfNS5yGz+s9yFrQY6shoStA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^3.0.0 + dependencies: + '@babel/core': 7.21.4 + '@babel/plugin-transform-react-jsx': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-transform-react-jsx-development': 7.18.6_@babel+core@7.21.4 + '@babel/plugin-transform-react-jsx-self': 7.21.0_@babel+core@7.21.4 + '@babel/plugin-transform-react-jsx-source': 7.19.6_@babel+core@7.21.4 + magic-string: 0.26.7 + react-refresh: 0.14.0 + vite: 3.2.5_@types+node@17.0.45 + transitivePeerDependencies: + - supports-color + dev: true + + /acorn-jsx/5.3.2_acorn@8.8.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.8.2 + dev: true + + /acorn/8.8.2: + resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /agent-base/6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /ajv/6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ajv/8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: true + + /ansi-regex/5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-styles/3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + + /ansi-styles/4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /ansi-styles/5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true + + /any-promise/1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true + + /anymatch/3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /argparse/2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /aria-query/5.1.3: + resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + dependencies: + deep-equal: 2.2.0 + dev: true + + /array-buffer-byte-length/1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.2 + is-array-buffer: 3.0.2 + dev: true + + /array-includes/3.1.6: + resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + get-intrinsic: 1.2.0 + is-string: 1.0.7 + dev: true + + /array-union/2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /array.prototype.flatmap/1.3.1: + resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + es-shim-unscopables: 1.0.0 + dev: true + + /array.prototype.tosorted/1.1.1: + resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + es-shim-unscopables: 1.0.0 + get-intrinsic: 1.2.0 + dev: true + + /assertion-error/1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true + + /ast-types-flow/0.0.7: + resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} + dev: true + + /async/3.2.4: + resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + dev: true + + /at-least-node/1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + dev: true + + /available-typed-arrays/1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: true + + /axe-core/4.6.3: + resolution: {integrity: sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==} + engines: {node: '>=4'} + dev: true + + /axobject-query/3.1.1: + resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==} + dependencies: + deep-equal: 2.2.0 + dev: true + + /babel-plugin-macros/3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + dependencies: + '@babel/runtime': 7.21.0 + cosmiconfig: 7.1.0 + resolve: 1.22.3 + dev: false + + /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.21.4: + resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.21.4 + '@babel/core': 7.21.4 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.4 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.21.4: + resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.4 + core-js-compat: 3.30.1 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.21.4: + resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.4 + transitivePeerDependencies: + - supports-color + dev: true + + /bail/2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + dev: false + + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + /base64-js/1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + + /big-integer/1.6.51: + resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} + engines: {node: '>=0.6'} + dev: false + + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /bl/4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + + /brace-expansion/1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + /brace-expansion/2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + + /braces/3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /broadcast-channel/3.7.0: + resolution: {integrity: sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==} + dependencies: + '@babel/runtime': 7.21.0 + detect-node: 2.1.0 + js-sha3: 0.8.0 + microseconds: 0.2.0 + nano-time: 1.0.0 + oblivious-set: 1.0.0 + rimraf: 3.0.2 + unload: 2.2.0 + dev: false + + /browserslist/4.21.5: + resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001478 + electron-to-chromium: 1.4.365 + node-releases: 2.0.10 + update-browserslist-db: 1.0.11_browserslist@4.21.5 + dev: true + + /buffer-crc32/0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + dev: true + + /buffer-from/1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true + + /buffer/5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /builtin-modules/3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: true + + /bytes-iec/3.1.1: + resolution: {integrity: sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==} + engines: {node: '>= 0.8'} + dev: true + + /c8/7.13.0: + resolution: {integrity: sha512-/NL4hQTv1gBL6J6ei80zu3IiTrmePDKXKXOTLpHvcIWZTVYQlDhVWjjWvkhICylE8EwwnMVzDZugCvdx0/DIIA==} + engines: {node: '>=10.12.0'} + hasBin: true + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@istanbuljs/schema': 0.1.3 + find-up: 5.0.0 + foreground-child: 2.0.0 + istanbul-lib-coverage: 3.2.0 + istanbul-lib-report: 3.0.0 + istanbul-reports: 3.1.5 + rimraf: 3.0.2 + test-exclude: 6.0.0 + v8-to-istanbul: 9.1.0 + yargs: 16.2.0 + yargs-parser: 20.2.9 + dev: true + + /call-bind/1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.2.0 + dev: true + + /callsites/3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + /caniuse-lite/1.0.30001478: + resolution: {integrity: sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw==} + dev: true + + /chai/4.3.7: + resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.2 + deep-eql: 4.1.3 + get-func-name: 2.0.0 + loupe: 2.3.6 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: true + + /chalk/2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + /chalk/4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /character-entities/2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + dev: false + + /check-error/1.0.2: + resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} + dev: true + + /chokidar/3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /chownr/1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + dev: true + + /ci-info/3.8.0: + resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} + engines: {node: '>=8'} + dev: true + + /ci-job-number/1.2.2: + resolution: {integrity: sha512-CLOGsVDrVamzv8sXJGaILUVI6dsuAkouJP/n6t+OxLPeeA4DDby7zn9SB6EUpa1H7oIKoE+rMmkW80zYsFfUjA==} + dev: true + + /cliui/7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /cliui/8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /clsx/1.2.1: + resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} + engines: {node: '>=6'} + dev: false + + /color-convert/1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + + /color-convert/2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name/1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /comma-separated-tokens/2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + dev: false + + /commander/2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true + + /commander/4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: true + + /commander/9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + dev: true + + /common-tags/1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + dev: true + + /compute-scroll-into-view/1.0.20: + resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==} + dev: false + + /concat-map/0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + /convert-source-map/1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + /core-js-compat/3.30.1: + resolution: {integrity: sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw==} + dependencies: + browserslist: 4.21.5 + dev: true + + /cosmiconfig/7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.0 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: false + + /cross-fetch/3.1.5: + resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} + dependencies: + node-fetch: 2.6.7 + transitivePeerDependencies: + - encoding + dev: true + + /cross-spawn/7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /crypto-random-string/2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + dev: true + + /csstype/3.1.2: + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + + /damerau-levenshtein/1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + dev: true + + /debug/4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + + /decode-named-character-reference/1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + dependencies: + character-entities: 2.0.2 + dev: false + + /deep-eql/4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 + dev: true + + /deep-equal/2.2.0: + resolution: {integrity: sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==} + dependencies: + call-bind: 1.0.2 + es-get-iterator: 1.1.3 + get-intrinsic: 1.2.0 + is-arguments: 1.1.1 + is-array-buffer: 3.0.2 + is-date-object: 1.0.5 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + isarray: 2.0.5 + object-is: 1.1.5 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.4.3 + side-channel: 1.0.4 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.9 + dev: true + + /deep-is/0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /deepmerge/4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: true + + /define-lazy-prop/2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + dev: true + + /define-properties/1.2.0: + resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} + engines: {node: '>= 0.4'} + dependencies: + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 + dev: true + + /dequal/2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: false + + /detect-node/2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + dev: false + + /devtools-protocol/0.0.981744: + resolution: {integrity: sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==} + dev: true + + /diff-sequences/28.1.1: + resolution: {integrity: sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dev: true + + /diff/5.1.0: + resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} + engines: {node: '>=0.3.1'} + dev: false + + /dir-glob/3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /direction/1.0.4: + resolution: {integrity: sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ==} + hasBin: true + dev: false + + /doctrine/2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /doctrine/3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /dom-helpers/5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + dependencies: + '@babel/runtime': 7.21.0 + csstype: 3.1.2 + dev: false + + /ejs/3.1.9: + resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + jake: 10.8.5 + dev: true + + /electron-to-chromium/1.4.365: + resolution: {integrity: sha512-FRHZO+1tUNO4TOPXmlxetkoaIY8uwHzd1kKopK/Gx2SKn1L47wJXWD44wxP5CGRyyP98z/c8e1eBzJrgPeiBOg==} + dev: true + + /emoji-regex/8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /emoji-regex/9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true + + /end-of-stream/1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: true + + /error-ex/1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: false + + /es-abstract/1.21.2: + resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + es-set-tostringtag: 2.0.1 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.5 + get-intrinsic: 1.2.0 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has: 1.0.3 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + is-array-buffer: 3.0.2 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-typed-array: 1.1.10 + is-weakref: 1.0.2 + object-inspect: 1.12.3 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.4.3 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.7 + string.prototype.trimend: 1.0.6 + string.prototype.trimstart: 1.0.6 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.9 + dev: true + + /es-get-iterator/1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + has-symbols: 1.0.3 + is-arguments: 1.1.1 + is-map: 2.0.2 + is-set: 2.0.2 + is-string: 1.0.7 + isarray: 2.0.5 + stop-iteration-iterator: 1.0.0 + dev: true + + /es-set-tostringtag/2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.0 + has: 1.0.3 + has-tostringtag: 1.0.0 + dev: true + + /es-shim-unscopables/1.0.0: + resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + dependencies: + has: 1.0.3 + dev: true + + /es-to-primitive/1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + + /esbuild-android-64/0.15.18: + resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.18: + resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.18: + resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.18: + resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.18: + resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.18: + resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.18: + resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.18: + resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.18: + resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.18: + resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.18: + resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.18: + resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.18: + resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.18: + resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.18: + resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.18: + resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.18: + resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.18: + resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.18: + resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.18: + resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild/0.15.18: + resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.15.18 + '@esbuild/linux-loong64': 0.15.18 + esbuild-android-64: 0.15.18 + esbuild-android-arm64: 0.15.18 + esbuild-darwin-64: 0.15.18 + esbuild-darwin-arm64: 0.15.18 + esbuild-freebsd-64: 0.15.18 + esbuild-freebsd-arm64: 0.15.18 + esbuild-linux-32: 0.15.18 + esbuild-linux-64: 0.15.18 + esbuild-linux-arm: 0.15.18 + esbuild-linux-arm64: 0.15.18 + esbuild-linux-mips64le: 0.15.18 + esbuild-linux-ppc64le: 0.15.18 + esbuild-linux-riscv64: 0.15.18 + esbuild-linux-s390x: 0.15.18 + esbuild-netbsd-64: 0.15.18 + esbuild-openbsd-64: 0.15.18 + esbuild-sunos-64: 0.15.18 + esbuild-windows-32: 0.15.18 + esbuild-windows-64: 0.15.18 + esbuild-windows-arm64: 0.15.18 + dev: true + + /escalade/3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp/1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + /escape-string-regexp/2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + dev: true + + /escape-string-regexp/4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + /eslint-plugin-jsx-a11y/6.7.1_eslint@8.38.0: + resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + '@babel/runtime': 7.21.0 + aria-query: 5.1.3 + array-includes: 3.1.6 + array.prototype.flatmap: 1.3.1 + ast-types-flow: 0.0.7 + axe-core: 4.6.3 + axobject-query: 3.1.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 8.38.0 + has: 1.0.3 + jsx-ast-utils: 3.3.3 + language-tags: 1.0.5 + minimatch: 3.1.2 + object.entries: 1.1.6 + object.fromentries: 2.0.6 + semver: 6.3.0 + dev: true + + /eslint-plugin-prettier/4.2.1_7bukkzi2qfqwzn63s5moor2wwy: + resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + eslint: '>=7.28.0' + eslint-config-prettier: '*' + prettier: '>=2.0.0' + peerDependenciesMeta: + eslint-config-prettier: + optional: true + dependencies: + eslint: 8.38.0 + prettier: 2.8.7 + prettier-linter-helpers: 1.0.0 + dev: true + + /eslint-plugin-react-hooks/4.6.0_eslint@8.38.0: + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + dependencies: + eslint: 8.38.0 + dev: true + + /eslint-plugin-react/7.32.2_eslint@8.38.0: + resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.6 + array.prototype.flatmap: 1.3.1 + array.prototype.tosorted: 1.1.1 + doctrine: 2.1.0 + eslint: 8.38.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.3 + minimatch: 3.1.2 + object.entries: 1.1.6 + object.fromentries: 2.0.6 + object.hasown: 1.1.2 + object.values: 1.1.6 + prop-types: 15.8.1 + resolve: 2.0.0-next.4 + semver: 6.3.0 + string.prototype.matchall: 4.0.8 + dev: true + + /eslint-scope/5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + + /eslint-scope/7.2.0: + resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-visitor-keys/3.4.0: + resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint/8.38.0: + resolution: {integrity: sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0_eslint@8.38.0 + '@eslint-community/regexpp': 4.5.0 + '@eslint/eslintrc': 2.0.2 + '@eslint/js': 8.38.0 + '@humanwhocodes/config-array': 0.11.8 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.0 + eslint-visitor-keys: 3.4.0 + espree: 9.5.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.20.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.4 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-sdsl: 4.4.0 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.1 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree/9.5.1: + resolution: {integrity: sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.8.2 + acorn-jsx: 5.3.2_acorn@8.8.2 + eslint-visitor-keys: 3.4.0 + dev: true + + /esquery/1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse/4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estimo/2.3.6: + resolution: {integrity: sha512-aPd3VTQAL1TyDyhFfn6fqBTJ9WvbRZVN4Z29Buk6+P6xsI0DuF5Mh3dGv6kYCUxWnZkB4Jt3aYglUxOtuwtxoA==} + engines: {node: '>=12'} + hasBin: true + dependencies: + '@sitespeed.io/tracium': 0.3.3 + commander: 9.5.0 + find-chrome-bin: 0.1.0 + nanoid: 3.3.6 + puppeteer-core: 13.7.0 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /estraverse/4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true + + /estraverse/5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /estree-walker/1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + dev: true + + /esutils/2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /expect/28.1.3: + resolution: {integrity: sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/expect-utils': 28.1.3 + jest-get-type: 28.0.2 + jest-matcher-utils: 28.1.3 + jest-message-util: 28.1.3 + jest-util: 28.1.3 + dev: true + + /extend/3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + dev: false + + /extract-zip/2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + dependencies: + debug: 4.3.4 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.0 + transitivePeerDependencies: + - supports-color + dev: true + + /fast-deep-equal/3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-diff/1.2.0: + resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} + dev: true + + /fast-glob/3.2.12: + resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fast-json-stable-stringify/2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein/2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fastq/1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + dev: true + + /fd-slicer/1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + dependencies: + pend: 1.2.0 + dev: true + + /file-entry-cache/6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.0.4 + dev: true + + /filelist/1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + dependencies: + minimatch: 5.1.6 + dev: true + + /fill-range/7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /find-chrome-bin/0.1.0: + resolution: {integrity: sha512-XoFZwaEn1R3pE6zNG8kH64l2e093hgB9+78eEKPmJK0o1EXEou+25cEWdtu2qq4DBQPDSe90VJAWVI2Sz9pX6Q==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /find-root/1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + dev: false + + /find-up/4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + + /find-up/5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat-cache/3.0.4: + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.7 + rimraf: 3.0.2 + dev: true + + /flatted/3.2.7: + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + dev: true + + /for-each/0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + + /foreground-child/2.0.0: + resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} + engines: {node: '>=8.0.0'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 3.0.7 + dev: true + + /fs-constants/1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + dev: true + + /fs-extra/9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: true + + /fs.realpath/1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind/1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + + /function.prototype.name/1.1.5: + resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + functions-have-names: 1.2.3 + dev: true + + /functions-have-names/1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /gensync/1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + + /get-caller-file/2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + /get-func-name/2.0.0: + resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} + dev: true + + /get-intrinsic/1.2.0: + resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.3 + dev: true + + /get-own-enumerable-property-symbols/3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + dev: true + + /get-stream/5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + dependencies: + pump: 3.0.0 + dev: true + + /get-symbol-description/1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + dev: true + + /glob-parent/5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent/6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-regex/0.3.2: + resolution: {integrity: sha512-m5blUd3/OqDTWwzBBtWBPrGlAzatRywHameHeekAZyZrskYouOGdNB8T/q6JucucvJXtOuyHIn0/Yia7iDasDw==} + dev: true + + /glob/7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob/7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + /globals/11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /globals/13.20.0: + resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globalthis/1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.0 + dev: true + + /globby/11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.12 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /globrex/0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + dev: true + + /gopd/1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.0 + dev: true + + /graceful-fs/4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true + + /grapheme-splitter/1.0.4: + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + dev: true + + /has-bigints/1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + + /has-flag/3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + /has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has-property-descriptors/1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + dependencies: + get-intrinsic: 1.2.0 + dev: true + + /has-proto/1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: true + + /has-symbols/1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true + + /has-tostringtag/1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /has/1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + + /hast-util-whitespace/2.0.1: + resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} + dev: false + + /hoist-non-react-statics/3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + dependencies: + react-is: 16.13.1 + dev: false + + /html-escaper/2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: true + + /https-proxy-agent/5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /idb/7.1.1: + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + dev: true + + /ieee754/1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true + + /ignore/5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + dev: true + + /immer/9.0.21: + resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} + dev: false + + /import-fresh/3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + /imurmurhash/0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /inflight/1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + /inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + /inline-style-parser/0.1.1: + resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + dev: false + + /internal-slot/1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.0 + has: 1.0.3 + side-channel: 1.0.4 + dev: true + + /is-arguments/1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-array-buffer/3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + is-typed-array: 1.1.10 + dev: true + + /is-arrayish/0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: false + + /is-bigint/1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-boolean-object/1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-buffer/2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} + dev: false + + /is-callable/1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + + /is-core-module/2.12.0: + resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} + dependencies: + has: 1.0.3 + + /is-date-object/1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-docker/2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true + + /is-extglob/2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-fullwidth-code-point/3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-glob/4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-hotkey/0.1.8: + resolution: {integrity: sha512-qs3NZ1INIS+H+yeo7cD9pDfwYV/jqRh1JG9S9zYrNudkoUQg7OL7ziXqRKu+InFjUIDoP2o6HIkLYMh1pcWgyQ==} + dev: false + + /is-map/2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + dev: true + + /is-module/1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + dev: true + + /is-negative-zero/2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object/1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-number/7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-obj/1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + dev: true + + /is-path-inside/3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-plain-obj/4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + dev: false + + /is-plain-object/5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + dev: false + + /is-regex/1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-regexp/1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + dev: true + + /is-set/2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + dev: true + + /is-shared-array-buffer/1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.2 + dev: true + + /is-stream/2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + + /is-string/1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-symbol/1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /is-typed-array/1.1.10: + resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + dev: true + + /is-weakmap/2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + dev: true + + /is-weakref/1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.2 + dev: true + + /is-weakset/2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + dev: true + + /is-wsl/2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: true + + /isarray/2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + + /isexe/2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /istanbul-lib-coverage/3.2.0: + resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + engines: {node: '>=8'} + dev: true + + /istanbul-lib-report/3.0.0: + resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} + engines: {node: '>=8'} + dependencies: + istanbul-lib-coverage: 3.2.0 + make-dir: 3.1.0 + supports-color: 7.2.0 + dev: true + + /istanbul-reports/3.1.5: + resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} + engines: {node: '>=8'} + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.0 + dev: true + + /jake/10.8.5: + resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} + engines: {node: '>=10'} + hasBin: true + dependencies: + async: 3.2.4 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + dev: true + + /jest-diff/28.1.3: + resolution: {integrity: sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 28.1.1 + jest-get-type: 28.0.2 + pretty-format: 28.1.3 + dev: true + + /jest-get-type/28.0.2: + resolution: {integrity: sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dev: true + + /jest-matcher-utils/28.1.3: + resolution: {integrity: sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + chalk: 4.1.2 + jest-diff: 28.1.3 + jest-get-type: 28.0.2 + pretty-format: 28.1.3 + dev: true + + /jest-message-util/28.1.3: + resolution: {integrity: sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@babel/code-frame': 7.21.4 + '@jest/types': 28.1.3 + '@types/stack-utils': 2.0.1 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + pretty-format: 28.1.3 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: true + + /jest-util/28.1.3: + resolution: {integrity: sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/types': 28.1.3 + '@types/node': 17.0.45 + chalk: 4.1.2 + ci-info: 3.8.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + dev: true + + /jest-worker/26.6.2: + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 17.0.45 + merge-stream: 2.0.0 + supports-color: 7.2.0 + dev: true + + /js-md5/0.7.3: + resolution: {integrity: sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==} + dev: false + + /js-sdsl/4.4.0: + resolution: {integrity: sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==} + dev: true + + /js-sha3/0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + dev: false + + /js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + /js-yaml/4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /jsesc/0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: true + + /jsesc/2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /json-parse-even-better-errors/2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: false + + /json-schema-traverse/0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-schema-traverse/1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: true + + /json-schema/0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + dev: true + + /json-stable-stringify-without-jsonify/1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json5/2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /jsonfile/6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.0 + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + + /jsonpointer/5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + dev: true + + /jsx-ast-utils/3.3.3: + resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} + engines: {node: '>=4.0'} + dependencies: + array-includes: 3.1.6 + object.assign: 4.1.4 + dev: true + + /kleur/4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + dev: false + + /language-subtag-registry/0.3.22: + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + dev: true + + /language-tags/1.0.5: + resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==} + dependencies: + language-subtag-registry: 0.3.22 + dev: true + + /leven/3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + dev: true + + /levn/0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /lilconfig/2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: true + + /lines-and-columns/1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + /local-pkg/0.4.3: + resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} + engines: {node: '>=14'} + dev: true + + /locate-path/5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true + + /locate-path/6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash.debounce/4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + dev: true + + /lodash.merge/4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /lodash.sortby/4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + dev: true + + /lodash/4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + /loose-envify/1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + + /loupe/2.3.6: + resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} + dependencies: + get-func-name: 2.0.0 + dev: true + + /lru-cache/5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: true + + /lru-cache/6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: true + + /magic-string/0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + + /magic-string/0.26.7: + resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==} + engines: {node: '>=12'} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + + /make-dir/3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.0 + dev: true + + /match-sorter/6.3.1: + resolution: {integrity: sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==} + dependencies: + '@babel/runtime': 7.21.0 + remove-accents: 0.4.2 + dev: false + + /mdast-util-definitions/5.1.2: + resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} + dependencies: + '@types/mdast': 3.0.11 + '@types/unist': 2.0.6 + unist-util-visit: 4.1.2 + dev: false + + /mdast-util-from-markdown/1.3.0: + resolution: {integrity: sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==} + dependencies: + '@types/mdast': 3.0.11 + '@types/unist': 2.0.6 + decode-named-character-reference: 1.0.2 + mdast-util-to-string: 3.2.0 + micromark: 3.1.0 + micromark-util-decode-numeric-character-reference: 1.0.0 + micromark-util-decode-string: 1.0.2 + micromark-util-normalize-identifier: 1.0.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + unist-util-stringify-position: 3.0.3 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-to-hast/12.3.0: + resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} + dependencies: + '@types/hast': 2.3.4 + '@types/mdast': 3.0.11 + mdast-util-definitions: 5.1.2 + micromark-util-sanitize-uri: 1.1.0 + trim-lines: 3.0.1 + unist-util-generated: 2.0.1 + unist-util-position: 4.0.4 + unist-util-visit: 4.1.2 + dev: false + + /mdast-util-to-string/3.2.0: + resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + dependencies: + '@types/mdast': 3.0.11 + dev: false + + /merge-stream/2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2/1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromark-core-commonmark/1.0.6: + resolution: {integrity: sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-factory-destination: 1.0.0 + micromark-factory-label: 1.0.2 + micromark-factory-space: 1.0.0 + micromark-factory-title: 1.0.2 + micromark-factory-whitespace: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-chunked: 1.0.0 + micromark-util-classify-character: 1.0.0 + micromark-util-html-tag-name: 1.1.0 + micromark-util-normalize-identifier: 1.0.0 + micromark-util-resolve-all: 1.0.0 + micromark-util-subtokenize: 1.0.2 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + dev: false + + /micromark-factory-destination/1.0.0: + resolution: {integrity: sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==} + dependencies: + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + dev: false + + /micromark-factory-label/1.0.2: + resolution: {integrity: sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==} + dependencies: + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + dev: false + + /micromark-factory-space/1.0.0: + resolution: {integrity: sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==} + dependencies: + micromark-util-character: 1.1.0 + micromark-util-types: 1.0.2 + dev: false + + /micromark-factory-title/1.0.2: + resolution: {integrity: sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==} + dependencies: + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + dev: false + + /micromark-factory-whitespace/1.0.0: + resolution: {integrity: sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==} + dependencies: + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + dev: false + + /micromark-util-character/1.1.0: + resolution: {integrity: sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==} + dependencies: + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + dev: false + + /micromark-util-chunked/1.0.0: + resolution: {integrity: sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==} + dependencies: + micromark-util-symbol: 1.0.1 + dev: false + + /micromark-util-classify-character/1.0.0: + resolution: {integrity: sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==} + dependencies: + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + dev: false + + /micromark-util-combine-extensions/1.0.0: + resolution: {integrity: sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==} + dependencies: + micromark-util-chunked: 1.0.0 + micromark-util-types: 1.0.2 + dev: false + + /micromark-util-decode-numeric-character-reference/1.0.0: + resolution: {integrity: sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==} + dependencies: + micromark-util-symbol: 1.0.1 + dev: false + + /micromark-util-decode-string/1.0.2: + resolution: {integrity: sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-util-character: 1.1.0 + micromark-util-decode-numeric-character-reference: 1.0.0 + micromark-util-symbol: 1.0.1 + dev: false + + /micromark-util-encode/1.0.1: + resolution: {integrity: sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==} + dev: false + + /micromark-util-html-tag-name/1.1.0: + resolution: {integrity: sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==} + dev: false + + /micromark-util-normalize-identifier/1.0.0: + resolution: {integrity: sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==} + dependencies: + micromark-util-symbol: 1.0.1 + dev: false + + /micromark-util-resolve-all/1.0.0: + resolution: {integrity: sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==} + dependencies: + micromark-util-types: 1.0.2 + dev: false + + /micromark-util-sanitize-uri/1.1.0: + resolution: {integrity: sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==} + dependencies: + micromark-util-character: 1.1.0 + micromark-util-encode: 1.0.1 + micromark-util-symbol: 1.0.1 + dev: false + + /micromark-util-subtokenize/1.0.2: + resolution: {integrity: sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==} + dependencies: + micromark-util-chunked: 1.0.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + dev: false + + /micromark-util-symbol/1.0.1: + resolution: {integrity: sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==} + dev: false + + /micromark-util-types/1.0.2: + resolution: {integrity: sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==} + dev: false + + /micromark/3.1.0: + resolution: {integrity: sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==} + dependencies: + '@types/debug': 4.1.7 + debug: 4.3.4 + decode-named-character-reference: 1.0.2 + micromark-core-commonmark: 1.0.6 + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-chunked: 1.0.0 + micromark-util-combine-extensions: 1.0.0 + micromark-util-decode-numeric-character-reference: 1.0.0 + micromark-util-encode: 1.0.1 + micromark-util-normalize-identifier: 1.0.0 + micromark-util-resolve-all: 1.0.0 + micromark-util-sanitize-uri: 1.1.0 + micromark-util-subtokenize: 1.0.2 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: false + + /micromatch/4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /microseconds/0.2.0: + resolution: {integrity: sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==} + dev: false + + /minimatch/3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + + /minimatch/5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimist/1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true + + /mkdirp-classic/0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + dev: true + + /mkdirp/1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + dev: true + + /mri/1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + dev: false + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + /mz/2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: true + + /nano-time/1.0.0: + resolution: {integrity: sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==} + dependencies: + big-integer: 1.6.51 + dev: false + + /nanoid/3.3.6: + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /nanospinner/1.1.0: + resolution: {integrity: sha512-yFvNYMig4AthKYfHFl1sLj7B2nkHL4lzdig4osvl9/LdGbXwrdFRoqBS98gsEsOakr0yH+r5NZ/1Y9gdVB8trA==} + dependencies: + picocolors: 1.0.0 + dev: true + + /natural-compare-lite/1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + + /natural-compare/1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /node-fetch/2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: true + + /node-releases/2.0.10: + resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} + dev: true + + /normalize-path/3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /object-assign/4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + /object-inspect/1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + dev: true + + /object-is/1.1.5: + resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + dev: true + + /object-keys/1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object.assign/4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.entries/1.1.6: + resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + dev: true + + /object.fromentries/2.0.6: + resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + dev: true + + /object.hasown/1.1.2: + resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} + dependencies: + define-properties: 1.2.0 + es-abstract: 1.21.2 + dev: true + + /object.values/1.1.6: + resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + dev: true + + /oblivious-set/1.0.0: + resolution: {integrity: sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==} + dev: false + + /once/1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + + /open/8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: true + + /optionator/0.9.1: + resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.3 + dev: true + + /p-limit/2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: true + + /p-limit/3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate/4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-locate/5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /p-try/2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + + /parent-module/1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + + /parse-json/5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.21.4 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: false + + /path-exists/4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute/1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + /path-key/3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + /path-type/4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + /pathval/1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true + + /pend/1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + dev: true + + /picocolors/1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /picomatch/2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /pirates/4.0.5: + resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} + engines: {node: '>= 6'} + dev: true + + /pkg-dir/4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: true + + /postcss/8.4.22: + resolution: {integrity: sha512-XseknLAfRHzVWjCEtdviapiBtfLdgyzExD50Rg2ePaucEesyh8Wv4VPdW0nbyDa1ydbrAxV19jvMT4+LFmcNUA==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + + /prelude-ls/1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prettier-linter-helpers/1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + dependencies: + fast-diff: 1.2.0 + dev: true + + /prettier/2.8.7: + resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /pretty-bytes/5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + dev: true + + /pretty-bytes/6.1.0: + resolution: {integrity: sha512-Rk753HI8f4uivXi4ZCIYdhmG1V+WKzvRMg/X+M42a6t7D07RcmopXJMDNk6N++7Bl75URRGsb40ruvg7Hcp2wQ==} + engines: {node: ^14.13.1 || >=16.0.0} + dev: true + + /pretty-format/28.1.3: + resolution: {integrity: sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/schemas': 28.1.3 + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: true + + /progress/2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + dev: true + + /prop-types/15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + /property-information/6.2.0: + resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==} + dev: false + + /proxy-from-env/1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: true + + /pump/3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + + /punycode/2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} + dev: true + + /puppeteer-core/13.7.0: + resolution: {integrity: sha512-rXja4vcnAzFAP1OVLq/5dWNfwBGuzcOARJ6qGV7oAZhnLmVRU8G5MsdeQEAOy332ZhkIOnn9jp15R89LKHyp2Q==} + engines: {node: '>=10.18.1'} + dependencies: + cross-fetch: 3.1.5 + debug: 4.3.4 + devtools-protocol: 0.0.981744 + extract-zip: 2.0.1 + https-proxy-agent: 5.0.1 + pkg-dir: 4.2.0 + progress: 2.0.3 + proxy-from-env: 1.1.0 + rimraf: 3.0.2 + tar-fs: 2.1.1 + unbzip2-stream: 1.4.3 + ws: 8.5.0 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /queue-microtask/1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /randombytes/2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /react-dom/18.2.0_react@18.2.0: + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + dev: false + + /react-is/16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + /react-is/18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + + /react-markdown/8.0.7_yuz6bkerhkjfjuf6zeb7j6ybc4: + resolution: {integrity: sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==} + peerDependencies: + '@types/react': '>=16' + react: '>=16' + dependencies: + '@types/hast': 2.3.4 + '@types/prop-types': 15.7.5 + '@types/react': 18.0.35 + '@types/unist': 2.0.6 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 2.0.1 + prop-types: 15.8.1 + property-information: 6.2.0 + react: 18.2.0 + react-is: 18.2.0 + remark-parse: 10.0.1 + remark-rehype: 10.1.0 + space-separated-tokens: 2.0.2 + style-to-object: 0.4.1 + unified: 10.1.2 + unist-util-visit: 4.1.2 + vfile: 5.3.7 + transitivePeerDependencies: + - supports-color + dev: false + + /react-query/3.39.3_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-nLfLz7GiohKTJDuT4us4X3h/8unOh+00MLb2yJoGTPjxKs2bc1iDhkNx2bd5MKklXnOD3NrVZ+J2UXujA5In4g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: '*' + react-native: '*' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + dependencies: + '@babel/runtime': 7.21.0 + broadcast-channel: 3.7.0 + match-sorter: 6.3.1 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: false + + /react-refresh/0.14.0: + resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} + engines: {node: '>=0.10.0'} + dev: true + + /react-router-dom/6.10.0_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-E5dfxRPuXKJqzwSe/qGcqdwa18QiWC6f3H3cWXM24qj4N0/beCIf/CWTipop2xm7mR0RCS99NnaqPNjHtrAzCg==} + engines: {node: '>=14'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + dependencies: + '@remix-run/router': 1.5.0 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + react-router: 6.10.0_react@18.2.0 + dev: false + + /react-router/6.10.0_react@18.2.0: + resolution: {integrity: sha512-Nrg0BWpQqrC3ZFFkyewrflCud9dio9ME3ojHCF/WLsprJVzkq3q3UeEhMCAW1dobjeGbWgjNn/PVF6m46ANxXQ==} + engines: {node: '>=14'} + peerDependencies: + react: '>=16.8' + dependencies: + '@remix-run/router': 1.5.0 + react: 18.2.0 + dev: false + + /react-transition-group/4.4.5_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + peerDependencies: + react: '>=16.6.0' + react-dom: '>=16.6.0' + dependencies: + '@babel/runtime': 7.21.0 + dom-helpers: 5.2.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: false + + /react/17.0.2: + resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + dev: true + + /react/18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false + + /readable-stream/3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /recrawl-sync/2.2.3: + resolution: {integrity: sha512-vSaTR9t+cpxlskkdUFrsEpnf67kSmPk66yAGT1fZPrDudxQjoMzPgQhSMImQ0pAw5k0NPirefQfhopSjhdUtpQ==} + dependencies: + '@cush/relative': 1.0.0 + glob-regex: 0.3.2 + slash: 3.0.0 + sucrase: 3.32.0 + tslib: 1.14.1 + dev: true + + /regenerate-unicode-properties/10.1.0: + resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + dev: true + + /regenerate/1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + dev: true + + /regenerator-runtime/0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + + /regenerator-transform/0.15.1: + resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} + dependencies: + '@babel/runtime': 7.21.0 + dev: true + + /regexp.prototype.flags/1.4.3: + resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + functions-have-names: 1.2.3 + dev: true + + /regexpu-core/5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} + dependencies: + '@babel/regjsgen': 0.8.0 + regenerate: 1.4.2 + regenerate-unicode-properties: 10.1.0 + regjsparser: 0.9.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.1.0 + dev: true + + /regjsparser/0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: true + + /remark-parse/10.0.1: + resolution: {integrity: sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==} + dependencies: + '@types/mdast': 3.0.11 + mdast-util-from-markdown: 1.3.0 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-rehype/10.1.0: + resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} + dependencies: + '@types/hast': 2.3.4 + '@types/mdast': 3.0.11 + mdast-util-to-hast: 12.3.0 + unified: 10.1.2 + dev: false + + /remove-accents/0.4.2: + resolution: {integrity: sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==} + dev: false + + /require-directory/2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + + /require-from-string/2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: true + + /resolve-from/4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + /resolve/1.22.3: + resolution: {integrity: sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw==} + hasBin: true + dependencies: + is-core-module: 2.12.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + /resolve/2.0.0-next.4: + resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} + hasBin: true + dependencies: + is-core-module: 2.12.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /reusify/1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rimraf/3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + + /rollup-plugin-terser/7.0.2_rollup@2.79.1: + resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser + peerDependencies: + rollup: ^2.0.0 + dependencies: + '@babel/code-frame': 7.21.4 + jest-worker: 26.6.2 + rollup: 2.79.1 + serialize-javascript: 4.0.0 + terser: 5.16.9 + dev: true + + /rollup-plugin-visualizer/5.9.0: + resolution: {integrity: sha512-bbDOv47+Bw4C/cgs0czZqfm8L82xOZssk4ayZjG40y9zbXclNk7YikrZTDao6p7+HDiGxrN0b65SgZiVm9k1Cg==} + engines: {node: '>=14'} + hasBin: true + peerDependencies: + rollup: 2.x || 3.x + peerDependenciesMeta: + rollup: + optional: true + dependencies: + open: 8.4.2 + picomatch: 2.3.1 + source-map: 0.7.4 + yargs: 17.7.1 + dev: true + + /rollup/2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /run-parallel/1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /sade/1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + dependencies: + mri: 1.2.0 + dev: false + + /safe-buffer/5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true + + /safe-regex-test/1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + is-regex: 1.1.4 + dev: true + + /scheduler/0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /scroll-into-view-if-needed/2.2.31: + resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==} + dependencies: + compute-scroll-into-view: 1.0.20 + dev: false + + /semver/6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + dev: true + + /semver/7.3.5: + resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /semver/7.4.0: + resolution: {integrity: sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /serialize-javascript/4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + dependencies: + randombytes: 2.1.0 + dev: true + + /shebang-command/2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex/3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /side-channel/1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + object-inspect: 1.12.3 + dev: true + + /signal-exit/3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + + /size-limit/7.0.8: + resolution: {integrity: sha512-3h76c9E0e/nNhYLSR7IBI/bSoXICeo7EYkYjlyVqNIsu7KvN/PQmMbIXeyd2QKIF8iZKhaiZQoXLkGWbyPDtvQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + hasBin: true + dependencies: + bytes-iec: 3.1.1 + chokidar: 3.5.3 + ci-job-number: 1.2.2 + globby: 11.1.0 + lilconfig: 2.1.0 + mkdirp: 1.0.4 + nanospinner: 1.1.0 + picocolors: 1.0.0 + dev: true + + /slash/3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /slate-react/0.81.0_njwfekudbehx2lwpmvgkrdxmhi: + resolution: {integrity: sha512-bwryad4EvOmc7EFKb8aGg9DWNDh3KvToaggGieIgGTTbHJYHc9ADFC3A87Ittlpd5XUVopR0MpChQ3g3ODyvqw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + slate: '>=0.65.3' + dependencies: + '@types/is-hotkey': 0.1.7 + '@types/lodash': 4.14.194 + direction: 1.0.4 + is-hotkey: 0.1.8 + is-plain-object: 5.0.0 + lodash: 4.17.21 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + scroll-into-view-if-needed: 2.2.31 + slate: 0.81.3 + tiny-invariant: 1.0.6 + dev: false + + /slate/0.81.3: + resolution: {integrity: sha512-9rME3rSOsR76BsTGezNp6kiwjJL4yVJLwVQawj9xUf8wEZqoPU8d38hyQ3Jeg1SG6me2aS43m6H+n163/BhGWw==} + dependencies: + immer: 9.0.21 + is-plain-object: 5.0.0 + tiny-warning: 1.0.3 + dev: false + + /source-map-js/1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + + /source-map-support/0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + + /source-map/0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + dev: false + + /source-map/0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + + /source-map/0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + dev: true + + /source-map/0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + dependencies: + whatwg-url: 7.1.0 + dev: true + + /sourcemap-codec/1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + dev: true + + /space-separated-tokens/2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + dev: false + + /stack-utils/2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 2.0.0 + dev: true + + /stop-iteration-iterator/1.0.0: + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} + dependencies: + internal-slot: 1.0.5 + dev: true + + /string-width/4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /string.prototype.matchall/4.0.8: + resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + get-intrinsic: 1.2.0 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + regexp.prototype.flags: 1.4.3 + side-channel: 1.0.4 + dev: true + + /string.prototype.trim/1.2.7: + resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + dev: true + + /string.prototype.trimend/1.0.6: + resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + dev: true + + /string.prototype.trimstart/1.0.6: + resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + dev: true + + /string_decoder/1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /stringify-object/3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 + dev: true + + /strip-ansi/6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-bom/3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + + /strip-comments/2.0.1: + resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} + engines: {node: '>=10'} + dev: true + + /strip-json-comments/3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /style-to-object/0.4.1: + resolution: {integrity: sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==} + dependencies: + inline-style-parser: 0.1.1 + dev: false + + /stylis/4.1.3: + resolution: {integrity: sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==} + dev: false + + /sucrase/3.32.0: + resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==} + engines: {node: '>=8'} + hasBin: true + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + commander: 4.1.1 + glob: 7.1.6 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.5 + ts-interface-checker: 0.1.13 + dev: true + + /supports-color/5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + + /supports-color/7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-preserve-symlinks-flag/1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + /tar-fs/2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 2.2.0 + dev: true + + /tar-stream/2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + + /temp-dir/2.0.0: + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} + dev: true + + /tempy/0.6.0: + resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} + engines: {node: '>=10'} + dependencies: + is-stream: 2.0.1 + temp-dir: 2.0.0 + type-fest: 0.16.0 + unique-string: 2.0.0 + dev: true + + /terser/5.16.9: + resolution: {integrity: sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.3 + acorn: 8.8.2 + commander: 2.20.3 + source-map-support: 0.5.21 + dev: true + + /test-exclude/6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + dev: true + + /text-table/0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /thenify-all/1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + dev: true + + /thenify/3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + dev: true + + /through/2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + + /tiny-invariant/1.0.6: + resolution: {integrity: sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA==} + dev: false + + /tiny-warning/1.0.3: + resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} + dev: false + + /tinypool/0.2.4: + resolution: {integrity: sha512-Vs3rhkUH6Qq1t5bqtb816oT+HeJTXfwt2cbPH17sWHIYKTotQIFPk3tf2fgqRrVyMDVOc1EnPgzIxfIulXVzwQ==} + engines: {node: '>=14.0.0'} + dev: true + + /tinyspy/1.1.1: + resolution: {integrity: sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g==} + engines: {node: '>=14.0.0'} + dev: true + + /to-fast-properties/2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + /to-regex-range/5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /tr46/0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: true + + /tr46/1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + dependencies: + punycode: 2.3.0 + dev: true + + /trim-lines/3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + dev: false + + /trough/2.1.0: + resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} + dev: false + + /ts-interface-checker/0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: true + + /tsconfig-paths/4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + + /tslib/1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: true + + /tsutils/3.21.0_typescript@4.9.5: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 4.9.5 + dev: true + + /type-check/0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-detect/4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true + + /type-fest/0.16.0: + resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} + engines: {node: '>=10'} + dev: true + + /type-fest/0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /typed-array-length/1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + is-typed-array: 1.1.10 + dev: true + + /typescript/4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /unbox-primitive/1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.2 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + + /unbzip2-stream/1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + dependencies: + buffer: 5.7.1 + through: 2.3.8 + dev: true + + /unicode-canonical-property-names-ecmascript/2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + dev: true + + /unicode-match-property-ecmascript/2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.1.0 + dev: true + + /unicode-match-property-value-ecmascript/2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} + dev: true + + /unicode-property-aliases-ecmascript/2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + dev: true + + /unified/10.1.2: + resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + dependencies: + '@types/unist': 2.0.6 + bail: 2.0.2 + extend: 3.0.2 + is-buffer: 2.0.5 + is-plain-obj: 4.1.0 + trough: 2.1.0 + vfile: 5.3.7 + dev: false + + /unique-string/2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + dependencies: + crypto-random-string: 2.0.0 + dev: true + + /unist-util-generated/2.0.1: + resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==} + dev: false + + /unist-util-is/5.2.1: + resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + dependencies: + '@types/unist': 2.0.6 + dev: false + + /unist-util-position/4.0.4: + resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} + dependencies: + '@types/unist': 2.0.6 + dev: false + + /unist-util-stringify-position/3.0.3: + resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + dependencies: + '@types/unist': 2.0.6 + dev: false + + /unist-util-visit-parents/5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + dependencies: + '@types/unist': 2.0.6 + unist-util-is: 5.2.1 + dev: false + + /unist-util-visit/4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + dependencies: + '@types/unist': 2.0.6 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + dev: false + + /universalify/2.0.0: + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} + dev: true + + /unload/2.2.0: + resolution: {integrity: sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==} + dependencies: + '@babel/runtime': 7.21.0 + detect-node: 2.1.0 + dev: false + + /upath/1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + dev: true + + /update-browserslist-db/1.0.11_browserslist@4.21.5: + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.5 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /uri-js/4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.0 + dev: true + + /use-local-storage-state/17.3.0_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-PZruqtmMkYCgcC5t+0Mbka1rN2jjhC1SMA2UD8o6HbpblZf8E9aaXF0sEwlQAWlBpKGlNYvbqueB8dlbwX7n/g==} + engines: {node: '>=12'} + peerDependencies: + react: '>=16.8.0 < 18' + react-dom: '>=16.8.0 < 18' + dependencies: + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: false + + /use-sync-external-store/1.2.0_react@18.2.0: + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + + /util-deprecate/1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + + /uvu/0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + dequal: 2.0.3 + diff: 5.1.0 + kleur: 4.1.5 + sade: 1.8.1 + dev: false + + /v8-to-istanbul/9.1.0: + resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} + engines: {node: '>=10.12.0'} + dependencies: + '@jridgewell/trace-mapping': 0.3.18 + '@types/istanbul-lib-coverage': 2.0.4 + convert-source-map: 1.9.0 + dev: true + + /vfile-message/3.1.4: + resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} + dependencies: + '@types/unist': 2.0.6 + unist-util-stringify-position: 3.0.3 + dev: false + + /vfile/5.3.7: + resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} + dependencies: + '@types/unist': 2.0.6 + is-buffer: 2.0.5 + unist-util-stringify-position: 3.0.3 + vfile-message: 3.1.4 + dev: false + + /vite-plugin-pwa/0.12.8_vite@3.2.5: + resolution: {integrity: sha512-pSiFHmnJGMQJJL8aJzQ8SaraZBSBPMGvGUkCNzheIq9UQCEk/eP3UmANNmS9eupuhIpTK8AdxTOHcaMcAqAbCA==} + peerDependencies: + vite: ^2.0.0 || ^3.0.0-0 + dependencies: + debug: 4.3.4 + fast-glob: 3.2.12 + pretty-bytes: 6.1.0 + rollup: 2.79.1 + vite: 3.2.5_@types+node@17.0.45 + workbox-build: 6.5.4 + workbox-window: 6.5.4 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + dev: true + + /vite-tsconfig-paths/3.6.0_vite@3.2.5: + resolution: {integrity: sha512-UfsPYonxLqPD633X8cWcPFVuYzx/CMNHAjZTasYwX69sXpa4gNmQkR0XCjj82h7zhLGdTWagMjC1qfb9S+zv0A==} + peerDependencies: + vite: '>2.0.0-0' + dependencies: + debug: 4.3.4 + globrex: 0.1.2 + recrawl-sync: 2.2.3 + tsconfig-paths: 4.2.0 + vite: 3.2.5_@types+node@17.0.45 + transitivePeerDependencies: + - supports-color + dev: true + + /vite/3.2.5_@types+node@17.0.45: + resolution: {integrity: sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 17.0.45 + esbuild: 0.15.18 + postcss: 8.4.22 + resolve: 1.22.3 + rollup: 2.79.1 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /vitest/0.20.3_c8@7.13.0: + resolution: {integrity: sha512-cXMjTbZxBBUUuIF3PUzEGPLJWtIMeURBDXVxckSHpk7xss4JxkiiWh5cnIlfGyfJne2Ii3QpbiRuFL5dMJtljw==} + engines: {node: '>=v14.16.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + c8: '*' + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + c8: + optional: true + happy-dom: + optional: true + jsdom: + optional: true + dependencies: + '@types/chai': 4.3.4 + '@types/chai-subset': 1.3.3 + '@types/node': 17.0.45 + c8: 7.13.0 + chai: 4.3.7 + debug: 4.3.4 + local-pkg: 0.4.3 + tinypool: 0.2.4 + tinyspy: 1.1.1 + vite: 3.2.5_@types+node@17.0.45 + transitivePeerDependencies: + - less + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /webidl-conversions/3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: true + + /webidl-conversions/4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + dev: true + + /whatwg-url/5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: true + + /whatwg-url/7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + dev: true + + /which-boxed-primitive/1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-collection/1.0.1: + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + dependencies: + is-map: 2.0.2 + is-set: 2.0.2 + is-weakmap: 2.0.1 + is-weakset: 2.0.2 + dev: true + + /which-typed-array/1.1.9: + resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + is-typed-array: 1.1.10 + dev: true + + /which/2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /word-wrap/1.2.3: + resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} + engines: {node: '>=0.10.0'} + dev: true + + /workbox-background-sync/6.5.4: + resolution: {integrity: sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==} + dependencies: + idb: 7.1.1 + workbox-core: 6.5.4 + dev: true + + /workbox-broadcast-update/6.5.4: + resolution: {integrity: sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==} + dependencies: + workbox-core: 6.5.4 + dev: true + + /workbox-build/6.5.4: + resolution: {integrity: sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==} + engines: {node: '>=10.0.0'} + dependencies: + '@apideck/better-ajv-errors': 0.3.6_ajv@8.12.0 + '@babel/core': 7.21.4 + '@babel/preset-env': 7.21.4_@babel+core@7.21.4 + '@babel/runtime': 7.21.0 + '@rollup/plugin-babel': 5.3.1_b6cdhqm2xsfe2bpl424qdsl4ei + '@rollup/plugin-node-resolve': 11.2.1_rollup@2.79.1 + '@rollup/plugin-replace': 2.4.2_rollup@2.79.1 + '@surma/rollup-plugin-off-main-thread': 2.2.3 + ajv: 8.12.0 + common-tags: 1.8.2 + fast-json-stable-stringify: 2.1.0 + fs-extra: 9.1.0 + glob: 7.2.3 + lodash: 4.17.21 + pretty-bytes: 5.6.0 + rollup: 2.79.1 + rollup-plugin-terser: 7.0.2_rollup@2.79.1 + source-map: 0.8.0-beta.0 + stringify-object: 3.3.0 + strip-comments: 2.0.1 + tempy: 0.6.0 + upath: 1.2.0 + workbox-background-sync: 6.5.4 + workbox-broadcast-update: 6.5.4 + workbox-cacheable-response: 6.5.4 + workbox-core: 6.5.4 + workbox-expiration: 6.5.4 + workbox-google-analytics: 6.5.4 + workbox-navigation-preload: 6.5.4 + workbox-precaching: 6.5.4 + workbox-range-requests: 6.5.4 + workbox-recipes: 6.5.4 + workbox-routing: 6.5.4 + workbox-strategies: 6.5.4 + workbox-streams: 6.5.4 + workbox-sw: 6.5.4 + workbox-window: 6.5.4 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + dev: true + + /workbox-cacheable-response/6.5.4: + resolution: {integrity: sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==} + dependencies: + workbox-core: 6.5.4 + dev: true + + /workbox-core/6.5.4: + resolution: {integrity: sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==} + dev: true + + /workbox-expiration/6.5.4: + resolution: {integrity: sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==} + dependencies: + idb: 7.1.1 + workbox-core: 6.5.4 + dev: true + + /workbox-google-analytics/6.5.4: + resolution: {integrity: sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==} + dependencies: + workbox-background-sync: 6.5.4 + workbox-core: 6.5.4 + workbox-routing: 6.5.4 + workbox-strategies: 6.5.4 + dev: true + + /workbox-navigation-preload/6.5.4: + resolution: {integrity: sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==} + dependencies: + workbox-core: 6.5.4 + dev: true + + /workbox-precaching/6.5.4: + resolution: {integrity: sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==} + dependencies: + workbox-core: 6.5.4 + workbox-routing: 6.5.4 + workbox-strategies: 6.5.4 + dev: true + + /workbox-range-requests/6.5.4: + resolution: {integrity: sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==} + dependencies: + workbox-core: 6.5.4 + dev: true + + /workbox-recipes/6.5.4: + resolution: {integrity: sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==} + dependencies: + workbox-cacheable-response: 6.5.4 + workbox-core: 6.5.4 + workbox-expiration: 6.5.4 + workbox-precaching: 6.5.4 + workbox-routing: 6.5.4 + workbox-strategies: 6.5.4 + dev: true + + /workbox-routing/6.5.4: + resolution: {integrity: sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==} + dependencies: + workbox-core: 6.5.4 + dev: true + + /workbox-strategies/6.5.4: + resolution: {integrity: sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==} + dependencies: + workbox-core: 6.5.4 + dev: true + + /workbox-streams/6.5.4: + resolution: {integrity: sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==} + dependencies: + workbox-core: 6.5.4 + workbox-routing: 6.5.4 + dev: true + + /workbox-sw/6.5.4: + resolution: {integrity: sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==} + dev: true + + /workbox-window/6.5.4: + resolution: {integrity: sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==} + dependencies: + '@types/trusted-types': 2.0.3 + workbox-core: 6.5.4 + dev: true + + /wrap-ansi/7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrappy/1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + /ws/8.5.0: + resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + /y18n/5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + + /yallist/3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true + + /yallist/4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true + + /yaml/1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: false + + /yargs-parser/20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + dev: true + + /yargs-parser/21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + + /yargs/16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + dev: true + + /yargs/17.7.1: + resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: true + + /yauzl/2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + dev: true + + /yocto-queue/0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true + + /zod/3.21.4: + resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} + dev: false + + /zustand/4.3.7_react@18.2.0: + resolution: {integrity: sha512-dY8ERwB9Nd21ellgkBZFhudER8KVlelZm8388B5nDAXhO/+FZDhYMuRnqDgu5SYyRgz/iaf8RKnbUs/cHfOGlQ==} + engines: {node: '>=12.7.0'} + peerDependencies: + immer: '>=9.0' + react: '>=16.8' + peerDependenciesMeta: + immer: + optional: true + react: + optional: true + dependencies: + react: 18.2.0 + use-sync-external-store: 1.2.0_react@18.2.0 + dev: false diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..368af391bbdde0564c0db24da0cc55702d574e6e GIT binary patch literal 5537 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 literal 0 HcmV?d00001 diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..4c147d5dbad7e5c2443cf3504ba76c5e5ab41922 GIT binary patch literal 22488 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 literal 0 HcmV?d00001 diff --git a/public/apple-touch-icon-120x120.png b/public/apple-touch-icon-120x120.png new file mode 100644 index 0000000000000000000000000000000000000000..05cd5c3dd2439a74ca63b9cb9a95c0624503db49 GIT binary patch literal 1628 zcmZ`(e>~H982=PPa#tz2BGYCK$-)S$I~}nc`4y|w4b$(Eth#g+bsdTbn_(uua%q= zyhM}sSabe~Cil6v;jM01Wxz+!S*&$n_T)p9-GZL@5p8^@gLT-U(rUIlQ(6 z{?0anvvjYB{^44%9|kKEuM;WZG3f>%#$~lL#8S^Sugny@ER8M>J6{H-w!&Uhj9z-shB3zLZu8cVrPB|9*X`el2 zpEc%KFzHyNBy!a*WpGeELa#;6OEoDEXI_r$H&!7Y6|i(vf4y5vDwxWAs?`~=X$_Wg zZ`wXfcA#l$5;aWC7_ud5w*t9qzC7cRT7ej54OsV>?$RSwM9rjM$%HregBSNhSoP%j zcGa^{ty*i4srAFk*-@2VtuZue@}lr#nwJm~6acbJ?1J&cl*0%OG#xWF`Pkgm`qZE; zep4?Q0shek2LJ4rM_KvXbgIPp{bxnD$$iXI4mTo7io-4uQ8nbDg(j?Axbk5z6y zH_Lc)p`*k9Qsq>BrNox(`L#5d?{^5c@rcX3lw)U_a`b(d9F-K>Vc7U6!!HQ4WQ=! zthRQw<}o5t%&)eaE=o;%7MV%d)3#2vbP2y%=5ocD9ogF3S;GozaK0?L-9<}Y{EZXz zeTH4B=GPdi6>G27*DP-5n{mYm^)^$v9eO3*(VkJV0IGNXCH3$jqw+mI{G*~%wRBGv zJE{535ci^!ZJhIIvUOan{oDJ8 zPwQX#Uyul24W65uKX~CYnH_!9Tusl+3lLsgEna<$zWVy>>Fh$w(9pWD3iBZQvQ@6% z?tUqZdVl%z`jrdU3U~F~W163Ji;F(l#_?g<#l<$Ptnu4$aHE%t0Vb0zI`=1qL(45# z-6A+-^9HAWR*chHveBxZdWrN-sd-%~S0$DH@mlOI;8O&Bq8u{Wtj@>fQg-&^@t$p` z6Sh#-ImQ?Y0Q92UIm?I8dI?;^M@gaI?E$zNZ}aUx%0~ zOipC{X~OXn$@>l-Ng{C098V$~JkCkPpT6L|dXZU542AN1d)EtwED{(IE!HPmSP`v4 z3YQsK5dzXZC2S+2IGWJa|N5!)h16DR+La!BW7~Q#v0@2Fy@kfbR{%y}Siqevtc!mE D{B1t6 literal 0 HcmV?d00001 diff --git a/public/apple-touch-icon-144x144.png b/public/apple-touch-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b29d0b97e37e0db56d43018ad84a38a25151ce GIT binary patch literal 1890 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 gJ<}P;#8m`1Lmbo96pz>% literal 0 HcmV?d00001 diff --git a/public/apple-touch-icon-180x180.png b/public/apple-touch-icon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..652b296eff45351b992675518ef93e29b8a5f796 GIT binary patch literal 3120 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 T%$`Ya!z=)YmB$>;EWh**ffV;- literal 0 HcmV?d00001 diff --git a/public/apple-touch-icon-60x60.png b/public/apple-touch-icon-60x60.png new file mode 100644 index 0000000000000000000000000000000000000000..e1223911799d8119d8712d2d4e510606b331369b GIT binary patch literal 1045 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 literal 0 HcmV?d00001 diff --git a/public/apple-touch-icon-76x76.png b/public/apple-touch-icon-76x76.png new file mode 100644 index 0000000000000000000000000000000000000000..48dcaf28bf03967a63867e2890155cd055c67870 GIT binary patch literal 1217 zcmZ`$X;71A5PluxC~2%MTE$9?33!ylkCapiDpvwTLxg}PDu*En4g)CAP!u~Oh}NJ{ z1SDLM0#;E`k_e${E8+wXjN?`7F;rVibEsTNzVD4dNc#0>e{^SdpLuro*`3*~Oyb59 zy%%`{0Ep}aCJ#r>zwYIR#|d_uFAlSJMkhuCps6A_gzh*eixPN=0F*8RpzI(3Q+TS( z3_vjgz`Gp)Fd6_@P@ue)ycU32ZAqL|mdoXuo^gI~IB^@c&Zu5aRqH1!?|i7zPhNa6 z^~N%zH#tiB>|!k}z7Fpi9QRBPNv~bf3vU}7;-BmR4QT9HEVCO*v{2X$SsmE2Ml`+0 zjYftNj1AjZ#v`mnWn8K73 zeQ)qXyDt3(!|KemTGP2FaK`DHaXKHHrVjL3_#GqMw)gw5PdqSA+NYh?$r(81T)&3^ z@h{HG+8ECSGIzfOoOnvvi7Zc}r~4-#1%LkS>&1Ba8k-rND$tESlcea7h5eSB1q*pW z0(JihVo6Df{ZHigS01sEbobIn#anBR56_>xku%;joj$fVBhRBE!T+;L=Kk9H)tMP_ z3NdQIY^FdmB75Ll5zBEL`aW4Z;pL|o^k+R$pEEZI`d5};`EZcANHJSjSqrC57p>S^9mMzs`N$DxmqQWd1KbfyGM8%4HcuW4eMZS=~tMFM=?)IN+ zZ&eMZ#qX?WdcPs2$%lc+uI<|vz^cjGH{GKM;dJefy6JJ)D-#pysHa84HU5bl?lF#Q zPIKca-NJ{ffePls&Ya~+$OHpgCs{vJLrqe{j$@`yULGU^<9@k43g7IpVJ?yV{eR{s&XhBR5UcHIzBE?=ek?s}*z{0Ng$ zZFZq^blyBHoBQ+*{@4I1OCS{sr4ojyNP+{PAv9VrvN{-{r-srQNH`;m9*7_e1i3QO z_Ub=^{N3W5?7jal7}WR*aRI+HRUqXFOUMO9yR&ohBxLE{0tq>%Kq>-Yk8;@hu~*@i z6)Wy-(%)wrc)*QH2oVu{s6HEO=ehZinPp)*u^Y8Jm8^g9^zOj@fyD!!`m%)94I$v& Wf={K^7?IP1OEWRN>20u literal 0 HcmV?d00001 diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..652b296eff45351b992675518ef93e29b8a5f796 GIT binary patch literal 3120 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 + + + + + #da532c + + + diff --git a/public/logo/google.png b/public/logo/google.png new file mode 100644 index 0000000000000000000000000000000000000000..7906ea06d713a6ec65b5a9197996f542ea92a240 GIT binary patch literal 12625 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 SJL0_pASbOXRUu&<_s-Cec_D3WKqQk(kgV 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 Wf}ylKYA@L)0Qztf-I_bD3I79*(;IUD literal 0 HcmV?d00001 diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..5537f07 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: \ No newline at end of file diff --git a/public/safari-pinned-tab.svg b/public/safari-pinned-tab.svg new file mode 100644 index 0000000..300199e --- /dev/null +++ b/public/safari-pinned-tab.svg @@ -0,0 +1,342 @@ + + + + +Created by potrace 1.14, written by Peter Selinger 2001-2017 + + + + + diff --git a/src-tauri/.gitignore b/src-tauri/.gitignore new file mode 100644 index 0000000..c123704 --- /dev/null +++ b/src-tauri/.gitignore @@ -0,0 +1,4 @@ +# Generated by Cargo +# will have compiled files and executables +/target/ +WixTools diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml new file mode 100644 index 0000000..21e694d --- /dev/null +++ b/src-tauri/Cargo.toml @@ -0,0 +1,37 @@ +[package] +name = "dust-mail-client" +version = "0.1.4" +description = "A simple material mail client" +authors = ["Guus van Meerveld"] +license = "MIT" +repository = "https://github.com/Guusvanmeerveld/Dust-Mail" +edition = "2021" +rust-version = "1.61" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[build-dependencies] +tauri-build = { version = "1.2", features = ["isolation"] } + +[dependencies] +serde_json = "1.0" +serde = { version = "1.0", features = ["derive"] } +tauri = { version = "1.2", features = ["devtools", "isolation", "shell-open", "system-tray", "window-close", "window-create"] } +sdk = { path = "../../../packages/sdk", version = "0.1" } +open = "3.0" +base64 = "0.21" +directories = "4.0" +futures = "0.3" +dashmap = "5.4.0" +keyring = "2.0.2" +data-encoding = "2.3.3" +ring = "0.16.20" +whoami = "1.4.0" + +[features] +# by default Tauri runs in production mode +# when `tauri dev` runs it is executed with `cargo run --no-default-features` if `devPath` is an URL +default = [ "custom-protocol" ] +# this feature is used used for production builds where `devPath` points to the filesystem +# DO NOT remove this +custom-protocol = [ "tauri/custom-protocol" ] diff --git a/src-tauri/build.rs b/src-tauri/build.rs new file mode 100644 index 0000000..795b9b7 --- /dev/null +++ b/src-tauri/build.rs @@ -0,0 +1,3 @@ +fn main() { + tauri_build::build() +} diff --git a/src-tauri/icons/128x128.png b/src-tauri/icons/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..beffffa8978b9ca7f3b8a1d392d24ba772e2eddb GIT binary patch literal 4240 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 R`S)o6+%PcHFW1FJ{11%%3nc&m literal 0 HcmV?d00001 diff --git a/src-tauri/icons/128x128@2x.png b/src-tauri/icons/128x128@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c66497531d9f7fa72f702e76663bfef0f4132e2d GIT binary patch literal 10414 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 Apa1{> literal 0 HcmV?d00001 diff --git a/src-tauri/icons/32x32.png b/src-tauri/icons/32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..b7dcb5c7b327cdbd3bc3542cc7f3c40366ebd479 GIT binary patch literal 1117 zcmV-j1fu(iP)BMD6t)TKW6QjcMrwP?2gw?LL`>3#T2Xe-aYr6^X|Qmc)>ruZ~$NavV)KoIFUMT zK3W1r09s%~qMeKYYXJiI*^eWHKo$`p7Jv&{G%ZO2h6Hgkaq)xiNA}hk^Sw-n1t3+z zXmO&40CZZwtsNOZzBzjl9A}U>O(=VVE^)-NUCs=r1zKU8>h{J!3q}$ ziUiA32=bZ!kR+6QC_xA$LFo3L;_o|d2T_(9A;8(+9JnNs6eQ+?RyyWyuMsO9S{}>7 zP^CgtfSy3J%B9n^nHn+75wCB%9*jH$f+SVnHug6MUcn|w5n$m$F#5)6^Yvw#@hBU$ zJk7M{vnHXt1H~IVZu^BSG0v8fr7r!=fo8JJw3oy}(AloVi)-X^n<0;-vQ0MXtyNkA zz{H5GK)kW-x;OM-1g*{*v)};O1TgbXgN@vUR-nJRVt)P);^NV2&AR)aW#n1SUygy&g%1 zX=Q4#as)ubrnT^pd-N=WiXv2d8m!KYbH*6F&n zkC;~9Wo06~K0&Gxhc@{c?6ye~>~ zTE&jB|MlRSqQB=^HdaxzYqKq2ENhxGw_dlyBy91GD}#57z2VO);z^Wsck%O>1ezh7 z?0v-bOFPhH{Eo!WA-(qB45i$n;Tv{OT;uws$L8aqdoD~K4WW=so9rS+a?f-0&Md*& z0k*VkJom+2gqB&{FF3mMI4Y!zdlZoHY=TqgSIs&JZhv>r`TAG)0TQ7FDA!`2Wi<^6 jQH%h%{s)iK7Y*QV-Y^Owo#->Q00000NkvXXu0mjfqe~TQ literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square107x107Logo.png b/src-tauri/icons/Square107x107Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1cd82bbe9a462169383f30b43da1b78f16dd285f GIT binary patch literal 3617 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 literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square142x142Logo.png b/src-tauri/icons/Square142x142Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..3b16c27d469567166a3d8c67e8cf4553760f115f GIT binary patch literal 5020 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 NN>AHJt6ak|{C`lBffoP( literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square150x150Logo.png b/src-tauri/icons/Square150x150Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f18883b0631a240d47f4f0920cb05b24fd9348bb GIT binary patch literal 5489 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 literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square284x284Logo.png b/src-tauri/icons/Square284x284Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..458e03e036bb7d318593f134d805de36f487a95d GIT binary patch literal 13229 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 F{{Y!c*Rucs literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square44x44Logo.png b/src-tauri/icons/Square44x44Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..42ea5cdf9153bd3b1a8d742f300b4a7bbc0686db GIT binary patch literal 1490 zcmV;@1ugoCP) z1z20wmb+l7{7r<9uM6<`jTr2`CPBqjmIj3!zeuqE`Y?QUV+<;Poit!~UyZ|_Yqz27 zqLi_#E1p?!I_}xr68Ge{VzsPN;k`GXihH)5kvzrS@yv2$s~nKwlYuFKvMUm7Z4*2Q z3vX6hWGTgUd9S3sagJ#Z9}{1JV59Jdzd_JmY-91FZb_wscp{CAml)P*t#7Yz zamyy%6UAx7Qg}g9H=YtDA2Mb)2_2B#C`@ICW16=i#-BJUDg{3?CDcoR1kJc{A$tHT zQO32I3C;9vgys3?nVfe-P>3zNF{WXSLNH7l0?%m_G=D=(3xf#E5Jf8Rldd!MU;1u>IsQQQ6)hDcIYl;pMeGlht>A zV)A3nx>e1vsxuKA{mrR|%|8rSr)}I;Up>p@QnKAM-S%R7ySOLSYLRJ`^7BHQCr$oK2EycF=*qv4>FYjS)C_i?uT2^gXtK7iW z2`MASFNV9nVgPTL61 zpFJVUJG&&+W!u=kLyNer(l+H{dk0e}CuG$EoXP5ZfoHV+$ajMJ){ji4kXW`$Y;bPF z+WY7nvPyZNTu?sdYjq*O(`-{10=jJ>ffKr1*kyd#xNJ|iis$U;WXjW+hg7S=oK_bD z>`1D8ac_N0%R3^fTiV%Fd7se^MsFKMy^1d|)USz6Kd>pvfzOzI7G!m?z}8%?o2KoY zCY=82Csl9lko;WpsJ!a}Q$u}mJy2vlbTQ7~?-Z2{;Su@4+F?ChIp%eOsq??K?7%i` z@^Nax`U%Bf6IJ|GgW9?SgM9s$L&~Ps33+R~pcY`gd~!_At&6I7OrvxBbwf(9A*NVQ zDri5oWi`z20Lug4jLE+0i0UJd>Ilcu9y(}%`>G5< zd&$5-yU&~#Oa#6fmGS0@BrL9Rn_J-iYJI;|2B>+QwsD{d8nElNAo+T*C}91=;h4)X zPDO`DWE0MYF%25v5pEl$wfzLFbA84D^?{QBC#+-cpFeOC&}kTZk9yF&sT)?CM{)OO z^no85p)jf`hGz*Q%%fi^Tr!2rg7qyNc6y6At=Cc*C+#qXXAUE{`gP858SSuW*c51= z6B>og62>GrIOapwyXW+9ISnrX*4ZM-u$lu((!G4?m$Pv-#|1@?|a6MAa6BL9EkeSOov z8JV7|CgCLH9A)of&uC`}G%mf7Lq8{9ti6>>HPerr*wb4wJ>A5fTC)~g9 suk`#EM%F#+AQLOgRcp)IayKmh0obN`Unt&lLI3~&07*qoM6N<$f;Z#i1^@s6 literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square71x71Logo.png b/src-tauri/icons/Square71x71Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f434d85f6301789e81fca4299255910c98a9cdd6 GIT binary patch literal 2348 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 W9nL+q>d<K5QFR1twD1~tD$0! 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 LZS^u$o0tCsf4@x< literal 0 HcmV?d00001 diff --git a/src-tauri/icons/icon.ico b/src-tauri/icons/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..7a66ec8628a578ee907040f528373c2923dcf6cd GIT binary patch literal 285478 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 N)gIm{Rk3;be*k1UD%=17 literal 0 HcmV?d00001 diff --git a/src-tauri/isolation-dist/index.html b/src-tauri/isolation-dist/index.html new file mode 100644 index 0000000..94b6654 --- /dev/null +++ b/src-tauri/isolation-dist/index.html @@ -0,0 +1,10 @@ + + + + + Isolation Secure Script + + + + + diff --git a/src-tauri/isolation-dist/index.js b/src-tauri/isolation-dist/index.js new file mode 100644 index 0000000..1eb85f2 --- /dev/null +++ b/src-tauri/isolation-dist/index.js @@ -0,0 +1,3 @@ +window.__TAURI_ISOLATION_HOOK__ = (payload) => { + return payload; +}; diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs new file mode 100644 index 0000000..3c2ce29 --- /dev/null +++ b/src-tauri/src/commands.rs @@ -0,0 +1,115 @@ +use sdk::{ + detect::{self, Config}, + session::FullLoginOptions, + types::{MailBox, Message, Preview}, +}; + +use crate::{identifier::Identifier, keyring, parse::to_json, sessions::Sessions, types::Result}; + +use tauri::State; + +#[tauri::command(async)] +pub async fn detect_config(email_address: String) -> Result { + Ok(detect::from_email(&email_address).await?) +} + +#[tauri::command(async)] +pub async fn login( + credentials: FullLoginOptions, + session_handler: State<'_, Sessions>, +) -> Result { + // Connect and login to the mail servers using the user provided credentials. + let mail_sessions = sdk::session::create_sessions(&credentials).await?; + + let mut identifier = Identifier::from(&credentials); + + identifier.hash()?; + + let identifier: String = identifier.into(); + + let credentials_json = to_json(&credentials)?; + + keyring::set(&identifier, credentials_json)?; + + session_handler.insert_session(&identifier, mail_sessions)?; + + // Return the key and nonce to the frontend so it can verify its session later. + Ok(identifier) +} + +#[tauri::command(async)] +/// Gets a list of all of the mail boxes in the currently logged in account. +pub async fn list(token: String, sessions: State<'_, Sessions>) -> Result> { + let session = sessions.get_incoming_session(&token).await?; + + let mut session_lock = session.lock().await; + + let list = session_lock + .box_list() + .await + .map(|box_list| box_list.clone())?; + + Ok(list) +} + +#[tauri::command(async)] +/// Gets a mailbox by its box id. +pub async fn get(token: String, box_id: String, sessions: State<'_, Sessions>) -> Result { + let session = sessions.get_incoming_session(&token).await?; + + let mut session_lock = session.lock().await; + + let mailbox = session_lock + .get(&box_id) + .await + .map(|mailbox| mailbox.clone())?; + + Ok(mailbox) +} + +#[tauri::command(async)] +/// Gets a list of 'previews' from a mailbox. This preview contains some basic data about a message such as the subject and the sender. +pub async fn messages( + token: String, + box_id: String, + start: u32, + end: u32, + sessions: State<'_, Sessions>, +) -> Result> { + let session = sessions.get_incoming_session(&token).await?; + + let mut session_lock = session.lock().await; + + let message_list = session_lock.messages(&box_id, start, end).await?; + + Ok(message_list) +} + +#[tauri::command(async)] +/// Gets the full message data from a given mailbox and a given message id. +pub async fn get_message( + token: String, + box_id: String, + message_id: String, + sessions: State<'_, Sessions>, +) -> Result { + let session = sessions.get_incoming_session(&token).await?; + + let mut session_lock = session.lock().await; + + let message = session_lock.get_message(&box_id, &message_id).await?; + + Ok(message) +} + +#[tauri::command(async)] +/// Log out of the currently logged in account. +pub async fn logout(identifier: String, sessions: State<'_, Sessions>) -> Result<()> { + let session = sessions.get_incoming_session(&identifier).await?; + + let mut session_lock = session.lock().await; + + session_lock.logout().await?; + + Ok(()) +} diff --git a/src-tauri/src/hash.rs b/src-tauri/src/hash.rs new file mode 100644 index 0000000..e955603 --- /dev/null +++ b/src-tauri/src/hash.rs @@ -0,0 +1,31 @@ +use std::io::Read; + +use crate::types::Result; + +use data_encoding::HEXUPPER; +use ring::digest::{Context, Digest, SHA256}; + +fn sha256_digest(mut reader: R) -> Result { + let mut context = Context::new(&SHA256); + let mut buffer = [0; 1024]; + + loop { + let count = reader.read(&mut buffer)?; + + if count == 0 { + break; + } + + context.update(&buffer[..count]); + } + + Ok(context.finish()) +} + +pub fn sha256_hex(reader: R) -> Result { + let digest = sha256_digest(reader)?; + + let hex = HEXUPPER.encode(digest.as_ref()); + + Ok(hex) +} diff --git a/src-tauri/src/identifier.rs b/src-tauri/src/identifier.rs new file mode 100644 index 0000000..7c1081c --- /dev/null +++ b/src-tauri/src/identifier.rs @@ -0,0 +1,47 @@ +use sdk::session::{FullLoginOptions, LoginType}; + +use crate::{hash::sha256_hex, types::Result}; + +pub struct Identifier { + id: String, +} + +impl Identifier { + /// Hash the currently stored identifier + pub fn hash(&mut self) -> Result<()> { + self.id = sha256_hex(self.id.as_bytes())?; + + Ok(()) + } +} + +impl Into for Identifier { + fn into(self) -> String { + self.id + } +} + +impl From<&FullLoginOptions> for Identifier { + fn from(login_options: &FullLoginOptions) -> Self { + // TODO: Outgoing support + let incoming = login_options.incoming_options(); + + let (username, password) = match incoming.login_type() { + LoginType::PasswordBased(creds) => (creds.username(), creds.password()), + LoginType::OAuthBased(creds) => (creds.username(), creds.access_token()), + }; + + // A string that is unique to these login options. + let credentials_string = format!( + "{}:{}@{}:{}", + username, + password, + incoming.domain(), + incoming.port() + ); + + Self { + id: credentials_string, + } + } +} diff --git a/src-tauri/src/keyring.rs b/src-tauri/src/keyring.rs new file mode 100644 index 0000000..379a127 --- /dev/null +++ b/src-tauri/src/keyring.rs @@ -0,0 +1,31 @@ +use crate::types::Result; + +use keyring::Entry; + +const APPLICATION_NAME: &str = "Dust-Mail"; + +fn build_entry_from_identifier>(identifier: T) -> Result { + let username = whoami::username(); + + let name = format!("{}:{}", APPLICATION_NAME, identifier.as_ref()); + + let entry = Entry::new(&name, &username)?; + + Ok(entry) +} + +pub fn get>(identifier: T) -> Result { + let entry = build_entry_from_identifier(identifier)?; + + let password = entry.get_password()?; + + Ok(password) +} + +pub fn set, S: AsRef>(identifier: T, value: S) -> Result<()> { + let entry = build_entry_from_identifier(identifier)?; + + entry.set_password(value.as_ref())?; + + Ok(()) +} diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs new file mode 100644 index 0000000..2f23df7 --- /dev/null +++ b/src-tauri/src/main.rs @@ -0,0 +1,91 @@ +#![cfg_attr( + all(not(debug_assertions), target_os = "windows"), + windows_subsystem = "windows" +)] + +mod commands; +mod hash; +mod keyring; +mod sessions; + +mod identifier; +mod menu; +mod parse; +mod tray; +mod types; + +use sessions::Sessions; +use tauri::{Manager, SystemTrayEvent}; + +#[derive(Clone, serde::Serialize)] +struct Payload { + message: String, +} + +fn main() { + let github_page = "https://github.com/Guusvanmeerveld/Dust-Mail"; + + let menu = menu::create_menu(); + let tray = tray::create_tray(); + + tauri::Builder::default() + .menu(menu) + .system_tray(tray) + .manage(Sessions::new()) + .on_menu_event(move |event| match event.menu_item_id() { + "repository" => { + open::that(github_page).unwrap(); + } + "donate" => { + open::that("https://ko-fi.com/Guusvanmeerveld").unwrap(); + } + "report_issue" => { + open::that([github_page, "issues"].join("/")).unwrap(); + } + "license" => { + open::that([github_page, "blob/main/LICENSE"].join("/")).unwrap(); + } + "about" => { + event + .window() + .emit( + "show_about", + Payload { + message: "Show about".into(), + }, + ) + .unwrap(); + } + _ => {} + }) + .on_system_tray_event(|app, event| match event { + SystemTrayEvent::MenuItemClick { id, .. } => match id.as_str() { + "hide" => { + let window = app.get_window("main").unwrap(); + + window.hide().unwrap(); + } + "show" => { + let window = app.get_window("main").unwrap(); + + window.show().unwrap(); + } + "quit" => { + std::process::exit(0); + } + _ => {} + }, + _ => {} + }) + .invoke_handler(tauri::generate_handler![ + commands::detect_config, + commands::login, + commands::logout, + commands::get, + commands::messages, + commands::get_message, + commands::list + ]) + .run(tauri::generate_context!()) + .expect("error while running tauri application"); +} diff --git a/src-tauri/src/menu.rs b/src-tauri/src/menu.rs new file mode 100644 index 0000000..47b0662 --- /dev/null +++ b/src-tauri/src/menu.rs @@ -0,0 +1,25 @@ +use tauri::{CustomMenuItem, Menu, MenuItem, Submenu}; + +pub fn create_menu() -> Menu { + // Help menu + let repository = CustomMenuItem::new("repository", "Repository"); + let donate = CustomMenuItem::new("donate", "Donate"); + let report_issue = CustomMenuItem::new("report_issue", "Report Issue"); + let license = CustomMenuItem::new("license", "License"); + let about = CustomMenuItem::new("about", "About"); + + let help_submenu = Submenu::new( + "Help", + Menu::new() + // .add_item(MenuItem::About((), ())) + .add_item(repository) + .add_native_item(MenuItem::Separator) + .add_item(donate) + .add_item(report_issue) + .add_item(license) + .add_native_item(MenuItem::Separator) + .add_item(about), + ); + + Menu::os_default("Dust-Mail").add_submenu(help_submenu) +} diff --git a/src-tauri/src/parse.rs b/src-tauri/src/parse.rs new file mode 100644 index 0000000..8eb4d7c --- /dev/null +++ b/src-tauri/src/parse.rs @@ -0,0 +1,11 @@ +use serde::Serialize; + +use serde_json; + +use crate::types::Result; + +pub fn to_json(data: &T) -> Result { + let serialized = serde_json::to_string(data)?; + + Ok(serialized) +} diff --git a/src-tauri/src/sessions.rs b/src-tauri/src/sessions.rs new file mode 100644 index 0000000..5371d8a --- /dev/null +++ b/src-tauri/src/sessions.rs @@ -0,0 +1,64 @@ +use dashmap::DashMap; +use serde_json::from_str; + +use std::sync::Arc; + +use sdk::session::{MailSessions, ThreadSafeIncomingSession}; + +use crate::{keyring, types::Result}; + +pub struct Sessions { + sessions_map: DashMap>, +} + +impl Sessions { + pub fn new() -> Self { + Self { + sessions_map: DashMap::new(), + } + } + + pub fn insert_session>( + &self, + identifier: S, + sessions: MailSessions, + ) -> Result<()> { + let identifier = identifier.into(); + + self.sessions_map.insert(identifier, Arc::new(sessions)); + + Ok(()) + } + + pub async fn get_incoming_session>( + &self, + identifier: S, + ) -> Result { + let mail_sessions = self.get_session(identifier.as_ref()).await?; + + Ok(mail_sessions.incoming().clone()) + } + + pub async fn get_session>(&self, identifier: S) -> Result> { + let identifier = identifier.into(); + + match self.sessions_map.get(&identifier) { + Some(sessions) => Ok(sessions.clone()), + None => { + // If we don't have a session stored, we try to get it from the credentials stored in the keyring. + let credentials_json = keyring::get(&identifier)?; + + let credentials = from_str(&credentials_json)?; + + let mail_sessions = sdk::session::create_sessions(&credentials).await?; + + self.insert_session(identifier.clone(), mail_sessions)?; + + match self.sessions_map.get(&identifier) { + Some(sessions) => Ok(sessions.clone()), + None => unreachable!(), + } + } + } + } +} diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs new file mode 100644 index 0000000..5eb8255 --- /dev/null +++ b/src-tauri/src/tray.rs @@ -0,0 +1,15 @@ +use tauri::{CustomMenuItem, SystemTray, SystemTrayMenu, SystemTrayMenuItem}; + +pub fn create_tray() -> SystemTray { + let show = CustomMenuItem::new("show", "Show"); + let hide = CustomMenuItem::new("hide", "Hide"); + let quit = CustomMenuItem::new("quit", "Quit"); + + let tray_menu = SystemTrayMenu::new() + .add_item(show) + .add_item(hide) + .add_native_item(SystemTrayMenuItem::Separator) + .add_item(quit); + + SystemTray::new().with_menu(tray_menu) +} diff --git a/src-tauri/src/types/mod.rs b/src-tauri/src/types/mod.rs new file mode 100644 index 0000000..211a47b --- /dev/null +++ b/src-tauri/src/types/mod.rs @@ -0,0 +1,109 @@ +use std::{ + error::{self, Error as StdError}, + fmt, + io::Error as IoError, + result, +}; + +// pub use credentials::Credentials; + +use keyring::Error as KeyringError; +use sdk::types::Error as SdkError; +use serde_json::Error as JsonError; + +use serde::{ser::SerializeStruct, Serialize}; + +#[derive(Debug)] +pub struct Error { + message: String, + kind: ErrorKind, +} + +impl Error { + pub fn new>(kind: ErrorKind, msg: S) -> Self { + Self { + message: msg.into(), + kind, + } + } + + pub fn kind(&self) -> &ErrorKind { + &self.kind + } +} + +impl From for Error { + fn from(sdk_error: SdkError) -> Self { + Error::new( + ErrorKind::Mail(sdk_error), + "Error with upstream mail server", + ) + } +} + +impl From for Error { + fn from(keyring_error: KeyringError) -> Self { + Error::new(ErrorKind::Keyring(keyring_error), "Error with keyring") + } +} + +impl From for Error { + fn from(json_error: JsonError) -> Self { + Error::new( + ErrorKind::Json(json_error), + "Failed to serialize/deserialize json data", + ) + } +} + +impl From for Error { + fn from(io_error: IoError) -> Self { + Error::new(ErrorKind::Io(io_error), "IO error") + } +} + +impl Serialize for Error { + fn serialize(&self, serializer: S) -> result::Result + where + S: serde::Serializer, + { + let source = self.source().unwrap_or(&self); + let mut state = serializer.serialize_struct("Error", 2)?; + + state.serialize_field("message", &source.to_string())?; + state.serialize_field("kind", "MailError")?; + state.end() + } +} + +impl StdError for Error { + fn source(&self) -> Option<&(dyn error::Error + 'static)> { + match self.kind() { + ErrorKind::Io(e) => e.source(), + ErrorKind::Json(e) => e.source(), + ErrorKind::Keyring(e) => e.source(), + ErrorKind::Mail(e) => e.source(), + _ => None, + } + } + + fn description(&self) -> &str { + &self.message + } +} + +#[derive(Debug)] +pub enum ErrorKind { + Mail(SdkError), + Io(IoError), + Keyring(KeyringError), + Json(JsonError), +} + +impl fmt::Display for Error { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}", self.message) + } +} + +pub type Result = result::Result; diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json new file mode 100644 index 0000000..09a9d35 --- /dev/null +++ b/src-tauri/tauri.conf.json @@ -0,0 +1,85 @@ +{ + "$schema": "../node_modules/@tauri-apps/cli/schema.json", + "build": { + "beforeBuildCommand": "cd ../../ && turbo run build --filter @dust-mail/web", + "beforeDevCommand": "pnpm dev", + "devPath": "http://localhost:5173/", + "distDir": "../dist", + "withGlobalTauri": true + }, + "package": { + "productName": "Dust-Mail", + "version": "../package.json" + }, + "tauri": { + "pattern": { + "use": "isolation", + "options": { + "dir": "isolation-dist" + } + }, + "allowlist": { + "all": false, + "window": { + "close": true, + "create": true + }, + "shell": { + "open": true + } + }, + "systemTray": { + "iconPath": "icons/icon.png", + "iconAsTemplate": true + }, + "bundle": { + "active": true, + "category": "Productivity", + "copyright": "Guus van Meerveld", + "deb": { + "depends": [] + }, + "externalBin": [], + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ], + "identifier": "dust.guusvanmeerveld.dev", + "longDescription": "An opensource mail client supporting multiple platforms.", + "macOS": { + "entitlements": null, + "exceptionDomain": "", + "frameworks": [], + "providerShortName": null, + "signingIdentity": null + }, + "resources": [], + "shortDescription": "A simple and fast mail client", + "targets": "all", + "windows": { + "certificateThumbprint": null, + "digestAlgorithm": "sha256", + "timestampUrl": "" + } + }, + "security": {}, + "updater": { + "active": false, + "pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IEM3OTY1OTUxNjk3ODMxRApSV1FkZzVjV2xXVjVETmsyblI4b1p0eDVrRHRPUlkvb3d1VjZKMnFYME1nUXdyNVpiNlNwR09KVQo=" + }, + "windows": [ + { + "maximized": true, + "minHeight": 300, + "minWidth": 300, + "focus": false, + "resizable": true, + "label": "main", + "title": "Dust-Mail" + } + ] + } +} diff --git a/src/components/About.tsx b/src/components/About.tsx new file mode 100644 index 0000000..cb45228 --- /dev/null +++ b/src/components/About.tsx @@ -0,0 +1,115 @@ +import { listen } from "@tauri-apps/api/event"; + +import { + author, + contributors, + description, + repository, + homepage +} from "../../package.json"; + +import { FC } from "react"; +import { useEffect } from "react"; + +import Box from "@mui/material/Box"; +import IconButton from "@mui/material/IconButton"; +import List from "@mui/material/List"; +import ListItem from "@mui/material/ListItem"; +import ListItemIcon from "@mui/material/ListItemIcon"; +import ListItemText from "@mui/material/ListItemText"; +import ListSubheader from "@mui/material/ListSubheader"; +import Modal from "@mui/material/Modal"; +import Stack from "@mui/material/Stack"; +import Tooltip from "@mui/material/Tooltip"; +import Typography from "@mui/material/Typography"; + +import CodeIcon from "@mui/icons-material/Code"; +import EmailIcon from "@mui/icons-material/Email"; +import PersonIcon from "@mui/icons-material/Person"; +import GlobeIcon from "@mui/icons-material/Public"; + +import modalStyles from "@styles/modal"; + +import useStore from "@utils/hooks/useStore"; +import useTheme from "@utils/hooks/useTheme"; + +const Contributor: FC<{ + name: string; + url: string; + email: string; +}> = ({ name, url, email }) => ( + + + + + + + + + + + + + + + + + + +); + +const About: FC = () => { + const theme = useTheme(); + + const isOpen = useStore((state) => state.showAbout); + const setOpen = useStore((state) => state.setShowAbout); + + useEffect(() => { + if ("__TAURI_METADATA__" in window) { + const unlisten = listen("show_about", () => setOpen(true)); + + return () => { + unlisten.then((unlisten) => unlisten()); + }; + } + }, []); + + return ( + setOpen(false)}> + + + + + About {import.meta.env.VITE_APP_NAME} + + + + + + + + + + + + + + + {description} + + + List of contributors}> + {[author, ...contributors].map((contributor) => ( + + ))} + + + + ); +}; + +export default About; diff --git a/src/components/Boxes/Add.tsx b/src/components/Boxes/Add.tsx new file mode 100644 index 0000000..d8c6f76 --- /dev/null +++ b/src/components/Boxes/Add.tsx @@ -0,0 +1,321 @@ +import create from "zustand"; + +import { FC, memo, useEffect, useMemo, useState } from "react"; + +import Alert from "@mui/material/Alert"; +import Box from "@mui/material/Box"; +import Button from "@mui/material/Button"; +import FormControl from "@mui/material/FormControl"; +import InputLabel from "@mui/material/InputLabel"; +import MenuItem from "@mui/material/MenuItem"; +import Modal from "@mui/material/Modal"; +import Select from "@mui/material/Select"; +import Stack from "@mui/material/Stack"; +import TextField from "@mui/material/TextField"; +import Typography from "@mui/material/Typography"; + +import SelectAllIcon from "@mui/icons-material/CheckBox"; +import DeselectAllIcon from "@mui/icons-material/CheckBoxOutlineBlank"; + +import MailBox from "@interfaces/box"; + +import modalStyles from "@styles/modal"; +import scrollbarStyles from "@styles/scrollbar"; + +import useBoxes from "@utils/hooks/useBoxes"; +import useSnackbar from "@utils/hooks/useSnackbar"; +import useStore from "@utils/hooks/useStore"; +import useTheme from "@utils/hooks/useTheme"; +import useUser from "@utils/hooks/useUser"; + +import FolderTree, { + CheckedBoxesContext, + CheckedBoxesStore +} from "@components/Boxes/FolderTree"; + +export const checkedBoxesStore = create((set) => ({ + checkedBoxes: {}, + setChecked: (id, checked) => + set((state) => ({ checkedBoxes: { ...state.checkedBoxes, [id]: checked } })) +})); + +export type FolderType = "unified" | "normal" | "none"; + +interface AddBoxStore { + folderType: FolderType; + setFolderType: (folderType: FolderType) => void; + parentFolder: MailBox | undefined; + setParentFolder: (parentFolder: MailBox | undefined) => void; + folderName: string; + setFolderName: (folderName: string) => void; +} + +export const addBoxStore = create((set) => ({ + folderType: "none", + setFolderType: (folderType) => set(() => ({ folderType })), + parentFolder: undefined, + setParentFolder: (parentFolder) => set(() => ({ parentFolder })), + folderName: "", + setFolderName: (folderName) => set(() => ({ folderName })) +})); + +const UnMemoizedAddBox: FC = () => { + const theme = useTheme(); + + const user = useUser(); + // const addBox = useAddBox(); + + const showSnackbar = useSnackbar(); + + const setShowAddBox = useStore((state) => state.setShowAddBox); + const showAddBox = useStore((state) => state.showAddBox); + + const setFetching = useStore((state) => state.setFetching); + + const unifiedBoxes = checkedBoxesStore((state) => state.checkedBoxes); + + const { boxes, error: boxesError, findBox } = useBoxes(); + + const [error, setError] = useState(); + + const checkedBoxes = useMemo( + () => + Object.entries(unifiedBoxes) + .filter(([, checked]) => checked) + .map(([id]) => id), + [unifiedBoxes] + ); + + const folderType = addBoxStore((state) => state.folderType); + const setFolderType = addBoxStore((state) => state.setFolderType); + + const parentFolder = addBoxStore((state) => state.parentFolder); + const setParentFolder = addBoxStore((state) => state.setParentFolder); + + const folderName = addBoxStore((state) => state.folderName); + const setFolderName = addBoxStore((state) => state.setFolderName); + + const handleClose = (): void => setShowAddBox(false); + + useEffect( + () => setError(undefined), + [folderType, parentFolder, folderName, showAddBox] + ); + + useEffect(() => { + if (boxesError) setError(boxesError); + }, [boxesError]); + + useEffect(() => { + if (!showAddBox) { + setFolderType("none"); + setParentFolder(undefined); + setFolderName(""); + } + }, [showAddBox]); + + const [modalSx, scrollbarSx] = useMemo( + () => [modalStyles(theme), scrollbarStyles(theme)], + [theme] + ); + + const checkAllBoxes = (checked: boolean): void => { + if (!user) return; + }; + + const createBox = async (box: MailBox): Promise => { + // addBox(box); + + // if (!box.unifies) { + setFetching(true); + + // await fetcher + // .createBox(box.id) + // .then(() => { + // showSnackbar(`Folder '${box.name}' created`); + // setShowAddBox(false); + // }) + // .catch((error: AxiosError<{ message: string }>) => { + // const message = error.response?.data.message; + + // if (message) setError(message); + // }); + + setFetching(false); + // } + }; + + return ( + <> + + + <> + + Create a new folder + + + + Folder type + + + + {folderType != "none" && ( + setFolderName(e.target.value)} + label="Folder name" + /> + )} + + {folderType != "none" && ( + + Parent folder + + + )} + + {folderType == "unified" && boxes && ( + <> + + + Select the folders you want to be unified + + + + + + + + + + + + + + + )} + + + + {error && {error}} + + + + + ); +}; + +const AddBox = memo(UnMemoizedAddBox); + +export default AddBox; diff --git a/src/components/Boxes/Delete.tsx b/src/components/Boxes/Delete.tsx new file mode 100644 index 0000000..1c35389 --- /dev/null +++ b/src/components/Boxes/Delete.tsx @@ -0,0 +1,98 @@ +import create from "zustand"; + +import { FC, memo, useState } from "react"; + +import Alert from "@mui/material/Alert"; +import Button from "@mui/material/Button"; +import Dialog from "@mui/material/Dialog"; +import DialogActions from "@mui/material/DialogActions"; +import DialogContent from "@mui/material/DialogContent"; +import DialogContentText from "@mui/material/DialogContentText"; +import DialogTitle from "@mui/material/DialogTitle"; + +import useSnackbar from "@utils/hooks/useSnackbar"; +import useStore from "@utils/hooks/useStore"; + +interface DeleteBoxStore { + boxesToDelete: string[]; + setBoxesToDelete: (boxesToDelete: string[]) => void; +} + +export const deleteBoxStore = create((set) => ({ + boxesToDelete: [], + setBoxesToDelete: (boxesToDelete) => set({ boxesToDelete }) +})); + +const UnMemoizedDeleteBox: FC = () => { + const openSnackbar = useSnackbar(); + + const showDeleteItemsDialog = useStore( + (state) => state.showDeleteItemsDialog + ); + const setShowDeleteItemsDialog = useStore( + (state) => state.setShowDeleteItemsDialog + ); + + const setFetching = useStore((state) => state.setFetching); + + const boxesToDelete = deleteBoxStore((state) => state.boxesToDelete); + const setBoxesToDelete = deleteBoxStore((state) => state.setBoxesToDelete); + + const [error, setError] = useState(); + + const deleteItemsDialogOnClose = (): void => { + setShowDeleteItemsDialog(false); + setError(undefined); + setBoxesToDelete([]); + }; + + const deleteSelectedItems = async (): Promise => { + setFetching(true); + + // await fetcher + // .deleteBox(boxesToDelete) + // .then(() => { + // openSnackbar(`Folder(s) '${boxesToDelete.join("', '")}' deleted`); + + // deleteItemsDialogOnClose(); + // setBoxesToDelete([]); + // }) + // .catch((error: AxiosError) => { + // const errorMessage = error.response?.data.message; + + // if (errorMessage) setError(errorMessage); + // }); + + setFetching(false); + }; + + return ( +

+ + Are you sure you wish to delete '{boxesToDelete.join("', '")} + '? + + + + Every email in the selected folders will be deleted! + + {error && Error: {error}} + + + + + + + ); +}; + +const DeleteBox = memo(UnMemoizedDeleteBox); + +export default DeleteBox; diff --git a/src/components/Boxes/FolderTree.tsx b/src/components/Boxes/FolderTree.tsx new file mode 100644 index 0000000..853daf7 --- /dev/null +++ b/src/components/Boxes/FolderTree.tsx @@ -0,0 +1,211 @@ +import { StoreApi, UseBoundStore, useStore } from "zustand"; + +import { + FC, + memo, + useMemo, + useState, + createContext, + useContext, + MouseEvent +} from "react"; + +import Badge from "@mui/material/Badge"; +import Box from "@mui/material/Box"; +import Checkbox from "@mui/material/Checkbox"; +import Collapse from "@mui/material/Collapse"; +import IconButton from "@mui/material/IconButton"; +import List from "@mui/material/List"; +import MUIListItem from "@mui/material/ListItem"; +import ListItemButton from "@mui/material/ListItemButton"; +import ListItemIcon from "@mui/material/ListItemIcon"; +import ListItemText from "@mui/material/ListItemText"; +import ListSubheader from "@mui/material/ListSubheader"; +import Typography from "@mui/material/Typography"; + +import ExpandLessIcon from "@mui/icons-material/ExpandLess"; +import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; +import FolderIcon from "@mui/icons-material/Folder"; + +import MailBox from "@interfaces/box"; + +import useSelectedBox from "@utils/hooks/useSelectedBox"; +import useTheme from "@utils/hooks/useTheme"; + +export interface CheckedBoxesStore { + checkedBoxes: Record; + setChecked: (id: string, checked: boolean) => void; +} + +export const CheckedBoxesContext = createContext +> | null>(null); + +export interface FolderTreeProps { + onClick?: (box: MailBox, e: MouseEvent) => void; + onContextMenu?: (box: MailBox, e: MouseEvent) => void; + showCheckBox: boolean; +} + +const UnMemoizedFolderTree: FC< + { + boxes: MailBox[]; + title?: string; + } & FolderTreeProps +> = ({ boxes, title, ...props }) => { + const { box: selectedBox } = useSelectedBox(); + + return ( + + {title} + + ) : null + } + > + {boxes.map((box) => ( + + ))} + + ); +}; + +const FolderTree = memo(UnMemoizedFolderTree); + +const UnMemoizedListItem: FC< + { + box: MailBox; + isSelectedBox: boolean; + } & FolderTreeProps +> = ({ box, isSelectedBox, showCheckBox, onClick, onContextMenu }) => { + const store = useContext(CheckedBoxesContext); + + if (!store) throw new Error("No context provided"); + + const checked = + useStore(store, (state) => state.checkedBoxes[box.id]) ?? false; + const setChecked = useStore(store, (state) => state.setChecked); + + const [isOpen, setOpen] = useState(true); + + const theme = useTheme(); + + const indent = useMemo( + () => + theme.spacing( + (showCheckBox ? 0 : 2) + box.id.split(box.delimiter ?? "").length + ), + [theme.spacing, box.id, showCheckBox] + ); + + const handleClick = box.selectable + ? onClick && !showCheckBox + ? (e: MouseEvent) => { + onClick(box, e); + } + : () => setChecked(box.id, !checked) + : undefined; + + const handleContextMenu = (e: MouseEvent): void => { + if (onContextMenu && !showCheckBox) onContextMenu(box, e); + }; + + const badge = + box.counts && box.counts.unseen != 0 ? box.counts.unseen : undefined; + + return ( + <> + {box.children && box.children.length != 0 && ( + <> + + + {showCheckBox && } + + + + + + + {box.name} + + + setOpen((state) => !state)}> + {isOpen ? : } + + + + + + + )} + {(!box.children || (box.children && box.children.length == 0)) && ( + + + + {showCheckBox && } + + + + + + + {box.name} + + + + + )} + + ); +}; + +const Icon: FC<{ + icon?: JSX.Element; + badge?: number; +}> = ({ icon, badge }) => { + if (badge && badge != 0) + return ( + + {icon ?? } + + ); + + return icon ?? ; +}; + +const ListItem = memo(UnMemoizedListItem); + +export default FolderTree; diff --git a/src/components/Boxes/List.tsx b/src/components/Boxes/List.tsx new file mode 100644 index 0000000..62266ee --- /dev/null +++ b/src/components/Boxes/List.tsx @@ -0,0 +1,313 @@ +import create from "zustand"; + +import { useEffect, useMemo, memo, FC, useState, MouseEvent } from "react"; + +import Divider from "@mui/material/Divider"; +import IconButton from "@mui/material/IconButton"; +import ListItemIcon from "@mui/material/ListItemIcon"; +import ListItemText from "@mui/material/ListItemText"; +import Menu from "@mui/material/Menu"; +import MenuItem from "@mui/material/MenuItem"; +import Stack from "@mui/material/Stack"; +import Tooltip from "@mui/material/Tooltip"; + +import AddIcon from "@mui/icons-material/Add"; +import CheckBoxIcon from "@mui/icons-material/CheckBoxOutlineBlank"; +import CloseIcon from "@mui/icons-material/Close"; +import DeleteIcon from "@mui/icons-material/Delete"; +import MarkAsReadIcon from "@mui/icons-material/DoneAll"; +import RenameIcon from "@mui/icons-material/TextFields"; + +import MailBox from "@interfaces/box"; + +import findBoxInPrimaryBoxesList from "@utils/findBoxInPrimaryBoxesList"; +import useAddBox from "@utils/hooks/useAddBox"; +import useBoxes from "@utils/hooks/useBoxes"; +import useDeleteBox from "@utils/hooks/useDeleteBox"; +import useRenameBox from "@utils/hooks/useRenameBox"; +import useSelectedBox from "@utils/hooks/useSelectedBox"; +import useSnackbar from "@utils/hooks/useSnackbar"; +import useStore from "@utils/hooks/useStore"; + +import FolderTree, { + FolderTreeProps, + CheckedBoxesContext, + CheckedBoxesStore +} from "@components/Boxes/FolderTree"; + +export const checkedBoxesStore = create((set) => ({ + checkedBoxes: {}, + setChecked: (id, checked) => + set((state) => ({ checkedBoxes: { ...state.checkedBoxes, [id]: checked } })) +})); + +const UnMemoizedBoxContextMenu: FC<{ + contextMenuAnchorEl: HTMLElement | null; + contextMenuCurrentBox?: MailBox; + handleContextMenuClose: () => void; +}> = ({ + contextMenuAnchorEl, + handleContextMenuClose, + contextMenuCurrentBox +}) => { + const showAddBox = useAddBox(); + const showRenameBox = useRenameBox(); + const showDeleteBox = useDeleteBox(); + + const menuItems = useMemo( + () => [ + { + name: "Create sub folder", + icon: , + action: () => { + handleContextMenuClose(); + + if (!contextMenuCurrentBox) return; + + showAddBox({ parentFolder: contextMenuCurrentBox }); + } + }, + { + name: "Rename", + icon: , + action: () => { + handleContextMenuClose(); + + if (!contextMenuCurrentBox) return; + showRenameBox(contextMenuCurrentBox); + } + }, + { + name: "Delete", + icon: , + action: () => { + handleContextMenuClose(); + + if (!contextMenuCurrentBox) return; + showDeleteBox([contextMenuCurrentBox.id]); + } + } + ], + [showAddBox, showRenameBox, showDeleteBox] + ); + + return ( + + {menuItems.map((item) => ( + + {item.icon} + {item.name} + + ))} + + ); +}; + +const BoxContextMenu = memo(UnMemoizedBoxContextMenu); + +const UnMemoizedActionBar: FC<{ + showSelector: boolean; + setShowSelector: (show: boolean) => void; +}> = ({ showSelector, setShowSelector }) => { + const showDeleteBox = useDeleteBox(); + const setShowAddBox = useStore((state) => state.setShowAddBox); + + const checkedBoxes = checkedBoxesStore((state) => state.checkedBoxes); + const setChecked = checkedBoxesStore((state) => state.setChecked); + + const selectedBoxesArray = useMemo( + () => + Object.entries(checkedBoxes) + .filter(([, checked]) => checked) + .map(([id]) => id), + [checkedBoxes] + ); + + const unCheckAllSelectedBoxes = (): void => { + selectedBoxesArray.forEach((deleted) => setChecked(deleted, false)); + }; + + useEffect(() => { + if (!showSelector) unCheckAllSelectedBoxes(); + }, [showSelector]); + + return ( + + {!showSelector && ( + <> + setShowSelector(true)}> + + + + + setShowAddBox(true)}> + + + + + + )} + {showSelector && ( + <> + setShowSelector(false)}> + + + + + { + if (selectedBoxesArray.length > 0) { + showDeleteBox(selectedBoxesArray); + } + }} + > + + + + + setShowSelector(false)}> + + + + + + )} + + ); +}; + +const ActionBar = memo(UnMemoizedActionBar); + +const UnMemoizedBoxesList: FC<{ clickOnBox?: (e: MouseEvent) => void }> = ({ + clickOnBox +}) => { + const { + box: selectedBox, + error: selectedBoxError, + setSelectedBox + } = useSelectedBox(); + + const { boxes, error: boxesError } = useBoxes(); + + const [showSelector, setShowSelector] = useState(false); + + const showSnackbar = useSnackbar(); + + useEffect(() => { + const errorVariant = "error"; + if (selectedBoxError !== null) showSnackbar(selectedBoxError, errorVariant); + else if (boxesError !== null) showSnackbar(boxesError, errorVariant); + }, [boxesError, selectedBoxError]); + + const [contextMenuAnchorEl, setContextMenuAnchorEl] = + useState(null); + + const [contextMenuCurrentBox, setContextMenuCurrentBox] = useState(); + + const handleContextMenuClose = useMemo( + () => (): void => { + setContextMenuAnchorEl(null); + }, + [setContextMenuAnchorEl] + ); + + useEffect(() => { + if (selectedBox) { + const name = selectedBox.name ?? selectedBox.id; + + document.title = `${import.meta.env.VITE_APP_NAME}${ + name ? ` - ${name}` : "" + }`; + } + }, [selectedBox]); + + const folderTreeProps = useMemo( + (): FolderTreeProps => ({ + showCheckBox: showSelector, + onClick: (box, e) => { + setSelectedBox(box.id); + if (clickOnBox) clickOnBox(e); + }, + onContextMenu: (box: MailBox, e: MouseEvent): void => { + e.preventDefault(); + setContextMenuAnchorEl(e.currentTarget); + setContextMenuCurrentBox(box); + } + }), + [showSelector, setSelectedBox] + ); + + // Find all of the primary boxes and sort them alphabetically + const primaryBoxes: MailBox[] | undefined = useMemo( + () => + boxes + ?.filter((box) => !!findBoxInPrimaryBoxesList(box.id)) + .map((box) => { + const found = findBoxInPrimaryBoxesList(box.id); + + return { ...box, ...found }; + }) + .sort((a, b) => a.id.localeCompare(b.id)), + [boxes] + ); + + // Find all of the other boxes and sort them alphabetically + const otherBoxes: MailBox[] | undefined = useMemo( + () => + boxes + ?.filter((box) => !findBoxInPrimaryBoxesList(box.id)) + .sort((a, b) => a.id.localeCompare(b.id)), + [boxes] + ); + + return ( + <> + + + + {(primaryBoxes || otherBoxes) && } + {primaryBoxes && ( + + )} + + {primaryBoxes && otherBoxes && otherBoxes.length != 0 && } + {otherBoxes && otherBoxes.length != 0 && ( + + )} + + + ); +}; + +const BoxesList = memo(UnMemoizedBoxesList); + +export default BoxesList; diff --git a/src/components/Boxes/Rename.tsx b/src/components/Boxes/Rename.tsx new file mode 100644 index 0000000..a8df32c --- /dev/null +++ b/src/components/Boxes/Rename.tsx @@ -0,0 +1,122 @@ +import create from "zustand"; + +import { FC, memo, useState } from "react"; + +import Alert from "@mui/material/Alert"; +import Button from "@mui/material/Button"; +import Dialog from "@mui/material/Dialog"; +import DialogActions from "@mui/material/DialogActions"; +import DialogContent from "@mui/material/DialogContent"; +import DialogTitle from "@mui/material/DialogTitle"; +import TextField from "@mui/material/TextField"; + +import Box from "@interfaces/box"; + +import useSnackbar from "@utils/hooks/useSnackbar"; +import useStore from "@utils/hooks/useStore"; + +interface RenameBoxStore { + boxToRename: Box | undefined; + setBoxToRename: (boxToRename: Box) => void; +} + +export const renameBoxStore = create((set) => ({ + boxToRename: undefined, + setBoxToRename: (boxToRename: Box) => set({ boxToRename }) +})); + +const UnMemoizedRenameBox: FC = () => { + const showRenameBoxDialog = useStore((state) => state.showRenameBoxDialog); + const setShowRenameBoxDialog = useStore( + (state) => state.setShowRenameBoxDialog + ); + + const setFetching = useStore((state) => state.setFetching); + + const boxToRename = renameBoxStore((state) => state.boxToRename); + + const openSnackbar = useSnackbar(); + + const [newName, setNewName] = useState(""); + + const [error, setError] = useState(); + + const handleClose = (): void => { + setShowRenameBoxDialog(false); + setNewName(""); + setError(undefined); + }; + + const renameBox = async (): Promise => { + if (!boxToRename || !newName) return; + + const prefix = boxToRename.delimiter + ? boxToRename.id.split(boxToRename.delimiter) + : [boxToRename.id]; + + prefix.pop(); + + prefix.push(newName); + + const newBoxID = boxToRename.delimiter + ? prefix.join(boxToRename.delimiter) + : prefix[0]; + + setFetching(true); + + // await fetcher + // .renameBox(boxToRename.id, newBoxID) + // .then(() => { + // openSnackbar(`Folder '${boxToRename.name}' renamed to '${newName}'`); + + // // const newBox: Box = { ...boxToRename, id: newBoxID, name: newName }; + + // // modifyBox(boxToRename.id, newBox); + + // handleClose(); + // }) + // .catch((e: AxiosError) => { + // const errorMessage = e.response?.data.message; + + // if (errorMessage) setError(errorMessage); + // }); + + setFetching(false); + }; + + return ( + +
{ + e.preventDefault(); + renameBox(); + }} + > + Rename folder '{boxToRename?.name}' + + setNewName(e.target.value)} + sx={{ mb: 2 }} + /> + {error && Error: {error}} + + + + + +
+
+ ); +}; + +const RenameBox = memo(UnMemoizedRenameBox); + +export default RenameBox; diff --git a/src/components/Changelog.tsx b/src/components/Changelog.tsx new file mode 100644 index 0000000..f135bed --- /dev/null +++ b/src/components/Changelog.tsx @@ -0,0 +1,57 @@ +import { FC, memo } from "react"; +import ReactMarkdown from "react-markdown"; +import { useQuery } from "react-query"; + +import Box from "@mui/material/Box"; +import CircularProgress from "@mui/material/CircularProgress"; +import Modal from "@mui/material/Modal"; +import Typography from "@mui/material/Typography"; + +import modalStyles from "@styles/modal"; + +import useApiClient from "@utils/hooks/useApiClient"; +import useStore from "@utils/hooks/useStore"; +import useTheme from "@utils/hooks/useTheme"; +import { createResultFromUnknown, errorToString } from "@utils/parseError"; + +const UnMemoizedChangelog: FC = () => { + const theme = useTheme(); + + const showChangelog = useStore((state) => state.showChangelog); + const setShowChangelog = useStore((state) => state.setShowChangelog); + + const apiClient = useApiClient(); + + const { data, error, isFetching } = useQuery( + ["changelog"], + async () => { + const result = await apiClient + .getChangelog() + .catch(createResultFromUnknown); + + if (result.ok) { + return result.data; + } else { + throw errorToString(result.error); + } + }, + { enabled: showChangelog } + ); + + return ( + setShowChangelog(false)} open={showChangelog}> + + Changelog + {error !== null && {error}} + {isFetching && } + {data && {data}} + + + ); +}; + +const Changelog = memo(UnMemoizedChangelog); + +export default Changelog; diff --git a/src/components/DarkModeSwitch.tsx b/src/components/DarkModeSwitch.tsx new file mode 100644 index 0000000..4bce34d --- /dev/null +++ b/src/components/DarkModeSwitch.tsx @@ -0,0 +1,23 @@ +import useLocalStorageState from "use-local-storage-state"; + +import { ChangeEvent, FC } from "react"; + +import Switch from "@mui/material/Switch"; + +const DarkModeSwitch: FC = () => { + const [darkMode, setDarkMode] = useLocalStorageState("darkMode"); + + const handleChange = (e: ChangeEvent): void => { + setDarkMode(e.currentTarget.checked); + }; + + return ( + + ); +}; + +export default DarkModeSwitch; diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx new file mode 100644 index 0000000..306e578 --- /dev/null +++ b/src/components/Layout.tsx @@ -0,0 +1,23 @@ +import { FC, ReactNode } from "react"; + +import About from "@components/About"; +import Changelog from "@components/Changelog"; +import MessageComposer from "@components/Message/Composer"; +import Navbar from "@components/Navbar"; + +const Layout: FC<{ withNavbar?: boolean; children?: ReactNode }> = ({ + children, + withNavbar +}) => { + return ( + <> + + + {withNavbar && } + + {children} + + ); +}; + +export default Layout; diff --git a/src/components/Login/Form.tsx b/src/components/Login/Form.tsx new file mode 100644 index 0000000..ee03d49 --- /dev/null +++ b/src/components/Login/Form.tsx @@ -0,0 +1,637 @@ +import React, { + useEffect, + useState, + FC, + memo, + FormEvent, + useMemo, + FormEventHandler, + useCallback +} from "react"; + +import { + incomingMailServerTypeList, + Credentials, + outgoingMailServerTypeList, + ServerType, + MailServerType, + ConnectionSecurity, + IncomingMailServerType, + OutgoingMailServerType +} from "@dust-mail/structures"; + +import Alert from "@mui/material/Alert"; +import AlertTitle from "@mui/material/AlertTitle"; +import Box from "@mui/material/Box"; +import Button from "@mui/material/Button"; +import FormControl from "@mui/material/FormControl"; +import Grid from "@mui/material/Grid"; +import IconButton from "@mui/material/IconButton"; +import InputAdornment from "@mui/material/InputAdornment"; +import InputLabel from "@mui/material/InputLabel"; +import MenuItem from "@mui/material/MenuItem"; +import Modal from "@mui/material/Modal"; +import OutlinedInput from "@mui/material/OutlinedInput"; +import Select from "@mui/material/Select"; +import Stack from "@mui/material/Stack"; +import Tab from "@mui/material/Tab"; +import Tabs from "@mui/material/Tabs"; +import TextField from "@mui/material/TextField"; +import Tooltip from "@mui/material/Tooltip"; +import Typography from "@mui/material/Typography"; + +import VisibilityIcon from "@mui/icons-material/Visibility"; +import VisibilityOffIcon from "@mui/icons-material/VisibilityOff"; + +import modalStyles from "@styles/modal"; +import scrollbarStyles from "@styles/scrollbar"; + +import { useMailLogin } from "@utils/hooks/useLogin"; +import useMailClient from "@utils/hooks/useMailClient"; +import useMultiServerLoginStore, { + defaultConfigs, + MultiServerLoginOptions +} from "@utils/hooks/useMultiServerLoginStore"; +import useOAuth2Client from "@utils/hooks/useOAuth2Client"; +import useStore from "@utils/hooks/useStore"; +import useTheme from "@utils/hooks/useTheme"; +import parseEmail from "@utils/parseEmail"; +import { + createErrorFromUnknown, + errorIsOfErrorKind, + errorToString +} from "@utils/parseError"; + +const CredentialsForm: FC<{ + setError: (error?: string) => void; + identifier: string; + password: string; + setPassword: (password: string) => void; + username: string; + setUsername: (username: string) => void; +}> = ({ + identifier, + setError, + setPassword, + password, + setUsername, + username +}) => { + const [showPassword, setShowPassword] = useState(false); + + return ( + <> + { + setError(undefined); + setUsername(e.currentTarget.value); + }} + id={"username-" + identifier} + value={username} + label="Username" + variant="outlined" + type="email" + /> + + + Password + { + setError(undefined); + setPassword(e.currentTarget.value); + }} + endAdornment={ + + + setShowPassword((state) => !state)} + onMouseDown={() => setShowPassword((state) => !state)} + edge="end" + > + {showPassword ? : } + + + + } + value={password} + id={"password-" + identifier} + label="Password" + type={showPassword ? "text" : "password"} + /> + + + ); +}; + +const UnMemoizedServerConfigColumn: FC<{ + type: ServerType; + selectedMailServerType: MailServerType; + security: ConnectionSecurity; + port: number; + server: string; + password: string; + username: string; +}> = ({ + type, + selectedMailServerType, + port, + security, + server, + username, + password +}) => { + const setSetting = useMultiServerLoginStore( + (state) => state.setLoginOptionsProperty + ); + + const setSelectedMailServerType = useMultiServerLoginStore( + (state) => state.setSelectedMailServerType + ); + + const setError = useMultiServerLoginStore((state) => state.setError); + + useEffect(() => setError(undefined), [security, port, server]); + + const mailServerTypeList = useMemo(() => { + switch (type) { + case "incoming": + return incomingMailServerTypeList; + + case "outgoing": + return outgoingMailServerTypeList; + } + }, []); + + return ( + + + { + setSelectedMailServerType(type, newValue); + }} + centered + > + {mailServerTypeList.map((item) => ( + + ))} + + + setSetting(type, selectedMailServerType)("domain")( + e.currentTarget.value + ) + } + value={server} + label="Server url/ip" + variant="outlined" + type="text" + /> + + + Security + + + + + setSetting(type, selectedMailServerType)("port")( + parseInt(e.currentTarget.value) + ) + } + value={port} + label="Port" + helperText={`Default: ${ + type == "incoming" + ? security == "StartTls" || security == "Tls" + ? 993 + : 143 + : security == "StartTls" + ? 587 + : security == "Tls" + ? 465 + : 25 + }`} + variant="outlined" + type="number" + /> + + + + + ); +}; + +const ServerConfigColumn = memo(UnMemoizedServerConfigColumn); + +const createCredentials = ( + incomingConfig: MultiServerLoginOptions, + incomingType: IncomingMailServerType +): Credentials => { + const { + username: incomingUsername, + password: incomingPassword, + ...incoming + } = incomingConfig; + + const options: Credentials = { + incoming: { + ...incoming, + loginType: { + passwordBased: { + password: incomingPassword, + username: incomingUsername + } + } + }, + incomingType + }; + + return options; +}; + +const LoginOptionsMenu: FC = () => { + const theme = useTheme(); + + const [modalSx, scrollBarSx] = useMemo( + () => [modalStyles(theme), scrollbarStyles(theme)], + [theme] + ); + + const login = useMailLogin(); + + const isOpen = useMultiServerLoginStore((state) => state.showMenu); + const setOpen = useMultiServerLoginStore((state) => state.setShowMenu); + + const setError = useMultiServerLoginStore((state) => state.setError); + const error = useMultiServerLoginStore((state) => state.error); + + const fetching = useStore((state) => state.fetching); + + const selectedMailServerTypes = useMultiServerLoginStore( + (state) => state.selectedMailServerType + ); + + const provider = useMultiServerLoginStore((state) => state.provider); + + const incomingConfig = useMultiServerLoginStore( + (state) => state.incoming[selectedMailServerTypes.incoming] + ); + const outgoingConfig = useMultiServerLoginStore( + (state) => state.outgoing[selectedMailServerTypes.outgoing] + ); + + const resetToDefaults = useMultiServerLoginStore( + (state) => state.resetToDefaults + ); + + const onClose = useCallback(() => { + resetToDefaults(); + setOpen(false); + }, [resetToDefaults, setOpen]); + + const missingFields = useMemo(() => { + return !incomingConfig.username || !incomingConfig.password; + }, [incomingConfig.username, incomingConfig.password]); + + const onSubmit: FormEventHandler = async (e): Promise => { + e.preventDefault(); + + if (missingFields) { + setError("Missing required fields"); + + return; + } + + const credentials = createCredentials( + incomingConfig, + selectedMailServerTypes.incoming + ); + + await login(credentials) + .then((result) => { + if (result.ok) { + onClose(); + } else { + const message = errorToString(result.error); + + setError(message); + } + }) + .catch(createErrorFromUnknown); + }; + + return ( + <> + + +
+ + Login to {provider ?? "an unknown mail server"} + + + You can customize which mail servers that you want to connect to + before actually logging in. + + + Don't know what any of this means? For most larger mail + providers such as Google or Microsoft this will information will + already be correct and you can just click on login. + +
+ + + + + + +
+ + {error && ( + + Error + {error} + + )} + + +
+
+
+ + ); +}; + +const LoginForm: FC<{ + children: React.ReactNode; + trailing?: React.ReactNode; +}> = ({ children, trailing }) => { + const fetching = useStore((state) => state.fetching); + const setFetching = useStore((state) => state.setFetching); + + const [username, setUsername] = useState(""); + const [password, setPassword] = useState(""); + const [displayName, setDisplayName] = useState(""); + + const setLoginOptions = useMultiServerLoginStore( + (state) => state.setLoginOptions + ); + + const setProvider = useMultiServerLoginStore((state) => state.setProvider); + + const setShowLoginOptionsMenu = useMultiServerLoginStore( + (state) => state.setShowMenu + ); + + const setMultiServerLoginError = useMultiServerLoginStore( + (state) => state.setError + ); + + const [error, setError] = useState(); + + const mailClient = useMailClient(); + const oauthClient = useOAuth2Client(); + + useEffect(() => setError(undefined), [username, password]); + + useEffect(() => { + document.title = `${import.meta.env.VITE_APP_NAME} - Login`; + }, []); + + const missingFields = !username || !password; + + /** + * Runs when the form should be submitted to the server + */ + const onSubmit = async (e?: FormEvent): Promise => { + if (e) e.preventDefault(); + + // Reject the form if there any fields empty + if (missingFields) { + setError("Missing required fields"); + return; + } + + setFetching(true); + + const configResult = await mailClient + .detectConfig(username) + .catch((error: unknown) => setError(JSON.stringify(error))); + + setFetching(false); + + const emailAddressResult = parseEmail(username); + + if (!emailAddressResult.ok) { + setError(errorToString(emailAddressResult.error)); + return; + } + + const mailDomain = `mail.${emailAddressResult.data.domain}`; + + incomingMailServerTypeList.forEach((loginType) => + setLoginOptions("incoming", loginType, { + ...defaultConfigs["incoming"][loginType], + domain: mailDomain, + username, + password + }) + ); + + outgoingMailServerTypeList.forEach((loginType) => + setLoginOptions("outgoing", loginType, { + ...defaultConfigs["outgoing"][loginType], + domain: mailDomain, + username, + password + }) + ); + + if (!configResult) return; + + if (!configResult.ok) { + if (errorIsOfErrorKind(configResult.error, "ConfigNotFound")) { + setMultiServerLoginError( + "Could not automagically detect your login servers, please fill the information in manually or try again." + ); + + setShowLoginOptionsMenu(true); + } else { + const message = errorToString(configResult.error); + + setError(message); + } + + return; + } + + const config = configResult.data; + + oauthClient.getGrant( + config.displayName, + config.oauth2?.oauthUrl ?? "", + config.oauth2?.tokenUrl ?? "", + config.oauth2?.scopes ?? [] + ); + + if ( + typeof config.type != "string" && + config.type.multiServer?.incoming && + config.type.multiServer.outgoing + ) { + const incomingConfigs: (MultiServerLoginOptions & { + type: IncomingMailServerType; + })[] = config.type.multiServer.incoming.map( + ({ authType, ...config }) => ({ + ...config, + loginType: authType, + username, + password + }) + ); + + const outgoingConfigs: (MultiServerLoginOptions & { + type: OutgoingMailServerType; + })[] = config.type.multiServer.outgoing.map( + ({ authType, ...config }) => ({ + ...config, + loginType: authType, + username, + password + }) + ); + + setProvider(config.displayName); + + incomingConfigs.forEach(({ type, ...incomingConfig }) => + setLoginOptions("incoming", type, incomingConfig) + ); + + outgoingConfigs.forEach(({ type, ...outgoingConfig }) => + setLoginOptions("outgoing", type, outgoingConfig) + ); + + setShowLoginOptionsMenu(true); + } + }; + + return ( + +
+ + {children} + + { + setError(undefined); + setDisplayName(e.currentTarget.value); + }} + id="display-name" + value={displayName} + label="Display name" + placeholder="The name shown when you send a message" + variant="outlined" + type="text" + /> + + + + + {error && ( + + Error + {error} + + )} + +
+ {trailing} + +
+ ); +}; + +export default LoginForm; diff --git a/src/components/Login/Settings.tsx b/src/components/Login/Settings.tsx new file mode 100644 index 0000000..02650ad --- /dev/null +++ b/src/components/Login/Settings.tsx @@ -0,0 +1,223 @@ +import z from "zod"; + +import { repository } from "../../../package.json"; + +import { FC, useCallback, useEffect } from "react"; +import { useState } from "react"; + +import { AppError, ApiSettings } from "@dust-mail/structures"; + +import Alert from "@mui/material/Alert"; +import Box from "@mui/material/Box"; +import Button from "@mui/material/Button"; +import CircularProgress from "@mui/material/CircularProgress"; +import FormControl from "@mui/material/FormControl"; +import IconButton from "@mui/material/IconButton"; +import InputAdornment from "@mui/material/InputAdornment"; +import InputLabel from "@mui/material/InputLabel"; +import Link from "@mui/material/Link"; +import Modal from "@mui/material/Modal"; +import OutlinedInput from "@mui/material/OutlinedInput"; +import Stack from "@mui/material/Stack"; +import TextField from "@mui/material/TextField"; +import Typography from "@mui/material/Typography"; + +import CheckIcon from "@mui/icons-material/Check"; +import ErrorIcon from "@mui/icons-material/Error"; +import RefreshIcon from "@mui/icons-material/Refresh"; +import SettingsIcon from "@mui/icons-material/Settings"; + +import { Result } from "@interfaces/result"; + +import modalStyles from "@styles/modal"; + +import useApiClient from "@utils/hooks/useApiClient"; +import useSettings from "@utils/hooks/useSettings"; +import useTheme from "@utils/hooks/useTheme"; +import { createResultFromUnknown, errorToString } from "@utils/parseError"; + +const LoginSettingsMenu: FC = () => { + const theme = useTheme(); + + const [settings, setSetting] = useSettings(); + + const [isOpen, setOpen] = useState(false); + const [apiUrl, setApiUrl] = useState(settings.httpServerUrl ?? ""); + const [password, setPassword] = useState(""); + + const apiClient = useApiClient(); + + const [connectError, setConnectError] = useState(null); + const [serverSettings, setServerSettings] = useState( + null + ); + const [fetching, setFetching] = useState(false); + + const [loginError, setLoginError] = useState(null); + + const fetchApiSettings = useCallback( + async (baseUrl: string): Promise => { + setFetching(true); + setConnectError(null); + setServerSettings(null); + + const response = await apiClient + .getSettings(baseUrl) + .catch(createResultFromUnknown); + + setFetching(false); + + if (response.ok) { + setServerSettings(response.data); + } else { + setConnectError(response.error); + } + }, + [] + ); + + const loginToApiServer = useCallback( + async ( + baseUrl?: string, + password?: string, + username?: string + ): Promise> => + await apiClient + .login(baseUrl, password, username) + .catch(createResultFromUnknown), + [] + ); + + useEffect(() => { + if (isOpen) fetchApiSettings(apiUrl); + }, [isOpen]); + + useEffect(() => { + setLoginError(null); + }, [isOpen, password, apiUrl]); + + return ( + <> + + setOpen(true)} + aria-label="Open custom server settings" + > + + + + {isOpen && ( + setOpen(false)} open={isOpen}> + + + + Set custom {import.meta.env.VITE_APP_NAME} backend server + + + + + Only update this value if you know what you are doing! + + + + For more information visit{" "} + + the Github repo + + . + + + + + + + Custom server url/path + + + setApiUrl(z.string().parse(e.currentTarget.value)) + } + value={apiUrl} + id="custom-server" + label="Custom server url/path" + type="text" + endAdornment={ + + {connectError !== null && } + {serverSettings !== null && ( + + )} + {fetching && } + + } + /> + + fetchApiSettings(apiUrl)}> + + + + {serverSettings?.authorization && ( + + + setPassword(z.string().parse(e.currentTarget.value)) + } + value={password} + id="password" + required + label="Password for server" + variant="outlined" + type="password" + /> + + )} + + {loginError !== null && ( + {errorToString(loginError)} + )} + + + + + + + + )} + + ); +}; + +export default LoginSettingsMenu; diff --git a/src/components/Message/ActionButton.tsx b/src/components/Message/ActionButton.tsx new file mode 100644 index 0000000..c2261a1 --- /dev/null +++ b/src/components/Message/ActionButton.tsx @@ -0,0 +1,41 @@ +import { FC } from "react"; + +import SpeedDial from "@mui/material/SpeedDial"; +import SpeedDialAction from "@mui/material/SpeedDialAction"; +import SpeedDialIcon from "@mui/material/SpeedDialIcon"; + +import useMessageActions from "@utils/hooks/useMessageActions"; +import useSelectedMessage from "@utils/hooks/useSelectedMessage"; + +const MessageActionButton: FC = () => { + const { selectedMessage } = useSelectedMessage(); + + const actions = useMessageActions(); + + if (selectedMessage) + return ( + } + > + {actions.reverse().map((action) => ( + action.handler(selectedMessage)} + key={action.name} + icon={action.icon} + tooltipTitle={action.name} + /> + ))} + + ); + + return <>; +}; + +export default MessageActionButton; diff --git a/src/components/Message/Composer.tsx b/src/components/Message/Composer.tsx new file mode 100644 index 0000000..94639da --- /dev/null +++ b/src/components/Message/Composer.tsx @@ -0,0 +1,265 @@ +/* eslint-disable */ +import useLocalStorageState from "use-local-storage-state"; + +import { Descendant, createEditor, Transforms, Text, Editor } from "slate"; +import { Editable, Slate, withReact } from "slate-react"; + +import { + useCallback, + useEffect, + useMemo, + useState, + FC, + ReactNode, + KeyboardEvent +} from "react"; +import { useLocation, useNavigate, useSearchParams } from "react-router-dom"; + +import Box from "@mui/material/Box"; +import Modal from "@mui/material/Modal"; +import Stack from "@mui/material/Stack"; +import TextField from "@mui/material/TextField"; +import Typography from "@mui/material/Typography"; + +import { CustomElement, CustomText } from "@interfaces/slate"; + +import modalStyles from "@styles/modal"; + +import useStore from "@utils/hooks/useStore"; +import useTheme from "@utils/hooks/useTheme"; + +const isBoldMarkActive = (editor: Editor) => { + const [match] = Editor.nodes(editor, { + match: (n: any) => n.bold === true, + universal: true + }); + + return !!match; +}; + +const isCodeBlockActive = (editor: Editor) => { + const [match] = Editor.nodes(editor, { + match: (n: any) => n.type === "code" + }); + + return !!match; +}; + +const toggleBoldMark = (editor: Editor) => { + const isActive = isBoldMarkActive(editor); + + Transforms.setNodes( + editor, + { bold: !isActive }, + { match: (n) => Text.isText(n), split: true } + ); +}; + +const toggleCodeBlock = (editor: Editor) => { + const isActive = isCodeBlockActive(editor); + + Transforms.setNodes( + editor, + { type: isActive ? "paragraph" : "code" }, + { match: (n) => Editor.isBlock(editor, n) } + ); +}; + +const isMarkActive = ( + editor: Editor, + format: keyof Omit +) => { + const marks = Editor.marks(editor); + return marks ? marks[format] === true : false; +}; + +const toggleMark = (editor: Editor, format: keyof Omit) => { + const isActive = isMarkActive(editor, format); + + if (isActive) { + Editor.removeMark(editor, format); + } else { + Editor.addMark(editor, format, true); + } +}; + +const CodeElement: FC<{ + attributes: Record; + children?: ReactNode; +}> = (props) => ( +
+		{props.children}
+	
+); + +const DefaultElement: FC<{ + attributes: Record; + children?: ReactNode; +}> = (props) =>

{props.children}

; + +const Leaf: FC<{ + leaf: Omit; + attributes: Record; + children?: ReactNode; +}> = (props) => ( + + {props.children} + +); + +// const TextEditor: FC<{ initialValue?: string }> = ({ initialValue }) => { +// const [value, setValue] = useState([ +// { +// type: "paragraph", +// children: [{ text: initialValue ?? "" }] +// } +// ]); + +// const renderElement = useCallback< +// (props: { +// element: CustomElement; +// attributes: Record; +// children: ReactNode; +// }) => JSX.Element +// >((props) => { +// switch (props.element.type) { +// case "code": +// return ; +// default: +// return ; +// } +// }, []); + +// const renderLeaf = useCallback< +// (props: { +// leaf: CustomText; +// children?: ReactNode; +// attributes: Record; +// }) => JSX.Element +// >((props) => { +// return ; +// }, []); + +// const editor = useMemo(() => withReact(createEditor()), []); + +// return ( +// setValue(value)}> +// { +// if (!event.ctrlKey) { +// return; +// } + +// switch (event.key) { +// // When "`" is pressed, keep our existing code block logic. +// case "`": { +// event.preventDefault(); + +// toggleCodeBlock(editor); + +// break; +// } + +// // When "B" is pressed, bold the text in the selection. +// case "b": { +// event.preventDefault(); + +// toggleBoldMark(editor); + +// break; +// } +// } +// }} +// /> +// +// ); +// }; + +const MessageComposer: FC = () => { + const theme = useTheme(); + + const location = useLocation(); + const navigate = useNavigate(); + let [searchParams] = useSearchParams(); + + const [to, setTo] = useState(); + const [body, setBody] = useState(undefined); + const [subject, setSubject] = useState(); + + const showMessageComposer = + useStore((state) => state.showMessageComposer) || + location.pathname == "/dashboard/compose"; + + const setShowMessageComposer = useStore( + (state) => state.setShowMessageComposer + ); + + useEffect(() => { + if (showMessageComposer) { + document.title = `${import.meta.env.VITE_APP_NAME} - Compose`; + } + }, [showMessageComposer]); + + if (!showMessageComposer) return <>; + + const uriParam = searchParams.get("uri"); + + useEffect(() => { + if (uriParam) { + try { + const uri = new URL(uriParam); + + if (uri.searchParams.has("body")) { + setBody(uri.searchParams.get("body")!); + } + + if (uri.searchParams.has("subject")) { + setSubject(uri.searchParams.get("subject")!); + } + + if (uri.pathname && uri.pathname.length != 0) setTo(uri.pathname); + } catch {} + } + }, [uriParam]); + + return ( + { + if (location.pathname == "/dashboard/compose") navigate("/dashboard"); + + document.title = import.meta.env.VITE_APP_NAME; + + setShowMessageComposer(false); + }} + > + + + + Compose a new message + + setTo(e.currentTarget.value)} + /> + setSubject(e.currentTarget.value)} + /> + {/* */} + + + + ); +}; + +export default MessageComposer; diff --git a/src/components/Message/List.tsx b/src/components/Message/List.tsx new file mode 100644 index 0000000..6196824 --- /dev/null +++ b/src/components/Message/List.tsx @@ -0,0 +1,347 @@ +import { + useEffect, + useRef, + useState, + memo, + FC, + useMemo, + FormEvent +} from "react"; +import { useInfiniteQuery } from "react-query"; + +import { Preview, AppError } from "@dust-mail/structures"; + +import Box from "@mui/material/Box"; +import Button from "@mui/material/Button"; +import CircularProgress from "@mui/material/CircularProgress"; +import FormControl from "@mui/material/FormControl"; +import IconButton from "@mui/material/IconButton"; +import InputAdornment from "@mui/material/InputAdornment"; +import InputLabel from "@mui/material/InputLabel"; +import ListItemIcon from "@mui/material/ListItemIcon"; +import ListItemText from "@mui/material/ListItemText"; +import Menu from "@mui/material/Menu"; +import MenuItem from "@mui/material/MenuItem"; +import OutlinedInput from "@mui/material/OutlinedInput"; +import Stack from "@mui/material/Stack"; +import Tooltip from "@mui/material/Tooltip"; +import Typography from "@mui/material/Typography"; +import { useTheme } from "@mui/material/styles"; + +import CloseIcon from "@mui/icons-material/Close"; +import RefreshIcon from "@mui/icons-material/Refresh"; +import SearchIcon from "@mui/icons-material/Search"; + +import { messageCountForPage } from "@src/constants"; + +import useMailClient from "@utils/hooks/useMailClient"; +import useMessageActions from "@utils/hooks/useMessageActions"; +import useSelectedBox from "@utils/hooks/useSelectedBox"; +import useSelectedMessage from "@utils/hooks/useSelectedMessage"; +import useStore from "@utils/hooks/useStore"; +import useUser from "@utils/hooks/useUser"; +import { + createBaseError, + createErrorFromUnknown, + errorToString +} from "@utils/parseError"; + +import MessageListItem from "@components/Message/ListItem"; + +interface RightClickMenuAnchor { + x: number; + y: number; + id?: string; +} + +const UnMemoizedActionBar: FC<{ + setFilter: (filter: string) => void; + refetch: () => void; +}> = ({ setFilter, refetch }) => { + const theme = useTheme(); + + const [search, setSearch] = useState(""); + + const handleSubmit = (e: FormEvent): void => { + e.preventDefault(); + + setFilter(search); + }; + + useEffect(() => { + if (search.length == 0) setFilter(""); + }, [search]); + + const label = "Search messages"; + + return ( + <> + + +
+ + + {label} + + + + { + setSearch(""); + }} + edge="end" + > + + + + + } + value={search} + onChange={(e) => { + setSearch(e.target.value); + }} + required + size="small" + id="search" + label={label} + type="text" + /> + + + + setFilter(search)} sx={{ ml: 1 }}> + + + +
+
+ + + refetch()}> + + + +
+ + ); +}; + +const ActionBar = memo(UnMemoizedActionBar); + +const UnMemoizedMessageListItems: FC<{ + data?: Preview[][]; + selectedMessageID?: string; + setRightClickMenuAnchor: (anchor: RightClickMenuAnchor) => void; +}> = ({ data, selectedMessageID, setRightClickMenuAnchor }) => { + return ( + <> + {data && + data.map((messages) => + messages.map((message) => { + const selected = selectedMessageID == message.id; + + return ( + + ); + }) + )} + + ); +}; + +const MessageListItems = memo(UnMemoizedMessageListItems); + +const UnMemoizedMessageList: FC = () => { + const mailClient = useMailClient(); + + const setFetching = useStore((state) => state.setFetching); + + const [filter, setFilter] = useState(""); + + const { box: selectedBox } = useSelectedBox(); + const { selectedMessage } = useSelectedMessage(); + + const user = useUser(); + + // Request the messages using react-query + const { + data, + error, + fetchNextPage, + isFetching, + isFetchingNextPage, + refetch + } = useInfiniteQuery( + ["messageList", selectedBox?.id, filter], + async ({ pageParam = 0 }) => { + if (pageParam === false) { + return []; + } + + if (!selectedBox?.id) return []; + + const result = await mailClient + .messageList(pageParam, selectedBox.id) + .catch((error) => createBaseError(createErrorFromUnknown(error))); + + if (result.ok) return result.data; + else throw result.error; + }, + { + getNextPageParam: (lastPage, pages) => { + const morePagesExist = lastPage?.length === messageCountForPage; + + if (!morePagesExist) return false; + + return pages.length; + }, + enabled: + selectedBox?.id != undefined && + selectedBox.selectable && + user?.token != undefined + } + ); + + useEffect( + () => setFetching(isFetching || isFetchingNextPage), + [isFetching, isFetchingNextPage] + ); + + const rightClickMenuBox = useRef(null); + + const [rightClickMenuAnchor, setRightClickMenuAnchor] = + useState({ x: 0, y: 0 }); + + const messageActions = useMessageActions(); + + const rightClickMenuOpen = useMemo( + () => rightClickMenuAnchor.x != 0 || rightClickMenuAnchor.y != 0, + [rightClickMenuAnchor, selectedMessage] + ); + + const handleMenuClose = (): void => setRightClickMenuAnchor({ x: 0, y: 0 }); + + return ( + <> + {rightClickMenuOpen && rightClickMenuBox && ( + + {messageActions.map((action) => ( + { + handleMenuClose(); + if (!selectedMessage) return; + action.handler(selectedMessage); + }} + > + {action.icon} + {action.name} + + ))} + + + + + + Close + + + )} + + + + + + + + + + {(isFetching || isFetchingNextPage) && ( + + + + )} + + {!selectedBox?.id && ( + + No mail box selected. + + )} + + {error && ( + + {errorToString(error)} + + + + )} + + {data && data.pages && data.pages[0].length == 0 && ( + + Empty 🙃 + + )} + + {/* Show a load more button, unless the last page doesn't have a full set of items */} + {data && data.pages[data.pages.length - 1].length == messageCountForPage && ( + + )} + + ); +}; + +const MessageList = memo(UnMemoizedMessageList); + +export default MessageList; diff --git a/src/components/Message/ListItem.tsx b/src/components/Message/ListItem.tsx new file mode 100644 index 0000000..78ef8b5 --- /dev/null +++ b/src/components/Message/ListItem.tsx @@ -0,0 +1,153 @@ +import { FC, memo, MouseEvent, useMemo, useState } from "react"; + +import { Preview } from "@dust-mail/structures"; + +import Avatar from "@mui/material/Avatar"; +import Box from "@mui/material/Box"; +import Typography from "@mui/material/Typography"; + +import createAvatarUrl from "@utils/avatarUrl"; +import { useSetSelectedMessage } from "@utils/hooks/useSelectedMessage"; +import useTheme from "@utils/hooks/useTheme"; + +// interface Message { +// id: string; +// seen: boolean; +// } + +// interface UnSeenMessagesStore { +// messages: Message[]; +// addMessage: (msg: Message) => void; +// setSeen: (id: string, seen: boolean) => void; +// isSeen: (id: string) => void; +// } + +// export const unSeenMessagesStore = create((set) => ({ +// messages: [], +// addMessage: (msg) => set((state) => ({ messages: [...state.messages, msg] })), +// setSeen: (id, seen) => +// set((state) => ({ +// messages: [...state.messages.filter((msg) => msg.id != id), { id, seen }] +// })), +// isSeen: (id) => +// })); + +const UnMemoizedMessageListItem: FC<{ + message: Preview; + selectedMessage: boolean; + setRightClickMenuAnchor: (anchor: { + x: number; + y: number; + id?: string; + }) => void; +}> = ({ message, selectedMessage, setRightClickMenuAnchor }) => { + const theme = useTheme(); + + const setSelectedMessage = useSetSelectedMessage(); + + const [unSeen, setUnSeen] = useState(!message.flags.includes("Read")); + + const from = useMemo( + () => message.from.map((from) => from.name || from.address).join(", "), + [message] + ); + + const primarySender = message.from[0] ?? null; + + const avatar = + primarySender?.address !== null + ? createAvatarUrl(primarySender.address) + : undefined; + + const handleClick = useMemo( + () => (): void => { + if (!message.id) return; + + setUnSeen(false); + + if (selectedMessage) setSelectedMessage(); + else setSelectedMessage(message.id); + }, + [message.id, selectedMessage] + ); + + const handleContextMenu = useMemo( + () => + (e: MouseEvent): void => { + e.preventDefault(); + + setRightClickMenuAnchor({ x: e.pageX, y: e.pageY, id: message.id }); + }, + [setRightClickMenuAnchor] + ); + + return ( + <> + + + {unSeen && ( + + )} + + + + + + {from || "(Unknown sender)"} •{" "} + {new Date((message.sent ?? 0) * 1000).toLocaleDateString()} + + + + {!message.subject || + (message.subject && message.subject.length == 0) + ? "(No subject)" + : message.subject} + + {/* + + */} + + + + + ); +}; + +const MessageListItem = memo(UnMemoizedMessageListItem); + +export default MessageListItem; diff --git a/src/components/Message/Overview.tsx b/src/components/Message/Overview.tsx new file mode 100644 index 0000000..1f90ed1 --- /dev/null +++ b/src/components/Message/Overview.tsx @@ -0,0 +1,455 @@ +import useLocalStorageState from "use-local-storage-state"; + +import { useEffect, useRef, useState, memo, FC, MouseEvent } from "react"; + +import { Address } from "@dust-mail/structures"; + +import Avatar from "@mui/material/Avatar"; +import Box from "@mui/material/Box"; +import Card from "@mui/material/Card"; +import Chip from "@mui/material/Chip"; +import IconButton from "@mui/material/IconButton"; +import Link from "@mui/material/Link"; +import ListItemIcon from "@mui/material/ListItemIcon"; +import ListItemText from "@mui/material/ListItemText"; +import Menu from "@mui/material/Menu"; +import MenuItem from "@mui/material/MenuItem"; +import Skeleton from "@mui/material/Skeleton"; +import Stack from "@mui/material/Stack"; +import Tooltip from "@mui/material/Tooltip"; +import Typography from "@mui/material/Typography"; + +import CloseIcon from "@mui/icons-material/Close"; +import HtmlMarkupIcon from "@mui/icons-material/Code"; +import DarkModeIcon from "@mui/icons-material/DarkMode"; +import CollapseIcon from "@mui/icons-material/ExpandLess"; +import ExpandIcon from "@mui/icons-material/ExpandMore"; +import HideImageIcon from "@mui/icons-material/HideImage"; +import ImageIcon from "@mui/icons-material/Image"; +import BrowserIcon from "@mui/icons-material/Language"; +import LightModeIcon from "@mui/icons-material/LightMode"; +import MoreIcon from "@mui/icons-material/MoreHoriz"; +import TextOnlyIcon from "@mui/icons-material/TextFields"; + +import scrollbarStyles from "@styles/scrollbar"; + +import createAvatarUrl from "@utils/avatarUrl"; +// import useAvatar from "@utils/hooks/useAvatar"; +import useMessageActions from "@utils/hooks/useMessageActions"; +import useSelectedMessage, { + useSetSelectedMessage +} from "@utils/hooks/useSelectedMessage"; +import useTheme from "@utils/hooks/useTheme"; +import { errorToString } from "@utils/parseError"; + +const AddressListItem: FC<{ address: string | null; name: string | null }> = ({ + address, + name +}) => { + const theme = useTheme(); + + const avatar = address !== null ? createAvatarUrl(address) : undefined; + + const displayName = name || address || "Unknown"; + + return ( + + } + label={ + displayName == address ? displayName : `${displayName} <${address}>` + } + /> + ); +}; + +const ADDRESSES_TO_SHOW = 3; + +const AddressList: FC<{ + data: Address[]; + prefixText: string; +}> = ({ data, prefixText }) => { + const [showMore, setShowMore] = useState(false); + + return ( + + {prefixText} + {data && + data + .slice(0, showMore ? data.length : ADDRESSES_TO_SHOW) + .map((address, i) => ( + + ))} + {data && data.length > ADDRESSES_TO_SHOW && ( + setShowMore((state) => !state)} + sx={{ cursor: "pointer" }} + > + {showMore ? "Hide" : `And ${data.length - ADDRESSES_TO_SHOW} more`} + + )} + + ); +}; + +const UnMemoizedMessageDisplay: FC<{ content: string }> = ({ content }) => { + const iframeRef = useRef(null); + + useEffect(() => { + const document = + iframeRef.current?.contentDocument || + iframeRef.current?.contentWindow?.document; + + // iframeRef.current?.contentWindow?.addEventListener("message", console.log); + + document?.open(); + + document?.write(content); + + document?.close(); + + // return () => + // iframeRef.current?.contentWindow?.removeEventListener( + // "message", + // console.log + // ); + }, [content]); + + return ( +