From 34d2e0907dc87631089c9bf8318ac1b201ab2417 Mon Sep 17 00:00:00 2001 From: meat Date: Mon, 25 Mar 2024 17:57:28 +1000 Subject: [PATCH 01/27] npm init vite --- .eslintrc.cjs | 18 + .gitignore | 24 + README.md | 32 +- index.html | 13 + package-lock.json | 2737 ++++++++++++++++++++++++++++++++++++++++++ package.json | 28 + public/vite.svg | 1 + src/App.css | 42 + src/App.tsx | 35 + src/assets/react.svg | 1 + src/index.css | 68 ++ src/main.tsx | 10 + src/vite-env.d.ts | 1 + tsconfig.json | 27 + tsconfig.node.json | 13 + vite.config.ts | 7 + 16 files changed, 3055 insertions(+), 2 deletions(-) create mode 100644 .eslintrc.cjs create mode 100644 .gitignore create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/vite.svg create mode 100644 src/App.css create mode 100644 src/App.tsx create mode 100644 src/assets/react.svg create mode 100644 src/index.css create mode 100644 src/main.tsx create mode 100644 src/vite-env.d.ts create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..d6c9537 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,18 @@ +module.exports = { + root: true, + env: { browser: true, es2020: true }, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:react-hooks/recommended', + ], + ignorePatterns: ['dist', '.eslintrc.cjs'], + parser: '@typescript-eslint/parser', + plugins: ['react-refresh'], + rules: { + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +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/README.md b/README.md index d5840f9..0d6babe 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,30 @@ -# api-frontend -Frontend for API/Data Platform +# React + TypeScript + 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 + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: + +- Configure the top-level `parserOptions` property like this: + +```js +export default { + // other rules... + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + project: ['./tsconfig.json', './tsconfig.node.json'], + tsconfigRootDir: __dirname, + }, +} +``` + +- Replace `plugin:@typescript-eslint/recommended` to `plugin:@typescript-eslint/recommended-type-checked` or `plugin:@typescript-eslint/strict-type-checked` +- Optionally add `plugin:@typescript-eslint/stylistic-type-checked` +- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and add `plugin:react/recommended` & `plugin:react/jsx-runtime` to the `extends` list diff --git a/index.html b/index.html new file mode 100644 index 0000000..e4b78ea --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + TS + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..708229c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2737 @@ +{ + "name": "api-frontend", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "api-frontend", + "version": "0.0.0", + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.2.66", + "@types/react-dom": "^18.2.22", + "@typescript-eslint/eslint-plugin": "^7.2.0", + "@typescript-eslint/parser": "^7.2.0", + "@vitejs/plugin-react-swc": "^3.5.0", + "eslint": "^8.57.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.6", + "typescript": "^5.2.2", + "vite": "^5.2.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/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.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/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/@eslint/eslintrc/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/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/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/@humanwhocodes/config-array/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/@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.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "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/@rollup/rollup-android-arm-eabi": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", + "integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz", + "integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz", + "integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz", + "integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz", + "integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz", + "integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz", + "integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz", + "integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz", + "integrity": "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz", + "integrity": "sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz", + "integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz", + "integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz", + "integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@swc/core": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.4.8.tgz", + "integrity": "sha512-uY2RSJcFPgNOEg12RQZL197LZX+MunGiKxsbxmh22VfVxrOYGRvh4mPANFlrD1yb38CgmW1wI6YgIi8LkIwmWg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@swc/counter": "^0.1.2", + "@swc/types": "^0.1.5" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.4.8", + "@swc/core-darwin-x64": "1.4.8", + "@swc/core-linux-arm-gnueabihf": "1.4.8", + "@swc/core-linux-arm64-gnu": "1.4.8", + "@swc/core-linux-arm64-musl": "1.4.8", + "@swc/core-linux-x64-gnu": "1.4.8", + "@swc/core-linux-x64-musl": "1.4.8", + "@swc/core-win32-arm64-msvc": "1.4.8", + "@swc/core-win32-ia32-msvc": "1.4.8", + "@swc/core-win32-x64-msvc": "1.4.8" + }, + "peerDependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.8.tgz", + "integrity": "sha512-hhQCffRTgzpTIbngSnC30vV6IJVTI9FFBF954WEsshsecVoCGFiMwazBbrkLG+RwXENTrMhgeREEFh6R3KRgKQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.4.8.tgz", + "integrity": "sha512-P3ZBw8Jr8rKhY/J8d+6WqWriqngGTgHwtFeJ8MIakQJTbdYbFgXSZxcvDiERg3psbGeFXaUaPI0GO6BXv9k/OQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.8.tgz", + "integrity": "sha512-PP9JIJt19bUWhAGcQW6qMwTjZOcMyzkvZa0/LWSlDm0ORYVLmDXUoeQbGD3e0Zju9UiZxyulnpjEN0ZihJgPTA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.8.tgz", + "integrity": "sha512-HvEWnwKHkoVUr5iftWirTApFJ13hGzhAY2CMw4lz9lur2m+zhPviRRED0FCI6T95Knpv7+8eUOr98Z7ctrG6DQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.8.tgz", + "integrity": "sha512-kY8+qa7k/dEeBq9p0Hrta18QnJPpsiJvDQSLNaTIFpdM3aEM9zbkshWz8gaX5VVGUEALowCBUWqmzO4VaqM+2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.8.tgz", + "integrity": "sha512-0WWyIw432wpO/zeGblwq4f2YWam4pn8Z/Ig4KzHMgthR/KmiLU3f0Z7eo45eVmq5vcU7Os1zi/Zb65OOt09q/w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.8.tgz", + "integrity": "sha512-p4yxvVS05rBNCrBaSTa20KK88vOwtg8ifTW7ec/yoab0bD5EwzzB8KbDmLLxE6uziFa0sdjF0dfRDwSZPex37Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.8.tgz", + "integrity": "sha512-jKuXihxAaqUnbFfvPxtmxjdJfs87F1GdBf33il+VUmSyWCP4BE6vW+/ReDAe8sRNsKyrZ3UH1vI5q1n64csBUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.8.tgz", + "integrity": "sha512-O0wT4AGHrX8aBeH6c2ADMHgagAJc5Kf6W48U5moyYDAkkVnKvtSc4kGhjWhe1Yl0sI0cpYh2In2FxvYsb44eWw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.8.tgz", + "integrity": "sha512-C2AYc3A2o+ECciqsJWRgIpp83Vk5EaRzHe7ed/xOWzVd0MsWR+fweEsyOjlmzHfpUxJSi46Ak3/BIZJlhZbXbg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "dev": true + }, + "node_modules/@swc/types": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.6.tgz", + "integrity": "sha512-/JLo/l2JsT/LRd80C3HfbmVpxOAJ11FO2RCEslFrgzLltoP9j8XIbsyDcfCt2WWyX+CM96rBoNM+IToAkFOugg==", + "dev": true, + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.2.69", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.69.tgz", + "integrity": "sha512-W1HOMUWY/1Yyw0ba5TkCV+oqynRjG7BnteBB+B7JmAK7iw3l2SW+VGOxL+akPweix6jk2NNJtyJKpn4TkpfK3Q==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.22", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.22.tgz", + "integrity": "sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ==", + "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/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.3.1.tgz", + "integrity": "sha512-STEDMVQGww5lhCuNXVSQfbfuNII5E08QWkvAw5Qwf+bj2WT+JkG1uc+5/vXA3AOYMDHVOSpL+9rcbEUiHIm2dw==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "7.3.1", + "@typescript-eslint/type-utils": "7.3.1", + "@typescript-eslint/utils": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.3.1.tgz", + "integrity": "sha512-Rq49+pq7viTRCH48XAbTA+wdLRrB/3sRq4Lpk0oGDm0VmnjBrAOVXH/Laalmwsv2VpekiEfVFwJYVk6/e8uvQw==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.3.1", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/typescript-estree": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.3.1.tgz", + "integrity": "sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.3.1.tgz", + "integrity": "sha512-iFhaysxFsMDQlzJn+vr3OrxN8NmdQkHks4WaqD4QBnt5hsq234wcYdyQ9uquzJJIDAj5W4wQne3yEsYA6OmXGw==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.3.1", + "@typescript-eslint/utils": "7.3.1", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.3.1.tgz", + "integrity": "sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.3.1.tgz", + "integrity": "sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.3.1.tgz", + "integrity": "sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "7.3.1", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/typescript-estree": "7.3.1", + "semver": "^7.5.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.3.1.tgz", + "integrity": "sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.3.1", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "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-swc": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.6.0.tgz", + "integrity": "sha512-XFRbsGgpGxGzEV5i5+vRiro1bwcIaZDIdBRP16qwm+jP68ue/S8FJTBEgOeojtVDYrbSua3XFp71kC8VJE6v+g==", + "dev": true, + "dependencies": { + "@swc/core": "^1.3.107" + }, + "peerDependencies": { + "vite": "^4 || ^5" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "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": "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/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "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/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/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/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/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/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/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.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/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, + "node_modules/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": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@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-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.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.6.tgz", + "integrity": "sha512-NjGXdm7zgcKRkKMua34qVO9doI7VOxZ6ancSvBELJSSoX97jyndXcSoa8XBh69JoB31dNz3EEzlMcizZl7LaMA==", + "dev": true, + "peerDependencies": { + "eslint": ">=7" + } + }, + "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/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/eslint/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/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.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "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.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/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/glob/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/glob/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/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/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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-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/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "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/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-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/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/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": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/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-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/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/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.13.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.0.tgz", + "integrity": "sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.13.0", + "@rollup/rollup-android-arm64": "4.13.0", + "@rollup/rollup-darwin-arm64": "4.13.0", + "@rollup/rollup-darwin-x64": "4.13.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.13.0", + "@rollup/rollup-linux-arm64-gnu": "4.13.0", + "@rollup/rollup-linux-arm64-musl": "4.13.0", + "@rollup/rollup-linux-riscv64-gnu": "4.13.0", + "@rollup/rollup-linux-x64-gnu": "4.13.0", + "@rollup/rollup-linux-x64-musl": "4.13.0", + "@rollup/rollup-win32-arm64-msvc": "4.13.0", + "@rollup/rollup-win32-ia32-msvc": "4.13.0", + "@rollup/rollup-win32-x64-msvc": "4.13.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/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/to-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-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", + "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "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/vite": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.6.tgz", + "integrity": "sha512-FPtnxFlSIKYjZ2eosBQamz4CbyrTizbZ3hnGJlh/wMtCrlp1Hah6AzBLjGI5I2urTfNnpovpHdrL6YRuBOPnCA==", + "dev": true, + "dependencies": { + "esbuild": "^0.20.1", + "postcss": "^8.4.36", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/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": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "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/package.json b/package.json new file mode 100644 index 0000000..260b239 --- /dev/null +++ b/package.json @@ -0,0 +1,28 @@ +{ + "name": "api-frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "lint": "eslint api-frontend --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.2.66", + "@types/react-dom": "^18.2.22", + "@typescript-eslint/eslint-plugin": "^7.2.0", + "@typescript-eslint/parser": "^7.2.0", + "@vitejs/plugin-react-swc": "^3.5.0", + "eslint": "^8.57.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.6", + "typescript": "^5.2.2", + "vite": "^5.2.0" + } +} diff --git a/public/vite.svg b/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/App.css b/src/App.css new file mode 100644 index 0000000..b9d355d --- /dev/null +++ b/src/App.css @@ -0,0 +1,42 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..afe48ac --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,35 @@ +import { useState } from 'react' +import reactLogo from './assets/react.svg' +import viteLogo from '/vite.svg' +import './App.css' + +function App() { + const [count, setCount] = useState(0) + + return ( + <> +
+ + Vite logo + + + React logo + +
+

Vite + React

+
+ +

+ Edit src/App.tsx and save to test HMR +

+
+

+ Click on the Vite and React logos to learn more +

+ + ) +} + +export default App diff --git a/src/assets/react.svg b/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000..6119ad9 --- /dev/null +++ b/src/index.css @@ -0,0 +1,68 @@ +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/src/main.tsx b/src/main.tsx new file mode 100644 index 0000000..3d7150d --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,10 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import App from './App.tsx' +import './index.css' + +ReactDOM.createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..d05b11b --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": [ + "src" + ], + "references": [{ "path": "./tsconfig.node.json"}] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..c7a071e --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true, + "strict": true + }, + "include": [ + "vite.config.ts" + ] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..861b04b --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react-swc' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], +}) From c25b0634d49f5eeeea52829a04f1879837b78213 Mon Sep 17 00:00:00 2001 From: meat Date: Mon, 25 Mar 2024 18:32:48 +1000 Subject: [PATCH 02/27] Page state setup, added dashboard page --- src/App.tsx | 43 +++++++++++-------------------- src/pages/dashboard/dashboard.tsx | 5 ++++ 2 files changed, 20 insertions(+), 28 deletions(-) create mode 100644 src/pages/dashboard/dashboard.tsx diff --git a/src/App.tsx b/src/App.tsx index afe48ac..e216452 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,35 +1,22 @@ -import { useState } from 'react' -import reactLogo from './assets/react.svg' -import viteLogo from '/vite.svg' import './App.css' +import Dashboard from "./pages/dashboard/dashboard.tsx"; +import {useState} from "react"; function App() { - const [count, setCount] = useState(0) + const [currentPage, setCurrentPage] = useState('/'); + const renderPage = () => { + switch (currentPage) { + case '/': - return ( - <> -
- - Vite logo - - - React logo - -
-

Vite + React

-
- -

- Edit src/App.tsx and save to test HMR -

-
-

- Click on the Vite and React logos to learn more -

- - ) + default: + return ; + } + }; + return ( +
+ {renderPage()} +
+ ) } export default App diff --git a/src/pages/dashboard/dashboard.tsx b/src/pages/dashboard/dashboard.tsx new file mode 100644 index 0000000..5810e77 --- /dev/null +++ b/src/pages/dashboard/dashboard.tsx @@ -0,0 +1,5 @@ +function Dashboard() { + return

meat

+} + +export default Dashboard \ No newline at end of file From ffac4d5fa0733eea32a92d08c3c2df47b52b58fb Mon Sep 17 00:00:00 2001 From: meat <155785205+meatmeatmeatmeatmeatmeat@users.noreply.github.com> Date: Sat, 30 Mar 2024 14:41:34 +1000 Subject: [PATCH 03/27] Added i18n --- i18n/en_US.json | 3 +++ i18n/index.ts | 30 ++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 i18n/en_US.json create mode 100644 i18n/index.ts diff --git a/i18n/en_US.json b/i18n/en_US.json new file mode 100644 index 0000000..ffc5d63 --- /dev/null +++ b/i18n/en_US.json @@ -0,0 +1,3 @@ +{ + "PREFERENCES": "Preferences" +} diff --git a/i18n/index.ts b/i18n/index.ts new file mode 100644 index 0000000..ed7f4e3 --- /dev/null +++ b/i18n/index.ts @@ -0,0 +1,30 @@ +import en_US from './en_US.json'; + +let currentLang = 'English'; + +interface Translations { + [key: string]: string; +} + +const translations: { [key: string]: Translations } = { + English: en_US, +}; + +const setLanguage = (lang: string) => { + if (!translations[lang]) { + throw new Error(`Failed to set Language for ${lang}`); + } + + currentLang = lang; +}; + +const t = (key: string, lang: string = currentLang) => { + if (!translations[lang]) { + throw new Error(`Failed to load Language for ${lang}`); + } + + // Always default to English + return translations[lang][key] || translations['English'][key]; +}; + +export {currentLang, setLanguage, t, translations}; From dd4ba750287e8e4f20840b92d1caaf00d3bf221b Mon Sep 17 00:00:00 2001 From: meat <155785205+meatmeatmeatmeatmeatmeat@users.noreply.github.com> Date: Sat, 30 Mar 2024 14:44:44 +1000 Subject: [PATCH 04/27] Added tailwind & css from MAC, tf2 font, updated npm scripts with tailwind cmd --- .gitignore | 1 + package-lock.json | 903 ++++++++++++++++++++++++++++-- package.json | 7 +- public/tf2build.ttf | Bin 0 -> 57168 bytes src/App.css | 64 ++- src/assets/react.svg | 1 - src/index.css | 123 ++-- src/pages/dashboard/dashboard.tsx | 12 +- tailwind.config.js | 39 ++ 9 files changed, 1024 insertions(+), 126 deletions(-) create mode 100644 public/tf2build.ttf delete mode 100644 src/assets/react.svg create mode 100644 tailwind.config.js diff --git a/.gitignore b/.gitignore index a547bf3..aa72116 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ dist-ssr *.njsproj *.sln *.sw? +/src/tailwind.css diff --git a/package-lock.json b/package-lock.json index 708229c..213ff59 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,8 @@ "version": "0.0.0", "dependencies": { "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "tailwindcss": "^3.4.3" }, "devDependencies": { "@types/react": "^18.2.66", @@ -33,6 +34,17 @@ "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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", @@ -534,11 +546,94 @@ "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "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==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "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" @@ -551,7 +646,6 @@ "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" } @@ -560,7 +654,6 @@ "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" @@ -569,6 +662,15 @@ "node": ">= 8" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.13.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", @@ -1250,7 +1352,6 @@ "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" } @@ -1259,7 +1360,6 @@ "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" }, @@ -1270,6 +1370,28 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "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==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1288,14 +1410,23 @@ "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 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -1304,7 +1435,6 @@ "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" }, @@ -1321,6 +1451,14 @@ "node": ">=6" } }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1337,11 +1475,44 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "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" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/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" }, @@ -1352,8 +1523,15 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } }, "node_modules/concat-map": { "version": "0.0.1", @@ -1365,7 +1543,6 @@ "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", @@ -1375,6 +1552,17 @@ "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==", + "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", @@ -1404,6 +1592,11 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -1416,6 +1609,11 @@ "node": ">=8" } }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -1428,6 +1626,16 @@ "node": ">=6.0.0" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, "node_modules/esbuild": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", @@ -1673,7 +1881,6 @@ "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", @@ -1689,7 +1896,6 @@ "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" }, @@ -1713,7 +1919,6 @@ "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, "dependencies": { "reusify": "^1.0.4" } @@ -1734,7 +1939,6 @@ "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" }, @@ -1778,6 +1982,21 @@ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1788,7 +2007,6 @@ "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": [ @@ -1798,6 +2016,14 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -1822,7 +2048,6 @@ "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" }, @@ -1902,6 +2127,17 @@ "node": ">=8" } }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/ignore": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", @@ -1952,20 +2188,48 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "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-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, "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" }, @@ -1977,7 +2241,6 @@ "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" } @@ -1994,8 +2257,32 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "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==", + "bin": { + "jiti": "bin/jiti.js" + } }, "node_modules/js-tokens": { "version": "4.0.0", @@ -2054,6 +2341,19 @@ "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==", + "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==" + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -2102,7 +2402,6 @@ "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" } @@ -2111,7 +2410,6 @@ "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" @@ -2124,7 +2422,6 @@ "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -2135,17 +2432,34 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "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==", + "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", @@ -2165,6 +2479,30 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "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==", + "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-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -2255,11 +2593,38 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "engines": { + "node": "14 || >=16.14" + } + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -2272,14 +2637,12 @@ "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 + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "engines": { "node": ">=8.6" }, @@ -2287,11 +2650,26 @@ "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==", + "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==", + "engines": { + "node": ">= 6" + } + }, "node_modules/postcss": { "version": "8.4.38", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", - "dev": true, "funding": [ { "type": "opencollective", @@ -2315,6 +2693,120 @@ "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==", + "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-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/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==", + "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.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "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==", + "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.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "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==" + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -2337,7 +2829,6 @@ "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", @@ -2376,6 +2867,41 @@ "react": "^18.2.0" } }, + "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==", + "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==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "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", @@ -2389,7 +2915,6 @@ "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" @@ -2446,7 +2971,6 @@ "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", @@ -2492,7 +3016,6 @@ "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" }, @@ -2504,11 +3027,21 @@ "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/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -2522,16 +3055,86 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "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-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -2551,6 +3154,48 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "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": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -2563,17 +3208,82 @@ "node": ">=8" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", + "integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==", + "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.21.0", + "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/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==", + "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==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, "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" }, @@ -2593,6 +3303,11 @@ "typescript": ">=4.2.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==" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -2639,6 +3354,11 @@ "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==" + }, "node_modules/vite": { "version": "5.2.6", "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.6.tgz", @@ -2698,7 +3418,6 @@ "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" }, @@ -2709,6 +3428,93 @@ "node": ">= 8" } }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -2721,6 +3527,17 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/yaml": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", + "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 260b239..b6f4eaf 100644 --- a/package.json +++ b/package.json @@ -4,14 +4,15 @@ "version": "0.0.0", "type": "module", "scripts": { - "dev": "vite", - "build": "tsc && vite build", + "dev": "tailwind -i ./src/index.css -o ./src/tailwind.css && vite", + "build": "tailwind -i ./src/index.css -o ./src/tailwind.css && tsc && vite build", "lint": "eslint api-frontend --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "preview": "vite preview" }, "dependencies": { "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "tailwindcss": "^3.4.3" }, "devDependencies": { "@types/react": "^18.2.66", diff --git a/public/tf2build.ttf b/public/tf2build.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d59eec96eaff572331da6db763b9ad4d2070be74 GIT binary patch literal 57168 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

_3!W7Hp5lf=WX+L%{g^~#;tL<`Y$|b z!j+r*_{v}m+oS^n31`f$lO=S?!!!z`zdFCBGqjo^fj*>jk|JjX&dIgQ@2~t;&F&*A;`2g@9IV$htt~B*+n;mx*Mw6 zjR(5X$91ER>qZ~fjXtg$eOx#CxNh`u-RR@G(Z_Y8Q#p(P-EPInO5;+c-z=fd(r}$L zi!Gtf66!3W&JyY@q0SQOETPU4>MWto66!3W&XUq^vR7%PM6LIq;}bj#u?n#U5RQT+ z4zVe;;)D^fLXbFmQX)(d^HOyUua^}S8Y}*}2p?X`RK~#SP?&nY)QLUaab72nlu2~W zYbmt%Zryj%Nqf(l;EdIK8z#4gX77IDtPKxcGkfUG!oa9#seZRqUVzO=o4>Gr;G&)8A!t7t)}+n6F*mZ=)239Z5!L&9cr4;n$6}T z-uh(J9PtVVEJbV+2*;Z{n&STe^wtzVsTOtHJ7=GX5G~ zGqsn!+GQV&m$zT~?EISTJMKO;&Ic>FnX-5M_>Y!Jug!n*c-ZK1k}4;cr&LhlJaQF1Sbd7Qg0&q3;jf z`yk=Kpt#;@!2x1O;KB96MqY5h#D13WTbm( z7?devQp?|ROWmt=||czdz~ZHcf8Pe~4oG^{ z9>Ll}I9~KPSi(kHk9025E~J~0?ne49(o;yZ&LU%SQ-@)V6~h|x z=Z4kUS{U=JFnWhDY-bqrtT5(TVa&6_m}iAC&kAFn6~;U(jCocV^Q`djJS&WORv0L$ zgQW!ZHZI5=NgH_rXoTZL4{~hB;#Fo(kTzOOxv8$B!RKq}sEd|!K3}dJP2}^5aD&Mi z(1d;UqoUDL)(b~aG&-u@_jWE6&19k$zY76&pp&=`x^OGHc{jRKnrFk=g+%i_Y8u4~ z>LE+yO(eT8oWq%g!yZO0CKTFC%FCT)r`8U)i8CR#@?YPtxmI_(#NUzm8T-~5wr?+= zum8N}Y`LJT%+~OOx^33Ym6!PrVd#B<$16Y9a#Q640mFC5m%w@vKeYzi2WcXz67767zoShV%V10n%83wWqF@1(G~=_0 zDCv&Z90fJvsnd5NoR+3f!x2zkEVx9lo<}xMbPT>9?4QuYafHcNuCYhPowlp5@6=>2 zvd!vtv?ts93QnEHrhn*Ky%7PW7MqJZUV7MB=xf*4)#n@s`gWE2&Rf({2*fhyT8w&I zrhT+SpX->EJmARH*Xi5GIoxmwQ7i!t(7F}FvnDo~mhlT{7^K7l2?@haP%HEJjbHu0-72m*HvUy8y($Q&;^?No9RvHW@a+G;+Xe~5X~&3h3}A+F0WIYzo=x(81)&8& zXh9HK5QG*4p#?!`K@eIHgcby$1wm**5Lys~7SLiDrVcM6^A?goK8xWvkXX%X2JkwP zgyCr_1%kyP-*M_guvqAhyAjV=!h*E~$(G7-4lCL!VuY@_XK1^?zlEUJlxc96WzF~Q zyli=E>(a~aIJ`!D@#B3>tM{E@n0x&h-ABWXg_b3k-1@+(lfQG@Wy{+5kZ#&7pPMeu z7`J(kqIInDc|Ho0;{RwRY3#wDcr%>Gss#Eu=F8QTs4ag3vx)nDX z;Y3^#`^q0ai;h!aP?>;mJ+ormoc|RnmYKrAU1mk zpAxVN_G{bArb=`0RfHANn5FWD_?PM)<=NV}1M5!Whl3_T{HXHAw~flU=2#y+jZtWP zlHz49_=nzkStt~w*ESp>f4&H9eN>t&euR0_DD297>M*uDwkaa#u8Cj{p>8CCNg6#yTIWtaJUN`?gEFqz~L@%xCl2T_1SY2j2C8cYWYpA9&XX-t`Uht`EHHQ+StyBuuAq#%RS>lDC+a zw9#5M0tGufl;v8lyODNysO}o^gfYk`;$dI0r0R3dQR`>7h^gt@ro}r8VL>0QFZw+_ zqv~|JNsE_851sSOp850lJaf*OPuw_f-i=ReT7CEV6DOX3_v*#BZR_pbcH2uvi(br3 zT-H8z!|Z093?*JAn++0zTPHN<+B`a!aB%(&Pi)%w*zP%Vc0aap(-Sw$A52WzddvJ} zU)tQ&wfRfS=HIe)5(a;WseVYBFMf#5HUq*<;eHCpr(heJ$kU1jtr`6DVlNfGB*2#h z_>ur$65vY$d`W;W3GgKWz9hhx1o)BwUlQO8Z9!3VDgnOGMiyFiu`&eRV5rqt%PDg6 z|9Ry_9a#<>KeAN!^w5r$V@H-Ja+TIfF+}%j#d0lP6#JMk2GF`GU{pwb3PX8UU}oy} z*$)dh+xJK3jq)R?Qs8>$nVQ-CnrJE;bBG_-I68Ok2^`(j-MvZWDF13ODBnKi<(Kus zY@=k>gmbMyXFM9~Z;ohg5xK?@r?rc>tAm<H!Vm{lha7qk_?pm#s9RCQ6i1Y)=HG{I(eSmE zJ0<=*-QZqL<-H$O9unT@ksg=#RPL_St2)h zhADLeD)yhm8B6v53C_EolKvB%L8IzlD_@Y_koUvpp+6&ka$cQPZSae8_k zcDlu})9s2o@3_8{pgnP(yvJw@W*h63{_d=ag3=>;6ZO;~8fwt-V@TwUUMz$;s@BTN6KFsDeuM{?8TAtgCpg={0}%uns(Y# zJv&Fr$MXkpx&X%I@-+T)4Nk1beA^2;hH3$nA&^?dYM7rM6z4f-8nb3+!jmX_K@|^E}GQheov7g7c<_%byu3 z?-ndLpL)3bP_2A2>*by7*8^8}nMQu2cdKxb`e)NHSnYuNI+rw+GSdP#E^$}OmWG8@l3tBa=oX_}sJ zqJ24<3UIR4+P9Mpj+B2mQr<1R!af)&e_^D&S4gQcq11EFNcnis#Au9y1_}{+8k0qoGQX=A_G&Y##cTFf#6BbBGEClyRmo zS6m^&AF8Zb4f{81?-AyH%Ru8y{+QG$Y&_u}seI%qK^n~;yO+kI0{>X}NVxrkdxQ^$ zY=ZCs|M&n_hiF7Bza>A470DddO5Quf+F>D!sy!~k9v6r0aS`^o2o}(>8%5aTBJ6Py z_P7XpT!cL?!X6i4kBhL!McCt_VvlKIpdB2d-Ho)VF{W}V22RDmsTepF1E*r(R1BPo zfm1PXDh5u)z^NEG6$7VeyN@!;iGfowphP1vtbr(Z^29T6uLa-8~Q5xC-CNoTl6o;i8Cx<_lx_hwCcWzv*c z>MpIbo?FoO(2>X8E-W}rrL9{0X4<$F4-frjx^&ahH!o24Yqc~E9Gbf9R~M~$=qo!{ zmO4jGe|+eb!bxc%r_if9xLb2z zq`Vt5{{186->a3wmI!m%-f8>CT`=<7%8_T53nu(63aSfx2Q(j}+^@W&Tez3~h1T+_ z??^5g0n#8dt>zlRG(F9DvA%%-Hh9guKsdN3xw>tPYbBdxYFv2z3%iY#-5EH7>rOsn zbIX`@Gg^i=89V!DbSE^%d%q|Q)~!C{^tml!>7 zle=7M+X*j(>(}sFF6i*LLa^>mdw(=vN4XRDPG*z&eSGSK^yq7-Er?k7P;)DOqd7bM zwvIRVUfqE>fd3=0>Ut^9I}z0oQuLML;hhMrLO`e*P=&x)HO5MlcHm%ItKE{$iUBC?Y=WD;DZ)y`BV)Fw{CjnLuQ8V@x)Vp|(J?8#M;BayafD ztiZ_HLh;xCaNNCol`WYohLphjK34+A?b?n8-h+OS0qUROd?5gY+Ogt_`D}Vg;eLMM0m31rR4(G@3uM*n$7c1-k>Ge^cz&<-W zVR*3kzy0h4k_X|x&E9__#t9U!L_Ii3E5$E}s?;8xZ`t|gzrXRHD>AkVbCl2a{j>k= z`~HvL_d@&rYuo;nUH`-i;)fvq->~Q3fPsg)083sjI%7h_C|&hz>1sLhV~*_k7bcys z<6pSzv;F>`?f3s|zdr_;^+=cU$DSkA(wu$m*N6Nc}2>uQq&C_Y!_d6ryz5G}BOM%1Xv>vS1Gal>8TSv;z9VuVV zzly(4Ieb5@EvolV;U8k1=rg~9Mfh*)SHRji@pETQjvm2ZW>ol$@}G{Bck`d%?=udU zKT<2Fwex-K#{(a9UpDgF=SH4c&T%F(%GI^=H&A|+`VO4Y{Q5{a`83q>Zk$6*J`MH$ z?~j!C;(X_aYvl>em9=uLoln_1tP5B>-;DC>l={c>Ui`gP;Hs>5Q~kSZZF@!anJDFd z9Vzb?&SHNax&NtJIkm0IUYdG`+BW5xuZ=u2UNGV>hz`Gl*3Q*;Ea&fF?HqgR+3VsL zr0>9DoM?w|;0U5X%iM`$M}+4p?^oXa3eQ)5`3N_Du(NW6PkEh>t^DXNK8APSTX~Xu zF0A~las$x+Y`ysZ;`QPO!T>WNbhF_NpouyEPAwly?iS;%~1Gmy;aP{j^@Zh+Q}N z=i}N(ep@~A%yJ=yzfnxj(7G(ub&K+jZs9xlTeJVStQW5s!Hd?52S(P5sc-s%f-lyK zYc_?}iXTAvzFPSP_y$DeadxD(0lE@}Blk@>9N}YXLpK>iYJ&%3IM&LedN4fjV0hrc z@W6xNfd|6_4~B=WLE46NIno}a14s`bJ%Lp7V0hrcP_}5(Ui*K-8E7%!mV=k2L{U@} zz)3q@Q|Q}i-OH?aval&1jY;9gCfulQ?#7D#vFl;S?5w06*yQn|1;*i+juY3*22Cd( z9wWp~EIAt8Mu%w%^G`TQCVs;A6V{2n!~wME*tKUf`PBc{)}A2=f0E9Sufk5UM%G!Y zlN?cM%!W#>0;q*QE~8MX5md4~r=FKbc{R|3{2%0GroCZWF_kGLg4ha`(kf@4sVAV& zB0Rr(=8lzRQD~aBbly0lQ2E)|h*g#Z-O$;*>!jcGHy5$ryxyeMw9ehs-LrA!oMate zAeqvW%44P=I6%jT#%nm22KWSH{*ACLQs@YYcD$Q>fz2SK>Sd1Q;kD~pA@i04Y1 zmGf6 zqx}U`R$K4%YUPYb;|eDiOQ|xQlh#UWpNsML*DB{r_R4iX<@<-8d5ixn$aNR``By8# zZL}2ndgaCYx$6+GANuG%Ug0luvC_#u6wKO+k$?CbjOz!hzf;cro4|~Fkp`xy0G&UCC6VG(`-S4jZn}-2jPlo|^P8sL-=w~l&_a_p`dF7sgu%Tg6fln`tN!eN! zUoxv_MrVr? zJ;}J?)L>;{fJ=)jJ2Aa}T^P%IgsFn~)?jJ5T<`k$AmMuStlZ{WJ^x3}%dPoQ67)_Y zy+$!M|CBS7X&iR++}tPW4eCje|LxAsB}+zU=PG^Ef63Xoif$^r(lTWfLJFe=Lg+b3 zM~By4WSp3+oNrw}bh;L?{>s_b(rMNs*W-vbT&f-ppTTRbN!owSIlS1pGjblkvxdp= znfyfQ|C%%TK_u+Er87~7sYB~p|M0n}BWHqYnW9tR53Os_DKE6HrTXMFwH)JQqG%?y%U7bR z8xbSbI2ql~}wH)4ucOfc@#yup}w51GxioACFaE?MD)e|Oo z%8o5tBZnPhT0no49I+=jg9ZD!oEnTAaS#jbergxzR(^N+wAmx)SRXy#dX;5n<@9n- zPdPg`xJsz&7&opXeXV(S<-H&`g!4^DPqaSfr0amB6(4D%W35MJ>xDP#hrT$9&bn?( zbPNUJ;O+3)szx>}*GKzNr8mHML_J>he|5cex%?B1i>wTmla^az zLdRJhI2yikjdB0YOBc-%p3e?Uou21c2$fOcbSPj?W=#S%DL&@@c(Y5;o5SuzbFJ^z z(4JPP7dtttn%JDSVB#I)#s>rfJZq6Bw0|rD>H{z#CRw zu3e3Kox~ENA^nLnnu^jX!#IIcrJ)j1j~gh0-mKhk{QHilcaVV5kYirPS?E zg=XBAxQR=d#z~1RtDc6sNi37#Nr|!&I|&h#xUR>OGD*<(^F6zI2$yv7N1)S=?Ahb% z``$h0d(XM|zI)Gk@7@ki>I{YE&XAo_tDcGP_}}#ZB`f+x&OzyoMfLLl3W^ zhr?apmTBgtFPx@Na;aev5Llr7OL&`3>neY0d0CxtsejVPHY01U+41SNnyJ3D^uz9C zy8D#7Gq3tn+jeieixU^a>F+FQd+e^3wDkIQ9c|a;x?f)Nz}?r+DF|n$`Et^)Ud&Mo z?hi9_-uaR1W)#e8ti9}pkKQ`y&#U{`id8q(=G*o=jz4iW<4XUZGujpK=I0|x?WFSx zo3t{A2Ay~LHS$noQTwdv+GkPwEE`W+`S%8XcktW7uaDm&{QiXBU-SDqzklYZ@hu&F zR-)TVeS4r0x`Ll}cS+|NDdqdP!ShPgr1_`U+ERv&NzqC)p zr8rauo&pZs%ivxHcP%Mv)lc*Z1Lyg8UWoVCjQh}UtP;2RH&%x0+`!y& ziT^oX>78D8UXJxD^koQ*CEF%PwjQ&W5NnqCi`k3l()m~}xw}C+n}Q}c_IqmC7ryxH zN7mjub));uwCsW#?(V*4!Ro!;A1?~rxa&_p`EdMekK9@3zq0GeFMqS6VQY8iW$v!( zxoI^u!G3o*&0TcuJ->5BIFJ*Wm+$rjs^&#jYeuq`3cX{@qttXV53NWyW$gQ< z7QTd=raz!8Bb{tM*z-O6x3F~~?L4hSpOfN!n?5%pZ9&tr1^#O;IuGJkgB&>H_GNxM z`5yASPubKd5|_O0hA%!BV(LwtAvy1~`rPEn5i_2%cA~^a1`KpK{Vd95__{ASGB{>z z`$EmZSD+a>$MEvwLpeO34xUd3&!^5MbntvScs?CGpAMc+Z3&9pAOtOl`F>>w9Dkp4#hY*7rE; zdz|$>INOTC*R}jyQlAc*Ytnm-BY(lS|SNae7-_9t`csk=789xtH2i69<18-)wXMR32o|TbRmbI9_16i?bC%ZiR zg`CwnCvq$EYV(fdozK4zTo>FKd?t7#I9d=c*i&${;OBF0oO5qsZ{a_M?hU;VdMPv( zdOdV5TpwN+-W>jH_+a>j@XJM;i;fhR77vvyDmkdXrNyN$mcCm0R>T*1x$N7Q%)jKp z@;l2nmv1kBu>8^T(eknK$?^*oPDOr2Sp`QIRa{kZV?|rVriyJ9{S^Zh2P*R`=TRen`j6$fEft**MM>anV)s}5DYQ1$xUvbpQ#?wtF~y!?5$&-<%+qw_9Q-&P&1 ze!BVxmu6l%_tLgYKX+N}W!*K!HBZ)@o1Z`b^Yfpde|ACXf|doJTF|>-&w_^+Jh|YR z1<%z!T>E70Gqs0nkJg^39jzU!ovgjE&{>$fux#P{g$)Zg)XlGJsJp7}rn;N1jsLre*P!gt2u)9%gZdNW&Z35J2QSdry(#M$S};ZC0u zhNsUdGFog`BSyawAwPUYRO7R6fSN%v-ItL`Y*GnlsQjSAIVDQ89G_=HMX<~?UB=H3nd= zfX_Z?7W^}u?5WqFLCYyjyhU0#Gtk>OvdB44K?H4wbA-yOVvfxigb{bT!IVeQj3&^&veAO;kbs zMnOk9)2?PyYn|<@J9CZd{fI1f=UNJtlq~+QoI>JfS*D*XrxdwaNEspq>E~)T+^V42 zNYAF!acC5@IY{3JRqb-n*bp?=(!s>dqzl2!TQwleF`MSVU!_VcCxVn5`0N9j_;6AS z_ve}&bK#?Oo>6hjh0h=~%!eeoaC-t;Z0Qo(0PnD)^IW){;tdeB%slL%{iOqFn^)S| z(}O(-EnoG`v$mIqK8Hw0(Gth)84VbfR`RLuX=u=LLX^!%`VdqtC*R8Eo5UbJVw_h~ zeB95*ncN?wkG}y8Bz_9bva8t%?eCvsX=#b$vW@23{ldn}Eyh9pg54vHhL9CR?p~<+ zMUYxoK}+c4L6F=BjU?7U%g{-X7AOo+G*)0p3P3VWTJ5mFEQPhPLIE0n4Vq^(Kk*7_ zwNJET_p4VHp!2t&YO4iEc^q11SEEy>dBsC`3a##(2}{{R8x7d>*YZ_scB`app~)iF zkE}w*H&L~sLX%Z!BS0atlrIez!ddBJT16o>9fXz|f3^QY8|4bAsW_;nA*6%V>KmfI z$4Lj!QpoBXqP|a&)+iK0x~>KjmqQCIJqPWDz@V!kB!;ZMA*)@;T5JdmL*$oYg%El; z4An>*VnmYkN?KsZ`hJMMf1Lj3!!BXdLl_LFNe3-QJvt2k*Pz8n55rkheLw6}PK`sW z;TeX{DR$6uY5zrV8;1rc%eKB?D1w{v)w7BWZIN*+f}3(m;aOw|i%dVoW|v~{94GRw zk+~QSOQEW7v2iG-zNbkG6~{he>tZn6OuzBbu1c&fC16lmmgPJIM)DG?R|$LuNo!Q( zC<8c@P>Ze5=+t>O+jFU1Db_y)mHtb)b1PK6xRm>EhE^xqc{Rx8Y6OXB#4tyY`wD5< zG=g+mA^Lm`s?jE5HjThpS5>13Hq}-2od~F&fQFG9L6)fW6EQnROg|CEZI!LYf)UUT z^1g+SQKbyId!d;iFGJSj&|ITIT1y$6JD{pX8Ju-z#B$2eXBn+R_eVj?mVjurnz|f; z20&Gf1v{WY%2vZiSHozpn)?Txb!cD|>Pw74^~_zz{Rf~yOBY!F97~5R9i}y|!)pD| zlEeVC)c8aa+enw$)e7TKX*8O+$+-po2cZG(yaoP;p~1u<=p0Lj5^>UD_}>EOQD{lx zBvj+xE!6Y`vBEI%`Gft+mctjFS_xkmGh=EHM65;sAmpY_NUw?a#+Wv+L^ zQ*T3y(7<}9cLgSe>o8Ourm+q~)d4DTkj6SpV;zR7 z!!*`ms5(G3$kk#nbQr1*L)8JQ^W?~m9oRAMbehIGK{Y^Hs5%W*r=jY!*41gKI<0ke znyxxQrLwYPr=jWul{g4hC#ViU3+<{}SEr%s1eNlot4>4JX{b6ur5x$16I4S^7pNwo z8hN@5RhOaaGE`llQhqiPyTGHgdS90z=>mz;>U~`x5moQ&LO-L>u$3yZoZ`f4ax_wP zfkZSyFY5xyQD`N|yTG%}={7vw;F%-D%WjZt(s%H1=rJTcrkNh_Tp&lIL670- zF+4rietN*8tHRS`czO&^kKyStJUyn99>ddPczVFo&;7#FV|aQ@Cq3X%j_~vto?gS# zYj}FWbHV8~{q%xIY3ZjIJZ(_vr`Pn;Yj}FWqkE*EUc=LCHtGe>0dl0DUc=LCHtGdW zKRL2dui@zhk8&!}UN3lVvVE5)p_01;xrd>-^r;;taR;)L)>B{yQrMRR{`;XNJR^3% zU+D-ucNqU2@Yg++mapf_PHU4p;Xg)N{C67Xop4r;IPZkB(t65pa)eQhS3BW63av0& zX*5brcfs=vR6KXVvmY8{1lR@7I5b3EcEMBk6kEQYfV)6@0vfTjo`AdHd=Oem588z` z2Ath+J_!vVYd4&u&>(zv!&y1vyc^DOsGhC64ef3?A0;i$yV1j0sPwSgIPZpYlozCZ z+}{W1lhADR(`TIfOb>mghd$E-hjZIK(nFtd?t}9Q(q+i)gYzJ?lBaeboDVpAXi;&f zkG{Ew7Ig;dx10=12P{9+aP|gt`VD8ljavQSTuY8dt$uK-tZ?>&^DtD_?+2%7G1}_~ zr)Vj)=r?`#gHu;4cq;WXd!K?vr=D|ILom-|W(|#kS=7f2GYaO@P(O8yf_WSoU_KcI zv(j01RcrPrn4f^=;!lWzS*7yr9?d_aVAlO}m^nwmEdC*UHBsg{d!a?lKckHKS3^r! zM?}GV1R9yz3e_An%8d6ZXq1`rkRcp0ghPf9zX%A24B?O=95RGMh7hj+2wCfcaL5p{ zh6W*PVouk(95RHg=RnB%34}w2aL5o28Nwk$IAjQ!(SvZv5DpnaP=N3l*hJ++ zI|jCKsC;P0z;+5MAKEccErH61b_^tXB*TVe*pLhx zl3_zKY)FO;$*>_AHYCG_WY~}l8X0;Ks+K5?g z#H==ARvR&^jhNL&%xWWMwGp%0h*@pKtTtj+8!@YmnAJwiY9nT~5wqHeS#89uHsYvV zjW{D{IA#cAhA?IbV}>wh2xEpYW(Z@3FlGp2hA?IbV}>wh2xEpYW(Z@3FlGp2hA?Ib zV}>wh2xEpYW(Z@3FlGp2hA`&DKsavJ#Mej*88>U<)kC-V>S$5;#*C_6jhi*`0MRz^ z!B|n>EMHn)G1W757qh!jMcDk_kgH zVMrzn$%G-9uy!?JNG1%)gdv%*b~Ry0CJf1hwW|q3GGRz249SEcnJ^?1hGfE!Oc;_0 zX96T~vs&D&7B{QK&1!M8THLG_H><_XYH_n#+^iNitHsS~akE<7tQI$`#m#DQvs&D& z7B{QK&1!M8THLG_H><_XYH_n#+^iON;%HcZa`{34e>;Ehpc_@1Z#Vdx%umB3gKtXN zct^8%2O^nfF9trEOr|sNYp%q%?WU_#q0Sz%w03v+L@J%ecMA8U()g;KKTM_ltnl^i zlgi4|`1RY?Hq2eKV@vlYFR^rSeSQ7PZGGE6vy!~`Uc3G7?Vs7QwRf)FGkw*$jgKK3 zoVgtTv4d}-x}8n$ld}}~_4aoq0jEA^yYm?;ku3Q?mAl=!+wR@sY-Qp$7YFb(pNq?) zNBfi5Y~N%g|1*=~AaSk(>Lcv@b3Gq%-ROLjlUP26zu|YCoACUQQb3ud6k2 z9>Q|I-)Z4fzZDp175l9G4Ij0A%lV4)Dd#TC`!5*fCFi7b%K5hQ9p}5~`+Lr)bDAB* z?s3ks7uOl*`+WBDY3JXZpE>{F{MdP&O(*<(krH65mn=8i&2e+xJU*fgx&`hWw~&1^ z!fugU%&DoRZp1BfFLBG=3O@U+a_6!`NVR*Zdl?@v&*wv!T6dva=U(nEa<6a~yGz`9 zmrse@M!qgx<}PPnuNJq}UE!`|1FtLjGWTkCwR?@b#{GzUt$SVibvw3i4eaRMQeS^f zeOBk@EnAk>*Ecjyroac=QAw|Mn!@np1k zGFm(tEuM@PPezL;qs5ca;>l?BWVCuRT0I%9o{UycMyn^I)sxZc$!O+_Wc^8FB=Iqd z_}F`lahjZLMxaHG+ueD8FW0n(iO!4A6}Ri|?aI^hL_d93s(&*%oAg1uvz1ZdReE2c zd%t_g9rI=Q=K41K`h8#V{WvW7#z1f06%A|8D=w8JQV%8QU@r zWsC-v2mUP6m)V{9a#l;$!K}Bl@63KNdn%_TXJ^g}Ip=dX<(|o%$Xl29Vt!fv?)=w- zw*{XsC}8AMq*ZfY%}_M&)$Bxb6U|ICFVSpQa}v!+G#}9{S91}~L^Kc4>{fFS%|JA- z)vQ)?TFpGPpAivCIH|Pa!HP>L@}hN%qMC{VzZ(PA`d;2q`SXQJ^QPpiNpWATU=&$U z#8;6PMSB(NRisz(EX9*7`oY>Hi41Q&HBe+%>rq8@71I?m#RDG)*&y5=hZ~VJ?o!

^&I(<(|UU;nfQjvIPKzf?le zE=5}zb(in%Cms;H@Ariz#*iT2_%Q#V{4YbdxetXnCK2 zeDyLRRowDjUTRP3Vbi?S!?cQ3YupFIL7TCvO{kYuoBb5kQd}~r1NF436w0TphbR)J zIHaPGia}Zg5^l-%H*H&Kb}w~5Y@8KuRJ1YKf{$AZxz8{w%BUD)vb_rzQ8<2T!HO#? zs;HQvPP92^_EtPm(L}`()t)3bS&BFvB~=sYIXk77QcZ^?HpJ4k-7+=?I)2$Ig$#Weue} zQaGe>`Rw;GHc>Z8r4;Y1P$GaF#qbotOKMxaXiy^oqoe%i8YvaElLuJdC3#!rg;uOi zkve(56{S;*PEjYt=j7j&H&y63H;1e8bSf&Rn4El^@^H#yC{JXvx1FH0#^eF(o6l3~ zFr^Mr>L8`$abZ=3he}a5c`g-kQ{Oy+j5g{riWWxE>nJ7L(8dKykD=EwG%|*6$FR&K z+%~0Z(T0x4;EFBrt0}UeSehbfioYm|rrPKkAt~(2KuJZ<a!n7lQSd@q_lQ&hSsL*v;TeSBPoMOd3A=A z^C_(*rKmmw7fG3E8`VYY_-QEvDJci2i`MS4jijgr%&d!i3#tpF7Im3K%GgCx#?aP) zwXt{G*BIQ@OUB@?_B9Ik0l2HZuci*_Ed#XPO>k!u5Nl)GY<46GGc_fvZ%egcSzG;2 zZE7-Q1NFf{I8Va)COB_PalXm4qsULPA8s=I($ZuK|AkZwo|d52d*Rne5cX*a@)rxc zB(QG@>GzXxA!Y3g^btvDyQmHqX4FC2IWR+lv?G6XQag&yC^n<9MDr5$I&nM<-m`{R z@tEXzLeHXgDh?yxyJ9d&jECT`9}WY|S(4+KtftXOx|D^cMJQt<=4|vvmr$wJLwv;s$zm>4RB2DHia-ahHGp!_(BrhiVu3-9I?Z z$(R1YahHGm!?Q~qP5BthTxK8+{?TgwUB}-`@UY&(m~jVxEAXtg

meat

+ // return + return ( +
+

meat

+
{t('PREFERENCES')}
+
+ ); } -export default Dashboard \ No newline at end of file +export default Dashboard diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..70c6974 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,39 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +/* eslint-disable no-undef */ +const defaultTheme = require('tailwindcss/defaultTheme'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ['./public/**/*.html', './src/**/*.{js,jsx,ts,tsx}'], + theme: { + extend: { + colors: { + primary: '#282c34', + secondary: '#191f27', + highlight: '#eaebf3', + outline: '#c5c6d1', + }, + gridTemplateColumns: { + player: '122px minmax(100px, 1fr) max-content minmax(0px, 60px)', + playersm: '120px minmax(100px, 1fr) 18px', + scoreboardnav: '114px minmax(95px, 1fr) 55px', + scoreboardnavsm: '180px 130px', + scoreboardgrid: '1fr 3px 1fr', + scoreboardgridsm: '1fr', + playerdetails: '150px auto', + playerdetailscontent: '160px 3px auto', + }, + gridTemplateRows: { + playerhistorycard: '40px 22px 40px auto', + }, + fontFamily: { + build: ['"Build"', 'sans-serif'], + }, + }, + screens: { + xs: '475px', + ...defaultTheme.screens, + }, + }, + plugins: [], +}; From 5af689c18e201a10bb188b09a178e363bc2f58ef Mon Sep 17 00:00:00 2001 From: meat <155785205+meatmeatmeatmeatmeatmeat@users.noreply.github.com> Date: Sat, 30 Mar 2024 15:02:36 +1000 Subject: [PATCH 05/27] Create preferences.ts --- src/preferences.ts | 136 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 src/preferences.ts diff --git a/src/preferences.ts b/src/preferences.ts new file mode 100644 index 0000000..16cbd06 --- /dev/null +++ b/src/preferences.ts @@ -0,0 +1,136 @@ +async function setSettingKey( + key: string, + value: unknown, + type: 'internal' | 'external' = 'external', +) { + try { + const formBody = { + [type]: { + [key]: value, + }, + }; + + const options = { + method: 'PUT', + body: JSON.stringify(formBody), + headers: { + 'Content-Type': 'application/json', + }, + }; +// TODO endpoint or something + // const response = await fetch(PREF_ENDPOINT, options); + // console.log(response); + // + // if (!response.ok) throw new Error('Failed to set setting.'); + + //return response.json(); + } catch (e) { + console.error(e); + } +} + +async function setSettings(newSettings: PreferenceResponse) { + try { + const options = { + method: 'PUT', + body: JSON.stringify(newSettings), + headers: { + 'Content-Type': 'application/json', + }, + }; +// TODO endpoint or something + // const response = await fetch(PREF_ENDPOINT, options); + // console.log(response); + // + // if (!response.ok) throw new Error('Failed to set setting.'); + + //return response.json(); + } catch (e) { + console.error(e); + } +} + +interface PreferenceResponse { + internal: { + tf2Directory: string; + rconPassword: string; + steamApiKey: string; + friendsApiUsage: string; + }; + external: Settings; +} + +interface Settings { + language: string; + openInApp: boolean; + colors: { + You: string; + Player: string; + Friend: string; + Trusted: string; + Suspicious: string; + FriendOfCheater: string; + Cheater: string; + Convict: string; + Bot: string; + }; +} + +export const defaultSettings: PreferenceResponse = { + external: { + language: 'English', + openInApp: false, + colors: { + You: '#00aaaa', + Player: 'none', + Friend: '#007700', + Trusted: '#00ee00', + Suspicious: '#aaaa00', + FriendOfCheater: '#888888', + Cheater: '#ee0000', + Convict: '#ee0066', + Bot: '#880000', + }, + }, + internal: { + friendsApiUsage: '', + tf2Directory: '', + steamApiKey: '', + rconPassword: '', + }, +}; + +// Merge settings with default settings +function mergeWithDefaults( + settings: Partial, +): PreferenceResponse { + const mergedSettings: PreferenceResponse = { + external: { + ...defaultSettings.external, + ...settings.external, + colors: { + ...defaultSettings.external.colors, + ...settings.external?.colors, + }, + }, + internal: { + ...defaultSettings.internal, + ...settings.internal, + }, + }; + return mergedSettings; +} + +async function getAllSettings(): Promise { + try { + // TODO endpoint or something + // const settings = await (await fetch(PREF_ENDPOINT)).json(); + const mergedSettings = mergeWithDefaults({}); + return mergedSettings; + } catch (e) { + console.error(e); + return defaultSettings; + } +} + +export {setSettingKey, setSettings, getAllSettings}; From 2551e0ed47598fe3e66c525e65955a7a3d699dea Mon Sep 17 00:00:00 2001 From: meat <155785205+meatmeatmeatmeatmeatmeat@users.noreply.github.com> Date: Sat, 30 Mar 2024 15:10:03 +1000 Subject: [PATCH 06/27] Added modalContext from MAC, various app functions --- src/App.tsx | 78 ++++++++++++++++++++++++++++++++++-- src/context/ModalContext.tsx | 52 ++++++++++++++++++++++++ src/main.tsx | 9 +++-- 3 files changed, 132 insertions(+), 7 deletions(-) create mode 100644 src/context/ModalContext.tsx diff --git a/src/App.tsx b/src/App.tsx index e216452..a3dfa30 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,20 +1,90 @@ import './App.css' import Dashboard from "./pages/dashboard/dashboard.tsx"; -import {useState} from "react"; +import {useEffect, useState} from "react"; +import {setLanguage} from "../i18n"; +import {getAllSettings} from "./preferences.ts"; +import {useModal} from "./context/ModalContext.tsx"; function App() { const [currentPage, setCurrentPage] = useState('/'); + const {closeModal, openModal, modalContent} = useModal(); const renderPage = () => { switch (currentPage) { case '/': - + return ; default: return ; } }; + const isBackendConnected = async () => { + try { + // const backendRunning = await verifyBackend(); + // if (!backendRunning) throw new Error('Backend not running'); + return true; + } catch (e) { + console.error('Error verifying backend connection', e); + // Close any previous modal + closeModal(); + // openModal(); + return false; + } + }; + const verifyConfigured = async () => { + try { + // const configured = await isBackendConfigured(); + // if (!configured) throw new Error('Backend not configured'); + if (modalContent) closeModal(); + return true; + } catch (e) { + console.error('Error verifying backend configuration', e); + // Close any previous modal + closeModal(); + // openModal(); + return false; + } + }; + const verificationRoutine = async () => { + let connected = false; + do { + connected = await isBackendConnected(); + if (!connected) { + await new Promise((resolve) => setTimeout(resolve, 5000)); // Wait 5 seconds before retrying + } + } while (!connected); + void verifyConfigured(); + }; + useEffect(() => { + // Set language from settings + const setLanguageFromSettings = async () => { + const settings = await getAllSettings(); + if (settings.external.language) { + setLanguage(settings.external.language); + } + }; + void setLanguageFromSettings(); + + // Don't verify backend if we're using fakedata (dev environment) + // if (useFakedata) return; + + void verificationRoutine(); + const intervalId = setInterval(verificationRoutine, 5000); + + return () => { + clearInterval(intervalId); + }; + }, [currentPage]); return ( -
- {renderPage()} +
+ {/**/} + {/*{!isMinimode && (*/} + {/*
*/} + {/* /!**!/*/} + {/*
*/} + {/*)}*/} +
+ {/*{renderPage()}*/} + {renderPage()} +
) } diff --git a/src/context/ModalContext.tsx b/src/context/ModalContext.tsx new file mode 100644 index 0000000..6188198 --- /dev/null +++ b/src/context/ModalContext.tsx @@ -0,0 +1,52 @@ +import React, { ReactNode, useState } from 'react'; + +interface ModalContextProps { + openModal: (content: React.ReactNode, modalOptions?: ModalOptions) => void; + closeModal: () => void; + modalContent: ReactNode; + modalOptions?: ModalOptions; +} + +interface ModalOptions { + dismissable?: boolean; +} + +const ModalContext = React.createContext( + undefined, +); + +interface ModalProviderProps { + children: ReactNode; +} + +export const ModalProvider = ({ children }: ModalProviderProps) => { + const [modalContent, setModalContent] = useState(null); + const [modalOptions, setModalOptions] = useState({}); + + const openModal = (content: ReactNode, options?: ModalOptions) => { + setModalContent(content); + setModalOptions(options ?? {}); + }; + + const closeModal = () => { + setModalContent(null); + setModalOptions({}); + }; + + return ( + + {children} + {modalContent} + + ); +}; + +export const useModal = (): ModalContextProps => { + const context = React.useContext(ModalContext); + if (!context) { + throw new Error('useModal must be used within a ModalProvider'); + } + return context; +}; diff --git a/src/main.tsx b/src/main.tsx index 3d7150d..71781f9 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -2,9 +2,12 @@ import React from 'react' import ReactDOM from 'react-dom/client' import App from './App.tsx' import './index.css' +import {ModalProvider} from "./context/ModalContext.tsx"; ReactDOM.createRoot(document.getElementById('root')!).render( - - - , + + + + + , ) From a042c311ac738f23d23dadc03a89ebeedad7fcf0 Mon Sep 17 00:00:00 2001 From: meat <155785205+meatmeatmeatmeatmeatmeat@users.noreply.github.com> Date: Sat, 30 Mar 2024 15:12:57 +1000 Subject: [PATCH 07/27] constants --- src/App.tsx | 3 ++- src/constants.ts | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 src/constants.ts diff --git a/src/App.tsx b/src/App.tsx index a3dfa30..f3876b7 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -4,6 +4,7 @@ import {useEffect, useState} from "react"; import {setLanguage} from "../i18n"; import {getAllSettings} from "./preferences.ts"; import {useModal} from "./context/ModalContext.tsx"; +import {Constants} from "./constants.ts"; function App() { const [currentPage, setCurrentPage] = useState('/'); @@ -67,7 +68,7 @@ function App() { // if (useFakedata) return; void verificationRoutine(); - const intervalId = setInterval(verificationRoutine, 5000); + const intervalId = setInterval(verificationRoutine, Constants.verificationInterval); return () => { clearInterval(intervalId); diff --git a/src/constants.ts b/src/constants.ts new file mode 100644 index 0000000..90ac8a2 --- /dev/null +++ b/src/constants.ts @@ -0,0 +1,3 @@ +export class Constants { + static verificationInterval = 5000; +} From e5a2c0ad884408756571f1a0beabdb8b2c28fd46 Mon Sep 17 00:00:00 2001 From: meat <155785205+meatmeatmeatmeatmeatmeat@users.noreply.github.com> Date: Sat, 30 Mar 2024 15:18:03 +1000 Subject: [PATCH 08/27] Minimode --- src/App.tsx | 13 +++++---- src/constants.ts | 2 ++ src/context/MinimodeContext.tsx | 49 +++++++++++++++++++++++++++++++++ src/main.tsx | 9 ++++-- 4 files changed, 64 insertions(+), 9 deletions(-) create mode 100644 src/context/MinimodeContext.tsx diff --git a/src/App.tsx b/src/App.tsx index f3876b7..f66c90b 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -5,8 +5,10 @@ import {setLanguage} from "../i18n"; import {getAllSettings} from "./preferences.ts"; import {useModal} from "./context/ModalContext.tsx"; import {Constants} from "./constants.ts"; +import {useMinimode} from "./context/MinimodeContext.tsx"; function App() { + const {isMinimode} = useMinimode(); const [currentPage, setCurrentPage] = useState('/'); const {closeModal, openModal, modalContent} = useModal(); const renderPage = () => { @@ -76,12 +78,11 @@ function App() { }, [currentPage]); return (
- {/**/} - {/*{!isMinimode && (*/} - {/*
*/} - {/* /!**!/*/} - {/*
*/} - {/*)}*/} + {!isMinimode && ( +
+ {/**/} +
+ )}
{/*{renderPage()}*/} {renderPage()} diff --git a/src/constants.ts b/src/constants.ts index 90ac8a2..fdfa165 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -1,3 +1,5 @@ export class Constants { static verificationInterval = 5000; + static miniModeWidth = 482; + static miniModeHeight = 300; } diff --git a/src/context/MinimodeContext.tsx b/src/context/MinimodeContext.tsx new file mode 100644 index 0000000..8d45072 --- /dev/null +++ b/src/context/MinimodeContext.tsx @@ -0,0 +1,49 @@ +import React, {ReactNode} from 'react'; +import {Constants} from "../constants.ts"; + +interface MinimodeContextType { + isMinimode: boolean; +} + +export const MinimodeContext = React.createContext< + MinimodeContextType | undefined +>(undefined); + +export const useMinimode = (): MinimodeContextType => { + const context = React.useContext(MinimodeContext); + if (!context) { + throw new Error('useMinimode must be used within a MinimodeProvider'); + } + return context; +}; + +interface MinimodeProviderProps { + children?: ReactNode; +} + +export const MinimodeProvider = ({children}: MinimodeProviderProps) => { + const {miniModeWidth, miniModeHeight} = Constants; + const [isMinimode, setIsMinimode] = React.useState( + window.innerWidth <= miniModeWidth && window.innerHeight <= miniModeHeight, + ); + + React.useEffect(() => { + const handleResize = () => { + setIsMinimode(window.innerWidth <= miniModeWidth && window.innerHeight <= miniModeHeight); + }; + + window.addEventListener('resize', handleResize); + + return () => { + window.removeEventListener('resize', handleResize); + }; + }, []); + + const contextValue: MinimodeContextType = {isMinimode}; + + return ( + + {children} + + ); +}; diff --git a/src/main.tsx b/src/main.tsx index 71781f9..7e349bc 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -3,11 +3,14 @@ import ReactDOM from 'react-dom/client' import App from './App.tsx' import './index.css' import {ModalProvider} from "./context/ModalContext.tsx"; +import {MinimodeProvider} from "./context/MinimodeContext.tsx"; ReactDOM.createRoot(document.getElementById('root')!).render( - - - + + + + + , ) From 531f617324c6e0b62354aae629f749ac3b0f736b Mon Sep 17 00:00:00 2001 From: meat <155785205+meatmeatmeatmeatmeatmeat@users.noreply.github.com> Date: Sat, 30 Mar 2024 15:39:14 +1000 Subject: [PATCH 09/27] Added many components from MAC --- package-lock.json | 9 ++ package.json | 1 + src/App.tsx | 12 +-- .../ContentPageContainer.css | 6 ++ .../ContentPageContainer.tsx | 12 +++ src/components/Divider/Divider.css | 0 src/components/Divider/Divider.tsx | 19 ++++ src/components/Flex/Flex.css | 3 + src/components/Flex/Flex.tsx | 22 +++++ src/components/SideMenu/MenuHeader.tsx | 67 +++++++++++++++ src/components/SideMenu/SideMenu.css | 15 ++++ src/components/SideMenu/SideMenu.tsx | 86 +++++++++++++++++++ src/components/SideMenuItem/SideMenuItem.css | 0 src/components/SideMenuItem/SideMenuItem.tsx | 55 ++++++++++++ src/components/Tooltip/Tooltip.css | 21 +++++ src/components/Tooltip/Tooltip.tsx | 35 ++++++++ src/constants/menuConstants.tsx | 20 +++++ src/pages/dashboard/dashboard.tsx | 3 - 18 files changed, 378 insertions(+), 8 deletions(-) create mode 100644 src/components/ContentPageContainer/ContentPageContainer.css create mode 100644 src/components/ContentPageContainer/ContentPageContainer.tsx create mode 100644 src/components/Divider/Divider.css create mode 100644 src/components/Divider/Divider.tsx create mode 100644 src/components/Flex/Flex.css create mode 100644 src/components/Flex/Flex.tsx create mode 100644 src/components/SideMenu/MenuHeader.tsx create mode 100644 src/components/SideMenu/SideMenu.css create mode 100644 src/components/SideMenu/SideMenu.tsx create mode 100644 src/components/SideMenuItem/SideMenuItem.css create mode 100644 src/components/SideMenuItem/SideMenuItem.tsx create mode 100644 src/components/Tooltip/Tooltip.css create mode 100644 src/components/Tooltip/Tooltip.tsx create mode 100644 src/constants/menuConstants.tsx diff --git a/package-lock.json b/package-lock.json index 213ff59..6ac2b8b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "api-frontend", "version": "0.0.0", "dependencies": { + "lucide-react": "^0.363.0", "react": "^18.2.0", "react-dom": "^18.2.0", "tailwindcss": "^3.4.3" @@ -2398,6 +2399,14 @@ "node": ">=10" } }, + "node_modules/lucide-react": { + "version": "0.363.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.363.0.tgz", + "integrity": "sha512-AlsfPCsXQyQx7wwsIgzcKOL9LwC498LIMAo+c0Es5PkHJa33xwmYAkkSoKoJWWWSYQEStqu58/jT4tL2gi32uQ==", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", diff --git a/package.json b/package.json index b6f4eaf..5916f0d 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "preview": "vite preview" }, "dependencies": { + "lucide-react": "^0.363.0", "react": "^18.2.0", "react-dom": "^18.2.0", "tailwindcss": "^3.4.3" diff --git a/src/App.tsx b/src/App.tsx index f66c90b..59cb3ee 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -6,14 +6,17 @@ import {getAllSettings} from "./preferences.ts"; import {useModal} from "./context/ModalContext.tsx"; import {Constants} from "./constants.ts"; import {useMinimode} from "./context/MinimodeContext.tsx"; +import SideMenu from "./components/SideMenu/SideMenu.tsx"; +import {PAGES} from "./constants/menuConstants.tsx"; +import ContentPageContainer from "./components/ContentPageContainer/ContentPageContainer.tsx"; function App() { const {isMinimode} = useMinimode(); - const [currentPage, setCurrentPage] = useState('/'); + const [currentPage, setCurrentPage] = useState(PAGES.PREFERENCES); const {closeModal, openModal, modalContent} = useModal(); const renderPage = () => { switch (currentPage) { - case '/': + case PAGES.PREFERENCES: return ; default: return ; @@ -80,12 +83,11 @@ function App() {
{!isMinimode && (
- {/**/} +
)}
- {/*{renderPage()}*/} - {renderPage()} + {renderPage()}
) diff --git a/src/components/ContentPageContainer/ContentPageContainer.css b/src/components/ContentPageContainer/ContentPageContainer.css new file mode 100644 index 0000000..5d2371e --- /dev/null +++ b/src/components/ContentPageContainer/ContentPageContainer.css @@ -0,0 +1,6 @@ +.content-page { + left: 50px; + position: absolute; + width: calc(100vw - 50px); + height: 100vh; +} diff --git a/src/components/ContentPageContainer/ContentPageContainer.tsx b/src/components/ContentPageContainer/ContentPageContainer.tsx new file mode 100644 index 0000000..739a527 --- /dev/null +++ b/src/components/ContentPageContainer/ContentPageContainer.tsx @@ -0,0 +1,12 @@ +import React, { ReactNode } from 'react'; +import './ContentPageContainer.css'; + +interface ContentPageProps { + children: ReactNode; +} + +const ContentPageContainer = ({ children }: ContentPageProps) => { + return
{children}
; +}; + +export default ContentPageContainer; diff --git a/src/components/Divider/Divider.css b/src/components/Divider/Divider.css new file mode 100644 index 0000000..e69de29 diff --git a/src/components/Divider/Divider.tsx b/src/components/Divider/Divider.tsx new file mode 100644 index 0000000..3886237 --- /dev/null +++ b/src/components/Divider/Divider.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import './Divider.css'; + +interface DividerProps { + size?: number; + padding?: number; + className?: string; +} + +const Divider = ({ size = 1, padding = 0, className = '' }: DividerProps) => { + return ( +
+ ); +}; + +export default Divider; diff --git a/src/components/Flex/Flex.css b/src/components/Flex/Flex.css new file mode 100644 index 0000000..4a0203a --- /dev/null +++ b/src/components/Flex/Flex.css @@ -0,0 +1,3 @@ +.flex { + display: flex; +} diff --git a/src/components/Flex/Flex.tsx b/src/components/Flex/Flex.tsx new file mode 100644 index 0000000..225501b --- /dev/null +++ b/src/components/Flex/Flex.tsx @@ -0,0 +1,22 @@ +import React, { ReactNode } from 'react'; +import './Flex.css'; + +interface FlexProps { + children: ReactNode; + className?: string; + onClick?: () => void; + style?: object; +} + +const Flex = ({ children, className = '', onClick, style }: FlexProps) => { + const handleClick = () => { + if (typeof onClick === 'function') onClick(); + }; + return ( +
+ {children} +
+ ); +}; + +export default Flex; diff --git a/src/components/SideMenu/MenuHeader.tsx b/src/components/SideMenu/MenuHeader.tsx new file mode 100644 index 0000000..850dd4b --- /dev/null +++ b/src/components/SideMenu/MenuHeader.tsx @@ -0,0 +1,67 @@ +import React from 'react'; +import { Menu, X } from 'lucide-react'; + +interface MenuHeaderProps { + collapsed: boolean; + handleSymbolClick: (e: React.MouseEvent) => void; +} + +const MenuHeader: React.FC = ({ + collapsed, + handleSymbolClick, +}) => { + const menuIcon = ( + + Logo + + ); + + return ( + + {collapsed && menuIcon} +
+ {!collapsed && menuIcon} + {!collapsed && ( + + MegaAntiCheat + + )} + + {collapsed ? ( + + ) : ( + + )} + +
+
+ ); +}; + +export default MenuHeader; diff --git a/src/components/SideMenu/SideMenu.css b/src/components/SideMenu/SideMenu.css new file mode 100644 index 0000000..ad0ddcc --- /dev/null +++ b/src/components/SideMenu/SideMenu.css @@ -0,0 +1,15 @@ +.side-menu.collapsed { + @apply max-w-[50px]; +} + +.menu-toggle.collapsed { + @apply relative top-2 left-2 bottom-[unset] transform-none; +} + +.menu-icon.collapsed { + @apply ml-1 left-1 relative -top-0.5; +} + +.side-menu:not(.collapsed) { + @apply shadow-2xl shadow-black +} \ No newline at end of file diff --git a/src/components/SideMenu/SideMenu.tsx b/src/components/SideMenu/SideMenu.tsx new file mode 100644 index 0000000..eb3b694 --- /dev/null +++ b/src/components/SideMenu/SideMenu.tsx @@ -0,0 +1,86 @@ +import React, {Dispatch, SetStateAction} from 'react'; + +import MenuHeader from './MenuHeader'; + + +import './SideMenu.css'; +import {t} from "../../../i18n"; +import SideMenuItem from "../SideMenuItem/SideMenuItem.tsx"; +import Divider from '../Divider/Divider.tsx'; +import {MENU_ITEMS, PAGES} from "../../constants/menuConstants.tsx"; + +interface SideMenuProps { + setCurrentPage: Dispatch>; + currentPage: PAGES; +} + +const SideMenu = ({setCurrentPage, currentPage}: SideMenuProps) => { + const [collapsed, setCollapsed] = React.useState(true); + const MenuRef = React.useRef(null); + + const handleToggleCollapse = () => { + setCollapsed(!collapsed); + }; + + const handleOutsideClick = (event: MouseEvent) => { + if (!MenuRef.current?.contains(event.target as Node)) { + setCollapsed(true); + } + }; + + const handleToggleClick = (event: React.MouseEvent) => { + event.stopPropagation(); + handleToggleCollapse(); + }; + + const handleEscapePress = (event: KeyboardEvent) => { + if (event.key !== 'Escape') return; + + setCollapsed(true); + }; + + React.useEffect(() => { + document.addEventListener('click', handleOutsideClick); + document.addEventListener('keydown', handleEscapePress); + return () => { + document.removeEventListener('click', handleOutsideClick); + document.removeEventListener('keydown', handleEscapePress); + }; + }, []); + + return ( + <> +
+ +
+ + {MENU_ITEMS.map(({titleKey, icon, page}) => ( + setCurrentPage(page)} + selected={currentPage === page} + /> + ))} +
+
+
+ + ); +}; + +export default SideMenu; diff --git a/src/components/SideMenuItem/SideMenuItem.css b/src/components/SideMenuItem/SideMenuItem.css new file mode 100644 index 0000000..e69de29 diff --git a/src/components/SideMenuItem/SideMenuItem.tsx b/src/components/SideMenuItem/SideMenuItem.tsx new file mode 100644 index 0000000..f2d485c --- /dev/null +++ b/src/components/SideMenuItem/SideMenuItem.tsx @@ -0,0 +1,55 @@ +import {ReactElement} from 'react'; +import {Book} from 'lucide-react'; +import './SideMenuItem.css'; +import Flex from "../Flex/Flex.tsx"; +import Tooltip from "../Tooltip/Tooltip.tsx"; + +interface SideMenuItemProps { + title: string; + Icon?: ReactElement; + onClick?: () => void; + collapsed?: boolean; + selected?: boolean; +} + +const SideMenuItem = ({ + title, + Icon = , + onClick, + collapsed = false, + selected = false, + }: SideMenuItemProps) => { + const SideMenuInner = () => { + return ( + +
{Icon}
+
+ {title} +
+
+ ); + }; + + return ( +
+ {collapsed ? ( + + + + ) : ( + + )} +
+ ); +}; + +export default SideMenuItem as typeof SideMenuItem; diff --git a/src/components/Tooltip/Tooltip.css b/src/components/Tooltip/Tooltip.css new file mode 100644 index 0000000..f18232a --- /dev/null +++ b/src/components/Tooltip/Tooltip.css @@ -0,0 +1,21 @@ +.tooltip.right { + @apply top-2/4 left-full -translate-y-2/4; +} + +.tooltip.left { + + @apply top-2/4 right-full -translate-y-2/4; +} + +.tooltip.top { + @apply bottom-full -translate-x-1/3; +} + +.tooltip.bottom { + @apply top-full -translate-x-1/3; +} + +.tooltip-container:hover .tooltip { + @apply opacity-100; +} + diff --git a/src/components/Tooltip/Tooltip.tsx b/src/components/Tooltip/Tooltip.tsx new file mode 100644 index 0000000..d2f8648 --- /dev/null +++ b/src/components/Tooltip/Tooltip.tsx @@ -0,0 +1,35 @@ +import React, { ReactNode } from 'react'; +import './Tooltip.css'; + +interface TooltipProps { + content: string; + className?: string; + children?: ReactNode; + direction?: 'top' | 'bottom' | 'left' | 'right'; +} + +const Tooltip = ({ + content, + className = '', + children, + direction = 'top', +}: TooltipProps) => { + const newLineHandledText = content + .split('\n') + .map((str, index) =>

{str}

); + + return ( +
+
+ {children} +
+
+ {newLineHandledText} +
+
+ ); +}; + +export default Tooltip; diff --git a/src/constants/menuConstants.tsx b/src/constants/menuConstants.tsx new file mode 100644 index 0000000..7015a3d --- /dev/null +++ b/src/constants/menuConstants.tsx @@ -0,0 +1,20 @@ +import {Settings2} from 'lucide-react'; +import {ReactElement} from 'react'; + +export const enum PAGES { + PREFERENCES, +} + +interface MenuItem { + titleKey: string; + icon: ReactElement; + page: PAGES; +} + +export const MENU_ITEMS: MenuItem[] = [ + { + titleKey: 'PREFERENCES', + icon: , + page: PAGES.PREFERENCES, + }, +]; diff --git a/src/pages/dashboard/dashboard.tsx b/src/pages/dashboard/dashboard.tsx index dab2bc4..03e28bb 100644 --- a/src/pages/dashboard/dashboard.tsx +++ b/src/pages/dashboard/dashboard.tsx @@ -1,11 +1,8 @@ -import {t} from "../../../i18n"; - function Dashboard() { // return return (

meat

-
{t('PREFERENCES')}
); } From de42c95cd9d93089b1b0000ee8310c99627abff7 Mon Sep 17 00:00:00 2001 From: meat <155785205+meatmeatmeatmeatmeatmeat@users.noreply.github.com> Date: Sat, 30 Mar 2024 15:54:04 +1000 Subject: [PATCH 10/27] Added MAC logo, Fixed MouseEvent types on SideMenu --- public/mac_logo.webp | Bin 0 -> 2426 bytes public/vite.svg | 1 - src/components/SideMenu/SideMenu.tsx | 12 ++++++------ vite.config.ts | 3 +++ 4 files changed, 9 insertions(+), 7 deletions(-) create mode 100644 public/mac_logo.webp delete mode 100644 public/vite.svg diff --git a/public/mac_logo.webp b/public/mac_logo.webp new file mode 100644 index 0000000000000000000000000000000000000000..c1c3c7802e5745b11cc0d5890d60c88241429017 GIT binary patch literal 2426 zcmV-=35E7jNk&F;2><|BMM6+kP&goF2><{vC;*)SDu4ih06uLplSZT?A)zT0d?yf&HLayz7yWxk59dIF z3?%Y^tW`Z5{*yB&pTG}gegy;57agz8Nn{4xr7Bv+up!%?@W}#e=cVu(8|v5wO!stQ#KyW~Y`)`TfYyvvtd<&3n{o!FrNU-Gwr;rw^~ z8|i-Q?9LC<>5~DNm;|K@R4ApzOkb{la`rYUg?)DZOqY8%4}SQMZvJaHwJgmM6Gsrk+?g$lfJ-! zQ_fm9tlWiEpK-k`sqlu3N)}&*sjM-hQ~@P$?MZ8m^4m3<*S+vrWNv0o)0%C~Jv3q{ z1?E%nYv{$08y{t_6QYxKnUo0m%TqnY#wF`i>!v=c;%gNquoz2A?*C7o{oC9>k(q|@ zdVxD#r_@z=W8H7}ks)A5izwI`g6s00k=OI|gh+o(4imuTd+m@pNJ}1jX z^A#tA@EB|0pu5IVEF5jK7~G;M&Z! zX8Z>9di6`ctZ|`L>OpnfPN`Wk+v7W6Itb17TT&niiEdBLxk%$cIY18xt6-(dreo5a zk0^XFckYLsR~Sbgo2BP2xUr9Hy-)Q&|A)cgp*%ZRPSH)Pern4pM&E8l zIn-YCL^0V6*L%bTI5%|AK!V0y0^irO9SvCMhN>@`xDC8PjhE$eun3^LA~5++)5nJo z4gut872jvA?^gU1@1rl1%KKMgBxM^2VE9R|LT}1@IDj8mfjWEcaVZGh7k#r7la_Hh zN<=a=H90p1?o5-LjILy`ld2Ewo1_VrE~d15&&D1%8P^B{y#*lXI_3%H~5-jWpmu=ZvqQs zS3tPqgJyg=;?J#V37t@wgc-dtGgiWh)*Ood8k+I|RzefFwLa)~J?5Vs8&@_LVIwXS zeEZ&Zl@JVs(z$*R=hAY46GCCLdjNCl(Szn69LQU|02b*U4LV8T@~I=grZT60D;ib;GsKlLfta2uviZuthaE70>Riz z-QWHy@jSKb&UJ$q_XSzNmJylaOJw8K!{4?#Z#^vkzxXu$7=M0eVk>7dq(CiKeOg{~ zT{>G&&=jG2R=<9)PsC8%=r(YL&UoyYA6_CAY zvlc#@xvk9{9%KCEcII}q$fGxFTU3Lb-=Ll6i$G|a*`Iqlm;JKXm!GM0?)dOAst8lj zkwQF*si_<`B^{1}8YcJy8gTIv^U_@0q(P`sX z3zh~0re&vkSt`r7*ghRJw~XHziHsc7T|o%BrmYT$f>dRp#AF822fq58f1er0NWCk| zmeh+Q+u@vzWsBV|H=Dy0VS^sP>i`Kc|72Ra`l%GM#*tL$t-sEnz_*BOwtb!n)melY zjFOf1D~>b{mlUe~Alq;mRq5T| zvM$kVdT8Z$?s!*u9rY%sLq?xP%=*9ds#CRA>I0gb`%(0;NafmQ@j_-v7S4UjBVgeG zSIX0fsg81_xZ_ck7DWfT5;FH;&qgm{{`<5^*C(Akm9CyM^*|?GS5%AxOvlWi8%3Gr z)rytqpowG9>pAe3v6)%U6yDyZH#d4kR>NGz`ZOfdKfU^5xJ|(PV$;qC`zi{DG4Pod z43cyE`Wafi)&0*8e2BKFXcO~0T}4gu?m?PH_Ur0Zc2AI5UcUE6?WlhC&E>sHX|{S^ z;+?f3#`m$1(6z6gGL7La>