From 48ce1f806854bbb75d22d595bff5f61df7ced9d3 Mon Sep 17 00:00:00 2001 From: QuickMythril Date: Mon, 20 May 2024 19:34:10 -0400 Subject: [PATCH] Q-Support 1.0 --- .eslintrc.js | 32 +- .gitignore | 49 +- .prettierrc | 20 +- README.md | 4 +- index.html | 26 +- package-lock.json | 15060 ++++++++-------- package.json | 96 +- src/App.css | 86 +- src/App.tsx | 8 +- src/assets/icons/ClosedIcon.png | Bin 14861 -> 0 bytes src/assets/icons/CompleteIcon.png | Bin 135180 -> 0 bytes src/assets/icons/InProgressIcon.png | Bin 7297 -> 0 bytes src/assets/icons/OpenIcon.png | Bin 13147 -> 0 bytes src/assets/img/Q-SupportIcon(AlphaX).webp | Bin 0 -> 74954 bytes src/assets/img/Q-SupportIcon.webp | Bin 39896 -> 0 bytes src/assets/svgs/AccountCircleSVG.tsx | 50 +- src/assets/svgs/CircleSVG.tsx | 46 +- src/assets/svgs/DarkModeSVG.tsx | 46 +- src/assets/svgs/DownloadedLight.tsx | 26 +- src/assets/svgs/DownloadingLight.tsx | 26 +- src/assets/svgs/EmptyCircleSVG.tsx | 46 +- src/assets/svgs/ExpandMoreSVG.tsx | 44 +- src/assets/svgs/IconTypes.ts | 14 +- src/assets/svgs/LightModeSVG.tsx | 46 +- src/assets/svgs/PlaylistSVG.tsx | 36 +- src/assets/svgs/TimesSVG.tsx | 46 +- src/components/EditIssue/EditIssue.tsx | 178 +- src/components/EditPlaylist/EditPlaylist.tsx | 22 +- src/components/EditPlaylist/Upload-styles.tsx | 1172 +- .../PublishIssue/PublishIssue-styles.tsx | 100 +- src/components/PublishIssue/PublishIssue.tsx | 136 +- src/components/ResponsiveImage.tsx | 218 +- src/components/StatsData.tsx | 18 +- .../common/AutocompleteQappNames.tsx | 135 + .../common/CategoryList/CategoryList.tsx | 121 +- .../common/CategoryList/CategorySelect.tsx | 178 + src/components/common/Comments/Comment.tsx | 47 +- .../common/Comments/CommentEditor.tsx | 29 +- .../common/Comments/Comments-styles.tsx | 18 +- src/components/common/FileElement.tsx | 892 +- .../ImagePublisher/ImagePublisher-styles.tsx | 1 + .../common/ImagePublisher/ImageUploader.tsx | 1 + src/components/common/IssueIcon.tsx | 61 + src/components/common/LazyLoad.tsx | 96 +- .../common/Notification/Notification.tsx | 172 +- src/components/common/PageLoader.tsx | 86 +- src/components/common/Portal.tsx | 50 +- .../common/TextEditor/DisplayHtml.tsx | 80 +- src/components/common/TextEditor/utils.ts | 50 +- src/components/common/VideoPlayer.tsx | 1714 +- src/components/common/VideoPlayerGlobal.tsx | 1296 +- src/components/layout/Navbar/Navbar.tsx | 6 +- src/constants/Categories/1stCategories.ts | 48 - src/constants/Categories/2ndCategories.ts | 23 - src/constants/Categories/3rdCategories.ts | 0 src/constants/Categories/Categories.ts | 67 + src/constants/Categories/CategoryFunctions.ts | 12 +- src/constants/Identifiers.ts | 2 +- src/constants/Misc.ts | 7 + src/constants/PublishFees/FeeData.tsx | 29 + .../PublishFees/FeePricePublish/DataTable.tsx | 60 + .../FeePricePublish/FeeHistoryModal.tsx | 48 + .../FeePricePublish/FeeHistoryTable.tsx | 49 + .../FeePricePublish-styles.tsx | 43 + .../FeePricePublish/FeePricePublish.ts | 90 + src/constants/PublishFees/SendFeeFunctions.ts | 79 + .../PublishFees/VerifyPayment-Functions.ts | 85 + src/constants/PublishFees/VerifyPayment.ts | 120 + src/global.d.ts | 87 +- src/hooks/useFetchIssues.tsx | 118 +- src/hooks/useWindowSize.tsx | 50 +- src/index.css | 456 +- src/main.tsx | 34 +- src/pages/Home/Channels.tsx | 6 +- src/pages/Home/Home-styles.tsx | 5 +- src/pages/Home/Home.tsx | 153 +- src/pages/Home/IssueList-styles.tsx | 25 +- src/pages/Home/IssueList.tsx | 140 +- ...tLevel.tsx => IssueListComponentLevel.tsx} | 177 +- .../IndividualProfile/IndividualProfile.tsx | 4 +- .../IndividualProfile/Profile-styles.tsx | 32 +- src/pages/IssueContent/IssueContent.tsx | 119 +- src/state/features/authSlice.ts | 52 +- src/state/features/fileSlice.ts | 26 +- src/state/features/globalSlice.ts | 7 + src/state/features/notificationsSlice.ts | 146 +- src/styles/theme.tsx | 12 +- src/utils/checkStructure.ts | 14 +- src/utils/extractTextFromSlate.ts | 26 +- src/utils/fetchVideos.ts | 1 + src/utils/qortalRequests.ts | 33 + src/utils/queue.ts | 86 +- src/utils/time.ts | 90 +- src/utils/toBase64.ts | 348 +- src/vite-env.d.ts | 2 +- src/wrappers/DownloadWrapper.tsx | 426 +- tsconfig.json | 52 +- tsconfig.node.json | 20 +- vite.config.ts | 16 +- 99 files changed, 13780 insertions(+), 12429 deletions(-) delete mode 100644 src/assets/icons/ClosedIcon.png delete mode 100644 src/assets/icons/CompleteIcon.png delete mode 100644 src/assets/icons/InProgressIcon.png delete mode 100644 src/assets/icons/OpenIcon.png create mode 100644 src/assets/img/Q-SupportIcon(AlphaX).webp delete mode 100644 src/assets/img/Q-SupportIcon.webp create mode 100644 src/components/common/AutocompleteQappNames.tsx create mode 100644 src/components/common/IssueIcon.tsx delete mode 100644 src/constants/Categories/1stCategories.ts delete mode 100644 src/constants/Categories/2ndCategories.ts delete mode 100644 src/constants/Categories/3rdCategories.ts create mode 100644 src/constants/Categories/Categories.ts create mode 100644 src/constants/PublishFees/FeeData.tsx create mode 100644 src/constants/PublishFees/FeePricePublish/DataTable.tsx create mode 100644 src/constants/PublishFees/FeePricePublish/FeeHistoryModal.tsx create mode 100644 src/constants/PublishFees/FeePricePublish/FeeHistoryTable.tsx create mode 100644 src/constants/PublishFees/FeePricePublish/FeePricePublish-styles.tsx create mode 100644 src/constants/PublishFees/FeePricePublish/FeePricePublish.ts create mode 100644 src/constants/PublishFees/SendFeeFunctions.ts create mode 100644 src/constants/PublishFees/VerifyPayment-Functions.ts create mode 100644 src/constants/PublishFees/VerifyPayment.ts rename src/pages/Home/{FileListComponentLevel.tsx => IssueListComponentLevel.tsx} (50%) create mode 100644 src/utils/qortalRequests.ts diff --git a/.eslintrc.js b/.eslintrc.js index 0d4c003..3e50864 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,16 +1,16 @@ -module.exports = { - env: { browser: true, es2020: true }, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:react-hooks/recommended', - ], - parser: '@typescript-eslint/parser', - parserOptions: { ecmaVersion: 'latest', sourceType: 'module' }, - plugins: ['react-refresh'], - rules: { - 'react-refresh/only-export-components': 'warn', - '@typescript-eslint/no-explicit-any': "off" - - }, -} +module.exports = { + env: { browser: true, es2020: true }, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:react-hooks/recommended', + ], + parser: '@typescript-eslint/parser', + parserOptions: { ecmaVersion: 'latest', sourceType: 'module' }, + plugins: ['react-refresh'], + rules: { + 'react-refresh/only-export-components': 'warn', + '@typescript-eslint/no-explicit-any': "off" + + }, +} diff --git a/.gitignore b/.gitignore index e3118db..7484bfb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,25 +1,26 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +src/assets/icons/* +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? *.zip \ No newline at end of file diff --git a/.prettierrc b/.prettierrc index 0a4d4fc..6d7e091 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,10 +1,10 @@ -{ - "printWidth": 80, - "singleQuote": false, - "trailingComma": "es5", - "bracketSpacing": true, - "jsxBracketSameLine": false, - "arrowParens": "avoid", - "tabWidth": 2, - "semi": true -} +{ + "printWidth": 80, + "singleQuote": false, + "trailingComma": "es5", + "bracketSpacing": true, + "jsxBracketSameLine": false, + "arrowParens": "avoid", + "tabWidth": 2, + "semi": true +} diff --git a/README.md b/README.md index af38640..9885f56 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ -# q-support -This Q-App lets users submit issues involving the Qortal Core, UI, and Q-Apps to the Qortal Dev team. +# q-support +This Q-App lets users submit issues involving the Qortal Core, UI, and Q-Apps to the Qortal Dev team. diff --git a/index.html b/index.html index 0900b15..aab8437 100644 --- a/index.html +++ b/index.html @@ -1,13 +1,13 @@ - - - - - - - Q-Support - - -
- - - + + + + + + + Q-Support + + +
+ + + diff --git a/package-lock.json b/package-lock.json index 44991b7..2887281 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7530 +1,7530 @@ -{ - "name": "qsupport", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "qsupport", - "version": "1.0.0", - "dependencies": { - "@emotion/react": "^11.10.6", - "@emotion/styled": "^11.10.6", - "@mui/icons-material": "^5.11.11", - "@mui/material": "^5.11.13", - "@reduxjs/toolkit": "^1.9.3", - "compressorjs": "^1.2.1", - "dompurify": "^3.0.6", - "localforage": "^1.10.0", - "moment": "^2.29.4", - "prettier": "^3.2.4", - "quill-image-resize-module-react": "^3.0.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-dropzone": "^14.2.3", - "react-intersection-observer": "^9.4.3", - "react-quill": "^2.0.0", - "react-redux": "^8.0.5", - "react-rnd": "^10.4.1", - "react-router-dom": "^6.9.0", - "react-toastify": "^9.1.2", - "short-unique-id": "^4.4.4", - "ts-key-enum": "^2.0.12" - }, - "devDependencies": { - "@types/react": "^18.0.28", - "@types/react-dom": "^18.0.11", - "@typescript-eslint/eslint-plugin": "^5.57.1", - "@typescript-eslint/parser": "^5.57.1", - "@vitejs/plugin-react": "^4.0.0", - "eslint": "^8.38.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.3.4", - "typescript": "^5.0.2", - "vite": "6.0.0-alpha.1" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", - "dependencies": { - "@babel/highlight": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", - "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", - "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", - "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", - "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz", - "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz", - "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", - "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@emotion/babel-plugin": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", - "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", - "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.1", - "@emotion/memoize": "^0.8.1", - "@emotion/serialize": "^1.1.2", - "babel-plugin-macros": "^3.1.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^4.0.0", - "find-root": "^1.1.0", - "source-map": "^0.5.7", - "stylis": "4.2.0" - } - }, - "node_modules/@emotion/cache": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", - "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", - "dependencies": { - "@emotion/memoize": "^0.8.1", - "@emotion/sheet": "^1.2.2", - "@emotion/utils": "^1.2.1", - "@emotion/weak-memoize": "^0.3.1", - "stylis": "4.2.0" - } - }, - "node_modules/@emotion/hash": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", - "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" - }, - "node_modules/@emotion/is-prop-valid": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", - "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", - "dependencies": { - "@emotion/memoize": "^0.8.1" - } - }, - "node_modules/@emotion/memoize": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", - "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" - }, - "node_modules/@emotion/react": { - "version": "11.11.1", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", - "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", - "dependencies": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.11.0", - "@emotion/cache": "^11.11.0", - "@emotion/serialize": "^1.1.2", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@emotion/utils": "^1.2.1", - "@emotion/weak-memoize": "^0.3.1", - "hoist-non-react-statics": "^3.3.1" - }, - "peerDependencies": { - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@emotion/serialize": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz", - "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==", - "dependencies": { - "@emotion/hash": "^0.9.1", - "@emotion/memoize": "^0.8.1", - "@emotion/unitless": "^0.8.1", - "@emotion/utils": "^1.2.1", - "csstype": "^3.0.2" - } - }, - "node_modules/@emotion/sheet": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", - "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" - }, - "node_modules/@emotion/styled": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", - "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", - "dependencies": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.11.0", - "@emotion/is-prop-valid": "^1.2.1", - "@emotion/serialize": "^1.1.2", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@emotion/utils": "^1.2.1" - }, - "peerDependencies": { - "@emotion/react": "^11.0.0-rc.0", - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@emotion/unitless": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", - "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" - }, - "node_modules/@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", - "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "node_modules/@emotion/utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", - "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" - }, - "node_modules/@emotion/weak-memoize": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", - "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", - "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.5.2", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz", - "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@mui/base": { - "version": "5.0.0-beta.4", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.4.tgz", - "integrity": "sha512-ejhtqYJpjDgHGEljjMBQWZ22yEK0OzIXNa7toJmmXsP4TT3W7xVy8bTJ0TniPDf+JNjrsgfgiFTDGdlEhV1E+g==", - "dependencies": { - "@babel/runtime": "^7.21.0", - "@emotion/is-prop-valid": "^1.2.1", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.1", - "@popperjs/core": "^2.11.8", - "clsx": "^1.2.1", - "prop-types": "^15.8.1", - "react-is": "^18.2.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "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 - } - } - }, - "node_modules/@mui/core-downloads-tracker": { - "version": "5.13.4", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.4.tgz", - "integrity": "sha512-yFrMWcrlI0TqRN5jpb6Ma9iI7sGTHpytdzzL33oskFHNQ8UgrtPas33Y1K7sWAMwCrr1qbWDrOHLAQG4tAzuSw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - } - }, - "node_modules/@mui/icons-material": { - "version": "5.11.16", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.16.tgz", - "integrity": "sha512-oKkx9z9Kwg40NtcIajF9uOXhxiyTZrrm9nmIJ4UjkU2IdHpd4QVLbCc/5hZN/y0C6qzi2Zlxyr9TGddQx2vx2A==", - "dependencies": { - "@babel/runtime": "^7.21.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "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 - } - } - }, - "node_modules/@mui/material": { - "version": "5.13.5", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.13.5.tgz", - "integrity": "sha512-eMay+Ue1OYXOFMQA5Aau7qbAa/kWHLAyi0McsbPTWssCbGehqkF6CIdPsfVGw6tlO+xPee1hUitphHJNL3xpOQ==", - "dependencies": { - "@babel/runtime": "^7.21.0", - "@mui/base": "5.0.0-beta.4", - "@mui/core-downloads-tracker": "^5.13.4", - "@mui/system": "^5.13.5", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.1", - "@types/react-transition-group": "^4.4.6", - "clsx": "^1.2.1", - "csstype": "^3.1.2", - "prop-types": "^15.8.1", - "react-is": "^18.2.0", - "react-transition-group": "^4.4.5" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "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 - } - } - }, - "node_modules/@mui/private-theming": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.1.tgz", - "integrity": "sha512-HW4npLUD9BAkVppOUZHeO1FOKUJWAwbpy0VQoGe3McUYTlck1HezGHQCfBQ5S/Nszi7EViqiimECVl9xi+/WjQ==", - "dependencies": { - "@babel/runtime": "^7.21.0", - "@mui/utils": "^5.13.1", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/styled-engine": { - "version": "5.13.2", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.13.2.tgz", - "integrity": "sha512-VCYCU6xVtXOrIN8lcbuPmoG+u7FYuOERG++fpY74hPpEWkyFQG97F+/XfTQVYzlR2m7nPjnwVUgATcTCMEaMvw==", - "dependencies": { - "@babel/runtime": "^7.21.0", - "@emotion/cache": "^11.11.0", - "csstype": "^3.1.2", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "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 - } - } - }, - "node_modules/@mui/system": { - "version": "5.13.5", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.13.5.tgz", - "integrity": "sha512-n0gzUxoZ2ZHZgnExkh2Htvo9uW2oakofgPRQrDoa/GQOWyRD0NH9MDszBwOb6AAoXZb+OV5TE7I4LeZ/dzgHYA==", - "dependencies": { - "@babel/runtime": "^7.21.0", - "@mui/private-theming": "^5.13.1", - "@mui/styled-engine": "^5.13.2", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.1", - "clsx": "^1.2.1", - "csstype": "^3.1.2", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "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 - } - } - }, - "node_modules/@mui/types": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", - "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==", - "peerDependencies": { - "@types/react": "*" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/utils": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.13.1.tgz", - "integrity": "sha512-6lXdWwmlUbEU2jUI8blw38Kt+3ly7xkmV9ljzY4Q20WhsJMWiNry9CX8M+TaP/HbtuyR8XKsdMgQW7h7MM3n3A==", - "dependencies": { - "@babel/runtime": "^7.21.0", - "@types/prop-types": "^15.7.5", - "@types/react-is": "^18.2.0", - "prop-types": "^15.8.1", - "react-is": "^18.2.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "peerDependencies": { - "react": "^17.0.0 || ^18.0.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, - "node_modules/@reduxjs/toolkit": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.5.tgz", - "integrity": "sha512-Rt97jHmfTeaxL4swLRNPD/zV4OxTes4la07Xc4hetpUW/vc75t5m1ANyxG6ymnEQ2FsLQsoMlYB2vV1sO3m8tQ==", - "dependencies": { - "immer": "^9.0.21", - "redux": "^4.2.1", - "redux-thunk": "^2.4.2", - "reselect": "^4.1.8" - }, - "peerDependencies": { - "react": "^16.9.0 || ^17.0.0 || ^18", - "react-redux": "^7.2.1 || ^8.0.2" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-redux": { - "optional": true - } - } - }, - "node_modules/@remix-run/router": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.6.3.tgz", - "integrity": "sha512-EXJysQ7J3veRECd0kZFQwYYd5sJMcq2O/m60zu1W2l3oVQ9xtub8jTOtYRE0+M2iomyG/W3Ps7+vp2kna0C27Q==", - "engines": { - "node": ">=14" - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.1.tgz", - "integrity": "sha512-fH8/o8nSUek8ceQnT7K4EQbSiV7jgkHq81m9lWZFIXjJ7lJzpWXbQFpT/Zh6OZYnpFykvzC3fbEvEAFZu03dPA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.1.tgz", - "integrity": "sha512-Y/9OHLjzkunF+KGEoJr3heiD5X9OLa8sbT1lm0NYeKyaM3oMhhQFvPB0bNZYJwlq93j8Z6wSxh9+cyKQaxS7PQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.1.tgz", - "integrity": "sha512-+kecg3FY84WadgcuSVm6llrABOdQAEbNdnpi5X3UwWiFVhZIZvKgGrF7kmLguvxHNQy+UuRV66cLVl3S+Rkt+Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.1.tgz", - "integrity": "sha512-2pYRzEjVqq2TB/UNv47BV/8vQiXkFGVmPFwJb+1E0IFFZbIX8/jo1olxqqMbo6xCXf8kabANhp5bzCij2tFLUA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.1.tgz", - "integrity": "sha512-mS6wQ6Do6/wmrF9aTFVpIJ3/IDXhg1EZcQFYHZLHqw6AzMBjTHWnCG35HxSqUNphh0EHqSM6wRTT8HsL1C0x5g==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.1.tgz", - "integrity": "sha512-p9rGKYkHdFMzhckOTFubfxgyIO1vw//7IIjBBRVzyZebWlzRLeNhqxuSaZ7kCEKVkm/kuC9fVRW9HkC/zNRG2w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.1.tgz", - "integrity": "sha512-nDY6Yz5xS/Y4M2i9JLQd3Rofh5OR8Bn8qe3Mv/qCVpHFlwtZSBYSPaU4mrGazWkXrdQ98GB//H0BirGR/SKFSw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.1.tgz", - "integrity": "sha512-im7HE4VBL+aDswvcmfx88Mp1soqL9OBsdDBU8NqDEYtkri0qV0THhQsvZtZeNNlLeCUQ16PZyv7cqutjDF35qw==", - "cpu": [ - "ppc64le" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.1.tgz", - "integrity": "sha512-RWdiHuAxWmzPJgaHJdpvUUlDz8sdQz4P2uv367T2JocdDa98iRw2UjIJ4QxSyt077mXZT2X6pKfT2iYtVEvOFw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.1.tgz", - "integrity": "sha512-VMgaGQ5zRX6ZqV/fas65/sUGc9cPmsntq2FiGmayW9KMNfWVG/j0BAqImvU4KTeOOgYSf1F+k6at1UfNONuNjA==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.1.tgz", - "integrity": "sha512-9Q7DGjZN+hTdJomaQ3Iub4m6VPu1r94bmK2z3UeWP3dGUecRC54tmVu9vKHTm1bOt3ASoYtEz6JSRLFzrysKlA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.1.tgz", - "integrity": "sha512-JNEG/Ti55413SsreTguSx0LOVKX902OfXIKVg+TCXO6Gjans/k9O6ww9q3oLGjNDaTLxM+IHFMeXy/0RXL5R/g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.1.tgz", - "integrity": "sha512-ryS22I9y0mumlLNwDFYZRDFLwWh3aKaC72CWjFcFvxK0U6v/mOkM5Up1bTbCRAhv3kEIwW2ajROegCIQViUCeA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.1.tgz", - "integrity": "sha512-TdloItiGk+T0mTxKx7Hp279xy30LspMso+GzQvV2maYePMAWdmrzqSNZhUpPj3CGw12aGj57I026PgLCTu8CGg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.1.tgz", - "integrity": "sha512-wQGI+LY/Py20zdUPq+XCem7JcPOyzIJBm3dli+56DJsQOHbnXZFEwgmnC6el1TPAfC8lBT3m+z69RmLykNUbew==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true - }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "node_modules/@types/quill": { - "version": "1.3.10", - "resolved": "https://registry.npmjs.org/@types/quill/-/quill-1.3.10.tgz", - "integrity": "sha512-IhW3fPW+bkt9MLNlycw8u8fWb7oO7W5URC9MfZYHBlA24rex9rs23D5DETChu1zvgVdc5ka64ICjJOgQMr6Shw==", - "dependencies": { - "parchment": "^1.1.2" - } - }, - "node_modules/@types/react": { - "version": "18.2.13", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.13.tgz", - "integrity": "sha512-vJ+zElvi/Zn9cVXB5slX2xL8PZodPCwPRDpittQdw43JR2AJ5k3vKdgJJyneV/cYgIbLQUwXa9JVDvUZXGba+Q==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.6.tgz", - "integrity": "sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==", - "devOptional": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-is": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.2.1.tgz", - "integrity": "sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-transition-group": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz", - "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" - }, - "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true - }, - "node_modules/@types/use-sync-external-store": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", - "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.0.tgz", - "integrity": "sha512-78B+anHLF1TI8Jn/cD0Q00TBYdMgjdOn980JfAVa9yw5sop8nyTfVOQAv6LWywkOGLclDBtv5z3oxN4w7jxyNg==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.60.0", - "@typescript-eslint/type-utils": "5.60.0", - "@typescript-eslint/utils": "5.60.0", - "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.60.0.tgz", - "integrity": "sha512-jBONcBsDJ9UoTWrARkRRCgDz6wUggmH5RpQVlt7BimSwaTkTjwypGzKORXbR4/2Hqjk9hgwlon2rVQAjWNpkyQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.60.0", - "@typescript-eslint/types": "5.60.0", - "@typescript-eslint/typescript-estree": "5.60.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.0.tgz", - "integrity": "sha512-hakuzcxPwXi2ihf9WQu1BbRj1e/Pd8ZZwVTG9kfbxAMZstKz8/9OoexIwnmLzShtsdap5U/CoQGRCWlSuPbYxQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.60.0", - "@typescript-eslint/visitor-keys": "5.60.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.60.0.tgz", - "integrity": "sha512-X7NsRQddORMYRFH7FWo6sA9Y/zbJ8s1x1RIAtnlj6YprbToTiQnM6vxcMu7iYhdunmoC0rUWlca13D5DVHkK2g==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "5.60.0", - "@typescript-eslint/utils": "5.60.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.0.tgz", - "integrity": "sha512-ascOuoCpNZBccFVNJRSC6rPq4EmJ2NkuoKnd6LDNyAQmdDnziAtxbCGWCbefG1CNzmDvd05zO36AmB7H8RzKPA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.0.tgz", - "integrity": "sha512-R43thAuwarC99SnvrBmh26tc7F6sPa2B3evkXp/8q954kYL6Ro56AwASYWtEEi+4j09GbiNAHqYwNNZuNlARGQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.60.0", - "@typescript-eslint/visitor-keys": "5.60.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.0.tgz", - "integrity": "sha512-ba51uMqDtfLQ5+xHtwlO84vkdjrqNzOnqrnwbMHMRY8Tqeme8C2Q8Fc7LajfGR+e3/4LoYiWXUM6BpIIbHJ4hQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.60.0", - "@typescript-eslint/types": "5.60.0", - "@typescript-eslint/typescript-estree": "5.60.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.0.tgz", - "integrity": "sha512-wm9Uz71SbCyhUKgcaPRauBdTegUyY/ZWl8gLwD/i/ybJqscrrdVSFImpvUz16BLPChIeKBK5Fa9s6KDQjsjyWw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.60.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@vitejs/plugin-react": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.1.tgz", - "integrity": "sha512-g25lL98essfeSj43HJ0o4DMp0325XK0ITkxpgChzJU/CyemgyChtlxfnRbjfwxDGCTRxTiXtQAsdebQXKMRSOA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.22.5", - "@babel/plugin-transform-react-jsx-self": "^7.22.5", - "@babel/plugin-transform-react-jsx-source": "^7.22.5", - "react-refresh": "^0.14.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0" - } - }, - "node_modules/acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/attr-accept": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.2.tgz", - "integrity": "sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/blueimp-canvas-to-blob": { - "version": "3.29.0", - "resolved": "https://registry.npmjs.org/blueimp-canvas-to-blob/-/blueimp-canvas-to-blob-3.29.0.tgz", - "integrity": "sha512-0pcSSGxC0QxT+yVkivxIqW0Y4VlO2XSDPofBAqoJ1qJxgH9eiUDLv50Rixij2cDuEfx4M6DpD9UGZpRhT5Q8qg==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", - "dependencies": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001505", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", - "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/compressorjs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/compressorjs/-/compressorjs-1.2.1.tgz", - "integrity": "sha512-+geIjeRnPhQ+LLvvA7wxBQE5ddeLU7pJ3FsKFWirDw6veY3s9iLxAQEw7lXGHnhCJvBujEQWuNnGzZcvCvdkLQ==", - "dependencies": { - "blueimp-canvas-to-blob": "^3.29.0", - "is-blob": "^2.1.0" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-equal": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz", - "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==", - "dependencies": { - "is-arguments": "^1.1.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.5.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", - "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, - "node_modules/dompurify": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.6.tgz", - "integrity": "sha512-ilkD8YEnnGh1zJ240uJsW7AzE+2qpbOUYjacomn3AvJ6J4JhKGSZ2nh4wUIXPZrEPppaCLx5jFe8T89Rk8tQ7w==" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.434", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.434.tgz", - "integrity": "sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==", - "dev": true - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz", - "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.43.0", - "@humanwhocodes/config-array": "^0.11.10", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.5.2", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "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.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react-refresh": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.5.tgz", - "integrity": "sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==", - "dev": true, - "peerDependencies": { - "eslint": ">=7" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/espree": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", - "dev": true, - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz", - "integrity": "sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz", - "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fast-memoize": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz", - "integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==" - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-selector": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-0.6.0.tgz", - "integrity": "sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw==", - "dependencies": { - "tslib": "^2.4.0" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", - "dependencies": { - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", - "dependencies": { - "get-intrinsic": "^1.2.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" - }, - "node_modules/immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-blob": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-blob/-/is-blob-2.1.0.tgz", - "integrity": "sha512-SZ/fTft5eUhQM6oF/ZaASFDEdbFVe89Imltn9uZr03wdKMcWNVYSMjQPFtg05QuNkt5l5c135ElvXEQG0rk4tw==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", - "dependencies": { - "immediate": "~3.0.5" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/localforage": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", - "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", - "dependencies": { - "lie": "3.1.1" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parchment": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz", - "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz", - "integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quill": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/quill/-/quill-1.3.7.tgz", - "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==", - "dependencies": { - "clone": "^2.1.1", - "deep-equal": "^1.0.1", - "eventemitter3": "^2.0.3", - "extend": "^3.0.2", - "parchment": "^1.1.4", - "quill-delta": "^3.6.2" - } - }, - "node_modules/quill-delta": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-3.6.3.tgz", - "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==", - "dependencies": { - "deep-equal": "^1.0.1", - "extend": "^3.0.2", - "fast-diff": "1.1.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/quill-image-resize-module-react": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/quill-image-resize-module-react/-/quill-image-resize-module-react-3.0.0.tgz", - "integrity": "sha512-3jVChLoXh+fwEELx3OswOEEuF+1KU3r/B9RAqZ//s+d+UMduVZzUepU1g/XoxjKoBJvWD2lJwBIFBRUNb8ebCw==", - "dependencies": { - "lodash": "^4.17.4", - "quill": "^1.2.2", - "raw-loader": "^0.5.1" - } - }, - "node_modules/raw-loader": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", - "integrity": "sha512-sf7oGoLuaYAScB4VGr0tzetsYlS8EJH6qnTCfQ/WVEa89hALQ4RQfCKt5xCyPQKPDUbVUAIP1QsxAwfAjlDp7Q==" - }, - "node_modules/re-resizable": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/re-resizable/-/re-resizable-6.9.6.tgz", - "integrity": "sha512-0xYKS5+Z0zk+vICQlcZW+g54CcJTTmHluA7JUUgvERDxnKAnytylcyPsA+BSFi759s5hPlHmBRegFrwXs2FuBQ==", - "dependencies": { - "fast-memoize": "^2.5.1" - }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-draggable": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.5.tgz", - "integrity": "sha512-OMHzJdyJbYTZo4uQE393fHcqqPYsEtkjfMgvCHr6rejT+Ezn4OZbNyGH50vv+SunC1RMvwOTSWkEODQLzw1M9g==", - "dependencies": { - "clsx": "^1.1.1", - "prop-types": "^15.8.1" - }, - "peerDependencies": { - "react": ">= 16.3.0", - "react-dom": ">= 16.3.0" - } - }, - "node_modules/react-dropzone": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.2.3.tgz", - "integrity": "sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug==", - "dependencies": { - "attr-accept": "^2.2.2", - "file-selector": "^0.6.0", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">= 10.13" - }, - "peerDependencies": { - "react": ">= 16.8 || 18.0.0" - } - }, - "node_modules/react-intersection-observer": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.5.0.tgz", - "integrity": "sha512-bQbfe6Jl8KSynbWfQWz8LoGCCmG6fhsilljgc6dc1NMYpNmP20wfFsrF7CE5N9+LbWx33DUgJdkNBVhU1JzIRA==", - "peerDependencies": { - "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, - "node_modules/react-quill": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/react-quill/-/react-quill-2.0.0.tgz", - "integrity": "sha512-4qQtv1FtCfLgoD3PXAur5RyxuUbPXQGOHgTlFie3jtxp43mXDtzCKaOgQ3mLyZfi1PUlyjycfivKelFhy13QUg==", - "dependencies": { - "@types/quill": "^1.3.10", - "lodash": "^4.17.4", - "quill": "^1.3.7" - }, - "peerDependencies": { - "react": "^16 || ^17 || ^18", - "react-dom": "^16 || ^17 || ^18" - } - }, - "node_modules/react-redux": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.1.0.tgz", - "integrity": "sha512-CtHZzAOxi7GQvTph4dVLWwZHAWUjV2kMEQtk50OrN8z3gKxpWg3Tz7JfDw32N3Rpd7fh02z73cF6yZkK467gbQ==", - "dependencies": { - "@babel/runtime": "^7.12.1", - "@types/hoist-non-react-statics": "^3.3.1", - "@types/use-sync-external-store": "^0.0.3", - "hoist-non-react-statics": "^3.3.2", - "react-is": "^18.0.0", - "use-sync-external-store": "^1.0.0" - }, - "peerDependencies": { - "@reduxjs/toolkit": "^1 || ^2.0.0-beta.0", - "@types/react": "^16.8 || ^17.0 || ^18.0", - "@types/react-dom": "^16.8 || ^17.0 || ^18.0", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0", - "react-native": ">=0.59", - "redux": "^4 || ^5.0.0-beta.0" - }, - "peerDependenciesMeta": { - "@reduxjs/toolkit": { - "optional": true - }, - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - }, - "redux": { - "optional": true - } - } - }, - "node_modules/react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-rnd": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/react-rnd/-/react-rnd-10.4.1.tgz", - "integrity": "sha512-0m887AjQZr6p2ADLNnipquqsDq4XJu/uqVqI3zuoGD19tRm6uB83HmZWydtkilNp5EWsOHbLGF4IjWMdd5du8Q==", - "dependencies": { - "re-resizable": "6.9.6", - "react-draggable": "4.4.5", - "tslib": "2.3.1" - }, - "peerDependencies": { - "react": ">=16.3.0", - "react-dom": ">=16.3.0" - } - }, - "node_modules/react-rnd/node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "node_modules/react-router": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.13.0.tgz", - "integrity": "sha512-Si6KnfEnJw7gUQkNa70dlpI1bul46FuSxX5t5WwlUBxE25DAz2BjVkwaK8Y2s242bQrZPXCpmwLPtIO5pv4tXg==", - "dependencies": { - "@remix-run/router": "1.6.3" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/react-router-dom": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.13.0.tgz", - "integrity": "sha512-6Nqoqd7fgwxxVGdbiMHTpDHCYPq62d7Wk1Of7B82vH7ZPwwsRaIa22zRZKPPg413R5REVNiyuQPKDG1bubcOFA==", - "dependencies": { - "@remix-run/router": "1.6.3", - "react-router": "6.13.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" - } - }, - "node_modules/react-toastify": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.3.tgz", - "integrity": "sha512-fPfb8ghtn/XMxw3LkxQBk3IyagNpF/LIKjOBflbexr2AWxAH1MJgvnESwEwBn9liLFXgTKWgBSdZpw9m4OTHTg==", - "dependencies": { - "clsx": "^1.1.1" - }, - "peerDependencies": { - "react": ">=16", - "react-dom": ">=16" - } - }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" - } - }, - "node_modules/redux": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", - "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", - "dependencies": { - "@babel/runtime": "^7.9.2" - } - }, - "node_modules/redux-thunk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", - "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", - "peerDependencies": { - "redux": "^4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reselect": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", - "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.14.1.tgz", - "integrity": "sha512-4LnHSdd3QK2pa1J6dFbfm1HN0D7vSK/ZuZTsdyUAlA6Rr1yTouUTL13HaDOGJVgby461AhrNGBS7sCGXXtT+SA==", - "dev": true, - "dependencies": { - "@types/estree": "1.0.5" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.14.1", - "@rollup/rollup-android-arm64": "4.14.1", - "@rollup/rollup-darwin-arm64": "4.14.1", - "@rollup/rollup-darwin-x64": "4.14.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.14.1", - "@rollup/rollup-linux-arm64-gnu": "4.14.1", - "@rollup/rollup-linux-arm64-musl": "4.14.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.14.1", - "@rollup/rollup-linux-riscv64-gnu": "4.14.1", - "@rollup/rollup-linux-s390x-gnu": "4.14.1", - "@rollup/rollup-linux-x64-gnu": "4.14.1", - "@rollup/rollup-linux-x64-musl": "4.14.1", - "@rollup/rollup-win32-arm64-msvc": "4.14.1", - "@rollup/rollup-win32-ia32-msvc": "4.14.1", - "@rollup/rollup-win32-x64-msvc": "4.14.1", - "fsevents": "~2.3.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", - "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", - "dependencies": { - "define-data-property": "^1.0.1", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/short-unique-id": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/short-unique-id/-/short-unique-id-4.4.4.tgz", - "integrity": "sha512-oLF1NCmtbiTWl2SqdXZQbo5KM1b7axdp0RgQLq8qCBBLoq+o3A5wmLrNM6bZIh54/a8BJ3l69kTXuxwZ+XCYuw==", - "bin": { - "short-unique-id": "bin/short-unique-id", - "suid": "bin/short-unique-id" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylis": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", - "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-key-enum": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/ts-key-enum/-/ts-key-enum-2.0.12.tgz", - "integrity": "sha512-Ety4IvKMaeG34AyXMp5r11XiVZNDRL+XWxXbVVJjLvq2vxKRttEANBE7Za1bxCAZRdH2/sZT6jFyyTWxXz28hw==" - }, - "node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "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" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", - "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/vite": { - "version": "6.0.0-alpha.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.0-alpha.1.tgz", - "integrity": "sha512-LVvQVG3AftURxT11TgWXpfVIqBKC4D/NA5ikYQb9hDORF0hvO+gsyvNu8GR73/oag09A5JJAPAFU+r7ly4+9Lw==", - "dev": true, - "dependencies": { - "esbuild": "^0.20.1", - "postcss": "^8.4.38", - "rollup": "^4.13.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", - "requires": { - "@babel/highlight": "^7.22.5" - } - }, - "@babel/compat-data": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", - "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", - "dev": true - }, - "@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", - "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true - }, - "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" - }, - "@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==" - }, - "@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true - }, - "@babel/helpers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", - "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", - "requires": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", - "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", - "dev": true - }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz", - "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz", - "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/traverse": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", - "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", - "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - } - }, - "@emotion/babel-plugin": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", - "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", - "requires": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.1", - "@emotion/memoize": "^0.8.1", - "@emotion/serialize": "^1.1.2", - "babel-plugin-macros": "^3.1.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^4.0.0", - "find-root": "^1.1.0", - "source-map": "^0.5.7", - "stylis": "4.2.0" - } - }, - "@emotion/cache": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", - "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", - "requires": { - "@emotion/memoize": "^0.8.1", - "@emotion/sheet": "^1.2.2", - "@emotion/utils": "^1.2.1", - "@emotion/weak-memoize": "^0.3.1", - "stylis": "4.2.0" - } - }, - "@emotion/hash": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", - "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" - }, - "@emotion/is-prop-valid": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", - "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", - "requires": { - "@emotion/memoize": "^0.8.1" - } - }, - "@emotion/memoize": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", - "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" - }, - "@emotion/react": { - "version": "11.11.1", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", - "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", - "requires": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.11.0", - "@emotion/cache": "^11.11.0", - "@emotion/serialize": "^1.1.2", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@emotion/utils": "^1.2.1", - "@emotion/weak-memoize": "^0.3.1", - "hoist-non-react-statics": "^3.3.1" - } - }, - "@emotion/serialize": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz", - "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==", - "requires": { - "@emotion/hash": "^0.9.1", - "@emotion/memoize": "^0.8.1", - "@emotion/unitless": "^0.8.1", - "@emotion/utils": "^1.2.1", - "csstype": "^3.0.2" - } - }, - "@emotion/sheet": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", - "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" - }, - "@emotion/styled": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", - "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", - "requires": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.11.0", - "@emotion/is-prop-valid": "^1.2.1", - "@emotion/serialize": "^1.1.2", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@emotion/utils": "^1.2.1" - } - }, - "@emotion/unitless": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", - "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" - }, - "@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", - "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", - "requires": {} - }, - "@emotion/utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", - "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" - }, - "@emotion/weak-memoize": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", - "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" - }, - "@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", - "dev": true, - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", - "dev": true, - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", - "dev": true, - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", - "dev": true, - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", - "dev": true, - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", - "dev": true, - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", - "dev": true, - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", - "dev": true, - "optional": true - }, - "@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^3.3.0" - } - }, - "@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", - "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.5.2", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - } - } - }, - "@eslint/js": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz", - "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", - "dev": true - }, - "@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - }, - "dependencies": { - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - } - } - }, - "@mui/base": { - "version": "5.0.0-beta.4", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.4.tgz", - "integrity": "sha512-ejhtqYJpjDgHGEljjMBQWZ22yEK0OzIXNa7toJmmXsP4TT3W7xVy8bTJ0TniPDf+JNjrsgfgiFTDGdlEhV1E+g==", - "requires": { - "@babel/runtime": "^7.21.0", - "@emotion/is-prop-valid": "^1.2.1", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.1", - "@popperjs/core": "^2.11.8", - "clsx": "^1.2.1", - "prop-types": "^15.8.1", - "react-is": "^18.2.0" - } - }, - "@mui/core-downloads-tracker": { - "version": "5.13.4", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.4.tgz", - "integrity": "sha512-yFrMWcrlI0TqRN5jpb6Ma9iI7sGTHpytdzzL33oskFHNQ8UgrtPas33Y1K7sWAMwCrr1qbWDrOHLAQG4tAzuSw==" - }, - "@mui/icons-material": { - "version": "5.11.16", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.16.tgz", - "integrity": "sha512-oKkx9z9Kwg40NtcIajF9uOXhxiyTZrrm9nmIJ4UjkU2IdHpd4QVLbCc/5hZN/y0C6qzi2Zlxyr9TGddQx2vx2A==", - "requires": { - "@babel/runtime": "^7.21.0" - } - }, - "@mui/material": { - "version": "5.13.5", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.13.5.tgz", - "integrity": "sha512-eMay+Ue1OYXOFMQA5Aau7qbAa/kWHLAyi0McsbPTWssCbGehqkF6CIdPsfVGw6tlO+xPee1hUitphHJNL3xpOQ==", - "requires": { - "@babel/runtime": "^7.21.0", - "@mui/base": "5.0.0-beta.4", - "@mui/core-downloads-tracker": "^5.13.4", - "@mui/system": "^5.13.5", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.1", - "@types/react-transition-group": "^4.4.6", - "clsx": "^1.2.1", - "csstype": "^3.1.2", - "prop-types": "^15.8.1", - "react-is": "^18.2.0", - "react-transition-group": "^4.4.5" - } - }, - "@mui/private-theming": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.1.tgz", - "integrity": "sha512-HW4npLUD9BAkVppOUZHeO1FOKUJWAwbpy0VQoGe3McUYTlck1HezGHQCfBQ5S/Nszi7EViqiimECVl9xi+/WjQ==", - "requires": { - "@babel/runtime": "^7.21.0", - "@mui/utils": "^5.13.1", - "prop-types": "^15.8.1" - } - }, - "@mui/styled-engine": { - "version": "5.13.2", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.13.2.tgz", - "integrity": "sha512-VCYCU6xVtXOrIN8lcbuPmoG+u7FYuOERG++fpY74hPpEWkyFQG97F+/XfTQVYzlR2m7nPjnwVUgATcTCMEaMvw==", - "requires": { - "@babel/runtime": "^7.21.0", - "@emotion/cache": "^11.11.0", - "csstype": "^3.1.2", - "prop-types": "^15.8.1" - } - }, - "@mui/system": { - "version": "5.13.5", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.13.5.tgz", - "integrity": "sha512-n0gzUxoZ2ZHZgnExkh2Htvo9uW2oakofgPRQrDoa/GQOWyRD0NH9MDszBwOb6AAoXZb+OV5TE7I4LeZ/dzgHYA==", - "requires": { - "@babel/runtime": "^7.21.0", - "@mui/private-theming": "^5.13.1", - "@mui/styled-engine": "^5.13.2", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.1", - "clsx": "^1.2.1", - "csstype": "^3.1.2", - "prop-types": "^15.8.1" - } - }, - "@mui/types": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", - "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==", - "requires": {} - }, - "@mui/utils": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.13.1.tgz", - "integrity": "sha512-6lXdWwmlUbEU2jUI8blw38Kt+3ly7xkmV9ljzY4Q20WhsJMWiNry9CX8M+TaP/HbtuyR8XKsdMgQW7h7MM3n3A==", - "requires": { - "@babel/runtime": "^7.21.0", - "@types/prop-types": "^15.7.5", - "@types/react-is": "^18.2.0", - "prop-types": "^15.8.1", - "react-is": "^18.2.0" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==" - }, - "@reduxjs/toolkit": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.5.tgz", - "integrity": "sha512-Rt97jHmfTeaxL4swLRNPD/zV4OxTes4la07Xc4hetpUW/vc75t5m1ANyxG6ymnEQ2FsLQsoMlYB2vV1sO3m8tQ==", - "requires": { - "immer": "^9.0.21", - "redux": "^4.2.1", - "redux-thunk": "^2.4.2", - "reselect": "^4.1.8" - } - }, - "@remix-run/router": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.6.3.tgz", - "integrity": "sha512-EXJysQ7J3veRECd0kZFQwYYd5sJMcq2O/m60zu1W2l3oVQ9xtub8jTOtYRE0+M2iomyG/W3Ps7+vp2kna0C27Q==" - }, - "@rollup/rollup-android-arm-eabi": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.1.tgz", - "integrity": "sha512-fH8/o8nSUek8ceQnT7K4EQbSiV7jgkHq81m9lWZFIXjJ7lJzpWXbQFpT/Zh6OZYnpFykvzC3fbEvEAFZu03dPA==", - "dev": true, - "optional": true - }, - "@rollup/rollup-android-arm64": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.1.tgz", - "integrity": "sha512-Y/9OHLjzkunF+KGEoJr3heiD5X9OLa8sbT1lm0NYeKyaM3oMhhQFvPB0bNZYJwlq93j8Z6wSxh9+cyKQaxS7PQ==", - "dev": true, - "optional": true - }, - "@rollup/rollup-darwin-arm64": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.1.tgz", - "integrity": "sha512-+kecg3FY84WadgcuSVm6llrABOdQAEbNdnpi5X3UwWiFVhZIZvKgGrF7kmLguvxHNQy+UuRV66cLVl3S+Rkt+Q==", - "dev": true, - "optional": true - }, - "@rollup/rollup-darwin-x64": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.1.tgz", - "integrity": "sha512-2pYRzEjVqq2TB/UNv47BV/8vQiXkFGVmPFwJb+1E0IFFZbIX8/jo1olxqqMbo6xCXf8kabANhp5bzCij2tFLUA==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.1.tgz", - "integrity": "sha512-mS6wQ6Do6/wmrF9aTFVpIJ3/IDXhg1EZcQFYHZLHqw6AzMBjTHWnCG35HxSqUNphh0EHqSM6wRTT8HsL1C0x5g==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-arm64-gnu": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.1.tgz", - "integrity": "sha512-p9rGKYkHdFMzhckOTFubfxgyIO1vw//7IIjBBRVzyZebWlzRLeNhqxuSaZ7kCEKVkm/kuC9fVRW9HkC/zNRG2w==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-arm64-musl": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.1.tgz", - "integrity": "sha512-nDY6Yz5xS/Y4M2i9JLQd3Rofh5OR8Bn8qe3Mv/qCVpHFlwtZSBYSPaU4mrGazWkXrdQ98GB//H0BirGR/SKFSw==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.1.tgz", - "integrity": "sha512-im7HE4VBL+aDswvcmfx88Mp1soqL9OBsdDBU8NqDEYtkri0qV0THhQsvZtZeNNlLeCUQ16PZyv7cqutjDF35qw==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-riscv64-gnu": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.1.tgz", - "integrity": "sha512-RWdiHuAxWmzPJgaHJdpvUUlDz8sdQz4P2uv367T2JocdDa98iRw2UjIJ4QxSyt077mXZT2X6pKfT2iYtVEvOFw==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-s390x-gnu": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.1.tgz", - "integrity": "sha512-VMgaGQ5zRX6ZqV/fas65/sUGc9cPmsntq2FiGmayW9KMNfWVG/j0BAqImvU4KTeOOgYSf1F+k6at1UfNONuNjA==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-x64-gnu": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.1.tgz", - "integrity": "sha512-9Q7DGjZN+hTdJomaQ3Iub4m6VPu1r94bmK2z3UeWP3dGUecRC54tmVu9vKHTm1bOt3ASoYtEz6JSRLFzrysKlA==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-x64-musl": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.1.tgz", - "integrity": "sha512-JNEG/Ti55413SsreTguSx0LOVKX902OfXIKVg+TCXO6Gjans/k9O6ww9q3oLGjNDaTLxM+IHFMeXy/0RXL5R/g==", - "dev": true, - "optional": true - }, - "@rollup/rollup-win32-arm64-msvc": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.1.tgz", - "integrity": "sha512-ryS22I9y0mumlLNwDFYZRDFLwWh3aKaC72CWjFcFvxK0U6v/mOkM5Up1bTbCRAhv3kEIwW2ajROegCIQViUCeA==", - "dev": true, - "optional": true - }, - "@rollup/rollup-win32-ia32-msvc": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.1.tgz", - "integrity": "sha512-TdloItiGk+T0mTxKx7Hp279xy30LspMso+GzQvV2maYePMAWdmrzqSNZhUpPj3CGw12aGj57I026PgLCTu8CGg==", - "dev": true, - "optional": true - }, - "@rollup/rollup-win32-x64-msvc": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.1.tgz", - "integrity": "sha512-wQGI+LY/Py20zdUPq+XCem7JcPOyzIJBm3dli+56DJsQOHbnXZFEwgmnC6el1TPAfC8lBT3m+z69RmLykNUbew==", - "dev": true, - "optional": true - }, - "@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true - }, - "@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "requires": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "@types/quill": { - "version": "1.3.10", - "resolved": "https://registry.npmjs.org/@types/quill/-/quill-1.3.10.tgz", - "integrity": "sha512-IhW3fPW+bkt9MLNlycw8u8fWb7oO7W5URC9MfZYHBlA24rex9rs23D5DETChu1zvgVdc5ka64ICjJOgQMr6Shw==", - "requires": { - "parchment": "^1.1.2" - } - }, - "@types/react": { - "version": "18.2.13", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.13.tgz", - "integrity": "sha512-vJ+zElvi/Zn9cVXB5slX2xL8PZodPCwPRDpittQdw43JR2AJ5k3vKdgJJyneV/cYgIbLQUwXa9JVDvUZXGba+Q==", - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.6.tgz", - "integrity": "sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==", - "devOptional": true, - "requires": { - "@types/react": "*" - } - }, - "@types/react-is": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.2.1.tgz", - "integrity": "sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw==", - "requires": { - "@types/react": "*" - } - }, - "@types/react-transition-group": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz", - "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==", - "requires": { - "@types/react": "*" - } - }, - "@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" - }, - "@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true - }, - "@types/use-sync-external-store": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", - "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.0.tgz", - "integrity": "sha512-78B+anHLF1TI8Jn/cD0Q00TBYdMgjdOn980JfAVa9yw5sop8nyTfVOQAv6LWywkOGLclDBtv5z3oxN4w7jxyNg==", - "dev": true, - "requires": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.60.0", - "@typescript-eslint/type-utils": "5.60.0", - "@typescript-eslint/utils": "5.60.0", - "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.60.0.tgz", - "integrity": "sha512-jBONcBsDJ9UoTWrARkRRCgDz6wUggmH5RpQVlt7BimSwaTkTjwypGzKORXbR4/2Hqjk9hgwlon2rVQAjWNpkyQ==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.60.0", - "@typescript-eslint/types": "5.60.0", - "@typescript-eslint/typescript-estree": "5.60.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.0.tgz", - "integrity": "sha512-hakuzcxPwXi2ihf9WQu1BbRj1e/Pd8ZZwVTG9kfbxAMZstKz8/9OoexIwnmLzShtsdap5U/CoQGRCWlSuPbYxQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.60.0", - "@typescript-eslint/visitor-keys": "5.60.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.60.0.tgz", - "integrity": "sha512-X7NsRQddORMYRFH7FWo6sA9Y/zbJ8s1x1RIAtnlj6YprbToTiQnM6vxcMu7iYhdunmoC0rUWlca13D5DVHkK2g==", - "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "5.60.0", - "@typescript-eslint/utils": "5.60.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.0.tgz", - "integrity": "sha512-ascOuoCpNZBccFVNJRSC6rPq4EmJ2NkuoKnd6LDNyAQmdDnziAtxbCGWCbefG1CNzmDvd05zO36AmB7H8RzKPA==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.0.tgz", - "integrity": "sha512-R43thAuwarC99SnvrBmh26tc7F6sPa2B3evkXp/8q954kYL6Ro56AwASYWtEEi+4j09GbiNAHqYwNNZuNlARGQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.60.0", - "@typescript-eslint/visitor-keys": "5.60.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/utils": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.0.tgz", - "integrity": "sha512-ba51uMqDtfLQ5+xHtwlO84vkdjrqNzOnqrnwbMHMRY8Tqeme8C2Q8Fc7LajfGR+e3/4LoYiWXUM6BpIIbHJ4hQ==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.60.0", - "@typescript-eslint/types": "5.60.0", - "@typescript-eslint/typescript-estree": "5.60.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.0.tgz", - "integrity": "sha512-wm9Uz71SbCyhUKgcaPRauBdTegUyY/ZWl8gLwD/i/ybJqscrrdVSFImpvUz16BLPChIeKBK5Fa9s6KDQjsjyWw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.60.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "@vitejs/plugin-react": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.1.tgz", - "integrity": "sha512-g25lL98essfeSj43HJ0o4DMp0325XK0ITkxpgChzJU/CyemgyChtlxfnRbjfwxDGCTRxTiXtQAsdebQXKMRSOA==", - "dev": true, - "requires": { - "@babel/core": "^7.22.5", - "@babel/plugin-transform-react-jsx-self": "^7.22.5", - "@babel/plugin-transform-react-jsx-source": "^7.22.5", - "react-refresh": "^0.14.0" - } - }, - "acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "attr-accept": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.2.tgz", - "integrity": "sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==" - }, - "babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "requires": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "blueimp-canvas-to-blob": { - "version": "3.29.0", - "resolved": "https://registry.npmjs.org/blueimp-canvas-to-blob/-/blueimp-canvas-to-blob-3.29.0.tgz", - "integrity": "sha512-0pcSSGxC0QxT+yVkivxIqW0Y4VlO2XSDPofBAqoJ1qJxgH9eiUDLv50Rixij2cDuEfx4M6DpD9UGZpRhT5Q8qg==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - } - }, - "call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", - "requires": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "caniuse-lite": { - "version": "1.0.30001505", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", - "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - } - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" - }, - "clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "compressorjs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/compressorjs/-/compressorjs-1.2.1.tgz", - "integrity": "sha512-+geIjeRnPhQ+LLvvA7wxBQE5ddeLU7pJ3FsKFWirDw6veY3s9iLxAQEw7lXGHnhCJvBujEQWuNnGzZcvCvdkLQ==", - "requires": { - "blueimp-canvas-to-blob": "^3.29.0", - "is-blob": "^2.1.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "deep-equal": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz", - "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==", - "requires": { - "is-arguments": "^1.1.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.5.1" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", - "requires": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - } - }, - "define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "requires": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "requires": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, - "dompurify": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.6.tgz", - "integrity": "sha512-ilkD8YEnnGh1zJ240uJsW7AzE+2qpbOUYjacomn3AvJ6J4JhKGSZ2nh4wUIXPZrEPppaCLx5jFe8T89Rk8tQ7w==" - }, - "electron-to-chromium": { - "version": "1.4.434", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.434.tgz", - "integrity": "sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", - "dev": true, - "requires": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "eslint": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz", - "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.43.0", - "@humanwhocodes/config-array": "^0.11.10", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.5.2", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "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.0", - "text-table": "^0.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "requires": {} - }, - "eslint-plugin-react-refresh": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.5.tgz", - "integrity": "sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==", - "dev": true, - "requires": {} - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true - }, - "espree": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", - "dev": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - } - }, - "esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "eventemitter3": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz", - "integrity": "sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==" - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-diff": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz", - "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==" - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fast-memoize": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz", - "integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==" - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-selector": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-0.6.0.tgz", - "integrity": "sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw==", - "requires": { - "tslib": "^2.4.0" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", - "requires": { - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", - "requires": { - "get-intrinsic": "^1.2.2" - } - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", - "requires": { - "function-bind": "^1.1.2" - } - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.0" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" - }, - "immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==" - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "is-blob": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-blob/-/is-blob-2.1.0.tgz", - "integrity": "sha512-SZ/fTft5eUhQM6oF/ZaASFDEdbFVe89Imltn9uZr03wdKMcWNVYSMjQPFtg05QuNkt5l5c135ElvXEQG0rk4tw==" - }, - "is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", - "requires": { - "immediate": "~3.0.5" - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "localforage": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", - "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", - "requires": { - "lie": "3.1.1" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "parchment": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz", - "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==" - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", - "dev": true, - "requires": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz", - "integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==" - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quill": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/quill/-/quill-1.3.7.tgz", - "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==", - "requires": { - "clone": "^2.1.1", - "deep-equal": "^1.0.1", - "eventemitter3": "^2.0.3", - "extend": "^3.0.2", - "parchment": "^1.1.4", - "quill-delta": "^3.6.2" - } - }, - "quill-delta": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-3.6.3.tgz", - "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==", - "requires": { - "deep-equal": "^1.0.1", - "extend": "^3.0.2", - "fast-diff": "1.1.2" - } - }, - "quill-image-resize-module-react": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/quill-image-resize-module-react/-/quill-image-resize-module-react-3.0.0.tgz", - "integrity": "sha512-3jVChLoXh+fwEELx3OswOEEuF+1KU3r/B9RAqZ//s+d+UMduVZzUepU1g/XoxjKoBJvWD2lJwBIFBRUNb8ebCw==", - "requires": { - "lodash": "^4.17.4", - "quill": "^1.2.2", - "raw-loader": "^0.5.1" - } - }, - "raw-loader": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", - "integrity": "sha512-sf7oGoLuaYAScB4VGr0tzetsYlS8EJH6qnTCfQ/WVEa89hALQ4RQfCKt5xCyPQKPDUbVUAIP1QsxAwfAjlDp7Q==" - }, - "re-resizable": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/re-resizable/-/re-resizable-6.9.6.tgz", - "integrity": "sha512-0xYKS5+Z0zk+vICQlcZW+g54CcJTTmHluA7JUUgvERDxnKAnytylcyPsA+BSFi759s5hPlHmBRegFrwXs2FuBQ==", - "requires": { - "fast-memoize": "^2.5.1" - } - }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - } - }, - "react-draggable": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.5.tgz", - "integrity": "sha512-OMHzJdyJbYTZo4uQE393fHcqqPYsEtkjfMgvCHr6rejT+Ezn4OZbNyGH50vv+SunC1RMvwOTSWkEODQLzw1M9g==", - "requires": { - "clsx": "^1.1.1", - "prop-types": "^15.8.1" - } - }, - "react-dropzone": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.2.3.tgz", - "integrity": "sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug==", - "requires": { - "attr-accept": "^2.2.2", - "file-selector": "^0.6.0", - "prop-types": "^15.8.1" - } - }, - "react-intersection-observer": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.5.0.tgz", - "integrity": "sha512-bQbfe6Jl8KSynbWfQWz8LoGCCmG6fhsilljgc6dc1NMYpNmP20wfFsrF7CE5N9+LbWx33DUgJdkNBVhU1JzIRA==", - "requires": {} - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, - "react-quill": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/react-quill/-/react-quill-2.0.0.tgz", - "integrity": "sha512-4qQtv1FtCfLgoD3PXAur5RyxuUbPXQGOHgTlFie3jtxp43mXDtzCKaOgQ3mLyZfi1PUlyjycfivKelFhy13QUg==", - "requires": { - "@types/quill": "^1.3.10", - "lodash": "^4.17.4", - "quill": "^1.3.7" - } - }, - "react-redux": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.1.0.tgz", - "integrity": "sha512-CtHZzAOxi7GQvTph4dVLWwZHAWUjV2kMEQtk50OrN8z3gKxpWg3Tz7JfDw32N3Rpd7fh02z73cF6yZkK467gbQ==", - "requires": { - "@babel/runtime": "^7.12.1", - "@types/hoist-non-react-statics": "^3.3.1", - "@types/use-sync-external-store": "^0.0.3", - "hoist-non-react-statics": "^3.3.2", - "react-is": "^18.0.0", - "use-sync-external-store": "^1.0.0" - } - }, - "react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", - "dev": true - }, - "react-rnd": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/react-rnd/-/react-rnd-10.4.1.tgz", - "integrity": "sha512-0m887AjQZr6p2ADLNnipquqsDq4XJu/uqVqI3zuoGD19tRm6uB83HmZWydtkilNp5EWsOHbLGF4IjWMdd5du8Q==", - "requires": { - "re-resizable": "6.9.6", - "react-draggable": "4.4.5", - "tslib": "2.3.1" - }, - "dependencies": { - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - } - } - }, - "react-router": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.13.0.tgz", - "integrity": "sha512-Si6KnfEnJw7gUQkNa70dlpI1bul46FuSxX5t5WwlUBxE25DAz2BjVkwaK8Y2s242bQrZPXCpmwLPtIO5pv4tXg==", - "requires": { - "@remix-run/router": "1.6.3" - } - }, - "react-router-dom": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.13.0.tgz", - "integrity": "sha512-6Nqoqd7fgwxxVGdbiMHTpDHCYPq62d7Wk1Of7B82vH7ZPwwsRaIa22zRZKPPg413R5REVNiyuQPKDG1bubcOFA==", - "requires": { - "@remix-run/router": "1.6.3", - "react-router": "6.13.0" - } - }, - "react-toastify": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.3.tgz", - "integrity": "sha512-fPfb8ghtn/XMxw3LkxQBk3IyagNpF/LIKjOBflbexr2AWxAH1MJgvnESwEwBn9liLFXgTKWgBSdZpw9m4OTHTg==", - "requires": { - "clsx": "^1.1.1" - } - }, - "react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "requires": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - } - }, - "redux": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", - "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", - "requires": { - "@babel/runtime": "^7.9.2" - } - }, - "redux-thunk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", - "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", - "requires": {} - }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" - } - }, - "reselect": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", - "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" - }, - "resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "requires": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rollup": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.14.1.tgz", - "integrity": "sha512-4LnHSdd3QK2pa1J6dFbfm1HN0D7vSK/ZuZTsdyUAlA6Rr1yTouUTL13HaDOGJVgby461AhrNGBS7sCGXXtT+SA==", - "dev": true, - "requires": { - "@rollup/rollup-android-arm-eabi": "4.14.1", - "@rollup/rollup-android-arm64": "4.14.1", - "@rollup/rollup-darwin-arm64": "4.14.1", - "@rollup/rollup-darwin-x64": "4.14.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.14.1", - "@rollup/rollup-linux-arm64-gnu": "4.14.1", - "@rollup/rollup-linux-arm64-musl": "4.14.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.14.1", - "@rollup/rollup-linux-riscv64-gnu": "4.14.1", - "@rollup/rollup-linux-s390x-gnu": "4.14.1", - "@rollup/rollup-linux-x64-gnu": "4.14.1", - "@rollup/rollup-linux-x64-musl": "4.14.1", - "@rollup/rollup-win32-arm64-msvc": "4.14.1", - "@rollup/rollup-win32-ia32-msvc": "4.14.1", - "@rollup/rollup-win32-x64-msvc": "4.14.1", - "@types/estree": "1.0.5", - "fsevents": "~2.3.2" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", - "requires": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - } - }, - "set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", - "requires": { - "define-data-property": "^1.0.1", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "short-unique-id": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/short-unique-id/-/short-unique-id-4.4.4.tgz", - "integrity": "sha512-oLF1NCmtbiTWl2SqdXZQbo5KM1b7axdp0RgQLq8qCBBLoq+o3A5wmLrNM6bZIh54/a8BJ3l69kTXuxwZ+XCYuw==" - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - }, - "source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "stylis": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", - "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "ts-key-enum": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/ts-key-enum/-/ts-key-enum-2.0.12.tgz", - "integrity": "sha512-Ety4IvKMaeG34AyXMp5r11XiVZNDRL+XWxXbVVJjLvq2vxKRttEANBE7Za1bxCAZRdH2/sZT6jFyyTWxXz28hw==" - }, - "tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typescript": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", - "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "requires": {} - }, - "vite": { - "version": "6.0.0-alpha.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.0-alpha.1.tgz", - "integrity": "sha512-LVvQVG3AftURxT11TgWXpfVIqBKC4D/NA5ikYQb9hDORF0hvO+gsyvNu8GR73/oag09A5JJAPAFU+r7ly4+9Lw==", - "dev": true, - "requires": { - "esbuild": "^0.20.1", - "fsevents": "~2.3.3", - "postcss": "^8.4.38", - "rollup": "^4.13.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} +{ + "name": "qsupport", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "qsupport", + "version": "1.0.0", + "dependencies": { + "@emotion/react": "^11.10.6", + "@emotion/styled": "^11.10.6", + "@mui/icons-material": "^5.11.11", + "@mui/material": "^5.11.13", + "@reduxjs/toolkit": "^1.9.3", + "compressorjs": "^1.2.1", + "dompurify": "^3.0.6", + "localforage": "^1.10.0", + "moment": "^2.29.4", + "prettier": "^3.2.4", + "quill-image-resize-module-react": "^3.0.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-dropzone": "^14.2.3", + "react-intersection-observer": "^9.4.3", + "react-quill": "^2.0.0", + "react-redux": "^8.0.5", + "react-rnd": "^10.4.1", + "react-router-dom": "^6.9.0", + "react-toastify": "^9.1.2", + "short-unique-id": "^4.4.4", + "ts-key-enum": "^2.0.12" + }, + "devDependencies": { + "@types/react": "^18.0.28", + "@types/react-dom": "^18.0.11", + "@typescript-eslint/eslint-plugin": "^5.57.1", + "@typescript-eslint/parser": "^5.57.1", + "@vitejs/plugin-react": "^4.0.0", + "eslint": "^8.38.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.3.4", + "typescript": "^5.0.2", + "vite": "6.0.0-alpha.1" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "dependencies": { + "@babel/highlight": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", + "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", + "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", + "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", + "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz", + "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz", + "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", + "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "dependencies": { + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/react": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", + "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz", + "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==", + "dependencies": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + }, + "node_modules/@emotion/styled": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", + "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.1", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz", + "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@mui/base": { + "version": "5.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.4.tgz", + "integrity": "sha512-ejhtqYJpjDgHGEljjMBQWZ22yEK0OzIXNa7toJmmXsP4TT3W7xVy8bTJ0TniPDf+JNjrsgfgiFTDGdlEhV1E+g==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@emotion/is-prop-valid": "^1.2.1", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.13.1", + "@popperjs/core": "^2.11.8", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "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 + } + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "5.13.4", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.4.tgz", + "integrity": "sha512-yFrMWcrlI0TqRN5jpb6Ma9iI7sGTHpytdzzL33oskFHNQ8UgrtPas33Y1K7sWAMwCrr1qbWDrOHLAQG4tAzuSw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + } + }, + "node_modules/@mui/icons-material": { + "version": "5.11.16", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.16.tgz", + "integrity": "sha512-oKkx9z9Kwg40NtcIajF9uOXhxiyTZrrm9nmIJ4UjkU2IdHpd4QVLbCc/5hZN/y0C6qzi2Zlxyr9TGddQx2vx2A==", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "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 + } + } + }, + "node_modules/@mui/material": { + "version": "5.13.5", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.13.5.tgz", + "integrity": "sha512-eMay+Ue1OYXOFMQA5Aau7qbAa/kWHLAyi0McsbPTWssCbGehqkF6CIdPsfVGw6tlO+xPee1hUitphHJNL3xpOQ==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@mui/base": "5.0.0-beta.4", + "@mui/core-downloads-tracker": "^5.13.4", + "@mui/system": "^5.13.5", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.13.1", + "@types/react-transition-group": "^4.4.6", + "clsx": "^1.2.1", + "csstype": "^3.1.2", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "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 + } + } + }, + "node_modules/@mui/private-theming": { + "version": "5.13.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.1.tgz", + "integrity": "sha512-HW4npLUD9BAkVppOUZHeO1FOKUJWAwbpy0VQoGe3McUYTlck1HezGHQCfBQ5S/Nszi7EViqiimECVl9xi+/WjQ==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@mui/utils": "^5.13.1", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "5.13.2", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.13.2.tgz", + "integrity": "sha512-VCYCU6xVtXOrIN8lcbuPmoG+u7FYuOERG++fpY74hPpEWkyFQG97F+/XfTQVYzlR2m7nPjnwVUgATcTCMEaMvw==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "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 + } + } + }, + "node_modules/@mui/system": { + "version": "5.13.5", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.13.5.tgz", + "integrity": "sha512-n0gzUxoZ2ZHZgnExkh2Htvo9uW2oakofgPRQrDoa/GQOWyRD0NH9MDszBwOb6AAoXZb+OV5TE7I4LeZ/dzgHYA==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@mui/private-theming": "^5.13.1", + "@mui/styled-engine": "^5.13.2", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.13.1", + "clsx": "^1.2.1", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "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 + } + } + }, + "node_modules/@mui/types": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", + "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==", + "peerDependencies": { + "@types/react": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "5.13.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.13.1.tgz", + "integrity": "sha512-6lXdWwmlUbEU2jUI8blw38Kt+3ly7xkmV9ljzY4Q20WhsJMWiNry9CX8M+TaP/HbtuyR8XKsdMgQW7h7MM3n3A==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@types/prop-types": "^15.7.5", + "@types/react-is": "^18.2.0", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@reduxjs/toolkit": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.5.tgz", + "integrity": "sha512-Rt97jHmfTeaxL4swLRNPD/zV4OxTes4la07Xc4hetpUW/vc75t5m1ANyxG6ymnEQ2FsLQsoMlYB2vV1sO3m8tQ==", + "dependencies": { + "immer": "^9.0.21", + "redux": "^4.2.1", + "redux-thunk": "^2.4.2", + "reselect": "^4.1.8" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18", + "react-redux": "^7.2.1 || ^8.0.2" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, + "node_modules/@remix-run/router": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.6.3.tgz", + "integrity": "sha512-EXJysQ7J3veRECd0kZFQwYYd5sJMcq2O/m60zu1W2l3oVQ9xtub8jTOtYRE0+M2iomyG/W3Ps7+vp2kna0C27Q==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.1.tgz", + "integrity": "sha512-fH8/o8nSUek8ceQnT7K4EQbSiV7jgkHq81m9lWZFIXjJ7lJzpWXbQFpT/Zh6OZYnpFykvzC3fbEvEAFZu03dPA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.1.tgz", + "integrity": "sha512-Y/9OHLjzkunF+KGEoJr3heiD5X9OLa8sbT1lm0NYeKyaM3oMhhQFvPB0bNZYJwlq93j8Z6wSxh9+cyKQaxS7PQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.1.tgz", + "integrity": "sha512-+kecg3FY84WadgcuSVm6llrABOdQAEbNdnpi5X3UwWiFVhZIZvKgGrF7kmLguvxHNQy+UuRV66cLVl3S+Rkt+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.1.tgz", + "integrity": "sha512-2pYRzEjVqq2TB/UNv47BV/8vQiXkFGVmPFwJb+1E0IFFZbIX8/jo1olxqqMbo6xCXf8kabANhp5bzCij2tFLUA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.1.tgz", + "integrity": "sha512-mS6wQ6Do6/wmrF9aTFVpIJ3/IDXhg1EZcQFYHZLHqw6AzMBjTHWnCG35HxSqUNphh0EHqSM6wRTT8HsL1C0x5g==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.1.tgz", + "integrity": "sha512-p9rGKYkHdFMzhckOTFubfxgyIO1vw//7IIjBBRVzyZebWlzRLeNhqxuSaZ7kCEKVkm/kuC9fVRW9HkC/zNRG2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.1.tgz", + "integrity": "sha512-nDY6Yz5xS/Y4M2i9JLQd3Rofh5OR8Bn8qe3Mv/qCVpHFlwtZSBYSPaU4mrGazWkXrdQ98GB//H0BirGR/SKFSw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.1.tgz", + "integrity": "sha512-im7HE4VBL+aDswvcmfx88Mp1soqL9OBsdDBU8NqDEYtkri0qV0THhQsvZtZeNNlLeCUQ16PZyv7cqutjDF35qw==", + "cpu": [ + "ppc64le" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.1.tgz", + "integrity": "sha512-RWdiHuAxWmzPJgaHJdpvUUlDz8sdQz4P2uv367T2JocdDa98iRw2UjIJ4QxSyt077mXZT2X6pKfT2iYtVEvOFw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.1.tgz", + "integrity": "sha512-VMgaGQ5zRX6ZqV/fas65/sUGc9cPmsntq2FiGmayW9KMNfWVG/j0BAqImvU4KTeOOgYSf1F+k6at1UfNONuNjA==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.1.tgz", + "integrity": "sha512-9Q7DGjZN+hTdJomaQ3Iub4m6VPu1r94bmK2z3UeWP3dGUecRC54tmVu9vKHTm1bOt3ASoYtEz6JSRLFzrysKlA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.1.tgz", + "integrity": "sha512-JNEG/Ti55413SsreTguSx0LOVKX902OfXIKVg+TCXO6Gjans/k9O6ww9q3oLGjNDaTLxM+IHFMeXy/0RXL5R/g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.1.tgz", + "integrity": "sha512-ryS22I9y0mumlLNwDFYZRDFLwWh3aKaC72CWjFcFvxK0U6v/mOkM5Up1bTbCRAhv3kEIwW2ajROegCIQViUCeA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.1.tgz", + "integrity": "sha512-TdloItiGk+T0mTxKx7Hp279xy30LspMso+GzQvV2maYePMAWdmrzqSNZhUpPj3CGw12aGj57I026PgLCTu8CGg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.1.tgz", + "integrity": "sha512-wQGI+LY/Py20zdUPq+XCem7JcPOyzIJBm3dli+56DJsQOHbnXZFEwgmnC6el1TPAfC8lBT3m+z69RmLykNUbew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "node_modules/@types/quill": { + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/@types/quill/-/quill-1.3.10.tgz", + "integrity": "sha512-IhW3fPW+bkt9MLNlycw8u8fWb7oO7W5URC9MfZYHBlA24rex9rs23D5DETChu1zvgVdc5ka64ICjJOgQMr6Shw==", + "dependencies": { + "parchment": "^1.1.2" + } + }, + "node_modules/@types/react": { + "version": "18.2.13", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.13.tgz", + "integrity": "sha512-vJ+zElvi/Zn9cVXB5slX2xL8PZodPCwPRDpittQdw43JR2AJ5k3vKdgJJyneV/cYgIbLQUwXa9JVDvUZXGba+Q==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.6.tgz", + "integrity": "sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==", + "devOptional": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-is": { + "version": "18.2.1", + "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.2.1.tgz", + "integrity": "sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz", + "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" + }, + "node_modules/@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.0.tgz", + "integrity": "sha512-78B+anHLF1TI8Jn/cD0Q00TBYdMgjdOn980JfAVa9yw5sop8nyTfVOQAv6LWywkOGLclDBtv5z3oxN4w7jxyNg==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.60.0", + "@typescript-eslint/type-utils": "5.60.0", + "@typescript-eslint/utils": "5.60.0", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.60.0.tgz", + "integrity": "sha512-jBONcBsDJ9UoTWrARkRRCgDz6wUggmH5RpQVlt7BimSwaTkTjwypGzKORXbR4/2Hqjk9hgwlon2rVQAjWNpkyQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.60.0", + "@typescript-eslint/types": "5.60.0", + "@typescript-eslint/typescript-estree": "5.60.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.0.tgz", + "integrity": "sha512-hakuzcxPwXi2ihf9WQu1BbRj1e/Pd8ZZwVTG9kfbxAMZstKz8/9OoexIwnmLzShtsdap5U/CoQGRCWlSuPbYxQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.60.0", + "@typescript-eslint/visitor-keys": "5.60.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.60.0.tgz", + "integrity": "sha512-X7NsRQddORMYRFH7FWo6sA9Y/zbJ8s1x1RIAtnlj6YprbToTiQnM6vxcMu7iYhdunmoC0rUWlca13D5DVHkK2g==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.60.0", + "@typescript-eslint/utils": "5.60.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.0.tgz", + "integrity": "sha512-ascOuoCpNZBccFVNJRSC6rPq4EmJ2NkuoKnd6LDNyAQmdDnziAtxbCGWCbefG1CNzmDvd05zO36AmB7H8RzKPA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.0.tgz", + "integrity": "sha512-R43thAuwarC99SnvrBmh26tc7F6sPa2B3evkXp/8q954kYL6Ro56AwASYWtEEi+4j09GbiNAHqYwNNZuNlARGQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.60.0", + "@typescript-eslint/visitor-keys": "5.60.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.0.tgz", + "integrity": "sha512-ba51uMqDtfLQ5+xHtwlO84vkdjrqNzOnqrnwbMHMRY8Tqeme8C2Q8Fc7LajfGR+e3/4LoYiWXUM6BpIIbHJ4hQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.60.0", + "@typescript-eslint/types": "5.60.0", + "@typescript-eslint/typescript-estree": "5.60.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.0.tgz", + "integrity": "sha512-wm9Uz71SbCyhUKgcaPRauBdTegUyY/ZWl8gLwD/i/ybJqscrrdVSFImpvUz16BLPChIeKBK5Fa9s6KDQjsjyWw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.60.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.1.tgz", + "integrity": "sha512-g25lL98essfeSj43HJ0o4DMp0325XK0ITkxpgChzJU/CyemgyChtlxfnRbjfwxDGCTRxTiXtQAsdebQXKMRSOA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.22.5", + "@babel/plugin-transform-react-jsx-self": "^7.22.5", + "@babel/plugin-transform-react-jsx-source": "^7.22.5", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0" + } + }, + "node_modules/acorn": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/attr-accept": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.2.tgz", + "integrity": "sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/blueimp-canvas-to-blob": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/blueimp-canvas-to-blob/-/blueimp-canvas-to-blob-3.29.0.tgz", + "integrity": "sha512-0pcSSGxC0QxT+yVkivxIqW0Y4VlO2XSDPofBAqoJ1qJxgH9eiUDLv50Rixij2cDuEfx4M6DpD9UGZpRhT5Q8qg==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001505", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", + "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/compressorjs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/compressorjs/-/compressorjs-1.2.1.tgz", + "integrity": "sha512-+geIjeRnPhQ+LLvvA7wxBQE5ddeLU7pJ3FsKFWirDw6veY3s9iLxAQEw7lXGHnhCJvBujEQWuNnGzZcvCvdkLQ==", + "dependencies": { + "blueimp-canvas-to-blob": "^3.29.0", + "is-blob": "^2.1.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-equal": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz", + "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==", + "dependencies": { + "is-arguments": "^1.1.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.5.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dompurify": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.6.tgz", + "integrity": "sha512-ilkD8YEnnGh1zJ240uJsW7AzE+2qpbOUYjacomn3AvJ6J4JhKGSZ2nh4wUIXPZrEPppaCLx5jFe8T89Rk8tQ7w==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.434", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.434.tgz", + "integrity": "sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz", + "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.43.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "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.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.5.tgz", + "integrity": "sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==", + "dev": true, + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz", + "integrity": "sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz", + "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fast-memoize": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz", + "integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==" + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-selector": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-0.6.0.tgz", + "integrity": "sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw==", + "dependencies": { + "tslib": "^2.4.0" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-blob": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-blob/-/is-blob-2.1.0.tgz", + "integrity": "sha512-SZ/fTft5eUhQM6oF/ZaASFDEdbFVe89Imltn9uZr03wdKMcWNVYSMjQPFtg05QuNkt5l5c135ElvXEQG0rk4tw==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "dependencies": { + "lie": "3.1.1" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parchment": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz", + "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz", + "integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quill": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/quill/-/quill-1.3.7.tgz", + "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==", + "dependencies": { + "clone": "^2.1.1", + "deep-equal": "^1.0.1", + "eventemitter3": "^2.0.3", + "extend": "^3.0.2", + "parchment": "^1.1.4", + "quill-delta": "^3.6.2" + } + }, + "node_modules/quill-delta": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-3.6.3.tgz", + "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==", + "dependencies": { + "deep-equal": "^1.0.1", + "extend": "^3.0.2", + "fast-diff": "1.1.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/quill-image-resize-module-react": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/quill-image-resize-module-react/-/quill-image-resize-module-react-3.0.0.tgz", + "integrity": "sha512-3jVChLoXh+fwEELx3OswOEEuF+1KU3r/B9RAqZ//s+d+UMduVZzUepU1g/XoxjKoBJvWD2lJwBIFBRUNb8ebCw==", + "dependencies": { + "lodash": "^4.17.4", + "quill": "^1.2.2", + "raw-loader": "^0.5.1" + } + }, + "node_modules/raw-loader": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", + "integrity": "sha512-sf7oGoLuaYAScB4VGr0tzetsYlS8EJH6qnTCfQ/WVEa89hALQ4RQfCKt5xCyPQKPDUbVUAIP1QsxAwfAjlDp7Q==" + }, + "node_modules/re-resizable": { + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/re-resizable/-/re-resizable-6.9.6.tgz", + "integrity": "sha512-0xYKS5+Z0zk+vICQlcZW+g54CcJTTmHluA7JUUgvERDxnKAnytylcyPsA+BSFi759s5hPlHmBRegFrwXs2FuBQ==", + "dependencies": { + "fast-memoize": "^2.5.1" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-draggable": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.5.tgz", + "integrity": "sha512-OMHzJdyJbYTZo4uQE393fHcqqPYsEtkjfMgvCHr6rejT+Ezn4OZbNyGH50vv+SunC1RMvwOTSWkEODQLzw1M9g==", + "dependencies": { + "clsx": "^1.1.1", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": ">= 16.3.0", + "react-dom": ">= 16.3.0" + } + }, + "node_modules/react-dropzone": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.2.3.tgz", + "integrity": "sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug==", + "dependencies": { + "attr-accept": "^2.2.2", + "file-selector": "^0.6.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "react": ">= 16.8 || 18.0.0" + } + }, + "node_modules/react-intersection-observer": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.5.0.tgz", + "integrity": "sha512-bQbfe6Jl8KSynbWfQWz8LoGCCmG6fhsilljgc6dc1NMYpNmP20wfFsrF7CE5N9+LbWx33DUgJdkNBVhU1JzIRA==", + "peerDependencies": { + "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/react-quill": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-quill/-/react-quill-2.0.0.tgz", + "integrity": "sha512-4qQtv1FtCfLgoD3PXAur5RyxuUbPXQGOHgTlFie3jtxp43mXDtzCKaOgQ3mLyZfi1PUlyjycfivKelFhy13QUg==", + "dependencies": { + "@types/quill": "^1.3.10", + "lodash": "^4.17.4", + "quill": "^1.3.7" + }, + "peerDependencies": { + "react": "^16 || ^17 || ^18", + "react-dom": "^16 || ^17 || ^18" + } + }, + "node_modules/react-redux": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.1.0.tgz", + "integrity": "sha512-CtHZzAOxi7GQvTph4dVLWwZHAWUjV2kMEQtk50OrN8z3gKxpWg3Tz7JfDw32N3Rpd7fh02z73cF6yZkK467gbQ==", + "dependencies": { + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", + "hoist-non-react-statics": "^3.3.2", + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" + }, + "peerDependencies": { + "@reduxjs/toolkit": "^1 || ^2.0.0-beta.0", + "@types/react": "^16.8 || ^17.0 || ^18.0", + "@types/react-dom": "^16.8 || ^17.0 || ^18.0", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0", + "react-native": ">=0.59", + "redux": "^4 || ^5.0.0-beta.0" + }, + "peerDependenciesMeta": { + "@reduxjs/toolkit": { + "optional": true + }, + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-rnd": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/react-rnd/-/react-rnd-10.4.1.tgz", + "integrity": "sha512-0m887AjQZr6p2ADLNnipquqsDq4XJu/uqVqI3zuoGD19tRm6uB83HmZWydtkilNp5EWsOHbLGF4IjWMdd5du8Q==", + "dependencies": { + "re-resizable": "6.9.6", + "react-draggable": "4.4.5", + "tslib": "2.3.1" + }, + "peerDependencies": { + "react": ">=16.3.0", + "react-dom": ">=16.3.0" + } + }, + "node_modules/react-rnd/node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "node_modules/react-router": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.13.0.tgz", + "integrity": "sha512-Si6KnfEnJw7gUQkNa70dlpI1bul46FuSxX5t5WwlUBxE25DAz2BjVkwaK8Y2s242bQrZPXCpmwLPtIO5pv4tXg==", + "dependencies": { + "@remix-run/router": "1.6.3" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.13.0.tgz", + "integrity": "sha512-6Nqoqd7fgwxxVGdbiMHTpDHCYPq62d7Wk1Of7B82vH7ZPwwsRaIa22zRZKPPg413R5REVNiyuQPKDG1bubcOFA==", + "dependencies": { + "@remix-run/router": "1.6.3", + "react-router": "6.13.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-toastify": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.3.tgz", + "integrity": "sha512-fPfb8ghtn/XMxw3LkxQBk3IyagNpF/LIKjOBflbexr2AWxAH1MJgvnESwEwBn9liLFXgTKWgBSdZpw9m4OTHTg==", + "dependencies": { + "clsx": "^1.1.1" + }, + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/redux": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, + "node_modules/redux-thunk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", + "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", + "peerDependencies": { + "redux": "^4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reselect": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" + }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.14.1.tgz", + "integrity": "sha512-4LnHSdd3QK2pa1J6dFbfm1HN0D7vSK/ZuZTsdyUAlA6Rr1yTouUTL13HaDOGJVgby461AhrNGBS7sCGXXtT+SA==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.14.1", + "@rollup/rollup-android-arm64": "4.14.1", + "@rollup/rollup-darwin-arm64": "4.14.1", + "@rollup/rollup-darwin-x64": "4.14.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.14.1", + "@rollup/rollup-linux-arm64-gnu": "4.14.1", + "@rollup/rollup-linux-arm64-musl": "4.14.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.14.1", + "@rollup/rollup-linux-riscv64-gnu": "4.14.1", + "@rollup/rollup-linux-s390x-gnu": "4.14.1", + "@rollup/rollup-linux-x64-gnu": "4.14.1", + "@rollup/rollup-linux-x64-musl": "4.14.1", + "@rollup/rollup-win32-arm64-msvc": "4.14.1", + "@rollup/rollup-win32-ia32-msvc": "4.14.1", + "@rollup/rollup-win32-x64-msvc": "4.14.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/short-unique-id": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/short-unique-id/-/short-unique-id-4.4.4.tgz", + "integrity": "sha512-oLF1NCmtbiTWl2SqdXZQbo5KM1b7axdp0RgQLq8qCBBLoq+o3A5wmLrNM6bZIh54/a8BJ3l69kTXuxwZ+XCYuw==", + "bin": { + "short-unique-id": "bin/short-unique-id", + "suid": "bin/short-unique-id" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-key-enum": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/ts-key-enum/-/ts-key-enum-2.0.12.tgz", + "integrity": "sha512-Ety4IvKMaeG34AyXMp5r11XiVZNDRL+XWxXbVVJjLvq2vxKRttEANBE7Za1bxCAZRdH2/sZT6jFyyTWxXz28hw==" + }, + "node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "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" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/vite": { + "version": "6.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.0-alpha.1.tgz", + "integrity": "sha512-LVvQVG3AftURxT11TgWXpfVIqBKC4D/NA5ikYQb9hDORF0hvO+gsyvNu8GR73/oag09A5JJAPAFU+r7ly4+9Lw==", + "dev": true, + "dependencies": { + "esbuild": "^0.20.1", + "postcss": "^8.4.38", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "requires": { + "@babel/highlight": "^7.22.5" + } + }, + "@babel/compat-data": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", + "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", + "dev": true + }, + "@babel/core": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", + "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" + }, + "@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==" + }, + "@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", + "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "requires": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", + "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", + "dev": true + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz", + "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz", + "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, + "@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/traverse": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", + "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "requires": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + } + }, + "@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "requires": { + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" + } + }, + "@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, + "@emotion/is-prop-valid": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "requires": { + "@emotion/memoize": "^0.8.1" + } + }, + "@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "@emotion/react": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", + "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + } + }, + "@emotion/serialize": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz", + "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==", + "requires": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + } + }, + "@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + }, + "@emotion/styled": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", + "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.1", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" + } + }, + "@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "requires": {} + }, + "@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + }, + "@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + }, + "@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "dev": true, + "optional": true + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + } + } + }, + "@eslint/js": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz", + "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + }, + "dependencies": { + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + } + } + }, + "@mui/base": { + "version": "5.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.4.tgz", + "integrity": "sha512-ejhtqYJpjDgHGEljjMBQWZ22yEK0OzIXNa7toJmmXsP4TT3W7xVy8bTJ0TniPDf+JNjrsgfgiFTDGdlEhV1E+g==", + "requires": { + "@babel/runtime": "^7.21.0", + "@emotion/is-prop-valid": "^1.2.1", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.13.1", + "@popperjs/core": "^2.11.8", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + } + }, + "@mui/core-downloads-tracker": { + "version": "5.13.4", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.4.tgz", + "integrity": "sha512-yFrMWcrlI0TqRN5jpb6Ma9iI7sGTHpytdzzL33oskFHNQ8UgrtPas33Y1K7sWAMwCrr1qbWDrOHLAQG4tAzuSw==" + }, + "@mui/icons-material": { + "version": "5.11.16", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.16.tgz", + "integrity": "sha512-oKkx9z9Kwg40NtcIajF9uOXhxiyTZrrm9nmIJ4UjkU2IdHpd4QVLbCc/5hZN/y0C6qzi2Zlxyr9TGddQx2vx2A==", + "requires": { + "@babel/runtime": "^7.21.0" + } + }, + "@mui/material": { + "version": "5.13.5", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.13.5.tgz", + "integrity": "sha512-eMay+Ue1OYXOFMQA5Aau7qbAa/kWHLAyi0McsbPTWssCbGehqkF6CIdPsfVGw6tlO+xPee1hUitphHJNL3xpOQ==", + "requires": { + "@babel/runtime": "^7.21.0", + "@mui/base": "5.0.0-beta.4", + "@mui/core-downloads-tracker": "^5.13.4", + "@mui/system": "^5.13.5", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.13.1", + "@types/react-transition-group": "^4.4.6", + "clsx": "^1.2.1", + "csstype": "^3.1.2", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + } + }, + "@mui/private-theming": { + "version": "5.13.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.1.tgz", + "integrity": "sha512-HW4npLUD9BAkVppOUZHeO1FOKUJWAwbpy0VQoGe3McUYTlck1HezGHQCfBQ5S/Nszi7EViqiimECVl9xi+/WjQ==", + "requires": { + "@babel/runtime": "^7.21.0", + "@mui/utils": "^5.13.1", + "prop-types": "^15.8.1" + } + }, + "@mui/styled-engine": { + "version": "5.13.2", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.13.2.tgz", + "integrity": "sha512-VCYCU6xVtXOrIN8lcbuPmoG+u7FYuOERG++fpY74hPpEWkyFQG97F+/XfTQVYzlR2m7nPjnwVUgATcTCMEaMvw==", + "requires": { + "@babel/runtime": "^7.21.0", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + } + }, + "@mui/system": { + "version": "5.13.5", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.13.5.tgz", + "integrity": "sha512-n0gzUxoZ2ZHZgnExkh2Htvo9uW2oakofgPRQrDoa/GQOWyRD0NH9MDszBwOb6AAoXZb+OV5TE7I4LeZ/dzgHYA==", + "requires": { + "@babel/runtime": "^7.21.0", + "@mui/private-theming": "^5.13.1", + "@mui/styled-engine": "^5.13.2", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.13.1", + "clsx": "^1.2.1", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + } + }, + "@mui/types": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", + "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==", + "requires": {} + }, + "@mui/utils": { + "version": "5.13.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.13.1.tgz", + "integrity": "sha512-6lXdWwmlUbEU2jUI8blw38Kt+3ly7xkmV9ljzY4Q20WhsJMWiNry9CX8M+TaP/HbtuyR8XKsdMgQW7h7MM3n3A==", + "requires": { + "@babel/runtime": "^7.21.0", + "@types/prop-types": "^15.7.5", + "@types/react-is": "^18.2.0", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==" + }, + "@reduxjs/toolkit": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.5.tgz", + "integrity": "sha512-Rt97jHmfTeaxL4swLRNPD/zV4OxTes4la07Xc4hetpUW/vc75t5m1ANyxG6ymnEQ2FsLQsoMlYB2vV1sO3m8tQ==", + "requires": { + "immer": "^9.0.21", + "redux": "^4.2.1", + "redux-thunk": "^2.4.2", + "reselect": "^4.1.8" + } + }, + "@remix-run/router": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.6.3.tgz", + "integrity": "sha512-EXJysQ7J3veRECd0kZFQwYYd5sJMcq2O/m60zu1W2l3oVQ9xtub8jTOtYRE0+M2iomyG/W3Ps7+vp2kna0C27Q==" + }, + "@rollup/rollup-android-arm-eabi": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.1.tgz", + "integrity": "sha512-fH8/o8nSUek8ceQnT7K4EQbSiV7jgkHq81m9lWZFIXjJ7lJzpWXbQFpT/Zh6OZYnpFykvzC3fbEvEAFZu03dPA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-android-arm64": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.1.tgz", + "integrity": "sha512-Y/9OHLjzkunF+KGEoJr3heiD5X9OLa8sbT1lm0NYeKyaM3oMhhQFvPB0bNZYJwlq93j8Z6wSxh9+cyKQaxS7PQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-arm64": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.1.tgz", + "integrity": "sha512-+kecg3FY84WadgcuSVm6llrABOdQAEbNdnpi5X3UwWiFVhZIZvKgGrF7kmLguvxHNQy+UuRV66cLVl3S+Rkt+Q==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.1.tgz", + "integrity": "sha512-2pYRzEjVqq2TB/UNv47BV/8vQiXkFGVmPFwJb+1E0IFFZbIX8/jo1olxqqMbo6xCXf8kabANhp5bzCij2tFLUA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.1.tgz", + "integrity": "sha512-mS6wQ6Do6/wmrF9aTFVpIJ3/IDXhg1EZcQFYHZLHqw6AzMBjTHWnCG35HxSqUNphh0EHqSM6wRTT8HsL1C0x5g==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.1.tgz", + "integrity": "sha512-p9rGKYkHdFMzhckOTFubfxgyIO1vw//7IIjBBRVzyZebWlzRLeNhqxuSaZ7kCEKVkm/kuC9fVRW9HkC/zNRG2w==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.1.tgz", + "integrity": "sha512-nDY6Yz5xS/Y4M2i9JLQd3Rofh5OR8Bn8qe3Mv/qCVpHFlwtZSBYSPaU4mrGazWkXrdQ98GB//H0BirGR/SKFSw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.1.tgz", + "integrity": "sha512-im7HE4VBL+aDswvcmfx88Mp1soqL9OBsdDBU8NqDEYtkri0qV0THhQsvZtZeNNlLeCUQ16PZyv7cqutjDF35qw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-riscv64-gnu": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.1.tgz", + "integrity": "sha512-RWdiHuAxWmzPJgaHJdpvUUlDz8sdQz4P2uv367T2JocdDa98iRw2UjIJ4QxSyt077mXZT2X6pKfT2iYtVEvOFw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-s390x-gnu": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.1.tgz", + "integrity": "sha512-VMgaGQ5zRX6ZqV/fas65/sUGc9cPmsntq2FiGmayW9KMNfWVG/j0BAqImvU4KTeOOgYSf1F+k6at1UfNONuNjA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.1.tgz", + "integrity": "sha512-9Q7DGjZN+hTdJomaQ3Iub4m6VPu1r94bmK2z3UeWP3dGUecRC54tmVu9vKHTm1bOt3ASoYtEz6JSRLFzrysKlA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.1.tgz", + "integrity": "sha512-JNEG/Ti55413SsreTguSx0LOVKX902OfXIKVg+TCXO6Gjans/k9O6ww9q3oLGjNDaTLxM+IHFMeXy/0RXL5R/g==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.1.tgz", + "integrity": "sha512-ryS22I9y0mumlLNwDFYZRDFLwWh3aKaC72CWjFcFvxK0U6v/mOkM5Up1bTbCRAhv3kEIwW2ajROegCIQViUCeA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-ia32-msvc": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.1.tgz", + "integrity": "sha512-TdloItiGk+T0mTxKx7Hp279xy30LspMso+GzQvV2maYePMAWdmrzqSNZhUpPj3CGw12aGj57I026PgLCTu8CGg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-x64-msvc": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.1.tgz", + "integrity": "sha512-wQGI+LY/Py20zdUPq+XCem7JcPOyzIJBm3dli+56DJsQOHbnXZFEwgmnC6el1TPAfC8lBT3m+z69RmLykNUbew==", + "dev": true, + "optional": true + }, + "@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "requires": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "@types/quill": { + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/@types/quill/-/quill-1.3.10.tgz", + "integrity": "sha512-IhW3fPW+bkt9MLNlycw8u8fWb7oO7W5URC9MfZYHBlA24rex9rs23D5DETChu1zvgVdc5ka64ICjJOgQMr6Shw==", + "requires": { + "parchment": "^1.1.2" + } + }, + "@types/react": { + "version": "18.2.13", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.13.tgz", + "integrity": "sha512-vJ+zElvi/Zn9cVXB5slX2xL8PZodPCwPRDpittQdw43JR2AJ5k3vKdgJJyneV/cYgIbLQUwXa9JVDvUZXGba+Q==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.6.tgz", + "integrity": "sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==", + "devOptional": true, + "requires": { + "@types/react": "*" + } + }, + "@types/react-is": { + "version": "18.2.1", + "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.2.1.tgz", + "integrity": "sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw==", + "requires": { + "@types/react": "*" + } + }, + "@types/react-transition-group": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz", + "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==", + "requires": { + "@types/react": "*" + } + }, + "@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" + }, + "@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, + "@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.0.tgz", + "integrity": "sha512-78B+anHLF1TI8Jn/cD0Q00TBYdMgjdOn980JfAVa9yw5sop8nyTfVOQAv6LWywkOGLclDBtv5z3oxN4w7jxyNg==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.60.0", + "@typescript-eslint/type-utils": "5.60.0", + "@typescript-eslint/utils": "5.60.0", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.60.0.tgz", + "integrity": "sha512-jBONcBsDJ9UoTWrARkRRCgDz6wUggmH5RpQVlt7BimSwaTkTjwypGzKORXbR4/2Hqjk9hgwlon2rVQAjWNpkyQ==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.60.0", + "@typescript-eslint/types": "5.60.0", + "@typescript-eslint/typescript-estree": "5.60.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.0.tgz", + "integrity": "sha512-hakuzcxPwXi2ihf9WQu1BbRj1e/Pd8ZZwVTG9kfbxAMZstKz8/9OoexIwnmLzShtsdap5U/CoQGRCWlSuPbYxQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.60.0", + "@typescript-eslint/visitor-keys": "5.60.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.60.0.tgz", + "integrity": "sha512-X7NsRQddORMYRFH7FWo6sA9Y/zbJ8s1x1RIAtnlj6YprbToTiQnM6vxcMu7iYhdunmoC0rUWlca13D5DVHkK2g==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.60.0", + "@typescript-eslint/utils": "5.60.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.0.tgz", + "integrity": "sha512-ascOuoCpNZBccFVNJRSC6rPq4EmJ2NkuoKnd6LDNyAQmdDnziAtxbCGWCbefG1CNzmDvd05zO36AmB7H8RzKPA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.0.tgz", + "integrity": "sha512-R43thAuwarC99SnvrBmh26tc7F6sPa2B3evkXp/8q954kYL6Ro56AwASYWtEEi+4j09GbiNAHqYwNNZuNlARGQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.60.0", + "@typescript-eslint/visitor-keys": "5.60.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.0.tgz", + "integrity": "sha512-ba51uMqDtfLQ5+xHtwlO84vkdjrqNzOnqrnwbMHMRY8Tqeme8C2Q8Fc7LajfGR+e3/4LoYiWXUM6BpIIbHJ4hQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.60.0", + "@typescript-eslint/types": "5.60.0", + "@typescript-eslint/typescript-estree": "5.60.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.0.tgz", + "integrity": "sha512-wm9Uz71SbCyhUKgcaPRauBdTegUyY/ZWl8gLwD/i/ybJqscrrdVSFImpvUz16BLPChIeKBK5Fa9s6KDQjsjyWw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.60.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "@vitejs/plugin-react": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.1.tgz", + "integrity": "sha512-g25lL98essfeSj43HJ0o4DMp0325XK0ITkxpgChzJU/CyemgyChtlxfnRbjfwxDGCTRxTiXtQAsdebQXKMRSOA==", + "dev": true, + "requires": { + "@babel/core": "^7.22.5", + "@babel/plugin-transform-react-jsx-self": "^7.22.5", + "@babel/plugin-transform-react-jsx-source": "^7.22.5", + "react-refresh": "^0.14.0" + } + }, + "acorn": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "attr-accept": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.2.tgz", + "integrity": "sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==" + }, + "babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "requires": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "blueimp-canvas-to-blob": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/blueimp-canvas-to-blob/-/blueimp-canvas-to-blob-3.29.0.tgz", + "integrity": "sha512-0pcSSGxC0QxT+yVkivxIqW0Y4VlO2XSDPofBAqoJ1qJxgH9eiUDLv50Rixij2cDuEfx4M6DpD9UGZpRhT5Q8qg==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + } + }, + "call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "requires": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "caniuse-lite": { + "version": "1.0.30001505", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", + "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + } + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" + }, + "clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "compressorjs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/compressorjs/-/compressorjs-1.2.1.tgz", + "integrity": "sha512-+geIjeRnPhQ+LLvvA7wxBQE5ddeLU7pJ3FsKFWirDw6veY3s9iLxAQEw7lXGHnhCJvBujEQWuNnGzZcvCvdkLQ==", + "requires": { + "blueimp-canvas-to-blob": "^3.29.0", + "is-blob": "^2.1.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-equal": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz", + "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==", + "requires": { + "is-arguments": "^1.1.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.5.1" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "requires": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "dompurify": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.6.tgz", + "integrity": "sha512-ilkD8YEnnGh1zJ240uJsW7AzE+2qpbOUYjacomn3AvJ6J4JhKGSZ2nh4wUIXPZrEPppaCLx5jFe8T89Rk8tQ7w==" + }, + "electron-to-chromium": { + "version": "1.4.434", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.434.tgz", + "integrity": "sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "eslint": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz", + "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.43.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "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.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "requires": {} + }, + "eslint-plugin-react-refresh": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.5.tgz", + "integrity": "sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==", + "dev": true, + "requires": {} + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true + }, + "espree": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "eventemitter3": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz", + "integrity": "sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==" + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-diff": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz", + "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==" + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fast-memoize": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz", + "integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==" + }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-selector": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-0.6.0.tgz", + "integrity": "sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw==", + "requires": { + "tslib": "^2.4.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "requires": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "requires": { + "get-intrinsic": "^1.2.2" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "requires": { + "function-bind": "^1.1.2" + } + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } + } + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, + "immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==" + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "is-blob": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-blob/-/is-blob-2.1.0.tgz", + "integrity": "sha512-SZ/fTft5eUhQM6oF/ZaASFDEdbFVe89Imltn9uZr03wdKMcWNVYSMjQPFtg05QuNkt5l5c135ElvXEQG0rk4tw==" + }, + "is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "requires": { + "immediate": "~3.0.5" + } + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "requires": { + "lie": "3.1.1" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "parchment": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz", + "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==" + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "dev": true, + "requires": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz", + "integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==" + }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } + } + }, + "punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quill": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/quill/-/quill-1.3.7.tgz", + "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==", + "requires": { + "clone": "^2.1.1", + "deep-equal": "^1.0.1", + "eventemitter3": "^2.0.3", + "extend": "^3.0.2", + "parchment": "^1.1.4", + "quill-delta": "^3.6.2" + } + }, + "quill-delta": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-3.6.3.tgz", + "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==", + "requires": { + "deep-equal": "^1.0.1", + "extend": "^3.0.2", + "fast-diff": "1.1.2" + } + }, + "quill-image-resize-module-react": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/quill-image-resize-module-react/-/quill-image-resize-module-react-3.0.0.tgz", + "integrity": "sha512-3jVChLoXh+fwEELx3OswOEEuF+1KU3r/B9RAqZ//s+d+UMduVZzUepU1g/XoxjKoBJvWD2lJwBIFBRUNb8ebCw==", + "requires": { + "lodash": "^4.17.4", + "quill": "^1.2.2", + "raw-loader": "^0.5.1" + } + }, + "raw-loader": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", + "integrity": "sha512-sf7oGoLuaYAScB4VGr0tzetsYlS8EJH6qnTCfQ/WVEa89hALQ4RQfCKt5xCyPQKPDUbVUAIP1QsxAwfAjlDp7Q==" + }, + "re-resizable": { + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/re-resizable/-/re-resizable-6.9.6.tgz", + "integrity": "sha512-0xYKS5+Z0zk+vICQlcZW+g54CcJTTmHluA7JUUgvERDxnKAnytylcyPsA+BSFi759s5hPlHmBRegFrwXs2FuBQ==", + "requires": { + "fast-memoize": "^2.5.1" + } + }, + "react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "requires": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + } + }, + "react-draggable": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.5.tgz", + "integrity": "sha512-OMHzJdyJbYTZo4uQE393fHcqqPYsEtkjfMgvCHr6rejT+Ezn4OZbNyGH50vv+SunC1RMvwOTSWkEODQLzw1M9g==", + "requires": { + "clsx": "^1.1.1", + "prop-types": "^15.8.1" + } + }, + "react-dropzone": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.2.3.tgz", + "integrity": "sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug==", + "requires": { + "attr-accept": "^2.2.2", + "file-selector": "^0.6.0", + "prop-types": "^15.8.1" + } + }, + "react-intersection-observer": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.5.0.tgz", + "integrity": "sha512-bQbfe6Jl8KSynbWfQWz8LoGCCmG6fhsilljgc6dc1NMYpNmP20wfFsrF7CE5N9+LbWx33DUgJdkNBVhU1JzIRA==", + "requires": {} + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "react-quill": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-quill/-/react-quill-2.0.0.tgz", + "integrity": "sha512-4qQtv1FtCfLgoD3PXAur5RyxuUbPXQGOHgTlFie3jtxp43mXDtzCKaOgQ3mLyZfi1PUlyjycfivKelFhy13QUg==", + "requires": { + "@types/quill": "^1.3.10", + "lodash": "^4.17.4", + "quill": "^1.3.7" + } + }, + "react-redux": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.1.0.tgz", + "integrity": "sha512-CtHZzAOxi7GQvTph4dVLWwZHAWUjV2kMEQtk50OrN8z3gKxpWg3Tz7JfDw32N3Rpd7fh02z73cF6yZkK467gbQ==", + "requires": { + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", + "hoist-non-react-statics": "^3.3.2", + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" + } + }, + "react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true + }, + "react-rnd": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/react-rnd/-/react-rnd-10.4.1.tgz", + "integrity": "sha512-0m887AjQZr6p2ADLNnipquqsDq4XJu/uqVqI3zuoGD19tRm6uB83HmZWydtkilNp5EWsOHbLGF4IjWMdd5du8Q==", + "requires": { + "re-resizable": "6.9.6", + "react-draggable": "4.4.5", + "tslib": "2.3.1" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } + } + }, + "react-router": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.13.0.tgz", + "integrity": "sha512-Si6KnfEnJw7gUQkNa70dlpI1bul46FuSxX5t5WwlUBxE25DAz2BjVkwaK8Y2s242bQrZPXCpmwLPtIO5pv4tXg==", + "requires": { + "@remix-run/router": "1.6.3" + } + }, + "react-router-dom": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.13.0.tgz", + "integrity": "sha512-6Nqoqd7fgwxxVGdbiMHTpDHCYPq62d7Wk1Of7B82vH7ZPwwsRaIa22zRZKPPg413R5REVNiyuQPKDG1bubcOFA==", + "requires": { + "@remix-run/router": "1.6.3", + "react-router": "6.13.0" + } + }, + "react-toastify": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.3.tgz", + "integrity": "sha512-fPfb8ghtn/XMxw3LkxQBk3IyagNpF/LIKjOBflbexr2AWxAH1MJgvnESwEwBn9liLFXgTKWgBSdZpw9m4OTHTg==", + "requires": { + "clsx": "^1.1.1" + } + }, + "react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + }, + "redux": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "requires": { + "@babel/runtime": "^7.9.2" + } + }, + "redux-thunk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", + "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", + "requires": {} + }, + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + } + }, + "reselect": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" + }, + "resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "requires": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.14.1.tgz", + "integrity": "sha512-4LnHSdd3QK2pa1J6dFbfm1HN0D7vSK/ZuZTsdyUAlA6Rr1yTouUTL13HaDOGJVgby461AhrNGBS7sCGXXtT+SA==", + "dev": true, + "requires": { + "@rollup/rollup-android-arm-eabi": "4.14.1", + "@rollup/rollup-android-arm64": "4.14.1", + "@rollup/rollup-darwin-arm64": "4.14.1", + "@rollup/rollup-darwin-x64": "4.14.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.14.1", + "@rollup/rollup-linux-arm64-gnu": "4.14.1", + "@rollup/rollup-linux-arm64-musl": "4.14.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.14.1", + "@rollup/rollup-linux-riscv64-gnu": "4.14.1", + "@rollup/rollup-linux-s390x-gnu": "4.14.1", + "@rollup/rollup-linux-x64-gnu": "4.14.1", + "@rollup/rollup-linux-x64-musl": "4.14.1", + "@rollup/rollup-win32-arm64-msvc": "4.14.1", + "@rollup/rollup-win32-ia32-msvc": "4.14.1", + "@rollup/rollup-win32-x64-msvc": "4.14.1", + "@types/estree": "1.0.5", + "fsevents": "~2.3.2" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "semver": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "requires": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "requires": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "short-unique-id": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/short-unique-id/-/short-unique-id-4.4.4.tgz", + "integrity": "sha512-oLF1NCmtbiTWl2SqdXZQbo5KM1b7axdp0RgQLq8qCBBLoq+o3A5wmLrNM6bZIh54/a8BJ3l69kTXuxwZ+XCYuw==" + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + }, + "source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-key-enum": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/ts-key-enum/-/ts-key-enum-2.0.12.tgz", + "integrity": "sha512-Ety4IvKMaeG34AyXMp5r11XiVZNDRL+XWxXbVVJjLvq2vxKRttEANBE7Za1bxCAZRdH2/sZT6jFyyTWxXz28hw==" + }, + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typescript": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "requires": {} + }, + "vite": { + "version": "6.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.0-alpha.1.tgz", + "integrity": "sha512-LVvQVG3AftURxT11TgWXpfVIqBKC4D/NA5ikYQb9hDORF0hvO+gsyvNu8GR73/oag09A5JJAPAFU+r7ly4+9Lw==", + "dev": true, + "requires": { + "esbuild": "^0.20.1", + "fsevents": "~2.3.3", + "postcss": "^8.4.38", + "rollup": "^4.13.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/package.json b/package.json index 6f3aea4..f6b565b 100644 --- a/package.json +++ b/package.json @@ -1,48 +1,48 @@ -{ - "name": "qsupport", - "private": true, - "version": "1.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "tsc && vite build", - "lint": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0", - "preview": "vite preview" - }, - "dependencies": { - "@emotion/react": "^11.10.6", - "@emotion/styled": "^11.10.6", - "@mui/icons-material": "^5.11.11", - "@mui/material": "^5.11.13", - "@reduxjs/toolkit": "^1.9.3", - "compressorjs": "^1.2.1", - "dompurify": "^3.0.6", - "localforage": "^1.10.0", - "moment": "^2.29.4", - "prettier": "^3.2.4", - "quill-image-resize-module-react": "^3.0.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-dropzone": "^14.2.3", - "react-intersection-observer": "^9.4.3", - "react-quill": "^2.0.0", - "react-redux": "^8.0.5", - "react-rnd": "^10.4.1", - "react-router-dom": "^6.9.0", - "react-toastify": "^9.1.2", - "short-unique-id": "^4.4.4", - "ts-key-enum": "^2.0.12" - }, - "devDependencies": { - "@types/react": "^18.0.28", - "@types/react-dom": "^18.0.11", - "@typescript-eslint/eslint-plugin": "^5.57.1", - "@typescript-eslint/parser": "^5.57.1", - "@vitejs/plugin-react": "^4.0.0", - "eslint": "^8.38.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.3.4", - "typescript": "^5.0.2", - "vite": "6.0.0-alpha.1" - } -} +{ + "name": "qsupport", + "private": true, + "version": "1.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "lint": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview" + }, + "dependencies": { + "@emotion/react": "^11.10.6", + "@emotion/styled": "^11.10.6", + "@mui/icons-material": "^5.11.11", + "@mui/material": "^5.11.13", + "@reduxjs/toolkit": "^1.9.3", + "compressorjs": "^1.2.1", + "dompurify": "^3.0.6", + "localforage": "^1.10.0", + "moment": "^2.29.4", + "prettier": "^3.2.4", + "quill-image-resize-module-react": "^3.0.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-dropzone": "^14.2.3", + "react-intersection-observer": "^9.4.3", + "react-quill": "^2.0.0", + "react-redux": "^8.0.5", + "react-rnd": "^10.4.1", + "react-router-dom": "^6.9.0", + "react-toastify": "^9.1.2", + "short-unique-id": "^4.4.4", + "ts-key-enum": "^2.0.12" + }, + "devDependencies": { + "@types/react": "^18.0.28", + "@types/react-dom": "^18.0.11", + "@typescript-eslint/eslint-plugin": "^5.57.1", + "@typescript-eslint/parser": "^5.57.1", + "@vitejs/plugin-react": "^4.0.0", + "eslint": "^8.38.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.3.4", + "typescript": "^5.0.2", + "vite": "6.0.0-alpha.1" + } +} diff --git a/src/App.css b/src/App.css index da78883..8ef5631 100644 --- a/src/App.css +++ b/src/App.css @@ -1,43 +1,43 @@ -#root { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; -} - -.logo { - height: 6em; - padding: 1.5em; - will-change: filter; - transition: filter 300ms; -} -.logo:hover { - filter: drop-shadow(0 0 2em #646cffaa); -} -.logo.react:hover { - filter: drop-shadow(0 0 2em #61dafbaa); -} - -@keyframes logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -@media (prefers-reduced-motion: no-preference) { - a:nth-of-type(2) .logo { - animation: logo-spin infinite 20s linear; - } -} - -.card { - padding: 2em; -} - -.read-the-docs { - color: #888; -} - +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} + diff --git a/src/App.tsx b/src/App.tsx index 7847f76..15bc189 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,4 +1,4 @@ -import { useState } from "react"; +import { useEffect, useState } from "react"; import { Route, Routes } from "react-router-dom"; import { ThemeProvider } from "@mui/material/styles"; import { CssBaseline } from "@mui/material"; @@ -11,12 +11,16 @@ import { Home } from "./pages/Home/Home"; import { IssueContent } from "./pages/IssueContent/IssueContent.tsx"; import DownloadWrapper from "./wrappers/DownloadWrapper"; import { IndividualProfile } from "./pages/IndividualProfile/IndividualProfile"; +import { fetchFeesRedux } from "./constants/PublishFees/FeePricePublish/FeePricePublish.ts"; function App() { // const themeColor = window._qdnTheme - const [theme, setTheme] = useState("dark"); + useEffect(() => { + fetchFeesRedux(); + }, []); + return ( diff --git a/src/assets/icons/ClosedIcon.png b/src/assets/icons/ClosedIcon.png deleted file mode 100644 index 4e2a8f7ebb9f3793cabf84ec26bec539fded646c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14861 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 RRig0U@-m7~3ZxAE{uja>3xNOt diff --git a/src/assets/icons/CompleteIcon.png b/src/assets/icons/CompleteIcon.png deleted file mode 100644 index 69133086fe048ec0177bec74a930a1228da24cae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135180 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�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 diff --git a/src/assets/icons/InProgressIcon.png b/src/assets/icons/InProgressIcon.png deleted file mode 100644 index b699642e8bd8b24fd8789ec03329ab02f2f7a8c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7297 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 diff --git a/src/assets/icons/OpenIcon.png b/src/assets/icons/OpenIcon.png deleted file mode 100644 index c5167548c886e3da791d24e4bd91f332a150e88a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13147 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 R1XDjLTv554anZo*{{euWr$_(* diff --git a/src/assets/img/Q-SupportIcon(AlphaX).webp b/src/assets/img/Q-SupportIcon(AlphaX).webp new file mode 100644 index 0000000000000000000000000000000000000000..adb867622ca3c8de59056e2279bd398e3ffdad89 GIT binary patch literal 74954 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%0A%d$w&pD}bxd*7ZG&Jo(< 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%0Al%#g;m&ag;DMP>D26g*@w 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 = ({ - color, - height, - width -}) => { - return ( - - - - ) -} +interface AccountCircleSVGProps { + color: string + height: string + width: string +} + +export const AccountCircleSVG: React.FC = ({ + color, + height, + width +}) => { + return ( + + + + ) +} diff --git a/src/assets/svgs/CircleSVG.tsx b/src/assets/svgs/CircleSVG.tsx index 6954397..c7e8d8f 100644 --- a/src/assets/svgs/CircleSVG.tsx +++ b/src/assets/svgs/CircleSVG.tsx @@ -1,23 +1,23 @@ -import { IconTypes } from "./IconTypes"; - -export const CircleSVG: React.FC = ({ - color, - height, - width, - className, - onClickFunc, -}) => { - return ( - - - - ); -}; +import { IconTypes } from "./IconTypes"; + +export const CircleSVG: React.FC = ({ + color, + height, + width, + className, + onClickFunc, +}) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/DarkModeSVG.tsx b/src/assets/svgs/DarkModeSVG.tsx index fe9ccab..661d23d 100644 --- a/src/assets/svgs/DarkModeSVG.tsx +++ b/src/assets/svgs/DarkModeSVG.tsx @@ -1,23 +1,23 @@ -import { IconTypes } from './IconTypes' - -export const DarkModeSVG: React.FC = ({ - color, - height, - width, - className, - onClickFunc -}) => { - return ( - - - - ) -} +import { IconTypes } from './IconTypes' + +export const DarkModeSVG: React.FC = ({ + color, + height, + width, + className, + onClickFunc +}) => { + return ( + + + + ) +} diff --git a/src/assets/svgs/DownloadedLight.tsx b/src/assets/svgs/DownloadedLight.tsx index c10311b..33e68f3 100644 --- a/src/assets/svgs/DownloadedLight.tsx +++ b/src/assets/svgs/DownloadedLight.tsx @@ -1,13 +1,13 @@ -import { IconTypes } from './IconTypes' - -export const DownloadedLight: React.FC = ({ - color, - height, - width, - className, - onClickFunc -}) => { - return ( - - ) -} +import { IconTypes } from './IconTypes' + +export const DownloadedLight: React.FC = ({ + color, + height, + width, + className, + onClickFunc +}) => { + return ( + + ) +} diff --git a/src/assets/svgs/DownloadingLight.tsx b/src/assets/svgs/DownloadingLight.tsx index 9c57868..7c27b9b 100644 --- a/src/assets/svgs/DownloadingLight.tsx +++ b/src/assets/svgs/DownloadingLight.tsx @@ -1,13 +1,13 @@ -import { IconTypes } from './IconTypes' - -export const DownloadingLight: React.FC = ({ - color, - height, - width, - className, - onClickFunc -}) => { - return ( - - ) -} +import { IconTypes } from './IconTypes' + +export const DownloadingLight: React.FC = ({ + color, + height, + width, + className, + onClickFunc +}) => { + return ( + + ) +} diff --git a/src/assets/svgs/EmptyCircleSVG.tsx b/src/assets/svgs/EmptyCircleSVG.tsx index c7177c6..fdeff4a 100644 --- a/src/assets/svgs/EmptyCircleSVG.tsx +++ b/src/assets/svgs/EmptyCircleSVG.tsx @@ -1,23 +1,23 @@ -import { IconTypes } from "./IconTypes"; - -export const EmptyCircleSVG: React.FC = ({ - color, - height, - width, - className, - onClickFunc, -}) => { - return ( - - - ); -}; - - - +import { IconTypes } from "./IconTypes"; + +export const EmptyCircleSVG: React.FC = ({ + color, + height, + width, + className, + onClickFunc, +}) => { + return ( + + + ); +}; + + + diff --git a/src/assets/svgs/ExpandMoreSVG.tsx b/src/assets/svgs/ExpandMoreSVG.tsx index 12f1935..63195bb 100644 --- a/src/assets/svgs/ExpandMoreSVG.tsx +++ b/src/assets/svgs/ExpandMoreSVG.tsx @@ -1,22 +1,22 @@ -import { IconTypes } from "./IconTypes"; -export const ExpandMoreSVG: React.FC = ({ - color, - height, - width, - className, - onClickFunc -}) => { - return ( - - - - ); -}; +import { IconTypes } from "./IconTypes"; +export const ExpandMoreSVG: React.FC = ({ + color, + height, + width, + className, + onClickFunc +}) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/IconTypes.ts b/src/assets/svgs/IconTypes.ts index e11b2aa..2f91268 100644 --- a/src/assets/svgs/IconTypes.ts +++ b/src/assets/svgs/IconTypes.ts @@ -1,7 +1,7 @@ -export interface IconTypes { - color?: string; - height: string; - width: string; - className?: string; - onClickFunc?: (e?: any) => void; -} +export interface IconTypes { + color?: string; + height: string; + width: string; + className?: string; + onClickFunc?: (e?: any) => void; +} diff --git a/src/assets/svgs/LightModeSVG.tsx b/src/assets/svgs/LightModeSVG.tsx index 66b056f..267c00e 100644 --- a/src/assets/svgs/LightModeSVG.tsx +++ b/src/assets/svgs/LightModeSVG.tsx @@ -1,23 +1,23 @@ -import { IconTypes } from './IconTypes' - -export const LightModeSVG: React.FC = ({ - color, - height, - width, - className, - onClickFunc -}) => { - return ( - - - - ) -} +import { IconTypes } from './IconTypes' + +export const LightModeSVG: React.FC = ({ + color, + height, + width, + className, + onClickFunc +}) => { + return ( + + + + ) +} diff --git a/src/assets/svgs/PlaylistSVG.tsx b/src/assets/svgs/PlaylistSVG.tsx index baf1778..620b960 100644 --- a/src/assets/svgs/PlaylistSVG.tsx +++ b/src/assets/svgs/PlaylistSVG.tsx @@ -1,18 +1,18 @@ -import { IconTypes } from "./IconTypes"; - -export const PlaylistSVG: React.FC = ({ - color, - height, - width, - className, - onClickFunc -}) => { - return ( - - - ); -}; +import { IconTypes } from "./IconTypes"; + +export const PlaylistSVG: React.FC = ({ + color, + height, + width, + className, + onClickFunc +}) => { + return ( + + + ); +}; diff --git a/src/assets/svgs/TimesSVG.tsx b/src/assets/svgs/TimesSVG.tsx index 48c31d9..323e972 100644 --- a/src/assets/svgs/TimesSVG.tsx +++ b/src/assets/svgs/TimesSVG.tsx @@ -1,23 +1,23 @@ -import { IconTypes } from "./IconTypes"; - -export const TimesSVG: React.FC = ({ - color, - height, - width, - className, - onClickFunc -}) => { - return ( - - - - ); -}; +import { IconTypes } from "./IconTypes"; + +export const TimesSVG: React.FC = ({ + color, + height, + width, + className, + onClickFunc +}) => { + return ( + + + + ); +}; diff --git a/src/components/EditIssue/EditIssue.tsx b/src/components/EditIssue/EditIssue.tsx index bfcdd44..3be839a 100644 --- a/src/components/EditIssue/EditIssue.tsx +++ b/src/components/EditIssue/EditIssue.tsx @@ -25,8 +25,8 @@ import { QSUPPORT_FILE_BASE } from "../../constants/Identifiers.ts"; import { MultiplePublish } from "../common/MultiplePublish/MultiplePublishAll"; import { TextEditor } from "../common/TextEditor/TextEditor"; import { extractTextFromHTML } from "../common/TextEditor/utils"; -import { allCategoryData } from "../../constants/Categories/1stCategories.ts"; -import { titleFormatter } from "../../constants/Misc.ts"; +import { allCategoryData } from "../../constants/Categories/Categories.ts"; +import { log, titleFormatter } from "../../constants/Misc.ts"; import { CategoryList, CategoryListRef, @@ -37,6 +37,13 @@ import { ImagePublisherRef, } from "../common/ImagePublisher/ImagePublisher.tsx"; import { ThemeButtonBright } from "../../pages/Home/Home-styles.tsx"; +import { + AutocompleteQappNames, + QappNamesRef, +} from "../common/AutocompleteQappNames.tsx"; +import { payPublishFeeQORT } from "../../constants/PublishFees/SendFeeFunctions.ts"; +import { feeAmountBase } from "../../constants/PublishFees/FeeData.tsx"; +import { verifyPayment } from "../../constants/PublishFees/VerifyPayment.ts"; const uid = new ShortUniqueId(); const shortuid = new ShortUniqueId({ length: 5 }); @@ -58,6 +65,7 @@ interface VideoFile { identifier?: string; filename?: string; } + export const EditIssue = () => { const theme = useTheme(); const dispatch = useDispatch(); @@ -65,9 +73,13 @@ export const EditIssue = () => { const userAddress = useSelector( (state: RootState) => state.auth?.user?.address ); - const editFileProperties = useSelector( + const editIssueProperties = useSelector( (state: RootState) => state.file.editFileProperties ); + const QappNames = useSelector( + (state: RootState) => state.file.publishedQappNames + ); + const [publishes, setPublishes] = useState(null); const [isOpenMultiplePublish, setIsOpenMultiplePublish] = useState(false); const [videoPropertiesToSetToRedux, setVideoPropertiesToSetToRedux] = @@ -78,9 +90,11 @@ export const EditIssue = () => { const [coverImage, setCoverImage] = useState(""); const [file, setFile] = useState(null); const [files, setFiles] = useState([]); - const [editCategories, setEditCategories] = useState([]); + const [selectedCategories, setSelectedCategories] = useState([]); + const [isIssuePaid, setIsIssuePaid] = useState(true); const categoryListRef = useRef(null); const imagePublisherRef = useRef(null); + const autocompleteRef = useRef(null); const { getRootProps, getInputProps } = useDropzone({ maxFiles: 10, @@ -118,21 +132,25 @@ export const EditIssue = () => { }); useEffect(() => { - if (editFileProperties) { - setTitle(editFileProperties?.title || ""); - setFiles(editFileProperties?.files || []); - if (editFileProperties?.htmlDescription) { - setDescription(editFileProperties?.htmlDescription); - } else if (editFileProperties?.fullDescription) { - const paragraph = `

${editFileProperties?.fullDescription}

`; + if (editIssueProperties) { + setTitle(editIssueProperties?.title || ""); + setFiles(editIssueProperties?.files || []); + if (editIssueProperties?.htmlDescription) { + setDescription(editIssueProperties?.htmlDescription); + } else if (editIssueProperties?.fullDescription) { + const paragraph = `

${editIssueProperties?.fullDescription}

`; setDescription(paragraph); } + verifyPayment(editIssueProperties).then(isIssuePaid => { + setIsIssuePaid(isIssuePaid); + }); const categoriesFromEditFile = - getCategoriesFromObject(editFileProperties); - setEditCategories(categoriesFromEditFile); + getCategoriesFromObject(editIssueProperties); + setSelectedCategories(categoriesFromEditFile); } - }, [editFileProperties]); + }, [editIssueProperties]); + const onClose = () => { dispatch(setEditFile(null)); setVideoPropertiesToSetToRedux(null); @@ -142,14 +160,22 @@ export const EditIssue = () => { setCoverImage(""); }; - async function publishQDNResource() { + async function publishQDNResource(payFee: boolean) { try { - const categoryList = categoryListRef.current?.getSelectedCategories(); - if (!description) throw new Error("Please enter a description"); - if (!categoryList[0]) throw new Error("Please select a category"); - if (!editFileProperties) return; + if (!categoryListRef.current) throw new Error("No CategoryListRef found"); if (!userAddress) throw new Error("Unable to locate user address"); + if (!description) throw new Error("Please enter a description"); + const allCategoriesSelected = !selectedCategories.includes(""); + if (!allCategoriesSelected) + throw new Error("All Categories must be selected"); + console.log("categories", selectedCategories); + const QappsCategoryID = "3"; + if ( + selectedCategories[0] === QappsCategoryID && + !autocompleteRef?.current?.getSelectedValue() + ) + throw new Error("Select a published Q-App"); let errorMsg = ""; let name = ""; if (username) { @@ -160,7 +186,7 @@ export const EditIssue = () => { "Cannot publish without access to your name. Please authenticate."; } - if (editFileProperties?.user !== username) { + if (editIssueProperties?.user !== username) { errorMsg = "Cannot publish another user's resource"; } @@ -223,9 +249,8 @@ export const EditIssue = () => { filename = alphanumericString; } - let metadescription = - `**${categoryListRef.current?.getCategoriesFetchString()}**` + - fullDescription.slice(0, 150); + const categoryString = `**${categoryListRef.current?.getSelectedCategories()}**`; + let metadescription = categoryString + fullDescription.slice(0, 150); const requestBodyVideo: any = { action: "PUBLISH_QDN_RESOURCE", @@ -248,23 +273,50 @@ export const EditIssue = () => { size: file.size, }); } + const selectedQappName = autocompleteRef?.current?.getSelectedValue(); - const fileObject: any = { + const issueObject: any = { title, - version: editFileProperties.version, + version: editIssueProperties.version, fullDescription, htmlDescription: description, - commentsId: editFileProperties.commentsId, + commentsId: editIssueProperties.commentsId, ...categoryListRef.current?.categoriesToObject(), files: fileReferences, images: imagePublisherRef?.current?.getImageArray(), + QappName: selectedQappName, + feeData: editIssueProperties?.feeData, }; + if (payFee) { + const publishFeeResponse = await payPublishFeeQORT(feeAmountBase); + if (!publishFeeResponse) { + dispatch( + setNotification({ + msg: "Fee publish rejected by user.", + alertType: "error", + }) + ); + return; + } + if (log) console.log("feeResponse: ", publishFeeResponse); - let metadescription = - `**${categoryListRef.current?.getCategoriesFetchString()}**` + - fullDescription.slice(0, 150); + issueObject.feeData = { signature: publishFeeResponse }; + dispatch(updateInHashMap(issueObject)); // shows issue as paid right away? + } - const fileObjectToBase64 = await objectToBase64(fileObject); + const QappNameString = autocompleteRef?.current?.getQappNameFetchString(); + const categoryString = + categoryListRef.current?.getCategoriesFetchString(selectedCategories); + const metaDataString = `**${categoryString + QappNameString}**`; + + let metadescription = metaDataString + fullDescription.slice(0, 150); + if (log) console.log("description is: ", metadescription); + if (log) console.log("description length is: ", metadescription.length); + if (log) console.log("characters left:", 240 - metadescription.length); + if (log) + console.log("% of characters used:", metadescription.length / 240); + + const fileObjectToBase64 = await objectToBase64(issueObject); // Description is obtained from raw data const requestBodyJson: any = { @@ -274,7 +326,7 @@ export const EditIssue = () => { data64: fileObjectToBase64, title: title.slice(0, 50), description: metadescription, - identifier: editFileProperties.id, + identifier: editIssueProperties.id, tag1: QSUPPORT_FILE_BASE, filename: `video_metadata.json`, }; @@ -287,10 +339,13 @@ export const EditIssue = () => { setPublishes(multiplePublish); setIsOpenMultiplePublish(true); setVideoPropertiesToSetToRedux({ - ...editFileProperties, - ...fileObject, + ...editIssueProperties, + ...issueObject, }); } catch (error: any) { + console.log("error is: ", error); + if (error === "User declined request") return; + let notificationObj: any = null; if (typeof error === "string") { notificationObj = { @@ -315,26 +370,15 @@ export const EditIssue = () => { } } - const handleOnchange = (index: number, type: string, value: string) => { - // setFiles((prev) => { - // let formattedValue = value - // console.log({type}) - // if(type === 'title'){ - // formattedValue = value.replace(/[^a-zA-Z0-9\s]/g, "") - // } - // const copyFiles = [...prev]; - // copyFiles[index] = { - // ...copyFiles[index], - // [type]: formattedValue, - // }; - // return copyFiles; - // }); + const isShowQappNameTextField = () => { + const QappID = "3"; + return selectedCategories[0] === QappID; }; return ( <> @@ -410,15 +454,26 @@ export const EditIssue = () => { > { + setSelectedCategories(newSelectedCategories); + }} /> + {isShowQappNameTextField() && ( + + )} { alignItems: "center", }} > + {isIssuePaid === false && ( + { + publishQDNResource(true); + }} + sx={{ + fontFamily: "Montserrat", + fontSize: "16px", + fontWeight: 400, + letterSpacing: "0.2px", + }} + > + Publish Edit with Fee + + )} + { - publishQDNResource(); + publishQDNResource(false); }} sx={{ fontFamily: "Montserrat", @@ -478,7 +550,7 @@ export const EditIssue = () => { letterSpacing: "0.2px", }} > - Publish + Publish Edit @@ -506,7 +578,7 @@ export const EditIssue = () => { dispatch(updateInHashMap(clonedCopy)); dispatch( setNotification({ - msg: "File updated", + msg: "Issue updated", alertType: "success", }) ); diff --git a/src/components/EditPlaylist/EditPlaylist.tsx b/src/components/EditPlaylist/EditPlaylist.tsx index 6801795..5b0159b 100644 --- a/src/components/EditPlaylist/EditPlaylist.tsx +++ b/src/components/EditPlaylist/EditPlaylist.tsx @@ -43,9 +43,9 @@ import { PlaylistListEdit } from "../PlaylistListEdit/PlaylistListEdit"; import { TextEditor } from "../common/TextEditor/TextEditor"; import { extractTextFromHTML } from "../common/TextEditor/utils"; import { - firstCategories, - secondCategories, -} from "../../constants/Categories/1stCategories.ts"; + issueLocation, + thirdCategories, +} from "../../constants/Categories/Categories.ts"; const uid = new ShortUniqueId(); const shortuid = new ShortUniqueId({ length: 5 }); @@ -183,7 +183,7 @@ export const EditPlaylist = () => { setVideos(editVideoProperties?.videos || []); if (editVideoProperties?.category) { - const selectedOption = firstCategories.find( + const selectedOption = issueLocation.find( option => option.id === +editVideoProperties.category ); setSelectedCategoryVideos(selectedOption || null); @@ -192,9 +192,9 @@ export const EditPlaylist = () => { if ( editVideoProperties?.category && editVideoProperties?.subcategory && - secondCategories[+editVideoProperties?.category] + thirdCategories[+editVideoProperties?.category] ) { - const selectedOption = secondCategories[ + const selectedOption = thirdCategories[ +editVideoProperties?.category ]?.find(option => option.id === +editVideoProperties.subcategory); setSelectedSubCategoryVideos(selectedOption || null); @@ -405,7 +405,7 @@ export const EditPlaylist = () => { event: SelectChangeEvent ) => { const optionId = event.target.value; - const selectedOption = firstCategories.find( + const selectedOption = issueLocation.find( option => option.id === +optionId ); setSelectedCategoryVideos(selectedOption || null); @@ -479,7 +479,7 @@ export const EditPlaylist = () => { value={selectedCategoryVideos?.id || ""} onChange={handleOptionCategoryChangeVideos} > - {firstCategories.map(option => ( + {issueLocation.map(option => ( {option.name} @@ -487,7 +487,7 @@ export const EditPlaylist = () => { {selectedCategoryVideos && - secondCategories[selectedCategoryVideos?.id] && ( + thirdCategories[selectedCategoryVideos?.id] && ( Select a Sub-Category + {showEmptyItem && emptyMenuItem} {categoryData.category.map(option => ( {option.name} @@ -237,11 +260,14 @@ export const CategoryList = React.forwardRef< > - {`Category-${index + 2}`} + {findCategoryData(+selectedCategories[index + 1]) + ?.label || + category[selectedCategories[index]][0]?.label || + `Category-${index + 2}`} @@ -285,9 +293,9 @@ export const getCategoriesFetchString = (categories: string[]) => { let fetchString = ""; categories.map((category, index) => { if (category) { - if (index === 0) fetchString += `cat:${category}`; - else if (index === 1) fetchString += `;sub:${category}`; - else fetchString += `;sub${index}:${category}`; + if (index === 0 && category) fetchString += `cat:${category};`; + else if (index === 1 && category) fetchString += `sub:${category};`; + else if (category) fetchString += `sub${index}:${category};`; } }); if (log) console.log("categoriesAsDescription: ", fetchString); @@ -318,3 +326,16 @@ export const getCategoriesFromObject = (editFileProperties: any) => { } return categoryList; }; + +export const getCategoriesLength = categoryList => { + return categoryList.filter(category => category !== "").length; +}; + +export const hasCategories = (categories: string[]) => { + return categories.findIndex(category => category !== "") >= 0; +}; + +export const appendCategory = (categoryList: string[], category: string) => { + const nextIndex = categoryList.findIndex(category => category === ""); + categoryList[nextIndex] = category; +}; diff --git a/src/components/common/CategoryList/CategorySelect.tsx b/src/components/common/CategoryList/CategorySelect.tsx index e69de29..148c8d2 100644 --- a/src/components/common/CategoryList/CategorySelect.tsx +++ b/src/components/common/CategoryList/CategorySelect.tsx @@ -0,0 +1,178 @@ +import { + FormControl, + InputLabel, + MenuItem, + OutlinedInput, + Select, + SxProps, + Theme, +} from "@mui/material"; + +import React, { useEffect, useImperativeHandle, useState } from "react"; +import { CategoryContainer } from "./CategoryList-styles.tsx"; +import { log } from "../../../constants/Misc.ts"; + +export interface Category { + id: number; + name: string; + icon?: string; + label?: string; +} + +export interface Categories { + [key: number]: Category[]; +} +export interface CategoryData { + category: Category[]; + subCategories: Categories[]; +} + +interface CategoryListProps { + sx?: SxProps; + categoryData: Category[]; + initialCategory?: string; + afterChange?: (category: string) => void; + showEmptyItem?: boolean; +} + +export type CategorySelectRef = { + getSelectedCategory: () => string; + setSelectedCategory: (arr: string) => void; + clearCategory: () => void; + getCategoryFetchString: (categories?: string) => string; +}; + +export const CategorySelect = React.forwardRef< + CategorySelectRef, + CategoryListProps +>( + ( + { + sx, + categoryData, + initialCategory, + afterChange, + showEmptyItem = true, + }: CategoryListProps, + ref + ) => { + const [selectedCategory, setSelectedCategory] = useState( + initialCategory || "" + ); + useEffect(() => { + if (initialCategory) setSelectedCategory(initialCategory); + }, [initialCategory]); + + const updateCategory = (category: string) => { + if (log) console.log("updateCategory ID: ", category); + setSelectedCategory(category); + if (afterChange) afterChange(category); + }; + const categoryToObject = (category: string) => { + let categoryObject = {}; + categoryObject["category"] = category; + if (log) console.log("categoryObject is: ", categoryObject); + return categoryObject; + }; + + const clearCategory = () => { + updateCategory(""); + }; + + useImperativeHandle(ref, () => ({ + getSelectedCategory: () => { + return selectedCategory; + }, + setSelectedCategory: category => { + if (log) console.log("setSelectedCategory: ", category); + updateCategory(category); + }, + clearCategory, + getCategoryFetchString: (category?: string) => + getCategoryFetchString(category || selectedCategory), + categoriesToObject: (category?: string) => + categoryToObject(category || selectedCategory), + })); + + const categorySelectSX = { + // // Target the input field + // ".MuiSelect-select": { + // fontSize: "16px", // Change font size for the selected value + // padding: "10px 5px 15px 15px;", + // }, + // // Target the dropdown icon + // ".MuiSelect-icon": { + // fontSize: "20px", // Adjust if needed + // }, + // // Target the dropdown menu + // "& .MuiMenu-paper": { + // ".MuiMenuItem-root": { + // fontSize: "14px", // Change font size for the menu items + // }, + // }, + }; + + const emptyMenuItem = ( + + ); + + const fillMenu = () => { + const menuItems = []; + if (showEmptyItem) menuItems.push(emptyMenuItem); + + categoryData.map(option => + menuItems.push( + + {option.name} + + ) + ); + return menuItems; + }; + return ( + + + + {categoryData[0]?.label || "Category"} + + + + + ); + } +); + +export const getCategoryFetchString = (category: string) => { + return `cat:${category}`; +}; + +export const getCategoryFromObject = (editFileProperties: any) => { + const categoryList: string[] = []; + if (editFileProperties.category) + categoryList.push(editFileProperties.category); + return categoryList; +}; diff --git a/src/components/common/Comments/Comment.tsx b/src/components/common/Comments/Comment.tsx index d7b9f76..0033323 100644 --- a/src/components/common/Comments/Comment.tsx +++ b/src/components/common/Comments/Comment.tsx @@ -1,7 +1,6 @@ import { Avatar, Box, - Button, Dialog, DialogActions, DialogContent, @@ -9,26 +8,26 @@ import { Typography, useTheme, } from "@mui/material"; -import React, { useCallback, useState, useEffect } from "react"; +import React, { useCallback, useEffect, useState } from "react"; import { CommentEditor } from "./CommentEditor"; import { + AuthorTextComment, CardContentContainerComment, CommentActionButtonRow, CommentDateText, EditReplyButton, - StyledCardComment, -} from "./Comments-styles"; -import { StyledCardHeaderComment } from "./Comments-styles"; -import { StyledCardColComment } from "./Comments-styles"; -import { AuthorTextComment } from "./Comments-styles"; -import { - StyledCardContentComment, LoadMoreCommentsButton as CommentActionButton, + StyledCardColComment, + StyledCardComment, + StyledCardContentComment, + StyledCardHeaderComment, } from "./Comments-styles"; import { useSelector } from "react-redux"; import { RootState } from "../../../state/store"; import Portal from "../Portal"; import { formatDate } from "../../../utils/time"; +import { ThemeButton } from "../../../pages/Home/Home-styles.tsx"; + interface CommentProps { comment: any; postId: string; @@ -69,12 +68,15 @@ export const Comment = ({ onClose={() => setCurrentEdit(null)} aria-labelledby="alert-dialog-title" aria-describedby="alert-dialog-description" + maxWidth={false} > - + + Edit Comment + - + @@ -125,13 +130,15 @@ export const Comment = ({ )} - setIsReplying(true)} - > - reply - + {user?.name !== comment?.name && ( + setIsReplying(true)} + > + reply + + )} {user?.name === comment?.name && ( 200) { - errorMsg = "Comment needs to be under 200 characters"; + if (value.length > maxCommentLength) { + errorMsg = `Comment needs to be under ${maxCommentLength} characters`; } if (errorMsg) { @@ -157,6 +157,7 @@ export const CommentEditor = ({ data64: base64, identifier: identifier, }); + dispatch( setNotification({ msg: "Comment successfully published", @@ -171,7 +172,19 @@ export const CommentEditor = ({ postName: postName, }); } + if (!isReply && !isEdit) { + // const notificationMessage = `This is an automated Q-Support notification indicating that someone has commented on your issue here: + // qortal://APP/Q-Support/issue/${postName}/${postId} + // + // Here are the first ${maxNotificationLength} characters of the comment: + // + // ${value.substring(0, maxNotificationLength)}`; + const notificationMessage = `This is an automated Q-Support notification indicating that someone has commented on your issue here: + qortal://APP/Q-Support/issue/${postName}/${postId}`; + + await sendQchatDM(postName, notificationMessage); + } return resourceResponse; } catch (error: any) { let notificationObj: any = null; @@ -236,11 +249,11 @@ export const CommentEditor = ({ id="standard-multiline-flexible" label="Your comment" multiline - maxRows={4} + maxRows={10} variant="filled" value={value} inputProps={{ - maxLength: 200, + maxLength: maxCommentLength, }} InputLabelProps={{ style: { fontSize: "18px" } }} onChange={e => setValue(e.target.value)} @@ -252,3 +265,5 @@ export const CommentEditor = ({ ); }; + +const sendDMwithComment = () => {}; diff --git a/src/components/common/Comments/Comments-styles.tsx b/src/components/common/Comments/Comments-styles.tsx index e215c9d..c95eb41 100644 --- a/src/components/common/Comments/Comments-styles.tsx +++ b/src/components/common/Comments/Comments-styles.tsx @@ -1,5 +1,6 @@ import { styled } from "@mui/system"; -import { Card, Box, Typography, Button, TextField } from "@mui/material"; +import { Box, Button, Card, TextField, Typography } from "@mui/material"; +import { ThemeButton } from "../../../pages/Home/Home-styles.tsx"; export const StyledCard = styled(Card)(({ theme }) => ({ backgroundColor: @@ -93,7 +94,7 @@ export const StyledCardComment = styled(Typography)(({ theme }) => ({ fontWeight: 400, color: theme.palette.text.primary, fontSize: "19px", - wordBreak: "break-word" + wordBreak: "break-word", })); export const TitleText = styled(Typography)({ @@ -200,13 +201,10 @@ export const EditReplyButton = styled(Button)(({ theme }) => ({ color: "#ffffff", })); -export const LoadMoreCommentsButton = styled(Button)(({ theme }) => ({ +export const LoadMoreCommentsButton = styled(ThemeButton)(({ theme }) => ({ fontFamily: "Montserrat", fontWeight: 400, letterSpacing: "0.2px", - fontSize: "15px", - backgroundColor: theme.palette.primary.main, - color: "#ffffff", })); export const CommentActionButtonRow = styled(Box)({ @@ -234,8 +232,7 @@ export const CommentInputContainer = styled(Box)({ display: "flex", flexDirection: "column", marginTop: "15px", - width: "90%", - maxWidth: "1000px", + width: "100%", borderRadius: "8px", gap: "10px", alignItems: "center", @@ -270,12 +267,9 @@ export const CommentInput = styled(TextField)(({ theme }) => ({ }, })); -export const SubmitCommentButton = styled(Button)(({ theme }) => ({ +export const SubmitCommentButton = styled(ThemeButton)(({ theme }) => ({ fontFamily: "Montserrat", fontWeight: 400, letterSpacing: "0.2px", - fontSize: "15px", - backgroundColor: theme.palette.primary.main, - color: "#ffffff", width: "75%", })); diff --git a/src/components/common/FileElement.tsx b/src/components/common/FileElement.tsx index 4027bf9..e7cbac7 100644 --- a/src/components/common/FileElement.tsx +++ b/src/components/common/FileElement.tsx @@ -1,446 +1,446 @@ -import * as React from "react"; -import { styled, useTheme } from "@mui/material/styles"; -import Box from "@mui/material/Box"; -import Typography from "@mui/material/Typography"; -import { useDispatch, useSelector } from "react-redux"; -import { CircularProgress } from "@mui/material"; -import AttachFileIcon from "@mui/icons-material/AttachFile"; -import { MyContext } from "../../wrappers/DownloadWrapper"; -import { RootState } from "../../state/store"; -import { setNotification } from "../../state/features/notificationsSlice"; - -const Widget = styled("div")(({ theme }) => ({ - padding: 8, - borderRadius: 10, - maxWidth: 350, - position: "relative", - zIndex: 1, - backdropFilter: "blur(40px)", - background: "skyblue", - transition: "0.2s all", - "&:hover": { - opacity: 0.75, - }, -})); - -const CoverImage = styled("div")({ - width: 40, - height: 40, - objectFit: "cover", - overflow: "hidden", - flexShrink: 0, - borderRadius: 8, - backgroundColor: "rgba(0,0,0,0.08)", - "& > img": { - width: "100%", - }, -}); - -interface IAudioElement { - title: string; - description?: string; - author?: string; - fileInfo?: any; - postId?: string; - user?: string; - children?: React.ReactNode; - mimeType?: string; - disable?: boolean; - mode?: string; - otherUser?: string; - customStyles?: any; - jsonId:string; -} - -interface CustomWindow extends Window { - showSaveFilePicker: any; // Replace 'any' with the appropriate type if you know it -} - -const customWindow = window as unknown as CustomWindow; - -export default function FileElement({ - title, - description, - author, - fileInfo, - children, - mimeType, - disable, - customStyles, - jsonId -}: IAudioElement) { - const { downloadVideo } = React.useContext(MyContext); - const [startedDownload, setStartedDownload] = React.useState(false) - const [isLoading, setIsLoading] = React.useState(false); - const [fileProperties, setFileProperties] = React.useState(null); - const [downloadLoader, setDownloadLoader] = React.useState(false); - const downloads = useSelector((state: RootState) => state.global?.downloads); - const status = React.useRef(null) - - const hasCommencedDownload = React.useRef(false); - const dispatch = useDispatch(); - const reDownload = React.useRef(false) - const isFetchingProperties = React.useRef(false) - const download = React.useMemo(() => { - if (!downloads || !fileInfo?.identifier) return {}; - const findDownload = downloads[fileInfo?.identifier]; - - if (!findDownload) return {}; - return findDownload; - }, [downloads, fileInfo]); - - const resourceStatus = React.useMemo(() => { - return download?.status || {}; - }, [download]); - - const retryDownload = React.useRef(0); - - const handlePlay = async () => { - if (disable) return; - hasCommencedDownload.current = true; - setStartedDownload(true) - if ( - resourceStatus?.status === "READY" - ) { - if (downloadLoader) return; - - setDownloadLoader(true); - let filename = download?.properties?.filename - let mimeType = download?.properties?.type - - try { - const { name, service, identifier } = fileInfo; - - const res = await qortalRequest({ - action: "GET_QDN_RESOURCE_PROPERTIES", - name: name, - service: service, - identifier: identifier, - }); - filename = res?.filename || filename; - mimeType = res?.mimeType || mimeType; - } catch (error) { - - } - try { - const { name, service, identifier } = fileInfo; - - const url = `/arbitrary/${service}/${name}/${identifier}`; - fetch(url) - .then(response => response.blob()) - .then(async blob => { - await qortalRequest({ - action: "SAVE_FILE", - blob, - filename: filename, - mimeType, - }); - }) - .catch(error => { - console.error("Error fetching the video:", error); - }); - } catch (error: any) { - let notificationObj: any = null; - if (typeof error === "string") { - notificationObj = { - msg: error || "Failed to send message", - alertType: "error", - }; - } else if (typeof error?.error === "string") { - notificationObj = { - msg: error?.error || "Failed to send message", - alertType: "error", - }; - } else { - notificationObj = { - msg: error?.message || "Failed to send message", - alertType: "error", - }; - } - if (!notificationObj) return; - dispatch(setNotification(notificationObj)); - } finally { - setDownloadLoader(false); - } - return; - } - - const { name, service, identifier } = fileInfo; - - setIsLoading(true); - downloadVideo({ - name, - service, - identifier, - properties: { - ...fileInfo, - jsonId - }, - }); - }; - - const refetch = React.useCallback(async () => { - if (!fileInfo) return - try { - const { name, service, identifier } = fileInfo; - isFetchingProperties.current = true - await qortalRequest({ - action: 'GET_QDN_RESOURCE_PROPERTIES', - name, - service, - identifier - }) - - } catch (error) { - - } finally { - isFetchingProperties.current = false - } - - }, [fileInfo]) - - const refetchInInterval = ()=> { - try { - const interval = setInterval(()=> { - if(status?.current === 'DOWNLOADED'){ - refetch() - } - if(status?.current === 'READY'){ - clearInterval(interval); - } - - }, 7500) - } catch (error) { - - } - } - - React.useEffect(() => { - if(resourceStatus?.status){ - status.current = resourceStatus?.status - } - if ( - resourceStatus?.status === 'DOWNLOADED' && - reDownload?.current === false - ) { - refetchInInterval() - reDownload.current = true - } - }, [resourceStatus]) - - - React.useEffect(() => { - if ( - resourceStatus?.status === "READY" && - download?.url && - download?.properties?.filename && - hasCommencedDownload.current - ) { - setIsLoading(false); - dispatch( - setNotification({ - msg: "Download completed. Click to save file", - alertType: "info", - }) - ); - } - }, [resourceStatus, download]); - - return ( - - {children && ( - - {children}{" "} - {((resourceStatus.status && resourceStatus?.status !== "READY") || - isLoading) && startedDownload ? ( - <> - - {`${Math.round( - resourceStatus?.percentLoaded || 0 - ).toFixed(0)}% loaded`} - - ) : resourceStatus?.status === "READY" ? ( - <> - - Ready to save: click here - - {downloadLoader && ( - - )} - - ) : null} - - )} - {!children && ( - - - - - - - - {author} - - - {title} - - - {description} - - {mimeType && ( - - {mimeType} - - )} - - - {((resourceStatus.status && resourceStatus?.status !== "READY") || - isLoading) && startedDownload && ( - - - {resourceStatus && ( - - {resourceStatus?.status === "REFETCHING" ? ( - <> - <> - {( - (resourceStatus?.localChunkCount / - resourceStatus?.totalChunkCount) * - 100 - )?.toFixed(0)} - % - - - <> Refetching in 2 minutes - - ) : resourceStatus?.status === "DOWNLOADED" ? ( - <>Download Completed: building file... - ) : resourceStatus?.status !== "READY" ? ( - <> - {( - (resourceStatus?.localChunkCount / - resourceStatus?.totalChunkCount) * - 100 - )?.toFixed(0)} - % - - ) : ( - <>Download Completed: fetching file... - )} - - )} - - )} - {resourceStatus?.status === "READY" && - download?.url && - download?.properties?.filename && ( - - - Ready to save: click here - - {downloadLoader && ( - - )} - - )} - - )} - - ); -} +import * as React from "react"; +import { styled, useTheme } from "@mui/material/styles"; +import Box from "@mui/material/Box"; +import Typography from "@mui/material/Typography"; +import { useDispatch, useSelector } from "react-redux"; +import { CircularProgress } from "@mui/material"; +import AttachFileIcon from "@mui/icons-material/AttachFile"; +import { MyContext } from "../../wrappers/DownloadWrapper"; +import { RootState } from "../../state/store"; +import { setNotification } from "../../state/features/notificationsSlice"; + +const Widget = styled("div")(({ theme }) => ({ + padding: 8, + borderRadius: 10, + maxWidth: 350, + position: "relative", + zIndex: 1, + backdropFilter: "blur(40px)", + background: "skyblue", + transition: "0.2s all", + "&:hover": { + opacity: 0.75, + }, +})); + +const CoverImage = styled("div")({ + width: 40, + height: 40, + objectFit: "cover", + overflow: "hidden", + flexShrink: 0, + borderRadius: 8, + backgroundColor: "rgba(0,0,0,0.08)", + "& > img": { + width: "100%", + }, +}); + +interface IAudioElement { + title: string; + description?: string; + author?: string; + fileInfo?: any; + postId?: string; + user?: string; + children?: React.ReactNode; + mimeType?: string; + disable?: boolean; + mode?: string; + otherUser?: string; + customStyles?: any; + jsonId:string; +} + +interface CustomWindow extends Window { + showSaveFilePicker: any; // Replace 'any' with the appropriate type if you know it +} + +const customWindow = window as unknown as CustomWindow; + +export default function FileElement({ + title, + description, + author, + fileInfo, + children, + mimeType, + disable, + customStyles, + jsonId +}: IAudioElement) { + const { downloadVideo } = React.useContext(MyContext); + const [startedDownload, setStartedDownload] = React.useState(false) + const [isLoading, setIsLoading] = React.useState(false); + const [fileProperties, setFileProperties] = React.useState(null); + const [downloadLoader, setDownloadLoader] = React.useState(false); + const downloads = useSelector((state: RootState) => state.global?.downloads); + const status = React.useRef(null) + + const hasCommencedDownload = React.useRef(false); + const dispatch = useDispatch(); + const reDownload = React.useRef(false) + const isFetchingProperties = React.useRef(false) + const download = React.useMemo(() => { + if (!downloads || !fileInfo?.identifier) return {}; + const findDownload = downloads[fileInfo?.identifier]; + + if (!findDownload) return {}; + return findDownload; + }, [downloads, fileInfo]); + + const resourceStatus = React.useMemo(() => { + return download?.status || {}; + }, [download]); + + const retryDownload = React.useRef(0); + + const handlePlay = async () => { + if (disable) return; + hasCommencedDownload.current = true; + setStartedDownload(true) + if ( + resourceStatus?.status === "READY" + ) { + if (downloadLoader) return; + + setDownloadLoader(true); + let filename = download?.properties?.filename + let mimeType = download?.properties?.type + + try { + const { name, service, identifier } = fileInfo; + + const res = await qortalRequest({ + action: "GET_QDN_RESOURCE_PROPERTIES", + name: name, + service: service, + identifier: identifier, + }); + filename = res?.filename || filename; + mimeType = res?.mimeType || mimeType; + } catch (error) { + + } + try { + const { name, service, identifier } = fileInfo; + + const url = `/arbitrary/${service}/${name}/${identifier}`; + fetch(url) + .then(response => response.blob()) + .then(async blob => { + await qortalRequest({ + action: "SAVE_FILE", + blob, + filename: filename, + mimeType, + }); + }) + .catch(error => { + console.error("Error fetching the video:", error); + }); + } catch (error: any) { + let notificationObj: any = null; + if (typeof error === "string") { + notificationObj = { + msg: error || "Failed to send message", + alertType: "error", + }; + } else if (typeof error?.error === "string") { + notificationObj = { + msg: error?.error || "Failed to send message", + alertType: "error", + }; + } else { + notificationObj = { + msg: error?.message || "Failed to send message", + alertType: "error", + }; + } + if (!notificationObj) return; + dispatch(setNotification(notificationObj)); + } finally { + setDownloadLoader(false); + } + return; + } + + const { name, service, identifier } = fileInfo; + + setIsLoading(true); + downloadVideo({ + name, + service, + identifier, + properties: { + ...fileInfo, + jsonId + }, + }); + }; + + const refetch = React.useCallback(async () => { + if (!fileInfo) return + try { + const { name, service, identifier } = fileInfo; + isFetchingProperties.current = true + await qortalRequest({ + action: 'GET_QDN_RESOURCE_PROPERTIES', + name, + service, + identifier + }) + + } catch (error) { + + } finally { + isFetchingProperties.current = false + } + + }, [fileInfo]) + + const refetchInInterval = ()=> { + try { + const interval = setInterval(()=> { + if(status?.current === 'DOWNLOADED'){ + refetch() + } + if(status?.current === 'READY'){ + clearInterval(interval); + } + + }, 7500) + } catch (error) { + + } + } + + React.useEffect(() => { + if(resourceStatus?.status){ + status.current = resourceStatus?.status + } + if ( + resourceStatus?.status === 'DOWNLOADED' && + reDownload?.current === false + ) { + refetchInInterval() + reDownload.current = true + } + }, [resourceStatus]) + + + React.useEffect(() => { + if ( + resourceStatus?.status === "READY" && + download?.url && + download?.properties?.filename && + hasCommencedDownload.current + ) { + setIsLoading(false); + dispatch( + setNotification({ + msg: "Download completed. Click to save file", + alertType: "info", + }) + ); + } + }, [resourceStatus, download]); + + return ( + + {children && ( + + {children}{" "} + {((resourceStatus.status && resourceStatus?.status !== "READY") || + isLoading) && startedDownload ? ( + <> + + {`${Math.round( + resourceStatus?.percentLoaded || 0 + ).toFixed(0)}% loaded`} + + ) : resourceStatus?.status === "READY" ? ( + <> + + Ready to save: click here + + {downloadLoader && ( + + )} + + ) : null} + + )} + {!children && ( + + + + + + + + {author} + + + {title} + + + {description} + + {mimeType && ( + + {mimeType} + + )} + + + {((resourceStatus.status && resourceStatus?.status !== "READY") || + isLoading) && startedDownload && ( + + + {resourceStatus && ( + + {resourceStatus?.status === "REFETCHING" ? ( + <> + <> + {( + (resourceStatus?.localChunkCount / + resourceStatus?.totalChunkCount) * + 100 + )?.toFixed(0)} + % + + + <> Refetching in 2 minutes + + ) : resourceStatus?.status === "DOWNLOADED" ? ( + <>Download Completed: building file... + ) : resourceStatus?.status !== "READY" ? ( + <> + {( + (resourceStatus?.localChunkCount / + resourceStatus?.totalChunkCount) * + 100 + )?.toFixed(0)} + % + + ) : ( + <>Download Completed: fetching file... + )} + + )} + + )} + {resourceStatus?.status === "READY" && + download?.url && + download?.properties?.filename && ( + + + Ready to save: click here + + {downloadLoader && ( + + )} + + )} + + )} + + ); +} diff --git a/src/components/common/ImagePublisher/ImagePublisher-styles.tsx b/src/components/common/ImagePublisher/ImagePublisher-styles.tsx index 75da3e3..5fe8d33 100644 --- a/src/components/common/ImagePublisher/ImagePublisher-styles.tsx +++ b/src/components/common/ImagePublisher/ImagePublisher-styles.tsx @@ -11,6 +11,7 @@ export const AddCoverImageButton = styled(Button)(({ theme }) => ({ fontWeight: 400, letterSpacing: "0.2px", color: theme.palette.text.primary, + width: "170px", backgroundColor: "#44c4ff", "&:hover": { backgroundColor: "#01a9e9" }, gap: "5px", diff --git a/src/components/common/ImagePublisher/ImageUploader.tsx b/src/components/common/ImagePublisher/ImageUploader.tsx index 6919bff..02f44e8 100644 --- a/src/components/common/ImagePublisher/ImageUploader.tsx +++ b/src/components/common/ImagePublisher/ImageUploader.tsx @@ -98,6 +98,7 @@ export const ImageUploader: React.FC = ({ {...getRootProps()} sx={{ display: "flex", + width: "170px", }} > diff --git a/src/components/common/IssueIcon.tsx b/src/components/common/IssueIcon.tsx new file mode 100644 index 0000000..fd5bb51 --- /dev/null +++ b/src/components/common/IssueIcon.tsx @@ -0,0 +1,61 @@ +import AttachFileIcon from "@mui/icons-material/AttachFile"; +import React, { CSSProperties } from "react"; + +interface IssueIconProps { + iconSrc: string; + showBackupIcon?: boolean; + style?: CSSProperties; +} +export const IssueIcon = ({ + iconSrc, + showBackupIcon = true, + style, +}: IssueIconProps) => { + const displayFileIcon = !iconSrc && showBackupIcon; + + return ( + <> + {iconSrc && ( + + )} + {displayFileIcon && ( + + )} + + ); +}; + +interface IssueIconsProps { + iconSources: string[]; + showBackupIcon?: boolean; + style?: CSSProperties; +} + +export const IssueIcons = ({ + iconSources, + showBackupIcon = true, + style, +}: IssueIconsProps) => { + return iconSources.map((icon, index) => ( + + )); +}; diff --git a/src/components/common/LazyLoad.tsx b/src/components/common/LazyLoad.tsx index 5ce7a30..8b2ee0e 100644 --- a/src/components/common/LazyLoad.tsx +++ b/src/components/common/LazyLoad.tsx @@ -1,48 +1,48 @@ -import React, { useState, useEffect, useRef } from 'react' -import { useInView } from 'react-intersection-observer' -import CircularProgress from '@mui/material/CircularProgress' - -interface Props { - onLoadMore: () => Promise - isLoading?: boolean -} - -const LazyLoad: React.FC = ({ onLoadMore, isLoading }) => { - const [isFetching, setIsFetching] = useState(false) - - const firstLoad = useRef(false) - const [ref, inView] = useInView({ - threshold: 0.7 - }) - - useEffect(() => { - if (inView) { - setIsFetching(true) - onLoadMore().finally(() => { - setIsFetching(false) - firstLoad.current = true - }) - } - }, [inView]) - - return ( -
-
- -
-
- ) -} - -export default LazyLoad +import React, { useState, useEffect, useRef } from 'react' +import { useInView } from 'react-intersection-observer' +import CircularProgress from '@mui/material/CircularProgress' + +interface Props { + onLoadMore: () => Promise + isLoading?: boolean +} + +const LazyLoad: React.FC = ({ onLoadMore, isLoading }) => { + const [isFetching, setIsFetching] = useState(false) + + const firstLoad = useRef(false) + const [ref, inView] = useInView({ + threshold: 0.7 + }) + + useEffect(() => { + if (inView) { + setIsFetching(true) + onLoadMore().finally(() => { + setIsFetching(false) + firstLoad.current = true + }) + } + }, [inView]) + + return ( +
+
+ +
+
+ ) +} + +export default LazyLoad diff --git a/src/components/common/Notification/Notification.tsx b/src/components/common/Notification/Notification.tsx index 501f081..a823b85 100644 --- a/src/components/common/Notification/Notification.tsx +++ b/src/components/common/Notification/Notification.tsx @@ -1,86 +1,86 @@ -import { useDispatch, useSelector } from 'react-redux' -import { toast, ToastContainer, Zoom, Slide } from 'react-toastify' -import { removeNotification } from '../../../state/features/notificationsSlice' -import 'react-toastify/dist/ReactToastify.css' -import { RootState } from '../../../state/store' - -const Notification = () => { - const dispatch = useDispatch() - - const { alertTypes } = useSelector((state: RootState) => state.notifications) - - if (alertTypes.alertError) { - toast.error(`❌ ${alertTypes?.alertError}`, { - position: 'bottom-right', - autoClose: 4000, - hideProgressBar: false, - closeOnClick: true, - pauseOnHover: true, - draggable: true, - progress: undefined, - icon: false - }) - dispatch(removeNotification()) - } - if (alertTypes.alertSuccess) { - toast.success(`✔️ ${alertTypes?.alertSuccess}`, { - position: 'bottom-right', - autoClose: 4000, - hideProgressBar: false, - closeOnClick: true, - pauseOnHover: true, - draggable: true, - progress: undefined, - icon: false - }) - dispatch(removeNotification()) - } - if (alertTypes.alertInfo) { - toast.info(`${alertTypes?.alertInfo}`, { - position: 'top-right', - autoClose: 1300, - hideProgressBar: false, - closeOnClick: true, - pauseOnHover: true, - draggable: true, - progress: undefined, - theme: 'light' - }) - dispatch(removeNotification()) - } - - if (alertTypes.alertInfo) { - return ( - - ) - } - - return ( - - ) -} - -export default Notification +import { useDispatch, useSelector } from 'react-redux' +import { toast, ToastContainer, Zoom, Slide } from 'react-toastify' +import { removeNotification } from '../../../state/features/notificationsSlice' +import 'react-toastify/dist/ReactToastify.css' +import { RootState } from '../../../state/store' + +const Notification = () => { + const dispatch = useDispatch() + + const { alertTypes } = useSelector((state: RootState) => state.notifications) + + if (alertTypes.alertError) { + toast.error(`❌ ${alertTypes?.alertError}`, { + position: 'bottom-right', + autoClose: 4000, + hideProgressBar: false, + closeOnClick: true, + pauseOnHover: true, + draggable: true, + progress: undefined, + icon: false + }) + dispatch(removeNotification()) + } + if (alertTypes.alertSuccess) { + toast.success(`✔️ ${alertTypes?.alertSuccess}`, { + position: 'bottom-right', + autoClose: 4000, + hideProgressBar: false, + closeOnClick: true, + pauseOnHover: true, + draggable: true, + progress: undefined, + icon: false + }) + dispatch(removeNotification()) + } + if (alertTypes.alertInfo) { + toast.info(`${alertTypes?.alertInfo}`, { + position: 'top-right', + autoClose: 1300, + hideProgressBar: false, + closeOnClick: true, + pauseOnHover: true, + draggable: true, + progress: undefined, + theme: 'light' + }) + dispatch(removeNotification()) + } + + if (alertTypes.alertInfo) { + return ( + + ) + } + + return ( + + ) +} + +export default Notification diff --git a/src/components/common/PageLoader.tsx b/src/components/common/PageLoader.tsx index e8e5740..b744c63 100644 --- a/src/components/common/PageLoader.tsx +++ b/src/components/common/PageLoader.tsx @@ -1,43 +1,43 @@ -import React from 'react'; -import CircularProgress from '@mui/material/CircularProgress'; -import Box from '@mui/system/Box'; -import { useTheme } from '@mui/material' - -interface PageLoaderProps { - size?: number - thickness?: number -} - -const PageLoader: React.FC = ({ - size = 40, - thickness = 5 -}) => { - const theme = useTheme() - - return ( - - - - ) -} - -export default PageLoader; +import React from 'react'; +import CircularProgress from '@mui/material/CircularProgress'; +import Box from '@mui/system/Box'; +import { useTheme } from '@mui/material' + +interface PageLoaderProps { + size?: number + thickness?: number +} + +const PageLoader: React.FC = ({ + size = 40, + thickness = 5 +}) => { + const theme = useTheme() + + return ( + + + + ) +} + +export default PageLoader; diff --git a/src/components/common/Portal.tsx b/src/components/common/Portal.tsx index 1e0cb26..09d382c 100644 --- a/src/components/common/Portal.tsx +++ b/src/components/common/Portal.tsx @@ -1,25 +1,25 @@ -import React, { useEffect, useState } from 'react' -import { createPortal } from 'react-dom' - -interface PortalProps { - children: React.ReactNode -} - -const Portal: React.FC = ({ children }) => { - const [mounted, setMounted] = useState(false) - - useEffect(() => { - setMounted(true) - - return () => setMounted(false) - }, []) - - return mounted - ? createPortal( - children, - document.querySelector('#modal-root') as HTMLElement - ) - : null -} - -export default Portal +import React, { useEffect, useState } from 'react' +import { createPortal } from 'react-dom' + +interface PortalProps { + children: React.ReactNode +} + +const Portal: React.FC = ({ children }) => { + const [mounted, setMounted] = useState(false) + + useEffect(() => { + setMounted(true) + + return () => setMounted(false) + }, []) + + return mounted + ? createPortal( + children, + document.querySelector('#modal-root') as HTMLElement + ) + : null +} + +export default Portal diff --git a/src/components/common/TextEditor/DisplayHtml.tsx b/src/components/common/TextEditor/DisplayHtml.tsx index f6c1bd1..266d912 100644 --- a/src/components/common/TextEditor/DisplayHtml.tsx +++ b/src/components/common/TextEditor/DisplayHtml.tsx @@ -1,40 +1,40 @@ -import { useMemo } from "react"; -import DOMPurify from "dompurify"; -import "react-quill/dist/quill.snow.css"; -import "react-quill/dist/quill.core.css"; -import "react-quill/dist/quill.bubble.css"; -import { convertQortalLinks } from "./utils"; -import { Box, styled } from "@mui/material"; - - -const CrowdfundInlineContent = styled(Box)(({ theme }) => ({ - display: "flex", - fontFamily: "Mulish", - fontSize: "19px", - fontWeight: 400, - letterSpacing: 0, - color: theme.palette.text.primary, - width: '100%' - })); - -export const DisplayHtml = ({ html }) => { - const cleanContent = useMemo(() => { - if (!html) return null; - - const sanitize: string = DOMPurify.sanitize(html, { - USE_PROFILES: { html: true }, - }); - const anchorQortal = convertQortalLinks(sanitize); - return anchorQortal; - }, [html]); - - if (!cleanContent) return null; - return ( - -
- - ); -}; +import { useMemo } from "react"; +import DOMPurify from "dompurify"; +import "react-quill/dist/quill.snow.css"; +import "react-quill/dist/quill.core.css"; +import "react-quill/dist/quill.bubble.css"; +import { convertQortalLinks } from "./utils"; +import { Box, styled } from "@mui/material"; + + +const CrowdfundInlineContent = styled(Box)(({ theme }) => ({ + display: "flex", + fontFamily: "Mulish", + fontSize: "19px", + fontWeight: 400, + letterSpacing: 0, + color: theme.palette.text.primary, + width: '100%' + })); + +export const DisplayHtml = ({ html }) => { + const cleanContent = useMemo(() => { + if (!html) return null; + + const sanitize: string = DOMPurify.sanitize(html, { + USE_PROFILES: { html: true }, + }); + const anchorQortal = convertQortalLinks(sanitize); + return anchorQortal; + }, [html]); + + if (!cleanContent) return null; + return ( + +
+ + ); +}; diff --git a/src/components/common/TextEditor/utils.ts b/src/components/common/TextEditor/utils.ts index 76ca5fe..5933279 100644 --- a/src/components/common/TextEditor/utils.ts +++ b/src/components/common/TextEditor/utils.ts @@ -1,26 +1,26 @@ -export function convertQortalLinks(inputHtml) { - // Regular expression to match 'qortal://...' URLs. - // This will stop at the first whitespace, comma, or HTML tag - var regex = /(qortal:\/\/[^\s,<]+)/g; - - // Replace matches in inputHtml with formatted anchor tag - var outputHtml = inputHtml.replace(regex, function (match) { - return `${match}`; - }); - - return outputHtml; -} - -export function extractTextFromHTML(htmlString: any, length = 150) { - // Create a temporary DOM element - const tempDiv = document.createElement("div"); - // Replace br tags and block-level tags with a space before setting the HTML content - const htmlWithSpaces = htmlString.replace(/<\/?(br|p|div|h[1-6]|ul|ol|li|blockquote)[^>]*>/gi, ' '); - tempDiv.innerHTML = htmlWithSpaces; - // Extract the text content - let text = tempDiv.textContent || tempDiv.innerText || ""; - // Replace multiple spaces with a single space and trim - text = text.replace(/\s+/g, ' ').trim(); - // Slice the text to the desired length - return text.slice(0, length); +export function convertQortalLinks(inputHtml) { + // Regular expression to match 'qortal://...' URLs. + // This will stop at the first whitespace, comma, or HTML tag + var regex = /(qortal:\/\/[^\s,<]+)/g; + + // Replace matches in inputHtml with formatted anchor tag + var outputHtml = inputHtml.replace(regex, function (match) { + return `${match}`; + }); + + return outputHtml; +} + +export function extractTextFromHTML(htmlString: any, length = 150) { + // Create a temporary DOM element + const tempDiv = document.createElement("div"); + // Replace br tags and block-level tags with a space before setting the HTML content + const htmlWithSpaces = htmlString.replace(/<\/?(br|p|div|h[1-6]|ul|ol|li|blockquote)[^>]*>/gi, ' '); + tempDiv.innerHTML = htmlWithSpaces; + // Extract the text content + let text = tempDiv.textContent || tempDiv.innerText || ""; + // Replace multiple spaces with a single space and trim + text = text.replace(/\s+/g, ' ').trim(); + // Slice the text to the desired length + return text.slice(0, length); } \ No newline at end of file diff --git a/src/components/common/VideoPlayer.tsx b/src/components/common/VideoPlayer.tsx index 93feddc..5f298a8 100644 --- a/src/components/common/VideoPlayer.tsx +++ b/src/components/common/VideoPlayer.tsx @@ -1,857 +1,857 @@ -import React, { useContext, useEffect, useMemo, useRef, useState } from 'react' -import ReactDOM from 'react-dom' -import { Box, IconButton, Slider } from '@mui/material' -import { CircularProgress, Typography } from '@mui/material' -import { Key } from 'ts-key-enum' -import { - PlayArrow, - Pause, - VolumeUp, - Fullscreen, - PictureInPicture, VolumeOff -} from '@mui/icons-material' -import { styled } from '@mui/system' -import { MyContext } from '../../wrappers/DownloadWrapper' -import { useDispatch, useSelector } from 'react-redux' -import { RootState } from '../../state/store' -import { Refresh } from '@mui/icons-material' - -import { Menu, MenuItem } from '@mui/material' -import { MoreVert as MoreIcon } from '@mui/icons-material' -import { setVideoPlaying } from '../../state/features/globalSlice' -const VideoContainer = styled(Box)` - position: relative; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - width: 100%; - height: 100%; - margin: 0px; - padding: 0px; -` - -const VideoElement = styled('video')` - width: 100%; - height: auto; - max-height: calc(100vh - 150px); - background: rgb(33, 33, 33); -` - -const ControlsContainer = styled(Box)` - position: absolute; - display: flex; - align-items: center; - justify-content: space-between; - bottom: 0; - left: 0; - right: 0; - padding: 8px; - background-color: rgba(0, 0, 0, 0.6); -` - -interface VideoPlayerProps { - src?: string - poster?: string - name?: string - identifier?: string - service?: string - autoplay?: boolean - from?: string | null - customStyle?: any - user?: string - jsonId?: string -} - -export const VideoPlayer: React.FC = ({ - poster, - name, - identifier, - service, - autoplay = true, - from = null, - customStyle = {}, - user = '', - jsonId = '' -}) => { - const dispatch = useDispatch() - const videoRef = useRef(null) - const [playing, setPlaying] = useState(false) - const [volume, setVolume] = useState(1) - const [mutedVolume, setMutedVolume] = useState(1) - const [isMuted, setIsMuted] = useState(false) - const [progress, setProgress] = useState(0) - const [isLoading, setIsLoading] = useState(false) - const [canPlay, setCanPlay] = useState(false) - const [startPlay, setStartPlay] = useState(false) - const [isMobileView, setIsMobileView] = useState(false) - const [playbackRate, setPlaybackRate] = useState(1) - const [anchorEl, setAnchorEl] = useState(null) - const videoPlaying = useSelector((state: RootState) => state.global.videoPlaying); - const reDownload = useRef(false) - const isFetchingProperties = useRef(false) - - const status = useRef(null) - const { downloads } = useSelector((state: RootState) => state.global) - const download = useMemo(() => { - if (!downloads || !identifier) return {} - const findDownload = downloads[identifier] - - if (!findDownload) return {} - return findDownload - }, [downloads, identifier]) - - const src = useMemo(() => { - return download?.url || '' - }, [download?.url]) - const resourceStatus = useMemo(() => { - return download?.status || {} - }, [download]) - - const minSpeed = 0.25; - const maxSpeed = 4.0; - const speedChange = 0.25; - - const updatePlaybackRate = (newSpeed: number) => { - if (videoRef.current) { - if (newSpeed > maxSpeed || newSpeed < minSpeed) - newSpeed = minSpeed - videoRef.current.playbackRate = newSpeed - setPlaybackRate(newSpeed) - } - } - - const increaseSpeed = (wrapOverflow = true) => { - const changedSpeed = playbackRate + speedChange - let newSpeed = wrapOverflow ? changedSpeed : Math.min(changedSpeed, maxSpeed) - - - if (videoRef.current) { - updatePlaybackRate(newSpeed); - } - } - - const decreaseSpeed = () => { - if (videoRef.current) { - updatePlaybackRate(playbackRate - speedChange); - } - } - - - - const refetch = React.useCallback(async () => { - if (!name || !identifier || !service || isFetchingProperties.current) return - try { - isFetchingProperties.current = true - await qortalRequest({ - action: 'GET_QDN_RESOURCE_PROPERTIES', - name, - service, - identifier - }) - - } catch (error) { - - } finally { - isFetchingProperties.current = false - } - - }, [identifier, name, service]) - - - const toggleRef = useRef(null) - const { downloadVideo } = useContext(MyContext) - const togglePlay = async () => { - if (!videoRef.current) return - setStartPlay(true) - if (!src || resourceStatus?.status !== 'READY') { - const el = document.getElementById('videoWrapper') - if (el) { - el?.parentElement?.removeChild(el) - } - ReactDOM.flushSync(() => { - setIsLoading(true) - }) - getSrc() - } - if (playing) { - videoRef.current.pause() - } else { - videoRef.current.play() - } - setPlaying(!playing) - } - - const onVolumeChange = (_: any, value: number | number[]) => { - if (!videoRef.current) return - videoRef.current.volume = value as number - setVolume(value as number) - setIsMuted(false) - } - - const onProgressChange = (_: any, value: number | number[]) => { - if (!videoRef.current) return - videoRef.current.currentTime = value as number - setProgress(value as number) - if (!playing) { - videoRef.current.play() - setPlaying(true) - } - } - - const handleEnded = () => { - setPlaying(false) - } - - const updateProgress = () => { - if (!videoRef.current) return - setProgress(videoRef.current.currentTime) - } - - const [isFullscreen, setIsFullscreen] = useState(false) - - const enterFullscreen = () => { - if (!videoRef.current) return - if (videoRef.current.requestFullscreen) { - videoRef.current.requestFullscreen() - } - } - - const exitFullscreen = () => { - if (document.exitFullscreen) { - document.exitFullscreen() - } - } - - const toggleFullscreen = () => { - isFullscreen ? exitFullscreen() : enterFullscreen() - } - const togglePictureInPicture = async () => { - if (!videoRef.current) return - if (document.pictureInPictureElement === videoRef.current) { - await document.exitPictureInPicture() - } else { - await videoRef.current.requestPictureInPicture() - } - } - - useEffect(() => { - const handleFullscreenChange = () => { - setIsFullscreen(!!document.fullscreenElement) - } - - document.addEventListener('fullscreenchange', handleFullscreenChange) - return () => { - document.removeEventListener('fullscreenchange', handleFullscreenChange) - } - }, []) - - useEffect(()=> { - if(videoPlaying && videoPlaying.id === identifier && src && videoRef?.current){ - handleCanPlay() - videoRef.current.volume = videoPlaying.volume - videoRef.current.currentTime = videoPlaying.currentTime - videoRef.current.play() - setPlaying(true) - setStartPlay(true) - dispatch(setVideoPlaying(null)) - } - }, [videoPlaying, identifier, src]) - - const handleCanPlay = () => { - setIsLoading(false) - setCanPlay(true) - } - - const getSrc = React.useCallback(async () => { - if (!name || !identifier || !service || !jsonId || !user) return - try { - downloadVideo({ - name, - service, - identifier, - properties: { - jsonId, - user - } - }) - } catch (error) { - console.error(error) - } - }, [identifier, name, service, jsonId, user]) - - useEffect(() => { - const videoElement = videoRef.current - - const handleLeavePictureInPicture = async (event: any) => { - const target = event?.target - if (target) { - target.pause() - if (setPlaying) { - setPlaying(false) - } - } - } - - if (videoElement) { - videoElement.addEventListener( - 'leavepictureinpicture', - handleLeavePictureInPicture - ) - } - - return () => { - if (videoElement) { - videoElement.removeEventListener( - 'leavepictureinpicture', - handleLeavePictureInPicture - ) - } - } - }, []) - - useEffect(() => { - const videoElement = videoRef.current - - const minimizeVideo = async () => { - if (!videoElement) return - - dispatch(setVideoPlaying(videoElement)) - // const handleClose = () => { - // if (videoElement && videoElement.parentElement) { - // const el = document.getElementById('videoWrapper') - // if (el) { - // el?.parentElement?.removeChild(el) - // } - // } - // } - // const createCloseButton = (): HTMLButtonElement => { - // const closeButton = document.createElement('button') - // closeButton.textContent = 'X' - // closeButton.style.position = 'absolute' - // closeButton.style.top = '0' - // closeButton.style.right = '0' - // closeButton.style.backgroundColor = 'rgba(255, 255, 255, 0.7)' - // closeButton.style.border = 'none' - // closeButton.style.fontWeight = 'bold' - // closeButton.style.fontSize = '1.2rem' - // closeButton.style.cursor = 'pointer' - // closeButton.style.padding = '2px 8px' - // closeButton.style.borderRadius = '0 0 0 4px' - - // closeButton.addEventListener('click', handleClose) - - // return closeButton - // } - // const buttonClose = createCloseButton() - // const videoWrapper = document.createElement('div') - // videoWrapper.id = 'videoWrapper' - // videoWrapper.style.position = 'fixed' - // videoWrapper.style.zIndex = '900000009' - // videoWrapper.style.bottom = '0px' - // videoWrapper.style.right = '0px' - - // videoElement.parentElement?.insertBefore(videoWrapper, videoElement) - // videoWrapper.appendChild(videoElement) - - // videoWrapper.appendChild(buttonClose) - // videoElement.controls = true - // videoElement.style.height = 'auto' - // videoElement.style.width = '300px' - - // document.body.appendChild(videoWrapper) - } - - return () => { - if (videoElement) { - if (videoElement && !videoElement.paused && !videoElement.ended) { - minimizeVideo() - } - } - } - }, []) - - function formatTime(seconds: number): string { - seconds = Math.floor(seconds) - let minutes: number | string = Math.floor(seconds / 60) - let hours: number | string = Math.floor(minutes / 60) - - let remainingSeconds: number | string = seconds % 60 - let remainingMinutes: number | string = minutes % 60 - - if (remainingSeconds < 10) { - remainingSeconds = '0' + remainingSeconds - } - - if (remainingMinutes < 10) { - remainingMinutes = '0' + remainingMinutes - } - - if (hours === 0) { - hours = '' - } - else { - hours = hours + ':' - } - - return hours + remainingMinutes + ':' + remainingSeconds - } - - const reloadVideo = () => { - if (!videoRef.current) return - const currentTime = videoRef.current.currentTime - videoRef.current.src = src - videoRef.current.load() - videoRef.current.currentTime = currentTime - if (playing) { - videoRef.current.play() - } - } - - const refetchInInterval = ()=> { - try { - const interval = setInterval(()=> { - if(status?.current === 'DOWNLOADED'){ - refetch() - } - if(status?.current === 'READY'){ - clearInterval(interval); - } - - }, 7500) - } catch (error) { - - } - } - - useEffect(() => { - if(resourceStatus?.status){ - status.current = resourceStatus?.status - } - if ( - resourceStatus?.status === 'DOWNLOADED' && - reDownload?.current === false - ) { - refetchInInterval() - reDownload.current = true - } - }, [getSrc, resourceStatus]) - - const handleMenuOpen = (event: any) => { - setAnchorEl(event.currentTarget) - } - - const handleMenuClose = () => { - setAnchorEl(null) - } - - useEffect(() => { - const videoWidth = videoRef?.current?.offsetWidth - if (videoWidth && videoWidth <= 600) { - setIsMobileView(true) - } - }, [canPlay]) - - const getDownloadProgress = (current: number, total: number) => { - const progress = current / total * 100; - return Number.isNaN(progress) ? '' : progress.toFixed(0) + '%' - } - const mute = () => { - setIsMuted(true) - setMutedVolume(volume) - setVolume(0) - if (videoRef.current) videoRef.current.volume = 0 - } - const unMute = () => { - setIsMuted(false) - setVolume(mutedVolume) - if (videoRef.current) videoRef.current.volume = mutedVolume - } - - const toggleMute = () => { - isMuted ? unMute() : mute(); - } - - const changeVolume = (volumeChange: number) => { - if (videoRef.current) { - const minVolume = 0; - const maxVolume = 1; - - - let newVolume = volumeChange + volume - - newVolume = Math.max(newVolume, minVolume) - newVolume = Math.min(newVolume, maxVolume) - - setIsMuted(false) - setMutedVolume(newVolume) - videoRef.current.volume = newVolume - setVolume(newVolume); - } - - } - const setProgressRelative = (secondsChange: number) => { - if (videoRef.current) { - const currentTime = videoRef.current?.currentTime - const minTime = 0 - const maxTime = videoRef.current?.duration || 100 - - let newTime = currentTime + secondsChange; - newTime = Math.max(newTime, minTime) - newTime = Math.min(newTime, maxTime) - videoRef.current.currentTime = newTime; - setProgress(newTime); - } - } - - const setProgressAbsolute = (videoPercent: number) => { - if (videoRef.current) { - videoPercent = Math.min(videoPercent, 100) - videoPercent = Math.max(videoPercent, 0) - const finalTime = videoRef.current?.duration * videoPercent / 100 - videoRef.current.currentTime = finalTime - setProgress(finalTime); - } - } - - - const keyboardShortcutsDown = (e: React.KeyboardEvent) => { - e.preventDefault() - - switch (e.key) { - case Key.Add: increaseSpeed(false); break; - case '+': increaseSpeed(false); break; - case '>': increaseSpeed(false); break; - - case Key.Subtract: decreaseSpeed(); break; - case '-': decreaseSpeed(); break; - case '<': decreaseSpeed(); break; - - case Key.ArrowLeft: { - if (e.shiftKey) setProgressRelative(-300); - else if (e.ctrlKey) setProgressRelative(-60); - else if (e.altKey) setProgressRelative(-10); - else setProgressRelative(-5); - } break; - - case Key.ArrowRight: { - if (e.shiftKey) setProgressRelative(300); - else if (e.ctrlKey) setProgressRelative(60); - else if (e.altKey) setProgressRelative(10); - else setProgressRelative(5); - } break; - - case Key.ArrowDown: changeVolume(-0.05); break; - case Key.ArrowUp: changeVolume(0.05); break; - } - } - - const keyboardShortcutsUp = (e: React.KeyboardEvent) => { - e.preventDefault() - - switch (e.key) { - case ' ': togglePlay(); break; - case 'm': toggleMute(); break; - - case 'f': enterFullscreen(); break; - case Key.Escape: exitFullscreen(); break; - - case '0': setProgressAbsolute(0); break; - case '1': setProgressAbsolute(10); break; - case '2': setProgressAbsolute(20); break; - case '3': setProgressAbsolute(30); break; - case '4': setProgressAbsolute(40); break; - case '5': setProgressAbsolute(50); break; - case '6': setProgressAbsolute(60); break; - case '7': setProgressAbsolute(70); break; - case '8': setProgressAbsolute(80); break; - case '9': setProgressAbsolute(90); break; - } - } - - return ( - - - {isLoading && ( - - - {resourceStatus && ( - - {resourceStatus?.status === 'NOT_PUBLISHED' && ( - <>Video file was not published. Please inform the publisher! - )} - {resourceStatus?.status === 'REFETCHING' ? ( - <> - <> - {getDownloadProgress(resourceStatus?.localChunkCount, resourceStatus?.totalChunkCount)} - - - <> Refetching in 25 seconds - - ) : resourceStatus?.status === 'DOWNLOADED' ? ( - <>Download Completed: building video... - ) : resourceStatus?.status !== 'READY' ? ( - <> - {getDownloadProgress(resourceStatus?.localChunkCount, resourceStatus?.totalChunkCount)} - - - ) : ( - <>Fetching video... - )} - - )} - - )} - {((!src && !isLoading) || !startPlay) && ( - { - if (from === 'create') return - dispatch(setVideoPlaying(null)) - togglePlay() - }} - sx={{ - cursor: 'pointer' - }} - > - - - )} - - - - - {isMobileView && canPlay ? ( - <> - - {playing ? : } - - - - - - - - - - - - - - increaseSpeed()}> - - Speed: {playbackRate}x - - - - - - - - - - - ) : canPlay ? ( - <> - - {playing ? : } - - - - - - - {progress && videoRef.current?.duration && formatTime(progress)}/ - {progress && - videoRef.current?.duration && - formatTime(videoRef.current?.duration)} - - - {isMuted ? : } - - - increaseSpeed()} - > - Speed: {playbackRate}x - - - - - - - - - - ) : null} - - - ) -} +import React, { useContext, useEffect, useMemo, useRef, useState } from 'react' +import ReactDOM from 'react-dom' +import { Box, IconButton, Slider } from '@mui/material' +import { CircularProgress, Typography } from '@mui/material' +import { Key } from 'ts-key-enum' +import { + PlayArrow, + Pause, + VolumeUp, + Fullscreen, + PictureInPicture, VolumeOff +} from '@mui/icons-material' +import { styled } from '@mui/system' +import { MyContext } from '../../wrappers/DownloadWrapper' +import { useDispatch, useSelector } from 'react-redux' +import { RootState } from '../../state/store' +import { Refresh } from '@mui/icons-material' + +import { Menu, MenuItem } from '@mui/material' +import { MoreVert as MoreIcon } from '@mui/icons-material' +import { setVideoPlaying } from '../../state/features/globalSlice' +const VideoContainer = styled(Box)` + position: relative; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; + margin: 0px; + padding: 0px; +` + +const VideoElement = styled('video')` + width: 100%; + height: auto; + max-height: calc(100vh - 150px); + background: rgb(33, 33, 33); +` + +const ControlsContainer = styled(Box)` + position: absolute; + display: flex; + align-items: center; + justify-content: space-between; + bottom: 0; + left: 0; + right: 0; + padding: 8px; + background-color: rgba(0, 0, 0, 0.6); +` + +interface VideoPlayerProps { + src?: string + poster?: string + name?: string + identifier?: string + service?: string + autoplay?: boolean + from?: string | null + customStyle?: any + user?: string + jsonId?: string +} + +export const VideoPlayer: React.FC = ({ + poster, + name, + identifier, + service, + autoplay = true, + from = null, + customStyle = {}, + user = '', + jsonId = '' +}) => { + const dispatch = useDispatch() + const videoRef = useRef(null) + const [playing, setPlaying] = useState(false) + const [volume, setVolume] = useState(1) + const [mutedVolume, setMutedVolume] = useState(1) + const [isMuted, setIsMuted] = useState(false) + const [progress, setProgress] = useState(0) + const [isLoading, setIsLoading] = useState(false) + const [canPlay, setCanPlay] = useState(false) + const [startPlay, setStartPlay] = useState(false) + const [isMobileView, setIsMobileView] = useState(false) + const [playbackRate, setPlaybackRate] = useState(1) + const [anchorEl, setAnchorEl] = useState(null) + const videoPlaying = useSelector((state: RootState) => state.global.videoPlaying); + const reDownload = useRef(false) + const isFetchingProperties = useRef(false) + + const status = useRef(null) + const { downloads } = useSelector((state: RootState) => state.global) + const download = useMemo(() => { + if (!downloads || !identifier) return {} + const findDownload = downloads[identifier] + + if (!findDownload) return {} + return findDownload + }, [downloads, identifier]) + + const src = useMemo(() => { + return download?.url || '' + }, [download?.url]) + const resourceStatus = useMemo(() => { + return download?.status || {} + }, [download]) + + const minSpeed = 0.25; + const maxSpeed = 4.0; + const speedChange = 0.25; + + const updatePlaybackRate = (newSpeed: number) => { + if (videoRef.current) { + if (newSpeed > maxSpeed || newSpeed < minSpeed) + newSpeed = minSpeed + videoRef.current.playbackRate = newSpeed + setPlaybackRate(newSpeed) + } + } + + const increaseSpeed = (wrapOverflow = true) => { + const changedSpeed = playbackRate + speedChange + let newSpeed = wrapOverflow ? changedSpeed : Math.min(changedSpeed, maxSpeed) + + + if (videoRef.current) { + updatePlaybackRate(newSpeed); + } + } + + const decreaseSpeed = () => { + if (videoRef.current) { + updatePlaybackRate(playbackRate - speedChange); + } + } + + + + const refetch = React.useCallback(async () => { + if (!name || !identifier || !service || isFetchingProperties.current) return + try { + isFetchingProperties.current = true + await qortalRequest({ + action: 'GET_QDN_RESOURCE_PROPERTIES', + name, + service, + identifier + }) + + } catch (error) { + + } finally { + isFetchingProperties.current = false + } + + }, [identifier, name, service]) + + + const toggleRef = useRef(null) + const { downloadVideo } = useContext(MyContext) + const togglePlay = async () => { + if (!videoRef.current) return + setStartPlay(true) + if (!src || resourceStatus?.status !== 'READY') { + const el = document.getElementById('videoWrapper') + if (el) { + el?.parentElement?.removeChild(el) + } + ReactDOM.flushSync(() => { + setIsLoading(true) + }) + getSrc() + } + if (playing) { + videoRef.current.pause() + } else { + videoRef.current.play() + } + setPlaying(!playing) + } + + const onVolumeChange = (_: any, value: number | number[]) => { + if (!videoRef.current) return + videoRef.current.volume = value as number + setVolume(value as number) + setIsMuted(false) + } + + const onProgressChange = (_: any, value: number | number[]) => { + if (!videoRef.current) return + videoRef.current.currentTime = value as number + setProgress(value as number) + if (!playing) { + videoRef.current.play() + setPlaying(true) + } + } + + const handleEnded = () => { + setPlaying(false) + } + + const updateProgress = () => { + if (!videoRef.current) return + setProgress(videoRef.current.currentTime) + } + + const [isFullscreen, setIsFullscreen] = useState(false) + + const enterFullscreen = () => { + if (!videoRef.current) return + if (videoRef.current.requestFullscreen) { + videoRef.current.requestFullscreen() + } + } + + const exitFullscreen = () => { + if (document.exitFullscreen) { + document.exitFullscreen() + } + } + + const toggleFullscreen = () => { + isFullscreen ? exitFullscreen() : enterFullscreen() + } + const togglePictureInPicture = async () => { + if (!videoRef.current) return + if (document.pictureInPictureElement === videoRef.current) { + await document.exitPictureInPicture() + } else { + await videoRef.current.requestPictureInPicture() + } + } + + useEffect(() => { + const handleFullscreenChange = () => { + setIsFullscreen(!!document.fullscreenElement) + } + + document.addEventListener('fullscreenchange', handleFullscreenChange) + return () => { + document.removeEventListener('fullscreenchange', handleFullscreenChange) + } + }, []) + + useEffect(()=> { + if(videoPlaying && videoPlaying.id === identifier && src && videoRef?.current){ + handleCanPlay() + videoRef.current.volume = videoPlaying.volume + videoRef.current.currentTime = videoPlaying.currentTime + videoRef.current.play() + setPlaying(true) + setStartPlay(true) + dispatch(setVideoPlaying(null)) + } + }, [videoPlaying, identifier, src]) + + const handleCanPlay = () => { + setIsLoading(false) + setCanPlay(true) + } + + const getSrc = React.useCallback(async () => { + if (!name || !identifier || !service || !jsonId || !user) return + try { + downloadVideo({ + name, + service, + identifier, + properties: { + jsonId, + user + } + }) + } catch (error) { + console.error(error) + } + }, [identifier, name, service, jsonId, user]) + + useEffect(() => { + const videoElement = videoRef.current + + const handleLeavePictureInPicture = async (event: any) => { + const target = event?.target + if (target) { + target.pause() + if (setPlaying) { + setPlaying(false) + } + } + } + + if (videoElement) { + videoElement.addEventListener( + 'leavepictureinpicture', + handleLeavePictureInPicture + ) + } + + return () => { + if (videoElement) { + videoElement.removeEventListener( + 'leavepictureinpicture', + handleLeavePictureInPicture + ) + } + } + }, []) + + useEffect(() => { + const videoElement = videoRef.current + + const minimizeVideo = async () => { + if (!videoElement) return + + dispatch(setVideoPlaying(videoElement)) + // const handleClose = () => { + // if (videoElement && videoElement.parentElement) { + // const el = document.getElementById('videoWrapper') + // if (el) { + // el?.parentElement?.removeChild(el) + // } + // } + // } + // const createCloseButton = (): HTMLButtonElement => { + // const closeButton = document.createElement('button') + // closeButton.textContent = 'X' + // closeButton.style.position = 'absolute' + // closeButton.style.top = '0' + // closeButton.style.right = '0' + // closeButton.style.backgroundColor = 'rgba(255, 255, 255, 0.7)' + // closeButton.style.border = 'none' + // closeButton.style.fontWeight = 'bold' + // closeButton.style.fontSize = '1.2rem' + // closeButton.style.cursor = 'pointer' + // closeButton.style.padding = '2px 8px' + // closeButton.style.borderRadius = '0 0 0 4px' + + // closeButton.addEventListener('click', handleClose) + + // return closeButton + // } + // const buttonClose = createCloseButton() + // const videoWrapper = document.createElement('div') + // videoWrapper.id = 'videoWrapper' + // videoWrapper.style.position = 'fixed' + // videoWrapper.style.zIndex = '900000009' + // videoWrapper.style.bottom = '0px' + // videoWrapper.style.right = '0px' + + // videoElement.parentElement?.insertBefore(videoWrapper, videoElement) + // videoWrapper.appendChild(videoElement) + + // videoWrapper.appendChild(buttonClose) + // videoElement.controls = true + // videoElement.style.height = 'auto' + // videoElement.style.width = '300px' + + // document.body.appendChild(videoWrapper) + } + + return () => { + if (videoElement) { + if (videoElement && !videoElement.paused && !videoElement.ended) { + minimizeVideo() + } + } + } + }, []) + + function formatTime(seconds: number): string { + seconds = Math.floor(seconds) + let minutes: number | string = Math.floor(seconds / 60) + let hours: number | string = Math.floor(minutes / 60) + + let remainingSeconds: number | string = seconds % 60 + let remainingMinutes: number | string = minutes % 60 + + if (remainingSeconds < 10) { + remainingSeconds = '0' + remainingSeconds + } + + if (remainingMinutes < 10) { + remainingMinutes = '0' + remainingMinutes + } + + if (hours === 0) { + hours = '' + } + else { + hours = hours + ':' + } + + return hours + remainingMinutes + ':' + remainingSeconds + } + + const reloadVideo = () => { + if (!videoRef.current) return + const currentTime = videoRef.current.currentTime + videoRef.current.src = src + videoRef.current.load() + videoRef.current.currentTime = currentTime + if (playing) { + videoRef.current.play() + } + } + + const refetchInInterval = ()=> { + try { + const interval = setInterval(()=> { + if(status?.current === 'DOWNLOADED'){ + refetch() + } + if(status?.current === 'READY'){ + clearInterval(interval); + } + + }, 7500) + } catch (error) { + + } + } + + useEffect(() => { + if(resourceStatus?.status){ + status.current = resourceStatus?.status + } + if ( + resourceStatus?.status === 'DOWNLOADED' && + reDownload?.current === false + ) { + refetchInInterval() + reDownload.current = true + } + }, [getSrc, resourceStatus]) + + const handleMenuOpen = (event: any) => { + setAnchorEl(event.currentTarget) + } + + const handleMenuClose = () => { + setAnchorEl(null) + } + + useEffect(() => { + const videoWidth = videoRef?.current?.offsetWidth + if (videoWidth && videoWidth <= 600) { + setIsMobileView(true) + } + }, [canPlay]) + + const getDownloadProgress = (current: number, total: number) => { + const progress = current / total * 100; + return Number.isNaN(progress) ? '' : progress.toFixed(0) + '%' + } + const mute = () => { + setIsMuted(true) + setMutedVolume(volume) + setVolume(0) + if (videoRef.current) videoRef.current.volume = 0 + } + const unMute = () => { + setIsMuted(false) + setVolume(mutedVolume) + if (videoRef.current) videoRef.current.volume = mutedVolume + } + + const toggleMute = () => { + isMuted ? unMute() : mute(); + } + + const changeVolume = (volumeChange: number) => { + if (videoRef.current) { + const minVolume = 0; + const maxVolume = 1; + + + let newVolume = volumeChange + volume + + newVolume = Math.max(newVolume, minVolume) + newVolume = Math.min(newVolume, maxVolume) + + setIsMuted(false) + setMutedVolume(newVolume) + videoRef.current.volume = newVolume + setVolume(newVolume); + } + + } + const setProgressRelative = (secondsChange: number) => { + if (videoRef.current) { + const currentTime = videoRef.current?.currentTime + const minTime = 0 + const maxTime = videoRef.current?.duration || 100 + + let newTime = currentTime + secondsChange; + newTime = Math.max(newTime, minTime) + newTime = Math.min(newTime, maxTime) + videoRef.current.currentTime = newTime; + setProgress(newTime); + } + } + + const setProgressAbsolute = (videoPercent: number) => { + if (videoRef.current) { + videoPercent = Math.min(videoPercent, 100) + videoPercent = Math.max(videoPercent, 0) + const finalTime = videoRef.current?.duration * videoPercent / 100 + videoRef.current.currentTime = finalTime + setProgress(finalTime); + } + } + + + const keyboardShortcutsDown = (e: React.KeyboardEvent) => { + e.preventDefault() + + switch (e.key) { + case Key.Add: increaseSpeed(false); break; + case '+': increaseSpeed(false); break; + case '>': increaseSpeed(false); break; + + case Key.Subtract: decreaseSpeed(); break; + case '-': decreaseSpeed(); break; + case '<': decreaseSpeed(); break; + + case Key.ArrowLeft: { + if (e.shiftKey) setProgressRelative(-300); + else if (e.ctrlKey) setProgressRelative(-60); + else if (e.altKey) setProgressRelative(-10); + else setProgressRelative(-5); + } break; + + case Key.ArrowRight: { + if (e.shiftKey) setProgressRelative(300); + else if (e.ctrlKey) setProgressRelative(60); + else if (e.altKey) setProgressRelative(10); + else setProgressRelative(5); + } break; + + case Key.ArrowDown: changeVolume(-0.05); break; + case Key.ArrowUp: changeVolume(0.05); break; + } + } + + const keyboardShortcutsUp = (e: React.KeyboardEvent) => { + e.preventDefault() + + switch (e.key) { + case ' ': togglePlay(); break; + case 'm': toggleMute(); break; + + case 'f': enterFullscreen(); break; + case Key.Escape: exitFullscreen(); break; + + case '0': setProgressAbsolute(0); break; + case '1': setProgressAbsolute(10); break; + case '2': setProgressAbsolute(20); break; + case '3': setProgressAbsolute(30); break; + case '4': setProgressAbsolute(40); break; + case '5': setProgressAbsolute(50); break; + case '6': setProgressAbsolute(60); break; + case '7': setProgressAbsolute(70); break; + case '8': setProgressAbsolute(80); break; + case '9': setProgressAbsolute(90); break; + } + } + + return ( + + + {isLoading && ( + + + {resourceStatus && ( + + {resourceStatus?.status === 'NOT_PUBLISHED' && ( + <>Video file was not published. Please inform the publisher! + )} + {resourceStatus?.status === 'REFETCHING' ? ( + <> + <> + {getDownloadProgress(resourceStatus?.localChunkCount, resourceStatus?.totalChunkCount)} + + + <> Refetching in 25 seconds + + ) : resourceStatus?.status === 'DOWNLOADED' ? ( + <>Download Completed: building video... + ) : resourceStatus?.status !== 'READY' ? ( + <> + {getDownloadProgress(resourceStatus?.localChunkCount, resourceStatus?.totalChunkCount)} + + + ) : ( + <>Fetching video... + )} + + )} + + )} + {((!src && !isLoading) || !startPlay) && ( + { + if (from === 'create') return + dispatch(setVideoPlaying(null)) + togglePlay() + }} + sx={{ + cursor: 'pointer' + }} + > + + + )} + + + + + {isMobileView && canPlay ? ( + <> + + {playing ? : } + + + + + + + + + + + + + + increaseSpeed()}> + + Speed: {playbackRate}x + + + + + + + + + + + ) : canPlay ? ( + <> + + {playing ? : } + + + + + + + {progress && videoRef.current?.duration && formatTime(progress)}/ + {progress && + videoRef.current?.duration && + formatTime(videoRef.current?.duration)} + + + {isMuted ? : } + + + increaseSpeed()} + > + Speed: {playbackRate}x + + + + + + + + + + ) : null} + + + ) +} diff --git a/src/components/common/VideoPlayerGlobal.tsx b/src/components/common/VideoPlayerGlobal.tsx index da14639..ad7824c 100644 --- a/src/components/common/VideoPlayerGlobal.tsx +++ b/src/components/common/VideoPlayerGlobal.tsx @@ -1,648 +1,648 @@ -import React, { useContext, useEffect, useMemo, useRef, useState } from 'react' -import ReactDOM from 'react-dom' -import { Box, IconButton, Slider, useTheme } from '@mui/material' -import { CircularProgress, Typography } from '@mui/material' -import { Key } from 'ts-key-enum' -import { - PlayArrow, - Pause, - VolumeUp, - Fullscreen, - PictureInPicture, VolumeOff -} from '@mui/icons-material' -import { styled } from '@mui/system' -import { MyContext } from '../../wrappers/DownloadWrapper' -import { useDispatch, useSelector } from 'react-redux' -import { RootState } from '../../state/store' -import { Refresh } from '@mui/icons-material' -import CloseIcon from '@mui/icons-material/Close'; - -import { Menu, MenuItem } from '@mui/material' -import { MoreVert as MoreIcon } from '@mui/icons-material' -import { setVideoPlaying } from '../../state/features/globalSlice' -const VideoContainer = styled(Box)` - position: relative; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - width: 100%; - height: 100%; - margin: 0px; - padding: 0px; -` - -const VideoElement = styled('video')` - width: 100%; - height: auto; - max-height: calc(100vh - 150px); - background: rgb(33, 33, 33); -` - -const ControlsContainer = styled(Box)` - position: absolute; - display: flex; - align-items: center; - justify-content: space-between; - bottom: 0; - left: 0; - right: 0; - padding: 8px; - background-color: rgba(0, 0, 0, 0.6); -` - -interface VideoPlayerProps { - src?: string - poster?: string - name?: string - identifier?: string - service?: string - autoplay?: boolean - from?: string | null - customStyle?: any - user?: string - jsonId?: string - element?: null | any - checkIfDrag?: ()=> boolean; -} - -export const VideoPlayerGlobal: React.FC = ({ - poster, - name, - identifier, - service, - autoplay = true, - from = null, - customStyle = {}, - user = '', - jsonId = '', - element, - checkIfDrag -}) => { - const theme = useTheme() - - const videoRef = useRef(null) - const [playing, setPlaying] = useState(false) - const [volume, setVolume] = useState(1) - const [mutedVolume, setMutedVolume] = useState(1) - const [isMuted, setIsMuted] = useState(false) - const [progress, setProgress] = useState(0) - const [isLoading, setIsLoading] = useState(false) - const [canPlay, setCanPlay] = useState(false) - const [startPlay, setStartPlay] = useState(false) - const [isMobileView, setIsMobileView] = useState(false) - const [playbackRate, setPlaybackRate] = useState(1) - const [anchorEl, setAnchorEl] = useState(null) - const dispatch = useDispatch() - const reDownload = useRef(false) - const { downloads } = useSelector((state: RootState) => state.global) - const download = useMemo(() => { - if (!downloads || !identifier) return {} - const findDownload = downloads[identifier] - - if (!findDownload) return {} - return findDownload - }, [downloads, identifier]) - - - const resourceStatus = useMemo(() => { - return download?.status || {} - }, [download]) - - const minSpeed = 0.25; - const maxSpeed = 4.0; - const speedChange = 0.25; - - const updatePlaybackRate = (newSpeed: number) => { - if (videoRef.current) { - if (newSpeed > maxSpeed || newSpeed < minSpeed) - newSpeed = minSpeed - videoRef.current.playbackRate = newSpeed - setPlaybackRate(newSpeed) - } - } - - const increaseSpeed = (wrapOverflow = true) => { - const changedSpeed = playbackRate + speedChange - let newSpeed = wrapOverflow ? changedSpeed : Math.min(changedSpeed, maxSpeed) - - - if (videoRef.current) { - updatePlaybackRate(newSpeed); - } - } - - const decreaseSpeed = () => { - if (videoRef.current) { - updatePlaybackRate(playbackRate - speedChange); - } - } - - - const toggleRef = useRef(null) - const { downloadVideo } = useContext(MyContext) - const togglePlay = async () => { - - if(checkIfDrag && checkIfDrag()) return - if (!videoRef.current) return - if (playing) { - videoRef.current.pause() - } else { - videoRef.current.play() - } - setPlaying((prev)=> !prev) - } - - const onVolumeChange = (_: any, value: number | number[]) => { - if (!videoRef.current) return - videoRef.current.volume = value as number - setVolume(value as number) - setIsMuted(false) - } - - const onProgressChange = (_: any, value: number | number[]) => { - if (!videoRef.current) return - videoRef.current.currentTime = value as number - setProgress(value as number) - if (!playing) { - videoRef.current.play() - setPlaying(true) - } - } - - const handleEnded = () => { - setPlaying(false) - } - - const updateProgress = () => { - if (!videoRef.current) return - setProgress(videoRef.current.currentTime) - } - - const [isFullscreen, setIsFullscreen] = useState(false) - - const enterFullscreen = () => { - if (!videoRef.current) return - if (videoRef.current.requestFullscreen) { - videoRef.current.requestFullscreen() - } - } - - const exitFullscreen = () => { - if (document.exitFullscreen) { - document.exitFullscreen() - } - } - - const toggleFullscreen = () => { - isFullscreen ? exitFullscreen() : enterFullscreen() - } - const togglePictureInPicture = async () => { - if (!videoRef.current) return - if (document.pictureInPictureElement === videoRef.current) { - await document.exitPictureInPicture() - } else { - await videoRef.current.requestPictureInPicture() - } - } - - useEffect(() => { - const handleFullscreenChange = () => { - setIsFullscreen(!!document.fullscreenElement) - } - - document.addEventListener('fullscreenchange', handleFullscreenChange) - return () => { - document.removeEventListener('fullscreenchange', handleFullscreenChange) - } - }, []) - - - const handleCanPlay = () => { - setIsLoading(false) - setCanPlay(true) - } - - - - useEffect(() => { - const videoElement = videoRef.current - - const handleLeavePictureInPicture = async (event: any) => { - const target = event?.target - if (target) { - target.pause() - if (setPlaying) { - setPlaying(false) - } - } - } - - if (videoElement) { - videoElement.addEventListener( - 'leavepictureinpicture', - handleLeavePictureInPicture - ) - } - - return () => { - if (videoElement) { - videoElement.removeEventListener( - 'leavepictureinpicture', - handleLeavePictureInPicture - ) - } - } - }, []) - - - - function formatTime(seconds: number): string { - seconds = Math.floor(seconds) - let minutes: number | string = Math.floor(seconds / 60) - let hours: number | string = Math.floor(minutes / 60) - - let remainingSeconds: number | string = seconds % 60 - let remainingMinutes: number | string = minutes % 60 - - if (remainingSeconds < 10) { - remainingSeconds = '0' + remainingSeconds - } - - if (remainingMinutes < 10) { - remainingMinutes = '0' + remainingMinutes - } - - if (hours === 0) { - hours = '' - } - else { - hours = hours + ':' - } - - return hours + remainingMinutes + ':' + remainingSeconds - } - - const reloadVideo = () => { - if (!videoRef.current) return - const src = videoRef.current.src - const currentTime = videoRef.current.currentTime - videoRef.current.src = src - videoRef.current.load() - videoRef.current.currentTime = currentTime - if (playing) { - videoRef.current.play() - } - } - - - const handleMenuOpen = (event: any) => { - setAnchorEl(event.currentTarget) - } - - - const handleMenuClose = () => { - setAnchorEl(null) - } - - useEffect(() => { - const videoWidth = videoRef?.current?.offsetWidth - if (videoWidth && videoWidth <= 600) { - setIsMobileView(true) - } - }, [canPlay]) - - const getDownloadProgress = (current: number, total: number) => { - const progress = current / total * 100; - return Number.isNaN(progress) ? '' : progress.toFixed(0) + '%' - } - const mute = () => { - setIsMuted(true) - setMutedVolume(volume) - setVolume(0) - if (videoRef.current) videoRef.current.volume = 0 - } - const unMute = () => { - setIsMuted(false) - setVolume(mutedVolume) - if (videoRef.current) videoRef.current.volume = mutedVolume - } - - const toggleMute = () => { - isMuted ? unMute() : mute(); - } - - const changeVolume = (volumeChange: number) => { - if (videoRef.current) { - const minVolume = 0; - const maxVolume = 1; - - - let newVolume = volumeChange + volume - - newVolume = Math.max(newVolume, minVolume) - newVolume = Math.min(newVolume, maxVolume) - - setIsMuted(false) - setMutedVolume(newVolume) - videoRef.current.volume = newVolume - setVolume(newVolume); - } - - } - const setProgressRelative = (secondsChange: number) => { - if (videoRef.current) { - const currentTime = videoRef.current?.currentTime - const minTime = 0 - const maxTime = videoRef.current?.duration || 100 - - let newTime = currentTime + secondsChange; - newTime = Math.max(newTime, minTime) - newTime = Math.min(newTime, maxTime) - videoRef.current.currentTime = newTime; - setProgress(newTime); - } - } - - const setProgressAbsolute = (videoPercent: number) => { - if (videoRef.current) { - videoPercent = Math.min(videoPercent, 100) - videoPercent = Math.max(videoPercent, 0) - const finalTime = videoRef.current?.duration * videoPercent / 100 - videoRef.current.currentTime = finalTime - setProgress(finalTime); - } - } - - - const keyboardShortcutsDown = (e: React.KeyboardEvent) => { - e.preventDefault() - - switch (e.key) { - case Key.Add: increaseSpeed(false); break; - case '+': increaseSpeed(false); break; - case '>': increaseSpeed(false); break; - - case Key.Subtract: decreaseSpeed(); break; - case '-': decreaseSpeed(); break; - case '<': decreaseSpeed(); break; - - case Key.ArrowLeft: { - if (e.shiftKey) setProgressRelative(-300); - else if (e.ctrlKey) setProgressRelative(-60); - else if (e.altKey) setProgressRelative(-10); - else setProgressRelative(-5); - } break; - - case Key.ArrowRight: { - if (e.shiftKey) setProgressRelative(300); - else if (e.ctrlKey) setProgressRelative(60); - else if (e.altKey) setProgressRelative(10); - else setProgressRelative(5); - } break; - - case Key.ArrowDown: changeVolume(-0.05); break; - case Key.ArrowUp: changeVolume(0.05); break; - } - } - - const keyboardShortcutsUp = (e: React.KeyboardEvent) => { - e.preventDefault() - - switch (e.key) { - case ' ': togglePlay(); break; - case 'm': toggleMute(); break; - - case 'f': enterFullscreen(); break; - case Key.Escape: exitFullscreen(); break; - - case '0': setProgressAbsolute(0); break; - case '1': setProgressAbsolute(10); break; - case '2': setProgressAbsolute(20); break; - case '3': setProgressAbsolute(30); break; - case '4': setProgressAbsolute(40); break; - case '5': setProgressAbsolute(50); break; - case '6': setProgressAbsolute(60); break; - case '7': setProgressAbsolute(70); break; - case '8': setProgressAbsolute(80); break; - case '9': setProgressAbsolute(90); break; - } - } - - useEffect(()=> { - if(element){ - let oldElement = document.getElementById('videoPlayer'); - if(oldElement && oldElement?.parentNode){ - oldElement?.parentNode.replaceChild(element, oldElement); - videoRef.current = element - setPlaying(true) - setCanPlay(true) - setStartPlay(true) - videoRef?.current?.addEventListener('click', ()=> {}) - videoRef?.current?.addEventListener('timeupdate', updateProgress) - videoRef?.current?.addEventListener('ended', handleEnded) - - } - - } -}, [element]) - - return ( - -
- - { - dispatch(setVideoPlaying(null)) - }} sx={{ - cursor: 'pointer', - backgroundColor: 'rgba(0,0,0,.5)' - }}> -
-
- -
- - {isMobileView && canPlay ? ( - <> - - {playing ? : } - - - - - - - - - - - - - - increaseSpeed()}> - - Speed: {playbackRate}x - - - - - - - - - - - ) : canPlay ? ( - <> - - {playing ? : } - - - - - - - {progress && videoRef.current?.duration && formatTime(progress)}/ - {progress && - videoRef.current?.duration && - formatTime(videoRef.current?.duration)} - - - {isMuted ? : } - - - increaseSpeed()} - > - Speed: {playbackRate}x - - - - - - - - - - ) : null} - -
- ) -} +import React, { useContext, useEffect, useMemo, useRef, useState } from 'react' +import ReactDOM from 'react-dom' +import { Box, IconButton, Slider, useTheme } from '@mui/material' +import { CircularProgress, Typography } from '@mui/material' +import { Key } from 'ts-key-enum' +import { + PlayArrow, + Pause, + VolumeUp, + Fullscreen, + PictureInPicture, VolumeOff +} from '@mui/icons-material' +import { styled } from '@mui/system' +import { MyContext } from '../../wrappers/DownloadWrapper' +import { useDispatch, useSelector } from 'react-redux' +import { RootState } from '../../state/store' +import { Refresh } from '@mui/icons-material' +import CloseIcon from '@mui/icons-material/Close'; + +import { Menu, MenuItem } from '@mui/material' +import { MoreVert as MoreIcon } from '@mui/icons-material' +import { setVideoPlaying } from '../../state/features/globalSlice' +const VideoContainer = styled(Box)` + position: relative; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; + margin: 0px; + padding: 0px; +` + +const VideoElement = styled('video')` + width: 100%; + height: auto; + max-height: calc(100vh - 150px); + background: rgb(33, 33, 33); +` + +const ControlsContainer = styled(Box)` + position: absolute; + display: flex; + align-items: center; + justify-content: space-between; + bottom: 0; + left: 0; + right: 0; + padding: 8px; + background-color: rgba(0, 0, 0, 0.6); +` + +interface VideoPlayerProps { + src?: string + poster?: string + name?: string + identifier?: string + service?: string + autoplay?: boolean + from?: string | null + customStyle?: any + user?: string + jsonId?: string + element?: null | any + checkIfDrag?: ()=> boolean; +} + +export const VideoPlayerGlobal: React.FC = ({ + poster, + name, + identifier, + service, + autoplay = true, + from = null, + customStyle = {}, + user = '', + jsonId = '', + element, + checkIfDrag +}) => { + const theme = useTheme() + + const videoRef = useRef(null) + const [playing, setPlaying] = useState(false) + const [volume, setVolume] = useState(1) + const [mutedVolume, setMutedVolume] = useState(1) + const [isMuted, setIsMuted] = useState(false) + const [progress, setProgress] = useState(0) + const [isLoading, setIsLoading] = useState(false) + const [canPlay, setCanPlay] = useState(false) + const [startPlay, setStartPlay] = useState(false) + const [isMobileView, setIsMobileView] = useState(false) + const [playbackRate, setPlaybackRate] = useState(1) + const [anchorEl, setAnchorEl] = useState(null) + const dispatch = useDispatch() + const reDownload = useRef(false) + const { downloads } = useSelector((state: RootState) => state.global) + const download = useMemo(() => { + if (!downloads || !identifier) return {} + const findDownload = downloads[identifier] + + if (!findDownload) return {} + return findDownload + }, [downloads, identifier]) + + + const resourceStatus = useMemo(() => { + return download?.status || {} + }, [download]) + + const minSpeed = 0.25; + const maxSpeed = 4.0; + const speedChange = 0.25; + + const updatePlaybackRate = (newSpeed: number) => { + if (videoRef.current) { + if (newSpeed > maxSpeed || newSpeed < minSpeed) + newSpeed = minSpeed + videoRef.current.playbackRate = newSpeed + setPlaybackRate(newSpeed) + } + } + + const increaseSpeed = (wrapOverflow = true) => { + const changedSpeed = playbackRate + speedChange + let newSpeed = wrapOverflow ? changedSpeed : Math.min(changedSpeed, maxSpeed) + + + if (videoRef.current) { + updatePlaybackRate(newSpeed); + } + } + + const decreaseSpeed = () => { + if (videoRef.current) { + updatePlaybackRate(playbackRate - speedChange); + } + } + + + const toggleRef = useRef(null) + const { downloadVideo } = useContext(MyContext) + const togglePlay = async () => { + + if(checkIfDrag && checkIfDrag()) return + if (!videoRef.current) return + if (playing) { + videoRef.current.pause() + } else { + videoRef.current.play() + } + setPlaying((prev)=> !prev) + } + + const onVolumeChange = (_: any, value: number | number[]) => { + if (!videoRef.current) return + videoRef.current.volume = value as number + setVolume(value as number) + setIsMuted(false) + } + + const onProgressChange = (_: any, value: number | number[]) => { + if (!videoRef.current) return + videoRef.current.currentTime = value as number + setProgress(value as number) + if (!playing) { + videoRef.current.play() + setPlaying(true) + } + } + + const handleEnded = () => { + setPlaying(false) + } + + const updateProgress = () => { + if (!videoRef.current) return + setProgress(videoRef.current.currentTime) + } + + const [isFullscreen, setIsFullscreen] = useState(false) + + const enterFullscreen = () => { + if (!videoRef.current) return + if (videoRef.current.requestFullscreen) { + videoRef.current.requestFullscreen() + } + } + + const exitFullscreen = () => { + if (document.exitFullscreen) { + document.exitFullscreen() + } + } + + const toggleFullscreen = () => { + isFullscreen ? exitFullscreen() : enterFullscreen() + } + const togglePictureInPicture = async () => { + if (!videoRef.current) return + if (document.pictureInPictureElement === videoRef.current) { + await document.exitPictureInPicture() + } else { + await videoRef.current.requestPictureInPicture() + } + } + + useEffect(() => { + const handleFullscreenChange = () => { + setIsFullscreen(!!document.fullscreenElement) + } + + document.addEventListener('fullscreenchange', handleFullscreenChange) + return () => { + document.removeEventListener('fullscreenchange', handleFullscreenChange) + } + }, []) + + + const handleCanPlay = () => { + setIsLoading(false) + setCanPlay(true) + } + + + + useEffect(() => { + const videoElement = videoRef.current + + const handleLeavePictureInPicture = async (event: any) => { + const target = event?.target + if (target) { + target.pause() + if (setPlaying) { + setPlaying(false) + } + } + } + + if (videoElement) { + videoElement.addEventListener( + 'leavepictureinpicture', + handleLeavePictureInPicture + ) + } + + return () => { + if (videoElement) { + videoElement.removeEventListener( + 'leavepictureinpicture', + handleLeavePictureInPicture + ) + } + } + }, []) + + + + function formatTime(seconds: number): string { + seconds = Math.floor(seconds) + let minutes: number | string = Math.floor(seconds / 60) + let hours: number | string = Math.floor(minutes / 60) + + let remainingSeconds: number | string = seconds % 60 + let remainingMinutes: number | string = minutes % 60 + + if (remainingSeconds < 10) { + remainingSeconds = '0' + remainingSeconds + } + + if (remainingMinutes < 10) { + remainingMinutes = '0' + remainingMinutes + } + + if (hours === 0) { + hours = '' + } + else { + hours = hours + ':' + } + + return hours + remainingMinutes + ':' + remainingSeconds + } + + const reloadVideo = () => { + if (!videoRef.current) return + const src = videoRef.current.src + const currentTime = videoRef.current.currentTime + videoRef.current.src = src + videoRef.current.load() + videoRef.current.currentTime = currentTime + if (playing) { + videoRef.current.play() + } + } + + + const handleMenuOpen = (event: any) => { + setAnchorEl(event.currentTarget) + } + + + const handleMenuClose = () => { + setAnchorEl(null) + } + + useEffect(() => { + const videoWidth = videoRef?.current?.offsetWidth + if (videoWidth && videoWidth <= 600) { + setIsMobileView(true) + } + }, [canPlay]) + + const getDownloadProgress = (current: number, total: number) => { + const progress = current / total * 100; + return Number.isNaN(progress) ? '' : progress.toFixed(0) + '%' + } + const mute = () => { + setIsMuted(true) + setMutedVolume(volume) + setVolume(0) + if (videoRef.current) videoRef.current.volume = 0 + } + const unMute = () => { + setIsMuted(false) + setVolume(mutedVolume) + if (videoRef.current) videoRef.current.volume = mutedVolume + } + + const toggleMute = () => { + isMuted ? unMute() : mute(); + } + + const changeVolume = (volumeChange: number) => { + if (videoRef.current) { + const minVolume = 0; + const maxVolume = 1; + + + let newVolume = volumeChange + volume + + newVolume = Math.max(newVolume, minVolume) + newVolume = Math.min(newVolume, maxVolume) + + setIsMuted(false) + setMutedVolume(newVolume) + videoRef.current.volume = newVolume + setVolume(newVolume); + } + + } + const setProgressRelative = (secondsChange: number) => { + if (videoRef.current) { + const currentTime = videoRef.current?.currentTime + const minTime = 0 + const maxTime = videoRef.current?.duration || 100 + + let newTime = currentTime + secondsChange; + newTime = Math.max(newTime, minTime) + newTime = Math.min(newTime, maxTime) + videoRef.current.currentTime = newTime; + setProgress(newTime); + } + } + + const setProgressAbsolute = (videoPercent: number) => { + if (videoRef.current) { + videoPercent = Math.min(videoPercent, 100) + videoPercent = Math.max(videoPercent, 0) + const finalTime = videoRef.current?.duration * videoPercent / 100 + videoRef.current.currentTime = finalTime + setProgress(finalTime); + } + } + + + const keyboardShortcutsDown = (e: React.KeyboardEvent) => { + e.preventDefault() + + switch (e.key) { + case Key.Add: increaseSpeed(false); break; + case '+': increaseSpeed(false); break; + case '>': increaseSpeed(false); break; + + case Key.Subtract: decreaseSpeed(); break; + case '-': decreaseSpeed(); break; + case '<': decreaseSpeed(); break; + + case Key.ArrowLeft: { + if (e.shiftKey) setProgressRelative(-300); + else if (e.ctrlKey) setProgressRelative(-60); + else if (e.altKey) setProgressRelative(-10); + else setProgressRelative(-5); + } break; + + case Key.ArrowRight: { + if (e.shiftKey) setProgressRelative(300); + else if (e.ctrlKey) setProgressRelative(60); + else if (e.altKey) setProgressRelative(10); + else setProgressRelative(5); + } break; + + case Key.ArrowDown: changeVolume(-0.05); break; + case Key.ArrowUp: changeVolume(0.05); break; + } + } + + const keyboardShortcutsUp = (e: React.KeyboardEvent) => { + e.preventDefault() + + switch (e.key) { + case ' ': togglePlay(); break; + case 'm': toggleMute(); break; + + case 'f': enterFullscreen(); break; + case Key.Escape: exitFullscreen(); break; + + case '0': setProgressAbsolute(0); break; + case '1': setProgressAbsolute(10); break; + case '2': setProgressAbsolute(20); break; + case '3': setProgressAbsolute(30); break; + case '4': setProgressAbsolute(40); break; + case '5': setProgressAbsolute(50); break; + case '6': setProgressAbsolute(60); break; + case '7': setProgressAbsolute(70); break; + case '8': setProgressAbsolute(80); break; + case '9': setProgressAbsolute(90); break; + } + } + + useEffect(()=> { + if(element){ + let oldElement = document.getElementById('videoPlayer'); + if(oldElement && oldElement?.parentNode){ + oldElement?.parentNode.replaceChild(element, oldElement); + videoRef.current = element + setPlaying(true) + setCanPlay(true) + setStartPlay(true) + videoRef?.current?.addEventListener('click', ()=> {}) + videoRef?.current?.addEventListener('timeupdate', updateProgress) + videoRef?.current?.addEventListener('ended', handleEnded) + + } + + } +}, [element]) + + return ( + +
+ + { + dispatch(setVideoPlaying(null)) + }} sx={{ + cursor: 'pointer', + backgroundColor: 'rgba(0,0,0,.5)' + }}> +
+
+ +
+ + {isMobileView && canPlay ? ( + <> + + {playing ? : } + + + + + + + + + + + + + + increaseSpeed()}> + + Speed: {playbackRate}x + + + + + + + + + + + ) : canPlay ? ( + <> + + {playing ? : } + + + + + + + {progress && videoRef.current?.duration && formatTime(progress)}/ + {progress && + videoRef.current?.duration && + formatTime(videoRef.current?.duration)} + + + {isMuted ? : } + + + increaseSpeed()} + > + Speed: {playbackRate}x + + + + + + + + + + ) : null} + +
+ ) +} diff --git a/src/components/layout/Navbar/Navbar.tsx b/src/components/layout/Navbar/Navbar.tsx index 94b64ec..c453316 100644 --- a/src/components/layout/Navbar/Navbar.tsx +++ b/src/components/layout/Navbar/Navbar.tsx @@ -22,7 +22,7 @@ import { useNavigate } from "react-router-dom"; import SearchIcon from "@mui/icons-material/Search"; import { DownloadTaskManager } from "../../common/DownloadTaskManager"; -import QSupportLogo from "../../../assets/img/Q-SupportIcon.webp"; +import QSupportIcon from "../../../assets/img/Q-SupportIcon(AlphaX).webp"; import { useDispatch, useSelector } from "react-redux"; import { addFilteredFiles, @@ -32,6 +32,7 @@ import { import { RootState } from "../../../state/store"; import { useWindowSize } from "../../../hooks/useWindowSize"; import { PublishIssue } from "../../PublishIssue/PublishIssue.tsx"; +import { FeeHistoryModal } from "../../../constants/PublishFees/FeePricePublish/FeeHistoryModal.tsx"; interface Props { isAuthenticated: boolean; @@ -114,7 +115,7 @@ const NavBar: React.FC = ({ }} > = ({ + {theme.palette.mode === "dark" ? ( setTheme("light")} diff --git a/src/constants/Categories/1stCategories.ts b/src/constants/Categories/1stCategories.ts deleted file mode 100644 index a074e55..0000000 --- a/src/constants/Categories/1stCategories.ts +++ /dev/null @@ -1,48 +0,0 @@ -import audioIcon from "../../assets/icons/audio.webp"; -import bookIcon from "../../assets/icons/book.webp"; -import documentIcon from "../../assets/icons/document.webp"; -import gamingIcon from "../../assets/icons/gaming.webp"; -import imageIcon from "../../assets/icons/image.webp"; -import softwareIcon from "../../assets/icons/software.webp"; -import unknownIcon from "../../assets/icons/unknown.webp"; -import videoIcon from "../../assets/icons/video.webp"; - -import { - Categories, - Category, - CategoryData, -} from "../../components/common/CategoryList/CategoryList.tsx"; -import { - getAllCategoriesWithIcons, - sortCategory, -} from "./CategoryFunctions.ts"; -import { QappCategories, SupportState } from "./2ndCategories.ts"; - -export const firstCategories: Category[] = [ - { id: 1, name: "Core" }, - { id: 2, name: "UI" }, - { id: 3, name: "Q-Apps" }, - { id: 4, name: "Website" }, - { id: 5, name: "Marketing" }, - { id: 99, name: "Other" }, -]; -export const secondCategories: Categories = { - 1: SupportState, - 2: SupportState, - 3: QappCategories, - 4: SupportState, - 5: SupportState, - 99: SupportState, -}; - -export let thirdCategories: Categories = {}; -QappCategories.map( - supportStateCategory => - (thirdCategories[supportStateCategory.id] = SupportState) -); -export const allCategoryData: CategoryData = { - category: firstCategories, - subCategories: [secondCategories, thirdCategories], -}; - -export const iconCategories = getAllCategoriesWithIcons(); diff --git a/src/constants/Categories/2ndCategories.ts b/src/constants/Categories/2ndCategories.ts deleted file mode 100644 index ead50e9..0000000 --- a/src/constants/Categories/2ndCategories.ts +++ /dev/null @@ -1,23 +0,0 @@ -import OpenIcon from "../../assets/icons/OpenIcon.png"; -import ClosedIcon from "../../assets/icons/ClosedIcon.png"; -import InProgressIcon from "../../assets/icons/InProgressIcon.png"; -import CompleteIcon from "../../assets/icons/CompleteIcon.png"; - -export const SupportState = [ - { id: 101, name: "Open", icon: OpenIcon }, - { id: 102, name: "Closed", icon: ClosedIcon }, - { id: 103, name: "In Progress", icon: InProgressIcon }, - { id: 104, name: "Complete", icon: CompleteIcon }, -]; - -export const QappCategories = [ - { id: 301, name: "Q-Blog" }, - { id: 302, name: "Q-Mail" }, - { id: 303, name: "Q-Shop" }, - { id: 304, name: "Q-Fund" }, - { id: 305, name: "Ear-Bump" }, - { id: 306, name: "Q-Tube" }, - { id: 307, name: "Q-Share" }, - { id: 308, name: "Q-Support" }, - { id: 399, name: "Other" }, -]; diff --git a/src/constants/Categories/3rdCategories.ts b/src/constants/Categories/3rdCategories.ts deleted file mode 100644 index e69de29..0000000 diff --git a/src/constants/Categories/Categories.ts b/src/constants/Categories/Categories.ts new file mode 100644 index 0000000..58132b1 --- /dev/null +++ b/src/constants/Categories/Categories.ts @@ -0,0 +1,67 @@ +import { + Categories, + Category, + CategoryData, +} from "../../components/common/CategoryList/CategoryList.tsx"; +import { getAllCategoriesWithIcons } from "./CategoryFunctions.ts"; +import CoreIcon from "../../assets/icons/Qortal-Core-Icon.webp"; +import UIicon from "../../assets/icons/Qortal-UI-Icon.webp"; +import QappIcon from "../../assets/icons/Q-App-Icon.webp"; +import UnknownIcon from "../../assets/icons/unknown.webp"; + +import BugReportIcon from "../../assets/icons/Bug-Report-Icon.webp"; +import FeatureRequestIcon from "../../assets/icons/Feature-Request-Icon.webp"; +import TechSupportIcon from "../../assets/icons/Tech-Support-Icon.webp"; + +import OpenIcon from "../../assets/icons/Open-Icon.webp"; +import ClosedIcon from "../../assets/icons/Closed-Icon.webp"; +import InProgressIcon from "../../assets/icons/In-Progress-Icon.webp"; +import CompleteIcon from "../../assets/icons/Complete-Icon.webp"; + +const issueLocationLabel = "Issue Location"; +export const issueLocation: Category[] = [ + { id: 1, name: "Core", icon: CoreIcon, label: issueLocationLabel }, + { id: 2, name: "UI", icon: UIicon, label: issueLocationLabel }, + { id: 3, name: "Q-Apps/Websites", icon: QappIcon, label: issueLocationLabel }, + { id: 99, name: "Other", icon: UnknownIcon, label: issueLocationLabel }, +]; + +const issueTypeLabel = "Issue Type"; +export const issueType = [ + { id: 11, name: "Bug Report", icon: BugReportIcon, label: issueTypeLabel }, + { + id: 12, + name: "Feature Request", + icon: FeatureRequestIcon, + label: issueTypeLabel, + }, + { + id: 13, + name: "Tech Support", + icon: TechSupportIcon, + label: issueTypeLabel, + }, + { id: 19, name: "Other", icon: UnknownIcon, label: issueTypeLabel }, +]; + +export const secondCategories: Categories = {}; +issueLocation.map(c => (secondCategories[c.id] = issueType)); + +const issueLabel = "Issue State"; +export const IssueState = [ + { id: 101, name: "Open", icon: OpenIcon, label: issueLabel }, + { id: 102, name: "Closed", icon: ClosedIcon, label: issueLabel }, + { id: 103, name: "In Progress", icon: InProgressIcon, label: issueLabel }, + { id: 104, name: "Complete", icon: CompleteIcon, label: issueLabel }, +]; + +export const thirdCategories: Categories = {}; + +issueType.map(issueType => (thirdCategories[issueType.id] = IssueState)); + +export const allCategoryData: CategoryData = { + category: issueLocation, + subCategories: [secondCategories, thirdCategories], +}; + +export const iconCategories = getAllCategoriesWithIcons(); diff --git a/src/constants/Categories/CategoryFunctions.ts b/src/constants/Categories/CategoryFunctions.ts index 3c228b7..793cda9 100644 --- a/src/constants/Categories/CategoryFunctions.ts +++ b/src/constants/Categories/CategoryFunctions.ts @@ -2,7 +2,7 @@ import { Category, getCategoriesFromObject, } from "../../components/common/CategoryList/CategoryList.tsx"; -import { allCategoryData, iconCategories } from "./1stCategories.ts"; +import { allCategoryData, iconCategories } from "./Categories.ts"; export const sortCategory = (a: Category, b: Category) => { if (a.name === "Other") return 1; @@ -81,11 +81,9 @@ export const getAllCategoriesWithIcons = () => { export const getIconsFromObject = (fileObj: any) => { const categories = getCategoriesFromObject(fileObj); - const icons = categories - .map(categoryID => { - return iconCategories.find(category => category.id === +categoryID)?.icon; - }) - .reverse(); + const icons = categories.map(categoryID => { + return iconCategories.find(category => category.id === +categoryID)?.icon; + }); - return icons.find(icon => icon !== undefined); + return icons.filter(icon => icon !== undefined); }; diff --git a/src/constants/Identifiers.ts b/src/constants/Identifiers.ts index 1201657..e4696cf 100644 --- a/src/constants/Identifiers.ts +++ b/src/constants/Identifiers.ts @@ -1,4 +1,4 @@ -const useTestIdentifiers = true; +export const useTestIdentifiers = false; export const QSUPPORT_FILE_BASE = useTestIdentifiers ? "MYTEST_support_issue_" diff --git a/src/constants/Misc.ts b/src/constants/Misc.ts index 7de896c..b031d67 100644 --- a/src/constants/Misc.ts +++ b/src/constants/Misc.ts @@ -3,3 +3,10 @@ export const titleFormatter = /[^a-zA-Z0-9\s-_!?()&'",.;:|—~@#$%^*+=<>]/g; export const titleFormatterOnSave = /[^a-zA-Z0-9\s-_!()&',.;—~@#$%^+=]/g; export const log = false; + +export const fontSizeSmall = "80%"; +export const fontSizeMedium = "100%"; +export const fontSizeLarge = "120%"; +export const fontSizeExLarge = "150%"; +export const maxCommentLength = 10_000; +export const maxNotificationLength = 2000; diff --git a/src/constants/PublishFees/FeeData.tsx b/src/constants/PublishFees/FeeData.tsx new file mode 100644 index 0000000..d2f60f6 --- /dev/null +++ b/src/constants/PublishFees/FeeData.tsx @@ -0,0 +1,29 @@ +import { Box } from "@mui/material"; +import React from "react"; +import { useTestIdentifiers } from "../Identifiers.ts"; + +export const appName = "Q-Support"; +export const feeDestinationName = "Q-Support"; + +export const feeAmountBase = useTestIdentifiers ? 0.000001 : 0.25; +export const FEE_BASE = useTestIdentifiers + ? "MYTEST_support_fees" + : "q_support_fees"; + +export const maxFeePublishTimeDiff = 10; // time in minutes before/after publish when fee is considered valid +export type FeeType = "default" | "comment" | "like" | "dislike" | "superlike"; + +export const feeDisclaimerString = `When Publishing (but not editing) Issues ${feeAmountBase} \n +QORT is requested to fund continued development of Q-Support.`; + +export const feeDisclaimer = ( + + {feeDisclaimerString} + +); diff --git a/src/constants/PublishFees/FeePricePublish/DataTable.tsx b/src/constants/PublishFees/FeePricePublish/DataTable.tsx new file mode 100644 index 0000000..0cdc0d6 --- /dev/null +++ b/src/constants/PublishFees/FeePricePublish/DataTable.tsx @@ -0,0 +1,60 @@ +import { + Table, + TableBody, + TableCell, + TableContainer, + TableHead, + TableRow, +} from "@mui/material"; +import React from "react"; +import { SxProps } from "@mui/material/styles"; + +export interface DataTableProps { + columnNames: string[]; + data: string[][]; + sx?: SxProps; +} +export const DataTable = ({ columnNames, data, sx }: DataTableProps) => { + return ( + + + + + {columnNames.map((columnName, index) => ( + + {columnName} + + ))} + + + + {data.map((tableRow, index) => { + return ( + + {tableRow.map((tableCell, index) => ( + + {tableCell} + + ))} + + ); + })} + +
+
+ ); +}; diff --git a/src/constants/PublishFees/FeePricePublish/FeeHistoryModal.tsx b/src/constants/PublishFees/FeePricePublish/FeeHistoryModal.tsx new file mode 100644 index 0000000..ecc1e6e --- /dev/null +++ b/src/constants/PublishFees/FeePricePublish/FeeHistoryModal.tsx @@ -0,0 +1,48 @@ +import { Button, Modal, useTheme } from "@mui/material"; +import { ThemeButton } from "../../../pages/Home/Home-styles.tsx"; +import { appName } from "../FeeData.tsx"; +import { ModalBody } from "./FeePricePublish-styles.tsx"; +import { useEffect, useState } from "react"; +import { userHasName } from "../VerifyPayment-Functions.ts"; +import { FeeHistoryTable } from "./FeeHistoryTable.tsx"; + +export const FeeHistoryModal = () => { + const [open, setOpen] = useState(false); + const [userOwnsApp, setUserOwnsApp] = useState(false); + const theme = useTheme(); + useEffect(() => { + userHasName(appName).then(userHasName => setUserOwnsApp(userHasName)); + }, []); + + const buttonSX = { + fontSize: "20px", + color: theme.palette.secondary.main, + fontWeight: "bold", + }; + if (theme.palette.mode === "light") + buttonSX["&:hover"] = { backgroundColor: theme.palette.primary.dark }; + + return ( + <> + setOpen(true)} + > + {appName} Fees + + setOpen(false)} + > + + + + + + + ); +}; diff --git a/src/constants/PublishFees/FeePricePublish/FeeHistoryTable.tsx b/src/constants/PublishFees/FeePricePublish/FeeHistoryTable.tsx new file mode 100644 index 0000000..0bf1298 --- /dev/null +++ b/src/constants/PublishFees/FeePricePublish/FeeHistoryTable.tsx @@ -0,0 +1,49 @@ +import { DataTable } from "./DataTable.tsx"; +import { FeePrice, fetchFees } from "./FeePricePublish.ts"; +import React, { useEffect, useState } from "react"; + +export interface FeeHistoryProps { + showFeeType?: boolean; + showCoinType?: boolean; + filterData?: () => string[][]; +} +export const FeeHistoryTable = ({ + showFeeType = true, + showCoinType = true, + filterData, +}: FeeHistoryProps) => { + const [feeData, setFeeData] = useState([]); + + const fetchFeesOnStartup = () => { + fetchFees().then(feeResponse => { + setFeeData(filterData ? feeData.filter(filterData) : feeResponse); + }); + }; + + useEffect(fetchFeesOnStartup, []); + + const columnNames = ["ID", "Date", "Fee Amount"]; + if (showFeeType) columnNames.push("Fee Type"); + if (showCoinType) columnNames.push("Coin Type"); + + const data: string[][] = []; + + const getRowData = (row: FeePrice, index: number) => { + const rowData: string[] = []; + rowData.push( + index.toString(), + new Date(row.time).toDateString(), + row.feeAmount.toString() + ); + + if (showFeeType) rowData.push(row.feeType); + if (showCoinType) rowData.push(row.coinType); + + return rowData; + }; + + feeData.map((row, index) => { + data.push(getRowData(row, index + 1)); + }); + return ; +}; diff --git a/src/constants/PublishFees/FeePricePublish/FeePricePublish-styles.tsx b/src/constants/PublishFees/FeePricePublish/FeePricePublish-styles.tsx new file mode 100644 index 0000000..7eb13a3 --- /dev/null +++ b/src/constants/PublishFees/FeePricePublish/FeePricePublish-styles.tsx @@ -0,0 +1,43 @@ +import { Box } from "@mui/material"; +import { styled } from "@mui/system"; + +export const ModalBody = styled(Box)(({ theme }) => ({ + position: "absolute", + backgroundColor: theme.palette.background.default, + borderRadius: "4px", + top: "50%", + left: "50%", + transform: "translate(-50%, -50%)", + width: "75%", + maxWidth: "900px", + padding: "15px 35px", + display: "flex", + flexDirection: "column", + gap: "17px", + overflowY: "auto", + maxHeight: "95vh", + boxShadow: + theme.palette.mode === "dark" + ? "0px 4px 5px 0px hsla(0,0%,0%,0.14), 0px 1px 10px 0px hsla(0,0%,0%,0.12), 0px 2px 4px -1px hsla(0,0%,0%,0.2)" + : "rgba(99, 99, 99, 0.2) 0px 2px 8px 0px", + "&::-webkit-scrollbar-track": { + backgroundColor: theme.palette.background.paper, + }, + "&::-webkit-scrollbar-track:hover": { + backgroundColor: theme.palette.background.paper, + }, + "&::-webkit-scrollbar": { + width: "16px", + height: "10px", + backgroundColor: theme.palette.mode === "light" ? "#f6f8fa" : "#292d3e", + }, + "&::-webkit-scrollbar-thumb": { + backgroundColor: theme.palette.mode === "light" ? "#d3d9e1" : "#575757", + borderRadius: "8px", + backgroundClip: "content-box", + border: "4px solid transparent", + }, + "&::-webkit-scrollbar-thumb:hover": { + backgroundColor: theme.palette.mode === "light" ? "#b7bcc4" : "#474646", + }, +})); diff --git a/src/constants/PublishFees/FeePricePublish/FeePricePublish.ts b/src/constants/PublishFees/FeePricePublish/FeePricePublish.ts new file mode 100644 index 0000000..a8b530f --- /dev/null +++ b/src/constants/PublishFees/FeePricePublish/FeePricePublish.ts @@ -0,0 +1,90 @@ +import { appName, FEE_BASE, feeAmountBase, FeeType } from "../FeeData.tsx"; +import { objectToBase64 } from "../../../utils/toBase64.ts"; +import { store } from "../../../state/store.ts"; +import { setFeeData } from "../../../state/features/globalSlice.ts"; +import { useTestIdentifiers } from "../../Identifiers.ts"; + +export type CoinType = "QORT" | "BTC" | "LTC" | "DOGE" | "DGB" | "RVN" | "ARRR"; + +export interface FeePrice { + time: number; + feeAmount: number; + feeType: FeeType; // used to differentiate different types of fees such as comments, likes, data, etc. + coinType: CoinType; +} + +const feesPublishService = "DOCUMENT"; + +export const fetchFees = async () => { + const feeData = store.getState().global.feeData; + if (feeData.length > 0) { + return feeData; + } + + try { + const response = await qortalRequest({ + action: "FETCH_QDN_RESOURCE", + identifier: FEE_BASE, + name: "Q-Support", + service: feesPublishService, + }); + + return (await response) as FeePrice[]; + } catch (e) { + console.log("fetch current fees error: ", e); + return [] as FeePrice[]; + } +}; + +export const fetchFeesRedux = () => { + const feeData = store.getState().global.feeData; + if (feeData.length > 0) { + return feeData; + } + + fetchFees().then(feeData => store.dispatch(setFeeData(feeData))); +}; + +export const addFeePrice = async ( + feeAmount = feeAmountBase, + feeType: FeeType = "default", + coinType: CoinType = "QORT" +) => { + let fees = await fetchFees(); + + fees.push({ + time: Date.now(), + feeAmount, + feeType, + coinType, + }); + + const feesBase64 = await objectToBase64(fees); + console.log("fees are: ", fees); + await qortalRequest({ + action: "PUBLISH_QDN_RESOURCE", + name: appName, + identifier: FEE_BASE, + service: feesPublishService, + data64: feesBase64, + }); +}; + +const feeFilter = (fee: FeePrice, feeToVerify: FeePrice) => { + const nameCheck = fee.feeType === feeToVerify.feeType; + const coinTypeCheck = fee.coinType === feeToVerify.coinType; + const timeCheck = feeToVerify.time <= feeToVerify.time; + + return nameCheck && coinTypeCheck && timeCheck; +}; + +export const verifyFeeAmount = async (feeToVerify: FeePrice) => { + if (useTestIdentifiers) return true; + + const fees = await fetchFees(); + const filteredFees = fees.filter(fee => feeFilter(fee, feeToVerify)); + if (filteredFees.length === 0) return false; + + const feeToCheck = filteredFees[filteredFees.length - 1]; // gets fee that applies at the time of feeToVerify + return feeToVerify.feeAmount >= feeToCheck.feeAmount; +}; diff --git a/src/constants/PublishFees/SendFeeFunctions.ts b/src/constants/PublishFees/SendFeeFunctions.ts new file mode 100644 index 0000000..e90cd93 --- /dev/null +++ b/src/constants/PublishFees/SendFeeFunctions.ts @@ -0,0 +1,79 @@ +import { feeDestinationName, FeeType } from "./FeeData.tsx"; +import { CoinType } from "./FeePricePublish/FeePricePublish.ts"; + +export interface NameData { + name: string; + reducedName: string; + owner: string; + data: string; + registered: number; + isForSale: boolean; +} +export const getNameData = async (name: string) => { + return qortalRequest({ + action: "GET_NAME_DATA", + name: name, + }) as Promise; +}; + +export interface SendCoinResponse { + amount: number; + approvalStatus: string; + fee: string; + recipient: string; + reference: string; + senderPublicKey: string; + signature: string; + timestamp: number; + txGroupId: number; + type: string; +} + +export const sendCoin = async ( + address: string, + amount: number, + coin: CoinType +) => { + try { + return (await qortalRequest({ + action: "SEND_COIN", + coin, + destinationAddress: address, + amount, + })) as SendCoinResponse; + } catch (e) { + console.log("sendCoin refused", e); + } +}; + +export const sendQORT = async (address: string, amount: number) => { + return await sendCoin(address, amount, "QORT"); +}; + +export const sendQORTtoName = async (name: string, amount: number) => { + const address = await getNameData(name); + if (address) return await sendQORT(address.owner, amount); + else throw Error("Name Not Found"); +}; + +export interface PublishFeeData { + signature: string; + senderName: string; + createdTimestamp?: number; //timestamp of the metadata publish, NOT the send feeAmount publish, added after publish is fetched + updatedTimestamp?: number; + feeType?: FeeType; + coinType?: CoinType; + isPaid?: boolean; +} + +export type CommentType = "reply" | "edit" | "comment"; + +export interface CommentObject { + text: string; + feeData: PublishFeeData; +} + +export const payPublishFeeQORT = async (feeAmount: number) => { + const publish = await sendQORTtoName(feeDestinationName, feeAmount); + return publish?.signature; +}; diff --git a/src/constants/PublishFees/VerifyPayment-Functions.ts b/src/constants/PublishFees/VerifyPayment-Functions.ts new file mode 100644 index 0000000..7587f0a --- /dev/null +++ b/src/constants/PublishFees/VerifyPayment-Functions.ts @@ -0,0 +1,85 @@ +import { Issue } from "../../state/features/fileSlice.ts"; +import { PublishFeeData } from "./SendFeeFunctions.ts"; + +export type AccountName = { name: string; owner: string }; + +export interface GetRequestData { + limit?: number; + offset?: number; + reverse?: boolean; +} + +export interface getTransactionBySignatureResponse { + type: "string"; + timestamp: number; + reference: string; + fee: number; + signature: string; + txGroupId: number; + recipient: string; + blockHeight: number; + approvalStatus: string; + creatorAddress: string; + senderPublicKey: string; + amount: string; +} + +export const stringIsEmpty = (value: string) => { + return value === ""; +}; + +export const getAccountNames = async ( + address: string, + params?: GetRequestData +) => { + const names = (await qortalRequest({ + action: "GET_ACCOUNT_NAMES", + address: address, + ...params, + })) as AccountName[]; + + const namelessAddress = { name: "", owner: address }; + const emptyNamesFilled = names.map(({ name, owner }) => { + return stringIsEmpty(name) ? namelessAddress : { name, owner }; + }); + + const returnValue = + emptyNamesFilled.length > 0 ? emptyNamesFilled : [namelessAddress]; + return returnValue as AccountName[]; +}; + +export const getUserAccountNames = async () => { + const account = await getUserAccount(); + return await getAccountNames(account.address); +}; + +export const userHasName = async (name: string) => { + const userAccountNames = await getUserAccountNames(); + const userNames = userAccountNames.map(userName => userName.name); + return userNames.includes(name); +}; + +export const objectToPublishFeeData = (object: Issue) => { + const createdTimestamp = +object?.created || 0; + const updatedTimestamp = +object?.updated || 0; + return { + signature: object?.feeData?.signature, + createdTimestamp, + updatedTimestamp, + feeType: object?.feeData?.feeType || "default", + coinType: object?.feeData?.coinType || "QORT", + senderName: object?.user, + isPaid: object?.feeData?.isPaid || false, + } as PublishFeeData; +}; +export const objectHasNullValues = (object: object) => { + const objectAsArray = Object.values(object); + return objectAsArray.some(value => value == null); +}; + +export type AccountInfo = { address: string; publicKey: string }; +export const getUserAccount = async () => { + return (await qortalRequest({ + action: "GET_USER_ACCOUNT", + })) as AccountInfo; +}; diff --git a/src/constants/PublishFees/VerifyPayment.ts b/src/constants/PublishFees/VerifyPayment.ts new file mode 100644 index 0000000..3ab6c52 --- /dev/null +++ b/src/constants/PublishFees/VerifyPayment.ts @@ -0,0 +1,120 @@ +import { feeDestinationName, maxFeePublishTimeDiff } from "./FeeData.tsx"; +import { + getAccountNames, + getTransactionBySignatureResponse, + objectHasNullValues, + objectToPublishFeeData, +} from "./VerifyPayment-Functions.ts"; +import { verifyFeeAmount } from "./FeePricePublish/FeePricePublish.ts"; +import { getNameData, PublishFeeData } from "./SendFeeFunctions.ts"; +import { Issue } from "../../state/features/fileSlice.ts"; + +const getSignature = async (signature: string) => { + const url = "/transactions/signature/" + signature; + const response = await fetch(url, { + method: "GET", + headers: { + "Content-Type": "application/json", + }, + }); + + return (await response.json()) as getTransactionBySignatureResponse; +}; + +const verifySignature = async (feeData: PublishFeeData) => { + const { + signature, + createdTimestamp, + updatedTimestamp, + feeType, + coinType, + senderName, + } = feeData; + + const [signatureData, accountData] = await Promise.all([ + getSignature(signature), + getNameData(senderName), + ]); + + const namesofFeeRecipient = await getAccountNames(signatureData.recipient); + const doesFeeAmountMatch = await verifyFeeAmount({ + time: signatureData.timestamp, + feeAmount: +signatureData.amount, + feeType, + coinType, + }); + + const signatureTime = signatureData.timestamp; + let doesTimeMatch: boolean = false; + if (!updatedTimestamp) { + const timeDiff = createdTimestamp - signatureTime; + const timeDiffMinutes = Math.abs(timeDiff) / 1000 / 60; + + doesTimeMatch = timeDiffMinutes <= maxFeePublishTimeDiff; + } else { + const minutesPublishDiff = 1000 * 60 * maxFeePublishTimeDiff; + const startTime = createdTimestamp - minutesPublishDiff; + const endTime = updatedTimestamp; + + const sigTimeAfterStartTime = signatureTime > startTime; + const sigTimeBeforeEndTime = signatureTime < endTime; + + doesTimeMatch = sigTimeAfterStartTime && sigTimeBeforeEndTime; + } + + const doesSignatureMatch = signature === signatureData?.signature; + + const doesSenderMatch = signatureData.creatorAddress === accountData.owner; + + const doesFeeRecipientNameMatch = + namesofFeeRecipient.findIndex( + nameData => nameData?.name === feeDestinationName + ) >= 0; + + if (!doesTimeMatch) console.log("Time does not match"); + if (!doesSignatureMatch) console.log("Signature does not match"); + if (!doesSenderMatch) console.log("Sender does not match"); + if (!doesFeeRecipientNameMatch) console.log("Recipient does not match"); + if (!doesFeeAmountMatch) console.log("FeeAmount does not match"); + return ( + doesTimeMatch && + doesSignatureMatch && + doesSenderMatch && + doesFeeRecipientNameMatch && + doesFeeAmountMatch + ); +}; + +export const verifyPayment = async (publishToVerify: Issue) => { + if (!publishToVerify) return false; + + const publishFeeData = objectToPublishFeeData(publishToVerify); + + if (objectHasNullValues(publishFeeData)) return false; + + const verifyFunctionsList: Promise[] = []; + + verifyFunctionsList.push(verifySignature(publishFeeData)); + + const paymentChecks = await Promise.all(verifyFunctionsList); + return paymentChecks.every(check => check === true); +}; + +export const appendIsPaidToFeeData = (issue: Issue, isPaid: boolean): Issue => { + return { + ...issue, + feeData: { + ...(issue?.feeData || { signature: undefined, senderName: "" }), + isPaid, + }, + }; +}; +export const verifyAllPayments = async (issues: Issue[]) => { + const verifiedPayments = await Promise.all( + issues.map(issue => verifyPayment(issue)) + ); + + return issues.map((issue, index) => { + return appendIsPaidToFeeData(issue, verifiedPayments[index]); + }); +}; diff --git a/src/global.d.ts b/src/global.d.ts index 27c12a2..406ee9b 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -1,55 +1,56 @@ // src/global.d.ts interface QortalRequestOptions { - action: string - name?: string - service?: string - data64?: string - title?: string - description?: string - category?: string - tags?: string[] - identifier?: string - address?: string - metaData?: string - encoding?: string - includeMetadata?: boolean - limit?: numebr - offset?: number - reverse?: boolean - resources?: any[] - filename?: string - list_name?: string - item?: string - items?: strings[] - tag1?: string - tag2?: string - tag3?: string - tag4?: string - tag5?: string - coin?: string - destinationAddress?: string - amount?: number - blob?: Blob - mimeType?: string - file?: File - encryptedData?: string - name?: string - mode?: string - query?: string - excludeBlocked?: boolean - exactMatchNames?: boolean + action: string; + name?: string; + service?: string; + data64?: string; + title?: string; + description?: string; + category?: string; + tags?: string[]; + identifier?: string; + address?: string; + metaData?: string; + encoding?: string; + includeMetadata?: boolean; + limit?: numebr; + offset?: number; + reverse?: boolean; + resources?: any[]; + filename?: string; + list_name?: string; + item?: string; + items?: strings[]; + tag1?: string; + tag2?: string; + tag3?: string; + tag4?: string; + tag5?: string; + coin?: string; + destinationAddress?: string; + amount?: number; + blob?: Blob; + mimeType?: string; + file?: File; + encryptedData?: string; + name?: string; + mode?: string; + query?: string; + excludeBlocked?: boolean; + exactMatchNames?: boolean; + message?: string; } -declare function qortalRequest(options: QortalRequestOptions): Promise +declare function qortalRequest(options: QortalRequestOptions): Promise; declare function qortalRequestWithTimeout( options: QortalRequestOptions, time: number -): Promise +): Promise; declare global { interface Window { - _qdnBase: any // Replace 'any' with the appropriate type if you know it - _qdnTheme: string + _qdnBase: any; // Replace 'any' with the appropriate type if you know it + _qdnTheme: string; } } @@ -57,6 +58,6 @@ declare global { interface Window { showSaveFilePicker: ( options?: SaveFilePickerOptions - ) => Promise + ) => Promise; } } diff --git a/src/hooks/useFetchIssues.tsx b/src/hooks/useFetchIssues.tsx index 8c1336d..41752e7 100644 --- a/src/hooks/useFetchIssues.tsx +++ b/src/hooks/useFetchIssues.tsx @@ -3,12 +3,12 @@ import { useDispatch, useSelector } from "react-redux"; import { addFiles, addToHashMap, + Issue, removeFromHashMap, setCountNewFiles, upsertFiles, upsertFilesBeginning, upsertFilteredFiles, - Video, } from "../state/features/fileSlice.ts"; import { setFilesPerNamePublished, @@ -24,7 +24,8 @@ import { QSUPPORT_PLAYLIST_BASE, } from "../constants/Identifiers.ts"; import { queue } from "../wrappers/GlobalWrapper"; -import { getCategoriesFetchString } from "../components/common/CategoryList/CategoryList.tsx"; +import { log } from "../constants/Misc.ts"; +import { verifyAllPayments } from "../constants/PublishFees/VerifyPayment.ts"; export const useFetchIssues = () => { const dispatch = useDispatch(); @@ -50,7 +51,7 @@ export const useFetchIssues = () => { ); const checkAndUpdateIssue = React.useCallback( - (video: Video) => { + (video: Issue) => { const existingVideo = hashMapFiles[video.id]; if (!existingVideo) { return true; @@ -97,10 +98,10 @@ export const useFetchIssues = () => { videoId: issueID, content, }); - console.log("response is: ", res); res?.isValid ? dispatch(addToHashMap(res)) : dispatch(removeFromHashMap(issueID)); + return res; } catch (error) { retries = retries + 1; if (retries < 2) { @@ -112,7 +113,7 @@ export const useFetchIssues = () => { } }; - const getNewFiles = React.useCallback(async () => { + const getNewIssues = React.useCallback(async () => { try { dispatch(setIsLoadingGlobal(true)); @@ -149,7 +150,7 @@ export const useFetchIssues = () => { fetchAll = responseData.slice(0, findVideo); } - const structureData = fetchAll.map((video: any): Video => { + const structureData = fetchAll.map((video: any): Issue => { return { title: video?.metadata?.title, category: video?.metadata?.category, @@ -186,20 +187,21 @@ export const useFetchIssues = () => { } }, [videos, hashMapFiles]); - const getFiles = React.useCallback( + const getIssues = React.useCallback( async ( filters = {}, reset?: boolean, - resetFilers?: boolean, + resetFilters?: boolean, limit?: number ) => { try { const { name = "", - categories = [], + categories = "", + QappName = "", keywords = "", type = "", - }: any = resetFilers ? {} : filters; + }: any = resetFilters ? {} : filters; let offset = videos.length; if (reset) { offset = 0; @@ -211,10 +213,17 @@ export const useFetchIssues = () => { defaultUrl += `&name=${name}`; } - if (categories.length > 0) { - defaultUrl += "&description=" + getCategoriesFetchString(categories); - } + if (categories) { + defaultUrl += "&description="; + if (log) console.log("categories: ", categories); + if (categories) defaultUrl += categories; + if (log) console.log("description: ", defaultUrl); + } + if (QappName) { + defaultUrl += `&query=${QappName}`; + } + if (log) console.log("defaultURL: ", defaultUrl); if (keywords) { defaultUrl = defaultUrl + `&query=${keywords}`; } @@ -236,47 +245,48 @@ export const useFetchIssues = () => { }); const responseData = await response.json(); - // const responseData = await qortalRequest({ - // action: "SEARCH_QDN_RESOURCES", - // mode: "ALL", - // service: "DOCUMENT", - // query: "${QTUBE_VIDEO_BASE}", - // limit: 20, - // includeMetadata: true, - // offset: offset, - // reverse: true, - // excludeBlocked: true, - // exactMatchNames: true, - // name: names - // }) - const structureData = responseData.map((video: any): Video => { + let structureData = responseData.map((issue: any): Issue => { return { - title: video?.metadata?.title, - service: video?.service, - category: video?.metadata?.category, - categoryName: video?.metadata?.categoryName, - tags: video?.metadata?.tags || [], - description: video?.metadata?.description, - created: video?.created, - updated: video?.updated, - user: video.name, + title: issue?.metadata?.title, + service: issue?.service, + category: issue?.metadata?.category, + categoryName: issue?.metadata?.categoryName, + tags: issue?.metadata?.tags || [], + description: issue?.metadata?.description, + created: issue?.created, + updated: issue?.updated, + user: issue.name, videoImage: "", - id: video.identifier, + id: issue.identifier, }; }); - if (reset) { - dispatch(addFiles(structureData)); - } else { - dispatch(upsertFiles(structureData)); - } + const verifiedIssuePromises: Promise[] = []; for (const content of structureData) { if (content.user && content.id) { const res = checkAndUpdateIssue(content); + const issue: Promise = getIssue( + content.user, + content.id, + content + ); + verifiedIssuePromises.push(issue); if (res) { - queue.push(() => getIssue(content.user, content.id, content)); + queue.push(() => issue); } } } + + const issues = await Promise.all(verifiedIssuePromises); + const verifiedIssues = await verifyAllPayments(issues); + structureData = structureData.map((issue, index) => { + return { + ...issue, + feeData: verifiedIssues[index]?.feeData, + }; + }); + + if (reset) dispatch(addFiles(structureData)); + else dispatch(upsertFiles(structureData)); } catch (error) { console.log({ error }); } finally { @@ -285,7 +295,7 @@ export const useFetchIssues = () => { [videos, hashMapFiles] ); - const getFilesFiltered = React.useCallback( + const getIssuesFiltered = React.useCallback( async (filterValue: string) => { try { const offset = filteredVideos.length; @@ -314,7 +324,7 @@ export const useFetchIssues = () => { // exactMatchNames: true, // name: names // }) - const structureData = responseData.map((video: any): Video => { + const structureData = responseData.map((video: any): Issue => { return { title: video?.metadata?.title, category: video?.metadata?.category, @@ -345,7 +355,7 @@ export const useFetchIssues = () => { [filteredVideos, hashMapFiles] ); - const checkNewFiles = React.useCallback(async () => { + const checkNewIssues = React.useCallback(async () => { try { const url = `/arbitrary/resources/search?mode=ALL&service=DOCUMENT&query=${QSUPPORT_FILE_BASE}&limit=20&includemetadata=false&reverse=true&excludeblocked=true&exactmatchnames=true`; const response = await fetch(url, { @@ -382,7 +392,7 @@ export const useFetchIssues = () => { } catch (error) {} }, [videos]); - const getFilesCount = React.useCallback(async () => { + const getIssuesCount = React.useCallback(async () => { try { let url = `/arbitrary/resources/search?mode=ALL&includemetadata=false&limit=0&service=DOCUMENT&identifier=${QSUPPORT_FILE_BASE}`; @@ -411,13 +421,13 @@ export const useFetchIssues = () => { }, []); return { - getFiles, - checkAndUpdateFile: checkAndUpdateIssue, - getFile: getIssue, + getIssues, + checkAndUpdateIssue, + getIssue, hashMapFiles, - getNewFiles, - checkNewFiles, - getFilesFiltered, - getFilesCount, + getNewIssues, + checkNewIssues, + getIssuesFiltered, + getIssuesCount, }; }; diff --git a/src/hooks/useWindowSize.tsx b/src/hooks/useWindowSize.tsx index bf2b9cc..0466c29 100644 --- a/src/hooks/useWindowSize.tsx +++ b/src/hooks/useWindowSize.tsx @@ -1,25 +1,25 @@ -import { useState, useEffect } from 'react'; - -export function useWindowSize() { - const [windowSize, setWindowSize] = useState({ - width: undefined, - }); - - useEffect(() => { - function handleResize() { - setWindowSize({ - width: window.innerWidth, - }); - } - - window.addEventListener("resize", handleResize); - - // Call handler right away so state gets updated with initial window size - handleResize(); - - // Remove event listener on cleanup - return () => window.removeEventListener("resize", handleResize); - }, []); // Empty array means that effect doesn't depend on any values from props or state, so it runs once when the component mounts, and never re-runs. - - return windowSize; -} +import { useState, useEffect } from 'react'; + +export function useWindowSize() { + const [windowSize, setWindowSize] = useState({ + width: undefined, + }); + + useEffect(() => { + function handleResize() { + setWindowSize({ + width: window.innerWidth, + }); + } + + window.addEventListener("resize", handleResize); + + // Call handler right away so state gets updated with initial window size + handleResize(); + + // Remove event listener on cleanup + return () => window.removeEventListener("resize", handleResize); + }, []); // Empty array means that effect doesn't depend on any values from props or state, so it runs once when the component mounts, and never re-runs. + + return windowSize; +} diff --git a/src/index.css b/src/index.css index 2dd2e4a..96f9534 100644 --- a/src/index.css +++ b/src/index.css @@ -1,229 +1,229 @@ -@font-face { - font-family: 'Cambon Light'; - src: url("./styles/fonts/Cambon-Light.ttf") format("truetype"); -} - -@font-face { - font-family: 'Merriweather Sans'; - src: url("./styles/fonts/Merriweather Sans.ttf") format("truetype"); -} - -@font-face { - font-family: 'Karla'; - src: url("./styles/fonts/Karla.ttf") format("truetype"); -} - -@font-face { - font-family: 'Proxima Nova'; - src: url("./styles/fonts/ProximaNova.otf") format("opentype"); -} - -@font-face { - font-family: 'Raleway'; - src: url("./styles/fonts/Raleway.ttf") format("truetype"); -} - -@font-face { - font-family: 'Catamaran'; - src: url("./styles/fonts/Catamaran.ttf") format("truetype"); -} - -@font-face { - font-family: 'Oxygen'; - src: url("./styles/fonts/Oxygen.ttf") format("truetype"); -} - -@font-face { - font-family: 'Cairo'; - src: url("./styles/fonts/Cairo.ttf") format("truetype"); -} - -:root { - padding: 0px; - margin: 0px; - box-sizing: border-box; -} - - -.line-clamp { - height: 100px; - overflow: hidden; - display: -webkit-box; - -webkit-line-clamp: 5; /* number of lines to show */ - -webkit-box-orient: vertical; - text-overflow: ellipsis; -} - -.edit-btn:hover { - opacity: .75; - transition: .2s all; - -} - -.post-image { - max-width: 100%; - border-radius: 5px; - width: 100%; - height: 100%; -} - - - -.test-grid { - display: grid; - grid-template-columns: repeat(4, 1fr); - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - min-height: 25px; -} - -.test-grid-item { - border: 1px solid powderblue; -} - - -body::-webkit-scrollbar-track { - background-color: transparent; - - - } - body::-webkit-scrollbar-track:hover { - background-color: transparent; - } - - body::-webkit-scrollbar { - width: 16px; - height: 10px; - background-color: white; - } - - body::-webkit-scrollbar-thumb { - background-color: #838eee; - border-radius: 8px; - background-clip: content-box; - border: 4px solid transparent; - - } - - body::-webkit-scrollbar-thumb:hover { - background-color: #6270f0; - } - - - .MuiList-root::-webkit-scrollbar-track { - background-color: transparent; - - - } - .MuiList-root::-webkit-scrollbar-track:hover { - background-color: transparent; - } - - .MuiList-root::-webkit-scrollbar { - width: 14px; - height: 10px; - background-color: white; - } - - .MuiList-root::-webkit-scrollbar-thumb { - background-color: lightgray; - border-radius: 8px; - background-clip: content-box; - border: 4px solid transparent; - - } - - .MuiList-root::-webkit-scrollbar-thumb:hover { - background-color: lightslategray; - } - - .my-masonry-grid { - display: -webkit-box; /* Not needed if autoprefixing */ - display: -ms-flexbox; /* Not needed if autoprefixing */ - display: flex; - margin-left: -20px; /* gutter size offset */ - width: auto; - padding: 15px 20px; - } - - .my-masonry-grid_column { - padding-left: 20px; /* gutter size */ - background-clip: padding-box; - } - - /* Style your items */ - .my-masonry-grid_column > li { /* change div to reference your elements you put in */ - margin-bottom: 30px; - } - - .my-svg path { - fill: red - } - - .qortal-link { - text-decoration: none; /* Removes the underline */ - color: inherit; /* Inherits the color of the parent element */ - } - .qortal-link:hover, a:focus { - text-decoration: underline; /* Adds underline on hover and focus for accessibility */ - } - - .download-icon { - transition: all 0.5s ease-in-out; - animation: downloadIconAnimation 2s infinite; - } - - @keyframes downloadIconAnimation { - 0% { transform: scale(1); fill: #fff; } - 50% { transform: scale(1.2); fill: #3498db; } - 100% { transform: scale(1); fill: #fff; } - } - - .closePlayer { - position: absolute; - top: 0px; - width: 100%; - transition: all 0.3s; - display: flex; - justify-content: flex-end; - z-index: 8000; - } - - -/* When the screen is 600px or less, display .myClassUnder600 and hide .myClassOver600 */ -@media screen and (max-width: 600px) { - .myClassUnder600 { - display: none !important; - } - - -} - -@media screen and (min-width: 601px) { - .myClassOver600 { - display: none !important; - } -} - -.ql-editor { - min-height: 100px; - width: 100% -} - -.ql-editor img { - cursor: default; -} - -.ql-container { - font-size: 16px -} - -.hover-click { - transition: opacity 0.2s; -} -.hover-click:hover { - opacity: 0.7; +@font-face { + font-family: 'Cambon Light'; + src: url("./styles/fonts/Cambon-Light.ttf") format("truetype"); +} + +@font-face { + font-family: 'Merriweather Sans'; + src: url("./styles/fonts/Merriweather Sans.ttf") format("truetype"); +} + +@font-face { + font-family: 'Karla'; + src: url("./styles/fonts/Karla.ttf") format("truetype"); +} + +@font-face { + font-family: 'Proxima Nova'; + src: url("./styles/fonts/ProximaNova.otf") format("opentype"); +} + +@font-face { + font-family: 'Raleway'; + src: url("./styles/fonts/Raleway.ttf") format("truetype"); +} + +@font-face { + font-family: 'Catamaran'; + src: url("./styles/fonts/Catamaran.ttf") format("truetype"); +} + +@font-face { + font-family: 'Oxygen'; + src: url("./styles/fonts/Oxygen.ttf") format("truetype"); +} + +@font-face { + font-family: 'Cairo'; + src: url("./styles/fonts/Cairo.ttf") format("truetype"); +} + +:root { + padding: 0px; + margin: 0px; + box-sizing: border-box; +} + + +.line-clamp { + height: 100px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 5; /* number of lines to show */ + -webkit-box-orient: vertical; + text-overflow: ellipsis; +} + +.edit-btn:hover { + opacity: .75; + transition: .2s all; + +} + +.post-image { + max-width: 100%; + border-radius: 5px; + width: 100%; + height: 100%; +} + + + +.test-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + min-height: 25px; +} + +.test-grid-item { + border: 1px solid powderblue; +} + + +body::-webkit-scrollbar-track { + background-color: transparent; + + + } + body::-webkit-scrollbar-track:hover { + background-color: transparent; + } + + body::-webkit-scrollbar { + width: 16px; + height: 10px; + background-color: white; + } + + body::-webkit-scrollbar-thumb { + background-color: #838eee; + border-radius: 8px; + background-clip: content-box; + border: 4px solid transparent; + + } + + body::-webkit-scrollbar-thumb:hover { + background-color: #6270f0; + } + + + .MuiList-root::-webkit-scrollbar-track { + background-color: transparent; + + + } + .MuiList-root::-webkit-scrollbar-track:hover { + background-color: transparent; + } + + .MuiList-root::-webkit-scrollbar { + width: 14px; + height: 10px; + background-color: white; + } + + .MuiList-root::-webkit-scrollbar-thumb { + background-color: lightgray; + border-radius: 8px; + background-clip: content-box; + border: 4px solid transparent; + + } + + .MuiList-root::-webkit-scrollbar-thumb:hover { + background-color: lightslategray; + } + + .my-masonry-grid { + display: -webkit-box; /* Not needed if autoprefixing */ + display: -ms-flexbox; /* Not needed if autoprefixing */ + display: flex; + margin-left: -20px; /* gutter size offset */ + width: auto; + padding: 15px 20px; + } + + .my-masonry-grid_column { + padding-left: 20px; /* gutter size */ + background-clip: padding-box; + } + + /* Style your items */ + .my-masonry-grid_column > li { /* change div to reference your elements you put in */ + margin-bottom: 30px; + } + + .my-svg path { + fill: red + } + + .qortal-link { + text-decoration: none; /* Removes the underline */ + color: inherit; /* Inherits the color of the parent element */ + } + .qortal-link:hover, a:focus { + text-decoration: underline; /* Adds underline on hover and focus for accessibility */ + } + + .download-icon { + transition: all 0.5s ease-in-out; + animation: downloadIconAnimation 2s infinite; + } + + @keyframes downloadIconAnimation { + 0% { transform: scale(1); fill: #fff; } + 50% { transform: scale(1.2); fill: #3498db; } + 100% { transform: scale(1); fill: #fff; } + } + + .closePlayer { + position: absolute; + top: 0px; + width: 100%; + transition: all 0.3s; + display: flex; + justify-content: flex-end; + z-index: 8000; + } + + +/* When the screen is 600px or less, display .myClassUnder600 and hide .myClassOver600 */ +@media screen and (max-width: 600px) { + .myClassUnder600 { + display: none !important; + } + + +} + +@media screen and (min-width: 601px) { + .myClassOver600 { + display: none !important; + } +} + +.ql-editor { + min-height: 100px; + width: 100% +} + +.ql-editor img { + cursor: default; +} + +.ql-container { + font-size: 16px +} + +.hover-click { + transition: opacity 0.2s; +} +.hover-click:hover { + opacity: 0.7; } \ No newline at end of file diff --git a/src/main.tsx b/src/main.tsx index b13bb52..78a76db 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,17 +1,17 @@ -import ReactDOM from 'react-dom/client' -import App from './App' -import './index.css' -import { BrowserRouter } from 'react-router-dom' -interface CustomWindow extends Window { - _qdnBase: string -} - -const customWindow = window as unknown as CustomWindow - -const baseUrl = customWindow?._qdnBase || '' -ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( - - - - {formatBytes( - fileObj?.files.reduce( - (acc, cur) => acc + (cur?.size || 0), - 0 - ) - )} + {fileBytes > 0 && formatBytes(fileBytes)} + + + {issueObj.title} - {fileObj.title} + {issue?.feeData?.isPaid && ( + + )} - { e.stopPropagation(); - navigate(`/channel/${fileObj?.user}`); + navigate(`/channel/${issueObj?.user}`); }} > { }, }} > - {fileObj?.user} + {issueObj?.user} - + - {fileObj?.created && ( + {issueObj?.created && ( - {formatDate(fileObj.created)} + {formatDate(issueObj.created)} )} - + ) : ( { ); })} - - + + ); }; diff --git a/src/pages/IndividualProfile/IndividualProfile.tsx b/src/pages/IndividualProfile/IndividualProfile.tsx index 8c76fac..997f8b0 100644 --- a/src/pages/IndividualProfile/IndividualProfile.tsx +++ b/src/pages/IndividualProfile/IndividualProfile.tsx @@ -1,5 +1,5 @@ import React, { useMemo } from "react"; -import { FileListComponentLevel } from "../Home/FileListComponentLevel.tsx"; +import { IssueListComponentLevel } from "../Home/IssueListComponentLevel.tsx"; import { HeaderContainer, ProfileContainer } from "./Profile-styles"; import { AuthorTextComment, @@ -62,7 +62,7 @@ export const IndividualProfile = () => { - + ); }; diff --git a/src/pages/IndividualProfile/Profile-styles.tsx b/src/pages/IndividualProfile/Profile-styles.tsx index 97f80aa..c265324 100644 --- a/src/pages/IndividualProfile/Profile-styles.tsx +++ b/src/pages/IndividualProfile/Profile-styles.tsx @@ -1,16 +1,16 @@ -import { styled } from "@mui/system"; -import { Box, Grid, Typography, Checkbox } from "@mui/material"; - -export const ProfileContainer = styled(Box)(({ theme }) => ({ - position: "relative", - display: "flex", - width: "100%", - flexDirection: "column" -})); - -export const HeaderContainer = styled(Box)(({ theme }) => ({ - position: "relative", - display: "flex", - width: "100%", - justifyContent: "center" -})); +import { styled } from "@mui/system"; +import { Box, Grid, Typography, Checkbox } from "@mui/material"; + +export const ProfileContainer = styled(Box)(({ theme }) => ({ + position: "relative", + display: "flex", + width: "100%", + flexDirection: "column" +})); + +export const HeaderContainer = styled(Box)(({ theme }) => ({ + position: "relative", + display: "flex", + width: "100%", + justifyContent: "center" +})); diff --git a/src/pages/IssueContent/IssueContent.tsx b/src/pages/IssueContent/IssueContent.tsx index 7601a89..2d6942f 100644 --- a/src/pages/IssueContent/IssueContent.tsx +++ b/src/pages/IssueContent/IssueContent.tsx @@ -5,7 +5,6 @@ import { setIsLoadingGlobal } from "../../state/features/globalSlice"; import { Avatar, Box, Typography, useTheme } from "@mui/material"; import { RootState } from "../../state/store"; import { addToHashMap } from "../../state/features/fileSlice.ts"; -import AttachFileIcon from "@mui/icons-material/AttachFile"; import DownloadIcon from "@mui/icons-material/Download"; import { AuthorTextComment, @@ -24,14 +23,20 @@ import { CommentSection } from "../../components/common/Comments/CommentSection" import { QSUPPORT_FILE_BASE } from "../../constants/Identifiers.ts"; import { DisplayHtml } from "../../components/common/TextEditor/DisplayHtml"; import FileElement from "../../components/common/FileElement"; -import { allCategoryData } from "../../constants/Categories/1stCategories.ts"; +import { allCategoryData } from "../../constants/Categories/Categories.ts"; import { Category, getCategoriesFromObject, } from "../../components/common/CategoryList/CategoryList.tsx"; import { getIconsFromObject } from "../../constants/Categories/CategoryFunctions.ts"; +import { IssueIcon, IssueIcons } from "../../components/common/IssueIcon.tsx"; +import QORTicon from "../../assets/icons/qort.png"; +import { + appendIsPaidToFeeData, + verifyPayment, +} from "../../constants/PublishFees/VerifyPayment.ts"; -export function formatBytes(bytes, decimals = 2) { +export function formatBytes(bytes: number, decimals = 2) { if (bytes === 0) return "0 Bytes"; const k = 1024; @@ -50,7 +55,7 @@ export const IssueContent = () => { const [descriptionHeight, setDescriptionHeight] = useState( null ); - const [icon, setIcon] = useState(""); + const [issueIcons, setIssueIcons] = useState([]); const userAvatarHash = useSelector( (state: RootState) => state.global.userAvatarHash ); @@ -67,15 +72,15 @@ export const IssueContent = () => { const navigate = useNavigate(); const theme = useTheme(); - const [fileData, setFileData] = useState(null); + const [issueData, setIssueData] = useState(null); const [playlistData, setPlaylistData] = useState(null); const hashMapVideos = useSelector( (state: RootState) => state.file.hashMapFiles ); const videoReference = useMemo(() => { - if (!fileData) return null; - const { videoReference } = fileData; + if (!issueData) return null; + const { videoReference } = issueData; if ( videoReference?.identifier && videoReference?.name && @@ -85,13 +90,13 @@ export const IssueContent = () => { } else { return null; } - }, [fileData]); + }, [issueData]); const videoCover = useMemo(() => { - if (!fileData) return null; - const { videoImage } = fileData; + if (!issueData) return null; + const { videoImage } = issueData; return videoImage || null; - }, [fileData]); + }, [issueData]); const dispatch = useDispatch(); const getVideoData = React.useCallback(async (name: string, id: string) => { @@ -135,9 +140,16 @@ export const IssueContent = () => { ...resourceData, ...responseData, }; - setFileData(combinedData); - dispatch(addToHashMap(combinedData)); - checkforPlaylist(name, id, combinedData?.code); + + verifyPayment(combinedData).then(feeData => { + console.log( + "async data: ", + appendIsPaidToFeeData(combinedData, feeData) + ); + setIssueData(appendIsPaidToFeeData(combinedData, feeData)); + dispatch(addToHashMap(combinedData)); + checkforPlaylist(name, id, combinedData?.code); + }); } } } catch (error) { @@ -217,8 +229,10 @@ export const IssueContent = () => { const existingVideo = hashMapVideos[id]; if (existingVideo) { - setFileData(existingVideo); - checkforPlaylist(name, id, existingVideo?.code); + verifyPayment(existingVideo).then(feeData => { + setIssueData(appendIsPaidToFeeData(existingVideo, feeData)); + checkforPlaylist(name, id, existingVideo?.code); + }); } else { getVideoData(name, id); } @@ -259,21 +273,21 @@ export const IssueContent = () => { useEffect(() => { if (contentRef.current) { const height = contentRef.current.offsetHeight; - if (height > 100) { + const maxDescriptionHeight = 200; + if (height > maxDescriptionHeight) { // Assuming 100px is your threshold - setDescriptionHeight(100); + setDescriptionHeight(maxDescriptionHeight); } } - if (fileData) { - const icon = getIconsFromObject(fileData); - setIcon(icon); + if (issueData) { + const icons = getIconsFromObject(issueData); + setIssueIcons(icons); } - }, [fileData]); + }, [issueData]); const categoriesDisplay = useMemo(() => { - if (fileData) { - const categoryList = getCategoriesFromObject(fileData); - + if (issueData) { + const categoryList = getCategoriesFromObject(issueData); const categoryNames = categoryList.map((categoryID, index) => { let categoryName: Category; if (index === 0) { @@ -294,14 +308,21 @@ export const IssueContent = () => { const filteredCategoryNames = categoryNames.filter(name => name); let categoryDisplay = ""; const separator = " > "; + const QappName = issueData?.QappName || ""; + filteredCategoryNames.map((name, index) => { - categoryDisplay += - index !== filteredCategoryNames.length - 1 ? name + separator : name; + if (QappName && index === 1) { + categoryDisplay += QappName + separator; + } + categoryDisplay += name; + + if (index !== filteredCategoryNames.length - 1) + categoryDisplay += separator; }); return categoryDisplay; } return "no videodata"; - }, [fileData]); + }, [issueData]); return ( { alignItems: "center", }} > - {icon ? ( - + - ) : ( - - )} +
{ textAlign: "center", }} > - {fileData?.title} + {issueData?.title} + {issueData?.feeData?.isPaid && ( + + )}
- {fileData?.created && ( + {issueData?.created && ( { }} color={theme.palette.text.primary} > - {formatDate(fileData.created)} + {formatDate(issueData.created)} )} @@ -407,12 +425,13 @@ export const IssueContent = () => { - {fileData?.images && - fileData.images.map(image => { + {issueData?.images && + issueData.images.map(image => { return ( { ? "auto" : isExpandedDescription ? "auto" - : "100px", + : "30vh", overflow: "hidden", }} > - {fileData?.htmlDescription ? ( - + {issueData?.htmlDescription ? ( + ) : ( { cursor: "default", }} > - {fileData?.fullDescription} + {issueData?.fullDescription} )} @@ -509,7 +528,7 @@ export const IssueContent = () => { marginTop: "25px", }} > - {fileData?.files?.map((file, index) => { + {issueData?.files?.map((file, index) => { return ( { - state.user = action.payload; - }, - }, -}); - -export const { addUser } = authSlice.actions; - +import { createSlice } from '@reduxjs/toolkit'; + + +interface AuthState { + user: { + address: string; + publicKey: string; + name?: string; + } | null; +} +const initialState: AuthState = { + user: null +}; + +export const authSlice = createSlice({ + name: 'auth', + initialState, + reducers: { + addUser: (state, action) => { + state.user = action.payload; + }, + }, +}); + +export const { addUser } = authSlice.actions; + export default authSlice.reducer; \ No newline at end of file diff --git a/src/state/features/fileSlice.ts b/src/state/features/fileSlice.ts index 0621c37..7e718fc 100644 --- a/src/state/features/fileSlice.ts +++ b/src/state/features/fileSlice.ts @@ -1,10 +1,10 @@ import { createSlice } from "@reduxjs/toolkit"; -import { RootState } from "../store"; +import { PublishFeeData } from "../../constants/PublishFees/SendFeeFunctions.ts"; interface GlobalState { - files: Video[]; - filteredFiles: Video[]; - hashMapFiles: Record; + files: Issue[]; + filteredFiles: Issue[]; + hashMapFiles: Record; countNewFiles: number; isFiltering: boolean; filterValue: string; @@ -14,6 +14,7 @@ interface GlobalState { selectedCategoryFiles: any[]; editFileProperties: any; editPlaylistProperties: any; + publishedQappNames: string[]; } const initialState: GlobalState = { files: [], @@ -28,9 +29,10 @@ const initialState: GlobalState = { selectedCategoryFiles: [null, null, null, null], editFileProperties: null, editPlaylistProperties: null, + publishedQappNames: [], }; -export interface Video { +export interface Issue { title: string; description: string; created: number | string; @@ -44,6 +46,8 @@ export interface Video { updated?: number | string; isValid?: boolean; code?: string; + feeData?: PublishFeeData; + paymentVerified?: boolean; } export const fileSlice = createSlice({ @@ -113,12 +117,12 @@ export const fileSlice = createSlice({ }, addArrayToHashMap: (state, action) => { const videos = action.payload; - videos.forEach((video: Video) => { + videos.forEach((video: Issue) => { state.hashMapFiles[video.id] = video; }); }, upsertFiles: (state, action) => { - action.payload.forEach((video: Video) => { + action.payload.forEach((video: Issue) => { const index = state.files.findIndex(p => p.id === video.id); if (index !== -1) { state.files[index] = video; @@ -128,7 +132,7 @@ export const fileSlice = createSlice({ }); }, upsertFilteredFiles: (state, action) => { - action.payload.forEach((video: Video) => { + action.payload.forEach((video: Issue) => { const index = state.filteredFiles.findIndex(p => p.id === video.id); if (index !== -1) { state.filteredFiles[index] = video; @@ -138,7 +142,7 @@ export const fileSlice = createSlice({ }); }, upsertFilesBeginning: (state, action) => { - action.payload.reverse().forEach((video: Video) => { + action.payload.reverse().forEach((video: Issue) => { const index = state.files.findIndex(p => p.id === video.id); if (index !== -1) { state.files[index] = video; @@ -157,6 +161,9 @@ export const fileSlice = createSlice({ const username = action.payload; state.files = state.files.filter(item => item.user !== username); }, + setQappNames: (state, action) => { + state.publishedQappNames = action.payload; + }, }, }); @@ -183,6 +190,7 @@ export const { blockUser, setEditFile, setEditPlaylist, + setQappNames, } = fileSlice.actions; export default fileSlice.reducer; diff --git a/src/state/features/globalSlice.ts b/src/state/features/globalSlice.ts index 13f3415..f6a0a93 100644 --- a/src/state/features/globalSlice.ts +++ b/src/state/features/globalSlice.ts @@ -1,4 +1,5 @@ import { createSlice } from "@reduxjs/toolkit"; +import { FeePrice } from "../../constants/PublishFees/FeePricePublish/FeePricePublish.ts"; interface GlobalState { isLoadingGlobal: boolean; @@ -9,6 +10,7 @@ interface GlobalState { totalFilesPublished: number; totalNamesPublished: number; filesPerNamePublished: number; + feeData: FeePrice[]; } const initialState: GlobalState = { isLoadingGlobal: false, @@ -19,6 +21,7 @@ const initialState: GlobalState = { totalFilesPublished: null, totalNamesPublished: null, filesPerNamePublished: null, + feeData: [], }; export const globalSlice = createSlice({ @@ -61,6 +64,9 @@ export const globalSlice = createSlice({ setFilesPerNamePublished: (state, action) => { state.filesPerNamePublished = action.payload; }, + setFeeData: (state, action) => { + state.feeData = action.payload; + }, }, }); @@ -74,6 +80,7 @@ export const { setTotalFilesPublished, setTotalNamesPublished, setFilesPerNamePublished, + setFeeData, } = globalSlice.actions; export default globalSlice.reducer; diff --git a/src/state/features/notificationsSlice.ts b/src/state/features/notificationsSlice.ts index af074e2..ab087a4 100644 --- a/src/state/features/notificationsSlice.ts +++ b/src/state/features/notificationsSlice.ts @@ -1,73 +1,73 @@ -import { createSlice, PayloadAction } from "@reduxjs/toolkit"; - -interface AlertTypes { - alertSuccess: string - alertError: string - alertInfo: string -} - -interface InitialState { - alertTypes: AlertTypes -} - -const initialState: InitialState = { - alertTypes: { - alertSuccess: '', - alertError: '', - alertInfo: '' - } -} - -export const notificationsSlice = createSlice({ - name: "notifications", - initialState, - reducers: { - setNotification: ( - state: InitialState, - action: PayloadAction<{ alertType: string; msg: string }> - ) => { - if (action.payload.alertType === "success") { - return { - ...state, - alertTypes: { - ...state.alertTypes, - alertSuccess: action.payload.msg, - }, - }; - } else if (action.payload.alertType === "error") { - return { - ...state, - alertTypes: { - ...state.alertTypes, - alertError: action.payload.msg, - }, - }; - } else if (action.payload.alertType === "info") { - return { - ...state, - alertTypes: { - ...state.alertTypes, - alertInfo: action.payload.msg, - }, - }; - } - return state; - }, - removeNotification: (state: InitialState) => { - return { - ...state, - alertTypes: { - ...state.alertTypes, - alertSuccess: '', - alertError: '', - alertInfo: '' - } - } - }, - }, -}); - -export const { setNotification, removeNotification } = - notificationsSlice.actions; - -export default notificationsSlice.reducer; +import { createSlice, PayloadAction } from "@reduxjs/toolkit"; + +interface AlertTypes { + alertSuccess: string + alertError: string + alertInfo: string +} + +interface InitialState { + alertTypes: AlertTypes +} + +const initialState: InitialState = { + alertTypes: { + alertSuccess: '', + alertError: '', + alertInfo: '' + } +} + +export const notificationsSlice = createSlice({ + name: "notifications", + initialState, + reducers: { + setNotification: ( + state: InitialState, + action: PayloadAction<{ alertType: string; msg: string }> + ) => { + if (action.payload.alertType === "success") { + return { + ...state, + alertTypes: { + ...state.alertTypes, + alertSuccess: action.payload.msg, + }, + }; + } else if (action.payload.alertType === "error") { + return { + ...state, + alertTypes: { + ...state.alertTypes, + alertError: action.payload.msg, + }, + }; + } else if (action.payload.alertType === "info") { + return { + ...state, + alertTypes: { + ...state.alertTypes, + alertInfo: action.payload.msg, + }, + }; + } + return state; + }, + removeNotification: (state: InitialState) => { + return { + ...state, + alertTypes: { + ...state.alertTypes, + alertSuccess: '', + alertError: '', + alertInfo: '' + } + } + }, + }, +}); + +export const { setNotification, removeNotification } = + notificationsSlice.actions; + +export default notificationsSlice.reducer; diff --git a/src/styles/theme.tsx b/src/styles/theme.tsx index 61f3d99..f4cc1d0 100644 --- a/src/styles/theme.tsx +++ b/src/styles/theme.tsx @@ -91,7 +91,7 @@ const lightTheme = createTheme({ mode: "light", primary: { main: "#FCFCFC", - dark: "#F5F5F5", + dark: "#E0E0E0", light: "#FFFFFF", }, secondary: { @@ -138,14 +138,14 @@ const darkTheme = createTheme({ palette: { mode: "dark", primary: { - main: "#01a9e9", // - dark: "#008fcd", // - light: "#44c4ff", // + main: "#01a9e9", // Qortal Blue + dark: "#008fcd", + light: "#44c4ff", }, secondary: { main: "#007FFF", // Electric blue - dark: "#0059B2", // Darker shade of electric blue - light: "#3399FF", // Lighter shade of electric blue + dark: "#0059B2", + light: "#3399FF", }, background: { default: "#1C1C1C", // Deep space black diff --git a/src/utils/checkStructure.ts b/src/utils/checkStructure.ts index 95eb45f..24dc31b 100644 --- a/src/utils/checkStructure.ts +++ b/src/utils/checkStructure.ts @@ -1,7 +1,7 @@ -export const checkStructure = (content: any) => { - let isValid = true - - return isValid -} - - +export const checkStructure = (content: any) => { + let isValid = true + + return isValid +} + + diff --git a/src/utils/extractTextFromSlate.ts b/src/utils/extractTextFromSlate.ts index 7686787..bf345a0 100644 --- a/src/utils/extractTextFromSlate.ts +++ b/src/utils/extractTextFromSlate.ts @@ -1,14 +1,14 @@ -export function extractTextFromSlate(nodes: any) { - if(!Array.isArray(nodes)) return "" - let text = ""; - - for (const node of nodes) { - if (node.text) { - text += node.text; - } else if (node.children) { - text += extractTextFromSlate(node.children); - } - } - - return text; +export function extractTextFromSlate(nodes: any) { + if(!Array.isArray(nodes)) return "" + let text = ""; + + for (const node of nodes) { + if (node.text) { + text += node.text; + } else if (node.children) { + text += extractTextFromSlate(node.children); + } + } + + return text; } \ No newline at end of file diff --git a/src/utils/fetchVideos.ts b/src/utils/fetchVideos.ts index dbed3db..14523bb 100644 --- a/src/utils/fetchVideos.ts +++ b/src/utils/fetchVideos.ts @@ -17,6 +17,7 @@ export const fetchAndEvaluateIssues = async (data: any) => { service: content?.service || "DOCUMENT", identifier: videoId, }); + if (checkStructure(responseData)) { obj = { ...content, diff --git a/src/utils/qortalRequests.ts b/src/utils/qortalRequests.ts new file mode 100644 index 0000000..a91314c --- /dev/null +++ b/src/utils/qortalRequests.ts @@ -0,0 +1,33 @@ +import { NameData } from "../constants/PublishFees/SendFeeFunctions.ts"; +import { getUserAccountNames } from "../constants/PublishFees/VerifyPayment-Functions.ts"; + +export const getNameData = async (name: string) => { + return (await qortalRequest({ + action: "GET_NAME_DATA", + name: name, + })) as NameData; +}; + +export const sendQchatDM = async ( + recipientName: string, + message: string, + allowSelfAsRecipient = false +) => { + if (!allowSelfAsRecipient) { + const userAccountNames = await getUserAccountNames(); + const userNames = userAccountNames.map(name => name.name); + if (userNames.includes(recipientName)) return; + } + + const address = await getNameData(recipientName); + try { + return await qortalRequest({ + action: "SEND_CHAT_MESSAGE", + destinationAddress: address.owner, + message, + }); + } catch (e) { + console.log(e); + return false; + } +}; diff --git a/src/utils/queue.ts b/src/utils/queue.ts index 4869da6..f5d3377 100644 --- a/src/utils/queue.ts +++ b/src/utils/queue.ts @@ -1,43 +1,43 @@ -type QueueItem = { - request: () => Promise; - resolve: (value: any | PromiseLike) => void; - reject: (reason?: any) => void; -}; - -export class RequestQueue { - private queue: QueueItem[]; - private maxConcurrent: number; - private currentConcurrent: number; - - constructor(maxConcurrent = 5) { - this.queue = []; - this.maxConcurrent = maxConcurrent; - this.currentConcurrent = 0; - } - - async push(request: () => Promise): Promise { - return new Promise((resolve, reject) => { - this.queue.push({ - request, - resolve, - reject, - }); - this.checkQueue(); - }); - } - - private checkQueue(): void { - if (this.queue.length === 0 || this.currentConcurrent >= this.maxConcurrent) return; - - const { request, resolve, reject } = this.queue.shift() as QueueItem; - this.currentConcurrent++; - - request() - .then(resolve) - .catch(reject) - .finally(() => { - this.currentConcurrent--; - this.checkQueue(); - }); - } -} +type QueueItem = { + request: () => Promise; + resolve: (value: any | PromiseLike) => void; + reject: (reason?: any) => void; +}; + +export class RequestQueue { + private queue: QueueItem[]; + private maxConcurrent: number; + private currentConcurrent: number; + + constructor(maxConcurrent = 5) { + this.queue = []; + this.maxConcurrent = maxConcurrent; + this.currentConcurrent = 0; + } + + async push(request: () => Promise): Promise { + return new Promise((resolve, reject) => { + this.queue.push({ + request, + resolve, + reject, + }); + this.checkQueue(); + }); + } + + private checkQueue(): void { + if (this.queue.length === 0 || this.currentConcurrent >= this.maxConcurrent) return; + + const { request, resolve, reject } = this.queue.shift() as QueueItem; + this.currentConcurrent++; + + request() + .then(resolve) + .catch(reject) + .finally(() => { + this.currentConcurrent--; + this.checkQueue(); + }); + } +} diff --git a/src/utils/time.ts b/src/utils/time.ts index 7425aea..ae06465 100644 --- a/src/utils/time.ts +++ b/src/utils/time.ts @@ -1,46 +1,46 @@ -import moment from 'moment' - -export function formatTimestamp(timestamp: number): string { - const now = moment() - const timestampMoment = moment(timestamp) - const elapsedTime = now.diff(timestampMoment, 'minutes') - - if (elapsedTime < 1) { - return 'Just now' - } else if (elapsedTime < 60) { - return `${elapsedTime}m` - } else if (elapsedTime < 1440) { - return `${Math.floor(elapsedTime / 60)}h` - } else { - return timestampMoment.format('MMM D') - } -} - -export function formatTimestampSeconds(timestamp: number): string { - const now = moment() - const timestampMoment = moment.unix(timestamp) - const elapsedTime = now.diff(timestampMoment, 'minutes') - - if (elapsedTime < 1) { - return 'Just now' - } else if (elapsedTime < 60) { - return `${elapsedTime}m` - } else if (elapsedTime < 1440) { - return `${Math.floor(elapsedTime / 60)}h` - } else { - return timestampMoment.format('MMM D') - } -} - - - -export const formatDate = (unixTimestamp: number): string => { - const date = moment(unixTimestamp, 'x').fromNow() - - return date -} -export const formatDateSeconds = (unixTimestamp: number): string => { - const date = moment.unix(unixTimestamp).fromNow(); - - return date +import moment from 'moment' + +export function formatTimestamp(timestamp: number): string { + const now = moment() + const timestampMoment = moment(timestamp) + const elapsedTime = now.diff(timestampMoment, 'minutes') + + if (elapsedTime < 1) { + return 'Just now' + } else if (elapsedTime < 60) { + return `${elapsedTime}m` + } else if (elapsedTime < 1440) { + return `${Math.floor(elapsedTime / 60)}h` + } else { + return timestampMoment.format('MMM D') + } +} + +export function formatTimestampSeconds(timestamp: number): string { + const now = moment() + const timestampMoment = moment.unix(timestamp) + const elapsedTime = now.diff(timestampMoment, 'minutes') + + if (elapsedTime < 1) { + return 'Just now' + } else if (elapsedTime < 60) { + return `${elapsedTime}m` + } else if (elapsedTime < 1440) { + return `${Math.floor(elapsedTime / 60)}h` + } else { + return timestampMoment.format('MMM D') + } +} + + + +export const formatDate = (unixTimestamp: number): string => { + const date = moment(unixTimestamp, 'x').fromNow() + + return date +} +export const formatDateSeconds = (unixTimestamp: number): string => { + const date = moment.unix(unixTimestamp).fromNow(); + + return date } \ No newline at end of file diff --git a/src/utils/toBase64.ts b/src/utils/toBase64.ts index 3ab61ad..e335d36 100644 --- a/src/utils/toBase64.ts +++ b/src/utils/toBase64.ts @@ -1,174 +1,174 @@ -export const toBase64 = (file: File): Promise => - new Promise((resolve, reject) => { - const reader = new FileReader() - reader.readAsDataURL(file) - - reader.onload = () => { - const result = reader.result - reader.onload = null // remove onload handler - reader.onerror = null // remove onerror handler - resolve(result) - } - - reader.onerror = (error) => { - reader.onload = null // remove onload handler - reader.onerror = null // remove onerror handler - reject(error) - } - }) - -export function objectToBase64(obj: any) { - // Step 1: Convert the object to a JSON string - const jsonString = JSON.stringify(obj) - - // Step 2: Create a Blob from the JSON string - const blob = new Blob([jsonString], { type: 'application/json' }) - - // Step 3: Create a FileReader to read the Blob as a base64-encoded string - return new Promise((resolve, reject) => { - const reader = new FileReader() - reader.onloadend = () => { - if (typeof reader.result === 'string') { - // Remove 'data:application/json;base64,' prefix - const base64 = reader.result.replace( - 'data:application/json;base64,', - '' - ) - resolve(base64) - } else { - reject(new Error('Failed to read the Blob as a base64-encoded string')) - } - } - reader.onerror = () => { - reject(reader.error) - } - reader.readAsDataURL(blob) - }) -} - -export function objectToUint8Array(obj: any) { - // Convert the object to a JSON string - const jsonString = JSON.stringify(obj) - - // Encode the JSON string as a byte array using TextEncoder - const encoder = new TextEncoder() - const byteArray = encoder.encode(jsonString) - - // Create a new Uint8Array and set its content to the encoded byte array - const uint8Array = new Uint8Array(byteArray) - - return uint8Array -} - -export function uint8ArrayToBase64(uint8Array: Uint8Array): string { - const length = uint8Array.length - let binaryString = '' - const chunkSize = 1024 * 1024 // Process 1MB at a time - - for (let i = 0; i < length; i += chunkSize) { - const chunkEnd = Math.min(i + chunkSize, length) - const chunk = uint8Array.subarray(i, chunkEnd) - binaryString += Array.from(chunk, (byte) => String.fromCharCode(byte)).join( - '' - ) - } - - return btoa(binaryString) -} - -export function objectToUint8ArrayFromResponse(obj: any) { - const len = Object.keys(obj).length - const result = new Uint8Array(len) - - for (let i = 0; i < len; i++) { - result[i] = obj[i] - } - - return result -} -// export function uint8ArrayToBase64(arrayBuffer: Uint8Array): string { -// let binary = '' -// const bytes = new Uint8Array(arrayBuffer) -// const len = bytes.length - -// for (let i = 0; i < len; i++) { -// binary += String.fromCharCode(bytes[i]) -// } - -// return btoa(binary) -// } - -export function base64ToUint8Array(base64: string) { - const binaryString = atob(base64) - const len = binaryString.length - const bytes = new Uint8Array(len) - - for (let i = 0; i < len; i++) { - bytes[i] = binaryString.charCodeAt(i) - } - - return bytes -} - -export function uint8ArrayToObject(uint8Array: Uint8Array) { - // Decode the byte array using TextDecoder - const decoder = new TextDecoder() - const jsonString = decoder.decode(uint8Array) - - // Convert the JSON string back into an object - const obj = JSON.parse(jsonString) - - return obj -} - -export function processFileInChunks(file: File): Promise { - return new Promise( - (resolve: (value: Uint8Array) => void, reject: (reason?: any) => void) => { - const reader = new FileReader() - - reader.onload = function (event: ProgressEvent) { - const arrayBuffer = event.target?.result as ArrayBuffer - const uint8Array = new Uint8Array(arrayBuffer) - resolve(uint8Array) - } - - reader.onerror = function (error: ProgressEvent) { - reject(error) - } - - reader.readAsArrayBuffer(file) - } - ) -} - -// export async function processFileInChunks(file: File, chunkSize = 1024 * 1024): Promise { -// const fileStream = file.stream(); -// const reader = fileStream.getReader(); -// const totalLength = file.size; - -// if (totalLength <= 0 || isNaN(totalLength)) { -// throw new Error('Invalid file size'); -// } - -// const combinedArray = new Uint8Array(totalLength); -// let offset = 0; - -// while (offset < totalLength) { -// const { value, done } = await reader.read(); - -// if (done) { -// break; -// } - -// const chunk = new Uint8Array(value.buffer, value.byteOffset, value.byteLength); - -// // Set elements one by one instead of using combinedArray.set(chunk, offset) -// for (let i = 0; i < chunk.length; i++) { -// combinedArray[offset + i] = chunk[i]; -// } - -// offset += chunk.length; -// } - -// return combinedArray; -// } +export const toBase64 = (file: File): Promise => + new Promise((resolve, reject) => { + const reader = new FileReader() + reader.readAsDataURL(file) + + reader.onload = () => { + const result = reader.result + reader.onload = null // remove onload handler + reader.onerror = null // remove onerror handler + resolve(result) + } + + reader.onerror = (error) => { + reader.onload = null // remove onload handler + reader.onerror = null // remove onerror handler + reject(error) + } + }) + +export function objectToBase64(obj: any) { + // Step 1: Convert the object to a JSON string + const jsonString = JSON.stringify(obj) + + // Step 2: Create a Blob from the JSON string + const blob = new Blob([jsonString], { type: 'application/json' }) + + // Step 3: Create a FileReader to read the Blob as a base64-encoded string + return new Promise((resolve, reject) => { + const reader = new FileReader() + reader.onloadend = () => { + if (typeof reader.result === 'string') { + // Remove 'data:application/json;base64,' prefix + const base64 = reader.result.replace( + 'data:application/json;base64,', + '' + ) + resolve(base64) + } else { + reject(new Error('Failed to read the Blob as a base64-encoded string')) + } + } + reader.onerror = () => { + reject(reader.error) + } + reader.readAsDataURL(blob) + }) +} + +export function objectToUint8Array(obj: any) { + // Convert the object to a JSON string + const jsonString = JSON.stringify(obj) + + // Encode the JSON string as a byte array using TextEncoder + const encoder = new TextEncoder() + const byteArray = encoder.encode(jsonString) + + // Create a new Uint8Array and set its content to the encoded byte array + const uint8Array = new Uint8Array(byteArray) + + return uint8Array +} + +export function uint8ArrayToBase64(uint8Array: Uint8Array): string { + const length = uint8Array.length + let binaryString = '' + const chunkSize = 1024 * 1024 // Process 1MB at a time + + for (let i = 0; i < length; i += chunkSize) { + const chunkEnd = Math.min(i + chunkSize, length) + const chunk = uint8Array.subarray(i, chunkEnd) + binaryString += Array.from(chunk, (byte) => String.fromCharCode(byte)).join( + '' + ) + } + + return btoa(binaryString) +} + +export function objectToUint8ArrayFromResponse(obj: any) { + const len = Object.keys(obj).length + const result = new Uint8Array(len) + + for (let i = 0; i < len; i++) { + result[i] = obj[i] + } + + return result +} +// export function uint8ArrayToBase64(arrayBuffer: Uint8Array): string { +// let binary = '' +// const bytes = new Uint8Array(arrayBuffer) +// const len = bytes.length + +// for (let i = 0; i < len; i++) { +// binary += String.fromCharCode(bytes[i]) +// } + +// return btoa(binary) +// } + +export function base64ToUint8Array(base64: string) { + const binaryString = atob(base64) + const len = binaryString.length + const bytes = new Uint8Array(len) + + for (let i = 0; i < len; i++) { + bytes[i] = binaryString.charCodeAt(i) + } + + return bytes +} + +export function uint8ArrayToObject(uint8Array: Uint8Array) { + // Decode the byte array using TextDecoder + const decoder = new TextDecoder() + const jsonString = decoder.decode(uint8Array) + + // Convert the JSON string back into an object + const obj = JSON.parse(jsonString) + + return obj +} + +export function processFileInChunks(file: File): Promise { + return new Promise( + (resolve: (value: Uint8Array) => void, reject: (reason?: any) => void) => { + const reader = new FileReader() + + reader.onload = function (event: ProgressEvent) { + const arrayBuffer = event.target?.result as ArrayBuffer + const uint8Array = new Uint8Array(arrayBuffer) + resolve(uint8Array) + } + + reader.onerror = function (error: ProgressEvent) { + reject(error) + } + + reader.readAsArrayBuffer(file) + } + ) +} + +// export async function processFileInChunks(file: File, chunkSize = 1024 * 1024): Promise { +// const fileStream = file.stream(); +// const reader = fileStream.getReader(); +// const totalLength = file.size; + +// if (totalLength <= 0 || isNaN(totalLength)) { +// throw new Error('Invalid file size'); +// } + +// const combinedArray = new Uint8Array(totalLength); +// let offset = 0; + +// while (offset < totalLength) { +// const { value, done } = await reader.read(); + +// if (done) { +// break; +// } + +// const chunk = new Uint8Array(value.buffer, value.byteOffset, value.byteLength); + +// // Set elements one by one instead of using combinedArray.set(chunk, offset) +// for (let i = 0; i < chunk.length; i++) { +// combinedArray[offset + i] = chunk[i]; +// } + +// offset += chunk.length; +// } + +// return combinedArray; +// } diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts index 11f02fe..7d0ff9e 100644 --- a/src/vite-env.d.ts +++ b/src/vite-env.d.ts @@ -1 +1 @@ -/// +/// diff --git a/src/wrappers/DownloadWrapper.tsx b/src/wrappers/DownloadWrapper.tsx index 4f481a4..d0cb324 100644 --- a/src/wrappers/DownloadWrapper.tsx +++ b/src/wrappers/DownloadWrapper.tsx @@ -1,213 +1,213 @@ -import React from 'react' -import { useDispatch, useSelector } from 'react-redux' - - -import { - setAddToDownloads, - updateDownloads -} from '../state/features/globalSlice' - -import { DownloadTaskManager } from '../components/common/DownloadTaskManager' -import { RootState } from '../state/store' - -interface Props { - children: React.ReactNode -} - - -const defaultValues: MyContextInterface = { - downloadVideo: () => {} -} -interface IDownloadVideoParams { - name: string - service: string - identifier: string - properties: any -} -interface MyContextInterface { - downloadVideo: ({ - name, - service, - identifier, - properties - }: IDownloadVideoParams) => void -} -export const MyContext = React.createContext(defaultValues) - -const DownloadWrapper: React.FC = ({ children }) => { - const dispatch = useDispatch() - const downloads = useSelector((state: RootState) => state.global?.downloads); - - - const fetchResource = async ({ name, service, identifier }: any) => { - try { - await qortalRequest({ - action: 'GET_QDN_RESOURCE_PROPERTIES', - name, - service, - identifier - }) - } catch (error) {} - } - - const fetchVideoUrl = async ({ name, service, identifier }: any) => { - try { - fetchResource({ name, service, identifier }) - let url = await qortalRequest({ - action: 'GET_QDN_RESOURCE_URL', - service: service, - name: name, - identifier: identifier - }) - if (url) { - dispatch( - updateDownloads({ - name, - service, - identifier, - url - }) - ) - } - } catch (error) {} - } - - const performDownload = ({ - name, - service, - identifier, - properties - }: IDownloadVideoParams) => { - if(downloads[identifier]) return - dispatch( - setAddToDownloads({ - name, - service, - identifier, - properties - }) - ) - - let isCalling = false - let percentLoaded = 0 - let timer = 24 - const intervalId = setInterval(async () => { - if (isCalling) return - isCalling = true - const res = await qortalRequest({ - action: 'GET_QDN_RESOURCE_STATUS', - name: name, - service: service, - identifier: identifier - }) - if(res?.status === 'NOT_PUBLISHED'){ - dispatch( - updateDownloads({ - name, - service, - identifier, - status: res - }) - ) - clearInterval(intervalId) - } - isCalling = false - if (res.localChunkCount) { - if (res.percentLoaded) { - if ( - res.percentLoaded === percentLoaded && - res.percentLoaded !== 100 - ) { - timer = timer - 5 - } else { - timer = 24 - } - if (timer < 0) { - timer = 24 - isCalling = true - dispatch( - updateDownloads({ - name, - service, - identifier, - status: { - ...res, - status: 'REFETCHING' - } - }) - ) - setTimeout(() => { - isCalling = false - fetchResource({ - name, - service, - identifier - }) - }, 25000) - return - } - percentLoaded = res.percentLoaded - } - dispatch( - updateDownloads({ - name, - service, - identifier, - status: res - }) - ) - } - - // check if progress is 100% and clear interval if true - if (res?.status === 'READY') { - clearInterval(intervalId) - dispatch( - updateDownloads({ - name, - service, - identifier, - status: res - }) - ) - } - }, 5000) // 1 second interval - - fetchVideoUrl({ - name, - service, - identifier - }) - } - - const downloadVideo = async ({ - name, - service, - identifier, - properties - }: IDownloadVideoParams) => { - try { - - - performDownload({ - name, - service, - identifier, - properties - }) - return 'addedToList' - } catch (error) { - console.error(error) - } - } - - return ( - <> - - {/* */} - {children} - - - ) -} - -export default DownloadWrapper +import React from 'react' +import { useDispatch, useSelector } from 'react-redux' + + +import { + setAddToDownloads, + updateDownloads +} from '../state/features/globalSlice' + +import { DownloadTaskManager } from '../components/common/DownloadTaskManager' +import { RootState } from '../state/store' + +interface Props { + children: React.ReactNode +} + + +const defaultValues: MyContextInterface = { + downloadVideo: () => {} +} +interface IDownloadVideoParams { + name: string + service: string + identifier: string + properties: any +} +interface MyContextInterface { + downloadVideo: ({ + name, + service, + identifier, + properties + }: IDownloadVideoParams) => void +} +export const MyContext = React.createContext(defaultValues) + +const DownloadWrapper: React.FC = ({ children }) => { + const dispatch = useDispatch() + const downloads = useSelector((state: RootState) => state.global?.downloads); + + + const fetchResource = async ({ name, service, identifier }: any) => { + try { + await qortalRequest({ + action: 'GET_QDN_RESOURCE_PROPERTIES', + name, + service, + identifier + }) + } catch (error) {} + } + + const fetchVideoUrl = async ({ name, service, identifier }: any) => { + try { + fetchResource({ name, service, identifier }) + let url = await qortalRequest({ + action: 'GET_QDN_RESOURCE_URL', + service: service, + name: name, + identifier: identifier + }) + if (url) { + dispatch( + updateDownloads({ + name, + service, + identifier, + url + }) + ) + } + } catch (error) {} + } + + const performDownload = ({ + name, + service, + identifier, + properties + }: IDownloadVideoParams) => { + if(downloads[identifier]) return + dispatch( + setAddToDownloads({ + name, + service, + identifier, + properties + }) + ) + + let isCalling = false + let percentLoaded = 0 + let timer = 24 + const intervalId = setInterval(async () => { + if (isCalling) return + isCalling = true + const res = await qortalRequest({ + action: 'GET_QDN_RESOURCE_STATUS', + name: name, + service: service, + identifier: identifier + }) + if(res?.status === 'NOT_PUBLISHED'){ + dispatch( + updateDownloads({ + name, + service, + identifier, + status: res + }) + ) + clearInterval(intervalId) + } + isCalling = false + if (res.localChunkCount) { + if (res.percentLoaded) { + if ( + res.percentLoaded === percentLoaded && + res.percentLoaded !== 100 + ) { + timer = timer - 5 + } else { + timer = 24 + } + if (timer < 0) { + timer = 24 + isCalling = true + dispatch( + updateDownloads({ + name, + service, + identifier, + status: { + ...res, + status: 'REFETCHING' + } + }) + ) + setTimeout(() => { + isCalling = false + fetchResource({ + name, + service, + identifier + }) + }, 25000) + return + } + percentLoaded = res.percentLoaded + } + dispatch( + updateDownloads({ + name, + service, + identifier, + status: res + }) + ) + } + + // check if progress is 100% and clear interval if true + if (res?.status === 'READY') { + clearInterval(intervalId) + dispatch( + updateDownloads({ + name, + service, + identifier, + status: res + }) + ) + } + }, 5000) // 1 second interval + + fetchVideoUrl({ + name, + service, + identifier + }) + } + + const downloadVideo = async ({ + name, + service, + identifier, + properties + }: IDownloadVideoParams) => { + try { + + + performDownload({ + name, + service, + identifier, + properties + }) + return 'addedToList' + } catch (error) { + console.error(error) + } + } + + return ( + <> + + {/* */} + {children} + + + ) +} + +export default DownloadWrapper diff --git a/tsconfig.json b/tsconfig.json index 80edc1d..0614d28 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,26 +1,26 @@ -{ - "compilerOptions": { - "target": "ESNext", - "lib": ["DOM", "DOM.Iterable", "ESNext"], - "module": "ESNext", - "skipLibCheck": true, - "noImplicitAny": false, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - - /* Linting */ - "strict": false, - "noUnusedLocals": false, - "noUnusedParameters": false, - "noFallthroughCasesInSwitch": true, - "strictNullChecks": false, - }, - "include": ["src"], - "references": [{ "path": "./tsconfig.node.json" }] -} +{ + "compilerOptions": { + "target": "ESNext", + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "module": "ESNext", + "skipLibCheck": true, + "noImplicitAny": false, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": false, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noFallthroughCasesInSwitch": true, + "strictNullChecks": false, + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/tsconfig.node.json b/tsconfig.node.json index 42872c5..165a9ba 100644 --- a/tsconfig.node.json +++ b/tsconfig.node.json @@ -1,10 +1,10 @@ -{ - "compilerOptions": { - "composite": true, - "skipLibCheck": true, - "module": "ESNext", - "moduleResolution": "bundler", - "allowSyntheticDefaultImports": true - }, - "include": ["vite.config.ts"] -} +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts index 5c33a21..e61ca14 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,8 +1,8 @@ -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react' - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [react()], - base: "" -}) +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], + base: "" +})