diff --git a/.eslintrc.cjs b/.eslintrc.cjs
new file mode 100644
index 00000000..4020bcbf
--- /dev/null
+++ b/.eslintrc.cjs
@@ -0,0 +1,14 @@
+module.exports = {
+ env: { browser: true, es2020: true },
+ extends: [
+ 'eslint:recommended',
+ 'plugin:@typescript-eslint/recommended',
+ 'plugin:react-hooks/recommended',
+ ],
+ parser: '@typescript-eslint/parser',
+ parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },
+ plugins: ['react-refresh'],
+ rules: {
+ 'react-refresh/only-export-components': 'warn',
+ },
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..1ba3d335
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,25 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+.env
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+.env
diff --git a/index.html b/index.html
new file mode 100644
index 00000000..fd40558a
--- /dev/null
+++ b/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+ WinkBook
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..65cb1881
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,6677 @@
+{
+ "name": "sale-project",
+ "version": "0.0.0",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "sale-project",
+ "version": "0.0.0",
+ "dependencies": {
+ "@emotion/react": "^11.11.0",
+ "@emotion/styled": "^11.11.0",
+ "@fortawesome/fontawesome-free": "^6.4.0",
+ "@fortawesome/free-brands-svg-icons": "^6.4.0",
+ "@fortawesome/free-regular-svg-icons": "^6.4.0",
+ "@fortawesome/free-solid-svg-icons": "^6.4.0",
+ "@fortawesome/react-fontawesome": "^0.2.0",
+ "@mui/material": "^5.13.4",
+ "@reduxjs/toolkit": "^1.9.5",
+ "@vitejs/plugin-react-swc": "^3.3.2",
+ "axios": "^1.4.0",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "react-redux": "^8.0.7",
+ "react-router-dom": "^6.11.2",
+ "redux": "^4.2.1",
+ "redux-promise": "^0.6.0",
+ "redux-thunk": "^2.4.2",
+ "sass": "^1.62.1",
+ "sweetalert2": "^11.7.12",
+ "use-history": "^1.4.1",
+ "vite-plugin-mkcert": "^1.15.0",
+ "vite-plugin-sass-dts": "^1.3.5"
+ },
+ "devDependencies": {
+ "@types/node": "^20.2.5",
+ "@types/react": "^18.0.37",
+ "@types/react-dom": "^18.0.11",
+ "@types/redux-promise": "^0.5.29",
+ "@typescript-eslint/eslint-plugin": "^5.59.0",
+ "@typescript-eslint/parser": "^5.59.0",
+ "eslint": "^8.38.0",
+ "eslint-plugin-react-hooks": "^4.6.0",
+ "eslint-plugin-react-refresh": "^0.3.4",
+ "typescript": "^5.0.2",
+ "vite": "^4.3.9"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.21.4",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz",
+ "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==",
+ "dependencies": {
+ "@babel/highlight": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.21.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz",
+ "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==",
+ "dependencies": {
+ "@babel/types": "^7.21.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.21.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz",
+ "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==",
+ "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/runtime": {
+ "version": "7.22.3",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.3.tgz",
+ "integrity": "sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ==",
+ "dependencies": {
+ "regenerator-runtime": "^0.13.11"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.22.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.4.tgz",
+ "integrity": "sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.21.5",
+ "@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.11.0",
+ "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz",
+ "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.16.7",
+ "@babel/runtime": "^7.18.3",
+ "@emotion/hash": "^0.9.1",
+ "@emotion/memoize": "^0.8.1",
+ "@emotion/serialize": "^1.1.2",
+ "babel-plugin-macros": "^3.1.0",
+ "convert-source-map": "^1.5.0",
+ "escape-string-regexp": "^4.0.0",
+ "find-root": "^1.1.0",
+ "source-map": "^0.5.7",
+ "stylis": "4.2.0"
+ }
+ },
+ "node_modules/@emotion/babel-plugin/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/@emotion/cache": {
+ "version": "11.11.0",
+ "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz",
+ "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==",
+ "dependencies": {
+ "@emotion/memoize": "^0.8.1",
+ "@emotion/sheet": "^1.2.2",
+ "@emotion/utils": "^1.2.1",
+ "@emotion/weak-memoize": "^0.3.1",
+ "stylis": "4.2.0"
+ }
+ },
+ "node_modules/@emotion/hash": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz",
+ "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ=="
+ },
+ "node_modules/@emotion/is-prop-valid": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz",
+ "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==",
+ "dependencies": {
+ "@emotion/memoize": "^0.8.1"
+ }
+ },
+ "node_modules/@emotion/memoize": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz",
+ "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA=="
+ },
+ "node_modules/@emotion/react": {
+ "version": "11.11.0",
+ "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.0.tgz",
+ "integrity": "sha512-ZSK3ZJsNkwfjT3JpDAWJZlrGD81Z3ytNDsxw1LKq1o+xkmO5pnWfr6gmCC8gHEFf3nSSX/09YrG67jybNPxSUw==",
+ "dependencies": {
+ "@babel/runtime": "^7.18.3",
+ "@emotion/babel-plugin": "^11.11.0",
+ "@emotion/cache": "^11.11.0",
+ "@emotion/serialize": "^1.1.2",
+ "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1",
+ "@emotion/utils": "^1.2.1",
+ "@emotion/weak-memoize": "^0.3.1",
+ "hoist-non-react-statics": "^3.3.1"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@emotion/serialize": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz",
+ "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==",
+ "dependencies": {
+ "@emotion/hash": "^0.9.1",
+ "@emotion/memoize": "^0.8.1",
+ "@emotion/unitless": "^0.8.1",
+ "@emotion/utils": "^1.2.1",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@emotion/sheet": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz",
+ "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA=="
+ },
+ "node_modules/@emotion/styled": {
+ "version": "11.11.0",
+ "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz",
+ "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==",
+ "dependencies": {
+ "@babel/runtime": "^7.18.3",
+ "@emotion/babel-plugin": "^11.11.0",
+ "@emotion/is-prop-valid": "^1.2.1",
+ "@emotion/serialize": "^1.1.2",
+ "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1",
+ "@emotion/utils": "^1.2.1"
+ },
+ "peerDependencies": {
+ "@emotion/react": "^11.0.0-rc.0",
+ "react": ">=16.8.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@emotion/unitless": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz",
+ "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ=="
+ },
+ "node_modules/@emotion/use-insertion-effect-with-fallbacks": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz",
+ "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==",
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ }
+ },
+ "node_modules/@emotion/utils": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz",
+ "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg=="
+ },
+ "node_modules/@emotion/weak-memoize": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz",
+ "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww=="
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz",
+ "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz",
+ "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz",
+ "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz",
+ "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz",
+ "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz",
+ "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz",
+ "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz",
+ "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz",
+ "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz",
+ "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz",
+ "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==",
+ "cpu": [
+ "loong64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz",
+ "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==",
+ "cpu": [
+ "mips64el"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz",
+ "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz",
+ "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz",
+ "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==",
+ "cpu": [
+ "s390x"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz",
+ "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz",
+ "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz",
+ "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz",
+ "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz",
+ "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz",
+ "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz",
+ "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz",
+ "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==",
+ "dev": true,
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz",
+ "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.5.2",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/globals": {
+ "version": "13.20.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
+ "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.41.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz",
+ "integrity": "sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@fortawesome/fontawesome-common-types": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.0.tgz",
+ "integrity": "sha512-HNii132xfomg5QVZw0HwXXpN22s7VBHQBv9CeOu9tfJnhsWQNd2lmTNi8CSrnw5B+5YOmzu1UoPAyxaXsJ6RgQ==",
+ "hasInstallScript": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@fortawesome/fontawesome-free": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.0.tgz",
+ "integrity": "sha512-0NyytTlPJwB/BF5LtRV8rrABDbe3TdTXqNB3PdZ+UUUZAEIrdOJdmABqKjt4AXwIoJNaRVVZEXxpNrqvE1GAYQ==",
+ "hasInstallScript": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@fortawesome/fontawesome-svg-core": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.0.tgz",
+ "integrity": "sha512-Bertv8xOiVELz5raB2FlXDPKt+m94MQ3JgDfsVbrqNpLU9+UE2E18GKjLKw+d3XbeYPqg1pzyQKGsrzbw+pPaw==",
+ "hasInstallScript": true,
+ "peer": true,
+ "dependencies": {
+ "@fortawesome/fontawesome-common-types": "6.4.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@fortawesome/free-brands-svg-icons": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.4.0.tgz",
+ "integrity": "sha512-qvxTCo0FQ5k2N+VCXb/PZQ+QMhqRVM4OORiO6MXdG6bKolIojGU/srQ1ptvKk0JTbRgaJOfL2qMqGvBEZG7Z6g==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@fortawesome/fontawesome-common-types": "6.4.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@fortawesome/free-regular-svg-icons": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.4.0.tgz",
+ "integrity": "sha512-ZfycI7D0KWPZtf7wtMFnQxs8qjBXArRzczABuMQqecA/nXohquJ5J/RCR77PmY5qGWkxAZDxpnUFVXKwtY/jPw==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@fortawesome/fontawesome-common-types": "6.4.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@fortawesome/free-solid-svg-icons": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.0.tgz",
+ "integrity": "sha512-kutPeRGWm8V5dltFP1zGjQOEAzaLZj4StdQhWVZnfGFCvAPVvHh8qk5bRrU4KXnRRRNni5tKQI9PBAdI6MP8nQ==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@fortawesome/fontawesome-common-types": "6.4.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@fortawesome/react-fontawesome": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz",
+ "integrity": "sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==",
+ "dependencies": {
+ "prop-types": "^15.8.1"
+ },
+ "peerDependencies": {
+ "@fortawesome/fontawesome-svg-core": "~1 || ~6",
+ "react": ">=16.3"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.8",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
+ "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "node_modules/@mui/base": {
+ "version": "5.0.0-beta.4",
+ "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.4.tgz",
+ "integrity": "sha512-ejhtqYJpjDgHGEljjMBQWZ22yEK0OzIXNa7toJmmXsP4TT3W7xVy8bTJ0TniPDf+JNjrsgfgiFTDGdlEhV1E+g==",
+ "dependencies": {
+ "@babel/runtime": "^7.21.0",
+ "@emotion/is-prop-valid": "^1.2.1",
+ "@mui/types": "^7.2.4",
+ "@mui/utils": "^5.13.1",
+ "@popperjs/core": "^2.11.8",
+ "clsx": "^1.2.1",
+ "prop-types": "^15.8.1",
+ "react-is": "^18.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui"
+ },
+ "peerDependencies": {
+ "@types/react": "^17.0.0 || ^18.0.0",
+ "react": "^17.0.0 || ^18.0.0",
+ "react-dom": "^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/core-downloads-tracker": {
+ "version": "5.13.4",
+ "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.4.tgz",
+ "integrity": "sha512-yFrMWcrlI0TqRN5jpb6Ma9iI7sGTHpytdzzL33oskFHNQ8UgrtPas33Y1K7sWAMwCrr1qbWDrOHLAQG4tAzuSw==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui"
+ }
+ },
+ "node_modules/@mui/material": {
+ "version": "5.13.4",
+ "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.13.4.tgz",
+ "integrity": "sha512-Yq+4f1KLPa/Szd3xqra2hbOAf2Usl8GbubncArM6LIp40mBLtXIdPE29MNtHsbtuzz4g+eidrETgoi3wdbEYfQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.21.0",
+ "@mui/base": "5.0.0-beta.4",
+ "@mui/core-downloads-tracker": "^5.13.4",
+ "@mui/system": "^5.13.2",
+ "@mui/types": "^7.2.4",
+ "@mui/utils": "^5.13.1",
+ "@types/react-transition-group": "^4.4.6",
+ "clsx": "^1.2.1",
+ "csstype": "^3.1.2",
+ "prop-types": "^15.8.1",
+ "react-is": "^18.2.0",
+ "react-transition-group": "^4.4.5"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui"
+ },
+ "peerDependencies": {
+ "@emotion/react": "^11.5.0",
+ "@emotion/styled": "^11.3.0",
+ "@types/react": "^17.0.0 || ^18.0.0",
+ "react": "^17.0.0 || ^18.0.0",
+ "react-dom": "^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/react": {
+ "optional": true
+ },
+ "@emotion/styled": {
+ "optional": true
+ },
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/private-theming": {
+ "version": "5.13.1",
+ "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.1.tgz",
+ "integrity": "sha512-HW4npLUD9BAkVppOUZHeO1FOKUJWAwbpy0VQoGe3McUYTlck1HezGHQCfBQ5S/Nszi7EViqiimECVl9xi+/WjQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.21.0",
+ "@mui/utils": "^5.13.1",
+ "prop-types": "^15.8.1"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui"
+ },
+ "peerDependencies": {
+ "@types/react": "^17.0.0 || ^18.0.0",
+ "react": "^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/styled-engine": {
+ "version": "5.13.2",
+ "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.13.2.tgz",
+ "integrity": "sha512-VCYCU6xVtXOrIN8lcbuPmoG+u7FYuOERG++fpY74hPpEWkyFQG97F+/XfTQVYzlR2m7nPjnwVUgATcTCMEaMvw==",
+ "dependencies": {
+ "@babel/runtime": "^7.21.0",
+ "@emotion/cache": "^11.11.0",
+ "csstype": "^3.1.2",
+ "prop-types": "^15.8.1"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui"
+ },
+ "peerDependencies": {
+ "@emotion/react": "^11.4.1",
+ "@emotion/styled": "^11.3.0",
+ "react": "^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/react": {
+ "optional": true
+ },
+ "@emotion/styled": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/system": {
+ "version": "5.13.2",
+ "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.13.2.tgz",
+ "integrity": "sha512-TPyWmRJPt0JPVxacZISI4o070xEJ7ftxpVtu6LWuYVOUOINlhoGOclam4iV8PDT3EMQEHuUrwU49po34UdWLlw==",
+ "dependencies": {
+ "@babel/runtime": "^7.21.0",
+ "@mui/private-theming": "^5.13.1",
+ "@mui/styled-engine": "^5.13.2",
+ "@mui/types": "^7.2.4",
+ "@mui/utils": "^5.13.1",
+ "clsx": "^1.2.1",
+ "csstype": "^3.1.2",
+ "prop-types": "^15.8.1"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui"
+ },
+ "peerDependencies": {
+ "@emotion/react": "^11.5.0",
+ "@emotion/styled": "^11.3.0",
+ "@types/react": "^17.0.0 || ^18.0.0",
+ "react": "^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/react": {
+ "optional": true
+ },
+ "@emotion/styled": {
+ "optional": true
+ },
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/types": {
+ "version": "7.2.4",
+ "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz",
+ "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==",
+ "peerDependencies": {
+ "@types/react": "*"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/utils": {
+ "version": "5.13.1",
+ "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.13.1.tgz",
+ "integrity": "sha512-6lXdWwmlUbEU2jUI8blw38Kt+3ly7xkmV9ljzY4Q20WhsJMWiNry9CX8M+TaP/HbtuyR8XKsdMgQW7h7MM3n3A==",
+ "dependencies": {
+ "@babel/runtime": "^7.21.0",
+ "@types/prop-types": "^15.7.5",
+ "@types/react-is": "^18.2.0",
+ "prop-types": "^15.8.1",
+ "react-is": "^18.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui"
+ },
+ "peerDependencies": {
+ "react": "^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@octokit/auth-token": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz",
+ "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@octokit/core": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.1.tgz",
+ "integrity": "sha512-tEDxFx8E38zF3gT7sSMDrT1tGumDgsw5yPG6BBh/X+5ClIQfMH/Yqocxz1PnHx6CHyF6pxmovUTOfZAUvQ0Lvw==",
+ "dependencies": {
+ "@octokit/auth-token": "^3.0.0",
+ "@octokit/graphql": "^5.0.0",
+ "@octokit/request": "^6.0.0",
+ "@octokit/request-error": "^3.0.0",
+ "@octokit/types": "^9.0.0",
+ "before-after-hook": "^2.2.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@octokit/endpoint": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.5.tgz",
+ "integrity": "sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA==",
+ "dependencies": {
+ "@octokit/types": "^9.0.0",
+ "is-plain-object": "^5.0.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@octokit/graphql": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz",
+ "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==",
+ "dependencies": {
+ "@octokit/request": "^6.0.0",
+ "@octokit/types": "^9.0.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@octokit/openapi-types": {
+ "version": "17.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-17.2.0.tgz",
+ "integrity": "sha512-MazrFNx4plbLsGl+LFesMo96eIXkFgEtaKbnNpdh4aQ0VM10aoylFsTYP1AEjkeoRNZiiPe3T6Gl2Hr8dJWdlQ=="
+ },
+ "node_modules/@octokit/plugin-paginate-rest": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz",
+ "integrity": "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==",
+ "dependencies": {
+ "@octokit/tsconfig": "^1.0.2",
+ "@octokit/types": "^9.2.3"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=4"
+ }
+ },
+ "node_modules/@octokit/plugin-request-log": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz",
+ "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==",
+ "peerDependencies": {
+ "@octokit/core": ">=3"
+ }
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.1.3.tgz",
+ "integrity": "sha512-0aoPd4f1k/KXPTGSX0NbxcBrShBHArgcW3pujEvLa6wUfcfA1BehxQ2Ifwa6CbJ4SfzaO79FvGgaUipoxDsgjA==",
+ "dependencies": {
+ "@octokit/types": "^9.2.3"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=3"
+ }
+ },
+ "node_modules/@octokit/request": {
+ "version": "6.2.5",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.5.tgz",
+ "integrity": "sha512-z83E8UIlPNaJUsXpjD8E0V5o/5f+vJJNbNcBwVZsX3/vC650U41cOkTLjq4PKk9BYonQGOnx7N17gvLyNjgGcQ==",
+ "dependencies": {
+ "@octokit/endpoint": "^7.0.0",
+ "@octokit/request-error": "^3.0.0",
+ "@octokit/types": "^9.0.0",
+ "is-plain-object": "^5.0.0",
+ "node-fetch": "^2.6.7",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@octokit/request-error": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz",
+ "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==",
+ "dependencies": {
+ "@octokit/types": "^9.0.0",
+ "deprecation": "^2.0.0",
+ "once": "^1.4.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@octokit/rest": {
+ "version": "19.0.11",
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.11.tgz",
+ "integrity": "sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw==",
+ "dependencies": {
+ "@octokit/core": "^4.2.1",
+ "@octokit/plugin-paginate-rest": "^6.1.2",
+ "@octokit/plugin-request-log": "^1.0.4",
+ "@octokit/plugin-rest-endpoint-methods": "^7.1.2"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@octokit/tsconfig": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz",
+ "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA=="
+ },
+ "node_modules/@octokit/types": {
+ "version": "9.2.3",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.2.3.tgz",
+ "integrity": "sha512-MMeLdHyFIALioycq+LFcA71v0S2xpQUX2cw6pPbHQjaibcHYwLnmK/kMZaWuGfGfjBJZ3wRUq+dOaWsvrPJVvA==",
+ "dependencies": {
+ "@octokit/openapi-types": "^17.2.0"
+ }
+ },
+ "node_modules/@popperjs/core": {
+ "version": "2.11.8",
+ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
+ "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/popperjs"
+ }
+ },
+ "node_modules/@reduxjs/toolkit": {
+ "version": "1.9.5",
+ "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.5.tgz",
+ "integrity": "sha512-Rt97jHmfTeaxL4swLRNPD/zV4OxTes4la07Xc4hetpUW/vc75t5m1ANyxG6ymnEQ2FsLQsoMlYB2vV1sO3m8tQ==",
+ "dependencies": {
+ "immer": "^9.0.21",
+ "redux": "^4.2.1",
+ "redux-thunk": "^2.4.2",
+ "reselect": "^4.1.8"
+ },
+ "peerDependencies": {
+ "react": "^16.9.0 || ^17.0.0 || ^18",
+ "react-redux": "^7.2.1 || ^8.0.2"
+ },
+ "peerDependenciesMeta": {
+ "react": {
+ "optional": true
+ },
+ "react-redux": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@remix-run/router": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.6.2.tgz",
+ "integrity": "sha512-LzqpSrMK/3JBAVBI9u3NWtOhWNw5AMQfrUFYB0+bDHTSw17z++WJLsPsxAuK+oSddsxk4d7F/JcdDPM1M5YAhA==",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@swc/core": {
+ "version": "1.3.62",
+ "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.62.tgz",
+ "integrity": "sha512-J58hWY+/G8vOr4J6ZH9hLg0lMSijZtqIIf4HofZezGog/pVX6sJyBJ40dZ1ploFkDIlWTWvJyqtpesBKS73gkQ==",
+ "hasInstallScript": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/swc"
+ },
+ "optionalDependencies": {
+ "@swc/core-darwin-arm64": "1.3.62",
+ "@swc/core-darwin-x64": "1.3.62",
+ "@swc/core-linux-arm-gnueabihf": "1.3.62",
+ "@swc/core-linux-arm64-gnu": "1.3.62",
+ "@swc/core-linux-arm64-musl": "1.3.62",
+ "@swc/core-linux-x64-gnu": "1.3.62",
+ "@swc/core-linux-x64-musl": "1.3.62",
+ "@swc/core-win32-arm64-msvc": "1.3.62",
+ "@swc/core-win32-ia32-msvc": "1.3.62",
+ "@swc/core-win32-x64-msvc": "1.3.62"
+ },
+ "peerDependencies": {
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependenciesMeta": {
+ "@swc/helpers": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@swc/core-darwin-arm64": {
+ "version": "1.3.62",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.62.tgz",
+ "integrity": "sha512-MmGilibITz68LEje6vJlKzc2gUUSgzvB3wGLSjEORikTNeM7P8jXVxE4A8fgZqDeudJUm9HVWrxCV+pHDSwXhA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-darwin-x64": {
+ "version": "1.3.62",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.62.tgz",
+ "integrity": "sha512-Xl93MMB3sCWVlYWuQIB+v6EQgzoiuQYK5tNt9lsHoIEVu2zLdkQjae+5FUHZb1VYqCXIiWcULFfVz0R4Sjb7JQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-arm-gnueabihf": {
+ "version": "1.3.62",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.62.tgz",
+ "integrity": "sha512-nJsp6O7kCtAjTTMcIjVB0g5y1JNiYAa5q630eiwrnaHUusEFoANDdORI3Z9vXeikMkng+6yIv9/V8Rb093xLjQ==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-arm64-gnu": {
+ "version": "1.3.62",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.62.tgz",
+ "integrity": "sha512-XGsV93vpUAopDt5y6vPwbK1Nc/MlL55L77bAZUPIiosWD1cWWPHNtNSpriE6+I+JiMHe0pqtfS/SSTk6ZkFQVw==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-arm64-musl": {
+ "version": "1.3.62",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.62.tgz",
+ "integrity": "sha512-ESUmJjSlTTkoBy9dMG49opcNn8BmviqStMhwyeD1G8XRnmRVCZZgoBOKdvCXmJhw8bQXDhZumeaTUB+OFUKVXg==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-x64-gnu": {
+ "version": "1.3.62",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.62.tgz",
+ "integrity": "sha512-wnHJkt3ZBrax3SFnUHDcncG6mrSg9ZZjMhQV9Mc3JL1x1s1Gy9rGZCoBNnV/BUZWTemxIBcQbANRSDut/WO+9A==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-x64-musl": {
+ "version": "1.3.62",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.62.tgz",
+ "integrity": "sha512-9oRbuTC/VshB66Rgwi3pTq3sPxSTIb8k9L1vJjES+dDMKa29DAjPtWCXG/pyZ00ufpFZgkGEuAHH5uqUcr1JQg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-win32-arm64-msvc": {
+ "version": "1.3.62",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.62.tgz",
+ "integrity": "sha512-zv14vlF2VRrxS061XkfzGjCYnOrEo5glKJjLK5PwUKysIoVrx/L8nAbFxjkX5cObdlyoqo+ekelyBPAO+4bS0w==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-win32-ia32-msvc": {
+ "version": "1.3.62",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.62.tgz",
+ "integrity": "sha512-8MC/PZQSsOP2iA/81tAfNRqMWyEqTS/8zKUI67vPuLvpx6NAjRn3E9qBv7iFqH79iqZNzqSMo3awnLrKZyFbcw==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-win32-x64-msvc": {
+ "version": "1.3.62",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.62.tgz",
+ "integrity": "sha512-GJSmUJ95HKHZXAxiuPUmrcm/S3ivQvEzXhOZaIqYBIwUsm02vFZkClsV7eIKzWjso1t0+I/8MjrnUNaSWqh1rQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@types/hoist-non-react-statics": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz",
+ "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==",
+ "dependencies": {
+ "@types/react": "*",
+ "hoist-non-react-statics": "^3.3.0"
+ }
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.12",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz",
+ "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "20.2.5",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz",
+ "integrity": "sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==",
+ "devOptional": 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.2.7",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.7.tgz",
+ "integrity": "sha512-ojrXpSH2XFCmHm7Jy3q44nXDyN54+EYKP2lBhJ2bqfyPj6cIUW/FZW/Csdia34NQgq7KYcAlHi5184m4X88+yw==",
+ "dependencies": {
+ "@types/prop-types": "*",
+ "@types/scheduler": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "18.2.4",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz",
+ "integrity": "sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==",
+ "devOptional": true,
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-1vz2yObaQkLL7YFe/pme2cpvDsCwI1WXIfL+5eLz0MI9gFG24Re16RzUsI8t9XZn9ZWvgLNDrJBmrqXJO7GNQQ==",
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/react-transition-group": {
+ "version": "4.4.6",
+ "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz",
+ "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==",
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/redux-promise": {
+ "version": "0.5.29",
+ "resolved": "https://registry.npmjs.org/@types/redux-promise/-/redux-promise-0.5.29.tgz",
+ "integrity": "sha512-lCBCTiJCweYtW5YgOIAG400dAi2Cr2IW6mfh1eZ8WqgxTRqPZjLAFQzxQ6oRZaB9g8mdzr28vOc3CAo8y/Na2w==",
+ "dev": true,
+ "dependencies": {
+ "redux": "^3.6.0"
+ }
+ },
+ "node_modules/@types/redux-promise/node_modules/redux": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz",
+ "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==",
+ "dev": true,
+ "dependencies": {
+ "lodash": "^4.2.1",
+ "lodash-es": "^4.2.1",
+ "loose-envify": "^1.1.0",
+ "symbol-observable": "^1.0.3"
+ }
+ },
+ "node_modules/@types/scheduler": {
+ "version": "0.16.3",
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz",
+ "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ=="
+ },
+ "node_modules/@types/semver": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz",
+ "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==",
+ "dev": true
+ },
+ "node_modules/@types/use-sync-external-store": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz",
+ "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA=="
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.8.tgz",
+ "integrity": "sha512-JDMOmhXteJ4WVKOiHXGCoB96ADWg9q7efPWHRViT/f09bA8XOMLAVHHju3l0MkZnG1izaWXYmgvQcUjTRcpShQ==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.4.0",
+ "@typescript-eslint/scope-manager": "5.59.8",
+ "@typescript-eslint/type-utils": "5.59.8",
+ "@typescript-eslint/utils": "5.59.8",
+ "debug": "^4.3.4",
+ "grapheme-splitter": "^1.0.4",
+ "ignore": "^5.2.0",
+ "natural-compare-lite": "^1.4.0",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^5.0.0",
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.8.tgz",
+ "integrity": "sha512-AnR19RjJcpjoeGojmwZtCwBX/RidqDZtzcbG3xHrmz0aHHoOcbWnpDllenRDmDvsV0RQ6+tbb09/kyc+UT9Orw==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "5.59.8",
+ "@typescript-eslint/types": "5.59.8",
+ "@typescript-eslint/typescript-estree": "5.59.8",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.8.tgz",
+ "integrity": "sha512-/w08ndCYI8gxGf+9zKf1vtx/16y8MHrZs5/tnjHhMLNSixuNcJavSX4wAiPf4aS5x41Es9YPCn44MIe4cxIlig==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.59.8",
+ "@typescript-eslint/visitor-keys": "5.59.8"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.8.tgz",
+ "integrity": "sha512-+5M518uEIHFBy3FnyqZUF3BMP+AXnYn4oyH8RF012+e7/msMY98FhGL5SrN29NQ9xDgvqCgYnsOiKp1VjZ/fpA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "5.59.8",
+ "@typescript-eslint/utils": "5.59.8",
+ "debug": "^4.3.4",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.8.tgz",
+ "integrity": "sha512-+uWuOhBTj/L6awoWIg0BlWy0u9TyFpCHrAuQ5bNfxDaZ1Ppb3mx6tUigc74LHcbHpOHuOTOJrBoAnhdHdaea1w==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.8.tgz",
+ "integrity": "sha512-Jy/lPSDJGNow14vYu6IrW790p7HIf/SOV1Bb6lZ7NUkLc2iB2Z9elESmsaUtLw8kVqogSbtLH9tut5GCX1RLDg==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.59.8",
+ "@typescript-eslint/visitor-keys": "5.59.8",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.8.tgz",
+ "integrity": "sha512-Tr65630KysnNn9f9G7ROF3w1b5/7f6QVCJ+WK9nhIocWmx9F+TmCAcglF26Vm7z8KCTwoKcNEBZrhlklla3CKg==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@types/json-schema": "^7.0.9",
+ "@types/semver": "^7.3.12",
+ "@typescript-eslint/scope-manager": "5.59.8",
+ "@typescript-eslint/types": "5.59.8",
+ "@typescript-eslint/typescript-estree": "5.59.8",
+ "eslint-scope": "^5.1.1",
+ "semver": "^7.3.7"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.8.tgz",
+ "integrity": "sha512-pJhi2ms0x0xgloT7xYabil3SGGlojNNKjK/q6dB3Ey0uJLMjK2UDGJvHieiyJVW/7C3KI+Z4Q3pEHkm4ejA+xQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.59.8",
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@vitejs/plugin-react-swc": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.3.2.tgz",
+ "integrity": "sha512-VJFWY5sfoZerQRvJrh518h3AcQt6f/yTuWn4/TRB+dqmYU0NX1qz7qM5Wfd+gOQqUzQW4gxKqKN3KpE/P3+zrA==",
+ "dependencies": {
+ "@swc/core": "^1.3.61"
+ },
+ "peerDependencies": {
+ "vite": "^4"
+ }
+ },
+ "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,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "node_modules/axios": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz",
+ "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==",
+ "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/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/before-after-hook": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz",
+ "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ=="
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "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/chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "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/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
+ },
+ "node_modules/cosmiconfig": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
+ "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
+ "dependencies": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.2.1",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.10.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
+ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "node_modules/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/deprecation": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
+ "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/dom-helpers": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
+ "dependencies": {
+ "@babel/runtime": "^7.8.7",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz",
+ "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==",
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/android-arm": "0.17.19",
+ "@esbuild/android-arm64": "0.17.19",
+ "@esbuild/android-x64": "0.17.19",
+ "@esbuild/darwin-arm64": "0.17.19",
+ "@esbuild/darwin-x64": "0.17.19",
+ "@esbuild/freebsd-arm64": "0.17.19",
+ "@esbuild/freebsd-x64": "0.17.19",
+ "@esbuild/linux-arm": "0.17.19",
+ "@esbuild/linux-arm64": "0.17.19",
+ "@esbuild/linux-ia32": "0.17.19",
+ "@esbuild/linux-loong64": "0.17.19",
+ "@esbuild/linux-mips64el": "0.17.19",
+ "@esbuild/linux-ppc64": "0.17.19",
+ "@esbuild/linux-riscv64": "0.17.19",
+ "@esbuild/linux-s390x": "0.17.19",
+ "@esbuild/linux-x64": "0.17.19",
+ "@esbuild/netbsd-x64": "0.17.19",
+ "@esbuild/openbsd-x64": "0.17.19",
+ "@esbuild/sunos-x64": "0.17.19",
+ "@esbuild/win32-arm64": "0.17.19",
+ "@esbuild/win32-ia32": "0.17.19",
+ "@esbuild/win32-x64": "0.17.19"
+ }
+ },
+ "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/eslint": {
+ "version": "8.41.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz",
+ "integrity": "sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.4.0",
+ "@eslint/eslintrc": "^2.0.3",
+ "@eslint/js": "8.41.0",
+ "@humanwhocodes/config-array": "^0.11.8",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.0",
+ "eslint-visitor-keys": "^3.4.1",
+ "espree": "^9.5.2",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
+ "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
+ }
+ },
+ "node_modules/eslint-plugin-react-refresh": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.5.tgz",
+ "integrity": "sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==",
+ "dev": true,
+ "peerDependencies": {
+ "eslint": ">=7"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz",
+ "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/eslint/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/eslint/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/eslint/node_modules/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==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/eslint-scope": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz",
+ "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/eslint/node_modules/globals": {
+ "version": "13.20.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
+ "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.5.2",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz",
+ "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.8.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esquery/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.2.12",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
+ "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "node_modules/fastq": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-root": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
+ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+ "dev": true
+ },
+ "node_modules/flux-standard-action": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/flux-standard-action/-/flux-standard-action-2.1.2.tgz",
+ "integrity": "sha512-7vdgawlphCjzaMLdpZv8hlGC/FJCXu6sqE3Wuqe3HLZ22KcDiO4IFplxLDePDhEt6hgCrugt45RoUObuzZP6Kg==",
+ "dependencies": {
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.isstring": "^4.0.1"
+ }
+ },
+ "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/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "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": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/grapheme-splitter": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
+ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+ "dev": true
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "dependencies": {
+ "react-is": "^16.7.0"
+ }
+ },
+ "node_modules/hoist-non-react-statics/node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
+ "node_modules/ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/immer": {
+ "version": "9.0.21",
+ "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz",
+ "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/immer"
+ }
+ },
+ "node_modules/immutable": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz",
+ "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg=="
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/is-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-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
+ "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-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/is-promise": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
+ "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/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/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "node_modules/lodash-es": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
+ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
+ "dev": true
+ },
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
+ },
+ "node_modules/lodash.isstring": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+ "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/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/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/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.6",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
+ "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "node_modules/natural-compare-lite": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
+ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
+ "dev": true
+ },
+ "node_modules/node-fetch": {
+ "version": "2.6.11",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz",
+ "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "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/postcss": {
+ "version": "8.4.24",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz",
+ "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.6",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
+ "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.21"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+ "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+ "peer": 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/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/react": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.0"
+ },
+ "peerDependencies": {
+ "react": "^18.2.0"
+ }
+ },
+ "node_modules/react-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-redux": {
+ "version": "8.0.7",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.7.tgz",
+ "integrity": "sha512-1vRQuCQI5Y2uNmrMXg81RXKiBHY3jBzvCvNmZF437O/Z9/pZ+ba2uYHbemYXb3g8rjsacBGo+/wmfrQKzMhJsg==",
+ "dependencies": {
+ "@babel/runtime": "^7.12.1",
+ "@types/hoist-non-react-statics": "^3.3.1",
+ "@types/use-sync-external-store": "^0.0.3",
+ "hoist-non-react-statics": "^3.3.2",
+ "react-is": "^18.0.0",
+ "use-sync-external-store": "^1.0.0"
+ },
+ "peerDependencies": {
+ "@reduxjs/toolkit": "^1 || ^2.0.0-beta.0",
+ "@types/react": "^16.8 || ^17.0 || ^18.0",
+ "@types/react-dom": "^16.8 || ^17.0 || ^18.0",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0",
+ "react-native": ">=0.59",
+ "redux": "^4 || ^5.0.0-beta.0"
+ },
+ "peerDependenciesMeta": {
+ "@reduxjs/toolkit": {
+ "optional": true
+ },
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ },
+ "react-native": {
+ "optional": true
+ },
+ "redux": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-router": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.11.2.tgz",
+ "integrity": "sha512-74z9xUSaSX07t3LM+pS6Un0T55ibUE/79CzfZpy5wsPDZaea1F8QkrsiyRnA2YQ7LwE/umaydzXZV80iDCPkMg==",
+ "dependencies": {
+ "@remix-run/router": "1.6.2"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "react": ">=16.8"
+ }
+ },
+ "node_modules/react-router-dom": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.11.2.tgz",
+ "integrity": "sha512-JNbKtAeh1VSJQnH6RvBDNhxNwemRj7KxCzc5jb7zvDSKRnPWIFj9pO+eXqjM69gQJ0r46hSz1x4l9y0651DKWw==",
+ "dependencies": {
+ "@remix-run/router": "1.6.2",
+ "react-router": "6.11.2"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "react": ">=16.8",
+ "react-dom": ">=16.8"
+ }
+ },
+ "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/reactn": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/reactn/-/reactn-1.0.0.tgz",
+ "integrity": "sha512-6i0KHxHZsIz3XNOHZe9LErrYMXMrADfAGzgNS3+Hd+BFTocJJb4f8myIZOvXCkrDGW0ALpqPnLjrFFwBUdmimA==",
+ "dependencies": {
+ "use-force-update": "^1.0.0"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/redux": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz",
+ "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==",
+ "dependencies": {
+ "@babel/runtime": "^7.9.2"
+ }
+ },
+ "node_modules/redux-promise": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/redux-promise/-/redux-promise-0.6.0.tgz",
+ "integrity": "sha512-R2mGxJbPFgXyCNbFDE6LjTZhCEuACF54g1bxld3nqBhnRMX0OsUyWk77moF7UMGkUdl5WOAwc4BC5jOd1dunqQ==",
+ "dependencies": {
+ "flux-standard-action": "^2.0.3",
+ "is-promise": "^2.1.0"
+ }
+ },
+ "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.8",
+ "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz",
+ "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ=="
+ },
+ "node_modules/resolve": {
+ "version": "1.22.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
+ "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
+ "dependencies": {
+ "is-core-module": "^2.11.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "3.23.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.23.0.tgz",
+ "integrity": "sha512-h31UlwEi7FHihLe1zbk+3Q7z1k/84rb9BSwmBSr/XjOCEaBJ2YyedQDuM0t/kfOS0IxM+vk1/zI9XxYj9V+NJQ==",
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=14.18.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/sass": {
+ "version": "1.62.1",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.62.1.tgz",
+ "integrity": "sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==",
+ "dependencies": {
+ "chokidar": ">=3.0.0 <4.0.0",
+ "immutable": "^4.0.0",
+ "source-map-js": ">=0.6.2 <2.0.0"
+ },
+ "bin": {
+ "sass": "sass.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.5.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
+ "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/semver/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/semver/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/stylis": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
+ "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="
+ },
+ "node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/sweetalert2": {
+ "version": "11.7.12",
+ "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.7.12.tgz",
+ "integrity": "sha512-TQJy8mQymJLzqWPQOMQErd81Zd/rSYr0UL4pEc7bqEihtjS+zt7LWJXLhfPp93e+Hf3Z2FHMB6QGNskAMCsdTg==",
+ "funding": {
+ "type": "individual",
+ "url": "https://github.com/sponsors/limonte"
+ }
+ },
+ "node_modules/symbol-observable": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
+ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "node_modules/to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+ },
+ "node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
+ "node_modules/tsutils": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.8.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ },
+ "peerDependencies": {
+ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
+ }
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz",
+ "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==",
+ "dev": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=12.20"
+ }
+ },
+ "node_modules/universal-user-agent": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
+ "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
+ },
+ "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-force-update": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/use-force-update/-/use-force-update-1.0.11.tgz",
+ "integrity": "sha512-h4SICYgTJHon8w9dFIqdqR1Vrzdgl4YaRfRwhmAh01kBGljzTICanyfaFU8C4etuEfRdYpE+04XX2ZrEhOWKXQ==",
+ "funding": {
+ "type": "individual",
+ "url": "https://github.com/sponsors/CharlesStover"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/use-history": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/use-history/-/use-history-1.4.1.tgz",
+ "integrity": "sha512-uY12M/GI4c2AW/YR/1SLrveP407kLJnsvH42787QeT5PvVB5/TI1SJrPmTreC2dPMjeEywSAeqsXTqRMHl7F9Q==",
+ "dependencies": {
+ "react": "^16.8.6",
+ "reactn": "^1.0.0"
+ }
+ },
+ "node_modules/use-history/node_modules/react": {
+ "version": "16.14.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz",
+ "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1",
+ "prop-types": "^15.6.2"
+ },
+ "engines": {
+ "node": ">=0.10.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.3.9",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz",
+ "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==",
+ "dependencies": {
+ "esbuild": "^0.17.5",
+ "postcss": "^8.4.23",
+ "rollup": "^3.21.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/vite-plugin-mkcert": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/vite-plugin-mkcert/-/vite-plugin-mkcert-1.15.0.tgz",
+ "integrity": "sha512-0Pz7iExvo7pS2HsxMe6Y/HIrsFJidXN8Sju7tsL1XYQdbUKb/D0L5Wkj3UoGQmbbWZUFf8nHHa0XYbd4FH6ZrA==",
+ "dependencies": {
+ "@octokit/rest": "^19.0.5",
+ "axios": "^1.2.2",
+ "debug": "^4.3.4",
+ "picocolors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=v16.7.0"
+ },
+ "peerDependencies": {
+ "vite": ">=3"
+ }
+ },
+ "node_modules/vite-plugin-sass-dts": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/vite-plugin-sass-dts/-/vite-plugin-sass-dts-1.3.5.tgz",
+ "integrity": "sha512-yGm5uRTDq1qc17ZMJV0bQRgxNfw2a/Ejqc/T2NOILXmcR1z9zHpqqo1FwoDddyTV87GDQZYldqKZOE4O5bGBOw==",
+ "dependencies": {
+ "postcss-js": "^4.0.1"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8",
+ "prettier": "^2.7",
+ "sass": "*",
+ "vite": "^3 || ^4"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+ },
+ "node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "node_modules/yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.21.4",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz",
+ "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==",
+ "requires": {
+ "@babel/highlight": "^7.18.6"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.21.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz",
+ "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==",
+ "requires": {
+ "@babel/types": "^7.21.4"
+ }
+ },
+ "@babel/helper-string-parser": {
+ "version": "7.21.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz",
+ "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w=="
+ },
+ "@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/runtime": {
+ "version": "7.22.3",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.3.tgz",
+ "integrity": "sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ==",
+ "requires": {
+ "regenerator-runtime": "^0.13.11"
+ }
+ },
+ "@babel/types": {
+ "version": "7.22.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.4.tgz",
+ "integrity": "sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==",
+ "requires": {
+ "@babel/helper-string-parser": "^7.21.5",
+ "@babel/helper-validator-identifier": "^7.19.1",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@emotion/babel-plugin": {
+ "version": "11.11.0",
+ "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz",
+ "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==",
+ "requires": {
+ "@babel/helper-module-imports": "^7.16.7",
+ "@babel/runtime": "^7.18.3",
+ "@emotion/hash": "^0.9.1",
+ "@emotion/memoize": "^0.8.1",
+ "@emotion/serialize": "^1.1.2",
+ "babel-plugin-macros": "^3.1.0",
+ "convert-source-map": "^1.5.0",
+ "escape-string-regexp": "^4.0.0",
+ "find-root": "^1.1.0",
+ "source-map": "^0.5.7",
+ "stylis": "4.2.0"
+ },
+ "dependencies": {
+ "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=="
+ }
+ }
+ },
+ "@emotion/cache": {
+ "version": "11.11.0",
+ "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz",
+ "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==",
+ "requires": {
+ "@emotion/memoize": "^0.8.1",
+ "@emotion/sheet": "^1.2.2",
+ "@emotion/utils": "^1.2.1",
+ "@emotion/weak-memoize": "^0.3.1",
+ "stylis": "4.2.0"
+ }
+ },
+ "@emotion/hash": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz",
+ "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ=="
+ },
+ "@emotion/is-prop-valid": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz",
+ "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==",
+ "requires": {
+ "@emotion/memoize": "^0.8.1"
+ }
+ },
+ "@emotion/memoize": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz",
+ "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA=="
+ },
+ "@emotion/react": {
+ "version": "11.11.0",
+ "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.0.tgz",
+ "integrity": "sha512-ZSK3ZJsNkwfjT3JpDAWJZlrGD81Z3ytNDsxw1LKq1o+xkmO5pnWfr6gmCC8gHEFf3nSSX/09YrG67jybNPxSUw==",
+ "requires": {
+ "@babel/runtime": "^7.18.3",
+ "@emotion/babel-plugin": "^11.11.0",
+ "@emotion/cache": "^11.11.0",
+ "@emotion/serialize": "^1.1.2",
+ "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1",
+ "@emotion/utils": "^1.2.1",
+ "@emotion/weak-memoize": "^0.3.1",
+ "hoist-non-react-statics": "^3.3.1"
+ }
+ },
+ "@emotion/serialize": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz",
+ "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==",
+ "requires": {
+ "@emotion/hash": "^0.9.1",
+ "@emotion/memoize": "^0.8.1",
+ "@emotion/unitless": "^0.8.1",
+ "@emotion/utils": "^1.2.1",
+ "csstype": "^3.0.2"
+ }
+ },
+ "@emotion/sheet": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz",
+ "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA=="
+ },
+ "@emotion/styled": {
+ "version": "11.11.0",
+ "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz",
+ "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==",
+ "requires": {
+ "@babel/runtime": "^7.18.3",
+ "@emotion/babel-plugin": "^11.11.0",
+ "@emotion/is-prop-valid": "^1.2.1",
+ "@emotion/serialize": "^1.1.2",
+ "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1",
+ "@emotion/utils": "^1.2.1"
+ }
+ },
+ "@emotion/unitless": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz",
+ "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ=="
+ },
+ "@emotion/use-insertion-effect-with-fallbacks": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz",
+ "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==",
+ "requires": {}
+ },
+ "@emotion/utils": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz",
+ "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg=="
+ },
+ "@emotion/weak-memoize": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz",
+ "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww=="
+ },
+ "@esbuild/android-arm": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz",
+ "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==",
+ "optional": true
+ },
+ "@esbuild/android-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz",
+ "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==",
+ "optional": true
+ },
+ "@esbuild/android-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz",
+ "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==",
+ "optional": true
+ },
+ "@esbuild/darwin-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz",
+ "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==",
+ "optional": true
+ },
+ "@esbuild/darwin-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz",
+ "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==",
+ "optional": true
+ },
+ "@esbuild/freebsd-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz",
+ "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==",
+ "optional": true
+ },
+ "@esbuild/freebsd-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz",
+ "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==",
+ "optional": true
+ },
+ "@esbuild/linux-arm": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz",
+ "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==",
+ "optional": true
+ },
+ "@esbuild/linux-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz",
+ "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==",
+ "optional": true
+ },
+ "@esbuild/linux-ia32": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz",
+ "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==",
+ "optional": true
+ },
+ "@esbuild/linux-loong64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz",
+ "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==",
+ "optional": true
+ },
+ "@esbuild/linux-mips64el": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz",
+ "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==",
+ "optional": true
+ },
+ "@esbuild/linux-ppc64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz",
+ "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==",
+ "optional": true
+ },
+ "@esbuild/linux-riscv64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz",
+ "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==",
+ "optional": true
+ },
+ "@esbuild/linux-s390x": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz",
+ "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==",
+ "optional": true
+ },
+ "@esbuild/linux-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz",
+ "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==",
+ "optional": true
+ },
+ "@esbuild/netbsd-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz",
+ "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==",
+ "optional": true
+ },
+ "@esbuild/openbsd-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz",
+ "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==",
+ "optional": true
+ },
+ "@esbuild/sunos-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz",
+ "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==",
+ "optional": true
+ },
+ "@esbuild/win32-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz",
+ "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==",
+ "optional": true
+ },
+ "@esbuild/win32-ia32": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz",
+ "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==",
+ "optional": true
+ },
+ "@esbuild/win32-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz",
+ "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==",
+ "optional": true
+ },
+ "@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "@eslint-community/regexpp": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz",
+ "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==",
+ "dev": true
+ },
+ "@eslint/eslintrc": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz",
+ "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.5.2",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "dependencies": {
+ "globals": {
+ "version": "13.20.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
+ "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ }
+ }
+ },
+ "@eslint/js": {
+ "version": "8.41.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz",
+ "integrity": "sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==",
+ "dev": true
+ },
+ "@fortawesome/fontawesome-common-types": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.0.tgz",
+ "integrity": "sha512-HNii132xfomg5QVZw0HwXXpN22s7VBHQBv9CeOu9tfJnhsWQNd2lmTNi8CSrnw5B+5YOmzu1UoPAyxaXsJ6RgQ=="
+ },
+ "@fortawesome/fontawesome-free": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.0.tgz",
+ "integrity": "sha512-0NyytTlPJwB/BF5LtRV8rrABDbe3TdTXqNB3PdZ+UUUZAEIrdOJdmABqKjt4AXwIoJNaRVVZEXxpNrqvE1GAYQ=="
+ },
+ "@fortawesome/fontawesome-svg-core": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.0.tgz",
+ "integrity": "sha512-Bertv8xOiVELz5raB2FlXDPKt+m94MQ3JgDfsVbrqNpLU9+UE2E18GKjLKw+d3XbeYPqg1pzyQKGsrzbw+pPaw==",
+ "peer": true,
+ "requires": {
+ "@fortawesome/fontawesome-common-types": "6.4.0"
+ }
+ },
+ "@fortawesome/free-brands-svg-icons": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.4.0.tgz",
+ "integrity": "sha512-qvxTCo0FQ5k2N+VCXb/PZQ+QMhqRVM4OORiO6MXdG6bKolIojGU/srQ1ptvKk0JTbRgaJOfL2qMqGvBEZG7Z6g==",
+ "requires": {
+ "@fortawesome/fontawesome-common-types": "6.4.0"
+ }
+ },
+ "@fortawesome/free-regular-svg-icons": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.4.0.tgz",
+ "integrity": "sha512-ZfycI7D0KWPZtf7wtMFnQxs8qjBXArRzczABuMQqecA/nXohquJ5J/RCR77PmY5qGWkxAZDxpnUFVXKwtY/jPw==",
+ "requires": {
+ "@fortawesome/fontawesome-common-types": "6.4.0"
+ }
+ },
+ "@fortawesome/free-solid-svg-icons": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.0.tgz",
+ "integrity": "sha512-kutPeRGWm8V5dltFP1zGjQOEAzaLZj4StdQhWVZnfGFCvAPVvHh8qk5bRrU4KXnRRRNni5tKQI9PBAdI6MP8nQ==",
+ "requires": {
+ "@fortawesome/fontawesome-common-types": "6.4.0"
+ }
+ },
+ "@fortawesome/react-fontawesome": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz",
+ "integrity": "sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==",
+ "requires": {
+ "prop-types": "^15.8.1"
+ }
+ },
+ "@humanwhocodes/config-array": {
+ "version": "0.11.8",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
+ "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
+ "dev": true,
+ "requires": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ }
+ },
+ "@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true
+ },
+ "@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "@mui/base": {
+ "version": "5.0.0-beta.4",
+ "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.4.tgz",
+ "integrity": "sha512-ejhtqYJpjDgHGEljjMBQWZ22yEK0OzIXNa7toJmmXsP4TT3W7xVy8bTJ0TniPDf+JNjrsgfgiFTDGdlEhV1E+g==",
+ "requires": {
+ "@babel/runtime": "^7.21.0",
+ "@emotion/is-prop-valid": "^1.2.1",
+ "@mui/types": "^7.2.4",
+ "@mui/utils": "^5.13.1",
+ "@popperjs/core": "^2.11.8",
+ "clsx": "^1.2.1",
+ "prop-types": "^15.8.1",
+ "react-is": "^18.2.0"
+ }
+ },
+ "@mui/core-downloads-tracker": {
+ "version": "5.13.4",
+ "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.4.tgz",
+ "integrity": "sha512-yFrMWcrlI0TqRN5jpb6Ma9iI7sGTHpytdzzL33oskFHNQ8UgrtPas33Y1K7sWAMwCrr1qbWDrOHLAQG4tAzuSw=="
+ },
+ "@mui/material": {
+ "version": "5.13.4",
+ "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.13.4.tgz",
+ "integrity": "sha512-Yq+4f1KLPa/Szd3xqra2hbOAf2Usl8GbubncArM6LIp40mBLtXIdPE29MNtHsbtuzz4g+eidrETgoi3wdbEYfQ==",
+ "requires": {
+ "@babel/runtime": "^7.21.0",
+ "@mui/base": "5.0.0-beta.4",
+ "@mui/core-downloads-tracker": "^5.13.4",
+ "@mui/system": "^5.13.2",
+ "@mui/types": "^7.2.4",
+ "@mui/utils": "^5.13.1",
+ "@types/react-transition-group": "^4.4.6",
+ "clsx": "^1.2.1",
+ "csstype": "^3.1.2",
+ "prop-types": "^15.8.1",
+ "react-is": "^18.2.0",
+ "react-transition-group": "^4.4.5"
+ }
+ },
+ "@mui/private-theming": {
+ "version": "5.13.1",
+ "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.1.tgz",
+ "integrity": "sha512-HW4npLUD9BAkVppOUZHeO1FOKUJWAwbpy0VQoGe3McUYTlck1HezGHQCfBQ5S/Nszi7EViqiimECVl9xi+/WjQ==",
+ "requires": {
+ "@babel/runtime": "^7.21.0",
+ "@mui/utils": "^5.13.1",
+ "prop-types": "^15.8.1"
+ }
+ },
+ "@mui/styled-engine": {
+ "version": "5.13.2",
+ "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.13.2.tgz",
+ "integrity": "sha512-VCYCU6xVtXOrIN8lcbuPmoG+u7FYuOERG++fpY74hPpEWkyFQG97F+/XfTQVYzlR2m7nPjnwVUgATcTCMEaMvw==",
+ "requires": {
+ "@babel/runtime": "^7.21.0",
+ "@emotion/cache": "^11.11.0",
+ "csstype": "^3.1.2",
+ "prop-types": "^15.8.1"
+ }
+ },
+ "@mui/system": {
+ "version": "5.13.2",
+ "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.13.2.tgz",
+ "integrity": "sha512-TPyWmRJPt0JPVxacZISI4o070xEJ7ftxpVtu6LWuYVOUOINlhoGOclam4iV8PDT3EMQEHuUrwU49po34UdWLlw==",
+ "requires": {
+ "@babel/runtime": "^7.21.0",
+ "@mui/private-theming": "^5.13.1",
+ "@mui/styled-engine": "^5.13.2",
+ "@mui/types": "^7.2.4",
+ "@mui/utils": "^5.13.1",
+ "clsx": "^1.2.1",
+ "csstype": "^3.1.2",
+ "prop-types": "^15.8.1"
+ }
+ },
+ "@mui/types": {
+ "version": "7.2.4",
+ "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz",
+ "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==",
+ "requires": {}
+ },
+ "@mui/utils": {
+ "version": "5.13.1",
+ "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.13.1.tgz",
+ "integrity": "sha512-6lXdWwmlUbEU2jUI8blw38Kt+3ly7xkmV9ljzY4Q20WhsJMWiNry9CX8M+TaP/HbtuyR8XKsdMgQW7h7MM3n3A==",
+ "requires": {
+ "@babel/runtime": "^7.21.0",
+ "@types/prop-types": "^15.7.5",
+ "@types/react-is": "^18.2.0",
+ "prop-types": "^15.8.1",
+ "react-is": "^18.2.0"
+ }
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@octokit/auth-token": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz",
+ "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ=="
+ },
+ "@octokit/core": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.1.tgz",
+ "integrity": "sha512-tEDxFx8E38zF3gT7sSMDrT1tGumDgsw5yPG6BBh/X+5ClIQfMH/Yqocxz1PnHx6CHyF6pxmovUTOfZAUvQ0Lvw==",
+ "requires": {
+ "@octokit/auth-token": "^3.0.0",
+ "@octokit/graphql": "^5.0.0",
+ "@octokit/request": "^6.0.0",
+ "@octokit/request-error": "^3.0.0",
+ "@octokit/types": "^9.0.0",
+ "before-after-hook": "^2.2.0",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "@octokit/endpoint": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.5.tgz",
+ "integrity": "sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA==",
+ "requires": {
+ "@octokit/types": "^9.0.0",
+ "is-plain-object": "^5.0.0",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "@octokit/graphql": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz",
+ "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==",
+ "requires": {
+ "@octokit/request": "^6.0.0",
+ "@octokit/types": "^9.0.0",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "@octokit/openapi-types": {
+ "version": "17.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-17.2.0.tgz",
+ "integrity": "sha512-MazrFNx4plbLsGl+LFesMo96eIXkFgEtaKbnNpdh4aQ0VM10aoylFsTYP1AEjkeoRNZiiPe3T6Gl2Hr8dJWdlQ=="
+ },
+ "@octokit/plugin-paginate-rest": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz",
+ "integrity": "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==",
+ "requires": {
+ "@octokit/tsconfig": "^1.0.2",
+ "@octokit/types": "^9.2.3"
+ }
+ },
+ "@octokit/plugin-request-log": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz",
+ "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==",
+ "requires": {}
+ },
+ "@octokit/plugin-rest-endpoint-methods": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.1.3.tgz",
+ "integrity": "sha512-0aoPd4f1k/KXPTGSX0NbxcBrShBHArgcW3pujEvLa6wUfcfA1BehxQ2Ifwa6CbJ4SfzaO79FvGgaUipoxDsgjA==",
+ "requires": {
+ "@octokit/types": "^9.2.3"
+ }
+ },
+ "@octokit/request": {
+ "version": "6.2.5",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.5.tgz",
+ "integrity": "sha512-z83E8UIlPNaJUsXpjD8E0V5o/5f+vJJNbNcBwVZsX3/vC650U41cOkTLjq4PKk9BYonQGOnx7N17gvLyNjgGcQ==",
+ "requires": {
+ "@octokit/endpoint": "^7.0.0",
+ "@octokit/request-error": "^3.0.0",
+ "@octokit/types": "^9.0.0",
+ "is-plain-object": "^5.0.0",
+ "node-fetch": "^2.6.7",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "@octokit/request-error": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz",
+ "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==",
+ "requires": {
+ "@octokit/types": "^9.0.0",
+ "deprecation": "^2.0.0",
+ "once": "^1.4.0"
+ }
+ },
+ "@octokit/rest": {
+ "version": "19.0.11",
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.11.tgz",
+ "integrity": "sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw==",
+ "requires": {
+ "@octokit/core": "^4.2.1",
+ "@octokit/plugin-paginate-rest": "^6.1.2",
+ "@octokit/plugin-request-log": "^1.0.4",
+ "@octokit/plugin-rest-endpoint-methods": "^7.1.2"
+ }
+ },
+ "@octokit/tsconfig": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz",
+ "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA=="
+ },
+ "@octokit/types": {
+ "version": "9.2.3",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.2.3.tgz",
+ "integrity": "sha512-MMeLdHyFIALioycq+LFcA71v0S2xpQUX2cw6pPbHQjaibcHYwLnmK/kMZaWuGfGfjBJZ3wRUq+dOaWsvrPJVvA==",
+ "requires": {
+ "@octokit/openapi-types": "^17.2.0"
+ }
+ },
+ "@popperjs/core": {
+ "version": "2.11.8",
+ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
+ "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A=="
+ },
+ "@reduxjs/toolkit": {
+ "version": "1.9.5",
+ "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.5.tgz",
+ "integrity": "sha512-Rt97jHmfTeaxL4swLRNPD/zV4OxTes4la07Xc4hetpUW/vc75t5m1ANyxG6ymnEQ2FsLQsoMlYB2vV1sO3m8tQ==",
+ "requires": {
+ "immer": "^9.0.21",
+ "redux": "^4.2.1",
+ "redux-thunk": "^2.4.2",
+ "reselect": "^4.1.8"
+ }
+ },
+ "@remix-run/router": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.6.2.tgz",
+ "integrity": "sha512-LzqpSrMK/3JBAVBI9u3NWtOhWNw5AMQfrUFYB0+bDHTSw17z++WJLsPsxAuK+oSddsxk4d7F/JcdDPM1M5YAhA=="
+ },
+ "@swc/core": {
+ "version": "1.3.62",
+ "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.62.tgz",
+ "integrity": "sha512-J58hWY+/G8vOr4J6ZH9hLg0lMSijZtqIIf4HofZezGog/pVX6sJyBJ40dZ1ploFkDIlWTWvJyqtpesBKS73gkQ==",
+ "requires": {
+ "@swc/core-darwin-arm64": "1.3.62",
+ "@swc/core-darwin-x64": "1.3.62",
+ "@swc/core-linux-arm-gnueabihf": "1.3.62",
+ "@swc/core-linux-arm64-gnu": "1.3.62",
+ "@swc/core-linux-arm64-musl": "1.3.62",
+ "@swc/core-linux-x64-gnu": "1.3.62",
+ "@swc/core-linux-x64-musl": "1.3.62",
+ "@swc/core-win32-arm64-msvc": "1.3.62",
+ "@swc/core-win32-ia32-msvc": "1.3.62",
+ "@swc/core-win32-x64-msvc": "1.3.62"
+ }
+ },
+ "@swc/core-darwin-arm64": {
+ "version": "1.3.62",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.62.tgz",
+ "integrity": "sha512-MmGilibITz68LEje6vJlKzc2gUUSgzvB3wGLSjEORikTNeM7P8jXVxE4A8fgZqDeudJUm9HVWrxCV+pHDSwXhA==",
+ "optional": true
+ },
+ "@swc/core-darwin-x64": {
+ "version": "1.3.62",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.62.tgz",
+ "integrity": "sha512-Xl93MMB3sCWVlYWuQIB+v6EQgzoiuQYK5tNt9lsHoIEVu2zLdkQjae+5FUHZb1VYqCXIiWcULFfVz0R4Sjb7JQ==",
+ "optional": true
+ },
+ "@swc/core-linux-arm-gnueabihf": {
+ "version": "1.3.62",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.62.tgz",
+ "integrity": "sha512-nJsp6O7kCtAjTTMcIjVB0g5y1JNiYAa5q630eiwrnaHUusEFoANDdORI3Z9vXeikMkng+6yIv9/V8Rb093xLjQ==",
+ "optional": true
+ },
+ "@swc/core-linux-arm64-gnu": {
+ "version": "1.3.62",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.62.tgz",
+ "integrity": "sha512-XGsV93vpUAopDt5y6vPwbK1Nc/MlL55L77bAZUPIiosWD1cWWPHNtNSpriE6+I+JiMHe0pqtfS/SSTk6ZkFQVw==",
+ "optional": true
+ },
+ "@swc/core-linux-arm64-musl": {
+ "version": "1.3.62",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.62.tgz",
+ "integrity": "sha512-ESUmJjSlTTkoBy9dMG49opcNn8BmviqStMhwyeD1G8XRnmRVCZZgoBOKdvCXmJhw8bQXDhZumeaTUB+OFUKVXg==",
+ "optional": true
+ },
+ "@swc/core-linux-x64-gnu": {
+ "version": "1.3.62",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.62.tgz",
+ "integrity": "sha512-wnHJkt3ZBrax3SFnUHDcncG6mrSg9ZZjMhQV9Mc3JL1x1s1Gy9rGZCoBNnV/BUZWTemxIBcQbANRSDut/WO+9A==",
+ "optional": true
+ },
+ "@swc/core-linux-x64-musl": {
+ "version": "1.3.62",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.62.tgz",
+ "integrity": "sha512-9oRbuTC/VshB66Rgwi3pTq3sPxSTIb8k9L1vJjES+dDMKa29DAjPtWCXG/pyZ00ufpFZgkGEuAHH5uqUcr1JQg==",
+ "optional": true
+ },
+ "@swc/core-win32-arm64-msvc": {
+ "version": "1.3.62",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.62.tgz",
+ "integrity": "sha512-zv14vlF2VRrxS061XkfzGjCYnOrEo5glKJjLK5PwUKysIoVrx/L8nAbFxjkX5cObdlyoqo+ekelyBPAO+4bS0w==",
+ "optional": true
+ },
+ "@swc/core-win32-ia32-msvc": {
+ "version": "1.3.62",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.62.tgz",
+ "integrity": "sha512-8MC/PZQSsOP2iA/81tAfNRqMWyEqTS/8zKUI67vPuLvpx6NAjRn3E9qBv7iFqH79iqZNzqSMo3awnLrKZyFbcw==",
+ "optional": true
+ },
+ "@swc/core-win32-x64-msvc": {
+ "version": "1.3.62",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.62.tgz",
+ "integrity": "sha512-GJSmUJ95HKHZXAxiuPUmrcm/S3ivQvEzXhOZaIqYBIwUsm02vFZkClsV7eIKzWjso1t0+I/8MjrnUNaSWqh1rQ==",
+ "optional": true
+ },
+ "@types/hoist-non-react-statics": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz",
+ "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==",
+ "requires": {
+ "@types/react": "*",
+ "hoist-non-react-statics": "^3.3.0"
+ }
+ },
+ "@types/json-schema": {
+ "version": "7.0.12",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz",
+ "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "20.2.5",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz",
+ "integrity": "sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==",
+ "devOptional": 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.2.7",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.7.tgz",
+ "integrity": "sha512-ojrXpSH2XFCmHm7Jy3q44nXDyN54+EYKP2lBhJ2bqfyPj6cIUW/FZW/Csdia34NQgq7KYcAlHi5184m4X88+yw==",
+ "requires": {
+ "@types/prop-types": "*",
+ "@types/scheduler": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "@types/react-dom": {
+ "version": "18.2.4",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz",
+ "integrity": "sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==",
+ "devOptional": true,
+ "requires": {
+ "@types/react": "*"
+ }
+ },
+ "@types/react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-1vz2yObaQkLL7YFe/pme2cpvDsCwI1WXIfL+5eLz0MI9gFG24Re16RzUsI8t9XZn9ZWvgLNDrJBmrqXJO7GNQQ==",
+ "requires": {
+ "@types/react": "*"
+ }
+ },
+ "@types/react-transition-group": {
+ "version": "4.4.6",
+ "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz",
+ "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==",
+ "requires": {
+ "@types/react": "*"
+ }
+ },
+ "@types/redux-promise": {
+ "version": "0.5.29",
+ "resolved": "https://registry.npmjs.org/@types/redux-promise/-/redux-promise-0.5.29.tgz",
+ "integrity": "sha512-lCBCTiJCweYtW5YgOIAG400dAi2Cr2IW6mfh1eZ8WqgxTRqPZjLAFQzxQ6oRZaB9g8mdzr28vOc3CAo8y/Na2w==",
+ "dev": true,
+ "requires": {
+ "redux": "^3.6.0"
+ },
+ "dependencies": {
+ "redux": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz",
+ "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.2.1",
+ "lodash-es": "^4.2.1",
+ "loose-envify": "^1.1.0",
+ "symbol-observable": "^1.0.3"
+ }
+ }
+ }
+ },
+ "@types/scheduler": {
+ "version": "0.16.3",
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz",
+ "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ=="
+ },
+ "@types/semver": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz",
+ "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==",
+ "dev": true
+ },
+ "@types/use-sync-external-store": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz",
+ "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA=="
+ },
+ "@typescript-eslint/eslint-plugin": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.8.tgz",
+ "integrity": "sha512-JDMOmhXteJ4WVKOiHXGCoB96ADWg9q7efPWHRViT/f09bA8XOMLAVHHju3l0MkZnG1izaWXYmgvQcUjTRcpShQ==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/regexpp": "^4.4.0",
+ "@typescript-eslint/scope-manager": "5.59.8",
+ "@typescript-eslint/type-utils": "5.59.8",
+ "@typescript-eslint/utils": "5.59.8",
+ "debug": "^4.3.4",
+ "grapheme-splitter": "^1.0.4",
+ "ignore": "^5.2.0",
+ "natural-compare-lite": "^1.4.0",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/parser": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.8.tgz",
+ "integrity": "sha512-AnR19RjJcpjoeGojmwZtCwBX/RidqDZtzcbG3xHrmz0aHHoOcbWnpDllenRDmDvsV0RQ6+tbb09/kyc+UT9Orw==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/scope-manager": "5.59.8",
+ "@typescript-eslint/types": "5.59.8",
+ "@typescript-eslint/typescript-estree": "5.59.8",
+ "debug": "^4.3.4"
+ }
+ },
+ "@typescript-eslint/scope-manager": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.8.tgz",
+ "integrity": "sha512-/w08ndCYI8gxGf+9zKf1vtx/16y8MHrZs5/tnjHhMLNSixuNcJavSX4wAiPf4aS5x41Es9YPCn44MIe4cxIlig==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.59.8",
+ "@typescript-eslint/visitor-keys": "5.59.8"
+ }
+ },
+ "@typescript-eslint/type-utils": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.8.tgz",
+ "integrity": "sha512-+5M518uEIHFBy3FnyqZUF3BMP+AXnYn4oyH8RF012+e7/msMY98FhGL5SrN29NQ9xDgvqCgYnsOiKp1VjZ/fpA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/typescript-estree": "5.59.8",
+ "@typescript-eslint/utils": "5.59.8",
+ "debug": "^4.3.4",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.8.tgz",
+ "integrity": "sha512-+uWuOhBTj/L6awoWIg0BlWy0u9TyFpCHrAuQ5bNfxDaZ1Ppb3mx6tUigc74LHcbHpOHuOTOJrBoAnhdHdaea1w==",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.8.tgz",
+ "integrity": "sha512-Jy/lPSDJGNow14vYu6IrW790p7HIf/SOV1Bb6lZ7NUkLc2iB2Z9elESmsaUtLw8kVqogSbtLH9tut5GCX1RLDg==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.59.8",
+ "@typescript-eslint/visitor-keys": "5.59.8",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/utils": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.8.tgz",
+ "integrity": "sha512-Tr65630KysnNn9f9G7ROF3w1b5/7f6QVCJ+WK9nhIocWmx9F+TmCAcglF26Vm7z8KCTwoKcNEBZrhlklla3CKg==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@types/json-schema": "^7.0.9",
+ "@types/semver": "^7.3.12",
+ "@typescript-eslint/scope-manager": "5.59.8",
+ "@typescript-eslint/types": "5.59.8",
+ "@typescript-eslint/typescript-estree": "5.59.8",
+ "eslint-scope": "^5.1.1",
+ "semver": "^7.3.7"
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.8.tgz",
+ "integrity": "sha512-pJhi2ms0x0xgloT7xYabil3SGGlojNNKjK/q6dB3Ey0uJLMjK2UDGJvHieiyJVW/7C3KI+Z4Q3pEHkm4ejA+xQ==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.59.8",
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "@vitejs/plugin-react-swc": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.3.2.tgz",
+ "integrity": "sha512-VJFWY5sfoZerQRvJrh518h3AcQt6f/yTuWn4/TRB+dqmYU0NX1qz7qM5Wfd+gOQqUzQW4gxKqKN3KpE/P3+zrA==",
+ "requires": {
+ "@swc/core": "^1.3.61"
+ }
+ },
+ "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
+ },
+ "acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "requires": {}
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "axios": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz",
+ "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==",
+ "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"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "before-after-hook": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz",
+ "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ=="
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
+ },
+ "camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="
+ },
+ "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"
+ }
+ },
+ "chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
+ }
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
+ },
+ "cosmiconfig": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
+ "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
+ "requires": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.2.1",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.10.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "csstype": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
+ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "deprecation": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
+ "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
+ },
+ "dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "requires": {
+ "path-type": "^4.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "dom-helpers": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
+ "requires": {
+ "@babel/runtime": "^7.8.7",
+ "csstype": "^3.0.2"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "esbuild": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz",
+ "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==",
+ "requires": {
+ "@esbuild/android-arm": "0.17.19",
+ "@esbuild/android-arm64": "0.17.19",
+ "@esbuild/android-x64": "0.17.19",
+ "@esbuild/darwin-arm64": "0.17.19",
+ "@esbuild/darwin-x64": "0.17.19",
+ "@esbuild/freebsd-arm64": "0.17.19",
+ "@esbuild/freebsd-x64": "0.17.19",
+ "@esbuild/linux-arm": "0.17.19",
+ "@esbuild/linux-arm64": "0.17.19",
+ "@esbuild/linux-ia32": "0.17.19",
+ "@esbuild/linux-loong64": "0.17.19",
+ "@esbuild/linux-mips64el": "0.17.19",
+ "@esbuild/linux-ppc64": "0.17.19",
+ "@esbuild/linux-riscv64": "0.17.19",
+ "@esbuild/linux-s390x": "0.17.19",
+ "@esbuild/linux-x64": "0.17.19",
+ "@esbuild/netbsd-x64": "0.17.19",
+ "@esbuild/openbsd-x64": "0.17.19",
+ "@esbuild/sunos-x64": "0.17.19",
+ "@esbuild/win32-arm64": "0.17.19",
+ "@esbuild/win32-ia32": "0.17.19",
+ "@esbuild/win32-x64": "0.17.19"
+ }
+ },
+ "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=="
+ },
+ "eslint": {
+ "version": "8.41.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz",
+ "integrity": "sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.4.0",
+ "@eslint/eslintrc": "^2.0.3",
+ "@eslint/js": "8.41.0",
+ "@humanwhocodes/config-array": "^0.11.8",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.0",
+ "eslint-visitor-keys": "^3.4.1",
+ "espree": "^9.5.2",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "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==",
+ "dev": true
+ },
+ "eslint-scope": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz",
+ "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ }
+ },
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ },
+ "globals": {
+ "version": "13.20.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
+ "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "eslint-plugin-react-hooks": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
+ "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
+ "dev": true,
+ "requires": {}
+ },
+ "eslint-plugin-react-refresh": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.5.tgz",
+ "integrity": "sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==",
+ "dev": true,
+ "requires": {}
+ },
+ "eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz",
+ "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==",
+ "dev": true
+ },
+ "espree": {
+ "version": "9.5.2",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz",
+ "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==",
+ "dev": true,
+ "requires": {
+ "acorn": "^8.8.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ }
+ },
+ "esquery": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ }
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.2.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ }
+ }
+ },
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "3.2.12",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
+ "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
+ }
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "fastq": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "dev": true,
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^3.0.4"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-root": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
+ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "requires": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ }
+ },
+ "flatted": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+ "dev": true
+ },
+ "flux-standard-action": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/flux-standard-action/-/flux-standard-action-2.1.2.tgz",
+ "integrity": "sha512-7vdgawlphCjzaMLdpZv8hlGC/FJCXu6sqE3Wuqe3HLZ22KcDiO4IFplxLDePDhEt6hgCrugt45RoUObuzZP6Kg==",
+ "requires": {
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.isstring": "^4.0.1"
+ }
+ },
+ "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"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "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": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.3"
+ }
+ },
+ "globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "requires": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ }
+ },
+ "grapheme-splitter": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
+ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+ "dev": true
+ },
+ "graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
+ },
+ "hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "requires": {
+ "react-is": "^16.7.0"
+ },
+ "dependencies": {
+ "react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ }
+ }
+ },
+ "ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "dev": true
+ },
+ "immer": {
+ "version": "9.0.21",
+ "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz",
+ "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA=="
+ },
+ "immutable": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz",
+ "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg=="
+ },
+ "import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-core-module": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
+ "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+ },
+ "is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true
+ },
+ "is-plain-object": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
+ },
+ "is-promise": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
+ "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
+ "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=="
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "lodash-es": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
+ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
+ "dev": true
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
+ },
+ "lodash.isstring": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+ "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="
+ },
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "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"
+ }
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "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.6",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
+ "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA=="
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "natural-compare-lite": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
+ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
+ "dev": true
+ },
+ "node-fetch": {
+ "version": "2.6.11",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz",
+ "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==",
+ "requires": {
+ "whatwg-url": "^5.0.0"
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ },
+ "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=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "requires": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ }
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
+ },
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
+ },
+ "postcss": {
+ "version": "8.4.24",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz",
+ "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==",
+ "requires": {
+ "nanoid": "^3.3.6",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ }
+ },
+ "postcss-js": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
+ "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+ "requires": {
+ "camelcase-css": "^2.0.1"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true
+ },
+ "prettier": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+ "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+ "peer": 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
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true
+ },
+ "react": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "requires": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "react-dom": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.0"
+ }
+ },
+ "react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
+ },
+ "react-redux": {
+ "version": "8.0.7",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.7.tgz",
+ "integrity": "sha512-1vRQuCQI5Y2uNmrMXg81RXKiBHY3jBzvCvNmZF437O/Z9/pZ+ba2uYHbemYXb3g8rjsacBGo+/wmfrQKzMhJsg==",
+ "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-router": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.11.2.tgz",
+ "integrity": "sha512-74z9xUSaSX07t3LM+pS6Un0T55ibUE/79CzfZpy5wsPDZaea1F8QkrsiyRnA2YQ7LwE/umaydzXZV80iDCPkMg==",
+ "requires": {
+ "@remix-run/router": "1.6.2"
+ }
+ },
+ "react-router-dom": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.11.2.tgz",
+ "integrity": "sha512-JNbKtAeh1VSJQnH6RvBDNhxNwemRj7KxCzc5jb7zvDSKRnPWIFj9pO+eXqjM69gQJ0r46hSz1x4l9y0651DKWw==",
+ "requires": {
+ "@remix-run/router": "1.6.2",
+ "react-router": "6.11.2"
+ }
+ },
+ "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"
+ }
+ },
+ "reactn": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/reactn/-/reactn-1.0.0.tgz",
+ "integrity": "sha512-6i0KHxHZsIz3XNOHZe9LErrYMXMrADfAGzgNS3+Hd+BFTocJJb4f8myIZOvXCkrDGW0ALpqPnLjrFFwBUdmimA==",
+ "requires": {
+ "use-force-update": "^1.0.0"
+ }
+ },
+ "readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "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-promise": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/redux-promise/-/redux-promise-0.6.0.tgz",
+ "integrity": "sha512-R2mGxJbPFgXyCNbFDE6LjTZhCEuACF54g1bxld3nqBhnRMX0OsUyWk77moF7UMGkUdl5WOAwc4BC5jOd1dunqQ==",
+ "requires": {
+ "flux-standard-action": "^2.0.3",
+ "is-promise": "^2.1.0"
+ }
+ },
+ "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.8",
+ "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz",
+ "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ=="
+ },
+ "resolve": {
+ "version": "1.22.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
+ "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
+ "requires": {
+ "is-core-module": "^2.11.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
+ },
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "rollup": {
+ "version": "3.23.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.23.0.tgz",
+ "integrity": "sha512-h31UlwEi7FHihLe1zbk+3Q7z1k/84rb9BSwmBSr/XjOCEaBJ2YyedQDuM0t/kfOS0IxM+vk1/zI9XxYj9V+NJQ==",
+ "requires": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "sass": {
+ "version": "1.62.1",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.62.1.tgz",
+ "integrity": "sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==",
+ "requires": {
+ "chokidar": ">=3.0.0 <4.0.0",
+ "immutable": "^4.0.0",
+ "source-map-js": ">=0.6.2 <2.0.0"
+ }
+ },
+ "scheduler": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "requires": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "semver": {
+ "version": "7.5.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
+ "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ }
+ }
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ=="
+ },
+ "source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true
+ },
+ "stylis": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
+ "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sweetalert2": {
+ "version": "11.7.12",
+ "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.7.12.tgz",
+ "integrity": "sha512-TQJy8mQymJLzqWPQOMQErd81Zd/rSYr0UL4pEc7bqEihtjS+zt7LWJXLhfPp93e+Hf3Z2FHMB6QGNskAMCsdTg=="
+ },
+ "symbol-observable": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
+ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==",
+ "dev": true
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+ },
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
+ "tsutils": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.8.1"
+ }
+ },
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true
+ },
+ "typescript": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz",
+ "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==",
+ "dev": true
+ },
+ "universal-user-agent": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
+ "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
+ },
+ "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-force-update": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/use-force-update/-/use-force-update-1.0.11.tgz",
+ "integrity": "sha512-h4SICYgTJHon8w9dFIqdqR1Vrzdgl4YaRfRwhmAh01kBGljzTICanyfaFU8C4etuEfRdYpE+04XX2ZrEhOWKXQ==",
+ "requires": {}
+ },
+ "use-history": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/use-history/-/use-history-1.4.1.tgz",
+ "integrity": "sha512-uY12M/GI4c2AW/YR/1SLrveP407kLJnsvH42787QeT5PvVB5/TI1SJrPmTreC2dPMjeEywSAeqsXTqRMHl7F9Q==",
+ "requires": {
+ "react": "^16.8.6",
+ "reactn": "^1.0.0"
+ },
+ "dependencies": {
+ "react": {
+ "version": "16.14.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz",
+ "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1",
+ "prop-types": "^15.6.2"
+ }
+ }
+ }
+ },
+ "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.3.9",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz",
+ "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==",
+ "requires": {
+ "esbuild": "^0.17.5",
+ "fsevents": "~2.3.2",
+ "postcss": "^8.4.23",
+ "rollup": "^3.21.0"
+ }
+ },
+ "vite-plugin-mkcert": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/vite-plugin-mkcert/-/vite-plugin-mkcert-1.15.0.tgz",
+ "integrity": "sha512-0Pz7iExvo7pS2HsxMe6Y/HIrsFJidXN8Sju7tsL1XYQdbUKb/D0L5Wkj3UoGQmbbWZUFf8nHHa0XYbd4FH6ZrA==",
+ "requires": {
+ "@octokit/rest": "^19.0.5",
+ "axios": "^1.2.2",
+ "debug": "^4.3.4",
+ "picocolors": "^1.0.0"
+ }
+ },
+ "vite-plugin-sass-dts": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/vite-plugin-sass-dts/-/vite-plugin-sass-dts-1.3.5.tgz",
+ "integrity": "sha512-yGm5uRTDq1qc17ZMJV0bQRgxNfw2a/Ejqc/T2NOILXmcR1z9zHpqqo1FwoDddyTV87GDQZYldqKZOE4O5bGBOw==",
+ "requires": {
+ "postcss-js": "^4.0.1"
+ }
+ },
+ "webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+ },
+ "whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "requires": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 00000000..ced14204
--- /dev/null
+++ b/package.json
@@ -0,0 +1,50 @@
+{
+ "name": "sale-project",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc && vite build",
+ "lint": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "@emotion/react": "^11.11.0",
+ "@emotion/styled": "^11.11.0",
+ "@fortawesome/fontawesome-free": "^6.4.0",
+ "@fortawesome/free-brands-svg-icons": "^6.4.0",
+ "@fortawesome/free-regular-svg-icons": "^6.4.0",
+ "@fortawesome/free-solid-svg-icons": "^6.4.0",
+ "@fortawesome/react-fontawesome": "^0.2.0",
+ "@mui/material": "^5.13.4",
+ "@reduxjs/toolkit": "^1.9.5",
+ "@vitejs/plugin-react-swc": "^3.3.2",
+ "axios": "^1.4.0",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "react-redux": "^8.0.7",
+ "react-router-dom": "^6.11.2",
+ "redux": "^4.2.1",
+ "redux-promise": "^0.6.0",
+ "redux-thunk": "^2.4.2",
+ "sass": "^1.62.1",
+ "sweetalert2": "^11.7.12",
+ "use-history": "^1.4.1",
+ "vite-plugin-mkcert": "^1.15.0",
+ "vite-plugin-sass-dts": "^1.3.5"
+ },
+ "devDependencies": {
+ "@types/node": "^20.2.5",
+ "@types/react": "^18.0.37",
+ "@types/react-dom": "^18.0.11",
+ "@types/redux-promise": "^0.5.29",
+ "@typescript-eslint/eslint-plugin": "^5.59.0",
+ "@typescript-eslint/parser": "^5.59.0",
+ "eslint": "^8.38.0",
+ "eslint-plugin-react-hooks": "^4.6.0",
+ "eslint-plugin-react-refresh": "^0.3.4",
+ "typescript": "^5.0.2",
+ "vite": "^4.3.9"
+ }
+}
diff --git a/public/_redirects b/public/_redirects
new file mode 100644
index 00000000..54378330
--- /dev/null
+++ b/public/_redirects
@@ -0,0 +1,4 @@
+/cafe24* https://teamwink.cafe24api.com/api/v2/:splat 200
+/iamport* https://api.iamport.kr/:splat 200
+/\* /index.html 200
+/\* /indext.html 404
\ No newline at end of file
diff --git a/public/images/Group 8.png b/public/images/Group 8.png
new file mode 100644
index 00000000..ec2452af
Binary files /dev/null and b/public/images/Group 8.png differ
diff --git a/public/images/Wink_logo.png b/public/images/Wink_logo.png
new file mode 100644
index 00000000..f16b156b
Binary files /dev/null and b/public/images/Wink_logo.png differ
diff --git a/public/images/bookpick.png b/public/images/bookpick.png
new file mode 100644
index 00000000..8b8c7abd
Binary files /dev/null and b/public/images/bookpick.png differ
diff --git a/public/images/carousel1.png b/public/images/carousel1.png
new file mode 100644
index 00000000..a8db2fd5
Binary files /dev/null and b/public/images/carousel1.png differ
diff --git a/public/images/carousel2.png b/public/images/carousel2.png
new file mode 100644
index 00000000..f0a3d848
Binary files /dev/null and b/public/images/carousel2.png differ
diff --git a/public/images/carousel3.png b/public/images/carousel3.png
new file mode 100644
index 00000000..750a85e3
Binary files /dev/null and b/public/images/carousel3.png differ
diff --git a/public/images/cartbookimage.jpg b/public/images/cartbookimage.jpg
new file mode 100644
index 00000000..c7c1ef76
Binary files /dev/null and b/public/images/cartbookimage.jpg differ
diff --git a/public/images/default-profile.jpg b/public/images/default-profile.jpg
new file mode 100644
index 00000000..853a52b6
Binary files /dev/null and b/public/images/default-profile.jpg differ
diff --git a/public/images/pick.png b/public/images/pick.png
new file mode 100644
index 00000000..00fbbb42
Binary files /dev/null and b/public/images/pick.png differ
diff --git a/public/images/search-icon.png b/public/images/search-icon.png
new file mode 100644
index 00000000..fce2ee29
Binary files /dev/null and b/public/images/search-icon.png differ
diff --git a/readme.md b/readme.md
new file mode 100644
index 00000000..410fa409
--- /dev/null
+++ b/readme.md
@@ -0,0 +1,98 @@
+# WinkBook
+
+WinkBook은 e-book을 판매하는 컨셉의 쇼핑몰 사이트 입니다.
+
+총 5개의 도서별 카테고리가 나눠져 있으며 실제 도서 사이트에서 사용하는 상세 설명을 나타내도록 했습니다.
+
+쇼핑몰을 만들 때 충분히 활용할 수 있는 사이트를 개설하자는 목표를 가지고 진행 되었으며, 실제 오픈 Api를 활용하여 기능을 구현하였습니다.
+
+
+
+커머스: ![](https://img.cafe24.com/images/common/cafe24.svg)
+
+결제: ![](https://www.gitbook.com/cdn-cgi/image/width=100,dpr=1,height=40,fit=contain,format=auto/https%3A%2F%2F3026939543-files.gitbook.io%2F~%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FwWX2hlvRZLZrXeH1aacF%252Flogo%252FdtaZNeSUqL59mzfDm6jC%252FPortOne_Logo_Black.png%3Falt%3Dmedia%26token%3Dd66f72ec-8826-4be6-8e09-b0b32ff9a482)
+
+
+
+
+# 배포 사이트
+
+[WinkBook](https://winkbook.netlify.app)
+
+[WinkBook-Admin](https://winkbook-admin.netlify.app)
+
+
+
+
+# 프로젝트 기간
+
+2023.05.30 ~ 2023.07.02
+
+
+
+
+# 기술스택
+
+### Develoment
+
+
+
+
+
+
+
+### Config
+
+
+
+### Enviroment
+
+
+
+
+
+### Deployment
+
+
+
+
+
+
+# 프로젝트 주요 기능
+
+### 메인
+
+- 제품 검색
+- 추천 도서
+- sticky 안내바
+
+### 상세페이지
+
+- 구매, 대여 버튼
+- 장바구니 자동 이동
+
+### 검색
+
+- 구매, 대여 버튼
+- 검색 결과 미리보기
+
+### 마이페이지
+
+- 개인 구매 내역
+- 회원 정보 수정
+
+### 어드민페이지
+
+- 물건 등록/수정/삭제
+- 전체 회원 목록
+- 전체 결제 내역
+
+
+
+
+# 팀원
+
+| [서동욱](https://github.com/foodeco) | [김하은](https://github.com/hahahaday12) | [김세연](https://github.com/saeyeonKim) | [문대현](https://github.com/dhmoon11) | [박진영](https://github.com/jinyoungpark231) |
+| :--------------------------------------------------------: | :-------------------------------------------------------------: | :-------------------------------------------------------------: | :-------------------------------------------------------------: | :------------------------------------------------------------: |
+| ![](https://avatars.githubusercontent.com/u/106901147?v=4) | ![](https://avatars.githubusercontent.com/u/101441685?s=96&v=4) | ![](https://avatars.githubusercontent.com/u/118176015?s=96&v=4) | ![](https://avatars.githubusercontent.com/u/128357255?s=96&v=4) | ![](https://avatars.githubusercontent.com/u/76546374?s=96&v=4) |
+| 메인페이지, 어드민페이지, 카페24&아임포트 토큰 발행 및 api | 장바구니, 마이페이지, 상세페이지, 회원가입, 인증, 결제 및 조회 | 검색페이지, 결제 | 마이페이지, 회원정보 수정 | 검색페이지, 목록조회 |
diff --git a/src/Admin/adminPage.tsx b/src/Admin/adminPage.tsx
new file mode 100644
index 00000000..e69de29b
diff --git a/src/Apis/PaymentToken/paymentToken.ts b/src/Apis/PaymentToken/paymentToken.ts
new file mode 100644
index 00000000..1ec86c99
--- /dev/null
+++ b/src/Apis/PaymentToken/paymentToken.ts
@@ -0,0 +1,13 @@
+import axios from 'axios';
+
+const { VITE_IMP_KEY, VITE_IMP_SECERET } = import.meta.env;
+
+export const ajax = axios({
+ url: '/users/getToken',
+ method: 'post',
+ headers: { 'Content-Type': 'application/json' },
+ data: {
+ imp_key: VITE_IMP_KEY,
+ imp_secret: VITE_IMP_SECERET,
+ },
+});
diff --git a/src/Apis/Token/token.ts b/src/Apis/Token/token.ts
new file mode 100644
index 00000000..de6ffe6f
--- /dev/null
+++ b/src/Apis/Token/token.ts
@@ -0,0 +1,69 @@
+import axios from 'axios';
+
+const { VITE_ACCESS_TOKEN, VITE_REDIRECT_URI } = import.meta.env;
+
+const ajax = axios.create({
+ baseURL: '/cafe24/oauth/token',
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ Authorization: `Basic ${VITE_ACCESS_TOKEN}`,
+ },
+});
+
+interface Token {
+ access_token: string;
+ expires_at: string;
+ refresh_token: string;
+ refresh_token_expires_at: string;
+ client_id: string;
+ mall_id: string;
+ user_id: string;
+ scopes: string[];
+ issued_at: string;
+ shop_no: string;
+}
+
+let token: Token;
+
+export async function getToken() {
+ console.log('get');
+ const params = new URLSearchParams(location.search);
+ try {
+ const { data } = await ajax.post('', {
+ grant_type: 'authorization_code',
+ redirect_uri: VITE_REDIRECT_URI,
+ code: params.get('code'),
+ });
+ token = data;
+ console.log('request', data);
+ setCookie(token.access_token, token.expires_at, token.refresh_token);
+ } catch (err) {
+ console.log(err);
+ }
+}
+
+export async function refreshToken() {
+ try {
+ console.log('refresh');
+ const { data } = await ajax.post('', {
+ grant_type: 'refresh_token',
+ refresh_token: localStorage.getItem('refreshToken'),
+ });
+ token = data;
+ setCookie(token.access_token, token.expires_at, token.refresh_token);
+ console.log('refresh', data);
+ } catch (err) {
+ console.log(err);
+ }
+}
+
+function setCookie(
+ accessToken: string,
+ accessExpires: string,
+ refreshToken: string
+) {
+ document.cookie = `accessToken=${accessToken}; path=/; expires=${new Date(
+ accessExpires
+ ).toUTCString()}`;
+ localStorage.setItem('refreshToken', refreshToken);
+}
diff --git a/src/Apis/adminAuth.ts b/src/Apis/adminAuth.ts
new file mode 100644
index 00000000..20fd2d01
--- /dev/null
+++ b/src/Apis/adminAuth.ts
@@ -0,0 +1,58 @@
+import axios from 'axios';
+import { getToken, refreshToken } from './Token/token';
+
+const { VITE_CAFE24_URL } = import.meta.env;
+const key = new RegExp(`accessToken=([^;]*)`);
+
+const ajax = axios.create({
+ baseURL: VITE_CAFE24_URL,
+ params: {
+ since_product_no: 20,
+ },
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ Authorization: `Basic ${key.test(document.cookie) ? RegExp.$1 : ''}`,
+ },
+});
+
+ajax.interceptors.request.use(
+ async (config) => {
+ const key = new RegExp(`accessToken=([^;]*)`);
+ console.log('config', config);
+ config.headers['Authorization'] = `Bearer ${
+ key.test(document.cookie) ? RegExp.$1 : ''
+ }`;
+
+ return config;
+ },
+ (error) => {
+ console.log(error);
+ return Promise.reject(error);
+ }
+);
+
+ajax.interceptors.response.use(
+ (response) => {
+ if (response.status === 404) {
+ console.log('show 404 error page');
+ }
+ return response;
+ },
+ async (error) => {
+ if (error.response?.status === 401) {
+ const key = new RegExp(`accessToken=([^;]*)`);
+
+ console.log(key.test(document.cookie));
+ if (!key.test(document.cookie) && !localStorage.getItem('refreshToken')) {
+ await getToken();
+ } else {
+ await refreshToken();
+ }
+ error.config.headers = {
+ Authorization: `Bearer ${key.test(document.cookie) ? RegExp.$1 : ''}`,
+ };
+ }
+ }
+);
+
+export default ajax;
diff --git a/src/Apis/common.d.ts b/src/Apis/common.d.ts
new file mode 100644
index 00000000..82fb97c0
--- /dev/null
+++ b/src/Apis/common.d.ts
@@ -0,0 +1,626 @@
+declare type CategoryProducts = CategoryProductsInfo[];
+declare type Products = Product[];
+
+declare type PointsAmout = {
+ payment_method?: string;
+ points_rate?: string;
+};
+
+declare type PointAmount = {
+ payment_method: string;
+ type: string;
+ value: string;
+ rate: string;
+};
+declare type ExpriationDate = {
+ start_date: string;
+ end_date: string;
+};
+declare type PromotionPeriod = {
+ start_date: string;
+ end_date: string;
+ dc_price: string;
+};
+declare type ListIcon = {
+ soldout_icon: boolean;
+ recommend_icon: boolean;
+ new_icon: boolean;
+};
+
+declare type Product = {
+ /** 멀티쇼핑몰 번호
+ * 멀티쇼핑몰 구분을 위해 사용하는 멀티쇼핑몰 번호.
+ */
+ shop_no: number;
+ /** 상품번호
+
+상품의 고유한 일련 번호. 해당 쇼핑몰 내에서 상품 번호는 중복되지 않음. */
+ product_no: number;
+ /** 형식 : [A-Z0-9]
+글자수 최소: [8자]~최대: [8자]
+
+상품코드
+
+시스템이 상품에 부여한 코드. 해당 쇼핑몰 내에서 상품코드는 중복되지 않음.
+ */
+ product_code: string;
+ /** 최대글자수 : [40자]
+
+자체상품 코드
+
+사용자가 상품에 부여 가능한 코드. 재고 관리등의 이유로 자체적으로 상품을 관리 하고 있는 경우 사용함. */
+ custom_product_code: string;
+ /** 최대글자수 : [250자]
+
+상품명
+
+상품의 이름. 상품명은 상품을 구분하는 가장 기초적인 정보이며 검색 정보가 된다. HTML을 사용하여 입력이 가능하다. */
+ product_name: string;
+ /** 최대글자수 : [250자]
+
+영문 상품명
+
+상품의 영문 이름. 해외 배송 등에 사용 가능함. */
+ eng_product_name: string;
+ /** 최대글자수 : [100자]
+
+모델명
+
+상품의 모델명. */
+ model_name: string;
+ /** 상품가(세금 제외) */
+ price_excluding_tax: string;
+ /** 상품 판매가
+
+상품의 판매 가격. 쿠폰 및 혜택을 적용하기 전의 가격.
+상품 등록시엔 모든 멀티 쇼핑몰에 동일한 가격으로 등록하며, 멀티쇼핑몰별로 다른 가격을 입력하고자 할 경우 상품 수정을 통해 가격을 다르게 입력할 수 있다.
+※ 판매가 = [ 공급가 + (공급가 * 마진율) + 추가금액 ] */
+ price: number;
+ /** 상품 소비자가
+
+시중에 판매되는 소비자 가격. 쇼핑몰의 가격을 강조하기 위한 비교 목적으로 사용함. */
+ retail_price: number;
+ /** 진열상태
+
+상품을 쇼핑몰에 진열할지 여부. 상품을 쇼핑몰에 진열할 경우 설정한 상품분류와 메인화면에 표시된다. 상품이 쇼핑몰에 진열되어 있지 않으면 쇼핑몰 화면에 표시되지 않아 접근할 수 없으며 상품을 구매할 수 없다.
+
+T : 진열함
+F : 진열안함 */
+ display: string;
+ /** 판매상태
+
+상품을 쇼핑몰에 판매할지 여부. 상품을 진열한 상태로 판매를 중지할 경우 상품은 쇼핑몰에 표시되지만 "품절"로 표시되어 상품을 구매할 수 없다. 상품이 "진열안함"일 경우 "판매함" 상태여도 상품에 접근할 수 없기 때문에 구매할 수 없다.
+
+T : 판매함
+F : 판매안함 */
+ selling: string;
+ /** 최대값: [2147483647]
+
+중고상품 사용 개월 */
+ product_used_month: number;
+ /** 최대글자수 : [255자]
+
+상품요약설명
+
+상품에 대한 요약 정보. 상품 진열 화면에서 노출 가능한 설명. HTML을 사용하여 입력이 가능하다.
+[쇼핑몰 설정 > 상품 설정 > '상품 보기 설정 > 상품 정보 표시 설정']에서 노출되도록 설정 가능하다. */
+ summary_description: string;
+ /** 상품 검색어
+
+검색 또는 분류를 위하여 상품에 입력하는 검색어 정보(해시태그) */
+ product_tag: string;
+ /** 세금 계산 유형
+
+A : 자동 계산
+M : 수동 계산 */
+ tax_calculation: string;
+ /** 최대글자수 : [20자]
+
+판매가 대체문구
+
+상품의 가격 대신 표시되는 문구. 품절이나 상품이 일시적으로 판매 불가할 때 사용. */
+ price_content: string | null;
+ /** 구매제한 개별 설정여부
+
+T : 사용함
+F : 사용안함 */
+ buy_limit_by_product: string;
+ /** 구매제한
+
+해당 상품을 구매할 수 있는 회원 정보 표시.
+
+N : 회원만 구매하며
+구매버튼 감추기
+M : 회원만 구매하며
+구매버튼 보이기
+F : 구매제한 안함
+O : 지정된 회원만 구매하며 구매버튼 감추기
+D : 지정된 회원만 구매하며 구매버튼 보이기 */
+ buy_limit_type: string;
+ /** 구매가능 회원 등급 */
+ buy_group_list: number[];
+ /** 구매가능 회원아이디 */
+ buy_member_id_list: string[];
+ /** 재구매 제한
+
+T : 재구매 불가
+F : 제한안함 */
+ repurchase_restriction: string;
+ /** 단독구매 제한
+
+T : 단독구매 불가
+F : 제한안함 */
+ single_purchase_restriction: string;
+ /** 구매단위 타입
+
+해당 상품의 구매 단위를 1개 이상으로 설정한 경우 해당 구매 단위를 품목 단위로 할 것인지, 상품 단위로 할 것인지에 대한 설정
+
+P : 상품 기준
+O : 품목 기준 */
+ buy_unit_type: string;
+ /** 구매단위
+
+구매할 수 있는 최소한의 단위 표시.
+예) 구매 주문단위가 세 개일 경우, 3개, 6개, 9개 단위로 구매 가능함. */
+ buy_unit: number;
+ /** 주문수량 제한 기준
+
+해당 상품의 주문 수량 제한시 제한 기준을 품목 단위로 할 것인지, 상품 단위로 할 것인지에 대한 설정
+
+P : 상품 기준
+O : 품목 기준 */
+ order_quantity_limit_type: string;
+ /** 최대값: [2147483647]
+
+최소 주문수량
+
+주문 가능한 최소한의 주문 수량. 주문 수량 미만으로 구매 할 수 없음. */
+ minimum_quantity: number;
+ /** 최대값: [2147483647]
+
+최대 주문수량
+
+주문 가능한 최대한의 주문 수량. 주문 수량을 초과하여 구매 할 수 없음.
+
+최대 주문수량이 "제한없음"일 경우 "0"으로 표시된다. */
+ maximum_quantity: number;
+ /** 적립금 개별설정 사용여부
+
+F : 기본설정 사용
+T : 개별설정 */
+ points_by_product: string;
+ /** 결제방식별 적립금 설정 여부
+
+B : 기본 적립금설정 사용
+C : 결제방식에 따른 적립 */
+ points_setting_by_payment: string;
+ /** 적립금 설정 정보 */
+ points_amount: PointsAmout[];
+ /** 성인인증
+
+성인인증이 필요한 상품인지 여부. 성인인증이 필요한 상품인 구매를 위해서는 본인인증을 거쳐야함.
+
+T : 사용함
+F : 사용안함 */
+ adult_certification: string;
+ /** 상세이미지
+
+상품 상세 화면에 표시되는 상품 이미지. */
+ detail_image: string;
+ /** 목록이미지
+
+상품 분류 화면, 메인 화면, 상품 검색 화면에 표시되는 상품의 목록 이미지. */
+ list_image: string;
+ /** 작은목록이미지
+
+최근 본 상품 영역에 표시되는 상품의 목록 이미지. */
+ tiny_image: string;
+ /** 축소이미지
+
+상품 상세 화면 하단에 표시되는 상품 목록 이미지. */
+ small_image: string;
+ /** 네이버페이 사용여부
+
+T : 사용함
+F : 사용안함 */
+ use_naverpay: string | null;
+ /** 네이버페이 판매타입
+
+C : 네이버페이 + 쇼핑몰 동시판매 상품
+O : 네이버페이 전용상품 */
+ naverpay_type: string | null;
+ /** 형식 : [A-Z0-9]
+글자수 최소: [8자]~최대: [8자]
+
+제조사 코드
+
+제조사를 등록하면 자동으로 생성되는 코드로 상품에 특정 제조사를 지정할 때 사용.
+
+미입력시 자체제작(M0000000) 사용 */
+ manufacturer_code: string;
+ /** 형식 : [A-Z0-9]
+글자수 최소: [8자]~최대: [8자]
+
+트렌드 코드
+
+트렌드를 등록하면 자동으로 생성되는 코드로 상품에 특정 트렌드를 지정할 때 사용.
+
+미입력시 기본트렌드(T0000000) 사용 */
+ trend_code: string;
+ /** 형식 : [A-Z0-9]
+글자수 최소: [8자]~최대: [8자]
+
+브랜드 코드
+
+브랜드를 등록하면 자동으로 생성되는 코드로 상품에 특정 브랜드를 지정할 때 사용.
+
+미입력시 자체브랜드(B0000000) 사용 */
+ brand_code: string;
+ /** 제조일자
+
+상품을 제조한 제조일자. */
+ made_date: string;
+ /** 배열 최대사이즈: [2]
+
+유효기간
+
+상품을 정상적으로 사용할 수 있는 기간. 상품권이나 티켓 같은 무형 상품, 식품이나 화장품 같은 유형 상품의 유효기간을 표시.
+
+주로 상품권이나 티켓 같은 무형 상품에 사용되며, 해당 무형 상품의 유효기간을 표시. */
+ expiration_date: ExpriationDate;
+ /** 원산지 국내/국외/기타
+
+F : 국내
+T : 국외
+E : 기타 */
+ origin_classification: string;
+ /** 원산지 번호
+
+원산지 번호를 List all Origin API를 통해 원산지를 조회하여 입력
+origin_classification이 F(국내)인 경우, 해외 여부(foreign)가 "F"인 원산지만 입력 가능함.
+origin_classification이 T(해외)인 경우, 해외 여부(foreign)가 "T"인 원산지만 입력 가능함. */
+ origin_place_no: number;
+ /** 최대글자수 : [30자]
+
+원산지기타정보
+
+원산지가 "기타(1800)"일 경우 원산지로 입력 가능한 정보. */
+ origin_place_value: string;
+ /** 원산지 국가코드 */
+ made_in_code: string;
+ /** 아이콘 노출 기간
+
+상품에 설정한 아이콘이 노출되는 기간. */
+ icon_show_period: ExpriationDate;
+ /** 배열 최대사이즈: [5]
+
+아이콘
+
+상품에 표시되는 아이콘. 상품 판매를 강조하기 위한 목적으로 사용이 가능함. */
+ icon: string[];
+ /** 상품소재
+
+상품의 소재. 복합 소재일 경우 상품의 소재와 함유랑을 함께 입력해야함. (예 : 면 80%, 레이온 20%) */
+ product_material: string;
+ /** 추천 / 품절 / 신상품 아이콘 노출 여부
+
+추천, 품절, 신상품 아이콘을 목록에서 표시하는지 여부
+
+※ 품절 아이콘
+
+● 상품이 품절 상태임을 알려주는 아이콘
+● 재고관리 및 품절 기능을 사용하는 상품에 대해 재고가 없을 경우 표시
+
+※ 추천, 신상품 아이콘
+
+● 상품분류나 메인화면의 추천상품, 신상품 영역에 진열된 상품인 경우, 설정에 따라 해당 아이콘을 표시함
+
+※ 아이콘 노출 여부 설정위치 : [쇼핑몰 설정 > 상품 설정 > '상품 정책 설정 > 상품 관련 설정 > 상품 아이콘 설정'] */
+ list_icon: ListIcon;
+ /** 승인요청 결과
+
+N : 승인요청 (신규상품)
+E : 승인요청 (상품수정)
+C : 승인완료
+R : 승인거절
+I : 검수진행중
+Empty Value : 요청된적 없음 */
+ approve_status: string;
+ /** 품절여부
+
+T : 품절
+F : 품절아님 */
+ sold_out: string;
+ /** 형식 : [A-Z0-9]
+글자수 최소: [8자]~최대: [8자]
+
+해외통관코드 */
+ clearance_category_code: string;
+ /** 표시제한 범위
+
+A : 모두에게 표시
+M : 회원에게만 표시 */
+ exposure_limit_type: string;
+ /** 표시대상 회원 등급 */
+ exposure_group_list: number[];
+ /** 세트상품 타입
+
+C : 일반세트
+S : 분리세트 */
+ set_product_type: string | null;
+ /** 카카오페이 사용여부
+
+T : 사용함
+F : 사용안함 */
+ use_kakaopay: string | null;
+ /** 배송비 타입
+
+(개별배송비를 사용할 경우) 상품의 배송비 타입.
+shipping_calculation이 A(자동계산)일 경우 null로 반환.
+
+T : 배송비 무료
+R : 고정배송비 사용
+M : 구매 금액에 따른 부과
+D : 구매 금액별 차등 배송료 사용
+W : 상품 무게별 차등 배송료 사용
+C : 상품 수량별 차등 배송료 사용
+N : 상품 수량에 비례하여 배송료 부과 */
+ shipping_fee_type: string;
+ /** 메인진열
+
+상품을 "추천상품", "신상품"과 같은 메인진열에 진열할 경우, 메인 진열 번호를 표시한다. */
+ main: number[] | null;
+ /** 메모 리소스
+
+조회시 Embed 파라메터를 사용하여 조회할 수 있다. */
+ memos: string;
+ /** 상품 조회수 리소스
+
+조회시 Embed 파라메터를 사용하여 조회할 수 있다. */
+ hits: string;
+ /** 상품 Seo 리소스
+
+조회시 Embed 파라메터를 사용하여 조회할 수 있다. */
+ seo: string;
+ /** 분류 번호
+
+해당 상품이 진열되어있는 상품 분류. */
+ category: any;
+ /** 기획전 번호 */
+ project_no: any;
+ /** 상품상세설명
+
+상품에 보다 상세한 정보가 포함되어있는 설명. HTML을 사용하여 입력이 가능하다. */
+ description: string;
+ /** 모바일 상품 상세설명
+
+입력시 모바일 쇼핑몰에서 상품상세설명 대신 모바일 상품 상세 설명을 대신 표시함. */
+ mobile_description: string;
+ /** 모바일 별도 등록
+
+T : 직접등록
+F : 상품 상세설명 동일 */
+ separated_mobile_description: string;
+ /** 상품결제안내
+
+상품의 결제 방법에 대한 안내 문구. HTML을 사용하여 입력이 가능하다. */
+ payment_info: string;
+ /** 상품배송안내
+
+상품의 배송 방법에 대한 안내 문구. HTML을 사용하여 입력이 가능하다. */
+ shipping_info: string;
+ /** 교환/반품안내
+
+상품의 교환/반품 방법에 대한 안내 문구. HTML을 사용하여 입력이 가능하다. */
+ exchange_info: string;
+ /** 서비스문의/안내
+
+제품의 사후 고객 서비스 방법 대한 안내 문구. HTML을 사용하여 입력이 가능하다. */
+ service_info: string;
+ /** 부가세 표시 문구
+
+[쇼핑몰 설정 > 상품 설정 > '상품 보기 설정 > 상품 정보 표시 설정 > 추가설정 > 판매가 부가세 표시문구']에서 설정한 문구 표시
+tax_calculation이 A(자동계산)일 경우 null로 반환됨. */
+ product_tax_type_text: string | null;
+ /** 상품 간략 설명
+
+상품에 대한 간략한 정보. 상품 진열 화면에서 노출 가능한 설명. HTML을 사용하여 입력이 가능하다.
+[쇼핑몰 설정 > 상품 설정 > '상품 보기 설정 > 상품 정보 표시 설정']에서 노출되도록 설정 가능하다. */
+ simple_description: string;
+ /** 상품 태그 리소스
+
+조회시 Embed 파라메터를 사용하여 조회할 수 있다. */
+ tags: string;
+ /** 옵션 사용여부
+
+해당 상품이 옵션을 갖고 있는지에 대한 여부. 옵션을 갖고 있는 상품은 사이즈나 색상과 같은 다양한 선택지를 제공한다.
+
+T : 옵션사용함
+F : 옵션 사용안함 */
+ has_option: string;
+ /** 옵션 구성방식
+
+옵션을 사용할 경우, 옵션의 유형 표시
+
+● 조합 일체선택형 : 하나의 셀렉스박스(버튼 이나 라디오버튼)에 모든 옵션이 조합되어 표시됨
+● 조합 분리선택형 : 옵션을 각각의 셀렉스박스(버튼 이나 라디오버튼)로 선택할 수 있으며 옵션명을 기준으로 옵션값을 조합할 수 있음
+● 상품 연동형 : 옵션표시방식은 조합형과 유사하지만 필수옵션과 선택옵션을 선택할 수 있음. 옵션의 조합을 제한 없이 생성할 수 있음.
+● 독립 선택형 : 독립적인 조건 여러개를 각각 선택할 수 있는 옵션으로 옵션 값이 조합되지 않고 각각의 품목으로 생성됨.
+
+C : 조합 일체선택형
+S : 조합 분리선택형
+E : 상품 연동형
+F : 독립 선택형 */
+ option_type: string | null;
+ /** 배송 계산 유형
+
+A : 자동 계산
+M : 수동 계산 */
+ shipping_calculation: string;
+ /** 배송방법
+
+(개별배송비를 사용할 경우) 배송 수단 및 방법
+shipping_calculation이 A(자동계산)일 경우 null로 반환.
+
+01 : 택배
+02 : 빠른등기
+03 : 일반등기
+04 : 직접배송
+05 : 퀵배송
+06 : 기타
+07 : 화물배송
+08 : 매장직접수령
+09 : 배송필요 없음 */
+ shipping_method: string | null;
+ /** 배송비 선결제 설정
+
+shipping_calculation이 A(자동계산)일 경우 null로 반환.
+
+C : 착불
+P : 선결제
+B : 선결제/착불 */
+ prepaid_shipping_fee: string | null;
+ /** 배송기간
+
+(개별배송비를 사용할 경우) 상품 배송시 평균적으로 소요되는 배송 기간.
+shipping_calculation이 A(자동계산)일 경우 null로 반환.
+ */
+ shipping_period: string | null;
+ /** 배송정보
+
+국내에만 배송이 가능한 상품인지 해외에도 배송이 가능한 상품인지 표시. [쇼핑몰 설정 > 배송 설정 > '배송 정책 설정 > 배송비 설정 > 개별배송비 설정'] 에서 상품별 개별배송료 설정이 사용안함인 경우 설정 불가.
+shipping_calculation이 A(자동계산)일 경우 null로 반환.
+
+A : 국내배송
+C : 해외배송
+B : 국내/해외배송 */
+ shipping_scope: string | null;
+ /** 최대글자수 : [255자]
+
+배송지역
+
+(개별배송비를 사용할 경우) 상품을 배송할 수 있는 지역.
+shipping_calculation이 A(자동계산)일 경우 null로 반환. */
+ shipping_area: string | null;
+ /** 구간별 배송비
+
+개별배송비를 사용할 경우 상품의 개별 배송비.
+
+shipping_fee_type이 R, N일 경우 배열 안에 shipping_fee를 정의하여 배송비를 설정할 수 있다.
+
+shipping_fee_type이 M, D, W, C일 경우 배열 안에 다음과 같이 정의하여 배송비 구간을 설정할 수 있다.
+shipping_rates_min : 배송비 구간 시작 기준
+shipping_rates_max : 배송비 구간 종료 기준
+shipping_fee : 배송비
+
+shipping_calculation이 A(자동계산)일 경우 null로 반환. */
+ shipping_rates: string | null;
+ /** 원산지 코드
+
+상품의 원산지 코드.
+ */
+ origin_place_code: number;
+ /** 추가항목
+
+[쇼핑몰 설정 > 상품 설정 > '상품 보기 설정 > 상품 정보 표시 설정']에서 추가한 추가항목.
+
+기본적인 상품 정보 외에 추가로 표시항 항목이 있을 때 추가하여 사용함. */
+ additional_information: string | null;
+ /** 관련상품
+
+해당 상품과 비슷한 상품 혹은 대체 가능한 상품. 관련 상품 등록시 해당 상품의 상세페이지 하단에 노출된다.
+ */
+ relational_product: string | null;
+ /** 옵션별로 한 개씩 선택 (독립형 옵션)
+
+독립형 옵션을 사용할 경우, 하나의 옵션을 여러개 중복하여 선택할 수 없고 한개씩만 선택 가능함.
+
+T : 사용함
+F : 사용안함 */
+ select_one_by_option: string;
+};
+
+declare type CategoryProductsInfo = {
+ /** 멀티쇼핑몰 번호 */
+ shop_no: number;
+ /** 상품번호 */
+ product_no: number;
+ /** 상품명 */
+ product_name: string;
+ /** 제조사 */
+ manufacturer_name: string;
+ /** 원산지 */
+ origin_place_value: string;
+ /** 상품 소비자가 */
+ retail_price: string;
+ /** 판매가 */
+ price: string;
+ /** 무이자할부 기간 */
+ interest_free_period: string;
+ /** 영문 상품명 */
+ eng_product_name: string;
+ /** 자체상품 코드 */
+ custom_product_code: string;
+ /** 적립금 */
+ point_amount: PointAmount[];
+ /** 브랜드 명 */
+ brand_name: string;
+ /** 모델명 */
+ model_name: string;
+ /** 상품 판매가 */
+ price_excluding_tax: string;
+ /** 세액 */
+ tax: string;
+ /** 상품코드 */
+ product_code: string;
+ /** 상품 간략 설명 */
+ simple_description: string;
+ /** 상품요약설명 */
+ summary_description: string;
+ /** 공급사명 */
+ supplier_name: string;
+ /** 제조일자 */
+ made_date: string;
+ /** 사용후기 갯수 */
+ review_count: number;
+ /** 유효기간 */
+ expiration_date: ExpriationDate;
+ /** 쿠폰적용가 */
+ coupon_discounted_price: string;
+ /** 트렌드 명 */
+ trend_name: string;
+ /** 배송정보 */
+ shipping_scope: string;
+ /** 배송비 타입
+ * T : 배송비 무료
+ * R : 고정배송비 사용
+ * M : 구매 금액에 따른 부과
+ * D : 구매 금액별 차등 배송료 사용
+ * W : 상품 무게별 차등 배송료 사용
+ * C : 상품 수량별 차등 배송료 사용
+ * N : 상품 수량에 비례하여 배송료 부과
+ */
+ shipping_fee_type: string;
+ /** 구간별 배송비 */
+ shipping_rates: string;
+ /** 배송비 */
+ shipping_fee: string;
+ /** 할인판매가 */
+ discount_price: string;
+ /** 최적할인가 */
+ optimum_discount_price: string;
+ /** 배송방법 */
+ shipping_method: string;
+ /** 할인 기간 */
+ promotion_period: PromotionPeriod;
+ /** 상품색상 */
+ color: string[];
+ /** 상품 추가설명 번역정보 */
+ translated_additional_description: string;
+ /** 재고수량 */
+ stock_quantity: number;
+ /** 상품문의(수) */
+ question_count: number;
+ /** 상품자유게시판(수) */
+ product_article_count: number;
+};
diff --git a/src/Apis/productApi.ts b/src/Apis/productApi.ts
new file mode 100644
index 00000000..5649f758
--- /dev/null
+++ b/src/Apis/productApi.ts
@@ -0,0 +1,67 @@
+import axios from 'axios';
+
+const { VITE_CLIENT_ID, VITE_IMP_KEY, VITE_IMP_SECRET } = import.meta.env;
+
+const ajax = axios.create({
+ baseURL: '/cafe24',
+ headers: {
+ 'Content-Type': 'application/json',
+ 'X-Cafe24-Api-Version': '2023-03-01',
+ 'X-Cafe24-Client-Id': VITE_CLIENT_ID,
+ },
+});
+
+interface GetList {
+ category?: number;
+ product_no?: string;
+ limit?: number;
+}
+export async function getList(info: GetList) {
+ try {
+ const { data } = await ajax.get('/products', {
+ params: {
+ display: 'T',
+ selling: 'T',
+ category: info.category,
+ product_no: info.product_no,
+ limit: info.limit
+ },
+ });
+ return data.products;
+ } catch (err) {
+ console.log(err);
+ }
+}
+
+export async function getRecommand() {
+ try {
+ const res = await ajax.get('/mains/2/products');
+ return res.data;
+ } catch (err) {
+ console.log(err);
+ }
+}
+
+export async function getDetail(product_no: string) {
+ try {
+ const res = await ajax.get(`/products/${product_no}`);
+ return res.data;
+ } catch (err) {
+ console.log(err);
+ }
+}
+
+export const MypageToken = async () => {
+
+ const response = await axios.post('/iamport/users/getToken',
+ {
+ imp_key: VITE_IMP_KEY,
+ imp_secret: VITE_IMP_SECRET,
+ },
+ {
+ headers: { 'Content-Type': 'application/json' },
+ }
+ );
+ const accessToken = response.data.response.access_token;
+ return accessToken;
+}
\ No newline at end of file
diff --git a/src/Apis/register.tsx b/src/Apis/register.tsx
new file mode 100644
index 00000000..711d498f
--- /dev/null
+++ b/src/Apis/register.tsx
@@ -0,0 +1,74 @@
+import axios from 'axios';
+
+const { VITE_KDT5_API, VITE_KDT5_USER } = import.meta.env;
+
+const headers = {
+ 'Content-Type': 'application/json',
+ apikey: VITE_KDT5_API,
+ username: VITE_KDT5_USER,
+};
+
+const axiosInstance = axios.create({
+ baseURL: 'https://asia-northeast3-heropy-api.cloudfunctions.net/api/auth',
+ headers,
+});
+
+export const JoinForm = async (
+ email: string,
+ displayName: string,
+ password: string,
+ profileImgBase64: string
+) => {
+ const URL = '/signup';
+ const res = await axiosInstance.post(URL, {
+ email,
+ displayName,
+ password,
+ profileImgBase64,
+ });
+ return res.data;
+};
+
+export const LoginForm = async (email: string, password: string) => {
+ const LOGINURL = '/login';
+ const res = await axiosInstance.post(LOGINURL, { email, password });
+ return res.data;
+};
+
+export const LogoutForm = async () => {
+ const LOGOUTURL = '/logout';
+ const token = localStorage.getItem('token') as string;
+ const res = await axiosInstance.post(
+ LOGOUTURL,
+ {},
+ { headers: { ...headers, Authorization: `Bearer ${token}` } }
+ );
+ return res.data;
+};
+
+export const TokenMe = async () => {
+ const AUTHME = '/me';
+ const token = localStorage.getItem('token') as string;
+ const res = await axiosInstance.post(
+ AUTHME,
+ {},
+ { headers: { ...headers, Authorization: `Bearer ${token}` } }
+ );
+ return res.data;
+};
+
+export const InfoToken = async (
+ displayName: string,
+ profileImgBase64: string,
+ oldPassword: string,
+ newPassword: string
+) => {
+ const InfoMe = '/user';
+ const token = localStorage.getItem('token') as string;
+ const res = await axiosInstance.put(
+ InfoMe,
+ { displayName, profileImgBase64, oldPassword, newPassword },
+ { headers: { ...headers, Authorization: `Bearer ${token}` } }
+ );
+ return res.data;
+};
diff --git a/src/App.scss b/src/App.scss
new file mode 100644
index 00000000..c55d2909
--- /dev/null
+++ b/src/App.scss
@@ -0,0 +1,25 @@
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+body {
+ margin: 0;
+ background-color: #f8ede3;
+ font-family: "SUITE-Regular";
+ width: 100%;
+ // padding: 0 20px;
+}
+
+a {
+ text-decoration: none;
+}
+
+@font-face {
+ font-family: "SUITE-Regular";
+ src: url("https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_2304-2@1.0/SUITE-Regular.woff2")
+ format("woff2");
+ font-weight: 400;
+ font-style: normal;
+}
diff --git a/src/App.tsx b/src/App.tsx
new file mode 100644
index 00000000..9c11872e
--- /dev/null
+++ b/src/App.tsx
@@ -0,0 +1,12 @@
+import './App.scss';
+import RoutesPage from './routes/routes';
+
+function App() {
+ return (
+ <>
+
+ >
+ );
+}
+
+export default App;
diff --git a/src/Common/Form/Login/login.scss b/src/Common/Form/Login/login.scss
new file mode 100644
index 00000000..f872a5ae
--- /dev/null
+++ b/src/Common/Form/Login/login.scss
@@ -0,0 +1,67 @@
+@import '../Signin/join.scss';
+
+.LoginContainer {
+ @include Container;
+ font-family: 'SUITE-Regular';
+
+ .loginContainer-inner {
+ @include FormContainerStyle;
+
+ .JoinTextContainer {
+ @include Textbox;
+
+ p {
+ margin: auto;
+ font-size: 30px;
+ }
+ }
+
+ .formBox {
+ width: 400px;
+ height: 280px;
+ margin: 0 auto;
+
+ .formBox-inner {
+ width: 300px;
+ height: 95px;
+ margin: 0 auto;
+
+ input {
+ width: 100%;
+ height: 50px;
+ margin-top: 10px;
+ border-radius: 10px;
+ padding: 10px 10px 10px 10px;
+ border: 2px solid #f7e9d7;
+ outline: none;
+ font-family: 'SUITE-Regular';
+ }
+ }
+
+ .buttonContainer {
+ width: 210px;
+ height: 50px;
+ margin: 0 auto;
+ text-align: center;
+ }
+
+ .buttonBox {
+ width: 200px;
+ height: 50px;
+ color: black;
+ background-color: #f7e9d7;
+ cursor: pointer;
+ border-radius: 10px;
+ }
+ }
+ }
+
+ .bottomText {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 50px;
+ font-size: 18px;
+ margin-top: 30px;
+ }
+}
diff --git a/src/Common/Form/Login/login.tsx b/src/Common/Form/Login/login.tsx
new file mode 100644
index 00000000..d7eb27a1
--- /dev/null
+++ b/src/Common/Form/Login/login.tsx
@@ -0,0 +1,113 @@
+import './login.scss';
+import { useNavigate, Link } from 'react-router-dom';
+import { FormEvent, useState, ChangeEvent } from 'react';
+import { useEffect } from 'react';
+import { LoginForm } from '@/Apis/register';
+import Swal from 'sweetalert2';
+
+function Login() {
+ const navigate = useNavigate();
+ const [email, setEmail] = useState('');
+ const [password, setPassword] = useState('');
+
+ const onChangeEmail = (e: ChangeEvent) => {
+ setEmail(e.target.value);
+ };
+
+ const onChangeName = (e: ChangeEvent) => {
+ setPassword(e.target.value);
+ };
+
+ useEffect(() => {
+ const token = localStorage.getItem('token');
+ if (token) {
+ navigate('/');
+ }
+ }, []);
+
+ async function Signin(event: FormEvent) {
+ event.preventDefault();
+
+ if (email === undefined || email === '' || email === null) {
+ Swal.fire('이메일을 입력해주세요!', '', 'warning');
+ return false;
+ }
+
+ if (password === undefined || password === '' || password === null) {
+ Swal.fire('비밀번호를 입력해주세요!', '', 'warning');
+ return false;
+ }
+
+ try {
+ const data = await LoginForm(email, password);
+ console.log(data);
+
+ if (data.accessToken) {
+ window.localStorage.setItem('token', data.accessToken);
+ Swal.fire('로그인 되었습니다!', '반갑습니다:)', 'success').then(() => {
+ navigate('/');
+ });
+ }
+ } catch (error) {
+ console.error(error);
+ Swal.fire('로그인에 실패하였습니다:(', '다시 시도해주세요!', 'error');
+ }
+ }
+
+ return (
+ <>
+
+
+
+
+
+
아이디가 없으신가요?
+
+
회원가입 하러 가기!
+
+
+
+
+ >
+ );
+}
+export default Login;
diff --git a/src/Common/Form/Signin/join.scss b/src/Common/Form/Signin/join.scss
new file mode 100644
index 00000000..163bb6b1
--- /dev/null
+++ b/src/Common/Form/Signin/join.scss
@@ -0,0 +1,107 @@
+@mixin Container {
+ padding-top: 80px;
+ max-width: 1200px;
+ padding-bottom: 80px;
+ position: relative;
+ margin: 0 auto;
+}
+
+@mixin FormContainerStyle {
+ width: 500px;
+ height: 730px;
+ position: relative;
+ border-radius: 10px;
+ padding-top: 50px;
+
+ top: 30px;
+ margin: auto;
+ background-color: white;
+ box-shadow: 10px 10px 26px gray, -12px -12px 36px white;
+}
+
+@mixin Textbox {
+ width: 200px;
+ height: 50px;
+ display: flex;
+ margin: 0 auto 30px;
+}
+
+.joinContainer {
+ @include Container;
+ font-family: 'SUITE-Regular';
+
+ .joinContainer-inner {
+ @include FormContainerStyle;
+
+ .textContainer {
+ @include Textbox;
+ p {
+ margin: auto;
+ font-size: 30px;
+ }
+ }
+
+ .formBox {
+ width: 400px;
+ margin: 0 auto;
+
+ .formBox-inner {
+ width: 300px;
+ height: 95px;
+ margin: 0 auto;
+
+ input {
+ width: 100%;
+ height: 50px;
+ margin-top: 10px;
+ border-radius: 10px;
+ padding: 10px 10px 10px 10px;
+ border: 2px solid #f7e9d7;
+ outline: none;
+ font-family: '';
+ }
+
+ span {
+ width: 260px;
+ margin: 0 auto;
+ display: flex;
+ }
+ }
+
+ .buttonContainer {
+ width: 210px;
+ height: 50px;
+ margin: 0 auto;
+ }
+
+ .buttonBox {
+ width: 200px;
+ height: 50px;
+ color: black;
+ background-color: #f7e9d7;
+ border-radius: 10px;
+ cursor: pointer;
+ }
+ }
+
+ .uploadFilebox {
+ width: 200px;
+ padding-bottom: 20px;
+ position: relative;
+ margin: 0 auto;
+
+ .uploadFilebox-inner {
+ width: 200px;
+ padding-bottom: 10px;
+
+ span {
+ margin-left: 20px;
+ }
+
+ input {
+ margin-top: 20px;
+ }
+ }
+ }
+ }
+}
diff --git a/src/Common/Form/Signin/join.tsx b/src/Common/Form/Signin/join.tsx
new file mode 100644
index 00000000..abc4c969
--- /dev/null
+++ b/src/Common/Form/Signin/join.tsx
@@ -0,0 +1,265 @@
+import { FormEvent, useState, useCallback } from "react";
+import { useNavigate } from "react-router-dom";
+import { PwCheck, emailCheck } from "../Validation ";
+import { JoinForm } from "@/Apis/register";
+import "./join.scss";
+import Swal from "sweetalert2";
+
+function Join() {
+ const navigate = useNavigate();
+
+ // 이름 , 비밀번호, 이메일 , 비밀번호 확인
+ const [email, setUserEmail] = useState("");
+ const [displayName, setdDisplayName] = useState("");
+ const [password, setUserPassword] = useState("");
+ const [confirmPassword, setConfirmPassword] = useState("");
+ const [profileImgBase64, setProfileImgBase64] = useState("");
+
+ //비밀번호 유효성 검사
+ const [isName, setIsName] = useState(false);
+ const [isEmail, setIsEmail] = useState(false);
+ const [isPassword, setIsPassword] = useState(false);
+ const [isPasswordConfirm, setIsPasswordConfirm] = useState(false);
+
+ //오류 메세지 저장
+ const [nameMessage, setNameMessage] = useState("");
+ const [emailMessage, setEmailMessage] = useState("");
+ const [passwordMessage, setPasswordMessage] = useState("");
+ const [passwordConfirmMessage, setPasswordConfirmMessage] = useState("");
+
+ const onChangeEmail = useCallback(
+ (e: React.ChangeEvent) => {
+ const emails = e.target.value;
+ setUserEmail(emails);
+ if (emailCheck(emails)) {
+ setEmailMessage("올바른 이메일 형식이에요 : )");
+ setIsEmail(true);
+ } else {
+ setEmailMessage("이메일 형식이 틀렸습니다");
+ setIsEmail(false);
+ }
+ },
+ []
+ );
+
+ const onChangeName = useCallback((e: React.ChangeEvent) => {
+ setdDisplayName(e.target.value);
+ if (e.target.value.length < 2 || e.target.value.length > 21) {
+ setNameMessage("2글자 이상 21글자 미만으로 입력해주세요.");
+ setIsName(false);
+ } else {
+ setNameMessage("올바른 이름 형식입니다 :)");
+ setIsName(true);
+ }
+ }, []);
+
+ const onChangePassword = useCallback(
+ (e: React.ChangeEvent) => {
+ const passwordCurrent = e.target.value;
+ setUserPassword(passwordCurrent);
+
+ if (!PwCheck(passwordCurrent)) {
+ setPasswordMessage("8자리 이상 입력해주세요.");
+ setIsPassword(false);
+ } else {
+ setPasswordMessage("안전한 비밀번호에요 : )");
+ setIsPassword(true);
+ }
+ },
+ [confirmPassword]
+ );
+
+ const onChangePasswordConfirm = (
+ password: any,
+ confirmPassword: any,
+ setPasswordConfirmMessage: any,
+ setIsPasswordConfirm: any
+ ) => {
+ if (password === confirmPassword) {
+ setPasswordConfirmMessage("비밀번호를 똑같이 입력했어요 : )");
+ setIsPasswordConfirm(true);
+ } else {
+ setPasswordConfirmMessage("비밀번호가 틀립니다. 다시 입력해주세요.");
+ setIsPasswordConfirm(false);
+ }
+ };
+
+ const onPasswordConfirmChange = useCallback(
+ (e: React.ChangeEvent) => {
+ const passwordConfirmCurrent = e.target.value;
+ setConfirmPassword(passwordConfirmCurrent);
+ onChangePasswordConfirm(
+ password,
+ passwordConfirmCurrent,
+ setPasswordConfirmMessage,
+ setIsPasswordConfirm
+ );
+ },
+ [password]
+ );
+
+ const UploadImage = (event: React.ChangeEvent) => {
+ const file = (event.target as HTMLInputElement).files?.[0];
+ if (!file) {
+ return;
+ }
+ const reader = new FileReader();
+
+ reader.onloadend = () => {
+ const base64Data = reader.result as string;
+ setProfileImgBase64(base64Data);
+ };
+
+ if (file) {
+ reader.readAsDataURL(file);
+ }
+ };
+
+ async function signUp(event: FormEvent) {
+ event.preventDefault();
+
+ if (!email) {
+ Swal.fire("이메일을 입력해주세요!", "", "warning");
+ return false;
+ }
+
+ if (!isEmail || !isPassword || !isPasswordConfirm) {
+ Swal.fire("값이 잘못 되었습니다.", "다시 입력해주세요", "warning");
+ return false;
+ }
+
+ try {
+ const res = await JoinForm(
+ email,
+ displayName,
+ password,
+ profileImgBase64
+ );
+
+ if (res.accessToken) {
+ Swal.fire("가입되었습니다!", "찾아주셔서 감사합니다:)", "success").then(
+ () => {
+ navigate("/login");
+ }
+ );
+ } else {
+ Swal.fire("가입에 실패했습니다.", "다시 시도해주세요", "error");
+ }
+ } catch (error) {
+ if (error instanceof Error) {
+ if (error.message === "401") {
+ Swal.fire("중복된 아이디입니다.", "", "warning");
+ } else {
+ console.error("오류가 발생했습니다:", error);
+ }
+ } else {
+ console.error("오류가 발생했습니다:", error);
+ }
+ }
+ }
+
+ return (
+ <>
+
+ >
+ );
+}
+
+export default Join;
diff --git a/src/Common/Form/Validation .tsx b/src/Common/Form/Validation .tsx
new file mode 100644
index 00000000..a0607d9e
--- /dev/null
+++ b/src/Common/Form/Validation .tsx
@@ -0,0 +1,11 @@
+// 이메일 체크 여부
+const emailExp = /^[0-9a-zA-Z]([-_\\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/;
+
+export const emailCheck = (mail:string) =>{
+ return emailExp.test(mail) ? true : false;
+}
+
+const PwExp = /^.{8,}$/;
+ export const PwCheck = (password:string) => {
+ return PwExp.test(password) ? true : false;
+}
\ No newline at end of file
diff --git a/src/Common/Layout/Footer/footer.scss b/src/Common/Layout/Footer/footer.scss
new file mode 100644
index 00000000..2b3f7ff2
--- /dev/null
+++ b/src/Common/Layout/Footer/footer.scss
@@ -0,0 +1,62 @@
+footer {
+ display: flex;
+ flex-wrap: wrap;
+ width: 100%;
+ background-color: rgb(255, 255, 255);
+ height: 100px;
+ position: relative;
+ border-top: solid 2px rgb(202, 159, 18);
+ z-index: 9999;
+}
+
+.footerContainer {
+ position: relative;
+ width: 100%;
+ max-width: 100%;
+ margin: 0 auto;
+ height: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: space-around;
+ padding: 0 20px;
+}
+
+.Logo-box {
+ display: flex;
+ align-items: center;
+
+ img {
+ width: 80px;
+ height: 80px;
+ }
+}
+
+.Footer-inner {
+ display: flex;
+ align-items: center;
+ gap: 20px;
+
+ .wrap {
+ display: flex;
+ flex-direction: column;
+ position: relative;
+ justify-content: center;
+ align-items: center;
+ padding: 0 10px;
+
+ &:hover {
+ cursor: pointer;
+ }
+
+ p {
+ font-size: 12px;
+ margin-top: 5px;
+ }
+ }
+}
+
+.title {
+ font-size: 20px;
+ text-align: center;
+ margin: 0;
+}
diff --git a/src/Common/Layout/Footer/footer.tsx b/src/Common/Layout/Footer/footer.tsx
new file mode 100644
index 00000000..f2fc5059
--- /dev/null
+++ b/src/Common/Layout/Footer/footer.tsx
@@ -0,0 +1,91 @@
+import './footer.scss';
+import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
+import { faGithub } from '@fortawesome/free-brands-svg-icons';
+
+const Footer = () => {
+ const Donguk = 'https://github.com/foodeco';
+ const Haeun = 'https://github.com/hahahaday12';
+ const Saeyeon = 'https://github.com/saeyeonKim';
+ const Daehyun = 'https://github.com/dhmoon11';
+ const Jinyoung = 'https://github.com/jinyoungpark231';
+ const Twinkle = 'https://github.com/KDT5TeamWink';
+
+
+ return (
+
+ );
+
+
+};
+export default Footer;
diff --git a/src/Common/Layout/Header/header.tsx b/src/Common/Layout/Header/header.tsx
new file mode 100644
index 00000000..f479e312
--- /dev/null
+++ b/src/Common/Layout/Header/header.tsx
@@ -0,0 +1,208 @@
+import { Link, useNavigate } from 'react-router-dom';
+import { useEffect, useState } from 'react';
+import { ChangeEvent } from 'react';
+import './headers.scss';
+import { LogoutForm, TokenMe } from '@/Apis/register';
+import { getList } from '@/Apis/productApi';
+import Swal from 'sweetalert2';
+
+interface User {
+ displayName: string;
+ profileImg: string;
+}
+
+interface Product {
+ product_no: number;
+ product_name: string;
+ small_image: string;
+ price: number;
+}
+
+function Header() {
+ const defaultProfileImgUrl = '/images/default-profile.jpg';
+ const [user, setUser] = useState({ displayName: '', profileImg: '' });
+ const [keyword, setKeyWord] = useState('');
+ const [filteredItems, setFilteredItems] = useState([]);
+ const [product, setProductInfo] = useState([]);
+ const [showInputButton, setShowInputButton] = useState(false);
+ const navigate = useNavigate();
+
+ const handleInputChange = (e: ChangeEvent) => {
+ setKeyWord(e.target.value);
+ setShowInputButton(e.target.value.trim() !== '');
+ };
+
+ const logoutHandler = () => {
+ LogoutForm()
+ .then(() => {
+ localStorage.removeItem('token');
+ Swal.fire('로그아웃 되었습니다!', '다음에 또 만나요!', 'success');
+ navigate('/');
+ })
+ .catch((error: string) => {
+ console.log('Logout failed:', error);
+ });
+ };
+
+ const onSubmit = async () => {
+ navigate('/search/' + keyword);
+ setShowInputButton(false);
+ };
+
+ const token = localStorage.getItem('token');
+
+ useEffect(() => {
+ const authenticate = async () => {
+ try {
+ const userData = await TokenMe();
+
+ // 사용자 정보를 업데이트하기 전에 profileImg가 존재하지 않을 경우에만 기본 프로필 이미지 URL을 사용
+ setUser((prevUser) => ({
+ ...prevUser,
+ displayName: userData.displayName,
+ profileImg: userData.profileImg || defaultProfileImgUrl,
+ }));
+ } catch (error) {
+ console.error(error);
+ }
+ };
+ if (token) {
+ authenticate();
+ }
+ }, [token]);
+
+ const OnKeyPress = (e: any) => {
+ if (e.key === 'Enter') {
+ if (keyword === '') {
+ Swal.fire('검색어를 입력해주세요!', '', 'warning');
+ } else {
+ onSubmit(); // Enter 입력이 되면 클릭 이벤트 실행
+ }
+ }
+ };
+ const handleInputButtonClick = () => {
+ if (keyword === '') {
+ Swal.fire('검색어를 입력해주세요!', '', 'warning');
+ } else {
+ onSubmit();
+ }
+ };
+
+ const filterItems = (searchTerm: string) => {
+ const filtered = product.filter((item: Product) =>
+ item.product_name.toLowerCase().includes(searchTerm.toLowerCase())
+ );
+ setFilteredItems(filtered);
+ };
+
+ useEffect(() => {
+ filterItems(keyword);
+ }, [keyword, product]);
+
+ async function getItem() {
+ const cate = {
+ limit: 100,
+ };
+ const data = await getList(cate);
+ // console.log(data);
+ setProductInfo(data);
+ }
+
+ useEffect(() => {
+ (async () => {
+ await getItem();
+ })();
+ }, []);
+
+ const formatter = new Intl.NumberFormat("ko-KR");
+
+ return (
+ <>
+
+
+
+
+
+
+
{
+ setShowInputButton(false);
+ }}
+ onFocus={() => {
+ setShowInputButton(true);
+ }}
+ />
+
+
+ {showInputButton && keyword && (
+
+
+ {keyword &&
+ filteredItems.map((item: Product) => {
+ if (item.product_name.trim() !== '') {
+ return (
+
+
+
+
+
+
+ {item.product_name}
+ {formatter.format(item.price)}원
+
+
+ );
+ } else {
+ return null;
+ }
+ })}
+
+
+ )}
+
+
+
+
+ 장바구니
+
+
+ 마이페이지
+
+ {token ? (
+
+
+ 로그아웃
+
+
+
+
+
+ ) : (
+ <>
+
+
회원가입
+
+
+
로그인
+
+ >
+ )}
+
+
+
+ >
+ );
+}
+export default Header;
diff --git a/src/Common/Layout/Header/headers.scss b/src/Common/Layout/Header/headers.scss
new file mode 100644
index 00000000..485c6df7
--- /dev/null
+++ b/src/Common/Layout/Header/headers.scss
@@ -0,0 +1,168 @@
+.headerContainer {
+ position: fixed;
+ width: 100%;
+ max-width: 100%;
+ margin: 0 auto;
+ height: 80px;
+ background-color: rgb(255, 255, 255);
+ border-bottom: 2px solid rgb(202, 159, 18);
+ background-size: 100% 100%; // 배경 이미지의 크기를 100%로 설정
+ padding: 0 20px;
+ z-index: 900;
+
+ .itemsWrapper {
+ margin: 0 auto;
+ left: 0;
+ right: 0;
+ display: flex;
+ position: absolute;
+ justify-content: space-evenly;
+ align-items: center;
+ width: 100%;
+ }
+
+ .logoBox {
+ width: 150px;
+ margin-top: 10px;
+ height: 50px;
+ display: inline-block;
+ position: relative;
+
+ img {
+ width: 80px;
+ position: absolute;
+ margin: 0 auto;
+ left: 0;
+ right: 0;
+ }
+ }
+
+ .searchBox {
+ position: relative;
+ margin-top: 20px;
+ display: flex;
+
+ input {
+ padding-left: 20px;
+ padding-right: 35px;
+ border: solid 1px #8b8b8b;
+ border-radius: 15px;
+ margin: 0 auto;
+ display: flex;
+ height: 40px;
+ width: 400px;
+ outline: none;
+ left: 0;
+ right: 0;
+ }
+ img {
+ position: absolute;
+ width: 25px;
+ height: 25px;
+ right: 5px;
+ top: 6px;
+ }
+ }
+
+ .Header-box {
+ display: flex;
+ align-items: center;
+ gap: 30px;
+ margin-top: 20px;
+ width: 400px;
+
+ .Header-box__text {
+ text-decoration: none;
+ color: gray;
+ font-weight: bold;
+ width: 100px;
+ height: 30px;
+ cursor: pointer;
+ display: flex;
+
+ .Header-box__logout {
+ width: inherit;
+ }
+ }
+
+ .cart {
+ position: relative;
+ width: 60px;
+ height: 60px;
+ bottom: 12px;
+ left: 40px;
+
+ .cartPhoto {
+ cursor: auto;
+ box-sizing: border-box;
+ position: absolute;
+ width: 50px;
+ height: 50px;
+ border-radius: 50%;
+ background-position: center;
+ background-size: contain;
+ background-repeat: no-repeat;
+ }
+ }
+ }
+
+ .Input-Buttom {
+ width: 400px;
+ padding-bottom: 80px;
+ background-color: #ffff;
+ position: absolute;
+ margin-top: 45px;
+ max-height: 200px;
+ overflow-y: auto;
+ display: flex;
+ border: 1px solid black;
+
+ .Input-Buttom__inner {
+ width: 380px;
+ margin: 0 auto;
+ padding-bottom: 100px;
+ margin-top: 10px;
+
+ .Input-Buttom__innerBox {
+ width: 340px;
+ height: 160px;
+ margin: 0 auto;
+ cursor: pointer;
+ margin-top: 12px;
+ border-bottom: 1px solid black;
+
+ .Input-Buttom__ImageBox {
+ width: 100px;
+ padding-bottom: 150px;
+ margin-left: 20px;
+ position: relative;
+ background-color: saddlebrown;
+
+ img {
+ width: 100px;
+ height: auto;
+ }
+ }
+
+ .Input-Buttom__title {
+ width: 210px;
+ padding-bottom: 15px;
+ position: relative;
+ left: 140px;
+ bottom: 100px;
+ display: flex;
+ }
+ span:nth-child(1) {
+ width: 150px;
+ }
+
+ span:nth-child(2) {
+ position: relative;
+ width: 100px;
+ top: 13px;
+ margin-left: 15px;
+ }
+ }
+ }
+ }
+}
diff --git a/src/Components/Views/CartPage/CartItems/CartItems.scss b/src/Components/Views/CartPage/CartItems/CartItems.scss
new file mode 100644
index 00000000..76163599
--- /dev/null
+++ b/src/Components/Views/CartPage/CartItems/CartItems.scss
@@ -0,0 +1,133 @@
+@mixin CartNameStyle {
+ height: auto;
+ font-size: 20px;
+ position: absolute;
+ top: 10px;
+}
+
+.CartPageTable__Buy {
+ width: inherit;
+ height: 45px;
+ background-color: #e8e0d6;
+ position: absolute;
+ border-radius: 10px 10px 0px 0px;
+
+ .LableBox {
+ width: 40px;
+ height: 40px;
+ margin-left: 50px;
+ margin-top: 5px;
+ position: absolute;
+ font-size: 30px;
+ }
+}
+
+.ProductNameBox {
+ @include CartNameStyle;
+ width: 60px;
+ left: 400px;
+}
+
+.PriceNameBox {
+ @include CartNameStyle;
+ right: 400px;
+}
+
+.NumberBox {
+ @include CartNameStyle;
+ right: 280px;
+}
+
+.DeleteNameBox {
+ @include CartNameStyle;
+ right: 120px;
+}
+
+.ItemsContainer {
+ width: 1300px;
+ top: 50px;
+ position: relative;
+ max-height: 450px; /* 스크롤 영역의 최대 높이 설정 */
+ overflow-y: auto; /* 세로 스크롤 생성 */
+
+ .ItemContainer {
+ width: 1182px;
+ padding-bottom: 5px;
+ position: relative;
+ margin-top: 20px;
+ border-bottom: 2px solid rgb(208, 203, 185);
+
+ .CheckContainer {
+ width: 60px;
+ height: 40px;
+ position: absolute;
+ top: 40px;
+ left: 30px;
+ }
+
+ .ImageBox {
+ width: 100px;
+ position: relative;
+ bottom: 10px;
+ margin-left: 160px;
+ //background-color: rebeccapurple;
+
+ img {
+ width: inherit;
+ //color: orange;
+ height: auto;
+ }
+ }
+
+ .TextInner {
+ width: 450px;
+ padding-bottom: 30px;
+ position: absolute;
+ top: 50px;
+ left: 200px;
+ text-align: center;
+
+ span:nth-child(1) {
+ font-size: 20px;
+ }
+
+ span:nth-child(2) {
+ width: 200px;
+ height: 30px;
+ position: absolute;
+ margin-top: 35px;
+ font-size: 15px;
+ }
+ }
+
+ .PriceInner {
+ width: auto;
+ padding-bottom: 10px;
+ top: 50px;
+ position: absolute;
+ right: 370px;
+ font-size: 15px;
+ }
+
+ .CartButtonBox {
+ width: 60px;
+ position: absolute;
+ top: 35px;
+ right: 100px;
+
+ button {
+ display: block;
+ width: 60px;
+ height: 30px;
+ margin-top: 10px;
+ background-color: rgb(227, 165, 117);
+ color: #ffffff;
+ border: none;
+ border-radius: 5px;
+ font-weight: bold;
+ letter-spacing: 1px;
+ font-size: 14px;
+ }
+ }
+ }
+}
diff --git a/src/Components/Views/CartPage/CartItems/CartItems.tsx b/src/Components/Views/CartPage/CartItems/CartItems.tsx
new file mode 100644
index 00000000..44a1dd38
--- /dev/null
+++ b/src/Components/Views/CartPage/CartItems/CartItems.tsx
@@ -0,0 +1,144 @@
+import React, { useEffect } from "react";
+import { useState } from "react";
+import Box from "@mui/material/Box";
+import Checkbox from "@mui/material/Checkbox";
+import FormControlLabel from "@mui/material/FormControlLabel";
+import "./CartItems.scss";
+
+interface BuyItem {
+ id: number;
+ gubun: string;
+ product_name: string;
+ price: number;
+ detail_image: string;
+ product_no: number;
+ buyItem:number;
+}
+
+interface CartItemsProps {
+ check: number[];
+ delete: (key: any) => void;
+ datalist: any;
+ checkOne: any;
+ checkTwo: any;
+}
+
+const CartItems = ({
+ check,
+ delete: RemoveBuyItem,
+ datalist,
+ checkOne,
+ checkTwo,
+}: CartItemsProps) => {
+ const [buyItem, setbuyItem] = useState([]);
+ const [checkedItems, setCheckedItems] = useState(check);
+ const [allCheck, setallCheck] = useState(false);
+
+ useEffect(() => {
+ setbuyItem(datalist);
+ }, [datalist]);
+
+ const handleChange1 = (event: React.ChangeEvent) => {
+ if(event.target.checked){
+ setCheckedItems(checkOne(event, buyItem, "buy"));
+ setallCheck(true);
+ }else{
+ setCheckedItems(checkOne(event, buyItem, "buy"));
+ setallCheck(false);
+ }
+ };
+
+ const handleChange2 =
+ (el: any) => (event: React.ChangeEvent) => {
+ setCheckedItems(checkTwo(event, checkedItems, el));
+ };
+
+ const children = (el: any, index: number) => (
+
+
+ }
+ />
+
+ );
+
+ const formatter = new Intl.NumberFormat("ko-KR");
+
+ return (
+ <>
+
+
+ 0 &&
+ checkedItems.length < buyItem.length
+ }
+ onChange={handleChange1}
+ style={{marginTop:"8px"}}
+ />
+
+ }
+ />
+
+
+ 상품명
+
+
+
+
+
+ 삭제
+
+
+
+
+ {buyItem
+ .filter((el) => el.gubun === "buy")
+ .map((el, index) => (
+
+
{children(el, index)}
+
+
+
+
+ {el.product_name}
+
+
+
+ {formatter.format(el.price)}원
+
+
+
+
+
+
+ ))}
+
+ >
+ );
+};
+export default CartItems;
\ No newline at end of file
diff --git a/src/Components/Views/CartPage/CartPage.scss b/src/Components/Views/CartPage/CartPage.scss
new file mode 100644
index 00000000..c53442d5
--- /dev/null
+++ b/src/Components/Views/CartPage/CartPage.scss
@@ -0,0 +1,145 @@
+@mixin CartNameStyle {
+ height: auto;
+ font-size: 20px;
+ position: absolute;
+ top: 10px;
+}
+
+// 장바구니 전체 레이아웃
+.CartPage-AllLayout {
+ font-family: 'SUITE-Regular';
+ width: 1200px;
+ height: 1500px;
+ position: relative;
+ margin: 0 auto;
+ top: 80px;
+ font-weight: 600;
+
+ .ProductText {
+ @include CartNameStyle;
+ top: 10px;
+ left: 45px;
+ position: absolute;
+ }
+
+ .CartContainer {
+ position: absolute;
+ display: flex;
+ justify-content: center;
+ width: inherit;
+ height: 500px;
+ top: 50px;
+ border-radius: 10px;
+ background-color: rgb(249, 249, 249);
+ }
+
+ //장바구니 나타나는 부분
+ .CartPageTable {
+ position: relative;
+ width: 1200px;
+ margin: 0 auto;
+ left: 0;
+ right: 0;
+ top: 50px;
+ }
+
+ .RentText {
+ position: absolute;
+ font-size: 20px;
+ top: 600px;
+ left: 45px;
+ }
+
+ .RentContainer {
+ position: absolute;
+ display: flex;
+ justify-content: center;
+ width: inherit;
+ padding-bottom: 50px;
+ top: 640px;
+ height: 500px;
+ border-radius: 10px;
+ }
+
+ .BuyText {
+ position: absolute;
+ height: 50px;
+ font-size: 20px;
+ bottom: 200px;
+ left: 45px;
+ }
+
+ .BuyContainer {
+ position: absolute;
+ width: inherit;
+ height: 200px;
+ bottom: 100px;
+ border-radius: 10px;
+ background-color: #eddbc7;
+
+ .NowBuy {
+ width: 500px;
+ position: absolute;
+ height: 100px;
+ left: 100px;
+ border-bottom: 2px solid black;
+
+ .Buy-Container {
+ width: 270px;
+ position: absolute;
+ padding-bottom: 10px;
+ //background-color: gold;
+ margin: 0 auto;
+ left: 150px;
+ right: 0;
+ top: 50px;
+
+ .Pay-Container {
+ width: inherit;
+ //background-color: rosybrown;
+ display: flex;
+ gap: 40px;
+ font-size: 20px;
+ }
+ }
+ }
+
+ .AllCount-Container {
+ width: 500px;
+ position: absolute;
+ height: 50px;
+ top: 120px;
+ left: 100px;
+
+ .AllCount-Container__box {
+ width: 300px;
+ height: 30px;
+ display: flex;
+ gap: 50px;
+ margin: 0 auto;
+ }
+ }
+
+ .Buy-ButtonBox {
+ width: 300px;
+ height: 55px;
+ position: relative;
+ left: 650px;
+ top: 70px;
+
+ button {
+ width: inherit;
+ height: inherit;
+ border-radius: 10px;
+ color: white;
+ font-weight: bold;
+ background-color: #f99417;
+ border: none;
+ cursor: pointer;
+ &:hover {
+ background-color: #ffa12e;
+ }
+ }
+ }
+ }
+}
diff --git a/src/Components/Views/CartPage/CartPage.tsx b/src/Components/Views/CartPage/CartPage.tsx
new file mode 100644
index 00000000..bc84dc36
--- /dev/null
+++ b/src/Components/Views/CartPage/CartPage.tsx
@@ -0,0 +1,193 @@
+import "./CartPage.scss";
+import { useState, useEffect } from "react";
+import CartItems from "./CartItems/CartItems";
+import RentalItems from "./CartRent/CartRent";
+import Payment from "./Payment/Payment";
+import Swal from "sweetalert2";
+
+interface BuyItem {
+ id: number;
+ product_name: string;
+ price: number;
+ detail_image: string;
+ product_no: number;
+}
+
+function CartPage() {
+ const [CartItemsValue] = useState([]);
+ const [selectedItem, setSelectedItem] = useState([]);
+ const [Total, setTotal] = useState(0);
+ const [ShowTotal, setShowTotal] = useState(false);
+ const [buyItem, setbuyItem] = useState([]);
+
+ useEffect(() => {
+ const cartData = localStorage.getItem("cart");
+ const buyItems = cartData ? JSON.parse(cartData) : [];
+ setbuyItem(buyItems);
+ }, []);
+
+ useEffect(() => {
+ calculateTotal();
+ }, [selectedItem]);
+
+ const checkOne = (
+ event: React.ChangeEvent,
+ buyItem: any[],
+ gubun: string
+ ) => {
+ const checkedValue = event.target.checked;
+ const filteredItems = buyItem.filter((item) => item.gubun === gubun);
+
+ if (checkedValue) {
+ const combinedItems = new Set([...selectedItem, ...filteredItems]);
+ setSelectedItem(Array.from(combinedItems));
+ } else {
+ const remainingItems = selectedItem.filter(
+ (item) =>
+ !filteredItems.some(
+ (filteredItem) => filteredItem.product_no === item.product_no
+ )
+ );
+ setSelectedItem(remainingItems);
+ }
+ // Reset filteredItems indices if unchecked
+ const updatedCheckedItems = checkedValue
+ ? filteredItems.map((_, index) => index)
+ : [];
+
+ return updatedCheckedItems;
+ };
+
+ const checkTwo = (
+ event: React.ChangeEvent,
+ checkedItems: number[],
+ el: any
+ ) => {
+ const itemId = parseInt(event.target.name);
+ let updatedCheckedItems: number[] = [];
+ let updatedItems: any[] = [];
+ if (event.target.checked) {
+ updatedCheckedItems = [...checkedItems, itemId];
+ updatedItems = [...selectedItem, el];
+ } else {
+ updatedCheckedItems = checkedItems.filter((id) => id !== itemId);
+ updatedItems = selectedItem.filter(
+ (item) => item.product_no !== el.product_no
+ );
+ }
+ setSelectedItem(updatedItems);
+ return updatedCheckedItems;
+ };
+
+ const calculateTotal = () => {
+ setTotal(0);
+ console.log(selectedItem);
+ let total = 0;
+ if (Array.isArray(selectedItem)) {
+ selectedItem.forEach((item:any) => {
+ const itemPrice= parseInt(item.price);
+ console.log(itemPrice)
+ if (!isNaN(itemPrice)) {
+ console.log(typeof itemPrice)
+
+ total += itemPrice;
+ console.log(total);
+ }
+ });
+ } else {
+ total = 0;
+ }
+ setTotal(total);
+ setShowTotal(true);
+ };
+
+ const RemoveBuyItem = (key: any) => {
+ console.log(key);
+ Swal.fire({
+ title: "정말 삭제하시겠습니까?",
+ text: "",
+ icon: "warning",
+ showCancelButton: true,
+ confirmButtonColor: "#df307f",
+ cancelButtonColor: "#e24457",
+ confirmButtonText: "네",
+ cancelButtonText: "아니오",
+ }).then((result) => {
+ if (result.isConfirmed) {
+ const cartDataString = localStorage.getItem("cart");
+
+ if (cartDataString !== null) {
+ const updatedCartData: BuyItem[] = JSON.parse(cartDataString);
+ const datalist = JSON.stringify(
+ updatedCartData.filter((item) => item.product_no !== key)
+ );
+ localStorage.setItem("cart", datalist);
+ setbuyItem(JSON.parse(datalist));
+ Swal.fire("삭제되었습니다!", "", "success");
+ } else {
+ console.log("cart data not found");
+ }
+ } else {
+ Swal.fire("취소되었습니다!!", "", "success");
+ }
+ });
+ };
+ const formatter = new Intl.NumberFormat("ko-KR");
+
+ return (
+ <>
+
+
구매
+
+
+
+
대여
+
+
+
+
+
결제
+
+
+
+
+ 총 상품 가격
+ {/* {ShowTotal &&
${Total}원
} */}
+ {ShowTotal && {formatter.format(Total)}원
}
+
+
+
+
+
+ 총 결제 예상 금액
+ {formatter.format(Total)}원
+
+
+
+
+
+
+
+ >
+ );
+}
+
+export default CartPage;
diff --git a/src/Components/Views/CartPage/CartRent/CartRent.scss b/src/Components/Views/CartPage/CartRent/CartRent.scss
new file mode 100644
index 00000000..2ae3fb82
--- /dev/null
+++ b/src/Components/Views/CartPage/CartRent/CartRent.scss
@@ -0,0 +1,127 @@
+@mixin CartNameStyle {
+ height: auto;
+ font-size: 20px;
+ position: absolute;
+ top: 10px;
+}
+
+.RentPageTable {
+ width: inherit;
+ height: 45px;
+ background-color: #f6e4cc;
+ position: absolute;
+ border-radius: 10px 10px 0px 0px;
+
+ .Rent-LableBox {
+ width: 40px;
+ height: 40px;
+ margin-left: 50px;
+ margin-top: 5px;
+ position: absolute;
+ font-size: 30px;
+ }
+
+ .Rental-Namebox {
+ @include CartNameStyle;
+ left: 230px;
+ }
+
+ .RentDay {
+ @include CartNameStyle;
+ left: 520px;
+ }
+
+ .Renatal-Price {
+ @include CartNameStyle;
+ right: 370px;
+ }
+
+ .DeleteDay {
+ @include CartNameStyle;
+ right: 120px;
+ }
+}
+
+.Rental-ItemsContainer {
+ width: 1300px;
+ top: 50px;
+ position: relative;
+ border-radius: 0px 0px 10px 10px;
+ background-color: white;
+ max-height: 450px; /* 스크롤 영역의 최대 높이 설정 */
+ overflow-y: auto; /* 세로 스크롤 생성 */
+
+ .Rental-ItemContainer {
+ width: 1182px;
+ padding-bottom: 5px;
+ position: relative;
+ margin-top: 20px;
+ border-bottom: 2px solid rgb(208, 203, 185);
+ .Rental-CheckContainer {
+ width: 60px;
+ height: 40px;
+ position: absolute;
+ top: 45px;
+ left: 30px;
+ }
+
+ .ImageBox {
+ width: 100px;
+ position: relative;
+ bottom: 5px;
+ margin-left: 120px;
+
+ img {
+ width: inherit;
+ height: auto;
+ }
+ }
+
+ .Rental-TextInner {
+ width: 150px;
+ height: 100px;
+ position: absolute;
+ top: 25px;
+ left: 260px;
+ font-size: 20px;
+ }
+
+ .Rental-PriceInner {
+ width: 100px;
+ position: absolute;
+ top: 50px;
+ right: 320px;
+ font-size: 18px;
+ }
+
+ .Rental-RentDay {
+ width: 100px;
+ height: 40px;
+ position: absolute;
+ top: 50px;
+ left: 540px;
+ font-size: 18px;
+ }
+
+ .RentButtonBox {
+ width: 60px;
+ position: absolute;
+ top: 40px;
+ right: 90px;
+
+ button {
+ display: block;
+ width: 60px;
+ height: 30px;
+ margin-top: 10px;
+ background-color: rgb(227, 165, 117);
+ color: #ffffff;
+ border: none;
+ border-radius: 5px;
+ font-weight: bold;
+ letter-spacing: 1px;
+ font-size: 14px;
+ }
+ }
+ }
+}
diff --git a/src/Components/Views/CartPage/CartRent/CartRent.tsx b/src/Components/Views/CartPage/CartRent/CartRent.tsx
new file mode 100644
index 00000000..f972435b
--- /dev/null
+++ b/src/Components/Views/CartPage/CartRent/CartRent.tsx
@@ -0,0 +1,149 @@
+import React from "react"
+import { useState, useEffect } from "react";
+import Box from '@mui/material/Box';
+import Checkbox from '@mui/material/Checkbox';
+import FormControlLabel from '@mui/material/FormControlLabel';
+import './CartRent.scss'
+
+interface RentItem {
+ id: number;
+ product_name: string;
+ price: number;
+ detail_image: string;
+ product_no: number;
+ gubun: string;
+ name: string;
+ rentdate: string;
+}
+
+ interface CartItemsProps {
+ check: number[];
+ delete: (key: number) => void;
+ datalist : any
+ checkOne : any;
+ checkTwo : any;
+ }
+
+ const RentalItems = ({
+ check,
+ delete: RemoveBuyItem,
+ datalist,
+ checkOne,
+ checkTwo,
+ }: CartItemsProps) => {
+
+ const [buyItem, setbuyItem] = useState([]);
+ const [checkedItems, setCheckedItems] = useState(check);
+ const [allCheck, setallCheck] = useState(false);
+
+ useEffect(() => {
+ setbuyItem(datalist)
+ }, [datalist]);
+
+ const handleChange1 = (event: React.ChangeEvent) => {
+ if(event.target.checked){
+ setCheckedItems(checkOne(event, buyItem, "rent"));
+ setallCheck(true);
+ }else{
+ setCheckedItems(checkOne(event, buyItem, "rent"));
+ setallCheck(false);
+ }
+ };
+
+ const handleChange2 =
+ (el: any) => (event: React.ChangeEvent) => {
+ setCheckedItems(checkTwo(event, checkedItems,el))
+ };
+
+ const children = (el:any ,index:number) => (
+
+
+
+
+ }
+ />
+
+ );
+
+ const formatter = new Intl.NumberFormat("ko-KR");
+
+ return(
+ <>
+
+
+ 0 && checkedItems.length < buyItem.length}
+ onChange={handleChange1}
+ style={{marginTop:"8px"}}
+ />
+
+ }
+ />
+
+ 상품명
+
+
+
+
+
+
+ 대여가격
+
+
+
+ 삭제
+
+
+
+
+ {buyItem
+ .filter(el => el.gubun === 'rent')
+ .map((el,index) => (
+
+
+ {children(el, index)}
+
+
+
+
+
+ {el.product_name}
+
+
+ {el.rentdate}일
+
+
+ {formatter.format(el.price)}원
+
+
+
+
+
+ ))}
+
+ >
+ )
+}
+export default RentalItems
\ No newline at end of file
diff --git a/src/Components/Views/CartPage/Payment/Payment.tsx b/src/Components/Views/CartPage/Payment/Payment.tsx
new file mode 100644
index 00000000..c5969281
--- /dev/null
+++ b/src/Components/Views/CartPage/Payment/Payment.tsx
@@ -0,0 +1,144 @@
+import { useEffect, useState } from 'react';
+import { useNavigate } from 'react-router-dom';
+import { TokenMe } from '@/Apis/register';
+import Swal from 'sweetalert2';
+
+interface PaymentInfo {
+ amount: number;
+ productlists: any;
+ setdatalist: any;
+}
+
+interface BuyItem {
+ id: number;
+ product_name: string;
+ price: number;
+ detail_image: string;
+ product_no: string;
+ selectedItem?: any;
+ setdatalist: any;
+}
+
+interface PaymentsUser {
+ displayName: string;
+ email: string;
+}
+
+
+const { VITE_IMP_OWNER } = import.meta.env;
+
+const Payment = ({ amount, productlists, setdatalist }: PaymentInfo) => {
+ const orderNumber = `mid_${new Date().getTime()}`;
+ console.log(orderNumber);
+ const navigate = useNavigate();
+ const [user, setUser] = useState({
+ displayName: '',
+ email: ''
+ });
+
+ useEffect(() => {
+ const jquery = document.createElement('script');
+ jquery.src = 'https://code.jquery.com/jquery-1.12.4.min.js';
+ const iamport = document.createElement('script');
+ iamport.src = 'https://cdn.iamport.kr/js/iamport.payment-1.1.7.js';
+ document.head.appendChild(jquery);
+ document.head.appendChild(iamport);
+ return () => {
+ document.head.removeChild(jquery);
+ document.head.removeChild(iamport);
+ };
+ }, []);
+
+ useEffect(() => {
+ const Payauthenticate = async () => {
+ try {
+ const userData = await TokenMe();
+ setUser((prevUser) => ({
+ ...prevUser,
+ displayName: userData.displayName,
+ email: userData.email,
+ }));
+ } catch (error) {
+ console.error(error);
+ }
+ };
+ Payauthenticate();
+ }, []);
+
+
+ const onClickPayment = () => {
+ console.log(amount)
+ // console.log(productlists);
+ productlists.forEach(function(item:any) {
+ item['email'] = user.email;
+ });
+ //productlists.email = user.email;
+ // console.log(productlists)
+ const itemName = productlists
+ .map((obj: { product_name: any }) => obj.product_name)
+ .join(',');
+
+ // console.log(itemName);
+ const IMP = (window as any).IMP;
+ IMP.init(VITE_IMP_OWNER);
+
+ const data = {
+ pg: 'html5_inicis', // PG사 html5_inicis: KG이니시스, kakaopay: 카카오페이, naverpay: 네이버페이, payco: 페이코
+ pay_method: 'card', // 결제수단
+ merchant_uid: orderNumber,
+ amount: formatter.format(amount), // 결제금액
+ name: `${itemName}`, // 주문명
+ buyer_name: user.displayName, // 구매자 이름
+ buyer_email: user.email,
+ custom_data: productlists,
+ };
+
+ console.log(data);
+ IMP.request_pay(data, callback);
+ };
+
+ const formatter = new Intl.NumberFormat("ko-KR");
+
+ function callback(response: any) {
+ const { success, error_msg } = response;
+
+ if (success) {
+ Swal.fire('결제 성공!', '', 'success').then(() => {
+ navigate('/mypage');
+ });
+ // const mypayarray: string | null =
+ // window.localStorage.getItem('mypayment');
+ // const combinedArray: string[] | null = mypayarray
+ // ? JSON.parse(mypayarray)
+ // : null;
+ // if (!combinedArray) {
+ // window.localStorage.setItem('mypayment', JSON.stringify([orderNumber]));
+ // } else {
+ // combinedArray.push(orderNumber);
+ // window.localStorage.setItem('mypayment', JSON.stringify(combinedArray));
+ // }
+
+ const productItemlist = productlists
+ .map((obj: { product_no: any }) => obj.product_no)
+ .join(',');
+ const cartlist: BuyItem[] = JSON.parse(
+ window.localStorage.getItem('cart') || '[]'
+ );
+
+ const updatedArray = cartlist.filter(
+ (item) => !productItemlist.includes(item.product_no)
+ );
+ window.localStorage.setItem('cart', JSON.stringify(updatedArray));
+ setdatalist(updatedArray);
+ } else {
+ Swal.fire(`결제 실패: ${error_msg}`, '', 'error');
+ }
+ }
+ return (
+ <>
+
+ >
+ );
+};
+
+export default Payment;
diff --git a/src/Components/Views/DetailPage/DetailPage.scss b/src/Components/Views/DetailPage/DetailPage.scss
new file mode 100644
index 00000000..16e0eccc
--- /dev/null
+++ b/src/Components/Views/DetailPage/DetailPage.scss
@@ -0,0 +1,305 @@
+@mixin PriceContainer {
+ width: 300px;
+ height: 30px;
+}
+
+@mixin PriceText {
+ font-size: 20px;
+ height: 30px;
+}
+
+@mixin PriceNumber {
+ font-size: 20px;
+ margin-left: 50px;
+}
+
+@mixin ButtonStyle {
+ width: 150px;
+ height: 50px;
+ position: absolute;
+ color: white;
+ border: none;
+ border-radius: 10px;
+ cursor: pointer;
+}
+
+.DetailContainer {
+ top: 100px;
+ position: relative;
+ width: 1400px;
+ margin: 0 auto;
+ left: 0;
+ right: 0;
+ font-family: "SUITE-Regular";
+
+ .ImgContainer {
+ height: 780px;
+ position: relative;
+ }
+
+ .LeftContainer {
+ width: 600px;
+ max-width: 500px;
+ position: absolute;
+ height: 650px;
+ top: 60px;
+ left: 100px;
+ z-index: 100;
+ background-color: #ffff;
+
+ .TitleBox {
+ position: absolute;
+ margin-top: 10px;
+ padding-bottom: 5px;
+ border-bottom: 2px solid black;
+
+ span:nth-child(1) {
+ font-size: 30px;
+ }
+
+ span:nth-child(2) {
+ font-size: 15px;
+ margin-left: 20px;
+ }
+
+ .InnerTitleBox {
+ width: 500px;
+
+ p {
+ margin-top: 10px;
+ font-size: 15px;
+ }
+ }
+ }
+ .BookimgBox {
+ padding-bottom: 500px;
+ border-radius: 10px;
+ border: 2px solid rgb(116, 45, 1);
+ position: relative;
+ top: 150px;
+ margin: auto;
+ left: 0;
+ right: 0;
+
+ img {
+ position: absolute;
+ margin: 0 auto;
+ left: 0;
+ right: 0;
+ }
+ }
+ }
+
+ .RightContainer {
+ width: 500px;
+ max-width: 500px;
+ padding-bottom: 540px;
+ position: absolute;
+ top: 100px;
+ right: 130px;
+ z-index: 100;
+
+ .RightContainer-TopText {
+ width: 300px;
+ height: 60px;
+ font-size: 20px;
+ color: rgb(234, 72, 99);
+ }
+
+ .RightContainer-Content {
+ width: inherit;
+ height: 400px;
+ position: absolute;
+ top: 60px;
+
+ .OriginPrice {
+ @include PriceContainer;
+ margin-top: 20px;
+
+ .PriceText {
+ @include PriceText;
+ }
+
+ .PriceNumber {
+ @include PriceNumber;
+ }
+ }
+
+ .ContentContainer {
+ width: 400px;
+ height: 200px;
+ margin-top: 10px;
+ position: relative;
+
+ .ContentBox {
+ width: 200px;
+ height: 100px;
+ font-size: 20px;
+ }
+
+ .contentText {
+ width: 400px;
+ height: 100px;
+ position: absolute;
+ top: 40px;
+ left: 0;
+ right: 0;
+ }
+ }
+
+ .CardPrice {
+ width: 450px;
+ height: 30px;
+ margin-top: 60px;
+ display: flex;
+ gap: 40px;
+ font-size: 18px;
+ }
+
+ .ButtonContainer {
+ width: 400px;
+ height: 50px;
+ position: relative;
+ margin-top: 20px;
+
+ .CartAdd {
+ @include ButtonStyle;
+ background-color: #df307f;
+ }
+
+ .BookBill {
+ @include ButtonStyle;
+ background-color: #e24457;
+ right: 20px;
+ }
+ }
+ }
+ }
+
+ .BookContent {
+ width: 1150px;
+ margin: auto;
+ border: 1px solid black;
+ margin-top: 50px !important;
+ }
+
+ .BookContent-text {
+ width: 140px;
+ position: absolute;
+ padding-bottom: 10px;
+ padding: 10px;
+ font-size: 23px;
+ font-weight: bold;
+ margin-top: 20px;
+ margin-left: 50px;
+ }
+
+ .TopBox {
+ width: 100%;
+ top: 0;
+ background-color: white;
+ right: 0;
+ font-size: 20px;
+ z-index: 9999;
+ position: fixed;
+ border-bottom: 2px solid gray;
+ transition: transform 0.3s ease-in-out;
+ transform: translateY(-50px);
+ }
+
+ .TopBox.slide-down {
+ transform: translateY(-1px);
+ }
+
+ .TopContentBox {
+ width: 130px;
+ margin: 0 auto;
+ background-color: darkcyan;
+ }
+
+ .InnerContent {
+ padding-bottom: 20px;
+ width: 800px;
+ margin: 0 auto;
+ padding-bottom: 170px;
+ font-size: 20px !important;
+
+ img {
+ width: 800px;
+ margin: 0 auto;
+ }
+
+ a {
+ font-family: "SUITE-Regular" !important;
+ background-color: #f8ede3 !important;
+ width: 800px;
+ margin: 0 auto !important;
+ padding: 20px !important;
+ font-size: 20px !important;
+ }
+
+ p {
+ background-color: #f8ede3 !important;
+ border-radius: 10px;
+ width: 800px;
+ margin: 0 auto !important;
+ padding: 20px !important;
+ font-size: 20px !important;
+ }
+
+ span {
+ font-size: 18px !important;
+ }
+ }
+
+ .Bookple-Container {
+ width: 800px;
+ padding-bottom: 10px;
+ margin: auto;
+ position: relative;
+ border-bottom: 1px solid black;
+ border-top: 1px solid black;
+
+ .Bookple-Container__text {
+ width: 180px;
+ position: absolute;
+ color: #0086cd;
+ left: -250px;
+ margin-top: 20px;
+ font-size: 20px;
+ padding: 10px;
+ font-size: 23px;
+ border-radius: 10px;
+ }
+
+ .Bookple-Container__coment {
+ width: 500px;
+ display: flex;
+ gap: 30px;
+ font-size: 20px;
+ font-weight: bold;
+ position: relative;
+ margin-top: 40px;
+ margin-left: 20px;
+ }
+ }
+}
+
+.InnerContent {
+ width: 900px;
+ height: auto;
+ display: block;
+ margin: 0 auto;
+ font-family: "SUITE-Regular";
+
+ img {
+ width: 900px;
+ display: flex;
+ margin: 0 auto;
+ }
+
+ p {
+ font-family: "SUITE-Regular" !important;
+ background-color: antiquewhite;
+ }
+}
diff --git a/src/Components/Views/DetailPage/DetailPage.tsx b/src/Components/Views/DetailPage/DetailPage.tsx
new file mode 100644
index 00000000..8302b314
--- /dev/null
+++ b/src/Components/Views/DetailPage/DetailPage.tsx
@@ -0,0 +1,209 @@
+import BookCustom from '../../../bookcustom/bookcustom';
+import { useEffect, useState } from 'react';
+import { useParams, useNavigate } from 'react-router-dom';
+import TopHeader from './components/TopHeader';
+import { getDetail } from '@/Apis/productApi';
+import './DetailPage.scss';
+import Swal from 'sweetalert2';
+
+function DetailPage() {
+ interface DetailInfo {
+ detail_image: string;
+ product_name: string;
+ retail_price: number;
+ simple_description: string;
+ summary_description: string;
+ product_no: string;
+ price: number;
+ price_excluding_tax: string;
+ selling: string;
+ description: string;
+ rentdate: number;
+ gubun: string;
+ }
+
+ const navigate = useNavigate();
+ const [detail, setDetail] = useState({} as DetailInfo);
+
+ const { productNo } = useParams();
+
+ async function getDetails() {
+ try {
+ const data = await getDetail(productNo as string);
+ setDetail(data.product);
+ console.log(data.product);
+ } catch (err) {
+ console.log(err);
+ }
+ }
+
+ const [isScrolled, setIsScrolled] = useState(false);
+ const [ScrollY, setScrollY] = useState(0);
+
+ function handleScroll() {
+ if (ScrollY > 800) {
+ setScrollY(window.pageYOffset);
+ setIsScrolled(true);
+ } else {
+ setScrollY(window.pageYOffset);
+ setIsScrolled(false);
+ }
+ }
+
+ useEffect(() => {
+ function scrollListener() {
+ window.addEventListener('scroll', handleScroll);
+ } // window 에서 스크롤을 감시 시작
+ scrollListener(); // window 에서 스크롤을 감시
+ return () => {
+ window.removeEventListener('scroll', handleScroll);
+ }; // window 에서 스크롤을 감시를 종료
+ });
+
+ useEffect(() => {
+ window.scrollTo(0, 0);
+ (async () => {
+ await getDetails();
+ })();
+ }, []);
+
+ const token = localStorage.getItem('token');
+
+ const BuyBook = (detail: DetailInfo, type: string) => {
+ let Cart: DetailInfo[] = JSON.parse(localStorage.getItem('cart') || '[]');
+ if (token) {
+ if (Cart.some((item) => item.product_no === detail.product_no)) {
+ Swal.fire('이미 장바구니에 담으셨습니다!', '', 'warning');
+ return false;
+ }
+
+ if (type === 'rent') {
+ detail.rentdate = 7;
+ }
+ detail.gubun = type;
+ Cart.push(detail);
+ Cart = Array.from(new Set(Cart));
+ Cart = [...Cart];
+ localStorage.setItem('cart', JSON.stringify(Cart));
+ Swal.fire('장바구니에 담겼습니다!', '', 'success').then(() => {
+ navigate('/cart');
+ });
+ } else {
+ Swal.fire('로그인 후 이용해주세요!', '', 'warning').then(() => {
+ navigate('/login');
+ });
+ }
+ };
+
+ // html 안에 a 링크 이벤트를 막기 위한 함수
+ const disableLinkClick = (e: React.MouseEvent) => {
+ e.preventDefault();
+ };
+
+ const modifiedDescription = detail.description
+ ? detail.description.replace(/]*>/gi, (match) =>
+ match.replace('href', 'data-disabled-href')
+ )
+ : '';
+
+ const renderCardPriceItems = () => {
+ const cardPriceItems = {
+ '카드/간편결제할인': '',
+ '무이자 할부': '',
+ 소득공제300원: '',
+ };
+
+ return Object.entries(cardPriceItems).map(([key]) => (
+ {`${key}`}
+ ));
+ };
+
+ const formatter = new Intl.NumberFormat("ko-KR");
+
+ return (
+ <>
+
+
+
+
+
+
+
+
{detail.product_name}
+
+
윙크북 {detail.product_name} 전자책 출간일 2023-0505
+
+
+
+
+
+
+
+
+
+
+
+ 책모양 아크릴 거울
+ (대상 도서 포함 3만원 이상 구매 시)
+
+
+
+
+
+ 판매가
+
+
+ {formatter.format(detail.price)}원
+
+
+
+
줄거리
+
+ {detail.summary_description}
+
+
+
{renderCardPriceItems()}
+
+
+
+
+
+
+
+
+
+
+ 출판사 제공
+ 책소개
+
+
+ {isScrolled ? (
+
+ ) : (
+ ''
+ )}
+
+
+
+
+ >
+ );
+}
+export default DetailPage;
diff --git a/src/Components/Views/DetailPage/components/TopHeader.scss b/src/Components/Views/DetailPage/components/TopHeader.scss
new file mode 100644
index 00000000..babbdde4
--- /dev/null
+++ b/src/Components/Views/DetailPage/components/TopHeader.scss
@@ -0,0 +1,31 @@
+.TopHeader-container{
+
+ .TopHeader-container__text{
+ width:700px;
+ padding-bottom: 5px;
+ left: 200px;
+ margin-top: 10px;
+ position: relative;
+ list-style: none;
+ letter-spacing: 0.03em;
+
+ li:nth-child(1) {
+ padding-bottom: 0px;
+ letter-spacing: 0.03em;
+ line-height: 1.5;
+ width: auto;
+ font-weight: bold;
+ }
+
+ li:nth-child(2) {
+ width: 700px;
+ margin-top: 8px;
+ left: 100px;
+
+ span{
+ font-weight: bold;
+ color: #eb217c;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Components/Views/DetailPage/components/TopHeader.tsx b/src/Components/Views/DetailPage/components/TopHeader.tsx
new file mode 100644
index 00000000..d91725d2
--- /dev/null
+++ b/src/Components/Views/DetailPage/components/TopHeader.tsx
@@ -0,0 +1,26 @@
+import React from 'react';
+import './TopHeader.scss'
+
+type TopHeaderProps = {
+ productName: string;
+ productPrice: number;
+}
+
+const TopHeader: React.FC = ({ productName , productPrice}) => {
+
+ const formatter = new Intl.NumberFormat("ko-KR");
+
+ return (
+
+
+ - [eBook] { productName }
+ -
+ {formatter.format(productPrice)}원 (종이책 정가 대비 30%할인) 쿠폰할인가
+ 13,230원
+
+
+
+ );
+};
+
+export default TopHeader
\ No newline at end of file
diff --git a/src/Components/Views/MainPage/Component/BookInfo.scss b/src/Components/Views/MainPage/Component/BookInfo.scss
new file mode 100644
index 00000000..af05058a
--- /dev/null
+++ b/src/Components/Views/MainPage/Component/BookInfo.scss
@@ -0,0 +1,42 @@
+.Book-container {
+ margin-bottom: 40px;
+}
+
+.BookInfo-Inner {
+ position: relative;
+ margin-bottom: 20px;
+ height: 8rem;
+ padding: 0.6rem;
+ border-radius: 10px;
+ color: black;
+ background-color: #f0d5b7;
+ box-shadow: 5px 5px 5px #b98563;
+
+ .RoundCircle {
+ width: 0.8rem;
+ height: 0.8rem;
+ margin: 0 auto;
+ border-radius: 50%;
+ background-color: rgba(255, 254, 253, 0.719);
+ box-shadow: 2px 2px 5px #5a5958;
+ }
+
+ .Namebox {
+ margin: 10px 0;
+
+ span {
+ font-size: 1rem;
+ font-weight: bold;
+ }
+ }
+
+ .Main-Pricebox {
+ display: flex;
+ position: relative;
+ }
+
+ .retail-price {
+ padding: 0 5px;
+ font-size: 0.6rem;
+ }
+}
diff --git a/src/Components/Views/MainPage/Component/BookInfo.tsx b/src/Components/Views/MainPage/Component/BookInfo.tsx
new file mode 100644
index 00000000..fd0ca108
--- /dev/null
+++ b/src/Components/Views/MainPage/Component/BookInfo.tsx
@@ -0,0 +1,65 @@
+import { Link } from 'react-router-dom';
+import { useState } from 'react';
+import './BookInfo.scss';
+
+interface Props {
+ productNo: number;
+ productImg: string;
+ productName: string;
+ retailPrice: number;
+ price: number;
+ summary: string;
+}
+
+export default function BookInfo({
+ productNo,
+ productImg,
+ productName,
+ retailPrice,
+ price,
+ summary,
+}: Props) {
+ const [hover, setHover] = useState(false);
+
+const formatter = new Intl.NumberFormat("ko-KR");
+
+ return (
+ {
+ setHover(true);
+ }}
+ onMouseLeave={() => {
+ setHover(false);
+ }}
+ >
+ {hover && {summary}
}
+ {retailPrice !== price ? (
+
+ {Math.floor(((+retailPrice - +price) / +retailPrice) * 100)}%
+
+ ) : null}
+
+
+
+
+
+ {productName.split('(')[0]}
+
+ {retailPrice === price ? (
+
{formatter.format(price)}원
+ ) : (
+
+ {formatter.format(retailPrice)}원
+ {formatter.format(price)}원
+
+ )}
+
+
+
+
+
+ );
+}
diff --git a/src/Components/Views/MainPage/Component/Carousel.scss b/src/Components/Views/MainPage/Component/Carousel.scss
new file mode 100644
index 00000000..5b96d711
--- /dev/null
+++ b/src/Components/Views/MainPage/Component/Carousel.scss
@@ -0,0 +1,53 @@
+.container {
+ width: 60rem;
+ margin: auto;
+ overflow: hidden;
+ border-radius: 10px;
+ position: relative;
+}
+.carousel {
+ display: flex;
+ width: 100%;
+ margin: auto;
+ gap: 5px;
+}
+.transition {
+ transition: 0.5s;
+}
+.page {
+ position: relative;
+ width: 29.7rem;
+ height: 28rem;
+ flex-shrink: 0;
+ border-radius: 10px;
+ overflow: hidden;
+
+ img {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ object-fit: cover;
+ }
+}
+.navigation {
+ position: absolute;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ .navi {
+ background-color: rgba(0, 0, 0, 0.514);
+ width: 50px;
+ height: 50px;
+ border-radius: 50%;
+ color: white;
+ cursor: pointer;
+ text-align: center;
+ font-size: 26px;
+ line-height: 1.8;
+ }
+}
diff --git a/src/Components/Views/MainPage/Component/Carousel.tsx b/src/Components/Views/MainPage/Component/Carousel.tsx
new file mode 100644
index 00000000..8a59c76e
--- /dev/null
+++ b/src/Components/Views/MainPage/Component/Carousel.tsx
@@ -0,0 +1,81 @@
+import { useCallback, useEffect, useRef, useState } from "react";
+import "./Carousel.scss";
+
+const arr = [2, 3, 1, 2, 3, 1, 2];
+let idx = 2;
+export default function Carousel() {
+ const carousel = useRef(null);
+ const [transform, setTransform] = useState(100);
+
+ const timeout = useCallback((idx: number) => {
+ const id = setTimeout(() => {
+ carousel.current?.classList.remove("transition");
+ setTransform(50 * idx);
+ }, 500);
+ return () => {
+ clearTimeout(id);
+ };
+ }, []);
+ function navigation(e: React.MouseEvent) {
+ if (e.target instanceof Element) {
+ const target = e.target.id;
+ if (target === "next") {
+ carousel.current?.classList.add("transition");
+ idx++;
+ setTransform(50 * idx);
+ if (idx === arr.length - 2) {
+ idx = 2;
+ timeout(idx);
+ }
+ } else if (target === "prev") {
+ carousel.current?.classList.add("transition");
+ idx--;
+ setTransform(50 * idx);
+ if (idx === 1) {
+ idx = arr.length - 3;
+ timeout(idx);
+ }
+ }
+ }
+ }
+ useEffect(() => {
+ const id = setInterval(() => {
+ carousel.current?.classList.add("transition");
+ idx++;
+ setTransform(50 * idx);
+ if (idx === arr.length - 2) {
+ idx = 2;
+ timeout(idx);
+ }
+ }, 3000);
+
+ return () => {
+ clearInterval(id);
+ };
+ }, []);
+
+ return (
+
+
+ {arr.map((v, i) => (
+
+
+
+ ))}
+
+
+
+
+ );
+}
diff --git a/src/Components/Views/MainPage/Component/Genre.scss b/src/Components/Views/MainPage/Component/Genre.scss
new file mode 100644
index 00000000..6c64ddc5
--- /dev/null
+++ b/src/Components/Views/MainPage/Component/Genre.scss
@@ -0,0 +1,109 @@
+.books {
+ display: flex;
+ overflow: hidden;
+ margin: 0 15px;
+ &:not(:last-child) {
+ margin-bottom: 50px;
+ }
+}
+
+.left {
+ background-color: #fed19a;
+ border-top-left-radius: 10px;
+ border-bottom-left-radius: 10px;
+
+ .tag-box {
+ padding: 30px 10px;
+ color: #555252;
+ font-size: 15px;
+ text-align: center;
+
+ h1 {
+ width: min-content;
+ }
+ }
+}
+
+.right {
+ position: relative;
+ background-color: #fff3e2;
+ display: flex;
+ flex-wrap: wrap;
+ border-radius: 0 5px 5px 0;
+ border-top: 1px solid rgb(219, 218, 218);
+ border-bottom: 1px solid rgb(219, 218, 218);
+ border-right: 1px solid rgb(219, 218, 218);
+
+ .Top-bookContainer {
+ position: absolute;
+ height: 3.1rem;
+ width: 100%;
+ z-index: 200;
+ top: 43%;
+ }
+
+ .Bottom-bookContainer {
+ position: absolute;
+ width: 100%;
+ height: 3.1rem;
+ bottom: 0;
+ }
+
+ .book {
+ position: relative;
+ padding: 0 10px;
+ text-align: center;
+ width: 20%;
+
+ img {
+ border-radius: 10px;
+ width: 100%;
+ position: relative;
+ }
+ }
+
+ h4 {
+ margin: 10px 0;
+ }
+}
+
+.hover-description {
+ position: absolute;
+ padding: 5%;
+ width: calc(100% - 20px);
+ height: 50%;
+ border-radius: 10px;
+ overflow: hidden;
+ backdrop-filter: blur(5px);
+ -webkit-backdrop-filter: blur(5px);
+ bottom: 45px;
+ z-index: 2;
+ color: #fff;
+ text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000,
+ 1px 1px 0 #000;
+}
+
+.discount {
+ position: absolute;
+ width: fit-content;
+ line-height: 1.8;
+ text-align: center;
+ background-color: red;
+ color: #fff;
+ right: 10%;
+ padding: 0 2px;
+ overflow: hidden;
+ z-index: 1;
+}
+
+.retail-price {
+ text-decoration: line-through;
+ color: rgb(122, 122, 122);
+ font-size: 0.8rem;
+}
+
+@media screen and (max-width: 900px) {
+ html {
+ font-size: 12px;
+ }
+}
diff --git a/src/Components/Views/MainPage/Component/Genre.tsx b/src/Components/Views/MainPage/Component/Genre.tsx
new file mode 100644
index 00000000..072a4272
--- /dev/null
+++ b/src/Components/Views/MainPage/Component/Genre.tsx
@@ -0,0 +1,49 @@
+import { useEffect, useState } from 'react';
+import { getList } from '@/Apis/productApi';
+import './Genre.scss';
+import BookInfo from './BookInfo';
+
+interface Props {
+ type: string;
+ number: number;
+}
+
+export default function Genre({ category }: { category: Props }) {
+ const [list, setList] = useState([] as Products);
+ async function sortByCategory() {
+ const data = await getList({ category: category.number });
+ setList(data);
+ }
+ useEffect(() => {
+ (async () => {
+ await sortByCategory();
+ })();
+ }, []);
+
+ return (
+
+
+
+
+
+ {list &&
+ list.map((item) => (
+
+ ))}
+
+
+
+ );
+}
diff --git a/src/Components/Views/MainPage/Component/Main.tsx b/src/Components/Views/MainPage/Component/Main.tsx
new file mode 100644
index 00000000..9b5fea2a
--- /dev/null
+++ b/src/Components/Views/MainPage/Component/Main.tsx
@@ -0,0 +1,68 @@
+import { useState, useEffect } from 'react';
+import Genre from '@/Components/Views/MainPage/Component/Genre';
+
+type BookTypeArr = BookType[];
+
+interface BookType {
+ type: string;
+ number: number;
+}
+
+const category: BookTypeArr = [
+ { type: '예술', number: 45 },
+ { type: '아동', number: 46 },
+ { type: '자기계발', number: 47 },
+ { type: '비문학', number: 48 },
+ { type: '소설/시/희극', number: 49 },
+ { type: '경제경영', number: 50 },
+];
+
+export default function Main() {
+ const [type, setType] = useState();
+
+ useEffect(() => {
+ const target = document.querySelectorAll('h1');
+
+ const io = new IntersectionObserver(
+ (entries) => {
+ const entry = entries[0];
+ if (entry.isIntersecting) {
+ setType(entry.target.id);
+ }
+ },
+ { threshold: 0.3, rootMargin: `0px 0px -80% 0px` }
+ );
+ target.forEach((item) => {
+ io.observe(item);
+ });
+
+ return () => {
+ io.disconnect();
+ };
+ }, []);
+
+ return (
+
+
+
+
+
+
+
+ {/* CATEGORY */}
+ {category.map((item) => (
+
+ ))}
+
+
+ );
+}
diff --git a/src/Components/Views/MainPage/Component/Recommand.scss b/src/Components/Views/MainPage/Component/Recommand.scss
new file mode 100644
index 00000000..8c65804e
--- /dev/null
+++ b/src/Components/Views/MainPage/Component/Recommand.scss
@@ -0,0 +1,33 @@
+.Recommand {
+ margin: 100px auto 0;
+ width: 90%;
+
+ h1 {
+ width: 150px;
+ padding-bottom: 10px;
+ }
+}
+.Recommand-wrapper {
+ width: 100%;
+ display: flex;
+ position: relative;
+ margin-top: 30px;
+ padding: 30px;
+ background-color: #ffffff;
+ border-radius: 10px;
+ border: 3px solid rgb(202, 159, 18);
+ img {
+ width: 80%;
+ }
+ h3 {
+ margin: 5px 0;
+ }
+}
+.test {
+ position: relative;
+ width: 20%;
+ text-align: center;
+ &:not(:last-child) {
+ margin-right: 20px;
+ }
+}
diff --git a/src/Components/Views/MainPage/Component/Recommand.tsx b/src/Components/Views/MainPage/Component/Recommand.tsx
new file mode 100644
index 00000000..5417bfa5
--- /dev/null
+++ b/src/Components/Views/MainPage/Component/Recommand.tsx
@@ -0,0 +1,64 @@
+import { useEffect, useState } from "react";
+import { getRecommand, getList } from "@/Apis/productApi";
+import "./Recommand.scss";
+import { Link } from "react-router-dom";
+
+type RecommandProducts = RecommandProduct[];
+
+interface RecommandProduct {
+ shop_no: number;
+ product_no: number;
+ product_name: string;
+ summary_description: string;
+ list_image: string;
+ model_name: string;
+}
+
+export default function Recommand() {
+ const [list, setList] = useState();
+
+ async function recommand() {
+ try {
+ const res = await getRecommand();
+ console.log(res.products);
+ setList(res.products);
+ const productList = res.products.map((obj:any) => obj.product_no).join(",");
+ return productList;
+ } catch (err) {
+ console.log(err);
+ }
+ }
+
+ async function getItem() {
+ const productList = await recommand();
+ console.log(productList);
+ const data = await getList({ product_no: productList });
+ setList(data);
+ }
+
+ useEffect(() => {
+ (async () => {
+ await getItem();
+ })();
+ }, []);
+
+ return (
+
+
추천도서
+
+ {list &&
+ list.map((item) => (
+
+
+
{item.product_name}
+
{item.model_name}
+
+ ))}
+
+
+ );
+}
diff --git a/src/Components/Views/MainPage/MainPage.scss b/src/Components/Views/MainPage/MainPage.scss
new file mode 100644
index 00000000..102edc33
--- /dev/null
+++ b/src/Components/Views/MainPage/MainPage.scss
@@ -0,0 +1,53 @@
+.wrapper {
+ padding-top: 150px;
+ max-width: 1200px;
+ margin: auto;
+ position: relative;
+}
+a {
+ display: block;
+ text-decoration: none;
+ color: black;
+}
+// CATEGORY
+main {
+ position: relative;
+ display: flex;
+ margin: 100px auto;
+
+ .Category-menu {
+ position: sticky;
+ top: 100px;
+ height: 25rem;
+
+ img {
+ border-radius: 10px 10px 0 0;
+ position: sticky;
+ width: 7.5rem;
+ }
+
+ .Category-menu__text {
+ width: 127px;
+ position: absolute;
+ top: 0;
+ height: 360px;
+ padding: 4px;
+
+ li {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 3.1rem;
+ width: 6.8rem;
+ margin-top: 10px;
+ border-radius: 30px;
+ font-weight: bold;
+ font-size: 1.2rem;
+ transition: background-color 0.3s;
+ }
+ .active {
+ background-color: #fde1c7;
+ }
+ }
+ }
+}
diff --git a/src/Components/Views/MainPage/MainPage.tsx b/src/Components/Views/MainPage/MainPage.tsx
new file mode 100644
index 00000000..b20d0f3c
--- /dev/null
+++ b/src/Components/Views/MainPage/MainPage.tsx
@@ -0,0 +1,14 @@
+import './MainPage.scss';
+import Carousel from './Component/Carousel';
+import Main from './Component/Main';
+import Recommand from './Component/Recommand';
+
+export default function MainPage() {
+ return (
+
+
+
+
+
+ );
+}
diff --git a/src/Components/Views/MyPage/MyPage.scss b/src/Components/Views/MyPage/MyPage.scss
new file mode 100644
index 00000000..71f929e0
--- /dev/null
+++ b/src/Components/Views/MyPage/MyPage.scss
@@ -0,0 +1,165 @@
+@import './common/StyleCommon.scss';
+
+.MyPage-AllLayout {
+ @include AllLayoutStyle;
+
+ .MyPage-AllLayout__center {
+ @include LayoutCenterStyle;
+
+ .LeftContainer {
+ @include LeftContainerStyle;
+ }
+
+ .RightContainer {
+ @include RightContainerStyle;
+
+ .orderText {
+ position: relative;
+ //left:10px;
+ top: 30px;
+ width: 100px;
+ font-size: 25px;
+ font-weight: bold;
+ margin-left: 5rem;
+ }
+
+ .orderContainer {
+ margin-top: 50px;
+
+ .TopCategory {
+ width: 100%;
+ border-radius: 10px 10px 0px 0px;
+ display: grid;
+ grid-template-columns: 1fr 1fr 3fr 1fr 1fr;
+ height: 40px;
+ background-color: #e8e0d6;
+ align-items: center;
+ text-align: center;
+
+ margin: 0 auto;
+
+ .TopCategory-inner {
+ }
+ }
+
+ .orderBox {
+ padding-bottom: 10px;
+ width: 100%;
+ margin: 0 auto;
+ height: 400px;
+ max-height: 450px; /* 스크롤 영역의 최대 높이 설정 */
+ overflow-y: auto;
+ background-color: #faf4ee;
+ border-radius: 0px 0px 10px 10px;
+
+ .orderList {
+ display: grid;
+ grid-template-columns: 1fr 1fr 3fr 1fr 1fr;
+ align-items: center;
+ text-align: center;
+ width: 100%;
+ margin: 0 auto;
+ margin-top: 20px;
+ padding-bottom: 10px;
+ border-bottom: 2px solid rgb(208, 203, 185);
+
+ .Buy-ButtonBox {
+ button {
+ width: 30px;
+ }
+ }
+
+ .orderList-priceBox {
+ }
+ }
+
+ .orderList-ImageBox {
+ height: 140px;
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ padding-right: 10px;
+
+ img {
+ width: 100px;
+ }
+
+ .orderList-ImageBox__text {
+ width: 12.5rem;
+ }
+ }
+ }
+ }
+
+ .RentContainer-text {
+ margin: 30px 0;
+ width: 100px;
+ font-size: 25px;
+ font-weight: bold;
+ margin-left: 5rem;
+ }
+
+ .RentContainer {
+ .RentTop-Category {
+ width: 100%;
+ border-radius: 10px 10px 0px 0px;
+ display: grid;
+ grid-template-columns: 1fr 1fr 3fr 1fr 1fr;
+ height: 40px;
+ background-color: #e8e0d6;
+ margin: 0 auto;
+ align-items: center;
+ text-align: center;
+
+ .RentCategory-inner {
+ }
+ }
+
+ .RentBox {
+ padding-bottom: 10px;
+ width: 100%;
+ margin: 0 auto;
+ height: 400px;
+ max-height: 450px;
+ overflow-y: auto;
+ background-color: #faf4ee;
+ border-radius: 0px 0px 10px 10px;
+
+ .RentList {
+ display: grid;
+ align-items: center;
+ text-align: center;
+ grid-template-columns: 1fr 1fr 3fr 1fr 1fr;
+ width: 100%;
+ margin-top: 20px;
+ padding-bottom: 20px;
+ border-bottom: 2px solid rgb(208, 203, 185);
+
+ .RentList-ImageBox {
+ height: 140px;
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ padding-right: 10px;
+
+ img {
+ width: 100px;
+ }
+
+ .RentList-ImageBox__text {
+ position: relative;
+ width: 12.5rem;
+ height: min-content;
+ }
+ }
+ .Rent-ButtonBox {
+ button {
+ width: 30px;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/Components/Views/MyPage/MyPage.tsx b/src/Components/Views/MyPage/MyPage.tsx
new file mode 100644
index 00000000..3cc0e2f3
--- /dev/null
+++ b/src/Components/Views/MyPage/MyPage.tsx
@@ -0,0 +1,351 @@
+import { useState, useEffect } from 'react';
+import axios, { AxiosResponse } from 'axios';
+import Category from './common/components/Category';
+import { MypageToken } from '@/Apis/productApi';
+import { TokenMe } from '@/Apis/register';
+import './MyPage.scss';
+import Swal from 'sweetalert2';
+
+interface PaymentItem {
+ merchant_uid: string;
+ custom_data: string;
+ paid_at: string;
+}
+interface PaymentsResponse {
+ response: {
+ list: PaymentItem[];
+ };
+}
+interface CategoryMap {
+ readonly [key: string]: string;
+}
+
+interface PaymentsUser {
+ displayName: string;
+ email: string;
+}
+
+interface PageData {
+ gubun: string;
+ merchant_uid: string;
+ small_image: string;
+ product_name: string;
+ price: number;
+ custom_data: string;
+ paid_at: string;
+}
+function MyPage() {
+ const TopCategory: CategoryMap = {
+ orderId: '주문번호',
+ orderDate: '주문날짜',
+ productname: '상품이름',
+ price: '상품가격',
+ cancel: '구매취소',
+ } as const;
+ const [itemList, setItemList] = useState([]);
+ const [mydataList, setMydataList] = useState([]);
+ const [user, setUser] = useState({
+ displayName: '',
+ email: '',
+ });
+
+ const GetToken = async () => {
+ try {
+ const accessToken = await MypageToken();
+ return accessToken;
+ } catch (error) {
+ console.log(error);
+ throw error;
+ }
+ };
+
+ // const GetJson = (data: any) => {
+ // try {
+ // console.log(data.match(user.email));
+ // if (data.email == user.email) {
+ // console.log(JSON.parse(data));
+ // return true;
+ // }
+ // return false;
+ // } catch (e) {
+ // return false;
+ // }
+ // };
+
+ const GetJson = (data: any) => {
+ // console.log(data)
+ try {
+ if (data) {
+ // 문자열 배열 형태로 들어감
+ const datalist = Object.assign(data);
+ // 문자형. 이메일이 있는지 없는지 없는게 -1 , 없는게 아닐시
+ if (datalist.indexOf('email') != -1) {
+ // email이랑 user.email이 동일한지 체크
+ if (datalist.match(user.email)) {
+ return true;
+ }
+ } else {
+ return false;
+ }
+ } else {
+ return false;
+ }
+ } catch (e) {
+ console.log(e);
+ return false;
+ }
+ };
+
+ const fetchData = async (): Promise => {
+ setMydataList([]);
+ try {
+ //const paynumber: string | null = window.localStorage.getItem('mypayment');
+ const paynumber = true;
+ if (paynumber) {
+ //const merchantUids = JSON.parse(paynumber);
+ const accessToken = await GetToken();
+ const paymentsResponse: AxiosResponse =
+ await axios.get(
+ `/iamport/payments/status/paid?limit=100&sorting=paid&_token=${accessToken}`
+ );
+ if (
+ paymentsResponse.data &&
+ paymentsResponse.data.response &&
+ paymentsResponse.data.response.list
+ ) {
+ const filteredList: PaymentItem[] =
+ paymentsResponse.data.response.list.filter((item) =>
+ // 여기가 true일때 작동함.
+ GetJson(item.custom_data)
+ );
+
+ // const filteredList: PaymentItem[] =
+ // paymentsResponse.data.response.list.filter((item) =>
+ // //merchantUids.includes(item.merchant_uid)
+ // // item.custom_data && item.custom_data.includes(user.email)
+ // // item.custom_data && item.custom_data == user.email
+ // { console.log(item)
+ // return item.custom_data && item.custom_data.indexOf(user.email) != -1}
+ // );
+
+ console.log(filteredList);
+ if (filteredList) {
+ setItemList(filteredList);
+ } else {
+ setItemList([]);
+ }
+ } else {
+ console.log('Invalid response format');
+ setItemList([]);
+ }
+ }
+ } catch (error) {
+ console.log('Error occurred:', error);
+ }
+ };
+ useEffect(() => {
+ fetchData();
+ }, []);
+
+ useEffect(() => {
+ const Payauthenticate = async () => {
+ try {
+ const userData = await TokenMe();
+ setUser((prevUser) => ({
+ ...prevUser,
+ displayName: userData.displayName,
+ email: userData.email,
+ }));
+ } catch (error) {
+ console.error(error);
+ }
+ };
+ Payauthenticate();
+ }, []);
+
+ useEffect(() => {
+ setMydataList([]);
+ if (itemList.length === 0) {
+ return;
+ }
+
+ const checkJson = function (str: string) {
+ try {
+ JSON.parse(str);
+ } catch (e) {
+ return false;
+ }
+ return true;
+ };
+ const useData = itemList.filter((item) =>
+ //item.custom_data
+ GetJson(item.custom_data)
+ );
+
+ console.log(useData);
+ setMydataList([]);
+ useData.forEach((item) => {
+ if (checkJson(item.custom_data)) {
+ try {
+ let parsedData: PageData[] = JSON.parse(item.custom_data);
+ parsedData = parsedData.map((data) => ({
+ ...data,
+ paid_at: item.paid_at,
+ merchant_uid: item.merchant_uid,
+ }));
+
+ console.log(parsedData);
+ setMydataList((prevDataList) => [...prevDataList, ...parsedData]);
+ // setMydataList(parsedData);
+ } catch (error) {
+ console.error('Error parsing custom_data:', error);
+ }
+ }
+ });
+ }, [itemList]);
+
+ // const DeleteList = (itemnum: string) => {
+ // const MyPay = localStorage.getItem('mypayment');
+ // if (MyPay && MyPay.includes(itemnum)) {
+ // const updatedList = MyPay.replace(itemnum, '').trim();
+ // localStorage.setItem('mypayment', updatedList);
+ // }
+ // fetchData();
+ // };
+
+ const onClickDelete = (key: string) => {
+ Swal.fire({
+ title: '정말 환불하시겠습니까?',
+ text: '돌이킬 수 없습니다:(',
+ icon: 'warning',
+ showCancelButton: true,
+ confirmButtonColor: '#df307f',
+ cancelButtonColor: '#e24457',
+ confirmButtonText: '네',
+ cancelButtonText: '아니오',
+ }).then(async (result) => {
+ if (result.isConfirmed) {
+ const accessToken = await GetToken();
+ const data = {
+ merchant_uid: key,
+ };
+ await axios
+ .post(`/iamport/payments/cancel?_token=${accessToken}`, data)
+ .then((res) => {
+ if (res.status == 200) {
+ Swal.fire('주문이 취소되었습니다!', '', 'success');
+ // 취소한후 다시 데이터 불러옴.
+ fetchData(); //DeleteList(key);
+ } else {
+ console.log(res.status);
+ }
+ });
+ }
+ });
+ };
+
+ const getDate = function (param: any) {
+ const date = new Date(param * 1000);
+ const koreaTime = date.toLocaleString('ko-KR', {
+ timeZone: 'Asia/Seoul',
+ year: 'numeric',
+ month: '2-digit',
+ day: '2-digit',
+ });
+ return koreaTime;
+ };
+
+ const formatter = new Intl.NumberFormat('ko-KR');
+
+ return (
+ <>
+
+
+
+
+
+
+
+
구매 내역
+
+
+ {Object.keys(TopCategory).map((key) => {
+ return (
+
+ {TopCategory[key]}
+
+ );
+ })}
+
+
+ {mydataList
+ .filter((el: PageData) => el.gubun === 'buy')
+ .map((item: PageData, index: number) => (
+
+
{item.merchant_uid.replace('mid_', '')}
+
{getDate(item.paid_at)}
+
+
+
+ {item.product_name}
+
+
+
+ {formatter.format(item.price)}원
+
+
+
+
+
+ ))}
+
+
+
대여내역
+
+
+ {Object.keys(TopCategory).map((key) => {
+ return (
+
+ {TopCategory[key]}
+
+ );
+ })}
+
+
+ {mydataList
+ .filter((el: PageData) => el.gubun === 'rent')
+ .map((item: PageData, index: number) => (
+
+
{item.merchant_uid.replace('mid_', '')}
+
{getDate(item.paid_at)}
+
+
+
+ {item.product_name}
+
+
+
+ {formatter.format(item.price)}원
+
+
+
+
+
+ ))}
+
+
+
+
+
+ >
+ );
+}
+export default MyPage;
diff --git a/src/Components/Views/MyPage/UserInfo.scss b/src/Components/Views/MyPage/UserInfo.scss
new file mode 100644
index 00000000..363a771c
--- /dev/null
+++ b/src/Components/Views/MyPage/UserInfo.scss
@@ -0,0 +1,173 @@
+@import './common/StyleCommon.scss';
+
+.UserInfo-AllLayout{
+ @include AllLayoutStyle;
+ padding-bottom: 1000px;
+
+ .UserInfo-AllLayout__center{
+ @include LayoutCenterStyle;
+
+ .LeftContainer{
+ @include LeftContainerStyle;
+ }
+
+ .RightContainer{
+ @include RightContainerStyle;
+
+ .infoContainer{
+ position: relative;
+ top: 3rem;
+ padding-bottom: 183px;
+ margin-left: 4rem;
+ height: 90%;
+
+ .info{
+ position: relative;
+ top: 2rem;
+
+
+ .infoTag{
+ display: flex;
+
+ .infoText{
+ position: relative;
+ left:2rem;
+ font-size: 24px;
+ font-weight: 900;
+ color:black;
+ padding:.5rem 1rem;
+ margin-left: 2rem;
+ }
+ }
+
+ .infoBox{
+ position: relative;
+ margin: 2rem 4rem 0 4rem;
+ width: auto;
+ height: 30rem;
+
+ .infoImage-container{
+ display: flex;
+ position: absolute;
+ bottom: 10px;
+ width: 40rem;
+ right: 150px;
+
+ .infoImage-container__text{
+ width: 8rem;
+ padding-top: 10px;
+ text-align: center;
+ font-weight: bold;
+ }
+
+ .infoImageUpload{
+ position: relative;
+ bottom: -2px;
+ height: 60px;
+ left: 105px;
+ font-size: 13px;
+
+ .custom-file-input {
+ height: 40px;
+ display: inline-block;
+ border: 1px solid #ccc;
+ padding: 9px 12px 0px 13px;
+ cursor: pointer;
+ background-color: #f1f1f1;
+ color: #333;
+ border-radius: 4px;
+ }
+
+ .custom-file-input input[type="file"] {
+ display: none;
+ }
+ }
+
+ .fileMB{
+ position: relative;
+ bottom: -59px;
+ height: 20px;
+ left: -33px;
+ font-size: 13px;
+ }
+
+ .preview-container{
+ width: 12rem;
+ height: 150px;
+ position: relative;
+ background-color: #F5F5F5;
+ border-radius: 10px;
+ right: -20px;
+
+ span{
+ position: relative;
+ width: 50px;
+ margin-left: 45px;
+ top: 70px;
+ }
+
+ img{
+ width: inherit;
+ padding: 8px;
+ margin: 0 auto;
+ height: inherit;
+ z-index: 100px;
+ }
+ }
+ }
+
+ .infoList{
+ display:flex;
+ padding: 1.5rem 1.2rem;
+
+ .infoTitle{
+ width: 8rem;
+ padding-top: 10px;
+ text-align: center;
+ font-weight: bold;
+ }
+
+ .infoItem{
+ .infoItemForm{
+ padding: 15px;
+ margin-left: 15px;
+ width:300px;
+ background-color: white;
+ border: solid 1px rgb(221, 221, 221);
+ border-radius: .5rem;
+ }
+
+ span{
+ width: 100px;
+ height: 30px;
+ background-color: yellow;
+ }
+ }
+
+ .infoFix{
+ background-color:#C8B6A6;
+ border-radius: 10px;
+ margin-left: 10rem;
+ padding: 15px;
+ width: 12rem;
+ border: none;
+ color:#ffff;
+ font-weight: 700;
+ font-size: 15px;
+ position: absolute;
+ bottom: -83px;
+ left: 77px;
+ cursor: pointer;
+ &:hover {
+ background-color:#c3b6ab;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+}
+
diff --git a/src/Components/Views/MyPage/UserInfo.tsx b/src/Components/Views/MyPage/UserInfo.tsx
new file mode 100644
index 00000000..bb149336
--- /dev/null
+++ b/src/Components/Views/MyPage/UserInfo.tsx
@@ -0,0 +1,158 @@
+import { useState } from "react";
+import "./UserInfo.scss";
+import { InfoToken } from "@/Apis/register";
+import Category from "./common/components/Category";
+import Swal from "sweetalert2";
+
+function UserInfo() {
+ const [displayName, setDisplayName] = useState("");
+ const [oldPassword, setOldPassword] = useState("");
+ const [newPassword, setNewPassword] = useState("");
+ const [selectedImage, setSelectedImage] = useState(null);
+
+ async function submit(e: any) {
+ e.preventDefault();
+ try {
+ if (!displayName || !selectedImage || !oldPassword || !newPassword) {
+ alert("모든 필드를 입력해주세요.");
+ return;
+ }
+
+ await InfoToken(displayName, selectedImage, oldPassword, newPassword);
+ Swal.fire("수정 완료!", "", "success");
+ window.location.reload();
+ } catch (err) {
+ console.error("error");
+ Swal.fire("수정 실패!", "", "error");
+ window.location.reload();
+ }
+ }
+
+ const handleImageChange = (event: React.ChangeEvent) => {
+ const files = event.target.files;
+ if (files && files.length > 0) {
+ const file = files[0];
+ const fileSizeInBytes = file.size;
+ const maxSizeInBytes = 1 * 1024 * 1024;
+
+ if (fileSizeInBytes > maxSizeInBytes) {
+ alert("파일 용량은 1MB를 초과할 수 없습니다.");
+ return;
+ }
+
+ const reader = new FileReader();
+ reader.onload = (e) => {
+ setSelectedImage(e.target?.result as string);
+ };
+ reader.readAsDataURL(file);
+ }
+ };
+
+ return (
+ <>
+
+ >
+ );
+}
+
+export default UserInfo;
diff --git a/src/Components/Views/MyPage/common/StyleCommon.scss b/src/Components/Views/MyPage/common/StyleCommon.scss
new file mode 100644
index 00000000..5b905716
--- /dev/null
+++ b/src/Components/Views/MyPage/common/StyleCommon.scss
@@ -0,0 +1,31 @@
+@mixin AllLayoutStyle {
+ max-width: 1600px;
+ height: 1300px;
+ position: relative;
+ margin: 0 auto;
+}
+
+@mixin LayoutCenterStyle {
+ max-width: 1300px;
+ //position: absolute;
+ display: flex;
+ margin: 0 auto;
+ //left: 0;
+ //right: 0;
+ padding-top: 120px;
+}
+
+@mixin LeftContainerStyle {
+ width: 250px;
+ background-color: rgb(227 213 197);
+ border-radius: 10px 0px 0px 10px;
+}
+
+@mixin RightContainerStyle {
+ max-width: 1500px;
+ width: 80%;
+ border-radius: 0px 10px 10px 0px;
+ padding: 0 20px 30px;
+ //padding-bottom: 178px;
+ background-color: #f2e7d5;
+}
diff --git a/src/Components/Views/MyPage/common/components/Category.scss b/src/Components/Views/MyPage/common/components/Category.scss
new file mode 100644
index 00000000..32237999
--- /dev/null
+++ b/src/Components/Views/MyPage/common/components/Category.scss
@@ -0,0 +1,83 @@
+.LeftContainer{
+ width: 250px;
+ background-color: #F2E7D5;
+ border-radius: 10px 0px 0px 10px;
+
+ .LeftContainer-profile{
+ position: relative;
+ top:22px;
+ height: 250px;
+ text-align: center;
+
+ .LeftContainer-profile__Photo{
+ background-color: white;
+ position: relative;
+ top: 30px;
+ width: 120px;
+ height: 120px;
+ border: solid 1px rgb(243, 214, 172);
+ border-radius: 50%;
+ box-shadow: 2px 5px 5px rgb(0,0,0,.3);
+ background-position: center;
+ background-size: contain;
+ background-repeat: no-repeat;
+ overflow: hidden;
+ object-fit: cover;
+ }
+
+ .LeftContainer-profile__box{
+ position: relative;
+ margin-top: 2.5rem;
+ text-align: center;
+
+ .LeftContainer-profile__text{
+ padding-top: 1rem;
+ font-size: 1.5rem;
+ font-weight: bold;
+ }
+ }
+ }
+
+ .LeftContainer-category {
+ flex-direction: column;
+ position: relative;
+ height: 290px;
+ width: 200px;
+ bottom:10px;
+ margin: auto;
+
+ .active{
+ background-color: #F9F5EB;
+ }
+
+ a {
+ color: white;
+ top: 13px;
+ position: relative;
+ }
+
+ .LeftContainer-category__order {
+ width: 170px;
+ margin: 0 auto;
+ font-weight: bold;
+ position: relative;
+ padding: 15px;
+ color: black;
+ border-radius: 40px;
+ text-align: center;
+ top: 20px;
+ }
+
+ .LeftContainer-category__infoTap{
+ width: 190px;
+ margin: 0 auto;
+ font-weight: bold;
+ position: relative;
+ padding: 15px;
+ color: black;
+ text-align: center;
+ border-radius: 40px;
+ top: 40px;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Components/Views/MyPage/common/components/Category.tsx b/src/Components/Views/MyPage/common/components/Category.tsx
new file mode 100644
index 00000000..c09a8da0
--- /dev/null
+++ b/src/Components/Views/MyPage/common/components/Category.tsx
@@ -0,0 +1,91 @@
+import './Category.scss';
+import { Link } from 'react-router-dom';
+import { useState, useEffect } from 'react';
+import { TokenMe } from '@/Apis/register';
+
+interface User {
+ displayName: string;
+ profileImg: string;
+}
+
+const Category = () => {
+ const defaultProfileImgUrl = '/images/default-profile.jpg';
+ const [user, setUser] = useState({
+ displayName: '',
+ profileImg: defaultProfileImgUrl,
+ });
+
+ useEffect(() => {
+ const authenticate = async () => {
+ try {
+ const userData = await TokenMe();
+ setUser((prevUser) => ({
+ ...prevUser,
+ displayName: userData.displayName,
+ profileImg: userData.profileImg || defaultProfileImgUrl,
+ }));
+ } catch (error) {
+ console.error(error);
+ }
+ };
+
+ authenticate();
+ }, []);
+
+ useEffect(() => {
+ if (location.pathname === '/mypage') {
+ document
+ .querySelector('.LeftContainer-category__order')
+ ?.classList.add('active');
+ document
+ .querySelector('.LeftContainer-category__infoTap')
+ ?.classList.remove('active');
+ } else if (location.pathname === '/mypage/userinfo') {
+ document
+ .querySelector('.LeftContainer-category__order')
+ ?.classList.remove('active');
+ document
+ .querySelector('.LeftContainer-category__infoTap')
+ ?.classList.add('active');
+ }
+ }, [location]);
+
+ return (
+ <>
+
+
+
+
+
+
+
+ 주문내역조회
+
+
+
+
+ 회원정보 수정
+
+
+
+ >
+ );
+};
+
+export default Category;
diff --git a/src/Components/Views/SearchPage/SearchPage.scss b/src/Components/Views/SearchPage/SearchPage.scss
new file mode 100644
index 00000000..be488248
--- /dev/null
+++ b/src/Components/Views/SearchPage/SearchPage.scss
@@ -0,0 +1,160 @@
+.count {
+ margin: 10px 0;
+ width: 100%;
+ padding: 0 50px;
+ font-weight: bold;
+ color: #4b2300;
+}
+hr {
+ width: 1200px;
+ background-color: #ca9f12;
+ height: 2px;
+ border: none;
+ margin-bottom: 15px;
+}
+.Search-wrapper {
+ width: 1200px;
+ margin: auto;
+ min-height: 100vh;
+ padding-top: 100px;
+}
+.SearchPage {
+ display: flex;
+ border-bottom: 2px solid #ca9f12;
+ width: 100%;
+ height: 250px;
+ margin-bottom: 15px;
+}
+
+// 책 표지
+.SearchPage__Images {
+ display: flex;
+ justify-content: center;
+ width: 270px;
+ height: 250px;
+
+ img {
+ height: 95%;
+ box-shadow: 3px 3px 3px 1px gray;
+ }
+}
+
+// 상세설명
+.SearchPage__Items {
+ display: flex;
+ flex-direction: column;
+ flex-grow: 1;
+ width: 500px;
+ gap: 20px;
+ position: relative;
+ // 책 제목
+ h1 {
+ font-size: 26px;
+ width: 100%;
+ }
+ .SearchPage__Item {
+ // 줄거리
+ p:nth-child(1) {
+ font-size: 16px;
+ width: 100%;
+ color: #595959;
+ }
+ // 태그
+ p:nth-child(2) {
+ font-size: 15px;
+ margin-top: 10px;
+ width: 100%;
+ }
+ }
+}
+.SearchPage__Price {
+ position: absolute;
+ bottom: 10px;
+ // 판매가
+ p:nth-child(1) {
+ color: red;
+ font-size: 20px;
+ font-weight: bold;
+ margin-bottom: 10px;
+ }
+ // 정가
+ p:nth-child(2) {
+ color: #808080;
+ font-size: 15px;
+ }
+}
+
+// 구매,대여 공통
+.SearchPage__ButtonBox {
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-end;
+ margin-bottom: 5px;
+
+ button {
+ border-radius: 5px;
+ margin: 5px;
+ width: 80px;
+ height: 45px;
+ color: #fff;
+ border: none;
+ font-size: 15px;
+ cursor: pointer;
+ font-family: "SUITE-Regular";
+ box-shadow: 3px 3px 3px gray;
+ }
+
+ // 구매버튼
+ button:first-child {
+ background-color: #df307f;
+ }
+ // 대여버튼
+ button:last-child {
+ background-color: #e24457;
+ }
+}
+.no_content {
+ width: 1200px;
+ margin: auto;
+ min-height: 100vh;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ p {
+ font-size: 24px;
+ }
+}
+// 페이지네이션
+.pagination {
+ ul {
+ display: flex;
+ justify-content: center;
+ padding: 20px 0;
+
+ li {
+ list-style: none;
+ }
+
+ .button_1 {
+ width: 30px;
+ height: 30px;
+ background-color: #ca9f12;
+ border: none;
+ border-radius: 50%;
+ margin: 0 5px;
+ color: #fff;
+ cursor: pointer;
+ }
+ .button_2 {
+ width: 30px;
+ height: 30px;
+ background-color: #f0c741;
+ border: 2px solid #ca9f12;
+ border-radius: 50%;
+ margin: 0 5px;
+ color: #fff;
+ cursor: pointer;
+ box-shadow: 2px 2px 1.5px gray;
+ }
+ }
+}
diff --git a/src/Components/Views/SearchPage/SearchPage.tsx b/src/Components/Views/SearchPage/SearchPage.tsx
new file mode 100644
index 00000000..5926e528
--- /dev/null
+++ b/src/Components/Views/SearchPage/SearchPage.tsx
@@ -0,0 +1,181 @@
+import { useState, useEffect } from "react";
+import "./SearchPage.scss";
+import axios from "axios";
+import { useParams, useNavigate, Link } from "react-router-dom";
+const { VITE_CLIENT_ID } = import.meta.env;
+import Swal from "sweetalert2";
+
+const ajax = axios.create({
+ baseURL: "/cafe24",
+ headers: {
+ "Content-Type": "application/json",
+ "X-Cafe24-Api-Version": "2023-03-01",
+ "X-Cafe24-Client-Id": VITE_CLIENT_ID,
+ },
+});
+
+interface Product {
+ detail_image: string;
+ product_name: string;
+ retail_price: number;
+ simple_description: string;
+ summary_description: string;
+ product_no: string;
+ price: number;
+ price_excluding_tax: string;
+ selling: string;
+ description: string;
+ rentdate: number;
+ gubun: string;
+}
+
+interface SearchItem {
+ rentdate?: number;
+ gubun: string;
+ product_no: string;
+}
+
+export default function SearchPage() {
+ const navigate = useNavigate();
+ const [search, setSearch] = useState();
+ const [offset, setOffset] = useState(0);
+ const [count, setCount] = useState(0);
+ const params = useParams<{ keyword?: string }>();
+
+ async function SearchAPI(product_name: string) {
+ try {
+ const res = await ajax.get("/products", {
+ params: {
+ product_name,
+ offset: offset * 10,
+ },
+ });
+ return res.data.products as Product[];
+ } catch (err) {
+ console.log(err);
+ return [] as Product[];
+ }
+ }
+
+ useEffect(() => {
+ (async () => {
+ if (params.keyword) {
+ await ajax
+ .get("/products/count", {
+ params: {
+ product_name: params.keyword,
+ },
+ })
+ .then((res) => setCount(res.data.count));
+ const result = await SearchAPI(params.keyword);
+ setSearch(result);
+
+ console.log(result);
+ window.scrollTo(0, 0);
+ }
+ })();
+ }, [params, offset]);
+
+ const BuyBook = (search: SearchItem, type: string) => {
+ console.log(search);
+ const cart: SearchItem[] = JSON.parse(localStorage.getItem("cart") || "[]");
+
+ if (cart.some((item) => item.product_no === search.product_no)) {
+ Swal.fire("이미 장바구니에 담으셨습니다.", "", "warning");
+ return false;
+ }
+
+ const searchItem: SearchItem =
+ type === "rent"
+ ? { ...search, rentdate: 7, gubun: type }
+ : { ...search, gubun: type };
+ cart.push(searchItem);
+
+ const updatedCart = Array.from(new Set(cart));
+ localStorage.setItem("cart", JSON.stringify(updatedCart));
+
+ alert("장바구니에 담겼습니다.");
+ navigate("/cart");
+ };
+
+ const formatter = new Intl.NumberFormat("ko-KR");
+
+ return (
+ <>
+ {search?.length === 0 ? (
+
+ ) : (
+
+
+ 😶🌫️ "{params.keyword}"에 대한 검색결과가 총 {count}개 있습니다.
+
+
+ {search &&
+ search.map((item: any) => {
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
{item.product_name}
+
+
+
+
{item.summary_description}
+
{item.product_tag}
+
+
+
{formatter.format(item.price)}원
+
{formatter.format(item.retail_price)}원
+
+
+
+
+
+
+
+ >
+ );
+ })}
+
+
{
+ if (e.target instanceof HTMLLIElement) {
+ setOffset(e.target.value);
+ }
+ }}
+ >
+ {Array(parseInt(((count - 0.1) / 10 + 1).toString()))
+ .fill(0)
+ .map((index) => (
+ -
+
+
+ ))}
+
+
+
+ )}
+ >
+ );
+}
diff --git a/src/bookcustom/bookcustom.scss b/src/bookcustom/bookcustom.scss
new file mode 100644
index 00000000..ad459a4d
--- /dev/null
+++ b/src/bookcustom/bookcustom.scss
@@ -0,0 +1,150 @@
+@import url(https://fonts.googleapis.com/css?family=Crimson+Text:400,700,900,400italic,700italic,900italic|Playfair+Display:400,700,900,400italic,700italic,900italic|Rock+Salt:400);
+#container {
+ float: left;
+ padding: 1em;
+ width: 100%;
+}
+
+/*** OPEN BOOK ***/
+.open-book {
+ width: 1300PX;
+ box-shadow: rgba(0,0,0,0.5) 0 1em 3em;
+ padding: 0.7em;
+ background-color:rgb(129, 90, 4);
+}
+
+.open-book * {
+ position: relative;
+ height: 700px;
+ background-color:rgb(255, 255, 254);
+}
+
+
+/* Body Copy */
+.open-book article {
+ line-height: 1.5;
+}
+
+.open-book article *:not(.chapter-title):not(hr):not(dl) {
+ margin: 0 auto;
+ max-width: 28.125em;
+}
+
+.open-book article > ul ul {
+ padding-left: 1em;
+}
+
+.open-book hr {
+ background-color: #000;
+ border: 0;
+ height: 2px;
+ margin: 1em 0;
+}
+
+/*** MEDIA QUERIES ***/
+@media only screen and ( min-width: 50em ) {
+
+ .open-book {
+ margin: 1em;
+ position: relative;
+ }
+
+ .open-book:after {
+ background: linear-gradient(to right, transparent 0%,rgba(0,0,0,0.2) 46%,rgba(0,0,0,0.5) 49%,rgba(0,0,0,0.6) 50%,rgba(0,0,0,0.5) 51%,rgba(0,0,0,0.2) 52%,transparent 100%);
+ bottom: 0.5em;
+ content: '';
+ left: 50%;
+ position: absolute;
+ top: 0.5em;
+ transform: translate(-50%,0);
+ width: 3em;
+ z-index: 1;
+ }
+
+ .open-book > * {
+ column-count: 2;
+ column-gap: 6em;
+ position: relative;
+ z-index: 1;
+ }
+
+ /* Header/Footer */
+ .open-book header:before,
+ .open-book header:after,
+ .open-book footer:before,
+ .open-book footer:after {
+ background: #fff;
+ border-radius: 25%;
+ content: '';
+ height: 2em;
+ position: absolute;
+ z-index: -1;
+ width: calc(50% + 2em);
+ }
+
+ .open-book header:before,
+ .open-book footer:before,
+ .open-book footer:after {
+ border-top-left-radius: 0;
+ }
+
+ .open-book header:after,
+ .open-book footer:before,
+ .open-book footer:after {
+ border-top-right-radius: 0;
+ }
+
+ .open-book header:before,
+ .open-book header:after,
+ .open-book footer:after {
+ border-bottom-right-radius: 0;
+ }
+
+ .open-book header:before,
+ .open-book header:after,
+ .open-book footer:before {
+ border-bottom-left-radius: 0;
+ }
+
+ .open-book header:before,
+ .open-book header:after {
+ top: -2.65em;
+ }
+
+ .open-book header:before,
+ .open-book footer:before {
+ right: 50%;
+ }
+
+ .open-book header:before {
+ transform: rotate(-2deg);
+ }
+
+ .open-book header:after,
+ .open-book footer:after {
+ left: 50%;
+ }
+
+ .open-book header:after {
+ transform: rotate(2deg);
+ }
+
+ .open-book footer:before,
+ .open-book footer:after {
+ bottom: -2.65em;
+ }
+
+ .open-book footer:before {
+ transform: rotate(2deg);
+ }
+
+ .open-book footer:after {
+ transform: rotate(-2deg);
+ }
+
+ .open-book header > *:last-child,
+ .open-book footer > *:last-child {
+ text-align: right;
+ }
+
+}
\ No newline at end of file
diff --git a/src/bookcustom/bookcustom.tsx b/src/bookcustom/bookcustom.tsx
new file mode 100644
index 00000000..839bdd77
--- /dev/null
+++ b/src/bookcustom/bookcustom.tsx
@@ -0,0 +1,21 @@
+import'./bookcustom.scss'
+
+
+function BookCustom(){
+ return(
+ <>
+
+ >
+ )
+}
+export default BookCustom
+
+
+
+
diff --git a/src/index.scss b/src/index.scss
new file mode 100644
index 00000000..e69de29b
diff --git a/src/main.tsx b/src/main.tsx
new file mode 100644
index 00000000..b7365bd7
--- /dev/null
+++ b/src/main.tsx
@@ -0,0 +1,60 @@
+import ReactDOM from 'react-dom/client';
+import App from './App';
+import axios from 'axios';
+import './index.scss';
+
+const token = localStorage.getItem('token');
+
+// 토큰을 저장하는 함수
+const saveTokenToLocalStorage = (token: string) => {
+ localStorage.setItem('token', token);
+};
+
+// 토큰 갱신 인터셉터
+axios.interceptors.response.use(
+ (response) => {
+ // 응답 처리
+ return response;
+ },
+ (error) => {
+ if (error.response.status === 401) {
+ console.log('401 에러 발생: 토큰 제거하지 않음');
+ alert('401 에러 발생');
+ // 401 에러 발생 시 토큰을 제거하는 로직 추가
+ removeTokenFromLocalStorage();
+ }
+ return Promise.reject(error);
+ }
+);
+
+// 토큰을 제거하는 함수
+const removeTokenFromLocalStorage = () => {
+ localStorage.removeItem('token');
+};
+
+if (token) {
+ saveTokenToLocalStorage(token);
+} else {
+ removeTokenFromLocalStorage();
+}
+
+// 토큰 갱신 인터셉터
+axios.interceptors.response.use(
+ (response) => {
+ // 응답 처리
+ return response;
+ },
+ (error) => {
+ if (error.response.status === 401) {
+ console.log('401 에러 발생: 토큰 제거하지 않음');
+ alert('401 에러 발생');
+ // 401 에러 발생 시 토큰을 제거하는 로직 추가
+ removeTokenFromLocalStorage();
+ }
+ return Promise.reject(error);
+ }
+);
+
+ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
+
+);
diff --git a/src/routes/privateRoute.tsx b/src/routes/privateRoute.tsx
new file mode 100644
index 00000000..92a2a92e
--- /dev/null
+++ b/src/routes/privateRoute.tsx
@@ -0,0 +1,34 @@
+import { Navigate } from 'react-router-dom';
+
+interface PrivatePageProps {
+ component: any;
+ status: string;
+}
+
+function PrivatePage({component:Component, status:Status}: PrivatePageProps) {
+
+ const token = localStorage.getItem("token")
+
+ let tokenCheck = false;
+ let result = null;
+
+ if(token){
+ tokenCheck = true;
+ }
+
+
+ if(tokenCheck){
+ result = Component;
+ } else {
+ if (!Status) {
+ alert("접근할수 없는 페이지 입니다");
+ result = ;
+ } else {
+ result = Status;
+ }
+ }
+ return result;
+}
+export default PrivatePage
+
+
diff --git a/src/routes/route.scss b/src/routes/route.scss
new file mode 100644
index 00000000..2fe04208
--- /dev/null
+++ b/src/routes/route.scss
@@ -0,0 +1,5 @@
+.ALL-layout__background{
+ width: 1300px;
+ background-color: aliceblue;
+ position: relative;
+}
\ No newline at end of file
diff --git a/src/routes/routes.tsx b/src/routes/routes.tsx
new file mode 100644
index 00000000..7dccaeca
--- /dev/null
+++ b/src/routes/routes.tsx
@@ -0,0 +1,55 @@
+import Header from "@/Common/Layout/Header/header";
+import Footer from "@/Common/Layout/Footer/footer";
+import MainPage from "@/Components/Views/MainPage/MainPage";
+import Join from "@/Common/Form/Signin/join";
+import Login from "@/Common/Form/Login/login";
+import CartPage from "@/Components/Views/CartPage/CartPage";
+import MyPage from "@/Components/Views/MyPage/MyPage";
+import PrivatePage from "./privateRoute";
+import DetailPage from "@/Components/Views/DetailPage/DetailPage";
+import UserInfo from "@/Components/Views/MyPage/UserInfo";
+import SearchPage from "@/Components/Views/SearchPage/SearchPage";
+import './route.scss';
+import { Routes, BrowserRouter, Route, Outlet } from "react-router-dom";
+
+const Layout = () => {
+ return (
+ <>
+
+
+
+ >
+ );
+};
+
+function RoutesPage() {
+ return (
+ <>
+
+
+ }>
+ } />
+ } />
+ } />
+ } />
+ } />
+ } status={""} />}
+ />
+ } status={""} />}
+ />
+ } status={""} />}
+ />
+ {/* }/> */}
+
+
+
+ >
+ );
+}
+export default RoutesPage;
diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts
new file mode 100644
index 00000000..11f02fe2
--- /dev/null
+++ b/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/teamwink.com-key.pem b/teamwink.com-key.pem
new file mode 100644
index 00000000..8468774f
--- /dev/null
+++ b/teamwink.com-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCaL6qFc6t6Jx0S
+mFvGJF6H4vtBMNtOq9ultbm3jhDJsN369vEs1/53bs8toTiYVWw5Bl8wv7BvM1t0
+wos/SseLM7GLe7XUrPdnZpKX0MTDduhgUdoLQNux28b9W5pGdMz8W2l4xj7dYSnG
+FBCSJwALEh/tEBz+6JPNaw5/GQbWp6g5+J+G/zlNevIOdojLY5G6fZnQsssjy3H0
+YAtLKVZ97CS+tmXOXZgtxyhHPIowlYj2ZBHY9N413unWim42mW/U2+fD7KC6tU9z
+2tR/Apptjl2XhNgKgHz83LQ7kAIIIvVHcA5pwkvX6iA7GY6eOHyTdcnkH9kmKxkO
+hHehwo3bAgMBAAECggEAFvM/Y4vbG1yVFD5/cpfZRkq/8W0vR5+HGzxYf3zy/MKJ
+2CBHt9ASvX5N8lHMFcipSjerlZsCzRqM421NwscDurGgHM32O8jfLpHzAgv+LcYW
+QrgMR56I1QmMrgujhBdAp9OHeIWxt8wNpsE30jlh5UP2YpgCaOL/lRT5XGvCO9MP
+rtZQ1UMgik3TKBlZ7HznEdkiAEprtW5wl+3pnJeWGnUwXZuizzN7N5FVBZrdsaik
+NnmpGTbCpWdmYbas0Q8EuWGVnEfrFFDmGK0n2EFthwGWKLoApNrcWPx/kVmLTJSD
+cfAM+dKClrD2hPXn34wOzcwxq4Oc7OTmTuvDHdBjkQKBgQDH1soIsMQX1jgdHxtm
+YDI2sz21xmkW3L+bKA027nbYQX27AQAulh7ddd3NJV5MfyqbGvhDUEKeeDkg5xat
+DnbA5m5dmwiDFNDZ2Bpj+ffqiBpW25oR4PajPnBGVJn4KvEWuUKBSpnKyKxZnM7A
+jGUfHX98xY5eOdSi8UM9dHbdEwKBgQDFhG6NS6SbOMsStoAcNA+Xrqyeiaj+DONR
+vJc7EFM2g05L2w0lzHUlcnwJ4sG7uWMB0y8k7dcfvxBCGJmBFBcW8qvQfo95C8tc
+Phw5RHoYGH4m2OKTmIhtmcQlG7TcOWreTq7nsIFTZDpOZsA/HMVQ3jL9Ki+9aNbC
+A3t8Uf8NGQKBgQC62Jz2GzB9iRHWSKt5wR+x/U0JlIXVlnigPYZ9geEkubcxDfJ5
+nGsnbXkAwpu0soHHnCPb7EMdoBLqLKcLD6cBHXK7mqUOynur815Zc/LVGoRmCdW4
+ObrhTxPy7k83tg7MzFLeSD4bWB2te+vkJGC4AwCcTKqcdz3VS/cukqJAeQKBgCaS
+8YA4uKHz2n0CFUzswerOmzmvCsjqvW5WFXbcflPUGvNniU7Leklg7WaE2W8PCo3t
+r3RX2r6Bcuxln3z87nF13SYvwVdTfVi7bImmnO2dwu1VSBKpJGO7NvpESfMEZ6GY
+3kGzT954YYa0PHFW7hYX/v9AQOiN0/s58ODbpqLpAoGAbnvh3eeyUNMtOmCfRXbm
+55is4H/PyegQWjEUKQitmeC4qB0FVjc3Vj9EK3oHDhY7Yvm6dpMDVKkSJDgtJ/6n
+GBkKofq68vExLGnw2wcfhoYvQ37NhgxRC4EeAKJ3IXBc2+kB/fp/iKy2TNDwRqdO
+3MEPev12LZMT/9JP9CQAAiE=
+-----END PRIVATE KEY-----
diff --git a/teamwink.com.pem b/teamwink.com.pem
new file mode 100644
index 00000000..c4b5d9e3
--- /dev/null
+++ b/teamwink.com.pem
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIESTCCArGgAwIBAgIQZT7xdqSRlxq89ZYCBxU7+jANBgkqhkiG9w0BAQsFADCB
+hTEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMS0wKwYDVQQLDCRMQVBU
+T1AtTk1URzNJQ1NcdXNlckBMQVBUT1AtTk1URzNJQ1MxNDAyBgNVBAMMK21rY2Vy
+dCBMQVBUT1AtTk1URzNJQ1NcdXNlckBMQVBUT1AtTk1URzNJQ1MwHhcNMjMwNjA5
+MTUzNTQ1WhcNMjUwOTA5MTUzNTQ1WjBYMScwJQYDVQQKEx5ta2NlcnQgZGV2ZWxv
+cG1lbnQgY2VydGlmaWNhdGUxLTArBgNVBAsMJExBUFRPUC1OTVRHM0lDU1x1c2Vy
+QExBUFRPUC1OTVRHM0lDUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AJovqoVzq3onHRKYW8YkXofi+0Ew206r26W1ubeOEMmw3fr28SzX/nduzy2hOJhV
+bDkGXzC/sG8zW3TCiz9Kx4szsYt7tdSs92dmkpfQxMN26GBR2gtA27Hbxv1bmkZ0
+zPxbaXjGPt1hKcYUEJInAAsSH+0QHP7ok81rDn8ZBtanqDn4n4b/OU168g52iMtj
+kbp9mdCyyyPLcfRgC0spVn3sJL62Zc5dmC3HKEc8ijCViPZkEdj03jXe6daKbjaZ
+b9Tb58PsoLq1T3Pa1H8Cmm2OXZeE2AqAfPzctDuQAggi9UdwDmnCS9fqIDsZjp44
+fJN1yeQf2SYrGQ6Ed6HCjdsCAwEAAaNhMF8wDgYDVR0PAQH/BAQDAgWgMBMGA1Ud
+JQQMMAoGCCsGAQUFBwMBMB8GA1UdIwQYMBaAFA9/1gWEm3zDQBNwV0zQfANqNe1b
+MBcGA1UdEQQQMA6CDHRlYW13aW5rLmNvbTANBgkqhkiG9w0BAQsFAAOCAYEAWHIc
+wS76b8rHGPgCRs3koCzeMIY6z+6791w/YozRCCjXOfJjJwjL7ruLxKl6W9h002U/
+tkjpLPsSUtDrLxvYulfn2/mI3f2o0yllFha3BYrrOiZYEYRQSiEnnFUQW9gUdp+R
+9wS2Ofggxr/kfhZxRXn5RlPmZ3iIm4rf/XSPHEL5cfvidWpPK0EUOZB45bGk083x
+BnG2MC3PoJajSq6mxwotqNiIsvYclsQbKOmtlOMp6wl0CmoK+QiVuiyqi7E8xLzF
+zKtA0Pj23tCxfz7E+ZUASSMQxfoCiZip9ADsi4cxnmT1rwY4Agvstuj928R993KD
+xVHrkXjhZ3OiMcxktu6qQjVC/cm7TaO9tECU1SnSBgFF1mWiCIASrIrcZ+kVb67J
+NsavwgmmAHRpYe51VtFOMabFiJcvKYCTfB6NJGosHtFArv7loNTjqUwFEWVD3UYA
+cU5mIx6e/m0FKFEB2mPXCYF/qyifgi0zGv32RnwUmSL/jOFFwyuHsZrbrxQt
+-----END CERTIFICATE-----
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 00000000..4e0d67aa
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,31 @@
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "useDefineForClassFields": true,
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+ "baseUrl": "./",
+ "paths": {
+ "@/*": ["src/*"]
+ },
+
+ /* Bundler mode */
+ // "moduleResolution": "bundler",
+ "moduleResolution": "Node",
+ "esModuleInterop": true,
+ "allowImportingTsExtensions": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "jsx": "react-jsx",
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "include": ["src", "src/main.tsx", "vite-env.d.ts", "client"],
+ "references": [{ "path": "./tsconfig.node.json" }]
+}
diff --git a/tsconfig.node.json b/tsconfig.node.json
new file mode 100644
index 00000000..cfa1ab5b
--- /dev/null
+++ b/tsconfig.node.json
@@ -0,0 +1,10 @@
+{
+ "compilerOptions": {
+ "composite": true,
+ "skipLibCheck": true,
+ "module": "ESNext",
+ "moduleResolution": "node",
+ "allowSyntheticDefaultImports": true
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/vite.config.ts b/vite.config.ts
new file mode 100644
index 00000000..ad417abd
--- /dev/null
+++ b/vite.config.ts
@@ -0,0 +1,31 @@
+import { defineConfig } from "vite";
+import react from "@vitejs/plugin-react-swc";
+import sassDts from "vite-plugin-sass-dts";
+import mkcert from "vite-plugin-mkcert";
+import path from "path";
+const __dirname = path.resolve();
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [react(), sassDts(), mkcert()],
+ resolve: {
+ alias: [{ find: "@", replacement: `${__dirname}/src` }],
+ },
+ server: {
+ host: "teamwink.com",
+ proxy: {
+ "/cafe24": {
+ target: "https://teamwink.cafe24api.com/api/v2",
+ changeOrigin: true,
+ secure: false,
+ rewrite: (path) => path.replace(/^\/cafe24/, ""),
+ },
+ "/iamport": {
+ target: "https://api.iamport.kr/",
+ changeOrigin: true,
+ secure: false,
+ rewrite: (path) => path.replace(/^\/iamport/, ""),
+ },
+ },
+ },
+});
diff --git a/vite.config.ts.timestamp-1687497662715-2af11b3632e8c.mjs b/vite.config.ts.timestamp-1687497662715-2af11b3632e8c.mjs
new file mode 100644
index 00000000..767efed3
--- /dev/null
+++ b/vite.config.ts.timestamp-1687497662715-2af11b3632e8c.mjs
@@ -0,0 +1,35 @@
+// vite.config.ts
+import { defineConfig } from "file:///C:/Users/user/Desktop/WinkBook/node_modules/vite/dist/node/index.js";
+import react from "file:///C:/Users/user/Desktop/WinkBook/node_modules/@vitejs/plugin-react-swc/index.mjs";
+import sassDts from "file:///C:/Users/user/Desktop/WinkBook/node_modules/vite-plugin-sass-dts/dist/index.js";
+import mkcert from "file:///C:/Users/user/Desktop/WinkBook/node_modules/vite-plugin-mkcert/dist/mkcert.mjs";
+import path from "path";
+
+var __dirname = path.resolve();
+var vite_config_default = defineConfig({
+ plugins: [react(), sassDts(), mkcert()],
+ resolve: {
+ alias: [{ find: "@", replacement: `${__dirname}/src` }]
+ },
+ server: {
+ host: "teamwink.com",
+ proxy: {
+ "/cafe24": {
+ target: "https://teamwink.cafe24api.com/api/v2",
+ changeOrigin: true,
+ secure: false,
+ rewrite: (path2) => path2.replace(/^\/cafe24/, "")
+ },
+ "/iamport": {
+ target: "https://api.iamport.kr/",
+ changeOrigin: true,
+ secure: false,
+ rewrite: (path2) => path2.replace(/^\/iamport/, "")
+ }
+ }
+ }
+});
+export {
+ vite_config_default as default
+};
+//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFx1c2VyXFxcXERlc2t0b3BcXFxcV2lua0Jvb2tcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkM6XFxcXFVzZXJzXFxcXHVzZXJcXFxcRGVza3RvcFxcXFxXaW5rQm9va1xcXFx2aXRlLmNvbmZpZy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovVXNlcnMvdXNlci9EZXNrdG9wL1dpbmtCb29rL3ZpdGUuY29uZmlnLnRzXCI7aW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcInZpdGVcIjtcclxuaW1wb3J0IHJlYWN0IGZyb20gXCJAdml0ZWpzL3BsdWdpbi1yZWFjdC1zd2NcIjtcclxuaW1wb3J0IHNhc3NEdHMgZnJvbSBcInZpdGUtcGx1Z2luLXNhc3MtZHRzXCI7XHJcbmltcG9ydCBta2NlcnQgZnJvbSBcInZpdGUtcGx1Z2luLW1rY2VydFwiO1xyXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xyXG5jb25zdCBfX2Rpcm5hbWUgPSBwYXRoLnJlc29sdmUoKTtcclxuXHJcbi8vIGh0dHBzOi8vdml0ZWpzLmRldi9jb25maWcvXHJcbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZyh7XHJcbiAgcGx1Z2luczogW3JlYWN0KCksIHNhc3NEdHMoKSwgbWtjZXJ0KCldLFxyXG4gIHJlc29sdmU6IHtcclxuICAgIGFsaWFzOiBbeyBmaW5kOiBcIkBcIiwgcmVwbGFjZW1lbnQ6IGAke19fZGlybmFtZX0vc3JjYCB9XSxcclxuICB9LFxyXG4gIHNlcnZlcjoge1xyXG4gICAgaG9zdDogXCJ0ZWFtd2luay5jb21cIixcclxuICAgIHByb3h5OiB7XHJcbiAgICAgIFwiL2NhZmUyNFwiOiB7XHJcbiAgICAgICAgdGFyZ2V0OiBcImh0dHBzOi8vdGVhbXdpbmsuY2FmZTI0YXBpLmNvbS9hcGkvdjJcIixcclxuICAgICAgICBjaGFuZ2VPcmlnaW46IHRydWUsXHJcbiAgICAgICAgc2VjdXJlOiBmYWxzZSxcclxuICAgICAgICByZXdyaXRlOiAocGF0aCkgPT4gcGF0aC5yZXBsYWNlKC9eXFwvY2FmZTI0LywgXCJcIiksXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiL2lhbXBvcnRcIjoge1xyXG4gICAgICAgIHRhcmdldDogXCJodHRwczovL2FwaS5pYW1wb3J0LmtyL1wiLFxyXG4gICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcclxuICAgICAgICBzZWN1cmU6IGZhbHNlLFxyXG4gICAgICAgIHJld3JpdGU6IChwYXRoKSA9PiBwYXRoLnJlcGxhY2UoL15cXC9pYW1wb3J0LywgXCJcIiksXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gIH0sXHJcbn0pO1xyXG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQXNSLFNBQVMsb0JBQW9CO0FBQ25ULE9BQU8sV0FBVztBQUNsQixPQUFPLGFBQWE7QUFDcEIsT0FBTyxZQUFZO0FBQ25CLE9BQU8sVUFBVTtBQUNqQixJQUFNLFlBQVksS0FBSyxRQUFRO0FBRy9CLElBQU8sc0JBQVEsYUFBYTtBQUFBLEVBQzFCLFNBQVMsQ0FBQyxNQUFNLEdBQUcsUUFBUSxHQUFHLE9BQU8sQ0FBQztBQUFBLEVBQ3RDLFNBQVM7QUFBQSxJQUNQLE9BQU8sQ0FBQyxFQUFFLE1BQU0sS0FBSyxhQUFhLEdBQUcsZ0JBQWdCLENBQUM7QUFBQSxFQUN4RDtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ04sTUFBTTtBQUFBLElBQ04sT0FBTztBQUFBLE1BQ0wsV0FBVztBQUFBLFFBQ1QsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsUUFBUTtBQUFBLFFBQ1IsU0FBUyxDQUFDQSxVQUFTQSxNQUFLLFFBQVEsYUFBYSxFQUFFO0FBQUEsTUFDakQ7QUFBQSxNQUNBLFlBQVk7QUFBQSxRQUNWLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFFBQVE7QUFBQSxRQUNSLFNBQVMsQ0FBQ0EsVUFBU0EsTUFBSyxRQUFRLGNBQWMsRUFBRTtBQUFBLE1BQ2xEO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRixDQUFDOyIsCiAgIm5hbWVzIjogWyJwYXRoIl0KfQo=