a reactive (signals based) hypermedia web framework (wip) stormlightlabs.github.io/volt/
hypermedia frontend signals
0
fork

Configure Feed

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

feat: reactivity primitives build: linting setup

+1680 -143
+59
eslint.config.js
··· 1 + import { includeIgnoreFile } from "@eslint/compat"; 2 + import js from "@eslint/js"; 3 + import unicorn from "eslint-plugin-unicorn"; 4 + import globals from "globals"; 5 + import { fileURLToPath } from "node:url"; 6 + import ts from "typescript-eslint"; 7 + 8 + const gitignorePath = fileURLToPath(new URL("./.gitignore", import.meta.url)); 9 + 10 + /** @type {import('eslint').Linter.Config} */ 11 + export default ts.config( 12 + includeIgnoreFile(gitignorePath), 13 + js.configs.recommended, 14 + unicorn.configs.recommended, 15 + ...ts.configs.recommended, 16 + { 17 + languageOptions: { 18 + globals: { ...globals.browser, ...globals.node }, 19 + parserOptions: { 20 + project: ["./tsconfig.json"], 21 + tsconfigRootDir: import.meta.dirname, 22 + }, 23 + }, 24 + rules: { 25 + "no-undef": "off", 26 + "@typescript-eslint/no-unused-vars": [ 27 + "warn", 28 + { argsIgnorePattern: "^_", varsIgnorePattern: "^_" }, 29 + ], 30 + "@typescript-eslint/no-explicit-any": "off", 31 + "unicorn/prefer-ternary": "off", 32 + "no-console": "off", 33 + "unicorn/filename-case": [ 34 + "warn", 35 + { 36 + cases: { pascalCase: true, kebabCase: true }, 37 + multipleFileExtensions: false, 38 + }, 39 + ], 40 + "unicorn/no-null": "off", 41 + "unicorn/prevent-abbreviations": [ 42 + "warn", 43 + { 44 + replacements: { 45 + props: { properties: false }, 46 + params: { parameters: false }, 47 + param: { parameter: false }, 48 + opts: { options: false }, 49 + args: { arguments: false }, 50 + fn: { function: false }, 51 + }, 52 + }, 53 + ], 54 + }, 55 + }, 56 + { 57 + rules: { "unicorn/prefer-top-level-await": "off" }, 58 + } 59 + );
+17 -1
package.json
··· 7 7 "dev": "vite", 8 8 "build": "tsc && vite build", 9 9 "preview": "vite preview", 10 + "test": "vitest", 11 + "test:ui": "vitest --ui", 12 + "test:run": "vitest run", 10 13 "docs:dev": "vitepress dev docs", 11 14 "docs:build": "vitepress build docs", 12 15 "docs:preview": "vitepress preview docs" 13 16 }, 14 17 "devDependencies": { 18 + "@eslint/compat": "^1.4.0", 19 + "@eslint/js": "^9.38.0", 15 20 "@testing-library/dom": "^10.4.1", 16 21 "@testing-library/jest-dom": "^6.9.1", 17 22 "dprint": "^0.50.2", 23 + "eslint": "^9.38.0", 24 + "eslint-plugin-unicorn": "^61.0.2", 25 + "globals": "^16.4.0", 18 26 "jsdom": "^27.0.0", 19 27 "typescript": "~5.9.3", 28 + "typescript-eslint": "^8.46.1", 20 29 "vite": "npm:rolldown-vite@7.1.14", 21 30 "vitepress": "^1.6.4", 22 31 "vitest": "^3.2.4", 23 32 "vue": "^3.5.22" 24 33 }, 25 - "pnpm": { "overrides": { "vite": "npm:rolldown-vite@7.1.14" }, "onlyBuiltDependencies": ["dprint"] } 34 + "pnpm": { 35 + "overrides": { 36 + "vite": "npm:rolldown-vite@7.1.14" 37 + }, 38 + "onlyBuiltDependencies": [ 39 + "dprint" 40 + ] 41 + } 26 42 }
+1197 -4
pnpm-lock.yaml
··· 11 11 12 12 .: 13 13 devDependencies: 14 + '@eslint/compat': 15 + specifier: ^1.4.0 16 + version: 1.4.0(eslint@9.38.0) 17 + '@eslint/js': 18 + specifier: ^9.38.0 19 + version: 9.38.0 14 20 '@testing-library/dom': 15 21 specifier: ^10.4.1 16 22 version: 10.4.1 ··· 20 26 dprint: 21 27 specifier: ^0.50.2 22 28 version: 0.50.2 29 + eslint: 30 + specifier: ^9.38.0 31 + version: 9.38.0 32 + eslint-plugin-unicorn: 33 + specifier: ^61.0.2 34 + version: 61.0.2(eslint@9.38.0) 35 + globals: 36 + specifier: ^16.4.0 37 + version: 16.4.0 23 38 jsdom: 24 39 specifier: ^27.0.0 25 40 version: 27.0.0(postcss@8.5.6) 26 41 typescript: 27 42 specifier: ~5.9.3 28 43 version: 5.9.3 44 + typescript-eslint: 45 + specifier: ^8.46.1 46 + version: 8.46.1(eslint@9.38.0)(typescript@5.9.3) 29 47 vite: 30 48 specifier: npm:rolldown-vite@7.1.14 31 49 version: rolldown-vite@7.1.14 32 50 vitepress: 33 51 specifier: ^1.6.4 34 - version: 1.6.4(@algolia/client-search@5.40.1)(postcss@8.5.6)(search-insights@2.17.3)(typescript@5.9.3) 52 + version: 1.6.4(@algolia/client-search@5.40.1)(change-case@5.4.4)(postcss@8.5.6)(search-insights@2.17.3)(typescript@5.9.3) 35 53 vitest: 36 54 specifier: ^3.2.4 37 55 version: 3.2.4(jsdom@27.0.0(postcss@8.5.6)) ··· 265 283 '@emnapi/wasi-threads@1.1.0': 266 284 resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} 267 285 286 + '@eslint-community/eslint-utils@4.9.0': 287 + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} 288 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 289 + peerDependencies: 290 + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 291 + 292 + '@eslint-community/regexpp@4.12.1': 293 + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 294 + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 295 + 296 + '@eslint/compat@1.4.0': 297 + resolution: {integrity: sha512-DEzm5dKeDBPm3r08Ixli/0cmxr8LkRdwxMRUIJBlSCpAwSrvFEJpVBzV+66JhDxiaqKxnRzCXhtiMiczF7Hglg==} 298 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 299 + peerDependencies: 300 + eslint: ^8.40 || 9 301 + peerDependenciesMeta: 302 + eslint: 303 + optional: true 304 + 305 + '@eslint/config-array@0.21.1': 306 + resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} 307 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 308 + 309 + '@eslint/config-helpers@0.4.1': 310 + resolution: {integrity: sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==} 311 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 312 + 313 + '@eslint/core@0.15.2': 314 + resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} 315 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 316 + 317 + '@eslint/core@0.16.0': 318 + resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==} 319 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 320 + 321 + '@eslint/eslintrc@3.3.1': 322 + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} 323 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 324 + 325 + '@eslint/js@9.38.0': 326 + resolution: {integrity: sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==} 327 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 328 + 329 + '@eslint/object-schema@2.1.7': 330 + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} 331 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 332 + 333 + '@eslint/plugin-kit@0.3.5': 334 + resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} 335 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 336 + 337 + '@eslint/plugin-kit@0.4.0': 338 + resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==} 339 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 340 + 341 + '@humanfs/core@0.19.1': 342 + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 343 + engines: {node: '>=18.18.0'} 344 + 345 + '@humanfs/node@0.16.7': 346 + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} 347 + engines: {node: '>=18.18.0'} 348 + 349 + '@humanwhocodes/module-importer@1.0.1': 350 + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 351 + engines: {node: '>=12.22'} 352 + 353 + '@humanwhocodes/retry@0.4.3': 354 + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} 355 + engines: {node: '>=18.18'} 356 + 268 357 '@iconify-json/simple-icons@1.2.54': 269 358 resolution: {integrity: sha512-OQQYl8yC5j3QklZOYnK31QYe5h47IhyCoxSLd53f0e0nA4dgi8VOZS30SgSAbsecQ+S0xlGJMjXIHTIqZ+ML3w==} 270 359 ··· 276 365 277 366 '@napi-rs/wasm-runtime@1.0.7': 278 367 resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} 368 + 369 + '@nodelib/fs.scandir@2.1.5': 370 + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 371 + engines: {node: '>= 8'} 372 + 373 + '@nodelib/fs.stat@2.0.5': 374 + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 375 + engines: {node: '>= 8'} 376 + 377 + '@nodelib/fs.walk@1.2.8': 378 + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 379 + engines: {node: '>= 8'} 279 380 280 381 '@oxc-project/runtime@0.92.0': 281 382 resolution: {integrity: sha512-Z7x2dZOmznihvdvCvLKMl+nswtOSVxS2H2ocar+U9xx6iMfTp0VGIrX6a4xB1v80IwOPC7dT1LXIJrY70Xu3Jw==} ··· 420 521 '@types/hast@3.0.4': 421 522 resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} 422 523 524 + '@types/json-schema@7.0.15': 525 + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 526 + 423 527 '@types/linkify-it@5.0.0': 424 528 resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} 425 529 ··· 438 542 '@types/web-bluetooth@0.0.21': 439 543 resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} 440 544 545 + '@typescript-eslint/eslint-plugin@8.46.1': 546 + resolution: {integrity: sha512-rUsLh8PXmBjdiPY+Emjz9NX2yHvhS11v0SR6xNJkm5GM1MO9ea/1GoDKlHHZGrOJclL/cZ2i/vRUYVtjRhrHVQ==} 547 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 548 + peerDependencies: 549 + '@typescript-eslint/parser': ^8.46.1 550 + eslint: ^8.57.0 || ^9.0.0 551 + typescript: '>=4.8.4 <6.0.0' 552 + 553 + '@typescript-eslint/parser@8.46.1': 554 + resolution: {integrity: sha512-6JSSaBZmsKvEkbRUkf7Zj7dru/8ZCrJxAqArcLaVMee5907JdtEbKGsZ7zNiIm/UAkpGUkaSMZEXShnN2D1HZA==} 555 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 556 + peerDependencies: 557 + eslint: ^8.57.0 || ^9.0.0 558 + typescript: '>=4.8.4 <6.0.0' 559 + 560 + '@typescript-eslint/project-service@8.46.1': 561 + resolution: {integrity: sha512-FOIaFVMHzRskXr5J4Jp8lFVV0gz5ngv3RHmn+E4HYxSJ3DgDzU7fVI1/M7Ijh1zf6S7HIoaIOtln1H5y8V+9Zg==} 562 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 563 + peerDependencies: 564 + typescript: '>=4.8.4 <6.0.0' 565 + 566 + '@typescript-eslint/scope-manager@8.46.1': 567 + resolution: {integrity: sha512-weL9Gg3/5F0pVQKiF8eOXFZp8emqWzZsOJuWRUNtHT+UNV2xSJegmpCNQHy37aEQIbToTq7RHKhWvOsmbM680A==} 568 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 569 + 570 + '@typescript-eslint/tsconfig-utils@8.46.1': 571 + resolution: {integrity: sha512-X88+J/CwFvlJB+mK09VFqx5FE4H5cXD+H/Bdza2aEWkSb8hnWIQorNcscRl4IEo1Cz9VI/+/r/jnGWkbWPx54g==} 572 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 573 + peerDependencies: 574 + typescript: '>=4.8.4 <6.0.0' 575 + 576 + '@typescript-eslint/type-utils@8.46.1': 577 + resolution: {integrity: sha512-+BlmiHIiqufBxkVnOtFwjah/vrkF4MtKKvpXrKSPLCkCtAp8H01/VV43sfqA98Od7nJpDcFnkwgyfQbOG0AMvw==} 578 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 579 + peerDependencies: 580 + eslint: ^8.57.0 || ^9.0.0 581 + typescript: '>=4.8.4 <6.0.0' 582 + 583 + '@typescript-eslint/types@8.46.1': 584 + resolution: {integrity: sha512-C+soprGBHwWBdkDpbaRC4paGBrkIXxVlNohadL5o0kfhsXqOC6GYH2S/Obmig+I0HTDl8wMaRySwrfrXVP8/pQ==} 585 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 586 + 587 + '@typescript-eslint/typescript-estree@8.46.1': 588 + resolution: {integrity: sha512-uIifjT4s8cQKFQ8ZBXXyoUODtRoAd7F7+G8MKmtzj17+1UbdzFl52AzRyZRyKqPHhgzvXunnSckVu36flGy8cg==} 589 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 590 + peerDependencies: 591 + typescript: '>=4.8.4 <6.0.0' 592 + 593 + '@typescript-eslint/utils@8.46.1': 594 + resolution: {integrity: sha512-vkYUy6LdZS7q1v/Gxb2Zs7zziuXN0wxqsetJdeZdRe/f5dwJFglmuvZBfTUivCtjH725C1jWCDfpadadD95EDQ==} 595 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 596 + peerDependencies: 597 + eslint: ^8.57.0 || ^9.0.0 598 + typescript: '>=4.8.4 <6.0.0' 599 + 600 + '@typescript-eslint/visitor-keys@8.46.1': 601 + resolution: {integrity: sha512-ptkmIf2iDkNUjdeu2bQqhFPV1m6qTnFFjg7PPDjxKWaMaP0Z6I9l30Jr3g5QqbZGdw8YdYvLp+XnqnWWZOg/NA==} 602 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 603 + 441 604 '@ungap/structured-clone@1.3.0': 442 605 resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} 443 606 ··· 565 728 '@vueuse/shared@12.8.2': 566 729 resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==} 567 730 731 + acorn-jsx@5.3.2: 732 + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 733 + peerDependencies: 734 + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 735 + 736 + acorn@8.15.0: 737 + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} 738 + engines: {node: '>=0.4.0'} 739 + hasBin: true 740 + 568 741 agent-base@7.1.4: 569 742 resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} 570 743 engines: {node: '>= 14'} 571 744 745 + ajv@6.12.6: 746 + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 747 + 572 748 algoliasearch@5.40.1: 573 749 resolution: {integrity: sha512-iUNxcXUNg9085TJx0HJLjqtDE0r1RZ0GOGrt8KNQqQT5ugu8lZsHuMUYW/e0lHhq6xBvmktU9Bw4CXP9VQeKrg==} 574 750 engines: {node: '>= 14.0.0'} ··· 577 753 resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 578 754 engines: {node: '>=8'} 579 755 756 + ansi-styles@4.3.0: 757 + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 758 + engines: {node: '>=8'} 759 + 580 760 ansi-styles@5.2.0: 581 761 resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 582 762 engines: {node: '>=10'} ··· 585 765 resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} 586 766 engines: {node: '>=14'} 587 767 768 + argparse@2.0.1: 769 + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 770 + 588 771 aria-query@5.3.0: 589 772 resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} 590 773 ··· 596 779 resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 597 780 engines: {node: '>=12'} 598 781 782 + balanced-match@1.0.2: 783 + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 784 + 785 + baseline-browser-mapping@2.8.17: 786 + resolution: {integrity: sha512-j5zJcx6golJYTG6c05LUZ3Z8Gi+M62zRT/ycz4Xq4iCOdpcxwg7ngEYD4KA0eWZC7U17qh/Smq8bYbACJ0ipBA==} 787 + hasBin: true 788 + 599 789 bidi-js@1.0.3: 600 790 resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} 601 791 602 792 birpc@2.6.1: 603 793 resolution: {integrity: sha512-LPnFhlDpdSH6FJhJyn4M0kFO7vtQ5iPw24FnG0y21q09xC7e8+1LeR31S1MAIrDAHp4m7aas4bEkTDTvMAtebQ==} 604 794 795 + brace-expansion@1.1.12: 796 + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} 797 + 798 + brace-expansion@2.0.2: 799 + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} 800 + 801 + braces@3.0.3: 802 + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 803 + engines: {node: '>=8'} 804 + 805 + browserslist@4.26.3: 806 + resolution: {integrity: sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==} 807 + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 808 + hasBin: true 809 + 810 + builtin-modules@5.0.0: 811 + resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==} 812 + engines: {node: '>=18.20'} 813 + 605 814 cac@6.7.14: 606 815 resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 607 816 engines: {node: '>=8'} 608 817 818 + callsites@3.1.0: 819 + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 820 + engines: {node: '>=6'} 821 + 822 + caniuse-lite@1.0.30001751: 823 + resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==} 824 + 609 825 ccount@2.0.1: 610 826 resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} 611 827 ··· 613 829 resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} 614 830 engines: {node: '>=18'} 615 831 832 + chalk@4.1.2: 833 + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 834 + engines: {node: '>=10'} 835 + 836 + change-case@5.4.4: 837 + resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} 838 + 616 839 character-entities-html4@2.1.0: 617 840 resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} 618 841 ··· 623 846 resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} 624 847 engines: {node: '>= 16'} 625 848 849 + ci-info@4.3.1: 850 + resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} 851 + engines: {node: '>=8'} 852 + 853 + clean-regexp@1.0.0: 854 + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} 855 + engines: {node: '>=4'} 856 + 857 + color-convert@2.0.1: 858 + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 859 + engines: {node: '>=7.0.0'} 860 + 861 + color-name@1.1.4: 862 + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 863 + 626 864 comma-separated-tokens@2.0.3: 627 865 resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} 628 866 867 + concat-map@0.0.1: 868 + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 869 + 629 870 copy-anything@3.0.5: 630 871 resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} 631 872 engines: {node: '>=12.13'} 632 873 874 + core-js-compat@3.46.0: 875 + resolution: {integrity: sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==} 876 + 877 + cross-spawn@7.0.6: 878 + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 879 + engines: {node: '>= 8'} 880 + 633 881 css-tree@3.1.0: 634 882 resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} 635 883 engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} ··· 664 912 resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 665 913 engines: {node: '>=6'} 666 914 915 + deep-is@0.1.4: 916 + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 917 + 667 918 dequal@2.0.3: 668 919 resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 669 920 engines: {node: '>=6'} ··· 685 936 resolution: {integrity: sha512-+0Fzg+17jsMMUouK00/Fara5YtGOuE76EAJINHB8VpkXHd0n00rMXtw/03qorOgz23eo8Y0UpYvNZBJJo3aNtw==} 686 937 hasBin: true 687 938 939 + electron-to-chromium@1.5.237: 940 + resolution: {integrity: sha512-icUt1NvfhGLar5lSWH3tHNzablaA5js3HVHacQimfP8ViEBOQv+L7DKEuHdbTZ0SKCO1ogTJTIL1Gwk9S6Qvcg==} 941 + 688 942 emoji-regex-xs@1.0.0: 689 943 resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} 690 944 ··· 699 953 es-module-lexer@1.7.0: 700 954 resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} 701 955 956 + escalade@3.2.0: 957 + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 958 + engines: {node: '>=6'} 959 + 960 + escape-string-regexp@1.0.5: 961 + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 962 + engines: {node: '>=0.8.0'} 963 + 964 + escape-string-regexp@4.0.0: 965 + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 966 + engines: {node: '>=10'} 967 + 968 + eslint-plugin-unicorn@61.0.2: 969 + resolution: {integrity: sha512-zLihukvneYT7f74GNbVJXfWIiNQmkc/a9vYBTE4qPkQZswolWNdu+Wsp9sIXno1JOzdn6OUwLPd19ekXVkahRA==} 970 + engines: {node: ^20.10.0 || >=21.0.0} 971 + peerDependencies: 972 + eslint: '>=9.29.0' 973 + 974 + eslint-scope@8.4.0: 975 + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} 976 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 977 + 978 + eslint-visitor-keys@3.4.3: 979 + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 980 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 981 + 982 + eslint-visitor-keys@4.2.1: 983 + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} 984 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 985 + 986 + eslint@9.38.0: 987 + resolution: {integrity: sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==} 988 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 989 + hasBin: true 990 + peerDependencies: 991 + jiti: '*' 992 + peerDependenciesMeta: 993 + jiti: 994 + optional: true 995 + 996 + espree@10.4.0: 997 + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} 998 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 999 + 1000 + esquery@1.6.0: 1001 + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 1002 + engines: {node: '>=0.10'} 1003 + 1004 + esrecurse@4.3.0: 1005 + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1006 + engines: {node: '>=4.0'} 1007 + 1008 + estraverse@5.3.0: 1009 + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1010 + engines: {node: '>=4.0'} 1011 + 702 1012 estree-walker@2.0.2: 703 1013 resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 704 1014 705 1015 estree-walker@3.0.3: 706 1016 resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 1017 + 1018 + esutils@2.0.3: 1019 + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1020 + engines: {node: '>=0.10.0'} 707 1021 708 1022 expect-type@1.2.2: 709 1023 resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} 710 1024 engines: {node: '>=12.0.0'} 711 1025 1026 + fast-deep-equal@3.1.3: 1027 + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1028 + 1029 + fast-glob@3.3.3: 1030 + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 1031 + engines: {node: '>=8.6.0'} 1032 + 1033 + fast-json-stable-stringify@2.1.0: 1034 + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1035 + 1036 + fast-levenshtein@2.0.6: 1037 + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1038 + 1039 + fastq@1.19.1: 1040 + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 1041 + 712 1042 fdir@6.5.0: 713 1043 resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 714 1044 engines: {node: '>=12.0.0'} ··· 718 1048 picomatch: 719 1049 optional: true 720 1050 1051 + file-entry-cache@8.0.0: 1052 + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 1053 + engines: {node: '>=16.0.0'} 1054 + 1055 + fill-range@7.1.1: 1056 + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 1057 + engines: {node: '>=8'} 1058 + 1059 + find-up-simple@1.0.1: 1060 + resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} 1061 + engines: {node: '>=18'} 1062 + 1063 + find-up@5.0.0: 1064 + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1065 + engines: {node: '>=10'} 1066 + 1067 + flat-cache@4.0.1: 1068 + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 1069 + engines: {node: '>=16'} 1070 + 1071 + flatted@3.3.3: 1072 + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 1073 + 721 1074 focus-trap@7.6.5: 722 1075 resolution: {integrity: sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg==} 723 1076 ··· 726 1079 engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 727 1080 os: [darwin] 728 1081 1082 + glob-parent@5.1.2: 1083 + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1084 + engines: {node: '>= 6'} 1085 + 1086 + glob-parent@6.0.2: 1087 + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1088 + engines: {node: '>=10.13.0'} 1089 + 1090 + globals@14.0.0: 1091 + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 1092 + engines: {node: '>=18'} 1093 + 1094 + globals@16.4.0: 1095 + resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} 1096 + engines: {node: '>=18'} 1097 + 1098 + graphemer@1.4.0: 1099 + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1100 + 1101 + has-flag@4.0.0: 1102 + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1103 + engines: {node: '>=8'} 1104 + 729 1105 hast-util-to-html@9.0.5: 730 1106 resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} 731 1107 ··· 754 1130 resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} 755 1131 engines: {node: '>=0.10.0'} 756 1132 1133 + ignore@5.3.2: 1134 + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 1135 + engines: {node: '>= 4'} 1136 + 1137 + ignore@7.0.5: 1138 + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} 1139 + engines: {node: '>= 4'} 1140 + 1141 + import-fresh@3.3.1: 1142 + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 1143 + engines: {node: '>=6'} 1144 + 1145 + imurmurhash@0.1.4: 1146 + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1147 + engines: {node: '>=0.8.19'} 1148 + 757 1149 indent-string@4.0.0: 758 1150 resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} 759 1151 engines: {node: '>=8'} 1152 + 1153 + indent-string@5.0.0: 1154 + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} 1155 + engines: {node: '>=12'} 1156 + 1157 + is-builtin-module@5.0.0: 1158 + resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==} 1159 + engines: {node: '>=18.20'} 1160 + 1161 + is-extglob@2.1.1: 1162 + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1163 + engines: {node: '>=0.10.0'} 1164 + 1165 + is-glob@4.0.3: 1166 + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1167 + engines: {node: '>=0.10.0'} 1168 + 1169 + is-number@7.0.0: 1170 + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1171 + engines: {node: '>=0.12.0'} 760 1172 761 1173 is-potential-custom-element-name@1.0.1: 762 1174 resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} ··· 765 1177 resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} 766 1178 engines: {node: '>=12.13'} 767 1179 1180 + isexe@2.0.0: 1181 + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1182 + 768 1183 js-tokens@4.0.0: 769 1184 resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 770 1185 771 1186 js-tokens@9.0.1: 772 1187 resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} 773 1188 1189 + js-yaml@4.1.0: 1190 + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1191 + hasBin: true 1192 + 774 1193 jsdom@27.0.0: 775 1194 resolution: {integrity: sha512-lIHeR1qlIRrIN5VMccd8tI2Sgw6ieYXSVktcSHaNe3Z5nE/tcPQYQWOq00wxMvYOsz+73eAkNenVvmPC6bba9A==} 776 1195 engines: {node: '>=20'} ··· 779 1198 peerDependenciesMeta: 780 1199 canvas: 781 1200 optional: true 1201 + 1202 + jsesc@3.0.2: 1203 + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} 1204 + engines: {node: '>=6'} 1205 + hasBin: true 1206 + 1207 + jsesc@3.1.0: 1208 + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 1209 + engines: {node: '>=6'} 1210 + hasBin: true 1211 + 1212 + json-buffer@3.0.1: 1213 + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1214 + 1215 + json-schema-traverse@0.4.1: 1216 + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1217 + 1218 + json-stable-stringify-without-jsonify@1.0.1: 1219 + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1220 + 1221 + keyv@4.5.4: 1222 + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1223 + 1224 + levn@0.4.1: 1225 + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1226 + engines: {node: '>= 0.8.0'} 782 1227 783 1228 lightningcss-android-arm64@1.30.2: 784 1229 resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} ··· 850 1295 resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} 851 1296 engines: {node: '>= 12.0.0'} 852 1297 1298 + locate-path@6.0.0: 1299 + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1300 + engines: {node: '>=10'} 1301 + 1302 + lodash.merge@4.6.2: 1303 + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1304 + 853 1305 loupe@3.2.1: 854 1306 resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} 855 1307 ··· 873 1325 mdn-data@2.12.2: 874 1326 resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} 875 1327 1328 + merge2@1.4.1: 1329 + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1330 + engines: {node: '>= 8'} 1331 + 876 1332 micromark-util-character@2.1.1: 877 1333 resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} 878 1334 ··· 888 1344 micromark-util-types@2.0.2: 889 1345 resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} 890 1346 1347 + micromatch@4.0.8: 1348 + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1349 + engines: {node: '>=8.6'} 1350 + 891 1351 min-indent@1.0.1: 892 1352 resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 893 1353 engines: {node: '>=4'} 1354 + 1355 + minimatch@3.1.2: 1356 + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1357 + 1358 + minimatch@9.0.5: 1359 + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1360 + engines: {node: '>=16 || 14 >=14.17'} 894 1361 895 1362 minisearch@7.2.0: 896 1363 resolution: {integrity: sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==} ··· 906 1373 engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 907 1374 hasBin: true 908 1375 1376 + natural-compare@1.4.0: 1377 + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1378 + 1379 + node-releases@2.0.25: 1380 + resolution: {integrity: sha512-4auku8B/vw5psvTiiN9j1dAOsXvMoGqJuKJcR+dTdqiXEK20mMTk1UEo3HS16LeGQsVG6+qKTPM9u/qQ2LqATA==} 1381 + 909 1382 oniguruma-to-es@3.1.1: 910 1383 resolution: {integrity: sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==} 911 1384 1385 + optionator@0.9.4: 1386 + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1387 + engines: {node: '>= 0.8.0'} 1388 + 1389 + p-limit@3.1.0: 1390 + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1391 + engines: {node: '>=10'} 1392 + 1393 + p-locate@5.0.0: 1394 + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1395 + engines: {node: '>=10'} 1396 + 1397 + parent-module@1.0.1: 1398 + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1399 + engines: {node: '>=6'} 1400 + 912 1401 parse5@7.3.0: 913 1402 resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} 1403 + 1404 + path-exists@4.0.0: 1405 + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1406 + engines: {node: '>=8'} 1407 + 1408 + path-key@3.1.1: 1409 + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1410 + engines: {node: '>=8'} 914 1411 915 1412 pathe@2.0.3: 916 1413 resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} ··· 925 1422 picocolors@1.1.1: 926 1423 resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 927 1424 1425 + picomatch@2.3.1: 1426 + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1427 + engines: {node: '>=8.6'} 1428 + 928 1429 picomatch@4.0.3: 929 1430 resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 930 1431 engines: {node: '>=12'} 931 1432 1433 + pluralize@8.0.0: 1434 + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} 1435 + engines: {node: '>=4'} 1436 + 932 1437 postcss@8.5.6: 933 1438 resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 934 1439 engines: {node: ^10 || ^12 || >=14} ··· 936 1441 preact@10.27.2: 937 1442 resolution: {integrity: sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==} 938 1443 1444 + prelude-ls@1.2.1: 1445 + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1446 + engines: {node: '>= 0.8.0'} 1447 + 939 1448 pretty-format@27.5.1: 940 1449 resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} 941 1450 engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} ··· 947 1456 resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 948 1457 engines: {node: '>=6'} 949 1458 1459 + queue-microtask@1.2.3: 1460 + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1461 + 950 1462 react-is@17.0.2: 951 1463 resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} 952 1464 ··· 963 1475 regex@6.0.1: 964 1476 resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} 965 1477 1478 + regexp-tree@0.1.27: 1479 + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} 1480 + hasBin: true 1481 + 1482 + regjsparser@0.12.0: 1483 + resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} 1484 + hasBin: true 1485 + 966 1486 require-from-string@2.0.2: 967 1487 resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} 968 1488 engines: {node: '>=0.10.0'} 969 1489 1490 + resolve-from@4.0.0: 1491 + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1492 + engines: {node: '>=4'} 1493 + 1494 + reusify@1.1.0: 1495 + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} 1496 + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1497 + 970 1498 rfdc@1.4.1: 971 1499 resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} 972 1500 ··· 1018 1546 rrweb-cssom@0.8.0: 1019 1547 resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} 1020 1548 1549 + run-parallel@1.2.0: 1550 + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1551 + 1021 1552 safer-buffer@2.1.2: 1022 1553 resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1023 1554 ··· 1028 1559 search-insights@2.17.3: 1029 1560 resolution: {integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==} 1030 1561 1562 + semver@7.7.3: 1563 + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} 1564 + engines: {node: '>=10'} 1565 + hasBin: true 1566 + 1567 + shebang-command@2.0.0: 1568 + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1569 + engines: {node: '>=8'} 1570 + 1571 + shebang-regex@3.0.0: 1572 + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1573 + engines: {node: '>=8'} 1574 + 1031 1575 shiki@2.5.0: 1032 1576 resolution: {integrity: sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==} 1033 1577 ··· 1058 1602 resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 1059 1603 engines: {node: '>=8'} 1060 1604 1605 + strip-indent@4.1.1: 1606 + resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==} 1607 + engines: {node: '>=12'} 1608 + 1609 + strip-json-comments@3.1.1: 1610 + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1611 + engines: {node: '>=8'} 1612 + 1061 1613 strip-literal@3.1.0: 1062 1614 resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} 1063 1615 ··· 1065 1617 resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==} 1066 1618 engines: {node: '>=16'} 1067 1619 1620 + supports-color@7.2.0: 1621 + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1622 + engines: {node: '>=8'} 1623 + 1068 1624 symbol-tree@3.2.4: 1069 1625 resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} 1070 1626 ··· 1100 1656 resolution: {integrity: sha512-Y1KQBgDd/NUc+LfOtKS6mNsC9CCaH+m2P1RoIZy7RAPo3C3/t8X45+zgut31cRZtZ3xKPjfn3TkGTrctC2TQIQ==} 1101 1657 hasBin: true 1102 1658 1659 + to-regex-range@5.0.1: 1660 + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1661 + engines: {node: '>=8.0'} 1662 + 1103 1663 tough-cookie@6.0.0: 1104 1664 resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} 1105 1665 engines: {node: '>=16'} ··· 1111 1671 trim-lines@3.0.1: 1112 1672 resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} 1113 1673 1674 + ts-api-utils@2.1.0: 1675 + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} 1676 + engines: {node: '>=18.12'} 1677 + peerDependencies: 1678 + typescript: '>=4.8.4' 1679 + 1114 1680 tslib@2.8.1: 1115 1681 resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1682 + 1683 + type-check@0.4.0: 1684 + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1685 + engines: {node: '>= 0.8.0'} 1686 + 1687 + typescript-eslint@8.46.1: 1688 + resolution: {integrity: sha512-VHgijW803JafdSsDO8I761r3SHrgk4T00IdyQ+/UsthtgPRsBWQLqoSxOolxTpxRKi1kGXK0bSz4CoAc9ObqJA==} 1689 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1690 + peerDependencies: 1691 + eslint: ^8.57.0 || ^9.0.0 1692 + typescript: '>=4.8.4 <6.0.0' 1116 1693 1117 1694 typescript@5.9.3: 1118 1695 resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} ··· 1134 1711 unist-util-visit@5.0.0: 1135 1712 resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} 1136 1713 1714 + update-browserslist-db@1.1.3: 1715 + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} 1716 + hasBin: true 1717 + peerDependencies: 1718 + browserslist: '>= 4.21.0' 1719 + 1720 + uri-js@4.4.1: 1721 + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1722 + 1137 1723 vfile-message@4.0.3: 1138 1724 resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} 1139 1725 ··· 1213 1799 resolution: {integrity: sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==} 1214 1800 engines: {node: '>=20'} 1215 1801 1802 + which@2.0.2: 1803 + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1804 + engines: {node: '>= 8'} 1805 + hasBin: true 1806 + 1216 1807 why-is-node-running@2.3.0: 1217 1808 resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 1218 1809 engines: {node: '>=8'} 1219 1810 hasBin: true 1811 + 1812 + word-wrap@1.2.5: 1813 + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1814 + engines: {node: '>=0.10.0'} 1220 1815 1221 1816 ws@8.18.3: 1222 1817 resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} ··· 1236 1831 1237 1832 xmlchars@2.2.0: 1238 1833 resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} 1834 + 1835 + yocto-queue@0.1.0: 1836 + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1837 + engines: {node: '>=10'} 1239 1838 1240 1839 zwitch@2.0.4: 1241 1840 resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} ··· 1486 2085 tslib: 2.8.1 1487 2086 optional: true 1488 2087 2088 + '@eslint-community/eslint-utils@4.9.0(eslint@9.38.0)': 2089 + dependencies: 2090 + eslint: 9.38.0 2091 + eslint-visitor-keys: 3.4.3 2092 + 2093 + '@eslint-community/regexpp@4.12.1': {} 2094 + 2095 + '@eslint/compat@1.4.0(eslint@9.38.0)': 2096 + dependencies: 2097 + '@eslint/core': 0.16.0 2098 + optionalDependencies: 2099 + eslint: 9.38.0 2100 + 2101 + '@eslint/config-array@0.21.1': 2102 + dependencies: 2103 + '@eslint/object-schema': 2.1.7 2104 + debug: 4.4.3 2105 + minimatch: 3.1.2 2106 + transitivePeerDependencies: 2107 + - supports-color 2108 + 2109 + '@eslint/config-helpers@0.4.1': 2110 + dependencies: 2111 + '@eslint/core': 0.16.0 2112 + 2113 + '@eslint/core@0.15.2': 2114 + dependencies: 2115 + '@types/json-schema': 7.0.15 2116 + 2117 + '@eslint/core@0.16.0': 2118 + dependencies: 2119 + '@types/json-schema': 7.0.15 2120 + 2121 + '@eslint/eslintrc@3.3.1': 2122 + dependencies: 2123 + ajv: 6.12.6 2124 + debug: 4.4.3 2125 + espree: 10.4.0 2126 + globals: 14.0.0 2127 + ignore: 5.3.2 2128 + import-fresh: 3.3.1 2129 + js-yaml: 4.1.0 2130 + minimatch: 3.1.2 2131 + strip-json-comments: 3.1.1 2132 + transitivePeerDependencies: 2133 + - supports-color 2134 + 2135 + '@eslint/js@9.38.0': {} 2136 + 2137 + '@eslint/object-schema@2.1.7': {} 2138 + 2139 + '@eslint/plugin-kit@0.3.5': 2140 + dependencies: 2141 + '@eslint/core': 0.15.2 2142 + levn: 0.4.1 2143 + 2144 + '@eslint/plugin-kit@0.4.0': 2145 + dependencies: 2146 + '@eslint/core': 0.16.0 2147 + levn: 0.4.1 2148 + 2149 + '@humanfs/core@0.19.1': {} 2150 + 2151 + '@humanfs/node@0.16.7': 2152 + dependencies: 2153 + '@humanfs/core': 0.19.1 2154 + '@humanwhocodes/retry': 0.4.3 2155 + 2156 + '@humanwhocodes/module-importer@1.0.1': {} 2157 + 2158 + '@humanwhocodes/retry@0.4.3': {} 2159 + 1489 2160 '@iconify-json/simple-icons@1.2.54': 1490 2161 dependencies: 1491 2162 '@iconify/types': 2.0.0 ··· 1501 2172 '@tybys/wasm-util': 0.10.1 1502 2173 optional: true 1503 2174 2175 + '@nodelib/fs.scandir@2.1.5': 2176 + dependencies: 2177 + '@nodelib/fs.stat': 2.0.5 2178 + run-parallel: 1.2.0 2179 + 2180 + '@nodelib/fs.stat@2.0.5': {} 2181 + 2182 + '@nodelib/fs.walk@1.2.8': 2183 + dependencies: 2184 + '@nodelib/fs.scandir': 2.1.5 2185 + fastq: 1.19.1 2186 + 1504 2187 '@oxc-project/runtime@0.92.0': {} 1505 2188 1506 2189 '@oxc-project/types@0.93.0': {} ··· 1630 2313 dependencies: 1631 2314 '@types/unist': 3.0.3 1632 2315 2316 + '@types/json-schema@7.0.15': {} 2317 + 1633 2318 '@types/linkify-it@5.0.0': {} 1634 2319 1635 2320 '@types/markdown-it@14.1.2': ··· 1647 2332 1648 2333 '@types/web-bluetooth@0.0.21': {} 1649 2334 2335 + '@typescript-eslint/eslint-plugin@8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0)(typescript@5.9.3))(eslint@9.38.0)(typescript@5.9.3)': 2336 + dependencies: 2337 + '@eslint-community/regexpp': 4.12.1 2338 + '@typescript-eslint/parser': 8.46.1(eslint@9.38.0)(typescript@5.9.3) 2339 + '@typescript-eslint/scope-manager': 8.46.1 2340 + '@typescript-eslint/type-utils': 8.46.1(eslint@9.38.0)(typescript@5.9.3) 2341 + '@typescript-eslint/utils': 8.46.1(eslint@9.38.0)(typescript@5.9.3) 2342 + '@typescript-eslint/visitor-keys': 8.46.1 2343 + eslint: 9.38.0 2344 + graphemer: 1.4.0 2345 + ignore: 7.0.5 2346 + natural-compare: 1.4.0 2347 + ts-api-utils: 2.1.0(typescript@5.9.3) 2348 + typescript: 5.9.3 2349 + transitivePeerDependencies: 2350 + - supports-color 2351 + 2352 + '@typescript-eslint/parser@8.46.1(eslint@9.38.0)(typescript@5.9.3)': 2353 + dependencies: 2354 + '@typescript-eslint/scope-manager': 8.46.1 2355 + '@typescript-eslint/types': 8.46.1 2356 + '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) 2357 + '@typescript-eslint/visitor-keys': 8.46.1 2358 + debug: 4.4.3 2359 + eslint: 9.38.0 2360 + typescript: 5.9.3 2361 + transitivePeerDependencies: 2362 + - supports-color 2363 + 2364 + '@typescript-eslint/project-service@8.46.1(typescript@5.9.3)': 2365 + dependencies: 2366 + '@typescript-eslint/tsconfig-utils': 8.46.1(typescript@5.9.3) 2367 + '@typescript-eslint/types': 8.46.1 2368 + debug: 4.4.3 2369 + typescript: 5.9.3 2370 + transitivePeerDependencies: 2371 + - supports-color 2372 + 2373 + '@typescript-eslint/scope-manager@8.46.1': 2374 + dependencies: 2375 + '@typescript-eslint/types': 8.46.1 2376 + '@typescript-eslint/visitor-keys': 8.46.1 2377 + 2378 + '@typescript-eslint/tsconfig-utils@8.46.1(typescript@5.9.3)': 2379 + dependencies: 2380 + typescript: 5.9.3 2381 + 2382 + '@typescript-eslint/type-utils@8.46.1(eslint@9.38.0)(typescript@5.9.3)': 2383 + dependencies: 2384 + '@typescript-eslint/types': 8.46.1 2385 + '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) 2386 + '@typescript-eslint/utils': 8.46.1(eslint@9.38.0)(typescript@5.9.3) 2387 + debug: 4.4.3 2388 + eslint: 9.38.0 2389 + ts-api-utils: 2.1.0(typescript@5.9.3) 2390 + typescript: 5.9.3 2391 + transitivePeerDependencies: 2392 + - supports-color 2393 + 2394 + '@typescript-eslint/types@8.46.1': {} 2395 + 2396 + '@typescript-eslint/typescript-estree@8.46.1(typescript@5.9.3)': 2397 + dependencies: 2398 + '@typescript-eslint/project-service': 8.46.1(typescript@5.9.3) 2399 + '@typescript-eslint/tsconfig-utils': 8.46.1(typescript@5.9.3) 2400 + '@typescript-eslint/types': 8.46.1 2401 + '@typescript-eslint/visitor-keys': 8.46.1 2402 + debug: 4.4.3 2403 + fast-glob: 3.3.3 2404 + is-glob: 4.0.3 2405 + minimatch: 9.0.5 2406 + semver: 7.7.3 2407 + ts-api-utils: 2.1.0(typescript@5.9.3) 2408 + typescript: 5.9.3 2409 + transitivePeerDependencies: 2410 + - supports-color 2411 + 2412 + '@typescript-eslint/utils@8.46.1(eslint@9.38.0)(typescript@5.9.3)': 2413 + dependencies: 2414 + '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0) 2415 + '@typescript-eslint/scope-manager': 8.46.1 2416 + '@typescript-eslint/types': 8.46.1 2417 + '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) 2418 + eslint: 9.38.0 2419 + typescript: 5.9.3 2420 + transitivePeerDependencies: 2421 + - supports-color 2422 + 2423 + '@typescript-eslint/visitor-keys@8.46.1': 2424 + dependencies: 2425 + '@typescript-eslint/types': 8.46.1 2426 + eslint-visitor-keys: 4.2.1 2427 + 1650 2428 '@ungap/structured-clone@1.3.0': {} 1651 2429 1652 2430 '@vitejs/plugin-vue@5.2.4(rolldown-vite@7.1.14)(vue@3.5.22(typescript@5.9.3))': ··· 1777 2555 transitivePeerDependencies: 1778 2556 - typescript 1779 2557 1780 - '@vueuse/integrations@12.8.2(focus-trap@7.6.5)(typescript@5.9.3)': 2558 + '@vueuse/integrations@12.8.2(change-case@5.4.4)(focus-trap@7.6.5)(typescript@5.9.3)': 1781 2559 dependencies: 1782 2560 '@vueuse/core': 12.8.2(typescript@5.9.3) 1783 2561 '@vueuse/shared': 12.8.2(typescript@5.9.3) 1784 2562 vue: 3.5.22(typescript@5.9.3) 1785 2563 optionalDependencies: 2564 + change-case: 5.4.4 1786 2565 focus-trap: 7.6.5 1787 2566 transitivePeerDependencies: 1788 2567 - typescript ··· 1795 2574 transitivePeerDependencies: 1796 2575 - typescript 1797 2576 2577 + acorn-jsx@5.3.2(acorn@8.15.0): 2578 + dependencies: 2579 + acorn: 8.15.0 2580 + 2581 + acorn@8.15.0: {} 2582 + 1798 2583 agent-base@7.1.4: {} 1799 2584 2585 + ajv@6.12.6: 2586 + dependencies: 2587 + fast-deep-equal: 3.1.3 2588 + fast-json-stable-stringify: 2.1.0 2589 + json-schema-traverse: 0.4.1 2590 + uri-js: 4.4.1 2591 + 1800 2592 algoliasearch@5.40.1: 1801 2593 dependencies: 1802 2594 '@algolia/abtesting': 1.6.1 ··· 1816 2608 1817 2609 ansi-regex@5.0.1: {} 1818 2610 2611 + ansi-styles@4.3.0: 2612 + dependencies: 2613 + color-convert: 2.0.1 2614 + 1819 2615 ansi-styles@5.2.0: {} 1820 2616 1821 2617 ansis@4.2.0: {} 2618 + 2619 + argparse@2.0.1: {} 1822 2620 1823 2621 aria-query@5.3.0: 1824 2622 dependencies: ··· 1828 2626 1829 2627 assertion-error@2.0.1: {} 1830 2628 2629 + balanced-match@1.0.2: {} 2630 + 2631 + baseline-browser-mapping@2.8.17: {} 2632 + 1831 2633 bidi-js@1.0.3: 1832 2634 dependencies: 1833 2635 require-from-string: 2.0.2 1834 2636 1835 2637 birpc@2.6.1: {} 1836 2638 2639 + brace-expansion@1.1.12: 2640 + dependencies: 2641 + balanced-match: 1.0.2 2642 + concat-map: 0.0.1 2643 + 2644 + brace-expansion@2.0.2: 2645 + dependencies: 2646 + balanced-match: 1.0.2 2647 + 2648 + braces@3.0.3: 2649 + dependencies: 2650 + fill-range: 7.1.1 2651 + 2652 + browserslist@4.26.3: 2653 + dependencies: 2654 + baseline-browser-mapping: 2.8.17 2655 + caniuse-lite: 1.0.30001751 2656 + electron-to-chromium: 1.5.237 2657 + node-releases: 2.0.25 2658 + update-browserslist-db: 1.1.3(browserslist@4.26.3) 2659 + 2660 + builtin-modules@5.0.0: {} 2661 + 1837 2662 cac@6.7.14: {} 2663 + 2664 + callsites@3.1.0: {} 2665 + 2666 + caniuse-lite@1.0.30001751: {} 1838 2667 1839 2668 ccount@2.0.1: {} 1840 2669 ··· 1846 2675 loupe: 3.2.1 1847 2676 pathval: 2.0.1 1848 2677 2678 + chalk@4.1.2: 2679 + dependencies: 2680 + ansi-styles: 4.3.0 2681 + supports-color: 7.2.0 2682 + 2683 + change-case@5.4.4: {} 2684 + 1849 2685 character-entities-html4@2.1.0: {} 1850 2686 1851 2687 character-entities-legacy@3.0.0: {} 1852 2688 1853 2689 check-error@2.1.1: {} 1854 2690 2691 + ci-info@4.3.1: {} 2692 + 2693 + clean-regexp@1.0.0: 2694 + dependencies: 2695 + escape-string-regexp: 1.0.5 2696 + 2697 + color-convert@2.0.1: 2698 + dependencies: 2699 + color-name: 1.1.4 2700 + 2701 + color-name@1.1.4: {} 2702 + 1855 2703 comma-separated-tokens@2.0.3: {} 1856 2704 2705 + concat-map@0.0.1: {} 2706 + 1857 2707 copy-anything@3.0.5: 1858 2708 dependencies: 1859 2709 is-what: 4.1.16 2710 + 2711 + core-js-compat@3.46.0: 2712 + dependencies: 2713 + browserslist: 4.26.3 2714 + 2715 + cross-spawn@7.0.6: 2716 + dependencies: 2717 + path-key: 3.1.1 2718 + shebang-command: 2.0.0 2719 + which: 2.0.2 1860 2720 1861 2721 css-tree@3.1.0: 1862 2722 dependencies: ··· 1888 2748 1889 2749 deep-eql@5.0.2: {} 1890 2750 2751 + deep-is@0.1.4: {} 2752 + 1891 2753 dequal@2.0.3: {} 1892 2754 1893 2755 detect-libc@2.1.2: {} ··· 1912 2774 '@dprint/win32-arm64': 0.50.2 1913 2775 '@dprint/win32-x64': 0.50.2 1914 2776 2777 + electron-to-chromium@1.5.237: {} 2778 + 1915 2779 emoji-regex-xs@1.0.0: {} 1916 2780 1917 2781 entities@4.5.0: {} ··· 1920 2784 1921 2785 es-module-lexer@1.7.0: {} 1922 2786 2787 + escalade@3.2.0: {} 2788 + 2789 + escape-string-regexp@1.0.5: {} 2790 + 2791 + escape-string-regexp@4.0.0: {} 2792 + 2793 + eslint-plugin-unicorn@61.0.2(eslint@9.38.0): 2794 + dependencies: 2795 + '@babel/helper-validator-identifier': 7.27.1 2796 + '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0) 2797 + '@eslint/plugin-kit': 0.3.5 2798 + change-case: 5.4.4 2799 + ci-info: 4.3.1 2800 + clean-regexp: 1.0.0 2801 + core-js-compat: 3.46.0 2802 + eslint: 9.38.0 2803 + esquery: 1.6.0 2804 + find-up-simple: 1.0.1 2805 + globals: 16.4.0 2806 + indent-string: 5.0.0 2807 + is-builtin-module: 5.0.0 2808 + jsesc: 3.1.0 2809 + pluralize: 8.0.0 2810 + regexp-tree: 0.1.27 2811 + regjsparser: 0.12.0 2812 + semver: 7.7.3 2813 + strip-indent: 4.1.1 2814 + 2815 + eslint-scope@8.4.0: 2816 + dependencies: 2817 + esrecurse: 4.3.0 2818 + estraverse: 5.3.0 2819 + 2820 + eslint-visitor-keys@3.4.3: {} 2821 + 2822 + eslint-visitor-keys@4.2.1: {} 2823 + 2824 + eslint@9.38.0: 2825 + dependencies: 2826 + '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0) 2827 + '@eslint-community/regexpp': 4.12.1 2828 + '@eslint/config-array': 0.21.1 2829 + '@eslint/config-helpers': 0.4.1 2830 + '@eslint/core': 0.16.0 2831 + '@eslint/eslintrc': 3.3.1 2832 + '@eslint/js': 9.38.0 2833 + '@eslint/plugin-kit': 0.4.0 2834 + '@humanfs/node': 0.16.7 2835 + '@humanwhocodes/module-importer': 1.0.1 2836 + '@humanwhocodes/retry': 0.4.3 2837 + '@types/estree': 1.0.8 2838 + ajv: 6.12.6 2839 + chalk: 4.1.2 2840 + cross-spawn: 7.0.6 2841 + debug: 4.4.3 2842 + escape-string-regexp: 4.0.0 2843 + eslint-scope: 8.4.0 2844 + eslint-visitor-keys: 4.2.1 2845 + espree: 10.4.0 2846 + esquery: 1.6.0 2847 + esutils: 2.0.3 2848 + fast-deep-equal: 3.1.3 2849 + file-entry-cache: 8.0.0 2850 + find-up: 5.0.0 2851 + glob-parent: 6.0.2 2852 + ignore: 5.3.2 2853 + imurmurhash: 0.1.4 2854 + is-glob: 4.0.3 2855 + json-stable-stringify-without-jsonify: 1.0.1 2856 + lodash.merge: 4.6.2 2857 + minimatch: 3.1.2 2858 + natural-compare: 1.4.0 2859 + optionator: 0.9.4 2860 + transitivePeerDependencies: 2861 + - supports-color 2862 + 2863 + espree@10.4.0: 2864 + dependencies: 2865 + acorn: 8.15.0 2866 + acorn-jsx: 5.3.2(acorn@8.15.0) 2867 + eslint-visitor-keys: 4.2.1 2868 + 2869 + esquery@1.6.0: 2870 + dependencies: 2871 + estraverse: 5.3.0 2872 + 2873 + esrecurse@4.3.0: 2874 + dependencies: 2875 + estraverse: 5.3.0 2876 + 2877 + estraverse@5.3.0: {} 2878 + 1923 2879 estree-walker@2.0.2: {} 1924 2880 1925 2881 estree-walker@3.0.3: 1926 2882 dependencies: 1927 2883 '@types/estree': 1.0.8 1928 2884 2885 + esutils@2.0.3: {} 2886 + 1929 2887 expect-type@1.2.2: {} 1930 2888 2889 + fast-deep-equal@3.1.3: {} 2890 + 2891 + fast-glob@3.3.3: 2892 + dependencies: 2893 + '@nodelib/fs.stat': 2.0.5 2894 + '@nodelib/fs.walk': 1.2.8 2895 + glob-parent: 5.1.2 2896 + merge2: 1.4.1 2897 + micromatch: 4.0.8 2898 + 2899 + fast-json-stable-stringify@2.1.0: {} 2900 + 2901 + fast-levenshtein@2.0.6: {} 2902 + 2903 + fastq@1.19.1: 2904 + dependencies: 2905 + reusify: 1.1.0 2906 + 1931 2907 fdir@6.5.0(picomatch@4.0.3): 1932 2908 optionalDependencies: 1933 2909 picomatch: 4.0.3 1934 2910 2911 + file-entry-cache@8.0.0: 2912 + dependencies: 2913 + flat-cache: 4.0.1 2914 + 2915 + fill-range@7.1.1: 2916 + dependencies: 2917 + to-regex-range: 5.0.1 2918 + 2919 + find-up-simple@1.0.1: {} 2920 + 2921 + find-up@5.0.0: 2922 + dependencies: 2923 + locate-path: 6.0.0 2924 + path-exists: 4.0.0 2925 + 2926 + flat-cache@4.0.1: 2927 + dependencies: 2928 + flatted: 3.3.3 2929 + keyv: 4.5.4 2930 + 2931 + flatted@3.3.3: {} 2932 + 1935 2933 focus-trap@7.6.5: 1936 2934 dependencies: 1937 2935 tabbable: 6.2.0 ··· 1939 2937 fsevents@2.3.3: 1940 2938 optional: true 1941 2939 2940 + glob-parent@5.1.2: 2941 + dependencies: 2942 + is-glob: 4.0.3 2943 + 2944 + glob-parent@6.0.2: 2945 + dependencies: 2946 + is-glob: 4.0.3 2947 + 2948 + globals@14.0.0: {} 2949 + 2950 + globals@16.4.0: {} 2951 + 2952 + graphemer@1.4.0: {} 2953 + 2954 + has-flag@4.0.0: {} 2955 + 1942 2956 hast-util-to-html@9.0.5: 1943 2957 dependencies: 1944 2958 '@types/hast': 3.0.4 ··· 1983 2997 dependencies: 1984 2998 safer-buffer: 2.1.2 1985 2999 3000 + ignore@5.3.2: {} 3001 + 3002 + ignore@7.0.5: {} 3003 + 3004 + import-fresh@3.3.1: 3005 + dependencies: 3006 + parent-module: 1.0.1 3007 + resolve-from: 4.0.0 3008 + 3009 + imurmurhash@0.1.4: {} 3010 + 1986 3011 indent-string@4.0.0: {} 1987 3012 3013 + indent-string@5.0.0: {} 3014 + 3015 + is-builtin-module@5.0.0: 3016 + dependencies: 3017 + builtin-modules: 5.0.0 3018 + 3019 + is-extglob@2.1.1: {} 3020 + 3021 + is-glob@4.0.3: 3022 + dependencies: 3023 + is-extglob: 2.1.1 3024 + 3025 + is-number@7.0.0: {} 3026 + 1988 3027 is-potential-custom-element-name@1.0.1: {} 1989 3028 1990 3029 is-what@4.1.16: {} 3030 + 3031 + isexe@2.0.0: {} 1991 3032 1992 3033 js-tokens@4.0.0: {} 1993 3034 1994 3035 js-tokens@9.0.1: {} 3036 + 3037 + js-yaml@4.1.0: 3038 + dependencies: 3039 + argparse: 2.0.1 1995 3040 1996 3041 jsdom@27.0.0(postcss@8.5.6): 1997 3042 dependencies: ··· 2021 3066 - supports-color 2022 3067 - utf-8-validate 2023 3068 3069 + jsesc@3.0.2: {} 3070 + 3071 + jsesc@3.1.0: {} 3072 + 3073 + json-buffer@3.0.1: {} 3074 + 3075 + json-schema-traverse@0.4.1: {} 3076 + 3077 + json-stable-stringify-without-jsonify@1.0.1: {} 3078 + 3079 + keyv@4.5.4: 3080 + dependencies: 3081 + json-buffer: 3.0.1 3082 + 3083 + levn@0.4.1: 3084 + dependencies: 3085 + prelude-ls: 1.2.1 3086 + type-check: 0.4.0 3087 + 2024 3088 lightningcss-android-arm64@1.30.2: 2025 3089 optional: true 2026 3090 ··· 2070 3134 lightningcss-win32-arm64-msvc: 1.30.2 2071 3135 lightningcss-win32-x64-msvc: 1.30.2 2072 3136 3137 + locate-path@6.0.0: 3138 + dependencies: 3139 + p-locate: 5.0.0 3140 + 3141 + lodash.merge@4.6.2: {} 3142 + 2073 3143 loupe@3.2.1: {} 2074 3144 2075 3145 lru-cache@11.2.2: {} ··· 2096 3166 2097 3167 mdn-data@2.12.2: {} 2098 3168 3169 + merge2@1.4.1: {} 3170 + 2099 3171 micromark-util-character@2.1.1: 2100 3172 dependencies: 2101 3173 micromark-util-symbol: 2.0.1 ··· 2113 3185 2114 3186 micromark-util-types@2.0.2: {} 2115 3187 3188 + micromatch@4.0.8: 3189 + dependencies: 3190 + braces: 3.0.3 3191 + picomatch: 2.3.1 3192 + 2116 3193 min-indent@1.0.1: {} 3194 + 3195 + minimatch@3.1.2: 3196 + dependencies: 3197 + brace-expansion: 1.1.12 3198 + 3199 + minimatch@9.0.5: 3200 + dependencies: 3201 + brace-expansion: 2.0.2 2117 3202 2118 3203 minisearch@7.2.0: {} 2119 3204 ··· 2123 3208 2124 3209 nanoid@3.3.11: {} 2125 3210 3211 + natural-compare@1.4.0: {} 3212 + 3213 + node-releases@2.0.25: {} 3214 + 2126 3215 oniguruma-to-es@3.1.1: 2127 3216 dependencies: 2128 3217 emoji-regex-xs: 1.0.0 2129 3218 regex: 6.0.1 2130 3219 regex-recursion: 6.0.2 2131 3220 3221 + optionator@0.9.4: 3222 + dependencies: 3223 + deep-is: 0.1.4 3224 + fast-levenshtein: 2.0.6 3225 + levn: 0.4.1 3226 + prelude-ls: 1.2.1 3227 + type-check: 0.4.0 3228 + word-wrap: 1.2.5 3229 + 3230 + p-limit@3.1.0: 3231 + dependencies: 3232 + yocto-queue: 0.1.0 3233 + 3234 + p-locate@5.0.0: 3235 + dependencies: 3236 + p-limit: 3.1.0 3237 + 3238 + parent-module@1.0.1: 3239 + dependencies: 3240 + callsites: 3.1.0 3241 + 2132 3242 parse5@7.3.0: 2133 3243 dependencies: 2134 3244 entities: 6.0.1 2135 3245 3246 + path-exists@4.0.0: {} 3247 + 3248 + path-key@3.1.1: {} 3249 + 2136 3250 pathe@2.0.3: {} 2137 3251 2138 3252 pathval@2.0.1: {} ··· 2141 3255 2142 3256 picocolors@1.1.1: {} 2143 3257 3258 + picomatch@2.3.1: {} 3259 + 2144 3260 picomatch@4.0.3: {} 3261 + 3262 + pluralize@8.0.0: {} 2145 3263 2146 3264 postcss@8.5.6: 2147 3265 dependencies: ··· 2151 3269 2152 3270 preact@10.27.2: {} 2153 3271 3272 + prelude-ls@1.2.1: {} 3273 + 2154 3274 pretty-format@27.5.1: 2155 3275 dependencies: 2156 3276 ansi-regex: 5.0.1 ··· 2160 3280 property-information@7.1.0: {} 2161 3281 2162 3282 punycode@2.3.1: {} 3283 + 3284 + queue-microtask@1.2.3: {} 2163 3285 2164 3286 react-is@17.0.2: {} 2165 3287 ··· 2178 3300 dependencies: 2179 3301 regex-utilities: 2.3.0 2180 3302 3303 + regexp-tree@0.1.27: {} 3304 + 3305 + regjsparser@0.12.0: 3306 + dependencies: 3307 + jsesc: 3.0.2 3308 + 2181 3309 require-from-string@2.0.2: {} 3310 + 3311 + resolve-from@4.0.0: {} 3312 + 3313 + reusify@1.1.0: {} 2182 3314 2183 3315 rfdc@1.4.1: {} 2184 3316 ··· 2217 3349 2218 3350 rrweb-cssom@0.8.0: {} 2219 3351 3352 + run-parallel@1.2.0: 3353 + dependencies: 3354 + queue-microtask: 1.2.3 3355 + 2220 3356 safer-buffer@2.1.2: {} 2221 3357 2222 3358 saxes@6.0.0: ··· 2225 3361 2226 3362 search-insights@2.17.3: {} 2227 3363 3364 + semver@7.7.3: {} 3365 + 3366 + shebang-command@2.0.0: 3367 + dependencies: 3368 + shebang-regex: 3.0.0 3369 + 3370 + shebang-regex@3.0.0: {} 3371 + 2228 3372 shiki@2.5.0: 2229 3373 dependencies: 2230 3374 '@shikijs/core': 2.5.0 ··· 2257 3401 dependencies: 2258 3402 min-indent: 1.0.1 2259 3403 3404 + strip-indent@4.1.1: {} 3405 + 3406 + strip-json-comments@3.1.1: {} 3407 + 2260 3408 strip-literal@3.1.0: 2261 3409 dependencies: 2262 3410 js-tokens: 9.0.1 ··· 2265 3413 dependencies: 2266 3414 copy-anything: 3.0.5 2267 3415 3416 + supports-color@7.2.0: 3417 + dependencies: 3418 + has-flag: 4.0.0 3419 + 2268 3420 symbol-tree@3.2.4: {} 2269 3421 2270 3422 tabbable@6.2.0: {} ··· 2290 3442 dependencies: 2291 3443 tldts-core: 7.0.17 2292 3444 3445 + to-regex-range@5.0.1: 3446 + dependencies: 3447 + is-number: 7.0.0 3448 + 2293 3449 tough-cookie@6.0.0: 2294 3450 dependencies: 2295 3451 tldts: 7.0.17 ··· 2299 3455 punycode: 2.3.1 2300 3456 2301 3457 trim-lines@3.0.1: {} 3458 + 3459 + ts-api-utils@2.1.0(typescript@5.9.3): 3460 + dependencies: 3461 + typescript: 5.9.3 2302 3462 2303 3463 tslib@2.8.1: 2304 3464 optional: true 2305 3465 3466 + type-check@0.4.0: 3467 + dependencies: 3468 + prelude-ls: 1.2.1 3469 + 3470 + typescript-eslint@8.46.1(eslint@9.38.0)(typescript@5.9.3): 3471 + dependencies: 3472 + '@typescript-eslint/eslint-plugin': 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0)(typescript@5.9.3))(eslint@9.38.0)(typescript@5.9.3) 3473 + '@typescript-eslint/parser': 8.46.1(eslint@9.38.0)(typescript@5.9.3) 3474 + '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) 3475 + '@typescript-eslint/utils': 8.46.1(eslint@9.38.0)(typescript@5.9.3) 3476 + eslint: 9.38.0 3477 + typescript: 5.9.3 3478 + transitivePeerDependencies: 3479 + - supports-color 3480 + 2306 3481 typescript@5.9.3: {} 2307 3482 2308 3483 unist-util-is@6.0.1: ··· 2328 3503 unist-util-is: 6.0.1 2329 3504 unist-util-visit-parents: 6.0.2 2330 3505 3506 + update-browserslist-db@1.1.3(browserslist@4.26.3): 3507 + dependencies: 3508 + browserslist: 4.26.3 3509 + escalade: 3.2.0 3510 + picocolors: 1.1.1 3511 + 3512 + uri-js@4.4.1: 3513 + dependencies: 3514 + punycode: 2.3.1 3515 + 2331 3516 vfile-message@4.0.3: 2332 3517 dependencies: 2333 3518 '@types/unist': 3.0.3 ··· 2359 3544 - tsx 2360 3545 - yaml 2361 3546 2362 - vitepress@1.6.4(@algolia/client-search@5.40.1)(postcss@8.5.6)(search-insights@2.17.3)(typescript@5.9.3): 3547 + vitepress@1.6.4(@algolia/client-search@5.40.1)(change-case@5.4.4)(postcss@8.5.6)(search-insights@2.17.3)(typescript@5.9.3): 2363 3548 dependencies: 2364 3549 '@docsearch/css': 3.8.2 2365 3550 '@docsearch/js': 3.8.2(@algolia/client-search@5.40.1)(search-insights@2.17.3) ··· 2372 3557 '@vue/devtools-api': 7.7.7 2373 3558 '@vue/shared': 3.5.22 2374 3559 '@vueuse/core': 12.8.2(typescript@5.9.3) 2375 - '@vueuse/integrations': 12.8.2(focus-trap@7.6.5)(typescript@5.9.3) 3560 + '@vueuse/integrations': 12.8.2(change-case@5.4.4)(focus-trap@7.6.5)(typescript@5.9.3) 2376 3561 focus-trap: 7.6.5 2377 3562 mark.js: 8.11.1 2378 3563 minisearch: 7.2.0 ··· 2479 3664 tr46: 6.0.0 2480 3665 webidl-conversions: 8.0.0 2481 3666 3667 + which@2.0.2: 3668 + dependencies: 3669 + isexe: 2.0.0 3670 + 2482 3671 why-is-node-running@2.3.0: 2483 3672 dependencies: 2484 3673 siginfo: 2.0.0 2485 3674 stackback: 0.0.2 2486 3675 3676 + word-wrap@1.2.5: {} 3677 + 2487 3678 ws@8.18.3: {} 2488 3679 2489 3680 xml-name-validator@5.0.0: {} 2490 3681 2491 3682 xmlchars@2.2.0: {} 3683 + 3684 + yocto-queue@0.1.0: {} 2492 3685 2493 3686 zwitch@2.0.4: {}
+114
src/core/dom.ts
··· 1 + /** 2 + * DOM utility functions 3 + */ 4 + 5 + /** 6 + * Walk the DOM tree and collect all elements with data-x-* attributes. 7 + * Returns elements in document order (parent before children). 8 + * 9 + * @param root - The root element to start walking from 10 + * @returns Array of elements with data-x-* attributes 11 + */ 12 + export function walkDOM(root: Element): Element[] { 13 + const elements: Element[] = []; 14 + const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT); 15 + 16 + let node = walker.currentNode as Element; 17 + do { 18 + if (hasVoltAttribute(node)) { 19 + elements.push(node); 20 + } 21 + } while ((node = walker.nextNode() as Element)); 22 + 23 + return elements; 24 + } 25 + 26 + /** 27 + * Check if an element has any data-x-* attributes. 28 + * 29 + * @param element - Element to check 30 + * @returns true if element has any Volt attributes 31 + */ 32 + export function hasVoltAttribute(element: Element): boolean { 33 + return [...element.attributes].some((attribute) => attribute.name.startsWith("data-x-")); 34 + } 35 + 36 + /** 37 + * Get all data-x-* attributes from an element. 38 + * 39 + * @param element - Element to get attributes from 40 + * @returns Map of attribute names to values (without the data-x- prefix) 41 + */ 42 + export function getVoltAttributes(element: Element): Map<string, string> { 43 + const attributes = new Map<string, string>(); 44 + 45 + for (const attribute of element.attributes) { 46 + if (attribute.name.startsWith("data-x-")) { 47 + // Remove "data-x-" prefix 48 + attributes.set(attribute.name.slice(7), attribute.value); 49 + } 50 + } 51 + 52 + return attributes; 53 + } 54 + 55 + /** 56 + * Set the text content of an element safely. 57 + * 58 + * @param element - Element to update 59 + * @param value - Text value to set 60 + */ 61 + export function setText(element: Element, value: unknown): void { 62 + element.textContent = String(value ?? ""); 63 + } 64 + 65 + /** 66 + * Set the HTML content of an element safely. 67 + * Note: This trusts the input HTML and should only be used with sanitized content. 68 + * 69 + * @param element - Element to update 70 + * @param value - HTML string to set 71 + */ 72 + export function setHTML(element: Element, value: string): void { 73 + element.innerHTML = value; 74 + } 75 + 76 + /** 77 + * Add or remove a CSS class from an element. 78 + * 79 + * @param element - Element to update 80 + * @param className - Class name to toggle 81 + * @param add - Whether to add (true) or remove (false) the class 82 + */ 83 + export function toggleClass(element: Element, className: string, add: boolean): void { 84 + element.classList.toggle(className, add); 85 + } 86 + 87 + /** 88 + * Parse a class binding expression. 89 + * Supports both string values ("active") and object notation ({active: true}). 90 + * 91 + * @param value - The class value or object 92 + * @returns Map of class names to boolean values 93 + */ 94 + export function parseClassBinding(value: unknown): Map<string, boolean> { 95 + const classes = new Map<string, boolean>(); 96 + switch (typeof value) { 97 + case "string": { 98 + for (const className of value.split(/\s+/).filter(Boolean)) { 99 + classes.set(className, true); 100 + } 101 + break; 102 + } 103 + case "object": { 104 + if (value !== null) { 105 + for (const [key, value_] of Object.entries(value)) { 106 + classes.set(key, Boolean(value_)); 107 + } 108 + } 109 + break; 110 + } 111 + } 112 + 113 + return classes; 114 + }
+76
src/core/evaluator.ts
··· 1 + /** 2 + * Safe expression evaluation of simple expressions without using eval() for bindings 3 + */ 4 + 5 + export type Scope = Record<string, unknown>; 6 + 7 + /** 8 + * Evaluate a simple expression against a scope object. 9 + * Supports: 10 + * - Property access: "count", "user.name", "items.length" 11 + * - Simple literals: "true", "false", "null", "undefined" 12 + * - Numbers: "42", "3.14" 13 + * - Strings: "'hello'", '"world"' 14 + * 15 + * @param expression - The expression string to evaluate 16 + * @param scope - The scope object containing values 17 + * @returns The evaluated result 18 + */ 19 + export function evaluate(expression: string, scope: Scope): unknown { 20 + const trimmed = expression.trim(); 21 + 22 + switch (trimmed) { 23 + case "true": { 24 + return true; 25 + } 26 + case "false": { 27 + return false; 28 + } 29 + case "null": { 30 + return null; 31 + } 32 + case "undefined": { 33 + return undefined; 34 + } 35 + default: { 36 + const numberMatch = /^-?\d+(\.\d+)?$/.exec(trimmed); 37 + if (numberMatch) { 38 + return Number(trimmed); 39 + } 40 + 41 + const stringMatch = /^(['"])(.*)\1$/.exec(trimmed); 42 + if (stringMatch) { 43 + return stringMatch[2]; 44 + } 45 + 46 + return resolvePath(trimmed, scope); 47 + } 48 + } 49 + } 50 + 51 + /** 52 + * Resolve a property path in a scope object. 53 + * Supports nested property access like "user.profile.name". 54 + * 55 + * @param path - The property path (e.g., "user.name") 56 + * @param scope - The scope object 57 + * @returns The value at that path, or undefined if not found 58 + */ 59 + function resolvePath(path: string, scope: Scope): unknown { 60 + const parts = path.split("."); 61 + let current: unknown = scope; 62 + 63 + for (const part of parts) { 64 + if (current === null || current === undefined) { 65 + return undefined; 66 + } 67 + 68 + if (typeof current === "object" && part in (current as Record<string, unknown>)) { 69 + current = (current as Record<string, unknown>)[part]; 70 + } else { 71 + return undefined; 72 + } 73 + } 74 + 75 + return current; 76 + }
+74
src/core/signal.ts
··· 1 + /** 2 + * A reactive primitive that notifies subscribers when its value changes. 3 + * Updates are batched in microtasks to avoid redundant notifications. 4 + */ 5 + export interface Signal<T> { 6 + /** 7 + * Get the current value of the signal. 8 + */ 9 + get(): T; 10 + 11 + /** 12 + * Update the signal's value. 13 + * If the new value differs from the current value, subscribers will be notified 14 + * asynchronously in a batched microtask. 15 + */ 16 + set(value: T): void; 17 + 18 + /** 19 + * Subscribe to changes in the signal's value. 20 + * The callback is invoked with the new value whenever it changes. 21 + * Returns an unsubscribe function to remove the subscription. 22 + */ 23 + subscribe(callback: (value: T) => void): () => void; 24 + } 25 + 26 + /** 27 + * Creates a new signal with the given initial value. 28 + * Signals are reactive primitives that automatically notify subscribers when changed. 29 + * 30 + * @param initialValue - The initial value of the signal 31 + * @returns A Signal object with get, set, and subscribe methods 32 + * 33 + * @example 34 + * const count = signal(0); 35 + * count.subscribe(value => console.log('Count:', value)); 36 + * count.set(1); // Logs: Count: 1 37 + */ 38 + export function signal<T>(initialValue: T): Signal<T> { 39 + let value = initialValue; 40 + const subscribers = new Set<(value: T) => void>(); 41 + 42 + const notify = () => { 43 + for (const callback of subscribers) { 44 + try { 45 + callback(value); 46 + } catch (error) { 47 + console.error("Error in signal subscriber:", error); 48 + } 49 + } 50 + }; 51 + 52 + return { 53 + get() { 54 + return value; 55 + }, 56 + 57 + set(newValue: T) { 58 + if (value === newValue) { 59 + return; 60 + } 61 + 62 + value = newValue; 63 + notify(); 64 + }, 65 + 66 + subscribe(callback: (value: T) => void) { 67 + subscribers.add(callback); 68 + 69 + return () => { 70 + subscribers.delete(callback); 71 + }; 72 + }, 73 + }; 74 + }
-9
src/counter.ts
··· 1 - export function setupCounter(element: HTMLButtonElement) { 2 - let counter = 0 3 - const setCounter = (count: number) => { 4 - counter = count 5 - element.innerHTML = `count is ${counter}` 6 - } 7 - element.addEventListener('click', () => setCounter(counter + 1)) 8 - setCounter(0) 9 - }
+7
src/index.ts
··· 1 + /** 2 + * Volt.js - A lightweight reactive framework for declarative UIs 3 + * 4 + * @packageDocumentation 5 + */ 6 + 7 + export { signal, type Signal } from "./core/signal";
-24
src/main.ts
··· 1 - import './style.css' 2 - import typescriptLogo from './typescript.svg' 3 - import viteLogo from '/vite.svg' 4 - import { setupCounter } from './counter.ts' 5 - 6 - document.querySelector<HTMLDivElement>('#app')!.innerHTML = ` 7 - <div> 8 - <a href="https://vite.dev" target="_blank"> 9 - <img src="${viteLogo}" class="logo" alt="Vite logo" /> 10 - </a> 11 - <a href="https://www.typescriptlang.org/" target="_blank"> 12 - <img src="${typescriptLogo}" class="logo vanilla" alt="TypeScript logo" /> 13 - </a> 14 - <h1>Vite + TypeScript</h1> 15 - <div class="card"> 16 - <button id="counter" type="button"></button> 17 - </div> 18 - <p class="read-the-docs"> 19 - Click on the Vite and TypeScript logos to learn more 20 - </p> 21 - </div> 22 - ` 23 - 24 - setupCounter(document.querySelector<HTMLButtonElement>('#counter')!)
-96
src/style.css
··· 1 - :root { 2 - font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; 3 - line-height: 1.5; 4 - font-weight: 400; 5 - 6 - color-scheme: light dark; 7 - color: rgba(255, 255, 255, 0.87); 8 - background-color: #242424; 9 - 10 - font-synthesis: none; 11 - text-rendering: optimizeLegibility; 12 - -webkit-font-smoothing: antialiased; 13 - -moz-osx-font-smoothing: grayscale; 14 - } 15 - 16 - a { 17 - font-weight: 500; 18 - color: #646cff; 19 - text-decoration: inherit; 20 - } 21 - a:hover { 22 - color: #535bf2; 23 - } 24 - 25 - body { 26 - margin: 0; 27 - display: flex; 28 - place-items: center; 29 - min-width: 320px; 30 - min-height: 100vh; 31 - } 32 - 33 - h1 { 34 - font-size: 3.2em; 35 - line-height: 1.1; 36 - } 37 - 38 - #app { 39 - max-width: 1280px; 40 - margin: 0 auto; 41 - padding: 2rem; 42 - text-align: center; 43 - } 44 - 45 - .logo { 46 - height: 6em; 47 - padding: 1.5em; 48 - will-change: filter; 49 - transition: filter 300ms; 50 - } 51 - .logo:hover { 52 - filter: drop-shadow(0 0 2em #646cffaa); 53 - } 54 - .logo.vanilla:hover { 55 - filter: drop-shadow(0 0 2em #3178c6aa); 56 - } 57 - 58 - .card { 59 - padding: 2em; 60 - } 61 - 62 - .read-the-docs { 63 - color: #888; 64 - } 65 - 66 - button { 67 - border-radius: 8px; 68 - border: 1px solid transparent; 69 - padding: 0.6em 1.2em; 70 - font-size: 1em; 71 - font-weight: 500; 72 - font-family: inherit; 73 - background-color: #1a1a1a; 74 - cursor: pointer; 75 - transition: border-color 0.25s; 76 - } 77 - button:hover { 78 - border-color: #646cff; 79 - } 80 - button:focus, 81 - button:focus-visible { 82 - outline: 4px auto -webkit-focus-ring-color; 83 - } 84 - 85 - @media (prefers-color-scheme: light) { 86 - :root { 87 - color: #213547; 88 - background-color: #ffffff; 89 - } 90 - a:hover { 91 - color: #747bff; 92 - } 93 - button { 94 - background-color: #f9f9f9; 95 - } 96 - }
-6
src/tests/setupTests.ts
··· 1 - import "@testing-library/jest-dom/vitest"; 2 - import { afterEach } from "vitest"; 3 - 4 - afterEach(() => { 5 - document.body.innerHTML = ""; 6 - });
-1
src/typescript.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="32" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path fill="#007ACC" d="M0 128v128h256V0H0z"></path><path fill="#FFF" d="m56.612 128.85l-.081 10.483h33.32v94.68h23.568v-94.68h33.321v-10.28c0-5.69-.122-10.444-.284-10.566c-.122-.162-20.4-.244-44.983-.203l-44.74.122l-.121 10.443Zm149.955-10.742c6.501 1.625 11.459 4.51 16.01 9.224c2.357 2.52 5.851 7.111 6.136 8.208c.08.325-11.053 7.802-17.798 11.988c-.244.162-1.22-.894-2.317-2.52c-3.291-4.795-6.745-6.867-12.028-7.233c-7.76-.528-12.759 3.535-12.718 10.321c0 1.992.284 3.17 1.097 4.795c1.707 3.536 4.876 5.649 14.832 9.956c18.326 7.883 26.168 13.084 31.045 20.48c5.445 8.249 6.664 21.415 2.966 31.208c-4.063 10.646-14.14 17.879-28.323 20.276c-4.388.772-14.79.65-19.504-.203c-10.28-1.828-20.033-6.908-26.047-13.572c-2.357-2.6-6.949-9.387-6.664-9.874c.122-.163 1.178-.813 2.356-1.504c1.138-.65 5.446-3.129 9.509-5.485l7.355-4.267l1.544 2.276c2.154 3.29 6.867 7.801 9.712 9.305c8.167 4.307 19.383 3.698 24.909-1.26c2.357-2.153 3.332-4.388 3.332-7.68c0-2.966-.366-4.266-1.91-6.501c-1.99-2.845-6.054-5.242-17.595-10.24c-13.206-5.69-18.895-9.224-24.096-14.832c-3.007-3.25-5.852-8.452-7.03-12.8c-.975-3.617-1.22-12.678-.447-16.335c2.723-12.76 12.353-21.659 26.25-24.3c4.51-.853 14.994-.528 19.424.569Z"></path></svg>
+124
test/core/signal.test.ts
··· 1 + import { describe, expect, it, vi } from "vitest"; 2 + import { signal } from "../../src/core/signal"; 3 + 4 + describe("signal", () => { 5 + it("creates a signal with an initial value", () => { 6 + const count = signal(0); 7 + expect(count.get()).toBe(0); 8 + }); 9 + 10 + it("updates the value with set", () => { 11 + const count = signal(0); 12 + count.set(5); 13 + expect(count.get()).toBe(5); 14 + }); 15 + 16 + it("notifies subscribers when value changes", () => { 17 + const count = signal(0); 18 + const subscriber = vi.fn(); 19 + 20 + count.subscribe(subscriber); 21 + count.set(10); 22 + 23 + expect(subscriber).toHaveBeenCalledWith(10); 24 + expect(subscriber).toHaveBeenCalledTimes(1); 25 + }); 26 + 27 + it("does not notify subscribers when value is the same", () => { 28 + const count = signal(0); 29 + const subscriber = vi.fn(); 30 + 31 + count.subscribe(subscriber); 32 + count.set(0); 33 + 34 + expect(subscriber).not.toHaveBeenCalled(); 35 + }); 36 + 37 + it("supports multiple subscribers", () => { 38 + const count = signal(0); 39 + const subscriber1 = vi.fn(); 40 + const subscriber2 = vi.fn(); 41 + 42 + count.subscribe(subscriber1); 43 + count.subscribe(subscriber2); 44 + count.set(5); 45 + 46 + expect(subscriber1).toHaveBeenCalledWith(5); 47 + expect(subscriber2).toHaveBeenCalledWith(5); 48 + }); 49 + 50 + it("allows unsubscribing", () => { 51 + const count = signal(0); 52 + const subscriber = vi.fn(); 53 + 54 + const unsubscribe = count.subscribe(subscriber); 55 + unsubscribe(); 56 + count.set(10); 57 + 58 + expect(subscriber).not.toHaveBeenCalled(); 59 + }); 60 + 61 + it("notifies immediately on each update", () => { 62 + const count = signal(0); 63 + const subscriber = vi.fn(); 64 + 65 + count.subscribe(subscriber); 66 + 67 + count.set(1); 68 + count.set(2); 69 + count.set(3); 70 + 71 + expect(subscriber).toHaveBeenCalledTimes(3); 72 + expect(subscriber).toHaveBeenNthCalledWith(1, 1); 73 + expect(subscriber).toHaveBeenNthCalledWith(2, 2); 74 + expect(subscriber).toHaveBeenNthCalledWith(3, 3); 75 + }); 76 + 77 + it("handles object values", () => { 78 + const object = signal({ count: 0 }); 79 + const subscriber = vi.fn(); 80 + 81 + object.subscribe(subscriber); 82 + 83 + const newValue = { count: 1 }; 84 + object.set(newValue); 85 + 86 + expect(object.get()).toBe(newValue); 87 + }); 88 + 89 + it("handles array values", () => { 90 + const array = signal([1, 2, 3]); 91 + const subscriber = vi.fn(); 92 + 93 + array.subscribe(subscriber); 94 + 95 + const newValue = [4, 5, 6]; 96 + array.set(newValue); 97 + 98 + expect(array.get()).toEqual([4, 5, 6]); 99 + }); 100 + 101 + it("allows updating to null or undefined", () => { 102 + const value = signal<string | null | undefined>("test"); 103 + 104 + value.set(null); 105 + expect(value.get()).toBe(null); 106 + 107 + value.set(undefined); 108 + expect(value.get()).toBe(undefined); 109 + }); 110 + 111 + it("handles rapid subscribe/unsubscribe", () => { 112 + const count = signal(0); 113 + const subscriber = vi.fn(); 114 + 115 + const unsub = count.subscribe(subscriber); 116 + unsub(); 117 + count.subscribe(subscriber); 118 + 119 + count.set(5); 120 + 121 + expect(subscriber).toHaveBeenCalledTimes(1); 122 + expect(subscriber).toHaveBeenCalledWith(5); 123 + }); 124 + });
+4
test/setupTests.ts
··· 1 + /* eslint-disable unicorn/filename-case */ 2 + import "@testing-library/jest-dom/vitest"; 3 + import { afterEach } from "vitest"; 4 + afterEach(() => document.body.innerHTML = "");
+1 -1
tsconfig.json
··· 20 20 "noFallthroughCasesInSwitch": true, 21 21 "noUncheckedSideEffectImports": true 22 22 }, 23 - "include": ["src"] 23 + "include": ["src", "test"] 24 24 }
+7 -1
vite.config.ts
··· 1 1 import { defineConfig } from "vitest/config"; 2 2 3 - export default defineConfig({ test: { environment: "jsdom", setupFiles: "./test/setupTests.ts", globals: true } }); 3 + export default defineConfig({ 4 + test: { 5 + environment: "jsdom", 6 + setupFiles: "./test/setupTests.ts", 7 + globals: true, 8 + }, 9 + });