From a0476e999a6672a7624f8cedec905e900c7ecead Mon Sep 17 00:00:00 2001 From: tommy <59783653+dowoge@users.noreply.github.com> Date: Thu, 12 Mar 2026 04:45:45 -0400 Subject: [PATCH 01/62] Implement viewing replays on the web (#39) Co-authored-by: tommy Co-authored-by: Claude Opus 4.6 --- bun.lock | 832 +++++++++++++++++ package-lock.json | 395 +++++---- package.json | 2 + src/api/offstylesApi.ts | 248 ++++-- src/replay-viewer/LoadingModal.vue | 72 ++ src/replay-viewer/ReplayViewerOverlay.vue | 497 +++++++++++ src/replay-viewer/ViewerControls.vue | 245 ++++++ src/replay-viewer/ViewerHUD.vue | 120 +++ src/replay-viewer/camera.ts | 145 +++ src/replay-viewer/fetchWithProgress.ts | 42 + src/replay-viewer/math.ts | 43 + src/replay-viewer/playback.ts | 211 +++++ src/replay-viewer/renderer.ts | 833 ++++++++++++++++++ .../wasm/bhop_replay_viewer_wasm.d.ts | 191 ++++ .../wasm/bhop_replay_viewer_wasm.js | 779 ++++++++++++++++ .../wasm/bhop_replay_viewer_wasm_bg.wasm | Bin 0 -> 330038 bytes .../wasm/bhop_replay_viewer_wasm_bg.wasm.d.ts | 53 ++ src/replay-viewer/wasm/package.json | 15 + src/views/IndividualRecordView.vue | 31 +- vite.config.ts | 18 +- 20 files changed, 4515 insertions(+), 257 deletions(-) create mode 100644 bun.lock create mode 100644 src/replay-viewer/LoadingModal.vue create mode 100644 src/replay-viewer/ReplayViewerOverlay.vue create mode 100644 src/replay-viewer/ViewerControls.vue create mode 100644 src/replay-viewer/ViewerHUD.vue create mode 100644 src/replay-viewer/camera.ts create mode 100644 src/replay-viewer/fetchWithProgress.ts create mode 100644 src/replay-viewer/math.ts create mode 100644 src/replay-viewer/playback.ts create mode 100644 src/replay-viewer/renderer.ts create mode 100644 src/replay-viewer/wasm/bhop_replay_viewer_wasm.d.ts create mode 100644 src/replay-viewer/wasm/bhop_replay_viewer_wasm.js create mode 100644 src/replay-viewer/wasm/bhop_replay_viewer_wasm_bg.wasm create mode 100644 src/replay-viewer/wasm/bhop_replay_viewer_wasm_bg.wasm.d.ts create mode 100644 src/replay-viewer/wasm/package.json diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..20ea76e --- /dev/null +++ b/bun.lock @@ -0,0 +1,832 @@ +{ + "lockfileVersion": 1, + "configVersion": 0, + "workspaces": { + "": { + "name": "offstyles-web", + "dependencies": { + "@headlessui/vue": "^1.7.23", + "@tailwindcss/vite": "^4.1.11", + "gl-matrix": "^3.4.4", + "tailwindcss": "^4.1.11", + "vite-plugin-wasm": "^3.5.0", + "vue": "^3.5.13", + "vue-router": "^4.5.0", + }, + "devDependencies": { + "@tsconfig/node22": "^22.0.1", + "@types/node": "^22.14.0", + "@vitejs/plugin-vue": "^5.2.3", + "@vue/eslint-config-typescript": "^14.5.0", + "@vue/tsconfig": "^0.7.0", + "eslint": "^9.22.0", + "eslint-plugin-vue": "~10.0.0", + "jiti": "^2.4.2", + "npm-run-all2": "^7.0.2", + "typescript": "~5.8.0", + "vite": "^6.2.4", + "vite-plugin-vue-devtools": "^7.7.2", + "vue-tsc": "^2.2.8", + }, + }, + }, + "packages": { + "@ampproject/remapping": ["@ampproject/remapping@2.3.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="], + + "@antfu/utils": ["@antfu/utils@0.7.10", "", {}, "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww=="], + + "@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], + + "@babel/compat-data": ["@babel/compat-data@7.27.5", "", {}, "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg=="], + + "@babel/core": ["@babel/core@7.27.4", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.27.3", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.27.3", "@babel/helpers": "^7.27.4", "@babel/parser": "^7.27.4", "@babel/template": "^7.27.2", "@babel/traverse": "^7.27.4", "@babel/types": "^7.27.3", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g=="], + + "@babel/generator": ["@babel/generator@7.27.5", "", { "dependencies": { "@babel/parser": "^7.27.5", "@babel/types": "^7.27.3", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" } }, "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw=="], + + "@babel/helper-annotate-as-pure": ["@babel/helper-annotate-as-pure@7.27.3", "", { "dependencies": { "@babel/types": "^7.27.3" } }, "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg=="], + + "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.27.2", "", { "dependencies": { "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ=="], + + "@babel/helper-create-class-features-plugin": ["@babel/helper-create-class-features-plugin@7.27.1", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-member-expression-to-functions": "^7.27.1", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/traverse": "^7.27.1", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A=="], + + "@babel/helper-member-expression-to-functions": ["@babel/helper-member-expression-to-functions@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA=="], + + "@babel/helper-module-imports": ["@babel/helper-module-imports@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w=="], + + "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.27.3", "", { "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", "@babel/traverse": "^7.27.3" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg=="], + + "@babel/helper-optimise-call-expression": ["@babel/helper-optimise-call-expression@7.27.1", "", { "dependencies": { "@babel/types": "^7.27.1" } }, "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw=="], + + "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.27.1", "", {}, "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw=="], + + "@babel/helper-replace-supers": ["@babel/helper-replace-supers@7.27.1", "", { "dependencies": { "@babel/helper-member-expression-to-functions": "^7.27.1", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/traverse": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA=="], + + "@babel/helper-skip-transparent-expression-wrappers": ["@babel/helper-skip-transparent-expression-wrappers@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg=="], + + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.27.1", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="], + + "@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], + + "@babel/helpers": ["@babel/helpers@7.27.6", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.27.6" } }, "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug=="], + + "@babel/parser": ["@babel/parser@7.27.5", "", { "dependencies": { "@babel/types": "^7.27.3" }, "bin": { "parser": "bin/babel-parser.js" } }, "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg=="], + + "@babel/plugin-proposal-decorators": ["@babel/plugin-proposal-decorators@7.27.1", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", "@babel/plugin-syntax-decorators": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-DTxe4LBPrtFdsWzgpmbBKevg3e9PBy+dXRt19kSbucbZvL2uqtdqwwpluL1jfxYE0wIDTFp1nTy/q6gNLsxXrg=="], + + "@babel/plugin-syntax-decorators": ["@babel/plugin-syntax-decorators@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A=="], + + "@babel/plugin-syntax-import-attributes": ["@babel/plugin-syntax-import-attributes@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww=="], + + "@babel/plugin-syntax-import-meta": ["@babel/plugin-syntax-import-meta@7.10.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g=="], + + "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w=="], + + "@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ=="], + + "@babel/plugin-transform-typescript": ["@babel/plugin-transform-typescript@7.27.1", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-create-class-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg=="], + + "@babel/template": ["@babel/template@7.27.2", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" } }, "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw=="], + + "@babel/traverse": ["@babel/traverse@7.27.4", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.27.3", "@babel/parser": "^7.27.4", "@babel/template": "^7.27.2", "@babel/types": "^7.27.3", "debug": "^4.3.1", "globals": "^11.1.0" } }, "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA=="], + + "@babel/types": ["@babel/types@7.27.6", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.25.5", "", { "os": "android", "cpu": "arm" }, "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.5", "", { "os": "android", "cpu": "arm64" }, "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.25.5", "", { "os": "android", "cpu": "x64" }, "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.5", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.5", "", { "os": "linux", "cpu": "arm" }, "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.5", "", { "os": "linux", "cpu": "ia32" }, "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.5", "", { "os": "linux", "cpu": "none" }, "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.5", "", { "os": "linux", "cpu": "none" }, "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.5", "", { "os": "linux", "cpu": "none" }, "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.5", "", { "os": "linux", "cpu": "x64" }, "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw=="], + + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.5", "", { "os": "none", "cpu": "arm64" }, "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.5", "", { "os": "none", "cpu": "x64" }, "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ=="], + + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.5", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.5", "", { "os": "openbsd", "cpu": "x64" }, "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.5", "", { "os": "sunos", "cpu": "x64" }, "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.5", "", { "os": "win32", "cpu": "x64" }, "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g=="], + + "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.7.0", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw=="], + + "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.1", "", {}, "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ=="], + + "@eslint/config-array": ["@eslint/config-array@0.20.1", "", { "dependencies": { "@eslint/object-schema": "^2.1.6", "debug": "^4.3.1", "minimatch": "^3.1.2" } }, "sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw=="], + + "@eslint/config-helpers": ["@eslint/config-helpers@0.2.3", "", {}, "sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg=="], + + "@eslint/core": ["@eslint/core@0.14.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg=="], + + "@eslint/eslintrc": ["@eslint/eslintrc@3.3.1", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ=="], + + "@eslint/js": ["@eslint/js@9.29.0", "", {}, "sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ=="], + + "@eslint/object-schema": ["@eslint/object-schema@2.1.6", "", {}, "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA=="], + + "@eslint/plugin-kit": ["@eslint/plugin-kit@0.3.2", "", { "dependencies": { "@eslint/core": "^0.15.0", "levn": "^0.4.1" } }, "sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg=="], + + "@headlessui/vue": ["@headlessui/vue@1.7.23", "", { "dependencies": { "@tanstack/vue-virtual": "^3.0.0-beta.60" }, "peerDependencies": { "vue": "^3.2.0" } }, "sha512-JzdCNqurrtuu0YW6QaDtR2PIYCKPUWq28csDyMvN4zmGccmE7lz40Is6hc3LA4HFeCI7sekZ/PQMTNmn9I/4Wg=="], + + "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], + + "@humanfs/node": ["@humanfs/node@0.16.6", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.3.0" } }, "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw=="], + + "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], + + "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], + + "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.8", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/set-array": ["@jridgewell/set-array@1.2.1", "", {}, "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], + + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], + + "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], + + "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + + "@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="], + + "@rollup/pluginutils": ["@rollup/pluginutils@5.1.4", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" } }, "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ=="], + + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.43.0", "", { "os": "android", "cpu": "arm" }, "sha512-Krjy9awJl6rKbruhQDgivNbD1WuLb8xAclM4IR4cN5pHGAs2oIMMQJEiC3IC/9TZJ+QZkmZhlMO/6MBGxPidpw=="], + + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.43.0", "", { "os": "android", "cpu": "arm64" }, "sha512-ss4YJwRt5I63454Rpj+mXCXicakdFmKnUNxr1dLK+5rv5FJgAxnN7s31a5VchRYxCFWdmnDWKd0wbAdTr0J5EA=="], + + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.43.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-eKoL8ykZ7zz8MjgBenEF2OoTNFAPFz1/lyJ5UmmFSz5jW+7XbH1+MAgCVHy72aG59rbuQLcJeiMrP8qP5d/N0A=="], + + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.43.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-SYwXJgaBYW33Wi/q4ubN+ldWC4DzQY62S4Ll2dgfr/dbPoF50dlQwEaEHSKrQdSjC6oIe1WgzosoaNoHCdNuMg=="], + + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.43.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-SV+U5sSo0yujrjzBF7/YidieK2iF6E7MdF6EbYxNz94lA+R0wKl3SiixGyG/9Klab6uNBIqsN7j4Y/Fya7wAjQ=="], + + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.43.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-J7uCsiV13L/VOeHJBo5SjasKiGxJ0g+nQTrBkAsmQBIdil3KhPnSE9GnRon4ejX1XDdsmK/l30IYLiAaQEO0Cg=="], + + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.43.0", "", { "os": "linux", "cpu": "arm" }, "sha512-gTJ/JnnjCMc15uwB10TTATBEhK9meBIY+gXP4s0sHD1zHOaIh4Dmy1X9wup18IiY9tTNk5gJc4yx9ctj/fjrIw=="], + + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.43.0", "", { "os": "linux", "cpu": "arm" }, "sha512-ZJ3gZynL1LDSIvRfz0qXtTNs56n5DI2Mq+WACWZ7yGHFUEirHBRt7fyIk0NsCKhmRhn7WAcjgSkSVVxKlPNFFw=="], + + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.43.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-8FnkipasmOOSSlfucGYEu58U8cxEdhziKjPD2FIa0ONVMxvl/hmONtX/7y4vGjdUhjcTHlKlDhw3H9t98fPvyA=="], + + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.43.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-KPPyAdlcIZ6S9C3S2cndXDkV0Bb1OSMsX0Eelr2Bay4EsF9yi9u9uzc9RniK3mcUGCLhWY9oLr6er80P5DE6XA=="], + + "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.43.0", "", { "os": "linux", "cpu": "none" }, "sha512-HPGDIH0/ZzAZjvtlXj6g+KDQ9ZMHfSP553za7o2Odegb/BEfwJcR0Sw0RLNpQ9nC6Gy8s+3mSS9xjZ0n3rhcYg=="], + + "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.43.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-gEmwbOws4U4GLAJDhhtSPWPXUzDfMRedT3hFMyRAvM9Mrnj+dJIFIeL7otsv2WF3D7GrV0GIewW0y28dOYWkmw=="], + + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.43.0", "", { "os": "linux", "cpu": "none" }, "sha512-XXKvo2e+wFtXZF/9xoWohHg+MuRnvO29TI5Hqe9xwN5uN8NKUYy7tXUG3EZAlfchufNCTHNGjEx7uN78KsBo0g=="], + + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.43.0", "", { "os": "linux", "cpu": "none" }, "sha512-ruf3hPWhjw6uDFsOAzmbNIvlXFXlBQ4nk57Sec8E8rUxs/AI4HD6xmiiasOOx/3QxS2f5eQMKTAwk7KHwpzr/Q=="], + + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.43.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-QmNIAqDiEMEvFV15rsSnjoSmO0+eJLoKRD9EAa9rrYNwO/XRCtOGM3A5A0X+wmG+XRrw9Fxdsw+LnyYiZWWcVw=="], + + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.43.0", "", { "os": "linux", "cpu": "x64" }, "sha512-jAHr/S0iiBtFyzjhOkAics/2SrXE092qyqEg96e90L3t9Op8OTzS6+IX0Fy5wCt2+KqeHAkti+eitV0wvblEoQ=="], + + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.43.0", "", { "os": "linux", "cpu": "x64" }, "sha512-3yATWgdeXyuHtBhrLt98w+5fKurdqvs8B53LaoKD7P7H7FKOONLsBVMNl9ghPQZQuYcceV5CDyPfyfGpMWD9mQ=="], + + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.43.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-wVzXp2qDSCOpcBCT5WRWLmpJRIzv23valvcTwMHEobkjippNf+C3ys/+wf07poPkeNix0paTNemB2XrHr2TnGw=="], + + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.43.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-fYCTEyzf8d+7diCw8b+asvWDCLMjsCEA8alvtAutqJOJp/wL5hs1rWSqJ1vkjgW0L2NB4bsYJrpKkiIPRR9dvw=="], + + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.43.0", "", { "os": "win32", "cpu": "x64" }, "sha512-SnGhLiE5rlK0ofq8kzuDkM0g7FN1s5VYY+YSMTibP7CqShxCQvqtNxTARS4xX4PFJfHjG0ZQYX9iGzI3FQh5Aw=="], + + "@sec-ant/readable-stream": ["@sec-ant/readable-stream@0.4.1", "", {}, "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg=="], + + "@sindresorhus/merge-streams": ["@sindresorhus/merge-streams@4.0.0", "", {}, "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ=="], + + "@tailwindcss/node": ["@tailwindcss/node@4.1.11", "", { "dependencies": { "@ampproject/remapping": "^2.3.0", "enhanced-resolve": "^5.18.1", "jiti": "^2.4.2", "lightningcss": "1.30.1", "magic-string": "^0.30.17", "source-map-js": "^1.2.1", "tailwindcss": "4.1.11" } }, "sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q=="], + + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.11", "", { "dependencies": { "detect-libc": "^2.0.4", "tar": "^7.4.3" }, "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.1.11", "@tailwindcss/oxide-darwin-arm64": "4.1.11", "@tailwindcss/oxide-darwin-x64": "4.1.11", "@tailwindcss/oxide-freebsd-x64": "4.1.11", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.11", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.11", "@tailwindcss/oxide-linux-arm64-musl": "4.1.11", "@tailwindcss/oxide-linux-x64-gnu": "4.1.11", "@tailwindcss/oxide-linux-x64-musl": "4.1.11", "@tailwindcss/oxide-wasm32-wasi": "4.1.11", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.11", "@tailwindcss/oxide-win32-x64-msvc": "4.1.11" } }, "sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg=="], + + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.1.11", "", { "os": "android", "cpu": "arm64" }, "sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg=="], + + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.1.11", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ=="], + + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.1.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw=="], + + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.1.11", "", { "os": "freebsd", "cpu": "x64" }, "sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA=="], + + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11", "", { "os": "linux", "cpu": "arm" }, "sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg=="], + + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.1.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ=="], + + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.1.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ=="], + + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.1.11", "", { "os": "linux", "cpu": "x64" }, "sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg=="], + + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.1.11", "", { "os": "linux", "cpu": "x64" }, "sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q=="], + + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.1.11", "", { "cpu": "none" }, "sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g=="], + + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.1.11", "", { "os": "win32", "cpu": "arm64" }, "sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w=="], + + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.1.11", "", { "os": "win32", "cpu": "x64" }, "sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg=="], + + "@tailwindcss/vite": ["@tailwindcss/vite@4.1.11", "", { "dependencies": { "@tailwindcss/node": "4.1.11", "@tailwindcss/oxide": "4.1.11", "tailwindcss": "4.1.11" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7" } }, "sha512-RHYhrR3hku0MJFRV+fN2gNbDNEh3dwKvY8XJvTxCSXeMOsCRSr+uKvDWQcbizrHgjML6ZmTE5OwMrl5wKcujCw=="], + + "@tanstack/virtual-core": ["@tanstack/virtual-core@3.13.10", "", {}, "sha512-sPEDhXREou5HyZYqSWIqdU580rsF6FGeN7vpzijmP3KTiOGjOMZASz4Y6+QKjiFQwhWrR58OP8izYaNGVxvViA=="], + + "@tanstack/vue-virtual": ["@tanstack/vue-virtual@3.13.10", "", { "dependencies": { "@tanstack/virtual-core": "3.13.10" }, "peerDependencies": { "vue": "^2.7.0 || ^3.0.0" } }, "sha512-1UZmUiMNyKxQ1JFPtO3rfRmK7IuLYwfj/foPC7FVWj6yHand4ry5joFh8LQ1Ckm7Dfe/08cv6LKZNc4WYj7hxQ=="], + + "@tsconfig/node22": ["@tsconfig/node22@22.0.2", "", {}, "sha512-Kmwj4u8sDRDrMYRoN9FDEcXD8UpBSaPQQ24Gz+Gamqfm7xxn+GBR7ge/Z7pK8OXNGyUzbSwJj+TH6B+DS/epyA=="], + + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], + + "@types/node": ["@types/node@22.15.31", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-jnVe5ULKl6tijxUhvQeNbQG/84fHfg+yMak02cT8QVhBx/F05rAVxCGBYYTh2EKz22D6JF5ktXuNwdx7b9iEGw=="], + + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.34.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.34.0", "@typescript-eslint/type-utils": "8.34.0", "@typescript-eslint/utils": "8.34.0", "@typescript-eslint/visitor-keys": "8.34.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.34.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-QXwAlHlbcAwNlEEMKQS2RCgJsgXrTJdjXT08xEgbPFa2yYQgVjBymxP5DrfrE7X7iodSzd9qBUHUycdyVJTW1w=="], + + "@typescript-eslint/parser": ["@typescript-eslint/parser@8.34.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.34.0", "@typescript-eslint/types": "8.34.0", "@typescript-eslint/typescript-estree": "8.34.0", "@typescript-eslint/visitor-keys": "8.34.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-vxXJV1hVFx3IXz/oy2sICsJukaBrtDEQSBiV48/YIV5KWjX1dO+bcIr/kCPrW6weKXvsaGKFNlwH0v2eYdRRbA=="], + + "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.34.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.34.0", "@typescript-eslint/types": "^8.34.0", "debug": "^4.3.4" }, "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-iEgDALRf970/B2YExmtPMPF54NenZUf4xpL3wsCRx/lgjz6ul/l13R81ozP/ZNuXfnLCS+oPmG7JIxfdNYKELw=="], + + "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.34.0", "", { "dependencies": { "@typescript-eslint/types": "8.34.0", "@typescript-eslint/visitor-keys": "8.34.0" } }, "sha512-9Ac0X8WiLykl0aj1oYQNcLZjHgBojT6cW68yAgZ19letYu+Hxd0rE0veI1XznSSst1X5lwnxhPbVdwjDRIomRw=="], + + "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.34.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-+W9VYHKFIzA5cBeooqQxqNriAP0QeQ7xTiDuIOr71hzgffm3EL2hxwWBIIj4GuofIbKxGNarpKqIq6Q6YrShOA=="], + + "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.34.0", "", { "dependencies": { "@typescript-eslint/typescript-estree": "8.34.0", "@typescript-eslint/utils": "8.34.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-n7zSmOcUVhcRYC75W2pnPpbO1iwhJY3NLoHEtbJwJSNlVAZuwqu05zY3f3s2SDWWDSo9FdN5szqc73DCtDObAg=="], + + "@typescript-eslint/types": ["@typescript-eslint/types@8.34.0", "", {}, "sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA=="], + + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.34.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.34.0", "@typescript-eslint/tsconfig-utils": "8.34.0", "@typescript-eslint/types": "8.34.0", "@typescript-eslint/visitor-keys": "8.34.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-rOi4KZxI7E0+BMqG7emPSK1bB4RICCpF7QD3KCLXn9ZvWoESsOMlHyZPAHyG04ujVplPaHbmEvs34m+wjgtVtg=="], + + "@typescript-eslint/utils": ["@typescript-eslint/utils@8.34.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/scope-manager": "8.34.0", "@typescript-eslint/types": "8.34.0", "@typescript-eslint/typescript-estree": "8.34.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-8L4tWatGchV9A1cKbjaavS6mwYwp39jql8xUmIIKJdm+qiaeHy5KMKlBrf30akXAWBzn2SqKsNOtSENWUwg7XQ=="], + + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.34.0", "", { "dependencies": { "@typescript-eslint/types": "8.34.0", "eslint-visitor-keys": "^4.2.0" } }, "sha512-qHV7pW7E85A0x6qyrFn+O+q1k1p3tQCsqIZ1KZ5ESLXY57aTvUd3/a4rdPTeXisvhXn2VQG0VSKUqs8KHF2zcA=="], + + "@vitejs/plugin-vue": ["@vitejs/plugin-vue@5.2.4", "", { "peerDependencies": { "vite": "^5.0.0 || ^6.0.0", "vue": "^3.2.25" } }, "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA=="], + + "@volar/language-core": ["@volar/language-core@2.4.14", "", { "dependencies": { "@volar/source-map": "2.4.14" } }, "sha512-X6beusV0DvuVseaOEy7GoagS4rYHgDHnTrdOj5jeUb49fW5ceQyP9Ej5rBhqgz2wJggl+2fDbbojq1XKaxDi6w=="], + + "@volar/source-map": ["@volar/source-map@2.4.14", "", {}, "sha512-5TeKKMh7Sfxo8021cJfmBzcjfY1SsXsPMMjMvjY7ivesdnybqqS+GxGAoXHAOUawQTwtdUxgP65Im+dEmvWtYQ=="], + + "@volar/typescript": ["@volar/typescript@2.4.14", "", { "dependencies": { "@volar/language-core": "2.4.14", "path-browserify": "^1.0.1", "vscode-uri": "^3.0.8" } }, "sha512-p8Z6f/bZM3/HyCdRNFZOEEzts51uV8WHeN8Tnfnm2EBv6FDB2TQLzfVx7aJvnl8ofKAOnS64B2O8bImBFaauRw=="], + + "@vue/babel-helper-vue-transform-on": ["@vue/babel-helper-vue-transform-on@1.4.0", "", {}, "sha512-mCokbouEQ/ocRce/FpKCRItGo+013tHg7tixg3DUNS+6bmIchPt66012kBMm476vyEIJPafrvOf4E5OYj3shSw=="], + + "@vue/babel-plugin-jsx": ["@vue/babel-plugin-jsx@1.4.0", "", { "dependencies": { "@babel/helper-module-imports": "^7.25.9", "@babel/helper-plugin-utils": "^7.26.5", "@babel/plugin-syntax-jsx": "^7.25.9", "@babel/template": "^7.26.9", "@babel/traverse": "^7.26.9", "@babel/types": "^7.26.9", "@vue/babel-helper-vue-transform-on": "1.4.0", "@vue/babel-plugin-resolve-type": "1.4.0", "@vue/shared": "^3.5.13" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-9zAHmwgMWlaN6qRKdrg1uKsBKHvnUU+Py+MOCTuYZBoZsopa90Di10QRjB+YPnVss0BZbG/H5XFwJY1fTxJWhA=="], + + "@vue/babel-plugin-resolve-type": ["@vue/babel-plugin-resolve-type@1.4.0", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "@babel/helper-module-imports": "^7.25.9", "@babel/helper-plugin-utils": "^7.26.5", "@babel/parser": "^7.26.9", "@vue/compiler-sfc": "^3.5.13" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-4xqDRRbQQEWHQyjlYSgZsWj44KfiF6D+ktCuXyZ8EnVDYV3pztmXJDf1HveAjUAXxAnR8daCQT51RneWWxtTyQ=="], + + "@vue/compiler-core": ["@vue/compiler-core@3.5.16", "", { "dependencies": { "@babel/parser": "^7.27.2", "@vue/shared": "3.5.16", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ=="], + + "@vue/compiler-dom": ["@vue/compiler-dom@3.5.16", "", { "dependencies": { "@vue/compiler-core": "3.5.16", "@vue/shared": "3.5.16" } }, "sha512-SSJIhBr/teipXiXjmWOVWLnxjNGo65Oj/8wTEQz0nqwQeP75jWZ0n4sF24Zxoht1cuJoWopwj0J0exYwCJ0dCQ=="], + + "@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.16", "", { "dependencies": { "@babel/parser": "^7.27.2", "@vue/compiler-core": "3.5.16", "@vue/compiler-dom": "3.5.16", "@vue/compiler-ssr": "3.5.16", "@vue/shared": "3.5.16", "estree-walker": "^2.0.2", "magic-string": "^0.30.17", "postcss": "^8.5.3", "source-map-js": "^1.2.1" } }, "sha512-rQR6VSFNpiinDy/DVUE0vHoIDUF++6p910cgcZoaAUm3POxgNOOdS/xgoll3rNdKYTYPnnbARDCZOyZ+QSe6Pw=="], + + "@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.16", "", { "dependencies": { "@vue/compiler-dom": "3.5.16", "@vue/shared": "3.5.16" } }, "sha512-d2V7kfxbdsjrDSGlJE7my1ZzCXViEcqN6w14DOsDrUCHEA6vbnVCpRFfrc4ryCP/lCKzX2eS1YtnLE/BuC9f/A=="], + + "@vue/compiler-vue2": ["@vue/compiler-vue2@2.7.16", "", { "dependencies": { "de-indent": "^1.0.2", "he": "^1.2.0" } }, "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A=="], + + "@vue/devtools-api": ["@vue/devtools-api@6.6.4", "", {}, "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="], + + "@vue/devtools-core": ["@vue/devtools-core@7.7.6", "", { "dependencies": { "@vue/devtools-kit": "^7.7.6", "@vue/devtools-shared": "^7.7.6", "mitt": "^3.0.1", "nanoid": "^5.1.0", "pathe": "^2.0.3", "vite-hot-client": "^2.0.4" }, "peerDependencies": { "vue": "^3.0.0" } }, "sha512-ghVX3zjKPtSHu94Xs03giRIeIWlb9M+gvDRVpIZ/cRIxKHdW6HE/sm1PT3rUYS3aV92CazirT93ne+7IOvGUWg=="], + + "@vue/devtools-kit": ["@vue/devtools-kit@7.7.6", "", { "dependencies": { "@vue/devtools-shared": "^7.7.6", "birpc": "^2.3.0", "hookable": "^5.5.3", "mitt": "^3.0.1", "perfect-debounce": "^1.0.0", "speakingurl": "^14.0.1", "superjson": "^2.2.2" } }, "sha512-geu7ds7tem2Y7Wz+WgbnbZ6T5eadOvozHZ23Atk/8tksHMFOFylKi1xgGlQlVn0wlkEf4hu+vd5ctj1G4kFtwA=="], + + "@vue/devtools-shared": ["@vue/devtools-shared@7.7.6", "", { "dependencies": { "rfdc": "^1.4.1" } }, "sha512-yFEgJZ/WblEsojQQceuyK6FzpFDx4kqrz2ohInxNj5/DnhoX023upTv4OD6lNPLAA5LLkbwPVb10o/7b+Y4FVA=="], + + "@vue/eslint-config-typescript": ["@vue/eslint-config-typescript@14.5.0", "", { "dependencies": { "@typescript-eslint/utils": "^8.26.0", "fast-glob": "^3.3.3", "typescript-eslint": "^8.26.0", "vue-eslint-parser": "^10.1.1" }, "peerDependencies": { "eslint": "^9.10.0", "eslint-plugin-vue": "^9.28.0 || ^10.0.0", "typescript": ">=4.8.4" } }, "sha512-5oPOyuwkw++AP5gHDh5YFmST50dPfWOcm3/W7Nbh42IK5O3H74ytWAw0TrCRTaBoD/02khnWXuZf1Bz1xflavQ=="], + + "@vue/language-core": ["@vue/language-core@2.2.10", "", { "dependencies": { "@volar/language-core": "~2.4.11", "@vue/compiler-dom": "^3.5.0", "@vue/compiler-vue2": "^2.7.16", "@vue/shared": "^3.5.0", "alien-signals": "^1.0.3", "minimatch": "^9.0.3", "muggle-string": "^0.4.1", "path-browserify": "^1.0.1" }, "peerDependencies": { "typescript": "*" } }, "sha512-+yNoYx6XIKuAO8Mqh1vGytu8jkFEOH5C8iOv3i8Z/65A7x9iAOXA97Q+PqZ3nlm2lxf5rOJuIGI/wDtx/riNYw=="], + + "@vue/reactivity": ["@vue/reactivity@3.5.16", "", { "dependencies": { "@vue/shared": "3.5.16" } }, "sha512-FG5Q5ee/kxhIm1p2bykPpPwqiUBV3kFySsHEQha5BJvjXdZTUfmya7wP7zC39dFuZAcf/PD5S4Lni55vGLMhvA=="], + + "@vue/runtime-core": ["@vue/runtime-core@3.5.16", "", { "dependencies": { "@vue/reactivity": "3.5.16", "@vue/shared": "3.5.16" } }, "sha512-bw5Ykq6+JFHYxrQa7Tjr+VSzw7Dj4ldR/udyBZbq73fCdJmyy5MPIFR9IX/M5Qs+TtTjuyUTCnmK3lWWwpAcFQ=="], + + "@vue/runtime-dom": ["@vue/runtime-dom@3.5.16", "", { "dependencies": { "@vue/reactivity": "3.5.16", "@vue/runtime-core": "3.5.16", "@vue/shared": "3.5.16", "csstype": "^3.1.3" } }, "sha512-T1qqYJsG2xMGhImRUV9y/RseB9d0eCYZQ4CWca9ztCuiPj/XWNNN+lkNBuzVbia5z4/cgxdL28NoQCvC0Xcfww=="], + + "@vue/server-renderer": ["@vue/server-renderer@3.5.16", "", { "dependencies": { "@vue/compiler-ssr": "3.5.16", "@vue/shared": "3.5.16" }, "peerDependencies": { "vue": "3.5.16" } }, "sha512-BrX0qLiv/WugguGsnQUJiYOE0Fe5mZTwi6b7X/ybGB0vfrPH9z0gD/Y6WOR1sGCgX4gc25L1RYS5eYQKDMoNIg=="], + + "@vue/shared": ["@vue/shared@3.5.16", "", {}, "sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg=="], + + "@vue/tsconfig": ["@vue/tsconfig@0.7.0", "", { "peerDependencies": { "typescript": "5.x", "vue": "^3.4.0" } }, "sha512-ku2uNz5MaZ9IerPPUyOHzyjhXoX2kVJaVf7hL315DC17vS6IiZRmmCPfggNbU16QTvM80+uYYy3eYJB59WCtvg=="], + + "acorn": ["acorn@8.15.0", "", { "bin": "bin/acorn" }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + + "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], + + "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], + + "alien-signals": ["alien-signals@1.0.13", "", {}, "sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg=="], + + "ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], + + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "birpc": ["birpc@2.4.0", "", {}, "sha512-5IdNxTyhXHv2UlgnPHQ0h+5ypVmkrYHzL8QT+DwFZ//2N/oNV8Ch+BCRmTJ3x6/z9Axo/cXYBc9eprsUVK/Jsg=="], + + "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], + + "brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + + "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], + + "browserslist": ["browserslist@4.25.0", "", { "dependencies": { "caniuse-lite": "^1.0.30001718", "electron-to-chromium": "^1.5.160", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" }, "bin": "cli.js" }, "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA=="], + + "bundle-name": ["bundle-name@4.1.0", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="], + + "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], + + "caniuse-lite": ["caniuse-lite@1.0.30001723", "", {}, "sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw=="], + + "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], + + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + + "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + + "copy-anything": ["copy-anything@3.0.5", "", { "dependencies": { "is-what": "^4.1.8" } }, "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w=="], + + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], + + "cssesc": ["cssesc@3.0.0", "", { "bin": "bin/cssesc" }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], + + "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], + + "de-indent": ["de-indent@1.0.2", "", {}, "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg=="], + + "debug": ["debug@4.4.1", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ=="], + + "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], + + "default-browser": ["default-browser@5.2.1", "", { "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" } }, "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg=="], + + "default-browser-id": ["default-browser-id@5.0.0", "", {}, "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA=="], + + "define-lazy-prop": ["define-lazy-prop@3.0.0", "", {}, "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg=="], + + "detect-libc": ["detect-libc@2.0.4", "", {}, "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="], + + "electron-to-chromium": ["electron-to-chromium@1.5.167", "", {}, "sha512-LxcRvnYO5ez2bMOFpbuuVuAI5QNeY1ncVytE/KXaL6ZNfzX1yPlAO0nSOyIHx2fVAuUprMqPs/TdVhUFZy7SIQ=="], + + "enhanced-resolve": ["enhanced-resolve@5.18.3", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww=="], + + "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + + "error-stack-parser-es": ["error-stack-parser-es@0.1.5", "", {}, "sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg=="], + + "esbuild": ["esbuild@0.25.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.5", "@esbuild/android-arm": "0.25.5", "@esbuild/android-arm64": "0.25.5", "@esbuild/android-x64": "0.25.5", "@esbuild/darwin-arm64": "0.25.5", "@esbuild/darwin-x64": "0.25.5", "@esbuild/freebsd-arm64": "0.25.5", "@esbuild/freebsd-x64": "0.25.5", "@esbuild/linux-arm": "0.25.5", "@esbuild/linux-arm64": "0.25.5", "@esbuild/linux-ia32": "0.25.5", "@esbuild/linux-loong64": "0.25.5", "@esbuild/linux-mips64el": "0.25.5", "@esbuild/linux-ppc64": "0.25.5", "@esbuild/linux-riscv64": "0.25.5", "@esbuild/linux-s390x": "0.25.5", "@esbuild/linux-x64": "0.25.5", "@esbuild/netbsd-arm64": "0.25.5", "@esbuild/netbsd-x64": "0.25.5", "@esbuild/openbsd-arm64": "0.25.5", "@esbuild/openbsd-x64": "0.25.5", "@esbuild/sunos-x64": "0.25.5", "@esbuild/win32-arm64": "0.25.5", "@esbuild/win32-ia32": "0.25.5", "@esbuild/win32-x64": "0.25.5" }, "bin": "bin/esbuild" }, "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ=="], + + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + + "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], + + "eslint": ["eslint@9.29.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.20.1", "@eslint/config-helpers": "^0.2.1", "@eslint/core": "^0.14.0", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.29.0", "@eslint/plugin-kit": "^0.3.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "bin": "bin/eslint.js" }, "sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ=="], + + "eslint-plugin-vue": ["eslint-plugin-vue@10.0.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "natural-compare": "^1.4.0", "nth-check": "^2.1.1", "postcss-selector-parser": "^6.0.15", "semver": "^7.6.3", "xml-name-validator": "^4.0.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "vue-eslint-parser": "^10.0.0" } }, "sha512-A5dRYc3eQ5i2rJFBW8J6F69ur/H7YfYg+5SCg6v829FU0BhM4fUTrRVR2d4MdZgzw0ioJEk6otYHEAnoGFqO4A=="], + + "eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="], + + "eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], + + "espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="], + + "esquery": ["esquery@1.6.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg=="], + + "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], + + "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], + + "estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + + "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], + + "execa": ["execa@9.6.0", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.6", "figures": "^6.1.0", "get-stream": "^9.0.0", "human-signals": "^8.0.1", "is-plain-obj": "^4.1.0", "is-stream": "^4.0.1", "npm-run-path": "^6.0.0", "pretty-ms": "^9.2.0", "signal-exit": "^4.1.0", "strip-final-newline": "^4.0.0", "yoctocolors": "^2.1.1" } }, "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw=="], + + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + + "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], + + "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], + + "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], + + "fastq": ["fastq@1.19.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ=="], + + "fdir": ["fdir@6.4.6", "", { "peerDependencies": { "picomatch": "^3 || ^4" } }, "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w=="], + + "figures": ["figures@6.1.0", "", { "dependencies": { "is-unicode-supported": "^2.0.0" } }, "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg=="], + + "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], + + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + + "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], + + "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="], + + "flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="], + + "fs-extra": ["fs-extra@11.3.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], + + "get-stream": ["get-stream@9.0.1", "", { "dependencies": { "@sec-ant/readable-stream": "^0.4.1", "is-stream": "^4.0.1" } }, "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA=="], + + "gl-matrix": ["gl-matrix@3.4.4", "", {}, "sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ=="], + + "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], + + "globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], + + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + + "graphemer": ["graphemer@1.4.0", "", {}, "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="], + + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "he": ["he@1.2.0", "", { "bin": "bin/he" }, "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="], + + "hookable": ["hookable@5.5.3", "", {}, "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="], + + "human-signals": ["human-signals@8.0.1", "", {}, "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ=="], + + "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + + "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], + + "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], + + "is-docker": ["is-docker@3.0.0", "", { "bin": "cli.js" }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], + + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + + "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": "cli.js" }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], + + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + + "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], + + "is-stream": ["is-stream@4.0.1", "", {}, "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A=="], + + "is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="], + + "is-what": ["is-what@4.1.16", "", {}, "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A=="], + + "is-wsl": ["is-wsl@3.1.0", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw=="], + + "isexe": ["isexe@3.1.1", "", {}, "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ=="], + + "jiti": ["jiti@2.4.2", "", { "bin": "lib/jiti-cli.mjs" }, "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A=="], + + "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + + "js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": "bin/js-yaml.js" }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], + + "jsesc": ["jsesc@3.1.0", "", { "bin": "bin/jsesc" }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], + + "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], + + "json-parse-even-better-errors": ["json-parse-even-better-errors@4.0.0", "", {}, "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA=="], + + "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + + "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], + + "json5": ["json5@2.2.3", "", { "bin": "lib/cli.js" }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], + + "jsonfile": ["jsonfile@6.1.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ=="], + + "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], + + "kolorist": ["kolorist@1.8.0", "", {}, "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ=="], + + "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], + + "lightningcss": ["lightningcss@1.30.1", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-darwin-arm64": "1.30.1", "lightningcss-darwin-x64": "1.30.1", "lightningcss-freebsd-x64": "1.30.1", "lightningcss-linux-arm-gnueabihf": "1.30.1", "lightningcss-linux-arm64-gnu": "1.30.1", "lightningcss-linux-arm64-musl": "1.30.1", "lightningcss-linux-x64-gnu": "1.30.1", "lightningcss-linux-x64-musl": "1.30.1", "lightningcss-win32-arm64-msvc": "1.30.1", "lightningcss-win32-x64-msvc": "1.30.1" } }, "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg=="], + + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.30.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ=="], + + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.30.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA=="], + + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.30.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig=="], + + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.30.1", "", { "os": "linux", "cpu": "arm" }, "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q=="], + + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.30.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw=="], + + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.30.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ=="], + + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.30.1", "", { "os": "linux", "cpu": "x64" }, "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw=="], + + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.30.1", "", { "os": "linux", "cpu": "x64" }, "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ=="], + + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.30.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA=="], + + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.30.1", "", { "os": "win32", "cpu": "x64" }, "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg=="], + + "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], + + "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + + "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], + + "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + + "magic-string": ["magic-string@0.30.17", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA=="], + + "memorystream": ["memorystream@0.3.1", "", {}, "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw=="], + + "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], + + "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + + "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], + + "minizlib": ["minizlib@3.0.2", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA=="], + + "mitt": ["mitt@3.0.1", "", {}, "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="], + + "mkdirp": ["mkdirp@3.0.1", "", { "bin": "dist/cjs/src/bin.js" }, "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg=="], + + "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "muggle-string": ["muggle-string@0.4.1", "", {}, "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ=="], + + "nanoid": ["nanoid@3.3.11", "", { "bin": "bin/nanoid.cjs" }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + + "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], + + "node-releases": ["node-releases@2.0.19", "", {}, "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="], + + "npm-normalize-package-bin": ["npm-normalize-package-bin@4.0.0", "", {}, "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w=="], + + "npm-run-all2": ["npm-run-all2@7.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "cross-spawn": "^7.0.6", "memorystream": "^0.3.1", "minimatch": "^9.0.0", "pidtree": "^0.6.0", "read-package-json-fast": "^4.0.0", "shell-quote": "^1.7.3", "which": "^5.0.0" }, "bin": { "npm-run-all": "bin/npm-run-all/index.js", "npm-run-all2": "bin/npm-run-all/index.js", "run-p": "bin/run-p/index.js", "run-s": "bin/run-s/index.js" } }, "sha512-7tXR+r9hzRNOPNTvXegM+QzCuMjzUIIq66VDunL6j60O4RrExx32XUhlrS7UK4VcdGw5/Wxzb3kfNcFix9JKDA=="], + + "npm-run-path": ["npm-run-path@6.0.0", "", { "dependencies": { "path-key": "^4.0.0", "unicorn-magic": "^0.3.0" } }, "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA=="], + + "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], + + "open": ["open@10.1.2", "", { "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", "is-wsl": "^3.1.0" } }, "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw=="], + + "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], + + "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + + "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], + + "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], + + "parse-ms": ["parse-ms@4.0.0", "", {}, "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw=="], + + "path-browserify": ["path-browserify@1.0.1", "", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="], + + "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], + + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + + "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], + + "perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], + + "pidtree": ["pidtree@0.6.0", "", { "bin": "bin/pidtree.js" }, "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g=="], + + "postcss": ["postcss@8.5.5", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-d/jtm+rdNT8tpXuHY5MMtcbJFBkhXE6593XVR9UoGCH8jSFGci7jGvMGH5RYd5PBJW+00NZQt6gf7CbagJCrhg=="], + + "postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], + + "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], + + "pretty-ms": ["pretty-ms@9.2.0", "", { "dependencies": { "parse-ms": "^4.0.0" } }, "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg=="], + + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + + "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + + "read-package-json-fast": ["read-package-json-fast@4.0.0", "", { "dependencies": { "json-parse-even-better-errors": "^4.0.0", "npm-normalize-package-bin": "^4.0.0" } }, "sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg=="], + + "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], + + "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], + + "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="], + + "rollup": ["rollup@4.43.0", "", { "dependencies": { "@types/estree": "1.0.7" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.43.0", "@rollup/rollup-android-arm64": "4.43.0", "@rollup/rollup-darwin-arm64": "4.43.0", "@rollup/rollup-darwin-x64": "4.43.0", "@rollup/rollup-freebsd-arm64": "4.43.0", "@rollup/rollup-freebsd-x64": "4.43.0", "@rollup/rollup-linux-arm-gnueabihf": "4.43.0", "@rollup/rollup-linux-arm-musleabihf": "4.43.0", "@rollup/rollup-linux-arm64-gnu": "4.43.0", "@rollup/rollup-linux-arm64-musl": "4.43.0", "@rollup/rollup-linux-loongarch64-gnu": "4.43.0", "@rollup/rollup-linux-powerpc64le-gnu": "4.43.0", "@rollup/rollup-linux-riscv64-gnu": "4.43.0", "@rollup/rollup-linux-riscv64-musl": "4.43.0", "@rollup/rollup-linux-s390x-gnu": "4.43.0", "@rollup/rollup-linux-x64-gnu": "4.43.0", "@rollup/rollup-linux-x64-musl": "4.43.0", "@rollup/rollup-win32-arm64-msvc": "4.43.0", "@rollup/rollup-win32-ia32-msvc": "4.43.0", "@rollup/rollup-win32-x64-msvc": "4.43.0", "fsevents": "~2.3.2" }, "bin": "dist/bin/rollup" }, "sha512-wdN2Kd3Twh8MAEOEJZsuxuLKCsBEo4PVNLK6tQWAn10VhsVewQLzcucMgLolRlhFybGxfclbPeEYBaP6RvUFGg=="], + + "run-applescript": ["run-applescript@7.0.0", "", {}, "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A=="], + + "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], + + "semver": ["semver@7.7.2", "", { "bin": "bin/semver.js" }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], + + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + + "shell-quote": ["shell-quote@1.8.3", "", {}, "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw=="], + + "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + + "sirv": ["sirv@3.0.1", "", { "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" } }, "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "speakingurl": ["speakingurl@14.0.1", "", {}, "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ=="], + + "strip-final-newline": ["strip-final-newline@4.0.0", "", {}, "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw=="], + + "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], + + "superjson": ["superjson@2.2.2", "", { "dependencies": { "copy-anything": "^3.0.2" } }, "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q=="], + + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "tailwindcss": ["tailwindcss@4.1.11", "", {}, "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA=="], + + "tapable": ["tapable@2.2.2", "", {}, "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg=="], + + "tar": ["tar@7.4.3", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.0.1", "mkdirp": "^3.0.1", "yallist": "^5.0.0" } }, "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw=="], + + "tinyglobby": ["tinyglobby@0.2.14", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ=="], + + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + + "totalist": ["totalist@3.0.1", "", {}, "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ=="], + + "ts-api-utils": ["ts-api-utils@2.1.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ=="], + + "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], + + "typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], + + "typescript-eslint": ["typescript-eslint@8.34.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.34.0", "@typescript-eslint/parser": "8.34.0", "@typescript-eslint/utils": "8.34.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-MRpfN7uYjTrTGigFCt8sRyNqJFhjN0WwZecldaqhWm+wy0gaRt8Edb/3cuUy0zdq2opJWT6iXINKAtewnDOltQ=="], + + "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], + + "unicorn-magic": ["unicorn-magic@0.3.0", "", {}, "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="], + + "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], + + "update-browserslist-db": ["update-browserslist-db@1.1.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": "cli.js" }, "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw=="], + + "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], + + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "vite": ["vite@6.3.5", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": "bin/vite.js" }, "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ=="], + + "vite-hot-client": ["vite-hot-client@2.0.4", "", { "peerDependencies": { "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0" } }, "sha512-W9LOGAyGMrbGArYJN4LBCdOC5+Zwh7dHvOHC0KmGKkJhsOzaKbpo/jEjpPKVHIW0/jBWj8RZG0NUxfgA8BxgAg=="], + + "vite-plugin-inspect": ["vite-plugin-inspect@0.8.9", "", { "dependencies": { "@antfu/utils": "^0.7.10", "@rollup/pluginutils": "^5.1.3", "debug": "^4.3.7", "error-stack-parser-es": "^0.1.5", "fs-extra": "^11.2.0", "open": "^10.1.0", "perfect-debounce": "^1.0.0", "picocolors": "^1.1.1", "sirv": "^3.0.0" }, "peerDependencies": { "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.1" } }, "sha512-22/8qn+LYonzibb1VeFZmISdVao5kC22jmEKm24vfFE8siEn47EpVcCLYMv6iKOYMJfjSvSJfueOwcFCkUnV3A=="], + + "vite-plugin-vue-devtools": ["vite-plugin-vue-devtools@7.7.6", "", { "dependencies": { "@vue/devtools-core": "^7.7.6", "@vue/devtools-kit": "^7.7.6", "@vue/devtools-shared": "^7.7.6", "execa": "^9.5.2", "sirv": "^3.0.1", "vite-plugin-inspect": "0.8.9", "vite-plugin-vue-inspector": "^5.3.1" }, "peerDependencies": { "vite": "^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0" } }, "sha512-L7nPVM5a7lgit/Z+36iwoqHOaP3wxqVi1UvaDJwGCfblS9Y6vNqf32ILlzJVH9c47aHu90BhDXeZc+rgzHRHcw=="], + + "vite-plugin-vue-inspector": ["vite-plugin-vue-inspector@5.3.1", "", { "dependencies": { "@babel/core": "^7.23.0", "@babel/plugin-proposal-decorators": "^7.23.0", "@babel/plugin-syntax-import-attributes": "^7.22.5", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-transform-typescript": "^7.22.15", "@vue/babel-plugin-jsx": "^1.1.5", "@vue/compiler-dom": "^3.3.4", "kolorist": "^1.8.0", "magic-string": "^0.30.4" }, "peerDependencies": { "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0" } }, "sha512-cBk172kZKTdvGpJuzCCLg8lJ909wopwsu3Ve9FsL1XsnLBiRT9U3MePcqrgGHgCX2ZgkqZmAGR8taxw+TV6s7A=="], + + "vite-plugin-wasm": ["vite-plugin-wasm@3.5.0", "", { "peerDependencies": { "vite": "^2 || ^3 || ^4 || ^5 || ^6 || ^7" } }, "sha512-X5VWgCnqiQEGb+omhlBVsvTfxikKtoOgAzQ95+BZ8gQ+VfMHIjSHr0wyvXFQCa0eKQ0fKyaL0kWcEnYqBac4lQ=="], + + "vscode-uri": ["vscode-uri@3.1.0", "", {}, "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ=="], + + "vue": ["vue@3.5.16", "", { "dependencies": { "@vue/compiler-dom": "3.5.16", "@vue/compiler-sfc": "3.5.16", "@vue/runtime-dom": "3.5.16", "@vue/server-renderer": "3.5.16", "@vue/shared": "3.5.16" }, "peerDependencies": { "typescript": "*" } }, "sha512-rjOV2ecxMd5SiAmof2xzh2WxntRcigkX/He4YFJ6WdRvVUrbt6DxC1Iujh10XLl8xCDRDtGKMeO3D+pRQ1PP9w=="], + + "vue-eslint-parser": ["vue-eslint-parser@10.1.3", "", { "dependencies": { "debug": "^4.4.0", "eslint-scope": "^8.2.0", "eslint-visitor-keys": "^4.2.0", "espree": "^10.3.0", "esquery": "^1.6.0", "lodash": "^4.17.21", "semver": "^7.6.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0" } }, "sha512-dbCBnd2e02dYWsXoqX5yKUZlOt+ExIpq7hmHKPb5ZqKcjf++Eo0hMseFTZMLKThrUk61m+Uv6A2YSBve6ZvuDQ=="], + + "vue-router": ["vue-router@4.5.1", "", { "dependencies": { "@vue/devtools-api": "^6.6.4" }, "peerDependencies": { "vue": "^3.2.0" } }, "sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw=="], + + "vue-tsc": ["vue-tsc@2.2.10", "", { "dependencies": { "@volar/typescript": "~2.4.11", "@vue/language-core": "2.2.10" }, "peerDependencies": { "typescript": ">=5.0.0" }, "bin": "bin/vue-tsc.js" }, "sha512-jWZ1xSaNbabEV3whpIDMbjVSVawjAyW+x1n3JeGQo7S0uv2n9F/JMgWW90tGWNFRKya4YwKMZgCtr0vRAM7DeQ=="], + + "which": ["which@5.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ=="], + + "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], + + "xml-name-validator": ["xml-name-validator@4.0.0", "", {}, "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw=="], + + "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], + + "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], + + "yoctocolors": ["yoctocolors@2.1.1", "", {}, "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ=="], + + "@babel/core/semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@babel/helper-create-class-features-plugin/semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@babel/traverse/globals": ["globals@11.12.0", "", {}, "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="], + + "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + + "@eslint/config-array/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "@eslint/eslintrc/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "@eslint/plugin-kit/@eslint/core": ["@eslint/core@0.15.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw=="], + + "@humanfs/node/@humanwhocodes/retry": ["@humanwhocodes/retry@0.3.1", "", {}, "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA=="], + + "@rollup/pluginutils/picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], + + "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + + "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], + + "@vue/devtools-core/nanoid": ["nanoid@5.1.5", "", { "bin": "bin/nanoid.js" }, "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw=="], + + "@vue/language-core/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "cross-spawn/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "espree/eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], + + "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + + "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "npm-run-all2/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], + + "rollup/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + + "tinyglobby/fdir": ["fdir@6.4.6", "", { "peerDependencies": { "picomatch": "^3 || ^4" } }, "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w=="], + + "tinyglobby/picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], + + "vue-eslint-parser/eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], + + "@eslint/config-array/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + + "@eslint/eslintrc/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + + "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + + "@vue/language-core/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + + "cross-spawn/which/isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "npm-run-all2/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + } +} diff --git a/package-lock.json b/package-lock.json index 23d2458..3d14235 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,9 @@ "dependencies": { "@headlessui/vue": "^1.7.23", "@tailwindcss/vite": "^4.1.11", + "gl-matrix": "^3.4.4", "tailwindcss": "^4.1.11", + "vite-plugin-wasm": "^3.5.0", "vue": "^3.5.13", "vue-router": "^4.5.0" }, @@ -930,10 +932,11 @@ } }, "node_modules/@eslint/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -996,10 +999,11 @@ } }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1029,12 +1033,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.2.tgz", - "integrity": "sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.15.0", + "@eslint/core": "^0.15.2", "levn": "^0.4.1" }, "engines": { @@ -1042,10 +1047,11 @@ } }, "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.0.tgz", - "integrity": "sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@types/json-schema": "^7.0.15" }, @@ -1258,240 +1264,325 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.43.0.tgz", - "integrity": "sha512-Krjy9awJl6rKbruhQDgivNbD1WuLb8xAclM4IR4cN5pHGAs2oIMMQJEiC3IC/9TZJ+QZkmZhlMO/6MBGxPidpw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", "cpu": [ "arm" ], + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.43.0.tgz", - "integrity": "sha512-ss4YJwRt5I63454Rpj+mXCXicakdFmKnUNxr1dLK+5rv5FJgAxnN7s31a5VchRYxCFWdmnDWKd0wbAdTr0J5EA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.43.0.tgz", - "integrity": "sha512-eKoL8ykZ7zz8MjgBenEF2OoTNFAPFz1/lyJ5UmmFSz5jW+7XbH1+MAgCVHy72aG59rbuQLcJeiMrP8qP5d/N0A==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.43.0.tgz", - "integrity": "sha512-SYwXJgaBYW33Wi/q4ubN+ldWC4DzQY62S4Ll2dgfr/dbPoF50dlQwEaEHSKrQdSjC6oIe1WgzosoaNoHCdNuMg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.43.0.tgz", - "integrity": "sha512-SV+U5sSo0yujrjzBF7/YidieK2iF6E7MdF6EbYxNz94lA+R0wKl3SiixGyG/9Klab6uNBIqsN7j4Y/Fya7wAjQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "freebsd" ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.43.0.tgz", - "integrity": "sha512-J7uCsiV13L/VOeHJBo5SjasKiGxJ0g+nQTrBkAsmQBIdil3KhPnSE9GnRon4ejX1XDdsmK/l30IYLiAaQEO0Cg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "freebsd" ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.43.0.tgz", - "integrity": "sha512-gTJ/JnnjCMc15uwB10TTATBEhK9meBIY+gXP4s0sHD1zHOaIh4Dmy1X9wup18IiY9tTNk5gJc4yx9ctj/fjrIw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", "cpu": [ "arm" ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.43.0.tgz", - "integrity": "sha512-ZJ3gZynL1LDSIvRfz0qXtTNs56n5DI2Mq+WACWZ7yGHFUEirHBRt7fyIk0NsCKhmRhn7WAcjgSkSVVxKlPNFFw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", "cpu": [ "arm" ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.43.0.tgz", - "integrity": "sha512-8FnkipasmOOSSlfucGYEu58U8cxEdhziKjPD2FIa0ONVMxvl/hmONtX/7y4vGjdUhjcTHlKlDhw3H9t98fPvyA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.43.0.tgz", - "integrity": "sha512-KPPyAdlcIZ6S9C3S2cndXDkV0Bb1OSMsX0Eelr2Bay4EsF9yi9u9uzc9RniK3mcUGCLhWY9oLr6er80P5DE6XA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", "cpu": [ "arm64" ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "cpu": [ + "loong64" + ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.43.0.tgz", - "integrity": "sha512-HPGDIH0/ZzAZjvtlXj6g+KDQ9ZMHfSP553za7o2Odegb/BEfwJcR0Sw0RLNpQ9nC6Gy8s+3mSS9xjZ0n3rhcYg==", + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", "cpu": [ "loong64" ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.43.0.tgz", - "integrity": "sha512-gEmwbOws4U4GLAJDhhtSPWPXUzDfMRedT3hFMyRAvM9Mrnj+dJIFIeL7otsv2WF3D7GrV0GIewW0y28dOYWkmw==", + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", "cpu": [ "ppc64" ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.43.0.tgz", - "integrity": "sha512-XXKvo2e+wFtXZF/9xoWohHg+MuRnvO29TI5Hqe9xwN5uN8NKUYy7tXUG3EZAlfchufNCTHNGjEx7uN78KsBo0g==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", "cpu": [ "riscv64" ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.43.0.tgz", - "integrity": "sha512-ruf3hPWhjw6uDFsOAzmbNIvlXFXlBQ4nk57Sec8E8rUxs/AI4HD6xmiiasOOx/3QxS2f5eQMKTAwk7KHwpzr/Q==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", "cpu": [ "riscv64" ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.43.0.tgz", - "integrity": "sha512-QmNIAqDiEMEvFV15rsSnjoSmO0+eJLoKRD9EAa9rrYNwO/XRCtOGM3A5A0X+wmG+XRrw9Fxdsw+LnyYiZWWcVw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", "cpu": [ "s390x" ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.43.0.tgz", - "integrity": "sha512-jAHr/S0iiBtFyzjhOkAics/2SrXE092qyqEg96e90L3t9Op8OTzS6+IX0Fy5wCt2+KqeHAkti+eitV0wvblEoQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.43.0.tgz", - "integrity": "sha512-3yATWgdeXyuHtBhrLt98w+5fKurdqvs8B53LaoKD7P7H7FKOONLsBVMNl9ghPQZQuYcceV5CDyPfyfGpMWD9mQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.43.0.tgz", - "integrity": "sha512-wVzXp2qDSCOpcBCT5WRWLmpJRIzv23valvcTwMHEobkjippNf+C3ys/+wf07poPkeNix0paTNemB2XrHr2TnGw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.43.0.tgz", - "integrity": "sha512-fYCTEyzf8d+7diCw8b+asvWDCLMjsCEA8alvtAutqJOJp/wL5hs1rWSqJ1vkjgW0L2NB4bsYJrpKkiIPRR9dvw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", "cpu": [ "ia32" ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "cpu": [ + "x64" + ], + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.43.0.tgz", - "integrity": "sha512-SnGhLiE5rlK0ofq8kzuDkM0g7FN1s5VYY+YSMTibP7CqShxCQvqtNxTARS4xX4PFJfHjG0ZQYX9iGzI3FQh5Aw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -1795,8 +1886,7 @@ "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==" }, "node_modules/@types/json-schema": { "version": "7.0.15", @@ -2388,10 +2478,11 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2955,10 +3046,11 @@ } }, "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3249,6 +3341,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gl-matrix": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.4.tgz", + "integrity": "sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ==", + "license": "MIT" + }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -3498,10 +3596,11 @@ "dev": true }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -3833,10 +3932,11 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "dev": true, + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", @@ -3893,12 +3993,13 @@ } }, "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, + "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -3916,9 +4017,10 @@ } }, "node_modules/minizlib": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", - "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "license": "MIT", "dependencies": { "minipass": "^7.1.2" }, @@ -3932,20 +4034,6 @@ "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", "dev": true }, - "node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/mrmime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", @@ -4393,11 +4481,12 @@ "dev": true }, "node_modules/rollup": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.43.0.tgz", - "integrity": "sha512-wdN2Kd3Twh8MAEOEJZsuxuLKCsBEo4PVNLK6tQWAn10VhsVewQLzcucMgLolRlhFybGxfclbPeEYBaP6RvUFGg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", + "license": "MIT", "dependencies": { - "@types/estree": "1.0.7" + "@types/estree": "1.0.8" }, "bin": { "rollup": "dist/bin/rollup" @@ -4407,34 +4496,34 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.43.0", - "@rollup/rollup-android-arm64": "4.43.0", - "@rollup/rollup-darwin-arm64": "4.43.0", - "@rollup/rollup-darwin-x64": "4.43.0", - "@rollup/rollup-freebsd-arm64": "4.43.0", - "@rollup/rollup-freebsd-x64": "4.43.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.43.0", - "@rollup/rollup-linux-arm-musleabihf": "4.43.0", - "@rollup/rollup-linux-arm64-gnu": "4.43.0", - "@rollup/rollup-linux-arm64-musl": "4.43.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.43.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.43.0", - "@rollup/rollup-linux-riscv64-gnu": "4.43.0", - "@rollup/rollup-linux-riscv64-musl": "4.43.0", - "@rollup/rollup-linux-s390x-gnu": "4.43.0", - "@rollup/rollup-linux-x64-gnu": "4.43.0", - "@rollup/rollup-linux-x64-musl": "4.43.0", - "@rollup/rollup-win32-arm64-msvc": "4.43.0", - "@rollup/rollup-win32-ia32-msvc": "4.43.0", - "@rollup/rollup-win32-x64-msvc": "4.43.0", + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", "fsevents": "~2.3.2" } }, - "node_modules/rollup/node_modules/@types/estree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==" - }, "node_modules/run-applescript": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", @@ -4620,15 +4709,15 @@ } }, "node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "version": "7.5.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.11.tgz", + "integrity": "sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", + "minizlib": "^3.1.0", "yallist": "^5.0.0" }, "engines": { @@ -4835,9 +4924,10 @@ "dev": true }, "node_modules/vite": { - "version": "6.3.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", - "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", + "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", + "license": "MIT", "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", @@ -4991,6 +5081,15 @@ "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0" } }, + "node_modules/vite-plugin-wasm": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/vite-plugin-wasm/-/vite-plugin-wasm-3.5.0.tgz", + "integrity": "sha512-X5VWgCnqiQEGb+omhlBVsvTfxikKtoOgAzQ95+BZ8gQ+VfMHIjSHr0wyvXFQCa0eKQ0fKyaL0kWcEnYqBac4lQ==", + "license": "MIT", + "peerDependencies": { + "vite": "^2 || ^3 || ^4 || ^5 || ^6 || ^7" + } + }, "node_modules/vite/node_modules/fdir": { "version": "6.4.6", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", diff --git a/package.json b/package.json index 7f9773f..fb49eff 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,9 @@ "dependencies": { "@headlessui/vue": "^1.7.23", "@tailwindcss/vite": "^4.1.11", + "gl-matrix": "^3.4.4", "tailwindcss": "^4.1.11", + "vite-plugin-wasm": "^3.5.0", "vue": "^3.5.13", "vue-router": "^4.5.0" }, diff --git a/src/api/offstylesApi.ts b/src/api/offstylesApi.ts index cd72677..89a9de1 100644 --- a/src/api/offstylesApi.ts +++ b/src/api/offstylesApi.ts @@ -1,8 +1,8 @@ -import { Style } from '@/types/Style'; -import Api from './api'; -import type { Time } from '@/types/Time'; -import type { User } from '@/types/User'; -import type { RecentModAction, ModerationTargetFilter } from '@/types/moderation'; +import { Style } from "@/types/Style"; +import Api from "./api"; +import type { Time } from "@/types/Time"; +import type { User } from "@/types/User"; +import type { RecentModAction, ModerationTargetFilter } from "@/types/moderation"; // Add new interfaces based on the API spec export interface RankAwareRecord extends Time { @@ -73,54 +73,72 @@ export interface ServerKeyInfo { } class OffstylesApi extends Api { - static offstylesApiUrl = import.meta.env.DEV ? 'http://127.0.0.1:8000/api' : 'https://offstyles.tommyy.dev/api'; + static offstylesApiUrl = import.meta.env.DEV ? "/api" : "https://offstyles.tommyy.dev/api"; // Fixed method signature to require style parameter - static async getTimesByMap(mapName: string, style: number = Style.normal, steamid?: string, limit: number = 50, page: number = 1): Promise { + static async getTimesByMap( + mapName: string, + style: number = Style.normal, + steamid?: string, + limit: number = 50, + page: number = 1, + ): Promise { const params = new URLSearchParams({ map: mapName, style: style.toString(), limit: limit.toString(), - page: page.toString() + page: page.toString(), }); if (steamid) { - params.append('steamid', steamid); + params.append("steamid", steamid); } this.url = `${this.offstylesApiUrl}/map?${params.toString()}`; return await this.fetchFromUrl(); } - static async getTimesByPlayer(steamID: string, map?: string, style: number = Style.all, limit: number = 50, page: number = 1, best: boolean = false): Promise { + static async getTimesByPlayer( + steamID: string, + map?: string, + style: number = Style.all, + limit: number = 50, + page: number = 1, + best: boolean = false, + ): Promise { const params = new URLSearchParams({ steamid: steamID, limit: limit.toString(), page: page.toString(), - best: best.toString() + best: best.toString(), }); if (map) { - params.append('map', map); + params.append("map", map); } if (style !== undefined && style !== Style.all) { - params.append('style', style.toString()); + params.append("style", style.toString()); } this.url = `${this.offstylesApiUrl}/times?${params.toString()}`; return await this.fetchFromUrl(); } - static async getRecentTimes(style: number = Style.all, limit: number = 15, page: number = 1, wr: boolean = true): Promise { + static async getRecentTimes( + style: number = Style.all, + limit: number = 15, + page: number = 1, + wr: boolean = true, + ): Promise { const params = new URLSearchParams({ limit: limit.toString(), page: page.toString(), - wr: wr.toString() + wr: wr.toString(), }); if (style !== undefined && style !== Style.all) { - params.append('style', style.toString()); + params.append("style", style.toString()); } this.url = `${this.offstylesApiUrl}/recent?${params.toString()}`; @@ -130,7 +148,7 @@ class OffstylesApi extends Api { // New methods based on the API spec static async getMapsForAutoComplete(text: string): Promise { const params = new URLSearchParams({ - text: text + text: text, }); this.url = `${this.offstylesApiUrl}/autocomplete_maps?${params.toString()}`; @@ -139,7 +157,7 @@ class OffstylesApi extends Api { static async getPlayersForAutoComplete(text: string): Promise<[string, string][]> { const params = new URLSearchParams({ - text: text + text: text, }); this.url = `${this.offstylesApiUrl}/autocomplete_players?${params.toString()}`; @@ -148,7 +166,7 @@ class OffstylesApi extends Api { static async getSingleTime(id: string): Promise { const params = new URLSearchParams({ - id: id + id: id, }); this.url = `${this.offstylesApiUrl}/time?${params.toString()}`; @@ -162,11 +180,11 @@ class OffstylesApi extends Api { static async downloadReplay(id: string): Promise { const params = new URLSearchParams({ - id: id + id: id, }); const response = await fetch(`${this.offstylesApiUrl}/replay?${params.toString()}`, { - credentials: 'include' // Include cookies for session authentication + credentials: "include", // Include cookies for session authentication }); if (!response.ok) { @@ -183,19 +201,23 @@ class OffstylesApi extends Api { } // Moderation methods (require authentication) - static async moderatePlayer(steamId: string, action: 'ban' | 'unban', reason: string): Promise { + static async moderatePlayer( + steamId: string, + action: "ban" | "unban", + reason: string, + ): Promise { const params = new URLSearchParams({ id: steamId, - action: action + action: action, }); const response = await fetch(`${this.offstylesApiUrl}/moderate_player?${params.toString()}`, { - method: 'POST', + method: "POST", headers: { - 'Content-Type': 'text/plain', + "Content-Type": "text/plain", }, body: reason, - credentials: 'include' // Include cookies for session authentication + credentials: "include", // Include cookies for session authentication }); if (!response.ok) { @@ -209,24 +231,32 @@ class OffstylesApi extends Api { } } - static async moderateRecord(recordId: string, action: 'invalidate' | 'revalidate', reason: string): Promise { + static async moderateRecord( + recordId: string, + action: "invalidate" | "revalidate", + reason: string, + ): Promise { return this.moderateRecords([recordId], action, reason); } - // Bulk moderation method for multiple records - static async moderateRecords(recordIds: string[], action: 'invalidate' | 'revalidate', reason: string): Promise { + // Bulk moderation method for multiple records + static async moderateRecords( + recordIds: string[], + action: "invalidate" | "revalidate", + reason: string, + ): Promise { const params = new URLSearchParams({ action: action, - ids: recordIds.join(',') // Comma-separated values for the ids parameter + ids: recordIds.join(","), // Comma-separated values for the ids parameter }); const response = await fetch(`${this.offstylesApiUrl}/moderate_record?${params.toString()}`, { - method: 'POST', + method: "POST", headers: { - 'Content-Type': 'text/plain', + "Content-Type": "text/plain", }, body: reason, - credentials: 'include' // Include cookies for session authentication + credentials: "include", // Include cookies for session authentication }); if (!response.ok) { @@ -243,7 +273,7 @@ class OffstylesApi extends Api { // Get user profile data static async getUserProfile(steamId: string): Promise { const params = new URLSearchParams({ - steamid: steamId + steamid: steamId, }); const response = await fetch(`${this.offstylesApiUrl}/profile?${params.toString()}`); @@ -265,7 +295,7 @@ class OffstylesApi extends Api { static async getCurrentUser(): Promise { try { const response = await fetch(`${this.offstylesApiUrl}/profile`, { - credentials: 'include' // Include cookies for session authentication + credentials: "include", // Include cookies for session authentication }); if (response.ok) { @@ -274,7 +304,7 @@ class OffstylesApi extends Api { return null; // Not authenticated or user not found } } catch (error) { - console.error('Error fetching current user:', error); + console.error("Error fetching current user:", error); return null; } } @@ -290,11 +320,11 @@ class OffstylesApi extends Api { // Get moderation logs static async getModerationLogs(id: string): Promise { const params = new URLSearchParams({ - id: id + id: id, }); const response = await fetch(`${this.offstylesApiUrl}/mod_logs?${params.toString()}`, { - credentials: 'include' // Include cookies for session authentication + credentials: "include", // Include cookies for session authentication }); if (!response.ok) { @@ -322,27 +352,27 @@ class OffstylesApi extends Api { name: string, owner: string | undefined, servers: ServerInfo[], - permissions?: number + permissions?: number, ): Promise { const params = new URLSearchParams(); if (permissions !== undefined) { - params.append('permissions', permissions.toString()); + params.append("permissions", permissions.toString()); } const serverData = { name: name, owner: owner || null, - servers: servers + servers: servers, }; const response = await fetch(`${this.offstylesApiUrl}/admin/create_key?${params.toString()}`, { - method: 'POST', + method: "POST", headers: { - 'Content-Type': 'application/json', + "Content-Type": "application/json", }, body: JSON.stringify(serverData), - credentials: 'include' + credentials: "include", }); if (!response.ok) { @@ -362,16 +392,16 @@ class OffstylesApi extends Api { // Admin methods (require admin permissions) static async createApiKey(server: string, permissions?: number): Promise { const params = new URLSearchParams({ - server: server + server: server, }); if (permissions !== undefined) { - params.append('permissions', permissions.toString()); + params.append("permissions", permissions.toString()); } const response = await fetch(`${this.offstylesApiUrl}/admin/create_key?${params.toString()}`, { - method: 'POST', - credentials: 'include' // Include cookies for session authentication + method: "POST", + credentials: "include", // Include cookies for session authentication }); if (!response.ok) { @@ -390,12 +420,12 @@ class OffstylesApi extends Api { static async updateApiKey(server: string, permissions: number): Promise { const params = new URLSearchParams({ server: server, - permissions: permissions.toString() + permissions: permissions.toString(), }); const response = await fetch(`${this.offstylesApiUrl}/update_key?${params.toString()}`, { - method: 'POST', - credentials: 'include' // Include cookies for session authentication + method: "POST", + credentials: "include", // Include cookies for session authentication }); if (!response.ok) { @@ -413,11 +443,11 @@ class OffstylesApi extends Api { static async getServerKeyInfo(serverName: string): Promise { const params = new URLSearchParams({ - name: serverName + name: serverName, }); const response = await fetch(`${this.offstylesApiUrl}/server_key?${params.toString()}`, { - credentials: 'include' // Include cookies for session authentication + credentials: "include", // Include cookies for session authentication }); if (!response.ok) { @@ -435,12 +465,12 @@ class OffstylesApi extends Api { static async deleteApiKey(serverName: string): Promise { const params = new URLSearchParams({ - name: serverName + name: serverName, }); const response = await fetch(`${this.offstylesApiUrl}/delete_key?${params.toString()}`, { - method: 'DELETE', - credentials: 'include' // Include cookies for session authentication + method: "DELETE", + credentials: "include", // Include cookies for session authentication }); if (!response.ok) { @@ -458,15 +488,17 @@ class OffstylesApi extends Api { return responseText === "true"; } - static async getRecentModerationLogs(filter?: ModerationTargetFilter): Promise { + static async getRecentModerationLogs( + filter?: ModerationTargetFilter, + ): Promise { const params = new URLSearchParams(); if (filter) { - params.append('filter', filter); + params.append("filter", filter); } const response = await fetch(`${this.offstylesApiUrl}/mod_logs_recent?${params.toString()}`, { - credentials: 'include' // Include cookies for session authentication + credentials: "include", // Include cookies for session authentication }); if (!response.ok) { @@ -483,20 +515,24 @@ class OffstylesApi extends Api { } // Reverse moderator actions - static async reverseModerationActions(moderatorSteamId: string, timeframeHours: number, reason: string): Promise { + static async reverseModerationActions( + moderatorSteamId: string, + timeframeHours: number, + reason: string, + ): Promise { const data = { moderator_steam_id: moderatorSteamId, timeframe_hours: timeframeHours, - reason: reason + reason: reason, }; const response = await fetch(`${this.offstylesApiUrl}/reverse_moderator_actions`, { - method: 'POST', + method: "POST", headers: { - 'Content-Type': 'application/json', + "Content-Type": "application/json", }, body: JSON.stringify(data), - credentials: 'include' // Include cookies for session authentication + credentials: "include", // Include cookies for session authentication }); if (!response.ok) { @@ -515,17 +551,20 @@ class OffstylesApi extends Api { // New server management methods static async addServerSubserver(targetId: string, servers: ServerInfo[]): Promise { const params = new URLSearchParams({ - target: targetId + target: targetId, }); - const response = await fetch(`${this.offstylesApiUrl}/servers/subservers/add?${params.toString()}`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', + const response = await fetch( + `${this.offstylesApiUrl}/servers/subservers/add?${params.toString()}`, + { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(servers), + credentials: "include", }, - body: JSON.stringify(servers), - credentials: 'include' - }); + ); if (!response.ok) { const errorText = await response.text(); @@ -540,19 +579,25 @@ class OffstylesApi extends Api { return await response.json(); } - static async removeServerSubserver(targetId: string, servers: ServerInfo[]): Promise { + static async removeServerSubserver( + targetId: string, + servers: ServerInfo[], + ): Promise { const params = new URLSearchParams({ - target: targetId + target: targetId, }); - const response = await fetch(`${this.offstylesApiUrl}/servers/subservers/remove?${params.toString()}`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', + const response = await fetch( + `${this.offstylesApiUrl}/servers/subservers/remove?${params.toString()}`, + { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(servers), + credentials: "include", }, - body: JSON.stringify(servers), - credentials: 'include' - }); + ); if (!response.ok) { const errorText = await response.text(); @@ -567,19 +612,25 @@ class OffstylesApi extends Api { return await response.json(); } - static async updateServerSubservers(targetId: string, servers: ServerInfo[]): Promise { + static async updateServerSubservers( + targetId: string, + servers: ServerInfo[], + ): Promise { const params = new URLSearchParams({ - target: targetId + target: targetId, }); - const response = await fetch(`${this.offstylesApiUrl}/servers/subservers/update?${params.toString()}`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', + const response = await fetch( + `${this.offstylesApiUrl}/servers/subservers/update?${params.toString()}`, + { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(servers), + credentials: "include", }, - body: JSON.stringify(servers), - credentials: 'include' - }); + ); if (!response.ok) { const errorText = await response.text(); @@ -597,12 +648,12 @@ class OffstylesApi extends Api { static async updateServerName(targetId: string, name: string): Promise { const params = new URLSearchParams({ target: targetId, - name: name + name: name, }); const response = await fetch(`${this.offstylesApiUrl}/servers/name?${params.toString()}`, { - method: 'POST', - credentials: 'include' + method: "POST", + credentials: "include", }); if (!response.ok) { @@ -618,15 +669,18 @@ class OffstylesApi extends Api { return await response.json(); } - static async updateServerOwner(targetId: string, ownerSteamId: string): Promise { + static async updateServerOwner( + targetId: string, + ownerSteamId: string, + ): Promise { const params = new URLSearchParams({ target: targetId, - owner: ownerSteamId + owner: ownerSteamId, }); const response = await fetch(`${this.offstylesApiUrl}/servers/owner?${params.toString()}`, { - method: 'POST', - credentials: 'include' + method: "POST", + credentials: "include", }); if (!response.ok) { diff --git a/src/replay-viewer/LoadingModal.vue b/src/replay-viewer/LoadingModal.vue new file mode 100644 index 0000000..b1935c1 --- /dev/null +++ b/src/replay-viewer/LoadingModal.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/src/replay-viewer/ReplayViewerOverlay.vue b/src/replay-viewer/ReplayViewerOverlay.vue new file mode 100644 index 0000000..fdb97ac --- /dev/null +++ b/src/replay-viewer/ReplayViewerOverlay.vue @@ -0,0 +1,497 @@ + + + diff --git a/src/replay-viewer/ViewerControls.vue b/src/replay-viewer/ViewerControls.vue new file mode 100644 index 0000000..891bfaa --- /dev/null +++ b/src/replay-viewer/ViewerControls.vue @@ -0,0 +1,245 @@ + + + + + diff --git a/src/replay-viewer/ViewerHUD.vue b/src/replay-viewer/ViewerHUD.vue new file mode 100644 index 0000000..4caac7b --- /dev/null +++ b/src/replay-viewer/ViewerHUD.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/src/replay-viewer/camera.ts b/src/replay-viewer/camera.ts new file mode 100644 index 0000000..c0bb357 --- /dev/null +++ b/src/replay-viewer/camera.ts @@ -0,0 +1,145 @@ +import { mat4, vec3 } from 'gl-matrix'; +import type { PlaybackState } from './playback'; + +export class Camera { + readonly viewMatrix = mat4.create(); + private freecam = false; + + // Freecam state + private pos = vec3.fromValues(0, 0, 0); + private yaw = 0; + private pitch = 0; + private keys: Record = {}; + private speed = 800; + private sensitivity = 0.002; + private canvas: HTMLCanvasElement; + + private onKeyDown: (e: KeyboardEvent) => void; + private onKeyUp: (e: KeyboardEvent) => void; + private onMouseMove: (e: MouseEvent) => void; + + constructor(canvas: HTMLCanvasElement) { + this.canvas = canvas; + + this.onKeyDown = (e: KeyboardEvent) => { + this.keys[e.key.toLowerCase()] = true; + }; + this.onKeyUp = (e: KeyboardEvent) => { + this.keys[e.key.toLowerCase()] = false; + }; + this.onMouseMove = (e: MouseEvent) => { + if (!this.freecam || !document.pointerLockElement) return; + this.yaw -= e.movementX * this.sensitivity; + this.pitch -= e.movementY * this.sensitivity; + this.pitch = Math.max(-Math.PI / 2 + 0.01, Math.min(Math.PI / 2 - 0.01, this.pitch)); + }; + + document.addEventListener('keydown', this.onKeyDown); + document.addEventListener('keyup', this.onKeyUp); + canvas.addEventListener('mousemove', this.onMouseMove); + canvas.addEventListener('click', () => { + if (this.freecam && !document.pointerLockElement) { + canvas.requestPointerLock(); + } + }); + } + + get isFreecam(): boolean { + return this.freecam; + } + + toggleFreecam(): void { + this.freecam = !this.freecam; + if (this.freecam) { + this.canvas.requestPointerLock(); + } else { + document.exitPointerLock(); + } + } + + forceFreecam(): void { + this.freecam = true; + } + + getPosition(): Float32Array { + return new Float32Array([this.pos[0], this.pos[1], this.pos[2]]); + } + + update(dt: number, state: PlaybackState): void { + if (this.freecam) { + this.updateFreecam(dt); + } else { + this.updateFollowCam(state); + } + } + + private updateFollowCam(state: PlaybackState): void { + const px = state.position[0]; + const py = state.position[1]; + const pz = state.position[2] + state.eyeHeight; + + // Source Engine angles: yaw is angles[1], pitch is angles[0] + const yaw = state.angles[1] * Math.PI / 180; + const pitch = -state.angles[0] * Math.PI / 180; + + const cosPitch = Math.cos(pitch); + const fx = Math.cos(yaw) * cosPitch; + const fy = Math.sin(yaw) * cosPitch; + const fz = Math.sin(pitch); + + mat4.lookAt( + this.viewMatrix, + [px, py, pz], + [px + fx, py + fy, pz + fz], + [0, 0, 1], + ); + } + + private updateFreecam(dt: number): void { + const spd = this.keys['shift'] ? this.speed * 3 : this.speed; + + const cosPitch = Math.cos(this.pitch); + const fx = Math.cos(this.yaw) * cosPitch; + const fy = Math.sin(this.yaw) * cosPitch; + const fz = Math.sin(this.pitch); + + // Right vector (perpendicular to forward in XY plane) + const rx = Math.cos(this.yaw - Math.PI / 2); + const ry = Math.sin(this.yaw - Math.PI / 2); + + if (this.keys['w']) { + this.pos[0] += fx * spd * dt; + this.pos[1] += fy * spd * dt; + this.pos[2] += fz * spd * dt; + } + if (this.keys['s']) { + this.pos[0] -= fx * spd * dt; + this.pos[1] -= fy * spd * dt; + this.pos[2] -= fz * spd * dt; + } + if (this.keys['a']) { + this.pos[0] -= rx * spd * dt; + this.pos[1] -= ry * spd * dt; + } + if (this.keys['d']) { + this.pos[0] += rx * spd * dt; + this.pos[1] += ry * spd * dt; + } + + mat4.lookAt( + this.viewMatrix, + this.pos as unknown as vec3, + [this.pos[0] + fx, this.pos[1] + fy, this.pos[2] + fz], + [0, 0, 1], + ); + } + + dispose(): void { + document.removeEventListener('keydown', this.onKeyDown); + document.removeEventListener('keyup', this.onKeyUp); + this.canvas.removeEventListener('mousemove', this.onMouseMove); + if (document.pointerLockElement === this.canvas) { + document.exitPointerLock(); + } + } +} diff --git a/src/replay-viewer/fetchWithProgress.ts b/src/replay-viewer/fetchWithProgress.ts new file mode 100644 index 0000000..85ecfe5 --- /dev/null +++ b/src/replay-viewer/fetchWithProgress.ts @@ -0,0 +1,42 @@ +export async function fetchWithProgress( + url: string, + onProgress: (received: number, total: number | null) => void, + credentials: RequestCredentials = 'same-origin', +): Promise { + const response = await fetch(url, { credentials }); + if (!response.ok) { + throw new Error(`Failed to fetch ${url}: ${response.status} ${response.statusText}`); + } + + // If no body stream available, fall back to simple arrayBuffer + if (!response.body) { + onProgress(0, null); + return response.arrayBuffer(); + } + + const contentLength = response.headers.get('content-length'); + const total = contentLength ? parseInt(contentLength, 10) : null; + + // Always use streaming reader so progress updates even without Content-Length + const reader = response.body.getReader(); + const chunks: Uint8Array[] = []; + let received = 0; + + onProgress(0, total); + + while (true) { + const { done, value } = await reader.read(); + if (done) break; + chunks.push(value); + received += value.length; + onProgress(received, total); + } + + const result = new Uint8Array(received); + let offset = 0; + for (const chunk of chunks) { + result.set(chunk, offset); + offset += chunk.length; + } + return result.buffer; +} diff --git a/src/replay-viewer/math.ts b/src/replay-viewer/math.ts new file mode 100644 index 0000000..4aab518 --- /dev/null +++ b/src/replay-viewer/math.ts @@ -0,0 +1,43 @@ +export function deltaAngle(a: number, b: number): number { + return (b - a) - Math.floor((b - a + 180) / 360) * 360; +} + +export function hermiteValue(p0: number, p1: number, p2: number, p3: number, t: number): number { + const m0 = (p2 - p0) * 0.5; + const m1 = (p3 - p1) * 0.5; + const t2 = t * t; + const t3 = t * t * t; + return (2 * t3 - 3 * t2 + 1) * p1 + (t3 - 2 * t2 + t) * m0 + + (-2 * t3 + 3 * t2) * p2 + (t3 - t2) * m1; +} + +export function hermitePosition( + p0: Float32Array, p1: Float32Array, p2: Float32Array, p3: Float32Array, + t: number, out: Float32Array +): void { + out[0] = hermiteValue(p0[0], p1[0], p2[0], p3[0], t); + out[1] = hermiteValue(p0[1], p1[1], p2[1], p3[1], t); + out[2] = hermiteValue(p0[2], p1[2], p2[2], p3[2], t); +} + +export function hermiteAngles( + a0: Float32Array, a1: Float32Array, a2: Float32Array, a3: Float32Array, + t: number, out: Float32Array +): void { + // Pitch + out[0] = hermiteValue( + a1[0] + deltaAngle(a1[0], a0[0]), + a1[0], + a1[0] + deltaAngle(a1[0], a2[0]), + a1[0] + deltaAngle(a1[0], a3[0]), + t + ); + // Yaw + out[1] = hermiteValue( + a1[1] + deltaAngle(a1[1], a0[1]), + a1[1], + a1[1] + deltaAngle(a1[1], a2[1]), + a1[1] + deltaAngle(a1[1], a3[1]), + t + ); +} diff --git a/src/replay-viewer/playback.ts b/src/replay-viewer/playback.ts new file mode 100644 index 0000000..e6ea603 --- /dev/null +++ b/src/replay-viewer/playback.ts @@ -0,0 +1,211 @@ +import { hermitePosition, hermiteAngles, hermiteValue } from './math'; + +// Button flags +export const IN_JUMP = 1 << 1; +export const IN_DUCK = 1 << 2; +export const IN_FORWARD = 1 << 3; +export const IN_BACK = 1 << 4; +export const IN_MOVELEFT = 1 << 9; +export const IN_MOVERIGHT = 1 << 10; + +// Entity flags +export const FL_DUCKING = 1 << 1; + +export interface PlaybackState { + tick: number; + position: Float32Array; // [x, y, z] + angles: Float32Array; // [pitch, yaw] + buttons: number; + flags: number; + eyeHeight: number; + speed: number; + isPlaying: boolean; + playbackRate: number; + totalTicks: number; + tickRate: number; + time: number; +} + +export class PlaybackEngine { + private positions: Float32Array; + private angles: Float32Array; + private buttons: Int32Array; + private flags: Int32Array; + private tickCount: number; + readonly tickRate: number; + readonly replayTime: number; + + tick = 0; + isPlaying = true; + playbackRate = 1.0; + private spareTime = 0; + private pauseTicks = 100; + + // Temp buffers for interpolation + private tempPos = [new Float32Array(3), new Float32Array(3), new Float32Array(3), new Float32Array(3)]; + private tempAng = [new Float32Array(2), new Float32Array(2), new Float32Array(2), new Float32Array(2)]; + + // Output state + readonly state: PlaybackState; + + constructor( + positions: Float32Array, + angles: Float32Array, + buttons: Int32Array, + flags: Int32Array, + tickCount: number, + tickRate: number, + replayTime: number, + ) { + this.positions = positions; + this.angles = angles; + this.buttons = buttons; + this.flags = flags; + this.tickCount = tickCount; + this.tickRate = tickRate; + this.replayTime = replayTime; + + this.state = { + tick: 0, + position: new Float32Array(3), + angles: new Float32Array(2), + buttons: 0, + flags: 0, + eyeHeight: 64, + speed: 0, + isPlaying: true, + playbackRate: 1.0, + totalTicks: tickCount, + tickRate, + time: replayTime, + }; + } + + private clampTick(tick: number): number { + return Math.max(0, Math.min(tick, this.tickCount - 1)); + } + + private getTickPos(tick: number, out: Float32Array): void { + const t = this.clampTick(tick); + const off = t * 3; + out[0] = this.positions[off]; + out[1] = this.positions[off + 1]; + out[2] = this.positions[off + 2]; + } + + private getTickAngles(tick: number, out: Float32Array): void { + const t = this.clampTick(tick); + const off = t * 2; + out[0] = this.angles[off]; + out[1] = this.angles[off + 1]; + } + + private getTickFlags(tick: number): number { + return this.flags[this.clampTick(tick)]; + } + + private getTickButtons(tick: number): number { + return this.buttons[this.clampTick(tick)]; + } + + private getEyeHeight(flags: number): number { + return (flags & FL_DUCKING) !== 0 ? 46 : 64; + } + + setTick(tick: number): void { + this.tick = tick; + this.spareTime = 0; + } + + setPlaying(isPlaying: boolean): void { + this.isPlaying = isPlaying; + if (!isPlaying) { + this.spareTime = 0; + } + } + + togglePlaying(): void { + this.setPlaying(!this.isPlaying); + } + + setPlaybackRate(rate: number): void { + this.playbackRate = rate; + } + + update(dt: number): void { + const tickPeriod = 1.0 / this.tickRate; + + if (this.isPlaying) { + this.spareTime += dt * this.playbackRate; + + while (this.spareTime > tickPeriod) { + this.spareTime -= tickPeriod; + this.tick += 1; + if (this.tick > this.tickCount + this.pauseTicks * 2) { + this.tick = -this.pauseTicks; + } + } + + while (this.spareTime < 0) { + this.spareTime += tickPeriod; + this.tick -= 1; + if (this.tick < -this.pauseTicks * 2) { + this.tick = this.tickCount + this.pauseTicks; + } + } + } else { + this.spareTime = 0; + } + + const clamped = this.clampTick(this.tick); + const curFlags = this.getTickFlags(this.tick); + const curButtons = this.getTickButtons(this.tick); + let eyeHeight = this.getEyeHeight(curFlags); + + // Get base position/angles + this.getTickPos(this.tick, this.state.position); + this.getTickAngles(this.tick, this.state.angles); + + // Hermite interpolation + if (this.spareTime >= 0 && this.spareTime <= tickPeriod) { + const t = this.spareTime / tickPeriod; + + this.getTickPos(this.tick - 1, this.tempPos[0]); + this.getTickPos(this.tick, this.tempPos[1]); + this.getTickPos(this.tick + 1, this.tempPos[2]); + this.getTickPos(this.tick + 2, this.tempPos[3]); + + this.getTickAngles(this.tick - 1, this.tempAng[0]); + this.getTickAngles(this.tick, this.tempAng[1]); + this.getTickAngles(this.tick + 1, this.tempAng[2]); + this.getTickAngles(this.tick + 2, this.tempAng[3]); + + hermitePosition(this.tempPos[0], this.tempPos[1], this.tempPos[2], this.tempPos[3], t, this.state.position); + hermiteAngles(this.tempAng[0], this.tempAng[1], this.tempAng[2], this.tempAng[3], t, this.state.angles); + + eyeHeight = hermiteValue( + this.getEyeHeight(this.getTickFlags(this.tick - 1)), + this.getEyeHeight(curFlags), + this.getEyeHeight(this.getTickFlags(this.tick + 1)), + this.getEyeHeight(this.getTickFlags(this.tick + 2)), + t, + ); + } + + // Compute speed (horizontal velocity between ticks) + const prevTick = this.clampTick(clamped - 1); + const p0 = prevTick * 3; + const p1 = clamped * 3; + const dx = this.positions[p1] - this.positions[p0]; + const dy = this.positions[p1 + 1] - this.positions[p0 + 1]; + const speed = Math.sqrt(dx * dx + dy * dy) * this.tickRate; + + this.state.tick = clamped; + this.state.buttons = curButtons; + this.state.flags = curFlags; + this.state.eyeHeight = eyeHeight; + this.state.speed = speed; + this.state.isPlaying = this.isPlaying; + this.state.playbackRate = this.playbackRate; + } +} diff --git a/src/replay-viewer/renderer.ts b/src/replay-viewer/renderer.ts new file mode 100644 index 0000000..5a15dde --- /dev/null +++ b/src/replay-viewer/renderer.ts @@ -0,0 +1,833 @@ +import { mat4 } from 'gl-matrix'; +import type { BspMesh } from './wasm/bhop_replay_viewer_wasm'; + +// Vertex stride: 14 floats = [x, y, z, nx, ny, nz, lm_u, lm_v, tex_u, tex_v, atlas_min_u, atlas_min_v, atlas_scale_u, atlas_scale_v] +const STRIDE = 14 * 4; // 56 bytes + +const MAP_VERT = ` +attribute vec3 aPosition; +attribute vec3 aNormal; +attribute vec2 aLightmapUV; +attribute vec2 aTexUV; +attribute vec2 aAtlasMin; +attribute vec2 aAtlasScale; +uniform mat4 uProjection; +uniform mat4 uView; +uniform vec3 uCameraPos; +varying vec3 vNormal; +varying vec2 vLightmapUV; +varying vec2 vTexUV; +varying vec2 vAtlasMin; +varying vec2 vAtlasScale; +varying float vDist; +void main() { + vNormal = aNormal; + vLightmapUV = aLightmapUV; + vTexUV = aTexUV; + vAtlasMin = aAtlasMin; + vAtlasScale = aAtlasScale; + vDist = length(aPosition - uCameraPos); + gl_Position = uProjection * uView * vec4(aPosition, 1.0); +} +`; + +const MAP_FRAG = ` +#extension GL_OES_standard_derivatives : enable +#extension GL_EXT_shader_texture_lod : enable +precision mediump float; +varying vec3 vNormal; +varying vec2 vLightmapUV; +varying vec2 vTexUV; +varying vec2 vAtlasMin; +varying vec2 vAtlasScale; +varying float vDist; +uniform sampler2D uLightmap; +uniform sampler2D uTexture; +uniform vec2 uAtlasSize; +uniform float uDebugMode; +uniform float uAlphaOverride; +uniform float uTime; +uniform float uIsWater; + +const float RGBM_SCALE = 6.0; +const float MAX_SAFE_TEXELS = 8.0; // must match TEX_PAD in bsp.rs + +void main() { + vec3 n = normalize(vNormal); + if (!gl_FrontFacing) n = -n; + + // Sample base texture with per-pixel tiling + float hasTex = step(0.001, vAtlasScale.x + vAtlasScale.y); + + vec2 baseTexUV = vTexUV; + if (uIsWater > 0.5) { + baseTexUV += vec2(uTime * 0.05, uTime * 0.05); + } + + // Missing texture: classic Source Engine black & purple checkerboard + if (hasTex < 0.5) { + vec2 checker = floor(baseTexUV * 2.0); + float c = mod(checker.x + checker.y, 2.0); + vec3 missingColor = mix(vec3(0.0), vec3(0.498, 0.0, 0.498), c); + + // Apply lightmap if available + if (uDebugMode < 0.5) { + vec4 lmSample = texture2D(uLightmap, vLightmapUV); + vec3 lightColor = lmSample.rgb * lmSample.a * RGBM_SCALE; + float hasLM = step(0.001, vLightmapUV.x + vLightmapUV.y); + vec3 light = mix(vec3(1.0), lightColor, hasLM); + + // Unlit fallback + if (hasLM < 0.5) { + vec3 lightDir = normalize(vec3(0.5, 0.8, 1.0)); + float ndotl = max(dot(n, lightDir), 0.0); + float ambient = 0.5; + light = vec3(1.0) * (ambient + (1.0 - ambient) * ndotl); + } + + vec3 lit = pow(missingColor, vec3(2.2)) * light; + missingColor = pow(lit, vec3(1.0 / 2.2)); + } + + gl_FragColor = vec4(missingColor, uAlphaOverride); + return; + } + + vec2 rawDdx = dFdx(baseTexUV) * vAtlasScale; + vec2 rawDdy = dFdy(baseTexUV) * vAtlasScale; + + // Clamp gradients so mip level never exceeds padding coverage + float maxGrad = MAX_SAFE_TEXELS / max(uAtlasSize.x, uAtlasSize.y); + float gradLen = max(length(rawDdx), length(rawDdy)); + if (gradLen > maxGrad) { + float s = maxGrad / gradLen; + rawDdx *= s; + rawDdy *= s; + } + + vec2 tiledUV = fract(baseTexUV); + vec2 atlasUV = vAtlasMin + tiledUV * vAtlasScale; + vec4 texColor = texture2DGradEXT(uTexture, atlasUV, rawDdx, rawDdy); + + // Alpha test: discard nearly transparent fragments (cutout textures like fences, grates) + float alpha = mix(1.0, texColor.a, hasTex); + if (alpha < 0.1) discard; + + // Debug mode 1: raw texture only (no lightmap, no gamma) + if (uDebugMode > 0.5) { + gl_FragColor = vec4(texColor.rgb, alpha * uAlphaOverride); + return; + } + + // Linearize base texture (sRGB -> linear) before combining with lightmap + vec3 texLinear = pow(texColor.rgb, vec3(2.2)); + vec3 albedo = texLinear; + + // Extract flag (negative U = prop) and absolute UV + float isProp = step(vLightmapUV.x, -0.00005); + vec2 realLmUV = vec2(abs(vLightmapUV.x), vLightmapUV.y); + + // Sample lightmap (RGBM encoded, already linear) + vec4 lmSample = texture2D(uLightmap, realLmUV); + vec3 lightColor = lmSample.rgb * lmSample.a * RGBM_SCALE; + + float hasLM = step(0.001, realLmUV.x + realLmUV.y); + vec3 light = mix(vec3(1.0), lightColor, hasLM); + + // Apply fake directional lighting for props or unlit geometry + if (isProp > 0.5 || hasLM < 0.5) { + vec3 lightDir = normalize(vec3(0.5, 0.8, 1.0)); + float ndotl = max(dot(n, lightDir), 0.0); + float ambient = 0.5; + vec3 baseLight = isProp > 0.5 ? lightColor : vec3(1.0); + light = baseLight * (ambient + (1.0 - ambient) * ndotl); + } + + vec3 color = albedo * light; + color = pow(color, vec3(1.0 / 2.2)); + + gl_FragColor = vec4(color, alpha * uAlphaOverride); +} +`; + +const PLAYER_VERT = ` +attribute vec3 aPosition; +uniform mat4 uProjection; +uniform mat4 uView; +uniform mat4 uModel; +void main() { + gl_Position = uProjection * uView * uModel * vec4(aPosition, 1.0); +} +`; + +const PLAYER_FRAG = ` +precision mediump float; +void main() { + gl_FragColor = vec4(0.3, 0.65, 0.4, 1.0); +} +`; + +const SKY_VERT = ` +attribute vec3 aPosition; +attribute vec2 aUV; +uniform mat4 uProjection; +uniform mat4 uViewRotation; +varying vec2 vUV; +void main() { + vUV = aUV; + gl_Position = uProjection * uViewRotation * vec4(aPosition, 1.0); +} +`; + +const SKY_FRAG = ` +precision mediump float; +varying vec2 vUV; +uniform sampler2D uSkybox; +void main() { + gl_FragColor = texture2D(uSkybox, vUV); +} +`; + +// Depth-only shader for sky face occlusion +const DEPTH_VERT = ` +attribute vec3 aPosition; +uniform mat4 uProjection; +uniform mat4 uView; +void main() { + gl_Position = uProjection * uView * vec4(aPosition, 1.0); +} +`; + +const DEPTH_FRAG = ` +precision mediump float; +void main() { + gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); +} +`; + +// Build 6 skybox quads matching noclip.website's exact vertex positions. +// Atlas layout: 3 columns x 2 rows +// Row 0: ft(0), bk(1), lf(2) +// Row 1: rt(3), up(4), dn(5) +function createSkyboxQuads(): { vertices: Float32Array; indices: Uint16Array } { + const S = 100; + const eps = 1.0 / 512.0; + + const faces: Array<{ verts: number[][]; localUVs: number[][]; faceIdx: number }> = [ + { // ft (faceIdx 0) + verts: [[S,-S,-S], [S,-S,S], [-S,-S,S], [-S,-S,-S]], + localUVs: [[0,1], [0,0], [1,0], [1,1]], + faceIdx: 0, + }, + { // bk (faceIdx 1) + verts: [[-S,S,-S], [-S,S,S], [S,S,S], [S,S,-S]], + localUVs: [[0,1], [0,0], [1,0], [1,1]], + faceIdx: 1, + }, + { // lf (faceIdx 2) + verts: [[-S,-S,-S], [-S,-S,S], [-S,S,S], [-S,S,-S]], + localUVs: [[0,1], [0,0], [1,0], [1,1]], + faceIdx: 2, + }, + { // rt (faceIdx 3) + verts: [[S,S,-S], [S,S,S], [S,-S,S], [S,-S,-S]], + localUVs: [[0,1], [0,0], [1,0], [1,1]], + faceIdx: 3, + }, + { // up (faceIdx 4) + verts: [[S,S,S], [-S,S,S], [-S,-S,S], [S,-S,S]], + localUVs: [[0,1], [0,0], [1,0], [1,1]], + faceIdx: 4, + }, + { // dn (faceIdx 5) + verts: [[-S,S,-S], [S,S,-S], [S,-S,-S], [-S,-S,-S]], + localUVs: [[0,1], [0,0], [1,0], [1,1]], + faceIdx: 5, + }, + ]; + + const vertData: number[] = []; + const idxs: number[] = []; + + for (const face of faces) { + const col = face.faceIdx % 3; + const row = Math.floor(face.faceIdx / 3); + const base = vertData.length / 5; + + for (let i = 0; i < 4; i++) { + const [lu, lv] = face.localUVs[i]; + const cu = Math.max(eps, Math.min(1 - eps, lu)); + const cv = Math.max(eps, Math.min(1 - eps, lv)); + const atlasU = col / 3 + cu / 3; + const atlasV = row / 2 + cv / 2; + vertData.push(face.verts[i][0], face.verts[i][1], face.verts[i][2], atlasU, atlasV); + } + + idxs.push(base, base + 1, base + 2); + idxs.push(base, base + 2, base + 3); + } + + return { vertices: new Float32Array(vertData), indices: new Uint16Array(idxs) }; +} + +function compileShader(gl: WebGLRenderingContext, type: number, source: string): WebGLShader { + const shader = gl.createShader(type)!; + gl.shaderSource(shader, source); + gl.compileShader(shader); + if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { + const info = gl.getShaderInfoLog(shader); + gl.deleteShader(shader); + throw new Error('Shader compile error: ' + info); + } + return shader; +} + +function createProgram(gl: WebGLRenderingContext, vert: string, frag: string): WebGLProgram { + const vs = compileShader(gl, gl.VERTEX_SHADER, vert); + const fs = compileShader(gl, gl.FRAGMENT_SHADER, frag); + const prog = gl.createProgram()!; + gl.attachShader(prog, vs); + gl.attachShader(prog, fs); + gl.linkProgram(prog); + if (!gl.getProgramParameter(prog, gl.LINK_STATUS)) { + const info = gl.getProgramInfoLog(prog); + throw new Error('Program link error: ' + info); + } + return prog; +} + +function createCubeData(): { vertices: Float32Array; indices: Uint16Array } { + const s = 8; + const h = 36; + const v = [ + -s, -s, 0, s, -s, 0, s, s, 0, -s, s, 0, + -s, -s, h, s, -s, h, s, s, h, -s, s, h, + ]; + const i = [ + 0,1,2, 0,2,3, 4,6,5, 4,7,6, 0,4,5, 0,5,1, + 2,6,7, 2,7,3, 0,3,7, 0,7,4, 1,5,6, 1,6,2, + ]; + return { vertices: new Float32Array(v), indices: new Uint16Array(i) }; +} + +interface ModelDrawRange { + indexStart: number; + indexCount: number; + cluster: number; +} + +export class Renderer { + private gl: WebGLRenderingContext; + private mapProgram: WebGLProgram; + private playerProgram: WebGLProgram; + private mapVBO: WebGLBuffer; + private mapIBO: WebGLBuffer; + private indexCount = 0; + private playerVBO: WebGLBuffer; + private playerIBO: WebGLBuffer; + private playerIndexCount: number; + private lightmapTexture: WebGLTexture | null = null; + private baseTexture: WebGLTexture | null = null; + private anisoExt: any = null; + private maxAnisotropy = 1; + + // Map uniforms + private uProjection: WebGLUniformLocation; + private uView: WebGLUniformLocation; + private uLightmap: WebGLUniformLocation; + private uTexture: WebGLUniformLocation; + private uAtlasSize: WebGLUniformLocation; + private uDebugMode: WebGLUniformLocation; + private uAlphaOverride: WebGLUniformLocation; + private uCameraPos: WebGLUniformLocation; + + private uTime: WebGLUniformLocation; + private uIsWater: WebGLUniformLocation; + + private atlasWidth = 0; + private atlasHeight = 0; + public debugTexMode = false; + + // Player uniforms + private puProjection: WebGLUniformLocation; + private puView: WebGLUniformLocation; + private puModel: WebGLUniformLocation; + + // Skybox + private skyboxProgram: WebGLProgram | null = null; + private skyboxVBO: WebGLBuffer | null = null; + private skyboxIBO: WebGLBuffer | null = null; + private skyboxTexture: WebGLTexture | null = null; + private skyboxIndexCount = 0; + private suProjection: WebGLUniformLocation | null = null; + private suViewRot: WebGLUniformLocation | null = null; + private suSkybox: WebGLUniformLocation | null = null; + + // Sky depth faces (occlusion) + private depthProgram: WebGLProgram | null = null; + private skyDepthVBO: WebGLBuffer | null = null; + private skyDepthIBO: WebGLBuffer | null = null; + private skyDepthIndexCount = 0; + private dpProjection: WebGLUniformLocation | null = null; + private dpView: WebGLUniformLocation | null = null; + + // PVS + private bspMesh: BspMesh | null = null; + private modelDrawRanges: ModelDrawRange[] = []; + private waterDrawRanges: ModelDrawRange[] = []; + + // Animated textures + private animTextures: { atlasX: number; atlasY: number; width: number; height: number; frameCount: number; fps: number; dataOffset: number; currentFrame: number }[] = []; + private animFrameData: Uint8Array | null = null; + + readonly projMatrix = mat4.create(); + private playerModelMatrix = mat4.create(); + + // Attribute locations (cached) + private aPos = -1; + private aNorm = -1; + private aLmUV = -1; + private aTexUV = -1; + private aAtlasMin = -1; + private aAtlasScale = -1; + + constructor(private canvas: HTMLCanvasElement) { + const gl = canvas.getContext('webgl', { antialias: true, alpha: false })!; + if (!gl) throw new Error('WebGL not supported'); + this.gl = gl; + + gl.getExtension('OES_element_index_uint'); + gl.getExtension('OES_standard_derivatives'); + gl.getExtension('EXT_shader_texture_lod'); + this.anisoExt = gl.getExtension('EXT_texture_filter_anisotropic') + || gl.getExtension('WEBKIT_EXT_texture_filter_anisotropic') + || gl.getExtension('MOZ_EXT_texture_filter_anisotropic'); + if (this.anisoExt) { + this.maxAnisotropy = gl.getParameter(this.anisoExt.MAX_TEXTURE_MAX_ANISOTROPY_EXT); + } + gl.enable(gl.DEPTH_TEST); + gl.disable(gl.CULL_FACE); + gl.clearColor(0.1, 0.1, 0.18, 1.0); + + // Map shader + this.mapProgram = createProgram(gl, MAP_VERT, MAP_FRAG); + this.uProjection = gl.getUniformLocation(this.mapProgram, 'uProjection')!; + this.uView = gl.getUniformLocation(this.mapProgram, 'uView')!; + this.uLightmap = gl.getUniformLocation(this.mapProgram, 'uLightmap')!; + this.uTexture = gl.getUniformLocation(this.mapProgram, 'uTexture')!; + this.uAtlasSize = gl.getUniformLocation(this.mapProgram, 'uAtlasSize')!; + this.uDebugMode = gl.getUniformLocation(this.mapProgram, 'uDebugMode')!; + this.uAlphaOverride = gl.getUniformLocation(this.mapProgram, 'uAlphaOverride')!; + this.uCameraPos = gl.getUniformLocation(this.mapProgram, 'uCameraPos')!; + + this.uTime = gl.getUniformLocation(this.mapProgram, 'uTime')!; + this.uIsWater = gl.getUniformLocation(this.mapProgram, 'uIsWater')!; + + // Cache attribute locations + this.aPos = gl.getAttribLocation(this.mapProgram, 'aPosition'); + this.aNorm = gl.getAttribLocation(this.mapProgram, 'aNormal'); + this.aLmUV = gl.getAttribLocation(this.mapProgram, 'aLightmapUV'); + this.aTexUV = gl.getAttribLocation(this.mapProgram, 'aTexUV'); + this.aAtlasMin = gl.getAttribLocation(this.mapProgram, 'aAtlasMin'); + this.aAtlasScale = gl.getAttribLocation(this.mapProgram, 'aAtlasScale'); + + // Player shader + this.playerProgram = createProgram(gl, PLAYER_VERT, PLAYER_FRAG); + this.puProjection = gl.getUniformLocation(this.playerProgram, 'uProjection')!; + this.puView = gl.getUniformLocation(this.playerProgram, 'uView')!; + this.puModel = gl.getUniformLocation(this.playerProgram, 'uModel')!; + + // Buffers + this.mapVBO = gl.createBuffer()!; + this.mapIBO = gl.createBuffer()!; + + const cube = createCubeData(); + this.playerVBO = gl.createBuffer()!; + gl.bindBuffer(gl.ARRAY_BUFFER, this.playerVBO); + gl.bufferData(gl.ARRAY_BUFFER, cube.vertices, gl.STATIC_DRAW); + this.playerIBO = gl.createBuffer()!; + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.playerIBO); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, cube.indices, gl.STATIC_DRAW); + this.playerIndexCount = cube.indices.length; + } + + uploadMap(vertices: Float32Array, indices: Uint32Array): void { + const gl = this.gl; + gl.bindBuffer(gl.ARRAY_BUFFER, this.mapVBO); + gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW); + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.mapIBO); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indices, gl.STATIC_DRAW); + this.indexCount = indices.length; + } + + setPVS(mesh: BspMesh): void { + this.bspMesh = mesh; + const drawData = mesh.model_draw_data(); + const count = mesh.model_draw_count(); + this.modelDrawRanges = []; + for (let i = 0; i < count; i++) { + this.modelDrawRanges.push({ + indexStart: drawData[i * 3], + indexCount: drawData[i * 3 + 1], + cluster: drawData[i * 3 + 2], + }); + } + // Water draw ranges (rendered separately with transparency) + const waterData = mesh.water_draw_data(); + const waterCount = mesh.water_draw_count(); + this.waterDrawRanges = []; + for (let i = 0; i < waterCount; i++) { + this.waterDrawRanges.push({ + indexStart: waterData[i * 3], + indexCount: waterData[i * 3 + 1], + cluster: waterData[i * 3 + 2], + }); + } + } + + setupAnimatedTextures(info: Float32Array, frameData: Uint8Array): void { + this.animFrameData = frameData; + this.animTextures = []; + const ENTRY_SIZE = 7; + const count = info.length / ENTRY_SIZE; + let computedOffset = 0; + for (let i = 0; i < count; i++) { + const off = i * ENTRY_SIZE; + const width = info[off + 2]; + const height = info[off + 3]; + const frameCount = info[off + 4]; + this.animTextures.push({ + atlasX: info[off], + atlasY: info[off + 1], + width, + height, + frameCount, + fps: info[off + 5], + dataOffset: computedOffset, + currentFrame: -1, + }); + computedOffset += width * height * 4 * frameCount; + } + } + + updateAnimations(time: number): void { + if (!this.animFrameData || this.animTextures.length === 0) return; + const gl = this.gl; + gl.activeTexture(gl.TEXTURE1); + gl.bindTexture(gl.TEXTURE_2D, this.baseTexture); + let updated = 0; + for (const anim of this.animTextures) { + const frame = Math.floor(time * anim.fps) % anim.frameCount; + if (frame === anim.currentFrame) continue; + anim.currentFrame = frame; + const frameBytes = anim.width * anim.height * 4; + const offset = anim.dataOffset + frame * frameBytes; + const pixels = new Uint8Array(this.animFrameData.buffer, this.animFrameData.byteOffset + offset, frameBytes); + gl.texSubImage2D(gl.TEXTURE_2D, 0, anim.atlasX, anim.atlasY, anim.width, anim.height, gl.RGBA, gl.UNSIGNED_BYTE, pixels); + updated++; + } + if (updated > 0) { + gl.generateMipmap(gl.TEXTURE_2D); + } + } + + uploadLightmap(data: Uint8Array, width: number, height: number): void { + const gl = this.gl; + this.lightmapTexture = gl.createTexture()!; + gl.bindTexture(gl.TEXTURE_2D, this.lightmapTexture); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, data); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + + uploadTextureAtlas(data: Uint8Array, width: number, height: number): void { + const gl = this.gl; + this.atlasWidth = width; + this.atlasHeight = height; + this.baseTexture = gl.createTexture()!; + gl.bindTexture(gl.TEXTURE_2D, this.baseTexture); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, data); + gl.generateMipmap(gl.TEXTURE_2D); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + if (this.anisoExt) { + gl.texParameterf(gl.TEXTURE_2D, this.anisoExt.TEXTURE_MAX_ANISOTROPY_EXT, this.maxAnisotropy); + } + } + + /** Patch a region of the texture atlas (for external texture loading). Caller must include tiling padding. */ + patchTextureAtlas(x: number, y: number, width: number, height: number, data: Uint8Array): void { + const gl = this.gl; + gl.bindTexture(gl.TEXTURE_2D, this.baseTexture); + gl.texSubImage2D(gl.TEXTURE_2D, 0, x, y, width, height, gl.RGBA, gl.UNSIGNED_BYTE, data); + gl.generateMipmap(gl.TEXTURE_2D); + } + + uploadSkybox(data: Uint8Array, faceSize: number): void { + const gl = this.gl; + + // Build skybox shader + geometry + this.skyboxProgram = createProgram(gl, SKY_VERT, SKY_FRAG); + this.suProjection = gl.getUniformLocation(this.skyboxProgram, 'uProjection'); + this.suViewRot = gl.getUniformLocation(this.skyboxProgram, 'uViewRotation'); + this.suSkybox = gl.getUniformLocation(this.skyboxProgram, 'uSkybox'); + + const quads = createSkyboxQuads(); + this.skyboxVBO = gl.createBuffer()!; + gl.bindBuffer(gl.ARRAY_BUFFER, this.skyboxVBO); + gl.bufferData(gl.ARRAY_BUFFER, quads.vertices, gl.STATIC_DRAW); + this.skyboxIBO = gl.createBuffer()!; + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.skyboxIBO); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, quads.indices, gl.STATIC_DRAW); + this.skyboxIndexCount = quads.indices.length; + + // Build 3x2 atlas from 6 concatenated face images + const atlasW = faceSize * 3; + const atlasH = faceSize * 2; + const faceBytes = faceSize * faceSize * 4; + const atlas = new Uint8Array(atlasW * atlasH * 4); + for (let fi = 0; fi < 6; fi++) { + const col = fi % 3; + const row = Math.floor(fi / 3); + const ox = col * faceSize; + const oy = row * faceSize; + const srcOff = fi * faceBytes; + for (let y = 0; y < faceSize; y++) { + const srcRow = srcOff + y * faceSize * 4; + const dstRow = ((oy + y) * atlasW + ox) * 4; + atlas.set(data.subarray(srcRow, srcRow + faceSize * 4), dstRow); + } + } + + this.skyboxTexture = gl.createTexture()!; + gl.bindTexture(gl.TEXTURE_2D, this.skyboxTexture); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, atlasW, atlasH, 0, gl.RGBA, gl.UNSIGNED_BYTE, atlas); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + + uploadSkyDepth(vertices: Float32Array, indices: Uint32Array): void { + const gl = this.gl; + this.depthProgram = createProgram(gl, DEPTH_VERT, DEPTH_FRAG); + this.dpProjection = gl.getUniformLocation(this.depthProgram, 'uProjection'); + this.dpView = gl.getUniformLocation(this.depthProgram, 'uView'); + + this.skyDepthVBO = gl.createBuffer()!; + gl.bindBuffer(gl.ARRAY_BUFFER, this.skyDepthVBO); + gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW); + + this.skyDepthIBO = gl.createBuffer()!; + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.skyDepthIBO); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indices, gl.STATIC_DRAW); + + this.skyDepthIndexCount = indices.length; + } + + resize(): void { + const canvas = this.canvas; + const dpr = window.devicePixelRatio || 1; + const w = canvas.clientWidth * dpr; + const h = canvas.clientHeight * dpr; + if (canvas.width !== w || canvas.height !== h) { + canvas.width = w; + canvas.height = h; + } + this.gl.viewport(0, 0, canvas.width, canvas.height); + mat4.perspective(this.projMatrix, 80 * Math.PI / 180, w / h, 1, 65536); + } + + render(viewMatrix: mat4, playerPos: Float32Array, showPlayer: boolean = true): void { + const gl = this.gl; + this.resize(); + + gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); + + // Draw skybox first (depth test OFF so it fills background) + if (this.skyboxTexture && this.skyboxProgram) { + gl.disable(gl.DEPTH_TEST); + gl.depthMask(false); + gl.useProgram(this.skyboxProgram); + gl.uniformMatrix4fv(this.suProjection, false, this.projMatrix); + + // View matrix with translation removed (rotation only) + const viewRot = mat4.clone(viewMatrix); + viewRot[12] = 0; viewRot[13] = 0; viewRot[14] = 0; + gl.uniformMatrix4fv(this.suViewRot, false, viewRot); + + gl.activeTexture(gl.TEXTURE2); + gl.bindTexture(gl.TEXTURE_2D, this.skyboxTexture); + gl.uniform1i(this.suSkybox, 2); + + // Stride: 5 floats (pos3 + uv2) = 20 bytes + gl.bindBuffer(gl.ARRAY_BUFFER, this.skyboxVBO!); + const sPos = gl.getAttribLocation(this.skyboxProgram, 'aPosition'); + const sUV = gl.getAttribLocation(this.skyboxProgram, 'aUV'); + gl.enableVertexAttribArray(sPos); + gl.vertexAttribPointer(sPos, 3, gl.FLOAT, false, 20, 0); + gl.enableVertexAttribArray(sUV); + gl.vertexAttribPointer(sUV, 2, gl.FLOAT, false, 20, 12); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.skyboxIBO!); + gl.drawElements(gl.TRIANGLES, this.skyboxIndexCount, gl.UNSIGNED_SHORT, 0); + + gl.disableVertexAttribArray(sPos); + gl.disableVertexAttribArray(sUV); + gl.depthMask(true); + gl.enable(gl.DEPTH_TEST); + } + + // Draw sky faces depth-only (occlusion barrier so geometry behind sky isn't visible) + if (this.depthProgram && this.skyDepthIndexCount > 0) { + gl.useProgram(this.depthProgram); + gl.uniformMatrix4fv(this.dpProjection, false, this.projMatrix); + gl.uniformMatrix4fv(this.dpView, false, viewMatrix); + gl.colorMask(false, false, false, false); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.skyDepthVBO!); + const dpPos = gl.getAttribLocation(this.depthProgram, 'aPosition'); + gl.enableVertexAttribArray(dpPos); + gl.vertexAttribPointer(dpPos, 3, gl.FLOAT, false, 12, 0); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.skyDepthIBO!); + gl.drawElements(gl.TRIANGLES, this.skyDepthIndexCount, gl.UNSIGNED_INT, 0); + + gl.disableVertexAttribArray(dpPos); + gl.colorMask(true, true, true, true); + } + + if (this.indexCount === 0) return; + + // Enable alpha blending for transparent textures (fences, grates, glass, etc.) + gl.enable(gl.BLEND); + gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + + // Draw map + gl.useProgram(this.mapProgram); + gl.uniformMatrix4fv(this.uProjection, false, this.projMatrix); + gl.uniformMatrix4fv(this.uView, false, viewMatrix); + gl.uniform3f(this.uCameraPos, playerPos[0], playerPos[1], playerPos[2]); + gl.uniform1f(this.uTime, performance.now() / 1000.0); + + // Bind lightmap on unit 0 + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.lightmapTexture); + gl.uniform1i(this.uLightmap, 0); + + // Bind texture atlas on unit 1 + gl.activeTexture(gl.TEXTURE1); + gl.bindTexture(gl.TEXTURE_2D, this.baseTexture); + gl.uniform1i(this.uTexture, 1); + gl.uniform2f(this.uAtlasSize, this.atlasWidth, this.atlasHeight); + gl.uniform1f(this.uDebugMode, this.debugTexMode ? 1.0 : 0.0); + gl.uniform1f(this.uAlphaOverride, 1.0); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.mapVBO); + gl.enableVertexAttribArray(this.aPos); + gl.vertexAttribPointer(this.aPos, 3, gl.FLOAT, false, STRIDE, 0); + gl.enableVertexAttribArray(this.aNorm); + gl.vertexAttribPointer(this.aNorm, 3, gl.FLOAT, false, STRIDE, 12); + gl.enableVertexAttribArray(this.aLmUV); + gl.vertexAttribPointer(this.aLmUV, 2, gl.FLOAT, false, STRIDE, 24); + gl.enableVertexAttribArray(this.aTexUV); + gl.vertexAttribPointer(this.aTexUV, 2, gl.FLOAT, false, STRIDE, 32); + gl.enableVertexAttribArray(this.aAtlasMin); + gl.vertexAttribPointer(this.aAtlasMin, 2, gl.FLOAT, false, STRIDE, 40); + gl.enableVertexAttribArray(this.aAtlasScale); + gl.vertexAttribPointer(this.aAtlasScale, 2, gl.FLOAT, false, STRIDE, 48); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.mapIBO); + + // PVS-based per-cluster draw calls (opaque geometry) + if (this.bspMesh && this.modelDrawRanges.length > 0) { + gl.uniform1f(this.uIsWater, 0.0); + const camCluster = this.bspMesh.find_cluster(playerPos[0], playerPos[1], playerPos[2]); + for (let i = 0; i < this.modelDrawRanges.length; i++) { + const m = this.modelDrawRanges[i]; + if (m.indexCount === 0) continue; + // cluster -1 = unknown, always draw; otherwise PVS check + if (m.cluster < 0 || this.bspMesh.is_cluster_visible(camCluster, m.cluster)) { + gl.drawElements(gl.TRIANGLES, m.indexCount, gl.UNSIGNED_INT, m.indexStart * 4); + } + } + + // Water pass: render with transparency, no depth write + if (this.waterDrawRanges.length > 0) { + gl.depthMask(false); + gl.uniform1f(this.uAlphaOverride, 0.6); + gl.uniform1f(this.uIsWater, 1.0); + for (let i = 0; i < this.waterDrawRanges.length; i++) { + const m = this.waterDrawRanges[i]; + if (m.indexCount === 0) continue; + if (m.cluster < 0 || this.bspMesh.is_cluster_visible(camCluster, m.cluster)) { + gl.drawElements(gl.TRIANGLES, m.indexCount, gl.UNSIGNED_INT, m.indexStart * 4); + } + } + gl.depthMask(true); + gl.uniform1f(this.uAlphaOverride, 1.0); + gl.uniform1f(this.uIsWater, 0.0); + } + } else { + gl.uniform1f(this.uIsWater, 0.0); + gl.drawElements(gl.TRIANGLES, this.indexCount, gl.UNSIGNED_INT, 0); + } + + gl.disableVertexAttribArray(this.aNorm); + gl.disableVertexAttribArray(this.aLmUV); + gl.disableVertexAttribArray(this.aTexUV); + gl.disableVertexAttribArray(this.aAtlasMin); + gl.disableVertexAttribArray(this.aAtlasScale); + + // Disable blending for subsequent draws (player cube, etc.) + gl.disable(gl.BLEND); + + // Draw player cube (only in freecam) + if (showPlayer) { + gl.useProgram(this.playerProgram); + gl.uniformMatrix4fv(this.puProjection, false, this.projMatrix); + gl.uniformMatrix4fv(this.puView, false, viewMatrix); + + mat4.identity(this.playerModelMatrix); + mat4.translate(this.playerModelMatrix, this.playerModelMatrix, [ + playerPos[0], playerPos[1], playerPos[2], + ]); + gl.uniformMatrix4fv(this.puModel, false, this.playerModelMatrix); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.playerVBO); + const pPos = gl.getAttribLocation(this.playerProgram, 'aPosition'); + gl.enableVertexAttribArray(pPos); + gl.vertexAttribPointer(pPos, 3, gl.FLOAT, false, 12, 0); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.playerIBO); + gl.drawElements(gl.TRIANGLES, this.playerIndexCount, gl.UNSIGNED_SHORT, 0); + + gl.disableVertexAttribArray(pPos); + } + } + + dispose(): void { + const gl = this.gl; + gl.deleteBuffer(this.mapVBO); + gl.deleteBuffer(this.mapIBO); + gl.deleteBuffer(this.playerVBO); + gl.deleteBuffer(this.playerIBO); + if (this.lightmapTexture) gl.deleteTexture(this.lightmapTexture); + if (this.baseTexture) gl.deleteTexture(this.baseTexture); + if (this.skyboxTexture) gl.deleteTexture(this.skyboxTexture); + if (this.skyboxVBO) gl.deleteBuffer(this.skyboxVBO); + if (this.skyboxIBO) gl.deleteBuffer(this.skyboxIBO); + if (this.skyDepthVBO) gl.deleteBuffer(this.skyDepthVBO); + if (this.skyDepthIBO) gl.deleteBuffer(this.skyDepthIBO); + gl.deleteProgram(this.mapProgram); + gl.deleteProgram(this.playerProgram); + if (this.skyboxProgram) gl.deleteProgram(this.skyboxProgram); + if (this.depthProgram) gl.deleteProgram(this.depthProgram); + const ext = gl.getExtension('WEBGL_lose_context'); + if (ext) ext.loseContext(); + } +} diff --git a/src/replay-viewer/wasm/bhop_replay_viewer_wasm.d.ts b/src/replay-viewer/wasm/bhop_replay_viewer_wasm.d.ts new file mode 100644 index 0000000..e5dc791 --- /dev/null +++ b/src/replay-viewer/wasm/bhop_replay_viewer_wasm.d.ts @@ -0,0 +1,191 @@ +/* tslint:disable */ +/* eslint-disable */ + +export class BspMesh { + private constructor(); + free(): void; + [Symbol.dispose](): void; + /** + * Animated texture frame data (all frames for all animated textures, concatenated) + */ + animated_frame_data(): Uint8Array; + /** + * Animated texture metadata: [atlas_x, atlas_y, width, height, frame_count, fps, data_byte_offset] per texture + */ + animated_texture_info(): Float32Array; + /** + * Find the cluster for a world position (for camera PVS lookup) + */ + find_cluster(x: number, y: number, z: number): number; + has_sky_faces(): boolean; + has_skybox(): boolean; + index_count(): number; + index_data(): Uint32Array; + /** + * Check if cluster `to` is visible from cluster `from` + */ + is_cluster_visible(from: number, to: number): boolean; + lightmap_atlas_data(): Uint8Array; + lightmap_height(): number; + lightmap_width(): number; + /** + * JSON array of missing prop model paths: ["models/props/foo.mdl", ...] + */ + missing_props(): string; + /** + * Number of drawable models (call before model_draw_data) + */ + model_draw_count(): number; + /** + * Returns per-model draw info as flat array: [index_start, index_count, cluster] * N + */ + model_draw_data(): Int32Array; + sky_index_data(): Uint32Array; + /** + * Sky face positions [x,y,z] for depth-only rendering + */ + sky_vertex_data(): Float32Array; + skybox_data(): Uint8Array; + skybox_face_size(): number; + texture_atlas_data(): Uint8Array; + texture_atlas_height(): number; + texture_atlas_width(): number; + /** + * JSON array of unresolved texture info: [{name, atlas_x, atlas_y, width, height, pad}, ...] + */ + unresolved_textures(): string; + vertex_count(): number; + /** + * Move vertex data out (avoids clone). Field becomes empty after call. + */ + vertex_data(): Float32Array; + /** + * Number of water draw ranges (call before water_draw_data) + */ + water_draw_count(): number; + /** + * Water draw ranges: same format as model_draw_data but for water faces + */ + water_draw_data(): Int32Array; +} + +export class ReplayData { + private constructor(); + free(): void; + [Symbol.dispose](): void; + angles(): Float32Array; + buttons_array(): Int32Array; + flags_array(): Int32Array; + map_name(): string; + positions(): Float32Array; + preframes(): number; + tick_count(): number; + tick_rate(): number; + time(): number; +} + +/** + * Decode a VTF file, downscale to target dimensions, apply color tint, create tiled version with padding. + * Returns RGBA data of size (target_w + 2*pad) × (target_h + 2*pad) × 4, ready for texSubImage2D. + * When force_opaque is true, all alpha values are set to 255 (most Source textures use alpha + * for specular masks etc., not actual transparency). + */ +export function decode_and_tile_vtf(vtf_data: Uint8Array, target_w: number, target_h: number, color_r: number, color_g: number, color_b: number, force_opaque: boolean): Uint8Array | undefined; + +export function decompress_bz2(data: Uint8Array): Uint8Array; + +export function init(): void; + +export function parse_bsp(data: Uint8Array): BspMesh; + +/** + * Parse a BSP with extra files injected (e.g. prop models from VPK). + * `extras_json` is a JSON array of `{"path":"models/foo.mdl","offset":0,"length":1234}`. + * `extras_data` is all the file contents concatenated. + */ +export function parse_bsp_with_extras(data: Uint8Array, extras_json: string, extras_data: Uint8Array): BspMesh; + +export function parse_replay(data: Uint8Array): ReplayData; + +/** + * Parse a VMT file and return JSON: {"basetexture":"...", "color":[r,g,b], "fps":0, "is_water":false} + */ +export function parse_vmt_data(data: Uint8Array): string | undefined; + +export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module; + +export interface InitOutput { + readonly memory: WebAssembly.Memory; + readonly __wbg_bspmesh_free: (a: number, b: number) => void; + readonly bspmesh_animated_frame_data: (a: number) => [number, number]; + readonly bspmesh_animated_texture_info: (a: number) => [number, number]; + readonly bspmesh_find_cluster: (a: number, b: number, c: number, d: number) => number; + readonly bspmesh_has_sky_faces: (a: number) => number; + readonly bspmesh_has_skybox: (a: number) => number; + readonly bspmesh_index_count: (a: number) => number; + readonly bspmesh_index_data: (a: number) => [number, number]; + readonly bspmesh_is_cluster_visible: (a: number, b: number, c: number) => number; + readonly bspmesh_lightmap_atlas_data: (a: number) => [number, number]; + readonly bspmesh_lightmap_height: (a: number) => number; + readonly bspmesh_lightmap_width: (a: number) => number; + readonly bspmesh_missing_props: (a: number) => [number, number]; + readonly bspmesh_model_draw_count: (a: number) => number; + readonly bspmesh_model_draw_data: (a: number) => [number, number]; + readonly bspmesh_sky_index_data: (a: number) => [number, number]; + readonly bspmesh_sky_vertex_data: (a: number) => [number, number]; + readonly bspmesh_skybox_data: (a: number) => [number, number]; + readonly bspmesh_skybox_face_size: (a: number) => number; + readonly bspmesh_texture_atlas_data: (a: number) => [number, number]; + readonly bspmesh_texture_atlas_height: (a: number) => number; + readonly bspmesh_texture_atlas_width: (a: number) => number; + readonly bspmesh_unresolved_textures: (a: number) => [number, number]; + readonly bspmesh_vertex_count: (a: number) => number; + readonly bspmesh_vertex_data: (a: number) => [number, number]; + readonly bspmesh_water_draw_count: (a: number) => number; + readonly bspmesh_water_draw_data: (a: number) => [number, number]; + readonly parse_bsp: (a: number, b: number) => [number, number, number]; + readonly parse_bsp_with_extras: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number]; + readonly __wbg_replaydata_free: (a: number, b: number) => void; + readonly parse_replay: (a: number, b: number) => [number, number, number]; + readonly replaydata_angles: (a: number) => [number, number]; + readonly replaydata_buttons_array: (a: number) => [number, number]; + readonly replaydata_flags_array: (a: number) => [number, number]; + readonly replaydata_map_name: (a: number) => [number, number]; + readonly replaydata_positions: (a: number) => [number, number]; + readonly replaydata_preframes: (a: number) => number; + readonly replaydata_tick_count: (a: number) => number; + readonly replaydata_tick_rate: (a: number) => number; + readonly replaydata_time: (a: number) => number; + readonly decode_and_tile_vtf: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number]; + readonly init: () => void; + readonly parse_vmt_data: (a: number, b: number) => [number, number]; + readonly decompress_bz2: (a: number, b: number) => [number, number, number, number]; + readonly __wbindgen_free: (a: number, b: number, c: number) => void; + readonly __wbindgen_malloc: (a: number, b: number) => number; + readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; + readonly __wbindgen_externrefs: WebAssembly.Table; + readonly __externref_table_dealloc: (a: number) => void; + readonly __wbindgen_start: () => void; +} + +export type SyncInitInput = BufferSource | WebAssembly.Module; + +/** + * Instantiates the given `module`, which can either be bytes or + * a precompiled `WebAssembly.Module`. + * + * @param {{ module: SyncInitInput }} module - Passing `SyncInitInput` directly is deprecated. + * + * @returns {InitOutput} + */ +export function initSync(module: { module: SyncInitInput } | SyncInitInput): InitOutput; + +/** + * If `module_or_path` is {RequestInfo} or {URL}, makes a request and + * for everything else, calls `WebAssembly.instantiate` directly. + * + * @param {{ module_or_path: InitInput | Promise }} module_or_path - Passing `InitInput` directly is deprecated. + * + * @returns {Promise} + */ +export default function __wbg_init (module_or_path?: { module_or_path: InitInput | Promise } | InitInput | Promise): Promise; diff --git a/src/replay-viewer/wasm/bhop_replay_viewer_wasm.js b/src/replay-viewer/wasm/bhop_replay_viewer_wasm.js new file mode 100644 index 0000000..1f2fcde --- /dev/null +++ b/src/replay-viewer/wasm/bhop_replay_viewer_wasm.js @@ -0,0 +1,779 @@ +/* @ts-self-types="./bhop_replay_viewer_wasm.d.ts" */ + +export class BspMesh { + static __wrap(ptr) { + ptr = ptr >>> 0; + const obj = Object.create(BspMesh.prototype); + obj.__wbg_ptr = ptr; + BspMeshFinalization.register(obj, obj.__wbg_ptr, obj); + return obj; + } + __destroy_into_raw() { + const ptr = this.__wbg_ptr; + this.__wbg_ptr = 0; + BspMeshFinalization.unregister(this); + return ptr; + } + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_bspmesh_free(ptr, 0); + } + /** + * Animated texture frame data (all frames for all animated textures, concatenated) + * @returns {Uint8Array} + */ + animated_frame_data() { + const ret = wasm.bspmesh_animated_frame_data(this.__wbg_ptr); + var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v1; + } + /** + * Animated texture metadata: [atlas_x, atlas_y, width, height, frame_count, fps, data_byte_offset] per texture + * @returns {Float32Array} + */ + animated_texture_info() { + const ret = wasm.bspmesh_animated_texture_info(this.__wbg_ptr); + var v1 = getArrayF32FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 4, 4); + return v1; + } + /** + * Find the cluster for a world position (for camera PVS lookup) + * @param {number} x + * @param {number} y + * @param {number} z + * @returns {number} + */ + find_cluster(x, y, z) { + const ret = wasm.bspmesh_find_cluster(this.__wbg_ptr, x, y, z); + return ret; + } + /** + * @returns {boolean} + */ + has_sky_faces() { + const ret = wasm.bspmesh_has_sky_faces(this.__wbg_ptr); + return ret !== 0; + } + /** + * @returns {boolean} + */ + has_skybox() { + const ret = wasm.bspmesh_has_skybox(this.__wbg_ptr); + return ret !== 0; + } + /** + * @returns {number} + */ + index_count() { + const ret = wasm.bspmesh_index_count(this.__wbg_ptr); + return ret >>> 0; + } + /** + * @returns {Uint32Array} + */ + index_data() { + const ret = wasm.bspmesh_index_data(this.__wbg_ptr); + var v1 = getArrayU32FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 4, 4); + return v1; + } + /** + * Check if cluster `to` is visible from cluster `from` + * @param {number} from + * @param {number} to + * @returns {boolean} + */ + is_cluster_visible(from, to) { + const ret = wasm.bspmesh_is_cluster_visible(this.__wbg_ptr, from, to); + return ret !== 0; + } + /** + * @returns {Uint8Array} + */ + lightmap_atlas_data() { + const ret = wasm.bspmesh_lightmap_atlas_data(this.__wbg_ptr); + var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v1; + } + /** + * @returns {number} + */ + lightmap_height() { + const ret = wasm.bspmesh_lightmap_height(this.__wbg_ptr); + return ret >>> 0; + } + /** + * @returns {number} + */ + lightmap_width() { + const ret = wasm.bspmesh_lightmap_width(this.__wbg_ptr); + return ret >>> 0; + } + /** + * JSON array of missing prop model paths: ["models/props/foo.mdl", ...] + * @returns {string} + */ + missing_props() { + let deferred1_0; + let deferred1_1; + try { + const ret = wasm.bspmesh_missing_props(this.__wbg_ptr); + deferred1_0 = ret[0]; + deferred1_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred1_0, deferred1_1, 1); + } + } + /** + * Number of drawable models (call before model_draw_data) + * @returns {number} + */ + model_draw_count() { + const ret = wasm.bspmesh_model_draw_count(this.__wbg_ptr); + return ret >>> 0; + } + /** + * Returns per-model draw info as flat array: [index_start, index_count, cluster] * N + * @returns {Int32Array} + */ + model_draw_data() { + const ret = wasm.bspmesh_model_draw_data(this.__wbg_ptr); + var v1 = getArrayI32FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 4, 4); + return v1; + } + /** + * @returns {Uint32Array} + */ + sky_index_data() { + const ret = wasm.bspmesh_sky_index_data(this.__wbg_ptr); + var v1 = getArrayU32FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 4, 4); + return v1; + } + /** + * Sky face positions [x,y,z] for depth-only rendering + * @returns {Float32Array} + */ + sky_vertex_data() { + const ret = wasm.bspmesh_sky_vertex_data(this.__wbg_ptr); + var v1 = getArrayF32FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 4, 4); + return v1; + } + /** + * @returns {Uint8Array} + */ + skybox_data() { + const ret = wasm.bspmesh_skybox_data(this.__wbg_ptr); + var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v1; + } + /** + * @returns {number} + */ + skybox_face_size() { + const ret = wasm.bspmesh_skybox_face_size(this.__wbg_ptr); + return ret >>> 0; + } + /** + * @returns {Uint8Array} + */ + texture_atlas_data() { + const ret = wasm.bspmesh_texture_atlas_data(this.__wbg_ptr); + var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v1; + } + /** + * @returns {number} + */ + texture_atlas_height() { + const ret = wasm.bspmesh_texture_atlas_height(this.__wbg_ptr); + return ret >>> 0; + } + /** + * @returns {number} + */ + texture_atlas_width() { + const ret = wasm.bspmesh_texture_atlas_width(this.__wbg_ptr); + return ret >>> 0; + } + /** + * JSON array of unresolved texture info: [{name, atlas_x, atlas_y, width, height, pad}, ...] + * @returns {string} + */ + unresolved_textures() { + let deferred1_0; + let deferred1_1; + try { + const ret = wasm.bspmesh_unresolved_textures(this.__wbg_ptr); + deferred1_0 = ret[0]; + deferred1_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred1_0, deferred1_1, 1); + } + } + /** + * @returns {number} + */ + vertex_count() { + const ret = wasm.bspmesh_vertex_count(this.__wbg_ptr); + return ret >>> 0; + } + /** + * Move vertex data out (avoids clone). Field becomes empty after call. + * @returns {Float32Array} + */ + vertex_data() { + const ret = wasm.bspmesh_vertex_data(this.__wbg_ptr); + var v1 = getArrayF32FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 4, 4); + return v1; + } + /** + * Number of water draw ranges (call before water_draw_data) + * @returns {number} + */ + water_draw_count() { + const ret = wasm.bspmesh_water_draw_count(this.__wbg_ptr); + return ret >>> 0; + } + /** + * Water draw ranges: same format as model_draw_data but for water faces + * @returns {Int32Array} + */ + water_draw_data() { + const ret = wasm.bspmesh_water_draw_data(this.__wbg_ptr); + var v1 = getArrayI32FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 4, 4); + return v1; + } +} +if (Symbol.dispose) BspMesh.prototype[Symbol.dispose] = BspMesh.prototype.free; + +export class ReplayData { + static __wrap(ptr) { + ptr = ptr >>> 0; + const obj = Object.create(ReplayData.prototype); + obj.__wbg_ptr = ptr; + ReplayDataFinalization.register(obj, obj.__wbg_ptr, obj); + return obj; + } + __destroy_into_raw() { + const ptr = this.__wbg_ptr; + this.__wbg_ptr = 0; + ReplayDataFinalization.unregister(this); + return ptr; + } + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_replaydata_free(ptr, 0); + } + /** + * @returns {Float32Array} + */ + angles() { + const ret = wasm.replaydata_angles(this.__wbg_ptr); + var v1 = getArrayF32FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 4, 4); + return v1; + } + /** + * @returns {Int32Array} + */ + buttons_array() { + const ret = wasm.replaydata_buttons_array(this.__wbg_ptr); + var v1 = getArrayI32FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 4, 4); + return v1; + } + /** + * @returns {Int32Array} + */ + flags_array() { + const ret = wasm.replaydata_flags_array(this.__wbg_ptr); + var v1 = getArrayI32FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 4, 4); + return v1; + } + /** + * @returns {string} + */ + map_name() { + let deferred1_0; + let deferred1_1; + try { + const ret = wasm.replaydata_map_name(this.__wbg_ptr); + deferred1_0 = ret[0]; + deferred1_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred1_0, deferred1_1, 1); + } + } + /** + * @returns {Float32Array} + */ + positions() { + const ret = wasm.replaydata_positions(this.__wbg_ptr); + var v1 = getArrayF32FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 4, 4); + return v1; + } + /** + * @returns {number} + */ + preframes() { + const ret = wasm.replaydata_preframes(this.__wbg_ptr); + return ret; + } + /** + * @returns {number} + */ + tick_count() { + const ret = wasm.replaydata_tick_count(this.__wbg_ptr); + return ret >>> 0; + } + /** + * @returns {number} + */ + tick_rate() { + const ret = wasm.replaydata_tick_rate(this.__wbg_ptr); + return ret >>> 0; + } + /** + * @returns {number} + */ + time() { + const ret = wasm.replaydata_time(this.__wbg_ptr); + return ret; + } +} +if (Symbol.dispose) ReplayData.prototype[Symbol.dispose] = ReplayData.prototype.free; + +/** + * Decode a VTF file, downscale to target dimensions, apply color tint, create tiled version with padding. + * Returns RGBA data of size (target_w + 2*pad) × (target_h + 2*pad) × 4, ready for texSubImage2D. + * When force_opaque is true, all alpha values are set to 255 (most Source textures use alpha + * for specular masks etc., not actual transparency). + * @param {Uint8Array} vtf_data + * @param {number} target_w + * @param {number} target_h + * @param {number} color_r + * @param {number} color_g + * @param {number} color_b + * @param {boolean} force_opaque + * @returns {Uint8Array | undefined} + */ +export function decode_and_tile_vtf(vtf_data, target_w, target_h, color_r, color_g, color_b, force_opaque) { + const ptr0 = passArray8ToWasm0(vtf_data, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.decode_and_tile_vtf(ptr0, len0, target_w, target_h, color_r, color_g, color_b, force_opaque); + let v2; + if (ret[0] !== 0) { + v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + } + return v2; +} + +/** + * @param {Uint8Array} data + * @returns {Uint8Array} + */ +export function decompress_bz2(data) { + const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.decompress_bz2(ptr0, len0); + if (ret[3]) { + throw takeFromExternrefTable0(ret[2]); + } + var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v2; +} + +export function init() { + wasm.init(); +} + +/** + * @param {Uint8Array} data + * @returns {BspMesh} + */ +export function parse_bsp(data) { + const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_bsp(ptr0, len0); + if (ret[2]) { + throw takeFromExternrefTable0(ret[1]); + } + return BspMesh.__wrap(ret[0]); +} + +/** + * Parse a BSP with extra files injected (e.g. prop models from VPK). + * `extras_json` is a JSON array of `{"path":"models/foo.mdl","offset":0,"length":1234}`. + * `extras_data` is all the file contents concatenated. + * @param {Uint8Array} data + * @param {string} extras_json + * @param {Uint8Array} extras_data + * @returns {BspMesh} + */ +export function parse_bsp_with_extras(data, extras_json, extras_data) { + const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ptr1 = passStringToWasm0(extras_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + const ptr2 = passArray8ToWasm0(extras_data, wasm.__wbindgen_malloc); + const len2 = WASM_VECTOR_LEN; + const ret = wasm.parse_bsp_with_extras(ptr0, len0, ptr1, len1, ptr2, len2); + if (ret[2]) { + throw takeFromExternrefTable0(ret[1]); + } + return BspMesh.__wrap(ret[0]); +} + +/** + * @param {Uint8Array} data + * @returns {ReplayData} + */ +export function parse_replay(data) { + const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_replay(ptr0, len0); + if (ret[2]) { + throw takeFromExternrefTable0(ret[1]); + } + return ReplayData.__wrap(ret[0]); +} + +/** + * Parse a VMT file and return JSON: {"basetexture":"...", "color":[r,g,b], "fps":0, "is_water":false} + * @param {Uint8Array} data + * @returns {string | undefined} + */ +export function parse_vmt_data(data) { + const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_vmt_data(ptr0, len0); + let v2; + if (ret[0] !== 0) { + v2 = getStringFromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + } + return v2; +} + +function __wbg_get_imports() { + const import0 = { + __proto__: null, + __wbg_Error_83742b46f01ce22d: function(arg0, arg1) { + const ret = Error(getStringFromWasm0(arg0, arg1)); + return ret; + }, + __wbg___wbindgen_throw_6ddd609b62940d55: function(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); + }, + __wbg_error_a6fa202b58aa1cd3: function(arg0, arg1) { + let deferred0_0; + let deferred0_1; + try { + deferred0_0 = arg0; + deferred0_1 = arg1; + console.error(getStringFromWasm0(arg0, arg1)); + } finally { + wasm.__wbindgen_free(deferred0_0, deferred0_1, 1); + } + }, + __wbg_log_524eedafa26daa59: function(arg0) { + console.log(arg0); + }, + __wbg_log_89f0432d129e5e26: function(arg0, arg1) { + console.log(getStringFromWasm0(arg0, arg1)); + }, + __wbg_new_227d7c05414eb861: function() { + const ret = new Error(); + return ret; + }, + __wbg_stack_3b0d974bbf31e44f: function(arg0, arg1) { + const ret = arg1.stack; + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + }, + __wbindgen_cast_0000000000000001: function(arg0, arg1) { + // Cast intrinsic for `Ref(String) -> Externref`. + const ret = getStringFromWasm0(arg0, arg1); + return ret; + }, + __wbindgen_init_externref_table: function() { + const table = wasm.__wbindgen_externrefs; + const offset = table.grow(4); + table.set(0, undefined); + table.set(offset + 0, undefined); + table.set(offset + 1, null); + table.set(offset + 2, true); + table.set(offset + 3, false); + }, + }; + return { + __proto__: null, + "./bhop_replay_viewer_wasm_bg.js": import0, + }; +} + +const BspMeshFinalization = (typeof FinalizationRegistry === 'undefined') + ? { register: () => {}, unregister: () => {} } + : new FinalizationRegistry(ptr => wasm.__wbg_bspmesh_free(ptr >>> 0, 1)); +const ReplayDataFinalization = (typeof FinalizationRegistry === 'undefined') + ? { register: () => {}, unregister: () => {} } + : new FinalizationRegistry(ptr => wasm.__wbg_replaydata_free(ptr >>> 0, 1)); + +function getArrayF32FromWasm0(ptr, len) { + ptr = ptr >>> 0; + return getFloat32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len); +} + +function getArrayI32FromWasm0(ptr, len) { + ptr = ptr >>> 0; + return getInt32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len); +} + +function getArrayU32FromWasm0(ptr, len) { + ptr = ptr >>> 0; + return getUint32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len); +} + +function getArrayU8FromWasm0(ptr, len) { + ptr = ptr >>> 0; + return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len); +} + +let cachedDataViewMemory0 = null; +function getDataViewMemory0() { + if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) { + cachedDataViewMemory0 = new DataView(wasm.memory.buffer); + } + return cachedDataViewMemory0; +} + +let cachedFloat32ArrayMemory0 = null; +function getFloat32ArrayMemory0() { + if (cachedFloat32ArrayMemory0 === null || cachedFloat32ArrayMemory0.byteLength === 0) { + cachedFloat32ArrayMemory0 = new Float32Array(wasm.memory.buffer); + } + return cachedFloat32ArrayMemory0; +} + +let cachedInt32ArrayMemory0 = null; +function getInt32ArrayMemory0() { + if (cachedInt32ArrayMemory0 === null || cachedInt32ArrayMemory0.byteLength === 0) { + cachedInt32ArrayMemory0 = new Int32Array(wasm.memory.buffer); + } + return cachedInt32ArrayMemory0; +} + +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return decodeText(ptr, len); +} + +let cachedUint32ArrayMemory0 = null; +function getUint32ArrayMemory0() { + if (cachedUint32ArrayMemory0 === null || cachedUint32ArrayMemory0.byteLength === 0) { + cachedUint32ArrayMemory0 = new Uint32Array(wasm.memory.buffer); + } + return cachedUint32ArrayMemory0; +} + +let cachedUint8ArrayMemory0 = null; +function getUint8ArrayMemory0() { + if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { + cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8ArrayMemory0; +} + +function passArray8ToWasm0(arg, malloc) { + const ptr = malloc(arg.length * 1, 1) >>> 0; + getUint8ArrayMemory0().set(arg, ptr / 1); + WASM_VECTOR_LEN = arg.length; + return ptr; +} + +function passStringToWasm0(arg, malloc, realloc) { + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length, 1) >>> 0; + getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + + const mem = getUint8ArrayMemory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len); + const ret = cachedTextEncoder.encodeInto(arg, view); + + offset += ret.written; + ptr = realloc(ptr, len, offset, 1) >>> 0; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +function takeFromExternrefTable0(idx) { + const value = wasm.__wbindgen_externrefs.get(idx); + wasm.__externref_table_dealloc(idx); + return value; +} + +let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); +cachedTextDecoder.decode(); +const MAX_SAFARI_DECODE_BYTES = 2146435072; +let numBytesDecoded = 0; +function decodeText(ptr, len) { + numBytesDecoded += len; + if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) { + cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); + cachedTextDecoder.decode(); + numBytesDecoded = len; + } + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); +} + +const cachedTextEncoder = new TextEncoder(); + +if (!('encodeInto' in cachedTextEncoder)) { + cachedTextEncoder.encodeInto = function (arg, view) { + const buf = cachedTextEncoder.encode(arg); + view.set(buf); + return { + read: arg.length, + written: buf.length + }; + }; +} + +let WASM_VECTOR_LEN = 0; + +let wasmModule, wasm; +function __wbg_finalize_init(instance, module) { + wasm = instance.exports; + wasmModule = module; + cachedDataViewMemory0 = null; + cachedFloat32ArrayMemory0 = null; + cachedInt32ArrayMemory0 = null; + cachedUint32ArrayMemory0 = null; + cachedUint8ArrayMemory0 = null; + wasm.__wbindgen_start(); + return wasm; +} + +async function __wbg_load(module, imports) { + if (typeof Response === 'function' && module instanceof Response) { + if (typeof WebAssembly.instantiateStreaming === 'function') { + try { + return await WebAssembly.instantiateStreaming(module, imports); + } catch (e) { + const validResponse = module.ok && expectedResponseType(module.type); + + if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') { + console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); + + } else { throw e; } + } + } + + const bytes = await module.arrayBuffer(); + return await WebAssembly.instantiate(bytes, imports); + } else { + const instance = await WebAssembly.instantiate(module, imports); + + if (instance instanceof WebAssembly.Instance) { + return { instance, module }; + } else { + return instance; + } + } + + function expectedResponseType(type) { + switch (type) { + case 'basic': case 'cors': case 'default': return true; + } + return false; + } +} + +function initSync(module) { + if (wasm !== undefined) return wasm; + + + if (module !== undefined) { + if (Object.getPrototypeOf(module) === Object.prototype) { + ({module} = module) + } else { + console.warn('using deprecated parameters for `initSync()`; pass a single object instead') + } + } + + const imports = __wbg_get_imports(); + if (!(module instanceof WebAssembly.Module)) { + module = new WebAssembly.Module(module); + } + const instance = new WebAssembly.Instance(module, imports); + return __wbg_finalize_init(instance, module); +} + +async function __wbg_init(module_or_path) { + if (wasm !== undefined) return wasm; + + + if (module_or_path !== undefined) { + if (Object.getPrototypeOf(module_or_path) === Object.prototype) { + ({module_or_path} = module_or_path) + } else { + console.warn('using deprecated parameters for the initialization function; pass a single object instead') + } + } + + if (module_or_path === undefined) { + module_or_path = new URL('bhop_replay_viewer_wasm_bg.wasm', import.meta.url); + } + const imports = __wbg_get_imports(); + + if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) { + module_or_path = fetch(module_or_path); + } + + const { instance, module } = await __wbg_load(await module_or_path, imports); + + return __wbg_finalize_init(instance, module); +} + +export { initSync, __wbg_init as default }; diff --git a/src/replay-viewer/wasm/bhop_replay_viewer_wasm_bg.wasm b/src/replay-viewer/wasm/bhop_replay_viewer_wasm_bg.wasm new file mode 100644 index 0000000000000000000000000000000000000000..5e5f9569356a75cc911fe76be22a61c20f3965de GIT binary patch literal 330038 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 w9??JYe)u+39I?_$9 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%0D5h5>2A1Bxhb_Mgalm!k8{xkp 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 void; +export const bspmesh_animated_frame_data: (a: number) => [number, number]; +export const bspmesh_animated_texture_info: (a: number) => [number, number]; +export const bspmesh_find_cluster: (a: number, b: number, c: number, d: number) => number; +export const bspmesh_has_sky_faces: (a: number) => number; +export const bspmesh_has_skybox: (a: number) => number; +export const bspmesh_index_count: (a: number) => number; +export const bspmesh_index_data: (a: number) => [number, number]; +export const bspmesh_is_cluster_visible: (a: number, b: number, c: number) => number; +export const bspmesh_lightmap_atlas_data: (a: number) => [number, number]; +export const bspmesh_lightmap_height: (a: number) => number; +export const bspmesh_lightmap_width: (a: number) => number; +export const bspmesh_missing_props: (a: number) => [number, number]; +export const bspmesh_model_draw_count: (a: number) => number; +export const bspmesh_model_draw_data: (a: number) => [number, number]; +export const bspmesh_sky_index_data: (a: number) => [number, number]; +export const bspmesh_sky_vertex_data: (a: number) => [number, number]; +export const bspmesh_skybox_data: (a: number) => [number, number]; +export const bspmesh_skybox_face_size: (a: number) => number; +export const bspmesh_texture_atlas_data: (a: number) => [number, number]; +export const bspmesh_texture_atlas_height: (a: number) => number; +export const bspmesh_texture_atlas_width: (a: number) => number; +export const bspmesh_unresolved_textures: (a: number) => [number, number]; +export const bspmesh_vertex_count: (a: number) => number; +export const bspmesh_vertex_data: (a: number) => [number, number]; +export const bspmesh_water_draw_count: (a: number) => number; +export const bspmesh_water_draw_data: (a: number) => [number, number]; +export const parse_bsp: (a: number, b: number) => [number, number, number]; +export const parse_bsp_with_extras: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number]; +export const __wbg_replaydata_free: (a: number, b: number) => void; +export const parse_replay: (a: number, b: number) => [number, number, number]; +export const replaydata_angles: (a: number) => [number, number]; +export const replaydata_buttons_array: (a: number) => [number, number]; +export const replaydata_flags_array: (a: number) => [number, number]; +export const replaydata_map_name: (a: number) => [number, number]; +export const replaydata_positions: (a: number) => [number, number]; +export const replaydata_preframes: (a: number) => number; +export const replaydata_tick_count: (a: number) => number; +export const replaydata_tick_rate: (a: number) => number; +export const replaydata_time: (a: number) => number; +export const decode_and_tile_vtf: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number]; +export const init: () => void; +export const parse_vmt_data: (a: number, b: number) => [number, number]; +export const decompress_bz2: (a: number, b: number) => [number, number, number, number]; +export const __wbindgen_free: (a: number, b: number, c: number) => void; +export const __wbindgen_malloc: (a: number, b: number) => number; +export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; +export const __wbindgen_externrefs: WebAssembly.Table; +export const __externref_table_dealloc: (a: number) => void; +export const __wbindgen_start: () => void; diff --git a/src/replay-viewer/wasm/package.json b/src/replay-viewer/wasm/package.json new file mode 100644 index 0000000..42a6f70 --- /dev/null +++ b/src/replay-viewer/wasm/package.json @@ -0,0 +1,15 @@ +{ + "name": "bhop-replay-viewer-wasm", + "type": "module", + "version": "0.1.0", + "files": [ + "bhop_replay_viewer_wasm_bg.wasm", + "bhop_replay_viewer_wasm.js", + "bhop_replay_viewer_wasm.d.ts" + ], + "main": "bhop_replay_viewer_wasm.js", + "types": "bhop_replay_viewer_wasm.d.ts", + "sideEffects": [ + "./snippets/*" + ] +} \ No newline at end of file diff --git a/src/views/IndividualRecordView.vue b/src/views/IndividualRecordView.vue index 9d6be04..2e22d4f 100644 --- a/src/views/IndividualRecordView.vue +++ b/src/views/IndividualRecordView.vue @@ -9,6 +9,7 @@ import styleFormat from '@/utils/styleFormat'; import { useRouter } from 'vue-router'; import { useAuth } from '@/stores/auth'; + import ReplayViewerOverlay from '@/replay-viewer/ReplayViewerOverlay.vue'; const props = defineProps<{ id: string @@ -19,6 +20,7 @@ const isLoading: Ref = ref(false); const record: Ref = ref(null); const error: Ref = ref(null); + const showReplayViewer: Ref = ref(false); const playerUrl = computed(() => { return record.value ? `/players/${record.value.steamid}` : null; @@ -214,24 +216,30 @@
-
- + -
- + No Replay Available @@ -240,5 +248,14 @@
+ + + \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts index 975d368..0bc14d3 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -4,6 +4,7 @@ import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import vueDevTools from 'vite-plugin-vue-devtools' import tailwindcss from '@tailwindcss/vite' +import wasm from 'vite-plugin-wasm' // https://vite.dev/config/ export default defineConfig({ @@ -12,6 +13,7 @@ export default defineConfig({ vue(), vueDevTools(), tailwindcss(), + wasm(), ], resolve: { alias: { @@ -25,11 +27,17 @@ export default defineConfig({ target: 'https://offstyles.tommyy.dev', changeOrigin: true, secure: true, - configure: (proxy, options) => { - proxy.on('proxyReq', (proxyReq, req, res) => { - // Forward cookies to maintain session - if (req.headers.cookie) { - proxyReq.setHeader('Cookie', req.headers.cookie); + cookieDomainRewrite: 'localhost', + configure: (proxy) => { + // Rewrite response cookies so they work on http://localhost + proxy.on('proxyRes', (proxyRes) => { + const setCookie = proxyRes.headers['set-cookie']; + if (setCookie) { + proxyRes.headers['set-cookie'] = setCookie.map((cookie: string) => + cookie + .replace(/;\s*Secure/gi, '') + .replace(/;\s*SameSite=\w+/gi, '; SameSite=Lax') + ); } }); } From f6de00668b4db48a076cf3b2a68ae25c0b152f3c Mon Sep 17 00:00:00 2001 From: tommy Date: Thu, 12 Mar 2026 05:52:42 -0400 Subject: [PATCH 02/62] wasm: Proper decompressing of lumps (Hi LZMA!!!!) --- .../wasm/bhop_replay_viewer_wasm_bg.wasm | Bin 330038 -> 358031 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/replay-viewer/wasm/bhop_replay_viewer_wasm_bg.wasm b/src/replay-viewer/wasm/bhop_replay_viewer_wasm_bg.wasm index 5e5f9569356a75cc911fe76be22a61c20f3965de..ce535b251b6e132ad31960f01acdea9b2ece1a77 100644 GIT binary patch delta 111025 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 G^?v|CS)J+t delta 83621 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 M)GIK@4f^u`0fc++!vFvP From 9eca607d0953ba88a8d1a1a160b7f65ce8f5945a Mon Sep 17 00:00:00 2001 From: tommy Date: Thu, 12 Mar 2026 06:09:56 -0400 Subject: [PATCH 03/62] Lock viewing replays behind being logged in lol --- src/views/IndividualRecordView.vue | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/views/IndividualRecordView.vue b/src/views/IndividualRecordView.vue index 2e22d4f..b55d048 100644 --- a/src/views/IndividualRecordView.vue +++ b/src/views/IndividualRecordView.vue @@ -218,11 +218,20 @@
+
diff --git a/src/replay-viewer/StatsOverlay.vue b/src/replay-viewer/StatsOverlay.vue new file mode 100644 index 0000000..dbfdb75 --- /dev/null +++ b/src/replay-viewer/StatsOverlay.vue @@ -0,0 +1,17 @@ + + + diff --git a/src/replay-viewer/ViewerControls.vue b/src/replay-viewer/ViewerControls.vue index 891bfaa..d88183c 100644 --- a/src/replay-viewer/ViewerControls.vue +++ b/src/replay-viewer/ViewerControls.vue @@ -8,7 +8,7 @@ const props = defineProps<{ camera: Camera }>() -const emit = defineEmits(['close']) +const emit = defineEmits(['close', 'toggle-stats']) const isScrubbing = ref(false) const scrubberValue = ref(0) @@ -95,6 +95,8 @@ function onKeyDown(e: KeyboardEvent) { emit('close') } else if (e.key.toLowerCase() === 'x') { toggleCamera() + } else if (e.key.toLowerCase() === 'g') { + emit('toggle-stats') } else if (e.key.toLowerCase() === 'f' && !e.ctrlKey) { toggleFullscreen() } @@ -187,6 +189,15 @@ defineExpose({ updateScrubber }) Camera X + + +