From 45aa370ea697ef97613260bf481725b4852f05b5 Mon Sep 17 00:00:00 2001 From: John Beshir Date: Mon, 20 Jul 2026 17:59:33 +0100 Subject: [PATCH 1/2] Add The Long Thaw platform adventure --- README.md | 1 + widgets/long-thaw/.gitignore | 3 + widgets/long-thaw/README.md | 15 + widgets/long-thaw/THIRD_PARTY.md | 11 + widgets/long-thaw/index.html | 12 + widgets/long-thaw/package-lock.json | 2158 +++++++++++++++++ widgets/long-thaw/package.json | 26 + widgets/long-thaw/public/favicon.ico | Bin 0 -> 15086 bytes widgets/long-thaw/public/favicon.svg | 6 + widgets/long-thaw/src/App.tsx | 11 + widgets/long-thaw/src/assets/bat-1.png | Bin 0 -> 1001 bytes widgets/long-thaw/src/assets/bat-2.png | Bin 0 -> 953 bytes widgets/long-thaw/src/assets/dead-tree.png | Bin 0 -> 2373 bytes widgets/long-thaw/src/assets/ember.png | Bin 0 -> 597 bytes widgets/long-thaw/src/assets/flame.png | Bin 0 -> 68498 bytes widgets/long-thaw/src/assets/ghost-1.png | Bin 0 -> 747 bytes widgets/long-thaw/src/assets/ghost-2.png | Bin 0 -> 815 bytes widgets/long-thaw/src/assets/ice-block.png | Bin 0 -> 2378 bytes widgets/long-thaw/src/assets/ice-water.png | Bin 0 -> 2116 bytes widgets/long-thaw/src/assets/igloo.png | Bin 0 -> 1254 bytes widgets/long-thaw/src/assets/player-hurt.png | Bin 0 -> 2737 bytes widgets/long-thaw/src/assets/player-jump.png | Bin 0 -> 2750 bytes widgets/long-thaw/src/assets/player-stand.png | Bin 0 -> 2699 bytes .../long-thaw/src/assets/player-walk-1.png | Bin 0 -> 3637 bytes .../long-thaw/src/assets/player-walk-2.png | Bin 0 -> 3754 bytes widgets/long-thaw/src/assets/snowball.png | Bin 0 -> 2509 bytes .../long-thaw/src/assets/tree-top-snow.png | Bin 0 -> 2209 bytes widgets/long-thaw/src/assets/tree.png | Bin 0 -> 999 bytes widgets/long-thaw/src/assets/tundra-mid.png | Bin 0 -> 1904 bytes widgets/long-thaw/src/assets/tundra.png | Bin 0 -> 2325 bytes widgets/long-thaw/src/game.ts | 134 + widgets/long-thaw/src/main.tsx | 8 + widgets/long-thaw/src/theme.css | 8 + widgets/long-thaw/src/vite-env.d.ts | 1 + widgets/long-thaw/test/playtest.cjs | 42 + .../long-thaw/test/validate-production.cjs | 23 + widgets/long-thaw/tsconfig.json | 21 + widgets/long-thaw/vite.config.ts | 9 + widgets/long-thaw/widget.json | 1 + widgets/long-thaw/wrangler.jsonc | 7 + 40 files changed, 2497 insertions(+) create mode 100644 widgets/long-thaw/.gitignore create mode 100644 widgets/long-thaw/README.md create mode 100644 widgets/long-thaw/THIRD_PARTY.md create mode 100644 widgets/long-thaw/index.html create mode 100644 widgets/long-thaw/package-lock.json create mode 100644 widgets/long-thaw/package.json create mode 100644 widgets/long-thaw/public/favicon.ico create mode 100644 widgets/long-thaw/public/favicon.svg create mode 100644 widgets/long-thaw/src/App.tsx create mode 100644 widgets/long-thaw/src/assets/bat-1.png create mode 100644 widgets/long-thaw/src/assets/bat-2.png create mode 100644 widgets/long-thaw/src/assets/dead-tree.png create mode 100644 widgets/long-thaw/src/assets/ember.png create mode 100644 widgets/long-thaw/src/assets/flame.png create mode 100644 widgets/long-thaw/src/assets/ghost-1.png create mode 100644 widgets/long-thaw/src/assets/ghost-2.png create mode 100644 widgets/long-thaw/src/assets/ice-block.png create mode 100644 widgets/long-thaw/src/assets/ice-water.png create mode 100644 widgets/long-thaw/src/assets/igloo.png create mode 100644 widgets/long-thaw/src/assets/player-hurt.png create mode 100644 widgets/long-thaw/src/assets/player-jump.png create mode 100644 widgets/long-thaw/src/assets/player-stand.png create mode 100644 widgets/long-thaw/src/assets/player-walk-1.png create mode 100644 widgets/long-thaw/src/assets/player-walk-2.png create mode 100644 widgets/long-thaw/src/assets/snowball.png create mode 100644 widgets/long-thaw/src/assets/tree-top-snow.png create mode 100644 widgets/long-thaw/src/assets/tree.png create mode 100644 widgets/long-thaw/src/assets/tundra-mid.png create mode 100644 widgets/long-thaw/src/assets/tundra.png create mode 100644 widgets/long-thaw/src/game.ts create mode 100644 widgets/long-thaw/src/main.tsx create mode 100644 widgets/long-thaw/src/theme.css create mode 100644 widgets/long-thaw/src/vite-env.d.ts create mode 100644 widgets/long-thaw/test/playtest.cjs create mode 100644 widgets/long-thaw/test/validate-production.cjs create mode 100644 widgets/long-thaw/tsconfig.json create mode 100644 widgets/long-thaw/vite.config.ts create mode 100644 widgets/long-thaw/widget.json create mode 100644 widgets/long-thaw/wrangler.jsonc diff --git a/README.md b/README.md index d990d1a..8767ef9 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ Small, **experimental** web widgets — quickly generated by AI to visualise or | function-plotter | https://function-plotter.widgets.beshir.org | Plot any function of x as an SVG curve. | | image-comparison-table | https://image-comparison-table.widgets.beshir.org | Side-by-side comparison grids of labelled images, with click-to-zoom lightbox and per-row prompt info. | | japanese-verb-tower | https://japanese-verb-tower.widgets.beshir.org | Assemble a Japanese verb morpheme-by-morpheme through its conjugation layers; search 26,784 verbs by romaji, kana, or kanji. | +| long-thaw | https://long-thaw.widgets.beshir.org | Carry the last living ember through a frozen forest in a compact cinematic platform adventure. | | pennsic-planner | https://pennsic-planner.widgets.beshir.org | Browse the Pennsic 53 (2026) class schedule and build a shareable personal calendar with conflict detection and .ics export. | ## Embedding diff --git a/widgets/long-thaw/.gitignore b/widgets/long-thaw/.gitignore new file mode 100644 index 0000000..1ac7851 --- /dev/null +++ b/widgets/long-thaw/.gitignore @@ -0,0 +1,3 @@ +dist-test/ +*.png +!src/assets/*.png diff --git a/widgets/long-thaw/README.md b/widgets/long-thaw/README.md new file mode 100644 index 0000000..90cbd4f --- /dev/null +++ b/widgets/long-thaw/README.md @@ -0,0 +1,15 @@ +# The Long Thaw + +A compact 5–10 minute platform adventure. Carry the last living ember through three frozen regions and restore the summit beacon. + +## Controls + +- Move: A/D or arrow keys +- Jump: Space, W, or Up +- Dash: Shift +- Place or retrieve ember: E +- Pause: Escape or P +- Music: M +- Restart: R + +Run `npm install && npm run build`, or `npm run dev -- --host 127.0.0.1` for local development. diff --git a/widgets/long-thaw/THIRD_PARTY.md b/widgets/long-thaw/THIRD_PARTY.md new file mode 100644 index 0000000..5795bea --- /dev/null +++ b/widgets/long-thaw/THIRD_PARTY.md @@ -0,0 +1,11 @@ +# Third-party assets + +The game uses selected artwork from the following Kenney packs, obtained through the assets MCP server: + +- Platformer Art: Winter +- Platformer Art: Deluxe +- Particle Pack + +All are released under [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/). Attribution is not required, but is included here with thanks to Kenney. + +The bundled Cinzel Decorative and Nunito Sans fonts are licensed under the SIL Open Font License 1.1. diff --git a/widgets/long-thaw/index.html b/widgets/long-thaw/index.html new file mode 100644 index 0000000..fb7017c --- /dev/null +++ b/widgets/long-thaw/index.html @@ -0,0 +1,12 @@ + + + + + + + + + The Long Thaw + +
+ diff --git a/widgets/long-thaw/package-lock.json b/widgets/long-thaw/package-lock.json new file mode 100644 index 0000000..bf604e2 --- /dev/null +++ b/widgets/long-thaw/package-lock.json @@ -0,0 +1,2158 @@ +{ + "name": "widget-long-thaw", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "widget-long-thaw", + "version": "1.0.0", + "dependencies": { + "@fontsource/cinzel-decorative": "5.3.0", + "@fontsource/nunito-sans": "5.3.0", + "preact": "10.27.2" + }, + "devDependencies": { + "@preact/preset-vite": "2.10.2", + "cross-env": "7.0.3", + "playwright": "1.61.1", + "typescript": "5.9.3", + "vite": "7.2.4", + "vite-plugin-singlefile": "2.3.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.29.7.tgz", + "integrity": "sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", + "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.29.7.tgz", + "integrity": "sha512-WsZulLVBUHXVj2cUcPVx6UE21TpalB6bHbSFErKT0Ib++ax24jjXe73FqlWvdylFOjiuPHYi6VCcgRad1ItN+A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-syntax-jsx": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.29.7.tgz", + "integrity": "sha512-Xfy3UVMF04+ypnFbkhvfqtmvwfe92qwQdbGZVonhE+6v35GzlofmOnA1szaZqzb9xYWr0nl1e5EMmzi0DNON1g==", + "dev": true, + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@fontsource/cinzel-decorative": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource/cinzel-decorative/-/cinzel-decorative-5.3.0.tgz", + "integrity": "sha512-9T6Fsv6l+5CUjvKWcTlMtkAYR/C8p2ll0bgT5krOU+DTLJRmaZYpXzcRoxPvENA6+uApa+Yyn0Ft/hdq083iVA==", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource/nunito-sans": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource/nunito-sans/-/nunito-sans-5.3.0.tgz", + "integrity": "sha512-CctNhebQ2YYJUwVMCAkHexQg7yedfz9s8JzaETALyc9QIQuDFRlNTWXux9H5PsNLgptPkrzRDomAdLJt1sDFpQ==", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@preact/preset-vite": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.10.2.tgz", + "integrity": "sha512-K9wHlJOtkE+cGqlyQ5v9kL3Ge0Ql4LlIZjkUTL+1zf3nNdF88F9UZN6VTV8jdzBX9Fl7WSzeNMSDG7qECPmSmg==", + "dev": true, + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.22.15", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@prefresh/vite": "^2.4.1", + "@rollup/pluginutils": "^4.1.1", + "babel-plugin-transform-hook-names": "^1.0.2", + "debug": "^4.3.4", + "picocolors": "^1.1.1", + "vite-prerender-plugin": "^0.5.3" + }, + "peerDependencies": { + "@babel/core": "7.x", + "vite": "2.x || 3.x || 4.x || 5.x || 6.x || 7.x" + } + }, + "node_modules/@prefresh/babel-plugin": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@prefresh/babel-plugin/-/babel-plugin-0.5.3.tgz", + "integrity": "sha512-57LX2SHs4BX2s1IwCjNzTE2OJeEepRCNf1VTEpbNcUyHfMO68eeOWGDIt4ob9aYlW6PEWZ1SuwNikuoIXANDtQ==", + "dev": true + }, + "node_modules/@prefresh/core": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/@prefresh/core/-/core-1.5.10.tgz", + "integrity": "sha512-7yPTFbG56sutaFu8krp3B4a200KOFUvrtlllKWRuLjsYXo9UUucHOZRcer+gtgMkFTpv6ob8TGcTwA32bSwa1w==", + "dev": true, + "peerDependencies": { + "preact": "^10.0.0 || ^11.0.0-0" + } + }, + "node_modules/@prefresh/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@prefresh/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-vq/sIuN5nYfYzvyayXI4C2QkprfNaHUQ9ZX+3xLD8nL3rWyzpxOm1+K7RtMbhd+66QcaISViK7amjnheQ/4WZw==", + "dev": true + }, + "node_modules/@prefresh/vite": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/@prefresh/vite/-/vite-2.4.12.tgz", + "integrity": "sha512-FY1fzXpUjiuosznMV0YM7XAOPZjB5FIdWS0W24+XnlxYkt9hNAwwsiKYn+cuTEoMtD/ZVazS5QVssBr9YhpCQA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.22.1", + "@prefresh/babel-plugin": "^0.5.2", + "@prefresh/core": "^1.5.0", + "@prefresh/utils": "^1.2.0", + "@rollup/pluginutils": "^4.2.1" + }, + "peerDependencies": { + "preact": "^10.4.0 || ^11.0.0-0", + "vite": ">=2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz", + "integrity": "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz", + "integrity": "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz", + "integrity": "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz", + "integrity": "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz", + "integrity": "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz", + "integrity": "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz", + "integrity": "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz", + "integrity": "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz", + "integrity": "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz", + "integrity": "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz", + "integrity": "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz", + "integrity": "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz", + "integrity": "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz", + "integrity": "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz", + "integrity": "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz", + "integrity": "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz", + "integrity": "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz", + "integrity": "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz", + "integrity": "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz", + "integrity": "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz", + "integrity": "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz", + "integrity": "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz", + "integrity": "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz", + "integrity": "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz", + "integrity": "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true + }, + "node_modules/babel-plugin-transform-hook-names": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-hook-names/-/babel-plugin-transform-hook-names-1.0.2.tgz", + "integrity": "sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==", + "dev": true, + "peerDependencies": { + "@babel/core": "^7.12.10" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.43", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.43.tgz", + "integrity": "sha512-AjYpR78kDWAY3Efj+cDTFH9t9SCoL7OoTp1BOb0mQV7S+6CiLwnWM3FyxhJtdPufDFKzmCSFoUncKjWgJEZTCQ==", + "dev": true, + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.6.tgz", + "integrity": "sha512-FQBYNK15VMslhLHpA7+n+n1GOlF1kId2xcCg7/j95f24AOF6VDYMNH4mFxF7KuaTdv627faazpOAjFzMrfJOUw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "baseline-browser-mapping": "^2.10.42", + "caniuse-lite": "^1.0.30001803", + "electron-to-chromium": "^1.5.389", + "node-releases": "^2.0.51", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001806", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001806.tgz", + "integrity": "sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.393", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.393.tgz", + "integrity": "sha512-kiDJdIUawuEIcp9XoICKp1iTYDEbgguIPq526N1Q7jIQDeQ3CqoMx71025PI/7E48Ddtw2HuWsVjY7afEgNxmg==", + "dev": true + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.16", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", + "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-html-parser": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.13.tgz", + "integrity": "sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==", + "dev": true, + "dependencies": { + "css-select": "^5.1.0", + "he": "1.2.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.51", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz", + "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/playwright": { + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.61.1.tgz", + "integrity": "sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==", + "dev": true, + "dependencies": { + "playwright-core": "1.61.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.61.1.tgz", + "integrity": "sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==", + "dev": true, + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/postcss": { + "version": "8.5.20", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.20.tgz", + "integrity": "sha512-lW616l85ucIQL+FocMmL7pQFPqBmwejrCMg+iPxyImlrANNJG9NHq/RkyCZopDhd8C3LA03PHRJDjkbGu8vvug==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.16", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/preact": { + "version": "10.27.2", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.27.2.tgz", + "integrity": "sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/rollup": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.2.tgz", + "integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.62.2", + "@rollup/rollup-android-arm64": "4.62.2", + "@rollup/rollup-darwin-arm64": "4.62.2", + "@rollup/rollup-darwin-x64": "4.62.2", + "@rollup/rollup-freebsd-arm64": "4.62.2", + "@rollup/rollup-freebsd-x64": "4.62.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.2", + "@rollup/rollup-linux-arm-musleabihf": "4.62.2", + "@rollup/rollup-linux-arm64-gnu": "4.62.2", + "@rollup/rollup-linux-arm64-musl": "4.62.2", + "@rollup/rollup-linux-loong64-gnu": "4.62.2", + "@rollup/rollup-linux-loong64-musl": "4.62.2", + "@rollup/rollup-linux-ppc64-gnu": "4.62.2", + "@rollup/rollup-linux-ppc64-musl": "4.62.2", + "@rollup/rollup-linux-riscv64-gnu": "4.62.2", + "@rollup/rollup-linux-riscv64-musl": "4.62.2", + "@rollup/rollup-linux-s390x-gnu": "4.62.2", + "@rollup/rollup-linux-x64-gnu": "4.62.2", + "@rollup/rollup-linux-x64-musl": "4.62.2", + "@rollup/rollup-openbsd-x64": "4.62.2", + "@rollup/rollup-openharmony-arm64": "4.62.2", + "@rollup/rollup-win32-arm64-msvc": "4.62.2", + "@rollup/rollup-win32-ia32-msvc": "4.62.2", + "@rollup/rollup-win32-x64-gnu": "4.62.2", + "@rollup/rollup-win32-x64-msvc": "4.62.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/simple-code-frame": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/simple-code-frame/-/simple-code-frame-1.3.0.tgz", + "integrity": "sha512-MB4pQmETUBlNs62BBeRjIFGeuy/x6gGKh7+eRUemn1rCFhqo7K+4slPqsyizCbcbYLnaYqaoZ2FWsZ/jN06D8w==", + "dev": true, + "dependencies": { + "kolorist": "^1.6.0" + } + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-trace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-1.0.0.tgz", + "integrity": "sha512-H6D7134xi6qONvh7ZHKgviXf+rd3vhGBSvebPZCaUkd8zvQ+7PtDw6CljPTe4cXWNf2IKZGNqw6VJXSb9IgBpA==", + "dev": true, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.4.tgz", + "integrity": "sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==", + "dev": true, + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-plugin-singlefile": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/vite-plugin-singlefile/-/vite-plugin-singlefile-2.3.0.tgz", + "integrity": "sha512-DAcHzYypM0CasNLSz/WG0VdKOCxGHErfrjOoyIPiNxTPTGmO6rRD/te93n1YL/s+miXq66ipF1brMBikf99c6A==", + "dev": true, + "dependencies": { + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">18.0.0" + }, + "peerDependencies": { + "rollup": "^4.44.1", + "vite": "^5.4.11 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/vite-prerender-plugin": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/vite-prerender-plugin/-/vite-prerender-plugin-0.5.13.tgz", + "integrity": "sha512-IKSpYkzDBsKAxa05naRbj7GvNVMSdww/Z/E89oO3xndz+gWnOBOKOAbEXv7qDhktY/j3vHgJmoV1pPzqU2tx9g==", + "dev": true, + "dependencies": { + "kolorist": "^1.8.0", + "magic-string": "0.x >= 0.26.0", + "node-html-parser": "^6.1.12", + "simple-code-frame": "^1.3.0", + "source-map": "^0.7.4", + "stack-trace": "^1.0.0-pre2" + }, + "peerDependencies": { + "vite": "5.x || 6.x || 7.x || 8.x" + } + }, + "node_modules/vite/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } +} diff --git a/widgets/long-thaw/package.json b/widgets/long-thaw/package.json new file mode 100644 index 0000000..f2d14f3 --- /dev/null +++ b/widgets/long-thaw/package.json @@ -0,0 +1,26 @@ +{ + "name": "widget-long-thaw", + "private": true, + "version": "1.0.0", + "type": "module", + "scripts": { + "build:test": "npm run typecheck && cross-env GAME_TEST_BUILD=1 vite build --outDir dist-test", + "build": "npm run typecheck && cross-env GAME_TEST_BUILD=0 vite build --outDir dist", + "typecheck": "tsc --noEmit", + "playtest": "node test/playtest.cjs", + "validate:production": "node test/validate-production.cjs dist/index.html" + }, + "dependencies": { + "@fontsource/cinzel-decorative": "5.3.0", + "@fontsource/nunito-sans": "5.3.0", + "preact": "10.27.2" + }, + "devDependencies": { + "@preact/preset-vite": "2.10.2", + "cross-env": "7.0.3", + "playwright": "1.61.1", + "typescript": "5.9.3", + "vite": "7.2.4", + "vite-plugin-singlefile": "2.3.0" + } +} diff --git a/widgets/long-thaw/public/favicon.ico b/widgets/long-thaw/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8ce1f6d2c4062c362876fe8aea50bac3c70ee895 GIT binary patch literal 15086 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 + + + + + diff --git a/widgets/long-thaw/src/App.tsx b/widgets/long-thaw/src/App.tsx new file mode 100644 index 0000000..9f81171 --- /dev/null +++ b/widgets/long-thaw/src/App.tsx @@ -0,0 +1,11 @@ +import { useEffect, useRef } from 'preact/hooks'; +import { mountGame } from './game'; + +export function App() { + const canvas = useRef(null); + useEffect(() => canvas.current ? mountGame(canvas.current) : undefined, []); + return
+ +

Click the game to focus. Move with A/D or arrows, jump with Space, dash with Shift, and place the ember with E.

+
; +} diff --git a/widgets/long-thaw/src/assets/bat-1.png b/widgets/long-thaw/src/assets/bat-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0d66f960a93a1cace3889aa4fb2e69008cc64936 GIT binary patch literal 1001 zcmVx=Tst5yv1ytpD172X*BrX~b?DA@!2&fkQ+w3Ge96<3pZ}07i~tmVM+>BiW45DmtHqXkrp5doOz(gHF^r>)RM zW+=a^fy6~aaa>uuHLRSmj>7r}#o9Ym!&5D|7FN)xa$!$Y&|K;WfU;Dzi$XO#)B+H= zj%PK5ZP*SCVmUg`>~uPMsZ@%KD*d4h$1D?Nv#jR2096#lY_(cuyHbWs(qj!>QUG>DJ(;Cl5Z#ox`r<(bicgx zo6aZ}0VgOFgjcnYZLSurR;!nCxhy{%f-(;Z1wcJo=V{&|Ksx3pX~AF;6$u7Vy4|kh z`A|=>Sd{N)9!UDtpbLe9naN~sfzLs#L}h|2T)>e|In*i5sk4+Z%v366CX>lq;4{9r zAB*(vrWRx^52=46n~gS39nIx(4^UX(d#B?8$F3YV3ps^Umf{75)ibDrSoqC!q{g{S zR?@>-iC0Jk2Ay%~sF}@XuM;m`MMAOeC(pmPz}F%N>ot&>q)XYFrWyPF-aMbr*Vt~i zkwcNPmN}hHD+Yyys;ZHJk!o(aZ->JnaSvs^UPlH+y86XIH3kE-SS%v5kko4>wBzx( zjM_#&Vuj7@M9R^THtA`u1gk}l{gejP5SUvnfqh;PfPRF9yfh2~i%ksZ;|e)h01=dB z>{A;6q4w~*!G+^L!a`meem?OE=;JKJ0}w12`^^oiu XZ)9b1s0M%T00000NkvXXu0mjfp@p>$ literal 0 HcmV?d00001 diff --git a/widgets/long-thaw/src/assets/bat-2.png b/widgets/long-thaw/src/assets/bat-2.png new file mode 100644 index 0000000000000000000000000000000000000000..29985f1360b1fcc9bb157f4ad3d0d72d0d8922e6 GIT binary patch literal 953 zcmV;q14jIbP)vdN;KU| zqUOP&P$S9vygBdOmx@GO81;Jnm*@FKx7!sS)#-FNd=?3ZBdEK6zpp$Kjv?6DAYFf{ zRQj1rCX4BGx*~0~!e_l+@7ME-LRAtl=@nEX(0+pjGy*8j=X1r3=-3@#WA1^3st38* zY)1WnJDbg-1WYyyS1ST7jmKloF>JS?8h{p=RfWDC2zJ4`1{*#}6JL=otiWm@%dEYb zAjF(htrggYzb>lDE2svbCAZTC=7j}}C0MPbE#@MOx8=d zdW++q6awG%6Y@i(i#bRL8$ZF`;2N(lSmFJ&3svoQ8y6WX6bh!S1B;m7Rg3fgu?Hi_ zen90oPH8k6O0`;js!F9I*J?E`nN0rNqSwyvss&tJi>Mt(Rc6BFMNMmA8Yd z4x|g#VCjccC_z|;3k`=u-{C@tg0`a$vMNi!cH!cCL4XVIcNBS8S_M4U4qOP95`eTI zyAs;1R54-}GPQQ=QX_PWJ9wyF!1(UlT7#7;27CZRcD2%%7mLNL5xiV3r=(J;yYO1? zILf_ds_g33bdA@l*NWzl1tO1t8J%F*CpC*2r$a!vY-cz&ZQ(02_+tn z--XwBU$2TsqmeFv!C-I&`06g9$hR?STF?<1H7 zD!gw530@AMfQ@RUCdHE7jh))EDk)jHw!wn28N(vEg>a$cIRT+J!XQt3&}77jl3HK-~9*t zB9+JJzz?MW001p?MObuGZ)S9NVRB^vVtFoNY;SL5WO*)Qa(QrcZ!T$VVP|D7P)Z)9b1s0M%T00000NkvXXu0mjfOL4aE literal 0 HcmV?d00001 diff --git a/widgets/long-thaw/src/assets/dead-tree.png b/widgets/long-thaw/src/assets/dead-tree.png new file mode 100644 index 0000000000000000000000000000000000000000..5022e096b011fd35672b0e78a5e82308439edaeb GIT binary patch literal 2373 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 literal 0 HcmV?d00001 diff --git a/widgets/long-thaw/src/assets/ember.png b/widgets/long-thaw/src/assets/ember.png new file mode 100644 index 0000000000000000000000000000000000000000..0e4b4db259f2379d7caba006b7eb02bf7bbe6bf2 GIT binary patch literal 597 zcmV-b0;>IqP)X zMarfUD>#I9oj?*RpFk2qyB;gP8Y`Io@R)GfWcW2s{`Q?F{Ts)?vl#JF9;MJbc>?}5 zqc0G$7)OAs!S-FCa^QCN-k8T*2ZqqD(;t3g+-)#Pt>dR{HK2MkW#?McxraY3qwU`@ zgHeL-#V-Y5l7jCw7>p9@XwzcC;Pj9%IUws=#{OT{g)lh?gVRIHShGhd{64u&Mu+Ts z1K+cXT})*cYPV8qwA}T*bCXDm5CFz5!Kdpl1;F>frwzs~v5K@SCXDvUF3jRe%P#)i zgAu!8vM%7w;>z<_zT50R@UkDPXH5F5XBe?7=FjKVGk$$oJ;R9Iqf~V*2pzM$vH~5p ze9J1%{>%6L`AY&vOI^I|Vq7?K_s?D}ckzr!%dlMNzIedcC*aEcf@O;dbg25L?%u~w z4OLdB!GJA|fIp jA|fIpA|fIpA~XF3(zM^DaaBNS00000NkvXXu0mjf0V5U$ literal 0 HcmV?d00001 diff --git a/widgets/long-thaw/src/assets/flame.png b/widgets/long-thaw/src/assets/flame.png new file mode 100644 index 0000000000000000000000000000000000000000..45046a9f7575d9d75b528f991b711005fe88287a GIT binary patch literal 68498 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

;2LXQy!%{aI^oS7g(jV7A;eg9!aix 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�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 literal 0 HcmV?d00001 diff --git a/widgets/long-thaw/src/assets/ice-block.png b/widgets/long-thaw/src/assets/ice-block.png new file mode 100644 index 0000000000000000000000000000000000000000..e9da94a16b07b7cabdd0ae396144bf8bd6885c06 GIT binary patch literal 2378 zcmaJ@YgiL!77kYd1q^p;f+2t;1#$rbNl3ulARq}zh~lM`hGc|@xsL+MML`y!f`Ztl zg{?+Gs#ryZvWi9#R}pXPgRE6hBa&8GC`i>6QQQfNyFcpA^UQqToO$2(yytx9$5aUT z3C>QRIl*8s=R_`B1g-Iw+rb`sYH&l_pv4#DtOQe4Yr$NJ7JxBis!RZtsE}j6_3x&&Bf(L;8fZyJdr}7;0fXQ@bEAQ5vI#mf|9&2 zr7mDjfeq-STDcmOtCT2fLr|(Nps6WaobsyRUH4L98QR9g?f~BN6AdmO| zp$f%Ev9r((2x18($oby}=8Xn8`=4U5ot z-M_dX%C}oOW7=Er^7_n;+)?eu-1Dfyx6}9OU*Ky^l9&+mSAeS4-4Nucz<_ zp|uBa!j(4VF6Gn`_*fxg@nf1x%(jc57s+LD1On;Ql7DPj{bj7ljij-ct1lvlYA$rVa%Sfsy=n~&=#x8buT70%E#?I zeI}oH5nkgKBKQZa)Y);Z$Qv7`5o7ec;a`2$I}lQrH~I`MOcNSV5iyR>x0V_OZ8iJ5 z5=rZ&%4BCsd!>HpdjE^@l*&hi)-{M^H3MDQG$^MLPh=Kx!tIjUbXb;;jzN8Tf)*e^DU zOs%VtD$R?^#jFaTrlh^Q*|~b@sT{VX@{hVAHJ3E?E9NTyPI3Jb2uM6_USZU5?NZ~h zC)>Kkb4K+M6X`@UG%=>mYQ%F zqQAe~Gx>O56nO~-XE9D#Iz_&0IW5e%BA{s=V!7dL{_=GdyA6TYF^isj11ZZ(PZaq{ zx9@h|YhTBEpUjHG^A)#<7B$dBKN?PCd19?JJ=RU2pR~k13v^wI8ycH`_dSJ}lr;F#&4%}Wb;pUli z@x;KjbS*>)%;`0bKM6%PZLiDmO!C8i1J&9fz-X6euJ#c6JUns(OMfib^5~=&k@ybu z>}`|tpE{Py4D{i+QWN^?x<)Uc11H*a>8W*4snC$TrzPdz!&xvivF%54cF^lXZ)(J(LHE8 z`>lP!N%pC1InI6K*R07ARtCm5*|SN7s3nySK%a#d>t*ar>*^s#~JQpOvu)f;ynn?c0RZ-va{Sbl z5pGdY#O5o-w2u0g-jtEw%eVk9zXx;X;csyWS}Zo~&Q0SlasKwriWS(t9$%W%xL*S0 zx^SKQK*o$7IblOKb5o`kyQT+Z^n8#J?&kjvooIVHE^W2~=+p38VmibOJ~PDKyXv@F9U@B8f}{$=;w3gG6V5RN(c4 zN3*HK5=JzK`#Kl8W8zZ~M9Cl$wOTDfOD4doWFknX(}^S>qK}U^ittuvC=j8}TcLKD zQ{X^qkxHsWq_6@oDhiWe4Z_5umA-00u6!e_P`|z=^umZbp^^v^NXC}tfPDV{hsxz| z&}t+a`m5fz3abSfN{AQ@sbP&ugbq&PVoarEuvL%{fmH$+PMy2O$P^fX)hVzNV6y@D zSgAq`Yt;CvA99> zU|%{lc#g|~MH)GzK<2pOzqp)ta*a-qE78mxNF_~ S3D2VQo}kiM-J8kfzcQAqF9 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 E02EcZAOHXW literal 0 HcmV?d00001 diff --git a/widgets/long-thaw/src/assets/player-hurt.png b/widgets/long-thaw/src/assets/player-hurt.png new file mode 100644 index 0000000000000000000000000000000000000000..b89d36691081e4b348d291a9c733ca2633ecbf5e GIT binary patch literal 2737 zcmV;i3QqNjP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D3PwppK~#8N?VM|m z6-64y=Ns@5_z1kvtnrPkiP=}Kyw${Lj7Ad;%!-QQB@<0djH2UZT|o(>ZZKyM7?A{{ zfCD=h2M2S80c5x=BQ6saM9hqi(KTtGf1j#3b*lc=U8is7VE8A$WazH0dg|$?p1Pb4 zJyk1;qLo6g&?gKBfO06mQdM!~OFFYcb*wHFA=J|^tWZr{84`n+33$7+LYYGSXlI#f zy88sM7=lHCniG&fHwk#V_a?AbK)DZv z86i~2JDtfn((s)^$WTFt(7Bt1YjS{@Yl8r%rm6ao)?mY zC@wz{OCtkubABBbZWCB%u9>=c?&h8Uom#u)#Mq`+r$0UH zT_{#kF>;7cFbHq0#aK84o!Kz8cb;`N3y7cu=U_d!Pf1jL~miGTH+$3D9?Gb#A$u=X&L+CUU!qQ1}Wek}RhiJB) zncOFKz%hR_?GiA=nEF&#!zB;-_A<_b4C@ZosXWLuOgo>%uGu5+i9K-4jfQ=AxxVQ- zd=n{!ebX-%N-Yk-^jPGS3tpVs8*MuNAKLLWKEE)#UhINnt~cyN;$;e-rll~85^Uz2 zJd$-mmc+k~9iSZ!Ve^U6g^P;|w~B4{F!HTo(xXKR;TV9)88&6)5zI8Kv+ZCEqrVvT z;)SwldPsHMFDb;L1pAp5hhVi@#^NkXF0nzhoSnaLx7c}uWq140A~&&6V{)Pddl}ZL zytFgpB%z|^ueRL+ix&SegWSZSur1^gyW&!E2`I`bTTYCBD|Rxcuw8Xsxxkg&WJAZ< z`C`Ul9V&vNoC3bM@bz7`?SgM6a)*#y#FC!LS*VpYbO5Gf*1;^uN*6h##dZav-_|PS zil%U}aj!*m==}5O@G$F8QDj}Cn4k{W$?O-{5OR0Wa*^#5oW&X_E1zgyna)20VHmo&_9s)4Cqpb_G&`Bjt*waFOxTpxkm+Q zVAvop={juN4IC*~G^MWFa+dYLG`wsiFVN02;6(d*+jaxCNo@TgUtP4tDy!5f06B&o zFli7SID}%)+O`{Dm2T_Gaf+t@$i6s%nqXVN%4%%e4gMTX$%1XW!BwXat~!Mfrvmq?XyMZI+il*cm`_6>^Hf%Q>3XH$~jb|yLj)7zEc=I`02d?A3S>Co?!B(`F zl`EQ(i@|#zv(ZoxA*>@B)*(icV*&1)@yE+FdL|5SAK z__mdBMDOTeWO9Dthepjra14HXVMbQT{_||}+tA|we~q4=+%0{n&8`_83>!Z89^ST0 zI^S!6^T0pKPW#>lzX_m*^ zNE=Q}2z@vziFP&p{dp%kl-WyaOenPhvy29g>mkXtjv=L<_sV)E<~0fJ(5NX|Xm|6M zBaTf#nd}HJ-Yy&WUA^_Xx)|gTNLRvuaY<8mk%BYKp~6rmQ>_`P^&(B^RG}_s6KmWC z`3A$P=;%Rxs27pR+O<(8moL_M66nB3=Z;0EC0VA;Shi3e&*6E~5f6@Si`I_4AA`Tm z_Dqz?<%>1m4p?rZgK0FDOE5~*i2$#4kNp4s#8Ffj>&Rj$7shX z_*-8`-ZAS*p&p-=RG}h<5jtl&!G=APjaoVX1rbvb5yO`4pv`DVW$DPV3dLu=IdTkg zgE<4iNkuzE6MAM;m>R>${UNQpFi!5PRO67i_yt}II7=R>^=4_S@@O%&W~{cVQ0E|b z$$|{^nzKpTubVcN<`yPpaMpZNkDY*s2v}=`&xRGwL_VpX6;dOnh&R|cjOO*5sN$Vf zJarS}Oo|F?L>H^yL>2A4#F)f!UzAhgB|^&DNfqt9(u^%K0ZM&|FF+OR4kd+lkyB;z zaP81q#V7v^QT&YHOYZS+#@!^}8^qc}6)8-fsPz9=L!Fdks2Hzq6)NN?yRDG*PDdoh rHItw?q^z?J^-YReIEH)x*wga|?9&Ez?x3JD00000NkvXXu0mjfJyS&Q literal 0 HcmV?d00001 diff --git a/widgets/long-thaw/src/assets/player-jump.png b/widgets/long-thaw/src/assets/player-jump.png new file mode 100644 index 0000000000000000000000000000000000000000..b7353990334099a7b5fe0e3562f9ade9f47e6a70 GIT binary patch literal 2750 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 Eg1%fEzW@LL literal 0 HcmV?d00001 diff --git a/widgets/long-thaw/src/assets/player-stand.png b/widgets/long-thaw/src/assets/player-stand.png new file mode 100644 index 0000000000000000000000000000000000000000..e7613ad5da8dc2b7d24f8cd8f59df4a5cc24c6bb GIT binary patch literal 2699 zcmV;63Uu{}P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D3Lr^DK~#8N?VD|H z9!C|1^AGwH@)Po*2*ei*65>-KUqM1d6{tv{#1Nn~&?*9{QbhxX7HHB&F%+eG9MZUL zq#&9EC-|jK9Aw8y8s~+Wlvr&Of-4(R6_A#5KRe^hp1o&w_BBq`Te>7ayR$QA&d!`U zv%B8Vg_0y05C(;v!dL_-hw=laiu+U2fla0}vqBR>Jww7K)5Q9f82NyJySON{Db$a4 z9xzR>55XW~*s{>IFzPlMQ|_I_h%QDzk#GYBjY-`~8pbFXg%y!n5)cIU2)K)n1lTU1 z+-t&u5G%xy?qY~Ewnd1U2IvGj^pNmi4Y1=+X<#p@o>Khzs?9>5?BWwoV#`Xp+kS2+rIDO|qB7%2gVV7mA;Y`RiiQpx7DE-J)=oD(pl zhvtqgvCh;5j>WXmZ5j}le6eH5bg8`LVx-Bw)d5b(83Q9(2byO0`IEGL0dd9Wj4h^X z@sf*>C;0XWbUMH|W^^5P%^ppjogYhfUpSdO|K@mx;f1NIxBk8I1!?;e$`)Td!%Z!h zXUGM<6@oee@ql%t4zhyeIzQ zmIGI3j)@&`#^+qS1WX^Mou;c{NkQMJo}Q^18023u@5)Y zx3q>gYErDq3(okYV<&K(C@IfCt0XN?O|$pJPk zayv?_6s!|X(3B&8=2>{!wfi1U$1RmUkpCecWojL*_X0V4c7K{QsxMA07+Z~WC zYpribScc9X>jyy>q~xruMceLh|2m=y+IEMJ9AWs#5eBa#*du%TB84@$UeUHYurzxU z9MO6n@zl(b+YKzUT(*vg-fOrG#e$K*jJL2(Fhb4* zIPaF%wi|+b4YvEFn-;gB7|=mxwB}o*d+GI-$B&QD>oh25uhF&}*dx2O-RH*icTTx9 z+cho*40~p( zSV<2Tr*a!uvp0@Jq1-sT>x4DR{hPwp@!lp?0p%yNe@t$_|1Z;YSXgQ&-@aNpjvyaE=P$qauBj<3 z+?@TFPf>dT;+^Scv1AyHu}T>5deKy2!mx&OLX_3~KW?y5py(|=a^^ts5(aY}D&+r-Egel7(Dg_hYS1qXztfuCM@`;8$( zFB~6PcIOr?qd@$?lxcdDpgz=#5y;vl%#vdX;-KkHUcS4He$F2wH_!FmJ&A^;t?9C*FDLw!52)0@<&*?Jvg2zw2l5+%(>2k1l>(qe(eLNT^ zm?Kb$IlU%b=3bzkVA17_$<$_ZDzE#=5j&)KirN0 zcGY0#fHAq8BS==6TQML68da_lzB_d=dGw8!*9dhmj=KR-e(RMZyaB_yi< z`w}Uj6Twy_4bjxK3Ty>%ai@qb>vu%KexfN!L-grY70NgQf7|1TBW^t|EXcPaw!%~e z9dbLaVb_G{WJ*{u1M0w1W)QmTjHqV~O)2(KUKudg-IW85DeDB#*_42qUNxG;nAnY^ zL9(q~9~cw6QGB38IayuEgORo{CUzrc0K<*m{frgwO8Qx8^olcU%Ev9$;&9Vk`}*eO z%NwZ?ng)$R0Hkf?2t0LaT4ZD9q2enxk9ZrJP8~s?Yvu?(C9WXWMxG8GfyTHI8R+)C zj!>s+gV5|K3@T;?Xd}CexdH4!b1RAslu_>%OA2?JwdK;8BjTcWJHs<3Hg)ERIAa=m z`lHm(K}dTpo$WJHNA$Brj(RlKq|%KZY15(pO0{9b{{fe@*|P#pthfLG002ovPDHLk FV1myO8}k4F literal 0 HcmV?d00001 diff --git a/widgets/long-thaw/src/assets/player-walk-1.png b/widgets/long-thaw/src/assets/player-walk-1.png new file mode 100644 index 0000000000000000000000000000000000000000..04706163538d1cba0631549f61d47cfa2c68d458 GIT binary patch literal 3637 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 Hu0mjfwD`gJ literal 0 HcmV?d00001 diff --git a/widgets/long-thaw/src/assets/player-walk-2.png b/widgets/long-thaw/src/assets/player-walk-2.png new file mode 100644 index 0000000000000000000000000000000000000000..0a80b03eac1bd6f7834f43ca352d2a200382546d GIT binary patch literal 3754 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 U$+BwhxaOyU?diw7=pLT>2bbrXJOBUy literal 0 HcmV?d00001 diff --git a/widgets/long-thaw/src/assets/tree.png b/widgets/long-thaw/src/assets/tree.png new file mode 100644 index 0000000000000000000000000000000000000000..c38d7e536aced93dbc6f19c5af9bd7caa4a59beb GIT binary patch literal 999 zcmbVLJ#W)M7&LbUNGxB;xbgF~n9(7264oR7b&$lt={$*S;iHYM-$$#K{N} z5=`(1_yxcpK!}-z4s2y-0YiIb0O_yo4Lw8A+j@$%u6`$;5P!HW6cChP@AAG=NjyroLXmx1E-qAb~ z3T}=OvM^?Bjw^3vvFi;m1^c)cL^}Wd?Ry>szRtH5TeM>n_k-<8f_Ep4mNyxAs?TrT z0_99&0wJa@$ijmt)iRx*>S}DAA448YA#|Yg$EG@V6PP5yKoOLJC!!*_sR~Fz#S*#> zBoWC_lp&G}NYX@ALkgG;o<&RiuI5;^SuD2G`97tw2H|Kl5=OE>k{(2=szOnMl2l-b zLOPD9n-!vTbFN_F)JuYx1|$NxqPtIqROgw~;}pVpAseN$GO>ce%#9%u#5|=r(6;{# z4Z{UGr4Byvd#Z5S8pjwqI3>fxV;9%m%tOVRnP8Waq(#WVyo${}p(O2-7?>uw+72S0 zjM8gUxNU3oD5Y-X;ku>sOh5<%Un{C=QBn*`u}VdRs&Yv#RSelMY8AD5LshDCu0_0I zh$A}Z`X}7#Qf}S}Vay_1I0+tNzm|{?Of%MkQ@xZd(Lm->y&2bE?qxX_GBYs0*T3$0 ze#Dw5UoN_qZ5DlxBi8H*>+0thFMVb&;%?olw6deGhb!kfag`HaoGU(g{p!aCzxVjv k%V&Gi$2-n{jiYZDMDFL|%9r0x`(FO^>eYtz#<>6J57FN?w*UYD literal 0 HcmV?d00001 diff --git a/widgets/long-thaw/src/assets/tundra-mid.png b/widgets/long-thaw/src/assets/tundra-mid.png new file mode 100644 index 0000000000000000000000000000000000000000..893094ac47ee17e79f2a0b88acf7f9f67691d35d GIT binary patch literal 1904 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 gySZU)Pv^8P2euB~h+%j2 { const i=new Image(); i.src=src; return i; }; +const art = { + tundra:img(tundraUrl), tundraMid:img(tundraMidUrl), ice:img(iceUrl), water:img(waterUrl), + tree:img(treeUrl), treeTop:img(treeTopUrl), deadTree:img(deadTreeUrl), snowball:img(snowballUrl), igloo:img(iglooUrl), + stand:img(standUrl), jump:img(jumpUrl), hurt:img(hurtUrl), walk1:img(walk1Url), walk2:img(walk2Url), + ghost1:img(ghost1Url), ghost2:img(ghost2Url), bat1:img(bat1Url), bat2:img(bat2Url), ember:img(emberUrl), + flame:img(flameUrl) +}; + +const platforms:Rect[] = [ + {x:0,y:625,w:730,h:95},{x:800,y:625,w:370,h:95},{x:1240,y:625,w:540,h:95}, + {x:250,y:500,w:210,h:28},{x:520,y:420,w:190,h:28},{x:850,y:505,w:170,h:28},{x:1050,y:390,w:200,h:28},{x:1400,y:470,w:170,h:28}, + {x:1780,y:625,w:510,h:95},{x:2390,y:625,w:360,h:95},{x:2840,y:625,w:420,h:95},{x:3350,y:625,w:370,h:95}, + {x:1900,y:495,w:190,h:28,kind:'ice'},{x:2180,y:405,w:170,h:28,kind:'ice'},{x:2500,y:500,w:170,h:28,kind:'ice'}, + {x:2780,y:410,w:200,h:28,kind:'ice'},{x:3090,y:315,w:190,h:28,kind:'ice'},{x:3390,y:465,w:190,h:28,kind:'ice'}, + {x:3720,y:625,w:430,h:95},{x:4250,y:625,w:330,h:95},{x:4680,y:625,w:1260,h:95}, + {x:3830,y:510,w:180,h:28},{x:4100,y:410,w:160,h:28},{x:4380,y:315,w:175,h:28},{x:4650,y:445,w:190,h:28}, + {x:4920,y:350,w:180,h:28},{x:5180,y:270,w:190,h:28},{x:5460,y:395,w:190,h:28},{x:5700,y:285,w:200,h:28} +]; +const hearths:Hearth[]=[ + {x:1540,y:578,lit:false,label:'GROVE'}, {x:3525,y:578,lit:false,label:'ICEWORKS'}, {x:5690,y:238,lit:false,label:'SUMMIT'} +]; +const enemies:Enemy[]=[ + {x:930,y:460,min:820,max:1140,vx:55,type:'ghost',alive:true,phase:0}, + {x:2020,y:455,min:1850,max:2250,vx:70,type:'bat',alive:true,phase:1}, + {x:2630,y:565,min:2420,max:2720,vx:65,type:'ghost',alive:true,phase:2}, + {x:3190,y:265,min:3000,max:3420,vx:80,type:'bat',alive:true,phase:3}, + {x:4010,y:455,min:3790,max:4200,vx:75,type:'ghost',alive:true,phase:4}, + {x:4510,y:270,min:4300,max:4700,vx:90,type:'bat',alive:true,phase:5}, + {x:5260,y:225,min:5120,max:5490,vx:70,type:'ghost',alive:true,phase:6} +]; +const flakes = Array.from({length:110},(_,i)=>({x:(i*137)%W,y:(i*83)%H,s:1+(i%4),v:12+(i%7)*4,z:.35+(i%3)*.25})); + +class Sound { + ctx?:AudioContext; music=true; next=0; beat=0; + ensure(){ if(!this.ctx) this.ctx=new AudioContext(); if(this.ctx.state==='suspended') void this.ctx.resume(); } + tone(freq:number,d=.08,type:OscillatorType='sine',gain=.045){ if(!this.ctx)return; const o=this.ctx.createOscillator(),g=this.ctx.createGain(),n=this.ctx.currentTime;o.type=type;o.frequency.setValueAtTime(freq,n);g.gain.setValueAtTime(gain,n);g.gain.exponentialRampToValueAtTime(.0001,n+d);o.connect(g).connect(this.ctx.destination);o.start(n);o.stop(n+d); } + tick(t:number){ if(!this.music||!this.ctx||t(), pressed=new Set(), sound=new Sound(); + let mode:Mode='title',last=performance.now(),time=0,camera=0,shake=0,flash=0,section=0,message='',messageFor=0; + let particles:Particle[]=[], checkpoint={x:100,y:530,lit:0}; + const p={x:110,y:530,w:42,h:74,vx:0,vy:0,ground:false,face:1,hp:3,inv:0,dash:0,dashCd:0,coyote:0,jumpBuf:0}; + const ember={x:p.x+28,y:p.y+28,carried:true,energy:100,pulse:0}; + const reset=(all=true)=>{ p.x=all?110:checkpoint.x;p.y=all?530:checkpoint.y;p.vx=p.vy=0;p.hp=3;p.inv=1;ember.carried=true;ember.energy=100;ember.x=p.x+28;ember.y=p.y+28;if(all){time=0;checkpoint={x:110,y:530,lit:0};hearths.forEach(h=>h.lit=false);enemies.forEach(e=>e.alive=true);section=0;} mode='playing'; }; + const prevent=(e:KeyboardEvent)=>{ const k=e.code;if(['ArrowLeft','ArrowRight','ArrowUp','ArrowDown','Space','ShiftLeft','ShiftRight','KeyA','KeyD','KeyW','KeyE','KeyM','KeyP','KeyR','Escape','Enter'].includes(k)){e.preventDefault();e.stopPropagation();} if(!keys.has(k))pressed.add(k);keys.add(k);if(mode==='title'&&(k==='Enter'||k==='Space')){sound.ensure();reset();}else if(k==='Escape'||k==='KeyP'){mode=mode==='playing'?'paused':mode==='paused'?'playing':mode;}else if(k==='KeyM'){sound.ensure();sound.music=!sound.music;}else if(k==='KeyR'&&mode!=='title')reset();}; + const up=(e:KeyboardEvent)=>{keys.delete(e.code); if(['ArrowLeft','ArrowRight','ArrowUp','ArrowDown','Space','ShiftLeft','ShiftRight','KeyA','KeyD','KeyW','KeyE'].includes(e.code)){e.preventDefault();e.stopPropagation();}}; + const focus=()=>canvas.focus(); window.addEventListener('keydown',prevent,{capture:true});window.addEventListener('keyup',up,{capture:true});canvas.addEventListener('pointerdown',focus);focus(); + const overlap=(a:{x:number;y:number;w:number;h:number},b:Rect)=>a.xb.x&&a.yb.y; + const solids=()=>platforms.concat(hearths.slice(0,2).flatMap((h,i)=>h.lit?[]:[{x:i===0?1745:3690,y:315,w:42,h:310,kind:'ice' as const}])); + const puff=(x:number,y:number,color:string,n=8)=>{for(let i=0;i{if(p.inv>0)return;p.hp--;p.inv=1.25;p.vy=-420;p.vx=-p.face*260;shake=10;flash=.22;sound.tone(95,.25,'sawtooth',.06);puff(p.x+20,p.y+35,'#bdeeff',14);if(p.hp<=0)reset(false);}; + const physics=(dt:number)=>{ + time+=dt;sound.tick(time);p.inv=Math.max(0,p.inv-dt);p.dash=Math.max(0,p.dash-dt);p.dashCd=Math.max(0,p.dashCd-dt);p.jumpBuf=Math.max(0,p.jumpBuf-dt);p.coyote=Math.max(0,p.coyote-dt); + const left=keys.has('ArrowLeft')||keys.has('KeyA'),right=keys.has('ArrowRight')||keys.has('KeyD'); + if(pressed.has('Space')||pressed.has('ArrowUp')||pressed.has('KeyW'))p.jumpBuf=.14; + if((pressed.has('ShiftLeft')||pressed.has('ShiftRight'))&&p.dashCd<=0){p.dash=.16;p.dashCd=.7;p.vx=p.face*720;p.vy=0;sound.tone(180,.12,'square',.05);puff(p.x+p.w/2,p.y+p.h/2,'#eafcff',10);} + if(p.jumpBuf>0&&(p.ground||p.coyote>0)){p.vy=-590;p.ground=false;p.coyote=0;p.jumpBuf=0;sound.tone(330,.1,'triangle');} + if(p.dash<=0){const target=((right?1:0)-(left?1:0))*280;p.vx+=(target-p.vx)*Math.min(1,dt*(p.ground?14:6));p.vy=Math.min(850,p.vy+1550*dt);}if(left)p.face=-1;if(right)p.face=1; + let nx=p.x+p.vx*dt, box={x:nx,y:p.y,w:p.w,h:p.h};for(const q of solids())if(overlap(box,q)){if(p.vx>0)nx=q.x-p.w;else if(p.vx<0)nx=q.x+q.w;p.vx=0;box.x=nx;}p.x=nx; + let ny=p.y+p.vy*dt;box={x:p.x,y:ny,w:p.w,h:p.h};const wasGround=p.ground;p.ground=false;for(const q of solids())if(overlap(box,q)){if(p.vy>0&&p.y+p.h<=q.y+16){ny=q.y-p.h;p.vy=0;p.ground=true;}else if(p.vy<0&&p.y>=q.y+q.h-14){ny=q.y+q.h;p.vy=0;}box.y=ny;}p.y=ny;if(wasGround&&!p.ground)p.coyote=.11; + if(p.y>H+160)reset(false);p.x=Math.max(0,Math.min(WORLD-p.w,p.x)); + if(pressed.has('KeyE')){const d=Math.hypot((p.x+20)-ember.x,(p.y+38)-ember.y);if(ember.carried){ember.carried=false;ember.x=p.x+p.face*45;ember.y=p.y+40;sound.tone(260,.12,'triangle');}else if(d<105){ember.carried=true;sound.tone(520,.16,'triangle');}} + if(ember.carried){ember.x+=(p.x+p.w/2+p.face*25-ember.x)*Math.min(1,dt*12);ember.y+=(p.y+24-ember.y)*Math.min(1,dt*12);ember.energy=Math.min(100,ember.energy+18*dt);}else{ember.energy=Math.max(0,ember.energy-2.3*dt);} + const warmth=Math.hypot(p.x+20-ember.x,p.y+35-ember.y)<190;if(!warmth)ember.energy=Math.max(0,ember.energy-9*dt);if(ember.energy<=0){ember.energy=100;hurt();} + ember.pulse+=dt; + hearths.forEach((h,i)=>{if(!h.lit&&(i===0||hearths[i-1].lit)&&!ember.carried&&Math.hypot(ember.x-h.x,ember.y-h.y)<100){h.lit=true;checkpoint={x:h.x-80,y:h.y-70,lit:i+1};section=i+1;ember.energy=100;message=i===2?'THE BEACON REMEMBERS':'THE ICE RELEASES ITS HOLD';messageFor=2.6;puff(h.x,h.y,'#ffbd57',36);sound.tone(440,.5,'sine',.06);setTimeout(()=>sound.tone(660,.7,'sine',.05),160);if(i===2)mode='won';}} + ); + enemies.forEach(e=>{if(!e.alive)return;e.phase+=dt*5;e.x+=e.vx*dt;if(e.xe.max)e.vx*=-1;const ey=e.y+Math.sin(e.phase)*18;if(Math.abs(p.x-e.x)<52&&Math.abs(p.y-ey)<65){if(p.dash>0){e.alive=false;puff(e.x,ey,'#d9f6ff',18);sound.tone(700,.12,'triangle');}else hurt();}}); + particles.forEach(a=>{a.x+=a.vx*dt;a.y+=a.vy*dt;a.vy+=180*dt;a.life-=dt;});particles=particles.filter(a=>a.life>0);if(Math.random(){c.font=`700 ${size}px "Nunito Sans"`;c.textAlign=align;c.fillStyle='#03101bbb';c.fillText(s,x+2,y+3);c.fillStyle=color;c.fillText(s,x,y);}; + const drawImage=(im:HTMLImageElement,x:number,y:number,w:number,h:number,flip=false,alpha=1)=>{c.save();c.globalAlpha=alpha;if(flip){c.translate(x+w,y);c.scale(-1,1);c.drawImage(im,0,0,w,h);}else c.drawImage(im,x,y,w,h);c.restore();}; + const drawGlow=(x:number,y:number,r:number,alpha=.4)=>{const g=c.createRadialGradient(x,y,0,x,y,r);g.addColorStop(0,`rgba(255,221,120,${alpha})`);g.addColorStop(.35,`rgba(255,163,67,${alpha*.55})`);g.addColorStop(1,'rgba(255,138,47,0)');c.fillStyle=g;c.fillRect(x-r,y-r,r*2,r*2);}; + const background=()=>{ + const grad=c.createLinearGradient(0,0,0,H);grad.addColorStop(0,'#071522');grad.addColorStop(.55,'#17384d');grad.addColorStop(1,'#8eb2bd');c.fillStyle=grad;c.fillRect(0,0,W,H); + c.fillStyle='#d5edf255';for(let layer=0;layer<3;layer++){c.beginPath();c.moveTo(0,H);for(let x=-100;x{c.save();c.translate(-camera+(Math.random()-.5)*shake,(Math.random()-.5)*shake); + for(let x=100;x{const tile=q.kind==='ice'?art.ice:art.tundra;for(let x=q.x;x40){c.fillStyle='#233e4c';c.fillRect(q.x,q.y+52,q.w,q.h-52);for(let x=q.x;x{if(h.lit)return;const x=i===0?1745:3690;for(let y=315;y<625;y+=68)drawImage(art.ice,x-15,y,72,72);c.fillStyle='#d9f8ff';c.globalAlpha=.55;c.fillRect(x+7,315,8,310);c.globalAlpha=1;}); + [765,2305,3275,4180].forEach(x=>{for(let y=GROUND+3;y{c.fillStyle=h.lit?'#693b20':'#284657';c.fillRect(h.x-30,h.y+18,60,32);c.strokeStyle=h.lit?'#ffc260':'#8bb0bd';c.lineWidth=5;c.strokeRect(h.x-25,h.y-2,50,30);if(h.lit){drawGlow(h.x,h.y-20,170,.42);drawImage(art.flame,h.x-34,h.y-80,68,90);}text(`${i+1}`,h.x,h.y+43,16,'center',h.lit?'#fff2b0':'#a7c7d0');}); + enemies.forEach(e=>{if(!e.alive)return;const ey=e.y+Math.sin(e.phase)*18,frame=Math.floor(e.phase*2)%2===0;drawImage(e.type==='ghost'?(frame?art.ghost1:art.ghost2):(frame?art.bat1:art.bat2),e.x-34,ey-30,68,62,e.vx<0);}); + const glow=90+Math.sin(ember.pulse*5)*8;drawGlow(ember.x,ember.y,glow,.48);drawImage(art.ember,ember.x-18,ember.y-18,36,36);drawImage(art.flame,ember.x-23,ember.y-50,46,56,false,.9); + const moving=Math.abs(p.vx)>30&&p.ground,frame=Math.floor(time*10)%2===0;let pim=p.inv>0&&Math.floor(time*12)%2?art.hurt:!p.ground?art.jump:moving?(frame?art.walk1:art.walk2):art.stand;drawImage(pim,p.x-17,p.y-20,76,96,p.face<0,p.inv>0?.55:1); + if(p.dash>0){c.strokeStyle='#d9f8ff99';c.lineWidth=8;c.beginPath();c.moveTo(p.x-p.face*15,p.y+42);c.lineTo(p.x-p.face*100,p.y+42);c.stroke();} + particles.forEach(a=>{c.globalAlpha=Math.max(0,a.life/a.max);c.fillStyle=a.color;c.beginPath();c.arc(a.x,a.y,a.size,0,7);c.fill();});c.globalAlpha=1;c.restore();}; + const hud=()=>{c.fillStyle='#05131ddd';c.beginPath();c.roundRect(24,22,330,76,18);c.fill();text('EMBER',45,51,14,'left','#9fc3cf');c.fillStyle='#183545';c.beginPath();c.roundRect(45,63,220,13,7);c.fill();const eg=c.createLinearGradient(45,0,265,0);eg.addColorStop(0,'#ef7047');eg.addColorStop(1,'#ffd77c');c.fillStyle=eg;c.beginPath();c.roundRect(45,63,220*ember.energy/100,13,7);c.fill();for(let i=0;i<3;i++){c.fillStyle=i0){c.globalAlpha=Math.min(1,messageFor);text(message,W/2,145,24,'center','#ffd884');c.globalAlpha=1;} + }; + const overlay=()=>{if(mode==='playing')return;c.fillStyle='#03101acb';c.fillRect(0,0,W,H);if(mode==='title'){c.fillStyle='#e9fbff';c.font='700 64px "Cinzel Decorative"';c.textAlign='center';c.fillText('THE LONG THAW',W/2,235);c.fillStyle='#f2bd63';c.fillRect(W/2-180,262,360,3);text('Carry the last living ember to the summit beacon.',W/2,312,22,'center','#c5e4ea');text('MOVE',315,405,14,'center','#81a9b6');text('A D / ← →',315,440,22,'center');text('JUMP',530,405,14,'center','#81a9b6');text('SPACE',530,440,22,'center');text('DASH',750,405,14,'center','#81a9b6');text('SHIFT',750,440,22,'center');text('SET / TAKE EMBER',985,405,14,'center','#81a9b6');text('E',985,440,22,'center');text('PRESS ENTER TO BEGIN',W/2,555,22,'center','#ffd884');text('M toggles music • P pauses • R restarts',W/2,608,15,'center','#8db1bd');} + if(mode==='paused'){text('PAUSED',W/2,310,48,'center','#edfaff');text('Press P or Escape to return',W/2,365,20,'center','#b8dce4');} + if(mode==='won'){c.fillStyle='#fff1bf22';c.fillRect(0,0,W,H);c.font='700 54px "Cinzel Decorative"';c.textAlign='center';c.fillStyle='#fff1be';c.fillText('WINTER BREAKS',W/2,260);text('The summit beacon burns again.',W/2,316,23,'center','#d9eff2');text(`Your journey · ${Math.floor(time/60)}m ${Math.floor(time%60)}s`,W/2,374,19,'center','#f6ca77');text('PRESS R TO WALK THE PATH AGAIN',W/2,490,18,'center','#d6ebef');text('Art by Kenney · CC0',W/2,630,14,'center','#7fa2ad');}} + const render=()=>{background();world();if(mode!=='title')hud();if(flash>0){c.fillStyle=`rgba(220,248,255,${flash})`;c.fillRect(0,0,W,H);}overlay();}; + const frame=(now:number)=>{const dt=Math.min(.033,(now-last)/1000);last=now;if(mode==='playing')physics(dt);render();pressed.clear();requestAnimationFrame(frame);};requestAnimationFrame(frame); + if(import.meta.env.GAME_TEST_BUILD==='1') (window as unknown as {gameTest?:unknown}).gameTest={snapshot:()=>({mode,x:p.x,y:p.y,hp:p.hp,emberCarried:ember.carried,energy:ember.energy,lit:hearths.filter(h=>h.lit).length,time}),start:()=>reset(),teleport:(x:number,y:number)=>{p.x=x;p.y=y;},light:(i:number)=>{ember.carried=false;ember.x=hearths[i].x;ember.y=hearths[i].y;}}; + return()=>{window.removeEventListener('keydown',prevent,{capture:true});window.removeEventListener('keyup',up,{capture:true});canvas.removeEventListener('pointerdown',focus);}; +} diff --git a/widgets/long-thaw/src/main.tsx b/widgets/long-thaw/src/main.tsx new file mode 100644 index 0000000..ec97e2a --- /dev/null +++ b/widgets/long-thaw/src/main.tsx @@ -0,0 +1,8 @@ +import { render } from 'preact'; +import '@fontsource/cinzel-decorative/700.css'; +import '@fontsource/nunito-sans/400.css'; +import '@fontsource/nunito-sans/700.css'; +import './theme.css'; +import { App } from './App'; + +render(, document.getElementById('app')!); diff --git a/widgets/long-thaw/src/theme.css b/widgets/long-thaw/src/theme.css new file mode 100644 index 0000000..07fd18d --- /dev/null +++ b/widgets/long-thaw/src/theme.css @@ -0,0 +1,8 @@ +:root { color-scheme: dark; font-family: "Nunito Sans", sans-serif; background: #050c14; } +* { box-sizing: border-box; } +html, body, #app { margin: 0; width: 100%; height: 100%; overflow: hidden; } +body { background: radial-gradient(circle at 50% 15%, #24445c 0, #091725 54%, #03080d 100%); } +.shell { width: 100%; height: 100%; display: grid; place-items: center; padding: 12px; } +canvas { display: block; width: min(100%, calc((100vh - 24px) * 16 / 9)); max-height: calc(100vh - 24px); aspect-ratio: 16 / 9; border-radius: 12px; box-shadow: 0 30px 90px #000b, 0 0 0 1px #9ed7e52b; outline: none; background: #071521; } +canvas:focus-visible { box-shadow: 0 30px 90px #000b, 0 0 0 3px #f8cc75; } +.fallback { position: fixed; left: -9999px; } diff --git a/widgets/long-thaw/src/vite-env.d.ts b/widgets/long-thaw/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/widgets/long-thaw/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/widgets/long-thaw/test/playtest.cjs b/widgets/long-thaw/test/playtest.cjs new file mode 100644 index 0000000..bf74e9c --- /dev/null +++ b/widgets/long-thaw/test/playtest.cjs @@ -0,0 +1,42 @@ +const { chromium } = require('playwright'); +const path = require('path'); +const { pathToFileURL } = require('url'); + +(async () => { + const browser = await chromium.launch({ headless: true, args: ['--no-sandbox', '--disable-gpu'] }); + const page = await browser.newPage({ viewport: { width: 1280, height: 720 } }); + const errors = []; + page.on('pageerror', e => errors.push(e.message)); + page.on('console', m => { if (m.type() === 'error') errors.push(m.text()); }); + await page.goto(pathToFileURL(path.resolve(__dirname, '../dist-test/index.html')).href); + await page.locator('canvas').waitFor({ state: 'visible' }); + await page.waitForFunction(() => window.gameTest); + await page.screenshot({ path: path.resolve(__dirname, '../title.png') }); + let s = await page.evaluate(() => window.gameTest.snapshot()); + if (s.mode !== 'title') throw new Error(`expected title, got ${s.mode}`); + await page.keyboard.press('Enter'); + await page.keyboard.down('ArrowRight'); + await page.waitForTimeout(500); + await page.keyboard.up('ArrowRight'); + s = await page.evaluate(() => window.gameTest.snapshot()); + if (s.mode !== 'playing' || s.x <= 110) throw new Error(`movement failed: ${JSON.stringify(s)}`); + await page.screenshot({ path: path.resolve(__dirname, '../gameplay.png') }); + await page.keyboard.press('KeyE'); + await page.waitForTimeout(100); + s = await page.evaluate(() => window.gameTest.snapshot()); + if (s.emberCarried) throw new Error('ember placement failed'); + await page.evaluate(() => { window.gameTest.teleport(1480, 520); window.gameTest.light(0); }); + await page.waitForTimeout(100); + s = await page.evaluate(() => window.gameTest.snapshot()); + if (s.lit !== 1) throw new Error(`hearth activation failed: ${JSON.stringify(s)}`); + await page.evaluate(() => { window.gameTest.teleport(3460, 520); window.gameTest.light(1); }); + await page.waitForTimeout(100); + await page.evaluate(() => { window.gameTest.teleport(5630, 170); window.gameTest.light(2); }); + await page.waitForTimeout(100); + s = await page.evaluate(() => window.gameTest.snapshot()); + if (s.mode !== 'won') throw new Error(`ending failed: ${JSON.stringify(s)}`); + await page.screenshot({ path: path.resolve(__dirname, '../playtest.png') }); + await browser.close(); + if (errors.length) throw new Error(errors.join('\n')); + console.log('playtest-ok: movement, ember placement, checkpoint, and ending'); +})().catch(e => { console.error(e); process.exit(1); }); diff --git a/widgets/long-thaw/test/validate-production.cjs b/widgets/long-thaw/test/validate-production.cjs new file mode 100644 index 0000000..11a8e40 --- /dev/null +++ b/widgets/long-thaw/test/validate-production.cjs @@ -0,0 +1,23 @@ +const { chromium } = require('playwright'); +const fs = require('fs'); +const path = require('path'); +const { pathToFileURL } = require('url'); + +(async () => { + const file = path.resolve(process.argv[2] || 'dist/index.html'); + const html = fs.readFileSync(file, 'utf8'); + if (/window\.gameTest|GAME_TEST_BUILD/.test(html)) throw new Error('production contains test hooks'); + if (/]+src=|]+stylesheet/.test(html)) throw new Error('production is not self-contained'); + const browser = await chromium.launch({ headless: true, args: ['--no-sandbox', '--disable-gpu'] }); + const page = await browser.newPage({ viewport: { width: 1280, height: 720 } }); + const errors = []; + page.on('pageerror', e => errors.push(e.message)); + await page.goto(pathToFileURL(file).href); + await page.locator('canvas').waitFor({ state: 'visible' }); + await page.keyboard.press('Enter'); + await page.waitForTimeout(150); + if (await page.evaluate(() => 'gameTest' in window)) throw new Error('test API exposed'); + await browser.close(); + if (errors.length) throw new Error(errors.join('\n')); + console.log('production-validation-ok'); +})().catch(e => { console.error(e); process.exit(1); }); diff --git a/widgets/long-thaw/tsconfig.json b/widgets/long-thaw/tsconfig.json new file mode 100644 index 0000000..eb7e074 --- /dev/null +++ b/widgets/long-thaw/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "ES2022", + "useDefineForClassFields": true, + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "jsxImportSource": "preact" + }, + "include": ["src"] +} diff --git a/widgets/long-thaw/vite.config.ts b/widgets/long-thaw/vite.config.ts new file mode 100644 index 0000000..c1ba1b3 --- /dev/null +++ b/widgets/long-thaw/vite.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from 'vite'; +import preact from '@preact/preset-vite'; +import { viteSingleFile } from 'vite-plugin-singlefile'; + +export default defineConfig({ + plugins: [preact(), viteSingleFile()], + define: { 'import.meta.env.GAME_TEST_BUILD': JSON.stringify(process.env.GAME_TEST_BUILD ?? '0') }, + build: { target: 'es2022', assetsInlineLimit: 100_000_000 }, +}); diff --git a/widgets/long-thaw/widget.json b/widgets/long-thaw/widget.json new file mode 100644 index 0000000..b7f34f6 --- /dev/null +++ b/widgets/long-thaw/widget.json @@ -0,0 +1 @@ +{"schemaVersion":1,"slug":"long-thaw","title":"The Long Thaw","description":"Carry the last living ember through a frozen forest in a compact cinematic platform adventure.","framework":"preact-vite","buildCommand":"npm run build","outputDirectory":"dist","dataSources":[{"name":"Kenney Platformer Art Winter, Platformer Art Deluxe, and Particle Pack","url":"https://kenney.nl/","license":"CC0-1.0"}],"data":{"mode":"static"},"workerName":"widget-long-thaw","hostname":"long-thaw.widgets.beshir.org","embeddable":{"arbitraryParents":true,"recommendedIframe":""}} diff --git a/widgets/long-thaw/wrangler.jsonc b/widgets/long-thaw/wrangler.jsonc new file mode 100644 index 0000000..715a7e1 --- /dev/null +++ b/widgets/long-thaw/wrangler.jsonc @@ -0,0 +1,7 @@ +{ + "$schema": "node_modules/wrangler/config-schema.json", + "name": "widget-long-thaw", + "compatibility_date": "2025-11-17", + "assets": { "directory": "./dist", "not_found_handling": "single-page-application" }, + "routes": [{ "pattern": "long-thaw.widgets.beshir.org", "custom_domain": true }] +} From 3d6c93adfc5e63ef108445841a6c4695bdcc6eb7 Mon Sep 17 00:00:00 2001 From: John Beshir Date: Mon, 20 Jul 2026 20:13:25 +0100 Subject: [PATCH 2/2] Register Long Thaw with theme audit --- scripts/audit-theme.cjs | 1 + scripts/theme-audit-manifest.json | 5 +++++ scripts/validate-widgets.mjs | 1 + widgets/long-thaw/package-lock.json | 9 +++++++++ widgets/long-thaw/package.json | 1 + widgets/long-thaw/src/App.tsx | 4 ++-- widgets/long-thaw/src/main.tsx | 1 + widgets/long-thaw/src/theme.css | 4 ++-- 8 files changed, 22 insertions(+), 4 deletions(-) diff --git a/scripts/audit-theme.cjs b/scripts/audit-theme.cjs index bed7322..18b8548 100644 --- a/scripts/audit-theme.cjs +++ b/scripts/audit-theme.cjs @@ -14,6 +14,7 @@ const localThemeWidgets = [ 'image-comparison-table', 'japanese-verb-tower', 'labour-burden', + 'long-thaw', 'pennsic-mapper', 'pennsic-planner', 'starfall-reliquary', diff --git a/scripts/theme-audit-manifest.json b/scripts/theme-audit-manifest.json index 4e7d84b..df217db 100644 --- a/scripts/theme-audit-manifest.json +++ b/scripts/theme-audit-manifest.json @@ -19,6 +19,11 @@ "text": [".subtitle, .intro", ".methodology-body", ".source-claim", ".detail-caveat"], "boundaries": ["[data-testid=toggle-modern]"], "focus": "[data-testid=toggle-modern]", "status": [], "exceptions": [{ "selector": ".axis-label", "reason": "Non-interactive chart-axis tick annotation; the chart summary and focused segment detail expose the same values.", "stableSurface": ".chart-grid / opaque --card-bg", "zoomEvidence": "journey segment-detail at 200%" }] }, + "long-thaw": { + "identity": ".shell", "ui": "canvas", + "text": [], "boundaries": ["canvas"], "focus": "canvas", "status": [], + "manualSurfaces": [{ "surface": "procedural game canvas", "method": "title, gameplay, and completion screenshot review", "checked": true, "result": "winter sprites, opaque HUD panels, focus frame, pause overlay, and ending overlay verified" }] + }, "pennsic-mapper": { "identity": ".topbar-title, h1", "ui": "[data-testid=zoom-in]", "text": [".topbar-title, .info-panel-title"], "boundaries": ["[data-testid=zoom-in]"], "focus": "[data-testid=zoom-in]", "status": ["[data-testid=sync-badge]"], diff --git a/scripts/validate-widgets.mjs b/scripts/validate-widgets.mjs index 54b6796..fd6cd6c 100644 --- a/scripts/validate-widgets.mjs +++ b/scripts/validate-widgets.mjs @@ -11,6 +11,7 @@ const localThemeWidgets = [ 'image-comparison-table', 'japanese-verb-tower', 'labour-burden', + 'long-thaw', 'pennsic-mapper', 'pennsic-planner', 'starfall-reliquary', diff --git a/widgets/long-thaw/package-lock.json b/widgets/long-thaw/package-lock.json index bf604e2..4082575 100644 --- a/widgets/long-thaw/package-lock.json +++ b/widgets/long-thaw/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@fontsource/cinzel-decorative": "5.3.0", "@fontsource/nunito-sans": "5.3.0", + "@fontsource/schibsted-grotesk": "5.2.8", "preact": "10.27.2" }, "devDependencies": { @@ -747,6 +748,14 @@ "url": "https://github.com/sponsors/ayuhito" } }, + "node_modules/@fontsource/schibsted-grotesk": { + "version": "5.2.8", + "resolved": "https://registry.npmjs.org/@fontsource/schibsted-grotesk/-/schibsted-grotesk-5.2.8.tgz", + "integrity": "sha512-CyyDW5aS89oKGFAVndOsJTQ5pqzKuPnSKWjrdJdMT5TD/eA2JyWapUBhvy6X/lqqrB/GNk74PIff7coPifeVyg==", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", diff --git a/widgets/long-thaw/package.json b/widgets/long-thaw/package.json index f2d14f3..3e8f6fe 100644 --- a/widgets/long-thaw/package.json +++ b/widgets/long-thaw/package.json @@ -13,6 +13,7 @@ "dependencies": { "@fontsource/cinzel-decorative": "5.3.0", "@fontsource/nunito-sans": "5.3.0", + "@fontsource/schibsted-grotesk": "5.2.8", "preact": "10.27.2" }, "devDependencies": { diff --git a/widgets/long-thaw/src/App.tsx b/widgets/long-thaw/src/App.tsx index 9f81171..8d1f717 100644 --- a/widgets/long-thaw/src/App.tsx +++ b/widgets/long-thaw/src/App.tsx @@ -4,8 +4,8 @@ import { mountGame } from './game'; export function App() { const canvas = useRef(null); useEffect(() => canvas.current ? mountGame(canvas.current) : undefined, []); - return

- + return
+

Click the game to focus. Move with A/D or arrows, jump with Space, dash with Shift, and place the ember with E.

; } diff --git a/widgets/long-thaw/src/main.tsx b/widgets/long-thaw/src/main.tsx index ec97e2a..78d3a6b 100644 --- a/widgets/long-thaw/src/main.tsx +++ b/widgets/long-thaw/src/main.tsx @@ -2,6 +2,7 @@ import { render } from 'preact'; import '@fontsource/cinzel-decorative/700.css'; import '@fontsource/nunito-sans/400.css'; import '@fontsource/nunito-sans/700.css'; +import '@fontsource/schibsted-grotesk/700.css'; import './theme.css'; import { App } from './App'; diff --git a/widgets/long-thaw/src/theme.css b/widgets/long-thaw/src/theme.css index 07fd18d..091c1bd 100644 --- a/widgets/long-thaw/src/theme.css +++ b/widgets/long-thaw/src/theme.css @@ -2,7 +2,7 @@ * { box-sizing: border-box; } html, body, #app { margin: 0; width: 100%; height: 100%; overflow: hidden; } body { background: radial-gradient(circle at 50% 15%, #24445c 0, #091725 54%, #03080d 100%); } -.shell { width: 100%; height: 100%; display: grid; place-items: center; padding: 12px; } -canvas { display: block; width: min(100%, calc((100vh - 24px) * 16 / 9)); max-height: calc(100vh - 24px); aspect-ratio: 16 / 9; border-radius: 12px; box-shadow: 0 30px 90px #000b, 0 0 0 1px #9ed7e52b; outline: none; background: #071521; } +.shell { width: 100%; height: 100%; display: grid; place-items: center; padding: 12px; font-family: "Schibsted Grotesk", sans-serif; } +canvas { display: block; width: min(100%, calc((100vh - 24px) * 16 / 9)); max-height: calc(100vh - 24px); aspect-ratio: 16 / 9; border-radius: 12px; box-shadow: 0 30px 90px #000b, 0 0 0 1px #9ed7e52b; outline: none; background: #071521; font-family: "Nunito Sans", sans-serif; } canvas:focus-visible { box-shadow: 0 30px 90px #000b, 0 0 0 3px #f8cc75; } .fallback { position: fixed; left: -9999px; }