├── .gitignore
├── README.md
├── eslint.config.js
├── index.html
├── package-lock.json
├── package.json
├── public
├── logo.svg
└── vite.svg
├── src
├── App.jsx
├── api
│ ├── pattern.js
│ └── project.js
├── assets
│ └── react.svg
├── components
│ ├── MessageDiv.jsx
│ ├── NavBar.jsx
│ ├── PatternDetail.jsx
│ ├── PatternForm.jsx
│ ├── PatternSummary.jsx
│ ├── ProjectForm.jsx
│ └── ProjectSummary.jsx
├── index.css
├── main.jsx
├── pages
│ ├── NewProjectPage.jsx
│ ├── PatternDetailsPage.jsx
│ ├── PatternGenerator.jsx
│ ├── PatternsPage.jsx
│ └── ProjectsPage.jsx
├── store
│ ├── patternsSlice.js
│ └── store.js
└── utils
│ └── patternMath.js
└── 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 | .env
15 |
16 | # Editor directories and files
17 | .vscode/*
18 | !.vscode/extensions.json
19 | .idea
20 | .DS_Store
21 | *.suo
22 | *.ntvs*
23 | *.njsproj
24 | *.sln
25 | *.sw?
26 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Custom Stocking Pattern Generator
2 |
3 | This is the frontend for my Per Scholas capstone project — a four-page web app that generates a custom-sized, toe-up, thigh-high stocking pattern.
4 |
5 | live site can be found [here](https://stockingpatterngenerator.netlify.app/)
6 |
7 | ## Features
8 | - **Pattern Generator:** The home page allows users to enter personal measurements (or those of the intended recipient), gauge swatch details, desired stocking length, and the length of an accent pattern. The app then calculates a tailored knitting pattern.
9 | - **Pattern Management:** Saved patterns can be accessed from the "Patterns" tab. Clicking on a pattern title opens the full pattern, where users can print, edit, or delete it.
10 | - **Projects Page:** View a list of all projects (functionality not yet implemented).
11 | - **Project Tracker:** Users can log knitting projects with a name, notes, and recipient details.
12 | - **Ravelry Integration:** Projects can be saved directly to my personal Ravelry account.
13 |
14 | ## Technology used
15 | - React (frontend framework)
16 | - Redux & Redux Toolkit (state management)
17 | - React Router (routing)
18 | - Tailwind CSS & vanilla CSS (styling)
19 | - Axios (API requests)
20 |
21 | ## Future work
22 | - **Project management:** Project cards on the "Projects" tab will be clickable, opening the project where users can edit or delete the project, or save/update the project on Ravelry.
23 | - **User Authentication:** Implement signup and login functionality so users can have personal accounts.
24 | - **User-Specific Patterns:** Restrict the "Patterns" page to display only the patterns created by the logged-in user.
25 | - **OAuth for Ravelry:** Update the Ravelry integration to use OAuth, allowing users to save projects to their personal Ravelry accounts instead of mine.
26 |
--------------------------------------------------------------------------------
/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 | Stocking Designer
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 | "@reduxjs/toolkit": "^2.6.1",
12 | "@tailwindcss/vite": "^4.0.15",
13 | "axios": "^1.8.4",
14 | "react": "^19.0.0",
15 | "react-dom": "^19.0.0",
16 | "react-redux": "^9.2.0",
17 | "react-router": "^7.4.0",
18 | "react-to-print": "^3.0.5",
19 | "tailwindcss": "^4.0.15"
20 | },
21 | "devDependencies": {
22 | "@eslint/js": "^9.21.0",
23 | "@types/react": "^19.0.10",
24 | "@types/react-dom": "^19.0.4",
25 | "@vitejs/plugin-react": "^4.3.4",
26 | "eslint": "^9.21.0",
27 | "eslint-plugin-react-hooks": "^5.1.0",
28 | "eslint-plugin-react-refresh": "^0.4.19",
29 | "globals": "^15.15.0",
30 | "vite": "^6.2.0"
31 | }
32 | },
33 | "node_modules/@ampproject/remapping": {
34 | "version": "2.3.0",
35 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
36 | "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
37 | "dev": true,
38 | "license": "Apache-2.0",
39 | "dependencies": {
40 | "@jridgewell/gen-mapping": "^0.3.5",
41 | "@jridgewell/trace-mapping": "^0.3.24"
42 | },
43 | "engines": {
44 | "node": ">=6.0.0"
45 | }
46 | },
47 | "node_modules/@babel/code-frame": {
48 | "version": "7.26.2",
49 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
50 | "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
51 | "dev": true,
52 | "license": "MIT",
53 | "dependencies": {
54 | "@babel/helper-validator-identifier": "^7.25.9",
55 | "js-tokens": "^4.0.0",
56 | "picocolors": "^1.0.0"
57 | },
58 | "engines": {
59 | "node": ">=6.9.0"
60 | }
61 | },
62 | "node_modules/@babel/compat-data": {
63 | "version": "7.26.8",
64 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz",
65 | "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==",
66 | "dev": true,
67 | "license": "MIT",
68 | "engines": {
69 | "node": ">=6.9.0"
70 | }
71 | },
72 | "node_modules/@babel/core": {
73 | "version": "7.26.10",
74 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz",
75 | "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==",
76 | "dev": true,
77 | "license": "MIT",
78 | "dependencies": {
79 | "@ampproject/remapping": "^2.2.0",
80 | "@babel/code-frame": "^7.26.2",
81 | "@babel/generator": "^7.26.10",
82 | "@babel/helper-compilation-targets": "^7.26.5",
83 | "@babel/helper-module-transforms": "^7.26.0",
84 | "@babel/helpers": "^7.26.10",
85 | "@babel/parser": "^7.26.10",
86 | "@babel/template": "^7.26.9",
87 | "@babel/traverse": "^7.26.10",
88 | "@babel/types": "^7.26.10",
89 | "convert-source-map": "^2.0.0",
90 | "debug": "^4.1.0",
91 | "gensync": "^1.0.0-beta.2",
92 | "json5": "^2.2.3",
93 | "semver": "^6.3.1"
94 | },
95 | "engines": {
96 | "node": ">=6.9.0"
97 | },
98 | "funding": {
99 | "type": "opencollective",
100 | "url": "https://opencollective.com/babel"
101 | }
102 | },
103 | "node_modules/@babel/generator": {
104 | "version": "7.26.10",
105 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.10.tgz",
106 | "integrity": "sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==",
107 | "dev": true,
108 | "license": "MIT",
109 | "dependencies": {
110 | "@babel/parser": "^7.26.10",
111 | "@babel/types": "^7.26.10",
112 | "@jridgewell/gen-mapping": "^0.3.5",
113 | "@jridgewell/trace-mapping": "^0.3.25",
114 | "jsesc": "^3.0.2"
115 | },
116 | "engines": {
117 | "node": ">=6.9.0"
118 | }
119 | },
120 | "node_modules/@babel/helper-compilation-targets": {
121 | "version": "7.26.5",
122 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz",
123 | "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==",
124 | "dev": true,
125 | "license": "MIT",
126 | "dependencies": {
127 | "@babel/compat-data": "^7.26.5",
128 | "@babel/helper-validator-option": "^7.25.9",
129 | "browserslist": "^4.24.0",
130 | "lru-cache": "^5.1.1",
131 | "semver": "^6.3.1"
132 | },
133 | "engines": {
134 | "node": ">=6.9.0"
135 | }
136 | },
137 | "node_modules/@babel/helper-module-imports": {
138 | "version": "7.25.9",
139 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
140 | "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
141 | "dev": true,
142 | "license": "MIT",
143 | "dependencies": {
144 | "@babel/traverse": "^7.25.9",
145 | "@babel/types": "^7.25.9"
146 | },
147 | "engines": {
148 | "node": ">=6.9.0"
149 | }
150 | },
151 | "node_modules/@babel/helper-module-transforms": {
152 | "version": "7.26.0",
153 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
154 | "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
155 | "dev": true,
156 | "license": "MIT",
157 | "dependencies": {
158 | "@babel/helper-module-imports": "^7.25.9",
159 | "@babel/helper-validator-identifier": "^7.25.9",
160 | "@babel/traverse": "^7.25.9"
161 | },
162 | "engines": {
163 | "node": ">=6.9.0"
164 | },
165 | "peerDependencies": {
166 | "@babel/core": "^7.0.0"
167 | }
168 | },
169 | "node_modules/@babel/helper-plugin-utils": {
170 | "version": "7.26.5",
171 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz",
172 | "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==",
173 | "dev": true,
174 | "license": "MIT",
175 | "engines": {
176 | "node": ">=6.9.0"
177 | }
178 | },
179 | "node_modules/@babel/helper-string-parser": {
180 | "version": "7.25.9",
181 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
182 | "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
183 | "dev": true,
184 | "license": "MIT",
185 | "engines": {
186 | "node": ">=6.9.0"
187 | }
188 | },
189 | "node_modules/@babel/helper-validator-identifier": {
190 | "version": "7.25.9",
191 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
192 | "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
193 | "dev": true,
194 | "license": "MIT",
195 | "engines": {
196 | "node": ">=6.9.0"
197 | }
198 | },
199 | "node_modules/@babel/helper-validator-option": {
200 | "version": "7.25.9",
201 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
202 | "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
203 | "dev": true,
204 | "license": "MIT",
205 | "engines": {
206 | "node": ">=6.9.0"
207 | }
208 | },
209 | "node_modules/@babel/helpers": {
210 | "version": "7.26.10",
211 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz",
212 | "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==",
213 | "dev": true,
214 | "license": "MIT",
215 | "dependencies": {
216 | "@babel/template": "^7.26.9",
217 | "@babel/types": "^7.26.10"
218 | },
219 | "engines": {
220 | "node": ">=6.9.0"
221 | }
222 | },
223 | "node_modules/@babel/parser": {
224 | "version": "7.26.10",
225 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz",
226 | "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==",
227 | "dev": true,
228 | "license": "MIT",
229 | "dependencies": {
230 | "@babel/types": "^7.26.10"
231 | },
232 | "bin": {
233 | "parser": "bin/babel-parser.js"
234 | },
235 | "engines": {
236 | "node": ">=6.0.0"
237 | }
238 | },
239 | "node_modules/@babel/plugin-transform-react-jsx-self": {
240 | "version": "7.25.9",
241 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz",
242 | "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==",
243 | "dev": true,
244 | "license": "MIT",
245 | "dependencies": {
246 | "@babel/helper-plugin-utils": "^7.25.9"
247 | },
248 | "engines": {
249 | "node": ">=6.9.0"
250 | },
251 | "peerDependencies": {
252 | "@babel/core": "^7.0.0-0"
253 | }
254 | },
255 | "node_modules/@babel/plugin-transform-react-jsx-source": {
256 | "version": "7.25.9",
257 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz",
258 | "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==",
259 | "dev": true,
260 | "license": "MIT",
261 | "dependencies": {
262 | "@babel/helper-plugin-utils": "^7.25.9"
263 | },
264 | "engines": {
265 | "node": ">=6.9.0"
266 | },
267 | "peerDependencies": {
268 | "@babel/core": "^7.0.0-0"
269 | }
270 | },
271 | "node_modules/@babel/template": {
272 | "version": "7.26.9",
273 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz",
274 | "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==",
275 | "dev": true,
276 | "license": "MIT",
277 | "dependencies": {
278 | "@babel/code-frame": "^7.26.2",
279 | "@babel/parser": "^7.26.9",
280 | "@babel/types": "^7.26.9"
281 | },
282 | "engines": {
283 | "node": ">=6.9.0"
284 | }
285 | },
286 | "node_modules/@babel/traverse": {
287 | "version": "7.26.10",
288 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.10.tgz",
289 | "integrity": "sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==",
290 | "dev": true,
291 | "license": "MIT",
292 | "dependencies": {
293 | "@babel/code-frame": "^7.26.2",
294 | "@babel/generator": "^7.26.10",
295 | "@babel/parser": "^7.26.10",
296 | "@babel/template": "^7.26.9",
297 | "@babel/types": "^7.26.10",
298 | "debug": "^4.3.1",
299 | "globals": "^11.1.0"
300 | },
301 | "engines": {
302 | "node": ">=6.9.0"
303 | }
304 | },
305 | "node_modules/@babel/traverse/node_modules/globals": {
306 | "version": "11.12.0",
307 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
308 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
309 | "dev": true,
310 | "license": "MIT",
311 | "engines": {
312 | "node": ">=4"
313 | }
314 | },
315 | "node_modules/@babel/types": {
316 | "version": "7.26.10",
317 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz",
318 | "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==",
319 | "dev": true,
320 | "license": "MIT",
321 | "dependencies": {
322 | "@babel/helper-string-parser": "^7.25.9",
323 | "@babel/helper-validator-identifier": "^7.25.9"
324 | },
325 | "engines": {
326 | "node": ">=6.9.0"
327 | }
328 | },
329 | "node_modules/@esbuild/aix-ppc64": {
330 | "version": "0.25.1",
331 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz",
332 | "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==",
333 | "cpu": [
334 | "ppc64"
335 | ],
336 | "license": "MIT",
337 | "optional": true,
338 | "os": [
339 | "aix"
340 | ],
341 | "engines": {
342 | "node": ">=18"
343 | }
344 | },
345 | "node_modules/@esbuild/android-arm": {
346 | "version": "0.25.1",
347 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz",
348 | "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==",
349 | "cpu": [
350 | "arm"
351 | ],
352 | "license": "MIT",
353 | "optional": true,
354 | "os": [
355 | "android"
356 | ],
357 | "engines": {
358 | "node": ">=18"
359 | }
360 | },
361 | "node_modules/@esbuild/android-arm64": {
362 | "version": "0.25.1",
363 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz",
364 | "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==",
365 | "cpu": [
366 | "arm64"
367 | ],
368 | "license": "MIT",
369 | "optional": true,
370 | "os": [
371 | "android"
372 | ],
373 | "engines": {
374 | "node": ">=18"
375 | }
376 | },
377 | "node_modules/@esbuild/android-x64": {
378 | "version": "0.25.1",
379 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz",
380 | "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==",
381 | "cpu": [
382 | "x64"
383 | ],
384 | "license": "MIT",
385 | "optional": true,
386 | "os": [
387 | "android"
388 | ],
389 | "engines": {
390 | "node": ">=18"
391 | }
392 | },
393 | "node_modules/@esbuild/darwin-arm64": {
394 | "version": "0.25.1",
395 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz",
396 | "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==",
397 | "cpu": [
398 | "arm64"
399 | ],
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 | "license": "MIT",
417 | "optional": true,
418 | "os": [
419 | "darwin"
420 | ],
421 | "engines": {
422 | "node": ">=18"
423 | }
424 | },
425 | "node_modules/@esbuild/freebsd-arm64": {
426 | "version": "0.25.1",
427 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz",
428 | "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==",
429 | "cpu": [
430 | "arm64"
431 | ],
432 | "license": "MIT",
433 | "optional": true,
434 | "os": [
435 | "freebsd"
436 | ],
437 | "engines": {
438 | "node": ">=18"
439 | }
440 | },
441 | "node_modules/@esbuild/freebsd-x64": {
442 | "version": "0.25.1",
443 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz",
444 | "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==",
445 | "cpu": [
446 | "x64"
447 | ],
448 | "license": "MIT",
449 | "optional": true,
450 | "os": [
451 | "freebsd"
452 | ],
453 | "engines": {
454 | "node": ">=18"
455 | }
456 | },
457 | "node_modules/@esbuild/linux-arm": {
458 | "version": "0.25.1",
459 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz",
460 | "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==",
461 | "cpu": [
462 | "arm"
463 | ],
464 | "license": "MIT",
465 | "optional": true,
466 | "os": [
467 | "linux"
468 | ],
469 | "engines": {
470 | "node": ">=18"
471 | }
472 | },
473 | "node_modules/@esbuild/linux-arm64": {
474 | "version": "0.25.1",
475 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz",
476 | "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==",
477 | "cpu": [
478 | "arm64"
479 | ],
480 | "license": "MIT",
481 | "optional": true,
482 | "os": [
483 | "linux"
484 | ],
485 | "engines": {
486 | "node": ">=18"
487 | }
488 | },
489 | "node_modules/@esbuild/linux-ia32": {
490 | "version": "0.25.1",
491 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz",
492 | "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==",
493 | "cpu": [
494 | "ia32"
495 | ],
496 | "license": "MIT",
497 | "optional": true,
498 | "os": [
499 | "linux"
500 | ],
501 | "engines": {
502 | "node": ">=18"
503 | }
504 | },
505 | "node_modules/@esbuild/linux-loong64": {
506 | "version": "0.25.1",
507 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz",
508 | "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==",
509 | "cpu": [
510 | "loong64"
511 | ],
512 | "license": "MIT",
513 | "optional": true,
514 | "os": [
515 | "linux"
516 | ],
517 | "engines": {
518 | "node": ">=18"
519 | }
520 | },
521 | "node_modules/@esbuild/linux-mips64el": {
522 | "version": "0.25.1",
523 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz",
524 | "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==",
525 | "cpu": [
526 | "mips64el"
527 | ],
528 | "license": "MIT",
529 | "optional": true,
530 | "os": [
531 | "linux"
532 | ],
533 | "engines": {
534 | "node": ">=18"
535 | }
536 | },
537 | "node_modules/@esbuild/linux-ppc64": {
538 | "version": "0.25.1",
539 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz",
540 | "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==",
541 | "cpu": [
542 | "ppc64"
543 | ],
544 | "license": "MIT",
545 | "optional": true,
546 | "os": [
547 | "linux"
548 | ],
549 | "engines": {
550 | "node": ">=18"
551 | }
552 | },
553 | "node_modules/@esbuild/linux-riscv64": {
554 | "version": "0.25.1",
555 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz",
556 | "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==",
557 | "cpu": [
558 | "riscv64"
559 | ],
560 | "license": "MIT",
561 | "optional": true,
562 | "os": [
563 | "linux"
564 | ],
565 | "engines": {
566 | "node": ">=18"
567 | }
568 | },
569 | "node_modules/@esbuild/linux-s390x": {
570 | "version": "0.25.1",
571 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz",
572 | "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==",
573 | "cpu": [
574 | "s390x"
575 | ],
576 | "license": "MIT",
577 | "optional": true,
578 | "os": [
579 | "linux"
580 | ],
581 | "engines": {
582 | "node": ">=18"
583 | }
584 | },
585 | "node_modules/@esbuild/linux-x64": {
586 | "version": "0.25.1",
587 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz",
588 | "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==",
589 | "cpu": [
590 | "x64"
591 | ],
592 | "license": "MIT",
593 | "optional": true,
594 | "os": [
595 | "linux"
596 | ],
597 | "engines": {
598 | "node": ">=18"
599 | }
600 | },
601 | "node_modules/@esbuild/netbsd-arm64": {
602 | "version": "0.25.1",
603 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz",
604 | "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==",
605 | "cpu": [
606 | "arm64"
607 | ],
608 | "license": "MIT",
609 | "optional": true,
610 | "os": [
611 | "netbsd"
612 | ],
613 | "engines": {
614 | "node": ">=18"
615 | }
616 | },
617 | "node_modules/@esbuild/netbsd-x64": {
618 | "version": "0.25.1",
619 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz",
620 | "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==",
621 | "cpu": [
622 | "x64"
623 | ],
624 | "license": "MIT",
625 | "optional": true,
626 | "os": [
627 | "netbsd"
628 | ],
629 | "engines": {
630 | "node": ">=18"
631 | }
632 | },
633 | "node_modules/@esbuild/openbsd-arm64": {
634 | "version": "0.25.1",
635 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz",
636 | "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==",
637 | "cpu": [
638 | "arm64"
639 | ],
640 | "license": "MIT",
641 | "optional": true,
642 | "os": [
643 | "openbsd"
644 | ],
645 | "engines": {
646 | "node": ">=18"
647 | }
648 | },
649 | "node_modules/@esbuild/openbsd-x64": {
650 | "version": "0.25.1",
651 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz",
652 | "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==",
653 | "cpu": [
654 | "x64"
655 | ],
656 | "license": "MIT",
657 | "optional": true,
658 | "os": [
659 | "openbsd"
660 | ],
661 | "engines": {
662 | "node": ">=18"
663 | }
664 | },
665 | "node_modules/@esbuild/sunos-x64": {
666 | "version": "0.25.1",
667 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz",
668 | "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==",
669 | "cpu": [
670 | "x64"
671 | ],
672 | "license": "MIT",
673 | "optional": true,
674 | "os": [
675 | "sunos"
676 | ],
677 | "engines": {
678 | "node": ">=18"
679 | }
680 | },
681 | "node_modules/@esbuild/win32-arm64": {
682 | "version": "0.25.1",
683 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz",
684 | "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==",
685 | "cpu": [
686 | "arm64"
687 | ],
688 | "license": "MIT",
689 | "optional": true,
690 | "os": [
691 | "win32"
692 | ],
693 | "engines": {
694 | "node": ">=18"
695 | }
696 | },
697 | "node_modules/@esbuild/win32-ia32": {
698 | "version": "0.25.1",
699 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz",
700 | "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==",
701 | "cpu": [
702 | "ia32"
703 | ],
704 | "license": "MIT",
705 | "optional": true,
706 | "os": [
707 | "win32"
708 | ],
709 | "engines": {
710 | "node": ">=18"
711 | }
712 | },
713 | "node_modules/@esbuild/win32-x64": {
714 | "version": "0.25.1",
715 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz",
716 | "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==",
717 | "cpu": [
718 | "x64"
719 | ],
720 | "license": "MIT",
721 | "optional": true,
722 | "os": [
723 | "win32"
724 | ],
725 | "engines": {
726 | "node": ">=18"
727 | }
728 | },
729 | "node_modules/@eslint-community/eslint-utils": {
730 | "version": "4.5.1",
731 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz",
732 | "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==",
733 | "dev": true,
734 | "license": "MIT",
735 | "dependencies": {
736 | "eslint-visitor-keys": "^3.4.3"
737 | },
738 | "engines": {
739 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
740 | },
741 | "funding": {
742 | "url": "https://opencollective.com/eslint"
743 | },
744 | "peerDependencies": {
745 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
746 | }
747 | },
748 | "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
749 | "version": "3.4.3",
750 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
751 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
752 | "dev": true,
753 | "license": "Apache-2.0",
754 | "engines": {
755 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
756 | },
757 | "funding": {
758 | "url": "https://opencollective.com/eslint"
759 | }
760 | },
761 | "node_modules/@eslint-community/regexpp": {
762 | "version": "4.12.1",
763 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
764 | "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
765 | "dev": true,
766 | "license": "MIT",
767 | "engines": {
768 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
769 | }
770 | },
771 | "node_modules/@eslint/config-array": {
772 | "version": "0.19.2",
773 | "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz",
774 | "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==",
775 | "dev": true,
776 | "license": "Apache-2.0",
777 | "dependencies": {
778 | "@eslint/object-schema": "^2.1.6",
779 | "debug": "^4.3.1",
780 | "minimatch": "^3.1.2"
781 | },
782 | "engines": {
783 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
784 | }
785 | },
786 | "node_modules/@eslint/config-helpers": {
787 | "version": "0.1.0",
788 | "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.1.0.tgz",
789 | "integrity": "sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA==",
790 | "dev": true,
791 | "license": "Apache-2.0",
792 | "engines": {
793 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
794 | }
795 | },
796 | "node_modules/@eslint/core": {
797 | "version": "0.12.0",
798 | "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz",
799 | "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==",
800 | "dev": true,
801 | "license": "Apache-2.0",
802 | "dependencies": {
803 | "@types/json-schema": "^7.0.15"
804 | },
805 | "engines": {
806 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
807 | }
808 | },
809 | "node_modules/@eslint/eslintrc": {
810 | "version": "3.3.0",
811 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz",
812 | "integrity": "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==",
813 | "dev": true,
814 | "license": "MIT",
815 | "dependencies": {
816 | "ajv": "^6.12.4",
817 | "debug": "^4.3.2",
818 | "espree": "^10.0.1",
819 | "globals": "^14.0.0",
820 | "ignore": "^5.2.0",
821 | "import-fresh": "^3.2.1",
822 | "js-yaml": "^4.1.0",
823 | "minimatch": "^3.1.2",
824 | "strip-json-comments": "^3.1.1"
825 | },
826 | "engines": {
827 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
828 | },
829 | "funding": {
830 | "url": "https://opencollective.com/eslint"
831 | }
832 | },
833 | "node_modules/@eslint/eslintrc/node_modules/globals": {
834 | "version": "14.0.0",
835 | "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
836 | "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
837 | "dev": true,
838 | "license": "MIT",
839 | "engines": {
840 | "node": ">=18"
841 | },
842 | "funding": {
843 | "url": "https://github.com/sponsors/sindresorhus"
844 | }
845 | },
846 | "node_modules/@eslint/js": {
847 | "version": "9.22.0",
848 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.22.0.tgz",
849 | "integrity": "sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==",
850 | "dev": true,
851 | "license": "MIT",
852 | "engines": {
853 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
854 | }
855 | },
856 | "node_modules/@eslint/object-schema": {
857 | "version": "2.1.6",
858 | "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
859 | "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
860 | "dev": true,
861 | "license": "Apache-2.0",
862 | "engines": {
863 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
864 | }
865 | },
866 | "node_modules/@eslint/plugin-kit": {
867 | "version": "0.2.7",
868 | "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz",
869 | "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==",
870 | "dev": true,
871 | "license": "Apache-2.0",
872 | "dependencies": {
873 | "@eslint/core": "^0.12.0",
874 | "levn": "^0.4.1"
875 | },
876 | "engines": {
877 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
878 | }
879 | },
880 | "node_modules/@humanfs/core": {
881 | "version": "0.19.1",
882 | "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
883 | "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
884 | "dev": true,
885 | "license": "Apache-2.0",
886 | "engines": {
887 | "node": ">=18.18.0"
888 | }
889 | },
890 | "node_modules/@humanfs/node": {
891 | "version": "0.16.6",
892 | "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
893 | "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
894 | "dev": true,
895 | "license": "Apache-2.0",
896 | "dependencies": {
897 | "@humanfs/core": "^0.19.1",
898 | "@humanwhocodes/retry": "^0.3.0"
899 | },
900 | "engines": {
901 | "node": ">=18.18.0"
902 | }
903 | },
904 | "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
905 | "version": "0.3.1",
906 | "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
907 | "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
908 | "dev": true,
909 | "license": "Apache-2.0",
910 | "engines": {
911 | "node": ">=18.18"
912 | },
913 | "funding": {
914 | "type": "github",
915 | "url": "https://github.com/sponsors/nzakas"
916 | }
917 | },
918 | "node_modules/@humanwhocodes/module-importer": {
919 | "version": "1.0.1",
920 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
921 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
922 | "dev": true,
923 | "license": "Apache-2.0",
924 | "engines": {
925 | "node": ">=12.22"
926 | },
927 | "funding": {
928 | "type": "github",
929 | "url": "https://github.com/sponsors/nzakas"
930 | }
931 | },
932 | "node_modules/@humanwhocodes/retry": {
933 | "version": "0.4.2",
934 | "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz",
935 | "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==",
936 | "dev": true,
937 | "license": "Apache-2.0",
938 | "engines": {
939 | "node": ">=18.18"
940 | },
941 | "funding": {
942 | "type": "github",
943 | "url": "https://github.com/sponsors/nzakas"
944 | }
945 | },
946 | "node_modules/@jridgewell/gen-mapping": {
947 | "version": "0.3.8",
948 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
949 | "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
950 | "dev": true,
951 | "license": "MIT",
952 | "dependencies": {
953 | "@jridgewell/set-array": "^1.2.1",
954 | "@jridgewell/sourcemap-codec": "^1.4.10",
955 | "@jridgewell/trace-mapping": "^0.3.24"
956 | },
957 | "engines": {
958 | "node": ">=6.0.0"
959 | }
960 | },
961 | "node_modules/@jridgewell/resolve-uri": {
962 | "version": "3.1.2",
963 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
964 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
965 | "dev": true,
966 | "license": "MIT",
967 | "engines": {
968 | "node": ">=6.0.0"
969 | }
970 | },
971 | "node_modules/@jridgewell/set-array": {
972 | "version": "1.2.1",
973 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
974 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
975 | "dev": true,
976 | "license": "MIT",
977 | "engines": {
978 | "node": ">=6.0.0"
979 | }
980 | },
981 | "node_modules/@jridgewell/sourcemap-codec": {
982 | "version": "1.5.0",
983 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
984 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
985 | "dev": true,
986 | "license": "MIT"
987 | },
988 | "node_modules/@jridgewell/trace-mapping": {
989 | "version": "0.3.25",
990 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
991 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
992 | "dev": true,
993 | "license": "MIT",
994 | "dependencies": {
995 | "@jridgewell/resolve-uri": "^3.1.0",
996 | "@jridgewell/sourcemap-codec": "^1.4.14"
997 | }
998 | },
999 | "node_modules/@reduxjs/toolkit": {
1000 | "version": "2.6.1",
1001 | "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.6.1.tgz",
1002 | "integrity": "sha512-SSlIqZNYhqm/oMkXbtofwZSt9lrncblzo6YcZ9zoX+zLngRBrCOjK4lNLdkNucJF58RHOWrD9txT3bT3piH7Zw==",
1003 | "license": "MIT",
1004 | "dependencies": {
1005 | "immer": "^10.0.3",
1006 | "redux": "^5.0.1",
1007 | "redux-thunk": "^3.1.0",
1008 | "reselect": "^5.1.0"
1009 | },
1010 | "peerDependencies": {
1011 | "react": "^16.9.0 || ^17.0.0 || ^18 || ^19",
1012 | "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0"
1013 | },
1014 | "peerDependenciesMeta": {
1015 | "react": {
1016 | "optional": true
1017 | },
1018 | "react-redux": {
1019 | "optional": true
1020 | }
1021 | }
1022 | },
1023 | "node_modules/@rollup/rollup-android-arm-eabi": {
1024 | "version": "4.36.0",
1025 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.36.0.tgz",
1026 | "integrity": "sha512-jgrXjjcEwN6XpZXL0HUeOVGfjXhPyxAbbhD0BlXUB+abTOpbPiN5Wb3kOT7yb+uEtATNYF5x5gIfwutmuBA26w==",
1027 | "cpu": [
1028 | "arm"
1029 | ],
1030 | "license": "MIT",
1031 | "optional": true,
1032 | "os": [
1033 | "android"
1034 | ]
1035 | },
1036 | "node_modules/@rollup/rollup-android-arm64": {
1037 | "version": "4.36.0",
1038 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.36.0.tgz",
1039 | "integrity": "sha512-NyfuLvdPdNUfUNeYKUwPwKsE5SXa2J6bCt2LdB/N+AxShnkpiczi3tcLJrm5mA+eqpy0HmaIY9F6XCa32N5yzg==",
1040 | "cpu": [
1041 | "arm64"
1042 | ],
1043 | "license": "MIT",
1044 | "optional": true,
1045 | "os": [
1046 | "android"
1047 | ]
1048 | },
1049 | "node_modules/@rollup/rollup-darwin-arm64": {
1050 | "version": "4.36.0",
1051 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.36.0.tgz",
1052 | "integrity": "sha512-JQ1Jk5G4bGrD4pWJQzWsD8I1n1mgPXq33+/vP4sk8j/z/C2siRuxZtaUA7yMTf71TCZTZl/4e1bfzwUmFb3+rw==",
1053 | "cpu": [
1054 | "arm64"
1055 | ],
1056 | "license": "MIT",
1057 | "optional": true,
1058 | "os": [
1059 | "darwin"
1060 | ]
1061 | },
1062 | "node_modules/@rollup/rollup-darwin-x64": {
1063 | "version": "4.36.0",
1064 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.36.0.tgz",
1065 | "integrity": "sha512-6c6wMZa1lrtiRsbDziCmjE53YbTkxMYhhnWnSW8R/yqsM7a6mSJ3uAVT0t8Y/DGt7gxUWYuFM4bwWk9XCJrFKA==",
1066 | "cpu": [
1067 | "x64"
1068 | ],
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 | "license": "MIT",
1083 | "optional": true,
1084 | "os": [
1085 | "freebsd"
1086 | ]
1087 | },
1088 | "node_modules/@rollup/rollup-freebsd-x64": {
1089 | "version": "4.36.0",
1090 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.36.0.tgz",
1091 | "integrity": "sha512-dVeWq1ebbvByI+ndz4IJcD4a09RJgRYmLccwlQ8bPd4olz3Y213uf1iwvc7ZaxNn2ab7bjc08PrtBgMu6nb4pQ==",
1092 | "cpu": [
1093 | "x64"
1094 | ],
1095 | "license": "MIT",
1096 | "optional": true,
1097 | "os": [
1098 | "freebsd"
1099 | ]
1100 | },
1101 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
1102 | "version": "4.36.0",
1103 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.36.0.tgz",
1104 | "integrity": "sha512-bvXVU42mOVcF4le6XSjscdXjqx8okv4n5vmwgzcmtvFdifQ5U4dXFYaCB87namDRKlUL9ybVtLQ9ztnawaSzvg==",
1105 | "cpu": [
1106 | "arm"
1107 | ],
1108 | "license": "MIT",
1109 | "optional": true,
1110 | "os": [
1111 | "linux"
1112 | ]
1113 | },
1114 | "node_modules/@rollup/rollup-linux-arm-musleabihf": {
1115 | "version": "4.36.0",
1116 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.36.0.tgz",
1117 | "integrity": "sha512-JFIQrDJYrxOnyDQGYkqnNBtjDwTgbasdbUiQvcU8JmGDfValfH1lNpng+4FWlhaVIR4KPkeddYjsVVbmJYvDcg==",
1118 | "cpu": [
1119 | "arm"
1120 | ],
1121 | "license": "MIT",
1122 | "optional": true,
1123 | "os": [
1124 | "linux"
1125 | ]
1126 | },
1127 | "node_modules/@rollup/rollup-linux-arm64-gnu": {
1128 | "version": "4.36.0",
1129 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.36.0.tgz",
1130 | "integrity": "sha512-KqjYVh3oM1bj//5X7k79PSCZ6CvaVzb7Qs7VMWS+SlWB5M8p3FqufLP9VNp4CazJ0CsPDLwVD9r3vX7Ci4J56A==",
1131 | "cpu": [
1132 | "arm64"
1133 | ],
1134 | "license": "MIT",
1135 | "optional": true,
1136 | "os": [
1137 | "linux"
1138 | ]
1139 | },
1140 | "node_modules/@rollup/rollup-linux-arm64-musl": {
1141 | "version": "4.36.0",
1142 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.36.0.tgz",
1143 | "integrity": "sha512-QiGnhScND+mAAtfHqeT+cB1S9yFnNQ/EwCg5yE3MzoaZZnIV0RV9O5alJAoJKX/sBONVKeZdMfO8QSaWEygMhw==",
1144 | "cpu": [
1145 | "arm64"
1146 | ],
1147 | "license": "MIT",
1148 | "optional": true,
1149 | "os": [
1150 | "linux"
1151 | ]
1152 | },
1153 | "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
1154 | "version": "4.36.0",
1155 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.36.0.tgz",
1156 | "integrity": "sha512-1ZPyEDWF8phd4FQtTzMh8FQwqzvIjLsl6/84gzUxnMNFBtExBtpL51H67mV9xipuxl1AEAerRBgBwFNpkw8+Lg==",
1157 | "cpu": [
1158 | "loong64"
1159 | ],
1160 | "license": "MIT",
1161 | "optional": true,
1162 | "os": [
1163 | "linux"
1164 | ]
1165 | },
1166 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
1167 | "version": "4.36.0",
1168 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.36.0.tgz",
1169 | "integrity": "sha512-VMPMEIUpPFKpPI9GZMhJrtu8rxnp6mJR3ZzQPykq4xc2GmdHj3Q4cA+7avMyegXy4n1v+Qynr9fR88BmyO74tg==",
1170 | "cpu": [
1171 | "ppc64"
1172 | ],
1173 | "license": "MIT",
1174 | "optional": true,
1175 | "os": [
1176 | "linux"
1177 | ]
1178 | },
1179 | "node_modules/@rollup/rollup-linux-riscv64-gnu": {
1180 | "version": "4.36.0",
1181 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.36.0.tgz",
1182 | "integrity": "sha512-ttE6ayb/kHwNRJGYLpuAvB7SMtOeQnVXEIpMtAvx3kepFQeowVED0n1K9nAdraHUPJ5hydEMxBpIR7o4nrm8uA==",
1183 | "cpu": [
1184 | "riscv64"
1185 | ],
1186 | "license": "MIT",
1187 | "optional": true,
1188 | "os": [
1189 | "linux"
1190 | ]
1191 | },
1192 | "node_modules/@rollup/rollup-linux-s390x-gnu": {
1193 | "version": "4.36.0",
1194 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.36.0.tgz",
1195 | "integrity": "sha512-4a5gf2jpS0AIe7uBjxDeUMNcFmaRTbNv7NxI5xOCs4lhzsVyGR/0qBXduPnoWf6dGC365saTiwag8hP1imTgag==",
1196 | "cpu": [
1197 | "s390x"
1198 | ],
1199 | "license": "MIT",
1200 | "optional": true,
1201 | "os": [
1202 | "linux"
1203 | ]
1204 | },
1205 | "node_modules/@rollup/rollup-linux-x64-gnu": {
1206 | "version": "4.36.0",
1207 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.36.0.tgz",
1208 | "integrity": "sha512-5KtoW8UWmwFKQ96aQL3LlRXX16IMwyzMq/jSSVIIyAANiE1doaQsx/KRyhAvpHlPjPiSU/AYX/8m+lQ9VToxFQ==",
1209 | "cpu": [
1210 | "x64"
1211 | ],
1212 | "license": "MIT",
1213 | "optional": true,
1214 | "os": [
1215 | "linux"
1216 | ]
1217 | },
1218 | "node_modules/@rollup/rollup-linux-x64-musl": {
1219 | "version": "4.36.0",
1220 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.36.0.tgz",
1221 | "integrity": "sha512-sycrYZPrv2ag4OCvaN5js+f01eoZ2U+RmT5as8vhxiFz+kxwlHrsxOwKPSA8WyS+Wc6Epid9QeI/IkQ9NkgYyQ==",
1222 | "cpu": [
1223 | "x64"
1224 | ],
1225 | "license": "MIT",
1226 | "optional": true,
1227 | "os": [
1228 | "linux"
1229 | ]
1230 | },
1231 | "node_modules/@rollup/rollup-win32-arm64-msvc": {
1232 | "version": "4.36.0",
1233 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.36.0.tgz",
1234 | "integrity": "sha512-qbqt4N7tokFwwSVlWDsjfoHgviS3n/vZ8LK0h1uLG9TYIRuUTJC88E1xb3LM2iqZ/WTqNQjYrtmtGmrmmawB6A==",
1235 | "cpu": [
1236 | "arm64"
1237 | ],
1238 | "license": "MIT",
1239 | "optional": true,
1240 | "os": [
1241 | "win32"
1242 | ]
1243 | },
1244 | "node_modules/@rollup/rollup-win32-ia32-msvc": {
1245 | "version": "4.36.0",
1246 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.36.0.tgz",
1247 | "integrity": "sha512-t+RY0JuRamIocMuQcfwYSOkmdX9dtkr1PbhKW42AMvaDQa+jOdpUYysroTF/nuPpAaQMWp7ye+ndlmmthieJrQ==",
1248 | "cpu": [
1249 | "ia32"
1250 | ],
1251 | "license": "MIT",
1252 | "optional": true,
1253 | "os": [
1254 | "win32"
1255 | ]
1256 | },
1257 | "node_modules/@rollup/rollup-win32-x64-msvc": {
1258 | "version": "4.36.0",
1259 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.36.0.tgz",
1260 | "integrity": "sha512-aRXd7tRZkWLqGbChgcMMDEHjOKudo1kChb1Jt1IfR8cY/KIpgNviLeJy5FUb9IpSuQj8dU2fAYNMPW/hLKOSTw==",
1261 | "cpu": [
1262 | "x64"
1263 | ],
1264 | "license": "MIT",
1265 | "optional": true,
1266 | "os": [
1267 | "win32"
1268 | ]
1269 | },
1270 | "node_modules/@tailwindcss/node": {
1271 | "version": "4.0.15",
1272 | "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.15.tgz",
1273 | "integrity": "sha512-IODaJjNmiasfZX3IoS+4Em3iu0fD2HS0/tgrnkYfW4hyUor01Smnr5eY3jc4rRgaTDrJlDmBTHbFO0ETTDaxWA==",
1274 | "license": "MIT",
1275 | "dependencies": {
1276 | "enhanced-resolve": "^5.18.1",
1277 | "jiti": "^2.4.2",
1278 | "tailwindcss": "4.0.15"
1279 | }
1280 | },
1281 | "node_modules/@tailwindcss/oxide": {
1282 | "version": "4.0.15",
1283 | "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.15.tgz",
1284 | "integrity": "sha512-e0uHrKfPu7JJGMfjwVNyt5M0u+OP8kUmhACwIRlM+JNBuReDVQ63yAD1NWe5DwJtdaHjugNBil76j+ks3zlk6g==",
1285 | "license": "MIT",
1286 | "engines": {
1287 | "node": ">= 10"
1288 | },
1289 | "optionalDependencies": {
1290 | "@tailwindcss/oxide-android-arm64": "4.0.15",
1291 | "@tailwindcss/oxide-darwin-arm64": "4.0.15",
1292 | "@tailwindcss/oxide-darwin-x64": "4.0.15",
1293 | "@tailwindcss/oxide-freebsd-x64": "4.0.15",
1294 | "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.15",
1295 | "@tailwindcss/oxide-linux-arm64-gnu": "4.0.15",
1296 | "@tailwindcss/oxide-linux-arm64-musl": "4.0.15",
1297 | "@tailwindcss/oxide-linux-x64-gnu": "4.0.15",
1298 | "@tailwindcss/oxide-linux-x64-musl": "4.0.15",
1299 | "@tailwindcss/oxide-win32-arm64-msvc": "4.0.15",
1300 | "@tailwindcss/oxide-win32-x64-msvc": "4.0.15"
1301 | }
1302 | },
1303 | "node_modules/@tailwindcss/oxide-android-arm64": {
1304 | "version": "4.0.15",
1305 | "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.15.tgz",
1306 | "integrity": "sha512-EBuyfSKkom7N+CB3A+7c0m4+qzKuiN0WCvzPvj5ZoRu4NlQadg/mthc1tl5k9b5ffRGsbDvP4k21azU4VwVk3Q==",
1307 | "cpu": [
1308 | "arm64"
1309 | ],
1310 | "license": "MIT",
1311 | "optional": true,
1312 | "os": [
1313 | "android"
1314 | ],
1315 | "engines": {
1316 | "node": ">= 10"
1317 | }
1318 | },
1319 | "node_modules/@tailwindcss/oxide-darwin-arm64": {
1320 | "version": "4.0.15",
1321 | "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.15.tgz",
1322 | "integrity": "sha512-ObVAnEpLepMhV9VoO0JSit66jiN5C4YCqW3TflsE9boo2Z7FIjV80RFbgeL2opBhtxbaNEDa6D0/hq/EP03kgQ==",
1323 | "cpu": [
1324 | "arm64"
1325 | ],
1326 | "license": "MIT",
1327 | "optional": true,
1328 | "os": [
1329 | "darwin"
1330 | ],
1331 | "engines": {
1332 | "node": ">= 10"
1333 | }
1334 | },
1335 | "node_modules/@tailwindcss/oxide-darwin-x64": {
1336 | "version": "4.0.15",
1337 | "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.15.tgz",
1338 | "integrity": "sha512-IElwoFhUinOr9MyKmGTPNi1Rwdh68JReFgYWibPWTGuevkHkLWKEflZc2jtI5lWZ5U9JjUnUfnY43I4fEXrc4g==",
1339 | "cpu": [
1340 | "x64"
1341 | ],
1342 | "license": "MIT",
1343 | "optional": true,
1344 | "os": [
1345 | "darwin"
1346 | ],
1347 | "engines": {
1348 | "node": ">= 10"
1349 | }
1350 | },
1351 | "node_modules/@tailwindcss/oxide-freebsd-x64": {
1352 | "version": "4.0.15",
1353 | "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.15.tgz",
1354 | "integrity": "sha512-6BLLqyx7SIYRBOnTZ8wgfXANLJV5TQd3PevRJZp0vn42eO58A2LykRKdvL1qyPfdpmEVtF+uVOEZ4QTMqDRAWA==",
1355 | "cpu": [
1356 | "x64"
1357 | ],
1358 | "license": "MIT",
1359 | "optional": true,
1360 | "os": [
1361 | "freebsd"
1362 | ],
1363 | "engines": {
1364 | "node": ">= 10"
1365 | }
1366 | },
1367 | "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
1368 | "version": "4.0.15",
1369 | "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.15.tgz",
1370 | "integrity": "sha512-Zy63EVqO9241Pfg6G0IlRIWyY5vNcWrL5dd2WAKVJZRQVeolXEf1KfjkyeAAlErDj72cnyXObEZjMoPEKHpdNw==",
1371 | "cpu": [
1372 | "arm"
1373 | ],
1374 | "license": "MIT",
1375 | "optional": true,
1376 | "os": [
1377 | "linux"
1378 | ],
1379 | "engines": {
1380 | "node": ">= 10"
1381 | }
1382 | },
1383 | "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
1384 | "version": "4.0.15",
1385 | "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.15.tgz",
1386 | "integrity": "sha512-2NemGQeaTbtIp1Z2wyerbVEJZTkAWhMDOhhR5z/zJ75yMNf8yLnE+sAlyf6yGDNr+1RqvWrRhhCFt7i0CIxe4Q==",
1387 | "cpu": [
1388 | "arm64"
1389 | ],
1390 | "license": "MIT",
1391 | "optional": true,
1392 | "os": [
1393 | "linux"
1394 | ],
1395 | "engines": {
1396 | "node": ">= 10"
1397 | }
1398 | },
1399 | "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
1400 | "version": "4.0.15",
1401 | "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.15.tgz",
1402 | "integrity": "sha512-342GVnhH/6PkVgKtEzvNVuQ4D+Q7B7qplvuH20Cfz9qEtydG6IQczTZ5IT4JPlh931MG1NUCVxg+CIorr1WJyw==",
1403 | "cpu": [
1404 | "arm64"
1405 | ],
1406 | "license": "MIT",
1407 | "optional": true,
1408 | "os": [
1409 | "linux"
1410 | ],
1411 | "engines": {
1412 | "node": ">= 10"
1413 | }
1414 | },
1415 | "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
1416 | "version": "4.0.15",
1417 | "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.15.tgz",
1418 | "integrity": "sha512-g76GxlKH124RuGqacCEFc2nbzRl7bBrlC8qDQMiUABkiifDRHOIUjgKbLNG4RuR9hQAD/MKsqZ7A8L08zsoBrw==",
1419 | "cpu": [
1420 | "x64"
1421 | ],
1422 | "license": "MIT",
1423 | "optional": true,
1424 | "os": [
1425 | "linux"
1426 | ],
1427 | "engines": {
1428 | "node": ">= 10"
1429 | }
1430 | },
1431 | "node_modules/@tailwindcss/oxide-linux-x64-musl": {
1432 | "version": "4.0.15",
1433 | "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.15.tgz",
1434 | "integrity": "sha512-Gg/Y1XrKEvKpq6WeNt2h8rMIKOBj/W3mNa5NMvkQgMC7iO0+UNLrYmt6zgZufht66HozNpn+tJMbbkZ5a3LczA==",
1435 | "cpu": [
1436 | "x64"
1437 | ],
1438 | "license": "MIT",
1439 | "optional": true,
1440 | "os": [
1441 | "linux"
1442 | ],
1443 | "engines": {
1444 | "node": ">= 10"
1445 | }
1446 | },
1447 | "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
1448 | "version": "4.0.15",
1449 | "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.15.tgz",
1450 | "integrity": "sha512-7QtSSJwYZ7ZK1phVgcNZpuf7c7gaCj8Wb0xjliligT5qCGCp79OV2n3SJummVZdw4fbTNKUOYMO7m1GinppZyA==",
1451 | "cpu": [
1452 | "arm64"
1453 | ],
1454 | "license": "MIT",
1455 | "optional": true,
1456 | "os": [
1457 | "win32"
1458 | ],
1459 | "engines": {
1460 | "node": ">= 10"
1461 | }
1462 | },
1463 | "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
1464 | "version": "4.0.15",
1465 | "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.15.tgz",
1466 | "integrity": "sha512-JQ5H+5MLhOjpgNp6KomouE0ZuKmk3hO5h7/ClMNAQ8gZI2zkli3IH8ZqLbd2DVfXDbdxN2xvooIEeIlkIoSCqw==",
1467 | "cpu": [
1468 | "x64"
1469 | ],
1470 | "license": "MIT",
1471 | "optional": true,
1472 | "os": [
1473 | "win32"
1474 | ],
1475 | "engines": {
1476 | "node": ">= 10"
1477 | }
1478 | },
1479 | "node_modules/@tailwindcss/vite": {
1480 | "version": "4.0.15",
1481 | "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.0.15.tgz",
1482 | "integrity": "sha512-JRexava80NijI8cTcLXNM3nQL5A0ptTHI8oJLLe8z1MpNB6p5J4WCdJJP8RoyHu8/eB1JzEdbpH86eGfbuaezQ==",
1483 | "license": "MIT",
1484 | "dependencies": {
1485 | "@tailwindcss/node": "4.0.15",
1486 | "@tailwindcss/oxide": "4.0.15",
1487 | "lightningcss": "1.29.2",
1488 | "tailwindcss": "4.0.15"
1489 | },
1490 | "peerDependencies": {
1491 | "vite": "^5.2.0 || ^6"
1492 | }
1493 | },
1494 | "node_modules/@types/babel__core": {
1495 | "version": "7.20.5",
1496 | "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
1497 | "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
1498 | "dev": true,
1499 | "license": "MIT",
1500 | "dependencies": {
1501 | "@babel/parser": "^7.20.7",
1502 | "@babel/types": "^7.20.7",
1503 | "@types/babel__generator": "*",
1504 | "@types/babel__template": "*",
1505 | "@types/babel__traverse": "*"
1506 | }
1507 | },
1508 | "node_modules/@types/babel__generator": {
1509 | "version": "7.6.8",
1510 | "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz",
1511 | "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
1512 | "dev": true,
1513 | "license": "MIT",
1514 | "dependencies": {
1515 | "@babel/types": "^7.0.0"
1516 | }
1517 | },
1518 | "node_modules/@types/babel__template": {
1519 | "version": "7.4.4",
1520 | "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
1521 | "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
1522 | "dev": true,
1523 | "license": "MIT",
1524 | "dependencies": {
1525 | "@babel/parser": "^7.1.0",
1526 | "@babel/types": "^7.0.0"
1527 | }
1528 | },
1529 | "node_modules/@types/babel__traverse": {
1530 | "version": "7.20.6",
1531 | "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz",
1532 | "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==",
1533 | "dev": true,
1534 | "license": "MIT",
1535 | "dependencies": {
1536 | "@babel/types": "^7.20.7"
1537 | }
1538 | },
1539 | "node_modules/@types/cookie": {
1540 | "version": "0.6.0",
1541 | "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
1542 | "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
1543 | "license": "MIT"
1544 | },
1545 | "node_modules/@types/estree": {
1546 | "version": "1.0.6",
1547 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
1548 | "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
1549 | "license": "MIT"
1550 | },
1551 | "node_modules/@types/json-schema": {
1552 | "version": "7.0.15",
1553 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
1554 | "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
1555 | "dev": true,
1556 | "license": "MIT"
1557 | },
1558 | "node_modules/@types/react": {
1559 | "version": "19.0.12",
1560 | "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.12.tgz",
1561 | "integrity": "sha512-V6Ar115dBDrjbtXSrS+/Oruobc+qVbbUxDFC1RSbRqLt5SYvxxyIDrSC85RWml54g+jfNeEMZhEj7wW07ONQhA==",
1562 | "devOptional": true,
1563 | "license": "MIT",
1564 | "dependencies": {
1565 | "csstype": "^3.0.2"
1566 | }
1567 | },
1568 | "node_modules/@types/react-dom": {
1569 | "version": "19.0.4",
1570 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.4.tgz",
1571 | "integrity": "sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==",
1572 | "dev": true,
1573 | "license": "MIT",
1574 | "peerDependencies": {
1575 | "@types/react": "^19.0.0"
1576 | }
1577 | },
1578 | "node_modules/@types/use-sync-external-store": {
1579 | "version": "0.0.6",
1580 | "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz",
1581 | "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==",
1582 | "license": "MIT"
1583 | },
1584 | "node_modules/@vitejs/plugin-react": {
1585 | "version": "4.3.4",
1586 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz",
1587 | "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==",
1588 | "dev": true,
1589 | "license": "MIT",
1590 | "dependencies": {
1591 | "@babel/core": "^7.26.0",
1592 | "@babel/plugin-transform-react-jsx-self": "^7.25.9",
1593 | "@babel/plugin-transform-react-jsx-source": "^7.25.9",
1594 | "@types/babel__core": "^7.20.5",
1595 | "react-refresh": "^0.14.2"
1596 | },
1597 | "engines": {
1598 | "node": "^14.18.0 || >=16.0.0"
1599 | },
1600 | "peerDependencies": {
1601 | "vite": "^4.2.0 || ^5.0.0 || ^6.0.0"
1602 | }
1603 | },
1604 | "node_modules/acorn": {
1605 | "version": "8.14.1",
1606 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
1607 | "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
1608 | "dev": true,
1609 | "license": "MIT",
1610 | "bin": {
1611 | "acorn": "bin/acorn"
1612 | },
1613 | "engines": {
1614 | "node": ">=0.4.0"
1615 | }
1616 | },
1617 | "node_modules/acorn-jsx": {
1618 | "version": "5.3.2",
1619 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
1620 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
1621 | "dev": true,
1622 | "license": "MIT",
1623 | "peerDependencies": {
1624 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
1625 | }
1626 | },
1627 | "node_modules/ajv": {
1628 | "version": "6.12.6",
1629 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
1630 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
1631 | "dev": true,
1632 | "license": "MIT",
1633 | "dependencies": {
1634 | "fast-deep-equal": "^3.1.1",
1635 | "fast-json-stable-stringify": "^2.0.0",
1636 | "json-schema-traverse": "^0.4.1",
1637 | "uri-js": "^4.2.2"
1638 | },
1639 | "funding": {
1640 | "type": "github",
1641 | "url": "https://github.com/sponsors/epoberezkin"
1642 | }
1643 | },
1644 | "node_modules/ansi-styles": {
1645 | "version": "4.3.0",
1646 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
1647 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
1648 | "dev": true,
1649 | "license": "MIT",
1650 | "dependencies": {
1651 | "color-convert": "^2.0.1"
1652 | },
1653 | "engines": {
1654 | "node": ">=8"
1655 | },
1656 | "funding": {
1657 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
1658 | }
1659 | },
1660 | "node_modules/argparse": {
1661 | "version": "2.0.1",
1662 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
1663 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
1664 | "dev": true,
1665 | "license": "Python-2.0"
1666 | },
1667 | "node_modules/asynckit": {
1668 | "version": "0.4.0",
1669 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
1670 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
1671 | "license": "MIT"
1672 | },
1673 | "node_modules/axios": {
1674 | "version": "1.8.4",
1675 | "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz",
1676 | "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==",
1677 | "license": "MIT",
1678 | "dependencies": {
1679 | "follow-redirects": "^1.15.6",
1680 | "form-data": "^4.0.0",
1681 | "proxy-from-env": "^1.1.0"
1682 | }
1683 | },
1684 | "node_modules/balanced-match": {
1685 | "version": "1.0.2",
1686 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
1687 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
1688 | "dev": true,
1689 | "license": "MIT"
1690 | },
1691 | "node_modules/brace-expansion": {
1692 | "version": "1.1.11",
1693 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
1694 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
1695 | "dev": true,
1696 | "license": "MIT",
1697 | "dependencies": {
1698 | "balanced-match": "^1.0.0",
1699 | "concat-map": "0.0.1"
1700 | }
1701 | },
1702 | "node_modules/browserslist": {
1703 | "version": "4.24.4",
1704 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
1705 | "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
1706 | "dev": true,
1707 | "funding": [
1708 | {
1709 | "type": "opencollective",
1710 | "url": "https://opencollective.com/browserslist"
1711 | },
1712 | {
1713 | "type": "tidelift",
1714 | "url": "https://tidelift.com/funding/github/npm/browserslist"
1715 | },
1716 | {
1717 | "type": "github",
1718 | "url": "https://github.com/sponsors/ai"
1719 | }
1720 | ],
1721 | "license": "MIT",
1722 | "dependencies": {
1723 | "caniuse-lite": "^1.0.30001688",
1724 | "electron-to-chromium": "^1.5.73",
1725 | "node-releases": "^2.0.19",
1726 | "update-browserslist-db": "^1.1.1"
1727 | },
1728 | "bin": {
1729 | "browserslist": "cli.js"
1730 | },
1731 | "engines": {
1732 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
1733 | }
1734 | },
1735 | "node_modules/call-bind-apply-helpers": {
1736 | "version": "1.0.2",
1737 | "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
1738 | "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
1739 | "license": "MIT",
1740 | "dependencies": {
1741 | "es-errors": "^1.3.0",
1742 | "function-bind": "^1.1.2"
1743 | },
1744 | "engines": {
1745 | "node": ">= 0.4"
1746 | }
1747 | },
1748 | "node_modules/callsites": {
1749 | "version": "3.1.0",
1750 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
1751 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
1752 | "dev": true,
1753 | "license": "MIT",
1754 | "engines": {
1755 | "node": ">=6"
1756 | }
1757 | },
1758 | "node_modules/caniuse-lite": {
1759 | "version": "1.0.30001706",
1760 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001706.tgz",
1761 | "integrity": "sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==",
1762 | "dev": true,
1763 | "funding": [
1764 | {
1765 | "type": "opencollective",
1766 | "url": "https://opencollective.com/browserslist"
1767 | },
1768 | {
1769 | "type": "tidelift",
1770 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
1771 | },
1772 | {
1773 | "type": "github",
1774 | "url": "https://github.com/sponsors/ai"
1775 | }
1776 | ],
1777 | "license": "CC-BY-4.0"
1778 | },
1779 | "node_modules/chalk": {
1780 | "version": "4.1.2",
1781 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
1782 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
1783 | "dev": true,
1784 | "license": "MIT",
1785 | "dependencies": {
1786 | "ansi-styles": "^4.1.0",
1787 | "supports-color": "^7.1.0"
1788 | },
1789 | "engines": {
1790 | "node": ">=10"
1791 | },
1792 | "funding": {
1793 | "url": "https://github.com/chalk/chalk?sponsor=1"
1794 | }
1795 | },
1796 | "node_modules/color-convert": {
1797 | "version": "2.0.1",
1798 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1799 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1800 | "dev": true,
1801 | "license": "MIT",
1802 | "dependencies": {
1803 | "color-name": "~1.1.4"
1804 | },
1805 | "engines": {
1806 | "node": ">=7.0.0"
1807 | }
1808 | },
1809 | "node_modules/color-name": {
1810 | "version": "1.1.4",
1811 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1812 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
1813 | "dev": true,
1814 | "license": "MIT"
1815 | },
1816 | "node_modules/combined-stream": {
1817 | "version": "1.0.8",
1818 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
1819 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
1820 | "license": "MIT",
1821 | "dependencies": {
1822 | "delayed-stream": "~1.0.0"
1823 | },
1824 | "engines": {
1825 | "node": ">= 0.8"
1826 | }
1827 | },
1828 | "node_modules/concat-map": {
1829 | "version": "0.0.1",
1830 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
1831 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
1832 | "dev": true,
1833 | "license": "MIT"
1834 | },
1835 | "node_modules/convert-source-map": {
1836 | "version": "2.0.0",
1837 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
1838 | "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
1839 | "dev": true,
1840 | "license": "MIT"
1841 | },
1842 | "node_modules/cookie": {
1843 | "version": "1.0.2",
1844 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz",
1845 | "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==",
1846 | "license": "MIT",
1847 | "engines": {
1848 | "node": ">=18"
1849 | }
1850 | },
1851 | "node_modules/cross-spawn": {
1852 | "version": "7.0.6",
1853 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
1854 | "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
1855 | "dev": true,
1856 | "license": "MIT",
1857 | "dependencies": {
1858 | "path-key": "^3.1.0",
1859 | "shebang-command": "^2.0.0",
1860 | "which": "^2.0.1"
1861 | },
1862 | "engines": {
1863 | "node": ">= 8"
1864 | }
1865 | },
1866 | "node_modules/csstype": {
1867 | "version": "3.1.3",
1868 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
1869 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
1870 | "devOptional": true,
1871 | "license": "MIT"
1872 | },
1873 | "node_modules/debug": {
1874 | "version": "4.4.0",
1875 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
1876 | "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
1877 | "dev": true,
1878 | "license": "MIT",
1879 | "dependencies": {
1880 | "ms": "^2.1.3"
1881 | },
1882 | "engines": {
1883 | "node": ">=6.0"
1884 | },
1885 | "peerDependenciesMeta": {
1886 | "supports-color": {
1887 | "optional": true
1888 | }
1889 | }
1890 | },
1891 | "node_modules/deep-is": {
1892 | "version": "0.1.4",
1893 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
1894 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
1895 | "dev": true,
1896 | "license": "MIT"
1897 | },
1898 | "node_modules/delayed-stream": {
1899 | "version": "1.0.0",
1900 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
1901 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
1902 | "license": "MIT",
1903 | "engines": {
1904 | "node": ">=0.4.0"
1905 | }
1906 | },
1907 | "node_modules/detect-libc": {
1908 | "version": "2.0.3",
1909 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
1910 | "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
1911 | "license": "Apache-2.0",
1912 | "engines": {
1913 | "node": ">=8"
1914 | }
1915 | },
1916 | "node_modules/dunder-proto": {
1917 | "version": "1.0.1",
1918 | "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
1919 | "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
1920 | "license": "MIT",
1921 | "dependencies": {
1922 | "call-bind-apply-helpers": "^1.0.1",
1923 | "es-errors": "^1.3.0",
1924 | "gopd": "^1.2.0"
1925 | },
1926 | "engines": {
1927 | "node": ">= 0.4"
1928 | }
1929 | },
1930 | "node_modules/electron-to-chromium": {
1931 | "version": "1.5.123",
1932 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.123.tgz",
1933 | "integrity": "sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==",
1934 | "dev": true,
1935 | "license": "ISC"
1936 | },
1937 | "node_modules/enhanced-resolve": {
1938 | "version": "5.18.1",
1939 | "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz",
1940 | "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==",
1941 | "license": "MIT",
1942 | "dependencies": {
1943 | "graceful-fs": "^4.2.4",
1944 | "tapable": "^2.2.0"
1945 | },
1946 | "engines": {
1947 | "node": ">=10.13.0"
1948 | }
1949 | },
1950 | "node_modules/es-define-property": {
1951 | "version": "1.0.1",
1952 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
1953 | "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
1954 | "license": "MIT",
1955 | "engines": {
1956 | "node": ">= 0.4"
1957 | }
1958 | },
1959 | "node_modules/es-errors": {
1960 | "version": "1.3.0",
1961 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
1962 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
1963 | "license": "MIT",
1964 | "engines": {
1965 | "node": ">= 0.4"
1966 | }
1967 | },
1968 | "node_modules/es-object-atoms": {
1969 | "version": "1.1.1",
1970 | "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
1971 | "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
1972 | "license": "MIT",
1973 | "dependencies": {
1974 | "es-errors": "^1.3.0"
1975 | },
1976 | "engines": {
1977 | "node": ">= 0.4"
1978 | }
1979 | },
1980 | "node_modules/es-set-tostringtag": {
1981 | "version": "2.1.0",
1982 | "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
1983 | "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
1984 | "license": "MIT",
1985 | "dependencies": {
1986 | "es-errors": "^1.3.0",
1987 | "get-intrinsic": "^1.2.6",
1988 | "has-tostringtag": "^1.0.2",
1989 | "hasown": "^2.0.2"
1990 | },
1991 | "engines": {
1992 | "node": ">= 0.4"
1993 | }
1994 | },
1995 | "node_modules/esbuild": {
1996 | "version": "0.25.1",
1997 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz",
1998 | "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==",
1999 | "hasInstallScript": true,
2000 | "license": "MIT",
2001 | "bin": {
2002 | "esbuild": "bin/esbuild"
2003 | },
2004 | "engines": {
2005 | "node": ">=18"
2006 | },
2007 | "optionalDependencies": {
2008 | "@esbuild/aix-ppc64": "0.25.1",
2009 | "@esbuild/android-arm": "0.25.1",
2010 | "@esbuild/android-arm64": "0.25.1",
2011 | "@esbuild/android-x64": "0.25.1",
2012 | "@esbuild/darwin-arm64": "0.25.1",
2013 | "@esbuild/darwin-x64": "0.25.1",
2014 | "@esbuild/freebsd-arm64": "0.25.1",
2015 | "@esbuild/freebsd-x64": "0.25.1",
2016 | "@esbuild/linux-arm": "0.25.1",
2017 | "@esbuild/linux-arm64": "0.25.1",
2018 | "@esbuild/linux-ia32": "0.25.1",
2019 | "@esbuild/linux-loong64": "0.25.1",
2020 | "@esbuild/linux-mips64el": "0.25.1",
2021 | "@esbuild/linux-ppc64": "0.25.1",
2022 | "@esbuild/linux-riscv64": "0.25.1",
2023 | "@esbuild/linux-s390x": "0.25.1",
2024 | "@esbuild/linux-x64": "0.25.1",
2025 | "@esbuild/netbsd-arm64": "0.25.1",
2026 | "@esbuild/netbsd-x64": "0.25.1",
2027 | "@esbuild/openbsd-arm64": "0.25.1",
2028 | "@esbuild/openbsd-x64": "0.25.1",
2029 | "@esbuild/sunos-x64": "0.25.1",
2030 | "@esbuild/win32-arm64": "0.25.1",
2031 | "@esbuild/win32-ia32": "0.25.1",
2032 | "@esbuild/win32-x64": "0.25.1"
2033 | }
2034 | },
2035 | "node_modules/escalade": {
2036 | "version": "3.2.0",
2037 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
2038 | "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
2039 | "dev": true,
2040 | "license": "MIT",
2041 | "engines": {
2042 | "node": ">=6"
2043 | }
2044 | },
2045 | "node_modules/escape-string-regexp": {
2046 | "version": "4.0.0",
2047 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
2048 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
2049 | "dev": true,
2050 | "license": "MIT",
2051 | "engines": {
2052 | "node": ">=10"
2053 | },
2054 | "funding": {
2055 | "url": "https://github.com/sponsors/sindresorhus"
2056 | }
2057 | },
2058 | "node_modules/eslint": {
2059 | "version": "9.22.0",
2060 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.22.0.tgz",
2061 | "integrity": "sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ==",
2062 | "dev": true,
2063 | "license": "MIT",
2064 | "dependencies": {
2065 | "@eslint-community/eslint-utils": "^4.2.0",
2066 | "@eslint-community/regexpp": "^4.12.1",
2067 | "@eslint/config-array": "^0.19.2",
2068 | "@eslint/config-helpers": "^0.1.0",
2069 | "@eslint/core": "^0.12.0",
2070 | "@eslint/eslintrc": "^3.3.0",
2071 | "@eslint/js": "9.22.0",
2072 | "@eslint/plugin-kit": "^0.2.7",
2073 | "@humanfs/node": "^0.16.6",
2074 | "@humanwhocodes/module-importer": "^1.0.1",
2075 | "@humanwhocodes/retry": "^0.4.2",
2076 | "@types/estree": "^1.0.6",
2077 | "@types/json-schema": "^7.0.15",
2078 | "ajv": "^6.12.4",
2079 | "chalk": "^4.0.0",
2080 | "cross-spawn": "^7.0.6",
2081 | "debug": "^4.3.2",
2082 | "escape-string-regexp": "^4.0.0",
2083 | "eslint-scope": "^8.3.0",
2084 | "eslint-visitor-keys": "^4.2.0",
2085 | "espree": "^10.3.0",
2086 | "esquery": "^1.5.0",
2087 | "esutils": "^2.0.2",
2088 | "fast-deep-equal": "^3.1.3",
2089 | "file-entry-cache": "^8.0.0",
2090 | "find-up": "^5.0.0",
2091 | "glob-parent": "^6.0.2",
2092 | "ignore": "^5.2.0",
2093 | "imurmurhash": "^0.1.4",
2094 | "is-glob": "^4.0.0",
2095 | "json-stable-stringify-without-jsonify": "^1.0.1",
2096 | "lodash.merge": "^4.6.2",
2097 | "minimatch": "^3.1.2",
2098 | "natural-compare": "^1.4.0",
2099 | "optionator": "^0.9.3"
2100 | },
2101 | "bin": {
2102 | "eslint": "bin/eslint.js"
2103 | },
2104 | "engines": {
2105 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2106 | },
2107 | "funding": {
2108 | "url": "https://eslint.org/donate"
2109 | },
2110 | "peerDependencies": {
2111 | "jiti": "*"
2112 | },
2113 | "peerDependenciesMeta": {
2114 | "jiti": {
2115 | "optional": true
2116 | }
2117 | }
2118 | },
2119 | "node_modules/eslint-plugin-react-hooks": {
2120 | "version": "5.2.0",
2121 | "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz",
2122 | "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==",
2123 | "dev": true,
2124 | "license": "MIT",
2125 | "engines": {
2126 | "node": ">=10"
2127 | },
2128 | "peerDependencies": {
2129 | "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
2130 | }
2131 | },
2132 | "node_modules/eslint-plugin-react-refresh": {
2133 | "version": "0.4.19",
2134 | "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.19.tgz",
2135 | "integrity": "sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==",
2136 | "dev": true,
2137 | "license": "MIT",
2138 | "peerDependencies": {
2139 | "eslint": ">=8.40"
2140 | }
2141 | },
2142 | "node_modules/eslint-scope": {
2143 | "version": "8.3.0",
2144 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz",
2145 | "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
2146 | "dev": true,
2147 | "license": "BSD-2-Clause",
2148 | "dependencies": {
2149 | "esrecurse": "^4.3.0",
2150 | "estraverse": "^5.2.0"
2151 | },
2152 | "engines": {
2153 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2154 | },
2155 | "funding": {
2156 | "url": "https://opencollective.com/eslint"
2157 | }
2158 | },
2159 | "node_modules/eslint-visitor-keys": {
2160 | "version": "4.2.0",
2161 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
2162 | "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
2163 | "dev": true,
2164 | "license": "Apache-2.0",
2165 | "engines": {
2166 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2167 | },
2168 | "funding": {
2169 | "url": "https://opencollective.com/eslint"
2170 | }
2171 | },
2172 | "node_modules/espree": {
2173 | "version": "10.3.0",
2174 | "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
2175 | "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
2176 | "dev": true,
2177 | "license": "BSD-2-Clause",
2178 | "dependencies": {
2179 | "acorn": "^8.14.0",
2180 | "acorn-jsx": "^5.3.2",
2181 | "eslint-visitor-keys": "^4.2.0"
2182 | },
2183 | "engines": {
2184 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2185 | },
2186 | "funding": {
2187 | "url": "https://opencollective.com/eslint"
2188 | }
2189 | },
2190 | "node_modules/esquery": {
2191 | "version": "1.6.0",
2192 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
2193 | "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
2194 | "dev": true,
2195 | "license": "BSD-3-Clause",
2196 | "dependencies": {
2197 | "estraverse": "^5.1.0"
2198 | },
2199 | "engines": {
2200 | "node": ">=0.10"
2201 | }
2202 | },
2203 | "node_modules/esrecurse": {
2204 | "version": "4.3.0",
2205 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
2206 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
2207 | "dev": true,
2208 | "license": "BSD-2-Clause",
2209 | "dependencies": {
2210 | "estraverse": "^5.2.0"
2211 | },
2212 | "engines": {
2213 | "node": ">=4.0"
2214 | }
2215 | },
2216 | "node_modules/estraverse": {
2217 | "version": "5.3.0",
2218 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
2219 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
2220 | "dev": true,
2221 | "license": "BSD-2-Clause",
2222 | "engines": {
2223 | "node": ">=4.0"
2224 | }
2225 | },
2226 | "node_modules/esutils": {
2227 | "version": "2.0.3",
2228 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
2229 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
2230 | "dev": true,
2231 | "license": "BSD-2-Clause",
2232 | "engines": {
2233 | "node": ">=0.10.0"
2234 | }
2235 | },
2236 | "node_modules/fast-deep-equal": {
2237 | "version": "3.1.3",
2238 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
2239 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
2240 | "dev": true,
2241 | "license": "MIT"
2242 | },
2243 | "node_modules/fast-json-stable-stringify": {
2244 | "version": "2.1.0",
2245 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
2246 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
2247 | "dev": true,
2248 | "license": "MIT"
2249 | },
2250 | "node_modules/fast-levenshtein": {
2251 | "version": "2.0.6",
2252 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
2253 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
2254 | "dev": true,
2255 | "license": "MIT"
2256 | },
2257 | "node_modules/file-entry-cache": {
2258 | "version": "8.0.0",
2259 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
2260 | "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
2261 | "dev": true,
2262 | "license": "MIT",
2263 | "dependencies": {
2264 | "flat-cache": "^4.0.0"
2265 | },
2266 | "engines": {
2267 | "node": ">=16.0.0"
2268 | }
2269 | },
2270 | "node_modules/find-up": {
2271 | "version": "5.0.0",
2272 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
2273 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
2274 | "dev": true,
2275 | "license": "MIT",
2276 | "dependencies": {
2277 | "locate-path": "^6.0.0",
2278 | "path-exists": "^4.0.0"
2279 | },
2280 | "engines": {
2281 | "node": ">=10"
2282 | },
2283 | "funding": {
2284 | "url": "https://github.com/sponsors/sindresorhus"
2285 | }
2286 | },
2287 | "node_modules/flat-cache": {
2288 | "version": "4.0.1",
2289 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
2290 | "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
2291 | "dev": true,
2292 | "license": "MIT",
2293 | "dependencies": {
2294 | "flatted": "^3.2.9",
2295 | "keyv": "^4.5.4"
2296 | },
2297 | "engines": {
2298 | "node": ">=16"
2299 | }
2300 | },
2301 | "node_modules/flatted": {
2302 | "version": "3.3.3",
2303 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
2304 | "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
2305 | "dev": true,
2306 | "license": "ISC"
2307 | },
2308 | "node_modules/follow-redirects": {
2309 | "version": "1.15.9",
2310 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
2311 | "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
2312 | "funding": [
2313 | {
2314 | "type": "individual",
2315 | "url": "https://github.com/sponsors/RubenVerborgh"
2316 | }
2317 | ],
2318 | "license": "MIT",
2319 | "engines": {
2320 | "node": ">=4.0"
2321 | },
2322 | "peerDependenciesMeta": {
2323 | "debug": {
2324 | "optional": true
2325 | }
2326 | }
2327 | },
2328 | "node_modules/form-data": {
2329 | "version": "4.0.2",
2330 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz",
2331 | "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
2332 | "license": "MIT",
2333 | "dependencies": {
2334 | "asynckit": "^0.4.0",
2335 | "combined-stream": "^1.0.8",
2336 | "es-set-tostringtag": "^2.1.0",
2337 | "mime-types": "^2.1.12"
2338 | },
2339 | "engines": {
2340 | "node": ">= 6"
2341 | }
2342 | },
2343 | "node_modules/fsevents": {
2344 | "version": "2.3.3",
2345 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
2346 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
2347 | "hasInstallScript": true,
2348 | "license": "MIT",
2349 | "optional": true,
2350 | "os": [
2351 | "darwin"
2352 | ],
2353 | "engines": {
2354 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
2355 | }
2356 | },
2357 | "node_modules/function-bind": {
2358 | "version": "1.1.2",
2359 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
2360 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
2361 | "license": "MIT",
2362 | "funding": {
2363 | "url": "https://github.com/sponsors/ljharb"
2364 | }
2365 | },
2366 | "node_modules/gensync": {
2367 | "version": "1.0.0-beta.2",
2368 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
2369 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
2370 | "dev": true,
2371 | "license": "MIT",
2372 | "engines": {
2373 | "node": ">=6.9.0"
2374 | }
2375 | },
2376 | "node_modules/get-intrinsic": {
2377 | "version": "1.3.0",
2378 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
2379 | "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
2380 | "license": "MIT",
2381 | "dependencies": {
2382 | "call-bind-apply-helpers": "^1.0.2",
2383 | "es-define-property": "^1.0.1",
2384 | "es-errors": "^1.3.0",
2385 | "es-object-atoms": "^1.1.1",
2386 | "function-bind": "^1.1.2",
2387 | "get-proto": "^1.0.1",
2388 | "gopd": "^1.2.0",
2389 | "has-symbols": "^1.1.0",
2390 | "hasown": "^2.0.2",
2391 | "math-intrinsics": "^1.1.0"
2392 | },
2393 | "engines": {
2394 | "node": ">= 0.4"
2395 | },
2396 | "funding": {
2397 | "url": "https://github.com/sponsors/ljharb"
2398 | }
2399 | },
2400 | "node_modules/get-proto": {
2401 | "version": "1.0.1",
2402 | "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
2403 | "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
2404 | "license": "MIT",
2405 | "dependencies": {
2406 | "dunder-proto": "^1.0.1",
2407 | "es-object-atoms": "^1.0.0"
2408 | },
2409 | "engines": {
2410 | "node": ">= 0.4"
2411 | }
2412 | },
2413 | "node_modules/glob-parent": {
2414 | "version": "6.0.2",
2415 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
2416 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
2417 | "dev": true,
2418 | "license": "ISC",
2419 | "dependencies": {
2420 | "is-glob": "^4.0.3"
2421 | },
2422 | "engines": {
2423 | "node": ">=10.13.0"
2424 | }
2425 | },
2426 | "node_modules/globals": {
2427 | "version": "15.15.0",
2428 | "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz",
2429 | "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==",
2430 | "dev": true,
2431 | "license": "MIT",
2432 | "engines": {
2433 | "node": ">=18"
2434 | },
2435 | "funding": {
2436 | "url": "https://github.com/sponsors/sindresorhus"
2437 | }
2438 | },
2439 | "node_modules/gopd": {
2440 | "version": "1.2.0",
2441 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
2442 | "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
2443 | "license": "MIT",
2444 | "engines": {
2445 | "node": ">= 0.4"
2446 | },
2447 | "funding": {
2448 | "url": "https://github.com/sponsors/ljharb"
2449 | }
2450 | },
2451 | "node_modules/graceful-fs": {
2452 | "version": "4.2.11",
2453 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
2454 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
2455 | "license": "ISC"
2456 | },
2457 | "node_modules/has-flag": {
2458 | "version": "4.0.0",
2459 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
2460 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
2461 | "dev": true,
2462 | "license": "MIT",
2463 | "engines": {
2464 | "node": ">=8"
2465 | }
2466 | },
2467 | "node_modules/has-symbols": {
2468 | "version": "1.1.0",
2469 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
2470 | "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
2471 | "license": "MIT",
2472 | "engines": {
2473 | "node": ">= 0.4"
2474 | },
2475 | "funding": {
2476 | "url": "https://github.com/sponsors/ljharb"
2477 | }
2478 | },
2479 | "node_modules/has-tostringtag": {
2480 | "version": "1.0.2",
2481 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
2482 | "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
2483 | "license": "MIT",
2484 | "dependencies": {
2485 | "has-symbols": "^1.0.3"
2486 | },
2487 | "engines": {
2488 | "node": ">= 0.4"
2489 | },
2490 | "funding": {
2491 | "url": "https://github.com/sponsors/ljharb"
2492 | }
2493 | },
2494 | "node_modules/hasown": {
2495 | "version": "2.0.2",
2496 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
2497 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
2498 | "license": "MIT",
2499 | "dependencies": {
2500 | "function-bind": "^1.1.2"
2501 | },
2502 | "engines": {
2503 | "node": ">= 0.4"
2504 | }
2505 | },
2506 | "node_modules/ignore": {
2507 | "version": "5.3.2",
2508 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
2509 | "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
2510 | "dev": true,
2511 | "license": "MIT",
2512 | "engines": {
2513 | "node": ">= 4"
2514 | }
2515 | },
2516 | "node_modules/immer": {
2517 | "version": "10.1.1",
2518 | "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.1.tgz",
2519 | "integrity": "sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==",
2520 | "license": "MIT",
2521 | "funding": {
2522 | "type": "opencollective",
2523 | "url": "https://opencollective.com/immer"
2524 | }
2525 | },
2526 | "node_modules/import-fresh": {
2527 | "version": "3.3.1",
2528 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
2529 | "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
2530 | "dev": true,
2531 | "license": "MIT",
2532 | "dependencies": {
2533 | "parent-module": "^1.0.0",
2534 | "resolve-from": "^4.0.0"
2535 | },
2536 | "engines": {
2537 | "node": ">=6"
2538 | },
2539 | "funding": {
2540 | "url": "https://github.com/sponsors/sindresorhus"
2541 | }
2542 | },
2543 | "node_modules/imurmurhash": {
2544 | "version": "0.1.4",
2545 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
2546 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
2547 | "dev": true,
2548 | "license": "MIT",
2549 | "engines": {
2550 | "node": ">=0.8.19"
2551 | }
2552 | },
2553 | "node_modules/is-extglob": {
2554 | "version": "2.1.1",
2555 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
2556 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
2557 | "dev": true,
2558 | "license": "MIT",
2559 | "engines": {
2560 | "node": ">=0.10.0"
2561 | }
2562 | },
2563 | "node_modules/is-glob": {
2564 | "version": "4.0.3",
2565 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
2566 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
2567 | "dev": true,
2568 | "license": "MIT",
2569 | "dependencies": {
2570 | "is-extglob": "^2.1.1"
2571 | },
2572 | "engines": {
2573 | "node": ">=0.10.0"
2574 | }
2575 | },
2576 | "node_modules/isexe": {
2577 | "version": "2.0.0",
2578 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
2579 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
2580 | "dev": true,
2581 | "license": "ISC"
2582 | },
2583 | "node_modules/jiti": {
2584 | "version": "2.4.2",
2585 | "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz",
2586 | "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==",
2587 | "license": "MIT",
2588 | "bin": {
2589 | "jiti": "lib/jiti-cli.mjs"
2590 | }
2591 | },
2592 | "node_modules/js-tokens": {
2593 | "version": "4.0.0",
2594 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
2595 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
2596 | "dev": true,
2597 | "license": "MIT"
2598 | },
2599 | "node_modules/js-yaml": {
2600 | "version": "4.1.0",
2601 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
2602 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
2603 | "dev": true,
2604 | "license": "MIT",
2605 | "dependencies": {
2606 | "argparse": "^2.0.1"
2607 | },
2608 | "bin": {
2609 | "js-yaml": "bin/js-yaml.js"
2610 | }
2611 | },
2612 | "node_modules/jsesc": {
2613 | "version": "3.1.0",
2614 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
2615 | "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
2616 | "dev": true,
2617 | "license": "MIT",
2618 | "bin": {
2619 | "jsesc": "bin/jsesc"
2620 | },
2621 | "engines": {
2622 | "node": ">=6"
2623 | }
2624 | },
2625 | "node_modules/json-buffer": {
2626 | "version": "3.0.1",
2627 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
2628 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
2629 | "dev": true,
2630 | "license": "MIT"
2631 | },
2632 | "node_modules/json-schema-traverse": {
2633 | "version": "0.4.1",
2634 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
2635 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
2636 | "dev": true,
2637 | "license": "MIT"
2638 | },
2639 | "node_modules/json-stable-stringify-without-jsonify": {
2640 | "version": "1.0.1",
2641 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
2642 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
2643 | "dev": true,
2644 | "license": "MIT"
2645 | },
2646 | "node_modules/json5": {
2647 | "version": "2.2.3",
2648 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
2649 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
2650 | "dev": true,
2651 | "license": "MIT",
2652 | "bin": {
2653 | "json5": "lib/cli.js"
2654 | },
2655 | "engines": {
2656 | "node": ">=6"
2657 | }
2658 | },
2659 | "node_modules/keyv": {
2660 | "version": "4.5.4",
2661 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
2662 | "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
2663 | "dev": true,
2664 | "license": "MIT",
2665 | "dependencies": {
2666 | "json-buffer": "3.0.1"
2667 | }
2668 | },
2669 | "node_modules/levn": {
2670 | "version": "0.4.1",
2671 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
2672 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
2673 | "dev": true,
2674 | "license": "MIT",
2675 | "dependencies": {
2676 | "prelude-ls": "^1.2.1",
2677 | "type-check": "~0.4.0"
2678 | },
2679 | "engines": {
2680 | "node": ">= 0.8.0"
2681 | }
2682 | },
2683 | "node_modules/lightningcss": {
2684 | "version": "1.29.2",
2685 | "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.2.tgz",
2686 | "integrity": "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==",
2687 | "license": "MPL-2.0",
2688 | "dependencies": {
2689 | "detect-libc": "^2.0.3"
2690 | },
2691 | "engines": {
2692 | "node": ">= 12.0.0"
2693 | },
2694 | "funding": {
2695 | "type": "opencollective",
2696 | "url": "https://opencollective.com/parcel"
2697 | },
2698 | "optionalDependencies": {
2699 | "lightningcss-darwin-arm64": "1.29.2",
2700 | "lightningcss-darwin-x64": "1.29.2",
2701 | "lightningcss-freebsd-x64": "1.29.2",
2702 | "lightningcss-linux-arm-gnueabihf": "1.29.2",
2703 | "lightningcss-linux-arm64-gnu": "1.29.2",
2704 | "lightningcss-linux-arm64-musl": "1.29.2",
2705 | "lightningcss-linux-x64-gnu": "1.29.2",
2706 | "lightningcss-linux-x64-musl": "1.29.2",
2707 | "lightningcss-win32-arm64-msvc": "1.29.2",
2708 | "lightningcss-win32-x64-msvc": "1.29.2"
2709 | }
2710 | },
2711 | "node_modules/lightningcss-darwin-arm64": {
2712 | "version": "1.29.2",
2713 | "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.2.tgz",
2714 | "integrity": "sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==",
2715 | "cpu": [
2716 | "arm64"
2717 | ],
2718 | "license": "MPL-2.0",
2719 | "optional": true,
2720 | "os": [
2721 | "darwin"
2722 | ],
2723 | "engines": {
2724 | "node": ">= 12.0.0"
2725 | },
2726 | "funding": {
2727 | "type": "opencollective",
2728 | "url": "https://opencollective.com/parcel"
2729 | }
2730 | },
2731 | "node_modules/lightningcss-darwin-x64": {
2732 | "version": "1.29.2",
2733 | "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.2.tgz",
2734 | "integrity": "sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==",
2735 | "cpu": [
2736 | "x64"
2737 | ],
2738 | "license": "MPL-2.0",
2739 | "optional": true,
2740 | "os": [
2741 | "darwin"
2742 | ],
2743 | "engines": {
2744 | "node": ">= 12.0.0"
2745 | },
2746 | "funding": {
2747 | "type": "opencollective",
2748 | "url": "https://opencollective.com/parcel"
2749 | }
2750 | },
2751 | "node_modules/lightningcss-freebsd-x64": {
2752 | "version": "1.29.2",
2753 | "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.2.tgz",
2754 | "integrity": "sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==",
2755 | "cpu": [
2756 | "x64"
2757 | ],
2758 | "license": "MPL-2.0",
2759 | "optional": true,
2760 | "os": [
2761 | "freebsd"
2762 | ],
2763 | "engines": {
2764 | "node": ">= 12.0.0"
2765 | },
2766 | "funding": {
2767 | "type": "opencollective",
2768 | "url": "https://opencollective.com/parcel"
2769 | }
2770 | },
2771 | "node_modules/lightningcss-linux-arm-gnueabihf": {
2772 | "version": "1.29.2",
2773 | "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.2.tgz",
2774 | "integrity": "sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==",
2775 | "cpu": [
2776 | "arm"
2777 | ],
2778 | "license": "MPL-2.0",
2779 | "optional": true,
2780 | "os": [
2781 | "linux"
2782 | ],
2783 | "engines": {
2784 | "node": ">= 12.0.0"
2785 | },
2786 | "funding": {
2787 | "type": "opencollective",
2788 | "url": "https://opencollective.com/parcel"
2789 | }
2790 | },
2791 | "node_modules/lightningcss-linux-arm64-gnu": {
2792 | "version": "1.29.2",
2793 | "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.2.tgz",
2794 | "integrity": "sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==",
2795 | "cpu": [
2796 | "arm64"
2797 | ],
2798 | "license": "MPL-2.0",
2799 | "optional": true,
2800 | "os": [
2801 | "linux"
2802 | ],
2803 | "engines": {
2804 | "node": ">= 12.0.0"
2805 | },
2806 | "funding": {
2807 | "type": "opencollective",
2808 | "url": "https://opencollective.com/parcel"
2809 | }
2810 | },
2811 | "node_modules/lightningcss-linux-arm64-musl": {
2812 | "version": "1.29.2",
2813 | "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.2.tgz",
2814 | "integrity": "sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==",
2815 | "cpu": [
2816 | "arm64"
2817 | ],
2818 | "license": "MPL-2.0",
2819 | "optional": true,
2820 | "os": [
2821 | "linux"
2822 | ],
2823 | "engines": {
2824 | "node": ">= 12.0.0"
2825 | },
2826 | "funding": {
2827 | "type": "opencollective",
2828 | "url": "https://opencollective.com/parcel"
2829 | }
2830 | },
2831 | "node_modules/lightningcss-linux-x64-gnu": {
2832 | "version": "1.29.2",
2833 | "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.2.tgz",
2834 | "integrity": "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==",
2835 | "cpu": [
2836 | "x64"
2837 | ],
2838 | "license": "MPL-2.0",
2839 | "optional": true,
2840 | "os": [
2841 | "linux"
2842 | ],
2843 | "engines": {
2844 | "node": ">= 12.0.0"
2845 | },
2846 | "funding": {
2847 | "type": "opencollective",
2848 | "url": "https://opencollective.com/parcel"
2849 | }
2850 | },
2851 | "node_modules/lightningcss-linux-x64-musl": {
2852 | "version": "1.29.2",
2853 | "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.2.tgz",
2854 | "integrity": "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==",
2855 | "cpu": [
2856 | "x64"
2857 | ],
2858 | "license": "MPL-2.0",
2859 | "optional": true,
2860 | "os": [
2861 | "linux"
2862 | ],
2863 | "engines": {
2864 | "node": ">= 12.0.0"
2865 | },
2866 | "funding": {
2867 | "type": "opencollective",
2868 | "url": "https://opencollective.com/parcel"
2869 | }
2870 | },
2871 | "node_modules/lightningcss-win32-arm64-msvc": {
2872 | "version": "1.29.2",
2873 | "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.2.tgz",
2874 | "integrity": "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==",
2875 | "cpu": [
2876 | "arm64"
2877 | ],
2878 | "license": "MPL-2.0",
2879 | "optional": true,
2880 | "os": [
2881 | "win32"
2882 | ],
2883 | "engines": {
2884 | "node": ">= 12.0.0"
2885 | },
2886 | "funding": {
2887 | "type": "opencollective",
2888 | "url": "https://opencollective.com/parcel"
2889 | }
2890 | },
2891 | "node_modules/lightningcss-win32-x64-msvc": {
2892 | "version": "1.29.2",
2893 | "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.2.tgz",
2894 | "integrity": "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==",
2895 | "cpu": [
2896 | "x64"
2897 | ],
2898 | "license": "MPL-2.0",
2899 | "optional": true,
2900 | "os": [
2901 | "win32"
2902 | ],
2903 | "engines": {
2904 | "node": ">= 12.0.0"
2905 | },
2906 | "funding": {
2907 | "type": "opencollective",
2908 | "url": "https://opencollective.com/parcel"
2909 | }
2910 | },
2911 | "node_modules/locate-path": {
2912 | "version": "6.0.0",
2913 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
2914 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
2915 | "dev": true,
2916 | "license": "MIT",
2917 | "dependencies": {
2918 | "p-locate": "^5.0.0"
2919 | },
2920 | "engines": {
2921 | "node": ">=10"
2922 | },
2923 | "funding": {
2924 | "url": "https://github.com/sponsors/sindresorhus"
2925 | }
2926 | },
2927 | "node_modules/lodash.merge": {
2928 | "version": "4.6.2",
2929 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
2930 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
2931 | "dev": true,
2932 | "license": "MIT"
2933 | },
2934 | "node_modules/lru-cache": {
2935 | "version": "5.1.1",
2936 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
2937 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
2938 | "dev": true,
2939 | "license": "ISC",
2940 | "dependencies": {
2941 | "yallist": "^3.0.2"
2942 | }
2943 | },
2944 | "node_modules/math-intrinsics": {
2945 | "version": "1.1.0",
2946 | "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
2947 | "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
2948 | "license": "MIT",
2949 | "engines": {
2950 | "node": ">= 0.4"
2951 | }
2952 | },
2953 | "node_modules/mime-db": {
2954 | "version": "1.52.0",
2955 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
2956 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
2957 | "license": "MIT",
2958 | "engines": {
2959 | "node": ">= 0.6"
2960 | }
2961 | },
2962 | "node_modules/mime-types": {
2963 | "version": "2.1.35",
2964 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
2965 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
2966 | "license": "MIT",
2967 | "dependencies": {
2968 | "mime-db": "1.52.0"
2969 | },
2970 | "engines": {
2971 | "node": ">= 0.6"
2972 | }
2973 | },
2974 | "node_modules/minimatch": {
2975 | "version": "3.1.2",
2976 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
2977 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
2978 | "dev": true,
2979 | "license": "ISC",
2980 | "dependencies": {
2981 | "brace-expansion": "^1.1.7"
2982 | },
2983 | "engines": {
2984 | "node": "*"
2985 | }
2986 | },
2987 | "node_modules/ms": {
2988 | "version": "2.1.3",
2989 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
2990 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
2991 | "dev": true,
2992 | "license": "MIT"
2993 | },
2994 | "node_modules/nanoid": {
2995 | "version": "3.3.11",
2996 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
2997 | "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
2998 | "funding": [
2999 | {
3000 | "type": "github",
3001 | "url": "https://github.com/sponsors/ai"
3002 | }
3003 | ],
3004 | "license": "MIT",
3005 | "bin": {
3006 | "nanoid": "bin/nanoid.cjs"
3007 | },
3008 | "engines": {
3009 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
3010 | }
3011 | },
3012 | "node_modules/natural-compare": {
3013 | "version": "1.4.0",
3014 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
3015 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
3016 | "dev": true,
3017 | "license": "MIT"
3018 | },
3019 | "node_modules/node-releases": {
3020 | "version": "2.0.19",
3021 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
3022 | "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
3023 | "dev": true,
3024 | "license": "MIT"
3025 | },
3026 | "node_modules/optionator": {
3027 | "version": "0.9.4",
3028 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
3029 | "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
3030 | "dev": true,
3031 | "license": "MIT",
3032 | "dependencies": {
3033 | "deep-is": "^0.1.3",
3034 | "fast-levenshtein": "^2.0.6",
3035 | "levn": "^0.4.1",
3036 | "prelude-ls": "^1.2.1",
3037 | "type-check": "^0.4.0",
3038 | "word-wrap": "^1.2.5"
3039 | },
3040 | "engines": {
3041 | "node": ">= 0.8.0"
3042 | }
3043 | },
3044 | "node_modules/p-limit": {
3045 | "version": "3.1.0",
3046 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
3047 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
3048 | "dev": true,
3049 | "license": "MIT",
3050 | "dependencies": {
3051 | "yocto-queue": "^0.1.0"
3052 | },
3053 | "engines": {
3054 | "node": ">=10"
3055 | },
3056 | "funding": {
3057 | "url": "https://github.com/sponsors/sindresorhus"
3058 | }
3059 | },
3060 | "node_modules/p-locate": {
3061 | "version": "5.0.0",
3062 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
3063 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
3064 | "dev": true,
3065 | "license": "MIT",
3066 | "dependencies": {
3067 | "p-limit": "^3.0.2"
3068 | },
3069 | "engines": {
3070 | "node": ">=10"
3071 | },
3072 | "funding": {
3073 | "url": "https://github.com/sponsors/sindresorhus"
3074 | }
3075 | },
3076 | "node_modules/parent-module": {
3077 | "version": "1.0.1",
3078 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
3079 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
3080 | "dev": true,
3081 | "license": "MIT",
3082 | "dependencies": {
3083 | "callsites": "^3.0.0"
3084 | },
3085 | "engines": {
3086 | "node": ">=6"
3087 | }
3088 | },
3089 | "node_modules/path-exists": {
3090 | "version": "4.0.0",
3091 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
3092 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
3093 | "dev": true,
3094 | "license": "MIT",
3095 | "engines": {
3096 | "node": ">=8"
3097 | }
3098 | },
3099 | "node_modules/path-key": {
3100 | "version": "3.1.1",
3101 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
3102 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
3103 | "dev": true,
3104 | "license": "MIT",
3105 | "engines": {
3106 | "node": ">=8"
3107 | }
3108 | },
3109 | "node_modules/picocolors": {
3110 | "version": "1.1.1",
3111 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
3112 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
3113 | "license": "ISC"
3114 | },
3115 | "node_modules/postcss": {
3116 | "version": "8.5.3",
3117 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
3118 | "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
3119 | "funding": [
3120 | {
3121 | "type": "opencollective",
3122 | "url": "https://opencollective.com/postcss/"
3123 | },
3124 | {
3125 | "type": "tidelift",
3126 | "url": "https://tidelift.com/funding/github/npm/postcss"
3127 | },
3128 | {
3129 | "type": "github",
3130 | "url": "https://github.com/sponsors/ai"
3131 | }
3132 | ],
3133 | "license": "MIT",
3134 | "dependencies": {
3135 | "nanoid": "^3.3.8",
3136 | "picocolors": "^1.1.1",
3137 | "source-map-js": "^1.2.1"
3138 | },
3139 | "engines": {
3140 | "node": "^10 || ^12 || >=14"
3141 | }
3142 | },
3143 | "node_modules/prelude-ls": {
3144 | "version": "1.2.1",
3145 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
3146 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
3147 | "dev": true,
3148 | "license": "MIT",
3149 | "engines": {
3150 | "node": ">= 0.8.0"
3151 | }
3152 | },
3153 | "node_modules/proxy-from-env": {
3154 | "version": "1.1.0",
3155 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
3156 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
3157 | "license": "MIT"
3158 | },
3159 | "node_modules/punycode": {
3160 | "version": "2.3.1",
3161 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
3162 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
3163 | "dev": true,
3164 | "license": "MIT",
3165 | "engines": {
3166 | "node": ">=6"
3167 | }
3168 | },
3169 | "node_modules/react": {
3170 | "version": "19.0.0",
3171 | "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz",
3172 | "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==",
3173 | "license": "MIT",
3174 | "engines": {
3175 | "node": ">=0.10.0"
3176 | }
3177 | },
3178 | "node_modules/react-dom": {
3179 | "version": "19.0.0",
3180 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz",
3181 | "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==",
3182 | "license": "MIT",
3183 | "dependencies": {
3184 | "scheduler": "^0.25.0"
3185 | },
3186 | "peerDependencies": {
3187 | "react": "^19.0.0"
3188 | }
3189 | },
3190 | "node_modules/react-redux": {
3191 | "version": "9.2.0",
3192 | "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz",
3193 | "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==",
3194 | "license": "MIT",
3195 | "dependencies": {
3196 | "@types/use-sync-external-store": "^0.0.6",
3197 | "use-sync-external-store": "^1.4.0"
3198 | },
3199 | "peerDependencies": {
3200 | "@types/react": "^18.2.25 || ^19",
3201 | "react": "^18.0 || ^19",
3202 | "redux": "^5.0.0"
3203 | },
3204 | "peerDependenciesMeta": {
3205 | "@types/react": {
3206 | "optional": true
3207 | },
3208 | "redux": {
3209 | "optional": true
3210 | }
3211 | }
3212 | },
3213 | "node_modules/react-refresh": {
3214 | "version": "0.14.2",
3215 | "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz",
3216 | "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==",
3217 | "dev": true,
3218 | "license": "MIT",
3219 | "engines": {
3220 | "node": ">=0.10.0"
3221 | }
3222 | },
3223 | "node_modules/react-router": {
3224 | "version": "7.4.0",
3225 | "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.4.0.tgz",
3226 | "integrity": "sha512-Y2g5ObjkvX3VFeVt+0CIPuYd9PpgqCslG7ASSIdN73LwA1nNWzcMLaoMRJfP3prZFI92svxFwbn7XkLJ+UPQ6A==",
3227 | "license": "MIT",
3228 | "dependencies": {
3229 | "@types/cookie": "^0.6.0",
3230 | "cookie": "^1.0.1",
3231 | "set-cookie-parser": "^2.6.0",
3232 | "turbo-stream": "2.4.0"
3233 | },
3234 | "engines": {
3235 | "node": ">=20.0.0"
3236 | },
3237 | "peerDependencies": {
3238 | "react": ">=18",
3239 | "react-dom": ">=18"
3240 | },
3241 | "peerDependenciesMeta": {
3242 | "react-dom": {
3243 | "optional": true
3244 | }
3245 | }
3246 | },
3247 | "node_modules/react-to-print": {
3248 | "version": "3.0.5",
3249 | "resolved": "https://registry.npmjs.org/react-to-print/-/react-to-print-3.0.5.tgz",
3250 | "integrity": "sha512-Z15MwMOzYCHWi26CZeFNwflAg7Nr8uWD6FTj+EkfIOjYyjr0MXGbI0c7rF4Fgrbj3XG9hFndb1ourxpPz2RAiA==",
3251 | "license": "MIT",
3252 | "peerDependencies": {
3253 | "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ~19"
3254 | }
3255 | },
3256 | "node_modules/redux": {
3257 | "version": "5.0.1",
3258 | "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
3259 | "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==",
3260 | "license": "MIT"
3261 | },
3262 | "node_modules/redux-thunk": {
3263 | "version": "3.1.0",
3264 | "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz",
3265 | "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==",
3266 | "license": "MIT",
3267 | "peerDependencies": {
3268 | "redux": "^5.0.0"
3269 | }
3270 | },
3271 | "node_modules/reselect": {
3272 | "version": "5.1.1",
3273 | "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz",
3274 | "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==",
3275 | "license": "MIT"
3276 | },
3277 | "node_modules/resolve-from": {
3278 | "version": "4.0.0",
3279 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
3280 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
3281 | "dev": true,
3282 | "license": "MIT",
3283 | "engines": {
3284 | "node": ">=4"
3285 | }
3286 | },
3287 | "node_modules/rollup": {
3288 | "version": "4.36.0",
3289 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.36.0.tgz",
3290 | "integrity": "sha512-zwATAXNQxUcd40zgtQG0ZafcRK4g004WtEl7kbuhTWPvf07PsfohXl39jVUvPF7jvNAIkKPQ2XrsDlWuxBd++Q==",
3291 | "license": "MIT",
3292 | "dependencies": {
3293 | "@types/estree": "1.0.6"
3294 | },
3295 | "bin": {
3296 | "rollup": "dist/bin/rollup"
3297 | },
3298 | "engines": {
3299 | "node": ">=18.0.0",
3300 | "npm": ">=8.0.0"
3301 | },
3302 | "optionalDependencies": {
3303 | "@rollup/rollup-android-arm-eabi": "4.36.0",
3304 | "@rollup/rollup-android-arm64": "4.36.0",
3305 | "@rollup/rollup-darwin-arm64": "4.36.0",
3306 | "@rollup/rollup-darwin-x64": "4.36.0",
3307 | "@rollup/rollup-freebsd-arm64": "4.36.0",
3308 | "@rollup/rollup-freebsd-x64": "4.36.0",
3309 | "@rollup/rollup-linux-arm-gnueabihf": "4.36.0",
3310 | "@rollup/rollup-linux-arm-musleabihf": "4.36.0",
3311 | "@rollup/rollup-linux-arm64-gnu": "4.36.0",
3312 | "@rollup/rollup-linux-arm64-musl": "4.36.0",
3313 | "@rollup/rollup-linux-loongarch64-gnu": "4.36.0",
3314 | "@rollup/rollup-linux-powerpc64le-gnu": "4.36.0",
3315 | "@rollup/rollup-linux-riscv64-gnu": "4.36.0",
3316 | "@rollup/rollup-linux-s390x-gnu": "4.36.0",
3317 | "@rollup/rollup-linux-x64-gnu": "4.36.0",
3318 | "@rollup/rollup-linux-x64-musl": "4.36.0",
3319 | "@rollup/rollup-win32-arm64-msvc": "4.36.0",
3320 | "@rollup/rollup-win32-ia32-msvc": "4.36.0",
3321 | "@rollup/rollup-win32-x64-msvc": "4.36.0",
3322 | "fsevents": "~2.3.2"
3323 | }
3324 | },
3325 | "node_modules/scheduler": {
3326 | "version": "0.25.0",
3327 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz",
3328 | "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==",
3329 | "license": "MIT"
3330 | },
3331 | "node_modules/semver": {
3332 | "version": "6.3.1",
3333 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
3334 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
3335 | "dev": true,
3336 | "license": "ISC",
3337 | "bin": {
3338 | "semver": "bin/semver.js"
3339 | }
3340 | },
3341 | "node_modules/set-cookie-parser": {
3342 | "version": "2.7.1",
3343 | "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz",
3344 | "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==",
3345 | "license": "MIT"
3346 | },
3347 | "node_modules/shebang-command": {
3348 | "version": "2.0.0",
3349 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
3350 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
3351 | "dev": true,
3352 | "license": "MIT",
3353 | "dependencies": {
3354 | "shebang-regex": "^3.0.0"
3355 | },
3356 | "engines": {
3357 | "node": ">=8"
3358 | }
3359 | },
3360 | "node_modules/shebang-regex": {
3361 | "version": "3.0.0",
3362 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
3363 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
3364 | "dev": true,
3365 | "license": "MIT",
3366 | "engines": {
3367 | "node": ">=8"
3368 | }
3369 | },
3370 | "node_modules/source-map-js": {
3371 | "version": "1.2.1",
3372 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
3373 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
3374 | "license": "BSD-3-Clause",
3375 | "engines": {
3376 | "node": ">=0.10.0"
3377 | }
3378 | },
3379 | "node_modules/strip-json-comments": {
3380 | "version": "3.1.1",
3381 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
3382 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
3383 | "dev": true,
3384 | "license": "MIT",
3385 | "engines": {
3386 | "node": ">=8"
3387 | },
3388 | "funding": {
3389 | "url": "https://github.com/sponsors/sindresorhus"
3390 | }
3391 | },
3392 | "node_modules/supports-color": {
3393 | "version": "7.2.0",
3394 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
3395 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
3396 | "dev": true,
3397 | "license": "MIT",
3398 | "dependencies": {
3399 | "has-flag": "^4.0.0"
3400 | },
3401 | "engines": {
3402 | "node": ">=8"
3403 | }
3404 | },
3405 | "node_modules/tailwindcss": {
3406 | "version": "4.0.15",
3407 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.15.tgz",
3408 | "integrity": "sha512-6ZMg+hHdMJpjpeCCFasX7K+U615U9D+7k5/cDK/iRwl6GptF24+I/AbKgOnXhVKePzrEyIXutLv36n4cRsq3Sg==",
3409 | "license": "MIT"
3410 | },
3411 | "node_modules/tapable": {
3412 | "version": "2.2.1",
3413 | "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
3414 | "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
3415 | "license": "MIT",
3416 | "engines": {
3417 | "node": ">=6"
3418 | }
3419 | },
3420 | "node_modules/turbo-stream": {
3421 | "version": "2.4.0",
3422 | "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz",
3423 | "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==",
3424 | "license": "ISC"
3425 | },
3426 | "node_modules/type-check": {
3427 | "version": "0.4.0",
3428 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
3429 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
3430 | "dev": true,
3431 | "license": "MIT",
3432 | "dependencies": {
3433 | "prelude-ls": "^1.2.1"
3434 | },
3435 | "engines": {
3436 | "node": ">= 0.8.0"
3437 | }
3438 | },
3439 | "node_modules/update-browserslist-db": {
3440 | "version": "1.1.3",
3441 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
3442 | "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
3443 | "dev": true,
3444 | "funding": [
3445 | {
3446 | "type": "opencollective",
3447 | "url": "https://opencollective.com/browserslist"
3448 | },
3449 | {
3450 | "type": "tidelift",
3451 | "url": "https://tidelift.com/funding/github/npm/browserslist"
3452 | },
3453 | {
3454 | "type": "github",
3455 | "url": "https://github.com/sponsors/ai"
3456 | }
3457 | ],
3458 | "license": "MIT",
3459 | "dependencies": {
3460 | "escalade": "^3.2.0",
3461 | "picocolors": "^1.1.1"
3462 | },
3463 | "bin": {
3464 | "update-browserslist-db": "cli.js"
3465 | },
3466 | "peerDependencies": {
3467 | "browserslist": ">= 4.21.0"
3468 | }
3469 | },
3470 | "node_modules/uri-js": {
3471 | "version": "4.4.1",
3472 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
3473 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
3474 | "dev": true,
3475 | "license": "BSD-2-Clause",
3476 | "dependencies": {
3477 | "punycode": "^2.1.0"
3478 | }
3479 | },
3480 | "node_modules/use-sync-external-store": {
3481 | "version": "1.4.0",
3482 | "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz",
3483 | "integrity": "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==",
3484 | "license": "MIT",
3485 | "peerDependencies": {
3486 | "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
3487 | }
3488 | },
3489 | "node_modules/vite": {
3490 | "version": "6.2.2",
3491 | "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.2.tgz",
3492 | "integrity": "sha512-yW7PeMM+LkDzc7CgJuRLMW2Jz0FxMOsVJ8Lv3gpgW9WLcb9cTW+121UEr1hvmfR7w3SegR5ItvYyzVz1vxNJgQ==",
3493 | "license": "MIT",
3494 | "dependencies": {
3495 | "esbuild": "^0.25.0",
3496 | "postcss": "^8.5.3",
3497 | "rollup": "^4.30.1"
3498 | },
3499 | "bin": {
3500 | "vite": "bin/vite.js"
3501 | },
3502 | "engines": {
3503 | "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
3504 | },
3505 | "funding": {
3506 | "url": "https://github.com/vitejs/vite?sponsor=1"
3507 | },
3508 | "optionalDependencies": {
3509 | "fsevents": "~2.3.3"
3510 | },
3511 | "peerDependencies": {
3512 | "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
3513 | "jiti": ">=1.21.0",
3514 | "less": "*",
3515 | "lightningcss": "^1.21.0",
3516 | "sass": "*",
3517 | "sass-embedded": "*",
3518 | "stylus": "*",
3519 | "sugarss": "*",
3520 | "terser": "^5.16.0",
3521 | "tsx": "^4.8.1",
3522 | "yaml": "^2.4.2"
3523 | },
3524 | "peerDependenciesMeta": {
3525 | "@types/node": {
3526 | "optional": true
3527 | },
3528 | "jiti": {
3529 | "optional": true
3530 | },
3531 | "less": {
3532 | "optional": true
3533 | },
3534 | "lightningcss": {
3535 | "optional": true
3536 | },
3537 | "sass": {
3538 | "optional": true
3539 | },
3540 | "sass-embedded": {
3541 | "optional": true
3542 | },
3543 | "stylus": {
3544 | "optional": true
3545 | },
3546 | "sugarss": {
3547 | "optional": true
3548 | },
3549 | "terser": {
3550 | "optional": true
3551 | },
3552 | "tsx": {
3553 | "optional": true
3554 | },
3555 | "yaml": {
3556 | "optional": true
3557 | }
3558 | }
3559 | },
3560 | "node_modules/which": {
3561 | "version": "2.0.2",
3562 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
3563 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
3564 | "dev": true,
3565 | "license": "ISC",
3566 | "dependencies": {
3567 | "isexe": "^2.0.0"
3568 | },
3569 | "bin": {
3570 | "node-which": "bin/node-which"
3571 | },
3572 | "engines": {
3573 | "node": ">= 8"
3574 | }
3575 | },
3576 | "node_modules/word-wrap": {
3577 | "version": "1.2.5",
3578 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
3579 | "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
3580 | "dev": true,
3581 | "license": "MIT",
3582 | "engines": {
3583 | "node": ">=0.10.0"
3584 | }
3585 | },
3586 | "node_modules/yallist": {
3587 | "version": "3.1.1",
3588 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
3589 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
3590 | "dev": true,
3591 | "license": "ISC"
3592 | },
3593 | "node_modules/yocto-queue": {
3594 | "version": "0.1.0",
3595 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
3596 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
3597 | "dev": true,
3598 | "license": "MIT",
3599 | "engines": {
3600 | "node": ">=10"
3601 | },
3602 | "funding": {
3603 | "url": "https://github.com/sponsors/sindresorhus"
3604 | }
3605 | }
3606 | }
3607 | }
3608 |
--------------------------------------------------------------------------------
/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 | "@reduxjs/toolkit": "^2.6.1",
14 | "@tailwindcss/vite": "^4.0.15",
15 | "axios": "^1.8.4",
16 | "react": "^19.0.0",
17 | "react-dom": "^19.0.0",
18 | "react-redux": "^9.2.0",
19 | "react-router": "^7.4.0",
20 | "react-to-print": "^3.0.5",
21 | "tailwindcss": "^4.0.15"
22 | },
23 | "devDependencies": {
24 | "@eslint/js": "^9.21.0",
25 | "@types/react": "^19.0.10",
26 | "@types/react-dom": "^19.0.4",
27 | "@vitejs/plugin-react": "^4.3.4",
28 | "eslint": "^9.21.0",
29 | "eslint-plugin-react-hooks": "^5.1.0",
30 | "eslint-plugin-react-refresh": "^0.4.19",
31 | "globals": "^15.15.0",
32 | "vite": "^6.2.0"
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/public/logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/vite.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/App.jsx:
--------------------------------------------------------------------------------
1 | import {Routes, Route} from 'react-router'
2 |
3 | import NavBar from './components/NavBar'
4 | import PatternGenerator from './pages/PatternGenerator'
5 | import PatternDetailsPage from './pages/PatternDetailsPage'
6 | import NewProjectPage from './pages/NewProjectPage'
7 | import PatternsPage from './pages/PatternsPage'
8 | import ProjectsPage from './pages/ProjectsPage'
9 |
10 | function App() {
11 |
12 |
13 | return (
14 | <>
15 |
16 |
17 |
18 | } />
19 |
20 | }/>
21 | } />
22 | }/>
23 |
24 |
25 | } />
26 | }/>
27 |
28 |
29 |
30 |
31 | >
32 | )
33 | }
34 |
35 | export default App
36 |
--------------------------------------------------------------------------------
/src/api/pattern.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 |
3 | const BASE_URL = import.meta.env.VITE_API_BASE_URL
4 |
5 | // create a new pattern
6 | export async function createPattern(patternDetails){
7 | const res = await axios.post(`${BASE_URL}/api/patterns`, patternDetails);
8 |
9 | return res.data
10 | }
11 |
12 | // get all patterns
13 | export async function getPatterns(){
14 | const res = await axios.get(`${BASE_URL}/api/patterns`);
15 |
16 | return res.data
17 | }
18 |
19 | // get a specific pattern
20 | export async function getPattern(patternId) {
21 | const res = await axios.get(`${BASE_URL}/api/patterns/${patternId}`)
22 | return res.data
23 | }
24 |
25 | // update a pattern
26 | export async function editPattern(patternId, patternDetails) {
27 | const res = await axios.patch(`${BASE_URL}/api/patterns/${patternId}`, patternDetails)
28 |
29 | return res.data
30 | }
31 |
32 | // delete a pattern
33 | export async function deletePattern(patternId) {
34 | await axios.delete(`${BASE_URL}/api/patterns/${patternId}`)
35 | }
--------------------------------------------------------------------------------
/src/api/project.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 |
3 | const BASE_URL = import.meta.env.VITE_API_BASE_URL
4 |
5 | // create a new project
6 | export async function createProject(projectInfo){
7 | const res = await axios.post(`${BASE_URL}/api/projects`, projectInfo)
8 |
9 | return res.data
10 | }
11 |
12 | // get all projects
13 | export async function getProjects() {
14 | const res = await axios.get(`${BASE_URL}/api/projects`)
15 |
16 | return res.data
17 | }
--------------------------------------------------------------------------------
/src/assets/react.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/components/MessageDiv.jsx:
--------------------------------------------------------------------------------
1 | // an error/success div component
2 |
3 | export default function MessageDiv({ message, messageType, setMessage }) {
4 | return (
5 |
6 |
13 |
{message}
14 |
setMessage(null)}
16 | className="mt-2 px-4 py-2 bg-white text-black rounded-lg"
17 | >
18 | OK
19 |
20 |
21 |
22 | );
23 | }
24 |
--------------------------------------------------------------------------------
/src/components/NavBar.jsx:
--------------------------------------------------------------------------------
1 | import { NavLink } from "react-router";
2 |
3 | export default function NavBar() {
4 | return (
5 |
6 |
7 |
8 | New Pattern
9 |
10 |
11 | Patterns
12 |
13 |
14 | Projects
15 |
16 |
17 | New Project
18 |
19 |
20 |
21 | );
22 | }
23 |
--------------------------------------------------------------------------------
/src/components/PatternDetail.jsx:
--------------------------------------------------------------------------------
1 | // helper function to calculate the numbers for the pattern
2 | import {
3 | calculateFootSts,
4 | castOnSts,
5 | inBeforeGusset,
6 | patternStsOnFoot,
7 | patternFramingSts,
8 | gussetInc,
9 | gussetExp,
10 | wrappedSts,
11 | incEveryOtherRnd,
12 | incEvery8Rnds,
13 | incEvery10Rnds,
14 | legLength,
15 | } from "../utils/patternMath.js";
16 |
17 | export default function PatternDetail({
18 | foot_circ,
19 | foot_length,
20 | thigh_circ,
21 | sock_length,
22 | stitch_gauge,
23 | row_gauge,
24 | pattern_repeat,
25 | title
26 | }) {
27 | //numbers necessary for generating the pattern detail
28 | const footSts = calculateFootSts(foot_circ, stitch_gauge);
29 | const castOn = castOnSts(foot_circ, stitch_gauge);
30 | const inToGusset = inBeforeGusset(foot_length, foot_circ, stitch_gauge, row_gauge);
31 | const patternSts = patternStsOnFoot(foot_circ, stitch_gauge, pattern_repeat);
32 | const framingSts = patternFramingSts(foot_circ, stitch_gauge, pattern_repeat);
33 | const gussetI = gussetInc(foot_circ, stitch_gauge);
34 | const gussetE = gussetExp(foot_circ, stitch_gauge);
35 | const wrapSts = wrappedSts(foot_circ, stitch_gauge);
36 | const stage1Inc = incEveryOtherRnd(thigh_circ, foot_circ, stitch_gauge);
37 | const stage2Inc = incEvery8Rnds(thigh_circ, foot_circ, stitch_gauge);
38 | const stage3Inc = incEvery10Rnds(thigh_circ, foot_circ, stitch_gauge);
39 | const totalLength = legLength(sock_length, row_gauge);
40 |
41 | return(
42 | // this renders the text of a custom-sized toe up stocking pattern based on the above calculations
43 |
44 |
{title}
45 |
This pattern assumes you have an accent stitch pattern chosen of {pattern_repeat} stitches. Work according to this accent pattern where instructed
46 |
Toe
47 |
Using Judy's magic cast on or the Turkish cast on (or other choice of cast on for toe-up socks), cast on a total of {castOn} stitches
48 |
Knit all stitches, placing a marker at BOR and at the halfway point
49 |
50 | k1, m1l, k to one stitch before marker, m1r, k2, m1l, knit to 1 stitch before BOR marker, m1r, k1
51 | knit around
52 |
53 |
54 | Repeat rounds 1 and 2 until you have a total of {footSts} stitches (a total of {(footSts - castOn) / 4} times)
55 |
56 |
57 |
Foot
58 |
59 | k{framingSts}, work in pattern across next {patternSts} stitches, knit to EOR
60 | continue as established following accent pattern until sock measures {inToGusset} inches from end of toe
61 |
62 |
63 |
Gusset
64 |
65 | k{framingSts}, work in pattern across next {patternSts} stitches, k{framingSts}, k1, pm, m1r, k to one stitch before EOR, m1l, k1
66 | knit {framingSts} stitches, work in pattern across next {patternSts} stitches, knit to EOR
67 |
68 |
69 | k{framingSts}, work in pattern across next {patternSts} stitches, k{framingSts}, k1, m1r, k to marker, sm, k to marker, sm, k to one stitch before end, m1l, k1
70 | k{framingSts}, work in pattern across next {patternSts} stitches, knit to EOR
71 |
72 |
73 | repeat rounds 1 and 2 {gussetI - 1} more times (gusset increased a total of {gussetI} stitches)
74 | k{framingSts}, work in pattern across next {patternSts} stitches, k to marker, sm, k to next marker, sm, increase evenly by {gussetE} stitches before EOR
75 | knit {framingSts} stitches, work in pattern across next {patternSts} stitches, k {framingSts}, k1, increase evenly by {gussetE} stitches between here and marker, k 2 marker. HOLD HERE FOR HEEL TURN
76 |
77 |
78 |
Heel Turn
79 |
Worked over sole stitches only
80 |
81 | *k1, sl1* to 2 stitches before marker, wrap and turn
82 | p to 2 stitches before marker, wrap and turn
83 | k1, *sl1, k1* to 3 stitches before marker, wrap and turn
84 | p to 3 stitches before marker, wrap and turn
85 | sl1, *k1, sl1* to 4 stitches before marker, wrap and turn
86 | p to 4 stitches before marker, wrap and turn
87 |
88 |
89 | repeat as established, increasing the number of stitches before marker each row until there are {wrapSts + 1} stitches on each side, ending with an even row
90 | work as established to first wrap. Lift and knit all but the last wrapped stitch. On the last wrapped stitch, work the wrapped stitch and ssk at the same time. turn
91 | sl1, p to first wrap. Lift and purl all but the last wrapped stitch. On the last wrapped stitch, work the wrapped stitch and p2tog at the same time. turn
92 |
93 |
94 |
Heel Flap
95 |
You should be ready to work on the right side of the sock
96 |
97 | (rs) sl1, *k1, sl1* until 1 stitch before the first marker. rm, ssk, turn
98 | (ws) sl1, p until 1 stitch before the marker. rm, p2tog, turn
99 | sl1, k2, *sl1, k1* until 1 stitch before the gap, ssk, turn
100 | sl1, p until 1 stitch before the gap, p2tog, turn
101 | sl1, *k1, sl1* until 1 stitch before the gap, ssk, turn
102 | sl1, p until 1 stitch before the gap, p2tog, turn
103 |
104 |
105 | repeat rows 3 to 6 until there are 2 stitches outside each gap. you should have just worked a ws row
106 |
107 |
108 |
Leg
109 |
return to working in the round
110 |
111 | work sl1, k1 as established across heel flap until one stitch before the gap, ssk, k1
112 | k{framingSts}, work in pattern across next {patternSts} stitches, k {framingSts}, k1, k2tog, knit to halfway through heel flap. move BOR marker to this point
113 | work in pattern around until sock measures {foot_length} inches
114 |
115 |
Increase Round: keeping pattern correct, m1l, work in pater to last st, m1r, p1
116 |
117 | work increase round every other round {stage1Inc} times
118 | work increase round every 8 rounds {stage2Inc} times
119 | work increase round every 10 rounds {stage3Inc} times
120 | work in pattern as established (keeping p1 seam) until the sock is {totalLength} inches long from heel
121 |
122 |
123 |
Cuff
124 |
This section uses a special double increase. The increase is noted as dinc and is worked as follows: m1p, lifted inc (worked as a knit stitch)
125 |
126 | Work 1x1 ribbing until last st, dinc, p1
127 |
128 |
129 | Work 3 rounds 1x1 ribbing
130 |
131 |
132 | k1, dinc, work 1x1 ribbing until end
133 | k1, dinc, work 1x1 ribbing until end
134 |
135 |
136 | Work 6 rounds 1x1 ribbing
137 |
138 |
139 | Work 1x1 ribbing to last st, dinc, p1
140 | Work 1x1 ribbing to last st, dinc, p1
141 |
142 |
143 | Work 12 rounds 1x1 ribbing
144 |
145 |
146 | k1, dinc, work 1x1 ribbing until end
147 | k1, dinc, work 1x1 ribbing until end
148 |
149 |
150 | Work 6 rounds 1x1 ribbing
151 |
152 |
153 | (eyelet round) 1x1 rib 3, *yo, k2tog, 1x1 rib 4 repeat from * to last 3 stitches, yo, k2tog, p1
154 |
155 |
156 | Work 4 rounds 1x1 ribbing
157 | Cast off using choice of cast off
158 |
159 |
160 | )
161 |
162 | }
163 |
--------------------------------------------------------------------------------
/src/components/PatternForm.jsx:
--------------------------------------------------------------------------------
1 | export default function NewPatternForm({
2 | formData,
3 | setFormData,
4 | setIsSubmitted
5 | }) {
6 |
7 | const handleChange = (e) => {
8 | setFormData({
9 | ...formData,
10 | [e.target.name]: e.target.value,
11 | });
12 | };
13 |
14 | const handleSubmit = (e) => {
15 | e.preventDefault();
16 |
17 | setIsSubmitted(true)
18 |
19 | };
20 |
21 | return (
22 |
123 | );
124 | }
125 |
--------------------------------------------------------------------------------
/src/components/PatternSummary.jsx:
--------------------------------------------------------------------------------
1 |
2 |
3 | export default function PatternSummary({pattern}){
4 | return(
5 |
6 |
{pattern.title}
7 |
8 | )
9 | }
--------------------------------------------------------------------------------
/src/components/ProjectForm.jsx:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 | import { createProject } from "../api/project";
3 | import MessageDiv from "./MessageDiv";
4 |
5 | const emptyProject = {
6 | saveToRavelry: false,
7 | projectDetails: {
8 | completed: "",
9 | made_for: "",
10 | name: "",
11 | notes: "",
12 | started: "",
13 | },
14 | };
15 |
16 | export default function ProjectForm() {
17 | const [formData, setFormData] = useState(emptyProject);
18 | const [isSubmitting, setIsSubmitting] = useState(false);
19 | const [message, setMessage] = useState(null); // Holds success or error message
20 | const [messageType, setMessageType] = useState(null); // "success" or "error"
21 |
22 | const handleRootChange = (e) => {
23 | setFormData((prevFormData) => ({
24 | ...prevFormData,
25 | [e.target.name]: e.target.checked,
26 | }));
27 | };
28 |
29 | const handleProjectDetailsChange = (e) => {
30 | setFormData((prevFormData) => ({
31 | ...prevFormData,
32 | projectDetails: {
33 | ...prevFormData.projectDetails,
34 | [e.target.name]: e.target.value,
35 | },
36 | }));
37 | };
38 |
39 | const handleSubmit = async (e) => {
40 | e.preventDefault();
41 |
42 | try {
43 | setIsSubmitting(true)
44 | await createProject(formData);
45 | setFormData(emptyProject);
46 |
47 | setMessage("Project created successfully!");
48 | setMessageType("success");
49 | } catch (e) {
50 | setMessage(e.response?.data?.message || "An error occurred while submitting.");
51 | setMessageType("error");
52 | } finally {
53 | setIsSubmitting(false)
54 | }
55 | };
56 |
57 | return (
58 |
59 | {/* Success/Error Message Box */}
60 | {message &&
}
61 | {/* create project form */}
62 |
127 |
128 | );
129 | }
130 |
--------------------------------------------------------------------------------
/src/components/ProjectSummary.jsx:
--------------------------------------------------------------------------------
1 |
2 |
3 | export default function ProjectSummary({project}){
4 | return(
5 |
6 |
{project.projectDetails.name}
7 |
8 | )
9 | }
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 | @import "tailwindcss";
2 | :root{
3 | /* color palette */
4 | --background: #0f172a; /* slate-900 */
5 | --foreground: #e2e8f0; /* slate-300 */
6 | --primary: #3b82f6; /* blue-500 */
7 | --primary-hover: #2563eb; /* blue-600 */
8 | --secondary: #1e40af; /* blue-800 */
9 | --secondary-hover: #1e3a8a; /* blue-900 */
10 | --accent: #38bdf8; /* sky-400 */
11 | --accent-hover: #0ea5e9; /* sky-500 */
12 | --border: #1e293b; /* slate-800 */
13 | --card-bg: #1e293b; /* slate-800 */
14 | --card-text: #f1f5f9; /* slate-100 */
15 | --active-link: #525252; /* slate-500 */
16 | }
17 |
18 | body {
19 | background-color: var(--background);
20 | color: var(--foreground);
21 | }
22 |
23 | /* navbar styling */
24 | .nav{
25 | list-style-type: none;
26 | margin: 0;
27 | padding: 0;
28 | }
29 |
30 | .nav-link {
31 | display: inline;
32 | border-right: 1px solid var(--foreground);
33 | padding: 0 1rem 0 1rem;
34 | }
35 |
36 | .nav-link:last-child {
37 | border-right: none;
38 | }
39 |
40 | .nav-link a {
41 | padding: 0.25rem 0.5rem 0.25rem 0.5rem;
42 | border-radius: 5px;
43 | }
44 |
45 | .nav-link a.active {
46 | background-color: var(--active-link);
47 | }
48 |
49 | /* settings for printing */
50 | @media print{
51 | body{
52 | color: black;
53 | background-color: white;
54 | }
55 | }
56 |
57 | @page {
58 | margin: 0.5in;
59 | }
60 |
--------------------------------------------------------------------------------
/src/main.jsx:
--------------------------------------------------------------------------------
1 | import { StrictMode } from "react";
2 | import { createRoot } from "react-dom/client";
3 | import { BrowserRouter } from "react-router";
4 | import { Provider } from "react-redux";
5 |
6 | import { store } from "./store/store.js";
7 | import "./index.css";
8 | import App from "./App.jsx";
9 |
10 | createRoot(document.getElementById("root")).render(
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | );
19 |
--------------------------------------------------------------------------------
/src/pages/NewProjectPage.jsx:
--------------------------------------------------------------------------------
1 | import ProjectForm from "../components/ProjectForm"
2 |
3 |
4 | export default function NewProjectPage(){
5 | return(
6 |
9 | )
10 | }
--------------------------------------------------------------------------------
/src/pages/PatternDetailsPage.jsx:
--------------------------------------------------------------------------------
1 | import { useEffect, useRef, useState } from "react";
2 | import { useReactToPrint } from "react-to-print";
3 | import { useNavigate, useParams } from "react-router";
4 |
5 | import PatternDetail from "../components/PatternDetail";
6 | import MessageDiv from "../components/MessageDiv";
7 | import { getPattern, deletePattern } from "../api/pattern";
8 |
9 | export default function PatternDetailsPage() {
10 | const [pattern, setPattern] = useState(null);
11 | const [message, setMessage] = useState(null); //holds error message
12 | const [isDisabled, setIsDisabled] = useState(false);
13 |
14 | const ref = useRef(null);
15 | const { patternId } = useParams();
16 | const navigate = useNavigate();
17 |
18 | //fetch pattern from the db when component renders or when the id in the URL changes
19 | useEffect(() => {
20 | const fetchPattern = async () => {
21 | try {
22 | const fetchedPattern = await getPattern(patternId);
23 | setPattern(fetchedPattern);
24 | } catch (e) {
25 | console.error(e);
26 | setMessage(
27 | e.response?.data?.message || "An error occurred while fetching pattern."
28 | );
29 | }
30 | };
31 | fetchPattern();
32 | }, [patternId]);
33 |
34 | //functions to handle printing
35 | const reactToPrintFn = useReactToPrint({
36 | title: pattern?.title || "New Pattern",
37 | contentRef: ref,
38 | onAfterPrint: () => setIsDisabled(false)
39 | });
40 |
41 | const handlePrint = () => {
42 | setIsDisabled(true)
43 | reactToPrintFn()
44 | }
45 |
46 | const handleDelete = async () => {
47 | try {
48 | setIsDisabled(true);
49 | await deletePattern(patternId);
50 | navigate("/patterns");
51 | } catch (e) {
52 | console.error(e);
53 | setMessage(
54 | e.message || "An error occurred while deleting pattern."
55 | );
56 | }
57 | };
58 |
59 | const handleEdit = () => {
60 | setIsDisabled(true);
61 | navigate(`/patterns/${pattern._id}/edit`)
62 | }
63 |
64 | if (!pattern){
65 | return(
66 |
67 | {/* Error Message Box */}
68 | {message && (
69 |
74 | )}
75 |
Pattern loading...
;
76 |
77 | )
78 |
79 | }
80 |
81 | return (
82 |
83 | {/* Error Message Box */}
84 | {message && (
85 |
90 | )}
91 |
92 | {/* pattern detail section */}
93 |
96 |
97 | {/* print, edit, and delete buttons */}
98 |
99 |
104 | Print
105 |
106 |
111 | Edit
112 |
113 |
118 | Delete
119 |
120 |
121 |
122 | );
123 | }
124 |
--------------------------------------------------------------------------------
/src/pages/PatternGenerator.jsx:
--------------------------------------------------------------------------------
1 | import { useEffect, useState } from "react";
2 | import { useNavigate, useParams } from "react-router";
3 |
4 | import PatternDetail from "../components/PatternDetail";
5 | import PatternForm from "../components/PatternForm";
6 | import MessageDiv from "../components/MessageDiv";
7 |
8 | import { createPattern, editPattern, getPattern } from "../api/pattern";
9 |
10 | const emptyPattern = {
11 | foot_circ: "",
12 | foot_length: "",
13 | thigh_circ: "",
14 | sock_length: "",
15 | stitch_gauge: "",
16 | row_gauge: "",
17 | pattern_repeat: "",
18 | title: "",
19 | };
20 |
21 | export default function PatternGenerator() {
22 | const { patternId } = useParams();
23 | const [pattern, setPattern] = useState(emptyPattern);
24 | const [isSubmitted, setIsSubmitted] = useState(false); // boolean used to toggle pattern details visibility
25 | const [isSaving, setIsSaving] = useState(false); // boolean used to disable save button
26 | const [message, setMessage] = useState(null); // Holds error message
27 | const navigate = useNavigate();
28 |
29 | const isNewPattern = !patternId;
30 |
31 | //fetches pattern if there is an Id in the URL, otherwise it set the pattern to an empty pattern
32 | useEffect(() => {
33 | if (isNewPattern) {
34 | setPattern(emptyPattern);
35 | } else {
36 | const fetchPattern = async () => {
37 | try {
38 | const pattern = await getPattern(patternId);
39 | setPattern(pattern);
40 | } catch (e) {
41 | console.error(e);
42 | setMessage(
43 | e.response?.data?.message ||
44 | "An error occurred while generating pattern."
45 | );
46 | }
47 | };
48 |
49 | fetchPattern();
50 | }
51 | }, [patternId]);
52 |
53 | const handleSave = async () => {
54 | setIsSaving(true)
55 | let newPattern
56 | try {
57 | if (!isNewPattern) {
58 | newPattern = await editPattern(pattern._id, pattern);
59 | } else {
60 | newPattern = await createPattern(pattern);
61 | }
62 |
63 | navigate(`/patterns/${newPattern._id}`);
64 | } catch (e) {
65 | console.error(e);
66 | setIsSaving(false);
67 | setMessage(
68 | e.message || "An error occurred while saving pattern."
69 | );
70 | }
71 | };
72 |
73 | return (
74 |
75 |
76 |
81 |
82 | {/* Error Message Box */}
83 | {message && (
84 |
89 | )}
90 |
91 | {/* pattern detail, will only render after form has been submitted */}
92 | {isSubmitted && (
93 |
94 |
95 |
100 | {isNewPattern ? "Save Pattern" : "Update Pattern"}
101 |
102 |
103 | )}
104 |
105 |
106 | );
107 | }
108 |
--------------------------------------------------------------------------------
/src/pages/PatternsPage.jsx:
--------------------------------------------------------------------------------
1 | import { useEffect, useState } from "react";
2 | import { Link } from "react-router";
3 |
4 | import PatternSummary from "../components/PatternSummary";
5 | import MessageDiv from "../components/MessageDiv";
6 | import { getPatterns } from "../api/pattern";
7 | import { useDispatch, useSelector } from "react-redux";
8 | import { setPatterns } from "../store/patternsSlice";
9 |
10 | export default function PatternsPage() {
11 | const [message, setMessage] = useState(null); // Holds error message
12 | const dispatch = useDispatch();
13 | const patterns = useSelector((state) => state.patterns);
14 |
15 | // fetches all patterns from db on component's first render
16 | useEffect(() => {
17 | const fetchPatterns = async () => {
18 | try {
19 | const allPatterns = await getPatterns();
20 | dispatch(setPatterns(allPatterns));
21 | } catch (e) {
22 | console.error("Failed to fetch patterns", e);
23 | setMessage(e.message || "An error occurred while fetching patterns.");
24 | }
25 | };
26 | fetchPatterns();
27 | }, [dispatch]);
28 |
29 | if (patterns.length === 0) {
30 | return (
31 |
32 | {/* Error Message Box */}
33 | {message && (
34 |
39 | )}
40 |
Loading patterns...
41 |
42 | );
43 | }
44 |
45 | return (
46 |
47 | {/* Error Message Box */}
48 | {message && (
49 |
54 | )}
55 |
56 | {/* pattern summaries section */}
57 |
58 | {patterns.map((pattern) => (
59 |
64 | ))}
65 |
66 |
67 | );
68 | }
69 |
--------------------------------------------------------------------------------
/src/pages/ProjectsPage.jsx:
--------------------------------------------------------------------------------
1 | import { useEffect, useState } from "react";
2 | import { Link } from "react-router";
3 |
4 | import MessageDiv from "../components/MessageDiv";
5 | import { getProjects } from "../api/project";
6 | import ProjectSummary from "../components/ProjectSummary";
7 |
8 | export default function ProjectsPage() {
9 | const [message, setMessage] = useState(null); // Holds error message
10 | const [projects, setProjects] = useState([]);
11 |
12 | // fetches all projects from db on component's first render
13 | useEffect(() => {
14 | const fetchProjects = async () => {
15 | try {
16 | const allProjects = await getProjects();
17 | setProjects(allProjects);
18 | } catch (e) {
19 | console.error("Failed to fetch projects", e);
20 | setMessage(e.message || "An error occurred while fetching projects.");
21 | }
22 | };
23 | fetchProjects();
24 | }, []);
25 |
26 | if (projects.length === 0) {
27 | return (
28 |
29 | {/* Error Message Box */}
30 | {message && (
31 |
36 | )}
37 |
Loading projects...
{" "}
38 |
39 | );
40 | }
41 |
42 | return (
43 |
44 | {/* Error Message Box */}
45 | {message && (
46 |
51 | )}
52 |
53 | {/* project summaries section */}
54 |
55 | {projects.map((project) => (
56 |
57 | {/*
*/}
58 |
59 | {/* */}
60 |
61 | ))}
62 |
63 |
64 | );
65 | }
66 |
--------------------------------------------------------------------------------
/src/store/patternsSlice.js:
--------------------------------------------------------------------------------
1 | import {createSlice} from '@reduxjs/toolkit'
2 |
3 | export const patternsSlice = createSlice({
4 | name: 'patterns',
5 | initialState: [],
6 | reducers: {
7 | //used to set all patterns (ex. when data is fetched from DB)
8 | setPatterns: (state, action) => {
9 | return action.payload
10 | },
11 | //used to add a pattern (when a new pattern is generated)
12 | addPattern: (state, action) => {
13 | state.push(action.payload)
14 | },
15 | //used to update a pattern
16 | updatePattern: (state, action) => {
17 | const index = state.patterns.findIndex(pattern => pattern._id === action.payload._id)
18 | if (index !== -1) {
19 | state[index] = action.payload
20 | }
21 | },
22 | removePattern: (state, action) => {
23 | state = state.filter(pattern => pattern._id !== action.payload)
24 | }
25 | }
26 | })
27 |
28 | export const { setPatterns, addPattern, updatePattern, removePattern } = patternsSlice.actions
29 | export default patternsSlice.reducer
--------------------------------------------------------------------------------
/src/store/store.js:
--------------------------------------------------------------------------------
1 | import { configureStore } from "@reduxjs/toolkit";
2 |
3 | import patternsReducer from './patternsSlice'
4 |
5 | export const store = configureStore({
6 | reducer: {
7 | patterns: patternsReducer
8 | }
9 | })
--------------------------------------------------------------------------------
/src/utils/patternMath.js:
--------------------------------------------------------------------------------
1 | //helper function to round to the nearest even number
2 | const roundEven = (num) => {
3 | return 2 * Math.round(num / 2)
4 | }
5 |
6 | export const calculateFootSts = (footCirc, stitchGauge) => {
7 | return roundEven(footCirc * stitchGauge * 0.9)
8 | }
9 |
10 | export const castOnSts = (footCirc, stitchGauge) => {
11 | return roundEven(calculateFootSts(footCirc, stitchGauge) / 6) * 2
12 | }
13 |
14 | export const inBeforeGusset = (footLength, footCirc, stitchGauge, rowGauge) => {
15 | return Number((footLength - (calculateFootSts(footCirc, stitchGauge) / rowGauge) - 0.25).toFixed(4))
16 | }
17 |
18 | export const patternStsOnFoot = (footCirc, stitchGauge, patternRepeat) => {
19 | return Math.floor(calculateFootSts(footCirc, stitchGauge) / 2 / patternRepeat) * patternRepeat
20 | }
21 |
22 | export const patternFramingSts = (footCirc, stitchGauge, patternRepeat) => {
23 | return (calculateFootSts(footCirc, stitchGauge) / 2 - patternStsOnFoot(footCirc, stitchGauge, patternRepeat))/2
24 | }
25 |
26 | export const gussetInc = (footCirc, stitchGauge) => {
27 | return calculateFootSts(footCirc, stitchGauge) / 4
28 | }
29 |
30 | export const gussetExp = (footCirc, stitchGauge) => {
31 | return Math.round(calculateFootSts(footCirc, stitchGauge) / 10)
32 | }
33 |
34 | export const wrappedSts = (footCirc, stitchGauge) => {
35 | return Math.floor((Math.ceil(calculateFootSts(footCirc, stitchGauge) * 0.3) - 2) / 2)
36 | }
37 |
38 | // leg shaping -- this requires multiple helper functions and may be refactored later
39 | const totalInc = (thighCirc, footCirc, stitchGauge) => {
40 | return roundEven(thighCirc * stitchGauge * 0.9) - calculateFootSts(footCirc, stitchGauge) - 14
41 | }
42 |
43 | const stageI = (thighCirc, footCirc, stitchGauge) => {
44 | return roundEven(totalInc(thighCirc, footCirc, stitchGauge) / 2)
45 | }
46 |
47 | const stageIIandIII = (thighCirc, footCirc, stitchGauge) => {
48 | return (totalInc(thighCirc, footCirc, stitchGauge) - stageI(thighCirc, footCirc, stitchGauge)) / 2
49 | }
50 |
51 | export const incEveryOtherRnd = (thighCirc, footCirc, stitchGauge) => {
52 | return stageI(thighCirc, footCirc, stitchGauge) / 2
53 | }
54 |
55 | export const incEvery8Rnds = (thighCirc, footCirc, stitchGauge) => {
56 | return Math.round(stageIIandIII(thighCirc, footCirc, stitchGauge) / 2)
57 | }
58 |
59 | export const incEvery10Rnds = (thighCirc, footCirc, stitchGauge) => {
60 | return (totalInc(thighCirc, footCirc, stitchGauge) / 2 ) - incEveryOtherRnd(thighCirc, footCirc, stitchGauge) - incEvery8Rnds(thighCirc, footCirc, stitchGauge)
61 | }
62 |
63 | export const legLength = (desiredLength, rowGauge) => {
64 | return Number((desiredLength - (39/rowGauge)).toFixed(2))
65 | }
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 | import tailwindcss from '@tailwindcss/vite'
4 |
5 | // https://vite.dev/config/
6 | export default defineConfig({
7 | plugins: [react(), tailwindcss(),],
8 | server: {
9 | proxy: {
10 | "/api": {
11 | target: "https://capstone-backend-i1us.onrender.com",
12 | changeOrigin: true,
13 | }
14 | }
15 | }
16 | })
17 |
--------------------------------------------------------------------------------