├── .gitignore
├── README.md
├── eslint.config.js
├── index.html
├── package-lock.json
├── package.json
├── public
└── vite.svg
├── src
├── App.css
├── App.jsx
├── assets
│ └── react.svg
├── components
│ └── Nav.jsx
├── index.css
├── main.jsx
├── pages
│ ├── Details.jsx
│ ├── Favorites.jsx
│ ├── Home.jsx
│ ├── Login.jsx
│ ├── Pokemon.jsx
│ └── Register.jsx
└── styles
│ ├── details.css
│ ├── favorites.css
│ ├── form.css
│ ├── home.css
│ ├── nav.css
│ └── pokemon.css
└── vite.config.js
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 | .env
26 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # PokeDex Application
2 |
3 | This is an application that allows users to browse and learn about all of the Pokemon in the universe!
4 |
5 | ## Netlify Website
6 | https://capstonepokedex.netlify.app
7 |
8 | ## Features
9 | 1. Login and Registration functionality
10 | 2. Ability to browse every single pokemon and recieve information from the PokeAPI about the selected pokemon
11 | 3. Users can save their favorite pokemon to their accounts
12 |
13 | ## Technologies
14 | 1. React
15 | 2. React Router DOM
16 | 3. Axios
17 | 4. Vite
18 | 5. JSON Web Token (JWT)
19 |
20 | ## Upcoming features
21 | 1. Clearer UI
22 | 2. Add shiny varients toggle button in the user's favorites page
23 |
24 |
25 |
--------------------------------------------------------------------------------
/eslint.config.js:
--------------------------------------------------------------------------------
1 | import js from '@eslint/js'
2 | import globals from 'globals'
3 | import reactHooks from 'eslint-plugin-react-hooks'
4 | import reactRefresh from 'eslint-plugin-react-refresh'
5 |
6 | export default [
7 | { ignores: ['dist'] },
8 | {
9 | files: ['**/*.{js,jsx}'],
10 | languageOptions: {
11 | ecmaVersion: 2020,
12 | globals: globals.browser,
13 | parserOptions: {
14 | ecmaVersion: 'latest',
15 | ecmaFeatures: { jsx: true },
16 | sourceType: 'module',
17 | },
18 | },
19 | plugins: {
20 | 'react-hooks': reactHooks,
21 | 'react-refresh': reactRefresh,
22 | },
23 | rules: {
24 | ...js.configs.recommended.rules,
25 | ...reactHooks.configs.recommended.rules,
26 | 'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }],
27 | 'react-refresh/only-export-components': [
28 | 'warn',
29 | { allowConstantExport: true },
30 | ],
31 | },
32 | },
33 | ]
34 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite + React
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "frontend",
3 | "version": "0.0.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "frontend",
9 | "version": "0.0.0",
10 | "dependencies": {
11 | "axios": "^1.8.4",
12 | "react": "^19.0.0",
13 | "react-dom": "^19.0.0",
14 | "react-router-dom": "^7.4.0"
15 | },
16 | "devDependencies": {
17 | "@eslint/js": "^9.21.0",
18 | "@types/react": "^19.0.10",
19 | "@types/react-dom": "^19.0.4",
20 | "@vitejs/plugin-react": "^4.3.4",
21 | "eslint": "^9.21.0",
22 | "eslint-plugin-react-hooks": "^5.1.0",
23 | "eslint-plugin-react-refresh": "^0.4.19",
24 | "globals": "^15.15.0",
25 | "vite": "^6.2.0"
26 | }
27 | },
28 | "node_modules/@ampproject/remapping": {
29 | "version": "2.3.0",
30 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
31 | "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
32 | "dev": true,
33 | "license": "Apache-2.0",
34 | "dependencies": {
35 | "@jridgewell/gen-mapping": "^0.3.5",
36 | "@jridgewell/trace-mapping": "^0.3.24"
37 | },
38 | "engines": {
39 | "node": ">=6.0.0"
40 | }
41 | },
42 | "node_modules/@babel/code-frame": {
43 | "version": "7.26.2",
44 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
45 | "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
46 | "dev": true,
47 | "license": "MIT",
48 | "dependencies": {
49 | "@babel/helper-validator-identifier": "^7.25.9",
50 | "js-tokens": "^4.0.0",
51 | "picocolors": "^1.0.0"
52 | },
53 | "engines": {
54 | "node": ">=6.9.0"
55 | }
56 | },
57 | "node_modules/@babel/compat-data": {
58 | "version": "7.26.8",
59 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz",
60 | "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==",
61 | "dev": true,
62 | "license": "MIT",
63 | "engines": {
64 | "node": ">=6.9.0"
65 | }
66 | },
67 | "node_modules/@babel/core": {
68 | "version": "7.26.10",
69 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz",
70 | "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==",
71 | "dev": true,
72 | "license": "MIT",
73 | "dependencies": {
74 | "@ampproject/remapping": "^2.2.0",
75 | "@babel/code-frame": "^7.26.2",
76 | "@babel/generator": "^7.26.10",
77 | "@babel/helper-compilation-targets": "^7.26.5",
78 | "@babel/helper-module-transforms": "^7.26.0",
79 | "@babel/helpers": "^7.26.10",
80 | "@babel/parser": "^7.26.10",
81 | "@babel/template": "^7.26.9",
82 | "@babel/traverse": "^7.26.10",
83 | "@babel/types": "^7.26.10",
84 | "convert-source-map": "^2.0.0",
85 | "debug": "^4.1.0",
86 | "gensync": "^1.0.0-beta.2",
87 | "json5": "^2.2.3",
88 | "semver": "^6.3.1"
89 | },
90 | "engines": {
91 | "node": ">=6.9.0"
92 | },
93 | "funding": {
94 | "type": "opencollective",
95 | "url": "https://opencollective.com/babel"
96 | }
97 | },
98 | "node_modules/@babel/generator": {
99 | "version": "7.26.10",
100 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.10.tgz",
101 | "integrity": "sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==",
102 | "dev": true,
103 | "license": "MIT",
104 | "dependencies": {
105 | "@babel/parser": "^7.26.10",
106 | "@babel/types": "^7.26.10",
107 | "@jridgewell/gen-mapping": "^0.3.5",
108 | "@jridgewell/trace-mapping": "^0.3.25",
109 | "jsesc": "^3.0.2"
110 | },
111 | "engines": {
112 | "node": ">=6.9.0"
113 | }
114 | },
115 | "node_modules/@babel/helper-compilation-targets": {
116 | "version": "7.26.5",
117 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz",
118 | "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==",
119 | "dev": true,
120 | "license": "MIT",
121 | "dependencies": {
122 | "@babel/compat-data": "^7.26.5",
123 | "@babel/helper-validator-option": "^7.25.9",
124 | "browserslist": "^4.24.0",
125 | "lru-cache": "^5.1.1",
126 | "semver": "^6.3.1"
127 | },
128 | "engines": {
129 | "node": ">=6.9.0"
130 | }
131 | },
132 | "node_modules/@babel/helper-module-imports": {
133 | "version": "7.25.9",
134 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
135 | "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
136 | "dev": true,
137 | "license": "MIT",
138 | "dependencies": {
139 | "@babel/traverse": "^7.25.9",
140 | "@babel/types": "^7.25.9"
141 | },
142 | "engines": {
143 | "node": ">=6.9.0"
144 | }
145 | },
146 | "node_modules/@babel/helper-module-transforms": {
147 | "version": "7.26.0",
148 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
149 | "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
150 | "dev": true,
151 | "license": "MIT",
152 | "dependencies": {
153 | "@babel/helper-module-imports": "^7.25.9",
154 | "@babel/helper-validator-identifier": "^7.25.9",
155 | "@babel/traverse": "^7.25.9"
156 | },
157 | "engines": {
158 | "node": ">=6.9.0"
159 | },
160 | "peerDependencies": {
161 | "@babel/core": "^7.0.0"
162 | }
163 | },
164 | "node_modules/@babel/helper-plugin-utils": {
165 | "version": "7.26.5",
166 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz",
167 | "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==",
168 | "dev": true,
169 | "license": "MIT",
170 | "engines": {
171 | "node": ">=6.9.0"
172 | }
173 | },
174 | "node_modules/@babel/helper-string-parser": {
175 | "version": "7.25.9",
176 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
177 | "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
178 | "dev": true,
179 | "license": "MIT",
180 | "engines": {
181 | "node": ">=6.9.0"
182 | }
183 | },
184 | "node_modules/@babel/helper-validator-identifier": {
185 | "version": "7.25.9",
186 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
187 | "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
188 | "dev": true,
189 | "license": "MIT",
190 | "engines": {
191 | "node": ">=6.9.0"
192 | }
193 | },
194 | "node_modules/@babel/helper-validator-option": {
195 | "version": "7.25.9",
196 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
197 | "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
198 | "dev": true,
199 | "license": "MIT",
200 | "engines": {
201 | "node": ">=6.9.0"
202 | }
203 | },
204 | "node_modules/@babel/helpers": {
205 | "version": "7.26.10",
206 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz",
207 | "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==",
208 | "dev": true,
209 | "license": "MIT",
210 | "dependencies": {
211 | "@babel/template": "^7.26.9",
212 | "@babel/types": "^7.26.10"
213 | },
214 | "engines": {
215 | "node": ">=6.9.0"
216 | }
217 | },
218 | "node_modules/@babel/parser": {
219 | "version": "7.26.10",
220 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz",
221 | "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==",
222 | "dev": true,
223 | "license": "MIT",
224 | "dependencies": {
225 | "@babel/types": "^7.26.10"
226 | },
227 | "bin": {
228 | "parser": "bin/babel-parser.js"
229 | },
230 | "engines": {
231 | "node": ">=6.0.0"
232 | }
233 | },
234 | "node_modules/@babel/plugin-transform-react-jsx-self": {
235 | "version": "7.25.9",
236 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz",
237 | "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==",
238 | "dev": true,
239 | "license": "MIT",
240 | "dependencies": {
241 | "@babel/helper-plugin-utils": "^7.25.9"
242 | },
243 | "engines": {
244 | "node": ">=6.9.0"
245 | },
246 | "peerDependencies": {
247 | "@babel/core": "^7.0.0-0"
248 | }
249 | },
250 | "node_modules/@babel/plugin-transform-react-jsx-source": {
251 | "version": "7.25.9",
252 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz",
253 | "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==",
254 | "dev": true,
255 | "license": "MIT",
256 | "dependencies": {
257 | "@babel/helper-plugin-utils": "^7.25.9"
258 | },
259 | "engines": {
260 | "node": ">=6.9.0"
261 | },
262 | "peerDependencies": {
263 | "@babel/core": "^7.0.0-0"
264 | }
265 | },
266 | "node_modules/@babel/template": {
267 | "version": "7.26.9",
268 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz",
269 | "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==",
270 | "dev": true,
271 | "license": "MIT",
272 | "dependencies": {
273 | "@babel/code-frame": "^7.26.2",
274 | "@babel/parser": "^7.26.9",
275 | "@babel/types": "^7.26.9"
276 | },
277 | "engines": {
278 | "node": ">=6.9.0"
279 | }
280 | },
281 | "node_modules/@babel/traverse": {
282 | "version": "7.26.10",
283 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.10.tgz",
284 | "integrity": "sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==",
285 | "dev": true,
286 | "license": "MIT",
287 | "dependencies": {
288 | "@babel/code-frame": "^7.26.2",
289 | "@babel/generator": "^7.26.10",
290 | "@babel/parser": "^7.26.10",
291 | "@babel/template": "^7.26.9",
292 | "@babel/types": "^7.26.10",
293 | "debug": "^4.3.1",
294 | "globals": "^11.1.0"
295 | },
296 | "engines": {
297 | "node": ">=6.9.0"
298 | }
299 | },
300 | "node_modules/@babel/traverse/node_modules/globals": {
301 | "version": "11.12.0",
302 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
303 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
304 | "dev": true,
305 | "license": "MIT",
306 | "engines": {
307 | "node": ">=4"
308 | }
309 | },
310 | "node_modules/@babel/types": {
311 | "version": "7.26.10",
312 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz",
313 | "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==",
314 | "dev": true,
315 | "license": "MIT",
316 | "dependencies": {
317 | "@babel/helper-string-parser": "^7.25.9",
318 | "@babel/helper-validator-identifier": "^7.25.9"
319 | },
320 | "engines": {
321 | "node": ">=6.9.0"
322 | }
323 | },
324 | "node_modules/@esbuild/aix-ppc64": {
325 | "version": "0.25.1",
326 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz",
327 | "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==",
328 | "cpu": [
329 | "ppc64"
330 | ],
331 | "dev": true,
332 | "license": "MIT",
333 | "optional": true,
334 | "os": [
335 | "aix"
336 | ],
337 | "engines": {
338 | "node": ">=18"
339 | }
340 | },
341 | "node_modules/@esbuild/android-arm": {
342 | "version": "0.25.1",
343 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz",
344 | "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==",
345 | "cpu": [
346 | "arm"
347 | ],
348 | "dev": true,
349 | "license": "MIT",
350 | "optional": true,
351 | "os": [
352 | "android"
353 | ],
354 | "engines": {
355 | "node": ">=18"
356 | }
357 | },
358 | "node_modules/@esbuild/android-arm64": {
359 | "version": "0.25.1",
360 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz",
361 | "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==",
362 | "cpu": [
363 | "arm64"
364 | ],
365 | "dev": true,
366 | "license": "MIT",
367 | "optional": true,
368 | "os": [
369 | "android"
370 | ],
371 | "engines": {
372 | "node": ">=18"
373 | }
374 | },
375 | "node_modules/@esbuild/android-x64": {
376 | "version": "0.25.1",
377 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz",
378 | "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==",
379 | "cpu": [
380 | "x64"
381 | ],
382 | "dev": true,
383 | "license": "MIT",
384 | "optional": true,
385 | "os": [
386 | "android"
387 | ],
388 | "engines": {
389 | "node": ">=18"
390 | }
391 | },
392 | "node_modules/@esbuild/darwin-arm64": {
393 | "version": "0.25.1",
394 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz",
395 | "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==",
396 | "cpu": [
397 | "arm64"
398 | ],
399 | "dev": true,
400 | "license": "MIT",
401 | "optional": true,
402 | "os": [
403 | "darwin"
404 | ],
405 | "engines": {
406 | "node": ">=18"
407 | }
408 | },
409 | "node_modules/@esbuild/darwin-x64": {
410 | "version": "0.25.1",
411 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz",
412 | "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==",
413 | "cpu": [
414 | "x64"
415 | ],
416 | "dev": true,
417 | "license": "MIT",
418 | "optional": true,
419 | "os": [
420 | "darwin"
421 | ],
422 | "engines": {
423 | "node": ">=18"
424 | }
425 | },
426 | "node_modules/@esbuild/freebsd-arm64": {
427 | "version": "0.25.1",
428 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz",
429 | "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==",
430 | "cpu": [
431 | "arm64"
432 | ],
433 | "dev": true,
434 | "license": "MIT",
435 | "optional": true,
436 | "os": [
437 | "freebsd"
438 | ],
439 | "engines": {
440 | "node": ">=18"
441 | }
442 | },
443 | "node_modules/@esbuild/freebsd-x64": {
444 | "version": "0.25.1",
445 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz",
446 | "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==",
447 | "cpu": [
448 | "x64"
449 | ],
450 | "dev": true,
451 | "license": "MIT",
452 | "optional": true,
453 | "os": [
454 | "freebsd"
455 | ],
456 | "engines": {
457 | "node": ">=18"
458 | }
459 | },
460 | "node_modules/@esbuild/linux-arm": {
461 | "version": "0.25.1",
462 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz",
463 | "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==",
464 | "cpu": [
465 | "arm"
466 | ],
467 | "dev": true,
468 | "license": "MIT",
469 | "optional": true,
470 | "os": [
471 | "linux"
472 | ],
473 | "engines": {
474 | "node": ">=18"
475 | }
476 | },
477 | "node_modules/@esbuild/linux-arm64": {
478 | "version": "0.25.1",
479 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz",
480 | "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==",
481 | "cpu": [
482 | "arm64"
483 | ],
484 | "dev": true,
485 | "license": "MIT",
486 | "optional": true,
487 | "os": [
488 | "linux"
489 | ],
490 | "engines": {
491 | "node": ">=18"
492 | }
493 | },
494 | "node_modules/@esbuild/linux-ia32": {
495 | "version": "0.25.1",
496 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz",
497 | "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==",
498 | "cpu": [
499 | "ia32"
500 | ],
501 | "dev": true,
502 | "license": "MIT",
503 | "optional": true,
504 | "os": [
505 | "linux"
506 | ],
507 | "engines": {
508 | "node": ">=18"
509 | }
510 | },
511 | "node_modules/@esbuild/linux-loong64": {
512 | "version": "0.25.1",
513 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz",
514 | "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==",
515 | "cpu": [
516 | "loong64"
517 | ],
518 | "dev": true,
519 | "license": "MIT",
520 | "optional": true,
521 | "os": [
522 | "linux"
523 | ],
524 | "engines": {
525 | "node": ">=18"
526 | }
527 | },
528 | "node_modules/@esbuild/linux-mips64el": {
529 | "version": "0.25.1",
530 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz",
531 | "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==",
532 | "cpu": [
533 | "mips64el"
534 | ],
535 | "dev": true,
536 | "license": "MIT",
537 | "optional": true,
538 | "os": [
539 | "linux"
540 | ],
541 | "engines": {
542 | "node": ">=18"
543 | }
544 | },
545 | "node_modules/@esbuild/linux-ppc64": {
546 | "version": "0.25.1",
547 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz",
548 | "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==",
549 | "cpu": [
550 | "ppc64"
551 | ],
552 | "dev": true,
553 | "license": "MIT",
554 | "optional": true,
555 | "os": [
556 | "linux"
557 | ],
558 | "engines": {
559 | "node": ">=18"
560 | }
561 | },
562 | "node_modules/@esbuild/linux-riscv64": {
563 | "version": "0.25.1",
564 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz",
565 | "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==",
566 | "cpu": [
567 | "riscv64"
568 | ],
569 | "dev": true,
570 | "license": "MIT",
571 | "optional": true,
572 | "os": [
573 | "linux"
574 | ],
575 | "engines": {
576 | "node": ">=18"
577 | }
578 | },
579 | "node_modules/@esbuild/linux-s390x": {
580 | "version": "0.25.1",
581 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz",
582 | "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==",
583 | "cpu": [
584 | "s390x"
585 | ],
586 | "dev": true,
587 | "license": "MIT",
588 | "optional": true,
589 | "os": [
590 | "linux"
591 | ],
592 | "engines": {
593 | "node": ">=18"
594 | }
595 | },
596 | "node_modules/@esbuild/linux-x64": {
597 | "version": "0.25.1",
598 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz",
599 | "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==",
600 | "cpu": [
601 | "x64"
602 | ],
603 | "dev": true,
604 | "license": "MIT",
605 | "optional": true,
606 | "os": [
607 | "linux"
608 | ],
609 | "engines": {
610 | "node": ">=18"
611 | }
612 | },
613 | "node_modules/@esbuild/netbsd-arm64": {
614 | "version": "0.25.1",
615 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz",
616 | "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==",
617 | "cpu": [
618 | "arm64"
619 | ],
620 | "dev": true,
621 | "license": "MIT",
622 | "optional": true,
623 | "os": [
624 | "netbsd"
625 | ],
626 | "engines": {
627 | "node": ">=18"
628 | }
629 | },
630 | "node_modules/@esbuild/netbsd-x64": {
631 | "version": "0.25.1",
632 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz",
633 | "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==",
634 | "cpu": [
635 | "x64"
636 | ],
637 | "dev": true,
638 | "license": "MIT",
639 | "optional": true,
640 | "os": [
641 | "netbsd"
642 | ],
643 | "engines": {
644 | "node": ">=18"
645 | }
646 | },
647 | "node_modules/@esbuild/openbsd-arm64": {
648 | "version": "0.25.1",
649 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz",
650 | "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==",
651 | "cpu": [
652 | "arm64"
653 | ],
654 | "dev": true,
655 | "license": "MIT",
656 | "optional": true,
657 | "os": [
658 | "openbsd"
659 | ],
660 | "engines": {
661 | "node": ">=18"
662 | }
663 | },
664 | "node_modules/@esbuild/openbsd-x64": {
665 | "version": "0.25.1",
666 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz",
667 | "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==",
668 | "cpu": [
669 | "x64"
670 | ],
671 | "dev": true,
672 | "license": "MIT",
673 | "optional": true,
674 | "os": [
675 | "openbsd"
676 | ],
677 | "engines": {
678 | "node": ">=18"
679 | }
680 | },
681 | "node_modules/@esbuild/sunos-x64": {
682 | "version": "0.25.1",
683 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz",
684 | "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==",
685 | "cpu": [
686 | "x64"
687 | ],
688 | "dev": true,
689 | "license": "MIT",
690 | "optional": true,
691 | "os": [
692 | "sunos"
693 | ],
694 | "engines": {
695 | "node": ">=18"
696 | }
697 | },
698 | "node_modules/@esbuild/win32-arm64": {
699 | "version": "0.25.1",
700 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz",
701 | "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==",
702 | "cpu": [
703 | "arm64"
704 | ],
705 | "dev": true,
706 | "license": "MIT",
707 | "optional": true,
708 | "os": [
709 | "win32"
710 | ],
711 | "engines": {
712 | "node": ">=18"
713 | }
714 | },
715 | "node_modules/@esbuild/win32-ia32": {
716 | "version": "0.25.1",
717 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz",
718 | "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==",
719 | "cpu": [
720 | "ia32"
721 | ],
722 | "dev": true,
723 | "license": "MIT",
724 | "optional": true,
725 | "os": [
726 | "win32"
727 | ],
728 | "engines": {
729 | "node": ">=18"
730 | }
731 | },
732 | "node_modules/@esbuild/win32-x64": {
733 | "version": "0.25.1",
734 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz",
735 | "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==",
736 | "cpu": [
737 | "x64"
738 | ],
739 | "dev": true,
740 | "license": "MIT",
741 | "optional": true,
742 | "os": [
743 | "win32"
744 | ],
745 | "engines": {
746 | "node": ">=18"
747 | }
748 | },
749 | "node_modules/@eslint-community/eslint-utils": {
750 | "version": "4.5.1",
751 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz",
752 | "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==",
753 | "dev": true,
754 | "license": "MIT",
755 | "dependencies": {
756 | "eslint-visitor-keys": "^3.4.3"
757 | },
758 | "engines": {
759 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
760 | },
761 | "funding": {
762 | "url": "https://opencollective.com/eslint"
763 | },
764 | "peerDependencies": {
765 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
766 | }
767 | },
768 | "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
769 | "version": "3.4.3",
770 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
771 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
772 | "dev": true,
773 | "license": "Apache-2.0",
774 | "engines": {
775 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
776 | },
777 | "funding": {
778 | "url": "https://opencollective.com/eslint"
779 | }
780 | },
781 | "node_modules/@eslint-community/regexpp": {
782 | "version": "4.12.1",
783 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
784 | "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
785 | "dev": true,
786 | "license": "MIT",
787 | "engines": {
788 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
789 | }
790 | },
791 | "node_modules/@eslint/config-array": {
792 | "version": "0.19.2",
793 | "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz",
794 | "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==",
795 | "dev": true,
796 | "license": "Apache-2.0",
797 | "dependencies": {
798 | "@eslint/object-schema": "^2.1.6",
799 | "debug": "^4.3.1",
800 | "minimatch": "^3.1.2"
801 | },
802 | "engines": {
803 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
804 | }
805 | },
806 | "node_modules/@eslint/config-helpers": {
807 | "version": "0.1.0",
808 | "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.1.0.tgz",
809 | "integrity": "sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA==",
810 | "dev": true,
811 | "license": "Apache-2.0",
812 | "engines": {
813 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
814 | }
815 | },
816 | "node_modules/@eslint/core": {
817 | "version": "0.12.0",
818 | "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz",
819 | "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==",
820 | "dev": true,
821 | "license": "Apache-2.0",
822 | "dependencies": {
823 | "@types/json-schema": "^7.0.15"
824 | },
825 | "engines": {
826 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
827 | }
828 | },
829 | "node_modules/@eslint/eslintrc": {
830 | "version": "3.3.0",
831 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz",
832 | "integrity": "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==",
833 | "dev": true,
834 | "license": "MIT",
835 | "dependencies": {
836 | "ajv": "^6.12.4",
837 | "debug": "^4.3.2",
838 | "espree": "^10.0.1",
839 | "globals": "^14.0.0",
840 | "ignore": "^5.2.0",
841 | "import-fresh": "^3.2.1",
842 | "js-yaml": "^4.1.0",
843 | "minimatch": "^3.1.2",
844 | "strip-json-comments": "^3.1.1"
845 | },
846 | "engines": {
847 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
848 | },
849 | "funding": {
850 | "url": "https://opencollective.com/eslint"
851 | }
852 | },
853 | "node_modules/@eslint/eslintrc/node_modules/globals": {
854 | "version": "14.0.0",
855 | "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
856 | "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
857 | "dev": true,
858 | "license": "MIT",
859 | "engines": {
860 | "node": ">=18"
861 | },
862 | "funding": {
863 | "url": "https://github.com/sponsors/sindresorhus"
864 | }
865 | },
866 | "node_modules/@eslint/js": {
867 | "version": "9.22.0",
868 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.22.0.tgz",
869 | "integrity": "sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==",
870 | "dev": true,
871 | "license": "MIT",
872 | "engines": {
873 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
874 | }
875 | },
876 | "node_modules/@eslint/object-schema": {
877 | "version": "2.1.6",
878 | "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
879 | "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
880 | "dev": true,
881 | "license": "Apache-2.0",
882 | "engines": {
883 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
884 | }
885 | },
886 | "node_modules/@eslint/plugin-kit": {
887 | "version": "0.2.7",
888 | "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz",
889 | "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==",
890 | "dev": true,
891 | "license": "Apache-2.0",
892 | "dependencies": {
893 | "@eslint/core": "^0.12.0",
894 | "levn": "^0.4.1"
895 | },
896 | "engines": {
897 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
898 | }
899 | },
900 | "node_modules/@humanfs/core": {
901 | "version": "0.19.1",
902 | "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
903 | "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
904 | "dev": true,
905 | "license": "Apache-2.0",
906 | "engines": {
907 | "node": ">=18.18.0"
908 | }
909 | },
910 | "node_modules/@humanfs/node": {
911 | "version": "0.16.6",
912 | "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
913 | "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
914 | "dev": true,
915 | "license": "Apache-2.0",
916 | "dependencies": {
917 | "@humanfs/core": "^0.19.1",
918 | "@humanwhocodes/retry": "^0.3.0"
919 | },
920 | "engines": {
921 | "node": ">=18.18.0"
922 | }
923 | },
924 | "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
925 | "version": "0.3.1",
926 | "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
927 | "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
928 | "dev": true,
929 | "license": "Apache-2.0",
930 | "engines": {
931 | "node": ">=18.18"
932 | },
933 | "funding": {
934 | "type": "github",
935 | "url": "https://github.com/sponsors/nzakas"
936 | }
937 | },
938 | "node_modules/@humanwhocodes/module-importer": {
939 | "version": "1.0.1",
940 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
941 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
942 | "dev": true,
943 | "license": "Apache-2.0",
944 | "engines": {
945 | "node": ">=12.22"
946 | },
947 | "funding": {
948 | "type": "github",
949 | "url": "https://github.com/sponsors/nzakas"
950 | }
951 | },
952 | "node_modules/@humanwhocodes/retry": {
953 | "version": "0.4.2",
954 | "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz",
955 | "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==",
956 | "dev": true,
957 | "license": "Apache-2.0",
958 | "engines": {
959 | "node": ">=18.18"
960 | },
961 | "funding": {
962 | "type": "github",
963 | "url": "https://github.com/sponsors/nzakas"
964 | }
965 | },
966 | "node_modules/@jridgewell/gen-mapping": {
967 | "version": "0.3.8",
968 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
969 | "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
970 | "dev": true,
971 | "license": "MIT",
972 | "dependencies": {
973 | "@jridgewell/set-array": "^1.2.1",
974 | "@jridgewell/sourcemap-codec": "^1.4.10",
975 | "@jridgewell/trace-mapping": "^0.3.24"
976 | },
977 | "engines": {
978 | "node": ">=6.0.0"
979 | }
980 | },
981 | "node_modules/@jridgewell/resolve-uri": {
982 | "version": "3.1.2",
983 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
984 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
985 | "dev": true,
986 | "license": "MIT",
987 | "engines": {
988 | "node": ">=6.0.0"
989 | }
990 | },
991 | "node_modules/@jridgewell/set-array": {
992 | "version": "1.2.1",
993 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
994 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
995 | "dev": true,
996 | "license": "MIT",
997 | "engines": {
998 | "node": ">=6.0.0"
999 | }
1000 | },
1001 | "node_modules/@jridgewell/sourcemap-codec": {
1002 | "version": "1.5.0",
1003 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
1004 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
1005 | "dev": true,
1006 | "license": "MIT"
1007 | },
1008 | "node_modules/@jridgewell/trace-mapping": {
1009 | "version": "0.3.25",
1010 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
1011 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
1012 | "dev": true,
1013 | "license": "MIT",
1014 | "dependencies": {
1015 | "@jridgewell/resolve-uri": "^3.1.0",
1016 | "@jridgewell/sourcemap-codec": "^1.4.14"
1017 | }
1018 | },
1019 | "node_modules/@rollup/rollup-android-arm-eabi": {
1020 | "version": "4.36.0",
1021 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.36.0.tgz",
1022 | "integrity": "sha512-jgrXjjcEwN6XpZXL0HUeOVGfjXhPyxAbbhD0BlXUB+abTOpbPiN5Wb3kOT7yb+uEtATNYF5x5gIfwutmuBA26w==",
1023 | "cpu": [
1024 | "arm"
1025 | ],
1026 | "dev": true,
1027 | "license": "MIT",
1028 | "optional": true,
1029 | "os": [
1030 | "android"
1031 | ]
1032 | },
1033 | "node_modules/@rollup/rollup-android-arm64": {
1034 | "version": "4.36.0",
1035 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.36.0.tgz",
1036 | "integrity": "sha512-NyfuLvdPdNUfUNeYKUwPwKsE5SXa2J6bCt2LdB/N+AxShnkpiczi3tcLJrm5mA+eqpy0HmaIY9F6XCa32N5yzg==",
1037 | "cpu": [
1038 | "arm64"
1039 | ],
1040 | "dev": true,
1041 | "license": "MIT",
1042 | "optional": true,
1043 | "os": [
1044 | "android"
1045 | ]
1046 | },
1047 | "node_modules/@rollup/rollup-darwin-arm64": {
1048 | "version": "4.36.0",
1049 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.36.0.tgz",
1050 | "integrity": "sha512-JQ1Jk5G4bGrD4pWJQzWsD8I1n1mgPXq33+/vP4sk8j/z/C2siRuxZtaUA7yMTf71TCZTZl/4e1bfzwUmFb3+rw==",
1051 | "cpu": [
1052 | "arm64"
1053 | ],
1054 | "dev": true,
1055 | "license": "MIT",
1056 | "optional": true,
1057 | "os": [
1058 | "darwin"
1059 | ]
1060 | },
1061 | "node_modules/@rollup/rollup-darwin-x64": {
1062 | "version": "4.36.0",
1063 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.36.0.tgz",
1064 | "integrity": "sha512-6c6wMZa1lrtiRsbDziCmjE53YbTkxMYhhnWnSW8R/yqsM7a6mSJ3uAVT0t8Y/DGt7gxUWYuFM4bwWk9XCJrFKA==",
1065 | "cpu": [
1066 | "x64"
1067 | ],
1068 | "dev": true,
1069 | "license": "MIT",
1070 | "optional": true,
1071 | "os": [
1072 | "darwin"
1073 | ]
1074 | },
1075 | "node_modules/@rollup/rollup-freebsd-arm64": {
1076 | "version": "4.36.0",
1077 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.36.0.tgz",
1078 | "integrity": "sha512-KXVsijKeJXOl8QzXTsA+sHVDsFOmMCdBRgFmBb+mfEb/7geR7+C8ypAml4fquUt14ZyVXaw2o1FWhqAfOvA4sg==",
1079 | "cpu": [
1080 | "arm64"
1081 | ],
1082 | "dev": true,
1083 | "license": "MIT",
1084 | "optional": true,
1085 | "os": [
1086 | "freebsd"
1087 | ]
1088 | },
1089 | "node_modules/@rollup/rollup-freebsd-x64": {
1090 | "version": "4.36.0",
1091 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.36.0.tgz",
1092 | "integrity": "sha512-dVeWq1ebbvByI+ndz4IJcD4a09RJgRYmLccwlQ8bPd4olz3Y213uf1iwvc7ZaxNn2ab7bjc08PrtBgMu6nb4pQ==",
1093 | "cpu": [
1094 | "x64"
1095 | ],
1096 | "dev": true,
1097 | "license": "MIT",
1098 | "optional": true,
1099 | "os": [
1100 | "freebsd"
1101 | ]
1102 | },
1103 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
1104 | "version": "4.36.0",
1105 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.36.0.tgz",
1106 | "integrity": "sha512-bvXVU42mOVcF4le6XSjscdXjqx8okv4n5vmwgzcmtvFdifQ5U4dXFYaCB87namDRKlUL9ybVtLQ9ztnawaSzvg==",
1107 | "cpu": [
1108 | "arm"
1109 | ],
1110 | "dev": true,
1111 | "license": "MIT",
1112 | "optional": true,
1113 | "os": [
1114 | "linux"
1115 | ]
1116 | },
1117 | "node_modules/@rollup/rollup-linux-arm-musleabihf": {
1118 | "version": "4.36.0",
1119 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.36.0.tgz",
1120 | "integrity": "sha512-JFIQrDJYrxOnyDQGYkqnNBtjDwTgbasdbUiQvcU8JmGDfValfH1lNpng+4FWlhaVIR4KPkeddYjsVVbmJYvDcg==",
1121 | "cpu": [
1122 | "arm"
1123 | ],
1124 | "dev": true,
1125 | "license": "MIT",
1126 | "optional": true,
1127 | "os": [
1128 | "linux"
1129 | ]
1130 | },
1131 | "node_modules/@rollup/rollup-linux-arm64-gnu": {
1132 | "version": "4.36.0",
1133 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.36.0.tgz",
1134 | "integrity": "sha512-KqjYVh3oM1bj//5X7k79PSCZ6CvaVzb7Qs7VMWS+SlWB5M8p3FqufLP9VNp4CazJ0CsPDLwVD9r3vX7Ci4J56A==",
1135 | "cpu": [
1136 | "arm64"
1137 | ],
1138 | "dev": true,
1139 | "license": "MIT",
1140 | "optional": true,
1141 | "os": [
1142 | "linux"
1143 | ]
1144 | },
1145 | "node_modules/@rollup/rollup-linux-arm64-musl": {
1146 | "version": "4.36.0",
1147 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.36.0.tgz",
1148 | "integrity": "sha512-QiGnhScND+mAAtfHqeT+cB1S9yFnNQ/EwCg5yE3MzoaZZnIV0RV9O5alJAoJKX/sBONVKeZdMfO8QSaWEygMhw==",
1149 | "cpu": [
1150 | "arm64"
1151 | ],
1152 | "dev": true,
1153 | "license": "MIT",
1154 | "optional": true,
1155 | "os": [
1156 | "linux"
1157 | ]
1158 | },
1159 | "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
1160 | "version": "4.36.0",
1161 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.36.0.tgz",
1162 | "integrity": "sha512-1ZPyEDWF8phd4FQtTzMh8FQwqzvIjLsl6/84gzUxnMNFBtExBtpL51H67mV9xipuxl1AEAerRBgBwFNpkw8+Lg==",
1163 | "cpu": [
1164 | "loong64"
1165 | ],
1166 | "dev": true,
1167 | "license": "MIT",
1168 | "optional": true,
1169 | "os": [
1170 | "linux"
1171 | ]
1172 | },
1173 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
1174 | "version": "4.36.0",
1175 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.36.0.tgz",
1176 | "integrity": "sha512-VMPMEIUpPFKpPI9GZMhJrtu8rxnp6mJR3ZzQPykq4xc2GmdHj3Q4cA+7avMyegXy4n1v+Qynr9fR88BmyO74tg==",
1177 | "cpu": [
1178 | "ppc64"
1179 | ],
1180 | "dev": true,
1181 | "license": "MIT",
1182 | "optional": true,
1183 | "os": [
1184 | "linux"
1185 | ]
1186 | },
1187 | "node_modules/@rollup/rollup-linux-riscv64-gnu": {
1188 | "version": "4.36.0",
1189 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.36.0.tgz",
1190 | "integrity": "sha512-ttE6ayb/kHwNRJGYLpuAvB7SMtOeQnVXEIpMtAvx3kepFQeowVED0n1K9nAdraHUPJ5hydEMxBpIR7o4nrm8uA==",
1191 | "cpu": [
1192 | "riscv64"
1193 | ],
1194 | "dev": true,
1195 | "license": "MIT",
1196 | "optional": true,
1197 | "os": [
1198 | "linux"
1199 | ]
1200 | },
1201 | "node_modules/@rollup/rollup-linux-s390x-gnu": {
1202 | "version": "4.36.0",
1203 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.36.0.tgz",
1204 | "integrity": "sha512-4a5gf2jpS0AIe7uBjxDeUMNcFmaRTbNv7NxI5xOCs4lhzsVyGR/0qBXduPnoWf6dGC365saTiwag8hP1imTgag==",
1205 | "cpu": [
1206 | "s390x"
1207 | ],
1208 | "dev": true,
1209 | "license": "MIT",
1210 | "optional": true,
1211 | "os": [
1212 | "linux"
1213 | ]
1214 | },
1215 | "node_modules/@rollup/rollup-linux-x64-gnu": {
1216 | "version": "4.36.0",
1217 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.36.0.tgz",
1218 | "integrity": "sha512-5KtoW8UWmwFKQ96aQL3LlRXX16IMwyzMq/jSSVIIyAANiE1doaQsx/KRyhAvpHlPjPiSU/AYX/8m+lQ9VToxFQ==",
1219 | "cpu": [
1220 | "x64"
1221 | ],
1222 | "dev": true,
1223 | "license": "MIT",
1224 | "optional": true,
1225 | "os": [
1226 | "linux"
1227 | ]
1228 | },
1229 | "node_modules/@rollup/rollup-linux-x64-musl": {
1230 | "version": "4.36.0",
1231 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.36.0.tgz",
1232 | "integrity": "sha512-sycrYZPrv2ag4OCvaN5js+f01eoZ2U+RmT5as8vhxiFz+kxwlHrsxOwKPSA8WyS+Wc6Epid9QeI/IkQ9NkgYyQ==",
1233 | "cpu": [
1234 | "x64"
1235 | ],
1236 | "dev": true,
1237 | "license": "MIT",
1238 | "optional": true,
1239 | "os": [
1240 | "linux"
1241 | ]
1242 | },
1243 | "node_modules/@rollup/rollup-win32-arm64-msvc": {
1244 | "version": "4.36.0",
1245 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.36.0.tgz",
1246 | "integrity": "sha512-qbqt4N7tokFwwSVlWDsjfoHgviS3n/vZ8LK0h1uLG9TYIRuUTJC88E1xb3LM2iqZ/WTqNQjYrtmtGmrmmawB6A==",
1247 | "cpu": [
1248 | "arm64"
1249 | ],
1250 | "dev": true,
1251 | "license": "MIT",
1252 | "optional": true,
1253 | "os": [
1254 | "win32"
1255 | ]
1256 | },
1257 | "node_modules/@rollup/rollup-win32-ia32-msvc": {
1258 | "version": "4.36.0",
1259 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.36.0.tgz",
1260 | "integrity": "sha512-t+RY0JuRamIocMuQcfwYSOkmdX9dtkr1PbhKW42AMvaDQa+jOdpUYysroTF/nuPpAaQMWp7ye+ndlmmthieJrQ==",
1261 | "cpu": [
1262 | "ia32"
1263 | ],
1264 | "dev": true,
1265 | "license": "MIT",
1266 | "optional": true,
1267 | "os": [
1268 | "win32"
1269 | ]
1270 | },
1271 | "node_modules/@rollup/rollup-win32-x64-msvc": {
1272 | "version": "4.36.0",
1273 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.36.0.tgz",
1274 | "integrity": "sha512-aRXd7tRZkWLqGbChgcMMDEHjOKudo1kChb1Jt1IfR8cY/KIpgNviLeJy5FUb9IpSuQj8dU2fAYNMPW/hLKOSTw==",
1275 | "cpu": [
1276 | "x64"
1277 | ],
1278 | "dev": true,
1279 | "license": "MIT",
1280 | "optional": true,
1281 | "os": [
1282 | "win32"
1283 | ]
1284 | },
1285 | "node_modules/@types/babel__core": {
1286 | "version": "7.20.5",
1287 | "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
1288 | "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
1289 | "dev": true,
1290 | "license": "MIT",
1291 | "dependencies": {
1292 | "@babel/parser": "^7.20.7",
1293 | "@babel/types": "^7.20.7",
1294 | "@types/babel__generator": "*",
1295 | "@types/babel__template": "*",
1296 | "@types/babel__traverse": "*"
1297 | }
1298 | },
1299 | "node_modules/@types/babel__generator": {
1300 | "version": "7.6.8",
1301 | "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz",
1302 | "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
1303 | "dev": true,
1304 | "license": "MIT",
1305 | "dependencies": {
1306 | "@babel/types": "^7.0.0"
1307 | }
1308 | },
1309 | "node_modules/@types/babel__template": {
1310 | "version": "7.4.4",
1311 | "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
1312 | "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
1313 | "dev": true,
1314 | "license": "MIT",
1315 | "dependencies": {
1316 | "@babel/parser": "^7.1.0",
1317 | "@babel/types": "^7.0.0"
1318 | }
1319 | },
1320 | "node_modules/@types/babel__traverse": {
1321 | "version": "7.20.6",
1322 | "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz",
1323 | "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==",
1324 | "dev": true,
1325 | "license": "MIT",
1326 | "dependencies": {
1327 | "@babel/types": "^7.20.7"
1328 | }
1329 | },
1330 | "node_modules/@types/cookie": {
1331 | "version": "0.6.0",
1332 | "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
1333 | "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
1334 | "license": "MIT"
1335 | },
1336 | "node_modules/@types/estree": {
1337 | "version": "1.0.6",
1338 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
1339 | "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
1340 | "dev": true,
1341 | "license": "MIT"
1342 | },
1343 | "node_modules/@types/json-schema": {
1344 | "version": "7.0.15",
1345 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
1346 | "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
1347 | "dev": true,
1348 | "license": "MIT"
1349 | },
1350 | "node_modules/@types/react": {
1351 | "version": "19.0.12",
1352 | "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.12.tgz",
1353 | "integrity": "sha512-V6Ar115dBDrjbtXSrS+/Oruobc+qVbbUxDFC1RSbRqLt5SYvxxyIDrSC85RWml54g+jfNeEMZhEj7wW07ONQhA==",
1354 | "dev": true,
1355 | "license": "MIT",
1356 | "dependencies": {
1357 | "csstype": "^3.0.2"
1358 | }
1359 | },
1360 | "node_modules/@types/react-dom": {
1361 | "version": "19.0.4",
1362 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.4.tgz",
1363 | "integrity": "sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==",
1364 | "dev": true,
1365 | "license": "MIT",
1366 | "peerDependencies": {
1367 | "@types/react": "^19.0.0"
1368 | }
1369 | },
1370 | "node_modules/@vitejs/plugin-react": {
1371 | "version": "4.3.4",
1372 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz",
1373 | "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==",
1374 | "dev": true,
1375 | "license": "MIT",
1376 | "dependencies": {
1377 | "@babel/core": "^7.26.0",
1378 | "@babel/plugin-transform-react-jsx-self": "^7.25.9",
1379 | "@babel/plugin-transform-react-jsx-source": "^7.25.9",
1380 | "@types/babel__core": "^7.20.5",
1381 | "react-refresh": "^0.14.2"
1382 | },
1383 | "engines": {
1384 | "node": "^14.18.0 || >=16.0.0"
1385 | },
1386 | "peerDependencies": {
1387 | "vite": "^4.2.0 || ^5.0.0 || ^6.0.0"
1388 | }
1389 | },
1390 | "node_modules/acorn": {
1391 | "version": "8.14.1",
1392 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
1393 | "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
1394 | "dev": true,
1395 | "license": "MIT",
1396 | "bin": {
1397 | "acorn": "bin/acorn"
1398 | },
1399 | "engines": {
1400 | "node": ">=0.4.0"
1401 | }
1402 | },
1403 | "node_modules/acorn-jsx": {
1404 | "version": "5.3.2",
1405 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
1406 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
1407 | "dev": true,
1408 | "license": "MIT",
1409 | "peerDependencies": {
1410 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
1411 | }
1412 | },
1413 | "node_modules/ajv": {
1414 | "version": "6.12.6",
1415 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
1416 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
1417 | "dev": true,
1418 | "license": "MIT",
1419 | "dependencies": {
1420 | "fast-deep-equal": "^3.1.1",
1421 | "fast-json-stable-stringify": "^2.0.0",
1422 | "json-schema-traverse": "^0.4.1",
1423 | "uri-js": "^4.2.2"
1424 | },
1425 | "funding": {
1426 | "type": "github",
1427 | "url": "https://github.com/sponsors/epoberezkin"
1428 | }
1429 | },
1430 | "node_modules/ansi-styles": {
1431 | "version": "4.3.0",
1432 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
1433 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
1434 | "dev": true,
1435 | "license": "MIT",
1436 | "dependencies": {
1437 | "color-convert": "^2.0.1"
1438 | },
1439 | "engines": {
1440 | "node": ">=8"
1441 | },
1442 | "funding": {
1443 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
1444 | }
1445 | },
1446 | "node_modules/argparse": {
1447 | "version": "2.0.1",
1448 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
1449 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
1450 | "dev": true,
1451 | "license": "Python-2.0"
1452 | },
1453 | "node_modules/asynckit": {
1454 | "version": "0.4.0",
1455 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
1456 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
1457 | "license": "MIT"
1458 | },
1459 | "node_modules/axios": {
1460 | "version": "1.8.4",
1461 | "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz",
1462 | "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==",
1463 | "license": "MIT",
1464 | "dependencies": {
1465 | "follow-redirects": "^1.15.6",
1466 | "form-data": "^4.0.0",
1467 | "proxy-from-env": "^1.1.0"
1468 | }
1469 | },
1470 | "node_modules/balanced-match": {
1471 | "version": "1.0.2",
1472 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
1473 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
1474 | "dev": true,
1475 | "license": "MIT"
1476 | },
1477 | "node_modules/brace-expansion": {
1478 | "version": "1.1.11",
1479 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
1480 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
1481 | "dev": true,
1482 | "license": "MIT",
1483 | "dependencies": {
1484 | "balanced-match": "^1.0.0",
1485 | "concat-map": "0.0.1"
1486 | }
1487 | },
1488 | "node_modules/browserslist": {
1489 | "version": "4.24.4",
1490 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
1491 | "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
1492 | "dev": true,
1493 | "funding": [
1494 | {
1495 | "type": "opencollective",
1496 | "url": "https://opencollective.com/browserslist"
1497 | },
1498 | {
1499 | "type": "tidelift",
1500 | "url": "https://tidelift.com/funding/github/npm/browserslist"
1501 | },
1502 | {
1503 | "type": "github",
1504 | "url": "https://github.com/sponsors/ai"
1505 | }
1506 | ],
1507 | "license": "MIT",
1508 | "dependencies": {
1509 | "caniuse-lite": "^1.0.30001688",
1510 | "electron-to-chromium": "^1.5.73",
1511 | "node-releases": "^2.0.19",
1512 | "update-browserslist-db": "^1.1.1"
1513 | },
1514 | "bin": {
1515 | "browserslist": "cli.js"
1516 | },
1517 | "engines": {
1518 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
1519 | }
1520 | },
1521 | "node_modules/call-bind-apply-helpers": {
1522 | "version": "1.0.2",
1523 | "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
1524 | "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
1525 | "license": "MIT",
1526 | "dependencies": {
1527 | "es-errors": "^1.3.0",
1528 | "function-bind": "^1.1.2"
1529 | },
1530 | "engines": {
1531 | "node": ">= 0.4"
1532 | }
1533 | },
1534 | "node_modules/callsites": {
1535 | "version": "3.1.0",
1536 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
1537 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
1538 | "dev": true,
1539 | "license": "MIT",
1540 | "engines": {
1541 | "node": ">=6"
1542 | }
1543 | },
1544 | "node_modules/caniuse-lite": {
1545 | "version": "1.0.30001706",
1546 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001706.tgz",
1547 | "integrity": "sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==",
1548 | "dev": true,
1549 | "funding": [
1550 | {
1551 | "type": "opencollective",
1552 | "url": "https://opencollective.com/browserslist"
1553 | },
1554 | {
1555 | "type": "tidelift",
1556 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
1557 | },
1558 | {
1559 | "type": "github",
1560 | "url": "https://github.com/sponsors/ai"
1561 | }
1562 | ],
1563 | "license": "CC-BY-4.0"
1564 | },
1565 | "node_modules/chalk": {
1566 | "version": "4.1.2",
1567 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
1568 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
1569 | "dev": true,
1570 | "license": "MIT",
1571 | "dependencies": {
1572 | "ansi-styles": "^4.1.0",
1573 | "supports-color": "^7.1.0"
1574 | },
1575 | "engines": {
1576 | "node": ">=10"
1577 | },
1578 | "funding": {
1579 | "url": "https://github.com/chalk/chalk?sponsor=1"
1580 | }
1581 | },
1582 | "node_modules/color-convert": {
1583 | "version": "2.0.1",
1584 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1585 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1586 | "dev": true,
1587 | "license": "MIT",
1588 | "dependencies": {
1589 | "color-name": "~1.1.4"
1590 | },
1591 | "engines": {
1592 | "node": ">=7.0.0"
1593 | }
1594 | },
1595 | "node_modules/color-name": {
1596 | "version": "1.1.4",
1597 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1598 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
1599 | "dev": true,
1600 | "license": "MIT"
1601 | },
1602 | "node_modules/combined-stream": {
1603 | "version": "1.0.8",
1604 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
1605 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
1606 | "license": "MIT",
1607 | "dependencies": {
1608 | "delayed-stream": "~1.0.0"
1609 | },
1610 | "engines": {
1611 | "node": ">= 0.8"
1612 | }
1613 | },
1614 | "node_modules/concat-map": {
1615 | "version": "0.0.1",
1616 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
1617 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
1618 | "dev": true,
1619 | "license": "MIT"
1620 | },
1621 | "node_modules/convert-source-map": {
1622 | "version": "2.0.0",
1623 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
1624 | "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
1625 | "dev": true,
1626 | "license": "MIT"
1627 | },
1628 | "node_modules/cookie": {
1629 | "version": "1.0.2",
1630 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz",
1631 | "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==",
1632 | "license": "MIT",
1633 | "engines": {
1634 | "node": ">=18"
1635 | }
1636 | },
1637 | "node_modules/cross-spawn": {
1638 | "version": "7.0.6",
1639 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
1640 | "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
1641 | "dev": true,
1642 | "license": "MIT",
1643 | "dependencies": {
1644 | "path-key": "^3.1.0",
1645 | "shebang-command": "^2.0.0",
1646 | "which": "^2.0.1"
1647 | },
1648 | "engines": {
1649 | "node": ">= 8"
1650 | }
1651 | },
1652 | "node_modules/csstype": {
1653 | "version": "3.1.3",
1654 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
1655 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
1656 | "dev": true,
1657 | "license": "MIT"
1658 | },
1659 | "node_modules/debug": {
1660 | "version": "4.4.0",
1661 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
1662 | "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
1663 | "dev": true,
1664 | "license": "MIT",
1665 | "dependencies": {
1666 | "ms": "^2.1.3"
1667 | },
1668 | "engines": {
1669 | "node": ">=6.0"
1670 | },
1671 | "peerDependenciesMeta": {
1672 | "supports-color": {
1673 | "optional": true
1674 | }
1675 | }
1676 | },
1677 | "node_modules/deep-is": {
1678 | "version": "0.1.4",
1679 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
1680 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
1681 | "dev": true,
1682 | "license": "MIT"
1683 | },
1684 | "node_modules/delayed-stream": {
1685 | "version": "1.0.0",
1686 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
1687 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
1688 | "license": "MIT",
1689 | "engines": {
1690 | "node": ">=0.4.0"
1691 | }
1692 | },
1693 | "node_modules/dunder-proto": {
1694 | "version": "1.0.1",
1695 | "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
1696 | "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
1697 | "license": "MIT",
1698 | "dependencies": {
1699 | "call-bind-apply-helpers": "^1.0.1",
1700 | "es-errors": "^1.3.0",
1701 | "gopd": "^1.2.0"
1702 | },
1703 | "engines": {
1704 | "node": ">= 0.4"
1705 | }
1706 | },
1707 | "node_modules/electron-to-chromium": {
1708 | "version": "1.5.123",
1709 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.123.tgz",
1710 | "integrity": "sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==",
1711 | "dev": true,
1712 | "license": "ISC"
1713 | },
1714 | "node_modules/es-define-property": {
1715 | "version": "1.0.1",
1716 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
1717 | "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
1718 | "license": "MIT",
1719 | "engines": {
1720 | "node": ">= 0.4"
1721 | }
1722 | },
1723 | "node_modules/es-errors": {
1724 | "version": "1.3.0",
1725 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
1726 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
1727 | "license": "MIT",
1728 | "engines": {
1729 | "node": ">= 0.4"
1730 | }
1731 | },
1732 | "node_modules/es-object-atoms": {
1733 | "version": "1.1.1",
1734 | "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
1735 | "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
1736 | "license": "MIT",
1737 | "dependencies": {
1738 | "es-errors": "^1.3.0"
1739 | },
1740 | "engines": {
1741 | "node": ">= 0.4"
1742 | }
1743 | },
1744 | "node_modules/es-set-tostringtag": {
1745 | "version": "2.1.0",
1746 | "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
1747 | "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
1748 | "license": "MIT",
1749 | "dependencies": {
1750 | "es-errors": "^1.3.0",
1751 | "get-intrinsic": "^1.2.6",
1752 | "has-tostringtag": "^1.0.2",
1753 | "hasown": "^2.0.2"
1754 | },
1755 | "engines": {
1756 | "node": ">= 0.4"
1757 | }
1758 | },
1759 | "node_modules/esbuild": {
1760 | "version": "0.25.1",
1761 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz",
1762 | "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==",
1763 | "dev": true,
1764 | "hasInstallScript": true,
1765 | "license": "MIT",
1766 | "bin": {
1767 | "esbuild": "bin/esbuild"
1768 | },
1769 | "engines": {
1770 | "node": ">=18"
1771 | },
1772 | "optionalDependencies": {
1773 | "@esbuild/aix-ppc64": "0.25.1",
1774 | "@esbuild/android-arm": "0.25.1",
1775 | "@esbuild/android-arm64": "0.25.1",
1776 | "@esbuild/android-x64": "0.25.1",
1777 | "@esbuild/darwin-arm64": "0.25.1",
1778 | "@esbuild/darwin-x64": "0.25.1",
1779 | "@esbuild/freebsd-arm64": "0.25.1",
1780 | "@esbuild/freebsd-x64": "0.25.1",
1781 | "@esbuild/linux-arm": "0.25.1",
1782 | "@esbuild/linux-arm64": "0.25.1",
1783 | "@esbuild/linux-ia32": "0.25.1",
1784 | "@esbuild/linux-loong64": "0.25.1",
1785 | "@esbuild/linux-mips64el": "0.25.1",
1786 | "@esbuild/linux-ppc64": "0.25.1",
1787 | "@esbuild/linux-riscv64": "0.25.1",
1788 | "@esbuild/linux-s390x": "0.25.1",
1789 | "@esbuild/linux-x64": "0.25.1",
1790 | "@esbuild/netbsd-arm64": "0.25.1",
1791 | "@esbuild/netbsd-x64": "0.25.1",
1792 | "@esbuild/openbsd-arm64": "0.25.1",
1793 | "@esbuild/openbsd-x64": "0.25.1",
1794 | "@esbuild/sunos-x64": "0.25.1",
1795 | "@esbuild/win32-arm64": "0.25.1",
1796 | "@esbuild/win32-ia32": "0.25.1",
1797 | "@esbuild/win32-x64": "0.25.1"
1798 | }
1799 | },
1800 | "node_modules/escalade": {
1801 | "version": "3.2.0",
1802 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
1803 | "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
1804 | "dev": true,
1805 | "license": "MIT",
1806 | "engines": {
1807 | "node": ">=6"
1808 | }
1809 | },
1810 | "node_modules/escape-string-regexp": {
1811 | "version": "4.0.0",
1812 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
1813 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
1814 | "dev": true,
1815 | "license": "MIT",
1816 | "engines": {
1817 | "node": ">=10"
1818 | },
1819 | "funding": {
1820 | "url": "https://github.com/sponsors/sindresorhus"
1821 | }
1822 | },
1823 | "node_modules/eslint": {
1824 | "version": "9.22.0",
1825 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.22.0.tgz",
1826 | "integrity": "sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ==",
1827 | "dev": true,
1828 | "license": "MIT",
1829 | "dependencies": {
1830 | "@eslint-community/eslint-utils": "^4.2.0",
1831 | "@eslint-community/regexpp": "^4.12.1",
1832 | "@eslint/config-array": "^0.19.2",
1833 | "@eslint/config-helpers": "^0.1.0",
1834 | "@eslint/core": "^0.12.0",
1835 | "@eslint/eslintrc": "^3.3.0",
1836 | "@eslint/js": "9.22.0",
1837 | "@eslint/plugin-kit": "^0.2.7",
1838 | "@humanfs/node": "^0.16.6",
1839 | "@humanwhocodes/module-importer": "^1.0.1",
1840 | "@humanwhocodes/retry": "^0.4.2",
1841 | "@types/estree": "^1.0.6",
1842 | "@types/json-schema": "^7.0.15",
1843 | "ajv": "^6.12.4",
1844 | "chalk": "^4.0.0",
1845 | "cross-spawn": "^7.0.6",
1846 | "debug": "^4.3.2",
1847 | "escape-string-regexp": "^4.0.0",
1848 | "eslint-scope": "^8.3.0",
1849 | "eslint-visitor-keys": "^4.2.0",
1850 | "espree": "^10.3.0",
1851 | "esquery": "^1.5.0",
1852 | "esutils": "^2.0.2",
1853 | "fast-deep-equal": "^3.1.3",
1854 | "file-entry-cache": "^8.0.0",
1855 | "find-up": "^5.0.0",
1856 | "glob-parent": "^6.0.2",
1857 | "ignore": "^5.2.0",
1858 | "imurmurhash": "^0.1.4",
1859 | "is-glob": "^4.0.0",
1860 | "json-stable-stringify-without-jsonify": "^1.0.1",
1861 | "lodash.merge": "^4.6.2",
1862 | "minimatch": "^3.1.2",
1863 | "natural-compare": "^1.4.0",
1864 | "optionator": "^0.9.3"
1865 | },
1866 | "bin": {
1867 | "eslint": "bin/eslint.js"
1868 | },
1869 | "engines": {
1870 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1871 | },
1872 | "funding": {
1873 | "url": "https://eslint.org/donate"
1874 | },
1875 | "peerDependencies": {
1876 | "jiti": "*"
1877 | },
1878 | "peerDependenciesMeta": {
1879 | "jiti": {
1880 | "optional": true
1881 | }
1882 | }
1883 | },
1884 | "node_modules/eslint-plugin-react-hooks": {
1885 | "version": "5.2.0",
1886 | "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz",
1887 | "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==",
1888 | "dev": true,
1889 | "license": "MIT",
1890 | "engines": {
1891 | "node": ">=10"
1892 | },
1893 | "peerDependencies": {
1894 | "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
1895 | }
1896 | },
1897 | "node_modules/eslint-plugin-react-refresh": {
1898 | "version": "0.4.19",
1899 | "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.19.tgz",
1900 | "integrity": "sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==",
1901 | "dev": true,
1902 | "license": "MIT",
1903 | "peerDependencies": {
1904 | "eslint": ">=8.40"
1905 | }
1906 | },
1907 | "node_modules/eslint-scope": {
1908 | "version": "8.3.0",
1909 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz",
1910 | "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
1911 | "dev": true,
1912 | "license": "BSD-2-Clause",
1913 | "dependencies": {
1914 | "esrecurse": "^4.3.0",
1915 | "estraverse": "^5.2.0"
1916 | },
1917 | "engines": {
1918 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1919 | },
1920 | "funding": {
1921 | "url": "https://opencollective.com/eslint"
1922 | }
1923 | },
1924 | "node_modules/eslint-visitor-keys": {
1925 | "version": "4.2.0",
1926 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
1927 | "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
1928 | "dev": true,
1929 | "license": "Apache-2.0",
1930 | "engines": {
1931 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1932 | },
1933 | "funding": {
1934 | "url": "https://opencollective.com/eslint"
1935 | }
1936 | },
1937 | "node_modules/espree": {
1938 | "version": "10.3.0",
1939 | "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
1940 | "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
1941 | "dev": true,
1942 | "license": "BSD-2-Clause",
1943 | "dependencies": {
1944 | "acorn": "^8.14.0",
1945 | "acorn-jsx": "^5.3.2",
1946 | "eslint-visitor-keys": "^4.2.0"
1947 | },
1948 | "engines": {
1949 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1950 | },
1951 | "funding": {
1952 | "url": "https://opencollective.com/eslint"
1953 | }
1954 | },
1955 | "node_modules/esquery": {
1956 | "version": "1.6.0",
1957 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
1958 | "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
1959 | "dev": true,
1960 | "license": "BSD-3-Clause",
1961 | "dependencies": {
1962 | "estraverse": "^5.1.0"
1963 | },
1964 | "engines": {
1965 | "node": ">=0.10"
1966 | }
1967 | },
1968 | "node_modules/esrecurse": {
1969 | "version": "4.3.0",
1970 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
1971 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
1972 | "dev": true,
1973 | "license": "BSD-2-Clause",
1974 | "dependencies": {
1975 | "estraverse": "^5.2.0"
1976 | },
1977 | "engines": {
1978 | "node": ">=4.0"
1979 | }
1980 | },
1981 | "node_modules/estraverse": {
1982 | "version": "5.3.0",
1983 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
1984 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
1985 | "dev": true,
1986 | "license": "BSD-2-Clause",
1987 | "engines": {
1988 | "node": ">=4.0"
1989 | }
1990 | },
1991 | "node_modules/esutils": {
1992 | "version": "2.0.3",
1993 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
1994 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
1995 | "dev": true,
1996 | "license": "BSD-2-Clause",
1997 | "engines": {
1998 | "node": ">=0.10.0"
1999 | }
2000 | },
2001 | "node_modules/fast-deep-equal": {
2002 | "version": "3.1.3",
2003 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
2004 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
2005 | "dev": true,
2006 | "license": "MIT"
2007 | },
2008 | "node_modules/fast-json-stable-stringify": {
2009 | "version": "2.1.0",
2010 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
2011 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
2012 | "dev": true,
2013 | "license": "MIT"
2014 | },
2015 | "node_modules/fast-levenshtein": {
2016 | "version": "2.0.6",
2017 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
2018 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
2019 | "dev": true,
2020 | "license": "MIT"
2021 | },
2022 | "node_modules/file-entry-cache": {
2023 | "version": "8.0.0",
2024 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
2025 | "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
2026 | "dev": true,
2027 | "license": "MIT",
2028 | "dependencies": {
2029 | "flat-cache": "^4.0.0"
2030 | },
2031 | "engines": {
2032 | "node": ">=16.0.0"
2033 | }
2034 | },
2035 | "node_modules/find-up": {
2036 | "version": "5.0.0",
2037 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
2038 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
2039 | "dev": true,
2040 | "license": "MIT",
2041 | "dependencies": {
2042 | "locate-path": "^6.0.0",
2043 | "path-exists": "^4.0.0"
2044 | },
2045 | "engines": {
2046 | "node": ">=10"
2047 | },
2048 | "funding": {
2049 | "url": "https://github.com/sponsors/sindresorhus"
2050 | }
2051 | },
2052 | "node_modules/flat-cache": {
2053 | "version": "4.0.1",
2054 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
2055 | "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
2056 | "dev": true,
2057 | "license": "MIT",
2058 | "dependencies": {
2059 | "flatted": "^3.2.9",
2060 | "keyv": "^4.5.4"
2061 | },
2062 | "engines": {
2063 | "node": ">=16"
2064 | }
2065 | },
2066 | "node_modules/flatted": {
2067 | "version": "3.3.3",
2068 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
2069 | "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
2070 | "dev": true,
2071 | "license": "ISC"
2072 | },
2073 | "node_modules/follow-redirects": {
2074 | "version": "1.15.9",
2075 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
2076 | "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
2077 | "funding": [
2078 | {
2079 | "type": "individual",
2080 | "url": "https://github.com/sponsors/RubenVerborgh"
2081 | }
2082 | ],
2083 | "license": "MIT",
2084 | "engines": {
2085 | "node": ">=4.0"
2086 | },
2087 | "peerDependenciesMeta": {
2088 | "debug": {
2089 | "optional": true
2090 | }
2091 | }
2092 | },
2093 | "node_modules/form-data": {
2094 | "version": "4.0.2",
2095 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz",
2096 | "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
2097 | "license": "MIT",
2098 | "dependencies": {
2099 | "asynckit": "^0.4.0",
2100 | "combined-stream": "^1.0.8",
2101 | "es-set-tostringtag": "^2.1.0",
2102 | "mime-types": "^2.1.12"
2103 | },
2104 | "engines": {
2105 | "node": ">= 6"
2106 | }
2107 | },
2108 | "node_modules/fsevents": {
2109 | "version": "2.3.3",
2110 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
2111 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
2112 | "dev": true,
2113 | "hasInstallScript": true,
2114 | "license": "MIT",
2115 | "optional": true,
2116 | "os": [
2117 | "darwin"
2118 | ],
2119 | "engines": {
2120 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
2121 | }
2122 | },
2123 | "node_modules/function-bind": {
2124 | "version": "1.1.2",
2125 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
2126 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
2127 | "license": "MIT",
2128 | "funding": {
2129 | "url": "https://github.com/sponsors/ljharb"
2130 | }
2131 | },
2132 | "node_modules/gensync": {
2133 | "version": "1.0.0-beta.2",
2134 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
2135 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
2136 | "dev": true,
2137 | "license": "MIT",
2138 | "engines": {
2139 | "node": ">=6.9.0"
2140 | }
2141 | },
2142 | "node_modules/get-intrinsic": {
2143 | "version": "1.3.0",
2144 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
2145 | "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
2146 | "license": "MIT",
2147 | "dependencies": {
2148 | "call-bind-apply-helpers": "^1.0.2",
2149 | "es-define-property": "^1.0.1",
2150 | "es-errors": "^1.3.0",
2151 | "es-object-atoms": "^1.1.1",
2152 | "function-bind": "^1.1.2",
2153 | "get-proto": "^1.0.1",
2154 | "gopd": "^1.2.0",
2155 | "has-symbols": "^1.1.0",
2156 | "hasown": "^2.0.2",
2157 | "math-intrinsics": "^1.1.0"
2158 | },
2159 | "engines": {
2160 | "node": ">= 0.4"
2161 | },
2162 | "funding": {
2163 | "url": "https://github.com/sponsors/ljharb"
2164 | }
2165 | },
2166 | "node_modules/get-proto": {
2167 | "version": "1.0.1",
2168 | "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
2169 | "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
2170 | "license": "MIT",
2171 | "dependencies": {
2172 | "dunder-proto": "^1.0.1",
2173 | "es-object-atoms": "^1.0.0"
2174 | },
2175 | "engines": {
2176 | "node": ">= 0.4"
2177 | }
2178 | },
2179 | "node_modules/glob-parent": {
2180 | "version": "6.0.2",
2181 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
2182 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
2183 | "dev": true,
2184 | "license": "ISC",
2185 | "dependencies": {
2186 | "is-glob": "^4.0.3"
2187 | },
2188 | "engines": {
2189 | "node": ">=10.13.0"
2190 | }
2191 | },
2192 | "node_modules/globals": {
2193 | "version": "15.15.0",
2194 | "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz",
2195 | "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==",
2196 | "dev": true,
2197 | "license": "MIT",
2198 | "engines": {
2199 | "node": ">=18"
2200 | },
2201 | "funding": {
2202 | "url": "https://github.com/sponsors/sindresorhus"
2203 | }
2204 | },
2205 | "node_modules/gopd": {
2206 | "version": "1.2.0",
2207 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
2208 | "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
2209 | "license": "MIT",
2210 | "engines": {
2211 | "node": ">= 0.4"
2212 | },
2213 | "funding": {
2214 | "url": "https://github.com/sponsors/ljharb"
2215 | }
2216 | },
2217 | "node_modules/has-flag": {
2218 | "version": "4.0.0",
2219 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
2220 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
2221 | "dev": true,
2222 | "license": "MIT",
2223 | "engines": {
2224 | "node": ">=8"
2225 | }
2226 | },
2227 | "node_modules/has-symbols": {
2228 | "version": "1.1.0",
2229 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
2230 | "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
2231 | "license": "MIT",
2232 | "engines": {
2233 | "node": ">= 0.4"
2234 | },
2235 | "funding": {
2236 | "url": "https://github.com/sponsors/ljharb"
2237 | }
2238 | },
2239 | "node_modules/has-tostringtag": {
2240 | "version": "1.0.2",
2241 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
2242 | "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
2243 | "license": "MIT",
2244 | "dependencies": {
2245 | "has-symbols": "^1.0.3"
2246 | },
2247 | "engines": {
2248 | "node": ">= 0.4"
2249 | },
2250 | "funding": {
2251 | "url": "https://github.com/sponsors/ljharb"
2252 | }
2253 | },
2254 | "node_modules/hasown": {
2255 | "version": "2.0.2",
2256 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
2257 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
2258 | "license": "MIT",
2259 | "dependencies": {
2260 | "function-bind": "^1.1.2"
2261 | },
2262 | "engines": {
2263 | "node": ">= 0.4"
2264 | }
2265 | },
2266 | "node_modules/ignore": {
2267 | "version": "5.3.2",
2268 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
2269 | "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
2270 | "dev": true,
2271 | "license": "MIT",
2272 | "engines": {
2273 | "node": ">= 4"
2274 | }
2275 | },
2276 | "node_modules/import-fresh": {
2277 | "version": "3.3.1",
2278 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
2279 | "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
2280 | "dev": true,
2281 | "license": "MIT",
2282 | "dependencies": {
2283 | "parent-module": "^1.0.0",
2284 | "resolve-from": "^4.0.0"
2285 | },
2286 | "engines": {
2287 | "node": ">=6"
2288 | },
2289 | "funding": {
2290 | "url": "https://github.com/sponsors/sindresorhus"
2291 | }
2292 | },
2293 | "node_modules/imurmurhash": {
2294 | "version": "0.1.4",
2295 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
2296 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
2297 | "dev": true,
2298 | "license": "MIT",
2299 | "engines": {
2300 | "node": ">=0.8.19"
2301 | }
2302 | },
2303 | "node_modules/is-extglob": {
2304 | "version": "2.1.1",
2305 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
2306 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
2307 | "dev": true,
2308 | "license": "MIT",
2309 | "engines": {
2310 | "node": ">=0.10.0"
2311 | }
2312 | },
2313 | "node_modules/is-glob": {
2314 | "version": "4.0.3",
2315 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
2316 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
2317 | "dev": true,
2318 | "license": "MIT",
2319 | "dependencies": {
2320 | "is-extglob": "^2.1.1"
2321 | },
2322 | "engines": {
2323 | "node": ">=0.10.0"
2324 | }
2325 | },
2326 | "node_modules/isexe": {
2327 | "version": "2.0.0",
2328 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
2329 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
2330 | "dev": true,
2331 | "license": "ISC"
2332 | },
2333 | "node_modules/js-tokens": {
2334 | "version": "4.0.0",
2335 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
2336 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
2337 | "dev": true,
2338 | "license": "MIT"
2339 | },
2340 | "node_modules/js-yaml": {
2341 | "version": "4.1.0",
2342 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
2343 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
2344 | "dev": true,
2345 | "license": "MIT",
2346 | "dependencies": {
2347 | "argparse": "^2.0.1"
2348 | },
2349 | "bin": {
2350 | "js-yaml": "bin/js-yaml.js"
2351 | }
2352 | },
2353 | "node_modules/jsesc": {
2354 | "version": "3.1.0",
2355 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
2356 | "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
2357 | "dev": true,
2358 | "license": "MIT",
2359 | "bin": {
2360 | "jsesc": "bin/jsesc"
2361 | },
2362 | "engines": {
2363 | "node": ">=6"
2364 | }
2365 | },
2366 | "node_modules/json-buffer": {
2367 | "version": "3.0.1",
2368 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
2369 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
2370 | "dev": true,
2371 | "license": "MIT"
2372 | },
2373 | "node_modules/json-schema-traverse": {
2374 | "version": "0.4.1",
2375 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
2376 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
2377 | "dev": true,
2378 | "license": "MIT"
2379 | },
2380 | "node_modules/json-stable-stringify-without-jsonify": {
2381 | "version": "1.0.1",
2382 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
2383 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
2384 | "dev": true,
2385 | "license": "MIT"
2386 | },
2387 | "node_modules/json5": {
2388 | "version": "2.2.3",
2389 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
2390 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
2391 | "dev": true,
2392 | "license": "MIT",
2393 | "bin": {
2394 | "json5": "lib/cli.js"
2395 | },
2396 | "engines": {
2397 | "node": ">=6"
2398 | }
2399 | },
2400 | "node_modules/keyv": {
2401 | "version": "4.5.4",
2402 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
2403 | "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
2404 | "dev": true,
2405 | "license": "MIT",
2406 | "dependencies": {
2407 | "json-buffer": "3.0.1"
2408 | }
2409 | },
2410 | "node_modules/levn": {
2411 | "version": "0.4.1",
2412 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
2413 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
2414 | "dev": true,
2415 | "license": "MIT",
2416 | "dependencies": {
2417 | "prelude-ls": "^1.2.1",
2418 | "type-check": "~0.4.0"
2419 | },
2420 | "engines": {
2421 | "node": ">= 0.8.0"
2422 | }
2423 | },
2424 | "node_modules/locate-path": {
2425 | "version": "6.0.0",
2426 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
2427 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
2428 | "dev": true,
2429 | "license": "MIT",
2430 | "dependencies": {
2431 | "p-locate": "^5.0.0"
2432 | },
2433 | "engines": {
2434 | "node": ">=10"
2435 | },
2436 | "funding": {
2437 | "url": "https://github.com/sponsors/sindresorhus"
2438 | }
2439 | },
2440 | "node_modules/lodash.merge": {
2441 | "version": "4.6.2",
2442 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
2443 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
2444 | "dev": true,
2445 | "license": "MIT"
2446 | },
2447 | "node_modules/lru-cache": {
2448 | "version": "5.1.1",
2449 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
2450 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
2451 | "dev": true,
2452 | "license": "ISC",
2453 | "dependencies": {
2454 | "yallist": "^3.0.2"
2455 | }
2456 | },
2457 | "node_modules/math-intrinsics": {
2458 | "version": "1.1.0",
2459 | "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
2460 | "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
2461 | "license": "MIT",
2462 | "engines": {
2463 | "node": ">= 0.4"
2464 | }
2465 | },
2466 | "node_modules/mime-db": {
2467 | "version": "1.52.0",
2468 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
2469 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
2470 | "license": "MIT",
2471 | "engines": {
2472 | "node": ">= 0.6"
2473 | }
2474 | },
2475 | "node_modules/mime-types": {
2476 | "version": "2.1.35",
2477 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
2478 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
2479 | "license": "MIT",
2480 | "dependencies": {
2481 | "mime-db": "1.52.0"
2482 | },
2483 | "engines": {
2484 | "node": ">= 0.6"
2485 | }
2486 | },
2487 | "node_modules/minimatch": {
2488 | "version": "3.1.2",
2489 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
2490 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
2491 | "dev": true,
2492 | "license": "ISC",
2493 | "dependencies": {
2494 | "brace-expansion": "^1.1.7"
2495 | },
2496 | "engines": {
2497 | "node": "*"
2498 | }
2499 | },
2500 | "node_modules/ms": {
2501 | "version": "2.1.3",
2502 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
2503 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
2504 | "dev": true,
2505 | "license": "MIT"
2506 | },
2507 | "node_modules/nanoid": {
2508 | "version": "3.3.11",
2509 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
2510 | "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
2511 | "dev": true,
2512 | "funding": [
2513 | {
2514 | "type": "github",
2515 | "url": "https://github.com/sponsors/ai"
2516 | }
2517 | ],
2518 | "license": "MIT",
2519 | "bin": {
2520 | "nanoid": "bin/nanoid.cjs"
2521 | },
2522 | "engines": {
2523 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
2524 | }
2525 | },
2526 | "node_modules/natural-compare": {
2527 | "version": "1.4.0",
2528 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
2529 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
2530 | "dev": true,
2531 | "license": "MIT"
2532 | },
2533 | "node_modules/node-releases": {
2534 | "version": "2.0.19",
2535 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
2536 | "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
2537 | "dev": true,
2538 | "license": "MIT"
2539 | },
2540 | "node_modules/optionator": {
2541 | "version": "0.9.4",
2542 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
2543 | "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
2544 | "dev": true,
2545 | "license": "MIT",
2546 | "dependencies": {
2547 | "deep-is": "^0.1.3",
2548 | "fast-levenshtein": "^2.0.6",
2549 | "levn": "^0.4.1",
2550 | "prelude-ls": "^1.2.1",
2551 | "type-check": "^0.4.0",
2552 | "word-wrap": "^1.2.5"
2553 | },
2554 | "engines": {
2555 | "node": ">= 0.8.0"
2556 | }
2557 | },
2558 | "node_modules/p-limit": {
2559 | "version": "3.1.0",
2560 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
2561 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
2562 | "dev": true,
2563 | "license": "MIT",
2564 | "dependencies": {
2565 | "yocto-queue": "^0.1.0"
2566 | },
2567 | "engines": {
2568 | "node": ">=10"
2569 | },
2570 | "funding": {
2571 | "url": "https://github.com/sponsors/sindresorhus"
2572 | }
2573 | },
2574 | "node_modules/p-locate": {
2575 | "version": "5.0.0",
2576 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
2577 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
2578 | "dev": true,
2579 | "license": "MIT",
2580 | "dependencies": {
2581 | "p-limit": "^3.0.2"
2582 | },
2583 | "engines": {
2584 | "node": ">=10"
2585 | },
2586 | "funding": {
2587 | "url": "https://github.com/sponsors/sindresorhus"
2588 | }
2589 | },
2590 | "node_modules/parent-module": {
2591 | "version": "1.0.1",
2592 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
2593 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
2594 | "dev": true,
2595 | "license": "MIT",
2596 | "dependencies": {
2597 | "callsites": "^3.0.0"
2598 | },
2599 | "engines": {
2600 | "node": ">=6"
2601 | }
2602 | },
2603 | "node_modules/path-exists": {
2604 | "version": "4.0.0",
2605 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
2606 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
2607 | "dev": true,
2608 | "license": "MIT",
2609 | "engines": {
2610 | "node": ">=8"
2611 | }
2612 | },
2613 | "node_modules/path-key": {
2614 | "version": "3.1.1",
2615 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
2616 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
2617 | "dev": true,
2618 | "license": "MIT",
2619 | "engines": {
2620 | "node": ">=8"
2621 | }
2622 | },
2623 | "node_modules/picocolors": {
2624 | "version": "1.1.1",
2625 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
2626 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
2627 | "dev": true,
2628 | "license": "ISC"
2629 | },
2630 | "node_modules/postcss": {
2631 | "version": "8.5.3",
2632 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
2633 | "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
2634 | "dev": true,
2635 | "funding": [
2636 | {
2637 | "type": "opencollective",
2638 | "url": "https://opencollective.com/postcss/"
2639 | },
2640 | {
2641 | "type": "tidelift",
2642 | "url": "https://tidelift.com/funding/github/npm/postcss"
2643 | },
2644 | {
2645 | "type": "github",
2646 | "url": "https://github.com/sponsors/ai"
2647 | }
2648 | ],
2649 | "license": "MIT",
2650 | "dependencies": {
2651 | "nanoid": "^3.3.8",
2652 | "picocolors": "^1.1.1",
2653 | "source-map-js": "^1.2.1"
2654 | },
2655 | "engines": {
2656 | "node": "^10 || ^12 || >=14"
2657 | }
2658 | },
2659 | "node_modules/prelude-ls": {
2660 | "version": "1.2.1",
2661 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
2662 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
2663 | "dev": true,
2664 | "license": "MIT",
2665 | "engines": {
2666 | "node": ">= 0.8.0"
2667 | }
2668 | },
2669 | "node_modules/proxy-from-env": {
2670 | "version": "1.1.0",
2671 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
2672 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
2673 | "license": "MIT"
2674 | },
2675 | "node_modules/punycode": {
2676 | "version": "2.3.1",
2677 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
2678 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
2679 | "dev": true,
2680 | "license": "MIT",
2681 | "engines": {
2682 | "node": ">=6"
2683 | }
2684 | },
2685 | "node_modules/react": {
2686 | "version": "19.0.0",
2687 | "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz",
2688 | "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==",
2689 | "license": "MIT",
2690 | "engines": {
2691 | "node": ">=0.10.0"
2692 | }
2693 | },
2694 | "node_modules/react-dom": {
2695 | "version": "19.0.0",
2696 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz",
2697 | "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==",
2698 | "license": "MIT",
2699 | "dependencies": {
2700 | "scheduler": "^0.25.0"
2701 | },
2702 | "peerDependencies": {
2703 | "react": "^19.0.0"
2704 | }
2705 | },
2706 | "node_modules/react-refresh": {
2707 | "version": "0.14.2",
2708 | "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz",
2709 | "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==",
2710 | "dev": true,
2711 | "license": "MIT",
2712 | "engines": {
2713 | "node": ">=0.10.0"
2714 | }
2715 | },
2716 | "node_modules/react-router": {
2717 | "version": "7.4.0",
2718 | "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.4.0.tgz",
2719 | "integrity": "sha512-Y2g5ObjkvX3VFeVt+0CIPuYd9PpgqCslG7ASSIdN73LwA1nNWzcMLaoMRJfP3prZFI92svxFwbn7XkLJ+UPQ6A==",
2720 | "license": "MIT",
2721 | "dependencies": {
2722 | "@types/cookie": "^0.6.0",
2723 | "cookie": "^1.0.1",
2724 | "set-cookie-parser": "^2.6.0",
2725 | "turbo-stream": "2.4.0"
2726 | },
2727 | "engines": {
2728 | "node": ">=20.0.0"
2729 | },
2730 | "peerDependencies": {
2731 | "react": ">=18",
2732 | "react-dom": ">=18"
2733 | },
2734 | "peerDependenciesMeta": {
2735 | "react-dom": {
2736 | "optional": true
2737 | }
2738 | }
2739 | },
2740 | "node_modules/react-router-dom": {
2741 | "version": "7.4.0",
2742 | "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.4.0.tgz",
2743 | "integrity": "sha512-VlksBPf3n2bijPvnA7nkTsXxMAKOj+bWp4R9c3i+bnwlSOFAGOkJkKhzy/OsRkWaBMICqcAl1JDzh9ZSOze9CA==",
2744 | "license": "MIT",
2745 | "dependencies": {
2746 | "react-router": "7.4.0"
2747 | },
2748 | "engines": {
2749 | "node": ">=20.0.0"
2750 | },
2751 | "peerDependencies": {
2752 | "react": ">=18",
2753 | "react-dom": ">=18"
2754 | }
2755 | },
2756 | "node_modules/resolve-from": {
2757 | "version": "4.0.0",
2758 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
2759 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
2760 | "dev": true,
2761 | "license": "MIT",
2762 | "engines": {
2763 | "node": ">=4"
2764 | }
2765 | },
2766 | "node_modules/rollup": {
2767 | "version": "4.36.0",
2768 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.36.0.tgz",
2769 | "integrity": "sha512-zwATAXNQxUcd40zgtQG0ZafcRK4g004WtEl7kbuhTWPvf07PsfohXl39jVUvPF7jvNAIkKPQ2XrsDlWuxBd++Q==",
2770 | "dev": true,
2771 | "license": "MIT",
2772 | "dependencies": {
2773 | "@types/estree": "1.0.6"
2774 | },
2775 | "bin": {
2776 | "rollup": "dist/bin/rollup"
2777 | },
2778 | "engines": {
2779 | "node": ">=18.0.0",
2780 | "npm": ">=8.0.0"
2781 | },
2782 | "optionalDependencies": {
2783 | "@rollup/rollup-android-arm-eabi": "4.36.0",
2784 | "@rollup/rollup-android-arm64": "4.36.0",
2785 | "@rollup/rollup-darwin-arm64": "4.36.0",
2786 | "@rollup/rollup-darwin-x64": "4.36.0",
2787 | "@rollup/rollup-freebsd-arm64": "4.36.0",
2788 | "@rollup/rollup-freebsd-x64": "4.36.0",
2789 | "@rollup/rollup-linux-arm-gnueabihf": "4.36.0",
2790 | "@rollup/rollup-linux-arm-musleabihf": "4.36.0",
2791 | "@rollup/rollup-linux-arm64-gnu": "4.36.0",
2792 | "@rollup/rollup-linux-arm64-musl": "4.36.0",
2793 | "@rollup/rollup-linux-loongarch64-gnu": "4.36.0",
2794 | "@rollup/rollup-linux-powerpc64le-gnu": "4.36.0",
2795 | "@rollup/rollup-linux-riscv64-gnu": "4.36.0",
2796 | "@rollup/rollup-linux-s390x-gnu": "4.36.0",
2797 | "@rollup/rollup-linux-x64-gnu": "4.36.0",
2798 | "@rollup/rollup-linux-x64-musl": "4.36.0",
2799 | "@rollup/rollup-win32-arm64-msvc": "4.36.0",
2800 | "@rollup/rollup-win32-ia32-msvc": "4.36.0",
2801 | "@rollup/rollup-win32-x64-msvc": "4.36.0",
2802 | "fsevents": "~2.3.2"
2803 | }
2804 | },
2805 | "node_modules/scheduler": {
2806 | "version": "0.25.0",
2807 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz",
2808 | "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==",
2809 | "license": "MIT"
2810 | },
2811 | "node_modules/semver": {
2812 | "version": "6.3.1",
2813 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
2814 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
2815 | "dev": true,
2816 | "license": "ISC",
2817 | "bin": {
2818 | "semver": "bin/semver.js"
2819 | }
2820 | },
2821 | "node_modules/set-cookie-parser": {
2822 | "version": "2.7.1",
2823 | "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz",
2824 | "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==",
2825 | "license": "MIT"
2826 | },
2827 | "node_modules/shebang-command": {
2828 | "version": "2.0.0",
2829 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2830 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2831 | "dev": true,
2832 | "license": "MIT",
2833 | "dependencies": {
2834 | "shebang-regex": "^3.0.0"
2835 | },
2836 | "engines": {
2837 | "node": ">=8"
2838 | }
2839 | },
2840 | "node_modules/shebang-regex": {
2841 | "version": "3.0.0",
2842 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2843 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
2844 | "dev": true,
2845 | "license": "MIT",
2846 | "engines": {
2847 | "node": ">=8"
2848 | }
2849 | },
2850 | "node_modules/source-map-js": {
2851 | "version": "1.2.1",
2852 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
2853 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
2854 | "dev": true,
2855 | "license": "BSD-3-Clause",
2856 | "engines": {
2857 | "node": ">=0.10.0"
2858 | }
2859 | },
2860 | "node_modules/strip-json-comments": {
2861 | "version": "3.1.1",
2862 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
2863 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
2864 | "dev": true,
2865 | "license": "MIT",
2866 | "engines": {
2867 | "node": ">=8"
2868 | },
2869 | "funding": {
2870 | "url": "https://github.com/sponsors/sindresorhus"
2871 | }
2872 | },
2873 | "node_modules/supports-color": {
2874 | "version": "7.2.0",
2875 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
2876 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
2877 | "dev": true,
2878 | "license": "MIT",
2879 | "dependencies": {
2880 | "has-flag": "^4.0.0"
2881 | },
2882 | "engines": {
2883 | "node": ">=8"
2884 | }
2885 | },
2886 | "node_modules/turbo-stream": {
2887 | "version": "2.4.0",
2888 | "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz",
2889 | "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==",
2890 | "license": "ISC"
2891 | },
2892 | "node_modules/type-check": {
2893 | "version": "0.4.0",
2894 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
2895 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
2896 | "dev": true,
2897 | "license": "MIT",
2898 | "dependencies": {
2899 | "prelude-ls": "^1.2.1"
2900 | },
2901 | "engines": {
2902 | "node": ">= 0.8.0"
2903 | }
2904 | },
2905 | "node_modules/update-browserslist-db": {
2906 | "version": "1.1.3",
2907 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
2908 | "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
2909 | "dev": true,
2910 | "funding": [
2911 | {
2912 | "type": "opencollective",
2913 | "url": "https://opencollective.com/browserslist"
2914 | },
2915 | {
2916 | "type": "tidelift",
2917 | "url": "https://tidelift.com/funding/github/npm/browserslist"
2918 | },
2919 | {
2920 | "type": "github",
2921 | "url": "https://github.com/sponsors/ai"
2922 | }
2923 | ],
2924 | "license": "MIT",
2925 | "dependencies": {
2926 | "escalade": "^3.2.0",
2927 | "picocolors": "^1.1.1"
2928 | },
2929 | "bin": {
2930 | "update-browserslist-db": "cli.js"
2931 | },
2932 | "peerDependencies": {
2933 | "browserslist": ">= 4.21.0"
2934 | }
2935 | },
2936 | "node_modules/uri-js": {
2937 | "version": "4.4.1",
2938 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
2939 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
2940 | "dev": true,
2941 | "license": "BSD-2-Clause",
2942 | "dependencies": {
2943 | "punycode": "^2.1.0"
2944 | }
2945 | },
2946 | "node_modules/vite": {
2947 | "version": "6.2.2",
2948 | "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.2.tgz",
2949 | "integrity": "sha512-yW7PeMM+LkDzc7CgJuRLMW2Jz0FxMOsVJ8Lv3gpgW9WLcb9cTW+121UEr1hvmfR7w3SegR5ItvYyzVz1vxNJgQ==",
2950 | "dev": true,
2951 | "license": "MIT",
2952 | "dependencies": {
2953 | "esbuild": "^0.25.0",
2954 | "postcss": "^8.5.3",
2955 | "rollup": "^4.30.1"
2956 | },
2957 | "bin": {
2958 | "vite": "bin/vite.js"
2959 | },
2960 | "engines": {
2961 | "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
2962 | },
2963 | "funding": {
2964 | "url": "https://github.com/vitejs/vite?sponsor=1"
2965 | },
2966 | "optionalDependencies": {
2967 | "fsevents": "~2.3.3"
2968 | },
2969 | "peerDependencies": {
2970 | "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
2971 | "jiti": ">=1.21.0",
2972 | "less": "*",
2973 | "lightningcss": "^1.21.0",
2974 | "sass": "*",
2975 | "sass-embedded": "*",
2976 | "stylus": "*",
2977 | "sugarss": "*",
2978 | "terser": "^5.16.0",
2979 | "tsx": "^4.8.1",
2980 | "yaml": "^2.4.2"
2981 | },
2982 | "peerDependenciesMeta": {
2983 | "@types/node": {
2984 | "optional": true
2985 | },
2986 | "jiti": {
2987 | "optional": true
2988 | },
2989 | "less": {
2990 | "optional": true
2991 | },
2992 | "lightningcss": {
2993 | "optional": true
2994 | },
2995 | "sass": {
2996 | "optional": true
2997 | },
2998 | "sass-embedded": {
2999 | "optional": true
3000 | },
3001 | "stylus": {
3002 | "optional": true
3003 | },
3004 | "sugarss": {
3005 | "optional": true
3006 | },
3007 | "terser": {
3008 | "optional": true
3009 | },
3010 | "tsx": {
3011 | "optional": true
3012 | },
3013 | "yaml": {
3014 | "optional": true
3015 | }
3016 | }
3017 | },
3018 | "node_modules/which": {
3019 | "version": "2.0.2",
3020 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
3021 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
3022 | "dev": true,
3023 | "license": "ISC",
3024 | "dependencies": {
3025 | "isexe": "^2.0.0"
3026 | },
3027 | "bin": {
3028 | "node-which": "bin/node-which"
3029 | },
3030 | "engines": {
3031 | "node": ">= 8"
3032 | }
3033 | },
3034 | "node_modules/word-wrap": {
3035 | "version": "1.2.5",
3036 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
3037 | "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
3038 | "dev": true,
3039 | "license": "MIT",
3040 | "engines": {
3041 | "node": ">=0.10.0"
3042 | }
3043 | },
3044 | "node_modules/yallist": {
3045 | "version": "3.1.1",
3046 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
3047 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
3048 | "dev": true,
3049 | "license": "ISC"
3050 | },
3051 | "node_modules/yocto-queue": {
3052 | "version": "0.1.0",
3053 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
3054 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
3055 | "dev": true,
3056 | "license": "MIT",
3057 | "engines": {
3058 | "node": ">=10"
3059 | },
3060 | "funding": {
3061 | "url": "https://github.com/sponsors/sindresorhus"
3062 | }
3063 | }
3064 | }
3065 | }
3066 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "frontend",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "vite build",
9 | "lint": "eslint .",
10 | "preview": "vite preview"
11 | },
12 | "dependencies": {
13 | "axios": "^1.8.4",
14 | "react": "^19.0.0",
15 | "react-dom": "^19.0.0",
16 | "react-router-dom": "^7.4.0"
17 | },
18 | "devDependencies": {
19 | "@eslint/js": "^9.21.0",
20 | "@types/react": "^19.0.10",
21 | "@types/react-dom": "^19.0.4",
22 | "@vitejs/plugin-react": "^4.3.4",
23 | "eslint": "^9.21.0",
24 | "eslint-plugin-react-hooks": "^5.1.0",
25 | "eslint-plugin-react-refresh": "^0.4.19",
26 | "globals": "^15.15.0",
27 | "vite": "^6.2.0"
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/public/vite.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/App.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Crovvin/frontend/4e83043cd3ea8a46d06284c3e5f16fa070150a1a/src/App.css
--------------------------------------------------------------------------------
/src/App.jsx:
--------------------------------------------------------------------------------
1 | import { useState } from 'react'
2 | import './App.css'
3 | import { BrowserRouter as Router, Route, Routes } from "react-router-dom"
4 | import { Link } from "react-router-dom"
5 | import Pokemon from './pages/Pokemon'
6 | import Details from './pages/Details'
7 | import Home from './pages/Home'
8 | import Nav from './components/Nav'
9 | import Favorites from './pages/Favorites'
10 | import Login from './pages/Login'
11 | import Register from './pages/Register'
12 |
13 | function App() {
14 |
15 | return (
16 | <>
17 |
18 |
19 |
20 | }/>
21 | }/>
22 | }/>
23 | }/>
24 | } />
25 | }/>
26 |
27 |
28 | >
29 | )
30 | }
31 |
32 | export default App
33 |
--------------------------------------------------------------------------------
/src/assets/react.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/components/Nav.jsx:
--------------------------------------------------------------------------------
1 | import { Link } from "react-router-dom";
2 | import { useNavigate } from "react-router-dom"
3 | import "../styles/nav.css"
4 | // import { useState } from "react"
5 |
6 | // //Unimplemented code to only show when logged in
7 | // const [isLoggedIn, setIsLoggedIn] = useState(false);
8 | // useEffect(() => {
9 | // // Check if the user is logged in by checking if a token is available in localStorage
10 | // const token = localStorage.getItem("token");
11 | // if (token) {
12 | // setIsLoggedIn(true);
13 | // } else {
14 | // setIsLoggedIn(false);
15 | // }
16 | // }, []);
17 |
18 | // async function logout(){
19 | // localStorage.removeItem("token");
20 | // localStorage.removeItem("username");
21 |
22 | // // Redirect to login page
23 | // navigate("/login");
24 | // }
25 |
26 | export default function Nav () {
27 | const navigate = useNavigate();
28 | async function logout(){
29 | localStorage.removeItem("token");
30 | localStorage.removeItem("username");
31 |
32 | // Redirect to login page
33 | navigate("/login");
34 | alert("Logout Successful")
35 | }
36 |
37 | return (
38 |
39 |
40 |
HOME
41 |
42 |
43 |
POKEMON LIST
44 |
45 |
46 |
FAVORITES
47 |
48 |
49 |
Register
50 |
51 |
52 |
Login
53 |
54 |
55 |
56 | );
57 | }
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 | :root {
2 | margin: 0;
3 | padding: 0;
4 | box-sizing: border-box;
5 | font-family: 'Arial', sans-serif;
6 | }
7 |
8 | body {
9 | background-color: #ffe261;
10 | color: #333;
11 | line-height: 1.6;
12 | }
--------------------------------------------------------------------------------
/src/main.jsx:
--------------------------------------------------------------------------------
1 | import { StrictMode } from 'react'
2 | import { createRoot } from 'react-dom/client'
3 | import './index.css'
4 | import App from './App.jsx'
5 |
6 | createRoot(document.getElementById('root')).render(
7 |
8 |
9 | ,
10 | )
11 |
--------------------------------------------------------------------------------
/src/pages/Details.jsx:
--------------------------------------------------------------------------------
1 | import { useEffect, useState } from "react"
2 | import { useParams } from "react-router-dom"
3 | import axios from "axios"
4 | import "../styles/details.css"
5 | const BASE_URL = import.meta.env.VITE_API_BASE_URL;
6 |
7 | function Details(){
8 | const { name } = useParams();
9 | const [pokemon, setPokemon] = useState(null);
10 |
11 | useEffect(() => {
12 | async function getInfo(){
13 | try {
14 | const response = await axios.get(`https://pokeapi.co/api/v2/pokemon/${name}`);
15 | setPokemon(response.data);
16 | } catch (error) {
17 | console.error("Error getting Pokémon information:", error);
18 | }
19 | };
20 | getInfo();
21 | }, [name]);
22 |
23 | async function favorite(){
24 | const token = localStorage.getItem("token");
25 | const username = localStorage.getItem("username");
26 |
27 | try {
28 | const response = await axios.post(
29 | `${BASE_URL}/api/user/${username}/favorites/${name}`,
30 | { pokemonName: name },
31 | {
32 | headers: { Authorization: `Bearer ${token}` },
33 | }
34 | );
35 | alert(`${name} added to favorites!`);
36 | } catch (error) {
37 | alert("Failed to add pokemon to favorites");
38 | }
39 | };
40 |
41 | if (!pokemon) return Loading...
;
42 |
43 | return (
44 |
45 |
{pokemon.name}
46 |

50 |
51 |
Types
52 |
53 | {pokemon.types.map((type, index) => (
54 | - {type.type.name}
))}
55 |
56 |
57 |
58 |
Abilities
59 |
60 | {pokemon.abilities.map((ability, index) => (
61 | - {ability.ability.name}
62 | ))}
63 |
64 |
65 |
66 |
Base Stats
67 |
68 | {pokemon.stats.map((stat) => (
69 | -
70 | {stat.stat.name}: {stat.base_stat}
71 |
72 | ))}
73 |
74 |
75 |
76 |
77 | );
78 | };
79 |
80 | export default Details;
--------------------------------------------------------------------------------
/src/pages/Favorites.jsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useState } from "react";
2 | import axios from "axios";
3 | import "../styles/favorites.css"
4 | const BASE_URL = import.meta.env.VITE_API_BASE_URL;
5 |
6 | function Favorites(){
7 | const [favorites, setFavorites] = useState([]);
8 |
9 | useEffect(() => {
10 | async function getFavorites(){
11 | const token = localStorage.getItem("token");
12 | const username = localStorage.getItem("username");
13 | const res = await axios.get(`${BASE_URL}/api/user/${username}/favorites`, {
14 | headers: { Authorization: token },
15 | });
16 | console.log("API Response:", res.data)
17 | setFavorites(res.data || []);
18 | };
19 | getFavorites();
20 | }, []);
21 |
22 | async function removeFromFavorites(pokemonName, pokemon_id){
23 | const token = localStorage.getItem("token");
24 | const username = localStorage.getItem("username");
25 | try {
26 | // Send a request to the backend to remove the pokemon
27 | const res = await axios.delete(`${BASE_URL}/api/user/${username}/favorites/${pokemonName}`, {
28 | headers: { Authorization: token },
29 | data: { pokemon_id }, // Sending the id of the pokemon to be removed
30 | });
31 | // Update the favorites list in the frontend
32 | setFavorites(favorites.filter((pokemon) => pokemon.name !== pokemonName));
33 | console.log("Removed pokemon from favorites:", res.data);
34 | } catch (error) {
35 | console.error("Error removing pokemon from favorites:", error.message);
36 | }
37 | }
38 |
39 | return (
40 |
41 |
My Favorite Pokémon
42 | {favorites.length === 0 ? (
43 |
No favorites found
44 | ) : (
45 |
46 | {favorites.map((pokemon, index) => (
47 | -
48 |
49 | {pokemon.name} - {pokemon.type.join("/")}
50 |
51 |
52 | ))}
53 |
54 | )}
55 |
56 | );
57 | };
58 |
59 | export default Favorites
--------------------------------------------------------------------------------
/src/pages/Home.jsx:
--------------------------------------------------------------------------------
1 | import "../styles/home.css"
2 |
3 | export default function Home () {
4 | return (
5 |
6 |
PokéDex App!
7 |
Learn about your favorite Pokémon!
8 |
9 | )
10 | }
--------------------------------------------------------------------------------
/src/pages/Login.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react"
2 | import { useNavigate } from "react-router-dom"
3 | import axios from "axios"
4 | import "../styles/form.css"
5 | const BASE_URL = import.meta.env.VITE_API_BASE_URL;
6 |
7 | function Login() {
8 | const [username, setUsername] = useState("");
9 | const [password, setPassword] = useState("");
10 | const navigate = useNavigate();
11 |
12 | async function formLogin(){
13 | const res = await axios.post(`${BASE_URL}/api/user/login`, { username, password });
14 | if (res.data.token) {
15 | localStorage.setItem("token", res.data.token);
16 | localStorage.setItem("username", username);
17 | navigate("/pokemon"); // Redirect to Pokemon List if the user was successfully logged in
18 | alert("Login successful");
19 | }
20 | };
21 |
22 | return (
23 |
24 |
Login
25 |
26 |
27 | setUsername(e.target.value)} className="formInput" required/>
28 |
29 |
30 |
31 | setPassword(e.target.value)} className="formInput" required/>
32 |
33 |
34 |
35 | );
36 | };
37 |
38 | export default Login;
--------------------------------------------------------------------------------
/src/pages/Pokemon.jsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useState } from "react"
2 | import { Link } from "react-router-dom"
3 | import axios from "axios"
4 | import "../styles/pokemon.css"
5 |
6 | function Pokemon(){
7 | const [pokemon, setPokemon] = useState([]);
8 | const [search, setSearch] = useState("");
9 |
10 | useEffect(() => {
11 | async function getPokemon(){
12 | try {
13 | const res = await axios.get("https://pokeapi.co/api/v2/pokemon?limit=1025");
14 | setPokemon(res.data.results);
15 | } catch (error) {
16 | console.error("Error getting Pokémon:", error.message);
17 | }
18 | };
19 | getPokemon();
20 | }, []);
21 |
22 | const filteredPokemon = pokemon.filter((p) =>
23 | p.name.toLowerCase().includes(search.toLowerCase()));
24 |
25 | return (
26 |
27 |
Pokémon List
28 |
29 |
setSearch(e.target.value)}
34 | className="pokemonSearchBar"
35 | />
36 |
37 |
38 | {filteredPokemon.map((p) => {
39 | const pokemonId = p.url.split("/").filter(Boolean).pop();
40 | return(
41 |
42 |
43 |
{p.name}
44 |

49 |
50 |
51 | );
52 | })}
53 |
54 |
55 | );
56 | };
57 |
58 | export default Pokemon;
--------------------------------------------------------------------------------
/src/pages/Register.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 | import axios from "axios";
3 | import { useNavigate } from "react-router-dom";
4 | import "../styles/form.css"
5 | const BASE_URL = import.meta.env.VITE_API_BASE_URL;
6 |
7 | function Register() {
8 | const [username, setUsername] = useState("");
9 | const [password, setPassword] = useState("");
10 | const [error, setError] = useState("");
11 | const navigate = useNavigate();
12 |
13 | async function formSubmit(e){
14 | e.preventDefault();
15 | setError("");
16 |
17 | try {
18 | const res = await axios.post(`${BASE_URL}/api/user/register`, {
19 | username,
20 | password,
21 | });
22 |
23 | // If registration is successful, navigate to the login page
24 | navigate("/login");
25 | alert("Registration successful");
26 |
27 | // if (res.status === 201) {
28 | // navigate("/login");
29 | // }
30 | } catch (error) {
31 | console.log(error);
32 | }
33 | };
34 |
35 | return (
36 |
37 |
Register
38 | {error &&
{error}
}
39 |
50 |
51 | );
52 | }
53 |
54 | export default Register;
--------------------------------------------------------------------------------
/src/styles/details.css:
--------------------------------------------------------------------------------
1 | .detailsContainer {
2 | max-width: 600px;
3 | margin: 40px auto;
4 | padding: 20px;
5 | background-color: #92d7d8;
6 | border-radius: 10px;
7 | box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
8 | text-align: center;
9 | }
10 |
11 | .detailsContainer h1 {
12 | font-size: 2rem;
13 | font-weight: bold;
14 | text-transform: capitalize;
15 | color: #333;
16 | margin-bottom: 1px;
17 | }
18 |
19 | .detailsContainer img {
20 | width: 150px;
21 | height: 150px;
22 | margin-bottom: 1px;
23 | }
24 |
25 | .detailsSection {
26 | margin-bottom: 20px;
27 | }
28 |
29 | .detailsSection h2 {
30 | font-size: 1.5rem;
31 | margin-bottom: 8px;
32 | color: #444;
33 | }
34 |
35 | .detailsSection li {
36 | font-size: 1.1rem;
37 | text-transform: capitalize;
38 | background: #dfcdef;
39 | padding: 8px;
40 | margin: 5px 0;
41 | margin-right: 30px;
42 | text-align: center;
43 | border-radius: 5px;
44 | box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
45 | list-style-type: none;
46 | }
47 |
48 | .detailsTypes {
49 | list-style: none;
50 | padding: 0;
51 | }
52 |
53 | .detailsTypes li {
54 | font-size: 1.1rem;
55 | text-transform: capitalize;
56 | background: #dfcdef;
57 | padding: 8px;
58 | margin: 5px 0;
59 | text-align: center;
60 | border-radius: 5px;
61 | box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
62 | }
63 |
64 | .statsSection {
65 | background: #c070b3;
66 | padding: 15px;
67 | border-radius: 8px;
68 | box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
69 | margin-top: 20px;
70 | }
71 |
72 | .favoriteButton {
73 | background-color: #c070b3;
74 | color: #c8d9a7;
75 | font-size: 1.2rem;
76 | padding: 10px 15px;
77 | border: none;
78 | border-radius: 5px;
79 | cursor: pointer;
80 | margin-top: 20px;
81 | font-weight: bold;
82 | }
83 |
84 | .favoriteButton:hover {
85 | background-color: #a103b6;
86 | }
--------------------------------------------------------------------------------
/src/styles/favorites.css:
--------------------------------------------------------------------------------
1 | .favoritesContainer {
2 | background-color: #92d7d8;
3 | padding: 40px;
4 | text-align: center;
5 | font-family: Arial, sans-serif;
6 | }
7 |
8 | .favoritesContainer h2 {
9 | font-size: 2.5rem;
10 | font-weight: bold;
11 | margin-bottom: 20px;
12 | color: #333;
13 | }
14 |
15 | .favoritesContainer p {
16 | font-size: 1.2rem;
17 | color: #666;
18 | }
19 |
20 | .favorites {
21 | list-style-type: none;
22 | padding: 0;
23 | display: flex;
24 | flex-wrap: wrap;
25 | justify-content: center;
26 | }
27 |
28 | .favorites li {
29 | background-color: #c8d9a7;
30 | padding: 20px;
31 | margin: 10px;
32 | border-radius: 10px;
33 | box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
34 | width: 200px;
35 | text-align: center;
36 | text-transform: capitalize;
37 | font-weight: bold;
38 | transition: transform 0.3s ease-in-out;
39 | }
40 |
41 | .favorites li:hover {
42 | transform: translateY(-5px);
43 | }
44 |
45 | .favorites img {
46 | max-width: 150px;
47 | height: auto;
48 | border-radius: 10px;
49 | margin-bottom: 100px;
50 | }
51 |
52 | .favorites button {
53 | background-color: #c070b3;
54 | color: white;
55 | border: none;
56 | padding: 10px 20px;
57 | font-size: 1rem;
58 | border-radius: 20px;
59 | cursor: pointer;
60 | transition: background-color 0.3s;
61 | margin-top: 10px;
62 | }
63 |
64 | .favorites button:hover {
65 | background-color: #a103b6;
66 | }
67 |
68 | .empty {
69 | font-size: 1.5rem;
70 | font-weight: bold;
71 | color: #92d7d8;
72 | }
--------------------------------------------------------------------------------
/src/styles/form.css:
--------------------------------------------------------------------------------
1 | .formContainer {
2 | max-width: 420px;
3 | margin: 50px auto;
4 | padding: 20px;
5 | background-color: #92d7d8;
6 | border-radius: 8px;
7 | box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
8 | text-align: center;
9 | }
10 |
11 | .formTitle {
12 | font-size: 1.8rem;
13 | color: #333;
14 | margin-bottom: 20px;
15 | }
16 |
17 | .formSection {
18 | display: flex;
19 | flex-direction: column;
20 | }
21 |
22 | .formLabel {
23 | font-size: 1rem;
24 | font-weight: bold;
25 | margin-bottom: 5px;
26 | text-align: left;
27 | }
28 |
29 | .formInput {
30 | width: 95%;
31 | padding: 10px;
32 | margin-bottom: 15px;
33 | border: 1px solid #ccc;
34 | border-radius: 5px;
35 | font-size: 1rem;
36 | }
37 |
38 | .formButton {
39 | background-color: #c070b3;
40 | color: white;
41 | padding: 10px 15px;
42 | font-size: 1rem;
43 | border: none;
44 | border-radius: 5px;
45 | cursor: pointer;
46 | transition: background 0.3s;
47 | }
48 |
49 | .formButton:hover {
50 | background-color: #a103b6;
51 | }
--------------------------------------------------------------------------------
/src/styles/home.css:
--------------------------------------------------------------------------------
1 | .container{
2 | background: #dfc048;
3 | color: white;
4 | text-align: center;
5 | padding: 50px;
6 |
7 | border-radius: 10px;
8 | margin-top: 50px;
9 | box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
10 | }
11 |
12 | p {
13 | font-size: 1.5rem;
14 | font-weight: normal;
15 | margin-bottom: 30px;
16 | }
17 |
18 | h1{
19 | font-size: 3rem;
20 | font-weight: bold;
21 | margin-bottom: 20px;
22 | }
--------------------------------------------------------------------------------
/src/styles/nav.css:
--------------------------------------------------------------------------------
1 | .nav{
2 | display: flex;
3 | justify-content: space-around;
4 | align-items: center;
5 | background-color: aqua;
6 | padding: 10px 20px;
7 | font-family: Arial, sans-serif;
8 | }
9 |
10 | button{
11 | color: black;
12 | border: none;
13 | padding: 8px 16px;
14 | font-size: 16px;
15 | border-radius: 4px;
16 | cursor: pointer;
17 | transition: background-color 0.3s ease;
18 | }
19 |
--------------------------------------------------------------------------------
/src/styles/pokemon.css:
--------------------------------------------------------------------------------
1 | .pokemonContainer {
2 | max-width: 800px;
3 | margin: 20px auto;
4 | padding: 20px;
5 | text-align: center;
6 | }
7 |
8 | .pokemonTitle {
9 | font-size: 2rem;
10 | color: #333;
11 | margin-bottom: 15px;
12 | }
13 |
14 | .pokemonSearchBar {
15 | width: 100%;
16 | max-width: 400px;
17 | padding: 10px;
18 | border: 2px solid #ccc;
19 | border-radius: 5px;
20 | font-size: 1rem;
21 | margin-bottom: 20px;
22 | }
23 |
24 | .pokemonMap {
25 | display: grid;
26 | grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
27 | gap: 12px;
28 | justify-items: center;
29 | }
30 |
31 | .pokemonCard {
32 | background-color: #c8d9a7;
33 | padding: 15px;
34 | border-radius: 8px;
35 | box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
36 | text-align: center;
37 | transition: transform 0.2s ease-in-out;
38 | }
39 |
40 | .pokemonCard:hover {
41 | transform: scale(1.05);
42 | }
43 |
44 | .pokemonName {
45 | font-size: 1.2rem;
46 | font-weight: bold;
47 | text-transform: capitalize;
48 | color: #060ae7;
49 | margin-bottom: 10px;
50 | }
51 |
52 | .pokemonSprite {
53 | width: 100px;
54 | height: 100px;
55 | }
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | // https://vite.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | })
8 |
--------------------------------------------------------------------------------