From cfe0dbe65a35eea280a7509f62d787ccb68bfcdd Mon Sep 17 00:00:00 2001 From: Mukhtar Rafi Fauzi Date: Mon, 11 Dec 2023 23:51:49 +0700 Subject: [PATCH 01/25] setup for access_token --- client/.eslintrc.cjs | 20 + client/.gitignore | 24 + client/README.md | 8 + client/index.html | 13 + client/package-lock.json | 4812 +++++++++++++++++++++++++++++++ client/package.json | 31 + client/postcss.config.js | 6 + client/public/vite.svg | 1 + client/src/App.jsx | 13 + client/src/assets/react.svg | 1 + client/src/buttons/LoginBtn.jsx | 19 + client/src/index.css | 3 + client/src/main.jsx | 8 + client/src/pages/Login.jsx | 32 + client/tailwind.config.js | 19 + client/vite.config.js | 7 + 16 files changed, 5017 insertions(+) create mode 100644 client/.eslintrc.cjs create mode 100644 client/.gitignore create mode 100644 client/README.md create mode 100644 client/index.html create mode 100644 client/package-lock.json create mode 100644 client/package.json create mode 100644 client/postcss.config.js create mode 100644 client/public/vite.svg create mode 100644 client/src/App.jsx create mode 100644 client/src/assets/react.svg create mode 100644 client/src/buttons/LoginBtn.jsx create mode 100644 client/src/index.css create mode 100644 client/src/main.jsx create mode 100644 client/src/pages/Login.jsx create mode 100644 client/tailwind.config.js create mode 100644 client/vite.config.js diff --git a/client/.eslintrc.cjs b/client/.eslintrc.cjs new file mode 100644 index 0000000..4dcb439 --- /dev/null +++ b/client/.eslintrc.cjs @@ -0,0 +1,20 @@ +module.exports = { + root: true, + env: { browser: true, es2020: true }, + extends: [ + 'eslint:recommended', + 'plugin:react/recommended', + 'plugin:react/jsx-runtime', + 'plugin:react-hooks/recommended', + ], + ignorePatterns: ['dist', '.eslintrc.cjs'], + parserOptions: { ecmaVersion: 'latest', sourceType: 'module' }, + settings: { react: { version: '18.2' } }, + plugins: ['react-refresh'], + rules: { + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, +} diff --git a/client/.gitignore b/client/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/client/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/client/README.md b/client/README.md new file mode 100644 index 0000000..f768e33 --- /dev/null +++ b/client/README.md @@ -0,0 +1,8 @@ +# React + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh diff --git a/client/index.html b/client/index.html new file mode 100644 index 0000000..0c589ec --- /dev/null +++ b/client/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + + +
+ + + diff --git a/client/package-lock.json b/client/package-lock.json new file mode 100644 index 0000000..218635d --- /dev/null +++ b/client/package-lock.json @@ -0,0 +1,4812 @@ +{ + "name": "client", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "client", + "version": "0.0.0", + "dependencies": { + "axios": "^1.6.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.20.1" + }, + "devDependencies": { + "@types/react": "^18.2.37", + "@types/react-dom": "^18.2.15", + "@vitejs/plugin-react": "^4.2.0", + "autoprefixer": "^10.4.16", + "eslint": "^8.53.0", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.4", + "postcss": "^8.4.32", + "tailwindcss": "^3.3.6", + "vite": "^5.0.0" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.5.tgz", + "integrity": "sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.5", + "@babel/parser": "^7.23.5", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.5", + "@babel/types": "^7.23.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.5.tgz", + "integrity": "sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.5.tgz", + "integrity": "sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.5", + "@babel/types": "^7.23.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.5.tgz", + "integrity": "sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz", + "integrity": "sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz", + "integrity": "sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.5.tgz", + "integrity": "sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.5", + "@babel/types": "^7.23.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.5.tgz", + "integrity": "sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.9.tgz", + "integrity": "sha512-jkYjjq7SdsWuNI6b5quymW0oC83NN5FdRPuCbs9HZ02mfVdAP8B8eeqLSYU3gb6OJEaY5CQabtTFbqBf26H3GA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.9.tgz", + "integrity": "sha512-q4cR+6ZD0938R19MyEW3jEsMzbb/1rulLXiNAJQADD/XYp7pT+rOS5JGxvpRW8dFDEfjW4wLgC/3FXIw4zYglQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.9.tgz", + "integrity": "sha512-KOqoPntWAH6ZxDwx1D6mRntIgZh9KodzgNOy5Ebt9ghzffOk9X2c1sPwtM9P+0eXbefnDhqYfkh5PLP5ULtWFA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.9.tgz", + "integrity": "sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.9.tgz", + "integrity": "sha512-vE0VotmNTQaTdX0Q9dOHmMTao6ObjyPm58CHZr1UK7qpNleQyxlFlNCaHsHx6Uqv86VgPmR4o2wdNq3dP1qyDQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.9.tgz", + "integrity": "sha512-uFQyd/o1IjiEk3rUHSwUKkqZwqdvuD8GevWF065eqgYfexcVkxh+IJgwTaGZVu59XczZGcN/YMh9uF1fWD8j1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.9.tgz", + "integrity": "sha512-WMLgWAtkdTbTu1AWacY7uoj/YtHthgqrqhf1OaEWnZb7PQgpt8eaA/F3LkV0E6K/Lc0cUr/uaVP/49iE4M4asA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.9.tgz", + "integrity": "sha512-C/ChPohUYoyUaqn1h17m/6yt6OB14hbXvT8EgM1ZWaiiTYz7nWZR0SYmMnB5BzQA4GXl3BgBO1l8MYqL/He3qw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.9.tgz", + "integrity": "sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.9.tgz", + "integrity": "sha512-f37i/0zE0MjDxijkPSQw1CO/7C27Eojqb+r3BbHVxMLkj8GCa78TrBZzvPyA/FNLUMzP3eyHCVkAopkKVja+6Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.9.tgz", + "integrity": "sha512-t6mN147pUIf3t6wUt3FeumoOTPfmv9Cc6DQlsVBpB7eCpLOqQDyWBP1ymXn1lDw4fNUSb/gBcKAmvTP49oIkaA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.9.tgz", + "integrity": "sha512-jg9fujJTNTQBuDXdmAg1eeJUL4Jds7BklOTkkH80ZgQIoCTdQrDaHYgbFZyeTq8zbY+axgptncko3v9p5hLZtw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.9.tgz", + "integrity": "sha512-tkV0xUX0pUUgY4ha7z5BbDS85uI7ABw3V1d0RNTii7E9lbmV8Z37Pup2tsLV46SQWzjOeyDi1Q7Wx2+QM8WaCQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.9.tgz", + "integrity": "sha512-DfLp8dj91cufgPZDXr9p3FoR++m3ZJ6uIXsXrIvJdOjXVREtXuQCjfMfvmc3LScAVmLjcfloyVtpn43D56JFHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.9.tgz", + "integrity": "sha512-zHbglfEdC88KMgCWpOl/zc6dDYJvWGLiUtmPRsr1OgCViu3z5GncvNVdf+6/56O2Ca8jUU+t1BW261V6kp8qdw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.9.tgz", + "integrity": "sha512-JUjpystGFFmNrEHQnIVG8hKwvA2DN5o7RqiO1CVX8EN/F/gkCjkUMgVn6hzScpwnJtl2mPR6I9XV1oW8k9O+0A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.9.tgz", + "integrity": "sha512-GThgZPAwOBOsheA2RUlW5UeroRfESwMq/guy8uEe3wJlAOjpOXuSevLRd70NZ37ZrpO6RHGHgEHvPg1h3S1Jug==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.9.tgz", + "integrity": "sha512-Ki6PlzppaFVbLnD8PtlVQfsYw4S9n3eQl87cqgeIw+O3sRr9IghpfSKY62mggdt1yCSZ8QWvTZ9jo9fjDSg9uw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.9.tgz", + "integrity": "sha512-MLHj7k9hWh4y1ddkBpvRj2b9NCBhfgBt3VpWbHQnXRedVun/hC7sIyTGDGTfsGuXo4ebik2+3ShjcPbhtFwWDw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.9.tgz", + "integrity": "sha512-GQoa6OrQ8G08guMFgeXPH7yE/8Dt0IfOGWJSfSH4uafwdC7rWwrfE6P9N8AtPGIjUzdo2+7bN8Xo3qC578olhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.9.tgz", + "integrity": "sha512-UOozV7Ntykvr5tSOlGCrqU3NBr3d8JqPes0QWN2WOXfvkWVGRajC+Ym0/Wj88fUgecUCLDdJPDF0Nna2UK3Qtg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.9.tgz", + "integrity": "sha512-oxoQgglOP7RH6iasDrhY+R/3cHrfwIDvRlT4CGChflq6twk8iENeVvMJjmvBb94Ik1Z+93iGO27err7w6l54GQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "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.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", + "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.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": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "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/@remix-run/router": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.13.1.tgz", + "integrity": "sha512-so+DHzZKsoOcoXrILB4rqDkMDy7NLMErRdOxvzvOKb507YINKUP4Di+shbTZDhSE/pBZ+vr7XGIpcOO0VLSA+Q==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.8.0.tgz", + "integrity": "sha512-zdTObFRoNENrdPpnTNnhOljYIcOX7aI7+7wyrSpPFFIOf/nRdedE6IYsjaBE7tjukphh1tMTojgJ7p3lKY8x6Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.8.0.tgz", + "integrity": "sha512-aiItwP48BiGpMFS9Znjo/xCNQVwTQVcRKkFKsO81m8exrGjHkCBDvm9PHay2kpa8RPnZzzKcD1iQ9KaLY4fPQQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.8.0.tgz", + "integrity": "sha512-zhNIS+L4ZYkYQUjIQUR6Zl0RXhbbA0huvNIWjmPc2SL0cB1h5Djkcy+RZ3/Bwszfb6vgwUvcVJYD6e6Zkpsi8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.8.0.tgz", + "integrity": "sha512-A/FAHFRNQYrELrb/JHncRWzTTXB2ticiRFztP4ggIUAfa9Up1qfW8aG2w/mN9jNiZ+HB0t0u0jpJgFXG6BfRTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.8.0.tgz", + "integrity": "sha512-JsidBnh3p2IJJA4/2xOF2puAYqbaczB3elZDT0qHxn362EIoIkq7hrR43Xa8RisgI6/WPfvb2umbGsuvf7E37A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.8.0.tgz", + "integrity": "sha512-hBNCnqw3EVCkaPB0Oqd24bv8SklETptQWcJz06kb9OtiShn9jK1VuTgi7o4zPSt6rNGWQOTDEAccbk0OqJmS+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.8.0.tgz", + "integrity": "sha512-Fw9ChYfJPdltvi9ALJ9wzdCdxGw4wtq4t1qY028b2O7GwB5qLNSGtqMsAel1lfWTZvf4b6/+4HKp0GlSYg0ahA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.8.0.tgz", + "integrity": "sha512-BH5xIh7tOzS9yBi8dFrCTG8Z6iNIGWGltd3IpTSKp6+pNWWO6qy8eKoRxOtwFbMrid5NZaidLYN6rHh9aB8bEw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.8.0.tgz", + "integrity": "sha512-PmvAj8k6EuWiyLbkNpd6BLv5XeYFpqWuRvRNRl80xVfpGXK/z6KYXmAgbI4ogz7uFiJxCnYcqyvZVD0dgFog7Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.8.0.tgz", + "integrity": "sha512-mdxnlW2QUzXwY+95TuxZ+CurrhgrPAMveDWI97EQlA9bfhR8tw3Pt7SUlc/eSlCNxlWktpmT//EAA8UfCHOyXg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.8.0.tgz", + "integrity": "sha512-ge7saUz38aesM4MA7Cad8CHo0Fyd1+qTaqoIo+Jtk+ipBi4ATSrHWov9/S4u5pbEQmLjgUjB7BJt+MiKG2kzmA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.8.0.tgz", + "integrity": "sha512-p9E3PZlzurhlsN5h9g7zIP1DnqKXJe8ZUkFwAazqSvHuWfihlIISPxG9hCHCoA+dOOspL/c7ty1eeEVFTE0UTw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.8.0.tgz", + "integrity": "sha512-kb4/auKXkYKqlUYTE8s40FcJIj5soOyRLHKd4ugR0dCq0G2EfcF54eYcfQiGkHzjidZ40daB4ulsFdtqNKZtBg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.7", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", + "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", + "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.2.43", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.43.tgz", + "integrity": "sha512-nvOV01ZdBdd/KW6FahSbcNplt2jCJfyWdTos61RYHV+FVv5L/g9AOX1bmbVcWcLFL8+KHQfh1zVIQrud6ihyQA==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.17", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.17.tgz", + "integrity": "sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", + "dev": true + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", + "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.5", + "@babel/plugin-transform-react-jsx-self": "^7.23.3", + "@babel/plugin-transform-react-jsx-source": "^7.23.3", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "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-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", + "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + } + }, + "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/autoprefixer": { + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", + "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "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/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001568", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001568.tgz", + "integrity": "sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "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/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "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/electron-to-chromium": { + "version": "1.4.609", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.609.tgz", + "integrity": "sha512-ihiCP7PJmjoGNuLpl7TjNA8pCQWu09vGyjlPYw1Rqww4gvNuCcmvl+44G+2QyJ6S2K4o+wbTS++Xz0YN8Q9ERw==", + "dev": true + }, + "node_modules/es-abstract": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", + "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "dev": true, + "dependencies": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.0.1" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.9.tgz", + "integrity": "sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.19.9", + "@esbuild/android-arm64": "0.19.9", + "@esbuild/android-x64": "0.19.9", + "@esbuild/darwin-arm64": "0.19.9", + "@esbuild/darwin-x64": "0.19.9", + "@esbuild/freebsd-arm64": "0.19.9", + "@esbuild/freebsd-x64": "0.19.9", + "@esbuild/linux-arm": "0.19.9", + "@esbuild/linux-arm64": "0.19.9", + "@esbuild/linux-ia32": "0.19.9", + "@esbuild/linux-loong64": "0.19.9", + "@esbuild/linux-mips64el": "0.19.9", + "@esbuild/linux-ppc64": "0.19.9", + "@esbuild/linux-riscv64": "0.19.9", + "@esbuild/linux-s390x": "0.19.9", + "@esbuild/linux-x64": "0.19.9", + "@esbuild/netbsd-x64": "0.19.9", + "@esbuild/openbsd-x64": "0.19.9", + "@esbuild/sunos-x64": "0.19.9", + "@esbuild/win32-arm64": "0.19.9", + "@esbuild/win32-ia32": "0.19.9", + "@esbuild/win32-x64": "0.19.9" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", + "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.55.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "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.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "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", + "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.3", + "strip-ansi": "^6.0.1", + "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": { + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "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.4.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.5.tgz", + "integrity": "sha512-D53FYKJa+fDmZMtriODxvhwrO+IOqrxoEo21gMA0sjHdU6dPVH4OhyFip9ypl8HOF5RV5KdTo+rBQLvnY2cO8w==", + "dev": true, + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "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-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "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/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "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.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.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/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/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/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.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "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==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "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/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "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==", + "dev": true, + "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/internal-slot": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "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/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "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/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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==", + "dev": true + }, + "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.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/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==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": 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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "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==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", + "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-import/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.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/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "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/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", + "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "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/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "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": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "6.20.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.20.1.tgz", + "integrity": "sha512-ccvLrB4QeT5DlaxSFFYi/KR8UMQ4fcD8zBcR71Zp1kaYTC5oJKYAp1cbavzGrogwxca+ubjkd7XjFZKBW8CxPA==", + "dependencies": { + "@remix-run/router": "1.13.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.20.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.20.1.tgz", + "integrity": "sha512-npzfPWcxfQN35psS7rJgi/EW0Gx6EsNjfdJSAk73U/HqMEJZ2k/8puxfwHFgDQhBGmS3+sjnGbMdMSV45axPQw==", + "dependencies": { + "@remix-run/router": "1.13.1", + "react-router": "6.20.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", + "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.8.0.tgz", + "integrity": "sha512-NpsklK2fach5CdI+PScmlE5R4Ao/FSWtF7LkoIrHDxPACY/xshNasPsbpG0VVHxUTbf74tJbVT4PrP8JsJ6ZDA==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.8.0", + "@rollup/rollup-android-arm64": "4.8.0", + "@rollup/rollup-darwin-arm64": "4.8.0", + "@rollup/rollup-darwin-x64": "4.8.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.8.0", + "@rollup/rollup-linux-arm64-gnu": "4.8.0", + "@rollup/rollup-linux-arm64-musl": "4.8.0", + "@rollup/rollup-linux-riscv64-gnu": "4.8.0", + "@rollup/rollup-linux-x64-gnu": "4.8.0", + "@rollup/rollup-linux-x64-musl": "4.8.0", + "@rollup/rollup-win32-arm64-msvc": "4.8.0", + "@rollup/rollup-win32-ia32-msvc": "4.8.0", + "@rollup/rollup-win32-x64-msvc": "4.8.0", + "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/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.6.tgz", + "integrity": "sha512-AKjF7qbbLvLaPieoKeTjG1+FyNZT6KaJMJPFeQyLfIp7l82ggH1fbHJSsYIvnbTFQOlkh+gBYpyby5GT1LIdLw==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.19.1", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.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/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/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/vite": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.7.tgz", + "integrity": "sha512-B4T4rJCDPihrQo2B+h1MbeGL/k/GMAHzhQ8S0LjQ142s6/+l3hHTT095ORvsshj4QCkoWu3Xtmob5mazvakaOw==", + "dev": true, + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "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" + } + } + } +} diff --git a/client/package.json b/client/package.json new file mode 100644 index 0000000..b7f934b --- /dev/null +++ b/client/package.json @@ -0,0 +1,31 @@ +{ + "name": "client", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview" + }, + "dependencies": { + "axios": "^1.6.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.20.1" + }, + "devDependencies": { + "@types/react": "^18.2.37", + "@types/react-dom": "^18.2.15", + "@vitejs/plugin-react": "^4.2.0", + "autoprefixer": "^10.4.16", + "eslint": "^8.53.0", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.4", + "postcss": "^8.4.32", + "tailwindcss": "^3.3.6", + "vite": "^5.0.0" + } +} diff --git a/client/postcss.config.js b/client/postcss.config.js new file mode 100644 index 0000000..2e7af2b --- /dev/null +++ b/client/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/client/public/vite.svg b/client/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/client/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/src/App.jsx b/client/src/App.jsx new file mode 100644 index 0000000..9079a06 --- /dev/null +++ b/client/src/App.jsx @@ -0,0 +1,13 @@ +import { useState } from 'react' +import Login from './pages/Login' + +function App() { + + return ( + <> + + + ) +} + +export default App diff --git a/client/src/assets/react.svg b/client/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/client/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/src/buttons/LoginBtn.jsx b/client/src/buttons/LoginBtn.jsx new file mode 100644 index 0000000..7e6d5ee --- /dev/null +++ b/client/src/buttons/LoginBtn.jsx @@ -0,0 +1,19 @@ +export default function LoginBtn(props) { + let url = props.url + // console.log(url); + return ( + <> + + + + + + Login with Spotify + + + + ) +} \ No newline at end of file diff --git a/client/src/index.css b/client/src/index.css new file mode 100644 index 0000000..bd6213e --- /dev/null +++ b/client/src/index.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file diff --git a/client/src/main.jsx b/client/src/main.jsx new file mode 100644 index 0000000..f5d4ccb --- /dev/null +++ b/client/src/main.jsx @@ -0,0 +1,8 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import App from './App.jsx' +import './index.css' + +ReactDOM.createRoot(document.getElementById('root')).render( + +) diff --git a/client/src/pages/Login.jsx b/client/src/pages/Login.jsx new file mode 100644 index 0000000..b57c093 --- /dev/null +++ b/client/src/pages/Login.jsx @@ -0,0 +1,32 @@ +import LoginBtn from "../buttons/LoginBtn"; + +export default function Login() { + + const SPOTIFY_CLIENT_ID = 'd86db55895ca45319957a258fac15a79' + const REDIRECT_URI = "http://localhost:5173/callback" + const AUTH_ENDPOINT = 'https://accounts.spotify.com/authorize' + const RESPONSE_TYPE = 'code' + const SCOPES = [ + 'streaming', + 'user-read-private', + 'user-read-email', + 'user-read-recently-played', + 'user-read-playback-state', + 'user-modify-playback-state', + 'user-library-modify', + 'user-library-read', + 'user-follow-modify', + 'playlist-read-private', + 'playlist-modify-public', + 'playlist-modify-private', + 'user-top-read' + ].join(' '); + + let scopes_encoded = SCOPES.replace(' ', '%20'); + + return ( + <> + + + ) +} \ No newline at end of file diff --git a/client/tailwind.config.js b/client/tailwind.config.js new file mode 100644 index 0000000..0b0fa1b --- /dev/null +++ b/client/tailwind.config.js @@ -0,0 +1,19 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + "./index.html", + "./src/**/*.{js,ts,jsx,tsx}", + ], + theme: { + extend: { + colors: { + 'primary' : '#1db954', + 'secondary' : '#212121', + 'textLighter' : '#f0efef', + 'textDark' : '#2d2d2d', + 'textLight': '#bbc7c7' + } + }, + }, + plugins: [], +} \ No newline at end of file diff --git a/client/vite.config.js b/client/vite.config.js new file mode 100644 index 0000000..5a33944 --- /dev/null +++ b/client/vite.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], +}) From 94c5e0ea085200d8cf07614cdeeb634c6c347e7b Mon Sep 17 00:00:00 2001 From: Mukhtar Rafi Fauzi Date: Mon, 11 Dec 2023 23:57:47 +0700 Subject: [PATCH 02/25] init server side --- server/.gitignore | 1 + server/package-lock.json | 840 +++++++++++++++++++++++++++++++++++++++ server/package.json | 17 + server/server.js | 0 4 files changed, 858 insertions(+) create mode 100644 server/.gitignore create mode 100644 server/package-lock.json create mode 100644 server/package.json create mode 100644 server/server.js diff --git a/server/.gitignore b/server/.gitignore new file mode 100644 index 0000000..b512c09 --- /dev/null +++ b/server/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/server/package-lock.json b/server/package-lock.json new file mode 100644 index 0000000..4b2837a --- /dev/null +++ b/server/package-lock.json @@ -0,0 +1,840 @@ +{ + "name": "server", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "server", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "express": "^4.18.2", + "spotify-web-api-node": "^5.0.2" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "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/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/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/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formidable": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", + "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", + "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau", + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "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==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "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/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "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/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/spotify-web-api-node": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/spotify-web-api-node/-/spotify-web-api-node-5.0.2.tgz", + "integrity": "sha512-r82dRWU9PMimHvHEzL0DwEJrzFk+SMCVfq249SLt3I7EFez7R+jeoKQd+M1//QcnjqlXPs2am4DFsGk8/GCsrA==", + "dependencies": { + "superagent": "^6.1.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/superagent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-6.1.0.tgz", + "integrity": "sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg==", + "deprecated": "Please upgrade to v7.0.2+ of superagent. We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing. See the releases tab for more information at .", + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.2", + "debug": "^4.1.1", + "fast-safe-stringify": "^2.0.7", + "form-data": "^3.0.0", + "formidable": "^1.2.2", + "methods": "^1.1.2", + "mime": "^2.4.6", + "qs": "^6.9.4", + "readable-stream": "^3.6.0", + "semver": "^7.3.2" + }, + "engines": { + "node": ">= 7.0.0" + } + }, + "node_modules/superagent/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/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/superagent/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/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } +} diff --git a/server/package.json b/server/package.json new file mode 100644 index 0000000..b241f9d --- /dev/null +++ b/server/package.json @@ -0,0 +1,17 @@ +{ + "name": "server", + "version": "1.0.0", + "description": "", + "main": "server.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node server.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "express": "^4.18.2", + "spotify-web-api-node": "^5.0.2" + } +} diff --git a/server/server.js b/server/server.js new file mode 100644 index 0000000..e69de29 From 47677d6d2625861848896dda4c2e7fa98534ea8f Mon Sep 17 00:00:00 2001 From: Mukhtar Rafi Fauzi Date: Tue, 12 Dec 2023 14:11:34 +0700 Subject: [PATCH 03/25] feat: access token client: get authorization code to exchange to access token server: exchange authorization code to access token --- client/src/App.jsx | 7 +- client/src/hooks/useAuth.jsx | 26 +++ client/src/pages/Dashboard.jsx | 11 + client/src/pages/Login.jsx | 2 + server/package-lock.json | 379 +++++++++++++++++++++++++++++++++ server/package.json | 4 + server/server.js | 38 ++++ 7 files changed, 464 insertions(+), 3 deletions(-) create mode 100644 client/src/hooks/useAuth.jsx create mode 100644 client/src/pages/Dashboard.jsx diff --git a/client/src/App.jsx b/client/src/App.jsx index 9079a06..e42a5f9 100644 --- a/client/src/App.jsx +++ b/client/src/App.jsx @@ -1,11 +1,12 @@ -import { useState } from 'react' +import Dashboard from './pages/Dashboard' import Login from './pages/Login' - +const code = new URLSearchParams(window.location.search).get('code') +// console.log(code); function App() { return ( <> - + {code ? : } ) } diff --git a/client/src/hooks/useAuth.jsx b/client/src/hooks/useAuth.jsx new file mode 100644 index 0000000..6a59369 --- /dev/null +++ b/client/src/hooks/useAuth.jsx @@ -0,0 +1,26 @@ +import { useEffect, useState } from "react"; +import axios from "axios"; + +export default function useAuth(code) { + const [accessToken, setAccessToken] = useState() + const [refreshToken, setRefreshToken] = useState() + const [expiresIn, setExpiresIn] = useState() + + console.log(code); + const postCode = async () => { + try { + await axios({ + url: 'http://localhost:3000/login', + method: 'POST', + data: {code} + }) + console.log(res.data); + } catch (error) { + window.location = '/' + console.log(error); + } + } + useEffect(() => { + postCode() + }, [code]) +} \ No newline at end of file diff --git a/client/src/pages/Dashboard.jsx b/client/src/pages/Dashboard.jsx new file mode 100644 index 0000000..a910ef3 --- /dev/null +++ b/client/src/pages/Dashboard.jsx @@ -0,0 +1,11 @@ +import useAuth from "../hooks/useAuth" + +export default function Dashboard({code}) { + const accessToken = useAuth(code) + return( + <> +

Dashboard

+

{code}

+ + ) +} \ No newline at end of file diff --git a/client/src/pages/Login.jsx b/client/src/pages/Login.jsx index b57c093..2fe3234 100644 --- a/client/src/pages/Login.jsx +++ b/client/src/pages/Login.jsx @@ -26,7 +26,9 @@ export default function Login() { return ( <> +
+
) } \ No newline at end of file diff --git a/server/package-lock.json b/server/package-lock.json index 4b2837a..baaae04 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -9,10 +9,20 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "cors": "^2.8.5", "express": "^4.18.2", "spotify-web-api-node": "^5.0.2" + }, + "devDependencies": { + "nodemon": "^3.0.2" } }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -25,6 +35,19 @@ "node": ">= 0.6" } }, + "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==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -35,6 +58,21 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, + "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/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/body-parser": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", @@ -58,6 +96,28 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -79,6 +139,33 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "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/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -98,6 +185,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -135,6 +228,18 @@ "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -253,6 +358,18 @@ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/finalhandler": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", @@ -308,6 +425,20 @@ "node": ">= 0.6" } }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -330,6 +461,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -341,6 +484,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/has-property-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", @@ -411,6 +563,12 @@ "node": ">=0.10.0" } }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -424,6 +582,48 @@ "node": ">= 0.10" } }, + "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==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -486,6 +686,18 @@ "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.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -499,6 +711,89 @@ "node": ">= 0.6" } }, + "node_modules/nodemon": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.2.tgz", + "integrity": "sha512-9qIN2LNTrEzpOPBaWHTm4Asy1LxXLSickZStAQ4IZe7zsoIpD/A7LWxhZV3t4Zu352uBcqVnRsDXSMR2Sc3lTA==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "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==", + "dev": true, + "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/object-inspect": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", @@ -531,6 +826,18 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -543,6 +850,12 @@ "node": ">= 0.10" } }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, "node_modules/qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", @@ -592,6 +905,18 @@ "node": ">= 6" } }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -704,6 +1029,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/spotify-web-api-node": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/spotify-web-api-node/-/spotify-web-api-node-5.0.2.tgz", @@ -782,6 +1119,30 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "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==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -790,6 +1151,18 @@ "node": ">=0.6" } }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -802,6 +1175,12 @@ "node": ">= 0.6" } }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", diff --git a/server/package.json b/server/package.json index b241f9d..0223ccd 100644 --- a/server/package.json +++ b/server/package.json @@ -11,7 +11,11 @@ "author": "", "license": "ISC", "dependencies": { + "cors": "^2.8.5", "express": "^4.18.2", "spotify-web-api-node": "^5.0.2" + }, + "devDependencies": { + "nodemon": "^3.0.2" } } diff --git a/server/server.js b/server/server.js index e69de29..ac3ecc1 100644 --- a/server/server.js +++ b/server/server.js @@ -0,0 +1,38 @@ +const express = require('express'); +const SpotifyWebApi = require('spotify-web-api-node'); +const cors = require('cors'); + +const app = express(); +app.use(cors()) +app.use(express.json()); +app.use(express.urlencoded({ extended: true })); + +app.post('/login', async (req, res) => { + try { + const code = req.body.code; + console.log(code, "<<<<<"); + const spotifyApi = new SpotifyWebApi({ + redirectUri: 'http://localhost:5173/callback', + clientId: 'd86db55895ca45319957a258fac15a79', + clientSecret: '61eb0859df554b0fa74994456208cbe5' + }); + + const data = await spotifyApi.authorizationCodeGrant(code); + console.log(data, "<-- data "); + res.json({ + accessToken: data.body.access_token, + refreshToken: data.body.refresh_token, + expiresIn: data.body.expires_in + }); + } catch (error) { + console.error(error); + res.status(400).json({ + message: 'Bad request', + }); + } +}); + +const PORT = 3000; +app.listen(PORT, () => { + console.log(`Server is running on port ${PORT}`); +}); From 6485df77e1d3eba49d0ca12fce8fc4330527baa6 Mon Sep 17 00:00:00 2001 From: Mukhtar Rafi Fauzi Date: Tue, 12 Dec 2023 21:17:20 +0700 Subject: [PATCH 04/25] styling: home - add sidebar component - fix server --- client/package-lock.json | 9 ++ client/package.json | 1 + client/src/App.jsx | 12 ++- client/src/components/Home/Home.jsx | 7 ++ client/src/components/Sidebar/Sidebar.jsx | 73 ++++++++++++++++ client/src/components/Sidebar/Signup.jsx | 19 ++++ client/src/components/Sidebar/signup.css | 5 ++ client/src/hooks/useAuth.jsx | 18 ++-- client/src/index.css | 29 ++++++- client/src/layout/Layout.jsx | 12 +++ server/package-lock.json | 101 ++++++++++++++++++++-- server/package.json | 2 + server/server.js | 8 +- 13 files changed, 268 insertions(+), 28 deletions(-) create mode 100644 client/src/components/Home/Home.jsx create mode 100644 client/src/components/Sidebar/Sidebar.jsx create mode 100644 client/src/components/Sidebar/Signup.jsx create mode 100644 client/src/components/Sidebar/signup.css create mode 100644 client/src/layout/Layout.jsx diff --git a/client/package-lock.json b/client/package-lock.json index 218635d..9add5c2 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -11,6 +11,7 @@ "axios": "^1.6.2", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-icons": "^4.12.0", "react-router-dom": "^6.20.1" }, "devDependencies": { @@ -3889,6 +3890,14 @@ "react": "^18.2.0" } }, + "node_modules/react-icons": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.12.0.tgz", + "integrity": "sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw==", + "peerDependencies": { + "react": "*" + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", diff --git a/client/package.json b/client/package.json index b7f934b..73f8a5f 100644 --- a/client/package.json +++ b/client/package.json @@ -13,6 +13,7 @@ "axios": "^1.6.2", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-icons": "^4.12.0", "react-router-dom": "^6.20.1" }, "devDependencies": { diff --git a/client/src/App.jsx b/client/src/App.jsx index e42a5f9..1129903 100644 --- a/client/src/App.jsx +++ b/client/src/App.jsx @@ -1,13 +1,19 @@ +import { BrowserRouter as Router,Routes, Route } from 'react-router-dom' import Dashboard from './pages/Dashboard' import Login from './pages/Login' +import Home from './components/Home/Home' + const code = new URLSearchParams(window.location.search).get('code') // console.log(code); function App() { return ( - <> - {code ? : } - + + + }> + + + ) } diff --git a/client/src/components/Home/Home.jsx b/client/src/components/Home/Home.jsx new file mode 100644 index 0000000..33e0506 --- /dev/null +++ b/client/src/components/Home/Home.jsx @@ -0,0 +1,7 @@ +import Layout from "../../layout/Layout"; + +export default function Home() { + return + Home + +} diff --git a/client/src/components/Sidebar/Sidebar.jsx b/client/src/components/Sidebar/Sidebar.jsx new file mode 100644 index 0000000..6867eb4 --- /dev/null +++ b/client/src/components/Sidebar/Sidebar.jsx @@ -0,0 +1,73 @@ +import { BiSolidHome } from "react-icons/bi"; +import { FiSearch } from "react-icons/fi"; +import { FaPlus } from "react-icons/fa"; +import { LuLibrary } from "react-icons/lu"; +import { TfiWorld } from "react-icons/tfi"; +import Signup from "./Signup"; + +export default function Sidebar() { + return ( + <> +
+ {/* Nav Home & Search */} +
+
+ + Home +
+
+ + Search +
+
+ {/* Nav Your Lib */} +
+
+
+ + Your Library +
+ +
+ {/* Playlists bar */} +
+ +
+

Create your first playlist

+

It's easy, we'll help you

+ +
+ {/* Podcasts bar */} +
+

Let's find some podcast to follow

+

We'll keep you updated on new episode

+ +
+
+
+ Legal + Blabla + Blublu + Zazu +
+ +
+ + {/* */} + + + +
+ + + ) +} \ No newline at end of file diff --git a/client/src/components/Sidebar/Signup.jsx b/client/src/components/Sidebar/Signup.jsx new file mode 100644 index 0000000..415c9bb --- /dev/null +++ b/client/src/components/Sidebar/Signup.jsx @@ -0,0 +1,19 @@ +import './signup.css'; + +export default function Signup() { + return ( +
+
+

+ Preview on Spotify +

+

+ Sign up to get unlimited songs and podcasts with occasional ads. No credit card needed. +

+
+ +
+ ) +} \ No newline at end of file diff --git a/client/src/components/Sidebar/signup.css b/client/src/components/Sidebar/signup.css new file mode 100644 index 0000000..e4c699e --- /dev/null +++ b/client/src/components/Sidebar/signup.css @@ -0,0 +1,5 @@ +.signup_bar { + background: linear-gradient(90deg, #af2896, #509bf5); + width: 100%; + left: 0; +} \ No newline at end of file diff --git a/client/src/hooks/useAuth.jsx b/client/src/hooks/useAuth.jsx index 6a59369..70994bb 100644 --- a/client/src/hooks/useAuth.jsx +++ b/client/src/hooks/useAuth.jsx @@ -6,19 +6,13 @@ export default function useAuth(code) { const [refreshToken, setRefreshToken] = useState() const [expiresIn, setExpiresIn] = useState() - console.log(code); - const postCode = async () => { - try { - await axios({ - url: 'http://localhost:3000/login', - method: 'POST', - data: {code} - }) + // console.log(code); + const postCode = () => { + axios.post('http://localhost:3000/login', { + code, + }).then(res => { console.log(res.data); - } catch (error) { - window.location = '/' - console.log(error); - } + }) } useEffect(() => { postCode() diff --git a/client/src/index.css b/client/src/index.css index bd6213e..79fb1ae 100644 --- a/client/src/index.css +++ b/client/src/index.css @@ -1,3 +1,30 @@ @tailwind base; @tailwind components; -@tailwind utilities; \ No newline at end of file +@tailwind utilities; + +* { + margin: 0; + padding: 0; + text-decoration: none; + list-style: none; +} + +body { + background-color: #000; + color: #fff; + scroll-behavior: smooth; + padding: 10px; +} + +:root { +--secondaryBg: #121212; +--tertiaryBg: #242424; +} + +.secondaryBg { + background: var(--secondaryBg) +} + +.tertiaryBg { + background: var(--tertiaryBg) +} \ No newline at end of file diff --git a/client/src/layout/Layout.jsx b/client/src/layout/Layout.jsx new file mode 100644 index 0000000..8ac3455 --- /dev/null +++ b/client/src/layout/Layout.jsx @@ -0,0 +1,12 @@ +import Sidebar from "../components/Sidebar/Sidebar"; + +export default function Layout({children}) { + return ( +
+ +
+ {children} +
+
+ ) +} \ No newline at end of file diff --git a/server/package-lock.json b/server/package-lock.json index baaae04..f857730 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -9,8 +9,10 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "body-parser": "^1.20.2", "cors": "^2.8.5", "express": "^4.18.2", + "query-string": "^8.1.0", "spotify-web-api-node": "^5.0.2" }, "devDependencies": { @@ -74,12 +76,12 @@ } }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -87,7 +89,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -248,6 +250,14 @@ "ms": "2.0.0" } }, + "node_modules/decode-uri-component": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.4.1.tgz", + "integrity": "sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==", + "engines": { + "node": ">=14.16" + } + }, "node_modules/define-data-property": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", @@ -353,6 +363,43 @@ "node": ">= 0.10.0" } }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", @@ -370,6 +417,17 @@ "node": ">=8" } }, + "node_modules/filter-obj": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-5.1.0.tgz", + "integrity": "sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/finalhandler": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", @@ -870,6 +928,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/query-string": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-8.1.0.tgz", + "integrity": "sha512-BFQeWxJOZxZGix7y+SByG3F36dA0AbTy9o6pSmKFcFz7DAj0re9Frkty3saBn3nHo3D0oZJ/+rx3r8H8r8Jbpw==", + "dependencies": { + "decode-uri-component": "^0.4.1", + "filter-obj": "^5.1.0", + "split-on-first": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -879,9 +953,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -1041,6 +1115,17 @@ "node": ">=10" } }, + "node_modules/split-on-first": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-3.0.0.tgz", + "integrity": "sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/spotify-web-api-node": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/spotify-web-api-node/-/spotify-web-api-node-5.0.2.tgz", diff --git a/server/package.json b/server/package.json index 0223ccd..559fb9c 100644 --- a/server/package.json +++ b/server/package.json @@ -11,8 +11,10 @@ "author": "", "license": "ISC", "dependencies": { + "body-parser": "^1.20.2", "cors": "^2.8.5", "express": "^4.18.2", + "query-string": "^8.1.0", "spotify-web-api-node": "^5.0.2" }, "devDependencies": { diff --git a/server/server.js b/server/server.js index ac3ecc1..c5e51c8 100644 --- a/server/server.js +++ b/server/server.js @@ -1,16 +1,16 @@ const express = require('express'); -const SpotifyWebApi = require('spotify-web-api-node'); const cors = require('cors'); +const SpotifyWebApi = require('spotify-web-api-node'); const app = express(); app.use(cors()) -app.use(express.json()); +app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.post('/login', async (req, res) => { try { const code = req.body.code; - console.log(code, "<<<<<"); + // console.log(code, "<<<<<"); const spotifyApi = new SpotifyWebApi({ redirectUri: 'http://localhost:5173/callback', clientId: 'd86db55895ca45319957a258fac15a79', @@ -18,7 +18,7 @@ app.post('/login', async (req, res) => { }); const data = await spotifyApi.authorizationCodeGrant(code); - console.log(data, "<-- data "); + // console.log(data, "<-- data "); res.json({ accessToken: data.body.access_token, refreshToken: data.body.refresh_token, From c6337168b7cbf93b7e143943a36242c3783cdce7 Mon Sep 17 00:00:00 2001 From: Mukhtar Rafi Fauzi Date: Wed, 13 Dec 2023 02:55:35 +0700 Subject: [PATCH 05/25] styling: home, login, sign up styling home, login, sign up page and its components --- client/index.html | 2 +- client/src/App.jsx | 11 +- client/src/assets/Pitch+.png | Bin 0 -> 12287 bytes client/src/assets/cover.jpg | Bin 0 -> 22470 bytes client/src/assets/logo.png | Bin 0 -> 15965 bytes client/src/assets/logowhite.png | Bin 0 -> 14936 bytes client/src/components/Card/Card.jsx | 17 +++ client/src/components/Card/card.css | 19 ++++ client/src/components/Home/Home.jsx | 57 +++++++++- client/src/components/Login/Login.jsx | 103 ++++++++++++++++++ client/src/components/Login/login.css | 8 ++ .../Sidebar/{Signup.jsx => Footer.jsx} | 9 +- client/src/components/Sidebar/Sidebar.jsx | 9 +- client/src/components/Sidebar/signup.css | 6 + client/src/components/Signup/Signup.jsx | 103 ++++++++++++++++++ client/src/components/Signup/signup.css | 8 ++ client/src/index.css | 8 +- client/src/layout/Layout.jsx | 2 +- client/tailwind.config.js | 2 +- 19 files changed, 344 insertions(+), 20 deletions(-) create mode 100644 client/src/assets/Pitch+.png create mode 100644 client/src/assets/cover.jpg create mode 100644 client/src/assets/logo.png create mode 100644 client/src/assets/logowhite.png create mode 100644 client/src/components/Card/Card.jsx create mode 100644 client/src/components/Card/card.css create mode 100644 client/src/components/Login/Login.jsx create mode 100644 client/src/components/Login/login.css rename client/src/components/Sidebar/{Signup.jsx => Footer.jsx} (65%) create mode 100644 client/src/components/Signup/Signup.jsx create mode 100644 client/src/components/Signup/signup.css diff --git a/client/index.html b/client/index.html index 0c589ec..5cc2bfa 100644 --- a/client/index.html +++ b/client/index.html @@ -4,7 +4,7 @@ - Vite + React + Pitch+
diff --git a/client/src/App.jsx b/client/src/App.jsx index 1129903..532ee4c 100644 --- a/client/src/App.jsx +++ b/client/src/App.jsx @@ -1,7 +1,7 @@ -import { BrowserRouter as Router,Routes, Route } from 'react-router-dom' -import Dashboard from './pages/Dashboard' -import Login from './pages/Login' +import { BrowserRouter as Router, Routes, Route } from 'react-router-dom' import Home from './components/Home/Home' +import Login from './components/Login/Login' +import Signup from './components/Signup/Signup' const code = new URLSearchParams(window.location.search).get('code') // console.log(code); @@ -10,8 +10,9 @@ function App() { return ( - }> - + }/> + }/> + }/> ) diff --git a/client/src/assets/Pitch+.png b/client/src/assets/Pitch+.png new file mode 100644 index 0000000000000000000000000000000000000000..67e5e9cd1bb09e8fe6d6f3efb8f5ed6662c60f7b GIT binary patch literal 12287 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 literal 0 HcmV?d00001 diff --git a/client/src/assets/cover.jpg b/client/src/assets/cover.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6fb819914bbc9467219af6f558a6aae5d19d90c1 GIT binary patch literal 22470 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 A?EnA( literal 0 HcmV?d00001 diff --git a/client/src/assets/logo.png b/client/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..95599e8b1f9737da7b64e147a1a208e9fd4e49bc GIT binary patch literal 15965 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 NYw16(dSw6Re*rBcg6IGM literal 0 HcmV?d00001 diff --git a/client/src/assets/logowhite.png b/client/src/assets/logowhite.png new file mode 100644 index 0000000000000000000000000000000000000000..ecfe8266f04f54e9fa9b41a3288c9dc3fc2fb49e GIT binary patch literal 14936 zcmeHu_dnZT{BK$j@~QM9yF5qnd6Q)0zzi`s

pH*h}Qy8Bt@+XHGfU8;XC-@N<|9CYQ^O$CK3 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 X|Mv!#jo*zf?g&=WcvbfDZP5P$a-*Ju literal 0 HcmV?d00001 diff --git a/client/src/components/Card/Card.jsx b/client/src/components/Card/Card.jsx new file mode 100644 index 0000000..47fac31 --- /dev/null +++ b/client/src/components/Card/Card.jsx @@ -0,0 +1,17 @@ +import { FaPlay } from 'react-icons/fa' +import './card.css' + +export default function Card() { + return ( +

+
+ + +
+

Title

+

Desciption

+
+ ) +} \ No newline at end of file diff --git a/client/src/components/Card/card.css b/client/src/components/Card/card.css new file mode 100644 index 0000000..1c31cb3 --- /dev/null +++ b/client/src/components/Card/card.css @@ -0,0 +1,19 @@ + +.card { + background-color: var(--cardSecBg); +} + +.card:hover { + background: var(--cardBg); + cursor: pointer; + transition: all 0.2s ease-in; + /* box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.1); */ +} + +.playBtn { + display: none!important; +} +.card:hover .playBtn { + display: block!important; + transition: all .3s ease-in; +} \ No newline at end of file diff --git a/client/src/components/Home/Home.jsx b/client/src/components/Home/Home.jsx index 33e0506..66f381c 100644 --- a/client/src/components/Home/Home.jsx +++ b/client/src/components/Home/Home.jsx @@ -1,7 +1,60 @@ import Layout from "../../layout/Layout"; - +import { FaBackward, FaForward, FaChevronLeft, FaChevronRight } from "react-icons/fa"; +import Card from "../Card/Card"; +import { Link } from "react-router-dom"; export default function Home() { return - Home +
+
+ + + + + + +
+
+ + Sign up + + + Log in + +
+
+ {/* */} +
+
+ Focus + Show all +
+
+ + + + + + + + +
+
+ Playlist + Show all +
+
+ + + + + + + + +
+
+ {/* */} + +
} diff --git a/client/src/components/Login/Login.jsx b/client/src/components/Login/Login.jsx new file mode 100644 index 0000000..46fed58 --- /dev/null +++ b/client/src/components/Login/Login.jsx @@ -0,0 +1,103 @@ +import { Link } from 'react-router-dom' +import './login.css' + +export default function Login() { + return ( + <> +
+
+ + Pitch+ + +
+
+
+
+

Log in to Pitch+

+ +
+
+
+ {/* email */} +
+ + +
+ {/* password */} +
+ + +
+ {/* login btn */} +
+ +
+ {/* forgot */} +
+ Forgot your password? +
+
+ +
+

+ + Don't have an account? + + Sign up for Pitch+ +

+
+
+ +
+ + ) +} \ No newline at end of file diff --git a/client/src/components/Login/login.css b/client/src/components/Login/login.css new file mode 100644 index 0000000..48d48b6 --- /dev/null +++ b/client/src/components/Login/login.css @@ -0,0 +1,8 @@ +header { + background-color: #000; +} + +.container { + background-color: #121212; + min-height: 100vh; +} \ No newline at end of file diff --git a/client/src/components/Sidebar/Signup.jsx b/client/src/components/Sidebar/Footer.jsx similarity index 65% rename from client/src/components/Sidebar/Signup.jsx rename to client/src/components/Sidebar/Footer.jsx index 415c9bb..e4db698 100644 --- a/client/src/components/Sidebar/Signup.jsx +++ b/client/src/components/Sidebar/Footer.jsx @@ -1,19 +1,20 @@ +import { Link } from 'react-router-dom'; import './signup.css'; -export default function Signup() { +export default function Footer() { return (

- Preview on Spotify + Preview on Pitch+

Sign up to get unlimited songs and podcasts with occasional ads. No credit card needed.

- +
) } \ No newline at end of file diff --git a/client/src/components/Sidebar/Sidebar.jsx b/client/src/components/Sidebar/Sidebar.jsx index 6867eb4..0a2515a 100644 --- a/client/src/components/Sidebar/Sidebar.jsx +++ b/client/src/components/Sidebar/Sidebar.jsx @@ -3,12 +3,12 @@ import { FiSearch } from "react-icons/fi"; import { FaPlus } from "react-icons/fa"; import { LuLibrary } from "react-icons/lu"; import { TfiWorld } from "react-icons/tfi"; -import Signup from "./Signup"; +import Footer from "./Footer"; export default function Sidebar() { return ( <> -
+
{/* Nav Home & Search */}
@@ -32,8 +32,7 @@ export default function Sidebar() {
{/* Playlists bar */} -
- +