├── .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 | 20 |
21 |
22 | ); 23 | } 24 | -------------------------------------------------------------------------------- /src/components/NavBar.jsx: -------------------------------------------------------------------------------- 1 | import { NavLink } from "react-router"; 2 | 3 | export default function NavBar() { 4 | return ( 5 | 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 |
  1. k1, m1l, k to one stitch before marker, m1r, k2, m1l, knit to 1 stitch before BOR marker, m1r, k1
  2. 51 |
  3. knit around
  4. 52 |
53 | 56 | 57 |

Foot

58 | 62 | 63 |

Gusset

64 | 68 |
    69 |
  1. 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
  2. 70 |
  3. k{framingSts}, work in pattern across next {patternSts} stitches, knit to EOR
  4. 71 |
72 | 77 | 78 |

Heel Turn

79 |

Worked over sole stitches only

80 |
    81 |
  1. *k1, sl1* to 2 stitches before marker, wrap and turn
  2. 82 |
  3. p to 2 stitches before marker, wrap and turn
  4. 83 |
  5. k1, *sl1, k1* to 3 stitches before marker, wrap and turn
  6. 84 |
  7. p to 3 stitches before marker, wrap and turn
  8. 85 |
  9. sl1, *k1, sl1* to 4 stitches before marker, wrap and turn
  10. 86 |
  11. p to 4 stitches before marker, wrap and turn
  12. 87 |
88 | 93 | 94 |

Heel Flap

95 |

You should be ready to work on the right side of the sock

96 |
    97 |
  1. (rs) sl1, *k1, sl1* until 1 stitch before the first marker. rm, ssk, turn
  2. 98 |
  3. (ws) sl1, p until 1 stitch before the marker. rm, p2tog, turn
  4. 99 |
  5. sl1, k2, *sl1, k1* until 1 stitch before the gap, ssk, turn
  6. 100 |
  7. sl1, p until 1 stitch before the gap, p2tog, turn
  8. 101 |
  9. sl1, *k1, sl1* until 1 stitch before the gap, ssk, turn
  10. 102 |
  11. sl1, p until 1 stitch before the gap, p2tog, turn
  12. 103 |
104 | 107 | 108 |

Leg

109 |

return to working in the round

110 | 115 |

Increase Round: keeping pattern correct, m1l, work in pater to last st, m1r, p1

116 | 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 |
  1. Work 1x1 ribbing until last st, dinc, p1
  2. 127 |
128 | 131 |
    132 |
  1. k1, dinc, work 1x1 ribbing until end
  2. 133 |
  3. k1, dinc, work 1x1 ribbing until end
  4. 134 |
135 | 138 |
    139 |
  1. Work 1x1 ribbing to last st, dinc, p1
  2. 140 |
  3. Work 1x1 ribbing to last st, dinc, p1
  4. 141 |
142 | 145 |
    146 |
  1. k1, dinc, work 1x1 ribbing until end
  2. 147 |
  3. k1, dinc, work 1x1 ribbing until end
  4. 148 |
149 | 152 |
    153 |
  1. (eyelet round) 1x1 rib 3, *yo, k2tog, 1x1 rib 4 repeat from * to last 3 stitches, yo, k2tog, p1
  2. 154 |
155 | 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 |
23 |
24 | 25 | 34 |
35 | 36 | 47 | 48 | 59 | 60 | 71 | 72 | 83 | 84 | 95 | 96 | 107 | 108 | 118 |
119 |
120 | 121 |
122 |
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 |
67 | 70 |

Project name must be unique

71 | 80 | 81 |
82 | 85 | 93 | 94 | 97 | 104 |
105 |
106 | 114 | 117 |
118 | 119 | 126 |
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 |
7 | 8 |
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 |
94 | 95 |
96 | 97 | {/* print, edit, and delete buttons */} 98 |
99 | 106 | 113 | 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 | 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 |
60 | 61 | 62 | 63 |
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 | --------------------------------------------------------------------------------