Rules-based browser launcher for TUI + GNOME. switchyard.aly.codes
tui gome bowser go
0

Configure Feed

Select the types of activity you want to include in your feed.

add website to monorepo

Aly Raffauf (Jun 21, 2026, 12:41 PM EDT) 75f36d2b 908c750f

+5269
+41
.github/workflows/website.yml
··· 1 + on: 2 + push: 3 + branches: [master] 4 + paths: 5 + - "website/**" 6 + - ".github/workflows/website.yml" 7 + workflow_dispatch: 8 + name: Website 9 + jobs: 10 + publish: 11 + name: "Build and Publish Image" 12 + runs-on: ubuntu-latest 13 + permissions: 14 + contents: read 15 + packages: write 16 + steps: 17 + - uses: actions/checkout@v4 18 + - uses: docker/setup-qemu-action@v3 19 + - uses: docker/setup-buildx-action@v3 20 + - name: Log in to GHCR 21 + uses: docker/login-action@v3 22 + with: 23 + registry: ghcr.io 24 + username: ${{ github.actor }} 25 + password: ${{ secrets.GITHUB_TOKEN }} 26 + - name: Extract image metadata 27 + id: meta 28 + uses: docker/metadata-action@v5 29 + with: 30 + images: ghcr.io/${{ github.repository_owner }}/switchyard-website 31 + tags: | 32 + type=raw,value=latest 33 + type=sha 34 + - name: Build and push 35 + uses: docker/build-push-action@v6 36 + with: 37 + context: website 38 + platforms: linux/amd64,linux/arm64 39 + push: true 40 + tags: ${{ steps.meta.outputs.tags }} 41 + labels: ${{ steps.meta.outputs.labels }}
+2
website/.dockerignore
··· 1 + node_modules 2 + dist
+3
website/.gitignore
··· 1 + node_modules 2 + dist 3 + public/og-image.png
+10
website/Dockerfile
··· 1 + FROM node:22-alpine AS build 2 + WORKDIR /app 3 + COPY package.json package-lock.json ./ 4 + RUN npm ci 5 + COPY . . 6 + RUN npm run build 7 + 8 + FROM nginx:alpine 9 + COPY --from=build /app/dist /usr/share/nginx/html 10 + EXPOSE 80
+27
website/README.md
··· 1 + # Switchyard Website 2 + 3 + Landing page for [Switchyard](https://github.com/alyraffauf/switchyard), a rules-based URL router for Linux. 4 + 5 + Built with React + Vite. Published as a container image to `ghcr.io/alyraffauf/switchyard-website`. 6 + 7 + ## Development 8 + 9 + ```bash 10 + npm install 11 + npm run dev 12 + ``` 13 + 14 + ## Build 15 + 16 + ```bash 17 + npm run build 18 + ``` 19 + 20 + Outputs to `dist/`. 21 + 22 + ## Container 23 + 24 + ```bash 25 + docker build -t switchyard-website . 26 + docker run --rm -p 8080:80 switchyard-website 27 + ```
+23
website/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 + import tseslint from 'typescript-eslint' 6 + import { defineConfig, globalIgnores } from 'eslint/config' 7 + 8 + export default defineConfig([ 9 + globalIgnores(['dist']), 10 + { 11 + files: ['**/*.{ts,tsx}'], 12 + extends: [ 13 + js.configs.recommended, 14 + tseslint.configs.recommended, 15 + reactHooks.configs.flat.recommended, 16 + reactRefresh.configs.vite, 17 + ], 18 + languageOptions: { 19 + ecmaVersion: 2020, 20 + globals: globals.browser, 21 + }, 22 + }, 23 + ])
+41
website/index.html
··· 1 + <!doctype html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="UTF-8" /> 5 + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 + <title>Switchyard - A Rules-Based Browser Launcher for Linux</title> 7 + <meta 8 + name="description" 9 + content="Work links in Chrome. Personal links in Firefox." 10 + /> 11 + 12 + <!-- Favicon --> 13 + <link rel="icon" type="image/svg+xml" href="/icon.svg" /> 14 + <link rel="apple-touch-icon" href="/icon.svg" /> 15 + 16 + <!-- Open Graph / Twitter --> 17 + <meta property="og:type" content="website" /> 18 + <meta property="og:url" content="https://switchyard.aly.codes/" /> 19 + <meta 20 + property="og:title" 21 + content="Switchyard - A Rules-Based Browser Launcher for Linux" 22 + /> 23 + <meta 24 + property="og:description" 25 + content="Work links in Chrome. Personal links in Firefox." 26 + /> 27 + <meta 28 + property="og:image" 29 + content="https://switchyard.aly.codes/og-image.png" 30 + /> 31 + <meta name="twitter:card" content="summary_large_image" /> 32 + 33 + <!-- Additional SEO --> 34 + <meta name="theme-color" content="#4f895d" /> 35 + <link rel="canonical" href="https://switchyard.aly.codes/" /> 36 + </head> 37 + <body> 38 + <div id="root"></div> 39 + <script type="module" src="/src/main.tsx"></script> 40 + </body> 41 + </html>
+4305
website/package-lock.json
··· 1 + { 2 + "name": "website", 3 + "version": "0.0.0", 4 + "lockfileVersion": 3, 5 + "requires": true, 6 + "packages": { 7 + "": { 8 + "name": "website", 9 + "version": "0.0.0", 10 + "dependencies": { 11 + "react": "^19.2.0", 12 + "react-dom": "^19.2.0" 13 + }, 14 + "devDependencies": { 15 + "@eslint/js": "^9.39.1", 16 + "@resvg/resvg-js": "^2.6.2", 17 + "@tailwindcss/vite": "^4.1.18", 18 + "@types/node": "^24.10.1", 19 + "@types/react": "^19.2.5", 20 + "@types/react-dom": "^19.2.3", 21 + "@vitejs/plugin-react": "^5.1.1", 22 + "eslint": "^9.39.1", 23 + "eslint-plugin-react-hooks": "^7.0.1", 24 + "eslint-plugin-react-refresh": "^0.4.24", 25 + "globals": "^16.5.0", 26 + "satori": "^0.19.1", 27 + "tailwindcss": "^4.1.18", 28 + "typescript": "~5.9.3", 29 + "typescript-eslint": "^8.46.4", 30 + "vite": "^7.2.4" 31 + } 32 + }, 33 + "node_modules/@babel/code-frame": { 34 + "version": "7.28.6", 35 + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", 36 + "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==", 37 + "dev": true, 38 + "license": "MIT", 39 + "dependencies": { 40 + "@babel/helper-validator-identifier": "^7.28.5", 41 + "js-tokens": "^4.0.0", 42 + "picocolors": "^1.1.1" 43 + }, 44 + "engines": { 45 + "node": ">=6.9.0" 46 + } 47 + }, 48 + "node_modules/@babel/compat-data": { 49 + "version": "7.28.6", 50 + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.6.tgz", 51 + "integrity": "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==", 52 + "dev": true, 53 + "license": "MIT", 54 + "engines": { 55 + "node": ">=6.9.0" 56 + } 57 + }, 58 + "node_modules/@babel/core": { 59 + "version": "7.28.6", 60 + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz", 61 + "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", 62 + "dev": true, 63 + "license": "MIT", 64 + "dependencies": { 65 + "@babel/code-frame": "^7.28.6", 66 + "@babel/generator": "^7.28.6", 67 + "@babel/helper-compilation-targets": "^7.28.6", 68 + "@babel/helper-module-transforms": "^7.28.6", 69 + "@babel/helpers": "^7.28.6", 70 + "@babel/parser": "^7.28.6", 71 + "@babel/template": "^7.28.6", 72 + "@babel/traverse": "^7.28.6", 73 + "@babel/types": "^7.28.6", 74 + "@jridgewell/remapping": "^2.3.5", 75 + "convert-source-map": "^2.0.0", 76 + "debug": "^4.1.0", 77 + "gensync": "^1.0.0-beta.2", 78 + "json5": "^2.2.3", 79 + "semver": "^6.3.1" 80 + }, 81 + "engines": { 82 + "node": ">=6.9.0" 83 + }, 84 + "funding": { 85 + "type": "opencollective", 86 + "url": "https://opencollective.com/babel" 87 + } 88 + }, 89 + "node_modules/@babel/generator": { 90 + "version": "7.28.6", 91 + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz", 92 + "integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==", 93 + "dev": true, 94 + "license": "MIT", 95 + "dependencies": { 96 + "@babel/parser": "^7.28.6", 97 + "@babel/types": "^7.28.6", 98 + "@jridgewell/gen-mapping": "^0.3.12", 99 + "@jridgewell/trace-mapping": "^0.3.28", 100 + "jsesc": "^3.0.2" 101 + }, 102 + "engines": { 103 + "node": ">=6.9.0" 104 + } 105 + }, 106 + "node_modules/@babel/helper-compilation-targets": { 107 + "version": "7.28.6", 108 + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", 109 + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", 110 + "dev": true, 111 + "license": "MIT", 112 + "dependencies": { 113 + "@babel/compat-data": "^7.28.6", 114 + "@babel/helper-validator-option": "^7.27.1", 115 + "browserslist": "^4.24.0", 116 + "lru-cache": "^5.1.1", 117 + "semver": "^6.3.1" 118 + }, 119 + "engines": { 120 + "node": ">=6.9.0" 121 + } 122 + }, 123 + "node_modules/@babel/helper-globals": { 124 + "version": "7.28.0", 125 + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", 126 + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", 127 + "dev": true, 128 + "license": "MIT", 129 + "engines": { 130 + "node": ">=6.9.0" 131 + } 132 + }, 133 + "node_modules/@babel/helper-module-imports": { 134 + "version": "7.28.6", 135 + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", 136 + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", 137 + "dev": true, 138 + "license": "MIT", 139 + "dependencies": { 140 + "@babel/traverse": "^7.28.6", 141 + "@babel/types": "^7.28.6" 142 + }, 143 + "engines": { 144 + "node": ">=6.9.0" 145 + } 146 + }, 147 + "node_modules/@babel/helper-module-transforms": { 148 + "version": "7.28.6", 149 + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", 150 + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", 151 + "dev": true, 152 + "license": "MIT", 153 + "dependencies": { 154 + "@babel/helper-module-imports": "^7.28.6", 155 + "@babel/helper-validator-identifier": "^7.28.5", 156 + "@babel/traverse": "^7.28.6" 157 + }, 158 + "engines": { 159 + "node": ">=6.9.0" 160 + }, 161 + "peerDependencies": { 162 + "@babel/core": "^7.0.0" 163 + } 164 + }, 165 + "node_modules/@babel/helper-plugin-utils": { 166 + "version": "7.28.6", 167 + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", 168 + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", 169 + "dev": true, 170 + "license": "MIT", 171 + "engines": { 172 + "node": ">=6.9.0" 173 + } 174 + }, 175 + "node_modules/@babel/helper-string-parser": { 176 + "version": "7.27.1", 177 + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", 178 + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", 179 + "dev": true, 180 + "license": "MIT", 181 + "engines": { 182 + "node": ">=6.9.0" 183 + } 184 + }, 185 + "node_modules/@babel/helper-validator-identifier": { 186 + "version": "7.28.5", 187 + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", 188 + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", 189 + "dev": true, 190 + "license": "MIT", 191 + "engines": { 192 + "node": ">=6.9.0" 193 + } 194 + }, 195 + "node_modules/@babel/helper-validator-option": { 196 + "version": "7.27.1", 197 + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", 198 + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", 199 + "dev": true, 200 + "license": "MIT", 201 + "engines": { 202 + "node": ">=6.9.0" 203 + } 204 + }, 205 + "node_modules/@babel/helpers": { 206 + "version": "7.28.6", 207 + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", 208 + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", 209 + "dev": true, 210 + "license": "MIT", 211 + "dependencies": { 212 + "@babel/template": "^7.28.6", 213 + "@babel/types": "^7.28.6" 214 + }, 215 + "engines": { 216 + "node": ">=6.9.0" 217 + } 218 + }, 219 + "node_modules/@babel/parser": { 220 + "version": "7.28.6", 221 + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", 222 + "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", 223 + "dev": true, 224 + "license": "MIT", 225 + "dependencies": { 226 + "@babel/types": "^7.28.6" 227 + }, 228 + "bin": { 229 + "parser": "bin/babel-parser.js" 230 + }, 231 + "engines": { 232 + "node": ">=6.0.0" 233 + } 234 + }, 235 + "node_modules/@babel/plugin-transform-react-jsx-self": { 236 + "version": "7.27.1", 237 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", 238 + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", 239 + "dev": true, 240 + "license": "MIT", 241 + "dependencies": { 242 + "@babel/helper-plugin-utils": "^7.27.1" 243 + }, 244 + "engines": { 245 + "node": ">=6.9.0" 246 + }, 247 + "peerDependencies": { 248 + "@babel/core": "^7.0.0-0" 249 + } 250 + }, 251 + "node_modules/@babel/plugin-transform-react-jsx-source": { 252 + "version": "7.27.1", 253 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", 254 + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", 255 + "dev": true, 256 + "license": "MIT", 257 + "dependencies": { 258 + "@babel/helper-plugin-utils": "^7.27.1" 259 + }, 260 + "engines": { 261 + "node": ">=6.9.0" 262 + }, 263 + "peerDependencies": { 264 + "@babel/core": "^7.0.0-0" 265 + } 266 + }, 267 + "node_modules/@babel/template": { 268 + "version": "7.28.6", 269 + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", 270 + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", 271 + "dev": true, 272 + "license": "MIT", 273 + "dependencies": { 274 + "@babel/code-frame": "^7.28.6", 275 + "@babel/parser": "^7.28.6", 276 + "@babel/types": "^7.28.6" 277 + }, 278 + "engines": { 279 + "node": ">=6.9.0" 280 + } 281 + }, 282 + "node_modules/@babel/traverse": { 283 + "version": "7.28.6", 284 + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz", 285 + "integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==", 286 + "dev": true, 287 + "license": "MIT", 288 + "dependencies": { 289 + "@babel/code-frame": "^7.28.6", 290 + "@babel/generator": "^7.28.6", 291 + "@babel/helper-globals": "^7.28.0", 292 + "@babel/parser": "^7.28.6", 293 + "@babel/template": "^7.28.6", 294 + "@babel/types": "^7.28.6", 295 + "debug": "^4.3.1" 296 + }, 297 + "engines": { 298 + "node": ">=6.9.0" 299 + } 300 + }, 301 + "node_modules/@babel/types": { 302 + "version": "7.28.6", 303 + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", 304 + "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", 305 + "dev": true, 306 + "license": "MIT", 307 + "dependencies": { 308 + "@babel/helper-string-parser": "^7.27.1", 309 + "@babel/helper-validator-identifier": "^7.28.5" 310 + }, 311 + "engines": { 312 + "node": ">=6.9.0" 313 + } 314 + }, 315 + "node_modules/@esbuild/aix-ppc64": { 316 + "version": "0.27.2", 317 + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", 318 + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", 319 + "cpu": [ 320 + "ppc64" 321 + ], 322 + "dev": true, 323 + "license": "MIT", 324 + "optional": true, 325 + "os": [ 326 + "aix" 327 + ], 328 + "engines": { 329 + "node": ">=18" 330 + } 331 + }, 332 + "node_modules/@esbuild/android-arm": { 333 + "version": "0.27.2", 334 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", 335 + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", 336 + "cpu": [ 337 + "arm" 338 + ], 339 + "dev": true, 340 + "license": "MIT", 341 + "optional": true, 342 + "os": [ 343 + "android" 344 + ], 345 + "engines": { 346 + "node": ">=18" 347 + } 348 + }, 349 + "node_modules/@esbuild/android-arm64": { 350 + "version": "0.27.2", 351 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", 352 + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", 353 + "cpu": [ 354 + "arm64" 355 + ], 356 + "dev": true, 357 + "license": "MIT", 358 + "optional": true, 359 + "os": [ 360 + "android" 361 + ], 362 + "engines": { 363 + "node": ">=18" 364 + } 365 + }, 366 + "node_modules/@esbuild/android-x64": { 367 + "version": "0.27.2", 368 + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", 369 + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", 370 + "cpu": [ 371 + "x64" 372 + ], 373 + "dev": true, 374 + "license": "MIT", 375 + "optional": true, 376 + "os": [ 377 + "android" 378 + ], 379 + "engines": { 380 + "node": ">=18" 381 + } 382 + }, 383 + "node_modules/@esbuild/darwin-arm64": { 384 + "version": "0.27.2", 385 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", 386 + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", 387 + "cpu": [ 388 + "arm64" 389 + ], 390 + "dev": true, 391 + "license": "MIT", 392 + "optional": true, 393 + "os": [ 394 + "darwin" 395 + ], 396 + "engines": { 397 + "node": ">=18" 398 + } 399 + }, 400 + "node_modules/@esbuild/darwin-x64": { 401 + "version": "0.27.2", 402 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", 403 + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", 404 + "cpu": [ 405 + "x64" 406 + ], 407 + "dev": true, 408 + "license": "MIT", 409 + "optional": true, 410 + "os": [ 411 + "darwin" 412 + ], 413 + "engines": { 414 + "node": ">=18" 415 + } 416 + }, 417 + "node_modules/@esbuild/freebsd-arm64": { 418 + "version": "0.27.2", 419 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", 420 + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", 421 + "cpu": [ 422 + "arm64" 423 + ], 424 + "dev": true, 425 + "license": "MIT", 426 + "optional": true, 427 + "os": [ 428 + "freebsd" 429 + ], 430 + "engines": { 431 + "node": ">=18" 432 + } 433 + }, 434 + "node_modules/@esbuild/freebsd-x64": { 435 + "version": "0.27.2", 436 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", 437 + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", 438 + "cpu": [ 439 + "x64" 440 + ], 441 + "dev": true, 442 + "license": "MIT", 443 + "optional": true, 444 + "os": [ 445 + "freebsd" 446 + ], 447 + "engines": { 448 + "node": ">=18" 449 + } 450 + }, 451 + "node_modules/@esbuild/linux-arm": { 452 + "version": "0.27.2", 453 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", 454 + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", 455 + "cpu": [ 456 + "arm" 457 + ], 458 + "dev": true, 459 + "license": "MIT", 460 + "optional": true, 461 + "os": [ 462 + "linux" 463 + ], 464 + "engines": { 465 + "node": ">=18" 466 + } 467 + }, 468 + "node_modules/@esbuild/linux-arm64": { 469 + "version": "0.27.2", 470 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", 471 + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", 472 + "cpu": [ 473 + "arm64" 474 + ], 475 + "dev": true, 476 + "license": "MIT", 477 + "optional": true, 478 + "os": [ 479 + "linux" 480 + ], 481 + "engines": { 482 + "node": ">=18" 483 + } 484 + }, 485 + "node_modules/@esbuild/linux-ia32": { 486 + "version": "0.27.2", 487 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", 488 + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", 489 + "cpu": [ 490 + "ia32" 491 + ], 492 + "dev": true, 493 + "license": "MIT", 494 + "optional": true, 495 + "os": [ 496 + "linux" 497 + ], 498 + "engines": { 499 + "node": ">=18" 500 + } 501 + }, 502 + "node_modules/@esbuild/linux-loong64": { 503 + "version": "0.27.2", 504 + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", 505 + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", 506 + "cpu": [ 507 + "loong64" 508 + ], 509 + "dev": true, 510 + "license": "MIT", 511 + "optional": true, 512 + "os": [ 513 + "linux" 514 + ], 515 + "engines": { 516 + "node": ">=18" 517 + } 518 + }, 519 + "node_modules/@esbuild/linux-mips64el": { 520 + "version": "0.27.2", 521 + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", 522 + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", 523 + "cpu": [ 524 + "mips64el" 525 + ], 526 + "dev": true, 527 + "license": "MIT", 528 + "optional": true, 529 + "os": [ 530 + "linux" 531 + ], 532 + "engines": { 533 + "node": ">=18" 534 + } 535 + }, 536 + "node_modules/@esbuild/linux-ppc64": { 537 + "version": "0.27.2", 538 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", 539 + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", 540 + "cpu": [ 541 + "ppc64" 542 + ], 543 + "dev": true, 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.27.2", 555 + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", 556 + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", 557 + "cpu": [ 558 + "riscv64" 559 + ], 560 + "dev": true, 561 + "license": "MIT", 562 + "optional": true, 563 + "os": [ 564 + "linux" 565 + ], 566 + "engines": { 567 + "node": ">=18" 568 + } 569 + }, 570 + "node_modules/@esbuild/linux-s390x": { 571 + "version": "0.27.2", 572 + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", 573 + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", 574 + "cpu": [ 575 + "s390x" 576 + ], 577 + "dev": true, 578 + "license": "MIT", 579 + "optional": true, 580 + "os": [ 581 + "linux" 582 + ], 583 + "engines": { 584 + "node": ">=18" 585 + } 586 + }, 587 + "node_modules/@esbuild/linux-x64": { 588 + "version": "0.27.2", 589 + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", 590 + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", 591 + "cpu": [ 592 + "x64" 593 + ], 594 + "dev": true, 595 + "license": "MIT", 596 + "optional": true, 597 + "os": [ 598 + "linux" 599 + ], 600 + "engines": { 601 + "node": ">=18" 602 + } 603 + }, 604 + "node_modules/@esbuild/netbsd-arm64": { 605 + "version": "0.27.2", 606 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", 607 + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", 608 + "cpu": [ 609 + "arm64" 610 + ], 611 + "dev": true, 612 + "license": "MIT", 613 + "optional": true, 614 + "os": [ 615 + "netbsd" 616 + ], 617 + "engines": { 618 + "node": ">=18" 619 + } 620 + }, 621 + "node_modules/@esbuild/netbsd-x64": { 622 + "version": "0.27.2", 623 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", 624 + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", 625 + "cpu": [ 626 + "x64" 627 + ], 628 + "dev": true, 629 + "license": "MIT", 630 + "optional": true, 631 + "os": [ 632 + "netbsd" 633 + ], 634 + "engines": { 635 + "node": ">=18" 636 + } 637 + }, 638 + "node_modules/@esbuild/openbsd-arm64": { 639 + "version": "0.27.2", 640 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", 641 + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", 642 + "cpu": [ 643 + "arm64" 644 + ], 645 + "dev": true, 646 + "license": "MIT", 647 + "optional": true, 648 + "os": [ 649 + "openbsd" 650 + ], 651 + "engines": { 652 + "node": ">=18" 653 + } 654 + }, 655 + "node_modules/@esbuild/openbsd-x64": { 656 + "version": "0.27.2", 657 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", 658 + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", 659 + "cpu": [ 660 + "x64" 661 + ], 662 + "dev": true, 663 + "license": "MIT", 664 + "optional": true, 665 + "os": [ 666 + "openbsd" 667 + ], 668 + "engines": { 669 + "node": ">=18" 670 + } 671 + }, 672 + "node_modules/@esbuild/openharmony-arm64": { 673 + "version": "0.27.2", 674 + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", 675 + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", 676 + "cpu": [ 677 + "arm64" 678 + ], 679 + "dev": true, 680 + "license": "MIT", 681 + "optional": true, 682 + "os": [ 683 + "openharmony" 684 + ], 685 + "engines": { 686 + "node": ">=18" 687 + } 688 + }, 689 + "node_modules/@esbuild/sunos-x64": { 690 + "version": "0.27.2", 691 + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", 692 + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", 693 + "cpu": [ 694 + "x64" 695 + ], 696 + "dev": true, 697 + "license": "MIT", 698 + "optional": true, 699 + "os": [ 700 + "sunos" 701 + ], 702 + "engines": { 703 + "node": ">=18" 704 + } 705 + }, 706 + "node_modules/@esbuild/win32-arm64": { 707 + "version": "0.27.2", 708 + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", 709 + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", 710 + "cpu": [ 711 + "arm64" 712 + ], 713 + "dev": true, 714 + "license": "MIT", 715 + "optional": true, 716 + "os": [ 717 + "win32" 718 + ], 719 + "engines": { 720 + "node": ">=18" 721 + } 722 + }, 723 + "node_modules/@esbuild/win32-ia32": { 724 + "version": "0.27.2", 725 + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", 726 + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", 727 + "cpu": [ 728 + "ia32" 729 + ], 730 + "dev": true, 731 + "license": "MIT", 732 + "optional": true, 733 + "os": [ 734 + "win32" 735 + ], 736 + "engines": { 737 + "node": ">=18" 738 + } 739 + }, 740 + "node_modules/@esbuild/win32-x64": { 741 + "version": "0.27.2", 742 + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", 743 + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", 744 + "cpu": [ 745 + "x64" 746 + ], 747 + "dev": true, 748 + "license": "MIT", 749 + "optional": true, 750 + "os": [ 751 + "win32" 752 + ], 753 + "engines": { 754 + "node": ">=18" 755 + } 756 + }, 757 + "node_modules/@eslint-community/eslint-utils": { 758 + "version": "4.9.1", 759 + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", 760 + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", 761 + "dev": true, 762 + "license": "MIT", 763 + "dependencies": { 764 + "eslint-visitor-keys": "^3.4.3" 765 + }, 766 + "engines": { 767 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 768 + }, 769 + "funding": { 770 + "url": "https://opencollective.com/eslint" 771 + }, 772 + "peerDependencies": { 773 + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 774 + } 775 + }, 776 + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { 777 + "version": "3.4.3", 778 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 779 + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 780 + "dev": true, 781 + "license": "Apache-2.0", 782 + "engines": { 783 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 784 + }, 785 + "funding": { 786 + "url": "https://opencollective.com/eslint" 787 + } 788 + }, 789 + "node_modules/@eslint-community/regexpp": { 790 + "version": "4.12.2", 791 + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", 792 + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", 793 + "dev": true, 794 + "license": "MIT", 795 + "engines": { 796 + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 797 + } 798 + }, 799 + "node_modules/@eslint/config-array": { 800 + "version": "0.21.1", 801 + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", 802 + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", 803 + "dev": true, 804 + "license": "Apache-2.0", 805 + "dependencies": { 806 + "@eslint/object-schema": "^2.1.7", 807 + "debug": "^4.3.1", 808 + "minimatch": "^3.1.2" 809 + }, 810 + "engines": { 811 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 812 + } 813 + }, 814 + "node_modules/@eslint/config-helpers": { 815 + "version": "0.4.2", 816 + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", 817 + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", 818 + "dev": true, 819 + "license": "Apache-2.0", 820 + "dependencies": { 821 + "@eslint/core": "^0.17.0" 822 + }, 823 + "engines": { 824 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 825 + } 826 + }, 827 + "node_modules/@eslint/core": { 828 + "version": "0.17.0", 829 + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", 830 + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", 831 + "dev": true, 832 + "license": "Apache-2.0", 833 + "dependencies": { 834 + "@types/json-schema": "^7.0.15" 835 + }, 836 + "engines": { 837 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 838 + } 839 + }, 840 + "node_modules/@eslint/eslintrc": { 841 + "version": "3.3.3", 842 + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", 843 + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", 844 + "dev": true, 845 + "license": "MIT", 846 + "dependencies": { 847 + "ajv": "^6.12.4", 848 + "debug": "^4.3.2", 849 + "espree": "^10.0.1", 850 + "globals": "^14.0.0", 851 + "ignore": "^5.2.0", 852 + "import-fresh": "^3.2.1", 853 + "js-yaml": "^4.1.1", 854 + "minimatch": "^3.1.2", 855 + "strip-json-comments": "^3.1.1" 856 + }, 857 + "engines": { 858 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 859 + }, 860 + "funding": { 861 + "url": "https://opencollective.com/eslint" 862 + } 863 + }, 864 + "node_modules/@eslint/eslintrc/node_modules/globals": { 865 + "version": "14.0.0", 866 + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", 867 + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", 868 + "dev": true, 869 + "license": "MIT", 870 + "engines": { 871 + "node": ">=18" 872 + }, 873 + "funding": { 874 + "url": "https://github.com/sponsors/sindresorhus" 875 + } 876 + }, 877 + "node_modules/@eslint/js": { 878 + "version": "9.39.2", 879 + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", 880 + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", 881 + "dev": true, 882 + "license": "MIT", 883 + "engines": { 884 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 885 + }, 886 + "funding": { 887 + "url": "https://eslint.org/donate" 888 + } 889 + }, 890 + "node_modules/@eslint/object-schema": { 891 + "version": "2.1.7", 892 + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", 893 + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", 894 + "dev": true, 895 + "license": "Apache-2.0", 896 + "engines": { 897 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 898 + } 899 + }, 900 + "node_modules/@eslint/plugin-kit": { 901 + "version": "0.4.1", 902 + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", 903 + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", 904 + "dev": true, 905 + "license": "Apache-2.0", 906 + "dependencies": { 907 + "@eslint/core": "^0.17.0", 908 + "levn": "^0.4.1" 909 + }, 910 + "engines": { 911 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 912 + } 913 + }, 914 + "node_modules/@humanfs/core": { 915 + "version": "0.19.1", 916 + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", 917 + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", 918 + "dev": true, 919 + "license": "Apache-2.0", 920 + "engines": { 921 + "node": ">=18.18.0" 922 + } 923 + }, 924 + "node_modules/@humanfs/node": { 925 + "version": "0.16.7", 926 + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", 927 + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", 928 + "dev": true, 929 + "license": "Apache-2.0", 930 + "dependencies": { 931 + "@humanfs/core": "^0.19.1", 932 + "@humanwhocodes/retry": "^0.4.0" 933 + }, 934 + "engines": { 935 + "node": ">=18.18.0" 936 + } 937 + }, 938 + "node_modules/@humanwhocodes/module-importer": { 939 + "version": "1.0.1", 940 + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 941 + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 942 + "dev": true, 943 + "license": "Apache-2.0", 944 + "engines": { 945 + "node": ">=12.22" 946 + }, 947 + "funding": { 948 + "type": "github", 949 + "url": "https://github.com/sponsors/nzakas" 950 + } 951 + }, 952 + "node_modules/@humanwhocodes/retry": { 953 + "version": "0.4.3", 954 + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", 955 + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", 956 + "dev": true, 957 + "license": "Apache-2.0", 958 + "engines": { 959 + "node": ">=18.18" 960 + }, 961 + "funding": { 962 + "type": "github", 963 + "url": "https://github.com/sponsors/nzakas" 964 + } 965 + }, 966 + "node_modules/@jridgewell/gen-mapping": { 967 + "version": "0.3.13", 968 + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", 969 + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", 970 + "dev": true, 971 + "license": "MIT", 972 + "dependencies": { 973 + "@jridgewell/sourcemap-codec": "^1.5.0", 974 + "@jridgewell/trace-mapping": "^0.3.24" 975 + } 976 + }, 977 + "node_modules/@jridgewell/remapping": { 978 + "version": "2.3.5", 979 + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", 980 + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", 981 + "dev": true, 982 + "license": "MIT", 983 + "dependencies": { 984 + "@jridgewell/gen-mapping": "^0.3.5", 985 + "@jridgewell/trace-mapping": "^0.3.24" 986 + } 987 + }, 988 + "node_modules/@jridgewell/resolve-uri": { 989 + "version": "3.1.2", 990 + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 991 + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 992 + "dev": true, 993 + "license": "MIT", 994 + "engines": { 995 + "node": ">=6.0.0" 996 + } 997 + }, 998 + "node_modules/@jridgewell/sourcemap-codec": { 999 + "version": "1.5.5", 1000 + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", 1001 + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", 1002 + "dev": true, 1003 + "license": "MIT" 1004 + }, 1005 + "node_modules/@jridgewell/trace-mapping": { 1006 + "version": "0.3.31", 1007 + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", 1008 + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", 1009 + "dev": true, 1010 + "license": "MIT", 1011 + "dependencies": { 1012 + "@jridgewell/resolve-uri": "^3.1.0", 1013 + "@jridgewell/sourcemap-codec": "^1.4.14" 1014 + } 1015 + }, 1016 + "node_modules/@resvg/resvg-js": { 1017 + "version": "2.6.2", 1018 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js/-/resvg-js-2.6.2.tgz", 1019 + "integrity": "sha512-xBaJish5OeGmniDj9cW5PRa/PtmuVU3ziqrbr5xJj901ZDN4TosrVaNZpEiLZAxdfnhAe7uQ7QFWfjPe9d9K2Q==", 1020 + "dev": true, 1021 + "license": "MPL-2.0", 1022 + "engines": { 1023 + "node": ">= 10" 1024 + }, 1025 + "optionalDependencies": { 1026 + "@resvg/resvg-js-android-arm-eabi": "2.6.2", 1027 + "@resvg/resvg-js-android-arm64": "2.6.2", 1028 + "@resvg/resvg-js-darwin-arm64": "2.6.2", 1029 + "@resvg/resvg-js-darwin-x64": "2.6.2", 1030 + "@resvg/resvg-js-linux-arm-gnueabihf": "2.6.2", 1031 + "@resvg/resvg-js-linux-arm64-gnu": "2.6.2", 1032 + "@resvg/resvg-js-linux-arm64-musl": "2.6.2", 1033 + "@resvg/resvg-js-linux-x64-gnu": "2.6.2", 1034 + "@resvg/resvg-js-linux-x64-musl": "2.6.2", 1035 + "@resvg/resvg-js-win32-arm64-msvc": "2.6.2", 1036 + "@resvg/resvg-js-win32-ia32-msvc": "2.6.2", 1037 + "@resvg/resvg-js-win32-x64-msvc": "2.6.2" 1038 + } 1039 + }, 1040 + "node_modules/@resvg/resvg-js-android-arm-eabi": { 1041 + "version": "2.6.2", 1042 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-android-arm-eabi/-/resvg-js-android-arm-eabi-2.6.2.tgz", 1043 + "integrity": "sha512-FrJibrAk6v29eabIPgcTUMPXiEz8ssrAk7TXxsiZzww9UTQ1Z5KAbFJs+Z0Ez+VZTYgnE5IQJqBcoSiMebtPHA==", 1044 + "cpu": [ 1045 + "arm" 1046 + ], 1047 + "dev": true, 1048 + "license": "MPL-2.0", 1049 + "optional": true, 1050 + "os": [ 1051 + "android" 1052 + ], 1053 + "engines": { 1054 + "node": ">= 10" 1055 + } 1056 + }, 1057 + "node_modules/@resvg/resvg-js-android-arm64": { 1058 + "version": "2.6.2", 1059 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-android-arm64/-/resvg-js-android-arm64-2.6.2.tgz", 1060 + "integrity": "sha512-VcOKezEhm2VqzXpcIJoITuvUS/fcjIw5NA/w3tjzWyzmvoCdd+QXIqy3FBGulWdClvp4g+IfUemigrkLThSjAQ==", 1061 + "cpu": [ 1062 + "arm64" 1063 + ], 1064 + "dev": true, 1065 + "license": "MPL-2.0", 1066 + "optional": true, 1067 + "os": [ 1068 + "android" 1069 + ], 1070 + "engines": { 1071 + "node": ">= 10" 1072 + } 1073 + }, 1074 + "node_modules/@resvg/resvg-js-darwin-arm64": { 1075 + "version": "2.6.2", 1076 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-darwin-arm64/-/resvg-js-darwin-arm64-2.6.2.tgz", 1077 + "integrity": "sha512-nmok2LnAd6nLUKI16aEB9ydMC6Lidiiq2m1nEBDR1LaaP7FGs4AJ90qDraxX+CWlVuRlvNjyYJTNv8qFjtL9+A==", 1078 + "cpu": [ 1079 + "arm64" 1080 + ], 1081 + "dev": true, 1082 + "license": "MPL-2.0", 1083 + "optional": true, 1084 + "os": [ 1085 + "darwin" 1086 + ], 1087 + "engines": { 1088 + "node": ">= 10" 1089 + } 1090 + }, 1091 + "node_modules/@resvg/resvg-js-darwin-x64": { 1092 + "version": "2.6.2", 1093 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-darwin-x64/-/resvg-js-darwin-x64-2.6.2.tgz", 1094 + "integrity": "sha512-GInyZLjgWDfsVT6+SHxQVRwNzV0AuA1uqGsOAW+0th56J7Nh6bHHKXHBWzUrihxMetcFDmQMAX1tZ1fZDYSRsw==", 1095 + "cpu": [ 1096 + "x64" 1097 + ], 1098 + "dev": true, 1099 + "license": "MPL-2.0", 1100 + "optional": true, 1101 + "os": [ 1102 + "darwin" 1103 + ], 1104 + "engines": { 1105 + "node": ">= 10" 1106 + } 1107 + }, 1108 + "node_modules/@resvg/resvg-js-linux-arm-gnueabihf": { 1109 + "version": "2.6.2", 1110 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm-gnueabihf/-/resvg-js-linux-arm-gnueabihf-2.6.2.tgz", 1111 + "integrity": "sha512-YIV3u/R9zJbpqTTNwTZM5/ocWetDKGsro0SWp70eGEM9eV2MerWyBRZnQIgzU3YBnSBQ1RcxRZvY/UxwESfZIw==", 1112 + "cpu": [ 1113 + "arm" 1114 + ], 1115 + "dev": true, 1116 + "license": "MPL-2.0", 1117 + "optional": true, 1118 + "os": [ 1119 + "linux" 1120 + ], 1121 + "engines": { 1122 + "node": ">= 10" 1123 + } 1124 + }, 1125 + "node_modules/@resvg/resvg-js-linux-arm64-gnu": { 1126 + "version": "2.6.2", 1127 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm64-gnu/-/resvg-js-linux-arm64-gnu-2.6.2.tgz", 1128 + "integrity": "sha512-zc2BlJSim7YR4FZDQ8OUoJg5holYzdiYMeobb9pJuGDidGL9KZUv7SbiD4E8oZogtYY42UZEap7dqkkYuA91pg==", 1129 + "cpu": [ 1130 + "arm64" 1131 + ], 1132 + "dev": true, 1133 + "license": "MPL-2.0", 1134 + "optional": true, 1135 + "os": [ 1136 + "linux" 1137 + ], 1138 + "engines": { 1139 + "node": ">= 10" 1140 + } 1141 + }, 1142 + "node_modules/@resvg/resvg-js-linux-arm64-musl": { 1143 + "version": "2.6.2", 1144 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm64-musl/-/resvg-js-linux-arm64-musl-2.6.2.tgz", 1145 + "integrity": "sha512-3h3dLPWNgSsD4lQBJPb4f+kvdOSJHa5PjTYVsWHxLUzH4IFTJUAnmuWpw4KqyQ3NA5QCyhw4TWgxk3jRkQxEKg==", 1146 + "cpu": [ 1147 + "arm64" 1148 + ], 1149 + "dev": true, 1150 + "license": "MPL-2.0", 1151 + "optional": true, 1152 + "os": [ 1153 + "linux" 1154 + ], 1155 + "engines": { 1156 + "node": ">= 10" 1157 + } 1158 + }, 1159 + "node_modules/@resvg/resvg-js-linux-x64-gnu": { 1160 + "version": "2.6.2", 1161 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-x64-gnu/-/resvg-js-linux-x64-gnu-2.6.2.tgz", 1162 + "integrity": "sha512-IVUe+ckIerA7xMZ50duAZzwf1U7khQe2E0QpUxu5MBJNao5RqC0zwV/Zm965vw6D3gGFUl7j4m+oJjubBVoftw==", 1163 + "cpu": [ 1164 + "x64" 1165 + ], 1166 + "dev": true, 1167 + "license": "MPL-2.0", 1168 + "optional": true, 1169 + "os": [ 1170 + "linux" 1171 + ], 1172 + "engines": { 1173 + "node": ">= 10" 1174 + } 1175 + }, 1176 + "node_modules/@resvg/resvg-js-linux-x64-musl": { 1177 + "version": "2.6.2", 1178 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-x64-musl/-/resvg-js-linux-x64-musl-2.6.2.tgz", 1179 + "integrity": "sha512-UOf83vqTzoYQO9SZ0fPl2ZIFtNIz/Rr/y+7X8XRX1ZnBYsQ/tTb+cj9TE+KHOdmlTFBxhYzVkP2lRByCzqi4jQ==", 1180 + "cpu": [ 1181 + "x64" 1182 + ], 1183 + "dev": true, 1184 + "license": "MPL-2.0", 1185 + "optional": true, 1186 + "os": [ 1187 + "linux" 1188 + ], 1189 + "engines": { 1190 + "node": ">= 10" 1191 + } 1192 + }, 1193 + "node_modules/@resvg/resvg-js-win32-arm64-msvc": { 1194 + "version": "2.6.2", 1195 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-arm64-msvc/-/resvg-js-win32-arm64-msvc-2.6.2.tgz", 1196 + "integrity": "sha512-7C/RSgCa+7vqZ7qAbItfiaAWhyRSoD4l4BQAbVDqRRsRgY+S+hgS3in0Rxr7IorKUpGE69X48q6/nOAuTJQxeQ==", 1197 + "cpu": [ 1198 + "arm64" 1199 + ], 1200 + "dev": true, 1201 + "license": "MPL-2.0", 1202 + "optional": true, 1203 + "os": [ 1204 + "win32" 1205 + ], 1206 + "engines": { 1207 + "node": ">= 10" 1208 + } 1209 + }, 1210 + "node_modules/@resvg/resvg-js-win32-ia32-msvc": { 1211 + "version": "2.6.2", 1212 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-ia32-msvc/-/resvg-js-win32-ia32-msvc-2.6.2.tgz", 1213 + "integrity": "sha512-har4aPAlvjnLcil40AC77YDIk6loMawuJwFINEM7n0pZviwMkMvjb2W5ZirsNOZY4aDbo5tLx0wNMREp5Brk+w==", 1214 + "cpu": [ 1215 + "ia32" 1216 + ], 1217 + "dev": true, 1218 + "license": "MPL-2.0", 1219 + "optional": true, 1220 + "os": [ 1221 + "win32" 1222 + ], 1223 + "engines": { 1224 + "node": ">= 10" 1225 + } 1226 + }, 1227 + "node_modules/@resvg/resvg-js-win32-x64-msvc": { 1228 + "version": "2.6.2", 1229 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-x64-msvc/-/resvg-js-win32-x64-msvc-2.6.2.tgz", 1230 + "integrity": "sha512-ZXtYhtUr5SSaBrUDq7DiyjOFJqBVL/dOBN7N/qmi/pO0IgiWW/f/ue3nbvu9joWE5aAKDoIzy/CxsY0suwGosQ==", 1231 + "cpu": [ 1232 + "x64" 1233 + ], 1234 + "dev": true, 1235 + "license": "MPL-2.0", 1236 + "optional": true, 1237 + "os": [ 1238 + "win32" 1239 + ], 1240 + "engines": { 1241 + "node": ">= 10" 1242 + } 1243 + }, 1244 + "node_modules/@rolldown/pluginutils": { 1245 + "version": "1.0.0-beta.53", 1246 + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz", 1247 + "integrity": "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==", 1248 + "dev": true, 1249 + "license": "MIT" 1250 + }, 1251 + "node_modules/@rollup/rollup-android-arm-eabi": { 1252 + "version": "4.55.3", 1253 + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.3.tgz", 1254 + "integrity": "sha512-qyX8+93kK/7R5BEXPC2PjUt0+fS/VO2BVHjEHyIEWiYn88rcRBHmdLgoJjktBltgAf+NY7RfCGB1SoyKS/p9kg==", 1255 + "cpu": [ 1256 + "arm" 1257 + ], 1258 + "dev": true, 1259 + "license": "MIT", 1260 + "optional": true, 1261 + "os": [ 1262 + "android" 1263 + ] 1264 + }, 1265 + "node_modules/@rollup/rollup-android-arm64": { 1266 + "version": "4.55.3", 1267 + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.3.tgz", 1268 + "integrity": "sha512-6sHrL42bjt5dHQzJ12Q4vMKfN+kUnZ0atHHnv4V0Wd9JMTk7FDzSY35+7qbz3ypQYMBPANbpGK7JpnWNnhGt8g==", 1269 + "cpu": [ 1270 + "arm64" 1271 + ], 1272 + "dev": true, 1273 + "license": "MIT", 1274 + "optional": true, 1275 + "os": [ 1276 + "android" 1277 + ] 1278 + }, 1279 + "node_modules/@rollup/rollup-darwin-arm64": { 1280 + "version": "4.55.3", 1281 + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.3.tgz", 1282 + "integrity": "sha512-1ht2SpGIjEl2igJ9AbNpPIKzb1B5goXOcmtD0RFxnwNuMxqkR6AUaaErZz+4o+FKmzxcSNBOLrzsICZVNYa1Rw==", 1283 + "cpu": [ 1284 + "arm64" 1285 + ], 1286 + "dev": true, 1287 + "license": "MIT", 1288 + "optional": true, 1289 + "os": [ 1290 + "darwin" 1291 + ] 1292 + }, 1293 + "node_modules/@rollup/rollup-darwin-x64": { 1294 + "version": "4.55.3", 1295 + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.3.tgz", 1296 + "integrity": "sha512-FYZ4iVunXxtT+CZqQoPVwPhH7549e/Gy7PIRRtq4t5f/vt54pX6eG9ebttRH6QSH7r/zxAFA4EZGlQ0h0FvXiA==", 1297 + "cpu": [ 1298 + "x64" 1299 + ], 1300 + "dev": true, 1301 + "license": "MIT", 1302 + "optional": true, 1303 + "os": [ 1304 + "darwin" 1305 + ] 1306 + }, 1307 + "node_modules/@rollup/rollup-freebsd-arm64": { 1308 + "version": "4.55.3", 1309 + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.3.tgz", 1310 + "integrity": "sha512-M/mwDCJ4wLsIgyxv2Lj7Len+UMHd4zAXu4GQ2UaCdksStglWhP61U3uowkaYBQBhVoNpwx5Hputo8eSqM7K82Q==", 1311 + "cpu": [ 1312 + "arm64" 1313 + ], 1314 + "dev": true, 1315 + "license": "MIT", 1316 + "optional": true, 1317 + "os": [ 1318 + "freebsd" 1319 + ] 1320 + }, 1321 + "node_modules/@rollup/rollup-freebsd-x64": { 1322 + "version": "4.55.3", 1323 + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.3.tgz", 1324 + "integrity": "sha512-5jZT2c7jBCrMegKYTYTpni8mg8y3uY8gzeq2ndFOANwNuC/xJbVAoGKR9LhMDA0H3nIhvaqUoBEuJoICBudFrA==", 1325 + "cpu": [ 1326 + "x64" 1327 + ], 1328 + "dev": true, 1329 + "license": "MIT", 1330 + "optional": true, 1331 + "os": [ 1332 + "freebsd" 1333 + ] 1334 + }, 1335 + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 1336 + "version": "4.55.3", 1337 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.3.tgz", 1338 + "integrity": "sha512-YeGUhkN1oA+iSPzzhEjVPS29YbViOr8s4lSsFaZKLHswgqP911xx25fPOyE9+khmN6W4VeM0aevbDp4kkEoHiA==", 1339 + "cpu": [ 1340 + "arm" 1341 + ], 1342 + "dev": true, 1343 + "license": "MIT", 1344 + "optional": true, 1345 + "os": [ 1346 + "linux" 1347 + ] 1348 + }, 1349 + "node_modules/@rollup/rollup-linux-arm-musleabihf": { 1350 + "version": "4.55.3", 1351 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.3.tgz", 1352 + "integrity": "sha512-eo0iOIOvcAlWB3Z3eh8pVM8hZ0oVkK3AjEM9nSrkSug2l15qHzF3TOwT0747omI6+CJJvl7drwZepT+re6Fy/w==", 1353 + "cpu": [ 1354 + "arm" 1355 + ], 1356 + "dev": true, 1357 + "license": "MIT", 1358 + "optional": true, 1359 + "os": [ 1360 + "linux" 1361 + ] 1362 + }, 1363 + "node_modules/@rollup/rollup-linux-arm64-gnu": { 1364 + "version": "4.55.3", 1365 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.3.tgz", 1366 + "integrity": "sha512-DJay3ep76bKUDImmn//W5SvpjRN5LmK/ntWyeJs/dcnwiiHESd3N4uteK9FDLf0S0W8E6Y0sVRXpOCoQclQqNg==", 1367 + "cpu": [ 1368 + "arm64" 1369 + ], 1370 + "dev": true, 1371 + "license": "MIT", 1372 + "optional": true, 1373 + "os": [ 1374 + "linux" 1375 + ] 1376 + }, 1377 + "node_modules/@rollup/rollup-linux-arm64-musl": { 1378 + "version": "4.55.3", 1379 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.3.tgz", 1380 + "integrity": "sha512-BKKWQkY2WgJ5MC/ayvIJTHjy0JUGb5efaHCUiG/39sSUvAYRBaO3+/EK0AZT1RF3pSj86O24GLLik9mAYu0IJg==", 1381 + "cpu": [ 1382 + "arm64" 1383 + ], 1384 + "dev": true, 1385 + "license": "MIT", 1386 + "optional": true, 1387 + "os": [ 1388 + "linux" 1389 + ] 1390 + }, 1391 + "node_modules/@rollup/rollup-linux-loong64-gnu": { 1392 + "version": "4.55.3", 1393 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.3.tgz", 1394 + "integrity": "sha512-Q9nVlWtKAG7ISW80OiZGxTr6rYtyDSkauHUtvkQI6TNOJjFvpj4gcH+KaJihqYInnAzEEUetPQubRwHef4exVg==", 1395 + "cpu": [ 1396 + "loong64" 1397 + ], 1398 + "dev": true, 1399 + "license": "MIT", 1400 + "optional": true, 1401 + "os": [ 1402 + "linux" 1403 + ] 1404 + }, 1405 + "node_modules/@rollup/rollup-linux-loong64-musl": { 1406 + "version": "4.55.3", 1407 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.3.tgz", 1408 + "integrity": "sha512-2H5LmhzrpC4fFRNwknzmmTvvyJPHwESoJgyReXeFoYYuIDfBhP29TEXOkCJE/KxHi27mj7wDUClNq78ue3QEBQ==", 1409 + "cpu": [ 1410 + "loong64" 1411 + ], 1412 + "dev": true, 1413 + "license": "MIT", 1414 + "optional": true, 1415 + "os": [ 1416 + "linux" 1417 + ] 1418 + }, 1419 + "node_modules/@rollup/rollup-linux-ppc64-gnu": { 1420 + "version": "4.55.3", 1421 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.3.tgz", 1422 + "integrity": "sha512-9S542V0ie9LCTznPYlvaeySwBeIEa7rDBgLHKZ5S9DBgcqdJYburabm8TqiqG6mrdTzfV5uttQRHcbKff9lWtA==", 1423 + "cpu": [ 1424 + "ppc64" 1425 + ], 1426 + "dev": true, 1427 + "license": "MIT", 1428 + "optional": true, 1429 + "os": [ 1430 + "linux" 1431 + ] 1432 + }, 1433 + "node_modules/@rollup/rollup-linux-ppc64-musl": { 1434 + "version": "4.55.3", 1435 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.3.tgz", 1436 + "integrity": "sha512-ukxw+YH3XXpcezLgbJeasgxyTbdpnNAkrIlFGDl7t+pgCxZ89/6n1a+MxlY7CegU+nDgrgdqDelPRNQ/47zs0g==", 1437 + "cpu": [ 1438 + "ppc64" 1439 + ], 1440 + "dev": true, 1441 + "license": "MIT", 1442 + "optional": true, 1443 + "os": [ 1444 + "linux" 1445 + ] 1446 + }, 1447 + "node_modules/@rollup/rollup-linux-riscv64-gnu": { 1448 + "version": "4.55.3", 1449 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.3.tgz", 1450 + "integrity": "sha512-Iauw9UsTTvlF++FhghFJjqYxyXdggXsOqGpFBylaRopVpcbfyIIsNvkf9oGwfgIcf57z3m8+/oSYTo6HutBFNw==", 1451 + "cpu": [ 1452 + "riscv64" 1453 + ], 1454 + "dev": true, 1455 + "license": "MIT", 1456 + "optional": true, 1457 + "os": [ 1458 + "linux" 1459 + ] 1460 + }, 1461 + "node_modules/@rollup/rollup-linux-riscv64-musl": { 1462 + "version": "4.55.3", 1463 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.3.tgz", 1464 + "integrity": "sha512-3OqKAHSEQXKdq9mQ4eajqUgNIK27VZPW3I26EP8miIzuKzCJ3aW3oEn2pzF+4/Hj/Moc0YDsOtBgT5bZ56/vcA==", 1465 + "cpu": [ 1466 + "riscv64" 1467 + ], 1468 + "dev": true, 1469 + "license": "MIT", 1470 + "optional": true, 1471 + "os": [ 1472 + "linux" 1473 + ] 1474 + }, 1475 + "node_modules/@rollup/rollup-linux-s390x-gnu": { 1476 + "version": "4.55.3", 1477 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.3.tgz", 1478 + "integrity": "sha512-0CM8dSVzVIaqMcXIFej8zZrSFLnGrAE8qlNbbHfTw1EEPnFTg1U1ekI0JdzjPyzSfUsHWtodilQQG/RA55berA==", 1479 + "cpu": [ 1480 + "s390x" 1481 + ], 1482 + "dev": true, 1483 + "license": "MIT", 1484 + "optional": true, 1485 + "os": [ 1486 + "linux" 1487 + ] 1488 + }, 1489 + "node_modules/@rollup/rollup-linux-x64-gnu": { 1490 + "version": "4.55.3", 1491 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.3.tgz", 1492 + "integrity": "sha512-+fgJE12FZMIgBaKIAGd45rxf+5ftcycANJRWk8Vz0NnMTM5rADPGuRFTYar+Mqs560xuART7XsX2lSACa1iOmQ==", 1493 + "cpu": [ 1494 + "x64" 1495 + ], 1496 + "dev": true, 1497 + "license": "MIT", 1498 + "optional": true, 1499 + "os": [ 1500 + "linux" 1501 + ] 1502 + }, 1503 + "node_modules/@rollup/rollup-linux-x64-musl": { 1504 + "version": "4.55.3", 1505 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.3.tgz", 1506 + "integrity": "sha512-tMD7NnbAolWPzQlJQJjVFh/fNH3K/KnA7K8gv2dJWCwwnaK6DFCYST1QXYWfu5V0cDwarWC8Sf/cfMHniNq21A==", 1507 + "cpu": [ 1508 + "x64" 1509 + ], 1510 + "dev": true, 1511 + "license": "MIT", 1512 + "optional": true, 1513 + "os": [ 1514 + "linux" 1515 + ] 1516 + }, 1517 + "node_modules/@rollup/rollup-openbsd-x64": { 1518 + "version": "4.55.3", 1519 + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.3.tgz", 1520 + "integrity": "sha512-u5KsqxOxjEeIbn7bUK1MPM34jrnPwjeqgyin4/N6e/KzXKfpE9Mi0nCxcQjaM9lLmPcHmn/xx1yOjgTMtu1jWQ==", 1521 + "cpu": [ 1522 + "x64" 1523 + ], 1524 + "dev": true, 1525 + "license": "MIT", 1526 + "optional": true, 1527 + "os": [ 1528 + "openbsd" 1529 + ] 1530 + }, 1531 + "node_modules/@rollup/rollup-openharmony-arm64": { 1532 + "version": "4.55.3", 1533 + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.3.tgz", 1534 + "integrity": "sha512-vo54aXwjpTtsAnb3ca7Yxs9t2INZg7QdXN/7yaoG7nPGbOBXYXQY41Km+S1Ov26vzOAzLcAjmMdjyEqS1JkVhw==", 1535 + "cpu": [ 1536 + "arm64" 1537 + ], 1538 + "dev": true, 1539 + "license": "MIT", 1540 + "optional": true, 1541 + "os": [ 1542 + "openharmony" 1543 + ] 1544 + }, 1545 + "node_modules/@rollup/rollup-win32-arm64-msvc": { 1546 + "version": "4.55.3", 1547 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.3.tgz", 1548 + "integrity": "sha512-HI+PIVZ+m+9AgpnY3pt6rinUdRYrGHvmVdsNQ4odNqQ/eRF78DVpMR7mOq7nW06QxpczibwBmeQzB68wJ+4W4A==", 1549 + "cpu": [ 1550 + "arm64" 1551 + ], 1552 + "dev": true, 1553 + "license": "MIT", 1554 + "optional": true, 1555 + "os": [ 1556 + "win32" 1557 + ] 1558 + }, 1559 + "node_modules/@rollup/rollup-win32-ia32-msvc": { 1560 + "version": "4.55.3", 1561 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.3.tgz", 1562 + "integrity": "sha512-vRByotbdMo3Wdi+8oC2nVxtc3RkkFKrGaok+a62AT8lz/YBuQjaVYAS5Zcs3tPzW43Vsf9J0wehJbUY5xRSekA==", 1563 + "cpu": [ 1564 + "ia32" 1565 + ], 1566 + "dev": true, 1567 + "license": "MIT", 1568 + "optional": true, 1569 + "os": [ 1570 + "win32" 1571 + ] 1572 + }, 1573 + "node_modules/@rollup/rollup-win32-x64-gnu": { 1574 + "version": "4.55.3", 1575 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.3.tgz", 1576 + "integrity": "sha512-POZHq7UeuzMJljC5NjKi8vKMFN6/5EOqcX1yGntNLp7rUTpBAXQ1hW8kWPFxYLv07QMcNM75xqVLGPWQq6TKFA==", 1577 + "cpu": [ 1578 + "x64" 1579 + ], 1580 + "dev": true, 1581 + "license": "MIT", 1582 + "optional": true, 1583 + "os": [ 1584 + "win32" 1585 + ] 1586 + }, 1587 + "node_modules/@rollup/rollup-win32-x64-msvc": { 1588 + "version": "4.55.3", 1589 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.3.tgz", 1590 + "integrity": "sha512-aPFONczE4fUFKNXszdvnd2GqKEYQdV5oEsIbKPujJmWlCI9zEsv1Otig8RKK+X9bed9gFUN6LAeN4ZcNuu4zjg==", 1591 + "cpu": [ 1592 + "x64" 1593 + ], 1594 + "dev": true, 1595 + "license": "MIT", 1596 + "optional": true, 1597 + "os": [ 1598 + "win32" 1599 + ] 1600 + }, 1601 + "node_modules/@shuding/opentype.js": { 1602 + "version": "1.4.0-beta.0", 1603 + "resolved": "https://registry.npmjs.org/@shuding/opentype.js/-/opentype.js-1.4.0-beta.0.tgz", 1604 + "integrity": "sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==", 1605 + "dev": true, 1606 + "license": "MIT", 1607 + "dependencies": { 1608 + "fflate": "^0.7.3", 1609 + "string.prototype.codepointat": "^0.2.1" 1610 + }, 1611 + "bin": { 1612 + "ot": "bin/ot" 1613 + }, 1614 + "engines": { 1615 + "node": ">= 8.0.0" 1616 + } 1617 + }, 1618 + "node_modules/@tailwindcss/node": { 1619 + "version": "4.1.18", 1620 + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.18.tgz", 1621 + "integrity": "sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==", 1622 + "dev": true, 1623 + "license": "MIT", 1624 + "dependencies": { 1625 + "@jridgewell/remapping": "^2.3.4", 1626 + "enhanced-resolve": "^5.18.3", 1627 + "jiti": "^2.6.1", 1628 + "lightningcss": "1.30.2", 1629 + "magic-string": "^0.30.21", 1630 + "source-map-js": "^1.2.1", 1631 + "tailwindcss": "4.1.18" 1632 + } 1633 + }, 1634 + "node_modules/@tailwindcss/oxide": { 1635 + "version": "4.1.18", 1636 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.18.tgz", 1637 + "integrity": "sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==", 1638 + "dev": true, 1639 + "license": "MIT", 1640 + "engines": { 1641 + "node": ">= 10" 1642 + }, 1643 + "optionalDependencies": { 1644 + "@tailwindcss/oxide-android-arm64": "4.1.18", 1645 + "@tailwindcss/oxide-darwin-arm64": "4.1.18", 1646 + "@tailwindcss/oxide-darwin-x64": "4.1.18", 1647 + "@tailwindcss/oxide-freebsd-x64": "4.1.18", 1648 + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.18", 1649 + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.18", 1650 + "@tailwindcss/oxide-linux-arm64-musl": "4.1.18", 1651 + "@tailwindcss/oxide-linux-x64-gnu": "4.1.18", 1652 + "@tailwindcss/oxide-linux-x64-musl": "4.1.18", 1653 + "@tailwindcss/oxide-wasm32-wasi": "4.1.18", 1654 + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.18", 1655 + "@tailwindcss/oxide-win32-x64-msvc": "4.1.18" 1656 + } 1657 + }, 1658 + "node_modules/@tailwindcss/oxide-android-arm64": { 1659 + "version": "4.1.18", 1660 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.18.tgz", 1661 + "integrity": "sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==", 1662 + "cpu": [ 1663 + "arm64" 1664 + ], 1665 + "dev": true, 1666 + "license": "MIT", 1667 + "optional": true, 1668 + "os": [ 1669 + "android" 1670 + ], 1671 + "engines": { 1672 + "node": ">= 10" 1673 + } 1674 + }, 1675 + "node_modules/@tailwindcss/oxide-darwin-arm64": { 1676 + "version": "4.1.18", 1677 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.18.tgz", 1678 + "integrity": "sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==", 1679 + "cpu": [ 1680 + "arm64" 1681 + ], 1682 + "dev": true, 1683 + "license": "MIT", 1684 + "optional": true, 1685 + "os": [ 1686 + "darwin" 1687 + ], 1688 + "engines": { 1689 + "node": ">= 10" 1690 + } 1691 + }, 1692 + "node_modules/@tailwindcss/oxide-darwin-x64": { 1693 + "version": "4.1.18", 1694 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.18.tgz", 1695 + "integrity": "sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==", 1696 + "cpu": [ 1697 + "x64" 1698 + ], 1699 + "dev": true, 1700 + "license": "MIT", 1701 + "optional": true, 1702 + "os": [ 1703 + "darwin" 1704 + ], 1705 + "engines": { 1706 + "node": ">= 10" 1707 + } 1708 + }, 1709 + "node_modules/@tailwindcss/oxide-freebsd-x64": { 1710 + "version": "4.1.18", 1711 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.18.tgz", 1712 + "integrity": "sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==", 1713 + "cpu": [ 1714 + "x64" 1715 + ], 1716 + "dev": true, 1717 + "license": "MIT", 1718 + "optional": true, 1719 + "os": [ 1720 + "freebsd" 1721 + ], 1722 + "engines": { 1723 + "node": ">= 10" 1724 + } 1725 + }, 1726 + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { 1727 + "version": "4.1.18", 1728 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.18.tgz", 1729 + "integrity": "sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==", 1730 + "cpu": [ 1731 + "arm" 1732 + ], 1733 + "dev": true, 1734 + "license": "MIT", 1735 + "optional": true, 1736 + "os": [ 1737 + "linux" 1738 + ], 1739 + "engines": { 1740 + "node": ">= 10" 1741 + } 1742 + }, 1743 + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { 1744 + "version": "4.1.18", 1745 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.18.tgz", 1746 + "integrity": "sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==", 1747 + "cpu": [ 1748 + "arm64" 1749 + ], 1750 + "dev": true, 1751 + "license": "MIT", 1752 + "optional": true, 1753 + "os": [ 1754 + "linux" 1755 + ], 1756 + "engines": { 1757 + "node": ">= 10" 1758 + } 1759 + }, 1760 + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { 1761 + "version": "4.1.18", 1762 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.18.tgz", 1763 + "integrity": "sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==", 1764 + "cpu": [ 1765 + "arm64" 1766 + ], 1767 + "dev": true, 1768 + "license": "MIT", 1769 + "optional": true, 1770 + "os": [ 1771 + "linux" 1772 + ], 1773 + "engines": { 1774 + "node": ">= 10" 1775 + } 1776 + }, 1777 + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { 1778 + "version": "4.1.18", 1779 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.18.tgz", 1780 + "integrity": "sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==", 1781 + "cpu": [ 1782 + "x64" 1783 + ], 1784 + "dev": true, 1785 + "license": "MIT", 1786 + "optional": true, 1787 + "os": [ 1788 + "linux" 1789 + ], 1790 + "engines": { 1791 + "node": ">= 10" 1792 + } 1793 + }, 1794 + "node_modules/@tailwindcss/oxide-linux-x64-musl": { 1795 + "version": "4.1.18", 1796 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.18.tgz", 1797 + "integrity": "sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==", 1798 + "cpu": [ 1799 + "x64" 1800 + ], 1801 + "dev": true, 1802 + "license": "MIT", 1803 + "optional": true, 1804 + "os": [ 1805 + "linux" 1806 + ], 1807 + "engines": { 1808 + "node": ">= 10" 1809 + } 1810 + }, 1811 + "node_modules/@tailwindcss/oxide-wasm32-wasi": { 1812 + "version": "4.1.18", 1813 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.18.tgz", 1814 + "integrity": "sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==", 1815 + "bundleDependencies": [ 1816 + "@napi-rs/wasm-runtime", 1817 + "@emnapi/core", 1818 + "@emnapi/runtime", 1819 + "@tybys/wasm-util", 1820 + "@emnapi/wasi-threads", 1821 + "tslib" 1822 + ], 1823 + "cpu": [ 1824 + "wasm32" 1825 + ], 1826 + "dev": true, 1827 + "license": "MIT", 1828 + "optional": true, 1829 + "dependencies": { 1830 + "@emnapi/core": "^1.7.1", 1831 + "@emnapi/runtime": "^1.7.1", 1832 + "@emnapi/wasi-threads": "^1.1.0", 1833 + "@napi-rs/wasm-runtime": "^1.1.0", 1834 + "@tybys/wasm-util": "^0.10.1", 1835 + "tslib": "^2.4.0" 1836 + }, 1837 + "engines": { 1838 + "node": ">=14.0.0" 1839 + } 1840 + }, 1841 + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { 1842 + "version": "4.1.18", 1843 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.18.tgz", 1844 + "integrity": "sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==", 1845 + "cpu": [ 1846 + "arm64" 1847 + ], 1848 + "dev": true, 1849 + "license": "MIT", 1850 + "optional": true, 1851 + "os": [ 1852 + "win32" 1853 + ], 1854 + "engines": { 1855 + "node": ">= 10" 1856 + } 1857 + }, 1858 + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { 1859 + "version": "4.1.18", 1860 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.18.tgz", 1861 + "integrity": "sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==", 1862 + "cpu": [ 1863 + "x64" 1864 + ], 1865 + "dev": true, 1866 + "license": "MIT", 1867 + "optional": true, 1868 + "os": [ 1869 + "win32" 1870 + ], 1871 + "engines": { 1872 + "node": ">= 10" 1873 + } 1874 + }, 1875 + "node_modules/@tailwindcss/vite": { 1876 + "version": "4.1.18", 1877 + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.18.tgz", 1878 + "integrity": "sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==", 1879 + "dev": true, 1880 + "license": "MIT", 1881 + "dependencies": { 1882 + "@tailwindcss/node": "4.1.18", 1883 + "@tailwindcss/oxide": "4.1.18", 1884 + "tailwindcss": "4.1.18" 1885 + }, 1886 + "peerDependencies": { 1887 + "vite": "^5.2.0 || ^6 || ^7" 1888 + } 1889 + }, 1890 + "node_modules/@types/babel__core": { 1891 + "version": "7.20.5", 1892 + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", 1893 + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", 1894 + "dev": true, 1895 + "license": "MIT", 1896 + "dependencies": { 1897 + "@babel/parser": "^7.20.7", 1898 + "@babel/types": "^7.20.7", 1899 + "@types/babel__generator": "*", 1900 + "@types/babel__template": "*", 1901 + "@types/babel__traverse": "*" 1902 + } 1903 + }, 1904 + "node_modules/@types/babel__generator": { 1905 + "version": "7.27.0", 1906 + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", 1907 + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", 1908 + "dev": true, 1909 + "license": "MIT", 1910 + "dependencies": { 1911 + "@babel/types": "^7.0.0" 1912 + } 1913 + }, 1914 + "node_modules/@types/babel__template": { 1915 + "version": "7.4.4", 1916 + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", 1917 + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", 1918 + "dev": true, 1919 + "license": "MIT", 1920 + "dependencies": { 1921 + "@babel/parser": "^7.1.0", 1922 + "@babel/types": "^7.0.0" 1923 + } 1924 + }, 1925 + "node_modules/@types/babel__traverse": { 1926 + "version": "7.28.0", 1927 + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", 1928 + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", 1929 + "dev": true, 1930 + "license": "MIT", 1931 + "dependencies": { 1932 + "@babel/types": "^7.28.2" 1933 + } 1934 + }, 1935 + "node_modules/@types/estree": { 1936 + "version": "1.0.8", 1937 + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", 1938 + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", 1939 + "dev": true, 1940 + "license": "MIT" 1941 + }, 1942 + "node_modules/@types/json-schema": { 1943 + "version": "7.0.15", 1944 + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", 1945 + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", 1946 + "dev": true, 1947 + "license": "MIT" 1948 + }, 1949 + "node_modules/@types/node": { 1950 + "version": "24.10.9", 1951 + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.9.tgz", 1952 + "integrity": "sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==", 1953 + "dev": true, 1954 + "license": "MIT", 1955 + "dependencies": { 1956 + "undici-types": "~7.16.0" 1957 + } 1958 + }, 1959 + "node_modules/@types/react": { 1960 + "version": "19.2.9", 1961 + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.9.tgz", 1962 + "integrity": "sha512-Lpo8kgb/igvMIPeNV2rsYKTgaORYdO1XGVZ4Qz3akwOj0ySGYMPlQWa8BaLn0G63D1aSaAQ5ldR06wCpChQCjA==", 1963 + "dev": true, 1964 + "license": "MIT", 1965 + "dependencies": { 1966 + "csstype": "^3.2.2" 1967 + } 1968 + }, 1969 + "node_modules/@types/react-dom": { 1970 + "version": "19.2.3", 1971 + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", 1972 + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", 1973 + "dev": true, 1974 + "license": "MIT", 1975 + "peerDependencies": { 1976 + "@types/react": "^19.2.0" 1977 + } 1978 + }, 1979 + "node_modules/@typescript-eslint/eslint-plugin": { 1980 + "version": "8.53.1", 1981 + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.53.1.tgz", 1982 + "integrity": "sha512-cFYYFZ+oQFi6hUnBTbLRXfTJiaQtYE3t4O692agbBl+2Zy+eqSKWtPjhPXJu1G7j4RLjKgeJPDdq3EqOwmX5Ag==", 1983 + "dev": true, 1984 + "license": "MIT", 1985 + "dependencies": { 1986 + "@eslint-community/regexpp": "^4.12.2", 1987 + "@typescript-eslint/scope-manager": "8.53.1", 1988 + "@typescript-eslint/type-utils": "8.53.1", 1989 + "@typescript-eslint/utils": "8.53.1", 1990 + "@typescript-eslint/visitor-keys": "8.53.1", 1991 + "ignore": "^7.0.5", 1992 + "natural-compare": "^1.4.0", 1993 + "ts-api-utils": "^2.4.0" 1994 + }, 1995 + "engines": { 1996 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1997 + }, 1998 + "funding": { 1999 + "type": "opencollective", 2000 + "url": "https://opencollective.com/typescript-eslint" 2001 + }, 2002 + "peerDependencies": { 2003 + "@typescript-eslint/parser": "^8.53.1", 2004 + "eslint": "^8.57.0 || ^9.0.0", 2005 + "typescript": ">=4.8.4 <6.0.0" 2006 + } 2007 + }, 2008 + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { 2009 + "version": "7.0.5", 2010 + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", 2011 + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", 2012 + "dev": true, 2013 + "license": "MIT", 2014 + "engines": { 2015 + "node": ">= 4" 2016 + } 2017 + }, 2018 + "node_modules/@typescript-eslint/parser": { 2019 + "version": "8.53.1", 2020 + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.53.1.tgz", 2021 + "integrity": "sha512-nm3cvFN9SqZGXjmw5bZ6cGmvJSyJPn0wU9gHAZZHDnZl2wF9PhHv78Xf06E0MaNk4zLVHL8hb2/c32XvyJOLQg==", 2022 + "dev": true, 2023 + "license": "MIT", 2024 + "dependencies": { 2025 + "@typescript-eslint/scope-manager": "8.53.1", 2026 + "@typescript-eslint/types": "8.53.1", 2027 + "@typescript-eslint/typescript-estree": "8.53.1", 2028 + "@typescript-eslint/visitor-keys": "8.53.1", 2029 + "debug": "^4.4.3" 2030 + }, 2031 + "engines": { 2032 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2033 + }, 2034 + "funding": { 2035 + "type": "opencollective", 2036 + "url": "https://opencollective.com/typescript-eslint" 2037 + }, 2038 + "peerDependencies": { 2039 + "eslint": "^8.57.0 || ^9.0.0", 2040 + "typescript": ">=4.8.4 <6.0.0" 2041 + } 2042 + }, 2043 + "node_modules/@typescript-eslint/project-service": { 2044 + "version": "8.53.1", 2045 + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.53.1.tgz", 2046 + "integrity": "sha512-WYC4FB5Ra0xidsmlPb+1SsnaSKPmS3gsjIARwbEkHkoWloQmuzcfypljaJcR78uyLA1h8sHdWWPHSLDI+MtNog==", 2047 + "dev": true, 2048 + "license": "MIT", 2049 + "dependencies": { 2050 + "@typescript-eslint/tsconfig-utils": "^8.53.1", 2051 + "@typescript-eslint/types": "^8.53.1", 2052 + "debug": "^4.4.3" 2053 + }, 2054 + "engines": { 2055 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2056 + }, 2057 + "funding": { 2058 + "type": "opencollective", 2059 + "url": "https://opencollective.com/typescript-eslint" 2060 + }, 2061 + "peerDependencies": { 2062 + "typescript": ">=4.8.4 <6.0.0" 2063 + } 2064 + }, 2065 + "node_modules/@typescript-eslint/scope-manager": { 2066 + "version": "8.53.1", 2067 + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.53.1.tgz", 2068 + "integrity": "sha512-Lu23yw1uJMFY8cUeq7JlrizAgeQvWugNQzJp8C3x8Eo5Jw5Q2ykMdiiTB9vBVOOUBysMzmRRmUfwFrZuI2C4SQ==", 2069 + "dev": true, 2070 + "license": "MIT", 2071 + "dependencies": { 2072 + "@typescript-eslint/types": "8.53.1", 2073 + "@typescript-eslint/visitor-keys": "8.53.1" 2074 + }, 2075 + "engines": { 2076 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2077 + }, 2078 + "funding": { 2079 + "type": "opencollective", 2080 + "url": "https://opencollective.com/typescript-eslint" 2081 + } 2082 + }, 2083 + "node_modules/@typescript-eslint/tsconfig-utils": { 2084 + "version": "8.53.1", 2085 + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.53.1.tgz", 2086 + "integrity": "sha512-qfvLXS6F6b1y43pnf0pPbXJ+YoXIC7HKg0UGZ27uMIemKMKA6XH2DTxsEDdpdN29D+vHV07x/pnlPNVLhdhWiA==", 2087 + "dev": true, 2088 + "license": "MIT", 2089 + "engines": { 2090 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2091 + }, 2092 + "funding": { 2093 + "type": "opencollective", 2094 + "url": "https://opencollective.com/typescript-eslint" 2095 + }, 2096 + "peerDependencies": { 2097 + "typescript": ">=4.8.4 <6.0.0" 2098 + } 2099 + }, 2100 + "node_modules/@typescript-eslint/type-utils": { 2101 + "version": "8.53.1", 2102 + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.53.1.tgz", 2103 + "integrity": "sha512-MOrdtNvyhy0rHyv0ENzub1d4wQYKb2NmIqG7qEqPWFW7Mpy2jzFC3pQ2yKDvirZB7jypm5uGjF2Qqs6OIqu47w==", 2104 + "dev": true, 2105 + "license": "MIT", 2106 + "dependencies": { 2107 + "@typescript-eslint/types": "8.53.1", 2108 + "@typescript-eslint/typescript-estree": "8.53.1", 2109 + "@typescript-eslint/utils": "8.53.1", 2110 + "debug": "^4.4.3", 2111 + "ts-api-utils": "^2.4.0" 2112 + }, 2113 + "engines": { 2114 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2115 + }, 2116 + "funding": { 2117 + "type": "opencollective", 2118 + "url": "https://opencollective.com/typescript-eslint" 2119 + }, 2120 + "peerDependencies": { 2121 + "eslint": "^8.57.0 || ^9.0.0", 2122 + "typescript": ">=4.8.4 <6.0.0" 2123 + } 2124 + }, 2125 + "node_modules/@typescript-eslint/types": { 2126 + "version": "8.53.1", 2127 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.53.1.tgz", 2128 + "integrity": "sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A==", 2129 + "dev": true, 2130 + "license": "MIT", 2131 + "engines": { 2132 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2133 + }, 2134 + "funding": { 2135 + "type": "opencollective", 2136 + "url": "https://opencollective.com/typescript-eslint" 2137 + } 2138 + }, 2139 + "node_modules/@typescript-eslint/typescript-estree": { 2140 + "version": "8.53.1", 2141 + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.53.1.tgz", 2142 + "integrity": "sha512-RGlVipGhQAG4GxV1s34O91cxQ/vWiHJTDHbXRr0li2q/BGg3RR/7NM8QDWgkEgrwQYCvmJV9ichIwyoKCQ+DTg==", 2143 + "dev": true, 2144 + "license": "MIT", 2145 + "dependencies": { 2146 + "@typescript-eslint/project-service": "8.53.1", 2147 + "@typescript-eslint/tsconfig-utils": "8.53.1", 2148 + "@typescript-eslint/types": "8.53.1", 2149 + "@typescript-eslint/visitor-keys": "8.53.1", 2150 + "debug": "^4.4.3", 2151 + "minimatch": "^9.0.5", 2152 + "semver": "^7.7.3", 2153 + "tinyglobby": "^0.2.15", 2154 + "ts-api-utils": "^2.4.0" 2155 + }, 2156 + "engines": { 2157 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2158 + }, 2159 + "funding": { 2160 + "type": "opencollective", 2161 + "url": "https://opencollective.com/typescript-eslint" 2162 + }, 2163 + "peerDependencies": { 2164 + "typescript": ">=4.8.4 <6.0.0" 2165 + } 2166 + }, 2167 + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { 2168 + "version": "2.0.2", 2169 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", 2170 + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", 2171 + "dev": true, 2172 + "license": "MIT", 2173 + "dependencies": { 2174 + "balanced-match": "^1.0.0" 2175 + } 2176 + }, 2177 + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { 2178 + "version": "9.0.5", 2179 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 2180 + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 2181 + "dev": true, 2182 + "license": "ISC", 2183 + "dependencies": { 2184 + "brace-expansion": "^2.0.1" 2185 + }, 2186 + "engines": { 2187 + "node": ">=16 || 14 >=14.17" 2188 + }, 2189 + "funding": { 2190 + "url": "https://github.com/sponsors/isaacs" 2191 + } 2192 + }, 2193 + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { 2194 + "version": "7.7.3", 2195 + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", 2196 + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", 2197 + "dev": true, 2198 + "license": "ISC", 2199 + "bin": { 2200 + "semver": "bin/semver.js" 2201 + }, 2202 + "engines": { 2203 + "node": ">=10" 2204 + } 2205 + }, 2206 + "node_modules/@typescript-eslint/utils": { 2207 + "version": "8.53.1", 2208 + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.53.1.tgz", 2209 + "integrity": "sha512-c4bMvGVWW4hv6JmDUEG7fSYlWOl3II2I4ylt0NM+seinYQlZMQIaKaXIIVJWt9Ofh6whrpM+EdDQXKXjNovvrg==", 2210 + "dev": true, 2211 + "license": "MIT", 2212 + "dependencies": { 2213 + "@eslint-community/eslint-utils": "^4.9.1", 2214 + "@typescript-eslint/scope-manager": "8.53.1", 2215 + "@typescript-eslint/types": "8.53.1", 2216 + "@typescript-eslint/typescript-estree": "8.53.1" 2217 + }, 2218 + "engines": { 2219 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2220 + }, 2221 + "funding": { 2222 + "type": "opencollective", 2223 + "url": "https://opencollective.com/typescript-eslint" 2224 + }, 2225 + "peerDependencies": { 2226 + "eslint": "^8.57.0 || ^9.0.0", 2227 + "typescript": ">=4.8.4 <6.0.0" 2228 + } 2229 + }, 2230 + "node_modules/@typescript-eslint/visitor-keys": { 2231 + "version": "8.53.1", 2232 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.53.1.tgz", 2233 + "integrity": "sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg==", 2234 + "dev": true, 2235 + "license": "MIT", 2236 + "dependencies": { 2237 + "@typescript-eslint/types": "8.53.1", 2238 + "eslint-visitor-keys": "^4.2.1" 2239 + }, 2240 + "engines": { 2241 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2242 + }, 2243 + "funding": { 2244 + "type": "opencollective", 2245 + "url": "https://opencollective.com/typescript-eslint" 2246 + } 2247 + }, 2248 + "node_modules/@vitejs/plugin-react": { 2249 + "version": "5.1.2", 2250 + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.2.tgz", 2251 + "integrity": "sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ==", 2252 + "dev": true, 2253 + "license": "MIT", 2254 + "dependencies": { 2255 + "@babel/core": "^7.28.5", 2256 + "@babel/plugin-transform-react-jsx-self": "^7.27.1", 2257 + "@babel/plugin-transform-react-jsx-source": "^7.27.1", 2258 + "@rolldown/pluginutils": "1.0.0-beta.53", 2259 + "@types/babel__core": "^7.20.5", 2260 + "react-refresh": "^0.18.0" 2261 + }, 2262 + "engines": { 2263 + "node": "^20.19.0 || >=22.12.0" 2264 + }, 2265 + "peerDependencies": { 2266 + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" 2267 + } 2268 + }, 2269 + "node_modules/acorn": { 2270 + "version": "8.15.0", 2271 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", 2272 + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", 2273 + "dev": true, 2274 + "license": "MIT", 2275 + "bin": { 2276 + "acorn": "bin/acorn" 2277 + }, 2278 + "engines": { 2279 + "node": ">=0.4.0" 2280 + } 2281 + }, 2282 + "node_modules/acorn-jsx": { 2283 + "version": "5.3.2", 2284 + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 2285 + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 2286 + "dev": true, 2287 + "license": "MIT", 2288 + "peerDependencies": { 2289 + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 2290 + } 2291 + }, 2292 + "node_modules/ajv": { 2293 + "version": "6.12.6", 2294 + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 2295 + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 2296 + "dev": true, 2297 + "license": "MIT", 2298 + "dependencies": { 2299 + "fast-deep-equal": "^3.1.1", 2300 + "fast-json-stable-stringify": "^2.0.0", 2301 + "json-schema-traverse": "^0.4.1", 2302 + "uri-js": "^4.2.2" 2303 + }, 2304 + "funding": { 2305 + "type": "github", 2306 + "url": "https://github.com/sponsors/epoberezkin" 2307 + } 2308 + }, 2309 + "node_modules/ansi-styles": { 2310 + "version": "4.3.0", 2311 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2312 + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2313 + "dev": true, 2314 + "license": "MIT", 2315 + "dependencies": { 2316 + "color-convert": "^2.0.1" 2317 + }, 2318 + "engines": { 2319 + "node": ">=8" 2320 + }, 2321 + "funding": { 2322 + "url": "https://github.com/chalk/ansi-styles?sponsor=1" 2323 + } 2324 + }, 2325 + "node_modules/argparse": { 2326 + "version": "2.0.1", 2327 + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 2328 + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 2329 + "dev": true, 2330 + "license": "Python-2.0" 2331 + }, 2332 + "node_modules/balanced-match": { 2333 + "version": "1.0.2", 2334 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 2335 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 2336 + "dev": true, 2337 + "license": "MIT" 2338 + }, 2339 + "node_modules/base64-js": { 2340 + "version": "0.0.8", 2341 + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", 2342 + "integrity": "sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==", 2343 + "dev": true, 2344 + "license": "MIT", 2345 + "engines": { 2346 + "node": ">= 0.4" 2347 + } 2348 + }, 2349 + "node_modules/baseline-browser-mapping": { 2350 + "version": "2.9.16", 2351 + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.16.tgz", 2352 + "integrity": "sha512-KeUZdBuxngy825i8xvzaK1Ncnkx0tBmb3k8DkEuqjKRkmtvNTjey2ZsNeh8Dw4lfKvbCOu9oeNx2TKm2vHqcRw==", 2353 + "dev": true, 2354 + "license": "Apache-2.0", 2355 + "bin": { 2356 + "baseline-browser-mapping": "dist/cli.js" 2357 + } 2358 + }, 2359 + "node_modules/brace-expansion": { 2360 + "version": "1.1.12", 2361 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", 2362 + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", 2363 + "dev": true, 2364 + "license": "MIT", 2365 + "dependencies": { 2366 + "balanced-match": "^1.0.0", 2367 + "concat-map": "0.0.1" 2368 + } 2369 + }, 2370 + "node_modules/browserslist": { 2371 + "version": "4.28.1", 2372 + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", 2373 + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", 2374 + "dev": true, 2375 + "funding": [ 2376 + { 2377 + "type": "opencollective", 2378 + "url": "https://opencollective.com/browserslist" 2379 + }, 2380 + { 2381 + "type": "tidelift", 2382 + "url": "https://tidelift.com/funding/github/npm/browserslist" 2383 + }, 2384 + { 2385 + "type": "github", 2386 + "url": "https://github.com/sponsors/ai" 2387 + } 2388 + ], 2389 + "license": "MIT", 2390 + "dependencies": { 2391 + "baseline-browser-mapping": "^2.9.0", 2392 + "caniuse-lite": "^1.0.30001759", 2393 + "electron-to-chromium": "^1.5.263", 2394 + "node-releases": "^2.0.27", 2395 + "update-browserslist-db": "^1.2.0" 2396 + }, 2397 + "bin": { 2398 + "browserslist": "cli.js" 2399 + }, 2400 + "engines": { 2401 + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 2402 + } 2403 + }, 2404 + "node_modules/callsites": { 2405 + "version": "3.1.0", 2406 + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 2407 + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 2408 + "dev": true, 2409 + "license": "MIT", 2410 + "engines": { 2411 + "node": ">=6" 2412 + } 2413 + }, 2414 + "node_modules/camelize": { 2415 + "version": "1.0.1", 2416 + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", 2417 + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", 2418 + "dev": true, 2419 + "license": "MIT", 2420 + "funding": { 2421 + "url": "https://github.com/sponsors/ljharb" 2422 + } 2423 + }, 2424 + "node_modules/caniuse-lite": { 2425 + "version": "1.0.30001765", 2426 + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001765.tgz", 2427 + "integrity": "sha512-LWcNtSyZrakjECqmpP4qdg0MMGdN368D7X8XvvAqOcqMv0RxnlqVKZl2V6/mBR68oYMxOZPLw/gO7DuisMHUvQ==", 2428 + "dev": true, 2429 + "funding": [ 2430 + { 2431 + "type": "opencollective", 2432 + "url": "https://opencollective.com/browserslist" 2433 + }, 2434 + { 2435 + "type": "tidelift", 2436 + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 2437 + }, 2438 + { 2439 + "type": "github", 2440 + "url": "https://github.com/sponsors/ai" 2441 + } 2442 + ], 2443 + "license": "CC-BY-4.0" 2444 + }, 2445 + "node_modules/chalk": { 2446 + "version": "4.1.2", 2447 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 2448 + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 2449 + "dev": true, 2450 + "license": "MIT", 2451 + "dependencies": { 2452 + "ansi-styles": "^4.1.0", 2453 + "supports-color": "^7.1.0" 2454 + }, 2455 + "engines": { 2456 + "node": ">=10" 2457 + }, 2458 + "funding": { 2459 + "url": "https://github.com/chalk/chalk?sponsor=1" 2460 + } 2461 + }, 2462 + "node_modules/color-convert": { 2463 + "version": "2.0.1", 2464 + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2465 + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2466 + "dev": true, 2467 + "license": "MIT", 2468 + "dependencies": { 2469 + "color-name": "~1.1.4" 2470 + }, 2471 + "engines": { 2472 + "node": ">=7.0.0" 2473 + } 2474 + }, 2475 + "node_modules/color-name": { 2476 + "version": "1.1.4", 2477 + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2478 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2479 + "dev": true, 2480 + "license": "MIT" 2481 + }, 2482 + "node_modules/concat-map": { 2483 + "version": "0.0.1", 2484 + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 2485 + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 2486 + "dev": true, 2487 + "license": "MIT" 2488 + }, 2489 + "node_modules/convert-source-map": { 2490 + "version": "2.0.0", 2491 + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", 2492 + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", 2493 + "dev": true, 2494 + "license": "MIT" 2495 + }, 2496 + "node_modules/cross-spawn": { 2497 + "version": "7.0.6", 2498 + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 2499 + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 2500 + "dev": true, 2501 + "license": "MIT", 2502 + "dependencies": { 2503 + "path-key": "^3.1.0", 2504 + "shebang-command": "^2.0.0", 2505 + "which": "^2.0.1" 2506 + }, 2507 + "engines": { 2508 + "node": ">= 8" 2509 + } 2510 + }, 2511 + "node_modules/css-background-parser": { 2512 + "version": "0.1.0", 2513 + "resolved": "https://registry.npmjs.org/css-background-parser/-/css-background-parser-0.1.0.tgz", 2514 + "integrity": "sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==", 2515 + "dev": true, 2516 + "license": "MIT" 2517 + }, 2518 + "node_modules/css-box-shadow": { 2519 + "version": "1.0.0-3", 2520 + "resolved": "https://registry.npmjs.org/css-box-shadow/-/css-box-shadow-1.0.0-3.tgz", 2521 + "integrity": "sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg==", 2522 + "dev": true, 2523 + "license": "MIT" 2524 + }, 2525 + "node_modules/css-color-keywords": { 2526 + "version": "1.0.0", 2527 + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", 2528 + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", 2529 + "dev": true, 2530 + "license": "ISC", 2531 + "engines": { 2532 + "node": ">=4" 2533 + } 2534 + }, 2535 + "node_modules/css-gradient-parser": { 2536 + "version": "0.0.17", 2537 + "resolved": "https://registry.npmjs.org/css-gradient-parser/-/css-gradient-parser-0.0.17.tgz", 2538 + "integrity": "sha512-w2Xy9UMMwlKtou0vlRnXvWglPAceXCTtcmVSo8ZBUvqCV5aXEFP/PC6d+I464810I9FT++UACwTD5511bmGPUg==", 2539 + "dev": true, 2540 + "license": "MIT", 2541 + "engines": { 2542 + "node": ">=16" 2543 + } 2544 + }, 2545 + "node_modules/css-to-react-native": { 2546 + "version": "3.2.0", 2547 + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", 2548 + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", 2549 + "dev": true, 2550 + "license": "MIT", 2551 + "dependencies": { 2552 + "camelize": "^1.0.0", 2553 + "css-color-keywords": "^1.0.0", 2554 + "postcss-value-parser": "^4.0.2" 2555 + } 2556 + }, 2557 + "node_modules/csstype": { 2558 + "version": "3.2.3", 2559 + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", 2560 + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", 2561 + "dev": true, 2562 + "license": "MIT" 2563 + }, 2564 + "node_modules/debug": { 2565 + "version": "4.4.3", 2566 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", 2567 + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", 2568 + "dev": true, 2569 + "license": "MIT", 2570 + "dependencies": { 2571 + "ms": "^2.1.3" 2572 + }, 2573 + "engines": { 2574 + "node": ">=6.0" 2575 + }, 2576 + "peerDependenciesMeta": { 2577 + "supports-color": { 2578 + "optional": true 2579 + } 2580 + } 2581 + }, 2582 + "node_modules/deep-is": { 2583 + "version": "0.1.4", 2584 + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 2585 + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 2586 + "dev": true, 2587 + "license": "MIT" 2588 + }, 2589 + "node_modules/detect-libc": { 2590 + "version": "2.1.2", 2591 + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", 2592 + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", 2593 + "dev": true, 2594 + "license": "Apache-2.0", 2595 + "engines": { 2596 + "node": ">=8" 2597 + } 2598 + }, 2599 + "node_modules/electron-to-chromium": { 2600 + "version": "1.5.267", 2601 + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", 2602 + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", 2603 + "dev": true, 2604 + "license": "ISC" 2605 + }, 2606 + "node_modules/emoji-regex-xs": { 2607 + "version": "2.0.1", 2608 + "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-2.0.1.tgz", 2609 + "integrity": "sha512-1QFuh8l7LqUcKe24LsPUNzjrzJQ7pgRwp1QMcZ5MX6mFplk2zQ08NVCM84++1cveaUUYtcCYHmeFEuNg16sU4g==", 2610 + "dev": true, 2611 + "license": "MIT", 2612 + "engines": { 2613 + "node": ">=10.0.0" 2614 + } 2615 + }, 2616 + "node_modules/enhanced-resolve": { 2617 + "version": "5.18.4", 2618 + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz", 2619 + "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==", 2620 + "dev": true, 2621 + "license": "MIT", 2622 + "dependencies": { 2623 + "graceful-fs": "^4.2.4", 2624 + "tapable": "^2.2.0" 2625 + }, 2626 + "engines": { 2627 + "node": ">=10.13.0" 2628 + } 2629 + }, 2630 + "node_modules/esbuild": { 2631 + "version": "0.27.2", 2632 + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", 2633 + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", 2634 + "dev": true, 2635 + "hasInstallScript": true, 2636 + "license": "MIT", 2637 + "bin": { 2638 + "esbuild": "bin/esbuild" 2639 + }, 2640 + "engines": { 2641 + "node": ">=18" 2642 + }, 2643 + "optionalDependencies": { 2644 + "@esbuild/aix-ppc64": "0.27.2", 2645 + "@esbuild/android-arm": "0.27.2", 2646 + "@esbuild/android-arm64": "0.27.2", 2647 + "@esbuild/android-x64": "0.27.2", 2648 + "@esbuild/darwin-arm64": "0.27.2", 2649 + "@esbuild/darwin-x64": "0.27.2", 2650 + "@esbuild/freebsd-arm64": "0.27.2", 2651 + "@esbuild/freebsd-x64": "0.27.2", 2652 + "@esbuild/linux-arm": "0.27.2", 2653 + "@esbuild/linux-arm64": "0.27.2", 2654 + "@esbuild/linux-ia32": "0.27.2", 2655 + "@esbuild/linux-loong64": "0.27.2", 2656 + "@esbuild/linux-mips64el": "0.27.2", 2657 + "@esbuild/linux-ppc64": "0.27.2", 2658 + "@esbuild/linux-riscv64": "0.27.2", 2659 + "@esbuild/linux-s390x": "0.27.2", 2660 + "@esbuild/linux-x64": "0.27.2", 2661 + "@esbuild/netbsd-arm64": "0.27.2", 2662 + "@esbuild/netbsd-x64": "0.27.2", 2663 + "@esbuild/openbsd-arm64": "0.27.2", 2664 + "@esbuild/openbsd-x64": "0.27.2", 2665 + "@esbuild/openharmony-arm64": "0.27.2", 2666 + "@esbuild/sunos-x64": "0.27.2", 2667 + "@esbuild/win32-arm64": "0.27.2", 2668 + "@esbuild/win32-ia32": "0.27.2", 2669 + "@esbuild/win32-x64": "0.27.2" 2670 + } 2671 + }, 2672 + "node_modules/escalade": { 2673 + "version": "3.2.0", 2674 + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 2675 + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 2676 + "dev": true, 2677 + "license": "MIT", 2678 + "engines": { 2679 + "node": ">=6" 2680 + } 2681 + }, 2682 + "node_modules/escape-html": { 2683 + "version": "1.0.3", 2684 + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 2685 + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", 2686 + "dev": true, 2687 + "license": "MIT" 2688 + }, 2689 + "node_modules/escape-string-regexp": { 2690 + "version": "4.0.0", 2691 + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 2692 + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 2693 + "dev": true, 2694 + "license": "MIT", 2695 + "engines": { 2696 + "node": ">=10" 2697 + }, 2698 + "funding": { 2699 + "url": "https://github.com/sponsors/sindresorhus" 2700 + } 2701 + }, 2702 + "node_modules/eslint": { 2703 + "version": "9.39.2", 2704 + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", 2705 + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", 2706 + "dev": true, 2707 + "license": "MIT", 2708 + "dependencies": { 2709 + "@eslint-community/eslint-utils": "^4.8.0", 2710 + "@eslint-community/regexpp": "^4.12.1", 2711 + "@eslint/config-array": "^0.21.1", 2712 + "@eslint/config-helpers": "^0.4.2", 2713 + "@eslint/core": "^0.17.0", 2714 + "@eslint/eslintrc": "^3.3.1", 2715 + "@eslint/js": "9.39.2", 2716 + "@eslint/plugin-kit": "^0.4.1", 2717 + "@humanfs/node": "^0.16.6", 2718 + "@humanwhocodes/module-importer": "^1.0.1", 2719 + "@humanwhocodes/retry": "^0.4.2", 2720 + "@types/estree": "^1.0.6", 2721 + "ajv": "^6.12.4", 2722 + "chalk": "^4.0.0", 2723 + "cross-spawn": "^7.0.6", 2724 + "debug": "^4.3.2", 2725 + "escape-string-regexp": "^4.0.0", 2726 + "eslint-scope": "^8.4.0", 2727 + "eslint-visitor-keys": "^4.2.1", 2728 + "espree": "^10.4.0", 2729 + "esquery": "^1.5.0", 2730 + "esutils": "^2.0.2", 2731 + "fast-deep-equal": "^3.1.3", 2732 + "file-entry-cache": "^8.0.0", 2733 + "find-up": "^5.0.0", 2734 + "glob-parent": "^6.0.2", 2735 + "ignore": "^5.2.0", 2736 + "imurmurhash": "^0.1.4", 2737 + "is-glob": "^4.0.0", 2738 + "json-stable-stringify-without-jsonify": "^1.0.1", 2739 + "lodash.merge": "^4.6.2", 2740 + "minimatch": "^3.1.2", 2741 + "natural-compare": "^1.4.0", 2742 + "optionator": "^0.9.3" 2743 + }, 2744 + "bin": { 2745 + "eslint": "bin/eslint.js" 2746 + }, 2747 + "engines": { 2748 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2749 + }, 2750 + "funding": { 2751 + "url": "https://eslint.org/donate" 2752 + }, 2753 + "peerDependencies": { 2754 + "jiti": "*" 2755 + }, 2756 + "peerDependenciesMeta": { 2757 + "jiti": { 2758 + "optional": true 2759 + } 2760 + } 2761 + }, 2762 + "node_modules/eslint-plugin-react-hooks": { 2763 + "version": "7.0.1", 2764 + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", 2765 + "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", 2766 + "dev": true, 2767 + "license": "MIT", 2768 + "dependencies": { 2769 + "@babel/core": "^7.24.4", 2770 + "@babel/parser": "^7.24.4", 2771 + "hermes-parser": "^0.25.1", 2772 + "zod": "^3.25.0 || ^4.0.0", 2773 + "zod-validation-error": "^3.5.0 || ^4.0.0" 2774 + }, 2775 + "engines": { 2776 + "node": ">=18" 2777 + }, 2778 + "peerDependencies": { 2779 + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" 2780 + } 2781 + }, 2782 + "node_modules/eslint-plugin-react-refresh": { 2783 + "version": "0.4.26", 2784 + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.26.tgz", 2785 + "integrity": "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==", 2786 + "dev": true, 2787 + "license": "MIT", 2788 + "peerDependencies": { 2789 + "eslint": ">=8.40" 2790 + } 2791 + }, 2792 + "node_modules/eslint-scope": { 2793 + "version": "8.4.0", 2794 + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", 2795 + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", 2796 + "dev": true, 2797 + "license": "BSD-2-Clause", 2798 + "dependencies": { 2799 + "esrecurse": "^4.3.0", 2800 + "estraverse": "^5.2.0" 2801 + }, 2802 + "engines": { 2803 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2804 + }, 2805 + "funding": { 2806 + "url": "https://opencollective.com/eslint" 2807 + } 2808 + }, 2809 + "node_modules/eslint-visitor-keys": { 2810 + "version": "4.2.1", 2811 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", 2812 + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", 2813 + "dev": true, 2814 + "license": "Apache-2.0", 2815 + "engines": { 2816 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2817 + }, 2818 + "funding": { 2819 + "url": "https://opencollective.com/eslint" 2820 + } 2821 + }, 2822 + "node_modules/espree": { 2823 + "version": "10.4.0", 2824 + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", 2825 + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", 2826 + "dev": true, 2827 + "license": "BSD-2-Clause", 2828 + "dependencies": { 2829 + "acorn": "^8.15.0", 2830 + "acorn-jsx": "^5.3.2", 2831 + "eslint-visitor-keys": "^4.2.1" 2832 + }, 2833 + "engines": { 2834 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2835 + }, 2836 + "funding": { 2837 + "url": "https://opencollective.com/eslint" 2838 + } 2839 + }, 2840 + "node_modules/esquery": { 2841 + "version": "1.7.0", 2842 + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", 2843 + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", 2844 + "dev": true, 2845 + "license": "BSD-3-Clause", 2846 + "dependencies": { 2847 + "estraverse": "^5.1.0" 2848 + }, 2849 + "engines": { 2850 + "node": ">=0.10" 2851 + } 2852 + }, 2853 + "node_modules/esrecurse": { 2854 + "version": "4.3.0", 2855 + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 2856 + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 2857 + "dev": true, 2858 + "license": "BSD-2-Clause", 2859 + "dependencies": { 2860 + "estraverse": "^5.2.0" 2861 + }, 2862 + "engines": { 2863 + "node": ">=4.0" 2864 + } 2865 + }, 2866 + "node_modules/estraverse": { 2867 + "version": "5.3.0", 2868 + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 2869 + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 2870 + "dev": true, 2871 + "license": "BSD-2-Clause", 2872 + "engines": { 2873 + "node": ">=4.0" 2874 + } 2875 + }, 2876 + "node_modules/esutils": { 2877 + "version": "2.0.3", 2878 + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 2879 + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 2880 + "dev": true, 2881 + "license": "BSD-2-Clause", 2882 + "engines": { 2883 + "node": ">=0.10.0" 2884 + } 2885 + }, 2886 + "node_modules/fast-deep-equal": { 2887 + "version": "3.1.3", 2888 + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 2889 + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 2890 + "dev": true, 2891 + "license": "MIT" 2892 + }, 2893 + "node_modules/fast-json-stable-stringify": { 2894 + "version": "2.1.0", 2895 + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 2896 + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 2897 + "dev": true, 2898 + "license": "MIT" 2899 + }, 2900 + "node_modules/fast-levenshtein": { 2901 + "version": "2.0.6", 2902 + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 2903 + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 2904 + "dev": true, 2905 + "license": "MIT" 2906 + }, 2907 + "node_modules/fdir": { 2908 + "version": "6.5.0", 2909 + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", 2910 + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", 2911 + "dev": true, 2912 + "license": "MIT", 2913 + "engines": { 2914 + "node": ">=12.0.0" 2915 + }, 2916 + "peerDependencies": { 2917 + "picomatch": "^3 || ^4" 2918 + }, 2919 + "peerDependenciesMeta": { 2920 + "picomatch": { 2921 + "optional": true 2922 + } 2923 + } 2924 + }, 2925 + "node_modules/fflate": { 2926 + "version": "0.7.4", 2927 + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.7.4.tgz", 2928 + "integrity": "sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==", 2929 + "dev": true, 2930 + "license": "MIT" 2931 + }, 2932 + "node_modules/file-entry-cache": { 2933 + "version": "8.0.0", 2934 + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", 2935 + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", 2936 + "dev": true, 2937 + "license": "MIT", 2938 + "dependencies": { 2939 + "flat-cache": "^4.0.0" 2940 + }, 2941 + "engines": { 2942 + "node": ">=16.0.0" 2943 + } 2944 + }, 2945 + "node_modules/find-up": { 2946 + "version": "5.0.0", 2947 + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 2948 + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 2949 + "dev": true, 2950 + "license": "MIT", 2951 + "dependencies": { 2952 + "locate-path": "^6.0.0", 2953 + "path-exists": "^4.0.0" 2954 + }, 2955 + "engines": { 2956 + "node": ">=10" 2957 + }, 2958 + "funding": { 2959 + "url": "https://github.com/sponsors/sindresorhus" 2960 + } 2961 + }, 2962 + "node_modules/flat-cache": { 2963 + "version": "4.0.1", 2964 + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", 2965 + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", 2966 + "dev": true, 2967 + "license": "MIT", 2968 + "dependencies": { 2969 + "flatted": "^3.2.9", 2970 + "keyv": "^4.5.4" 2971 + }, 2972 + "engines": { 2973 + "node": ">=16" 2974 + } 2975 + }, 2976 + "node_modules/flatted": { 2977 + "version": "3.3.3", 2978 + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", 2979 + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", 2980 + "dev": true, 2981 + "license": "ISC" 2982 + }, 2983 + "node_modules/fsevents": { 2984 + "version": "2.3.3", 2985 + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 2986 + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 2987 + "dev": true, 2988 + "hasInstallScript": true, 2989 + "license": "MIT", 2990 + "optional": true, 2991 + "os": [ 2992 + "darwin" 2993 + ], 2994 + "engines": { 2995 + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 2996 + } 2997 + }, 2998 + "node_modules/gensync": { 2999 + "version": "1.0.0-beta.2", 3000 + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 3001 + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 3002 + "dev": true, 3003 + "license": "MIT", 3004 + "engines": { 3005 + "node": ">=6.9.0" 3006 + } 3007 + }, 3008 + "node_modules/glob-parent": { 3009 + "version": "6.0.2", 3010 + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 3011 + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 3012 + "dev": true, 3013 + "license": "ISC", 3014 + "dependencies": { 3015 + "is-glob": "^4.0.3" 3016 + }, 3017 + "engines": { 3018 + "node": ">=10.13.0" 3019 + } 3020 + }, 3021 + "node_modules/globals": { 3022 + "version": "16.5.0", 3023 + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", 3024 + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", 3025 + "dev": true, 3026 + "license": "MIT", 3027 + "engines": { 3028 + "node": ">=18" 3029 + }, 3030 + "funding": { 3031 + "url": "https://github.com/sponsors/sindresorhus" 3032 + } 3033 + }, 3034 + "node_modules/graceful-fs": { 3035 + "version": "4.2.11", 3036 + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 3037 + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 3038 + "dev": true, 3039 + "license": "ISC" 3040 + }, 3041 + "node_modules/has-flag": { 3042 + "version": "4.0.0", 3043 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 3044 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 3045 + "dev": true, 3046 + "license": "MIT", 3047 + "engines": { 3048 + "node": ">=8" 3049 + } 3050 + }, 3051 + "node_modules/hermes-estree": { 3052 + "version": "0.25.1", 3053 + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", 3054 + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", 3055 + "dev": true, 3056 + "license": "MIT" 3057 + }, 3058 + "node_modules/hermes-parser": { 3059 + "version": "0.25.1", 3060 + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", 3061 + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", 3062 + "dev": true, 3063 + "license": "MIT", 3064 + "dependencies": { 3065 + "hermes-estree": "0.25.1" 3066 + } 3067 + }, 3068 + "node_modules/hex-rgb": { 3069 + "version": "4.3.0", 3070 + "resolved": "https://registry.npmjs.org/hex-rgb/-/hex-rgb-4.3.0.tgz", 3071 + "integrity": "sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==", 3072 + "dev": true, 3073 + "license": "MIT", 3074 + "engines": { 3075 + "node": ">=6" 3076 + }, 3077 + "funding": { 3078 + "url": "https://github.com/sponsors/sindresorhus" 3079 + } 3080 + }, 3081 + "node_modules/ignore": { 3082 + "version": "5.3.2", 3083 + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", 3084 + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", 3085 + "dev": true, 3086 + "license": "MIT", 3087 + "engines": { 3088 + "node": ">= 4" 3089 + } 3090 + }, 3091 + "node_modules/import-fresh": { 3092 + "version": "3.3.1", 3093 + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", 3094 + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", 3095 + "dev": true, 3096 + "license": "MIT", 3097 + "dependencies": { 3098 + "parent-module": "^1.0.0", 3099 + "resolve-from": "^4.0.0" 3100 + }, 3101 + "engines": { 3102 + "node": ">=6" 3103 + }, 3104 + "funding": { 3105 + "url": "https://github.com/sponsors/sindresorhus" 3106 + } 3107 + }, 3108 + "node_modules/imurmurhash": { 3109 + "version": "0.1.4", 3110 + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 3111 + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 3112 + "dev": true, 3113 + "license": "MIT", 3114 + "engines": { 3115 + "node": ">=0.8.19" 3116 + } 3117 + }, 3118 + "node_modules/is-extglob": { 3119 + "version": "2.1.1", 3120 + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 3121 + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 3122 + "dev": true, 3123 + "license": "MIT", 3124 + "engines": { 3125 + "node": ">=0.10.0" 3126 + } 3127 + }, 3128 + "node_modules/is-glob": { 3129 + "version": "4.0.3", 3130 + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 3131 + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 3132 + "dev": true, 3133 + "license": "MIT", 3134 + "dependencies": { 3135 + "is-extglob": "^2.1.1" 3136 + }, 3137 + "engines": { 3138 + "node": ">=0.10.0" 3139 + } 3140 + }, 3141 + "node_modules/isexe": { 3142 + "version": "2.0.0", 3143 + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 3144 + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 3145 + "dev": true, 3146 + "license": "ISC" 3147 + }, 3148 + "node_modules/jiti": { 3149 + "version": "2.6.1", 3150 + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", 3151 + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", 3152 + "dev": true, 3153 + "license": "MIT", 3154 + "bin": { 3155 + "jiti": "lib/jiti-cli.mjs" 3156 + } 3157 + }, 3158 + "node_modules/js-tokens": { 3159 + "version": "4.0.0", 3160 + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 3161 + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 3162 + "dev": true, 3163 + "license": "MIT" 3164 + }, 3165 + "node_modules/js-yaml": { 3166 + "version": "4.1.1", 3167 + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", 3168 + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", 3169 + "dev": true, 3170 + "license": "MIT", 3171 + "dependencies": { 3172 + "argparse": "^2.0.1" 3173 + }, 3174 + "bin": { 3175 + "js-yaml": "bin/js-yaml.js" 3176 + } 3177 + }, 3178 + "node_modules/jsesc": { 3179 + "version": "3.1.0", 3180 + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", 3181 + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", 3182 + "dev": true, 3183 + "license": "MIT", 3184 + "bin": { 3185 + "jsesc": "bin/jsesc" 3186 + }, 3187 + "engines": { 3188 + "node": ">=6" 3189 + } 3190 + }, 3191 + "node_modules/json-buffer": { 3192 + "version": "3.0.1", 3193 + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 3194 + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 3195 + "dev": true, 3196 + "license": "MIT" 3197 + }, 3198 + "node_modules/json-schema-traverse": { 3199 + "version": "0.4.1", 3200 + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 3201 + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 3202 + "dev": true, 3203 + "license": "MIT" 3204 + }, 3205 + "node_modules/json-stable-stringify-without-jsonify": { 3206 + "version": "1.0.1", 3207 + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 3208 + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 3209 + "dev": true, 3210 + "license": "MIT" 3211 + }, 3212 + "node_modules/json5": { 3213 + "version": "2.2.3", 3214 + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 3215 + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 3216 + "dev": true, 3217 + "license": "MIT", 3218 + "bin": { 3219 + "json5": "lib/cli.js" 3220 + }, 3221 + "engines": { 3222 + "node": ">=6" 3223 + } 3224 + }, 3225 + "node_modules/keyv": { 3226 + "version": "4.5.4", 3227 + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 3228 + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 3229 + "dev": true, 3230 + "license": "MIT", 3231 + "dependencies": { 3232 + "json-buffer": "3.0.1" 3233 + } 3234 + }, 3235 + "node_modules/levn": { 3236 + "version": "0.4.1", 3237 + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 3238 + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 3239 + "dev": true, 3240 + "license": "MIT", 3241 + "dependencies": { 3242 + "prelude-ls": "^1.2.1", 3243 + "type-check": "~0.4.0" 3244 + }, 3245 + "engines": { 3246 + "node": ">= 0.8.0" 3247 + } 3248 + }, 3249 + "node_modules/lightningcss": { 3250 + "version": "1.30.2", 3251 + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", 3252 + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", 3253 + "dev": true, 3254 + "license": "MPL-2.0", 3255 + "dependencies": { 3256 + "detect-libc": "^2.0.3" 3257 + }, 3258 + "engines": { 3259 + "node": ">= 12.0.0" 3260 + }, 3261 + "funding": { 3262 + "type": "opencollective", 3263 + "url": "https://opencollective.com/parcel" 3264 + }, 3265 + "optionalDependencies": { 3266 + "lightningcss-android-arm64": "1.30.2", 3267 + "lightningcss-darwin-arm64": "1.30.2", 3268 + "lightningcss-darwin-x64": "1.30.2", 3269 + "lightningcss-freebsd-x64": "1.30.2", 3270 + "lightningcss-linux-arm-gnueabihf": "1.30.2", 3271 + "lightningcss-linux-arm64-gnu": "1.30.2", 3272 + "lightningcss-linux-arm64-musl": "1.30.2", 3273 + "lightningcss-linux-x64-gnu": "1.30.2", 3274 + "lightningcss-linux-x64-musl": "1.30.2", 3275 + "lightningcss-win32-arm64-msvc": "1.30.2", 3276 + "lightningcss-win32-x64-msvc": "1.30.2" 3277 + } 3278 + }, 3279 + "node_modules/lightningcss-android-arm64": { 3280 + "version": "1.30.2", 3281 + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", 3282 + "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", 3283 + "cpu": [ 3284 + "arm64" 3285 + ], 3286 + "dev": true, 3287 + "license": "MPL-2.0", 3288 + "optional": true, 3289 + "os": [ 3290 + "android" 3291 + ], 3292 + "engines": { 3293 + "node": ">= 12.0.0" 3294 + }, 3295 + "funding": { 3296 + "type": "opencollective", 3297 + "url": "https://opencollective.com/parcel" 3298 + } 3299 + }, 3300 + "node_modules/lightningcss-darwin-arm64": { 3301 + "version": "1.30.2", 3302 + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", 3303 + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", 3304 + "cpu": [ 3305 + "arm64" 3306 + ], 3307 + "dev": true, 3308 + "license": "MPL-2.0", 3309 + "optional": true, 3310 + "os": [ 3311 + "darwin" 3312 + ], 3313 + "engines": { 3314 + "node": ">= 12.0.0" 3315 + }, 3316 + "funding": { 3317 + "type": "opencollective", 3318 + "url": "https://opencollective.com/parcel" 3319 + } 3320 + }, 3321 + "node_modules/lightningcss-darwin-x64": { 3322 + "version": "1.30.2", 3323 + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", 3324 + "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", 3325 + "cpu": [ 3326 + "x64" 3327 + ], 3328 + "dev": true, 3329 + "license": "MPL-2.0", 3330 + "optional": true, 3331 + "os": [ 3332 + "darwin" 3333 + ], 3334 + "engines": { 3335 + "node": ">= 12.0.0" 3336 + }, 3337 + "funding": { 3338 + "type": "opencollective", 3339 + "url": "https://opencollective.com/parcel" 3340 + } 3341 + }, 3342 + "node_modules/lightningcss-freebsd-x64": { 3343 + "version": "1.30.2", 3344 + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", 3345 + "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", 3346 + "cpu": [ 3347 + "x64" 3348 + ], 3349 + "dev": true, 3350 + "license": "MPL-2.0", 3351 + "optional": true, 3352 + "os": [ 3353 + "freebsd" 3354 + ], 3355 + "engines": { 3356 + "node": ">= 12.0.0" 3357 + }, 3358 + "funding": { 3359 + "type": "opencollective", 3360 + "url": "https://opencollective.com/parcel" 3361 + } 3362 + }, 3363 + "node_modules/lightningcss-linux-arm-gnueabihf": { 3364 + "version": "1.30.2", 3365 + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", 3366 + "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", 3367 + "cpu": [ 3368 + "arm" 3369 + ], 3370 + "dev": true, 3371 + "license": "MPL-2.0", 3372 + "optional": true, 3373 + "os": [ 3374 + "linux" 3375 + ], 3376 + "engines": { 3377 + "node": ">= 12.0.0" 3378 + }, 3379 + "funding": { 3380 + "type": "opencollective", 3381 + "url": "https://opencollective.com/parcel" 3382 + } 3383 + }, 3384 + "node_modules/lightningcss-linux-arm64-gnu": { 3385 + "version": "1.30.2", 3386 + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", 3387 + "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", 3388 + "cpu": [ 3389 + "arm64" 3390 + ], 3391 + "dev": true, 3392 + "license": "MPL-2.0", 3393 + "optional": true, 3394 + "os": [ 3395 + "linux" 3396 + ], 3397 + "engines": { 3398 + "node": ">= 12.0.0" 3399 + }, 3400 + "funding": { 3401 + "type": "opencollective", 3402 + "url": "https://opencollective.com/parcel" 3403 + } 3404 + }, 3405 + "node_modules/lightningcss-linux-arm64-musl": { 3406 + "version": "1.30.2", 3407 + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", 3408 + "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", 3409 + "cpu": [ 3410 + "arm64" 3411 + ], 3412 + "dev": true, 3413 + "license": "MPL-2.0", 3414 + "optional": true, 3415 + "os": [ 3416 + "linux" 3417 + ], 3418 + "engines": { 3419 + "node": ">= 12.0.0" 3420 + }, 3421 + "funding": { 3422 + "type": "opencollective", 3423 + "url": "https://opencollective.com/parcel" 3424 + } 3425 + }, 3426 + "node_modules/lightningcss-linux-x64-gnu": { 3427 + "version": "1.30.2", 3428 + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", 3429 + "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", 3430 + "cpu": [ 3431 + "x64" 3432 + ], 3433 + "dev": true, 3434 + "license": "MPL-2.0", 3435 + "optional": true, 3436 + "os": [ 3437 + "linux" 3438 + ], 3439 + "engines": { 3440 + "node": ">= 12.0.0" 3441 + }, 3442 + "funding": { 3443 + "type": "opencollective", 3444 + "url": "https://opencollective.com/parcel" 3445 + } 3446 + }, 3447 + "node_modules/lightningcss-linux-x64-musl": { 3448 + "version": "1.30.2", 3449 + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", 3450 + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", 3451 + "cpu": [ 3452 + "x64" 3453 + ], 3454 + "dev": true, 3455 + "license": "MPL-2.0", 3456 + "optional": true, 3457 + "os": [ 3458 + "linux" 3459 + ], 3460 + "engines": { 3461 + "node": ">= 12.0.0" 3462 + }, 3463 + "funding": { 3464 + "type": "opencollective", 3465 + "url": "https://opencollective.com/parcel" 3466 + } 3467 + }, 3468 + "node_modules/lightningcss-win32-arm64-msvc": { 3469 + "version": "1.30.2", 3470 + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", 3471 + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", 3472 + "cpu": [ 3473 + "arm64" 3474 + ], 3475 + "dev": true, 3476 + "license": "MPL-2.0", 3477 + "optional": true, 3478 + "os": [ 3479 + "win32" 3480 + ], 3481 + "engines": { 3482 + "node": ">= 12.0.0" 3483 + }, 3484 + "funding": { 3485 + "type": "opencollective", 3486 + "url": "https://opencollective.com/parcel" 3487 + } 3488 + }, 3489 + "node_modules/lightningcss-win32-x64-msvc": { 3490 + "version": "1.30.2", 3491 + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", 3492 + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", 3493 + "cpu": [ 3494 + "x64" 3495 + ], 3496 + "dev": true, 3497 + "license": "MPL-2.0", 3498 + "optional": true, 3499 + "os": [ 3500 + "win32" 3501 + ], 3502 + "engines": { 3503 + "node": ">= 12.0.0" 3504 + }, 3505 + "funding": { 3506 + "type": "opencollective", 3507 + "url": "https://opencollective.com/parcel" 3508 + } 3509 + }, 3510 + "node_modules/linebreak": { 3511 + "version": "1.1.0", 3512 + "resolved": "https://registry.npmjs.org/linebreak/-/linebreak-1.1.0.tgz", 3513 + "integrity": "sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==", 3514 + "dev": true, 3515 + "license": "MIT", 3516 + "dependencies": { 3517 + "base64-js": "0.0.8", 3518 + "unicode-trie": "^2.0.0" 3519 + } 3520 + }, 3521 + "node_modules/locate-path": { 3522 + "version": "6.0.0", 3523 + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 3524 + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 3525 + "dev": true, 3526 + "license": "MIT", 3527 + "dependencies": { 3528 + "p-locate": "^5.0.0" 3529 + }, 3530 + "engines": { 3531 + "node": ">=10" 3532 + }, 3533 + "funding": { 3534 + "url": "https://github.com/sponsors/sindresorhus" 3535 + } 3536 + }, 3537 + "node_modules/lodash.merge": { 3538 + "version": "4.6.2", 3539 + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 3540 + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 3541 + "dev": true, 3542 + "license": "MIT" 3543 + }, 3544 + "node_modules/lru-cache": { 3545 + "version": "5.1.1", 3546 + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 3547 + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 3548 + "dev": true, 3549 + "license": "ISC", 3550 + "dependencies": { 3551 + "yallist": "^3.0.2" 3552 + } 3553 + }, 3554 + "node_modules/magic-string": { 3555 + "version": "0.30.21", 3556 + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", 3557 + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", 3558 + "dev": true, 3559 + "license": "MIT", 3560 + "dependencies": { 3561 + "@jridgewell/sourcemap-codec": "^1.5.5" 3562 + } 3563 + }, 3564 + "node_modules/minimatch": { 3565 + "version": "3.1.2", 3566 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 3567 + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 3568 + "dev": true, 3569 + "license": "ISC", 3570 + "dependencies": { 3571 + "brace-expansion": "^1.1.7" 3572 + }, 3573 + "engines": { 3574 + "node": "*" 3575 + } 3576 + }, 3577 + "node_modules/ms": { 3578 + "version": "2.1.3", 3579 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 3580 + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 3581 + "dev": true, 3582 + "license": "MIT" 3583 + }, 3584 + "node_modules/nanoid": { 3585 + "version": "3.3.11", 3586 + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", 3587 + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 3588 + "dev": true, 3589 + "funding": [ 3590 + { 3591 + "type": "github", 3592 + "url": "https://github.com/sponsors/ai" 3593 + } 3594 + ], 3595 + "license": "MIT", 3596 + "bin": { 3597 + "nanoid": "bin/nanoid.cjs" 3598 + }, 3599 + "engines": { 3600 + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 3601 + } 3602 + }, 3603 + "node_modules/natural-compare": { 3604 + "version": "1.4.0", 3605 + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 3606 + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 3607 + "dev": true, 3608 + "license": "MIT" 3609 + }, 3610 + "node_modules/node-releases": { 3611 + "version": "2.0.27", 3612 + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", 3613 + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", 3614 + "dev": true, 3615 + "license": "MIT" 3616 + }, 3617 + "node_modules/optionator": { 3618 + "version": "0.9.4", 3619 + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", 3620 + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", 3621 + "dev": true, 3622 + "license": "MIT", 3623 + "dependencies": { 3624 + "deep-is": "^0.1.3", 3625 + "fast-levenshtein": "^2.0.6", 3626 + "levn": "^0.4.1", 3627 + "prelude-ls": "^1.2.1", 3628 + "type-check": "^0.4.0", 3629 + "word-wrap": "^1.2.5" 3630 + }, 3631 + "engines": { 3632 + "node": ">= 0.8.0" 3633 + } 3634 + }, 3635 + "node_modules/p-limit": { 3636 + "version": "3.1.0", 3637 + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 3638 + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 3639 + "dev": true, 3640 + "license": "MIT", 3641 + "dependencies": { 3642 + "yocto-queue": "^0.1.0" 3643 + }, 3644 + "engines": { 3645 + "node": ">=10" 3646 + }, 3647 + "funding": { 3648 + "url": "https://github.com/sponsors/sindresorhus" 3649 + } 3650 + }, 3651 + "node_modules/p-locate": { 3652 + "version": "5.0.0", 3653 + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 3654 + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 3655 + "dev": true, 3656 + "license": "MIT", 3657 + "dependencies": { 3658 + "p-limit": "^3.0.2" 3659 + }, 3660 + "engines": { 3661 + "node": ">=10" 3662 + }, 3663 + "funding": { 3664 + "url": "https://github.com/sponsors/sindresorhus" 3665 + } 3666 + }, 3667 + "node_modules/pako": { 3668 + "version": "0.2.9", 3669 + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", 3670 + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", 3671 + "dev": true, 3672 + "license": "MIT" 3673 + }, 3674 + "node_modules/parent-module": { 3675 + "version": "1.0.1", 3676 + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 3677 + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 3678 + "dev": true, 3679 + "license": "MIT", 3680 + "dependencies": { 3681 + "callsites": "^3.0.0" 3682 + }, 3683 + "engines": { 3684 + "node": ">=6" 3685 + } 3686 + }, 3687 + "node_modules/parse-css-color": { 3688 + "version": "0.2.1", 3689 + "resolved": "https://registry.npmjs.org/parse-css-color/-/parse-css-color-0.2.1.tgz", 3690 + "integrity": "sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg==", 3691 + "dev": true, 3692 + "license": "MIT", 3693 + "dependencies": { 3694 + "color-name": "^1.1.4", 3695 + "hex-rgb": "^4.1.0" 3696 + } 3697 + }, 3698 + "node_modules/path-exists": { 3699 + "version": "4.0.0", 3700 + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 3701 + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 3702 + "dev": true, 3703 + "license": "MIT", 3704 + "engines": { 3705 + "node": ">=8" 3706 + } 3707 + }, 3708 + "node_modules/path-key": { 3709 + "version": "3.1.1", 3710 + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 3711 + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 3712 + "dev": true, 3713 + "license": "MIT", 3714 + "engines": { 3715 + "node": ">=8" 3716 + } 3717 + }, 3718 + "node_modules/picocolors": { 3719 + "version": "1.1.1", 3720 + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 3721 + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 3722 + "dev": true, 3723 + "license": "ISC" 3724 + }, 3725 + "node_modules/picomatch": { 3726 + "version": "4.0.3", 3727 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", 3728 + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", 3729 + "dev": true, 3730 + "license": "MIT", 3731 + "engines": { 3732 + "node": ">=12" 3733 + }, 3734 + "funding": { 3735 + "url": "https://github.com/sponsors/jonschlinkert" 3736 + } 3737 + }, 3738 + "node_modules/postcss": { 3739 + "version": "8.5.6", 3740 + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", 3741 + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", 3742 + "dev": true, 3743 + "funding": [ 3744 + { 3745 + "type": "opencollective", 3746 + "url": "https://opencollective.com/postcss/" 3747 + }, 3748 + { 3749 + "type": "tidelift", 3750 + "url": "https://tidelift.com/funding/github/npm/postcss" 3751 + }, 3752 + { 3753 + "type": "github", 3754 + "url": "https://github.com/sponsors/ai" 3755 + } 3756 + ], 3757 + "license": "MIT", 3758 + "dependencies": { 3759 + "nanoid": "^3.3.11", 3760 + "picocolors": "^1.1.1", 3761 + "source-map-js": "^1.2.1" 3762 + }, 3763 + "engines": { 3764 + "node": "^10 || ^12 || >=14" 3765 + } 3766 + }, 3767 + "node_modules/postcss-value-parser": { 3768 + "version": "4.2.0", 3769 + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 3770 + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 3771 + "dev": true, 3772 + "license": "MIT" 3773 + }, 3774 + "node_modules/prelude-ls": { 3775 + "version": "1.2.1", 3776 + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 3777 + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 3778 + "dev": true, 3779 + "license": "MIT", 3780 + "engines": { 3781 + "node": ">= 0.8.0" 3782 + } 3783 + }, 3784 + "node_modules/punycode": { 3785 + "version": "2.3.1", 3786 + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 3787 + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 3788 + "dev": true, 3789 + "license": "MIT", 3790 + "engines": { 3791 + "node": ">=6" 3792 + } 3793 + }, 3794 + "node_modules/react": { 3795 + "version": "19.2.3", 3796 + "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", 3797 + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", 3798 + "license": "MIT", 3799 + "engines": { 3800 + "node": ">=0.10.0" 3801 + } 3802 + }, 3803 + "node_modules/react-dom": { 3804 + "version": "19.2.3", 3805 + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", 3806 + "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", 3807 + "license": "MIT", 3808 + "dependencies": { 3809 + "scheduler": "^0.27.0" 3810 + }, 3811 + "peerDependencies": { 3812 + "react": "^19.2.3" 3813 + } 3814 + }, 3815 + "node_modules/react-refresh": { 3816 + "version": "0.18.0", 3817 + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", 3818 + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", 3819 + "dev": true, 3820 + "license": "MIT", 3821 + "engines": { 3822 + "node": ">=0.10.0" 3823 + } 3824 + }, 3825 + "node_modules/resolve-from": { 3826 + "version": "4.0.0", 3827 + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 3828 + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 3829 + "dev": true, 3830 + "license": "MIT", 3831 + "engines": { 3832 + "node": ">=4" 3833 + } 3834 + }, 3835 + "node_modules/rollup": { 3836 + "version": "4.55.3", 3837 + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.3.tgz", 3838 + "integrity": "sha512-y9yUpfQvetAjiDLtNMf1hL9NXchIJgWt6zIKeoB+tCd3npX08Eqfzg60V9DhIGVMtQ0AlMkFw5xa+AQ37zxnAA==", 3839 + "dev": true, 3840 + "license": "MIT", 3841 + "dependencies": { 3842 + "@types/estree": "1.0.8" 3843 + }, 3844 + "bin": { 3845 + "rollup": "dist/bin/rollup" 3846 + }, 3847 + "engines": { 3848 + "node": ">=18.0.0", 3849 + "npm": ">=8.0.0" 3850 + }, 3851 + "optionalDependencies": { 3852 + "@rollup/rollup-android-arm-eabi": "4.55.3", 3853 + "@rollup/rollup-android-arm64": "4.55.3", 3854 + "@rollup/rollup-darwin-arm64": "4.55.3", 3855 + "@rollup/rollup-darwin-x64": "4.55.3", 3856 + "@rollup/rollup-freebsd-arm64": "4.55.3", 3857 + "@rollup/rollup-freebsd-x64": "4.55.3", 3858 + "@rollup/rollup-linux-arm-gnueabihf": "4.55.3", 3859 + "@rollup/rollup-linux-arm-musleabihf": "4.55.3", 3860 + "@rollup/rollup-linux-arm64-gnu": "4.55.3", 3861 + "@rollup/rollup-linux-arm64-musl": "4.55.3", 3862 + "@rollup/rollup-linux-loong64-gnu": "4.55.3", 3863 + "@rollup/rollup-linux-loong64-musl": "4.55.3", 3864 + "@rollup/rollup-linux-ppc64-gnu": "4.55.3", 3865 + "@rollup/rollup-linux-ppc64-musl": "4.55.3", 3866 + "@rollup/rollup-linux-riscv64-gnu": "4.55.3", 3867 + "@rollup/rollup-linux-riscv64-musl": "4.55.3", 3868 + "@rollup/rollup-linux-s390x-gnu": "4.55.3", 3869 + "@rollup/rollup-linux-x64-gnu": "4.55.3", 3870 + "@rollup/rollup-linux-x64-musl": "4.55.3", 3871 + "@rollup/rollup-openbsd-x64": "4.55.3", 3872 + "@rollup/rollup-openharmony-arm64": "4.55.3", 3873 + "@rollup/rollup-win32-arm64-msvc": "4.55.3", 3874 + "@rollup/rollup-win32-ia32-msvc": "4.55.3", 3875 + "@rollup/rollup-win32-x64-gnu": "4.55.3", 3876 + "@rollup/rollup-win32-x64-msvc": "4.55.3", 3877 + "fsevents": "~2.3.2" 3878 + } 3879 + }, 3880 + "node_modules/satori": { 3881 + "version": "0.19.1", 3882 + "resolved": "https://registry.npmjs.org/satori/-/satori-0.19.1.tgz", 3883 + "integrity": "sha512-/XaT/JiWLfNlgjlQdde4wXB1/6F+FEze9c3OW2QIH0ywsfOrY57YOetgESWyOFHW3JfEQ6dJAo2U9Xwb7+DDAw==", 3884 + "dev": true, 3885 + "license": "MPL-2.0", 3886 + "dependencies": { 3887 + "@shuding/opentype.js": "1.4.0-beta.0", 3888 + "css-background-parser": "^0.1.0", 3889 + "css-box-shadow": "1.0.0-3", 3890 + "css-gradient-parser": "^0.0.17", 3891 + "css-to-react-native": "^3.0.0", 3892 + "emoji-regex-xs": "^2.0.1", 3893 + "escape-html": "^1.0.3", 3894 + "linebreak": "^1.1.0", 3895 + "parse-css-color": "^0.2.1", 3896 + "postcss-value-parser": "^4.2.0", 3897 + "yoga-layout": "^3.2.1" 3898 + }, 3899 + "engines": { 3900 + "node": ">=16" 3901 + } 3902 + }, 3903 + "node_modules/scheduler": { 3904 + "version": "0.27.0", 3905 + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", 3906 + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", 3907 + "license": "MIT" 3908 + }, 3909 + "node_modules/semver": { 3910 + "version": "6.3.1", 3911 + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 3912 + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 3913 + "dev": true, 3914 + "license": "ISC", 3915 + "bin": { 3916 + "semver": "bin/semver.js" 3917 + } 3918 + }, 3919 + "node_modules/shebang-command": { 3920 + "version": "2.0.0", 3921 + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 3922 + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 3923 + "dev": true, 3924 + "license": "MIT", 3925 + "dependencies": { 3926 + "shebang-regex": "^3.0.0" 3927 + }, 3928 + "engines": { 3929 + "node": ">=8" 3930 + } 3931 + }, 3932 + "node_modules/shebang-regex": { 3933 + "version": "3.0.0", 3934 + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 3935 + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 3936 + "dev": true, 3937 + "license": "MIT", 3938 + "engines": { 3939 + "node": ">=8" 3940 + } 3941 + }, 3942 + "node_modules/source-map-js": { 3943 + "version": "1.2.1", 3944 + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 3945 + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 3946 + "dev": true, 3947 + "license": "BSD-3-Clause", 3948 + "engines": { 3949 + "node": ">=0.10.0" 3950 + } 3951 + }, 3952 + "node_modules/string.prototype.codepointat": { 3953 + "version": "0.2.1", 3954 + "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz", 3955 + "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==", 3956 + "dev": true, 3957 + "license": "MIT" 3958 + }, 3959 + "node_modules/strip-json-comments": { 3960 + "version": "3.1.1", 3961 + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 3962 + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 3963 + "dev": true, 3964 + "license": "MIT", 3965 + "engines": { 3966 + "node": ">=8" 3967 + }, 3968 + "funding": { 3969 + "url": "https://github.com/sponsors/sindresorhus" 3970 + } 3971 + }, 3972 + "node_modules/supports-color": { 3973 + "version": "7.2.0", 3974 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 3975 + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 3976 + "dev": true, 3977 + "license": "MIT", 3978 + "dependencies": { 3979 + "has-flag": "^4.0.0" 3980 + }, 3981 + "engines": { 3982 + "node": ">=8" 3983 + } 3984 + }, 3985 + "node_modules/tailwindcss": { 3986 + "version": "4.1.18", 3987 + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz", 3988 + "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==", 3989 + "dev": true, 3990 + "license": "MIT" 3991 + }, 3992 + "node_modules/tapable": { 3993 + "version": "2.3.0", 3994 + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", 3995 + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", 3996 + "dev": true, 3997 + "license": "MIT", 3998 + "engines": { 3999 + "node": ">=6" 4000 + }, 4001 + "funding": { 4002 + "type": "opencollective", 4003 + "url": "https://opencollective.com/webpack" 4004 + } 4005 + }, 4006 + "node_modules/tiny-inflate": { 4007 + "version": "1.0.3", 4008 + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", 4009 + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", 4010 + "dev": true, 4011 + "license": "MIT" 4012 + }, 4013 + "node_modules/tinyglobby": { 4014 + "version": "0.2.15", 4015 + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", 4016 + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", 4017 + "dev": true, 4018 + "license": "MIT", 4019 + "dependencies": { 4020 + "fdir": "^6.5.0", 4021 + "picomatch": "^4.0.3" 4022 + }, 4023 + "engines": { 4024 + "node": ">=12.0.0" 4025 + }, 4026 + "funding": { 4027 + "url": "https://github.com/sponsors/SuperchupuDev" 4028 + } 4029 + }, 4030 + "node_modules/ts-api-utils": { 4031 + "version": "2.4.0", 4032 + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", 4033 + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", 4034 + "dev": true, 4035 + "license": "MIT", 4036 + "engines": { 4037 + "node": ">=18.12" 4038 + }, 4039 + "peerDependencies": { 4040 + "typescript": ">=4.8.4" 4041 + } 4042 + }, 4043 + "node_modules/type-check": { 4044 + "version": "0.4.0", 4045 + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 4046 + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 4047 + "dev": true, 4048 + "license": "MIT", 4049 + "dependencies": { 4050 + "prelude-ls": "^1.2.1" 4051 + }, 4052 + "engines": { 4053 + "node": ">= 0.8.0" 4054 + } 4055 + }, 4056 + "node_modules/typescript": { 4057 + "version": "5.9.3", 4058 + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", 4059 + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", 4060 + "dev": true, 4061 + "license": "Apache-2.0", 4062 + "bin": { 4063 + "tsc": "bin/tsc", 4064 + "tsserver": "bin/tsserver" 4065 + }, 4066 + "engines": { 4067 + "node": ">=14.17" 4068 + } 4069 + }, 4070 + "node_modules/typescript-eslint": { 4071 + "version": "8.53.1", 4072 + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.53.1.tgz", 4073 + "integrity": "sha512-gB+EVQfP5RDElh9ittfXlhZJdjSU4jUSTyE2+ia8CYyNvet4ElfaLlAIqDvQV9JPknKx0jQH1racTYe/4LaLSg==", 4074 + "dev": true, 4075 + "license": "MIT", 4076 + "dependencies": { 4077 + "@typescript-eslint/eslint-plugin": "8.53.1", 4078 + "@typescript-eslint/parser": "8.53.1", 4079 + "@typescript-eslint/typescript-estree": "8.53.1", 4080 + "@typescript-eslint/utils": "8.53.1" 4081 + }, 4082 + "engines": { 4083 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 4084 + }, 4085 + "funding": { 4086 + "type": "opencollective", 4087 + "url": "https://opencollective.com/typescript-eslint" 4088 + }, 4089 + "peerDependencies": { 4090 + "eslint": "^8.57.0 || ^9.0.0", 4091 + "typescript": ">=4.8.4 <6.0.0" 4092 + } 4093 + }, 4094 + "node_modules/undici-types": { 4095 + "version": "7.16.0", 4096 + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", 4097 + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", 4098 + "dev": true, 4099 + "license": "MIT" 4100 + }, 4101 + "node_modules/unicode-trie": { 4102 + "version": "2.0.0", 4103 + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", 4104 + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", 4105 + "dev": true, 4106 + "license": "MIT", 4107 + "dependencies": { 4108 + "pako": "^0.2.5", 4109 + "tiny-inflate": "^1.0.0" 4110 + } 4111 + }, 4112 + "node_modules/update-browserslist-db": { 4113 + "version": "1.2.3", 4114 + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", 4115 + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", 4116 + "dev": true, 4117 + "funding": [ 4118 + { 4119 + "type": "opencollective", 4120 + "url": "https://opencollective.com/browserslist" 4121 + }, 4122 + { 4123 + "type": "tidelift", 4124 + "url": "https://tidelift.com/funding/github/npm/browserslist" 4125 + }, 4126 + { 4127 + "type": "github", 4128 + "url": "https://github.com/sponsors/ai" 4129 + } 4130 + ], 4131 + "license": "MIT", 4132 + "dependencies": { 4133 + "escalade": "^3.2.0", 4134 + "picocolors": "^1.1.1" 4135 + }, 4136 + "bin": { 4137 + "update-browserslist-db": "cli.js" 4138 + }, 4139 + "peerDependencies": { 4140 + "browserslist": ">= 4.21.0" 4141 + } 4142 + }, 4143 + "node_modules/uri-js": { 4144 + "version": "4.4.1", 4145 + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 4146 + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 4147 + "dev": true, 4148 + "license": "BSD-2-Clause", 4149 + "dependencies": { 4150 + "punycode": "^2.1.0" 4151 + } 4152 + }, 4153 + "node_modules/vite": { 4154 + "version": "7.3.1", 4155 + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", 4156 + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", 4157 + "dev": true, 4158 + "license": "MIT", 4159 + "dependencies": { 4160 + "esbuild": "^0.27.0", 4161 + "fdir": "^6.5.0", 4162 + "picomatch": "^4.0.3", 4163 + "postcss": "^8.5.6", 4164 + "rollup": "^4.43.0", 4165 + "tinyglobby": "^0.2.15" 4166 + }, 4167 + "bin": { 4168 + "vite": "bin/vite.js" 4169 + }, 4170 + "engines": { 4171 + "node": "^20.19.0 || >=22.12.0" 4172 + }, 4173 + "funding": { 4174 + "url": "https://github.com/vitejs/vite?sponsor=1" 4175 + }, 4176 + "optionalDependencies": { 4177 + "fsevents": "~2.3.3" 4178 + }, 4179 + "peerDependencies": { 4180 + "@types/node": "^20.19.0 || >=22.12.0", 4181 + "jiti": ">=1.21.0", 4182 + "less": "^4.0.0", 4183 + "lightningcss": "^1.21.0", 4184 + "sass": "^1.70.0", 4185 + "sass-embedded": "^1.70.0", 4186 + "stylus": ">=0.54.8", 4187 + "sugarss": "^5.0.0", 4188 + "terser": "^5.16.0", 4189 + "tsx": "^4.8.1", 4190 + "yaml": "^2.4.2" 4191 + }, 4192 + "peerDependenciesMeta": { 4193 + "@types/node": { 4194 + "optional": true 4195 + }, 4196 + "jiti": { 4197 + "optional": true 4198 + }, 4199 + "less": { 4200 + "optional": true 4201 + }, 4202 + "lightningcss": { 4203 + "optional": true 4204 + }, 4205 + "sass": { 4206 + "optional": true 4207 + }, 4208 + "sass-embedded": { 4209 + "optional": true 4210 + }, 4211 + "stylus": { 4212 + "optional": true 4213 + }, 4214 + "sugarss": { 4215 + "optional": true 4216 + }, 4217 + "terser": { 4218 + "optional": true 4219 + }, 4220 + "tsx": { 4221 + "optional": true 4222 + }, 4223 + "yaml": { 4224 + "optional": true 4225 + } 4226 + } 4227 + }, 4228 + "node_modules/which": { 4229 + "version": "2.0.2", 4230 + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 4231 + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 4232 + "dev": true, 4233 + "license": "ISC", 4234 + "dependencies": { 4235 + "isexe": "^2.0.0" 4236 + }, 4237 + "bin": { 4238 + "node-which": "bin/node-which" 4239 + }, 4240 + "engines": { 4241 + "node": ">= 8" 4242 + } 4243 + }, 4244 + "node_modules/word-wrap": { 4245 + "version": "1.2.5", 4246 + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", 4247 + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", 4248 + "dev": true, 4249 + "license": "MIT", 4250 + "engines": { 4251 + "node": ">=0.10.0" 4252 + } 4253 + }, 4254 + "node_modules/yallist": { 4255 + "version": "3.1.1", 4256 + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 4257 + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 4258 + "dev": true, 4259 + "license": "ISC" 4260 + }, 4261 + "node_modules/yocto-queue": { 4262 + "version": "0.1.0", 4263 + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 4264 + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 4265 + "dev": true, 4266 + "license": "MIT", 4267 + "engines": { 4268 + "node": ">=10" 4269 + }, 4270 + "funding": { 4271 + "url": "https://github.com/sponsors/sindresorhus" 4272 + } 4273 + }, 4274 + "node_modules/yoga-layout": { 4275 + "version": "3.2.1", 4276 + "resolved": "https://registry.npmjs.org/yoga-layout/-/yoga-layout-3.2.1.tgz", 4277 + "integrity": "sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==", 4278 + "dev": true, 4279 + "license": "MIT" 4280 + }, 4281 + "node_modules/zod": { 4282 + "version": "4.3.5", 4283 + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.5.tgz", 4284 + "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", 4285 + "dev": true, 4286 + "license": "MIT", 4287 + "funding": { 4288 + "url": "https://github.com/sponsors/colinhacks" 4289 + } 4290 + }, 4291 + "node_modules/zod-validation-error": { 4292 + "version": "4.0.2", 4293 + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", 4294 + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", 4295 + "dev": true, 4296 + "license": "MIT", 4297 + "engines": { 4298 + "node": ">=18.0.0" 4299 + }, 4300 + "peerDependencies": { 4301 + "zod": "^3.25.0 || ^4.0.0" 4302 + } 4303 + } 4304 + } 4305 + }
+35
website/package.json
··· 1 + { 2 + "name": "website", 3 + "private": true, 4 + "version": "0.0.0", 5 + "type": "module", 6 + "scripts": { 7 + "dev": "vite", 8 + "build": "npx tsx scripts/generate-og-image.tsx && tsc -b && vite build", 9 + "lint": "eslint .", 10 + "preview": "vite preview", 11 + "generate-og": "npx tsx scripts/generate-og-image.tsx" 12 + }, 13 + "dependencies": { 14 + "react": "^19.2.0", 15 + "react-dom": "^19.2.0" 16 + }, 17 + "devDependencies": { 18 + "@eslint/js": "^9.39.1", 19 + "@resvg/resvg-js": "^2.6.2", 20 + "@tailwindcss/vite": "^4.1.18", 21 + "@types/node": "^24.10.1", 22 + "@types/react": "^19.2.5", 23 + "@types/react-dom": "^19.2.3", 24 + "@vitejs/plugin-react": "^5.1.1", 25 + "eslint": "^9.39.1", 26 + "eslint-plugin-react-hooks": "^7.0.1", 27 + "eslint-plugin-react-refresh": "^0.4.24", 28 + "globals": "^16.5.0", 29 + "satori": "^0.19.1", 30 + "tailwindcss": "^4.1.18", 31 + "typescript": "~5.9.3", 32 + "typescript-eslint": "^8.46.4", 33 + "vite": "^7.2.4" 34 + } 35 + }
+25
website/public/icon.svg
··· 1 + <?xml version="1.0" encoding="UTF-8"?> 2 + <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1024 1024"> 3 + <defs> 4 + <style> 5 + .cls-1 { 6 + fill: url(#linear-gradient); 7 + } 8 + 9 + .cls-2 { 10 + fill: #fff; 11 + } 12 + </style> 13 + <linearGradient id="linear-gradient" x1="205.42" y1="205.42" x2="846.69" y2="846.69" gradientUnits="userSpaceOnUse"> 14 + <stop offset="0" stop-color="#6dd791"/> 15 + <stop offset="1" stop-color="#366946"/> 16 + </linearGradient> 17 + </defs> 18 + <rect class="cls-1" x="0" y="0" width="1024" height="1024" rx="512" ry="512"/> 19 + <g> 20 + <path class="cls-2" d="M737.91,324.02c-12.21,3-24.19,6.98-35.87,11.92-28.55,12.08-54.2,29.37-76.24,51.41-21.36,21.36-38.27,46.12-50.29,73.63,12.32,14.08,19.79,32.49,19.79,52.62,0,29.45-15.99,55.22-39.74,69.11v222.6c142.22-21.05,251.36-143.64,251.36-291.72,0-72.19-25.94-138.32-69-189.58Z"/> 21 + <path class="cls-2" d="M512,393.76c14.27-24.76,31.73-47.53,52.2-68,28.12-28.12,60.58-50.58,96.58-66.84-43.68-25.57-94.51-40.23-148.78-40.23s-105.1,14.66-148.78,40.23c36,16.27,68.46,38.73,96.58,66.84,20.47,20.47,37.93,43.24,52.2,68Z"/> 22 + <path class="cls-2" d="M435.29,513.6c0-17.66,5.75-33.99,15.48-47.24-.38-.92-.76-1.84-1.15-2.76-12.08-28.55-29.37-54.2-51.41-76.24-22.04-22.04-47.69-39.34-76.24-51.41-11.68-4.94-23.66-8.92-35.87-11.92-43.06,51.26-69,117.39-69,189.58,0,148.08,109.14,270.66,251.36,291.72v-226.9c-20.07-14.55-33.16-38.18-33.16-64.81Z"/> 23 + <circle class="cls-2" cx="515.24" cy="514.23" r="29.86" transform="translate(-104.36 132.13) rotate(-13.28)"/> 24 + </g> 25 + </svg>
+114
website/scripts/generate-og-image.tsx
··· 1 + import React from "react"; 2 + import satori from "satori"; 3 + import { Resvg } from "@resvg/resvg-js"; 4 + import { readFileSync, writeFileSync } from "fs"; 5 + import { join, dirname } from "path"; 6 + import { fileURLToPath } from "url"; 7 + 8 + const __dirname = dirname(fileURLToPath(import.meta.url)); 9 + const rootDir = join(__dirname, ".."); 10 + 11 + // Dark mode colors from index.css 12 + const colors = { 13 + primary: "#6ab377", 14 + bg: "#0f1410", 15 + bgAlt: "#151c17", 16 + text: "#e8ebe9", 17 + textMuted: "#a0a8a2", 18 + }; 19 + 20 + async function loadFont(url: string): Promise<ArrayBuffer> { 21 + const response = await fetch(url); 22 + return response.arrayBuffer(); 23 + } 24 + 25 + async function generateOgImage() { 26 + const [fontRegular, fontBold] = await Promise.all([ 27 + loadFont( 28 + "https://fonts.gstatic.com/s/inter/v18/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuLyfAZ9hjp-Ek-_EeA.woff", 29 + ), 30 + loadFont( 31 + "https://fonts.gstatic.com/s/inter/v18/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuGKYAZ9hjp-Ek-_EeA.woff", 32 + ), 33 + ]); 34 + 35 + const iconSrc = `data:image/svg+xml,${encodeURIComponent( 36 + readFileSync(join(rootDir, "public/icon.svg"), "utf-8"), 37 + )}`; 38 + 39 + const svg = await satori( 40 + <div 41 + style={{ 42 + height: "100%", 43 + width: "100%", 44 + display: "flex", 45 + flexDirection: "column", 46 + alignItems: "center", 47 + justifyContent: "center", 48 + background: `linear-gradient(135deg, ${colors.bg} 0%, ${colors.bgAlt} 100%)`, 49 + fontFamily: "Inter", 50 + }} 51 + > 52 + <div 53 + style={{ 54 + display: "flex", 55 + alignItems: "center", 56 + gap: "24px", 57 + marginBottom: "24px", 58 + }} 59 + > 60 + <img src={iconSrc} width={100} height={100} /> 61 + <span 62 + style={{ 63 + fontSize: 80, 64 + fontWeight: 700, 65 + color: colors.text, 66 + letterSpacing: "-0.02em", 67 + }} 68 + > 69 + Switchyard 70 + </span> 71 + </div> 72 + <div 73 + style={{ 74 + fontSize: 36, 75 + fontWeight: 500, 76 + color: colors.textMuted, 77 + marginBottom: "32px", 78 + }} 79 + > 80 + A rules-based browser launcher for Linux. 81 + </div> 82 + <div 83 + style={{ 84 + display: "flex", 85 + padding: "12px 28px", 86 + background: colors.primary, 87 + color: "#ffffff", 88 + borderRadius: "12px", 89 + fontSize: 24, 90 + fontWeight: 600, 91 + }} 92 + > 93 + Download Now 94 + </div> 95 + </div>, 96 + { 97 + width: 1200, 98 + height: 630, 99 + fonts: [ 100 + { name: "Inter", data: fontRegular, weight: 400, style: "normal" }, 101 + { name: "Inter", data: fontRegular, weight: 500, style: "normal" }, 102 + { name: "Inter", data: fontBold, weight: 700, style: "normal" }, 103 + ], 104 + }, 105 + ); 106 + 107 + const resvg = new Resvg(svg, { fitTo: { mode: "width", value: 1200 } }); 108 + const pngBuffer = resvg.render().asPng(); 109 + 110 + writeFileSync(join(rootDir, "public/og-image.png"), pngBuffer); 111 + console.log("Generated public/og-image.png"); 112 + } 113 + 114 + generateOgImage().catch(console.error);
+255
website/src/App.tsx
··· 1 + import { useState, useEffect } from "react"; 2 + import icon from "/icon.svg"; 3 + import { Icon } from "./components/Icon"; 4 + import { screenshots } from "./data/screenshots"; 5 + import { features } from "./data/features"; 6 + import { heroButtons } from "./data/heroButtons"; 7 + import { showcases } from "./data/showcases"; 8 + import { installOptions } from "./data/installOptions"; 9 + import { footerLinks } from "./data/footerLinks"; 10 + import { DEV_URL } from "./data/urls"; 11 + 12 + function App() { 13 + const [lightboxSrc, setLightboxSrc] = useState<string | null>(null); 14 + 15 + // Close lightbox on Escape key 16 + useEffect(() => { 17 + const handleKeyDown = (e: KeyboardEvent) => { 18 + if (e.key === "Escape") setLightboxSrc(null); 19 + }; 20 + if (lightboxSrc) { 21 + document.addEventListener("keydown", handleKeyDown); 22 + return () => document.removeEventListener("keydown", handleKeyDown); 23 + } 24 + }, [lightboxSrc]); 25 + 26 + const openLightbox = (src: string) => setLightboxSrc(src); 27 + 28 + return ( 29 + <> 30 + {/* Hero */} 31 + <section className="min-h-screen flex items-center bg-gradient-to-br from-bg to-bg-alt relative overflow-hidden"> 32 + {/* Background decoration */} 33 + <div className="absolute -top-1/2 -right-1/5 w-4/5 h-[200%] bg-[radial-gradient(ellipse,rgba(79,137,93,0.08)_0%,transparent_70%)] pointer-events-none" /> 34 + 35 + <div className="grid grid-cols-1 md:grid-cols-2 gap-6 md:gap-16 items-center max-w-[1200px] mx-auto px-4 md:px-8 py-8 md:py-16 relative z-10"> 36 + <div className="contents md:block text-center md:text-left"> 37 + <div className="flex items-center gap-3 md:gap-4 justify-center md:justify-start mb-4 order-1"> 38 + <img 39 + src={icon} 40 + alt="" 41 + className="w-14 h-14 md:w-[72px] md:h-[72px] shrink-0" 42 + /> 43 + <h1 className="text-3xl md:text-[3.5rem] font-bold leading-tight tracking-tight bg-gradient-to-br from-text to-text-muted bg-clip-text text-transparent"> 44 + Switchyard 45 + </h1> 46 + </div> 47 + <p className="text-lg md:text-xl text-text-muted font-medium mb-4 order-3"> 48 + A rules-based browser launcher for Linux. 49 + </p> 50 + <p className="text-base md:text-lg text-text-muted leading-relaxed mb-4 max-w-[480px] mx-auto md:mx-0 order-4"> 51 + Work links in Chrome. Personal links in Firefox. 52 + </p> 53 + <div className="inline-block px-3 py-2 md:px-4 md:py-2 bg-primary/10 text-primary rounded-full text-sm font-semibold mb-4 md:mb-8 order-5"> 54 + 100% Free & Open Source 55 + </div> 56 + <div className="flex flex-col md:flex-row gap-3 md:gap-4 items-center md:items-start justify-center md:justify-start order-6"> 57 + {heroButtons.map((btn) => ( 58 + <a 59 + key={btn.label} 60 + href={btn.href} 61 + className={`inline-flex items-center gap-2.5 px-6 py-3.5 rounded-xl font-semibold text-base transition-all duration-200 w-full md:w-auto max-w-[260px] justify-center focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline-offset-2 ${ 62 + btn.primary 63 + ? "bg-primary text-white shadow-primary hover:bg-primary-light hover:-translate-y-0.5 hover:shadow-primary-hover" 64 + : "bg-transparent text-text border-2 border-border hover:border-primary hover:text-primary" 65 + }`} 66 + > 67 + {btn.icon && ( 68 + <Icon name={btn.icon} filled className="w-5 h-5" /> 69 + )} 70 + {btn.label} 71 + </a> 72 + ))} 73 + </div> 74 + </div> 75 + <div className="order-2 md:order-none"> 76 + <img 77 + src={screenshots[0].src} 78 + alt={screenshots[0].alt} 79 + onClick={() => openLightbox(screenshots[0].src)} 80 + role="button" 81 + tabIndex={0} 82 + onKeyDown={(e) => 83 + e.key === "Enter" && openLightbox(screenshots[0].src) 84 + } 85 + className="w-full max-w-[280px] md:max-w-[480px] h-auto rounded-xl md:rounded-2xl shadow-lg border border-border cursor-pointer transition-transform duration-300 hover:scale-[1.02] focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline-offset-2 mx-auto" 86 + /> 87 + </div> 88 + </div> 89 + </section> 90 + 91 + {/* Features */} 92 + <section className="py-12 md:py-20 bg-bg"> 93 + <div className="max-w-[1100px] mx-auto px-4 md:px-8"> 94 + <h2 className="text-2xl md:text-3xl font-bold text-center mb-8 md:mb-10 tracking-tight"> 95 + Key Features 96 + </h2> 97 + <div className="grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-10 max-w-[400px] md:max-w-none mx-auto"> 98 + {features.map((feature) => ( 99 + <div key={feature.title} className="text-center p-4 md:p-8"> 100 + <div className="w-11 h-11 md:w-12 md:h-12 mx-auto mb-4 bg-gradient-to-br from-primary to-primary-dark rounded-xl flex items-center justify-center text-white"> 101 + <Icon name={feature.icon} className="w-5 h-5 md:w-6 md:h-6" /> 102 + </div> 103 + <h3 className="text-base md:text-lg font-bold mb-2"> 104 + {feature.title} 105 + </h3> 106 + <p className="text-text-muted text-sm leading-relaxed"> 107 + {feature.description} 108 + </p> 109 + </div> 110 + ))} 111 + </div> 112 + </div> 113 + </section> 114 + 115 + {/* Showcases */} 116 + {showcases.map((showcase, index) => ( 117 + <section 118 + key={showcase.title} 119 + className={`py-12 md:py-20 ${index % 2 === 0 ? "bg-bg-alt" : "bg-bg"}`} 120 + > 121 + <div 122 + className={`grid grid-cols-1 md:grid-cols-[1.2fr_1fr] gap-6 md:gap-16 items-center max-w-[1200px] mx-auto px-4 md:px-8 ${ 123 + index % 2 !== 0 124 + ? "md:[direction:rtl] md:[&>*]:[direction:ltr]" 125 + : "" 126 + }`} 127 + > 128 + {showcase.screenshot && ( 129 + <img 130 + src={showcase.screenshot.src} 131 + alt={showcase.screenshot.alt} 132 + onClick={() => openLightbox(showcase.screenshot!.src)} 133 + role="button" 134 + tabIndex={0} 135 + onKeyDown={(e) => 136 + e.key === "Enter" && openLightbox(showcase.screenshot!.src) 137 + } 138 + className="w-full max-w-[600px] h-auto rounded-xl md:rounded-2xl border border-border shadow-lg cursor-pointer transition-transform duration-300 hover:scale-[1.02] focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline-offset-2 mx-auto order-first md:order-none" 139 + /> 140 + )} 141 + {showcase.code && ( 142 + <pre className="bg-bg-alt rounded-xl p-4 md:p-6 overflow-x-auto shadow-default border border-border"> 143 + <code className="font-mono text-xs md:text-sm leading-relaxed text-text"> 144 + {showcase.code} 145 + </code> 146 + </pre> 147 + )} 148 + <div className="text-center md:text-left"> 149 + <h2 className="text-xl md:text-2xl font-bold mb-4 tracking-tight"> 150 + {showcase.title} 151 + </h2> 152 + <p className="text-text-muted text-base leading-relaxed max-w-[400px] mx-auto md:mx-0"> 153 + {showcase.description} 154 + </p> 155 + </div> 156 + </div> 157 + </section> 158 + ))} 159 + 160 + {/* Installation */} 161 + <section 162 + className={`py-12 md:py-20 ${(showcases.length - 1) % 2 === 0 ? "bg-bg" : "bg-bg-alt"}`} 163 + id="install" 164 + > 165 + <div className="max-w-[1100px] mx-auto px-4 md:px-8"> 166 + <h2 className="text-2xl md:text-3xl font-bold text-center mb-8 md:mb-10 tracking-tight"> 167 + Get Started 168 + </h2> 169 + <div className="grid grid-cols-1 md:grid-cols-3 gap-6 max-w-[400px] md:max-w-[900px] mx-auto"> 170 + {installOptions.map((option) => ( 171 + <div 172 + key={option.title} 173 + className="bg-bg p-5 md:p-8 rounded-2xl border border-border transition-all duration-300 hover:shadow-default hover:-translate-y-0.5" 174 + > 175 + <div className="w-9 h-9 md:w-10 md:h-10 mb-4 text-primary"> 176 + <Icon name={option.icon} filled className="w-full h-full" /> 177 + </div> 178 + <h3 className="text-base md:text-lg font-bold mb-1"> 179 + {option.title} 180 + </h3> 181 + <p className="text-text-muted text-sm mb-4"> 182 + {option.description} 183 + </p> 184 + {"command" in option ? ( 185 + <code className="block bg-bg-alt px-3 py-3 md:px-4 rounded-xl text-xs font-mono overflow-x-auto border border-border"> 186 + {option.command} 187 + </code> 188 + ) : ( 189 + <a 190 + href={option.link} 191 + className="block bg-primary text-white px-4 py-3 rounded-xl text-sm font-semibold text-center transition-colors duration-200 hover:bg-primary-light hover:text-white focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline-offset-2" 192 + > 193 + {option.linkText} 194 + </a> 195 + )} 196 + </div> 197 + ))} 198 + </div> 199 + </div> 200 + </section> 201 + 202 + {/* Footer */} 203 + <footer 204 + className={`py-8 md:py-12 ${(showcases.length - 1) % 2 === 0 ? "bg-bg-alt" : "bg-bg"}`} 205 + > 206 + <div className="max-w-[1100px] mx-auto px-4 md:px-8 flex flex-col items-center gap-5"> 207 + <div className="flex items-center gap-3 font-semibold text-lg"> 208 + <img src={icon} alt="Switchyard" className="w-8 h-8" /> 209 + <span>Switchyard</span> 210 + </div> 211 + <nav className="flex gap-6 md:gap-8"> 212 + {footerLinks.map((link) => ( 213 + <a 214 + key={link.label} 215 + href={link.href} 216 + className="text-text-muted text-sm hover:text-primary" 217 + > 218 + {link.label} 219 + </a> 220 + ))} 221 + </nav> 222 + <p className="text-text-light text-sm"> 223 + Made by{" "} 224 + <a 225 + href={DEV_URL} 226 + className="text-text-muted hover:text-primary transition-colors" 227 + > 228 + Aly Raffauf 229 + </a>{" "} 230 + · GPL-3.0-or-later 231 + </p> 232 + </div> 233 + </footer> 234 + 235 + {/* Lightbox */} 236 + {lightboxSrc && ( 237 + <div 238 + className="fixed inset-0 bg-black/90 flex items-center justify-center z-[1000] cursor-pointer backdrop-blur-sm" 239 + onClick={() => setLightboxSrc(null)} 240 + role="dialog" 241 + aria-modal="true" 242 + aria-label="Image preview" 243 + > 244 + <img 245 + src={lightboxSrc} 246 + alt="Screenshot preview" 247 + className="max-w-[90vw] md:max-w-[90vw] max-h-[85vh] md:max-h-[90vh] rounded-lg md:rounded-xl shadow-lg" 248 + /> 249 + </div> 250 + )} 251 + </> 252 + ); 253 + } 254 + 255 + export default App;
+56
website/src/components/Icon.tsx
··· 1 + const icons = { 2 + github: ( 3 + <path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z" /> 4 + ), 5 + heart: ( 6 + <path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z" /> 7 + ), 8 + checkCircle: <path d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" />, 9 + bolt: <path d="M13 10V3L4 14h7v7l9-11h-7z" />, 10 + sliders: ( 11 + <path d="M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4" /> 12 + ), 13 + nixos: ( 14 + <path d="M7.352 1.592l-1.364.002L5.32 2.75l1.557 2.713-3.137-.008-1.32 2.34H14.11l-1.353-2.332-3.192-.006-2.214-3.865zm6.175 0l-2.687.025 5.846 10.127 1.341-2.34-1.59-2.765 2.24-3.85-.683-1.182h-1.336l-1.57 2.705-1.56-2.72zm6.887 4.195l-5.846 10.125 2.696-.008 1.601-2.76 4.453.016.682-1.183-.666-1.157-3.13-.008L21.778 8.1l-1.365-2.313zM9.432 8.086l-2.696.008-1.601 2.76-4.453-.016L0 12.02l.666 1.157 3.13.008-1.575 2.71 1.365 2.315L9.432 8.086zM7.33 12.25l-.006.01-.002-.004-1.342 2.34 1.59 2.765-2.24 3.85.684 1.182H7.35l.004-.006h.001l1.567-2.698 1.558 2.72 2.688-.026-.004-.006h.01L7.33 12.25zm2.55 3.93l1.354 2.332 3.192.006 2.215 3.865 1.363-.002.668-1.156-1.557-2.713 3.137.008 1.32-2.34H9.881Z" /> 15 + ), 16 + flatpak: ( 17 + <path d="M12 0c-.556 0-1.111.144-1.61.432l-7.603 4.39a3.217 3.217 0 0 0-1.61 2.788v8.78c0 1.151.612 2.212 1.61 2.788l7.603 4.39a3.217 3.217 0 0 0 3.22 0l7.603-4.39a3.217 3.217 0 0 0 1.61-2.788V7.61a3.217 3.217 0 0 0-1.61-2.788L13.61.432A3.218 3.218 0 0 0 12 0Zm0 2.358c.15 0 .299.039.431.115l7.604 4.39c.132.077.24.187.315.316L12 12v9.642a.863.863 0 0 1-.431-.116l-7.604-4.39a.866.866 0 0 1-.431-.746V7.61c0-.153.041-.302.116-.43L12 12Z" /> 18 + ), 19 + download: ( 20 + <path d="M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm0 14l-4-4h2.5V8h3v4H16l-4 4z" /> 21 + ), 22 + link: ( 23 + <path d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1" /> 24 + ), 25 + shuffle: ( 26 + <path d="M16 3h5v5m0-5l-6 6m-2 8l8 8m0-5v5h-5M4 4l5 5m11 11l-5-5M4 20l5-5" /> 27 + ), 28 + star: ( 29 + <path d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z" /> 30 + ), 31 + zap: <path d="M13 10V3L4 14h7v7l9-11h-7z" />, 32 + } as const; 33 + 34 + export type IconName = keyof typeof icons; 35 + 36 + export function Icon({ 37 + name, 38 + filled = false, 39 + className, 40 + }: { 41 + name: IconName; 42 + filled?: boolean; 43 + className?: string; 44 + }) { 45 + return ( 46 + <svg 47 + className={className} 48 + viewBox="0 0 24 24" 49 + fill={filled ? "currentColor" : "none"} 50 + stroke={filled ? undefined : "currentColor"} 51 + strokeWidth={filled ? undefined : 2} 52 + > 53 + {icons[name]} 54 + </svg> 55 + ); 56 + }
+40
website/src/data/features.ts
··· 1 + import type { Feature } from "../types"; 2 + 3 + export const features: Feature[] = [ 4 + { 5 + icon: "checkCircle", 6 + title: "Automatic Routing", 7 + description: 8 + "Create rules by domain or regex. Links open in the right browser automatically.", 9 + }, 10 + { 11 + icon: "sliders", 12 + title: "Browser Launcher", 13 + description: 14 + "No matching rule? Launch a browser with a quick keystroke or mouse click.", 15 + }, 16 + { 17 + icon: "shuffle", 18 + title: "Link Redirections", 19 + description: 20 + "Rewrite URLs before they open. Strip trackers, swap domains, and more.", 21 + }, 22 + { 23 + icon: "link", 24 + title: "Custom URLs", 25 + description: 26 + "Encode rules directly with switchyard:// links. Perfect for notes and to-dos.", 27 + }, 28 + { 29 + icon: "star", 30 + title: "Favorite Browser", 31 + description: 32 + "Pin your favorite browser to appear first and act as fallback.", 33 + }, 34 + { 35 + icon: "zap", 36 + title: "Fast & Native", 37 + description: 38 + "A native GNOME app that launches instantly. No background services.", 39 + }, 40 + ];
+8
website/src/data/footerLinks.ts
··· 1 + import type { FooterLink } from "../types"; 2 + import { DONATE_URL, REPO_URL } from "./urls"; 3 + 4 + export const footerLinks: FooterLink[] = [ 5 + { href: REPO_URL, label: "GitHub" }, 6 + { href: `${REPO_URL}/issues`, label: "Issues" }, 7 + { href: DONATE_URL, label: "Donate" }, 8 + ];
+22
website/src/data/heroButtons.ts
··· 1 + import type { HeroButton } from "../types"; 2 + import { DONATE_URL, FLATHUB_URL, REPO_URL } from "./urls"; 3 + 4 + export const heroButtons: HeroButton[] = [ 5 + { 6 + href: FLATHUB_URL, 7 + label: "Flathub", 8 + icon: "flatpak", 9 + primary: true, 10 + }, 11 + { 12 + href: REPO_URL, 13 + label: "GitHub", 14 + icon: "github", 15 + primary: true, 16 + }, 17 + { 18 + href: DONATE_URL, 19 + label: "Donate", 20 + icon: "heart", 21 + }, 22 + ];
+27
website/src/data/installOptions.ts
··· 1 + import type { InstallOption } from "../types"; 2 + 3 + const REPO_URL = "https://github.com/alyraffauf/switchyard"; 4 + const FLATHUB_URL = "https://flathub.org/apps/io.github.alyraffauf.Switchyard"; 5 + 6 + export const installOptions: InstallOption[] = [ 7 + { 8 + icon: "flatpak", 9 + title: "Flatpak", 10 + description: "Recommended for most users", 11 + link: FLATHUB_URL, 12 + linkText: "View on Flathub", 13 + }, 14 + { 15 + icon: "nixos", 16 + title: "Nix Flake", 17 + description: "Run directly or add to your config", 18 + command: "nix run github:alyraffauf/switchyard", 19 + }, 20 + { 21 + icon: "github", 22 + title: "Build from Source", 23 + description: "Requires Go 1.24+ and GTK4", 24 + link: REPO_URL, 25 + linkText: "View on GitHub", 26 + }, 27 + ];
+22
website/src/data/screenshots.ts
··· 1 + import type { Screenshot } from "../types"; 2 + 3 + const SCREENSHOTS_BASE = `https://raw.githubusercontent.com/alyraffauf/switchyard/master/data/screenshots`; 4 + 5 + export const screenshots: Screenshot[] = [ 6 + { 7 + src: `${SCREENSHOTS_BASE}/launcher.png`, 8 + alt: "Browser launcher", 9 + }, 10 + { 11 + src: `${SCREENSHOTS_BASE}/browser-rules.png`, 12 + alt: "Browser rules panel", 13 + }, 14 + { 15 + src: `${SCREENSHOTS_BASE}/link-redirections.png`, 16 + alt: "Link redirections panel", 17 + }, 18 + { 19 + src: `${SCREENSHOTS_BASE}/edit-rules.png`, 20 + alt: "Rule editor", 21 + }, 22 + ];
+34
website/src/data/showcases.ts
··· 1 + import type { Showcase } from "../types"; 2 + import { screenshots } from "./screenshots"; 3 + 4 + export const showcases: Showcase[] = [ 5 + { 6 + screenshot: screenshots[1], 7 + title: "Point-and-Click Setup", 8 + description: 9 + "Create and manage rules with a clean, native interface. No config files required—just point and click.", 10 + }, 11 + { 12 + screenshot: screenshots[2], 13 + title: "Your Links, Your Way", 14 + description: 15 + "Take control of every link you open. Strip tracking parameters and enforce privacy-friendly frontends automatically.", 16 + }, 17 + { 18 + code: `[[rules]] 19 + name = "Video Sites" 20 + logic = "any" 21 + browser = "brave-browser.desktop" 22 + 23 + [[rules.conditions]] 24 + type = "domain" 25 + pattern = "youtube.com" 26 + 27 + [[rules.conditions]] 28 + type = "domain" 29 + pattern = "twitch.tv"`, 30 + title: "Plain Text Configuration", 31 + description: 32 + "Prefer text editors? Define rules in a simple TOML file. Easy to version control, share, and back up.", 33 + }, 34 + ];
+5
website/src/data/urls.ts
··· 1 + export const REPO_URL = "https://github.com/alyraffauf/switchyard"; 2 + export const DONATE_URL = "https://ko-fi.com/alyraffauf"; 3 + export const FLATHUB_URL = 4 + "https://flathub.org/apps/io.github.alyraffauf.Switchyard"; 5 + export const DEV_URL = "https://aly.codes";
+46
website/src/index.css
··· 1 + @import "tailwindcss"; 2 + 3 + @theme { 4 + --color-primary: #4f895d; 5 + --color-primary-light: #5a9d6a; 6 + --color-primary-dark: #3d6b48; 7 + --color-bg: #ffffff; 8 + --color-bg-alt: #f8faf8; 9 + --color-text: #1a1a1a; 10 + --color-text-muted: #555555; 11 + --color-text-light: #888888; 12 + --color-border: #e0e0e0; 13 + --shadow-default: 0 4px 24px rgba(0, 0, 0, 0.08); 14 + --shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.12); 15 + --shadow-primary: 0 4px 14px rgba(79, 137, 93, 0.35); 16 + --shadow-primary-hover: 0 6px 20px rgba(79, 137, 93, 0.4); 17 + --font-sans: 18 + -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", 19 + Arial, sans-serif; 20 + --font-mono: "SF Mono", Monaco, "Cascadia Code", "Fira Code", monospace; 21 + } 22 + 23 + @media (prefers-color-scheme: dark) { 24 + @theme { 25 + --color-primary: #6ab377; 26 + --color-primary-light: #7ec48a; 27 + --color-primary-dark: #5a9d6a; 28 + --color-bg: #0f1410; 29 + --color-bg-alt: #151c17; 30 + --color-text: #e8ebe9; 31 + --color-text-muted: #a0a8a2; 32 + --color-text-light: #6a726c; 33 + --color-border: #2a3530; 34 + } 35 + } 36 + 37 + html { 38 + scroll-behavior: smooth; 39 + } 40 + 41 + body { 42 + font-family: var(--font-sans); 43 + background: var(--color-bg); 44 + color: var(--color-text); 45 + -webkit-font-smoothing: antialiased; 46 + }
+10
website/src/main.tsx
··· 1 + import { StrictMode } from "react"; 2 + import { createRoot } from "react-dom/client"; 3 + import "./index.css"; 4 + import App from "./App.tsx"; 5 + 6 + createRoot(document.getElementById("root")!).render( 7 + <StrictMode> 8 + <App /> 9 + </StrictMode>, 10 + );
+48
website/src/types.ts
··· 1 + import type { IconName } from "./components/Icon"; 2 + 3 + export interface Screenshot { 4 + src: string; 5 + alt: string; 6 + } 7 + 8 + export interface Feature { 9 + icon: IconName; 10 + title: string; 11 + description: string; 12 + } 13 + 14 + export interface HeroButton { 15 + href: string; 16 + label: string; 17 + icon?: IconName; 18 + primary?: boolean; 19 + } 20 + 21 + interface InstallOptionCommand { 22 + icon: IconName; 23 + title: string; 24 + description: string; 25 + command: string; 26 + } 27 + 28 + interface InstallOptionLink { 29 + icon: IconName; 30 + title: string; 31 + description: string; 32 + link: string; 33 + linkText: string; 34 + } 35 + 36 + export type InstallOption = InstallOptionCommand | InstallOptionLink; 37 + 38 + export interface Showcase { 39 + screenshot?: Screenshot; 40 + code?: string; 41 + title: string; 42 + description: string; 43 + } 44 + 45 + export interface FooterLink { 46 + href: string; 47 + label: string; 48 + }
+28
website/tsconfig.app.json
··· 1 + { 2 + "compilerOptions": { 3 + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", 4 + "target": "ES2022", 5 + "useDefineForClassFields": true, 6 + "lib": ["ES2022", "DOM", "DOM.Iterable"], 7 + "module": "ESNext", 8 + "types": ["vite/client"], 9 + "skipLibCheck": true, 10 + 11 + /* Bundler mode */ 12 + "moduleResolution": "bundler", 13 + "allowImportingTsExtensions": true, 14 + "verbatimModuleSyntax": true, 15 + "moduleDetection": "force", 16 + "noEmit": true, 17 + "jsx": "react-jsx", 18 + 19 + /* Linting */ 20 + "strict": true, 21 + "noUnusedLocals": true, 22 + "noUnusedParameters": true, 23 + "erasableSyntaxOnly": true, 24 + "noFallthroughCasesInSwitch": true, 25 + "noUncheckedSideEffectImports": true 26 + }, 27 + "include": ["src"] 28 + }
+7
website/tsconfig.json
··· 1 + { 2 + "files": [], 3 + "references": [ 4 + { "path": "./tsconfig.app.json" }, 5 + { "path": "./tsconfig.node.json" } 6 + ] 7 + }
+26
website/tsconfig.node.json
··· 1 + { 2 + "compilerOptions": { 3 + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", 4 + "target": "ES2023", 5 + "lib": ["ES2023"], 6 + "module": "ESNext", 7 + "types": ["node"], 8 + "skipLibCheck": true, 9 + 10 + /* Bundler mode */ 11 + "moduleResolution": "bundler", 12 + "allowImportingTsExtensions": true, 13 + "verbatimModuleSyntax": true, 14 + "moduleDetection": "force", 15 + "noEmit": true, 16 + 17 + /* Linting */ 18 + "strict": true, 19 + "noUnusedLocals": true, 20 + "noUnusedParameters": true, 21 + "erasableSyntaxOnly": true, 22 + "noFallthroughCasesInSwitch": true, 23 + "noUncheckedSideEffectImports": true 24 + }, 25 + "include": ["vite.config.ts"] 26 + }
+9
website/vite.config.ts
··· 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 + base: "/", 9 + });