From 98c5e7d37d7d00d1bf3290d24afe5f20388e1885 Mon Sep 17 00:00:00 2001 From: Justin Ferrari <‘justinwesleyferrari@gmail.com’> Date: Fri, 8 Dec 2023 13:27:19 -0500 Subject: [PATCH] Initial Q-Shop Commit in its own repo --- .gitignore | 24 + .prettierrc.json | 10 + index.html | 13 + package-lock.json | 6895 +++++++++++++++++ package.json | 54 + public/vite.svg | 1 + src/App.tsx | 48 + src/assets/img/ArrrLogoBlack.png | Bin 0 -> 5747 bytes src/assets/img/ArrrLogoWhite.png | Bin 0 -> 9253 bytes src/assets/img/Q-AppsLogo.webp | Bin 0 -> 31816 bytes src/assets/img/QShopLogo.webp | Bin 0 -> 7166 bytes src/assets/img/QShopLogoLight.webp | Bin 0 -> 5222 bytes src/assets/img/arrr.png | Bin 0 -> 1429 bytes src/assets/img/btc.png | Bin 0 -> 1982 bytes src/assets/img/dgb.png | Bin 0 -> 4917 bytes src/assets/img/doge.png | Bin 0 -> 1798 bytes src/assets/img/ltc.png | Bin 0 -> 1480 bytes src/assets/img/qort.png | Bin 0 -> 1907 bytes src/assets/img/rvn.png | Bin 0 -> 2405 bytes src/assets/svgs/ARRRSVG.tsx | 34 + src/assets/svgs/AccountCircleSVG.tsx | 25 + src/assets/svgs/AddSVG.tsx | 15 + src/assets/svgs/AlignCenterSVG.tsx | 21 + src/assets/svgs/AlignLeftSVG.tsx | 17 + src/assets/svgs/AlignRightSVG.tsx | 17 + src/assets/svgs/BackArrowSVG.tsx | 21 + src/assets/svgs/BoldSVG.tsx | 17 + src/assets/svgs/BriefcaseSVG.tsx | 21 + src/assets/svgs/CalendarSVG.tsx | 23 + src/assets/svgs/CancelSVG.tsx | 27 + src/assets/svgs/CartSVG.tsx | 23 + src/assets/svgs/CategorySVG.tsx | 21 + src/assets/svgs/CodeBlockSVG.tsx | 17 + src/assets/svgs/CompareArrowsSVG.tsx | 19 + src/assets/svgs/CurrencySVG.tsx | 15 + src/assets/svgs/DarkModeSVG.tsx | 23 + src/assets/svgs/DescriptionSVG.tsx | 21 + src/assets/svgs/DialogsSVG.tsx | 21 + src/assets/svgs/DoubleArrowDownSVG.tsx | 24 + src/assets/svgs/DownloadSVG.tsx | 21 + src/assets/svgs/ExpandMoreSVG.tsx | 22 + src/assets/svgs/GarbageSVG.tsx | 22 + src/assets/svgs/H2SVG.tsx | 17 + src/assets/svgs/H3SVG.tsx | 17 + src/assets/svgs/IconTypes.ts | 8 + src/assets/svgs/ItalicSVG.tsx | 17 + src/assets/svgs/LightModeSVG.tsx | 23 + src/assets/svgs/LinkSVG.tsx | 17 + src/assets/svgs/LocationSVG.tsx | 15 + src/assets/svgs/LoyaltySVG.tsx | 21 + src/assets/svgs/MinimizeSVG.tsx | 23 + src/assets/svgs/MinusCircle.tsx | 23 + src/assets/svgs/NewWindowSVG.tsx | 25 + src/assets/svgs/OrdersSVG.tsx | 21 + src/assets/svgs/OwnerSVG.tsx | 21 + src/assets/svgs/PlusCircle.tsx | 23 + src/assets/svgs/QortalSVG.tsx | 46 + src/assets/svgs/ShippingSVG.tsx | 15 + src/assets/svgs/StarSVG.tsx | 21 + src/assets/svgs/StorefrontSVG.tsx | 23 + src/assets/svgs/TimesSVG.tsx | 23 + src/assets/svgs/UnderlineSVG.tsx | 17 + src/assets/svgs/WarningSVG.tsx | 15 + src/assets/svgs/interfaces.ts | 5 + .../BlockedNamesModal-styles.ts | 28 + .../BlockedNamesModal/BlockedNamesModal.tsx | 100 + .../ConfirmationModal-styles.tsx | 18 + .../ConfirmationModal/ConfirmationModal.tsx | 50 + .../ContextMenu/ContextMenuResource.tsx | 82 + src/components/common/CustomIcon.tsx | 16 + .../common/DraggableResizableGrid.tsx | 55 + src/components/common/Error/Error-styles.tsx | 40 + src/components/common/Error/ErrorElement.tsx | 34 + src/components/common/ErrorBoundary.tsx | 36 + src/components/common/GenericPublishModal.tsx | 316 + src/components/common/ImageUploader.tsx | 89 + src/components/common/LazyLoad.tsx | 49 + .../common/Notification/Notification.tsx | 86 + .../common/NumericTextFieldQshop.tsx | 132 + src/components/common/PageLoader.tsx | 43 + src/components/common/Portal.tsx | 25 + src/components/common/PostPublishModal.tsx | 280 + src/components/common/PublishAudio.tsx | 111 + src/components/common/PublishGeneric.tsx | 119 + src/components/common/PublishVideo.tsx | 112 + src/components/common/ResponsiveImage.tsx | 124 + .../TabImageList/TabImageList-styles.tsx | 24 + .../common/TabImageList/TabImageList.tsx | 65 + src/components/common/VideoContent.tsx | 51 + src/components/common/VideoPublishModal.tsx | 286 + src/components/editor/BlogEditor.css | 78 + src/components/editor/BlogEditor.tsx | 574 ++ src/components/editor/ReadOnlySlate.tsx | 25 + src/components/editor/customTypes.ts | 47 + .../layout/Navbar/Navbar-styles.tsx | 211 + src/components/layout/Navbar/Navbar.tsx | 288 + src/components/modals/ConsentModal.tsx | 70 + .../modals/CreateStoreModal-styles.tsx | 197 + src/components/modals/CreateStoreModal.tsx | 419 + src/components/modals/EditStoreModal.tsx | 383 + .../modals/ReusableModal-styles.tsx | 39 + src/components/modals/ReusableModal.tsx | 40 + src/constants/countries.json | 245 + src/constants/identifiers.ts | 18 + src/constants/mail.ts | 3 + src/constants/product-status.ts | 3 + src/constants/states.json | 238 + src/constants/supported-coins.ts | 8 + src/constants/timeout.ts | 1 + src/global.d.ts | 60 + src/hooks/useConfirmModal.tsx | 36 + src/hooks/useFetchCatalogues.tsx | 54 + src/hooks/useFetchOrders.tsx | 267 + src/hooks/useFetchProducts.tsx | 54 + src/hooks/useFetchStoreReviews.tsx | 55 + src/hooks/useFetchStores.tsx | 55 + src/hooks/useProductsToSaveLocalStorage.tsx | 26 + src/index.css | 178 + src/index.d.ts | 9 + src/interfaces/interfaces.ts | 8 + src/main.tsx | 19 + src/pages/Cart/Cart-styles.tsx | 284 + src/pages/Cart/Cart.tsx | 1359 ++++ src/pages/MyOrders/MyOrders.tsx | 78 + src/pages/Product/ProductPage-styles.tsx | 190 + src/pages/Product/ProductPage.tsx | 330 + .../NewProduct/NewProduct-styles.tsx | 108 + .../ProductManager/NewProduct/NewProduct.tsx | 217 + .../OrderTable/OrderTable-styles.tsx | 10 + .../ProductManager/OrderTable/OrderTable.tsx | 178 + .../ProductForm/ProductForm.tsx | 381 + .../ProductManager/ProductManager-styles.tsx | 208 + src/pages/ProductManager/ProductManager.tsx | 686 ++ .../ProductTable/ProductTable-styles.tsx | 10 + .../ProductTable/ProductTable.tsx | 179 + .../ShowOrder/ShowOrder-styles.tsx | 363 + .../ProductManager/ShowOrder/ShowOrder.tsx | 563 ++ .../Store/ProductCard/ProductCard-styles.tsx | 63 + src/pages/Store/ProductCard/ProductCard.tsx | 183 + src/pages/Store/Store/Store-styles.tsx | 348 + src/pages/Store/Store/Store.tsx | 1140 +++ src/pages/Store/StoreCard/StoreCard.tsx | 158 + .../StoreDetails/StoreDetails-styles.tsx | 116 + src/pages/Store/StoreDetails/StoreDetails.tsx | 171 + .../AddReview/AddReview-styles.tsx | 44 + .../StoreReviews/AddReview/AddReview.tsx | 265 + .../Store/StoreReviews/StoreReviewCard.tsx | 82 + .../StoreReviews/StoreReviews-styles.tsx | 176 + src/pages/Store/StoreReviews/StoreReviews.tsx | 253 + src/pages/StoreList/StoreList-styles.tsx | 338 + src/pages/StoreList/StoreList.tsx | 223 + src/state/features/authSlice.ts | 27 + src/state/features/cartSlice.ts | 98 + src/state/features/globalSlice.ts | 247 + src/state/features/notificationsSlice.ts | 73 + src/state/features/orderSlice.ts | 100 + src/state/features/storeSlice.ts | 281 + src/state/store.ts | 31 + src/styles/fonts/Cairo.ttf | Bin 0 -> 353464 bytes src/styles/fonts/Cambon-Light.ttf | Bin 0 -> 123472 bytes src/styles/fonts/Catamaran.ttf | Bin 0 -> 182788 bytes src/styles/fonts/Karla.ttf | Bin 0 -> 88960 bytes src/styles/fonts/Livvic.ttf | Bin 0 -> 103884 bytes src/styles/fonts/Merriweather Sans.ttf | Bin 0 -> 267396 bytes src/styles/fonts/Montserrat.ttf | Bin 0 -> 394140 bytes src/styles/fonts/Oxygen.ttf | Bin 0 -> 46440 bytes src/styles/fonts/ProximaNova.otf | Bin 0 -> 62892 bytes src/styles/fonts/Raleway.ttf | Bin 0 -> 309720 bytes src/styles/theme.tsx | 269 + src/utils/checkStructure.ts | 57 + src/utils/extractTextFromSlate.ts | 14 + src/utils/fetchCatalogues.ts | 36 + src/utils/fetchMail.ts | 73 + src/utils/fetchOrders.ts | 52 + src/utils/fetchPosts.ts | 41 + src/utils/fetchStoreReviews.ts | 36 + src/utils/fetchStores.ts | 40 + src/utils/storeIdFormats.ts | 9 + src/utils/time.ts | 24 + src/utils/toBase64.ts | 190 + src/utils/withTimeout.ts | 17 + src/vite-env.d.ts | 1 + src/webworkers/decodeBase64.js | 62 + src/webworkers/getBlogWorker.js | 74 + src/wrappers/GlobalWrapper-styles.tsx | 26 + src/wrappers/GlobalWrapper.tsx | 875 +++ tsconfig.json | 19 + vite.config.ts | 8 + 188 files changed, 25531 insertions(+) create mode 100644 .gitignore create mode 100644 .prettierrc.json create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/vite.svg create mode 100644 src/App.tsx create mode 100644 src/assets/img/ArrrLogoBlack.png create mode 100644 src/assets/img/ArrrLogoWhite.png create mode 100644 src/assets/img/Q-AppsLogo.webp create mode 100644 src/assets/img/QShopLogo.webp create mode 100644 src/assets/img/QShopLogoLight.webp create mode 100644 src/assets/img/arrr.png create mode 100644 src/assets/img/btc.png create mode 100644 src/assets/img/dgb.png create mode 100644 src/assets/img/doge.png create mode 100644 src/assets/img/ltc.png create mode 100644 src/assets/img/qort.png create mode 100644 src/assets/img/rvn.png create mode 100644 src/assets/svgs/ARRRSVG.tsx create mode 100644 src/assets/svgs/AccountCircleSVG.tsx create mode 100644 src/assets/svgs/AddSVG.tsx create mode 100644 src/assets/svgs/AlignCenterSVG.tsx create mode 100644 src/assets/svgs/AlignLeftSVG.tsx create mode 100644 src/assets/svgs/AlignRightSVG.tsx create mode 100644 src/assets/svgs/BackArrowSVG.tsx create mode 100644 src/assets/svgs/BoldSVG.tsx create mode 100644 src/assets/svgs/BriefcaseSVG.tsx create mode 100644 src/assets/svgs/CalendarSVG.tsx create mode 100644 src/assets/svgs/CancelSVG.tsx create mode 100644 src/assets/svgs/CartSVG.tsx create mode 100644 src/assets/svgs/CategorySVG.tsx create mode 100644 src/assets/svgs/CodeBlockSVG.tsx create mode 100644 src/assets/svgs/CompareArrowsSVG.tsx create mode 100644 src/assets/svgs/CurrencySVG.tsx create mode 100644 src/assets/svgs/DarkModeSVG.tsx create mode 100644 src/assets/svgs/DescriptionSVG.tsx create mode 100644 src/assets/svgs/DialogsSVG.tsx create mode 100644 src/assets/svgs/DoubleArrowDownSVG.tsx create mode 100644 src/assets/svgs/DownloadSVG.tsx create mode 100644 src/assets/svgs/ExpandMoreSVG.tsx create mode 100644 src/assets/svgs/GarbageSVG.tsx create mode 100644 src/assets/svgs/H2SVG.tsx create mode 100644 src/assets/svgs/H3SVG.tsx create mode 100644 src/assets/svgs/IconTypes.ts create mode 100644 src/assets/svgs/ItalicSVG.tsx create mode 100644 src/assets/svgs/LightModeSVG.tsx create mode 100644 src/assets/svgs/LinkSVG.tsx create mode 100644 src/assets/svgs/LocationSVG.tsx create mode 100644 src/assets/svgs/LoyaltySVG.tsx create mode 100644 src/assets/svgs/MinimizeSVG.tsx create mode 100644 src/assets/svgs/MinusCircle.tsx create mode 100644 src/assets/svgs/NewWindowSVG.tsx create mode 100644 src/assets/svgs/OrdersSVG.tsx create mode 100644 src/assets/svgs/OwnerSVG.tsx create mode 100644 src/assets/svgs/PlusCircle.tsx create mode 100644 src/assets/svgs/QortalSVG.tsx create mode 100644 src/assets/svgs/ShippingSVG.tsx create mode 100644 src/assets/svgs/StarSVG.tsx create mode 100644 src/assets/svgs/StorefrontSVG.tsx create mode 100644 src/assets/svgs/TimesSVG.tsx create mode 100644 src/assets/svgs/UnderlineSVG.tsx create mode 100644 src/assets/svgs/WarningSVG.tsx create mode 100644 src/assets/svgs/interfaces.ts create mode 100644 src/components/common/BlockedNamesModal/BlockedNamesModal-styles.ts create mode 100644 src/components/common/BlockedNamesModal/BlockedNamesModal.tsx create mode 100644 src/components/common/ConfirmationModal/ConfirmationModal-styles.tsx create mode 100644 src/components/common/ConfirmationModal/ConfirmationModal.tsx create mode 100644 src/components/common/ContextMenu/ContextMenuResource.tsx create mode 100644 src/components/common/CustomIcon.tsx create mode 100644 src/components/common/DraggableResizableGrid.tsx create mode 100644 src/components/common/Error/Error-styles.tsx create mode 100644 src/components/common/Error/ErrorElement.tsx create mode 100644 src/components/common/ErrorBoundary.tsx create mode 100644 src/components/common/GenericPublishModal.tsx create mode 100644 src/components/common/ImageUploader.tsx create mode 100644 src/components/common/LazyLoad.tsx create mode 100644 src/components/common/Notification/Notification.tsx create mode 100644 src/components/common/NumericTextFieldQshop.tsx create mode 100644 src/components/common/PageLoader.tsx create mode 100644 src/components/common/Portal.tsx create mode 100644 src/components/common/PostPublishModal.tsx create mode 100644 src/components/common/PublishAudio.tsx create mode 100644 src/components/common/PublishGeneric.tsx create mode 100644 src/components/common/PublishVideo.tsx create mode 100644 src/components/common/ResponsiveImage.tsx create mode 100644 src/components/common/TabImageList/TabImageList-styles.tsx create mode 100644 src/components/common/TabImageList/TabImageList.tsx create mode 100644 src/components/common/VideoContent.tsx create mode 100644 src/components/common/VideoPublishModal.tsx create mode 100644 src/components/editor/BlogEditor.css create mode 100644 src/components/editor/BlogEditor.tsx create mode 100644 src/components/editor/ReadOnlySlate.tsx create mode 100644 src/components/editor/customTypes.ts create mode 100644 src/components/layout/Navbar/Navbar-styles.tsx create mode 100644 src/components/layout/Navbar/Navbar.tsx create mode 100644 src/components/modals/ConsentModal.tsx create mode 100644 src/components/modals/CreateStoreModal-styles.tsx create mode 100644 src/components/modals/CreateStoreModal.tsx create mode 100644 src/components/modals/EditStoreModal.tsx create mode 100644 src/components/modals/ReusableModal-styles.tsx create mode 100644 src/components/modals/ReusableModal.tsx create mode 100644 src/constants/countries.json create mode 100644 src/constants/identifiers.ts create mode 100644 src/constants/mail.ts create mode 100644 src/constants/product-status.ts create mode 100644 src/constants/states.json create mode 100644 src/constants/supported-coins.ts create mode 100644 src/constants/timeout.ts create mode 100644 src/global.d.ts create mode 100644 src/hooks/useConfirmModal.tsx create mode 100644 src/hooks/useFetchCatalogues.tsx create mode 100644 src/hooks/useFetchOrders.tsx create mode 100644 src/hooks/useFetchProducts.tsx create mode 100644 src/hooks/useFetchStoreReviews.tsx create mode 100644 src/hooks/useFetchStores.tsx create mode 100644 src/hooks/useProductsToSaveLocalStorage.tsx create mode 100644 src/index.css create mode 100644 src/index.d.ts create mode 100644 src/interfaces/interfaces.ts create mode 100644 src/main.tsx create mode 100644 src/pages/Cart/Cart-styles.tsx create mode 100644 src/pages/Cart/Cart.tsx create mode 100644 src/pages/MyOrders/MyOrders.tsx create mode 100644 src/pages/Product/ProductPage-styles.tsx create mode 100644 src/pages/Product/ProductPage.tsx create mode 100644 src/pages/ProductManager/NewProduct/NewProduct-styles.tsx create mode 100644 src/pages/ProductManager/NewProduct/NewProduct.tsx create mode 100644 src/pages/ProductManager/OrderTable/OrderTable-styles.tsx create mode 100644 src/pages/ProductManager/OrderTable/OrderTable.tsx create mode 100644 src/pages/ProductManager/ProductForm/ProductForm.tsx create mode 100644 src/pages/ProductManager/ProductManager-styles.tsx create mode 100644 src/pages/ProductManager/ProductManager.tsx create mode 100644 src/pages/ProductManager/ProductTable/ProductTable-styles.tsx create mode 100644 src/pages/ProductManager/ProductTable/ProductTable.tsx create mode 100644 src/pages/ProductManager/ShowOrder/ShowOrder-styles.tsx create mode 100644 src/pages/ProductManager/ShowOrder/ShowOrder.tsx create mode 100644 src/pages/Store/ProductCard/ProductCard-styles.tsx create mode 100644 src/pages/Store/ProductCard/ProductCard.tsx create mode 100644 src/pages/Store/Store/Store-styles.tsx create mode 100644 src/pages/Store/Store/Store.tsx create mode 100644 src/pages/Store/StoreCard/StoreCard.tsx create mode 100644 src/pages/Store/StoreDetails/StoreDetails-styles.tsx create mode 100644 src/pages/Store/StoreDetails/StoreDetails.tsx create mode 100644 src/pages/Store/StoreReviews/AddReview/AddReview-styles.tsx create mode 100644 src/pages/Store/StoreReviews/AddReview/AddReview.tsx create mode 100644 src/pages/Store/StoreReviews/StoreReviewCard.tsx create mode 100644 src/pages/Store/StoreReviews/StoreReviews-styles.tsx create mode 100644 src/pages/Store/StoreReviews/StoreReviews.tsx create mode 100644 src/pages/StoreList/StoreList-styles.tsx create mode 100644 src/pages/StoreList/StoreList.tsx create mode 100644 src/state/features/authSlice.ts create mode 100644 src/state/features/cartSlice.ts create mode 100644 src/state/features/globalSlice.ts create mode 100644 src/state/features/notificationsSlice.ts create mode 100644 src/state/features/orderSlice.ts create mode 100644 src/state/features/storeSlice.ts create mode 100644 src/state/store.ts create mode 100644 src/styles/fonts/Cairo.ttf create mode 100644 src/styles/fonts/Cambon-Light.ttf create mode 100644 src/styles/fonts/Catamaran.ttf create mode 100644 src/styles/fonts/Karla.ttf create mode 100644 src/styles/fonts/Livvic.ttf create mode 100644 src/styles/fonts/Merriweather Sans.ttf create mode 100644 src/styles/fonts/Montserrat.ttf create mode 100644 src/styles/fonts/Oxygen.ttf create mode 100644 src/styles/fonts/ProximaNova.otf create mode 100644 src/styles/fonts/Raleway.ttf create mode 100644 src/styles/theme.tsx create mode 100644 src/utils/checkStructure.ts create mode 100644 src/utils/extractTextFromSlate.ts create mode 100644 src/utils/fetchCatalogues.ts create mode 100644 src/utils/fetchMail.ts create mode 100644 src/utils/fetchOrders.ts create mode 100644 src/utils/fetchPosts.ts create mode 100644 src/utils/fetchStoreReviews.ts create mode 100644 src/utils/fetchStores.ts create mode 100644 src/utils/storeIdFormats.ts create mode 100644 src/utils/time.ts create mode 100644 src/utils/toBase64.ts create mode 100644 src/utils/withTimeout.ts create mode 100644 src/vite-env.d.ts create mode 100644 src/webworkers/decodeBase64.js create mode 100644 src/webworkers/getBlogWorker.js create mode 100644 src/wrappers/GlobalWrapper-styles.tsx create mode 100644 src/wrappers/GlobalWrapper.tsx create mode 100644 tsconfig.json create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bfe8e32 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* +*.zip +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..0a4d4fc --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,10 @@ +{ + "printWidth": 80, + "singleQuote": false, + "trailingComma": "es5", + "bracketSpacing": true, + "jsxBracketSameLine": false, + "arrowParens": "avoid", + "tabWidth": 2, + "semi": true +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..717953c --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Q-Shop + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..d64b961 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6895 @@ +{ + "name": "q-blog", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "q-blog", + "version": "0.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", + "@types/react-grid-layout": "^1.3.2", + "axios": "^1.3.4", + "compressorjs": "^1.2.1", + "localforage": "^1.10.0", + "moment": "^2.29.4", + "philliplm-react-modern-audio-player": "^1.4.6", + "react": "^18.2.0", + "react-copy-to-clipboard": "^5.1.0", + "react-dnd": "^16.0.1", + "react-dnd-html5-backend": "^16.0.1", + "react-dom": "^18.2.0", + "react-dropzone": "^14.2.3", + "react-grid-layout": "^1.3.4", + "react-intersection-observer": "^9.4.3", + "react-joyride": "^2.5.4", + "react-masonry-css": "^1.0.16", + "react-redux": "^8.0.5", + "react-resize-detector": "^8.0.4", + "react-router-dom": "^6.9.0", + "react-toastify": "^9.1.2", + "react-virtuoso": "^4.3.3", + "short-unique-id": "^4.4.4", + "slate": "^0.91.4", + "slate-history": "^0.86.0", + "slate-react": "^0.91.11" + }, + "devDependencies": { + "@mui/types": "^7.2.3", + "@types/react": "^18.0.28", + "@types/react-copy-to-clipboard": "^5.0.4", + "@types/react-dom": "^18.0.11", + "@vitejs/plugin-react-swc": "^3.2.0", + "prettier": "^2.8.6", + "typescript": "^4.9.3", + "vite": "^4.2.0", + "worker-loader": "^3.0.8" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.3.tgz", + "integrity": "sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==", + "dependencies": { + "@babel/types": "^7.21.3", + "@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-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "dependencies": { + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.3.tgz", + "integrity": "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", + "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.3.tgz", + "integrity": "sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.21.3", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.21.3", + "@babel/types": "^7.21.3", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.3.tgz", + "integrity": "sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==", + "dependencies": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.10.6", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.6.tgz", + "integrity": "sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/serialize": "^1.1.1", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.1.3" + } + }, + "node_modules/@emotion/cache": { + "version": "11.10.5", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.5.tgz", + "integrity": "sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==", + "dependencies": { + "@emotion/memoize": "^0.8.0", + "@emotion/sheet": "^1.2.1", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "stylis": "4.1.3" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", + "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", + "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", + "dependencies": { + "@emotion/memoize": "^0.8.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", + "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" + }, + "node_modules/@emotion/react": { + "version": "11.10.6", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.6.tgz", + "integrity": "sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.6", + "@emotion/cache": "^11.10.5", + "@emotion/serialize": "^1.1.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", + "dependencies": { + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/unitless": "^0.8.0", + "@emotion/utils": "^1.2.0", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.1.tgz", + "integrity": "sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==" + }, + "node_modules/@emotion/styled": { + "version": "11.10.6", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.6.tgz", + "integrity": "sha512-OXtBzOmDSJo5Q0AFemHCfl+bUueT8BIcPSxu0EGTpGk6DmI5dnhSzQANm1e1ze0YZL7TDyAyy6s/b/zmGOS3Og==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.6", + "@emotion/is-prop-valid": "^1.2.0", + "@emotion/serialize": "^1.1.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" + }, + "node_modules/@emotion/unitless": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", + "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", + "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", + "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", + "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.11.tgz", + "integrity": "sha512-CdyX6sRVh1NzFCsf5vw3kULwlAhfy9wVt8SZlrhQ7eL2qBjGbFhRBWkkAzuZm9IIEOCKJw4DXA6R85g+qc8RDw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.11.tgz", + "integrity": "sha512-QnK4d/zhVTuV4/pRM4HUjcsbl43POALU2zvBynmrrqZt9LPcLA3x1fTZPBg2RRguBQnJcnU059yKr+bydkntjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.11.tgz", + "integrity": "sha512-3PL3HKtsDIXGQcSCKtWD/dy+mgc4p2Tvo2qKgKHj9Yf+eniwFnuoQ0OUhlSfAEpKAFzF9N21Nwgnap6zy3L3MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.11.tgz", + "integrity": "sha512-pJ950bNKgzhkGNO3Z9TeHzIFtEyC2GDQL3wxkMApDEghYx5Qers84UTNc1bAxWbRkuJOgmOha5V0WUeh8G+YGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.11.tgz", + "integrity": "sha512-iB0dQkIHXyczK3BZtzw1tqegf0F0Ab5texX2TvMQjiJIWXAfM4FQl7D909YfXWnB92OQz4ivBYQ2RlxBJrMJOw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.11.tgz", + "integrity": "sha512-7EFzUADmI1jCHeDRGKgbnF5sDIceZsQGapoO6dmw7r/ZBEKX7CCDnIz8m9yEclzr7mFsd+DyasHzpjfJnmBB1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.11.tgz", + "integrity": "sha512-iPgenptC8i8pdvkHQvXJFzc1eVMR7W2lBPrTE6GbhR54sLcF42mk3zBOjKPOodezzuAz/KSu8CPyFSjcBMkE9g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.11.tgz", + "integrity": "sha512-M9iK/d4lgZH0U5M1R2p2gqhPV/7JPJcRz+8O8GBKVgqndTzydQ7B2XGDbxtbvFkvIs53uXTobOhv+RyaqhUiMg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.11.tgz", + "integrity": "sha512-Qxth3gsWWGKz2/qG2d5DsW/57SeA2AmpSMhdg9TSB5Svn2KDob3qxfQSkdnWjSd42kqoxIPy3EJFs+6w1+6Qjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.11.tgz", + "integrity": "sha512-dB1nGaVWtUlb/rRDHmuDQhfqazWE0LMro/AIbT2lWM3CDMHJNpLckH+gCddQyhhcLac2OYw69ikUMO34JLt3wA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.11.tgz", + "integrity": "sha512-aCWlq70Q7Nc9WDnormntGS1ar6ZFvUpqr8gXtO+HRejRYPweAFQN615PcgaSJkZjhHp61+MNLhzyVALSF2/Q0g==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.11.tgz", + "integrity": "sha512-cGeGNdQxqY8qJwlYH1BP6rjIIiEcrM05H7k3tR7WxOLmD1ZxRMd6/QIOWMb8mD2s2YJFNRuNQ+wjMhgEL2oCEw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.11.tgz", + "integrity": "sha512-BdlziJQPW/bNe0E8eYsHB40mYOluS+jULPCjlWiHzDgr+ZBRXPtgMV1nkLEGdpjrwgmtkZHEGEPaKdS/8faLDA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.11.tgz", + "integrity": "sha512-MDLwQbtF+83oJCI1Cixn68Et/ME6gelmhssPebC40RdJaect+IM+l7o/CuG0ZlDs6tZTEIoxUe53H3GmMn8oMA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.11.tgz", + "integrity": "sha512-4N5EMESvws0Ozr2J94VoUD8HIRi7X0uvUv4c0wpTHZyZY9qpaaN7THjosdiW56irQ4qnJ6Lsc+i+5zGWnyqWqQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.11.tgz", + "integrity": "sha512-rM/v8UlluxpytFSmVdbCe1yyKQd/e+FmIJE2oPJvbBo+D0XVWi1y/NQ4iTNx+436WmDHQBjVLrbnAQLQ6U7wlw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.11.tgz", + "integrity": "sha512-4WaAhuz5f91h3/g43VBGdto1Q+X7VEZfpcWGtOFXnggEuLvjV+cP6DyLRU15IjiU9fKLLk41OoJfBFN5DhPvag==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.11.tgz", + "integrity": "sha512-UBj135Nx4FpnvtE+C8TWGp98oUgBcmNmdYgl5ToKc0mBHxVVqVE7FUS5/ELMImOp205qDAittL6Ezhasc2Ev/w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.11.tgz", + "integrity": "sha512-1/gxTifDC9aXbV2xOfCbOceh5AlIidUrPsMpivgzo8P8zUtczlq1ncFpeN1ZyQJ9lVs2hILy1PG5KPp+w8QPPg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.11.tgz", + "integrity": "sha512-vtSfyx5yRdpiOW9yp6Ax0zyNOv9HjOAw8WaZg3dF5djEHKKm3UnoohftVvIJtRh0Ec7Hso0RIdTqZvPXJ7FdvQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.11.tgz", + "integrity": "sha512-GFPSLEGQr4wHFTiIUJQrnJKZhZjjq4Sphf+mM76nQR6WkQn73vm7IsacmBRPkALfpOCHsopSvLgqdd4iUW2mYw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.11.tgz", + "integrity": "sha512-N9vXqLP3eRL8BqSy8yn4Y98cZI2pZ8fyuHx6lKjiG2WABpT2l01TXdzq5Ma2ZUBzfB7tx5dXVhge8X9u0S70ZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@formatjs/ecma402-abstract": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.14.3.tgz", + "integrity": "sha512-SlsbRC/RX+/zg4AApWIFNDdkLtFbkq3LNoZWXZCE/nHVKqoIJyaoQyge/I0Y38vLxowUn9KTtXgusLD91+orbg==", + "dependencies": { + "@formatjs/intl-localematcher": "0.2.32", + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/fast-memoize": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.0.1.tgz", + "integrity": "sha512-M2GgV+qJn5WJQAYewz7q2Cdl6fobQa69S1AzSM2y0P68ZDbK5cWrJIcPCO395Of1ksftGZoOt4LYCO/j9BKBSA==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.3.0.tgz", + "integrity": "sha512-xqtlqYAbfJDF4b6e4O828LBNOWXrFcuYadqAbYORlDRwhyJ2bH+xpUBPldZbzRGUN2mxlZ4Ykhm7jvERtmI8NQ==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.14.3", + "@formatjs/icu-skeleton-parser": "1.3.18", + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.3.18", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.18.tgz", + "integrity": "sha512-ND1ZkZfmLPcHjAH1sVpkpQxA+QYfOX3py3SjKWMUVGDow18gZ0WPqz3F+pJLYQMpS2LnnQ5zYR2jPVYTbRwMpg==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.14.3", + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/intl-localematcher": { + "version": "0.2.32", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.32.tgz", + "integrity": "sha512-k/MEBstff4sttohyEpXxCmC3MqbUn9VvHGlZ8fauLzkbwXmVrEeyzS+4uhrvAk9DWU9/7otYWxyDox4nT/KVLQ==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@gilbarbara/deep-equal": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@gilbarbara/deep-equal/-/deep-equal-0.1.2.tgz", + "integrity": "sha512-jk+qzItoEb0D0xSSmrKDDzf9sheQj/BAPxlgNxgmOaA3mxpUa6ndJLYGZKsJnIVEQSD8zcTbyILz7I0HcnBCRA==" + }, + "node_modules/@internationalized/date": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.1.0.tgz", + "integrity": "sha512-wjeur7K4AecT+YwoBmBXQ/+n5lP69tuZc34hw09s44EozZK7FZHSyfPvRp5/xEb2D6abLboskDY4jG+Nt0TNUQ==", + "dependencies": { + "@swc/helpers": "^0.4.14" + } + }, + "node_modules/@internationalized/message": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@internationalized/message/-/message-3.1.0.tgz", + "integrity": "sha512-Oo5m70FcBdADf7G8NkUffVSfuCdeAYVfsvNjZDi9ELpjvkc4YNJVTHt/NyTI9K7FgAVoELxiP9YmN0sJ+HNHYQ==", + "dependencies": { + "@swc/helpers": "^0.4.14", + "intl-messageformat": "^10.1.0" + } + }, + "node_modules/@internationalized/number": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.2.0.tgz", + "integrity": "sha512-GUXkhXSX1Ee2RURnzl+47uvbOxnlMnvP9Er+QePTjDjOPWuunmLKlEkYkEcLiiJp7y4l9QxGDLOlVr8m69LS5w==", + "dependencies": { + "@swc/helpers": "^0.4.14" + } + }, + "node_modules/@internationalized/string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.1.0.tgz", + "integrity": "sha512-TJQKiyUb+wyAfKF59UNeZ/kELMnkxyecnyPCnBI1ma4NaXReJW+7Cc2mObXAqraIBJUVv7rgI46RLKrLgi35ng==", + "dependencies": { + "@swc/helpers": "^0.4.14" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "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==", + "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==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "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==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@juggle/resize-observer": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", + "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==" + }, + "node_modules/@mui/base": { + "version": "5.0.0-alpha.121", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.121.tgz", + "integrity": "sha512-8nJRY76UqlJV+q/Yzo0tgGfPWEOa+4N9rjO81fMmcJqP0I6m54hLDXsjvMg4tvelY5eKHXUK6Tb7en+GHfTqZA==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@emotion/is-prop-valid": "^1.2.0", + "@mui/types": "^7.2.3", + "@mui/utils": "^5.11.13", + "@popperjs/core": "^2.11.6", + "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.11.13", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.11.13.tgz", + "integrity": "sha512-lx+GXBR9h/ApZsEP728tl0pyZyuajto+VnBgsoAzw1d5+CbmOo8ZWieKwVUGxZlPT1wMYNUYS5NtKzCli0xYjw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + } + }, + "node_modules/@mui/icons-material": { + "version": "5.11.11", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.11.tgz", + "integrity": "sha512-Eell3ADmQVE8HOpt/LZ3zIma8JSvPh3XgnhwZLT0k5HRqZcd6F/QDHc7xsWtgz09t+UEFvOYJXjtrwKmLdwwpw==", + "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.11.13", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.11.13.tgz", + "integrity": "sha512-2CnSj43F+159LbGmTLLQs5xbGYMiYlpTByQhP7c7cMX6opbScctBFE1PuyElpAmwW8Ag9ysfZH1d1MFAmJQkjg==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@mui/base": "5.0.0-alpha.121", + "@mui/core-downloads-tracker": "^5.11.13", + "@mui/system": "^5.11.13", + "@mui/types": "^7.2.3", + "@mui/utils": "^5.11.13", + "@types/react-transition-group": "^4.4.5", + "clsx": "^1.2.1", + "csstype": "^3.1.1", + "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.11.13", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.11.13.tgz", + "integrity": "sha512-PJnYNKzW5LIx3R+Zsp6WZVPs6w5sEKJ7mgLNnUXuYB1zo5aX71FVLtV7geyPXRcaN2tsoRNK7h444ED0t7cIjA==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@mui/utils": "^5.11.13", + "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.11.11", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.11.11.tgz", + "integrity": "sha512-wV0UgW4lN5FkDBXefN8eTYeuE9sjyQdg5h94vtwZCUamGQEzmCOtir4AakgmbWMy0x8OLjdEUESn9wnf5J9MOg==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@emotion/cache": "^11.10.5", + "csstype": "^3.1.1", + "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.11.13", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.11.13.tgz", + "integrity": "sha512-OWP0Alp6C8ufnGm9+CZcl3d+OoRXL2PnrRT5ohaMLxvGL9OfNcL2t4JOjMmA0k1UAGd6E/Ygbu5lEPrZSDlvCg==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@mui/private-theming": "^5.11.13", + "@mui/styled-engine": "^5.11.11", + "@mui/types": "^7.2.3", + "@mui/utils": "^5.11.13", + "clsx": "^1.2.1", + "csstype": "^3.1.1", + "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.3", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.3.tgz", + "integrity": "sha512-tZ+CQggbe9Ol7e/Fs5RcKwg/woU+o8DCtOnccX6KmbBc7YrfqMYEYuaIcXHuhpT880QwNkZZ3wQwvtlDFA2yOw==", + "peerDependencies": { + "@types/react": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "5.11.13", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.11.13.tgz", + "integrity": "sha512-5ltA58MM9euOuUcnvwFJqpLdEugc9XFsRR8Gt4zZNb31XzMfSKJPR4eumulyhsOTK1rWf7K4D63NKFPfX0AxqA==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@types/prop-types": "^15.7.5", + "@types/react-is": "^16.7.1 || ^17.0.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/@popperjs/core": { + "version": "2.11.6", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", + "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@react-aria/focus": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.11.0.tgz", + "integrity": "sha512-yPuWs9bAR9CMfIwyOPm2oXLPF19gNkUqW+ozSPhWbLMTEa8Ma09eHW1br4xbN+4ONOm/dCJsIkxTNPUkiLdQoA==", + "dependencies": { + "@react-aria/interactions": "^3.14.0", + "@react-aria/utils": "^3.15.0", + "@react-types/shared": "^3.17.0", + "@swc/helpers": "^0.4.14", + "clsx": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-aria/i18n": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.7.0.tgz", + "integrity": "sha512-PZCWmhO9mJvelwiYlsXLY6W4L2o+oza3xnDx0cZDVqp/Hf+OwMAPHWtZsFRTKdjk4TaOPB/ISc9HknWn6UpY4w==", + "dependencies": { + "@internationalized/date": "^3.1.0", + "@internationalized/message": "^3.1.0", + "@internationalized/number": "^3.2.0", + "@internationalized/string": "^3.1.0", + "@react-aria/ssr": "^3.5.0", + "@react-aria/utils": "^3.15.0", + "@react-types/shared": "^3.17.0", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-aria/interactions": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.14.0.tgz", + "integrity": "sha512-e1Tkr0UTuYFpV21PJrXy7jEY542Vl+C2Fo70oukZ1fN+wtfQkzodsTIzyepXb7kVMGmC34wDisMJUrksVkfY2w==", + "dependencies": { + "@react-aria/utils": "^3.15.0", + "@react-types/shared": "^3.17.0", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-aria/overlays": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.13.0.tgz", + "integrity": "sha512-hRZyhAYzrlCcEWQ2k2jP24b0wc5/355Xl5w5FZHRmPeU1U4XlFwKX/eFlBs/li9Sprm1bTDXrCY480Kl6UsKDA==", + "dependencies": { + "@react-aria/focus": "^3.11.0", + "@react-aria/i18n": "^3.7.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/ssr": "^3.5.0", + "@react-aria/utils": "^3.15.0", + "@react-aria/visually-hidden": "^3.7.0", + "@react-stately/overlays": "^3.5.0", + "@react-types/button": "^3.7.1", + "@react-types/overlays": "^3.7.0", + "@react-types/shared": "^3.17.0", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-aria/ssr": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.5.0.tgz", + "integrity": "sha512-h0MJdSWOd1qObLnJ8mprU31wI8tmKFJMuwT22MpWq6psisOOZaga6Ml4u6Ee6M6duWWISjXvqO4Sb/J0PBA+nQ==", + "dependencies": { + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-aria/utils": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.15.0.tgz", + "integrity": "sha512-aJZBG++iz1UwTW5gXFaHicKju4p0MPhAyBTcf2awHYWeTUUslDjJcEnNg7kjBYZBOrOSlA2rAt7/7C5CCURQPg==", + "dependencies": { + "@react-aria/ssr": "^3.5.0", + "@react-stately/utils": "^3.6.0", + "@react-types/shared": "^3.17.0", + "@swc/helpers": "^0.4.14", + "clsx": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-aria/visually-hidden": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.7.0.tgz", + "integrity": "sha512-v/0ujJ67H6LjwY8J7mIGPVB1K8suBArLV+w8UGdX/wFXRL7H4r2fiqlrwAElWSmNbhDQl5BDm/Zh/ub9jB9yzA==", + "dependencies": { + "@react-aria/interactions": "^3.14.0", + "@react-aria/utils": "^3.15.0", + "@react-types/shared": "^3.17.0", + "@swc/helpers": "^0.4.14", + "clsx": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-dnd/asap": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@react-dnd/asap/-/asap-5.0.2.tgz", + "integrity": "sha512-WLyfoHvxhs0V9U+GTsGilGgf2QsPl6ZZ44fnv0/b8T3nQyvzxidxsg/ZltbWssbsRDlYW8UKSQMTGotuTotZ6A==" + }, + "node_modules/@react-dnd/invariant": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@react-dnd/invariant/-/invariant-4.0.2.tgz", + "integrity": "sha512-xKCTqAK/FFauOM9Ta2pswIyT3D8AQlfrYdOi/toTPEhqCuAs1v5tcJ3Y08Izh1cJ5Jchwy9SeAXmMg6zrKs2iw==" + }, + "node_modules/@react-dnd/shallowequal": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@react-dnd/shallowequal/-/shallowequal-4.0.2.tgz", + "integrity": "sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==" + }, + "node_modules/@react-spectrum/layout": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-spectrum/layout/-/layout-3.5.0.tgz", + "integrity": "sha512-Yjy0uvGUHjczl44PQlMqOEBoJIe4coYwDQCoVl20YrTzGiMdwLV24Hs9uqK3I6yKmAoNxTehe0CdOVgwuVRF9g==", + "dependencies": { + "@react-aria/ssr": "^3.5.0", + "@react-aria/utils": "^3.15.0", + "@react-spectrum/utils": "^3.9.0", + "@react-types/layout": "^3.3.6", + "@react-types/shared": "^3.17.0", + "@swc/helpers": "^0.4.14", + "clsx": "^1.1.1" + }, + "peerDependencies": { + "@react-spectrum/provider": "^3.0.0", + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-spectrum/provider": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-spectrum/provider/-/provider-3.7.0.tgz", + "integrity": "sha512-6Uch60R5PKJC+ZY3VweVadaCoaIj6Nd85TKfFH4jf8NEzXv5CqjwUzwV5aQ6u3k1K24Ves7RpLlK53HW1wUm6w==", + "dependencies": { + "@react-aria/i18n": "^3.7.0", + "@react-aria/overlays": "^3.13.0", + "@react-aria/utils": "^3.15.0", + "@react-spectrum/utils": "^3.9.0", + "@react-types/provider": "^3.6.0", + "@react-types/shared": "^3.17.0", + "@swc/helpers": "^0.4.14", + "clsx": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-spectrum/theme-default": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-spectrum/theme-default/-/theme-default-3.5.0.tgz", + "integrity": "sha512-DagwngJ9T7yGgtdTwKj9LaHbg3AWLW2/ILJK92xbPj/yAAEVXJ8vhiP9Tg3W3mZMsxBCNwTVLyOLheu7d+D8og==", + "dependencies": { + "@react-types/provider": "^3.6.0", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-spectrum/utils": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@react-spectrum/utils/-/utils-3.9.0.tgz", + "integrity": "sha512-I1JKwiyLE54mAT7Z2wadVKoai1Q60QFg4XNuYUwk8TwWAEz7DUUHucntHAND6dqFpVIMK1Rk9lcZBft43FF2BQ==", + "dependencies": { + "@react-aria/i18n": "^3.7.0", + "@react-aria/ssr": "^3.5.0", + "@react-aria/utils": "^3.15.0", + "@react-types/shared": "^3.17.0", + "@swc/helpers": "^0.4.14", + "clsx": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-spectrum/view": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-spectrum/view/-/view-3.5.0.tgz", + "integrity": "sha512-Zzsy2S6gT14vtli52tjM5VP1EdMOP+bppNCmwX+saUJuxaEdj6oYjP89quE4HwALzYceOfmXIuGDyEVeDcuSsQ==", + "dependencies": { + "@react-aria/i18n": "^3.7.0", + "@react-aria/utils": "^3.15.0", + "@react-spectrum/utils": "^3.9.0", + "@react-types/shared": "^3.17.0", + "@react-types/view": "^3.4.0", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@react-spectrum/provider": "^3.0.0", + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-stately/overlays": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.5.0.tgz", + "integrity": "sha512-r+U/G0Y4tCfI5wyBeIu+hmcZVRN8ChoK2zM1srPH9nDKsijQard2goX+9YmKng2LJ01Re/P6F8S8jYbpfEdLfQ==", + "dependencies": { + "@react-stately/utils": "^3.6.0", + "@react-types/overlays": "^3.7.0", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-stately/utils": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.6.0.tgz", + "integrity": "sha512-rptF7iUWDrquaYvBAS4QQhOBQyLBncDeHF03WnHXAxnuPJXNcr9cXJtjJPGCs036ZB8Q2hc9BGG5wNyMkF5v+Q==", + "dependencies": { + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-types/button": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.7.1.tgz", + "integrity": "sha512-c+8xjmqWSjI5/mEHVLbVSp0eh/z2UU8Ga+wqjbEUZUjm8uopYj1PaCAwZ7YgcAebyQrL/21GyjK6tFHKzuUdJQ==", + "dependencies": { + "@react-types/shared": "^3.17.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-types/layout": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/@react-types/layout/-/layout-3.3.6.tgz", + "integrity": "sha512-8YF7nb+0AtSDRj+rejMRS5djWpqAf5Q6sJzgdccn42JQxW7jvxoKqN0pCRPqpMzQqae5hOsYYpVNfuIHwUUkUA==", + "dependencies": { + "@react-types/shared": "^3.17.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-types/overlays": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.7.0.tgz", + "integrity": "sha512-LstucncZ8dM+xJYEijI1V6jGH20w5XO/T60r7JTrgQElMC86phPeoWkMTN4c2lsRikybolDbvXL6XsF76YO56A==", + "dependencies": { + "@react-types/shared": "^3.17.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-types/provider": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@react-types/provider/-/provider-3.6.0.tgz", + "integrity": "sha512-29+X5yMr1uHUc/BmFoyBqfWyMT3YGZJffaprtGGRQkCuwMbqoA8GI+rGJzNAMAD/1cPNo237PAGsi4NAup5tAQ==", + "dependencies": { + "@react-types/shared": "^3.17.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-types/shared": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.17.0.tgz", + "integrity": "sha512-1SNZ/RhVrrQ1e6yE0bPV7d5Sfp+Uv0dfUEhwF9MAu2v5msu7AMewnsiojKNA0QA6Ing1gpDLjHCxtayQfuxqcg==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-types/view": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@react-types/view/-/view-3.4.0.tgz", + "integrity": "sha512-lXDLbOYRFwo8hxrSDIYUmnxOGZlHBDVEFe1ZKAXJ+qPwntzxhzUeAuddTiMDhEETKgTclmlIsJnwz+HNv6dhSQ==", + "dependencies": { + "@react-types/shared": "^3.17.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@reduxjs/toolkit": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.3.tgz", + "integrity": "sha512-GU2TNBQVofL09VGmuSioNPQIu6Ml0YLf4EJhgj0AvBadRlCGzUWet8372LjvO4fqKZF2vH1xU0htAa7BrK9pZg==", + "dependencies": { + "immer": "^9.0.16", + "redux": "^4.2.0", + "redux-thunk": "^2.4.2", + "reselect": "^4.1.7" + }, + "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.4.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.4.0.tgz", + "integrity": "sha512-BJ9SxXux8zAg991UmT8slpwpsd31K1dHHbD3Ba4VzD+liLQ4WAMSxQp2d2ZPRPfN0jN2NPRowcSSoM7lCaF08Q==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@swc/core": { + "version": "1.3.41", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.41.tgz", + "integrity": "sha512-v6P2dfqJDpZ/7RXPvWge9oI6YgolDM0jtNhQZ2qdXrLBzaWQdDoBGBTJ8KN/nTgGhX3IkNvSB1fafXQ+nVnqAQ==", + "dev": true, + "hasInstallScript": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.3.41", + "@swc/core-darwin-x64": "1.3.41", + "@swc/core-linux-arm-gnueabihf": "1.3.41", + "@swc/core-linux-arm64-gnu": "1.3.41", + "@swc/core-linux-arm64-musl": "1.3.41", + "@swc/core-linux-x64-gnu": "1.3.41", + "@swc/core-linux-x64-musl": "1.3.41", + "@swc/core-win32-arm64-msvc": "1.3.41", + "@swc/core-win32-ia32-msvc": "1.3.41", + "@swc/core-win32-x64-msvc": "1.3.41" + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.3.41", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.41.tgz", + "integrity": "sha512-D4fybODToO/BvuP35bionDUrSuTVVr8eW+mApr1unOqb3mfiqOrVv0VP2fpWNRYiA+xMq+oBCB6KcGpL60HKWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.3.41", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.41.tgz", + "integrity": "sha512-0RoVyiPCnylf3TG77C3S86PRSmaq+SaYB4VDLJFz3qcEHz1pfP0LhyskhgX4wjQV1mveDzFEn1BVAuo0eOMwZA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.3.41", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.41.tgz", + "integrity": "sha512-mZW7GeY7Uw1nkKoWpx898ou20oCSt8MR+jAVuAhMjX+G4Zr0WWXYSigWNiRymhR6Q9KhyvoFpMckguSvYWmXsw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.3.41", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.41.tgz", + "integrity": "sha512-e91LGn+6KuLFw3sWk5swwGc/dP4tXs0mg3HrhjImRoofU02Bb9aHcj5zgrSO8ZByvDtm/Knn16h1ojxIMOFaxg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.3.41", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.41.tgz", + "integrity": "sha512-Q7hmrniLWsQ7zjtImGcjx1tl5/Qxpel+fC+OXTnGvAyyoGssSftIBlXMnqVLteL78zhxIPAzi+gizWAe5RGqrA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.3.41", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.41.tgz", + "integrity": "sha512-h4sv1sCfZQgRIwmykz8WPqVpbvHb13Qm3SsrbOudhAp2MuzpWzsgMP5hAEpdCP/nWreiCz3aoM6L8JeakRDq0g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.3.41", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.41.tgz", + "integrity": "sha512-Z7c26i38378d0NT/dcz8qPSAXm41lqhNzykdhKhI+95mA9m4pskP18T/0I45rmyx1ywifypu+Ip+SXmKeVSPgQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.3.41", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.41.tgz", + "integrity": "sha512-I0CYnPc+ZGc912YeN0TykIOf/Q7yJQHRwDuhewwD6RkbiSEaVfSux5pAmmdoKw2aGMSq+cwLmgPe9HYLRNz+4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.3.41", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.41.tgz", + "integrity": "sha512-EygN4CVDWF29/U2T5fXGfWyLvRbMd2hiUgkciAl7zHuyJ6nKl+kpodqV2A0Wd4sFtSNedU0gQEBEXEe7cqvmsA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.3.41", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.41.tgz", + "integrity": "sha512-Mfp8qD1hNwWWRy0ISdwQJu1g0UYoVTtuQlO0z3aGbXqL51ew9e56+8j3M1U9i95lXFyWkARgjDCcKkQi+WezyA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/helpers": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", + "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/eslint": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.3.tgz", + "integrity": "sha512-fa7GkppZVEByMWGbTtE5MbmXWJTVbrjjaS8K6uQj+XtuuUv1fsuPAxhygfqLmsb/Ufb3CV8deFCpiMfAgi00Sw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true, + "peer": 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/is-hotkey": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@types/is-hotkey/-/is-hotkey-0.1.7.tgz", + "integrity": "sha512-yB5C7zcOM7idwYZZ1wKQ3pTfjA9BbvFqRWvKB46GFddxnJtHwi/b9y84ykQtxQPg5qhdpg4Q/kWU3EGoCTmLzQ==" + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.191", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", + "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==" + }, + "node_modules/@types/node": { + "version": "18.15.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.5.tgz", + "integrity": "sha512-Ark2WDjjZO7GmvsyFFf81MXuGTA/d6oP38anyxWOL6EREyBKAxKoFHwBhaZxCfLRLpO8JgVXwqOwSwa7jRcjew==", + "devOptional": true, + "peer": 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/react": { + "version": "18.0.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", + "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-copy-to-clipboard": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.4.tgz", + "integrity": "sha512-otTJsJpofYAeaIeOwV5xBUGpo6exXG2HX7X4nseToCB2VgPEBxGBHCm/FecZ676doNR7HCSTVtmohxfG2b3/yQ==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-dom": { + "version": "18.0.11", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz", + "integrity": "sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==", + "devOptional": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-grid-layout": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/react-grid-layout/-/react-grid-layout-1.3.2.tgz", + "integrity": "sha512-ZzpBEOC1JTQ7MGe1h1cPKSLP4jSWuxc+yvT4TsAlEW9+EFPzAf8nxQfFd7ea9gL17Em7PbwJZAsiwfQQBUklZQ==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-is": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz", + "integrity": "sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "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/@vitejs/plugin-react-swc": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.2.0.tgz", + "integrity": "sha512-IcBoXL/mcH7JdQr/nfDlDwTdIaH8Rg7LpfQDF4nAht+juHWIuv6WhpKPCSfY4+zztAaB07qdBoFz1XCZsgo3pQ==", + "dev": true, + "dependencies": { + "@swc/core": "^1.3.35" + }, + "peerDependencies": { + "vite": "^4" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "peer": true + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "peer": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "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/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "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/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "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/axios": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz", + "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "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/babel-plugin-styled-components": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz", + "integrity": "sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-module-imports": "^7.16.0", + "babel-plugin-syntax-jsx": "^6.18.0", + "lodash": "^4.17.11", + "picomatch": "^2.3.0" + }, + "peerDependencies": { + "styled-components": ">= 2" + } + }, + "node_modules/babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==" + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "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/browserslist": { + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "peer": true + }, + "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/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001469", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001469.tgz", + "integrity": "sha512-Rcp7221ScNqQPP3W+lVOYDyjdR6dC+neEQCttoNr5bAyz54AboB4iwpnWgyi8P4YUsPybVzT4LgWiBbI3drL4g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ], + "peer": true + }, + "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/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/classnames": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", + "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" + }, + "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/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "peer": true + }, + "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/compute-scroll-into-view": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", + "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==" + }, + "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/copy-to-clipboard": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, + "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/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/direction": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/direction/-/direction-1.0.4.tgz", + "integrity": "sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ==", + "bin": { + "direction": "cli.js" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dnd-core": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-16.0.1.tgz", + "integrity": "sha512-HK294sl7tbw6F6IeuK16YSBUoorvHpY8RHO+9yFfaJyCDVb6n7PRcezrOEOa2SBCqiYpemh5Jx20ZcjKdFAVng==", + "dependencies": { + "@react-dnd/asap": "^5.0.1", + "@react-dnd/invariant": "^4.0.1", + "redux": "^4.2.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/electron-to-chromium": { + "version": "1.4.334", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.334.tgz", + "integrity": "sha512-laZ1odk+TRen6q0GeyQx/JEkpD3iSZT7ewopCpKqg9bTjP1l8XRfU3Bg20CFjNPZkp5+NDBl3iqd4o/kPO+Vew==", + "dev": true, + "peer": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "dev": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "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/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true, + "peer": true + }, + "node_modules/esbuild": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.11.tgz", + "integrity": "sha512-pAMImyokbWDtnA/ufPxjQg0fYo2DDuzAlqwnDvbXqHLphe+m80eF++perYKVm8LeTuj2zUuFXC+xgSVxyoHUdg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.11", + "@esbuild/android-arm64": "0.17.11", + "@esbuild/android-x64": "0.17.11", + "@esbuild/darwin-arm64": "0.17.11", + "@esbuild/darwin-x64": "0.17.11", + "@esbuild/freebsd-arm64": "0.17.11", + "@esbuild/freebsd-x64": "0.17.11", + "@esbuild/linux-arm": "0.17.11", + "@esbuild/linux-arm64": "0.17.11", + "@esbuild/linux-ia32": "0.17.11", + "@esbuild/linux-loong64": "0.17.11", + "@esbuild/linux-mips64el": "0.17.11", + "@esbuild/linux-ppc64": "0.17.11", + "@esbuild/linux-riscv64": "0.17.11", + "@esbuild/linux-s390x": "0.17.11", + "@esbuild/linux-x64": "0.17.11", + "@esbuild/netbsd-x64": "0.17.11", + "@esbuild/openbsd-x64": "0.17.11", + "@esbuild/sunos-x64": "0.17.11", + "@esbuild/win32-arm64": "0.17.11", + "@esbuild/win32-ia32": "0.17.11", + "@esbuild/win32-x64": "0.17.11" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "peer": 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-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, + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.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, + "peer": 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, + "peer": 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, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/exenv": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", + "integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==" + }, + "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==" + }, + "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/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/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/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "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.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "peer": true + }, + "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==", + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "peer": 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/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/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.19", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.19.tgz", + "integrity": "sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ==", + "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/intl-messageformat": { + "version": "10.3.3", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.3.3.tgz", + "integrity": "sha512-un/f07/g2e/3Q8e1ghDKET+el22Bi49M7O/rHxd597R+oLpPOMykSv5s51cABVfu3FZW+fea4hrzf2MHu1W4hw==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.14.3", + "@formatjs/fast-memoize": "2.0.1", + "@formatjs/icu-messageformat-parser": "2.3.0", + "tslib": "^2.4.0" + } + }, + "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.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-hotkey": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/is-hotkey/-/is-hotkey-0.1.8.tgz", + "integrity": "sha512-qs3NZ1INIS+H+yeo7cD9pDfwYV/jqRh1JG9S9zYrNudkoUQg7OL7ziXqRKu+InFjUIDoP2o6HIkLYMh1pcWgyQ==" + }, + "node_modules/is-lite": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/is-lite/-/is-lite-0.9.2.tgz", + "integrity": "sha512-qZuxbaEiKLOKhX4sbHLfhFN9iA3YciuZLb37/DfXCpWnz8p7qNL2lwkpxYMXfjlS8eEEjpULPZxAUI8N6FYvYQ==" + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "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/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "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/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/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/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "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/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, + "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/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "peer": true + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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==" + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "peer": true + }, + "node_modules/node-releases": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "dev": true, + "peer": 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/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-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/philliplm-react-modern-audio-player": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/philliplm-react-modern-audio-player/-/philliplm-react-modern-audio-player-1.4.6.tgz", + "integrity": "sha512-2C/1lpQJmD0gWJMVt6k/QNZoakxHwxGhRFyw17OVAwbpXmptisr9aHDzT/VPFKoIr5qj+y1WajJ4lnghbfzx9Q==", + "dependencies": { + "@react-spectrum/layout": "^3.3.1", + "@react-spectrum/provider": "^3.4.1", + "@react-spectrum/theme-default": "^3.3.1", + "@react-spectrum/view": "^3.2.1", + "classnames": "^2.3.1", + "react-icons": "^4.4.0", + "styled-components": "^5.3.5", + "wavesurfer.js": "^6.2.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "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==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", + "deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/prettier": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.6.tgz", + "integrity": "sha512-mtuzdiBbHwPEgl7NxWlqOkithPyp4VN93V7VeHVWBF+ad3I5avc0RVDT4oImXQy9H/AqxA2NSQH8pSxHW6FYbQ==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "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/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "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/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.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-copy-to-clipboard": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz", + "integrity": "sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==", + "dependencies": { + "copy-to-clipboard": "^3.3.1", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": "^15.3.0 || 16 || 17 || 18" + } + }, + "node_modules/react-dnd": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/react-dnd/-/react-dnd-16.0.1.tgz", + "integrity": "sha512-QeoM/i73HHu2XF9aKksIUuamHPDvRglEwdHL4jsp784BgUuWcg6mzfxT0QDdQz8Wj0qyRKx2eMg8iZtWvU4E2Q==", + "dependencies": { + "@react-dnd/invariant": "^4.0.1", + "@react-dnd/shallowequal": "^4.0.1", + "dnd-core": "^16.0.1", + "fast-deep-equal": "^3.1.3", + "hoist-non-react-statics": "^3.3.2" + }, + "peerDependencies": { + "@types/hoist-non-react-statics": ">= 3.3.1", + "@types/node": ">= 12", + "@types/react": ">= 16", + "react": ">= 16.14" + }, + "peerDependenciesMeta": { + "@types/hoist-non-react-statics": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-dnd-html5-backend": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/react-dnd-html5-backend/-/react-dnd-html5-backend-16.0.1.tgz", + "integrity": "sha512-Wu3dw5aDJmOGw8WjH1I1/yTH+vlXEL4vmjk5p+MHxP8HuHJS1lAGeIdG/hze1AvNeXWo/JgULV87LyQOr+r5jw==", + "dependencies": { + "dnd-core": "^16.0.1" + } + }, + "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-floater": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/react-floater/-/react-floater-0.7.6.tgz", + "integrity": "sha512-tt/15k/HpaShbtvWCwsQYLR+ebfUuYbl+oAUJ3DcEDkgYKeUcSkDey2PdAIERdVwzdFZANz47HbwoET2/Rduxg==", + "dependencies": { + "deepmerge": "^4.2.2", + "exenv": "^1.2.2", + "is-lite": "^0.8.2", + "popper.js": "^1.16.0", + "prop-types": "^15.8.1", + "react-proptype-conditional-require": "^1.0.4", + "tree-changes": "^0.9.1" + }, + "peerDependencies": { + "react": "15 - 18", + "react-dom": "15 - 18" + } + }, + "node_modules/react-floater/node_modules/is-lite": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/is-lite/-/is-lite-0.8.2.tgz", + "integrity": "sha512-JZfH47qTsslwaAsqbMI3Q6HNNjUuq6Cmzzww50TdP5Esb6e1y2sK2UAaZZuzfAzpoI2AkxoPQapZdlDuP6Vlsw==" + }, + "node_modules/react-grid-layout": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/react-grid-layout/-/react-grid-layout-1.3.4.tgz", + "integrity": "sha512-sB3rNhorW77HUdOjB4JkelZTdJGQKuXLl3gNg+BI8gJkTScspL1myfZzW/EM0dLEn+1eH+xW+wNqk0oIM9o7cw==", + "dependencies": { + "clsx": "^1.1.1", + "lodash.isequal": "^4.0.0", + "prop-types": "^15.8.1", + "react-draggable": "^4.0.0", + "react-resizable": "^3.0.4" + }, + "peerDependencies": { + "react": ">= 16.3.0", + "react-dom": ">= 16.3.0" + } + }, + "node_modules/react-icons": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.8.0.tgz", + "integrity": "sha512-N6+kOLcihDiAnj5Czu637waJqSnwlMNROzVZMhfX68V/9bu9qHaMIJC4UdozWoOk57gahFCNHwVvWzm0MTzRjg==", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-intersection-observer": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.4.3.tgz", + "integrity": "sha512-WNRqMQvKpupr6MzecAQI0Pj0+JQong307knLP4g/nBex7kYfIaZsPpXaIhKHR+oV8z+goUbH9e10j6lGRnTzlQ==", + "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-joyride": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/react-joyride/-/react-joyride-2.5.4.tgz", + "integrity": "sha512-CLV1Ju79iRKIP/KqsEX05nSxMBzT41BhPAyNrTdBQWEYAkpyo6iiCPelk6No2W8iPgw373JKk2cK7AQ5Q3lFew==", + "dependencies": { + "deepmerge": "^4.3.1", + "exenv": "^1.2.2", + "is-lite": "^0.9.2", + "prop-types": "^15.8.1", + "react-floater": "^0.7.6", + "react-is": "^16.13.1", + "scroll": "^3.0.1", + "scrollparent": "^2.0.1", + "tree-changes": "^0.9.2" + }, + "peerDependencies": { + "react": "15 - 18", + "react-dom": "15 - 18" + } + }, + "node_modules/react-joyride/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/react-masonry-css": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/react-masonry-css/-/react-masonry-css-1.0.16.tgz", + "integrity": "sha512-KSW0hR2VQmltt/qAa3eXOctQDyOu7+ZBevtKgpNDSzT7k5LA/0XntNa9z9HKCdz3QlxmJHglTZ18e4sX4V8zZQ==", + "peerDependencies": { + "react": ">=16.0.0" + } + }, + "node_modules/react-proptype-conditional-require": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/react-proptype-conditional-require/-/react-proptype-conditional-require-1.0.4.tgz", + "integrity": "sha512-nopsRn7KnGgazBe2c3H2+Kf+Csp6PGDRLiBkYEDMKY8o/EIgft/WnIm/OnAKTawZiLnJXHAqhpFBddvs6NiXlw==" + }, + "node_modules/react-redux": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.5.tgz", + "integrity": "sha512-Q2f6fCKxPFpkXt1qNRZdEDLlScsDWyrgSj0mliK59qU6W5gvBiKkdMEG2lJzhd1rCctf0hb6EtePPLZ2e0m1uw==", + "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": { + "@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" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/react-resizable": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/react-resizable/-/react-resizable-3.0.5.tgz", + "integrity": "sha512-vKpeHhI5OZvYn82kXOs1bC8aOXktGU5AmKAgaZS4F5JPburCtbmDPqE7Pzp+1kN4+Wb81LlF33VpGwWwtXem+w==", + "dependencies": { + "prop-types": "15.x", + "react-draggable": "^4.0.3" + }, + "peerDependencies": { + "react": ">= 16.3" + } + }, + "node_modules/react-resize-detector": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-8.0.4.tgz", + "integrity": "sha512-ln9pMAob8y8mc9UI4aZuuWFiyMqBjnTs/sxe9Vs9dPXUjwCTeKK1FP8I75ufnb/2mEEZXG6wOo/fjMcBRRuAXw==", + "dependencies": { + "lodash": "^4.17.21" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-router": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.9.0.tgz", + "integrity": "sha512-51lKevGNUHrt6kLuX3e/ihrXoXCa9ixY/nVWRLlob4r/l0f45x3SzBvYJe3ctleLUQQ5fVa4RGgJOTH7D9Umhw==", + "dependencies": { + "@remix-run/router": "1.4.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.9.0.tgz", + "integrity": "sha512-/seUAPY01VAuwkGyVBPCn1OXfVbaWGGu4QN9uj0kCPcTyNYgL1ldZpxZUpRU7BLheKQI4Twtl/OW2nHRF1u26Q==", + "dependencies": { + "@remix-run/router": "1.4.0", + "react-router": "6.9.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-toastify": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.2.tgz", + "integrity": "sha512-PBfzXO5jMGEtdYR5jxrORlNZZe/EuOkwvwKijMatsZZm8IZwLj01YvobeJYNjFcA6uy6CVrx2fzL9GWbhWPTDA==", + "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/react-virtuoso": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/react-virtuoso/-/react-virtuoso-4.3.3.tgz", + "integrity": "sha512-x0DeGmVAVOVaTXRMG7jzrHBwK7+dkt7n0G3tNmZXphQUBgkVBYuZoaJltQeZGFN42++3XvrgwStKCtmzgMJ0lA==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">=16 || >=17 || >= 18", + "react-dom": ">=16 || >=17 || >= 18" + } + }, + "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/reselect": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.7.tgz", + "integrity": "sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A==" + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dependencies": { + "is-core-module": "^2.9.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/rollup": { + "version": "3.19.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.19.1.tgz", + "integrity": "sha512-lAbrdN7neYCg/8WaoWn/ckzCtz+jr70GFfYdlf50OF7387HTg+wiuiqJRFYawwSPpqfqDNYqK7smY/ks2iAudg==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "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" + } + ], + "peer": true + }, + "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/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/scroll": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scroll/-/scroll-3.0.1.tgz", + "integrity": "sha512-pz7y517OVls1maEzlirKO5nPYle9AXsFzTMNJrRGmT951mzpIBy7sNHOg5o/0MQd/NqliCiWnAi0kZneMPFLcg==" + }, + "node_modules/scroll-into-view-if-needed": { + "version": "2.2.31", + "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz", + "integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==", + "dependencies": { + "compute-scroll-into-view": "^1.0.20" + } + }, + "node_modules/scrollparent": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/scrollparent/-/scrollparent-2.0.1.tgz", + "integrity": "sha512-HSdN78VMvFCSGCkh0oYX/tY4R3P1DW61f8+TeZZ4j2VLgfwvw0bpRSOv4PCVKisktIwbzHCfZsx+rLbbDBqIBA==" + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "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/slate": { + "version": "0.91.4", + "resolved": "https://registry.npmjs.org/slate/-/slate-0.91.4.tgz", + "integrity": "sha512-aUJ3rpjrdi5SbJ5G1Qjr3arytfRkEStTmHjBfWq2A2Q8MybacIzkScSvGJjQkdTk3djCK9C9SEOt39sSeZFwTw==", + "dependencies": { + "immer": "^9.0.6", + "is-plain-object": "^5.0.0", + "tiny-warning": "^1.0.3" + } + }, + "node_modules/slate-history": { + "version": "0.86.0", + "resolved": "https://registry.npmjs.org/slate-history/-/slate-history-0.86.0.tgz", + "integrity": "sha512-OxObL9tbhgwvSlnKSCpGIh7wnuaqvOj5jRExGjEyCU2Ke8ctf22HjT+jw7GEi9ttLzNTUmTEU3YIzqKGeqN+og==", + "dependencies": { + "is-plain-object": "^5.0.0" + }, + "peerDependencies": { + "slate": ">=0.65.3" + } + }, + "node_modules/slate-react": { + "version": "0.91.11", + "resolved": "https://registry.npmjs.org/slate-react/-/slate-react-0.91.11.tgz", + "integrity": "sha512-2nS29rc2kuTTJrEUOXGyTkFATmTEw/R9KuUXadUYiz+UVwuFOUMnBKuwJWyuIBOsFipS+06SkIayEf5CKdARRQ==", + "dependencies": { + "@juggle/resize-observer": "^3.4.0", + "@types/is-hotkey": "^0.1.1", + "@types/lodash": "^4.14.149", + "direction": "^1.0.3", + "is-hotkey": "^0.1.6", + "is-plain-object": "^5.0.0", + "lodash": "^4.17.4", + "scroll-into-view-if-needed": "^2.2.20", + "tiny-invariant": "1.0.6" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0", + "slate": ">=0.65.3" + } + }, + "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.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/styled-components": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.9.tgz", + "integrity": "sha512-Aj3kb13B75DQBo2oRwRa/APdB5rSmwUfN5exyarpX+x/tlM/rwZA2vVk2vQgVSP6WKaZJHWwiFrzgHt+CLtB4A==", + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/traverse": "^7.4.5", + "@emotion/is-prop-valid": "^1.1.0", + "@emotion/stylis": "^0.8.4", + "@emotion/unitless": "^0.7.4", + "babel-plugin-styled-components": ">= 1.12.0", + "css-to-react-native": "^3.0.0", + "hoist-non-react-statics": "^3.0.0", + "shallowequal": "^1.1.0", + "supports-color": "^5.5.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0", + "react-is": ">= 16.8.0" + } + }, + "node_modules/styled-components/node_modules/@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + }, + "node_modules/stylis": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", + "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" + }, + "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/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.16.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.6.tgz", + "integrity": "sha512-IBZ+ZQIA9sMaXmRZCUMDjNH0D5AQQfdn4WUjHL0+1lF4TP1IHRJbrhb6fNaXWikrYQTSkb7SLxkeXAiy1p7mbg==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz", + "integrity": "sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/tiny-invariant": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.6.tgz", + "integrity": "sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA==" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "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/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" + }, + "node_modules/tree-changes": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/tree-changes/-/tree-changes-0.9.3.tgz", + "integrity": "sha512-vvvS+O6kEeGRzMglTKbc19ltLWNtmNt1cpBoSYLj/iEcPVvpJasemKOlxBrmZaCtDJoF+4bwv3m01UKYi8mukQ==", + "dependencies": { + "@gilbarbara/deep-equal": "^0.1.1", + "is-lite": "^0.8.2" + } + }, + "node_modules/tree-changes/node_modules/is-lite": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/is-lite/-/is-lite-0.8.2.tgz", + "integrity": "sha512-JZfH47qTsslwaAsqbMI3Q6HNNjUuq6Cmzzww50TdP5Esb6e1y2sK2UAaZZuzfAzpoI2AkxoPQapZdlDuP6Vlsw==" + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "peer": true, + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "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": "4.2.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.0.tgz", + "integrity": "sha512-AbDTyzzwuKoRtMIRLGNxhLRuv1FpRgdIw+1y6AQG73Q5+vtecmvzKo/yk8X/vrHDpETRTx01ABijqUHIzBXi0g==", + "dev": true, + "dependencies": { + "esbuild": "^0.17.5", + "postcss": "^8.4.21", + "resolve": "^1.22.1", + "rollup": "^3.18.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wavesurfer.js": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/wavesurfer.js/-/wavesurfer.js-6.6.2.tgz", + "integrity": "sha512-aPAU4OADQsyH8mIw2nXmoni8KHo8s1f1bd5ZUrxhN4P/VMWd+oPDqEwA01XPSEfasAJW6mZ/EHQ2bZ9nOWRrNw==" + }, + "node_modules/webpack": { + "version": "5.76.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.2.tgz", + "integrity": "sha512-Th05ggRm23rVzEOlX8y67NkYCHa9nTNcwHPBhdg+lKG+mtiW7XgggjAeeLnADAe7mLjJ6LUNfgHAuRRh+Z6J7w==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/worker-loader": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/worker-loader/-/worker-loader-3.0.8.tgz", + "integrity": "sha512-XQyQkIFeRVC7f7uRhFdNMe/iJOdO6zxAaR3EWbDp45v3mDhrTi+++oswKNxShUNjPC/1xUp5DB29YKLhFo129g==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "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" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/generator": { + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.3.tgz", + "integrity": "sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==", + "requires": { + "@babel/types": "^7.21.3", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" + }, + "@babel/helper-function-name": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "requires": { + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.3.tgz", + "integrity": "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==" + }, + "@babel/runtime": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", + "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, + "@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + } + }, + "@babel/traverse": { + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.3.tgz", + "integrity": "sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.21.3", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.21.3", + "@babel/types": "^7.21.3", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.3.tgz", + "integrity": "sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==", + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "@emotion/babel-plugin": { + "version": "11.10.6", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.6.tgz", + "integrity": "sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==", + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/serialize": "^1.1.1", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.1.3" + } + }, + "@emotion/cache": { + "version": "11.10.5", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.5.tgz", + "integrity": "sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==", + "requires": { + "@emotion/memoize": "^0.8.0", + "@emotion/sheet": "^1.2.1", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "stylis": "4.1.3" + } + }, + "@emotion/hash": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", + "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" + }, + "@emotion/is-prop-valid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", + "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", + "requires": { + "@emotion/memoize": "^0.8.0" + } + }, + "@emotion/memoize": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", + "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" + }, + "@emotion/react": { + "version": "11.10.6", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.6.tgz", + "integrity": "sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==", + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.6", + "@emotion/cache": "^11.10.5", + "@emotion/serialize": "^1.1.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "hoist-non-react-statics": "^3.3.1" + } + }, + "@emotion/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", + "requires": { + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/unitless": "^0.8.0", + "@emotion/utils": "^1.2.0", + "csstype": "^3.0.2" + } + }, + "@emotion/sheet": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.1.tgz", + "integrity": "sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==" + }, + "@emotion/styled": { + "version": "11.10.6", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.6.tgz", + "integrity": "sha512-OXtBzOmDSJo5Q0AFemHCfl+bUueT8BIcPSxu0EGTpGk6DmI5dnhSzQANm1e1ze0YZL7TDyAyy6s/b/zmGOS3Og==", + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.6", + "@emotion/is-prop-valid": "^1.2.0", + "@emotion/serialize": "^1.1.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0" + } + }, + "@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" + }, + "@emotion/unitless": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", + "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + }, + "@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", + "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", + "requires": {} + }, + "@emotion/utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", + "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" + }, + "@emotion/weak-memoize": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", + "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" + }, + "@esbuild/android-arm": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.11.tgz", + "integrity": "sha512-CdyX6sRVh1NzFCsf5vw3kULwlAhfy9wVt8SZlrhQ7eL2qBjGbFhRBWkkAzuZm9IIEOCKJw4DXA6R85g+qc8RDw==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.11.tgz", + "integrity": "sha512-QnK4d/zhVTuV4/pRM4HUjcsbl43POALU2zvBynmrrqZt9LPcLA3x1fTZPBg2RRguBQnJcnU059yKr+bydkntjg==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.11.tgz", + "integrity": "sha512-3PL3HKtsDIXGQcSCKtWD/dy+mgc4p2Tvo2qKgKHj9Yf+eniwFnuoQ0OUhlSfAEpKAFzF9N21Nwgnap6zy3L3MQ==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.11.tgz", + "integrity": "sha512-pJ950bNKgzhkGNO3Z9TeHzIFtEyC2GDQL3wxkMApDEghYx5Qers84UTNc1bAxWbRkuJOgmOha5V0WUeh8G+YGw==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.11.tgz", + "integrity": "sha512-iB0dQkIHXyczK3BZtzw1tqegf0F0Ab5texX2TvMQjiJIWXAfM4FQl7D909YfXWnB92OQz4ivBYQ2RlxBJrMJOw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.11.tgz", + "integrity": "sha512-7EFzUADmI1jCHeDRGKgbnF5sDIceZsQGapoO6dmw7r/ZBEKX7CCDnIz8m9yEclzr7mFsd+DyasHzpjfJnmBB1Q==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.11.tgz", + "integrity": "sha512-iPgenptC8i8pdvkHQvXJFzc1eVMR7W2lBPrTE6GbhR54sLcF42mk3zBOjKPOodezzuAz/KSu8CPyFSjcBMkE9g==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.11.tgz", + "integrity": "sha512-M9iK/d4lgZH0U5M1R2p2gqhPV/7JPJcRz+8O8GBKVgqndTzydQ7B2XGDbxtbvFkvIs53uXTobOhv+RyaqhUiMg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.11.tgz", + "integrity": "sha512-Qxth3gsWWGKz2/qG2d5DsW/57SeA2AmpSMhdg9TSB5Svn2KDob3qxfQSkdnWjSd42kqoxIPy3EJFs+6w1+6Qjg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.11.tgz", + "integrity": "sha512-dB1nGaVWtUlb/rRDHmuDQhfqazWE0LMro/AIbT2lWM3CDMHJNpLckH+gCddQyhhcLac2OYw69ikUMO34JLt3wA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.11.tgz", + "integrity": "sha512-aCWlq70Q7Nc9WDnormntGS1ar6ZFvUpqr8gXtO+HRejRYPweAFQN615PcgaSJkZjhHp61+MNLhzyVALSF2/Q0g==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.11.tgz", + "integrity": "sha512-cGeGNdQxqY8qJwlYH1BP6rjIIiEcrM05H7k3tR7WxOLmD1ZxRMd6/QIOWMb8mD2s2YJFNRuNQ+wjMhgEL2oCEw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.11.tgz", + "integrity": "sha512-BdlziJQPW/bNe0E8eYsHB40mYOluS+jULPCjlWiHzDgr+ZBRXPtgMV1nkLEGdpjrwgmtkZHEGEPaKdS/8faLDA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.11.tgz", + "integrity": "sha512-MDLwQbtF+83oJCI1Cixn68Et/ME6gelmhssPebC40RdJaect+IM+l7o/CuG0ZlDs6tZTEIoxUe53H3GmMn8oMA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.11.tgz", + "integrity": "sha512-4N5EMESvws0Ozr2J94VoUD8HIRi7X0uvUv4c0wpTHZyZY9qpaaN7THjosdiW56irQ4qnJ6Lsc+i+5zGWnyqWqQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.11.tgz", + "integrity": "sha512-rM/v8UlluxpytFSmVdbCe1yyKQd/e+FmIJE2oPJvbBo+D0XVWi1y/NQ4iTNx+436WmDHQBjVLrbnAQLQ6U7wlw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.11.tgz", + "integrity": "sha512-4WaAhuz5f91h3/g43VBGdto1Q+X7VEZfpcWGtOFXnggEuLvjV+cP6DyLRU15IjiU9fKLLk41OoJfBFN5DhPvag==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.11.tgz", + "integrity": "sha512-UBj135Nx4FpnvtE+C8TWGp98oUgBcmNmdYgl5ToKc0mBHxVVqVE7FUS5/ELMImOp205qDAittL6Ezhasc2Ev/w==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.11.tgz", + "integrity": "sha512-1/gxTifDC9aXbV2xOfCbOceh5AlIidUrPsMpivgzo8P8zUtczlq1ncFpeN1ZyQJ9lVs2hILy1PG5KPp+w8QPPg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.11.tgz", + "integrity": "sha512-vtSfyx5yRdpiOW9yp6Ax0zyNOv9HjOAw8WaZg3dF5djEHKKm3UnoohftVvIJtRh0Ec7Hso0RIdTqZvPXJ7FdvQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.11.tgz", + "integrity": "sha512-GFPSLEGQr4wHFTiIUJQrnJKZhZjjq4Sphf+mM76nQR6WkQn73vm7IsacmBRPkALfpOCHsopSvLgqdd4iUW2mYw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.11.tgz", + "integrity": "sha512-N9vXqLP3eRL8BqSy8yn4Y98cZI2pZ8fyuHx6lKjiG2WABpT2l01TXdzq5Ma2ZUBzfB7tx5dXVhge8X9u0S70ZQ==", + "dev": true, + "optional": true + }, + "@formatjs/ecma402-abstract": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.14.3.tgz", + "integrity": "sha512-SlsbRC/RX+/zg4AApWIFNDdkLtFbkq3LNoZWXZCE/nHVKqoIJyaoQyge/I0Y38vLxowUn9KTtXgusLD91+orbg==", + "requires": { + "@formatjs/intl-localematcher": "0.2.32", + "tslib": "^2.4.0" + } + }, + "@formatjs/fast-memoize": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.0.1.tgz", + "integrity": "sha512-M2GgV+qJn5WJQAYewz7q2Cdl6fobQa69S1AzSM2y0P68ZDbK5cWrJIcPCO395Of1ksftGZoOt4LYCO/j9BKBSA==", + "requires": { + "tslib": "^2.4.0" + } + }, + "@formatjs/icu-messageformat-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.3.0.tgz", + "integrity": "sha512-xqtlqYAbfJDF4b6e4O828LBNOWXrFcuYadqAbYORlDRwhyJ2bH+xpUBPldZbzRGUN2mxlZ4Ykhm7jvERtmI8NQ==", + "requires": { + "@formatjs/ecma402-abstract": "1.14.3", + "@formatjs/icu-skeleton-parser": "1.3.18", + "tslib": "^2.4.0" + } + }, + "@formatjs/icu-skeleton-parser": { + "version": "1.3.18", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.18.tgz", + "integrity": "sha512-ND1ZkZfmLPcHjAH1sVpkpQxA+QYfOX3py3SjKWMUVGDow18gZ0WPqz3F+pJLYQMpS2LnnQ5zYR2jPVYTbRwMpg==", + "requires": { + "@formatjs/ecma402-abstract": "1.14.3", + "tslib": "^2.4.0" + } + }, + "@formatjs/intl-localematcher": { + "version": "0.2.32", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.32.tgz", + "integrity": "sha512-k/MEBstff4sttohyEpXxCmC3MqbUn9VvHGlZ8fauLzkbwXmVrEeyzS+4uhrvAk9DWU9/7otYWxyDox4nT/KVLQ==", + "requires": { + "tslib": "^2.4.0" + } + }, + "@gilbarbara/deep-equal": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@gilbarbara/deep-equal/-/deep-equal-0.1.2.tgz", + "integrity": "sha512-jk+qzItoEb0D0xSSmrKDDzf9sheQj/BAPxlgNxgmOaA3mxpUa6ndJLYGZKsJnIVEQSD8zcTbyILz7I0HcnBCRA==" + }, + "@internationalized/date": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.1.0.tgz", + "integrity": "sha512-wjeur7K4AecT+YwoBmBXQ/+n5lP69tuZc34hw09s44EozZK7FZHSyfPvRp5/xEb2D6abLboskDY4jG+Nt0TNUQ==", + "requires": { + "@swc/helpers": "^0.4.14" + } + }, + "@internationalized/message": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@internationalized/message/-/message-3.1.0.tgz", + "integrity": "sha512-Oo5m70FcBdADf7G8NkUffVSfuCdeAYVfsvNjZDi9ELpjvkc4YNJVTHt/NyTI9K7FgAVoELxiP9YmN0sJ+HNHYQ==", + "requires": { + "@swc/helpers": "^0.4.14", + "intl-messageformat": "^10.1.0" + } + }, + "@internationalized/number": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.2.0.tgz", + "integrity": "sha512-GUXkhXSX1Ee2RURnzl+47uvbOxnlMnvP9Er+QePTjDjOPWuunmLKlEkYkEcLiiJp7y4l9QxGDLOlVr8m69LS5w==", + "requires": { + "@swc/helpers": "^0.4.14" + } + }, + "@internationalized/string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.1.0.tgz", + "integrity": "sha512-TJQKiyUb+wyAfKF59UNeZ/kELMnkxyecnyPCnBI1ma4NaXReJW+7Cc2mObXAqraIBJUVv7rgI46RLKrLgi35ng==", + "requires": { + "@swc/helpers": "^0.4.14" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "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==" + }, + "@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==" + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@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==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@juggle/resize-observer": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", + "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==" + }, + "@mui/base": { + "version": "5.0.0-alpha.121", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.121.tgz", + "integrity": "sha512-8nJRY76UqlJV+q/Yzo0tgGfPWEOa+4N9rjO81fMmcJqP0I6m54hLDXsjvMg4tvelY5eKHXUK6Tb7en+GHfTqZA==", + "requires": { + "@babel/runtime": "^7.21.0", + "@emotion/is-prop-valid": "^1.2.0", + "@mui/types": "^7.2.3", + "@mui/utils": "^5.11.13", + "@popperjs/core": "^2.11.6", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + } + }, + "@mui/core-downloads-tracker": { + "version": "5.11.13", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.11.13.tgz", + "integrity": "sha512-lx+GXBR9h/ApZsEP728tl0pyZyuajto+VnBgsoAzw1d5+CbmOo8ZWieKwVUGxZlPT1wMYNUYS5NtKzCli0xYjw==" + }, + "@mui/icons-material": { + "version": "5.11.11", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.11.tgz", + "integrity": "sha512-Eell3ADmQVE8HOpt/LZ3zIma8JSvPh3XgnhwZLT0k5HRqZcd6F/QDHc7xsWtgz09t+UEFvOYJXjtrwKmLdwwpw==", + "requires": { + "@babel/runtime": "^7.21.0" + } + }, + "@mui/material": { + "version": "5.11.13", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.11.13.tgz", + "integrity": "sha512-2CnSj43F+159LbGmTLLQs5xbGYMiYlpTByQhP7c7cMX6opbScctBFE1PuyElpAmwW8Ag9ysfZH1d1MFAmJQkjg==", + "requires": { + "@babel/runtime": "^7.21.0", + "@mui/base": "5.0.0-alpha.121", + "@mui/core-downloads-tracker": "^5.11.13", + "@mui/system": "^5.11.13", + "@mui/types": "^7.2.3", + "@mui/utils": "^5.11.13", + "@types/react-transition-group": "^4.4.5", + "clsx": "^1.2.1", + "csstype": "^3.1.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + } + }, + "@mui/private-theming": { + "version": "5.11.13", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.11.13.tgz", + "integrity": "sha512-PJnYNKzW5LIx3R+Zsp6WZVPs6w5sEKJ7mgLNnUXuYB1zo5aX71FVLtV7geyPXRcaN2tsoRNK7h444ED0t7cIjA==", + "requires": { + "@babel/runtime": "^7.21.0", + "@mui/utils": "^5.11.13", + "prop-types": "^15.8.1" + } + }, + "@mui/styled-engine": { + "version": "5.11.11", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.11.11.tgz", + "integrity": "sha512-wV0UgW4lN5FkDBXefN8eTYeuE9sjyQdg5h94vtwZCUamGQEzmCOtir4AakgmbWMy0x8OLjdEUESn9wnf5J9MOg==", + "requires": { + "@babel/runtime": "^7.21.0", + "@emotion/cache": "^11.10.5", + "csstype": "^3.1.1", + "prop-types": "^15.8.1" + } + }, + "@mui/system": { + "version": "5.11.13", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.11.13.tgz", + "integrity": "sha512-OWP0Alp6C8ufnGm9+CZcl3d+OoRXL2PnrRT5ohaMLxvGL9OfNcL2t4JOjMmA0k1UAGd6E/Ygbu5lEPrZSDlvCg==", + "requires": { + "@babel/runtime": "^7.21.0", + "@mui/private-theming": "^5.11.13", + "@mui/styled-engine": "^5.11.11", + "@mui/types": "^7.2.3", + "@mui/utils": "^5.11.13", + "clsx": "^1.2.1", + "csstype": "^3.1.1", + "prop-types": "^15.8.1" + } + }, + "@mui/types": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.3.tgz", + "integrity": "sha512-tZ+CQggbe9Ol7e/Fs5RcKwg/woU+o8DCtOnccX6KmbBc7YrfqMYEYuaIcXHuhpT880QwNkZZ3wQwvtlDFA2yOw==", + "requires": {} + }, + "@mui/utils": { + "version": "5.11.13", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.11.13.tgz", + "integrity": "sha512-5ltA58MM9euOuUcnvwFJqpLdEugc9XFsRR8Gt4zZNb31XzMfSKJPR4eumulyhsOTK1rWf7K4D63NKFPfX0AxqA==", + "requires": { + "@babel/runtime": "^7.21.0", + "@types/prop-types": "^15.7.5", + "@types/react-is": "^16.7.1 || ^17.0.0", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + } + }, + "@popperjs/core": { + "version": "2.11.6", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", + "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==" + }, + "@react-aria/focus": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.11.0.tgz", + "integrity": "sha512-yPuWs9bAR9CMfIwyOPm2oXLPF19gNkUqW+ozSPhWbLMTEa8Ma09eHW1br4xbN+4ONOm/dCJsIkxTNPUkiLdQoA==", + "requires": { + "@react-aria/interactions": "^3.14.0", + "@react-aria/utils": "^3.15.0", + "@react-types/shared": "^3.17.0", + "@swc/helpers": "^0.4.14", + "clsx": "^1.1.1" + } + }, + "@react-aria/i18n": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.7.0.tgz", + "integrity": "sha512-PZCWmhO9mJvelwiYlsXLY6W4L2o+oza3xnDx0cZDVqp/Hf+OwMAPHWtZsFRTKdjk4TaOPB/ISc9HknWn6UpY4w==", + "requires": { + "@internationalized/date": "^3.1.0", + "@internationalized/message": "^3.1.0", + "@internationalized/number": "^3.2.0", + "@internationalized/string": "^3.1.0", + "@react-aria/ssr": "^3.5.0", + "@react-aria/utils": "^3.15.0", + "@react-types/shared": "^3.17.0", + "@swc/helpers": "^0.4.14" + } + }, + "@react-aria/interactions": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.14.0.tgz", + "integrity": "sha512-e1Tkr0UTuYFpV21PJrXy7jEY542Vl+C2Fo70oukZ1fN+wtfQkzodsTIzyepXb7kVMGmC34wDisMJUrksVkfY2w==", + "requires": { + "@react-aria/utils": "^3.15.0", + "@react-types/shared": "^3.17.0", + "@swc/helpers": "^0.4.14" + } + }, + "@react-aria/overlays": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.13.0.tgz", + "integrity": "sha512-hRZyhAYzrlCcEWQ2k2jP24b0wc5/355Xl5w5FZHRmPeU1U4XlFwKX/eFlBs/li9Sprm1bTDXrCY480Kl6UsKDA==", + "requires": { + "@react-aria/focus": "^3.11.0", + "@react-aria/i18n": "^3.7.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/ssr": "^3.5.0", + "@react-aria/utils": "^3.15.0", + "@react-aria/visually-hidden": "^3.7.0", + "@react-stately/overlays": "^3.5.0", + "@react-types/button": "^3.7.1", + "@react-types/overlays": "^3.7.0", + "@react-types/shared": "^3.17.0", + "@swc/helpers": "^0.4.14" + } + }, + "@react-aria/ssr": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.5.0.tgz", + "integrity": "sha512-h0MJdSWOd1qObLnJ8mprU31wI8tmKFJMuwT22MpWq6psisOOZaga6Ml4u6Ee6M6duWWISjXvqO4Sb/J0PBA+nQ==", + "requires": { + "@swc/helpers": "^0.4.14" + } + }, + "@react-aria/utils": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.15.0.tgz", + "integrity": "sha512-aJZBG++iz1UwTW5gXFaHicKju4p0MPhAyBTcf2awHYWeTUUslDjJcEnNg7kjBYZBOrOSlA2rAt7/7C5CCURQPg==", + "requires": { + "@react-aria/ssr": "^3.5.0", + "@react-stately/utils": "^3.6.0", + "@react-types/shared": "^3.17.0", + "@swc/helpers": "^0.4.14", + "clsx": "^1.1.1" + } + }, + "@react-aria/visually-hidden": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.7.0.tgz", + "integrity": "sha512-v/0ujJ67H6LjwY8J7mIGPVB1K8suBArLV+w8UGdX/wFXRL7H4r2fiqlrwAElWSmNbhDQl5BDm/Zh/ub9jB9yzA==", + "requires": { + "@react-aria/interactions": "^3.14.0", + "@react-aria/utils": "^3.15.0", + "@react-types/shared": "^3.17.0", + "@swc/helpers": "^0.4.14", + "clsx": "^1.1.1" + } + }, + "@react-dnd/asap": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@react-dnd/asap/-/asap-5.0.2.tgz", + "integrity": "sha512-WLyfoHvxhs0V9U+GTsGilGgf2QsPl6ZZ44fnv0/b8T3nQyvzxidxsg/ZltbWssbsRDlYW8UKSQMTGotuTotZ6A==" + }, + "@react-dnd/invariant": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@react-dnd/invariant/-/invariant-4.0.2.tgz", + "integrity": "sha512-xKCTqAK/FFauOM9Ta2pswIyT3D8AQlfrYdOi/toTPEhqCuAs1v5tcJ3Y08Izh1cJ5Jchwy9SeAXmMg6zrKs2iw==" + }, + "@react-dnd/shallowequal": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@react-dnd/shallowequal/-/shallowequal-4.0.2.tgz", + "integrity": "sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==" + }, + "@react-spectrum/layout": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-spectrum/layout/-/layout-3.5.0.tgz", + "integrity": "sha512-Yjy0uvGUHjczl44PQlMqOEBoJIe4coYwDQCoVl20YrTzGiMdwLV24Hs9uqK3I6yKmAoNxTehe0CdOVgwuVRF9g==", + "requires": { + "@react-aria/ssr": "^3.5.0", + "@react-aria/utils": "^3.15.0", + "@react-spectrum/utils": "^3.9.0", + "@react-types/layout": "^3.3.6", + "@react-types/shared": "^3.17.0", + "@swc/helpers": "^0.4.14", + "clsx": "^1.1.1" + } + }, + "@react-spectrum/provider": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-spectrum/provider/-/provider-3.7.0.tgz", + "integrity": "sha512-6Uch60R5PKJC+ZY3VweVadaCoaIj6Nd85TKfFH4jf8NEzXv5CqjwUzwV5aQ6u3k1K24Ves7RpLlK53HW1wUm6w==", + "requires": { + "@react-aria/i18n": "^3.7.0", + "@react-aria/overlays": "^3.13.0", + "@react-aria/utils": "^3.15.0", + "@react-spectrum/utils": "^3.9.0", + "@react-types/provider": "^3.6.0", + "@react-types/shared": "^3.17.0", + "@swc/helpers": "^0.4.14", + "clsx": "^1.1.1" + } + }, + "@react-spectrum/theme-default": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-spectrum/theme-default/-/theme-default-3.5.0.tgz", + "integrity": "sha512-DagwngJ9T7yGgtdTwKj9LaHbg3AWLW2/ILJK92xbPj/yAAEVXJ8vhiP9Tg3W3mZMsxBCNwTVLyOLheu7d+D8og==", + "requires": { + "@react-types/provider": "^3.6.0", + "@swc/helpers": "^0.4.14" + } + }, + "@react-spectrum/utils": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@react-spectrum/utils/-/utils-3.9.0.tgz", + "integrity": "sha512-I1JKwiyLE54mAT7Z2wadVKoai1Q60QFg4XNuYUwk8TwWAEz7DUUHucntHAND6dqFpVIMK1Rk9lcZBft43FF2BQ==", + "requires": { + "@react-aria/i18n": "^3.7.0", + "@react-aria/ssr": "^3.5.0", + "@react-aria/utils": "^3.15.0", + "@react-types/shared": "^3.17.0", + "@swc/helpers": "^0.4.14", + "clsx": "^1.1.1" + } + }, + "@react-spectrum/view": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-spectrum/view/-/view-3.5.0.tgz", + "integrity": "sha512-Zzsy2S6gT14vtli52tjM5VP1EdMOP+bppNCmwX+saUJuxaEdj6oYjP89quE4HwALzYceOfmXIuGDyEVeDcuSsQ==", + "requires": { + "@react-aria/i18n": "^3.7.0", + "@react-aria/utils": "^3.15.0", + "@react-spectrum/utils": "^3.9.0", + "@react-types/shared": "^3.17.0", + "@react-types/view": "^3.4.0", + "@swc/helpers": "^0.4.14" + } + }, + "@react-stately/overlays": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.5.0.tgz", + "integrity": "sha512-r+U/G0Y4tCfI5wyBeIu+hmcZVRN8ChoK2zM1srPH9nDKsijQard2goX+9YmKng2LJ01Re/P6F8S8jYbpfEdLfQ==", + "requires": { + "@react-stately/utils": "^3.6.0", + "@react-types/overlays": "^3.7.0", + "@swc/helpers": "^0.4.14" + } + }, + "@react-stately/utils": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.6.0.tgz", + "integrity": "sha512-rptF7iUWDrquaYvBAS4QQhOBQyLBncDeHF03WnHXAxnuPJXNcr9cXJtjJPGCs036ZB8Q2hc9BGG5wNyMkF5v+Q==", + "requires": { + "@swc/helpers": "^0.4.14" + } + }, + "@react-types/button": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.7.1.tgz", + "integrity": "sha512-c+8xjmqWSjI5/mEHVLbVSp0eh/z2UU8Ga+wqjbEUZUjm8uopYj1PaCAwZ7YgcAebyQrL/21GyjK6tFHKzuUdJQ==", + "requires": { + "@react-types/shared": "^3.17.0" + } + }, + "@react-types/layout": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/@react-types/layout/-/layout-3.3.6.tgz", + "integrity": "sha512-8YF7nb+0AtSDRj+rejMRS5djWpqAf5Q6sJzgdccn42JQxW7jvxoKqN0pCRPqpMzQqae5hOsYYpVNfuIHwUUkUA==", + "requires": { + "@react-types/shared": "^3.17.0" + } + }, + "@react-types/overlays": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.7.0.tgz", + "integrity": "sha512-LstucncZ8dM+xJYEijI1V6jGH20w5XO/T60r7JTrgQElMC86phPeoWkMTN4c2lsRikybolDbvXL6XsF76YO56A==", + "requires": { + "@react-types/shared": "^3.17.0" + } + }, + "@react-types/provider": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@react-types/provider/-/provider-3.6.0.tgz", + "integrity": "sha512-29+X5yMr1uHUc/BmFoyBqfWyMT3YGZJffaprtGGRQkCuwMbqoA8GI+rGJzNAMAD/1cPNo237PAGsi4NAup5tAQ==", + "requires": { + "@react-types/shared": "^3.17.0" + } + }, + "@react-types/shared": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.17.0.tgz", + "integrity": "sha512-1SNZ/RhVrrQ1e6yE0bPV7d5Sfp+Uv0dfUEhwF9MAu2v5msu7AMewnsiojKNA0QA6Ing1gpDLjHCxtayQfuxqcg==", + "requires": {} + }, + "@react-types/view": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@react-types/view/-/view-3.4.0.tgz", + "integrity": "sha512-lXDLbOYRFwo8hxrSDIYUmnxOGZlHBDVEFe1ZKAXJ+qPwntzxhzUeAuddTiMDhEETKgTclmlIsJnwz+HNv6dhSQ==", + "requires": { + "@react-types/shared": "^3.17.0" + } + }, + "@reduxjs/toolkit": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.3.tgz", + "integrity": "sha512-GU2TNBQVofL09VGmuSioNPQIu6Ml0YLf4EJhgj0AvBadRlCGzUWet8372LjvO4fqKZF2vH1xU0htAa7BrK9pZg==", + "requires": { + "immer": "^9.0.16", + "redux": "^4.2.0", + "redux-thunk": "^2.4.2", + "reselect": "^4.1.7" + } + }, + "@remix-run/router": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.4.0.tgz", + "integrity": "sha512-BJ9SxXux8zAg991UmT8slpwpsd31K1dHHbD3Ba4VzD+liLQ4WAMSxQp2d2ZPRPfN0jN2NPRowcSSoM7lCaF08Q==" + }, + "@swc/core": { + "version": "1.3.41", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.41.tgz", + "integrity": "sha512-v6P2dfqJDpZ/7RXPvWge9oI6YgolDM0jtNhQZ2qdXrLBzaWQdDoBGBTJ8KN/nTgGhX3IkNvSB1fafXQ+nVnqAQ==", + "dev": true, + "requires": { + "@swc/core-darwin-arm64": "1.3.41", + "@swc/core-darwin-x64": "1.3.41", + "@swc/core-linux-arm-gnueabihf": "1.3.41", + "@swc/core-linux-arm64-gnu": "1.3.41", + "@swc/core-linux-arm64-musl": "1.3.41", + "@swc/core-linux-x64-gnu": "1.3.41", + "@swc/core-linux-x64-musl": "1.3.41", + "@swc/core-win32-arm64-msvc": "1.3.41", + "@swc/core-win32-ia32-msvc": "1.3.41", + "@swc/core-win32-x64-msvc": "1.3.41" + } + }, + "@swc/core-darwin-arm64": { + "version": "1.3.41", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.41.tgz", + "integrity": "sha512-D4fybODToO/BvuP35bionDUrSuTVVr8eW+mApr1unOqb3mfiqOrVv0VP2fpWNRYiA+xMq+oBCB6KcGpL60HKWQ==", + "dev": true, + "optional": true + }, + "@swc/core-darwin-x64": { + "version": "1.3.41", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.41.tgz", + "integrity": "sha512-0RoVyiPCnylf3TG77C3S86PRSmaq+SaYB4VDLJFz3qcEHz1pfP0LhyskhgX4wjQV1mveDzFEn1BVAuo0eOMwZA==", + "dev": true, + "optional": true + }, + "@swc/core-linux-arm-gnueabihf": { + "version": "1.3.41", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.41.tgz", + "integrity": "sha512-mZW7GeY7Uw1nkKoWpx898ou20oCSt8MR+jAVuAhMjX+G4Zr0WWXYSigWNiRymhR6Q9KhyvoFpMckguSvYWmXsw==", + "dev": true, + "optional": true + }, + "@swc/core-linux-arm64-gnu": { + "version": "1.3.41", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.41.tgz", + "integrity": "sha512-e91LGn+6KuLFw3sWk5swwGc/dP4tXs0mg3HrhjImRoofU02Bb9aHcj5zgrSO8ZByvDtm/Knn16h1ojxIMOFaxg==", + "dev": true, + "optional": true + }, + "@swc/core-linux-arm64-musl": { + "version": "1.3.41", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.41.tgz", + "integrity": "sha512-Q7hmrniLWsQ7zjtImGcjx1tl5/Qxpel+fC+OXTnGvAyyoGssSftIBlXMnqVLteL78zhxIPAzi+gizWAe5RGqrA==", + "dev": true, + "optional": true + }, + "@swc/core-linux-x64-gnu": { + "version": "1.3.41", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.41.tgz", + "integrity": "sha512-h4sv1sCfZQgRIwmykz8WPqVpbvHb13Qm3SsrbOudhAp2MuzpWzsgMP5hAEpdCP/nWreiCz3aoM6L8JeakRDq0g==", + "dev": true, + "optional": true + }, + "@swc/core-linux-x64-musl": { + "version": "1.3.41", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.41.tgz", + "integrity": "sha512-Z7c26i38378d0NT/dcz8qPSAXm41lqhNzykdhKhI+95mA9m4pskP18T/0I45rmyx1ywifypu+Ip+SXmKeVSPgQ==", + "dev": true, + "optional": true + }, + "@swc/core-win32-arm64-msvc": { + "version": "1.3.41", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.41.tgz", + "integrity": "sha512-I0CYnPc+ZGc912YeN0TykIOf/Q7yJQHRwDuhewwD6RkbiSEaVfSux5pAmmdoKw2aGMSq+cwLmgPe9HYLRNz+4w==", + "dev": true, + "optional": true + }, + "@swc/core-win32-ia32-msvc": { + "version": "1.3.41", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.41.tgz", + "integrity": "sha512-EygN4CVDWF29/U2T5fXGfWyLvRbMd2hiUgkciAl7zHuyJ6nKl+kpodqV2A0Wd4sFtSNedU0gQEBEXEe7cqvmsA==", + "dev": true, + "optional": true + }, + "@swc/core-win32-x64-msvc": { + "version": "1.3.41", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.41.tgz", + "integrity": "sha512-Mfp8qD1hNwWWRy0ISdwQJu1g0UYoVTtuQlO0z3aGbXqL51ew9e56+8j3M1U9i95lXFyWkARgjDCcKkQi+WezyA==", + "dev": true, + "optional": true + }, + "@swc/helpers": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", + "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", + "requires": { + "tslib": "^2.4.0" + } + }, + "@types/eslint": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.3.tgz", + "integrity": "sha512-fa7GkppZVEByMWGbTtE5MbmXWJTVbrjjaS8K6uQj+XtuuUv1fsuPAxhygfqLmsb/Ufb3CV8deFCpiMfAgi00Sw==", + "dev": true, + "peer": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "peer": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true, + "peer": 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/is-hotkey": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@types/is-hotkey/-/is-hotkey-0.1.7.tgz", + "integrity": "sha512-yB5C7zcOM7idwYZZ1wKQ3pTfjA9BbvFqRWvKB46GFddxnJtHwi/b9y84ykQtxQPg5qhdpg4Q/kWU3EGoCTmLzQ==" + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/lodash": { + "version": "4.14.191", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", + "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==" + }, + "@types/node": { + "version": "18.15.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.5.tgz", + "integrity": "sha512-Ark2WDjjZO7GmvsyFFf81MXuGTA/d6oP38anyxWOL6EREyBKAxKoFHwBhaZxCfLRLpO8JgVXwqOwSwa7jRcjew==", + "devOptional": true, + "peer": 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/react": { + "version": "18.0.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", + "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-copy-to-clipboard": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.4.tgz", + "integrity": "sha512-otTJsJpofYAeaIeOwV5xBUGpo6exXG2HX7X4nseToCB2VgPEBxGBHCm/FecZ676doNR7HCSTVtmohxfG2b3/yQ==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/react-dom": { + "version": "18.0.11", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz", + "integrity": "sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==", + "devOptional": true, + "requires": { + "@types/react": "*" + } + }, + "@types/react-grid-layout": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/react-grid-layout/-/react-grid-layout-1.3.2.tgz", + "integrity": "sha512-ZzpBEOC1JTQ7MGe1h1cPKSLP4jSWuxc+yvT4TsAlEW9+EFPzAf8nxQfFd7ea9gL17Em7PbwJZAsiwfQQBUklZQ==", + "requires": { + "@types/react": "*" + } + }, + "@types/react-is": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz", + "integrity": "sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==", + "requires": { + "@types/react": "*" + } + }, + "@types/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", + "requires": { + "@types/react": "*" + } + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "@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==" + }, + "@vitejs/plugin-react-swc": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.2.0.tgz", + "integrity": "sha512-IcBoXL/mcH7JdQr/nfDlDwTdIaH8Rg7LpfQDF4nAht+juHWIuv6WhpKPCSfY4+zztAaB07qdBoFz1XCZsgo3pQ==", + "dev": true, + "requires": { + "@swc/core": "^1.3.35" + } + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "peer": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "peer": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true, + "peer": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "peer": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "peer": true + }, + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "peer": true + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "peer": 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" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "requires": {} + }, + "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" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "attr-accept": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.2.tgz", + "integrity": "sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==" + }, + "axios": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz", + "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==", + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "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" + } + }, + "babel-plugin-styled-components": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz", + "integrity": "sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-module-imports": "^7.16.0", + "babel-plugin-syntax-jsx": "^6.18.0", + "lodash": "^4.17.11", + "picomatch": "^2.3.0" + } + }, + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==" + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "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==" + }, + "browserslist": { + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "dev": true, + "peer": true, + "requires": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "peer": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==" + }, + "caniuse-lite": { + "version": "1.0.30001469", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001469.tgz", + "integrity": "sha512-Rcp7221ScNqQPP3W+lVOYDyjdR6dC+neEQCttoNr5bAyz54AboB4iwpnWgyi8P4YUsPybVzT4LgWiBbI3drL4g==", + "dev": true, + "peer": 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==" + } + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "peer": true + }, + "classnames": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", + "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" + }, + "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==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "peer": true + }, + "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" + } + }, + "compute-scroll-into-view": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", + "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==" + }, + "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==" + }, + "copy-to-clipboard": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "requires": { + "toggle-selection": "^1.0.6" + } + }, + "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" + } + }, + "css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==" + }, + "css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "requires": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, + "csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "direction": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/direction/-/direction-1.0.4.tgz", + "integrity": "sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ==" + }, + "dnd-core": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-16.0.1.tgz", + "integrity": "sha512-HK294sl7tbw6F6IeuK16YSBUoorvHpY8RHO+9yFfaJyCDVb6n7PRcezrOEOa2SBCqiYpemh5Jx20ZcjKdFAVng==", + "requires": { + "@react-dnd/asap": "^5.0.1", + "@react-dnd/invariant": "^4.0.1", + "redux": "^4.2.0" + } + }, + "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" + } + }, + "electron-to-chromium": { + "version": "1.4.334", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.334.tgz", + "integrity": "sha512-laZ1odk+TRen6q0GeyQx/JEkpD3iSZT7ewopCpKqg9bTjP1l8XRfU3Bg20CFjNPZkp5+NDBl3iqd4o/kPO+Vew==", + "dev": true, + "peer": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "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" + } + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true, + "peer": true + }, + "esbuild": { + "version": "0.17.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.11.tgz", + "integrity": "sha512-pAMImyokbWDtnA/ufPxjQg0fYo2DDuzAlqwnDvbXqHLphe+m80eF++perYKVm8LeTuj2zUuFXC+xgSVxyoHUdg==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.17.11", + "@esbuild/android-arm64": "0.17.11", + "@esbuild/android-x64": "0.17.11", + "@esbuild/darwin-arm64": "0.17.11", + "@esbuild/darwin-x64": "0.17.11", + "@esbuild/freebsd-arm64": "0.17.11", + "@esbuild/freebsd-x64": "0.17.11", + "@esbuild/linux-arm": "0.17.11", + "@esbuild/linux-arm64": "0.17.11", + "@esbuild/linux-ia32": "0.17.11", + "@esbuild/linux-loong64": "0.17.11", + "@esbuild/linux-mips64el": "0.17.11", + "@esbuild/linux-ppc64": "0.17.11", + "@esbuild/linux-riscv64": "0.17.11", + "@esbuild/linux-s390x": "0.17.11", + "@esbuild/linux-x64": "0.17.11", + "@esbuild/netbsd-x64": "0.17.11", + "@esbuild/openbsd-x64": "0.17.11", + "@esbuild/sunos-x64": "0.17.11", + "@esbuild/win32-arm64": "0.17.11", + "@esbuild/win32-ia32": "0.17.11", + "@esbuild/win32-x64": "0.17.11" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "peer": 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-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, + "peer": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "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, + "peer": 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, + "peer": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "peer": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "peer": true + }, + "exenv": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", + "integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==" + }, + "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==" + }, + "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 + }, + "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" + } + }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "peer": true + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "peer": 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==" + }, + "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==" + } + } + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, + "immer": { + "version": "9.0.19", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.19.tgz", + "integrity": "sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ==" + }, + "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" + } + }, + "intl-messageformat": { + "version": "10.3.3", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.3.3.tgz", + "integrity": "sha512-un/f07/g2e/3Q8e1ghDKET+el22Bi49M7O/rHxd597R+oLpPOMykSv5s51cABVfu3FZW+fea4hrzf2MHu1W4hw==", + "requires": { + "@formatjs/ecma402-abstract": "1.14.3", + "@formatjs/fast-memoize": "2.0.1", + "@formatjs/icu-messageformat-parser": "2.3.0", + "tslib": "^2.4.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.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "requires": { + "has": "^1.0.3" + } + }, + "is-hotkey": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/is-hotkey/-/is-hotkey-0.1.8.tgz", + "integrity": "sha512-qs3NZ1INIS+H+yeo7cD9pDfwYV/jqRh1JG9S9zYrNudkoUQg7OL7ziXqRKu+InFjUIDoP2o6HIkLYMh1pcWgyQ==" + }, + "is-lite": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/is-lite/-/is-lite-0.9.2.tgz", + "integrity": "sha512-qZuxbaEiKLOKhX4sbHLfhFN9iA3YciuZLb37/DfXCpWnz8p7qNL2lwkpxYMXfjlS8eEEjpULPZxAUI8N6FYvYQ==" + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "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, + "peer": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "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 + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "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==" + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "peer": true + }, + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "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" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, + "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" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "peer": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "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==" + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "peer": true + }, + "node-releases": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "dev": true, + "peer": 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==" + }, + "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-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==" + }, + "philliplm-react-modern-audio-player": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/philliplm-react-modern-audio-player/-/philliplm-react-modern-audio-player-1.4.6.tgz", + "integrity": "sha512-2C/1lpQJmD0gWJMVt6k/QNZoakxHwxGhRFyw17OVAwbpXmptisr9aHDzT/VPFKoIr5qj+y1WajJ4lnghbfzx9Q==", + "requires": { + "@react-spectrum/layout": "^3.3.1", + "@react-spectrum/provider": "^3.4.1", + "@react-spectrum/theme-default": "^3.3.1", + "@react-spectrum/view": "^3.2.1", + "classnames": "^2.3.1", + "react-icons": "^4.4.0", + "styled-components": "^5.3.5", + "wavesurfer.js": "^6.2.0" + } + }, + "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==" + }, + "popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" + }, + "postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "prettier": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.6.tgz", + "integrity": "sha512-mtuzdiBbHwPEgl7NxWlqOkithPyp4VN93V7VeHVWBF+ad3I5avc0RVDT4oImXQy9H/AqxA2NSQH8pSxHW6FYbQ==", + "dev": true + }, + "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==" + } + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "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-copy-to-clipboard": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz", + "integrity": "sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==", + "requires": { + "copy-to-clipboard": "^3.3.1", + "prop-types": "^15.8.1" + } + }, + "react-dnd": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/react-dnd/-/react-dnd-16.0.1.tgz", + "integrity": "sha512-QeoM/i73HHu2XF9aKksIUuamHPDvRglEwdHL4jsp784BgUuWcg6mzfxT0QDdQz8Wj0qyRKx2eMg8iZtWvU4E2Q==", + "requires": { + "@react-dnd/invariant": "^4.0.1", + "@react-dnd/shallowequal": "^4.0.1", + "dnd-core": "^16.0.1", + "fast-deep-equal": "^3.1.3", + "hoist-non-react-statics": "^3.3.2" + } + }, + "react-dnd-html5-backend": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/react-dnd-html5-backend/-/react-dnd-html5-backend-16.0.1.tgz", + "integrity": "sha512-Wu3dw5aDJmOGw8WjH1I1/yTH+vlXEL4vmjk5p+MHxP8HuHJS1lAGeIdG/hze1AvNeXWo/JgULV87LyQOr+r5jw==", + "requires": { + "dnd-core": "^16.0.1" + } + }, + "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-floater": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/react-floater/-/react-floater-0.7.6.tgz", + "integrity": "sha512-tt/15k/HpaShbtvWCwsQYLR+ebfUuYbl+oAUJ3DcEDkgYKeUcSkDey2PdAIERdVwzdFZANz47HbwoET2/Rduxg==", + "requires": { + "deepmerge": "^4.2.2", + "exenv": "^1.2.2", + "is-lite": "^0.8.2", + "popper.js": "^1.16.0", + "prop-types": "^15.8.1", + "react-proptype-conditional-require": "^1.0.4", + "tree-changes": "^0.9.1" + }, + "dependencies": { + "is-lite": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/is-lite/-/is-lite-0.8.2.tgz", + "integrity": "sha512-JZfH47qTsslwaAsqbMI3Q6HNNjUuq6Cmzzww50TdP5Esb6e1y2sK2UAaZZuzfAzpoI2AkxoPQapZdlDuP6Vlsw==" + } + } + }, + "react-grid-layout": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/react-grid-layout/-/react-grid-layout-1.3.4.tgz", + "integrity": "sha512-sB3rNhorW77HUdOjB4JkelZTdJGQKuXLl3gNg+BI8gJkTScspL1myfZzW/EM0dLEn+1eH+xW+wNqk0oIM9o7cw==", + "requires": { + "clsx": "^1.1.1", + "lodash.isequal": "^4.0.0", + "prop-types": "^15.8.1", + "react-draggable": "^4.0.0", + "react-resizable": "^3.0.4" + } + }, + "react-icons": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.8.0.tgz", + "integrity": "sha512-N6+kOLcihDiAnj5Czu637waJqSnwlMNROzVZMhfX68V/9bu9qHaMIJC4UdozWoOk57gahFCNHwVvWzm0MTzRjg==", + "requires": {} + }, + "react-intersection-observer": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.4.3.tgz", + "integrity": "sha512-WNRqMQvKpupr6MzecAQI0Pj0+JQong307knLP4g/nBex7kYfIaZsPpXaIhKHR+oV8z+goUbH9e10j6lGRnTzlQ==", + "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-joyride": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/react-joyride/-/react-joyride-2.5.4.tgz", + "integrity": "sha512-CLV1Ju79iRKIP/KqsEX05nSxMBzT41BhPAyNrTdBQWEYAkpyo6iiCPelk6No2W8iPgw373JKk2cK7AQ5Q3lFew==", + "requires": { + "deepmerge": "^4.3.1", + "exenv": "^1.2.2", + "is-lite": "^0.9.2", + "prop-types": "^15.8.1", + "react-floater": "^0.7.6", + "react-is": "^16.13.1", + "scroll": "^3.0.1", + "scrollparent": "^2.0.1", + "tree-changes": "^0.9.2" + }, + "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==" + } + } + }, + "react-masonry-css": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/react-masonry-css/-/react-masonry-css-1.0.16.tgz", + "integrity": "sha512-KSW0hR2VQmltt/qAa3eXOctQDyOu7+ZBevtKgpNDSzT7k5LA/0XntNa9z9HKCdz3QlxmJHglTZ18e4sX4V8zZQ==", + "requires": {} + }, + "react-proptype-conditional-require": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/react-proptype-conditional-require/-/react-proptype-conditional-require-1.0.4.tgz", + "integrity": "sha512-nopsRn7KnGgazBe2c3H2+Kf+Csp6PGDRLiBkYEDMKY8o/EIgft/WnIm/OnAKTawZiLnJXHAqhpFBddvs6NiXlw==" + }, + "react-redux": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.5.tgz", + "integrity": "sha512-Q2f6fCKxPFpkXt1qNRZdEDLlScsDWyrgSj0mliK59qU6W5gvBiKkdMEG2lJzhd1rCctf0hb6EtePPLZ2e0m1uw==", + "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-resizable": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/react-resizable/-/react-resizable-3.0.5.tgz", + "integrity": "sha512-vKpeHhI5OZvYn82kXOs1bC8aOXktGU5AmKAgaZS4F5JPburCtbmDPqE7Pzp+1kN4+Wb81LlF33VpGwWwtXem+w==", + "requires": { + "prop-types": "15.x", + "react-draggable": "^4.0.3" + } + }, + "react-resize-detector": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-8.0.4.tgz", + "integrity": "sha512-ln9pMAob8y8mc9UI4aZuuWFiyMqBjnTs/sxe9Vs9dPXUjwCTeKK1FP8I75ufnb/2mEEZXG6wOo/fjMcBRRuAXw==", + "requires": { + "lodash": "^4.17.21" + } + }, + "react-router": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.9.0.tgz", + "integrity": "sha512-51lKevGNUHrt6kLuX3e/ihrXoXCa9ixY/nVWRLlob4r/l0f45x3SzBvYJe3ctleLUQQ5fVa4RGgJOTH7D9Umhw==", + "requires": { + "@remix-run/router": "1.4.0" + } + }, + "react-router-dom": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.9.0.tgz", + "integrity": "sha512-/seUAPY01VAuwkGyVBPCn1OXfVbaWGGu4QN9uj0kCPcTyNYgL1ldZpxZUpRU7BLheKQI4Twtl/OW2nHRF1u26Q==", + "requires": { + "@remix-run/router": "1.4.0", + "react-router": "6.9.0" + } + }, + "react-toastify": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.2.tgz", + "integrity": "sha512-PBfzXO5jMGEtdYR5jxrORlNZZe/EuOkwvwKijMatsZZm8IZwLj01YvobeJYNjFcA6uy6CVrx2fzL9GWbhWPTDA==", + "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" + } + }, + "react-virtuoso": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/react-virtuoso/-/react-virtuoso-4.3.3.tgz", + "integrity": "sha512-x0DeGmVAVOVaTXRMG7jzrHBwK7+dkt7n0G3tNmZXphQUBgkVBYuZoaJltQeZGFN42++3XvrgwStKCtmzgMJ0lA==", + "requires": {} + }, + "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==" + }, + "reselect": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.7.tgz", + "integrity": "sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A==" + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "requires": { + "is-core-module": "^2.9.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==" + }, + "rollup": { + "version": "3.19.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.19.1.tgz", + "integrity": "sha512-lAbrdN7neYCg/8WaoWn/ckzCtz+jr70GFfYdlf50OF7387HTg+wiuiqJRFYawwSPpqfqDNYqK7smY/ks2iAudg==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "peer": true + }, + "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" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "scroll": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scroll/-/scroll-3.0.1.tgz", + "integrity": "sha512-pz7y517OVls1maEzlirKO5nPYle9AXsFzTMNJrRGmT951mzpIBy7sNHOg5o/0MQd/NqliCiWnAi0kZneMPFLcg==" + }, + "scroll-into-view-if-needed": { + "version": "2.2.31", + "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz", + "integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==", + "requires": { + "compute-scroll-into-view": "^1.0.20" + } + }, + "scrollparent": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/scrollparent/-/scrollparent-2.0.1.tgz", + "integrity": "sha512-HSdN78VMvFCSGCkh0oYX/tY4R3P1DW61f8+TeZZ4j2VLgfwvw0bpRSOv4PCVKisktIwbzHCfZsx+rLbbDBqIBA==" + }, + "serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "peer": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "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==" + }, + "slate": { + "version": "0.91.4", + "resolved": "https://registry.npmjs.org/slate/-/slate-0.91.4.tgz", + "integrity": "sha512-aUJ3rpjrdi5SbJ5G1Qjr3arytfRkEStTmHjBfWq2A2Q8MybacIzkScSvGJjQkdTk3djCK9C9SEOt39sSeZFwTw==", + "requires": { + "immer": "^9.0.6", + "is-plain-object": "^5.0.0", + "tiny-warning": "^1.0.3" + } + }, + "slate-history": { + "version": "0.86.0", + "resolved": "https://registry.npmjs.org/slate-history/-/slate-history-0.86.0.tgz", + "integrity": "sha512-OxObL9tbhgwvSlnKSCpGIh7wnuaqvOj5jRExGjEyCU2Ke8ctf22HjT+jw7GEi9ttLzNTUmTEU3YIzqKGeqN+og==", + "requires": { + "is-plain-object": "^5.0.0" + } + }, + "slate-react": { + "version": "0.91.11", + "resolved": "https://registry.npmjs.org/slate-react/-/slate-react-0.91.11.tgz", + "integrity": "sha512-2nS29rc2kuTTJrEUOXGyTkFATmTEw/R9KuUXadUYiz+UVwuFOUMnBKuwJWyuIBOsFipS+06SkIayEf5CKdARRQ==", + "requires": { + "@juggle/resize-observer": "^3.4.0", + "@types/is-hotkey": "^0.1.1", + "@types/lodash": "^4.14.149", + "direction": "^1.0.3", + "is-hotkey": "^0.1.6", + "is-plain-object": "^5.0.0", + "lodash": "^4.17.4", + "scroll-into-view-if-needed": "^2.2.20", + "tiny-invariant": "1.0.6" + } + }, + "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.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "peer": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "peer": true + } + } + }, + "styled-components": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.9.tgz", + "integrity": "sha512-Aj3kb13B75DQBo2oRwRa/APdB5rSmwUfN5exyarpX+x/tlM/rwZA2vVk2vQgVSP6WKaZJHWwiFrzgHt+CLtB4A==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/traverse": "^7.4.5", + "@emotion/is-prop-valid": "^1.1.0", + "@emotion/stylis": "^0.8.4", + "@emotion/unitless": "^0.7.4", + "babel-plugin-styled-components": ">= 1.12.0", + "css-to-react-native": "^3.0.0", + "hoist-non-react-statics": "^3.0.0", + "shallowequal": "^1.1.0", + "supports-color": "^5.5.0" + }, + "dependencies": { + "@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + } + } + }, + "stylis": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", + "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" + }, + "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==" + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "peer": true + }, + "terser": { + "version": "5.16.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.6.tgz", + "integrity": "sha512-IBZ+ZQIA9sMaXmRZCUMDjNH0D5AQQfdn4WUjHL0+1lF4TP1IHRJbrhb6fNaXWikrYQTSkb7SLxkeXAiy1p7mbg==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "terser-webpack-plugin": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz", + "integrity": "sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.5" + } + }, + "tiny-invariant": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.6.tgz", + "integrity": "sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA==" + }, + "tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "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==" + }, + "toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" + }, + "tree-changes": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/tree-changes/-/tree-changes-0.9.3.tgz", + "integrity": "sha512-vvvS+O6kEeGRzMglTKbc19ltLWNtmNt1cpBoSYLj/iEcPVvpJasemKOlxBrmZaCtDJoF+4bwv3m01UKYi8mukQ==", + "requires": { + "@gilbarbara/deep-equal": "^0.1.1", + "is-lite": "^0.8.2" + }, + "dependencies": { + "is-lite": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/is-lite/-/is-lite-0.8.2.tgz", + "integrity": "sha512-JZfH47qTsslwaAsqbMI3Q6HNNjUuq6Cmzzww50TdP5Esb6e1y2sK2UAaZZuzfAzpoI2AkxoPQapZdlDuP6Vlsw==" + } + } + }, + "tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "peer": 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": "4.2.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.0.tgz", + "integrity": "sha512-AbDTyzzwuKoRtMIRLGNxhLRuv1FpRgdIw+1y6AQG73Q5+vtecmvzKo/yk8X/vrHDpETRTx01ABijqUHIzBXi0g==", + "dev": true, + "requires": { + "esbuild": "^0.17.5", + "fsevents": "~2.3.2", + "postcss": "^8.4.21", + "resolve": "^1.22.1", + "rollup": "^3.18.0" + } + }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "peer": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wavesurfer.js": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/wavesurfer.js/-/wavesurfer.js-6.6.2.tgz", + "integrity": "sha512-aPAU4OADQsyH8mIw2nXmoni8KHo8s1f1bd5ZUrxhN4P/VMWd+oPDqEwA01XPSEfasAJW6mZ/EHQ2bZ9nOWRrNw==" + }, + "webpack": { + "version": "5.76.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.2.tgz", + "integrity": "sha512-Th05ggRm23rVzEOlX8y67NkYCHa9nTNcwHPBhdg+lKG+mtiW7XgggjAeeLnADAe7mLjJ6LUNfgHAuRRh+Z6J7w==", + "dev": true, + "peer": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "peer": true + }, + "worker-loader": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/worker-loader/-/worker-loader-3.0.8.tgz", + "integrity": "sha512-XQyQkIFeRVC7f7uRhFdNMe/iJOdO6zxAaR3EWbDp45v3mDhrTi+++oswKNxShUNjPC/1xUp5DB29YKLhFo129g==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..f15002d --- /dev/null +++ b/package.json @@ -0,0 +1,54 @@ +{ + "name": "q-blog", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "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", + "@types/react-grid-layout": "^1.3.2", + "axios": "^1.3.4", + "compressorjs": "^1.2.1", + "localforage": "^1.10.0", + "moment": "^2.29.4", + "philliplm-react-modern-audio-player": "^1.4.6", + "react": "^18.2.0", + "react-copy-to-clipboard": "^5.1.0", + "react-dnd": "^16.0.1", + "react-dnd-html5-backend": "^16.0.1", + "react-dom": "^18.2.0", + "react-dropzone": "^14.2.3", + "react-grid-layout": "^1.3.4", + "react-intersection-observer": "^9.4.3", + "react-joyride": "^2.5.4", + "react-masonry-css": "^1.0.16", + "react-redux": "^8.0.5", + "react-resize-detector": "^8.0.4", + "react-router-dom": "^6.9.0", + "react-toastify": "^9.1.2", + "react-virtuoso": "^4.3.3", + "short-unique-id": "^4.4.4", + "slate": "^0.91.4", + "slate-history": "^0.86.0", + "slate-react": "^0.91.11" + }, + "devDependencies": { + "@mui/types": "^7.2.3", + "@types/react": "^18.0.28", + "@types/react-copy-to-clipboard": "^5.0.4", + "@types/react-dom": "^18.0.11", + "@vitejs/plugin-react-swc": "^3.2.0", + "prettier": "^2.8.6", + "typescript": "^4.9.3", + "vite": "^4.2.0", + "worker-loader": "^3.0.8" + } +} diff --git a/public/vite.svg b/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..76bb87d --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,48 @@ +// @ts-nocheck +import { useEffect, useState } from "react"; +import { Routes, Route } from "react-router-dom"; +import { ProductPage } from "./pages/Product/ProductPage"; +import { StoreList } from "./pages/StoreList/StoreList"; +import { ThemeProvider } from "@mui/material/styles"; +import { CssBaseline } from "@mui/material"; +import { lightTheme, darkTheme } from "./styles/theme"; +import { store } from "./state/store"; +import { Provider } from "react-redux"; +import { Store } from "./pages/Store/Store/Store"; +import { MyOrders } from "./pages/MyOrders/MyOrders"; +import { ErrorElement } from "./components/common/Error/ErrorElement"; +import GlobalWrapper from "./wrappers/GlobalWrapper"; +import Notification from "./components/common/Notification/Notification"; +import { ProductManager } from "./pages/ProductManager/ProductManager"; + +function App() { + // const themeColor = window._qdnTheme + + const [theme, setTheme] = useState("dark"); + + return ( + + + + setTheme(val)}> + + + } + /> + } + /> + } /> + } /> + } /> + + + + + ); +} + +export default App; diff --git a/src/assets/img/ArrrLogoBlack.png b/src/assets/img/ArrrLogoBlack.png new file mode 100644 index 0000000000000000000000000000000000000000..954d1c026c52bc53c6b9cf857ed9c72c49a96d46 GIT binary patch literal 5747 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 literal 0 HcmV?d00001 diff --git a/src/assets/img/ArrrLogoWhite.png b/src/assets/img/ArrrLogoWhite.png new file mode 100644 index 0000000000000000000000000000000000000000..28e63610a170a1cf9508fc43297ef2b7db4d2931 GIT binary patch literal 9253 zcmdUV`9D2H_OQl1>~Oj{v3jW|8b zhuEsKQ>x~ik>0K&kq|#qEX(kZNy+b*j=C zO2sx+No(l~rdne;z!DnvpwZ+%a-iop* zXDXLv;9+aux0|H?lhcaSv?DcJQ{5wgqlp5;^TA?B+D!t2<4J2 zdwrS!XD^njGqJT-V`E5N{H_XnCZu;o%oU3HHh;aGrxfu}tUp`&QpF`IcP#QlzFb1> zNHsg}Rz2Uq-vS+7DCTiM{dK;R@#%3ECWiSgyR5vt47bx!l8a7yTDc1%$d|SnaX;WB z1^MpujDb2SQ#>{<;IG(X%38^>5fL~!0DN@+>bWk$&L5Afmxo_tccr5-B@h-A!%cgu z!}~$B5}J&MHEE=ZE!wIe_h?B)i`GNPhU3)sIomgGN)=wUlCj8wP(Hn!2?eJ4SKkny z2FzJAY}}f;2TG|Ly1sD|9F8wSo0lKb z&E+6au{Q7$d0Culm8_M7afMv@-t7tZvem&B!=x7UnoReea6mDVXKu$FZN1K4bR)D* z_qTH{pOKBWo*HSrLoNOm@}hN!>YHeT)JQOyikUO)=4UMK=@nm5Bh}B}uAWEXAqcLw_*{K9yO? zx;SOmob7a)F5!?W+cW6X93V)9Ag_p|DQY_s0w3ubm~TBfzHfnMF$hF2DHhNrWT2SF z?|UA*(?5*dj@8U)&X3)^$6}cEc(|3-=^>ihdnNMjcBKqnTAK9ulS5a$BDTb#!t-&d zt^r4d2fo_2@4RjTrM&zOM8if-9Knw(eIyObFnCVsDWfVT*w`r+;-j7~e(ECnK{3QU zxqklD&*FvW*iC}^OgAqngES3A2V~iK?H7xk`kqLz{Sq#=9A5T55K1aCn1ZpAANesRsXGxTS_m0 z)T1SA1&y46-+K)wE&f!G_b--)Ex+jcz&lsVZWAa-csGCeUur{0n=b0IO}xUYWSz*B_RO zrw9E_hAf)9VuZLEVZEO4sW^Tp^UJL;i-b&8oPBQB+-{8HQF8l^(!|9}SsC5RYpXeP zQRD!h_4(t{B-t~mEQb;l$t%s24afey9kT>VLC-eu5jXm~B&6g@ORCKYvaSAX?k)kRwC}9_r4n%mSpcp?v(F}_dzGS@pDR*R{ zh%RB4m3A6I1lG8FrKPAthG>?uY)ku-u~qUNX#8$GjRQeiL(zfHVi|S@*h*04dr;*u zC}9&+8G`W4L@|0nmDmhBJXYpQi2@8i#wjm%u91}%=$wF>sBeJ-JHO1vgicWL_EPRh zvRyn4v}Us!ymTO}Bmbp?B`UT`cKj6c*63(x#1=%$tD7#~7d?fOi9hd!n1wO4wPLt6fU~+>WoJdwE(*fpC zQG4AcFXNBbvJ9Z7pspGOCA7$=ya3$r*WziBKg9a(tq1^=*{4%=o7{{)#AY^tsB~Cd z2}*EzmDpD!79Tf!1WLA&(}f!rG{3ziLTes_69Lo7w#dF_IBE0cpL3D`Z+LmOtSFQq z(ySm%=4(zm%Nx%4@UfE%e>ralG^-yzfYrmwo5$xExTk3yXaJ+06v1;FPWs^#k8*jw z)z3nG;1F=_7{oBk=YBkD&u>MD9UIXqbX!p~)-QaE4lr_~X{^EobBnKNK;xrD78$Q9 z7exdz@Yx1!K2!H!s!g~iK)(ET1_;_Ei3gE1Qe?pSh8_+7I;+e| zTX~R(av9k(gIYcv2{=VOmnz#G%$FvuX@|h~2&{bnQ(38gn4cEl41Ni=lWl{uFF}#} zLIDuGzDw8Z6mE5z@U3EF;PSWcffCZB8Gl;@K1J9$^&D2H;D9{$J&-k3_SS3}4_QF{ zm2eKnXsxgv^gYxtn}wH=I0KTiKr&Ul&t1KOwNO7*p8b)oD#ZlsAM9wSCRGzb+Fq?T z1{~*{vswH}jSmTDE6&Pp<^yES{+Yqq*9l`O9HY_l@ruAd-&4)C$R-=HFU}j;ZS&UJ zX93FOi?G1XEL%p%liS=tH0jz{I=&%aNvRu{JYF*`(vu}jxOz=s{wX>L0%%|C+`KQi z^P*6<;dPKZ5*R+M&>j;ZP5SbKXFtYxs|}zsYNY;MGf(h4lgAHnQ(Av3S4O?^TOxk> z(n(PP0Jj_gpQ0y(72q2huU7Z=S!>Axq)GXKU*9mPvT8x#K4=?u5sa(D@YCjRxJqig zN>0m&8B*>8yiDwnN&=X?4X3M<*^Aol;qx76ME{H^tE-1-B0%TcA~)>JW{{na(qDgS zl7CpJyRNL~mg}fyxk5y`s&yQ}Wh1jQI`3Jh{*O;(p( z={38}(eF|7KDPqn>lE=bP$kw+Wk@lxA*p0bMw3r@T6XU(r`Oq1u+#G$r43l;R?D!+yb#bASO+PC= zq7x@?WCz&NA3VRDw>`_lPg}C>W)3}{F=F<}CMt<1el9T`267J{6KM<^;zrJ>x3t>15+d?y?y~XIT5|>8s{W2wM2{Vb^6bAH z&2?Cs6qDOU`dx!l9lWJzn4yqLsLFU<-_rlxTsYOSwWfj^pH-gsdx zc1D1HK`$5?U3$zw-i3n{tl|4@n{>u`iJ77j*NX7?R(4ynIa9nZVwYI8tQzm{>E1Rd zLAcn-zFIM?n_#M>UHLXa(UQ9uZU$=OVN5EzQ?d{q8KqmVo7ctrsyjEo9&~B zoA=$jyB7UQJ(p{!<*9YOPZbP^ww+}A2@U}Yqx2RBljn|a*Ts$YpPHAY}fQ+M3|8mZgN&=+q=AsiZzg_82{pXh-B!J*(oTs zYQw8T8E&RTL!l3+Lf(YNwoa05>>#fZmO&hJ{dBUSB(3ieH458cm0F$*~Z z`~3ksr*R@uLP|lr?#G{~9NMmyqmH^=crv?JH={njbxxbdGQDDbCofet?TYGh+#dSC zzfAecRfxM4uvDXK77Kp7Pa>~)2Yb~~YD5ub&MFZxAaNgU;Uh_X(780^PlCH&JyhY) zKjCVFwLugHU#gQ1dB3ImzWI0g&#yB}tihFDOEr>UKL=kuQ$NS&sG6p;*qN`9XRQw_ zlcfF-E%xm0K&LF+WPVW}&`0@N@M8+I>W)A$PxD5}-psQtqm#W{Iv*<-fQl^xY4_MO zJDl$QK2YBjJ>&Tns$VH~pt+)0-4*F5mQ-iHLI9(dKr-ArJXyA!Pkw!Vp*7^(uE0m?nhJN+<8c3gKR;EC$Y zF|HfMCm_jna1Ya`Oh3y&u3QcbzTj_C`W=qZ&R0{{ZY4yAkR8jD(m%VGvv`;sB2^H9 zO;jhtC>>Mu311q6#A@nLg!yy1jem*Rh_ReEOhaqP;Kbo1z|R;}%nBWiSN_XlYKSV9 z(D#bxiD3LqgP7{2p-ZIYWirqVVFxJ11XX;!%QJx|O*Rep4+*F^#-j!j6r?Sk>@CGu z3ODr8#XMb}Y_Uk7ECsJh`yC8tPl)mY+#K0UUh9_E<4aG&0KZ3NZ?PaCpu)p2u>B@9 z1|j!o(1g>AYJoPXJH1G05`a&!Wf=UW)xP5d9$VRZoj6I&ea{8>73VA-$UO(;4$3d6 z|9|NQ!vM7@9yC3p*tbX=;3m{Xy7d9}1`60d$-vux68Zum`|+iV86&`r1dyGOio;aq=2(-`)tcxc>mXE|DOOJzP z91nEV3VdmzKVKYEs1l)2zW6L251Zlb1U~RE3f*s_0Whd=3oBhxx*EtB2Qr>HD8aT8D4-w+2GmkX5QWpRNPAFW4h0X>{#m-<3i^8& zj{v2A(xCQRzOaX}TfsVu((%ippx1wT^wMn}X%ZNN{b?~GZy`w3^5|E4qVg!996_q5 z`=+|RJ~a&cfMR%e$%>e9c+?i)VW8hyKfUkd6EZK*X9N zj=Du=59i$Rd?;xQC+&H#phvENzLKC#9XM2R6JQ|U6>=VgQoO&k)+ge_OIT_8;Di*a zj)Zr6>I*=!g(v*$#Gs2(81`RRKj1K z=)S{DP=INp7;s6?TXzrECo=S?Ud~s}3uahw-_O*pkg>4*({rgO16fY?)t&}0a@U#8orIB=FUSiQAnBroUTl83j zR;X*B-+YZHQH_^z!5ZA_a#a2mdPvyK5#jbQVFy~(fvsp)W>rLg%~kO-vdW$6dhV&SOOn7Z&W;fmzC?yomQJ{zkU&rpUOd=3Hx>jsagkf8(pfw8nylVz7V8*;`{IbPJ$|3#-2xBgi>IL#?aGS;X_6gh>V1;6UMs7MY0iR{5 zRytX|yaXXHfq_$UQuC+N_&X<^>$)>8a%e_d`wq#*Y8 z47$UdO;HM$77@dL`7{k#K?3gObsdQf&7YoE_i;rNrR{!gs@O4f&zh|NJVag*?viGf zOGWWiR)jW})*aEDId!3n$;mwMpl-W<)@8IGv-hsFx|mS4+S8^(etN%ifAjlbHV3+~ z;y2f#Aj_y>ECuF-mIRcmURgOjS6O3UWdMcYPy*!lOr0cP`OqSurp7oWR<`Ue1poZM z-eEy03;DENWA}(4<5lRBanEH9fIKzUrP*@&IgB>o30g@2ZT>tWqCeJD6a#!J`TY9z z9DdHn1Sm7iv~XCze3+z@i3BRF)(YgogH{s7;26$St&!OmffR;}sE9fw!k`DMNS?N9 z%?2H20Zim!z%7C^wo1eyCGsI)nJ=~O51y2aT)chyDVGvfpsO)CB5chOL29qe01DOn z7sut;aQ(Z0WvW!(W`rCYEkaxYC`60;KGbZeD!~f~UxeZn^FBYj$VtlEhG1j*l~*?$ zIselu+Q^v8xCi#*7#Fa4xgxi9!~@%;c0vH41rJ#(#ng2DSGXZ>toY&~lB*v4A?}|r z&=&e|T4emb{eM0_@}hE++6!UERbBWh=-30xS1ek5f{%jH(Su~rxC8J16^w;ro2d{yBbSk7~S0S)Ia0ujTLWo65&%S};JswU^^uSnYzs_%cn`UGJxJ&QGz%Czs z=u$Osb6J$}caC1QQ{;VGx3){+jQIkk7SL`?b|}lLeC((LWi@O562bz9c;#E)Yxc`S$f5zM(Zu z>Yozr8LFdI4o5Aw2slOJf{rQ-^h*&XoYC8E0kNiX_xTR#VTI@pm*y#xPG}ZfsQa;f z1yHeo{Qn?XrHCD2v_gf9X#Ua=Mmq)Hn~P*eI2$o{q(IK!-&t)F#nfV969 zCB+0Q^f1&JYKdE_xK9@E^LaZxIP1>&RTdb^=`QY#$iD6*P5SsU^g03`I}l&z11Ej_ zQSdTyq*sj-zcSJFIvJr(yI)|12EGj>CErGnKIV5Fx1)3bSi@xXh90Zgcn~qH*@kFe z`IQeVL_g_Z{$-^p|GfvHiboM|tJ6$Pw84|$y;>F(pOqDj0|E=L$%4MK&-k`4D;aqo zPV_;LegyOGd~E;`U5QoI-}({~)Y&QNc>nROV}L^A!b|q_91tbF9#hop7sU~leD=I9cw-#-V25k`eSq?ub%V7*fM(Eg<-%Kg^5R4D1lHN zj{{Vfhr^O-aMJ9`u|S|;I$?^9htYdoDg#n`lR!)W>ylvA6fKkUM7Gb%UlwSe9Qgw( z{-w1Cop|1Y0uJ%grLojZixVu~*$VcE*s8<27<@#0-5ofHocDsrIpqL3Pqu_vYP(nI zLJ3jvIC40Gn90NVDUkvBWQeZJ0m1kp5RC7*0D|$a5T3v+FI^Bz9RgLJ$W|DJ$5tHz zRo;lNON5htfhv2&C@Kb6UlY;Z>Wi*$GR2vb`0K{X^78vF!TO(|k6*f`4=_xR&WJls z^ISs)$v_oeH7d|?{5X;PF5^)X85RW&CHg-Qp-9WMgDHq8(JvTb ziJ9B~>fc3FvMA(itV~E#R(K7w&OT|n5m{>tM65_iTJSKKV3Gq8GGk<{I?cFic3thR z_$euNX0LN|Cz-dOrKGt8Ka0FCast@BWv4*zR!Un zHr_5))FQYSLLX+)ciSdearEn=LN5Dis;$rrFYYDxC#fee_waN+Eqbf0$_|TUW6DN# zTD2gNmyy#u!gN?aHH5s5&+YS$0+G%Vky>6U8Vb>)#%#TP!nP>HX>E_Wcm}u*x<98 zM(MVU6IT1mb4z0JXB<#T8#ljdY8sV;3C$4R{JpP&_aOaw-4Sg8&ByWS!UXGN!r9XA zEr*@#$|jCA$X|EekXI|=Wt5qTzTNZpEOG>6frE@{W%bJbvG`>=f8u4Q?ytU@9=3*D znCCyQGB1h6yUv&ipBM?=an|Ccmu2D&ez7W@$i^Bdfk=*6j*bSaVxBm4P_P~OM>1(p z)@--__lb#}ls>ZZ)(XFaE?N%EAm>Lr85|in{1idCDx#OO!moS^POAMth^%)}h@0x4 zS<23ie!~-s96oc~PU)25t=*_QLkcx&H~Cp{VH1P@$uKj=JbqlTjzOOVqk{h6D6c1q z_g~jvtsQnox{I#eYWHHrfvzFa>q&*za<)Fw%^9`rVdQoOidi%qq70WOwgap<^gzI( z(nnu|Ut1HkGD8aJL@@4GPjS6gb&9_+HM2HNUK(iv=GgnQI&xPq8Q(uz!-FIc;$V<} zdaM6LLW@F94j$$s+|~X}`qDRDNhA*s1FPAc_qaC6W;H>90eaM%Ki-Vq-tfWIZWg0p zBwcJ=^U+gBue1a{Wwu`dlLrR2_!bc2Fmcs5v*HH$j&&^u7jwX7QH(;TXC?kph0lF8 z$m8GH;&9+U25Gb8kj12DjxSceTLE#P{jz*h)kxDpm*u1pQK>UkL!CmY7uWLFY)TbB+w zu+hP=L*s@pGi%MR@yg$!N;_du=qQQ-06g2bI01l~g@*xDaFYIS-mKwM`;haWfupW* T?)l(Fwk;?#CT4cb3^B#b%*>23Gc&}@%*-(}GqWADV|E-fGh6NN{SRsZwdJJ#nltXQ`wlDJCZ14FIT%3Mr^5aA?2-0088VR}JJpPeB<42|aoM;1m9k z%^Jt`yOq9lkC})JV9d&**pidAZbZ`C+w-V6hQ9N7rC+V4=K1RygmpKGs8<}BWRuNW z^STzHan;o1qz;IL>4v~~de%l5N{39yQ*03OajV(J2G3?KMmd38+td_M*kar8@xZPd zW;JAYFno8AtPvO|dVs`&G}RdHoTHaQNkTz10{VY*fwunjbtIYs(5FuFU<4*u!zkXF zRom|z#FI|=w3ql3M9@4l^`GX~IjS3iA%h=Hh%wLx5C=%sAfkluU3msIPTHDPT$UYL z!in&wfl}0hh=$8fIwLM$miPRH^BE~??~M!@D4cwvFPD(nRLhqN4CrLm?s$+O0N?;* zA;g&xcwhi~>G34vlD5#GP;rV2I@Ws)Nf7qetf>;z{HB7L#^9DaQo5x~k3Obt5L2Sn zpE=@*B#Ol7rYVRWmC{5^{6|{HSt-hX>!r*w`ZZSRSTisGgctl;V{er(Zh@43oCr;*$~v4bnVVd#M=5KbxMF?fJ*moS z`FXeFSs`ZPS5vTd$-bBHOR6t(QeVZ+O03dd!CvR_r9h!NA(rdfyxp>mF9&`5j zrGCG^1$BsaDC;mPClt?38cKhY_Ucj=*dLuST2q?PIjBvg;M;@dc-aC4C>YylZ2PIY zF}OzI*m3sS-+MU)95ipkWD&czZr1&7m;G%S?~#I3Le(*S)RT)Kb8`u{Zp9k*t9QpQ z`;K^f_4)Yvt7akCBdKE8E%&6#Xt)L-s)|EDYZFM z*x}3C zW%-mELiniVElK(sfF!u9#Gv0QRrZ@D({d)_aJBSPzDm_>BhTwGm_cEa+ET(o{HcMEKPO!QBDy_qn2*N9i6Z;I*!(V;7^zTC(CwAz)dyY6LD z$8&`jMorliX^%}%MCXl0(voxN$JM@_NLKF2;_$&n*7PR~EHbljWk_E6IGw9Qmb@c2 zMYHZ_KONiNneUZTLVhAgXRPS*>{=4`L_DwM_|%<|5Gg+!Uh3-2t2lU^nT?Hk5Ipqo-zV_E?o^{n|-A zpDg9fGLJD;@H6eSPf{eXh2nSpS$VA*MS`KC=@0k0@bVAGuYm*li^arN%;%i<4Lqad z*)yR&zlUvq!nIXVuFWaSu$?v1F*^uq>g4yxWF9l3KA~ynYARz)dY%b2hqGI^XH%DJ zU3G4){lP%7%qfv}c`vHdogT???9Ag-_LXhZwz%+84Ab!pk@-M*$ez0TdedRSeoG2q zRGiWL&4aDDxgd9Q$n>%V)9IJvcuMj?o3Qav`NafuXA_FPEl@ayIfKr+9e&5WNl$7Z zGplA%d2%>zn57pTBh~Uts>_27G_u{oKuW&V4JU8%>YE0(*QKerOu1&Pjf!MEJr~Ua z-`Ie*zJyynu^X{u#-5`5j!+>+%ceKrXF0jB)znWj+Mu!$=fXucol6KsX8ovuGKM)1m}dW?}N$^O(P zEvvc&t1Q;GF96|L{fMI^r&`qmO>Vk3q$r1e6MHYy7UzhBGGxS z$^qtMK9w46aoUiI5`E}uAJLLrMKyviwfYZJQuF-Lad=}In4JZ~Lhx>y+=`^2V75&9 zrLWOww(kloI(|?BlNgEaEc2LLK4`z5G&EPX2TaS`$R@wJSbBW>1ivV6H45gZMu$1i zQ~9UN(#VoR<;NL1+x8j>vHtW8f=m9)GCE>EApHJ4#xgK>VsJi~jHBHo4euCA*z~|h zv8nGsluElsB&)6Zn5#q^x#i{S$ae<1eW|vzhM#+NdkSGotx44w5hgX_P%A`ZV1+j@#KtJyh0llN8 z;BuAds0QQLlZ|Cah_lyv*;~DYD32?_QhLr&!6lOxND>6!wD2wm3WtOuHn7`C=D);0 z%O@v8@p%+z#kimRl1VqV6gJQKMu+w4^i@@EWF?v>`Ag{Vb|AysE%yvaV!2I-lXfMf z`pBxc5i0j(xTX8)J*T-)gAWI(>Ok7qa1K-d`HCS&Z|+f{J>!7Agr){D-SsuZW`J$4}{8a-0dw2Wb~ zO_u+g+m@5lCFseyB+j_8tjP8d`s@2Z0Ar{C^3{uCqtiqNB5~G#&|=Ch+V^Im(~-p2@xM#d zX^c6Y6q8J`5s3BKO#|P zef9@OgiIHM^2q4?DRYgaD(}XL2e6L=0|=F5V4MZ>ELzvc%AcN-@jjA%&tp+4GcjOQ zrl5@)MHc0fDSgTfoU8#J>$1knKKnL|I7ly8eA(~3WDVHAIY zoJCa0q;{>6xG9#6+mmT+Mf;9r0pup{PNo=w+Tl zqFzI22IS3Q3h#SYAF*ALpMPN$L-sGUZ%g{5d99+WNrolGDi3dk1t{!A@E=pTmNaEj zE^&&2qer(mMQ6DbhYa9IEypa3$+!5pt0{Q}VR`!lWdLVl4NyZo^?)U{Hv%6&2?KUL zUZb+Kb5ACoF0(e`8(#_=CgfGr%JfKjGED_SY98wNlpOB&7cC~drh|}jdLAXIL;MyD zhTcGl=7e4Ldh1b>Bn4mfEe+&DQgm7@rFEg@VcJ+{q5NZq=uF|unZfep#+HCM}Oo=7p3nubgIB`#=0cig$Fu>L~wtpMV^+7isw19q=F{5syk>2AvVRYpV21h(*My)qfJ*`7)z)QyJk^KWn34Nr+I)j^Au5B{qKQhg2-N$!}i={m>wLS zrqH}f<^B=RA_`@ClL2WUpMDx-)XMtCl?)MYx=MH2C8DM_okXg}nX+*kBzThH{8WTF zbwoi18G?j>!%MxGa~M!LRh26?4i@}!`WOj z5#uV-r8J#W%Xzdtf+UI@Ye%O2&1KabNeZK}hC?7xRxfZhU_MO348t7fG_)B_Fij*d zx@zsy`Y=d@mUf8-$F=xJVVk(~;Qgu%p2RO}dc4qJrsR}A(E6`+Hk<;}%;8$1_GZd9 zZ4@kzW@1Z5UFyB-6w35-yq>Np5P>{oHa+XL1UQ@=O zI4W<$JDnwAk~X=g?EC@yiHnx~NyF{?37_&!y|ym>5%(K{l}xIr=ZnR^+7BVwG(tLZ z=vZQ1dUB~PeU0~DS=S@&g0AP7{aPZpOg=`0^4sgh1B}rSGR{slIGHW^+i(9G0+&us z07(q;p9~MfLh89FDuKNRFLy9N8V|U?ds~9B+MK&(Taf_SRy8I4BPlou4*6w3M~H9*Xq%KOMNMKAWMa0A%V?B32?wj^v2cU(1FV0vbOb zXb;6ve;P?aYt&8eDr|*@WF!5C8~)RhSt&&j*ZUl1>KpRfktOv}*{aB}o&iM)l4~#q zMYF%`lGJapWwI%RQK=U~VFaR%AxGYcDWIrUTOSrJK`t39Q8#CuS_~7OrjnXmZLm_6 z931SGcN0;2WHA|oz5mei=i_h;ib0}`ulqq$G6`mVs#k})BG8Wb`5JX;+cG{h^nqoE zR~?6luug1x)kVBc%n7>e=0ZkRJ^Nq*F-qAo3+Yx7&0-u9MwT6Ct%5~hjEg$d)<3ST zfiNPl5UHHM@D?nC$i?b{zRlSKKPW}o-wr{KzVnbR|!r`IQGX;ae0mmXbi(jHOoUi z?Vn}#q|=1_y|`c$AqoN;y{yTRn&{NH*qY+Ec{`srXPj@rf7@v7gCot!*>@(of0F3J4{f5EkftOGUvND!BzlQV7Mf(k zthY44_huZsw{?Lo@*`803GHnArk%lYIC|zi8LLC|jv|$G<6v4P-vsrUIqkB~VjN5= zP8xke(k*`?;S3Tpey&drmP#n;s7S<%Z+Q`_Ul4MfmF6y891T#LEELkB>SAmC9fqRK zOJ{*T?~`!2lAuTmSN7ERkU#Hwt6(%tN%Z?@)l9iEI_w+*KU%k>z?-n;mghP6}yQ1G70Bpri{;k$c z$jt{%qS}w1ux9so7%%_;*d0|0JoVDtH{BcWPWOW%^ECn4;p07It@4Jp0H5}SKEnaV zfC3Sj_Jl}}$g;|gYS3^*)owl10+399ELcW(xvA-(LDaHJ3g27?y<$J{REgc$INIkM zMV*sIPP+;;Kx$FS(2X~FDa0>j^(E~KMAumDFRcJ4%yts(6(nQf>_i^$ah9xdGe|3P zX_g5P>NxiqheBSw78j;g#jx|48~Fp5>R7QLQ4&K*e~jTM%lr(gHoqDf7L_8K3KbAi zJ(~t$t;VQgq=`|X_{foOxC&8{xt1^(HT$g-B8fVeYERUxq`dquaUb!NZ#3poaWu|U>8JQ>%*j1T{0MIIi5f8ietfKLv;zz{ka6KQ%S&392?53saR zL2a%aP0=3&jXYFBIMZfQV`+HsxcU$U5#RE2vE=C~wyTAey_qe8`jB51n86qebO1)l zjwXEgncYZ1NcZRf0f8R)Iu^Y zXU7K;z#=d)EUoEveR^WzihvCOJv=cO5{OXPTfNnm0~4k6n3 zA6_n)3~DE9_h88s|2a`1I14Aj{iDb&(B4n59~4a}w|Bc+Af;hjnpm8J&%)kKuJ_n_^xoAUeVZK?LJvG1Z>?{>TPaBVo!st3C=b3b zYAHxLn`YNyX!~1R$$O-PV~3wGu5#ahr5yYUtl#MYwb4%#P|$QY?uGw?(7E0MQBB<3 z20WfIq>#_EKlkzLkN4k(Z@gQo=j_ki#dfHAOy6SIfxM+v`LEf0g4RwlW!rMLWC>$h zyfSEH2tztl!wuE@Wc1M+DhdY6^AHI^i&2Euk;}JmY{69Xp@Riv3E~LhvhiT(7VvU; z_4U<%9N!JpM_-f6-KPi}s*O}zS^U1sG8w+6l|-P0m5@P5%&Dxanbum<>L$aH$x31i zyp$)2mc$m7QQ`E=C6O`vw$qrZhco-qO+d1p(uD9dCrGFx&W|_`#a&scGtMu^)sJ6> zyATg72UTz19#zN?3Tu)Kz%*2jHz#mA4>5WVR%0{!*3pn^jFarbbdYGOQPipgbNGg- z!ln0A(#|ErAa<>*l1+3OzDj70UXs_*LSQSa;qZm2GNtqNIp0k`!nu;i5Xz{NPte2= zQcGj=4_3$7xV&ShBx_)m#uinWyi2L~zY^EcEWcXN($Tu(39KZUydx{CV)N(Iwc+#k zRmWXLmeJt!q*Z%H=NhQnzY?hd0Rz0ctTMTSHbY5^M`+_l)rk7271v?J&7vjpwX~-1 zNvi35A=QI2x&2%|we$%)w7T)!h`AD~Br&-&lG*?!H90{+hN@znf+Atv!%4lcv^)-KJ0mSK{aE2`Z4oZ2JVfu zoR+&)1A&mc&Gps4>xGO|!{*J5hpHLj7FkHjgWAxKO}qNF!4 z6{z_9X+YJbC)O~qf;4}7keNBDUc5{7geI@b% zlG@%Qe^`I9o1D{bO=^>Lx*MX;bXDcy(U z(Q={5N7irT@n9;d;WD|+xE~9LW1T;ec^>23M4i>}Swj6c0AAO_dy&y6OgH>y#QJ^^ zEJ*e$dhONXK;tQ?nR@nKR;wyuB(8!XBD*s%M7bK>~Lg}lBp z?TQo_zFS&ts_o&O>;lwhrK2U@#hM_QhnZJp@jY&@IsI@Vc{Q!cvy}FdYC8W)@_Nlt z;1SKm^*0|Qbt7y(7giJPk37^(28v#r=jYSu&6{P=Twt+(2k_OHdI_D0h8BW`>J(5 zie3|kKjh<0Za1^+1_lgkkHm49fUJ{DL}NxR(ch{r#dQhF6=)5heJ zu#)_NA{G6Rt7@~r;_8s2f$R_QGS0hPUvMI|qBh!0vkNo9>_@H(d>3iI4$Dspz9Q9B z`=r}c zqpF6Ha?G@~45Y_`EH}$;uU@c^IcBuvWd;S=xa8bHoOBzU-MfLwY{|aZ*?0WO8_H9I;6# zCEp2Co=!bob%qmemXje6)%pH?&-nYahen7G?w*+U$Q%a(loQ|7{~NbVMZ7%3 zam@~)=(DK@9NlBn;W_n9K)b`RC8D>s^_y*$iaFk1D&4gmfM9z2fLXWDS97RuMD+2* z=3Y3Yq|VQ0Ixsh~ue-Yf)T{8V#V7vG1t8Ftb8!kGmLzlW0Q=Z|e%o-DivUZCJIo2f zh30?U2Y)xl0E6OwSx4(7Ke^CX=V;KV;^chwH-QYZdEPQ@{pe|GGrZGDRjTnY z@Jx)h`MKw3He6`WmfbcYHzB0BQjwV~*Q}I5jL=cE>rHrz6o%u>D&re$>Fc zdG8}6wWmbh81O?M-vADXK1#g}efi+y7iQ^u!#As$Z~=w#4d;VjZ`qI}kC<<3rD*`L z^0}_;)XfWGB_#Q3FBxcsxbM-W@1v7`)^H-56R9viL_fxk;Qou}*|=YG*n|c*UQcc5 z8Iebi)gPoR?I_9PoZVSpnUO_dt@k#kNP5;Jk(~!>9=uZo`=Sqc-A2T&&DjMBJ0eKIMq{20*_A+f$$sm*y>%%TWCaHC!cvdhOEP$W6yjzM?iK_@$d&t>r=RpW z-$Woq9t->^AdtWwp06y42y#p$YNsZ4n=pa_-VSb6Vf@{~gQ<6G>6#`)up{o?yo~j^ z87Ku-E-w}7SVTnP?!P+Hf^NjCVC$MZxpLikAosBWQ59>Fw+8$(XquTvQ%%XD$c?lN zE%S$cNIU_o{QO%<-U z3(wK>+&`K^_#Z-jzF(Bq0GA6G>7nXXiya3K5*mUR{OB=0#*s!qrRg8Z3mN zIU+%b?Y;@W2$80`KDz@E%G7xiZuyr3sD5*nc6V11BJ`#M={EaTQdH52HCl3nK@vSH zdETyD zUq${f66g2*cXjF{hyo|aCj%2CZVQpY*5j!_0^@+o#^eg^3ZHcoxU{K_A!!Ok$V1Pc zUsmprTw?6&2>rfLDhq^ouAX&Grt+O4(KIRjgfG8!9p725Y8~b*1J8Mp26vdB=z6v=^kVeD57CU^89ViFPKD>mb0aeg9)pu z{<0Tdg}o(%+3LkA(YY3hLORZ{tb;wOCXTy)7`zLS1B(NCAyqc?cW-(& z6IOZsi5!OXbUhqZFEIG^eEQb?Ca)Le%gy<&avGSCtBV))ki47`Wa!lkIT}R55!=4Q-$(gK&@`)dd%tLm@htnw7>tSz9;aQKsBnHew=7sko+cC;OS0fw7RFkZfiT5_=sOle%iHCZV2b_E_5-nW7@-wKf^*fYw-Mwq`#a6p zV1J_K&{R@xP~9*Z{L-QI;E+FKGeHlc@r$^o2$B2vVs?gc08h???VoET`s-fbSDyr| z013U=b|k$Q<#0yqcRmABSXf|ZcbmdcU?RFO;>xkhj1*v&r@K>g*;Si51lB(Jr9+Vp zF{puF*G+v9se=w|+xrQaB26U1WthhQ8Tw>go?9??{>6=)6ddOaCl<@G^@ex=+I?x; z+EUa%PcJ7|Rw~zZmnyHJC{&vsDX8iF&Pe&qkTS31-6z8Ydu}}NAQG$Pt_-WCj8COYALIu@Mr;Sr_s z|Alz&DFh4aUFKGS<$Dgv@O*&BFaZd^XnTu{R|X;N835f~V{hn?Up`VI=kye7C2w$% zp~Eu`Dq$-#cOz{mP!1i6WPe~;kPfk^=f(S_u`Jv5d)(1Ms02Kfz|7%RRNMFn7n=2o ze2Wk52pBm>N4sJncc}$mtG#&Y%nj_%pzF7$6z+{kXbe-3Hx)S0oF+E*W?vo(5cNIu zsz&~b>}P1h$RQ$OT2(;NAzf5G)@G1oR@_cV?4% zm?_xZ3!C8$N>*HOF30&U0uSzslhK(>{VY5Sf*+FF$uGhsSHu@vyl-5xq9{L;mTr9w zL}FtK0oYG=^EF7e=s%=io}N(_*A~gZb2qYFF77xK()TA0!dG~xAFU%#8Z2}~oS}Ow zUwA%u@khM?vB7+wff*8jp*DQJPik$6yaWJJ5JJFhlbv|LwX-J{X}&`o8p`A5{r-*? znm>5<##Z^!#_o>`;N1*CzeNf(7&b3Y*=#P7hF`@)O}&DFKjz}g41?>DFv}l(YAiQ3 zXfV+TbvG=>0*@p!AL`17=R$0SQqPu(51v89fBbYjixD8y6cV^u@M=8oh6~~nSVUGR z)9CP0Xj^*0KcVD2IEbWzxIMmowvD$s1LEYuu00QZ`3$jmETN8cvf3dwinTgPSd9rK z;EWKmI6r`9o4xQx=;pnq3rqy0*@6MwT-LIk&K_|7Tu7KfMDBtCW*GpCo!%M;4_egI zEqxVNcgUhUvDiN}l#ezugA>2>m0nRG>9R-rS1-cICjzgO6CVt9?n+vst^_vPSB>TO zr6{B0whHw5rb!L+oDNcT>1Th9iFl)*N~q6d!v5@-lXcTv=SP1<1KM|$UkY4#GM;u% zCh#}+zr%}R5jvwTWb$Bcgd||-%js*{l1;BRq?wV*^W9o_jSZ%-WL9z%S zSiNaeJFUw+;hfx9l@3GjTFcrJvZW^~57+!WzqoV922-`>)3MUK3MDxZHYoHe^`y>= zJ$O);YIlkg^bLGkz~g|+OW>_q%U0i77JmP}+?6o`n3V)fly0(Ae>r=E%{-`aBmwic zAirEn-Qd&)CGEcjOx;Ymr;7r@^uYahrrzkhT2lq>dZO1)7z!@M5mg#kIyzY4FI<1M zYcjTpjogGCkjGnI><#bp4?dEP=Bw*w0Q?A|8RN+$QD2^`T3SuA?L+$O6 z!592pVt4dG>;{E}cVqy4?{1<`JN`^w zr&2iHeB5_c-m)6r`dm`7$-m2^aB6i_a7k!QH#$@8c2HeR@Vt zJT4}%A8z6urKi8H%FQq>d3{p}Uxuzf1u{ePfvbIt!lxY{ZT%2LerN z(gkaXeJOZ;O^;@Z zTiBT-%blEBfs+D`PQIYytVkV}Jp@u~bJ{T1z(5|0x~1j4GH;Ey@M$@BS(dPUOTwqJcDd2^2aFTGTTwR^ zE=i&E;Y){>=B39S9=C6E7cjypf%FmgH)jATaqg|EvAqGQptFc+8DE0-#llrLi`(Kz zT*H<2)_B4fG3SGCpZ#auMBlv+$TU{Q&H3F%)C^lv1TNoh7hYa0(gLfZ5sr>Ut-qA^ z5UPQWsmb~=#XD#9b4u#uvo9a|5_>k8a4?&BzCz2-$X)#)_l6P6g|YqIESRyZUaql5 z8#2p2rMtOB6BbAxuhh~a(UR%0kGIdKyAH<$-7Mx=_%0xQK_J#6i4A7nvysp9y(&Qq zB+8~-dN;@p8{qtlMG4NLyH|EH9 z*Br-}Z+jdoz7}{7T^^MUnQtBRV(JjY;N}R>y_S#68bB`Yu^!b6Ykwm;z-9#4=JAf+ zb^S{=)pMqG5d#Dp*c$7Bn;T2FPR;P_mcc#qX@v!5v+cBAyJP1n-KAgK(NtAVWG|*% zXIzLe`BHUCP!B3WE`NJ4qxI3?umO=~zIO+{F$kB|<+0M1gm`7Yt*u9$ZO1x4-jw4O zG~AG#3S-fRK2Uq+RQ)*@U1A|4eF20fkFybFUw|xVegZR$AWI;RW!=6o7BLAbUi@Rr z5o_WB-5g}(#fm%HPD++g+}In+ks=5SU>vTtvAvDw+6pp;ZI0x6{-dV_2r~ZO>qIvI zFgR_W9@fcVlj~Jel2;wRX*1;fY7hlR3J}oYz})9B<%V-7(4(WDsJFrL@(0w>jr86t zpL!4sUxMEJUjJWR3a}r)yC&+C0{|FP!Lz|=Y9VVO`QjxCr1^UaON-TDxi3-SfVQCa zgRy%OCDUZWUl6BTXJ6*)^`ZJuF#MX{f}iE@*e@Y=jEM*#K(oHR+~!CpW+M}7Q(Fgq z282o@x)dPbyV+o))8oZuPb>clPt0xAMo+76;rs4Q?5n)c+sS)Nerdw{%!}Wu{yBdw zXqSKA@8R7K1bP8`$9Uy_XSiXw;_rEz^Xq&Dd)EYcJ+Om7LuRivzvMmmue*f&jzIe- z^lwuj&^gBI$je2gItXcFCP@BB|J;xNT^I!X*lGI#0O~o5eua3S`2kY~GU-|Of_Ut? z?%DTU^Vxai6sHq@D+T#XZh>AlF7!cq&mhuwmX^B zo)^8G6XB07)t^A8bmSJO#%5|*O(u$;=`K?Le{45e0T$w;AC4ZYMvk$+D= z{YRlLIWF+DU0k>^m7MhH2+g*+rI3voOw<=&bBn=pwBSDqD6-P|)h=&!&~K}rQ|D)o z@*jBfbHkZm1x+XaPgeZ1jnP|2Q6tWmt{g{PbTkO(#h0DFs_zfv;L~ujg#DcetMyc& zm~IpQO^Cd$I-T1yg=JB9l9}xJSe*C;nXISxaS{Fet9ef;I{R}dv``Q%nK6dCL`JniLw3yOQTmOz##=Ww2OgbE{Dc8Jm1O9z1g zm^2j1r83tyX?`*tON3v|FH{Gs%%qzC-DUoZ{wY^#URiHV*(9Y!$^rm)#!y{S27|V4FLQ_6*_Am$5(BGXEb^rnSlnaM_iV-v>J7IiVYja4p1f#rH|e zUrE-cUrf3-n4E!u+=3^@igp1*Aoz5k&J7*<3Wf3bU!m7EZlc5%q~7~em1gsPvC?%t zg8KUiD?5-Q0zs$>jo$Uy8BxslP<`1!=VpqjUeRs;*kpSX*66?Rq5gA=N53)mnOg_w z28X}D!|;5E3wv^FI931GrK|6jc=SsvXW!wc5NBkD@}-hlu%}~Lm8$#7teM|Lr$Qo* z93-K5QR*T3;wS$u0gN&C#OyCum6mkN={%~#&FqdSb^1F+n^0S}{Kw{FmT}4;18m_p z$w@?|RA-)GsDN=6enq~xRb?1k{qKB9ema0*>gv{Nm%nv9a)wdly2!~77_80DL`KRk z`u>}^h5U@V1LL)RT6%r<^i^3x)`XXV)|~H8tKFuotx9fGeoZOuEhWLZj|}C_HTffc z54#-&nemkPSxWr}&Fc-XDneu~Q9 zcMou7Hbge*<6DTvO7muATQ>>(V(`#bscx z9Wycx;*zQ`ih{&aYU_YLhxLF&RJNZPGn4lKB7H~SaoAZI0hV+$=GF&1;f~Qx9lKA- zkaxpT9O4&8&V4k-yzxRli%%Qtik+v}`m?(Gb6qR4k*TM~^`CRPE6CKbw~Q;?2PSC= zeN^RSPAs&Derui>p2UDBIjkp3vU8!3&btR)fNs{jYc{kV2rtcjON&M>(VZ&(7Aqge z&*rdYKtI_|GLx(*|D7iJ1lgIykK{rAjUQjVbus37iy9tckW*tF@s0-%yGFr7MCC>gavU1n&UHWH>Uw(6S>q-3zDdxc6%WHP= zC^(1O4IlE%ClY1#kBz{|d&1EhTWrorEU-L3ZyPazcMhz5GqgXq1MR~49HQ%i?F$)~ zVEL>KCH)(YRG(*lqQU+~jpS{WrV$>7h^nYrxDLzF0*9%P2az-6)Who!OY99ys(eiy zIWZ~d=z{swK%SE*&|0{(0Q3^FUJc)Q(d%nHa60X!|G6-pMc3mG2DJ!!Y^-a|Cl9sd z_fxt<7iqvYO|kuV@s;1U*t2(wkk#PIjFj!{a+4$D>c`#||GCfBVhA$bV!uTYURFY= zM^bNo!#Pwdz&Bt7&y74;FZ>;|#!YHDyYDEuoDj*OxDoQsOwY;4U%0H@c($D}5Mkf2 z`}e?mP$%J`_kVS2I|^ztQ|W)t&S7AD@+DMGxXiT{LAsnws9b1x z9a1BcXl%m4{+u}rY=I39`+NQax3cv9aS_U~;Ra-xxm}G=yzz#dh3~)llBaWysK$;U zl8vB6(w|Z1L(9)Hn4c5;)tyhsxrn|wppeNl6jHAFMg~F87Gu5As)TJ0*V^2>Y_RI8 zIMO?fFZt#wpzG@1FWl(0>4_^OJp2m|$x&$6{lHNv+P(^Ytu+JSI~ox*@1xDW5Jt#E z{myO03teCoDJ+j#Mrtp;Yb^!6ITP*vHp~ZI_v`({m}tL!4p8c^d!@pZec|{^GcYda zJjk(^Qk4u+4GA{=IAP`M1x2Oj36I9SBsm6#HN)jV`wa8X;Z_?JDjxsZeCE++RV!%EuzxDTopGE z{_W^$S&ewkbC9qA=(AsxS$&@%L228$XHJnTijF^R*8MH)c?aFY8%p{wf3Onk(Vvs# z;8W~WN3*Aq5pbBEF!O)!dN`cjsZG!gHrvzravXhh2bQxNy6K%oy2`9_oB!{-C0Lgc zT8r&#$&6uK3{E)@`&-*U_cl}xXL^$qz|*a%>G(6K6-Zhfm!;#!G-@#Ri~+@B{mcH+ z(WxpcT3?p!EmC4o(WUEo1Mx|(n1Y1tcpD4vg1u!~!%0?5!EjqNZ!K%%7WyxBQx5UBv3)29Liu`hN1gz)9f3)u}ii-&(*)r5{{w4vT@KS0(VOz<`766#u6*6u9kH^{L0shp-pkm(L9|rzPy9ew zDcY{=7x~2mY;IoeUHce~S;ZF|o`Y&$(dz0fMzDORDF$X>{=DJzprAxO=NF1;MpaOt zY9fp2-(ISoioCH#&cUdez@33l?q2RefqQ25EJmvCxS%maR(=o=goWINZC4WM5qCtAhd= zDt2zdsRIAu?<0BsMTEa)>w4`iNPg6bU%gX2HQbU+MkGFJBjr~Vfc$c)nW>u;hlYUM z$>9&a3lyHs4MQg2*XHn+Z0#XnPsf;E7S>x~(Zi_h!-2gm&ztnXW7*dT2)@FmuJ~tb z|Jm5X;9$1T?p?OTVph}(xn$S@J`)D2F{LqDRwsbCa}ipvvU{xZv5WZ;>YP)&d;hXP zC`k*9K6BG$P~$e}O_Olr-}q2Zwl0jSXkcU^VWRRbN)(lL7)85+8*Nf@a*o4sWdj)p zH8y)C9*+41>yfoXoQ&WRiomF3V6ZoKrn~!frDiVf>EC^s>1q)zitUvCPVo<5*kEGuU2-T` zJJbAE#+_-EVzKRGrvcff0)IJLhjM$B=B9D7=lz3kehm@uVYotDB^tlWX*!0W{Xi4# zk%u)$e>36ZeE%mQ`gwQRG^B$Adgc$TZ9fxG;!WE1i;Ey4J6yGLvgcn^sSrHExKzQ& zJ}Vj1Z6rZIyz%jW^_Dam*ZZIQ#AQ+T;QpUReW$sN6=Rpsl*TcxCo**XE`ch#DWZ}V zR?~%Az=Vy)^{W5Y5!)m&cX3uW8SmU6cqXxvF?#Tg@&wRHv+h`9)%fOdEL{rwf%c~F z8XD+(nmnJZL#O_S>HqeCCOVO%Xa{2~?3D^@$xVOPcYZ29!%CA)JE4G#uI}FqrB6dG zyU^DtKKALF%>Q9_&|_kd7fZ6RL|a&>laMe^kX$%!YWsHe_WnK(LQV7oz5Tct&jSyH zu>Oy81erHTnxmGj0Nf%=9;SvgpWFE_V{b$1darJV8gKLj#&7huXg!Z#i~lmJzfH-% z9RJtRnXl(P z;{$eg<%4RFBmF$?NvAR@cxFMh+z);CV2C~c7sDngvtod5egN+iXAjZzu2#*101HSi z_`f>W|1i7w7--maQCS8qt-Sr;OtF{(oDh!w`|#sGPDK8{_^<>3c)xl5`16SWhYyGp z3@U8jO4+G5CCo3;`U?;e1=`ZW##dIxCmbHnd8|nEDBp#^prPPi(KMrn9!mHzo7u3~ zz9`%rno&Ik$9*wt2PR?uy%$JLlpw zE&NxfoF`O%;Tj13YwdQUKRqPsb_wf~(CKSPU9*HaWjXr9h8U>ce>?*mHcC44kI?+C zHw+pnL*lNu1nS_5$sOeCY5~9U%Yrkj|7{;gOhoChp;@LTO_M?3TMJwcFM`*u8e4ZK zsl&kAubQ^SwO9|ONV2Hsz-D{VNjJ+jm+GFM@mvAoxPjJG-L?3DB&G(Hqt0CDuCfR1 z@cJs;Q4J!_unjb8UP%dy;Tczd`(Q)$1FrLo+UkNzJK9!w^o5rA5w5_b`GS^FwLhI# z4XGL?3w8Ps{F+&Tt|MA z);uSLGl-VplU$Wj-X{LA!517YELvFXXLMpxFu~_VTqxE(m)9275P7MPZ`>911JlN9 z(T6F)7D`1PlUIl$*;RWCn1)NMzGhVRSJx&3-JeVZ;3ko_o%6TkNWY=qDP?hF1EYpA zuDtFU`{vA-yJi#K*`=*19qg^;_%G+E8hHG*Yq)dbFTUNZfSVLFA$=;~1}k)RknZq~ zI|yc5?3qz8|En*!>yIs4;Ok>&qufu{hBsTb*$qbkB?7!tXR&>^!;Jq^*WspGBLr*r zzHY0jOaYvN>LCwty+?;o&_`mpP&uC=;q)m`0PD{Gv4;Wh4tww+Cm(ZMvfM8>Le+ciCa zRi#90)VsT+!JZJ?PUz3&qcJnMIZHPF`$WH1hh!oCem!i2+^O|}aRTf1+JHBP%}r7)*`j|~{*1N99QV?1|oJ|PJ@#IKqk)c@*o=ptNS<|2W0!SDU)4xREXbn@nJXXeQU4M!cfVp@wc#X&Al}YpJ3Ds%F^e zs9V^}`k6ef9KeyPS74t)$?1W56mo_j<9*5Z!Fw}&yV2FaAhA{-#>xXN91(xHhapYP znl6YUI^>#1NkqYW+y+wWBkzGHaDU3uCcd(4mU^Va6sh7gg5&ri7`!U9;XJG?ieY!F z;M91dE8#QghU^bLmE{aO=9K~Y9w2>17rO0|brkuZ*&s4-QSdzozfv&1(7Ql0;?4h< zE;sNOk%U_#cu{tslW;v57ZC(#$F5P$N*u7=38@4(&OvImnl^0*qNL=iHwmFU`Ywcg z1#1Pin&)CZa+=YZ7a=6JgUWsaGH_@G*WN|+#S}x z2U}FXcZYeXfCl_s{#99yM4tG6yp}8aBY!T@O|Ll9VhyZM>Kf$@Ln2%765)y-UV(v< zWaH9#x&4CxhYUWWJGf=He$oAy-e+|!6FfuGAJ%mmLAhVg!Dr_UKwYR;MbyzGaj*uH zpceae+dZBx-P>Ekyzq#}q+fMQ&c#nbUh8-xdQaZlC3=PNZXA z48%NF>VtC|OmAMAC(o0HuDU@zT{c7H{tlGULlC6PPO`s4z7}aW`ynis9t9~->q%%f z?CrFcgR_km_5ftYePNUE1ZQbg;p>BHnEWu zg3-U2!o7z?VU{H>12*F#C{4#TsJ?2gp);Cb`CzE_t+12AQo5&8umN{}u3OWT3N>Dr z3P7l!zOM%-zA=1|$~$NRBmVq^4r*DBv+@h{s5au@32jnRWt#owuM43xG|8)VYnbFn zToP=suxoTs&%P|i;?4SQ2LRf=B}cl?EDI1<5P`a&jI4Pj$UA$7B2t2$?|%o3Ts0R1 ziX;UJMDR<-2SCOOezAYGhn}RF_%*@G=i*DfPYOC{Bkliy$>W2m`g_-6MCt8=_>Tqj z2j?6Z?O$5%icif=JxI$^%s8314OQ5Z7rFbB-FGL~iD?-D)it)B_A7gyK_lvYpja30 zEs0|-mL&4MWyl*V^x$NkRFO5+`|*Leg?{tIU4TEkTi*^$l2mYj!dW^BZ7mYtMVHNy zTe~f#CIY{*?b9eurB#80c!>XR>E^q`j8n}8l}@cfBnu?$x2L{@MY_sHQ3u;MRET_V zgB5C%n5@rovZXT1F{||10wZ8M(}T|_-JP43=T=nD&0F_u)ZZ7$A8$2H-k~b=g4!>Ic}|o8f=2wL7RmJv@}DkLqmlO!^j+N z#G3E;Xr9EiY#+_A1omdbM@t)MBFiRf?tW59Vht|=>Z(mR{A&bg(C@@> zVYh$dd^Ldp(4Fy@KejIbiP%lNm2~WJO3o{fd4WfR-BjA>{IG+#-NLu;539XW?MBX# z;|lzVP~GNN7c*^+^dSMC`!GM0H19j*ElWEw-rL3qohs=i z5SJniUQXz7$)8lF{vGWamwa0#i`$laO9rmWB@2Oi$}?+6Dw(<`IX`yuqsn%U53q}9 z5#bqT5brFUz5tZ(!7Dk;3xZsR;zj5{+b~n;>wW;>VY1|0$$sc)AdRaw@71Gf%*|Yr zNlDiL;`(p{kJ&A?OJ1=z|QPP}QBbYIOy;_mczhDs^@Q!LI$A#pDT$s%n)l+T&fiYL5=OPeZB z8j^famnp{!GKZ*;dNQVfXL)(O67XzY>EZebM9RWXQwso=>Xt|)!h(3@=kHv^TI$y&J88*rSN)DZro+l3V~| zV-L;flj)>raK`h`_Z*9~k~sT-;HY={pRX$W)X*)9$IXx=qAG!@&4D z(`@Gi8-$Y0!7kMp>fgPAQHqWkgE!PC3<9-JjAM{gFd-BA;R5mdTI{^u`a6f9;!e|G z_6qR~C=H4#+HKT>m&ZaQQtf61+~*lI2%+ZH@SXn6(zI68xE zxWFgr!Ah>*0i;;bhX5$!u;B=XmQ;5J%5)DqAw%cX+O<3MmYYY}CF#3}L$5UMfF@7_ z5B3tBtyXwmxL|Yv!Z217d_`D6sEXA;1y3-%&8J$}`n#h?F3~67wz{h2FJs^ubUkH~ z6a4&jYU3BIRw6%L(!<*-sl&^s)l!xLSIl7-#c+Rldp+ z&carqBQGoNw`5~#TDMlM0PYWsZd}6Q$7~AYYQsTWza6@#{BnFh8vkHyi9;TIjKyz9zX^&CynZpz zSIa`p03Z4*?vV#C)(Eee(IV8s(|^MO=_wHv-~>KRu~?@Cc=;8$RFdB1KZ@c6Nnj`H z6O1n_jc;rs+5#@&)6aANjOCX58K|VE*>!mqxRX}9w7_7}y*qK8Z(kIW~@Gkja{3d3; zGNvk`bJptM9H*t++43Hq59N%i0x|nFTJV$QV*sRwjsF(GAk|lD<~@M_2T6B(6R1=O z?vXEjxq$0#SO@54U?H38wOR$p6tneA1r?>kFQ}*=#TTLrYF|XAQZ@}r{Q^P1CT>uE zIKM2KnAO2@5M#%0bWk#fH?LYo3NHsZ*p?eLfJF`(aiR}f+V-CjA9(!*^BexO$m?pt zJl=(^OaqtW_)Aws`Of`^qU*JIQGEt`!UD*b=U=JeHNM(lZ=E)A6`*-LV~w-xR&g@n zV;a}^s;RW63rm*Nmb{e)9q=pOdgpAdR!4h+@g}|T^|qiR_LnFX#t?rB>Jg5mS;lPz zJEV9+#Iyb94R>#|q1WL4KypNar-G3?8Dl&&$`*~?m#^fbOAL&7{q;Yv zKu&L5wfhZGp`W*!P-spOA^Bz%0d%tP4abtG{9LQAH zq25MUtr91n);0$^0}*KgmK%&>W%sge8qlc5Enbt1a9m?bE?VMVfx#q39vU+OF+Zk6 zOsW3~^}v_kWc=WuWFPa1ExSDjUjF_ zOilyYesE3O4A%u_g!Oh>2uQWUsH6OzDKqT!#O+(8SmSPb8x@Y4P;GYAM2H!~*{A(9 zglI~TZr)mg*S9YZKxilaKI!M_brEFad^C3^Pkc!x8!BW#VNE+%wkq}Dor zK+PuQln3>9-BjE?e?AA41;Pg*X_a9reWHnWNvq1PWKFwK$Ymu0DXhZ)mkX(PmL3+z zn*Cl_0f~^e;ehsc013i=JLtX72g|uWT8UYH{<>@SLl&F@d#q}vwAji-X;o|>d^<0B ze@i(ytTTF@klij~+Ts{1xK#3P%LF<&va3d)?W z9dN$KdufiL(-~jLLTm00YL(WKI1|c_(Eg)5g?21jw}OEJOCZ2plc!JSa%~242p;1= zK0tPYAt9GC2*&+NF1<#;lo;h^C~netreR4OAC75nL5xO1gGMyi3^DeXS@eN~Kj8>R zpHR?I(|(8I*KD}LDdH_Vdakn~1Rq#Mf%iwXWjZ{HuN>XsRQLt4QRCkcaMS2ajEC7{)a_dzTju9}uoTxAT*h5czntkN?mZ6^r(|H;oDw0}~Huy#9_ zh(Gx(m8ABr6pTmQp04+Sd?hXo9evuxNrG^t z)xYg!ps@)bz}`NeI#&|o(6mWp?aYzuDY_-jOSm+o!T(g@o9Q~Q{62d9?1`p^#!#5~ z1N`KoKL4!vY#--QkLAYwt2i6acd}=}TR`P758OsQWxjD_cysJ|aP=Q;&d67}Wx}Cf zCj%|PxWd!hAGN~VR<-uHV@*2jA8a*1w-HJg{hP8|iqc~EJF;qsAa^%RHV>CxU7KB? zRfcg-NxX?+13VeLBMMp$=ue65u+vuvyNs(vX6CSpV6zc$Rx~7v|Ot6XS(vztljejY}T^%^qTZ*DQBid;-ou_w%Gog{AW%Mba)Z5`N18OVU+9wILQ`!kdY+tI|+xglepT@EU zN^0J%ZGNmi9J&r@oC+NRygv2>HKo#@h7g1Y-DHXWghuN0ogNgbTycQS30pNlx6f<> zuFXDTOR8Ubq&hmnvYh;D_38-pwcV*@%Ww;_sZB9zy4Gz;wV6(PV`BPv+ETaL1j6L< z?hfcMy?2O{(8PaP$6+r`ftkn~$8jT-6yoVKEuJ_4?N14h z`A;#j-nxuDpyxFUPDWWX!eb{I{zuSu3#?YtYTP-VUU$EilkLUJov^cwbUnj+bLoy( z2PDJ_y_{g8WIl!r=D_DzDSsM4mszjVkG|L3iH2m|VJPFR%qE>eVtJtw*t1Nx(>yxP z031rGQaxx7UitS}0D+|JHPPYCalJ;T@726+20N~cjsN@zaXS2%a4R+1eh}t8?}~X3 zQ2L0lu)zJHN^s3wE4Yk)bPnw2yzeF&9y$nE%w?Ga0iB$~eUyOc)^yKiI`*$s7SWW;dzzDsL8zipCMW7OR3o z;pMbyjUUorY7pm6z)pPh9=0QUV8lXH;GF$#yaLe~=@~qAK|7$^wb4=cGQnR9e+gKr zuiujg-#n|c{)t^WRm{aGN}4GEHm3{AIN~hfx0Lo_DDe3G&V>Z*#{odppe%`4bqKsR z=ByY!VZZ6E^}4*{4y(ikoyLZPepTg3b9fI1$FrAgBHwuwOx-?0{yqw@;0H$*N!>f} z1h9|5hLbf{?nrd;r%6)A+a%m|mU;O3EpuRhsnPJ{OjFkETSg4%Cmrb5H5=7eKBNDT zq!|N|PI3r{kF0wW75$EWLi^U<#Rt0mR?R(K*&F~*VRe;4tcAM&Egr^^;_^Gn#{Rn4a8$PRE-hj?v0K!O~>o4Vd2HT%h1nwTf_lH%wR z3NDr3K^+jz42% zLz!N@*uP%En^jTe2CAuhD|oBQ%nIzE7A%`~ z&~V>wHga_qN;>NuT*lx{S+_oN2#2&{c&W@vGrG9lP!t+-X*(HryxgR@zC2a%GRD9k zpepkSP+Rd)CG;SuJeOkw*8*tj45GlS-!}M;HuH2k)O6JR#<`)+$o$xcLdDCKDu(fh z*}hz|=ePa9Nnn{J)Hy@?Tux43j3WuPT&FC5LJ^dr^G;hu(>J(0!E(q|f2TULSpUV- z2_00%QzjN|O)fuxo}15|JS23!3?RkiYtk1=$>Q%ZKc~yy7PXTN#pYz=$?f1~F6P#k zIzPd*1u##F;ZsvarS`4{Qp6A|d8g&&Gs6Z5LwH|jubNF);)PkC$_lPx!QzmJG^ms+ ziUu*QStsziQ+@F(x;^ly{K^0(Rf~Zi_N}_eRy-d)%tA~EEL_Hd>PGeO&U|#^9<8O- z=v5al{L<+!W$p-zOBv|oGa|n2gA1Co!4z+U)ppQe1SRy(eX!CnLc5%mDWf(hIMOPB zOpT-!q^`_oSSVFW?5))fgMnMKZI`u{QVqhE7x`8SG$_W5iDN=bXmdej|0a37TIiBB^Z2mipk;l1 zl14-jyW}ESNRusTALw{1zQ(5eb3?6(N%j=0c&~Kl5De*lv8F6AFx9l6nd6r2|{qTl`HrW?6j-cmS-zqe1&X zJR6IGah_;+PlsuwLxO&6EceH$nQx@PT+1gW9gV{WXn{F3Pb0`!0)OwBO~|rU{vT2# z0ZhCO;4y$mmWWjRvSD^jIqgw+wjwUYBQ!zktL@PXGNpRbB}ori*O7X{NCf<6ikxQ@ zzksS#-S=t|Q&;Z;(DD z$xbWJ_SRQG)s*BM(c==k2-OP0-|c{C#)1wqD5WLNPq^J zyS02f&L;DF2&=wGVPVUN*Re2UqP^RbQRV71!*>gZ9J9@;xf_4245XUQgOewLty!Tg#i_moy2x6P-dsL0TkxD#9;( zO!8CbviZ0HK=Z2SK}rgfD=|l!?}$LYyKm8pl9r$?9Xi#B1STN<*vS*}ov51SZbWuB z7<`jzkfgzpJ{~D24sWtryx<~yalo6FlkQ~%6?E~RR)QaUB6|*DPq14@fr#-Bpi*5Q z8uW9e^btuRRXx}zSKsalITEDjK#9(htCzX6zhKLZ1$V~=>p;AN-WFuX5e_MpEE<_? z!S}6ulH*Ng+7NYT!s%@4O}mNi$?N(IFI9T1>2KxxO92Q3_jfp$QzK$Z64%q2?2SBW&ZL8m(6Nyt8`UK!&`sA@csY{% z2ILWOIrK{Rj4hR+c>5H~p^*P5dnjnNOxW z8kW3rwwstcLA^;H2`oecu-Wita{Cp8Zkdv#-47^0O&~O@8si&NCv>ZL=?M{8eaY5JRAd1b zWa+GyZ@o@tX6gu@#6TXtWX4zc7(W#wfDzb6kwFzqU01a|DFp|FQvXa?M%qAe*~-YT zUAKik@k#1xx|{5_M3oDlbJxB3txLKHNtUT=E8E;T%QOsbdm61Yf4wbwR)T^{=Im#{&Qe z0>i-c5MQ_jypByG(cGBy{g~-?YI_K=6r7~FCd3l(YaO;ZXT9%9UsxATheuXVnrd*v zNt>dcVOCBo@2mU)=B#sJ?S=Y*$XB#FDFL(0WKzh;+3wV@u!z@N(|#w{dGR@zq#uLT zE7#Y4?H6J~M<=QceqI-@+mvossn8>54Ho%FX$Se8rBo)1@{t^C7vsmQx2RO z)xmYRDV`d}X% zYtz*q)`K7%EZ{!Mlp-~&M(;Yuzxnyl<^&prjS<~Muk4DzVUS(EeDW%RVms!g4^(Pl zSfksalysGqkH1#?9{Tpjyi^IV5qkkb+X@yqKmROB>OVE!rKXm~7G&4-8uY0q!}iQ% z0Wsv%mco#{g=vy5*5F;Sca5K-mVmQ`-a*g;JbT)N(hC`XDayH{&Ox;4-RLexsd00^ z>rMAktd0~r+=T(6ECFVUD7VHg`lWqF`xu===KKwj7I)oO~fDSLVv`~ooD z?2E+DC}dlpwwC}6!qD-LhKt$+sPMmLXtOVgFA+6q(Yhx^^41LOr~5ssgnNw8dC^-d zKG#m6h3oC#)85hhdY|+D&e$E9q@)~91zihB`7W*($C;}caz)nrOMv`uRf|(ZG|4|_ zK~adI`8*9K$L6mCn4G3jnO~r&?_wd|H%C+JpGs)L2xo7xj+qQAcQqFFJQ9P7?l6m% z$t{|)AIpem;EnGZ_7a;Z;!88gTQu)b=0r)s<_Eew(Ch{NS$acVs*0sf#v*Ul!&cJd zaeB2vO4&_br$xJNwCh6^GEOwS&S)Ms41>dOep{goM`y)Py4I7p&EcxNcf=bNcu#c6 zIr3EhrX*ulw@LwQgsn_%s}TBdmJ#6ABW2Exae&&4L)8m>rcAS?4cI1wL&7n?IULjSH7)9|(cqMrns&a&HX;PC-z`#GO7CV? zFoVpJu*hCjC?dryx1?tnd1jbGOZXGKkf|`@wr5j=NA+gFZo8{ebYhc!4C>qa7G(zo z2IP|Iq&>;!4@Y~;Wa|`Z!))&y{EA-ue zzkIA@G4?)UTX2W2G$uz%px)Ped^w$4%p{q_eAvRy$Vl8C%LVjv(=FRqnU6MPryBT; zVIX&h`RZ{|=T`?jJ5cvskL$1T!c-I38h;^1sEkZu&N<>Xn&%8W)1R#qDARI3NX%+* zC+QLafRQd1TuL8{B&0)qVz-jZWmlr@o=`9_;nC9Wt13O7bB-Ffg^Jl~^ox3&`vD;p~< zFGN7UJnW*&T`s0uRo?jZgdh+j6F{W1jfhg>&DJ#6zx&GU47z7t`Oo45nAyGl>@z$A zKcZGg0UY#>79<>=i+3s3 zx)vJ)Y^R&a6D~b2m_^NKem%pdE48w1?SYAw0XqPMZn?&=daq%TepIg8#LmO<&`Me? zRDY~$FLiIaQ;69Bw8(yDkKzRGqSzYThcv1KykMK(A51(lHDk$#a;vn1D^+Xd?69|~ z=Jk)5ehouL9|3oIa>-7Qi9lQTgUa^Lot(ZJ3Y(Q0&7s|b^v$%d$@_$(vSD&_TL{%I zMIhXDXSjd^-(Lj@YXCpB?75oF@@!PaFfl1;I#tBP99Frhx1pd8GRp_$>2bc%M3NXfBGY`7?;ObOH?gFjH2J9pH%u$7UfJ1VOzkQqn_8y_lAi1z~y8AFpL)yDMuFz3I< z(SCs|BBjTYg~}Gcdq5;=a|O_q(jiOOxwFwMrPhvhE#b}+2GuzYGMw#G)z@dJ_`Qrw z=EhEW^K-g6;`S|E7Qf_xL$RvMg?;S_+%YARzovg(6wf(rm-h<1h^T(=q1<8=YzG}# zMJds4U>6Zx*KP+|yuD0&osmiMr4+>WBKI%da(Y>*evy{1KFZN16^+57)U1iqjVYBr z_Enz9bE%MBO3Ck{ITm`%^c#ppbW1kWv#KQvWQ3O~Ey(iLg8xxk( ztc+1Wg`@ooERK(U@B2|VxIfp?o$Z$*h6#LQHF1CT8QAfvG+zWv6vSZQDizDjxRAn& z3qEoKavvc=#nZ0!euMoAaZte2ISBN2=a`jH%_fyc0!@Etg6Xu5)e|4X0%C%B2yG=E z8m_YAbh`Boj)>|(DcNDJuIi9Vs_ce`F7-c7UZbZyLc2_8ix9+|0swz zk3-(kmO|Eds^Z$ey#FLiF8xqKtZ8^HChhH(-IUJ1&pwNT(I{)fBq7w>_VHWSz?Zw8 zn~TR?iu}=hC=>&euc_c9eaR5W3ul&DE^~wQM3=x?4hw;-ogG#6O{Pk*q}H4WS#NMd zx8k-0$NtcHcZ$VX$_oHl51W40a>kthTKbgzoBJO*Q`0>hKk@w{!51R%QpVYmN^LTHZuF6 zU`5zJl?msjrXag&#TB?6^;#ttBX#asnh)vgi&ZP~2WJxMhzs5Hw^QI3>hV4C=R zxdc$9$Xr4p$wu!tKii?Q@xJ%`vsB!hii}l?-q}jo5a;p+1f4{@OV`Tb_z3Gz2NmCZ zIp1!0th2lsbnK#GB=g<~Y}jN0Kn7Y%I>Yx+yoWN|r2f<}i`=j1Stbnuswm3N?l$%c z72HIknBpzHHYLf2NtaOqB`L5;Ee8@Teq6fy!M1h1mbU2idu^Es>8Ju*i0e8+DG*%$ z2~leOJ1NXHnO2y6Qm$A!AbT>pvoHXpadRf?swSFG9)B~8WJ+=QP8#E6p9()g_Vw7? zEt;+lT5iVR8ko5j69laHuk|BeSK+9|3YkQOvCgFyWPc8yP1daE`0fkAy^wQTZO}?7W2SKM-BwsGEvO!1_LoKEI?#P-!)UQL=W75C$8mlDv<@iYo1(kl;N0UZ=Z)ILC~2_Q^!OL`1McN>!4$D z3=mD5YLG8zoDo~V8iMWQaWB{0Kf#hU!S4@7!D*q0q!)o1n0+o5uB{;QR8AXS2&S4- zJ>-z6A{j$TIva}A@DWHydOD?!Jq|Yr$9PB$H$m`0IoVf)8kF0uw&Xr6-K!hC6K_kE z2LtPuL$~!tKRC3gep(R*FrMfMwN57JVl1Xi%}M`!TS7GSBL;n{U$jK(ui4Jt{`_ zDhlWF?T1GoDYg#tQ6%d=)f<=UCD!E?U%zD&xx3Rup9*8C*;mL39;ks}A88xlC`Ye{ zGiOw@)Wb#j=WzhonC{A$XR^!l)XXurmO@W2C|*A@4$kxvrIioYl$b{i&kHuU=HqF3 zvXwk&&%|~%T*m2ej4@Z~Q{j#6LX+EYZNcLlw*WwEX=-H=A@Bz28^l?2=e@SDHWF1( z;F`=79GXWe9|}Y~+&r$>FwqW?>WrU859g^^G6Q=@Wcs!yH%D#DlfNHl=F`1s)^;#_jR_OTXqymIhrQ7B?jL3aML@b#Zs*W^K_1i!o&st#t3E?|JgI*Xns& z1AP=?nex4ND!d|Ml--0F5q@(0@Yc2<7ymy*1}mts%He47oIHi*DBq5lz|l2s@CG85 zz$C01s0ZuTV)g7DWGXFlpu;Q)R|>xsvTA6ao!s9OErG;z$@f`%LK|(YN%UB zxdbLgbj~b5a1*Tl!^XPwZxxBm8BH@OrMrkAvE^=}XvD)ksntX`!+^nnAEd9DpNgg5 zv5FOTijn&5wr4J|@T{}lvt2eY zw%J}$hZ;F7mtAhbq{EP&7BJe4IGbVV?p)mc)89%lrP$bP1xaYHNnOy{Z}%qD-RyM3 zF?++dVmCnorF5Ax_%ark0nH=zqW2zSJ%Xq*#2t`jK!)=2DgNfD4YB#q!dX?#R;pZ* zfzz53j|k`bbjbBL<$g2asvM|74WOx3~Xp=!pUJM;m@&zx>^|rZTZ(; z{^2Y*bV>cov>&;0E{#Mt&>BU(8&3fv*s@>|CB~?Se3@uuEcty zho`NwgR$6M!vC@cZy?;sEDc?zLfhz#oLz72KxjqHXGbL;&h_w%oYKq3;bUHL`Yaj^U##b6*;C zMICW@T(Q7_u?~FtjOR>rb`}=?MY~MOBKF}B$`_A%cC2G+T5N68ab0L+@;~_u0^+w! zQ`|6Ep zDoKXl@8k+J3wol~8VGRIngjnw0vh6Y6V*aPq*2MUg>Ch6aaNX0b3eK}ig?S)1nxKF z^L+`GOpnwlO_-mrLNeaue=BlG=>UEL)!}Z5L^O;!7aE4*TFSdkl^l4&;Y?bz~BiGEI0e+I8Sn5QxzN3AT^WL$q1}V#YUGcTG7A4YVN|?JkSWDbGtX!1)~$@WE#F48 zgG)4npd*sE3&-?MzcQSPw8NSo53J^h#iF!>Xq{3O@=Hq=2EJ=~iLkt$6p$M;)jq?C z*?nn`x#M!z>*8}(1s{!lsit0#n!u$F5{x;3!%I(Dhp$bTXiV~5Od_dEk?<~fIrqRi zRy+$igIr~@HY1cNr=B|dnOdwROOhOI;u9Vv#F}F(DQXJeJvjW`QyYEu1V~ISyD~>P zinmmdcNy%kj9s0IASc1H-i`rFHu!lGGE3s3gTz*;Fx|LWHR*okuSZ3~hu6ElUtNFs zbb~hVjr~ly12afV;>b$&JAU|j+*0sT9;JQoc%0+jYyBH|5&j+`df4g$r)VpMH^JF2 z5^P2uy4cj?c64XNrV_vm4kP>Z((K)qJS5T#V-g~MoNhGTzn|9HANZQ+!KSxs4kb1< z*-%c?m>kO5%I6rpjfl}17O|JK_P`ej;5`gplqP|f(A)H2q-@N0!l}v2HX|VFKei}NJ6MeaYLxzn8 zOiVo?R8F7YsQx)gV$N!j-B(GanRm?QEZvq6(!Z^7M)?&=YvLNyKKm>`Te!VN>+Gr*k;yl!KpD_{K_&)dnE%KPOtGt>4kGwLn0m#%wZ=( zJ|q3>G@HJ(%e71`SG!t}80j$AXUywGFZ8?qNkQYs16OZ}wpX;nwZh1C_3H^zsCX4C zuLHKD+*UqgxKu2R^KFuNF1z}S6i8NwN4;{qG_6J$JTC3`AXaL}Ra9qf(oB#-2#L_Q z^|FNJ)%e_`&&XJDM>#-ly%qedxV&Ffsgo!L+@$l7pSATMw`f!AEoi(25xO|Ud}{-7 z5*mU`2+9(s|MGnh$YifdT~wYaOus`#gl=`r@7C+k!iwvL^$ekBwFQ+?RHY7Z$p^Vg z_uCVpqbNVC4ehq@1;++~V}@$fNxIHk&}17`Y76UU2tnH|s3iKciK)vLe$V_MaBqke z*QZG~Q73}p#CwJ@ZByZWyHf9G2}qyj zI~MZBcni$D;E8}C?&63jbn?0fKLf*5>xMhpg3EJD99{dQ);#|O`Jt(@!~3R>bMP;z zrw7EvsmAIMsYD@#=h?TlziG{8kIBM4DIo2un;I-vwD}@+Hd&4C21k8MRJ3*L#oOQh zJu&L9)j@oTbj5QS!&Dg;790&hMUWU%S@6-ZlP2rDRxWB~WXW|HL+U8BcQ z)WTYOYzLxXxlK{!=aAAk%27Tp6~{+7W>|Ui97j}zl1E<()O@tIM66Dk2P1^=>+Wrv znoK|C*Zs{9*4}GpreCdWYWFyj%Ah>D^2^yc`0O8(1#h=F_||=s;IDSkulFE!%DN?! zuZVfu$#iXL4Sjy`hcO+wG)mFQ5}VbZEUSG5OdJ(D{c+`RhGRVc4gc~PEUUDcw~;c^ z{gg{8cbpQ|`Y0&MMqK;+ep5UzMr%FlSC#F>EFKM+Z=$O=xetTaIvp3;MD)<>r?$VWPvSQEc9_Ic=g)*@KJeN*ukG?6zu&R+y6yrdw7eb9J9 z5c_m!_!AztEziatk+Yj0Gqc)i#lQw)kj8pgdhI(O4jS{LZXjx9lE3^%G~}l7h1MQW zNn&2v!1Jp)uL}YusItS%qccmZSWaE-r)Y7|O3-w5a&TWJ)-ISyuZLBMTnSUtwrNHI zT?8sh_9W6J6TWtOmU(hJF5W zwU|(QaY7V z1=JnPGTBGVDSMs*1cNW`MFi*Y)Pi}h;h&v~=_rRXR8Mk3y|IQ@w9dpoJU@*wPp`lYE`6IJ`6avQu8wj<2qZ` zw%*!(8

cI`*s5$124ak`No`LNd)FRZrcJKBY4AFXcvYjpSUQO}c>=*}$LnVjhE zx0msp<*dd_-^))@YJPCa&d7wu^PNBL&T;cJhiHxtWjE8@!}=-Xu;A7`$;hWTuH?j8 zmja*P!#P5&IJ6ox!{r2 z8^LOBet-WxS>qzeVmtnjEByq=@a_t`<+_0cM^=#LqPIuuq<;=SpmmpnQ&dig-Ba%` zHAPglDagH?gbZODg%=76!hOhniNtU&6u2S z((vtF+-RNwP8*j7w)76^{P4dAhhR0HVOzl!o264Q$UHofsWGRZzxYuuix|mbXLV`ydr93dYwo~i$bZ-AUG)jqRb#If zkrNH27waikA$%S6i;WO7C<-!)Pc<0fZdl>HiWmmQ=A9peT#@J{IX>+j-Y>Ji4l4xR zvb2|J6=Z;0xg%L~%w~34R!r^#!}}vKh-HUmL*C^k*I@*k zOJ@?2qmpzVBTdPOU2BIZ1rzu{V#!b!#R}QMbQ_kPZ%jDgl?7m=z!EsiNej_gApsNV zvZDLF@i>GtiEAhfNd`TDs*(s_Lz8ih8w zD5^Jc_7IMF2oG*EL3*t@As*7FjZJ(b+gfi~$kaJm*OK@T_k%3d(0@84#wV*-X)G;dCZnqbUeJ>#Q-o?zG?@A-{+b|H-UNS|uJV z3I7$|Rr^tIzWFVBD`u*~57JXpBm^`a3FZb%w7_Pw$^m?EoG9ENc0x6C&4p=3JgAol z&z417B-4swg@sG%Vmz_;77FcXH57eZl-0CqRXzi&dw(fiu}iLm$+f8-+s$+`PUxoi zXhBy3g>GWm{Mtyr`oHH#Sj>gk-l6Kax^b+%GXhe*MfsWu)WWdCgE~ z=c0ALKzvjf$cX-s`!3H$sr&=uGzV&Sxc-lYl-CIL&HO@NQS6mT{1N@e$Rh7bmYq<1 zPP#U;Q6)@MOn9#PEeZDR?1+>6GFKVA52MAbi5&97xWJ!*%LucZKd*nKGiuTDWkk6w z?~Feey>~Ya+%*C>q|Iw)oXA*E!?7D5BFrdw*5q{^|4ZgHeML9yKC71g=flbsT`OWy zHO^n=+^iLqIs5A9hpt;ldR?UZ$v5!T6!a>lzG-lHnHd%AoPKogb%);J{xLEX{}OM^ z%PSPE-!F4fMhV^|SJjkV5K(uVE#BjyL%bD~W~=xP&S2E@Hr-TAP8WVrDkDHt zRbMcvwIq*ze!2oBB6zZ(a4Jqw81Cl?Zy=lu(M4lDrR#1oJUbEx#zIgAv>3PKV1pLA;b^Ny1|JM1+8Sxt-h-kQoI)AA~3-|B)^sb7IOoQwk zw2?T9zDKwJ@^)%YY9tU4%z0sjAh{1YLcYJQK)>lx?9pxfNmfF1p1S2j1 z2*i>L3~z%j7!ln4gb60JwBO7}_G!22U3*P&0*Z?az}b3MfO}^D^liufNBH+C*FzWH zV2UO~0HKBByr0#m;eRcC+5wP*>1O#qXmPSvC%9;*uG1l1MkwhqGVfEXV388Nw_{~- zs(`8gcxn4g%>0)Ts&!5J#MaSqXR?e;`m4PpXgP@((o*wU)!DODTt%+RPc(F`n==c> ztUyXxV6dpzuDw0{$3T}Nw9BTQR!twzUvIZ?ztKl}yJf1m%JRcoY0k~CE+T23URGq~ zh|nYwu$|8EABdTA^=5z93J)kM$$K;}al?fS`v!f_ZFg6o8Y{@i+|IoW>iQfo*_d~k ziqXLvCd^u-Zndv}JxkwGUr-_*b%g7>q*ihB1r&aa7X)(mm(&b)ANW-YMT0 zq7tG;`|$sRyH{&-IMA05c*{mX=WI+57x((mV*5`@$xT_-GI{wr^p3b_-)N~yNun3A zD2LgbfJA32KXw)%i}C8sPk5u&3llWHr3IHx@LPQY>;a2`WdRCmhQjhlZa8;9k+C2?hhq$JH27$h<$eR z51!M{c`v`Tsv)o#jhD_}`tk{v97=)BOl7S9){B2t!My#XRIb_vE70aKjZ%?-+|S+y z>h*O-x$IxAQ_YbDTEPF^B>%r_I0y7GBwF-L&Lu>bL}b1F zHH)O2yeUB^UOih?ZMb^q;{mY`bYq(oB1!)z2~@dEhR}!uA!YqLZ6hTDDj1eSTPiK~ zOV$5!3`S_f+9?#? zzxr=2Z~i0y+s6M_!2=ZE4F^Q1hK%ZB63H!@;K3^?mE<01~;RB)wnW zjYG&NI!P>NaHqSVouip|kd;v;K4iKIDo>FFip?r%pK;DusGqOvLT%K;%-(r}m{4q|rV&BFY1t*xgNP%gG&9N@6e)oGH^-7k8t{C; z%+e-lVuUOA{rg(22c?hB%h;nO7|R&w{?$%jN>e1IH$$yFr!`Jo3S7Y9CfB|iD~oM4 z?8LQ(PtCazdSt&v^AkHOJA(*BkyT;J=A8YS%c8YDG;$q^HFM-@6qaH)S0F5fi7HnC z6-`RClL59<90TX?h`{}UDtfiQN#NUcn3juNeYBo^+SzN%PQKSaPqR-ytXNE`H8~!1 z@RYGq47H?25MkUjI`(ZV!$jZl&VXCS!gq?LR6NuyYqiCHVj0JBk^x!=?kiD z`(99*^@XjmlT%TYKM% znnd6;D=@KUzTsE4mP~%FB&QapjGL}CNu6=6dbIDBrHDZ8!53*7j(ex)@Ji7sBHXU= zfrW#N%3JUZ?%e2)?z5f?ie^kqQz(w09^-`uF4*=n(Af?DotBnI#XQstaO0jOA~_wY z3@A_Oo>w?fXo%#>9^4Fl|Ddb|__PD__$-H7$;|*u6}wlUr^|grCA|>6i3-m5wCuHm z0s3q#4bv@ZspuX zctTUrBu2s8R|OVFTTKrDP=++u2Ye69e0e{Np4-)Il~_V z^9?lQK&yB{Yt_XXlmP57C;;%HaE!|+|BrzRoj*bY&mX^>m{f)}X76gw^G<3TuHvGg zKNuLj1cM#opdRkC$OJZX#4Y&+bMSRC$vadX+OIBG9U5;)F+v$dGj%oTPp_%y(`PfZ z3{SSHL{qG?G*$->59u~{X<~aiPLPBtm8pn_ZUbzaxDzOmBIdS>yRoYk2_5665_WLI zWW!zs@EY#u}8WYwQCnUt3efA=JBqQ8PSLpX}2L1@@3h zrPxxIcn-Z@HHu)reBWa37&t_E-P_`Ut0_Alxu;JSEaKyR%yy3Eji{Kjy^&Zd@cYb>&OE8 z?#Sd^Mk-R9P(P9-Jja=bJ~eny$%KHF5LEta%DQekK*S$Mx8btL9si&$%kEcB4UJ($ z`-2F+AZ@S}kgdk2?H9=n?2O9c!!VaP3K?$}3Ks4AmqaS9Zm$3cx5~y3(;rD>ro0{R zhAH?Yie}wx>_UBa{_+fAeVOMszWvb83Xw+UDepRED`>SncFRib;>VHiraSQf&|FN& z|9!;wE3a6AR5SBd+W*PVJ*dDUmAc*G3pNvIo#x!_FDj0IOGEcS8U($QT1TK8#1`oo zm>ANmPg3|!U}DIK8~PU#p;BdNa!HM&O*3?3AkESMtu(2IQOcSGiOmhgPK_dnPF12agpk^lez literal 0 HcmV?d00001 diff --git a/src/assets/img/QShopLogoLight.webp b/src/assets/img/QShopLogoLight.webp new file mode 100644 index 0000000000000000000000000000000000000000..484aa96073415fae97b0acf7cadbd65e0062aa9c GIT binary patch literal 5222 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 b05^NIDZ)+_7Ty%bJ><#fUo3`Smje6;r8yNb literal 0 HcmV?d00001 diff --git a/src/assets/img/arrr.png b/src/assets/img/arrr.png new file mode 100644 index 0000000000000000000000000000000000000000..d27456576e737c1353e256810d9b84dce7b42784 GIT binary patch literal 1429 zcmV;G1#0?k}ogVt_iv;g(_nl!MG8$U!DoWdu9kkw6h-ftOt@TB<<3sK5#b z%0a@oI37WePGIvKtR6|AI9mhAv#hf;g!DQH`61I`vLh+0A4)5ZAgMw_(fIw3) zJ;zl&sHJKOrdX)Hx;#!mMwh{?4+1iNCMv%cs&_F=hEbm`q|2jkHpr9){rIV#T^^%{ zqGI`FG|T-NsX|E0@RAuy6F+A}zL1-lD6p(ZBB$8#sMK3e0-2 zyN`|tb@-8)tA&n=Zp7vthfK?qt?H*&?8Ec>6y1K*Zl$YZC?)`2i2k;rbN5(Ja(f&> z+I84U^Cc*)6S}%Am?43*v&+{5%?Ss(|8(3zHn20hJXOrjyFuJRHpKXrg=S^dV)^SF z2l1dSSLXN6@BBXR1AV4vV;|eVi@+ZM7|I3uWBCi4oxV;L$+&{tePqNO-{FT843s4> zt0X1g`RVPW&|um@5()C9DX`ECi?KogX;&s8bNr+h1Qa2GTYhodULx1%dy;)-VmsA8APs0umM;p4i-Xy#(i%@Nrq=){EG``n z8)S$XAXhDYofCb_5&*4s8%WbSm%jwg^81isSt#ifaMl(afEg7*a+^RVP@R{Xlpw?2 z%hXKPIu?O+%R)&sbZ#P2AVGhAeK+?v5vio%PTVq$g+>dewJ1n1c7n>l((*&0+sF37 z1hC4FuZp}(QZ5SWcE=w6xh%tCDC7HY^JVk?3&ug07?jk#AM% zp8|1O^(-h(zSY1=b8vN(m9}V|ZWap4hn1x0U^z0D!f$4jecbWOsfvh5d+Q34B;Czhy%(n6vZ9lYt6&UXDakYjKP`=$833&u30U=V6#}s8^*@Ag)eEW!;kNq< jH3JJkl>Q2}zXA*Z%L07o@pf>Q00000NkvXXu0mjfhXs}` literal 0 HcmV?d00001 diff --git a/src/assets/img/btc.png b/src/assets/img/btc.png new file mode 100644 index 0000000000000000000000000000000000000000..fe3fd1a030bd2736ed76748d27e6584b3fa05c3a GIT binary patch literal 1982 zcmV;v2SNCWP)htPv-zHc{0_qe;RVIF+Z!7aDH+~!cJ9zWE z0z3R;&-88FK?e2QLmp!@E8cvh&hc=%{kbT8{6vWNHYd)RK99@$W6Yf$C}t1aw#Jzg z0V;Sa!^E?jk>}QSm5SwX6l)KBQTk+0IO|oeTiQv=s9ZvBZmmTrZ`ziI&lxG$;Z&v6ZUQj_sWG~M))W^e7D$CuHznMHr>Q@{nSfDQWq}b2MbIgTT zz^IxC6f5m)AyTYIo(7ztPO6RN45fh8bmc!vp{zk(9*5z6*bt5knS!?+5r9(7+s`Og z?bu8S)%ld|@)Abn>wnn39_;7E^Qti19)(pp?UZ&|FD+GddH97GzI-gMPL6m?%H8Hf z;BTPqMk*8w0Dl_&ZDq&7%d6~1XOj+Y*lnpJ?8F$`y-}IZHKxuO#X?@LytmFKZ7cjp zm4`i*Ihj;x7-&P-YUihk;4^t|1PduCvl(bi0LA>&TAed0Bbo?>P7amrmG>zweyU3w zysJEYn(tq0utMD!<@h6odbVIvDn(&+f_WHr_a)eS%A;Q$({d2!R!ywkXPrCd6#^(F zE{%&VAxye_@kptbl5T=h8B2ZFK(TUCE2=^P6o8w1j#TaCuT9$ZYHYq2>ZO~Y(7LeL zlI$ln^MPu<3X>9tK5KXD?jqUG#B*OK+el}f^+}HBMpaA}!G0FB)vW^6VL#I<9!vvc zvui_j+0SthPjEQFzdcrkmTd*}6g5Giqr6@n7oAlwe?FK!4{E5NwMc{tc%(KO0l2AS2uN1C~N>&=eDPwE0M1Q&!51npP5^&=$w5ojIT|E z`sCapF9DqY_0 z+J|C!i9BebTjc0EMs#dhkT|H*HdVFr3qr0yEoCT-l&?ra>O#pQXH}u1CnGm{ZR#upDJd zAPX%9211iOc{)tQg^rKrimI7*G0K8b0H%eSJuz4R{c!3Df9z-(?jPmPNWh7eUc%AtWtvpeHm= z)d4#RUVIebD|nSnlKm`D8_XNQu|T16f-CC|w8w@32%HSnX%!3T+1sU?sB+R+~g}N)wvhE_5HY3Wvi3>K5JK!&P>kH!4c@j{x84Y3h8GeDB zP=mU;AbI8p7680=3~K8A?@~?0dB>pgZzebeb(w8yKMPESo@ zz}%N0bFE#}vP(EFZElOj-3oJn8Bp#5s+Reocq3Jgf{KYk2i&`^_lB%q3{cb;14Mv@ zoOe&GUR}WgcJ*=<2C%Ew|1iQ`y`YK_Zuk{yRXozXLhTek0iyL+sQoX%0DJn9yuv^) QjsO4v07*qoM6N<$g5oNn-~a#s literal 0 HcmV?d00001 diff --git a/src/assets/img/dgb.png b/src/assets/img/dgb.png new file mode 100644 index 0000000000000000000000000000000000000000..6950158b56d73dcce67b8fece5cc1d1817b6b51c GIT binary patch literal 4917 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 literal 0 HcmV?d00001 diff --git a/src/assets/img/doge.png b/src/assets/img/doge.png new file mode 100644 index 0000000000000000000000000000000000000000..d99fa2ff2a6b1c969c23a22d9d265fa2c872a9ac GIT binary patch literal 1798 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 Xq@DHT-WO?J00000NkvXXu0mjfNJg50 literal 0 HcmV?d00001 diff --git a/src/assets/svgs/ARRRSVG.tsx b/src/assets/svgs/ARRRSVG.tsx new file mode 100644 index 0000000..0966da2 --- /dev/null +++ b/src/assets/svgs/ARRRSVG.tsx @@ -0,0 +1,34 @@ +import { IconTypes } from "./IconTypes"; + +export const ARRRSVG: React.FC = ({ color, height, width }) => { + return ( + + + + + + + + ); +}; diff --git a/src/assets/svgs/AccountCircleSVG.tsx b/src/assets/svgs/AccountCircleSVG.tsx new file mode 100644 index 0000000..deb88bd --- /dev/null +++ b/src/assets/svgs/AccountCircleSVG.tsx @@ -0,0 +1,25 @@ +interface AccountCircleSVGProps { + color: string + height: string + width: string +} + +export const AccountCircleSVG: React.FC = ({ + color, + height, + width +}) => { + return ( + + + + ) +} diff --git a/src/assets/svgs/AddSVG.tsx b/src/assets/svgs/AddSVG.tsx new file mode 100644 index 0000000..8960bda --- /dev/null +++ b/src/assets/svgs/AddSVG.tsx @@ -0,0 +1,15 @@ +import { IconTypes } from "./IconTypes"; + +export const AddSVG: React.FC = ({ color, height, width }) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/AlignCenterSVG.tsx b/src/assets/svgs/AlignCenterSVG.tsx new file mode 100644 index 0000000..b78991b --- /dev/null +++ b/src/assets/svgs/AlignCenterSVG.tsx @@ -0,0 +1,21 @@ +import { SVGProps } from './interfaces' + +export const AlignCenterSVG: React.FC = ({ + color, + height, + width +}) => { + return ( + + + + ) +} diff --git a/src/assets/svgs/AlignLeftSVG.tsx b/src/assets/svgs/AlignLeftSVG.tsx new file mode 100644 index 0000000..4ac2eb4 --- /dev/null +++ b/src/assets/svgs/AlignLeftSVG.tsx @@ -0,0 +1,17 @@ +import { SVGProps } from './interfaces' + +export const AlignLeftSVG: React.FC = ({ color, height, width }) => { + return ( + + + + ) +} diff --git a/src/assets/svgs/AlignRightSVG.tsx b/src/assets/svgs/AlignRightSVG.tsx new file mode 100644 index 0000000..2a2eea8 --- /dev/null +++ b/src/assets/svgs/AlignRightSVG.tsx @@ -0,0 +1,17 @@ +import { SVGProps } from './interfaces' + +export const AlignRightSVG: React.FC = ({ color, height, width }) => { + return ( + + + + ) +} diff --git a/src/assets/svgs/BackArrowSVG.tsx b/src/assets/svgs/BackArrowSVG.tsx new file mode 100644 index 0000000..670a892 --- /dev/null +++ b/src/assets/svgs/BackArrowSVG.tsx @@ -0,0 +1,21 @@ +import { IconTypes } from "./IconTypes"; + +export const BackArrowSVG: React.FC = ({ + color, + height, + width, + className +}) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/BoldSVG.tsx b/src/assets/svgs/BoldSVG.tsx new file mode 100644 index 0000000..8d06816 --- /dev/null +++ b/src/assets/svgs/BoldSVG.tsx @@ -0,0 +1,17 @@ +import { SVGProps } from './interfaces' + +export const BoldSVG: React.FC = ({ color, height, width }) => { + return ( + + + + ) +} diff --git a/src/assets/svgs/BriefcaseSVG.tsx b/src/assets/svgs/BriefcaseSVG.tsx new file mode 100644 index 0000000..07dc0a7 --- /dev/null +++ b/src/assets/svgs/BriefcaseSVG.tsx @@ -0,0 +1,21 @@ +import { IconTypes } from "./IconTypes"; + +export const BriefcaseSVG: React.FC = ({ + color, + height, + width, + className +}) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/CalendarSVG.tsx b/src/assets/svgs/CalendarSVG.tsx new file mode 100644 index 0000000..3e470de --- /dev/null +++ b/src/assets/svgs/CalendarSVG.tsx @@ -0,0 +1,23 @@ +interface AccountCircleSVGProps { + color: string; + height: string; + width: string; +} + +export const CalendarSVG: React.FC = ({ + color, + height, + width +}) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/CancelSVG.tsx b/src/assets/svgs/CancelSVG.tsx new file mode 100644 index 0000000..bf9afed --- /dev/null +++ b/src/assets/svgs/CancelSVG.tsx @@ -0,0 +1,27 @@ +import { IconTypes } from "./IconTypes"; + +interface CancelSVGProps extends IconTypes { + onMouseDownFunc?: (e: any) => void; +} + +export const CancelSVG: React.FC = ({ + color, + height, + width, + className, + onMouseDownFunc +}) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/CartSVG.tsx b/src/assets/svgs/CartSVG.tsx new file mode 100644 index 0000000..9bd5d10 --- /dev/null +++ b/src/assets/svgs/CartSVG.tsx @@ -0,0 +1,23 @@ +import { IconTypes } from "./IconTypes"; + +export const CartSVG: React.FC = ({ + color, + height, + width, + className, + onClickFunc +}) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/CategorySVG.tsx b/src/assets/svgs/CategorySVG.tsx new file mode 100644 index 0000000..113e702 --- /dev/null +++ b/src/assets/svgs/CategorySVG.tsx @@ -0,0 +1,21 @@ +import { IconTypes } from "./IconTypes"; + +export const CategorySVG: React.FC = ({ + color, + height, + width, + className +}) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/CodeBlockSVG.tsx b/src/assets/svgs/CodeBlockSVG.tsx new file mode 100644 index 0000000..1fad02f --- /dev/null +++ b/src/assets/svgs/CodeBlockSVG.tsx @@ -0,0 +1,17 @@ +import { SVGProps } from './interfaces' + +export const CodeBlockSVG: React.FC = ({ color, height, width }) => { + return ( + + + + ) +} diff --git a/src/assets/svgs/CompareArrowsSVG.tsx b/src/assets/svgs/CompareArrowsSVG.tsx new file mode 100644 index 0000000..41558f5 --- /dev/null +++ b/src/assets/svgs/CompareArrowsSVG.tsx @@ -0,0 +1,19 @@ +import { IconTypes } from "./IconTypes"; + +export const CompareArrowsSVG: React.FC = ({ + color, + height, + width, +}) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/CurrencySVG.tsx b/src/assets/svgs/CurrencySVG.tsx new file mode 100644 index 0000000..6d76d32 --- /dev/null +++ b/src/assets/svgs/CurrencySVG.tsx @@ -0,0 +1,15 @@ +import { IconTypes } from "./IconTypes"; + +export const CurrencySVG: React.FC = ({ color, height, width }) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/DarkModeSVG.tsx b/src/assets/svgs/DarkModeSVG.tsx new file mode 100644 index 0000000..fe9ccab --- /dev/null +++ b/src/assets/svgs/DarkModeSVG.tsx @@ -0,0 +1,23 @@ +import { IconTypes } from './IconTypes' + +export const DarkModeSVG: React.FC = ({ + color, + height, + width, + className, + onClickFunc +}) => { + return ( + + + + ) +} diff --git a/src/assets/svgs/DescriptionSVG.tsx b/src/assets/svgs/DescriptionSVG.tsx new file mode 100644 index 0000000..9505390 --- /dev/null +++ b/src/assets/svgs/DescriptionSVG.tsx @@ -0,0 +1,21 @@ +import { IconTypes } from "./IconTypes"; + +export const DescriptionSVG: React.FC = ({ + color, + height, + width, + className +}) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/DialogsSVG.tsx b/src/assets/svgs/DialogsSVG.tsx new file mode 100644 index 0000000..1288a1f --- /dev/null +++ b/src/assets/svgs/DialogsSVG.tsx @@ -0,0 +1,21 @@ +import { IconTypes } from "./IconTypes"; + +export const DialogsSVG: React.FC = ({ + color, + height, + width, + className +}) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/DoubleArrowDownSVG.tsx b/src/assets/svgs/DoubleArrowDownSVG.tsx new file mode 100644 index 0000000..1bf17d8 --- /dev/null +++ b/src/assets/svgs/DoubleArrowDownSVG.tsx @@ -0,0 +1,24 @@ +import { IconTypes } from "./IconTypes"; + +export const DoubleArrowDownSVG: React.FC = ({ + color, + height, + width, + className, + id, + onClickFunc +}) => { + return ( +
+ + + +
+ ); +}; diff --git a/src/assets/svgs/DownloadSVG.tsx b/src/assets/svgs/DownloadSVG.tsx new file mode 100644 index 0000000..ad89cad --- /dev/null +++ b/src/assets/svgs/DownloadSVG.tsx @@ -0,0 +1,21 @@ +import { IconTypes } from "./IconTypes"; + +export const DownloadSVG: React.FC = ({ + color, + height, + width, + className, +}) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/ExpandMoreSVG.tsx b/src/assets/svgs/ExpandMoreSVG.tsx new file mode 100644 index 0000000..12f1935 --- /dev/null +++ b/src/assets/svgs/ExpandMoreSVG.tsx @@ -0,0 +1,22 @@ +import { IconTypes } from "./IconTypes"; +export const ExpandMoreSVG: React.FC = ({ + color, + height, + width, + className, + onClickFunc +}) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/GarbageSVG.tsx b/src/assets/svgs/GarbageSVG.tsx new file mode 100644 index 0000000..ec32c5e --- /dev/null +++ b/src/assets/svgs/GarbageSVG.tsx @@ -0,0 +1,22 @@ +import { IconTypes } from "./IconTypes"; +export const GarbageSVG: React.FC = ({ + color, + height, + width, + className, + onClickFunc +}) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/H2SVG.tsx b/src/assets/svgs/H2SVG.tsx new file mode 100644 index 0000000..0328fc3 --- /dev/null +++ b/src/assets/svgs/H2SVG.tsx @@ -0,0 +1,17 @@ +import { SVGProps } from './interfaces' + +export const H2SVG: React.FC = ({ color, height, width }) => { + return ( + + + + ) +} diff --git a/src/assets/svgs/H3SVG.tsx b/src/assets/svgs/H3SVG.tsx new file mode 100644 index 0000000..7268032 --- /dev/null +++ b/src/assets/svgs/H3SVG.tsx @@ -0,0 +1,17 @@ +import { SVGProps } from './interfaces' + +export const H3SVG: React.FC = ({ color, height, width }) => { + return ( + + + + ) +} diff --git a/src/assets/svgs/IconTypes.ts b/src/assets/svgs/IconTypes.ts new file mode 100644 index 0000000..2dd966d --- /dev/null +++ b/src/assets/svgs/IconTypes.ts @@ -0,0 +1,8 @@ +export interface IconTypes { + color: string; + height: string; + width: string; + className?: string; + onClickFunc?: ((e: React.MouseEvent) => void) | ((params?: any) => void); + id?: string; +} diff --git a/src/assets/svgs/ItalicSVG.tsx b/src/assets/svgs/ItalicSVG.tsx new file mode 100644 index 0000000..50a5493 --- /dev/null +++ b/src/assets/svgs/ItalicSVG.tsx @@ -0,0 +1,17 @@ +import { SVGProps } from './interfaces' + +export const ItalicSVG: React.FC = ({ color, height, width }) => { + return ( + + + + ) +} diff --git a/src/assets/svgs/LightModeSVG.tsx b/src/assets/svgs/LightModeSVG.tsx new file mode 100644 index 0000000..66b056f --- /dev/null +++ b/src/assets/svgs/LightModeSVG.tsx @@ -0,0 +1,23 @@ +import { IconTypes } from './IconTypes' + +export const LightModeSVG: React.FC = ({ + color, + height, + width, + className, + onClickFunc +}) => { + return ( + + + + ) +} diff --git a/src/assets/svgs/LinkSVG.tsx b/src/assets/svgs/LinkSVG.tsx new file mode 100644 index 0000000..9994f43 --- /dev/null +++ b/src/assets/svgs/LinkSVG.tsx @@ -0,0 +1,17 @@ +import { SVGProps } from './interfaces' + +export const LinkSVG: React.FC = ({ color, height, width }) => { + return ( + + + + ) +} diff --git a/src/assets/svgs/LocationSVG.tsx b/src/assets/svgs/LocationSVG.tsx new file mode 100644 index 0000000..b34eb25 --- /dev/null +++ b/src/assets/svgs/LocationSVG.tsx @@ -0,0 +1,15 @@ +import { IconTypes } from "./IconTypes"; + +export const LocationSVG: React.FC = ({ color, height, width }) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/LoyaltySVG.tsx b/src/assets/svgs/LoyaltySVG.tsx new file mode 100644 index 0000000..cf385a0 --- /dev/null +++ b/src/assets/svgs/LoyaltySVG.tsx @@ -0,0 +1,21 @@ +import { IconTypes } from "./IconTypes"; + +export const LoyaltySVG: React.FC = ({ + color, + height, + width, + className +}) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/MinimizeSVG.tsx b/src/assets/svgs/MinimizeSVG.tsx new file mode 100644 index 0000000..15362f8 --- /dev/null +++ b/src/assets/svgs/MinimizeSVG.tsx @@ -0,0 +1,23 @@ +import { IconTypes } from "./IconTypes"; + +export const MinimizeSVG: React.FC = ({ + color, + height, + width, + className, + onClickFunc +}) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/MinusCircle.tsx b/src/assets/svgs/MinusCircle.tsx new file mode 100644 index 0000000..0914adf --- /dev/null +++ b/src/assets/svgs/MinusCircle.tsx @@ -0,0 +1,23 @@ +import { IconTypes } from "./IconTypes"; + +export const MinusCircleSVG: React.FC = ({ + color, + height, + width, + className, + onClickFunc +}) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/NewWindowSVG.tsx b/src/assets/svgs/NewWindowSVG.tsx new file mode 100644 index 0000000..c97d483 --- /dev/null +++ b/src/assets/svgs/NewWindowSVG.tsx @@ -0,0 +1,25 @@ +interface NewWindowSVGProps { + color: string + height: string + width: string +} + +export const NewWindowSVG: React.FC = ({ + color, + height, + width +}) => { + return ( + + + + ) +} diff --git a/src/assets/svgs/OrdersSVG.tsx b/src/assets/svgs/OrdersSVG.tsx new file mode 100644 index 0000000..95125cd --- /dev/null +++ b/src/assets/svgs/OrdersSVG.tsx @@ -0,0 +1,21 @@ +import { IconTypes } from "./IconTypes"; + +export const OrdersSVG: React.FC = ({ + color, + height, + width, + className +}) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/OwnerSVG.tsx b/src/assets/svgs/OwnerSVG.tsx new file mode 100644 index 0000000..e9a6a2a --- /dev/null +++ b/src/assets/svgs/OwnerSVG.tsx @@ -0,0 +1,21 @@ +import { IconTypes } from "./IconTypes"; + +export const OwnerSVG: React.FC = ({ + color, + height, + width, + className +}) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/PlusCircle.tsx b/src/assets/svgs/PlusCircle.tsx new file mode 100644 index 0000000..fbac868 --- /dev/null +++ b/src/assets/svgs/PlusCircle.tsx @@ -0,0 +1,23 @@ +import { IconTypes } from "./IconTypes"; + +export const PlusCircleSVG: React.FC = ({ + color, + height, + width, + className, + onClickFunc +}) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/QortalSVG.tsx b/src/assets/svgs/QortalSVG.tsx new file mode 100644 index 0000000..c8d6942 --- /dev/null +++ b/src/assets/svgs/QortalSVG.tsx @@ -0,0 +1,46 @@ +import { IconTypes } from "./IconTypes"; + +export const QortalSVG: React.FC = ({ + color, + height, + width, + className +}) => { + return ( + + + + + + + ); +}; diff --git a/src/assets/svgs/ShippingSVG.tsx b/src/assets/svgs/ShippingSVG.tsx new file mode 100644 index 0000000..a030d5e --- /dev/null +++ b/src/assets/svgs/ShippingSVG.tsx @@ -0,0 +1,15 @@ +import { IconTypes } from "./IconTypes"; + +export const ShippingSVG: React.FC = ({ color, height, width }) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/StarSVG.tsx b/src/assets/svgs/StarSVG.tsx new file mode 100644 index 0000000..732d9e4 --- /dev/null +++ b/src/assets/svgs/StarSVG.tsx @@ -0,0 +1,21 @@ +import { IconTypes } from "./IconTypes"; + +export const StarSVG: React.FC = ({ + color, + height, + width, + className +}) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/StorefrontSVG.tsx b/src/assets/svgs/StorefrontSVG.tsx new file mode 100644 index 0000000..853c697 --- /dev/null +++ b/src/assets/svgs/StorefrontSVG.tsx @@ -0,0 +1,23 @@ +import { IconTypes } from "./IconTypes"; + +export const StorefrontSVG: React.FC = ({ + color, + height, + width, + className, + onClickFunc +}) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/TimesSVG.tsx b/src/assets/svgs/TimesSVG.tsx new file mode 100644 index 0000000..48c31d9 --- /dev/null +++ b/src/assets/svgs/TimesSVG.tsx @@ -0,0 +1,23 @@ +import { IconTypes } from "./IconTypes"; + +export const TimesSVG: React.FC = ({ + color, + height, + width, + className, + onClickFunc +}) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/UnderlineSVG.tsx b/src/assets/svgs/UnderlineSVG.tsx new file mode 100644 index 0000000..a65f597 --- /dev/null +++ b/src/assets/svgs/UnderlineSVG.tsx @@ -0,0 +1,17 @@ +import { SVGProps } from './interfaces' + +export const UnderlineSVG: React.FC = ({ color, height, width }) => { + return ( + + + + ) +} diff --git a/src/assets/svgs/WarningSVG.tsx b/src/assets/svgs/WarningSVG.tsx new file mode 100644 index 0000000..75b1c86 --- /dev/null +++ b/src/assets/svgs/WarningSVG.tsx @@ -0,0 +1,15 @@ +import { IconTypes } from "./IconTypes"; + +export const WarningSVG: React.FC = ({ color, height, width }) => { + return ( + + + + ); +}; diff --git a/src/assets/svgs/interfaces.ts b/src/assets/svgs/interfaces.ts new file mode 100644 index 0000000..6a0d5e1 --- /dev/null +++ b/src/assets/svgs/interfaces.ts @@ -0,0 +1,5 @@ +export interface SVGProps { + color: string + height: string + width: string +} diff --git a/src/components/common/BlockedNamesModal/BlockedNamesModal-styles.ts b/src/components/common/BlockedNamesModal/BlockedNamesModal-styles.ts new file mode 100644 index 0000000..05ebf6e --- /dev/null +++ b/src/components/common/BlockedNamesModal/BlockedNamesModal-styles.ts @@ -0,0 +1,28 @@ +import { styled } from '@mui/system'; +import { + Box, + Modal, + Typography +} from '@mui/material'; + +export const StyledModal = styled(Modal)(({ theme }) => ({ + display: 'flex', + alignItems: 'center', + justifyContent: 'center' +})) + +export const ModalContent = styled(Box)(({ theme }) => ({ + backgroundColor: theme.palette.primary.main, + padding: theme.spacing(4), + borderRadius: theme.spacing(1), + width: '40%', + '&:focus': { + outline: 'none' + } +})) + +export const ModalText = styled(Typography)(({ theme }) => ({ + fontFamily: "Raleway", + fontSize: "25px", + color: theme.palette.text.primary, +})); \ No newline at end of file diff --git a/src/components/common/BlockedNamesModal/BlockedNamesModal.tsx b/src/components/common/BlockedNamesModal/BlockedNamesModal.tsx new file mode 100644 index 0000000..da7fe38 --- /dev/null +++ b/src/components/common/BlockedNamesModal/BlockedNamesModal.tsx @@ -0,0 +1,100 @@ +import React, { useState } from "react"; +import { + Box, + Button, + Modal, + Typography, + SelectChangeEvent, + ListItem, + List, + useTheme +} from "@mui/material"; +import { + StyledModal, + ModalContent, + ModalText +} from "./BlockedNamesModal-styles"; + +interface PostModalProps { + open: boolean; + onClose: () => void; +} + +export const BlockedNamesModal: React.FC = ({ + open, + onClose +}) => { + const [blockedNames, setBlockedNames] = useState([]); + const theme = useTheme(); + const getBlockedNames = React.useCallback(async () => { + try { + const listName = `blockedNames_q-blog`; + const response = await qortalRequest({ + action: "GET_LIST_ITEMS", + list_name: listName + }); + setBlockedNames(response); + } catch (error) { + onClose(); + } + }, []); + + React.useEffect(() => { + getBlockedNames(); + }, [getBlockedNames]); + + const removeFromBlockList = async (name: string) => { + try { + const response = await qortalRequest({ + action: "DELETE_LIST_ITEM", + list_name: "blockedNames_q-blog", + item: name + }); + + if (response === true) { + setBlockedNames((prev) => prev.filter((n) => n !== name)); + } + } catch (error) {} + }; + + return ( + + + Manage blocked names + + {blockedNames.map((name, index) => ( + + {name} + + + ))} + + + + + ); +}; diff --git a/src/components/common/ConfirmationModal/ConfirmationModal-styles.tsx b/src/components/common/ConfirmationModal/ConfirmationModal-styles.tsx new file mode 100644 index 0000000..5079e58 --- /dev/null +++ b/src/components/common/ConfirmationModal/ConfirmationModal-styles.tsx @@ -0,0 +1,18 @@ +import { styled } from "@mui/system"; +import { DialogTitle, DialogContentText } from "@mui/material"; + +export const DialogTitleStyled = styled(DialogTitle)(({ theme }) => ({ + fontFamily: "Merriweather Sans", + fontSize: "18px", + color: theme.palette.text.primary, + userSelect: "none" +})); + +export const DialogContentTextStyled = styled(DialogContentText)( + ({ theme }) => ({ + fontFamily: "Karla", + fontSize: "16px", + color: theme.palette.text.primary, + userSelect: "none" + }) +); diff --git a/src/components/common/ConfirmationModal/ConfirmationModal.tsx b/src/components/common/ConfirmationModal/ConfirmationModal.tsx new file mode 100644 index 0000000..9de7754 --- /dev/null +++ b/src/components/common/ConfirmationModal/ConfirmationModal.tsx @@ -0,0 +1,50 @@ +import React from "react"; +import { Dialog, DialogActions, DialogContent, Button } from "@mui/material"; +import { + DialogContentTextStyled, + DialogTitleStyled +} from "./ConfirmationModal-styles"; +import { + CancelButton, + CreateButton +} from "../../modals/CreateStoreModal-styles"; + +export interface ModalProps { + open: boolean; + title: string; + message: string; + handleConfirm: () => void; + handleCancel: () => void; +} + +const ConfirmationModal: React.FC = ({ + open, + title, + message, + handleConfirm, + handleCancel +}) => { + return ( + + {title} + + + {message} + + + + + Cancel + + Proceed + + + ); +}; + +export default ConfirmationModal; diff --git a/src/components/common/ContextMenu/ContextMenuResource.tsx b/src/components/common/ContextMenu/ContextMenuResource.tsx new file mode 100644 index 0000000..785142d --- /dev/null +++ b/src/components/common/ContextMenu/ContextMenuResource.tsx @@ -0,0 +1,82 @@ +import * as React from "react"; +import Menu from "@mui/material/Menu"; +import MenuItem from "@mui/material/MenuItem"; +import Typography from "@mui/material/Typography"; +import { CopyToClipboard } from "react-copy-to-clipboard"; +import { useDispatch } from "react-redux"; +import { setNotification } from "../../../state/features/notificationsSlice"; +import { Box } from "@mui/material"; + +export default function ContextMenuResource({ + children, + name, + service, + identifier, + link +}: any) { + const [contextMenu, setContextMenu] = React.useState<{ + mouseX: number; + mouseY: number; + } | null>(null); + const dispatch = useDispatch(); + const handleContextMenu = (event: React.MouseEvent) => { + event.preventDefault(); + setContextMenu( + contextMenu === null + ? { + mouseX: event.clientX + 2, + mouseY: event.clientY - 6 + } + : // repeated contextmenu when it is already open closes it with Chrome 84 on Ubuntu + // Other native context menus might behave different. + // With this behavior we prevent contextmenu from the backdrop to re-locale existing context menus. + null + ); + }; + + const handleClose = () => { + setContextMenu(null); + }; + + return ( +
+ {children} + + + { + handleClose(); + dispatch( + setNotification({ + msg: "Copied to clipboard!", + alertType: "success" + }) + ); + }} + > + + Copy Link + + + + +
+ ); +} diff --git a/src/components/common/CustomIcon.tsx b/src/components/common/CustomIcon.tsx new file mode 100644 index 0000000..ae9ddd5 --- /dev/null +++ b/src/components/common/CustomIcon.tsx @@ -0,0 +1,16 @@ +import React from 'react' +import SvgIcon, { SvgIconProps } from '@mui/material/SvgIcon' +import { styled } from '@mui/system' + +const CustomSvgIcon: React.FC = styled(SvgIcon)(({ theme }) => ({ + cursor: 'pointer', + color: '#5f6368', + transition: 'all 0.2s', + '&:hover': { + transform: 'scale(1.1)' + } +})) as unknown as React.FC + +export const CustomIcon: React.FC = (props) => { + return +} diff --git a/src/components/common/DraggableResizableGrid.tsx b/src/components/common/DraggableResizableGrid.tsx new file mode 100644 index 0000000..871fec7 --- /dev/null +++ b/src/components/common/DraggableResizableGrid.tsx @@ -0,0 +1,55 @@ +// DraggableResizableGrid.tsx +import React from 'react' +import { DndProvider } from 'react-dnd' +import { HTML5Backend } from 'react-dnd-html5-backend' +import GridLayout, { Layout } from 'react-grid-layout' + +import './DraggableResizableGrid.css' // Add your custom CSS for the grid layout + +interface GridItem { + id: string + content: React.ReactNode +} + +interface DraggableResizableGridProps { + items: GridItem[] + cols?: number + rowHeight?: number + onLayoutChange?: (layout: Layout[]) => void +} + +const DraggableResizableGrid: React.FC = ({ + items, + cols = 12, + rowHeight = 30, + onLayoutChange +}) => { + const layout = items.map((item, index) => ({ + i: item.id, + x: index % cols, + y: Math.floor(index / cols), + w: 4, + h: 4 + })) + + return ( + + + {items.map((item) => ( +
+ {item.content} +
+ ))} +
+
+ ) +} + +export default DraggableResizableGrid diff --git a/src/components/common/Error/Error-styles.tsx b/src/components/common/Error/Error-styles.tsx new file mode 100644 index 0000000..6765f09 --- /dev/null +++ b/src/components/common/Error/Error-styles.tsx @@ -0,0 +1,40 @@ +import { styled } from '@mui/system' +import { Box, Button, Grid, Typography } from '@mui/material' + +export const Container = styled(Box)(({ theme }) => ({ + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + flexDirection: 'column', + gap: '15px', + padding: '25px 10px' +})) + +export const HeaderRow = styled(Box)(({ theme }) => ({ + display: 'flex', + alignItems: 'center', + gap: '10px' +})) + +export const HeaderText = styled(Typography)(({ theme }) => ({ + fontFamily: 'Oxygen', + color: theme.palette.text.primary, + fontWeight: '400' +})) + +export const BackButton = styled(Button)(({ theme }) => ({ + backgroundColor: theme.palette.secondary.light, + color: '#fff', + padding: '8px 16px', + borderRadius: '7px', + fontFamily: 'Oxygen', + fontSize: '18px', + fontWeight: 500, + textTransform: 'none', + transition: 'all 0.3s ease-in-out', + '&:hover': { + cursor: 'pointer', + backgroundColor: theme.palette.secondary.light, + filter: 'brightness(0.9)' + } +})) diff --git a/src/components/common/Error/ErrorElement.tsx b/src/components/common/Error/ErrorElement.tsx new file mode 100644 index 0000000..aace6a9 --- /dev/null +++ b/src/components/common/Error/ErrorElement.tsx @@ -0,0 +1,34 @@ +import { Container, HeaderText, BackButton, HeaderRow } from "./Error-styles"; +import { useTheme } from "@mui/material"; +import { WarningSVG } from "../../../assets/svgs/WarningSVG"; + +interface ErrorElementProps { + message: string; +} + +export const ErrorElement: React.FC = ({ message }) => { + const theme = useTheme(); + + return ( + + + + {message} + + + Please return home or try refreshing the page! + + { + window.location.reload(); + }} + > + Back Home + + + ); +}; diff --git a/src/components/common/ErrorBoundary.tsx b/src/components/common/ErrorBoundary.tsx new file mode 100644 index 0000000..58b3185 --- /dev/null +++ b/src/components/common/ErrorBoundary.tsx @@ -0,0 +1,36 @@ +import React, { ReactNode } from 'react' + +interface ErrorBoundaryProps { + children: ReactNode + fallback: ReactNode +} + +interface ErrorBoundaryState { + hasError: boolean +} + +class ErrorBoundary extends React.Component< + ErrorBoundaryProps, + ErrorBoundaryState +> { + state: ErrorBoundaryState = { + hasError: false + } + + static getDerivedStateFromError(_: Error): ErrorBoundaryState { + return { hasError: true } + } + + componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void { + // You can log the error and errorInfo here, for example, to an error reporting service. + console.error('Error caught in ErrorBoundary:', error, errorInfo) + } + + render(): React.ReactNode { + if (this.state.hasError) return this.props.fallback + + return this.props.children + } +} + +export default ErrorBoundary diff --git a/src/components/common/GenericPublishModal.tsx b/src/components/common/GenericPublishModal.tsx new file mode 100644 index 0000000..6994108 --- /dev/null +++ b/src/components/common/GenericPublishModal.tsx @@ -0,0 +1,316 @@ +import React, { useState } from 'react' +import { + Box, + Button, + Modal, + TextField, + Typography, + Select, + MenuItem, + FormControl, + InputLabel, + SelectChangeEvent, + OutlinedInput, + Chip, + IconButton +} from '@mui/material' +import { styled } from '@mui/system' +import { useDropzone } from 'react-dropzone' +import { toBase64 } from '../../utils/toBase64' +import AddIcon from '@mui/icons-material/Add' +import CloseIcon from '@mui/icons-material/Close' +import { usePublishGeneric } from './PublishGeneric' +import { useDispatch } from 'react-redux' +import { setNotification } from '../../state/features/notificationsSlice' + +const StyledModal = styled(Modal)(({ theme }) => ({ + display: 'flex', + alignItems: 'center', + justifyContent: 'center' +})) + +const ChipContainer = styled(Box)({ + display: 'flex', + flexWrap: 'wrap', + '& > *': { + margin: '4px' + } +}) + +const ModalContent = styled(Box)(({ theme }) => ({ + backgroundColor: theme.palette.background.paper, + padding: theme.spacing(4), + borderRadius: theme.spacing(1), + width: '40%', + '&:focus': { + outline: 'none' + } +})) + +interface GenericModalProps { + open: boolean + onClose: () => void + onPublish: (value: any) => void + acceptedFileType?: string + acceptedFileTypes?: string[] + service: string + identifierPrefix: string + editVideoIdentifier?: string | null | undefined +} + +interface SelectOption { + id: string + name: string +} +const maxSize = 500 * 1024 * 1024 + +export const GenericModal: React.FC = ({ + open, + onClose, + onPublish, + acceptedFileType, + acceptedFileTypes, + service, + identifierPrefix, + editVideoIdentifier +}) => { + const [file, setFile] = useState(null) + const [title, setTitle] = useState('') + const [description, setDescription] = useState('') + const [selectedOption, setSelectedOption] = useState( + null + ) + const [inputValue, setInputValue] = useState('') + const [chips, setChips] = useState([]) + + const [options, setOptions] = useState([]) + const [tags, setTags] = useState([]) + const { publishGeneric } = usePublishGeneric() + const dispatch = useDispatch() + + let acceptedFile = {} + if (acceptedFileType) { + acceptedFile = { + [acceptedFileType]: [] + } + } + const { getRootProps, getInputProps } = useDropzone({ + ...acceptedFile, + maxFiles: 1, + maxSize, + onDrop: (acceptedFiles) => { + setFile(acceptedFiles[0]) + }, + onDropRejected: (rejectedFiles) => { + dispatch( + setNotification({ + msg: 'Your file is over the 500mb limit.', + alertType: 'error' + }) + ) + } + }) + + const handleTitleChange = (event: React.ChangeEvent) => { + setTitle(event.target.value) + } + + const handleDescriptionChange = ( + event: React.ChangeEvent + ) => { + setDescription(event.target.value) + } + + const handleOptionChange = (event: SelectChangeEvent) => { + const optionId = event.target.value + const selectedOption = options.find((option) => option.id === optionId) + setSelectedOption(selectedOption || null) + } + + const handleChipDelete = (index: number) => { + const newChips = [...chips] + newChips.splice(index, 1) + setChips(newChips) + } + + const handleSubmit = async () => { + const missingFields = [] + + if (!title) missingFields.push('title') + if (!file) missingFields.push('file') + if (missingFields.length > 0) { + const missingFieldsString = missingFields.join(', ') + const errMsg = `Missing: ${missingFieldsString}` + + return + } + if (!file) return + + const formattedTags: { [key: string]: string } = {} + chips.forEach((tag, i) => { + formattedTags[`tag${i + 1}`] = tag + }) + + try { + const base64 = await toBase64(file) + if (typeof base64 !== 'string') return + const base64String = base64.split(',')[1] + const fileExtension = file?.name?.split('.')?.pop() + const fileTitle = title?.replace(/ /g, '_')?.slice(0, 20) + const filename = `${fileTitle}.${fileExtension}` + const res = await publishGeneric({ + editVideoIdentifier, + service, + identifierPrefix, + title, + description, + base64: base64String, + filename: filename, + category: selectedOption?.id || '', + ...formattedTags + }) + onPublish(res) + setFile(null) + setTitle('') + setDescription('') + onClose() + } catch (error) {} + } + + const handleInputChange = (event: any) => { + setInputValue(event.target.value) + } + + const handleInputKeyDown = (event: any) => { + if (event.key === 'Enter' && inputValue !== '') { + if (chips.length < 5) { + setChips([...chips, inputValue]) + setInputValue('') + } else { + event.preventDefault() + } + } + } + + const addChip = () => { + if (chips.length < 5) { + setChips([...chips, inputValue]) + setInputValue('') + } + } + + const getListCategories = React.useCallback(async () => { + try { + const url = `/arbitrary/categories` + const response = await fetch(url, { + method: 'GET', + headers: { + 'Content-Type': 'application/json' + } + }) + const responseData = await response.json() + setOptions(responseData) + } catch (error) {} + }, []) + + React.useEffect(() => { + getListCategories() + }, [getListCategories]) + + return ( + + + {editVideoIdentifier && ( + + You are editing: {editVideoIdentifier} + + )} + + Upload {service} + + + + + {file + ? file.name + : 'Drag and drop a file here or click to select a file'} + + + + + {options.length > 0 && ( + + Select a Category + + + )} + + + + + + + + + + + {chips.map((chip, index) => ( + handleChipDelete(index)} + deleteIcon={} + /> + ))} + + + + + + ) +} diff --git a/src/components/common/ImageUploader.tsx b/src/components/common/ImageUploader.tsx new file mode 100644 index 0000000..0cac393 --- /dev/null +++ b/src/components/common/ImageUploader.tsx @@ -0,0 +1,89 @@ +import React, { useCallback } from 'react' +import { Box, Button, TextField, Typography, Modal } from '@mui/material' +import { + useDropzone, + DropzoneRootProps, + DropzoneInputProps +} from 'react-dropzone' +import Compressor from 'compressorjs' + +const toBase64 = (file: File): Promise => + new Promise((resolve, reject) => { + const reader = new FileReader() + reader.readAsDataURL(file) + reader.onload = () => resolve(reader.result) + reader.onerror = (error) => { + reject(error) + } + }) + +interface ImageUploaderProps { + children: React.ReactNode + onPick: (base64Img: string) => void +} + +const ImageUploader: React.FC = ({ children, onPick }) => { + const onDrop = useCallback( + async (acceptedFiles: File[]) => { + if (acceptedFiles.length > 1) { + return + } + let compressedFile: File | undefined + + try { + const image = acceptedFiles[0] + await new Promise((resolve) => { + new Compressor(image, { + quality: 0.6, + maxWidth: 1200, + mimeType: 'image/webp', + success(result) { + const file = new File([result], 'name', { + type: 'image/webp' + }) + compressedFile = file + resolve() + }, + error(err) {} + }) + }) + if (!compressedFile) return + const base64Img = await toBase64(compressedFile) + + onPick(base64Img as string) + } catch (error) { + console.error(error) + } + }, + [onPick] + ) + + const { + getRootProps, + getInputProps, + isDragActive + }: { + getRootProps: () => DropzoneRootProps + getInputProps: () => DropzoneInputProps + isDragActive: boolean + } = useDropzone({ + onDrop, + accept: { + 'image/*': [] + } + }) + + return ( + + + {children} + + ) +} + +export default ImageUploader diff --git a/src/components/common/LazyLoad.tsx b/src/components/common/LazyLoad.tsx new file mode 100644 index 0000000..468234e --- /dev/null +++ b/src/components/common/LazyLoad.tsx @@ -0,0 +1,49 @@ +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 new file mode 100644 index 0000000..501f081 --- /dev/null +++ b/src/components/common/Notification/Notification.tsx @@ -0,0 +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 diff --git a/src/components/common/NumericTextFieldQshop.tsx b/src/components/common/NumericTextFieldQshop.tsx new file mode 100644 index 0000000..10d470d --- /dev/null +++ b/src/components/common/NumericTextFieldQshop.tsx @@ -0,0 +1,132 @@ +import { IconButton, InputAdornment, TextField } from "@mui/material"; +import AddIcon from "@mui/icons-material/Add"; +import RemoveIcon from "@mui/icons-material/Remove"; +import React, { useImperativeHandle, useState } from "react"; + +export enum Variant { + filled = "filled", + standard = "standard", + outlined = "outlined" +} +interface TextFieldProps { + name: string; + label: string; + required: boolean; + minValue: number; + maxValue: number; + variant?: Variant; + addIconButtons?: boolean; + allowDecimals?: boolean; + onChangeFunc?: (e: string) => void; + initialValue?: string; + style?: object; + className?: string; +} + +export type NumericTextFieldRef = { + getTextFieldValue: () => string; +}; + +export const NumericTextFieldQshop = React.forwardRef< + NumericTextFieldRef, + TextFieldProps +>( + ( + { + name, + label, + variant, + required, + style, + minValue, + maxValue, + addIconButtons = true, + allowDecimals = true, + onChangeFunc, + initialValue, + className + }: TextFieldProps, + ref + ) => { + const [textFieldValue, setTextFieldValue] = useState( + initialValue || "" + ); + useImperativeHandle( + ref, + () => ({ + getTextFieldValue: () => { + return textFieldValue; + } + }), + [textFieldValue] + ); + + const setMinMaxValue = (value: string): string => { + const lastIndexIsDecimal = value.charAt(value.length - 1) === "."; + if (lastIndexIsDecimal) return value; + + const valueNum = Number(value); + + // Bounds checking on valueNum + let minMaxNum = valueNum; + minMaxNum = Math.min(minMaxNum, maxValue); + minMaxNum = Math.max(minMaxNum, minValue); + + return minMaxNum === valueNum ? value : minMaxNum.toString(); + }; + + const filterValue = (value: string, emptyReturn = "") => { + if (allowDecimals === false) value = value.replace(".", ""); + if (value === "-1") return emptyReturn; + + const isPositiveNum = /^[0-9]*\.?[0-9]*$/; + + if (isPositiveNum.test(value)) { + return setMinMaxValue(value); + } + return textFieldValue; + }; + + const changeValueWithButton = (changeAmount: number) => { + const valueNum = Number(textFieldValue); + const newValue = setMinMaxValue((valueNum + changeAmount).toString()); + setTextFieldValue(newValue); + }; + + const listeners = (e: React.ChangeEvent) => { + const newValue = filterValue(e.target.value || "-1"); + setTextFieldValue(newValue); + if (onChangeFunc) onChangeFunc(newValue); + }; + + return ( + + changeValueWithButton(1)}> + {" "} + + changeValueWithButton(-1)}> + {" "} + + + ) + } + : {} + } + onChange={(e: React.ChangeEvent) => listeners(e)} + autoComplete="off" + value={textFieldValue} + className={className} + /> + ); + } +); diff --git a/src/components/common/PageLoader.tsx b/src/components/common/PageLoader.tsx new file mode 100644 index 0000000..e1575d2 --- /dev/null +++ b/src/components/common/PageLoader.tsx @@ -0,0 +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; diff --git a/src/components/common/Portal.tsx b/src/components/common/Portal.tsx new file mode 100644 index 0000000..1e0cb26 --- /dev/null +++ b/src/components/common/Portal.tsx @@ -0,0 +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 diff --git a/src/components/common/PostPublishModal.tsx b/src/components/common/PostPublishModal.tsx new file mode 100644 index 0000000..d9a9a21 --- /dev/null +++ b/src/components/common/PostPublishModal.tsx @@ -0,0 +1,280 @@ +import React, { useState } from 'react' +import { + Box, + Button, + Modal, + TextField, + Typography, + Select, + MenuItem, + FormControl, + InputLabel, + SelectChangeEvent, + OutlinedInput, + Chip, + IconButton +} from '@mui/material' +import { styled } from '@mui/system' +import { useDropzone } from 'react-dropzone' +import { usePublishVideo } from './PublishVideo' +import { toBase64 } from '../../utils/toBase64' +import AddIcon from '@mui/icons-material/Add' +import CloseIcon from '@mui/icons-material/Close' +const StyledModal = styled(Modal)(({ theme }) => ({ + display: 'flex', + alignItems: 'center', + justifyContent: 'center' +})) + +const ChipContainer = styled(Box)({ + display: 'flex', + flexWrap: 'wrap', + '& > *': { + margin: '4px' + } +}) + +const ModalContent = styled(Box)(({ theme }) => ({ + backgroundColor: theme.palette.background.paper, + padding: theme.spacing(4), + borderRadius: theme.spacing(1), + width: '40%', + '&:focus': { + outline: 'none' + } +})) + +interface PostModalProps { + open: boolean + onClose: () => void + onPublish: (value: any) => Promise + post: any + mode?: string + metadata?: any +} + +interface SelectOption { + id: string + name: string +} + +const PostPublishModal: React.FC = ({ + open, + onClose, + onPublish, + post, + mode, + metadata +}) => { + const [file, setFile] = useState(null) + const [title, setTitle] = useState('') + const [description, setDescription] = useState('') + const [selectedOption, setSelectedOption] = useState( + null + ) + const [inputValue, setInputValue] = useState('') + const [chips, setChips] = useState([]) + + const [options, setOptions] = useState([]) + const [tags, setTags] = useState([]) + const { publishVideo } = usePublishVideo() + const { getRootProps, getInputProps } = useDropzone({ + accept: { + 'video/*': [] + }, + maxFiles: 1, + onDrop: (acceptedFiles) => { + setFile(acceptedFiles[0]) + } + }) + + React.useEffect(() => { + if (post.title) { + setTitle(post.title) + } + // if (post.description) { + // setDescription(post.description) + // } + }, [post]) + + React.useEffect(() => { + if (mode === 'edit' && metadata) { + if (metadata.description) { + setDescription(metadata.description) + } + + const findCategory = options.find( + (option) => option.id === metadata?.category + ) + if (findCategory) { + setSelectedOption(findCategory) + } + + if (!metadata?.tags || !Array.isArray(metadata?.tags)) return + + setChips(metadata.tags.slice(0, -2)) + } + }, [mode, metadata, options]) + + const handleTitleChange = (event: React.ChangeEvent) => { + setTitle(event.target.value) + } + + const handleDescriptionChange = ( + event: React.ChangeEvent + ) => { + setDescription(event.target.value) + } + + const handleOptionChange = (event: SelectChangeEvent) => { + const optionId = event.target.value + const selectedOption = options.find((option) => option.id === optionId) + setSelectedOption(selectedOption || null) + } + + const handleChipDelete = (index: number) => { + const newChips = [...chips] + newChips.splice(index, 1) + setChips(newChips) + } + + const handleSubmit = async () => { + const formattedTags: { [key: string]: string } = {} + chips.forEach((tag, i) => { + formattedTags[`tag${i + 1}`] = tag + }) + + try { + await onPublish({ + title, + description, + tags: chips, + category: selectedOption?.id || '' + }) + setFile(null) + setTitle('') + setDescription('') + onClose() + } catch (error) {} + } + + const handleInputChange = (event: any) => { + setInputValue(event.target.value) + } + + const handleInputKeyDown = (event: any) => { + if (event.key === 'Enter' && inputValue !== '') { + if (chips.length < 5) { + setChips([...chips, inputValue]) + setInputValue('') + } else { + event.preventDefault() + } + } + } + + const addChip = () => { + if (chips.length < 3) { + setChips([...chips, inputValue]) + setInputValue('') + } + } + + const getListCategories = React.useCallback(async () => { + try { + const url = `/arbitrary/categories` + const response = await fetch(url, { + method: 'GET', + headers: { + 'Content-Type': 'application/json' + } + }) + const responseData = await response.json() + setOptions(responseData) + } catch (error) {} + }, []) + + React.useEffect(() => { + getListCategories() + }, [getListCategories]) + + return ( + + + + Upload Blog Post + + + + + {options.length > 0 && ( + + Select a Category + + + )} + + + + + + + + + + + {chips.map((chip, index) => ( + handleChipDelete(index)} + deleteIcon={} + /> + ))} + + + + + + ) +} + +export default PostPublishModal diff --git a/src/components/common/PublishAudio.tsx b/src/components/common/PublishAudio.tsx new file mode 100644 index 0000000..d9e6952 --- /dev/null +++ b/src/components/common/PublishAudio.tsx @@ -0,0 +1,111 @@ +import React from 'react' +import { useDispatch, useSelector } from 'react-redux' +import { setNotification } from '../../state/features/notificationsSlice' +import { RootState } from '../../state/store' +import ShortUniqueId from 'short-unique-id' + +const uid = new ShortUniqueId() + +interface IPublishVideo { + title: string + description: string + base64: string + category: string + editVideoIdentifier?: string | null | undefined + +} + +export const usePublishAudio = () => { + const { user } = useSelector((state: RootState) => state.auth) + const dispatch = useDispatch() + const publishAudio = async ({ + editVideoIdentifier, + title, + description, + base64, + category, + ...rest + }: IPublishVideo) => { + let address + let name + let errorMsg = '' + + address = user?.address + name = user?.name || '' + + const missingFields = [] + if (!address) { + errorMsg = "Cannot post: your address isn't available" + } + if (!name) { + errorMsg = 'Cannot post without a name' + } + if (!title) missingFields.push('title') + if (missingFields.length > 0) { + const missingFieldsString = missingFields.join(', ') + const errMsg = `Missing: ${missingFieldsString}` + errorMsg = errMsg + } + + if (errorMsg) { + dispatch( + setNotification({ + msg: errorMsg, + alertType: 'error' + }) + ) + throw new Error(errorMsg) + } + + try { + const id = uid() + + let identifier = `qaudio_qblog_${id}` + if(editVideoIdentifier){ + identifier = editVideoIdentifier + } + const resourceResponse = await qortalRequest({ + action: 'PUBLISH_QDN_RESOURCE', + name: name, + service: 'AUDIO', + data64: base64, + title: title, + description: description, + category: category, + ...rest, + identifier: identifier + }) + dispatch( + setNotification({ + msg: 'Audio successfully published', + alertType: 'success' + }) + ) + return resourceResponse + } catch (error: any) { + let notificationObj = null + if (typeof error === 'string') { + notificationObj = { + msg: error || 'Failed to publish audio', + alertType: 'error' + } + } else if (typeof error?.error === 'string') { + notificationObj = { + msg: error?.error || 'Failed to publish audio', + alertType: 'error' + } + } else { + notificationObj = { + msg: error?.message || error?.message || 'Failed to publish audio', + alertType: 'error' + } + } + if (!notificationObj) return + dispatch(setNotification(notificationObj)) + + } + } + return { + publishAudio + } +} diff --git a/src/components/common/PublishGeneric.tsx b/src/components/common/PublishGeneric.tsx new file mode 100644 index 0000000..48478d0 --- /dev/null +++ b/src/components/common/PublishGeneric.tsx @@ -0,0 +1,119 @@ +import React from 'react' +import { useDispatch, useSelector } from 'react-redux' +import { setNotification } from '../../state/features/notificationsSlice' +import { RootState } from '../../state/store' +import ShortUniqueId from 'short-unique-id' + +const uid = new ShortUniqueId() + +interface IPublishGeneric { + title: string + description: string + base64: string + category: string + service: string + identifierPrefix: string + filename: string + editVideoIdentifier?: string | null | undefined + +} + +export const usePublishGeneric = () => { + const { user } = useSelector((state: RootState) => state.auth) + const dispatch = useDispatch() + const publishGeneric = async ({ + editVideoIdentifier, + service, + identifierPrefix, + filename, + title, + description, + base64, + category, + ...rest + }: IPublishGeneric) => { + let address + let name + let errorMsg = '' + + address = user?.address + name = user?.name || '' + + const missingFields = [] + if (!address) { + errorMsg = "Cannot post: your address isn't available" + } + if (!name) { + errorMsg = 'Cannot post without a name' + } + if (!title) missingFields.push('title') + if (missingFields.length > 0) { + const missingFieldsString = missingFields.join(', ') + const errMsg = `Missing: ${missingFieldsString}` + errorMsg = errMsg + } + + if (errorMsg) { + dispatch( + setNotification({ + msg: errorMsg, + alertType: 'error' + }) + ) + throw new Error(errorMsg) + } + + try { + const id = uid() + + let identifier = `${identifierPrefix}_${id}` + if(editVideoIdentifier){ + identifier = editVideoIdentifier + } + + const resourceResponse = await qortalRequest({ + action: 'PUBLISH_QDN_RESOURCE', + name: name, + service: service, + data64: base64, + title: title, + description: description, + category: category, + filename, + ...rest, + identifier: identifier + }) + dispatch( + setNotification({ + msg: `${service} successfully published`, + alertType: 'success' + }) + ) + return resourceResponse + } catch (error: any) { + let notificationObj = null + if (typeof error === 'string') { + notificationObj = { + msg: error || `Failed to publish ${service}`, + alertType: 'error' + } + } else if (typeof error?.error === 'string') { + notificationObj = { + msg: error?.error || `Failed to publish ${service}`, + alertType: 'error' + } + } else { + notificationObj = { + msg: + error?.message || error?.message || `Failed to publish ${service}`, + alertType: 'error' + } + } + if (!notificationObj) return + dispatch(setNotification(notificationObj)) + } + } + return { + publishGeneric + } +} diff --git a/src/components/common/PublishVideo.tsx b/src/components/common/PublishVideo.tsx new file mode 100644 index 0000000..4042994 --- /dev/null +++ b/src/components/common/PublishVideo.tsx @@ -0,0 +1,112 @@ +import React from 'react' +import { useDispatch, useSelector } from 'react-redux' +import { setNotification } from '../../state/features/notificationsSlice' +import { RootState } from '../../state/store' +import ShortUniqueId from 'short-unique-id' + +const uid = new ShortUniqueId() + +interface IPublishVideo { + title: string + description: string + base64?: string + category: string + editVideoIdentifier?: string | null | undefined + file?: File +} + +export const usePublishVideo = () => { + const { user } = useSelector((state: RootState) => state.auth) + const dispatch = useDispatch() + const publishVideo = async ({ + file, + editVideoIdentifier, + title, + description, + base64, + category, + ...rest + }: IPublishVideo) => { + let address + let name + let errorMsg = '' + + address = user?.address + name = user?.name || '' + + const missingFields = [] + if (!address) { + errorMsg = "Cannot post: your address isn't available" + } + if (!name) { + errorMsg = 'Cannot post without a name' + } + if (!title) missingFields.push('title') + if (missingFields.length > 0) { + const missingFieldsString = missingFields.join(', ') + const errMsg = `Missing: ${missingFieldsString}` + errorMsg = errMsg + } + + if (errorMsg) { + dispatch( + setNotification({ + msg: errorMsg, + alertType: 'error' + }) + ) + throw new Error(errorMsg) + } + + try { + const id = uid() + + let identifier = `qvideo_qblog_${id}` + if (editVideoIdentifier) { + identifier = editVideoIdentifier + } + const resourceResponse = await qortalRequest({ + action: 'PUBLISH_QDN_RESOURCE', + name: name, + service: 'VIDEO', + // data64: base64, + file: file, + title: title, + description: description, + category: category, + ...rest, + identifier: identifier + }) + dispatch( + setNotification({ + msg: 'Video successfully published', + alertType: 'success' + }) + ) + return resourceResponse + } catch (error: any) { + let notificationObj = null + if (typeof error === 'string') { + notificationObj = { + msg: error || 'Failed to publish video', + alertType: 'error' + } + } else if (typeof error?.error === 'string') { + notificationObj = { + msg: error?.error || 'Failed to publish video', + alertType: 'error' + } + } else { + notificationObj = { + msg: error?.message || 'Failed to publish video', + alertType: 'error' + } + } + if (!notificationObj) return + dispatch(setNotification(notificationObj)) + } + } + return { + publishVideo + } +} diff --git a/src/components/common/ResponsiveImage.tsx b/src/components/common/ResponsiveImage.tsx new file mode 100644 index 0000000..7308e53 --- /dev/null +++ b/src/components/common/ResponsiveImage.tsx @@ -0,0 +1,124 @@ +import React, { useState, useEffect, CSSProperties } from "react"; +import Skeleton from "@mui/material/Skeleton"; +import { Box } from "@mui/material"; + +interface ResponsiveImageProps { + src: string; + dimensions: string; + alt?: string; + className?: string; + style?: CSSProperties; +} + +const ResponsiveImage: React.FC = ({ + src, + dimensions, + alt, + className, + style +}) => { + const [loading, setLoading] = useState(true); + const matchResult = dimensions?.match(/v1\.(\d+(\.\d+)?)x(\d+)/); + + const width = matchResult ? parseFloat(matchResult[1]) : 1; // Default width value + const height = matchResult ? parseInt(matchResult[3], 10) : 1; // Default height value + + const aspectRatio = (height / width) * 100; + + useEffect(() => { + if (dimensions === "v1.0x0") { + setLoading(false); + return; + } + }, [dimensions]); + + if (dimensions === "v1.0x0" || !dimensions) { + return null; + } + + const imageStyle: CSSProperties = { + width: "100%", + height: "100%", + objectFit: "cover" + }; + + const wrapperStyle: CSSProperties = { + position: "relative", + paddingBottom: `${aspectRatio}%`, + overflow: "hidden", + ...style + }; + + return ( + + {/* setLoading(false)} + src={src} + style={{ + width: '100%', + height: 'auto', + borderRadius: '8px' + }} + /> */} + {loading && ( + + )} + + setLoading(false)} + src={src} + style={{ + width: "100%", + height: "auto", + borderRadius: "8px", + visibility: loading ? "hidden" : "visible", + position: loading ? "absolute" : "unset" + }} + /> + + ); + + return ( +
+ {loading ? ( + + ) : ( + {alt} + )} +
+ ); +}; + +export default ResponsiveImage; diff --git a/src/components/common/TabImageList/TabImageList-styles.tsx b/src/components/common/TabImageList/TabImageList-styles.tsx new file mode 100644 index 0000000..8b9f401 --- /dev/null +++ b/src/components/common/TabImageList/TabImageList-styles.tsx @@ -0,0 +1,24 @@ +import { styled } from "@mui/system"; +import { Box } from "@mui/material"; + +export const TabImageListStyle = styled(Box)(({ theme }) => ({ + display: "flex", + alignItems: "center", + flexDirection: "column", + gap: "10px", + justifyContent: "center", + width: "100%" +})); + +export const TabImageContainer = styled(Box)(({ theme }) => ({ + display: "flex", + alignItems: "center", + justifyContent: "flex-start", + width: "100%", + gap: "15px" +})); + +export const TabImageStyle = styled("img")(({ theme }) => ({ + width: "30%", + height: "100%" +})); diff --git a/src/components/common/TabImageList/TabImageList.tsx b/src/components/common/TabImageList/TabImageList.tsx new file mode 100644 index 0000000..ca2138e --- /dev/null +++ b/src/components/common/TabImageList/TabImageList.tsx @@ -0,0 +1,65 @@ +import { useState } from "react"; +import { + TabImageContainer, + TabImageListStyle, + TabImageStyle +} from "./TabImageList-styles"; +import { Box } from "@mui/material"; +import CSS from "csstype"; + +export interface TabImageListProps { + divStyle?: CSS.Properties; + imgStyle?: CSS.Properties; + images: string[] | undefined; +} +const TabImageList = ({ + divStyle = {}, + imgStyle = {}, + images +}: TabImageListProps) => { + if (images) { + const [mainImage, setMainImage] = useState(images[0]); + const [imageFocusedIndex, setImageFocusedIndex] = useState(0); + + const imageTabOutlineStyle = { + outline: "4px solid #03A9F4" + }; + + const switchMainImage = (index: number) => { + setMainImage(images[index]); + setImageFocusedIndex(index); + }; + const imageRow = + images.length > 1 ? ( + images.map((image, index) => ( + switchMainImage(index)} + key={image + index.toString()} + /> + )) + ) : ( +
+ ); + + const defaultStyle = { width: "100%" }; + return ( + + + No product image found + + {imageRow} + + ); + } else { + return
; + } +}; + +export default TabImageList; diff --git a/src/components/common/VideoContent.tsx b/src/components/common/VideoContent.tsx new file mode 100644 index 0000000..f8f2bc1 --- /dev/null +++ b/src/components/common/VideoContent.tsx @@ -0,0 +1,51 @@ +import React from 'react' +import { Box, Typography } from '@mui/material' +import { styled } from '@mui/system' +import { Description, Movie } from '@mui/icons-material' + +interface VideoProps { + title: string + description: string +} + +const StyledBox = styled(Box)` + margin: 20px 0px; + display: flex; + align-items: center; +` + +const Title = styled(Typography)`` + +const DescriptionIcon = styled(Description)` + color: #666; + margin-right: 0.5rem; +` + +const MovieIcon = styled(Movie)` + color: #666; + margin-right: 0.5rem; +` + +export const VideoContent: React.FC = ({ title, description }) => { + return ( + + + + + {title} + + + + + {description} + + + + ) +} diff --git a/src/components/common/VideoPublishModal.tsx b/src/components/common/VideoPublishModal.tsx new file mode 100644 index 0000000..48b238b --- /dev/null +++ b/src/components/common/VideoPublishModal.tsx @@ -0,0 +1,286 @@ +import React, { useState } from "react"; +import { + Box, + Button, + Modal, + TextField, + Typography, + Select, + MenuItem, + FormControl, + InputLabel, + SelectChangeEvent, + OutlinedInput, + Chip, + IconButton +} from "@mui/material"; +import { styled } from "@mui/system"; +import { useDropzone } from "react-dropzone"; +import { usePublishVideo } from "./PublishVideo"; +import AddIcon from "@mui/icons-material/Add"; +import CloseIcon from "@mui/icons-material/Close"; +const StyledModal = styled(Modal)(({ theme }) => ({ + display: "flex", + alignItems: "center", + justifyContent: "center" +})); + +const ChipContainer = styled(Box)({ + display: "flex", + flexWrap: "wrap", + "& > *": { + margin: "4px" + } +}); + +const ModalContent = styled(Box)(({ theme }) => ({ + backgroundColor: theme.palette.background.paper, + padding: theme.spacing(4), + borderRadius: theme.spacing(1), + width: "40%", + "&:focus": { + outline: "none" + } +})); + +interface VideoModalProps { + open: boolean; + onClose: () => void; + onPublish: (value: any) => void; + editVideoIdentifier?: string | null | undefined; +} + +interface SelectOption { + id: string; + name: string; +} + +const VideoModal: React.FC = ({ + open, + onClose, + onPublish, + editVideoIdentifier +}) => { + const [file, setFile] = useState(null); + const [title, setTitle] = useState(""); + const [description, setDescription] = useState(""); + const [selectedOption, setSelectedOption] = useState( + null + ); + const [inputValue, setInputValue] = useState(""); + const [chips, setChips] = useState([]); + + const [options, setOptions] = useState([]); + const [tags, setTags] = useState([]); + const { publishVideo } = usePublishVideo(); + const { getRootProps, getInputProps } = useDropzone({ + accept: { + "video/*": [] + }, + maxFiles: 1, + onDrop: (acceptedFiles) => { + setFile(acceptedFiles[0]); + } + }); + + const handleTitleChange = (event: React.ChangeEvent) => { + setTitle(event.target.value); + }; + + const handleDescriptionChange = ( + event: React.ChangeEvent + ) => { + setDescription(event.target.value); + }; + + const handleOptionChange = (event: SelectChangeEvent) => { + const optionId = event.target.value; + const selectedOption = options.find((option) => option.id === optionId); + setSelectedOption(selectedOption || null); + }; + + const handleChipDelete = (index: number) => { + const newChips = [...chips]; + newChips.splice(index, 1); + setChips(newChips); + }; + + const handleSubmit = async () => { + const missingFields = []; + + if (!title) missingFields.push("title"); + if (!file) missingFields.push("file"); + if (missingFields.length > 0) { + const missingFieldsString = missingFields.join(", "); + const errMsg = `Missing: ${missingFieldsString}`; + + return; + } + if (!file) return; + + const formattedTags: { [key: string]: string } = {}; + chips.forEach((tag, i) => { + formattedTags[`tag${i + 1}`] = tag; + }); + + try { + // const base64 = await toBase64(file) + // if (typeof base64 !== 'string') return + // const base64String = base64.split(',')[1] + // if (!file) return + + const res = await publishVideo({ + file: file, + editVideoIdentifier, + title, + description, + category: selectedOption?.id || "", + ...formattedTags + }); + onPublish(res); + setFile(null); + setTitle(""); + setDescription(""); + onClose(); + } catch (error) {} + }; + + const handleInputChange = (event: any) => { + setInputValue(event.target.value); + }; + + const handleInputKeyDown = (event: any) => { + if (event.key === "Enter" && inputValue !== "") { + if (chips.length < 5) { + setChips([...chips, inputValue]); + setInputValue(""); + } else { + event.preventDefault(); + } + } + }; + + const addChip = () => { + if (chips.length < 5) { + setChips([...chips, inputValue]); + setInputValue(""); + } + }; + + const getListCategories = React.useCallback(async () => { + try { + const url = `/arbitrary/categories`; + const response = await fetch(url, { + method: "GET", + headers: { + "Content-Type": "application/json" + } + }); + const responseData = await response.json(); + setOptions(responseData); + } catch (error) {} + }, []); + + React.useEffect(() => { + getListCategories(); + }, [getListCategories]); + + return ( + + + {editVideoIdentifier && ( + + You are editing: {editVideoIdentifier} + + )} + + Upload Video + + + + + {file + ? file.name + : "Drag and drop a video file here or click to select a file"} + + + + + {options.length > 0 && ( + + Select a Category + + + )} + + + + + + + + + + + {chips.map((chip, index) => ( + handleChipDelete(index)} + deleteIcon={} + /> + ))} + + + + + + ); +}; + +export default VideoModal; diff --git a/src/components/editor/BlogEditor.css b/src/components/editor/BlogEditor.css new file mode 100644 index 0000000..0a3e0e8 --- /dev/null +++ b/src/components/editor/BlogEditor.css @@ -0,0 +1,78 @@ +/* src/components/BlogEditor.css */ +.blog-editor { + max-width: 800px; + margin: 0 auto; + padding: 1rem; + line-height: 1.5; + font-size: 18px; + max-height: 50vh; + overflow-y: auto; + min-height: 200px; + z-index: 500; + } + + .toolbar { + display: flex; + justify-content: center; + margin-bottom: 1rem; + } + + + + .toolbar-button:focus { + outline: none; + } + + .code-block { + background-color: #2c2b31; + color: rgb(238, 234, 234); + border-radius: 3px; + padding: 10px; + margin: 10px 0; + font-family: 'Courier New', Courier, monospace; + white-space: pre-wrap; + overflow-x: auto; + max-width: 100%; + font-size: 14px; + } + + .paragraph { + font-size: 20px; + margin: 0px; + } + + .paragraph-mail { + font-size: 16px; + margin: 0px; + } + + .toolbar-button { + background-color: white; + border: 1px solid gray; + border-radius: 5px; + margin-right: 5px; + cursor: pointer; + outline: none; + height: 32px; + width: 32px; + display: flex; + align-items: center; + justify-content: center; + } + + .toolbar-button.active { + background-color: lightgray; + } + + .h2 { + font-size: 25px + } + + .h2 { + font-size: 22px + } + + .align-center { + text-align: center; + } + diff --git a/src/components/editor/BlogEditor.tsx b/src/components/editor/BlogEditor.tsx new file mode 100644 index 0000000..0da146c --- /dev/null +++ b/src/components/editor/BlogEditor.tsx @@ -0,0 +1,574 @@ +// src/components/BlogEditor.tsx +// @ts-nocheck + +import React, { useMemo, useState, useCallback } from 'react'; +import { createEditor, Descendant, Editor, Transforms, Range } from 'slate' +import SvgIcon from '@material-ui/core/SvgIcon' +import { + Slate, + Editable, + withReact, + RenderElementProps, + RenderLeafProps, + useSlate +} from 'slate-react' +import { styled } from '@mui/system' +import { CustomElement, CustomText, FormatMark } from './customTypes' +import './BlogEditor.css' +import { Modal, Box, TextField, Button } from '@mui/material' + +import { AlignCenterSVG } from '../../assets/svgs/AlignCenterSVG' +import { BoldSVG } from '../../assets/svgs/BoldSVG' +import { ItalicSVG } from '../../assets/svgs/ItalicSVG' +import { UnderlineSVG } from '../../assets/svgs/UnderlineSVG' +import { H2SVG } from '../../assets/svgs/H2SVG' +import { H3SVG } from '../../assets/svgs/H3SVG' +import { AlignLeftSVG } from '../../assets/svgs/AlignLeftSVG' +import { AlignRightSVG } from '../../assets/svgs/AlignRightSVG' +import { CodeBlockSVG } from '../../assets/svgs/CodeBlockSVG' +import { LinkSVG } from '../../assets/svgs/LinkSVG' + +const initialValue: Descendant[] = [ + { + type: 'paragraph', + children: [{ text: 'Start writing your blog post...' }] + } +] + +interface MyComponentProps { + addPostSection?: (value: any) => void + editPostSection?: (value: any, section: any) => void + defaultValue?: any + section?: any + value: any + setValue: (value: any) => void + editorKey?: number + mode?: string +} + +const ModalBox = styled(Box)(({ theme }) => ({ + position: 'absolute', + top: '50%', + left: '50%', + transform: 'translate(-50%, -50%)', + backgroundColor: theme.palette.background.paper, + boxShadow: theme.shadows[5], + padding: theme.spacing(2, 4, 3), + gap: '15px', + borderRadius: '5px', + alignItems: 'center', + display: 'flex', + flex: 0 +})) + +const BlogEditor: React.FC = ({ + addPostSection, + editPostSection, + defaultValue, + section, + value, + setValue, + editorKey, + mode +}) => { + const editor = useMemo(() => withReact(createEditor()), []) + + // const [value, setValue] = useState(defaultValue || initialValue); + const isTextAlignmentActive = (editor: Editor, alignment: string) => { + const [match] = Editor.nodes(editor, { + match: (n) => { + return n?.textAlign === alignment?.replace(/^align-/, '') + } + }) + return !!match + } + + const toggleTextAlignment = (editor: Editor, alignment: string) => { + const isActive = isTextAlignmentActive(editor, alignment) + Transforms.setNodes( + editor, + { style: { textAlign: isActive ? 'inherit' : alignment } }, + { match: (n) => Editor.isBlock(editor, n) } + ) + } + + const toggleMark = (editor: Editor, format: FormatMark) => { + if ( + format === 'align-left' || + format === 'align-center' || + format === 'align-right' + ) { + toggleTextAlignment(editor, format) + } else { + const isActive = Editor?.marks(editor)?.[format] === true + if (isActive) { + Editor?.removeMark(editor, format) + } else { + Editor?.addMark(editor, format, true) + } + } + } + + const newValue = useMemo(() => [...(value || initialValue)], [value]) + + const types = ['paragraph', 'heading-2', 'heading-3'] + + const setTextAlignment = (editor, alignment) => { + const isActive = isTextAlignmentActive(editor, alignment) + const alignmentType = '' + Transforms?.setNodes( + editor, + { + textAlign: isActive ? null : alignment + }, + { + match: (n) => + n.type === 'heading-2' || + n.type === 'heading-3' || + n.type === 'paragraph' + } + ) + } + + const ToolbarButton: React.FC<{ + format: FormatMark | string + label: string + editor: Editor + children: React.ReactNode + }> = ({ format, label, editor, children }) => { + useSlate() + + let onClick = () => { + if (format === 'heading-2' || format === 'heading-3') { + toggleBlock(editor, format) + } else if ( + format === 'bold' || + format === 'italic' || + format === 'underline' || + format === '' + ) { + toggleMark(editor, format) + } else if ( + format === 'align-left' || + format === 'align-center' || + format === 'align-right' + ) { + setTextAlignment(editor, format?.replace(/^align-/, '')) + } + } + + let isActive = false + + try { + if ( + format === 'align-left' || + format === 'align-center' || + format === 'align-right' + ) { + isActive = isTextAlignmentActive(editor, format) + } else if (format === 'heading-2' || format === 'heading-3') { + isActive = isBlockActive(editor, format) + } else if ( + format === 'bold' || + format === 'italic' || + format === 'underline' || + format === '' + ) { + isActive = Editor?.marks(editor)?.[format] === true + } + } catch (error) {} + + return ( + + ) + } + + const ToolbarButtonCodeBlock: React.FC<{ + format: FormatMark | string + label: string + editor: Editor + children: React.ReactNode + }> = ({ format, label, editor, children }) => { + const editor2 = useSlate() + + let onClick = () => { + if (format === 'code-block') { + toggleBlock(editor, 'code-block') + } + } + let isActive = false + try { + if (format === 'code-block') { + isActive = isBlockActive(editor, format) + } + } catch (error) {} + + return ( + + ) + } + + const ToolbarButtonAlign: React.FC<{ + format: string + label: string + editor: Editor + }> = ({ format, label, editor }) => { + const isActive = + Editor?.nodes(editor, { + match: (n) => n?.align === format + })?.length > 0 + + return ( + + ) + } + + const ToolbarButtonCodeLink: React.FC<{ + format: FormatMark | string + label: string + editor: Editor + children: React.ReactNode + }> = ({ format, label, editor, children }) => { + useSlate() + + let isActive = false + try { + if (format === 'link') { + isActive = !!Editor?.marks(editor)?.link + } + } catch (error) {} + + return ( + + ) + } + + // Create a toggleBlock function and an isBlockActive function to handle block elements + const toggleBlock = (editor: Editor, format: string) => { + const isActive = isBlockActive(editor, format) + Transforms?.unwrapNodes(editor, { + match: (n) => Editor?.isBlock(editor, n), + split: true + }) + + if (isActive) { + Transforms?.setNodes(editor, { type: 'paragraph' }) + } else { + Transforms?.setNodes(editor, { type: format }) + } + } + + const isBlockActive = (editor: Editor, format: string) => { + const [match] = Editor?.nodes(editor, { + match: (n) => n?.type === format + }) + return !!match + } + + const handleKeyDown = (event: React.KeyboardEvent) => { + if (event.key === 'Enter' && isBlockActive(editor, 'code-block')) { + event.preventDefault() + editor?.insertText('\n') + } + + if (event.key === 'ArrowDown' && isBlockActive(editor, 'code-block')) { + event.preventDefault() + Transforms?.insertNodes(editor, { + type: 'paragraph', + children: [{ text: '' }] + }) + } + } + + const handleChange = (newValue: Descendant[]) => { + setValue(newValue) + } + + const toggleLink = (editor: Editor, url: string) => { + const { selection } = editor + + if (selection && !Range.isCollapsed(selection)) { + const isLink = Editor?.marks(editor)?.link === true + const isInsideLink = isLinkActive(editor) + + if (isLink) { + Editor?.removeMark(editor, 'link') + } else if (url) { + Editor?.addMark(editor, 'link', url) + } + } + } + + const [open, setOpen] = useState(false) + + const initialValue = 'qortal://' + const [inputValue, setInputValue] = useState(initialValue) + + const handleChangeLink = (event) => { + const newValue = event?.target?.value + if (newValue?.startsWith(initialValue)) { + setInputValue(newValue) + } + } + const isLinkActive = (editor: Editor) => { + const [link] = Editor?.nodes(editor, { + match: (n) => n?.type === 'link' + }) + return !!link + } + const handleSaveClick = () => { + const marks = Editor?.marks(editor) + const isLink = marks?.link === true + + if (isLink) { + Editor?.removeMark(editor, 'link') + return // Return early to skip the rest of the function + } + toggleLink(editor, inputValue) + setOpen(false) + } + + const onClose = () => { + setOpen(false) + } + + const handlePaste = (event: React.ClipboardEvent) => { + event.preventDefault() + const text = event?.clipboardData?.getData('text/plain') + const isCodeBlock = isBlockActive(editor, 'code-block') + + if (isCodeBlock) { + const lines = text?.split('\n') + const fragment: Descendant[] = [ + { + type: 'code-block', + children: lines?.map((line) => ({ + type: 'code-line', + children: [{ text: line }] + })) + } + ] + + Transforms?.insertFragment(editor, fragment) + } else if (text) { + const fragment = text?.split('\n').map((line) => ({ + type: 'paragraph', + children: [{ text: line }] + })) + + Transforms?.insertFragment(editor, fragment) + } + } + + return ( + + handleChange(newValue)} + key={editorKey || 1} + > +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ renderElement({ ...props, mode })} + renderLeaf={renderLeaf} + onKeyDown={handleKeyDown} + onPaste={handlePaste} + mode={mode} + /> +
+ + + + + + + {editPostSection && ( + + )} +
+ ) +} + +export default BlogEditor + +type ExtendedRenderElementProps = RenderElementProps & { mode?: string } + +export const renderElement = ({ + attributes, + children, + element, + mode +}: ExtendedRenderElementProps) => { + switch (element.type) { + case 'block-quote': + return
{children}
+ case 'heading-2': + return ( +

+ {children} +

+ ) + case 'heading-3': + return ( +

+ {children} +

+ ) + case 'code-block': + return ( +
+          {children}
+        
+ ) + case 'code-line': + return
{children}
+ case 'link': + return ( +
+ {children} + + ) + default: + return ( +

+ {children} +

+ ) + } +} + + +export const renderLeaf = ({ attributes, children, leaf }: RenderLeafProps) => { + let el = children + + if (leaf.bold) { + el = {el} + } + + if (leaf.italic) { + el = {el} + } + + if (leaf.underline) { + el = {el} + } + + if (leaf.link) { + el = ( + + {el} + + ) + } + + return {el} +} \ No newline at end of file diff --git a/src/components/editor/ReadOnlySlate.tsx b/src/components/editor/ReadOnlySlate.tsx new file mode 100644 index 0000000..cd2616c --- /dev/null +++ b/src/components/editor/ReadOnlySlate.tsx @@ -0,0 +1,25 @@ +import React, { useMemo } from 'react'; +import { createEditor, Descendant, Editor } from 'slate'; +import { withReact, Slate, Editable, RenderElementProps, RenderLeafProps } from 'slate-react'; +import { renderElement, renderLeaf } from './BlogEditor'; + +interface ReadOnlySlateProps { + content: any + mode?: string +} +const ReadOnlySlate: React.FC = ({ content, mode }) => { + const editor = useMemo(() => withReact(createEditor()), []) + const value = useMemo(() => content, [content]) + + return ( + {}}> + renderElement({ ...props, mode })} + renderLeaf={renderLeaf} + /> + + ) +} + +export default ReadOnlySlate; \ No newline at end of file diff --git a/src/components/editor/customTypes.ts b/src/components/editor/customTypes.ts new file mode 100644 index 0000000..46142fb --- /dev/null +++ b/src/components/editor/customTypes.ts @@ -0,0 +1,47 @@ +// src/customTypes.ts +import { BaseEditor } from 'slate'; +import { ReactEditor } from 'slate-react'; + +export type CustomText = { + text: string + bold?: boolean + italic?: boolean + underline?: boolean + code?: boolean +} + +export type HeadingElement = { + type: 'heading' + children: CustomText[] +} + +export type BlockQuoteElement = { + type: 'block-quote' + children: CustomText[] +} + +export type ParagraphElement = { + type: 'paragraph' + children: CustomText[] +} + +export type CodeBlockElement = { + type: 'code-block' + children: CustomText[] +} + +export type CustomElement = + | HeadingElement + | BlockQuoteElement + | ParagraphElement + | CodeBlockElement + +export type FormatMark = 'bold' | 'italic' | 'underline' | 'code' + +declare module 'slate' { + interface CustomTypes { + Editor: BaseEditor & ReactEditor; + Element: CustomElement; + Text: CustomText; + } +} diff --git a/src/components/layout/Navbar/Navbar-styles.tsx b/src/components/layout/Navbar/Navbar-styles.tsx new file mode 100644 index 0000000..f8a45b8 --- /dev/null +++ b/src/components/layout/Navbar/Navbar-styles.tsx @@ -0,0 +1,211 @@ +import { AppBar, Button, Typography, Box, Popover } from "@mui/material"; +import { styled } from "@mui/system"; +import { LightModeSVG } from "../../../assets/svgs/LightModeSVG"; +import { DarkModeSVG } from "../../../assets/svgs/DarkModeSVG"; +import { StorefrontSVG } from "../../../assets/svgs/StorefrontSVG"; +import { CartSVG } from "../../../assets/svgs/CartSVG"; + +export const CustomAppBar = styled(AppBar)(({ theme }) => ({ + display: "flex", + flexDirection: "row", + justifyContent: "space-between", + alignItems: "center", + width: "100%", + padding: "5px 16px", + backgroundImage: "none", + borderBottom: `1px solid ${theme.palette.primary.light}`, + backgroundColor: theme.palette.background.default, + [theme.breakpoints.only("xs")]: { + gap: "15px" + } +})); + +export const QShopLogoContainer = styled("img")({ + width: "12%", + minWidth: "50px", + height: "auto", + padding: "2px 0", + userSelect: "none", + objectFit: "contain", + cursor: "pointer" +}); + +export const CustomTitle = styled(Typography)({ + fontWeight: 600, + color: "#000000" +}); + +export const StoreManagerIcon = styled(StorefrontSVG)(({ theme }) => ({ + cursor: "pointer", + "&:hover": { + filter: + theme.palette.mode === "dark" + ? "drop-shadow(0px 4px 6px rgba(255, 255, 255, 0.6))" + : "drop-shadow(0px 4px 6px rgba(99, 88, 88, 0.1))" + } +})); + +export const CartIcon = styled(CartSVG)(({ theme }) => ({ + cursor: "pointer", + "&:hover": { + filter: + theme.palette.mode === "dark" + ? "drop-shadow(0px 4px 6px rgba(255, 255, 255, 0.6))" + : "drop-shadow(0px 4px 6px rgba(99, 88, 88, 0.1))" + } +})); + +export const CreateBlogButton = styled(Button)(({ theme }) => ({ + display: "flex", + flexDirection: "row", + alignItems: "center", + padding: "8px 15px", + borderRadius: "40px", + gap: "4px", + backgroundColor: theme.palette.secondary.main, + color: "#fff", + fontFamily: "Raleway", + transition: "all 0.3s ease-in-out", + boxShadow: "none", + "&:hover": { + cursor: "pointer", + boxShadow: "rgba(0, 0, 0, 0.15) 1.95px 1.95px 2.6px;", + backgroundColor: theme.palette.secondary.main, + filter: "brightness(1.1)" + } +})); + +export const AuthenticateButton = styled(Button)(({ theme }) => ({ + display: "flex", + flexDirection: "row", + alignItems: "center", + padding: "8px 15px", + borderRadius: "40px", + gap: "4px", + backgroundColor: theme.palette.secondary.main, + color: "#fff", + fontFamily: "Raleway", + transition: "all 0.3s ease-in-out", + boxShadow: "none", + "&:hover": { + cursor: "pointer", + boxShadow: "rgba(0, 0, 0, 0.15) 1.95px 1.95px 2.6px;", + backgroundColor: theme.palette.secondary.dark, + filter: "brightness(1.1)" + } +})); + +export const AvatarContainer = styled(Box)({ + display: "flex", + alignItems: "center", + "&:hover": { + cursor: "pointer", + "& #expand-icon": { + transition: "all 0.3s ease-in-out", + filter: "brightness(0.7)" + } + } +}); + +export const DropdownContainer = styled(Box)(({ theme }) => ({ + display: "flex", + alignItems: "center", + gap: "5px", + backgroundColor: theme.palette.background.paper, + padding: "10px 15px", + transition: "all 0.4s ease-in-out", + "&:hover": { + cursor: "pointer", + filter: + theme.palette.mode === "light" ? "brightness(0.95)" : "brightness(1.7)" + } +})); + +export const DropdownText = styled(Typography)(({ theme }) => ({ + fontFamily: "Raleway", + fontSize: "16px", + color: theme.palette.text.primary, + userSelect: "none" +})); + +export const NavbarName = styled(Typography)(({ theme }) => ({ + fontFamily: "Raleway", + fontSize: "18px", + color: theme.palette.text.primary, + margin: "0 10px" +})); + +export const ThemeSelectRow = styled(Box)({ + display: "flex", + alignItems: "center", + gap: "5px", + flexBasis: 0 +}); + +export const LightModeIcon = styled(LightModeSVG)(({ theme }) => ({ + transition: "all 0.1s ease-in-out", + "&:hover": { + cursor: "pointer", + filter: + theme.palette.mode === "dark" + ? "drop-shadow(0px 4px 6px rgba(255, 255, 255, 0.6))" + : "drop-shadow(0px 4px 6px rgba(99, 88, 88, 0.1))" + } +})); + +export const DarkModeIcon = styled(DarkModeSVG)(({ theme }) => ({ + transition: "all 0.1s ease-in-out", + "&:hover": { + cursor: "pointer", + filter: + theme.palette.mode === "dark" + ? "drop-shadow(0px 4px 6px rgba(255, 255, 255, 0.6))" + : "drop-shadow(0px 4px 6px rgba(99, 88, 88, 0.1))" + } +})); + +export const StoresButton = styled(Button)(({ theme }) => ({ + backgroundColor: theme.palette.secondary.main, + textTransform: "none", + fontFamily: "Raleway", + gap: "5px", + fontSize: "17px", + borderRadius: "5px", + border: "none", + color: theme.palette.text.primary, + padding: "2px 15px", + transition: "all 0.3s ease-in-out", + boxShadow: + "rgba(50, 50, 93, 0.25) 0px 2px 5px -1px, rgba(0, 0, 0, 0.3) 0px 1px 3px -1px;", + "&:hover": { + cursor: "pointer", + backgroundColor: theme.palette.secondary.dark, + boxShadow: + "rgba(50, 50, 93, 0.35) 0px 3px 5px -1px, rgba(0, 0, 0, 0.4) 0px 2px 3px -1px;" + } +})); + +export const CustomPopover = styled(Popover)(({ theme }) => ({ + maxHeight: "400px", + overflowY: "auto", + "&::-webkit-scrollbar-track": { + backgroundColor: "transparent" + }, + "&::-webkit-scrollbar-track:hover": { + backgroundColor: "transparent" + }, + "&::-webkit-scrollbar": { + width: "8px", + height: "10px", + backgroundColor: "transparent" + }, + "&::-webkit-scrollbar-thumb": { + backgroundColor: theme.palette.mode === "light" ? "#d3d9e1" : "#414763", + borderRadius: "8px", + backgroundClip: "content-box", + border: "4px solid transparent" + }, + "&::-webkit-scrollbar-thumb:hover": { + backgroundColor: theme.palette.mode === "light" ? "#b7bcc4" : "#40455f" + } +})); diff --git a/src/components/layout/Navbar/Navbar.tsx b/src/components/layout/Navbar/Navbar.tsx new file mode 100644 index 0000000..88b6282 --- /dev/null +++ b/src/components/layout/Navbar/Navbar.tsx @@ -0,0 +1,288 @@ +import React, { useRef, useState } from "react"; +import { RootState } from "../../../state/store"; +import { useSelector } from "react-redux"; +import { Box, Popover, useTheme } from "@mui/material"; +import ExitToAppIcon from "@mui/icons-material/ExitToApp"; +import { useNavigate } from "react-router-dom"; +import { + resetProducts, + toggleCreateStoreModal +} from "../../../state/features/globalSlice"; +import { useDispatch } from "react-redux"; +import { BlockedNamesModal } from "../../common/BlockedNamesModal/BlockedNamesModal"; +import EmailIcon from "@mui/icons-material/Email"; +import { + AvatarContainer, + CustomAppBar, + DropdownContainer, + DropdownText, + AuthenticateButton, + NavbarName, + LightModeIcon, + DarkModeIcon, + ThemeSelectRow, + QShopLogoContainer, + StoreManagerIcon, + StoresButton +} from "./Navbar-styles"; +import { AccountCircleSVG } from "../../../assets/svgs/AccountCircleSVG"; +import QShopLogo from "../../../assets/img/QShopLogo.webp"; +import QShopLogoLight from "../../../assets/img/QShopLogoLight.webp"; +import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; +import PersonOffIcon from "@mui/icons-material/PersonOff"; + +import { Store } from "../../../state/features/storeSlice"; +import { OrdersSVG } from "../../../assets/svgs/OrdersSVG"; +import { resetOrders } from "../../../state/features/orderSlice"; +interface Props { + isAuthenticated: boolean; + userName: string | null; + userAvatar: string; + authenticate: () => void; + hasAttemptedToFetchShopInitial: boolean; + setTheme: (val: string) => void; +} + +const NavBar: React.FC = ({ + isAuthenticated, + userName, + userAvatar, + authenticate, + hasAttemptedToFetchShopInitial, + setTheme +}) => { + const navigate = useNavigate(); + const dispatch = useDispatch(); + const theme = useTheme(); + + // Get All My Stores from Redux To Display In Store Manager Dropdown + + const myStores = useSelector((state: RootState) => state.store.myStores); + const hashMapStores = useSelector( + (state: RootState) => state.store.hashMapStores + ); + + const [anchorEl, setAnchorEl] = useState(null); + const [isOpenBlockedNamesModal, setIsOpenBlockedNamesModal] = + useState(false); + const [openStoreManagerDropdown, setOpenStoreManagerDropdown] = + useState(false); + const [openUserDropdown, setOpenUserDropdown] = useState(false); + + const searchValRef = useRef(""); + const inputRef = useRef(null); + + const handleClick = (event?: React.MouseEvent) => { + const target = event?.currentTarget as unknown as HTMLButtonElement | null; + setAnchorEl(target); + }; + + const handleCloseUserDropdown = () => { + setAnchorEl(null); + setOpenUserDropdown(false); + }; + + const handleCloseStoreDropdown = () => { + setAnchorEl(null); + setOpenStoreManagerDropdown(false); + }; + + const onCloseBlockedNames = () => { + setIsOpenBlockedNamesModal(false); + }; + + return ( + + + {theme.palette.mode === "dark" ? ( + setTheme("light")} + color="white" + height="22" + width="22" + /> + ) : ( + setTheme("dark")} + color="black" + height="22" + width="22" + /> + )} + { + navigate(`/`); + searchValRef.current = ""; + if (!inputRef.current) return; + inputRef.current.value = ""; + }} + /> + + + {!isAuthenticated && ( + + + Authenticate + + )} + {isAuthenticated && userName && hasAttemptedToFetchShopInitial && ( + { + if (myStores.length > 0) { + handleClick(e); + setOpenStoreManagerDropdown(true); + } else { + dispatch(toggleCreateStoreModal(true)); + } + }} + > + My Stores + + + )} + {isAuthenticated && userName && ( + <> + { + handleClick(e); + setOpenUserDropdown(true); + }} + > + {userName} + {!userAvatar ? ( + + ) : ( + User Avatar + )} + + + + )} + + + { + dispatch(toggleCreateStoreModal(true)); + handleCloseStoreDropdown(); + }} + > + Create Store + + + {myStores.length > 0 && + myStores.map((store: Store) => ( + + { + dispatch(resetOrders()); + dispatch(resetProducts()); + navigate(`/${userName}/${store.id}`); + handleCloseStoreDropdown(); + }} + > + {hashMapStores[store.id]?.title} + + + ))} + + + { + handleCloseUserDropdown(); + handleCloseStoreDropdown(); + navigate("/my-orders"); + }} + > + + My Orders + + { + setIsOpenBlockedNamesModal(true); + handleCloseUserDropdown(); + handleCloseStoreDropdown(); + }} + > + + Blocked Names + + + + + + Q-Mail + + + + {isOpenBlockedNamesModal && ( + + )} + + + ); +}; + +export default NavBar; diff --git a/src/components/modals/ConsentModal.tsx b/src/components/modals/ConsentModal.tsx new file mode 100644 index 0000000..b65be72 --- /dev/null +++ b/src/components/modals/ConsentModal.tsx @@ -0,0 +1,70 @@ +import * as React from "react"; +import Button from "@mui/material/Button"; +import Dialog from "@mui/material/Dialog"; +import DialogActions from "@mui/material/DialogActions"; +import DialogContent from "@mui/material/DialogContent"; +import DialogContentText from "@mui/material/DialogContentText"; +import DialogTitle from "@mui/material/DialogTitle"; +import localForage from "localforage"; +import { useTheme } from "@mui/material"; +const generalLocal = localForage.createInstance({ + name: "q-blog-general" +}); + +export default function ConsentModal() { + const theme = useTheme(); + + const [open, setOpen] = React.useState(false); + + const handleClose = () => { + setOpen(false); + }; + + const getIsConsented = React.useCallback(async () => { + try { + const hasConsented = await generalLocal.getItem("general-consent"); + if (hasConsented) return; + + setOpen(true); + generalLocal.setItem("general-consent", true); + } catch (error) {} + }, []); + + React.useEffect(() => { + getIsConsented(); + }, []); + return ( +
+ + Welcome + + + The Qortal community, along with its development team and the + creators of this application, cannot be held accountable for any + content published or displayed. Furthermore, they bear no + responsibility for any data loss that may occur as a result of using + this application. + + + + + + +
+ ); +} diff --git a/src/components/modals/CreateStoreModal-styles.tsx b/src/components/modals/CreateStoreModal-styles.tsx new file mode 100644 index 0000000..890728e --- /dev/null +++ b/src/components/modals/CreateStoreModal-styles.tsx @@ -0,0 +1,197 @@ +import { styled } from "@mui/system"; +import { Box, Button, TextField, Theme, Typography } from "@mui/material"; +import AddPhotoAlternateIcon from "@mui/icons-material/AddPhotoAlternate"; +import { TimesSVG } from "../../assets/svgs/TimesSVG"; +import { NumericTextFieldQshop } from "../common/NumericTextFieldQshop"; +import { DownloadSVG } from "../../assets/svgs/DownloadSVG"; + +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%", + 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", + }, +})); + +export const ModalTitle = styled(Typography)(({ theme }) => ({ + fontWeight: 400, + fontFamily: "Raleway", + fontSize: "25px", + userSelect: "none", +})); + +export const StoreLogoPreview = styled("img")(({ theme }) => ({ + width: "100px", + height: "100px", + objectFit: "contain", + userSelect: "none", + borderRadius: "3px", + marginBottom: "10px", +})); + +export const AddLogoButton = styled(Button)(({ theme }) => ({ + backgroundColor: theme.palette.secondary.main, + color: "#fff", + fontFamily: "Raleway", + fontSize: "17px", + padding: "5px 10px", + borderRadius: "5px", + gap: "5px", + border: "none", + transition: "all 0.3s ease-in-out", + 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", + marginBottom: "5px", + "&:hover": { + cursor: "pointer", + boxShadow: + theme.palette.mode === "dark" + ? "0px 8px 10px 1px hsla(0,0%,0%,0.14), 0px 3px 14px 2px hsla(0,0%,0%,0.12), 0px 5px 5px -3px hsla(0,0%,0%,0.2)" + : "rgba(0, 0, 0, 0.1) 0px 4px 6px -1px, rgba(0, 0, 0, 0.06) 0px 2px 4px -1px;", + backgroundColor: theme.palette.secondary.dark, + }, +})); + +export const LogoPreviewRow = styled(Box)(({ theme }) => ({ + display: "flex", + alignItems: "center", + gap: "10px", +})); + +export const AddLogoIcon = styled(AddPhotoAlternateIcon)(({ theme }) => ({ + color: "#fff", + height: "25px", + width: "auto", +})); + +export const TimesIcon = styled(TimesSVG)(({ theme }) => ({ + backgroundColor: theme.palette.background.paper, + borderRadius: "50%", + padding: "5px", + transition: "all 0.2s ease-in-out", + "&:hover": { + cursor: "pointer", + scale: "1.1", + }, +})); + +const customInputStyle = (theme: Theme) => { + return { + fontFamily: "Karla", + fontSize: "18px", + fontWeight: 300, + color: theme.palette.text.primary, + backgroundColor: theme.palette.background.default, + borderColor: theme.palette.background.paper, + "& label": { + color: theme.palette.mode === "light" ? "#808183" : "#edeef0", + fontFamily: "Karla", + fontSize: "18px", + letterSpacing: "0px", + }, + "& label.Mui-focused": { + color: theme.palette.mode === "light" ? "#A0AAB4" : "#d7d8da", + }, + "& .MuiInput-underline:after": { + borderBottomColor: theme.palette.mode === "light" ? "#B2BAC2" : "#c9cccf", + }, + "& .MuiOutlinedInput-root": { + "& fieldset": { + borderColor: "#E0E3E7", + }, + "&:hover fieldset": { + borderColor: "#B2BAC2", + }, + "&.Mui-focused fieldset": { + borderColor: "#6F7E8C", + }, + }, + "& .MuiInputBase-root": { + fontFamily: "Karla", + fontSize: "18px", + letterSpacing: "0px", + }, + "& .MuiFilledInput-root:after": { + borderBottomColor: theme.palette.secondary.main, + }, + }; +}; + +export const CustomInputField = styled(TextField)(({ theme }) => + customInputStyle(theme as Theme) +); + +export const CustomNumberField = styled(NumericTextFieldQshop)(({ theme }) => + customInputStyle(theme as Theme) +); + +export const ButtonRow = styled(Box)(({ theme }) => ({ + display: "flex", + gap: "10px", + justifyContent: "flex-end", +})); + +export const CancelButton = styled(Button)(({ theme }) => ({ + fontFamily: "Raleway", + fontSize: "15px", +})); + +export const CreateButton = styled(Button)(({ theme }) => ({ + fontFamily: "Raleway", + fontSize: "15px", + backgroundColor: "#32d43a", + color: "black", + "&:hover": { + cursor: "pointer", + backgroundColor: "#2bb131", + }, +})); + +export const WalletRow = styled(Box)(({ theme }) => ({ + display: "flex", + alignItems: "center", + gap: "10px", +})); + +export const DownloadArrrWalletIcon = styled(DownloadSVG)(({ theme }) => ({ + padding: "5px 7px", + borderRadius: "50%", + backgroundColor: theme.palette.background.paper, + "&:hover": { + cursor: "pointer", + }, +})); diff --git a/src/components/modals/CreateStoreModal.tsx b/src/components/modals/CreateStoreModal.tsx new file mode 100644 index 0000000..9635199 --- /dev/null +++ b/src/components/modals/CreateStoreModal.tsx @@ -0,0 +1,419 @@ +import { FC, ChangeEvent, useState, useEffect } from "react"; +import { + Typography, + Modal, + FormControl, + useTheme, + IconButton, + Zoom, + Tooltip, +} from "@mui/material"; +import { useDispatch } from "react-redux"; +import { setIsLoadingGlobal, toggleCreateStoreModal } from "../../state/features/globalSlice"; +import ImageUploader from "../common/ImageUploader"; +import { + ModalTitle, + StoreLogoPreview, + AddLogoButton, + AddLogoIcon, + TimesIcon, + LogoPreviewRow, + CustomInputField, + ModalBody, + ButtonRow, + CancelButton, + CreateButton, + WalletRow, + DownloadArrrWalletIcon, +} from "./CreateStoreModal-styles"; +import { + FilterSelect, + FilterSelectMenuItems, + FiltersCheckbox, + FiltersChip, + FiltersOption, +} from "../../pages/Store/Store/Store-styles"; +import { supportedCoinsArray } from "../../constants/supported-coins"; +import { QortalSVG } from "../../assets/svgs/QortalSVG"; +import { ARRRSVG } from "../../assets/svgs/ARRRSVG"; +import { setNotification } from "../../state/features/notificationsSlice"; +export interface ForeignCoins { + [key: string]: string; +} + +export interface onPublishParam { + title: string; + description: string; + shipsTo: string; + location: string; + storeIdentifier: string; + logo: string; + foreignCoins: ForeignCoins; + supportedCoins: string[]; +} + +interface CreateStoreModalProps { + open: boolean; + closeCreateStoreModal: boolean; + setCloseCreateStoreModal: (val: boolean) => void; + onPublish: (param: onPublishParam) => Promise; + username: string; +} + + +const CreateStoreModal: React.FC = ({ + open, + closeCreateStoreModal, + setCloseCreateStoreModal, + onPublish, + username, +}) => { + const dispatch = useDispatch(); + const theme = useTheme(); + + const [title, setTitle] = useState(""); + const [description, setDescription] = useState(""); + const [location, setLocation] = useState(""); + const [shipsTo, setShipsTo] = useState(""); + const [errorMessage, setErrorMessage] = useState(""); + const [storeIdentifier, setStoreIdentifier] = useState(""); + const [logo, setLogo] = useState(null); + const [supportedCoinsSelected, setSupportedCoinsSelected] = useState< + string[] + >(["QORT"]); + const [qortWalletAddress, setQortWalletAddress] = useState(""); + const [arrrWalletAddress, setArrrWalletAddress] = useState(""); + + const handlePublish = async (): Promise => { + try { + setErrorMessage(""); + if (!logo) { + setErrorMessage("A logo is required"); + return; + } + const foreignCoins: ForeignCoins = { + ARRR: arrrWalletAddress + } + supportedCoinsSelected.filter((coin)=> coin !== 'QORT').forEach((item: string)=> { + if(!foreignCoins[item]) throw new Error(`Please add a ${item} address`) + }) + await onPublish({ + title, + description, + shipsTo, + location, + storeIdentifier, + logo, + foreignCoins: { + ARRR: arrrWalletAddress + }, + supportedCoins: supportedCoinsSelected + }); + } catch (error: any) { + setErrorMessage(error.message); + } + }; + + const handleClose = (): void => { + setTitle(""); + setDescription(""); + setErrorMessage(""); + setArrrWalletAddress("") + setSupportedCoinsSelected(["QORT"]) + dispatch(toggleCreateStoreModal(false)); + }; + + const handleInputChangeId = (event: ChangeEvent) => { + // Replace any non-alphanumeric and non-space characters with an empty string + // Replace multiple spaces with a single dash and remove any dashes that come one after another + let newValue = event.target.value + .replace(/[^a-zA-Z0-9\s-]/g, "") + .replace(/\s+/g, "-") + .replace(/-+/g, "-") + .trim(); + + if (newValue.toLowerCase().includes("post")) { + // Replace the 'post' string with an empty string + newValue = newValue.replace(/post/gi, ""); + } + if (newValue.toLowerCase().includes("q-shop")) { + // Replace the 'q-shop' string with an empty string + newValue = newValue.replace(/q-shop/gi, ""); + } + setStoreIdentifier(newValue); + }; + + // Close modal when closeCreateStoreModal is true and reset closeCreateStoreModal to false. This is done once the data container is created inside the GlobalWrapper createStore function. + useEffect(() => { + if (closeCreateStoreModal) { + handleClose(); + setCloseCreateStoreModal(false); + } + }, [closeCreateStoreModal]); + + const handleChipSelect = (value: string[]) => { + setSupportedCoinsSelected(value); + }; + + const handleChipRemove = (chip: string) => { + if (chip === "QORT") return; + setSupportedCoinsSelected(prevChips => prevChips.filter(c => c !== chip)); + }; + + const importAddress = async (coin: string)=> { + try { + dispatch(setIsLoadingGlobal(true)); + + const res = await qortalRequest({ + action: 'GET_USER_WALLET', + coin + }) + + if(res?.address){ + setArrrWalletAddress(res.address) + } + } catch (error) { + dispatch( + setNotification({ + alertType: "error", + msg: "Unable to import ARRR address. Please insert it manually", + }) + ); + } finally { + dispatch(setIsLoadingGlobal(false)); + } + } + + return ( + + + Create Shop + {!logo ? ( + setLogo(img)}> + + Add Shop Logo + + + + ) : ( + + + setLogo(null)} + height={"32"} + width={"32"} + > + + )} + + setTitle(e.target.value)} + fullWidth + disabled={true} + variant="filled" + /> + + + + setTitle(e.target.value)} + fullWidth + required + variant="filled" + inputProps={{ maxLength: 50 }} + /> + + setDescription(e.target.value)} + multiline + rows={4} + fullWidth + required + variant="filled" + /> + + setLocation(e.target.value)} + fullWidth + required + variant="filled" + /> + + setShipsTo(e.target.value)} + fullWidth + required + variant="filled" + /> + + {/* QORT Wallet Input Field */} + {/* + { + setQortWalletAddress(e.target.value); + }} + fullWidth + required + variant="filled" + /> + + + + + + */} + + {/* ARRR Wallet Input Field */} + + { + setArrrWalletAddress(e.target.value); + }} + fullWidth + required + variant="filled" + /> + + importAddress('ARRR')}> + + + + + {/* Coin selection available for your shop */} + { + if (e.target.textContent === "QORT") return; + handleChipSelect(value as string[]); + }} + renderTags={(values: any) => + values.map((value: string) => { + return ( + handleChipRemove(value) : undefined + } + clickable={value === "QORT" ? false : true} + /> + ); + }) + } + renderOption={(props, option: any) => { + const isDisabled = option === "QORT"; + return ( + + coin === option)} + /> + {option === "QORT" ? ( + + ) : option === "ARRR" ? ( + + ) : null} + {option} + + ); + }} + renderInput={params => ( + + )} + /> + + + {errorMessage && ( + + {errorMessage} + + )} + + + Cancel + + + Create Shop + + + + + ); +}; + +export default CreateStoreModal; diff --git a/src/components/modals/EditStoreModal.tsx b/src/components/modals/EditStoreModal.tsx new file mode 100644 index 0000000..f475d1e --- /dev/null +++ b/src/components/modals/EditStoreModal.tsx @@ -0,0 +1,383 @@ +import { useState, useEffect } from "react"; +import { + Typography, + Modal, + FormControl, + useTheme, + IconButton, + Tooltip, + Zoom, +} from "@mui/material"; +import { useDispatch, useSelector } from "react-redux"; +import { toggleCreateStoreModal } from "../../state/features/globalSlice"; +import { RootState } from "../../state/store"; +import { + AddLogoButton, + AddLogoIcon, + WalletRow, + ButtonRow, + CancelButton, + CreateButton, + CustomInputField, + DownloadArrrWalletIcon, + LogoPreviewRow, + ModalBody, + ModalTitle, + StoreLogoPreview, + TimesIcon, +} from "./CreateStoreModal-styles"; +import ImageUploader from "../common/ImageUploader"; +import { + FilterSelect, + FilterSelectMenuItems, + FiltersCheckbox, + FiltersChip, + FiltersOption, +} from "../../pages/Store/Store/Store-styles"; +import { supportedCoinsArray } from "../../constants/supported-coins"; +import { QortalSVG } from "../../assets/svgs/QortalSVG"; +import { ARRRSVG } from "../../assets/svgs/ARRRSVG"; + +interface ForeignCoins { + [key: string]: string; +} +export interface onPublishParamEdit { + title: string; + description: string; + shipsTo: string; + location: string; + logo: string; + foreignCoins: ForeignCoins; + supportedCoins: string[]; +} +interface MyModalProps { + open: boolean; + onClose: () => void; + onPublish: (param: onPublishParamEdit) => Promise; + username: string; +} + +const MyModal: React.FC = ({ open, onClose, onPublish }) => { + const dispatch = useDispatch(); + const currentStore = useSelector( + (state: RootState) => state.global.currentStore + ); + + const storeId = useSelector((state: RootState) => state.store.storeId); + + const [title, setTitle] = useState(""); + const [description, setDescription] = useState(""); + const [location, setLocation] = useState(""); + const [shipsTo, setShipsTo] = useState(""); + const [errorMessage, setErrorMessage] = useState(""); + const [logo, setLogo] = useState(null); + const [supportedCoinsSelected, setSupportedCoinsSelected] = useState< + string[] + >(["QORT"]); + const [qortWalletAddress, setQortWalletAddress] = useState(""); + const [arrrWalletAddress, setArrrWalletAddress] = useState(""); + + const theme = useTheme(); + + const handlePublish = async (): Promise => { + try { + setErrorMessage(""); + if (!logo) { + setErrorMessage("A logo is required"); + return; + } + + const foreignCoins: ForeignCoins = { + ARRR: arrrWalletAddress + } + supportedCoinsSelected.filter((coin)=> coin !== 'QORT').forEach((item: string)=> { + if(!foreignCoins[item]) throw new Error(`Please add a ${item} address`) + }) + await onPublish({ + title, + description, + shipsTo, + location, + logo, + foreignCoins: { + ARRR: arrrWalletAddress + }, + supportedCoins: supportedCoinsSelected + }); + handleClose(); + } catch (error: any) { + setErrorMessage(error.message); + } + }; + + useEffect(() => { + if (open && currentStore && storeId === currentStore.id) { + setTitle(currentStore?.title || ""); + setDescription(currentStore?.description || ""); + setLogo(currentStore?.logo || null); + setLocation(currentStore?.location || ""); + setShipsTo(currentStore?.shipsTo || ""); + setSupportedCoinsSelected(currentStore?.supportedCoins || ['QORT']) + setArrrWalletAddress(currentStore?.foreignCoins?.ARRR || "") + } + }, [currentStore, storeId, open]); + + const handleClose = (): void => { + setTitle(""); + setDescription(""); + setErrorMessage(""); + setDescription(""); + setLogo(null); + setLocation(""); + setShipsTo(""); + setArrrWalletAddress("") + setSupportedCoinsSelected(["QORT"]) + dispatch(toggleCreateStoreModal(false)); + onClose(); + }; + + const handleChipSelect = (value: string[]) => { + setSupportedCoinsSelected(value); + }; + + const handleChipRemove = (chip: string) => { + if (chip === "QORT") return; + setSupportedCoinsSelected(prevChips => prevChips.filter(c => c !== chip)); + }; + + const importAddress = async (coin: string)=> { + try { + const res = await qortalRequest({ + action: 'GET_USER_WALLET', + coin + }) + if(res?.address){ + setArrrWalletAddress(res.address) + } + } catch (error) { + + } + } + + return ( + + + + Edit Shop + + {!logo ? ( + setLogo(img)}> + + Add Shop Logo + + + + ) : ( + + + setLogo(null)} + height={"32"} + width={"32"} + > + + )} + setTitle(e.target.value)} + inputProps={{ maxLength: 50 }} + fullWidth + required + variant="filled" + /> + setDescription(e.target.value)} + multiline + rows={4} + fullWidth + required + variant="filled" + /> + setLocation(e.target.value)} + fullWidth + required + variant="filled" + /> + setShipsTo(e.target.value)} + fullWidth + required + variant="filled" + /> + + {/* QORT Wallet Input Field */} + {/* + { + setQortWalletAddress(e.target.value); + }} + fullWidth + required + variant="filled" + /> + { + try { + const res = await qortalRequest({ + action: 'GET_USER_WALLET', + coin + }) + if(res?.address){ + setArrrWalletAddress(res.address) + } + console.log({res}) + } catch (error) { + + } + } + title="Import your QORT Wallet Address from your current account" + > + + + + + */} + + {/* ARRR Wallet Input Field */} + + { + setArrrWalletAddress(e.target.value); + }} + fullWidth + required + variant="filled" + /> + + importAddress('ARRR')}> + + + + + { + if (e.target.textContent === "QORT") return; + handleChipSelect(value as string[]); + }} + renderTags={(values: any) => + values.map((value: string) => { + return ( + handleChipRemove(value) : undefined + } + clickable={value === "QORT" ? false : true} + /> + ); + }) + } + renderOption={(props, option: any) => { + const isDisabled = option === "QORT"; + return ( + + coin === option)} + /> + {option === "QORT" ? ( + + ) : option === "ARRR" ? ( + + ) : null} + {option} + + ); + }} + renderInput={params => ( + + )} + /> + + {errorMessage && ( + + {errorMessage} + + )} + + + Cancel + + + Edit Shop + + + + + ); +}; + +export default MyModal; diff --git a/src/components/modals/ReusableModal-styles.tsx b/src/components/modals/ReusableModal-styles.tsx new file mode 100644 index 0000000..e1feabf --- /dev/null +++ b/src/components/modals/ReusableModal-styles.tsx @@ -0,0 +1,39 @@ +import { styled } from "@mui/system"; +import { Box } from "@mui/material"; + +export const ReusableModalBody = styled(Box)(({ theme }) => ({ + position: "absolute", + top: "50%", + left: "50%", + transform: "translate(-50%, -50%)", + width: "75%", + backgroundColor: theme.palette.background.paper, + padding: "15px 35px", + display: "flex", + flexDirection: "column", + gap: "17px", + 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/components/modals/ReusableModal.tsx b/src/components/modals/ReusableModal.tsx new file mode 100644 index 0000000..89f2f2a --- /dev/null +++ b/src/components/modals/ReusableModal.tsx @@ -0,0 +1,40 @@ +import React from "react"; +import { Box, Modal, useTheme } from "@mui/material"; +import { ReusableModalBody } from "./ReusableModal-styles"; + +interface MyModalProps { + open: boolean; + onClose?: () => void; + // onSubmit?: (obj: any) => Promise; + children: any; + customStyles?: any; + id?: string; +} + +export const ReusableModal: React.FC = ({ + id, + open, + onClose, + // onSubmit, + children, + customStyles = {} +}) => { + const theme = useTheme(); + return ( + + + {children} + + + ); +}; diff --git a/src/constants/countries.json b/src/constants/countries.json new file mode 100644 index 0000000..710e644 --- /dev/null +++ b/src/constants/countries.json @@ -0,0 +1,245 @@ +[ + { "text": "Afghanistan", "value": "AF" }, + { "text": "Åland Islands", "value": "AX" }, + { "text": "Albania", "value": "AL" }, + { "text": "Algeria", "value": "DZ" }, + { "text": "American Samoa", "value": "AS" }, + { "text": "Andorra", "value": "AD" }, + { "text": "Angola", "value": "AO" }, + { "text": "Anguilla", "value": "AI" }, + { "text": "Antarctica", "value": "AQ" }, + { "text": "Antigua and Barbuda", "value": "AG" }, + { "text": "Argentina", "value": "AR" }, + { "text": "Armenia", "value": "AM" }, + { "text": "Aruba", "value": "AW" }, + { "text": "Australia", "value": "AU" }, + { "text": "Austria", "value": "AT" }, + { "text": "Azerbaijan", "value": "AZ" }, + { "text": "Bahamas", "value": "BS" }, + { "text": "Bahrain", "value": "BH" }, + { "text": "Bangladesh", "value": "BD" }, + { "text": "Barbados", "value": "BB" }, + { "text": "Belarus", "value": "BY" }, + { "text": "Belgium", "value": "BE" }, + { "text": "Belize", "value": "BZ" }, + { "text": "Benin", "value": "BJ" }, + { "text": "Bermuda", "value": "BM" }, + { "text": "Bhutan", "value": "BT" }, + { "text": "Bolivia", "value": "BO" }, + { "text": "Bosnia and Herzegovina", "value": "BA" }, + { "text": "Botswana", "value": "BW" }, + { "text": "Bouvet Island", "value": "BV" }, + { "text": "Brazil", "value": "BR" }, + { "text": "British Indian Ocean Territory", "value": "IO" }, + { "text": "Brunei Darussalam", "value": "BN" }, + { "text": "Bulgaria", "value": "BG" }, + { "text": "Burkina Faso", "value": "BF" }, + { "text": "Burundi", "value": "BI" }, + { "text": "Cambodia", "value": "KH" }, + { "text": "Cameroon", "value": "CM" }, + { "text": "Canada", "value": "CA" }, + { "text": "Cape Verde", "value": "CV" }, + { "text": "Cayman Islands", "value": "KY" }, + { "text": "Central African Republic", "value": "CF" }, + { "text": "Chad", "value": "TD" }, + { "text": "Chile", "value": "CL" }, + { "text": "China", "value": "CN" }, + { "text": "Christmas Island", "value": "CX" }, + { "text": "Cocos (Keeling) Islands", "value": "CC" }, + { "text": "Colombia", "value": "CO" }, + { "text": "Comoros", "value": "KM" }, + { "text": "Congo", "value": "CG" }, + { "text": "Congo, The Democratic Republic of the", "value": "CD" }, + { "text": "Cook Islands", "value": "CK" }, + { "text": "Costa Rica", "value": "CR" }, + { "text": "Cote D'Ivoire", "value": "CI" }, + { "text": "Croatia", "value": "HR" }, + { "text": "Cuba", "value": "CU" }, + { "text": "Cyprus", "value": "CY" }, + { "text": "Czech Republic", "value": "CZ" }, + { "text": "Denmark", "value": "DK" }, + { "text": "Djibouti", "value": "DJ" }, + { "text": "Dominica", "value": "DM" }, + { "text": "Dominican Republic", "value": "DO" }, + { "text": "Ecuador", "value": "EC" }, + { "text": "Egypt", "value": "EG" }, + { "text": "El Salvador", "value": "SV" }, + { "text": "Equatorial Guinea", "value": "GQ" }, + { "text": "Eritrea", "value": "ER" }, + { "text": "Estonia", "value": "EE" }, + { "text": "Ethiopia", "value": "ET" }, + { "text": "Falkland Islands (Malvinas)", "value": "FK" }, + { "text": "Faroe Islands", "value": "FO" }, + { "text": "Fiji", "value": "FJ" }, + { "text": "Finland", "value": "FI" }, + { "text": "France", "value": "FR" }, + { "text": "French Guiana", "value": "GF" }, + { "text": "French Polynesia", "value": "PF" }, + { "text": "French Southern Territories", "value": "TF" }, + { "text": "Gabon", "value": "GA" }, + { "text": "Gambia", "value": "GM" }, + { "text": "Georgia", "value": "GE" }, + { "text": "Germany", "value": "DE" }, + { "text": "Ghana", "value": "GH" }, + { "text": "Gibraltar", "value": "GI" }, + { "text": "Greece", "value": "GR" }, + { "text": "Greenland", "value": "GL" }, + { "text": "Grenada", "value": "GD" }, + { "text": "Guadeloupe", "value": "GP" }, + { "text": "Guam", "value": "GU" }, + { "text": "Guatemala", "value": "GT" }, + { "text": "Guernsey", "value": "GG" }, + { "text": "Guinea", "value": "GN" }, + { "text": "Guinea-Bissau", "value": "GW" }, + { "text": "Guyana", "value": "GY" }, + { "text": "Haiti", "value": "HT" }, + { "text": "Heard Island and Mcdonald Islands", "value": "HM" }, + { "text": "Holy See (Vatican City State)", "value": "VA" }, + { "text": "Honduras", "value": "HN" }, + { "text": "Hong Kong", "value": "HK" }, + { "text": "Hungary", "value": "HU" }, + { "text": "Iceland", "value": "IS" }, + { "text": "India", "value": "IN" }, + { "text": "Indonesia", "value": "ID" }, + { "text": "Iran, Islamic Republic Of", "value": "IR" }, + { "text": "Iraq", "value": "IQ" }, + { "text": "Ireland", "value": "IE" }, + { "text": "Isle of Man", "value": "IM" }, + { "text": "Israel", "value": "IL" }, + { "text": "Italy", "value": "IT" }, + { "text": "Jamaica", "value": "JM" }, + { "text": "Japan", "value": "JP" }, + { "text": "Jersey", "value": "JE" }, + { "text": "Jordan", "value": "JO" }, + { "text": "Kazakhstan", "value": "KZ" }, + { "text": "Kenya", "value": "KE" }, + { "text": "Kiribati", "value": "KI" }, + { "text": "Korea, Democratic People'S Republic of", "value": "KP" }, + { "text": "Korea, Republic of", "value": "KR" }, + { "text": "Kuwait", "value": "KW" }, + { "text": "Kyrgyzstan", "value": "KG" }, + { "text": "Lao People'S Democratic Republic", "value": "LA" }, + { "text": "Latvia", "value": "LV" }, + { "text": "Lebanon", "value": "LB" }, + { "text": "Lesotho", "value": "LS" }, + { "text": "Liberia", "value": "LR" }, + { "text": "Libyan Arab Jamahiriya", "value": "LY" }, + { "text": "Liechtenstein", "value": "LI" }, + { "text": "Lithuania", "value": "LT" }, + { "text": "Luxembourg", "value": "LU" }, + { "text": "Macao", "value": "MO" }, + { "text": "Macedonia, The Former Yugoslav Republic of", "value": "MK" }, + { "text": "Madagascar", "value": "MG" }, + { "text": "Malawi", "value": "MW" }, + { "text": "Malaysia", "value": "MY" }, + { "text": "Maldives", "value": "MV" }, + { "text": "Mali", "value": "ML" }, + { "text": "Malta", "value": "MT" }, + { "text": "Marshall Islands", "value": "MH" }, + { "text": "Martinique", "value": "MQ" }, + { "text": "Mauritania", "value": "MR" }, + { "text": "Mauritius", "value": "MU" }, + { "text": "Mayotte", "value": "YT" }, + { "text": "Mexico", "value": "MX" }, + { "text": "Micronesia, Federated States of", "value": "FM" }, + { "text": "Moldova, Republic of", "value": "MD" }, + { "text": "Monaco", "value": "MC" }, + { "text": "Mongolia", "value": "MN" }, + { "text": "Montserrat", "value": "MS" }, + { "text": "Morocco", "value": "MA" }, + { "text": "Mozambique", "value": "MZ" }, + { "text": "Myanmar", "value": "MM" }, + { "text": "Namibia", "value": "NA" }, + { "text": "Nauru", "value": "NR" }, + { "text": "Nepal", "value": "NP" }, + { "text": "Netherlands", "value": "NL" }, + { "text": "Netherlands Antilles", "value": "AN" }, + { "text": "New Caledonia", "value": "NC" }, + { "text": "New Zealand", "value": "NZ" }, + { "text": "Nicaragua", "value": "NI" }, + { "text": "Niger", "value": "NE" }, + { "text": "Nigeria", "value": "NG" }, + { "text": "Niue", "value": "NU" }, + { "text": "Norfolk Island", "value": "NF" }, + { "text": "Northern Mariana Islands", "value": "MP" }, + { "text": "Norway", "value": "NO" }, + { "text": "Oman", "value": "OM" }, + { "text": "Pakistan", "value": "PK" }, + { "text": "Palau", "value": "PW" }, + { "text": "Palestinian Territory, Occupied", "value": "PS" }, + { "text": "Panama", "value": "PA" }, + { "text": "Papua New Guinea", "value": "PG" }, + { "text": "Paraguay", "value": "PY" }, + { "text": "Peru", "value": "PE" }, + { "text": "Philippines", "value": "PH" }, + { "text": "Pitcairn", "value": "PN" }, + { "text": "Poland", "value": "PL" }, + { "text": "Portugal", "value": "PT" }, + { "text": "Puerto Rico", "value": "PR" }, + { "text": "Qatar", "value": "QA" }, + { "text": "Reunion", "value": "RE" }, + { "text": "Romania", "value": "RO" }, + { "text": "Russian Federation", "value": "RU" }, + { "text": "RWANDA", "value": "RW" }, + { "text": "Saint Helena", "value": "SH" }, + { "text": "Saint Kitts and Nevis", "value": "KN" }, + { "text": "Saint Lucia", "value": "LC" }, + { "text": "Saint Pierre and Miquelon", "value": "PM" }, + { "text": "Saint Vincent and the Grenadines", "value": "VC" }, + { "text": "Samoa", "value": "WS" }, + { "text": "San Marino", "value": "SM" }, + { "text": "Sao Tome and Principe", "value": "ST" }, + { "text": "Saudi Arabia", "value": "SA" }, + { "text": "Senegal", "value": "SN" }, + { "text": "Serbia and Montenegro", "value": "CS" }, + { "text": "Seychelles", "value": "SC" }, + { "text": "Sierra Leone", "value": "SL" }, + { "text": "Singapore", "value": "SG" }, + { "text": "Slovakia", "value": "SK" }, + { "text": "Slovenia", "value": "SI" }, + { "text": "Solomon Islands", "value": "SB" }, + { "text": "Somalia", "value": "SO" }, + { "text": "South Africa", "value": "ZA" }, + { "text": "South Georgia and the South Sandwich Islands", "value": "GS" }, + { "text": "Spain", "value": "ES" }, + { "text": "Sri Lanka", "value": "LK" }, + { "text": "Sudan", "value": "SD" }, + { "text": "Suriname", "value": "SR" }, + { "text": "Svalbard and Jan Mayen", "value": "SJ" }, + { "text": "Swaziland", "value": "SZ" }, + { "text": "Sweden", "value": "SE" }, + { "text": "Switzerland", "value": "CH" }, + { "text": "Syrian Arab Republic", "value": "SY" }, + { "text": "Taiwan, Province of China", "value": "TW" }, + { "text": "Tajikistan", "value": "TJ" }, + { "text": "Tanzania, United Republic of", "value": "TZ" }, + { "text": "Thailand", "value": "TH" }, + { "text": "Timor-Leste", "value": "TL" }, + { "text": "Togo", "value": "TG" }, + { "text": "Tokelau", "value": "TK" }, + { "text": "Tonga", "value": "TO" }, + { "text": "Trinidad and Tobago", "value": "TT" }, + { "text": "Tunisia", "value": "TN" }, + { "text": "Turkey", "value": "TR" }, + { "text": "Turkmenistan", "value": "TM" }, + { "text": "Turks and Caicos Islands", "value": "TC" }, + { "text": "Tuvalu", "value": "TV" }, + { "text": "Uganda", "value": "UG" }, + { "text": "Ukraine", "value": "UA" }, + { "text": "United Arab Emirates", "value": "AE" }, + { "text": "United Kingdom", "value": "GB" }, + { "text": "United States", "value": "US" }, + { "text": "United States Minor Outlying Islands", "value": "UM" }, + { "text": "Uruguay", "value": "UY" }, + { "text": "Uzbekistan", "value": "UZ" }, + { "text": "Vanuatu", "value": "VU" }, + { "text": "Venezuela", "value": "VE" }, + { "text": "Viet Nam", "value": "VN" }, + { "text": "Virgin Islands, British", "value": "VG" }, + { "text": "Virgin Islands, U.S.", "value": "VI" }, + { "text": "Wallis and Futuna", "value": "WF" }, + { "text": "Western Sahara", "value": "EH" }, + { "text": "Yemen", "value": "YE" }, + { "text": "Zambia", "value": "ZM" }, + { "text": "Zimbabwe", "value": "ZW" } +] \ No newline at end of file diff --git a/src/constants/identifiers.ts b/src/constants/identifiers.ts new file mode 100644 index 0000000..46a7101 --- /dev/null +++ b/src/constants/identifiers.ts @@ -0,0 +1,18 @@ +// TESTING + +export const STORE_BASE = "test-q-store-general"; +export const DATA_CONTAINER_BASE = "test-datacontainer"; +export const CATALOGUE_BASE = "test-q-store-catalogue"; +export const ORDER_BASE = "test-q-store-order"; +export const REVIEW_BASE = "test-q-store-review"; +export const PRODUCT_BASE = "test-q-store-product"; + +// PRODUCTION + +// export const STORE_BASE = "q-store-general"; +// export const DATA_CONTAINER_BASE = "datacontainer"; +// export const CATALOGUE_BASE = "q-store-catalogue"; +// export const ORDER_BASE = "q-store-order"; +// export const REVIEW_BASE = "q-store-review"; +// export const PRODUCT_BASE = "q-store-product"; + diff --git a/src/constants/mail.ts b/src/constants/mail.ts new file mode 100644 index 0000000..bbb6e7b --- /dev/null +++ b/src/constants/mail.ts @@ -0,0 +1,3 @@ +export const MAIL_SERVICE_TYPE: 'MAIL_PRIVATE' = 'MAIL_PRIVATE' +export const MAIL_ATTACHMENT_SERVICE_TYPE: 'ATTACHMENT_PRIVATE' = + 'ATTACHMENT_PRIVATE' diff --git a/src/constants/product-status.ts b/src/constants/product-status.ts new file mode 100644 index 0000000..3680d9d --- /dev/null +++ b/src/constants/product-status.ts @@ -0,0 +1,3 @@ +export const AVAILABLE = 'AVAILABLE' +export const RETIRED = 'RETIRED' +export const OUT_OF_STOCK = 'OUT_OF_STOCK' diff --git a/src/constants/states.json b/src/constants/states.json new file mode 100644 index 0000000..0f7414e --- /dev/null +++ b/src/constants/states.json @@ -0,0 +1,238 @@ +[ + { + "text": "Alabama", + "value": "AL" + }, + { + "text": "Alaska", + "value": "AK" + }, + { + "text": "American Samoa", + "value": "AS" + }, + { + "text": "Arizona", + "value": "AZ" + }, + { + "text": "Arkansas", + "value": "AR" + }, + { + "text": "California", + "value": "CA" + }, + { + "text": "Colorado", + "value": "CO" + }, + { + "text": "Connecticut", + "value": "CT" + }, + { + "text": "Delaware", + "value": "DE" + }, + { + "text": "District Of Columbia", + "value": "DC" + }, + { + "text": "Federated States Of Micronesia", + "value": "FM" + }, + { + "text": "Florida", + "value": "FL" + }, + { + "text": "Georgia", + "value": "GA" + }, + { + "text": "Guam", + "value": "GU" + }, + { + "text": "Hawaii", + "value": "HI" + }, + { + "text": "Idaho", + "value": "ID" + }, + { + "text": "Illinois", + "value": "IL" + }, + { + "text": "Indiana", + "value": "IN" + }, + { + "text": "Iowa", + "value": "IA" + }, + { + "text": "Kansas", + "value": "KS" + }, + { + "text": "Kentucky", + "value": "KY" + }, + { + "text": "Louisiana", + "value": "LA" + }, + { + "text": "Maine", + "value": "ME" + }, + { + "text": "Marshall Islands", + "value": "MH" + }, + { + "text": "Maryland", + "value": "MD" + }, + { + "text": "Massachusetts", + "value": "MA" + }, + { + "text": "Michigan", + "value": "MI" + }, + { + "text": "Minnesota", + "value": "MN" + }, + { + "text": "Mississippi", + "value": "MS" + }, + { + "text": "Missouri", + "value": "MO" + }, + { + "text": "Montana", + "value": "MT" + }, + { + "text": "Nebraska", + "value": "NE" + }, + { + "text": "Nevada", + "value": "NV" + }, + { + "text": "New Hampshire", + "value": "NH" + }, + { + "text": "New Jersey", + "value": "NJ" + }, + { + "text": "New Mexico", + "value": "NM" + }, + { + "text": "New York", + "value": "NY" + }, + { + "text": "North Carolina", + "value": "NC" + }, + { + "text": "North Dakota", + "value": "ND" + }, + { + "text": "Northern Mariana Islands", + "value": "MP" + }, + { + "text": "Ohio", + "value": "OH" + }, + { + "text": "Oklahoma", + "value": "OK" + }, + { + "text": "Oregon", + "value": "OR" + }, + { + "text": "Palau", + "value": "PW" + }, + { + "text": "Pennsylvania", + "value": "PA" + }, + { + "text": "Puerto Rico", + "value": "PR" + }, + { + "text": "Rhode Island", + "value": "RI" + }, + { + "text": "South Carolina", + "value": "SC" + }, + { + "text": "South Dakota", + "value": "SD" + }, + { + "text": "Tennessee", + "value": "TN" + }, + { + "text": "Texas", + "value": "TX" + }, + { + "text": "Utah", + "value": "UT" + }, + { + "text": "Vermont", + "value": "VT" + }, + { + "text": "Virgin Islands", + "value": "VI" + }, + { + "text": "Virginia", + "value": "VA" + }, + { + "text": "Washington", + "value": "WA" + }, + { + "text": "West Virginia", + "value": "WV" + }, + { + "text": "Wisconsin", + "value": "WI" + }, + { + "text": "Wyoming", + "value": "WY" + } +] \ No newline at end of file diff --git a/src/constants/supported-coins.ts b/src/constants/supported-coins.ts new file mode 100644 index 0000000..ce41262 --- /dev/null +++ b/src/constants/supported-coins.ts @@ -0,0 +1,8 @@ + +enum SupportedCoins { + ARRR = 'ARRR', + QORT = 'QORT', +} + +export const supportedCoinsArray: string[] = Object.values(SupportedCoins); + diff --git a/src/constants/timeout.ts b/src/constants/timeout.ts new file mode 100644 index 0000000..cce5728 --- /dev/null +++ b/src/constants/timeout.ts @@ -0,0 +1 @@ +export const TIMEOUT = 5000; // 5 seconds, adjust as needed diff --git a/src/global.d.ts b/src/global.d.ts new file mode 100644 index 0000000..7e712fc --- /dev/null +++ b/src/global.d.ts @@ -0,0 +1,60 @@ +// 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?: number + 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 + prefix?: boolean + exactMatchNames?: boolean, + mode?: string +} + +declare function qortalRequest(options: QortalRequestOptions): Promise +declare function qortalRequestWithTimeout( + options: QortalRequestOptions, + time: number +): Promise + +declare global { + interface Window { + _qdnBase: any // Replace 'any' with the appropriate type if you know it + _qdnTheme: string + } +} + +declare global { + interface Window { + showSaveFilePicker: ( + options?: SaveFilePickerOptions + ) => Promise + } +} diff --git a/src/hooks/useConfirmModal.tsx b/src/hooks/useConfirmModal.tsx new file mode 100644 index 0000000..c2249c2 --- /dev/null +++ b/src/hooks/useConfirmModal.tsx @@ -0,0 +1,36 @@ +import { useState } from "react"; +import ConfirmationModal, { + ModalProps +} from "../components/common/ConfirmationModal/ConfirmationModal"; + +const useConfirmationModal = (props: any) => { + const [isModalOpen, setIsModalOpen] = useState(false); + const [resolvePromise, setResolvePromise] = + useState<(value: boolean) => void>(); + + const showModal = async () => { + setIsModalOpen(true); + return new Promise((resolve) => { + setResolvePromise(() => resolve); + }); + }; + + const handleUserAction = (userConfirmed: boolean) => { + setIsModalOpen(false); + resolvePromise?.(userConfirmed); + }; + + const Modal = () => ( + handleUserAction(true)} + handleCancel={() => handleUserAction(false)} + /> + ); + + return { Modal, showModal }; +}; + +export default useConfirmationModal; diff --git a/src/hooks/useFetchCatalogues.tsx b/src/hooks/useFetchCatalogues.tsx new file mode 100644 index 0000000..c9ec939 --- /dev/null +++ b/src/hooks/useFetchCatalogues.tsx @@ -0,0 +1,54 @@ +import React from 'react' +import { useDispatch, useSelector } from 'react-redux' +import { addToHashMap } from '../state/features/storeSlice' + +import { RootState } from '../state/store' +import { fetchAndEvaluateProducts } from '../utils/fetchPosts' + +interface Resource { + id: string + updated: number +} +export const useFetchProducts = () => { + const dispatch = useDispatch() + const hashMapProducts = useSelector( + (state: RootState) => state.store.hashMapProducts + ) + + const getProduct = async (user: string, productId: string, content: any) => { + const res = await fetchAndEvaluateProducts({ + user, + productId, + content + }) + + dispatch(addToHashMap(res)) + } + + const checkAndUpdateResource = React.useCallback( + (resource: Resource) => { + // Check if the post exists in hashMapPosts + const existingResource = hashMapProducts[resource.id] + if (!existingResource) { + // If the post doesn't exist, add it to hashMapPosts + return true + } else if ( + resource?.updated && + existingResource?.updated && + resource.updated > existingResource.updated + ) { + // If the post exists and its updated is more recent than the existing post's updated, update it in hashMapPosts + return true + } else { + return false + } + }, + [hashMapProducts] + ) + + return { + getProduct, + hashMapProducts, + checkAndUpdateResource + } +} diff --git a/src/hooks/useFetchOrders.tsx b/src/hooks/useFetchOrders.tsx new file mode 100644 index 0000000..6e1083b --- /dev/null +++ b/src/hooks/useFetchOrders.tsx @@ -0,0 +1,267 @@ +import React from "react"; +import { useDispatch, useSelector } from "react-redux"; +import { Product } from "../state/features/storeSlice"; +import { addToHashMap } from "../state/features/orderSlice"; + +import { RootState } from "../state/store"; +import { Order, upsertOrders } from "../state/features/orderSlice"; +import { fetchAndEvaluateOrders } from "../utils/fetchOrders"; +import { + Catalogue, + ProductDataContainer, + setCatalogueHashMap, + setIsLoadingGlobal, + upsertMyOrders, + upsertProducts +} from "../state/features/globalSlice"; +import { fetchAndEvaluateCatalogues } from "../utils/fetchCatalogues"; +import { ORDER_BASE, STORE_BASE } from "../constants/identifiers"; + +interface Resource { + id: string; + updated: number; +} +export const useFetchOrders = () => { + const dispatch = useDispatch(); + const hashMapOrders = useSelector( + (state: RootState) => state.order.hashMapOrders + ); + const orders = useSelector((state: RootState) => state.order.orders); + const store = useSelector( + (state: RootState) => state.global?.currentStore?.id + ); + const myOrders = useSelector((state: RootState) => state.global.myOrders); + + const products: Product[] = useSelector( + (state: RootState) => state.global.products + ); + const listProducts = useSelector( + (state: RootState) => state.global.listProducts + ); + + const catalogueHashMap = useSelector( + (state: RootState) => state.global.catalogueHashMap + ); + + const getOrder = async (user: string, orderId: string, content: any) => { + const res = await fetchAndEvaluateOrders({ + user, + orderId, + content + }); + dispatch(addToHashMap(res)); + return res; + }; + + const getCatalogue = async (user: string, catalogueId: string) => { + const res = await fetchAndEvaluateCatalogues({ + user, + catalogueId + }); + if (res?.isValid) { + dispatch(setCatalogueHashMap(res)); + return res; + } + }; + + const checkAndUpdateResource = React.useCallback( + (resource: Resource) => { + // Check if the post exists in hashMapPosts + const existingResource: Order | undefined = hashMapOrders[resource.id]; + if (!existingResource) { + // If the post doesn't exist, add it to hashMapPosts + return true; + } else if ( + resource?.updated && + existingResource?.updated && + resource.updated > existingResource.updated + ) { + // If the post exists and its updated is more recent than the existing post's updated, update it in hashMapPosts + return true; + } else { + return false; + } + }, + [hashMapOrders] + ); + + const checkAndUpdateResourceCatalogue = React.useCallback( + (resource: { id: string }) => { + // Check if the post exists in hashMapPosts + const existingResource: Catalogue | undefined = + catalogueHashMap[resource.id]; + if (!existingResource) { + // If the post doesn't exist, add it to hashMapPosts + return true; + } else { + return false; + } + }, + [catalogueHashMap] + ); + + // Get the orders that you've received from your own store + const getOrders = React.useCallback(async () => { + if (!store) return; + + try { + dispatch(setIsLoadingGlobal(true)); + const offset = orders.length; + const parts = store.split(`${STORE_BASE}-`); + const shortStoreId = parts[1]; + + const query = `${ORDER_BASE}-${shortStoreId}`; + const url = `/arbitrary/resources/search?service=DOCUMENT_PRIVATE&query=${query}&limit=20&includemetadata=true&mode=ALL&offset=${offset}&reverse=true`; + const response = await fetch(url, { + method: "GET", + headers: { + "Content-Type": "application/json" + } + }); + const responseData = await response.json(); + + const structureData = responseData.map((order: any): Order => { + return { + created: order?.created, + updated: order?.updated, + user: order.name, + id: order.identifier + }; + }); + + dispatch(upsertOrders(structureData)); + // Get the order raw data from getOrder API Call only if the hashMapOrders doesn't have the order or if the order is more recently updated than the existing order + let localOrderHashMap: Record = {}; + for (const content of structureData) { + if (hashMapOrders[content.id] || localOrderHashMap[content.id]) { + continue; + } + if (content.user && content.id) { + const res = checkAndUpdateResource(content); + if (res) { + const fetchedOrder: Order = await getOrder( + content.user, + content.id, + content + ); + if (fetchedOrder) { + localOrderHashMap = { + ...localOrderHashMap, + [fetchedOrder.id]: fetchedOrder + }; + } + } + } + } + } catch (error) { + console.error(error); + } finally { + dispatch(setIsLoadingGlobal(false)); + } + }, [store, orders]); + + // Get the orders that you've made from other stores (not the ones that you've received) + const getMyOrders = React.useCallback( + async (name: string) => { + try { + dispatch(setIsLoadingGlobal(true)); + const offset = orders.length; + const query = `${ORDER_BASE}-`; + const url = `/arbitrary/resources/search?service=DOCUMENT_PRIVATE&query=${query}&limit=20&includemetadata=true&offset=${offset}&name=${name}&exactmatchnames=true&mode=ALL&reverse=true`; + const response = await fetch(url, { + method: "GET", + headers: { + "Content-Type": "application/json" + } + }); + const responseData = await response.json(); + + const structureData = responseData.map((order: any): Order => { + return { + created: order?.created, + updated: order?.updated, + user: order.name, + id: order.identifier + }; + }); + + dispatch(upsertMyOrders(structureData)); + // Get the order raw data from getOrder API Call only if the hashMapOrders doesn't have the order or if the order is more recently updated than the existing order + let localOrderHashMap: Record = {}; + for (const content of structureData) { + if (hashMapOrders[content.id] || localOrderHashMap[content.id]) { + continue; + } + if (content.user && content.id) { + const res = checkAndUpdateResource(content); + if (res) { + const fetchedOrder: Order = await getOrder( + content.user, + content.id, + content + ); + if (fetchedOrder) { + localOrderHashMap = { + ...localOrderHashMap, + [fetchedOrder.id]: fetchedOrder + }; + } + } + } + } + } catch (error) { + } finally { + dispatch(setIsLoadingGlobal(false)); + } + }, + [store, myOrders] + ); + + // Fetch the product resources and set it with its metadata inside the catalogueHashMap. The product resources were originally set in Redux in the global wrapper by fetching the data-container from QDN + const getProducts = React.useCallback(async () => { + try { + dispatch(setIsLoadingGlobal(true)); + const offset = products.length; + const productList = listProducts.products; + const responseData = productList.slice(offset, offset + 20); + const structureData = responseData.map( + (product: ProductDataContainer): Product => { + return { + created: product?.created, + catalogueId: product.catalogueId, + id: product?.productId || "", + user: product?.user || "", + status: product?.status || "" + }; + } + ); + + dispatch(upsertProducts(structureData)); + for (const content of structureData) { + if (content.user && content.id) { + const res = checkAndUpdateResourceCatalogue({ + id: content.catalogueId + }); + if (res) { + getCatalogue(content.user, content.catalogueId); + } + } + } + } catch (error) { + console.error(error); + } finally { + dispatch(setIsLoadingGlobal(false)); + } + }, [products, listProducts]); + + return { + getOrder, + hashMapOrders, + checkAndUpdateResource, + getOrders, + getProducts, + getCatalogue, + checkAndUpdateResourceCatalogue, + getMyOrders + }; +}; diff --git a/src/hooks/useFetchProducts.tsx b/src/hooks/useFetchProducts.tsx new file mode 100644 index 0000000..c9ec939 --- /dev/null +++ b/src/hooks/useFetchProducts.tsx @@ -0,0 +1,54 @@ +import React from 'react' +import { useDispatch, useSelector } from 'react-redux' +import { addToHashMap } from '../state/features/storeSlice' + +import { RootState } from '../state/store' +import { fetchAndEvaluateProducts } from '../utils/fetchPosts' + +interface Resource { + id: string + updated: number +} +export const useFetchProducts = () => { + const dispatch = useDispatch() + const hashMapProducts = useSelector( + (state: RootState) => state.store.hashMapProducts + ) + + const getProduct = async (user: string, productId: string, content: any) => { + const res = await fetchAndEvaluateProducts({ + user, + productId, + content + }) + + dispatch(addToHashMap(res)) + } + + const checkAndUpdateResource = React.useCallback( + (resource: Resource) => { + // Check if the post exists in hashMapPosts + const existingResource = hashMapProducts[resource.id] + if (!existingResource) { + // If the post doesn't exist, add it to hashMapPosts + return true + } else if ( + resource?.updated && + existingResource?.updated && + resource.updated > existingResource.updated + ) { + // If the post exists and its updated is more recent than the existing post's updated, update it in hashMapPosts + return true + } else { + return false + } + }, + [hashMapProducts] + ) + + return { + getProduct, + hashMapProducts, + checkAndUpdateResource + } +} diff --git a/src/hooks/useFetchStoreReviews.tsx b/src/hooks/useFetchStoreReviews.tsx new file mode 100644 index 0000000..77b10f8 --- /dev/null +++ b/src/hooks/useFetchStoreReviews.tsx @@ -0,0 +1,55 @@ +import React from "react"; +import { useDispatch, useSelector } from "react-redux"; +import { addToHashMapStoreReviews } from "../state/features/storeSlice"; +import { RootState } from "../state/store"; +import { fetchAndEvaluateStoreReviews } from "../utils/fetchStoreReviews"; + +interface Resource { + id: string; + updated?: number; +} + +export const useFetchStoreReviews = () => { + const dispatch = useDispatch(); + const hashMapStoreReviews = useSelector( + (state: RootState) => state.store.hashMapStoreReviews + ); + + // Get the review raw data from QDN + const getReview = async (owner: string, reviewId: string, content: any) => { + const res = await fetchAndEvaluateStoreReviews({ + owner, + reviewId, + content + }); + + dispatch(addToHashMapStoreReviews(res)); + }; + + // Make sure that raw data isn't already present in Redux hashmap + const checkAndUpdateResource = React.useCallback( + (resource: Resource) => { + // Check if the post exists in hashMapPosts + const existingResource = hashMapStoreReviews[resource.id]; + if (!existingResource) { + // If the post doesn't exist, add it to hashMapPosts + return true; + } else if ( + resource?.updated && + existingResource?.updated && + resource.updated > existingResource.updated + ) { + // If the post exists and its updated is more recent than the existing post's updated, update it in hashMapPosts + return true; + } else { + return false; + } + }, + [hashMapStoreReviews] + ); + + return { + getReview, + checkAndUpdateResource + }; +}; diff --git a/src/hooks/useFetchStores.tsx b/src/hooks/useFetchStores.tsx new file mode 100644 index 0000000..45afef2 --- /dev/null +++ b/src/hooks/useFetchStores.tsx @@ -0,0 +1,55 @@ +import React from "react"; +import { useDispatch, useSelector } from "react-redux"; +import { addToHashMapStores } from "../state/features/storeSlice"; + +import { RootState } from "../state/store"; +import { fetchAndEvaluateProducts } from "../utils/fetchPosts"; +import { fetchAndEvaluateStores } from "../utils/fetchStores"; + +interface Resource { + id: string; + updated: number; +} +export const useFetchStores = () => { + const dispatch = useDispatch(); + const hashMapStores = useSelector( + (state: RootState) => state.store.hashMapStores + ); + + const getStore = async (owner: string, storeId: string, content: any) => { + const res = await fetchAndEvaluateStores({ + owner, + storeId, + content + }); + + dispatch(addToHashMapStores(res)); + return res; + }; + + const checkAndUpdateResource = React.useCallback( + (resource: Resource) => { + // Check if the post exists in hashMapPosts + const existingResource = hashMapStores[resource.id]; + if (!existingResource) { + // If the post doesn't exist, add it to hashMapPosts + return true; + } else if ( + resource?.updated && + existingResource?.updated && + resource.updated > existingResource.updated + ) { + // If the post exists and its updated is more recent than the existing post's updated, update it in hashMapPosts + return true; + } else { + return false; + } + }, + [hashMapStores] + ); + + return { + getStore, + checkAndUpdateResource + }; +}; diff --git a/src/hooks/useProductsToSaveLocalStorage.tsx b/src/hooks/useProductsToSaveLocalStorage.tsx new file mode 100644 index 0000000..5c85793 --- /dev/null +++ b/src/hooks/useProductsToSaveLocalStorage.tsx @@ -0,0 +1,26 @@ +import { useState, useEffect } from "react"; +import { Product } from "../state/features/storeSlice"; +import { RootState } from "../state/store"; +import { useSelector } from "react-redux"; + +export const useProductsToSaveLocalStorage = () => { + const { currentStore } = useSelector((state: RootState) => state.global); + + const [productsToSaveLS, setProductsToSaveLS] = useState(() => { + // Retrieve the productsToSave object from local storage or initialize as an empty object + const storedProductsToSave = localStorage.getItem("productsToSave"); + return storedProductsToSave ? JSON.parse(storedProductsToSave) : {}; + }); + + useEffect(() => { + // Store the productsToSave object in local storage whenever it changes + localStorage.setItem("productsToSave", JSON.stringify(productsToSaveLS)); + }, [productsToSaveLS]); + + const saveProductsToLocalStorage = (newProductsToSave: any) => { + // Update the productsToSave state + setProductsToSaveLS(newProductsToSave); + }; + + return { productsToSaveLS, saveProductsToLocalStorage }; +}; diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000..9855117 --- /dev/null +++ b/src/index.css @@ -0,0 +1,178 @@ +@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"); +} + +@font-face { + font-family: "Montserrat"; + src: url("./styles/fonts/Montserrat.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: 0.75; + transition: 0.2s all; +} + +.post-image { + max-width: 100%; + border-radius: 5px; + width: 100%; + height: 100%; +} + +.grid-item { + /* Other styles */ + /* overflow: auto; */ +} + +.grid-item-view { + /* Other styles */ + /* overflow: auto; */ +} + +.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 */ +} diff --git a/src/index.d.ts b/src/index.d.ts new file mode 100644 index 0000000..996a468 --- /dev/null +++ b/src/index.d.ts @@ -0,0 +1,9 @@ +declare module 'webworker:getBlogWorker' { + const value: new () => Worker; + export default value; +} + +declare module 'webworker:decodeBase64' { + const value: new () => Worker + export default value +} \ No newline at end of file diff --git a/src/interfaces/interfaces.ts b/src/interfaces/interfaces.ts new file mode 100644 index 0000000..48b7666 --- /dev/null +++ b/src/interfaces/interfaces.ts @@ -0,0 +1,8 @@ +export interface BlogContent { + postContent: any[] + title: string + createdAt: number + user?: any + postId?: string + layouts?: any +} \ No newline at end of file diff --git a/src/main.tsx b/src/main.tsx new file mode 100644 index 0000000..b456834 --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,19 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import App from './App' +import './index.css' +import { HashRouter, BrowserRouter } from 'react-router-dom' +interface CustomWindow extends Window { + _qdnBase: any // Replace 'any' with the appropriate type if you know it +} + +const customWindow = window as unknown as CustomWindow + +// Now you can access the _qdnTheme property without TypeScript errors +const baseUrl = customWindow?._qdnBase || '' +ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( + + +