From 79518f79ac347fa1ee885ef9f2876816f1f7cd4215d4965ae84da87f4b09d177 Mon Sep 17 00:00:00 2001 From: Mukan Erkin Date: Tue, 28 Apr 2026 01:06:01 +0300 Subject: [PATCH] feat: mm-ui v1 + API CORS + client auth middleware MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit React + Vite + Tabler UI. Sayfalar: anasayfa (issue listesi), giriş, kayıt, issue detay, sorun bildir. Axios interceptor ile token refresh. API: CORS origin whitelist, CORSMiddleware eklendi. --- .gitignore | 3 + mm_api/main.py | 12 + mm_ui/.env.example | 2 + mm_ui/.eslintrc.cjs | 18 + mm_ui/.gitignore | 24 + mm_ui/README.md | 27 + mm_ui/index.html | 16 + mm_ui/package-lock.json | 3269 +++++++++++++++++++++++ mm_ui/package.json | 33 + mm_ui/public/android-chrome-192x192.png | Bin 0 -> 12699 bytes mm_ui/public/android-chrome-512x512.png | Bin 0 -> 39985 bytes mm_ui/public/apple-touch-icon.png | Bin 0 -> 11833 bytes mm_ui/public/favicon-16x16.png | Bin 0 -> 659 bytes mm_ui/public/favicon-32x32.png | Bin 0 -> 1482 bytes mm_ui/public/favicon.ico | Bin 0 -> 15406 bytes mm_ui/src/App.tsx | 38 + mm_ui/src/api/auth.ts | 13 + mm_ui/src/api/client.ts | 41 + mm_ui/src/api/issues.ts | 25 + mm_ui/src/api/locations.ts | 7 + mm_ui/src/assets/logo.svg | 27 + mm_ui/src/components/Layout.tsx | 74 + mm_ui/src/main.tsx | 10 + mm_ui/src/pages/CreateIssue.tsx | 169 ++ mm_ui/src/pages/Home.tsx | 103 + mm_ui/src/pages/IssueDetail.tsx | 143 + mm_ui/src/pages/Login.tsx | 65 + mm_ui/src/pages/Register.tsx | 73 + mm_ui/src/store/auth.ts | 21 + mm_ui/src/vite-env.d.ts | 1 + mm_ui/tsconfig.json | 25 + mm_ui/tsconfig.node.json | 10 + mm_ui/vite.config.ts | 7 + 33 files changed, 4256 insertions(+) create mode 100644 mm_ui/.env.example create mode 100644 mm_ui/.eslintrc.cjs create mode 100644 mm_ui/.gitignore create mode 100644 mm_ui/README.md create mode 100644 mm_ui/index.html create mode 100644 mm_ui/package-lock.json create mode 100644 mm_ui/package.json create mode 100644 mm_ui/public/android-chrome-192x192.png create mode 100644 mm_ui/public/android-chrome-512x512.png create mode 100644 mm_ui/public/apple-touch-icon.png create mode 100644 mm_ui/public/favicon-16x16.png create mode 100644 mm_ui/public/favicon-32x32.png create mode 100644 mm_ui/public/favicon.ico create mode 100644 mm_ui/src/App.tsx create mode 100644 mm_ui/src/api/auth.ts create mode 100644 mm_ui/src/api/client.ts create mode 100644 mm_ui/src/api/issues.ts create mode 100644 mm_ui/src/api/locations.ts create mode 100644 mm_ui/src/assets/logo.svg create mode 100644 mm_ui/src/components/Layout.tsx create mode 100644 mm_ui/src/main.tsx create mode 100644 mm_ui/src/pages/CreateIssue.tsx create mode 100644 mm_ui/src/pages/Home.tsx create mode 100644 mm_ui/src/pages/IssueDetail.tsx create mode 100644 mm_ui/src/pages/Login.tsx create mode 100644 mm_ui/src/pages/Register.tsx create mode 100644 mm_ui/src/store/auth.ts create mode 100644 mm_ui/src/vite-env.d.ts create mode 100644 mm_ui/tsconfig.json create mode 100644 mm_ui/tsconfig.node.json create mode 100644 mm_ui/vite.config.ts diff --git a/.gitignore b/.gitignore index 297c19d..2349218 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,6 @@ __pycache__/ *.sqlite /uploads/ .DS_Store +mm_ui/node_modules/ +mm_ui/dist/ +mm_ui/.env diff --git a/mm_api/main.py b/mm_api/main.py index dd66f2f..21aade1 100644 --- a/mm_api/main.py +++ b/mm_api/main.py @@ -19,6 +19,18 @@ async def lifespan(app: FastAPI): app = FastAPI(title="Memleketmeselesi API", lifespan=lifespan) +app.add_middleware( + CORSMiddleware, + allow_origins=[ + "https://memleketmeselesi.org.tr", + "https://www.memleketmeselesi.org.tr", + "https://memleketmeselesi.net.tr", + ], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + app.middleware("http")(client_auth_middleware) app.include_router(locations.router) diff --git a/mm_ui/.env.example b/mm_ui/.env.example new file mode 100644 index 0000000..e49205a --- /dev/null +++ b/mm_ui/.env.example @@ -0,0 +1,2 @@ +VITE_API_URL=https://api.memleketmeselesi.org.tr +VITE_API_KEY=your-api-key-here diff --git a/mm_ui/.eslintrc.cjs b/mm_ui/.eslintrc.cjs new file mode 100644 index 0000000..fc52b62 --- /dev/null +++ b/mm_ui/.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/mm_ui/.gitignore b/mm_ui/.gitignore new file mode 100644 index 0000000..baf4510 --- /dev/null +++ b/mm_ui/.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/mm_ui/README.md b/mm_ui/README.md new file mode 100644 index 0000000..887da3b --- /dev/null +++ b/mm_ui/README.md @@ -0,0 +1,27 @@ +# 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 + 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/mm_ui/index.html b/mm_ui/index.html new file mode 100644 index 0000000..bc2cb3d --- /dev/null +++ b/mm_ui/index.html @@ -0,0 +1,16 @@ + + + + + + + + + + Memleketmeselesi + + +
+ + + diff --git a/mm_ui/package-lock.json b/mm_ui/package-lock.json new file mode 100644 index 0000000..ed99c65 --- /dev/null +++ b/mm_ui/package-lock.json @@ -0,0 +1,3269 @@ +{ + "name": "mm_ui", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "mm_ui", + "version": "0.0.0", + "dependencies": { + "@tabler/core": "^1.4.0", + "@tabler/icons-react": "^3.41.1", + "axios": "^1.15.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^7.14.2", + "zustand": "^5.0.12" + }, + "devDependencies": { + "@types/react": "^18.2.15", + "@types/react-dom": "^18.2.7", + "@typescript-eslint/eslint-plugin": "^6.0.0", + "@typescript-eslint/parser": "^6.0.0", + "@vitejs/plugin-react": "^4.0.3", + "eslint": "^8.45.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.3", + "typescript": "^5.0.2", + "vite": "^4.4.5" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "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.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "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.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "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.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true + }, + "node_modules/@tabler/core": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@tabler/core/-/core-1.4.0.tgz", + "integrity": "sha512-5BigzOlbOH9N0Is4u0rYNRCiwtnUXWO57K9zwuscygcicAa8UV9MGaS4zTgQsZEtZ9tsNANhN/YD8gCBGKYCiw==", + "dependencies": { + "@popperjs/core": "^2.11.8", + "bootstrap": "5.3.7" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + } + }, + "node_modules/@tabler/icons": { + "version": "3.41.1", + "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.41.1.tgz", + "integrity": "sha512-OaRnVbRmH2nHtFeg+RmMJ/7m2oBIF9XCJAUD5gQnMrpK9f05ydj8MZrAf3NZQqOXyxGN1UBL0D5IKLLEUfr74Q==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + } + }, + "node_modules/@tabler/icons-react": { + "version": "3.41.1", + "resolved": "https://registry.npmjs.org/@tabler/icons-react/-/icons-react-3.41.1.tgz", + "integrity": "sha512-kUgweE+DJtAlMZVIns1FTDdcbpRVnkK7ZpUOXmoxy3JAF0rSHj0TcP4VHF14+gMJGnF+psH2Zt26BLT6owetBA==", + "dependencies": { + "@tabler/icons": "3.41.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + }, + "peerDependencies": { + "react": ">= 16" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "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.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "devOptional": true + }, + "node_modules/@types/react": { + "version": "18.3.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.28.tgz", + "integrity": "sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==", + "devOptional": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "dev": true, + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@types/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "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": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "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": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "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": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "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.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "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/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.2.tgz", + "integrity": "sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A==", + "dependencies": { + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.23", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.23.tgz", + "integrity": "sha512-xwVXGqevyKPsiuQdLj+dZMVjidjJV508TBqexND5HrF89cGdCYCJFB3qhcxRHSeMctdCfbR1jrxBajhDy7o29g==", + "dev": true, + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/bootstrap": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.7.tgz", + "integrity": "sha512-7KgiD8UHjfcPBHEpDNg+zGz8L3LqR3GVwqZiBRFX04a1BCArZOz1r2kjly2HQ0WokqTO0v1nF+QAt8dsW4lKlw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, + "node_modules/brace-expansion": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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/caniuse-lite": { + "version": "1.0.30001791", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001791.tgz", + "integrity": "sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "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/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "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.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "devOptional": true + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/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/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.344", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.344.tgz", + "integrity": "sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg==", + "dev": true + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "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.1", + "@humanwhocodes/config-array": "^0.13.0", + "@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.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "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.26", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.26.tgz", + "integrity": "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==", + "dev": true, + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "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.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "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.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "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.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "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.8" + }, + "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.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "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.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "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.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "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.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "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/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-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/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "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==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "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.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "engines": { + "node": ">= 0.4" + } + }, + "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.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "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.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.38", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", + "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==", + "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.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "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.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.12.tgz", + "integrity": "sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA==", + "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.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "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/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "engines": { + "node": ">=10" + } + }, + "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.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.14.2.tgz", + "integrity": "sha512-yCqNne6I8IB6rVCH7XUvlBK7/QKyqypBFGv+8dj4QBFJiiRX+FG7/nkdAvGElyvVZ/HQP5N19wzteuTARXi5Gw==", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.14.2.tgz", + "integrity": "sha512-YZcM5ES8jJSM+KrJ9BdvHHqlnGTg5tH3sC5ChFRj4inosKctdyzBDhOyyHdGk597q2OT6NTrCA1OvB/YDwfekQ==", + "dependencies": { + "react-router": "7.14.2" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "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.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "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==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.30.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.30.0.tgz", + "integrity": "sha512-kQvGasUgN+AlWGliFn2POSajRQEsULVYFGTvOZmK06d7vCD+YhZztt70kGk3qaeAXeWYL5eO7zx+rAubBc55eA==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==" + }, + "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.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "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.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "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.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "4.5.14", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.14.tgz", + "integrity": "sha512-+v57oAaoYNnO3hIu5Z/tJRZjq5aHM2zDve9YZ8HngVHbhk66RStobhb1sqPMIPEleV6cNKYK4eGrAbE9Ulbl2g==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/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" + } + }, + "node_modules/zustand": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.12.tgz", + "integrity": "sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g==", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=18.0.0", + "immer": ">=9.0.6", + "react": ">=18.0.0", + "use-sync-external-store": ">=1.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + }, + "use-sync-external-store": { + "optional": true + } + } + } + } +} diff --git a/mm_ui/package.json b/mm_ui/package.json new file mode 100644 index 0000000..df53238 --- /dev/null +++ b/mm_ui/package.json @@ -0,0 +1,33 @@ +{ + "name": "mm_ui", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview" + }, + "dependencies": { + "@tabler/core": "^1.4.0", + "@tabler/icons-react": "^3.41.1", + "axios": "^1.15.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^7.14.2", + "zustand": "^5.0.12" + }, + "devDependencies": { + "@types/react": "^18.2.15", + "@types/react-dom": "^18.2.7", + "@typescript-eslint/eslint-plugin": "^6.0.0", + "@typescript-eslint/parser": "^6.0.0", + "@vitejs/plugin-react": "^4.0.3", + "eslint": "^8.45.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.3", + "typescript": "^5.0.2", + "vite": "^4.4.5" + } +} diff --git a/mm_ui/public/android-chrome-192x192.png b/mm_ui/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000000000000000000000000000..b4876b8d952433bfe6cbce432ee2b0562e092d9e8abd29ccf3b1d964981756fe GIT binary patch literal 12699 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 Vd474L&)pUPIVoky8gY~F{{yku77YLZ literal 0 HcmV?d00001 diff --git a/mm_ui/public/android-chrome-512x512.png b/mm_ui/public/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000000000000000000000000000..c0b554d86f47f3a907bb765696cac9dfe5e0f0d2225680aaa1a74e150f6c1ecf GIT binary patch literal 39985 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�l?m0v@{$Qq4uLuJE2^L!bAK+2`|PuJ^*Yv# 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 literal 0 HcmV?d00001 diff --git a/mm_ui/public/apple-touch-icon.png b/mm_ui/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000000000000000000000000000..bdb9a54355c25cef6276b592b4fb3c330fe7a4ff4c92c7353b488c74bf44beb4 GIT binary patch literal 11833 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 literal 0 HcmV?d00001 diff --git a/mm_ui/public/favicon-16x16.png b/mm_ui/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000000000000000000000000000..9e11a157c42e794455d68ad4225bcd8c54c4f41257e2eed7df6cb02212dda9b3 GIT binary patch literal 659 zcmV;E0&M+>P)Px%O-V#SR5(wiQeQ|@VH`c*=47kXr2Qc>S?XdMC_OlE2(jh{hNuLM{4>@N9|k@M z3KIDkh|oYEHt1n&v-Oe>jj+LB8%Qh+g|bj&ww#K>radgPN#oud-vuu=w_duBzjJ=) zo^!q*!GC__bpPG(@Xh*xfpMu^uH!f^|0|u2esMaT6mJ{hiH1s!)IsLh<8-*W1%F zF%cymxxC`R@^Z35tyZLhLA)Ow#n0_+h-ET##bN-*VZmqwlgr_fS`Gc|EY#iI__4K> z3DniqlQp-yzsccvnO<7LoA!2a48x}?udaq>aFG9F!tV!lz*{aWLr**orA~)6m#dHL zghEfQcXmFFS*`dQ2ndy4ZfwL+D#Z(2tgS_MV?)3+HX95+A9g~a$0RW~_ef*4df%E% z*o#C2l1L(fRHXt~mhXhk=LM|BY{tECm^!l&zgBz2vbgx|^UO@;r>QA{bgiQU>fT<^ zQfW8)(Wrpko}9$3k&$fBWV*q>!n)V{u*P5rEEtXAqhyjNQrq`eR=}|=UbnX5cz2hd zS2i@DD-vP$qS1cs(9kR44#F0TP2Sw>Nyp=2S||~T(ByCcgkas};+?44+Mv?wneVHs zcJuuF3*inm(K~%fg7-ii;J9FE-FBWMVu5}E-6sp1ckQG t#uG{`mYK#O0DCrbA@838C5rrO{09;X-%zL?Z^!@u002ovPDHLkV1gL;H>v;t literal 0 HcmV?d00001 diff --git a/mm_ui/public/favicon-32x32.png b/mm_ui/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000000000000000000000000000..efcf28ccfe328b46b26733abb1168072b2ce8b56b201e1353bb4ec84d6841c6b GIT binary patch literal 1482 zcmV;*1vUDKP)Px)gh@m}R9HvFmupOuR~X0tZ%Y|gP_zP55GkF2Q8z#l2O6>nc2GJLBq)kHUC1OV zXwXbCh>99MOaz4w5=U?#9f|_us%B^m!HS}IiL11Lu&N-An?)|RUC!&;P$+G|558Y| z`rQ7%p68tBO(}flhx*L=7#H9yz?tXg_k%s3?`6T^%vOK+Fw`fP%VZ+aUqww#)t3O} zNcaMPsp4{1IY&l*$DT8X$6zv9@87b*Uewq@1J7%*@>5n`xUQI~xy9o$L#69FA8=eZAPy(NPQZx~2x#)~vxmXQ$qa;+v5H=kRclRyF43 zp*A*FZyXU{U0e*i<;%7HzUF3ifv4w^pSrsr(1Ldp6EnSz9ND3X=zjhjSG~M2+}o?S zDAU3M8|89T1_gmKGXuY<2)Xw5Pz?>~jW@TpM(DkJn8xF2{o+H1(w84U9!mpAMWQFX zh=_$6ZyBEt`L%1~j)*T;t^_wM47G7_bd2xWvuMoCMaP{xf={V~J3&3%Ahb%weVBY$sCQRdU z>6jO#rQJ?K;f#*}<>iBpfq~{^{VXdBx1*yC7INV8@lREiPK-X==pugE*>K&ul{UAQ zm-o#R2&T~h%~!6-oYt;&ChPmhj^Tb{qCo%)8ygI~c?0tqGoV%~>9eA-8A|jzaRMF( z4$vXZSFcK(LqpwYfJbR*d5d@NjwI{HX=&Qt8l)ht*s=wx;bF)wUNjc^@vLNIU|~!Q zy?%W9bk5g%_H3mAE_r$ehupgLC(F{3j7^lRSYc8@en|-pa6K%{r1&*rF>IGD!%$BT ziv0Y(k7#J9(%gGWa^Zs5B`V5`jLZTzH}s4cDkH1AMMuNI-=8+k6AI}G*!utJZmX(- zYO3N%dV27W-Q8O8F*~5i&IJ4|EG>)Y3IuGDtY~XPhggixhYz9b z?}vRr0R4g?FDden+n{J|#mnkyFxhO(^6;QVr#d*$)3L3rOfjfX1n&TJ#K#374g$dh ziUH6QQs<$lv8~Z(`p5GIM6 z3^2iVm@Gaa026m&LgEt!Faj}Q@ks%U12HM_Ndt_6P#e1E#%}8;{Wm1TiUL09n{dX2 kHU3WmFjd4*+-C>)4|T5}KN%~C-T(jq07*qoM6N<$f@=xPeEM0(9IO+!gj!b)%JwpJlgrkR;(n&!P(QeJCi<*IA> z0D_qCDg!Z}6YHzwborkTg&b>Z88SF2yf-+(L4GF2Va=Sr~tlI)?$74-9ND*L$1kyU&l=+wU?Nn>+V6Okw-?U;M<&>zq5pou3xa1K$Z-AoQ_q)_)Yqb4uh+BU;yTvQ(84ZVx_+6S zBDB$mF%*KWS-<|wbj;=D-FFY$#m5)9|wE6z+L>}7E?nE9m zX?Fq-zWjZ2T3Yojco$~Zt>on<^3Y-0oR^!xgT*rEG?n#V;6Z!c-MWcqClgv~eXZa2 zKf!~SbDuu`wX?(<`NUb}z=2DwqN0JVS#zw$$||5;TRnYxg!A#^CE|JE`|nS)c4W#TBJ#vD z1ODvYn`81WXTe5?irkijT_JI5Q)2NW;665SqE6z6!^!KJGh-y$XzbjXb(+&(vnIt$J_s4` z_bSK1+pu-luGO;%6Lg}jEiJ8Q_uON8m*cRg$?mc2Y~$KN%flmiBd2d|9Wwsn#p{Mk zP%9(Yhc-3_J(J_&ZRj%Yv1MiTjP{S_+6N5^7Vm5F_2uSP>#eM|IdJ-@*RDMlCWk>A zcjON~I6`;qKok6ScDqE|&*90Qkj*mc19-&UeA%)i;{A@pp@t12dGC_bHncYlB)gU; zhvn^-mK*HCg-UkvWGTCRxkj>Mu)9r7H$*Vt#Ta0+vML$osFk08&dwHuE!J)63qrqs z{*RCy&VUUzSIWy9^s81SdwX~s-BwZ2Xm$c{lAO|e_1bEyM%&o8{(h4AhQo)i)T!}N zUEM^sBQKlozpwH+vu4H2raO8rzRAi090>_UwTl-gd?yIOz4;vT^%m zldkjhJhyxG>g2Bc7AA&hacYM;^C3<4e4g6w|Ba3-MSN=PEJwt1YyH~ zw(wm&T@o<(W64D;%%i8vPtv6ke?JMV?Jfx3;{@TSr|2t6?Y~oD-2_3r=boo;c9y}9 z^>5PJRX-#*4F8Rpqj253-{kKta;9Xj4C+d<#c1DX&t^Q8XrJJcUlH3*RxmCJ!OLRuTyR@cTpi7qP4E)e-&klw@ zdAwf>hWc-!E*W%&{M?1`iNY83?6Z*!enP}4;Cr*T-_4L?!1*EH37a-8$|P=p+=6M- zqQ(3U4u?7LFCxbSxaQ3Hl}(uvCDH&bqWKrkO9q`GpZxhnixS|MMGgatjV%!4E|Vum zin$tytH@=J+>i3|dc-v-CnZSCL;2#1jtfFfb#X`yb(Z zbapn)2WpT0(4jjhc9zN6mTJV)FxK8&`54xK_kekl;dr$jXj!{c8z?jZQY*myOJ)_do=EW_Hbbgy42ik@Yj+K>nXP?e%P?> z4`{7{e4n3le>wcVh*P%bE0@!sIyH(>jFI+VwfMk)4j(D-z>m-Su_u(dTXH<|HueMT z1#qB{9_!uR5B^u3fA5hLd#Drv=@0fFa36)HW54I}edOkm{SbZk9npIw zF4$J=L0%dfn(++^G<^qtgDD1P41y7GVPOp$G)OznqNJnt8{Z7XjMc_0?R)US?UF6x zYaqWn-SxH(;%gW@IK+kamLW;66$mz5nMY^|&7M7t@hUgBgW@-X&y$bwK65p`-Dl5U z?ytU!M(wLNkk5XYDQmbaHLPt+Wf!^ztZJg{A~yE4`& zM%mCjfBx^wIsZ$S9{!B@Hwlbk|BfHu@%_7HOR8#&6lXF^V%T!t(MEoYeE(t{#DB}e zg$e)R{Lh^mzoM|PR*IDa2Da$^_Y*oSFXZpab7(j}$hYR^` zAa~cnVUHWw8ibniH!gv0OB(mFPJbg0F0!x=dvqg*@(Ar}I<i;8O79=r%aPEI9z>Zvf2r}3V} z>8RC9mK+w(a5(E6J60^l%%R6>u*yEH@#&|-S$cZ88tb@+=xuBQq`hlggOAN8pCo7U zbF+Lh&K;*umoc(g47#kOsr-#xe%enG3Vch{^3{~{fE&3(u=i>)cGwiU*OBbipd3mi#UvdPBc71&_<*b#ksHi+K=Z^M2?b}8Z z+Bmz*^DV#^Yy#GTJUz?>4&X9Z=zH3{Xwf0cjcGqu0eKX3X5EvORi(NY%+cZF;3+&j zr;u_83zhbp!&q8V-ie;_E_L*uM-M3_uKs&dU%J2jFER0Ii`u(1M;CXcjT=)_>FhgU z;>57An>VMOC%x#fJU}}k;Yu^zt9}rKO?}mQ)#~-R`-vy^ET;ciIZu1O5%O$rE!b~l z<8RRaZIn^IVif(a$fHKgzIF>1915fV=P0F|nj30+lgk7&koyRll(UmLa%AX2;=QL4 zSBF}3-}ijn)irk2)~)Aab-LVA{ErLl339BiT&ZQ}&Xu!+2MZc^@6JwLx9+6Zs8M@q zf2q;i)RXczXHnjaH^H989Lyz~E#d-B+CzGsF29WaN9TZ>+pnuA<~OoK+-d`N8!#ZG z@2pwT56+me&xw2#3n(w{ { + const token = localStorage.getItem('access_token') + if (token) { + me().then(setUser).catch(() => { + localStorage.removeItem('access_token') + localStorage.removeItem('refresh_token') + }) + } + }, []) + + return ( + + + + } /> + } /> + } /> + } /> + } /> + + + + ) +} diff --git a/mm_ui/src/api/auth.ts b/mm_ui/src/api/auth.ts new file mode 100644 index 0000000..13ab9a9 --- /dev/null +++ b/mm_ui/src/api/auth.ts @@ -0,0 +1,13 @@ +import { api } from './client' + +export const register = (email: string, password: string) => + api.post('/auth/register', { email, password }).then(r => r.data) + +export const login = (email: string, password: string) => + api.post('/auth/login', { email, password }).then(r => r.data) + +export const logout = () => + api.post('/auth/logout').then(r => r.data) + +export const me = () => + api.get('/auth/me').then(r => r.data) diff --git a/mm_ui/src/api/client.ts b/mm_ui/src/api/client.ts new file mode 100644 index 0000000..a81227a --- /dev/null +++ b/mm_ui/src/api/client.ts @@ -0,0 +1,41 @@ +import axios from 'axios' + +const API_BASE = import.meta.env.VITE_API_URL ?? 'https://api.memleketmeselesi.org.tr' +const API_KEY = import.meta.env.VITE_API_KEY ?? '' + +export const api = axios.create({ + baseURL: API_BASE, + headers: { 'X-Api-Key': API_KEY }, +}) + +api.interceptors.request.use((config) => { + const token = localStorage.getItem('access_token') + if (token) config.headers.Authorization = `Bearer ${token}` + return config +}) + +api.interceptors.response.use( + (res) => res, + async (err) => { + const original = err.config + if (err.response?.status === 401 && !original._retry) { + original._retry = true + const refresh = localStorage.getItem('refresh_token') + if (refresh) { + try { + const { data } = await axios.post(`${API_BASE}/auth/refresh`, { refresh_token: refresh }, { + headers: { 'X-Api-Key': API_KEY }, + }) + localStorage.setItem('access_token', data.access_token) + localStorage.setItem('refresh_token', data.refresh_token) + original.headers.Authorization = `Bearer ${data.access_token}` + return api(original) + } catch { + localStorage.clear() + window.location.href = '/giris' + } + } + } + return Promise.reject(err) + } +) diff --git a/mm_ui/src/api/issues.ts b/mm_ui/src/api/issues.ts new file mode 100644 index 0000000..b34f6ef --- /dev/null +++ b/mm_ui/src/api/issues.ts @@ -0,0 +1,25 @@ +import { api } from './client' + +export const listIssues = (params?: Record) => + api.get('/issues', { params }).then(r => r.data) + +export const getIssue = (id: number) => + api.get(`/issues/${id}`).then(r => r.data) + +export const createIssue = (data: { title: string; body: string; category_id: number; location_id: number }) => + api.post('/issues', data).then(r => r.data) + +export const updateIssue = (id: number, data: { title?: string; body?: string }) => + api.patch(`/issues/${id}`, data).then(r => r.data) + +export const voteIssue = (id: number, vote: 'resolved' | 'ongoing') => + api.post(`/issues/${id}/vote`, { vote }).then(r => r.data) + +export const listComments = (id: number) => + api.get(`/issues/${id}/comments`).then(r => r.data) + +export const addComment = (id: number, body: string, parent_id?: number) => + api.post(`/issues/${id}/comments`, { body, parent_id }).then(r => r.data) + +export const listCategories = (parent_id?: number) => + api.get('/issues/categories', { params: parent_id != null ? { parent_id } : {} }).then(r => r.data) diff --git a/mm_ui/src/api/locations.ts b/mm_ui/src/api/locations.ts new file mode 100644 index 0000000..01b1a02 --- /dev/null +++ b/mm_ui/src/api/locations.ts @@ -0,0 +1,7 @@ +import { api } from './client' + +export const listLocations = (parent_id?: number) => + api.get('/locations', { params: parent_id != null ? { parent_id } : {} }).then(r => r.data) + +export const searchLocations = (q: string) => + api.get('/locations/search', { params: { q } }).then(r => r.data) diff --git a/mm_ui/src/assets/logo.svg b/mm_ui/src/assets/logo.svg new file mode 100644 index 0000000..eece25b --- /dev/null +++ b/mm_ui/src/assets/logo.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + diff --git a/mm_ui/src/components/Layout.tsx b/mm_ui/src/components/Layout.tsx new file mode 100644 index 0000000..3294784 --- /dev/null +++ b/mm_ui/src/components/Layout.tsx @@ -0,0 +1,74 @@ +import { Link, useNavigate } from 'react-router-dom' +import { useAuth } from '../store/auth' +import { logout } from '../api/auth' +import logoSvg from '../assets/logo.svg' + +export default function Layout({ children }: { children: React.ReactNode }) { + const { user, setUser } = useAuth() + const navigate = useNavigate() + + const handleLogout = async () => { + try { await logout() } catch { /* ignore */ } + localStorage.removeItem('access_token') + localStorage.removeItem('refresh_token') + setUser(null) + navigate('/') + } + + return ( +

+
+
+ + Memleketmeselesi + +
+ {user ? ( + <> + + + + + + Sorun Bildir + +
+ + {user.email} + {user.kyc_status === 'verified' && ( + Doğrulandı + )} + {user.kyc_status === 'pending' && ( + Beklemede + )} + {user.kyc_status === 'none' && ( + Doğrulanmadı + )} + +
+ Profil + {user.kyc_status === 'none' && ( + Kimlik Doğrula + )} +
+ +
+
+ + ) : ( + <> + Giriş + Kayıt Ol + + )} +
+
+
+
+
+ {children} +
+
+
+ ) +} diff --git a/mm_ui/src/main.tsx b/mm_ui/src/main.tsx new file mode 100644 index 0000000..c6173e4 --- /dev/null +++ b/mm_ui/src/main.tsx @@ -0,0 +1,10 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import '@tabler/core/dist/css/tabler.min.css' +import App from './App.tsx' + +ReactDOM.createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/mm_ui/src/pages/CreateIssue.tsx b/mm_ui/src/pages/CreateIssue.tsx new file mode 100644 index 0000000..fec4803 --- /dev/null +++ b/mm_ui/src/pages/CreateIssue.tsx @@ -0,0 +1,169 @@ +import { useEffect, useState } from 'react' +import { useNavigate } from 'react-router-dom' +import { createIssue, listCategories } from '../api/issues' +import { listLocations } from '../api/locations' +import { useAuth } from '../store/auth' + +export default function CreateIssue() { + const navigate = useNavigate() + const { user, isVerified } = useAuth() + const [title, setTitle] = useState('') + const [body, setBody] = useState('') + const [categoryId, setCategoryId] = useState('') + const [parentCategoryId, setParentCategoryId] = useState('') + const [locationId, setLocationId] = useState('') + const [il, setIl] = useState('') + const [ilce, setIlce] = useState('') + const [categories, setCategories] = useState([]) + const [subCategories, setSubCategories] = useState([]) + const [iller, setIller] = useState([]) + const [ilceler, setIlceler] = useState([]) + const [mahalleler, setMahalleler] = useState([]) + const [error, setError] = useState('') + const [loading, setLoading] = useState(false) + + useEffect(() => { + if (!user) { navigate('/giris'); return } + if (!isVerified()) { navigate('/kimlik-dogrulama'); return } + listCategories().then(setCategories) + listLocations().then(setIller) // il seviyesi + }, []) + + useEffect(() => { + if (parentCategoryId !== '') { + listCategories(parentCategoryId).then(data => { + setSubCategories(data) + setCategoryId('') + if (data.length === 0) setCategoryId(parentCategoryId) + }) + } else { + setSubCategories([]) + } + }, [parentCategoryId]) + + useEffect(() => { + if (il !== '') { + listLocations(il).then(setIlceler) + setIlce(''); setLocationId(''); setMahalleler([]) + } + }, [il]) + + useEffect(() => { + if (ilce !== '') { + listLocations(ilce).then(data => { + setMahalleler(data) + setLocationId(ilce) + }) + } + }, [ilce]) + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault() + if (!categoryId || !locationId) { setError('Kategori ve konum seçimi zorunludur'); return } + setError(''); setLoading(true) + try { + const issue = await createIssue({ title, body, category_id: Number(categoryId), location_id: Number(locationId) }) + navigate(`/sorunlar/${issue.id}`) + } catch (err: any) { + setError(err.response?.data?.detail ?? 'Sorun bildirilemedi') + } finally { + setLoading(false) + } + } + + return ( +
+
+
+

Sorun Bildir

+
+
+
+ {error &&
{error}
} +
+
+ + setTitle(e.target.value)} required minLength={5} maxLength={300} /> +
+
+ +