web components for a integratabtle atproto based guestbook

init commit

+4428
+24
.gitignore
··· 1 + # Logs 2 + logs 3 + *.log 4 + npm-debug.log* 5 + yarn-debug.log* 6 + yarn-error.log* 7 + pnpm-debug.log* 8 + lerna-debug.log* 9 + 10 + node_modules 11 + dist 12 + dist-ssr 13 + *.local 14 + 15 + # Editor directories and files 16 + .vscode/* 17 + !.vscode/extensions.json 18 + .idea 19 + .DS_Store 20 + *.suo 21 + *.ntvs* 22 + *.njsproj 23 + *.sln 24 + *.sw?
+3
.vscode/extensions.json
··· 1 + { 2 + "recommendations": ["svelte.svelte-vscode"] 3 + }
+114
README.md
··· 1 + # cutebook 2 + 3 + Web components for AT Protocol guestbooks. Sign and display guestbook entries stored in user repositories, indexed via Constellation. 4 + 5 + ## Installation 6 + 7 + ```bash 8 + npm install cutebook 9 + ``` 10 + 11 + Peer dependencies: 12 + 13 + ```bash 14 + npm install @atcute/client @atcute/oauth-browser-client @atcute/identity-resolver 15 + ``` 16 + 17 + ## Quick Start 18 + 19 + The simplest way to use the components is with the auto-register entry point: 20 + 21 + ```ts 22 + import { configureGuestbook } from 'cutebook/register'; 23 + 24 + configureGuestbook({ 25 + oauth: { 26 + clientId: 'https://your-app.com/client-metadata.json', 27 + redirectUri: 'https://your-app.com/', 28 + scope: 'atproto transition:generic', 29 + }, 30 + }); 31 + ``` 32 + 33 + Then use the custom elements in your HTML: 34 + 35 + ```html 36 + <guestbook-sign did="did:plc:your-did-here"></guestbook-sign> 37 + <guestbook-display did="did:plc:your-did-here" limit="50"></guestbook-display> 38 + ``` 39 + 40 + ## Manual Registration 41 + 42 + If you need more control over element registration: 43 + 44 + ```ts 45 + import { 46 + GuestbookSignElement, 47 + GuestbookDisplayElement, 48 + configureGuestbook 49 + } from 'cutebook'; 50 + 51 + configureGuestbook({ 52 + oauth: { 53 + clientId: 'https://your-app.com/client-metadata.json', 54 + redirectUri: 'https://your-app.com/', 55 + scope: 'atproto transition:generic', 56 + }, 57 + }); 58 + 59 + customElements.define('my-guestbook-sign', GuestbookSignElement); 60 + customElements.define('my-guestbook-display', GuestbookDisplayElement); 61 + ``` 62 + 63 + ## Components 64 + 65 + ### guestbook-sign 66 + 67 + A form component that handles OAuth authentication and record creation. 68 + 69 + | Attribute | Description | 70 + |-----------|-------------| 71 + | `did` | The DID of the guestbook owner (required) | 72 + 73 + Dispatches a `sign-created` event with `{ uri, cid }` when a signature is successfully created. 74 + 75 + ### guestbook-display 76 + 77 + Displays guestbook signatures by querying Constellation for backlinks. 78 + 79 + | Attribute | Description | 80 + |-----------|-------------| 81 + | `did` | The DID of the guestbook owner (required) | 82 + | `limit` | Maximum number of entries to display (default: 50) | 83 + 84 + Call `.refresh()` on the element to reload signatures. 85 + 86 + ## Lexicon 87 + 88 + Signatures use the `pet.nkp.guestbook.sign` record type: 89 + 90 + ```json 91 + { 92 + "$type": "pet.nkp.guestbook.sign", 93 + "subject": "did:plc:guestbook-owner", 94 + "message": "Your message here", 95 + "createdAt": "2024-01-01T00:00:00.000Z" 96 + } 97 + ``` 98 + 99 + ## Development 100 + 101 + ```bash 102 + npm run dev # Run demo app 103 + npm run build # Build library 104 + npm run build:demo # Build demo app 105 + npm run check # Type check 106 + ``` 107 + 108 + ## Credits 109 + 110 + Handle typeahead powered by [actor-typeahead](https://tangled.org/jakelazaroff.com/actor-typeahead) by Jake Lazaroff. 111 + 112 + ## License 113 + 114 + MIT
+244
bun.lock
··· 1 + { 2 + "lockfileVersion": 1, 3 + "configVersion": 0, 4 + "workspaces": { 5 + "": { 6 + "name": "cutebook", 7 + "dependencies": { 8 + "@atcute/atproto": "^3.1.9", 9 + "@atcute/client": "^4.1.0", 10 + "@atcute/identity-resolver": "^1.1.4", 11 + "@atcute/lex-cli": "^2.5.0", 12 + "@atcute/lexicon-doc": "^2.0.4", 13 + "@atcute/oauth-browser-client": "^2.0.1", 14 + }, 15 + "devDependencies": { 16 + "@sveltejs/vite-plugin-svelte": "^6.2.1", 17 + "@tsconfig/svelte": "^5.0.6", 18 + "@types/node": "^24.10.1", 19 + "svelte": "^5.43.8", 20 + "svelte-check": "^4.3.4", 21 + "typescript": "~5.9.3", 22 + "vite": "npm:rolldown-vite@7.2.5", 23 + }, 24 + }, 25 + }, 26 + "overrides": { 27 + "vite": "npm:rolldown-vite@7.2.5", 28 + }, 29 + "packages": { 30 + "@atcute/atproto": ["@atcute/atproto@3.1.9", "", { "dependencies": { "@atcute/lexicons": "^1.2.2" } }, "sha512-DyWwHCTdR4hY2BPNbLXgVmm7lI+fceOwWbE4LXbGvbvVtSn+ejSVFaAv01Ra3kWDha0whsOmbJL8JP0QPpf1+w=="], 31 + 32 + "@atcute/car": ["@atcute/car@5.0.0", "", { "dependencies": { "@atcute/cbor": "^2.2.7", "@atcute/cid": "^2.2.6", "@atcute/uint8array": "^1.0.5", "@atcute/varint": "^1.0.3" } }, "sha512-OIY2xTXv8lSpZsDSn/UYQtJSMvDw5Hi4Q+uyvmiqSM+fht08QRAEq/nxa5YFciPZ3nfDFnZ3//EgJw7QhkSXLQ=="], 33 + 34 + "@atcute/cbor": ["@atcute/cbor@2.2.8", "", { "dependencies": { "@atcute/cid": "^2.2.6", "@atcute/multibase": "^1.1.6", "@atcute/uint8array": "^1.0.5" } }, "sha512-UzOAN9BuN6JCXgn0ryV8qZuRJUDrNqrbLd6EFM8jc6RYssjRyGRxNy6RZ1NU/07Hd8Tq/0pz8+nQiMu5Zai5uw=="], 35 + 36 + "@atcute/cid": ["@atcute/cid@2.2.6", "", { "dependencies": { "@atcute/multibase": "^1.1.6", "@atcute/uint8array": "^1.0.5" } }, "sha512-bTAHHbJ24p+E//V4KCS4xdmd39o211jJswvqQOevj7vk+5IYcgDLx1ryZWZ1sEPOo9x875li/kj5gpKL14RDwQ=="], 37 + 38 + "@atcute/client": ["@atcute/client@4.1.0", "", { "dependencies": { "@atcute/identity": "^1.1.3", "@atcute/lexicons": "^1.2.5" } }, "sha512-AYhSu3RSDA2VDkVGOmad320NRbUUUf5pCFWJcOzlk25YC/4kyzmMFfpzhf1jjjEcY+anNBXGGhav/kKB1evggQ=="], 39 + 40 + "@atcute/crypto": ["@atcute/crypto@2.2.6", "", { "dependencies": { "@atcute/multibase": "^1.1.6", "@atcute/uint8array": "^1.0.5", "@noble/secp256k1": "^3.0.0" } }, "sha512-vkuexF+kmrKE1/Uqzub99Qi4QpnxA2jbu60E6PTgL4XypELQ6rb59MB/J1VbY2gs0kd3ET7+L3+NWpKD5nXyfA=="], 41 + 42 + "@atcute/identity": ["@atcute/identity@1.1.3", "", { "dependencies": { "@atcute/lexicons": "^1.2.4", "@badrap/valita": "^0.4.6" } }, "sha512-oIqPoI8TwWeQxvcLmFEZLdN2XdWcaLVtlm8pNk0E72As9HNzzD9pwKPrLr3rmTLRIoULPPFmq9iFNsTeCIU9ng=="], 43 + 44 + "@atcute/identity-resolver": ["@atcute/identity-resolver@1.1.4", "", { "dependencies": { "@atcute/lexicons": "^1.2.2", "@atcute/util-fetch": "^1.0.3", "@badrap/valita": "^0.4.6" }, "peerDependencies": { "@atcute/identity": "^1.0.0" } }, "sha512-/SVh8vf2cXFJenmBnGeYF2aY3WGQm3cJeew5NWTlkqoy3LvJ5wkvKq9PWu4Tv653VF40rPOp6LOdVr9Fa+q5rA=="], 45 + 46 + "@atcute/lex-cli": ["@atcute/lex-cli@2.5.0", "", { "dependencies": { "@atcute/identity": "^1.1.3", "@atcute/identity-resolver": "^1.1.4", "@atcute/lexicon-doc": "^2.0.3", "@atcute/lexicon-resolver": "^0.1.4", "@atcute/lexicons": "^1.2.5", "@badrap/valita": "^0.4.6", "@optique/core": "^0.6.3", "@optique/run": "^0.6.3", "picocolors": "^1.1.1", "prettier": "^3.6.2" }, "bin": { "lex-cli": "cli.mjs" } }, "sha512-mIla9XeK9HJqFW0m/FaHI3+wIQlUL3PJYFpGmlXVwJISQVHASvWpU6gCHSYtAySZTrfVDv73fsVDBkpw9mnTjA=="], 47 + 48 + "@atcute/lexicon-doc": ["@atcute/lexicon-doc@2.0.4", "", { "dependencies": { "@atcute/identity": "^1.1.3", "@atcute/lexicons": "^1.2.5", "@badrap/valita": "^0.4.6" } }, "sha512-YfwlYFoYiBvRIYG0I1zsINCTFugFtS8l67uT3nQ04zdKVflzdg8uUj8cNZYRNY1V7okoOPdikhR4kPFhYGyemw=="], 49 + 50 + "@atcute/lexicon-resolver": ["@atcute/lexicon-resolver@0.1.5", "", { "dependencies": { "@atcute/crypto": "^2.2.6", "@atcute/lexicon-doc": "^2.0.4", "@atcute/lexicons": "^1.2.5", "@atcute/repo": "^0.1.0", "@atcute/util-fetch": "^1.0.4", "@badrap/valita": "^0.4.6" }, "peerDependencies": { "@atcute/identity": "^1.1.0", "@atcute/identity-resolver": "^1.1.3" } }, "sha512-0bx1/zdMQPuxvRcHW6ykAxRxktC2rEZLoAVSFoLSWDAA92Tf09F9QPK5wgXSF4MNODm1dvzMEdWSMIvlg8sr3A=="], 51 + 52 + "@atcute/lexicons": ["@atcute/lexicons@1.2.5", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "esm-env": "^1.2.2" } }, "sha512-9yO9WdgxW8jZ7SbzUycH710z+JmsQ9W9n5S6i6eghYju32kkluFmgBeS47r8e8p2+Dv4DemS7o/3SUGsX9FR5Q=="], 53 + 54 + "@atcute/mst": ["@atcute/mst@0.1.0", "", { "dependencies": { "@atcute/cbor": "^2.2.7", "@atcute/cid": "^2.2.6", "@atcute/uint8array": "^1.0.5" } }, "sha512-h+iDToKEnBpigk2DOHjSqY63vJtjYKUIztqu1CZ0P+I54wV2SrgoqAXAT1xrW6A1Iup8cjTv+U2H5WVG4KxPLw=="], 55 + 56 + "@atcute/multibase": ["@atcute/multibase@1.1.6", "", { "dependencies": { "@atcute/uint8array": "^1.0.5" } }, "sha512-HBxuCgYLKPPxETV0Rot4VP9e24vKl8JdzGCZOVsDaOXJgbRZoRIF67Lp0H/OgnJeH/Xpva8Z5ReoTNJE5dn3kg=="], 57 + 58 + "@atcute/oauth-browser-client": ["@atcute/oauth-browser-client@2.0.1", "", { "dependencies": { "@atcute/client": "^4.0.5", "@atcute/identity": "^1.1.1", "@atcute/identity-resolver": "^1.1.4", "@atcute/lexicons": "^1.2.2", "@atcute/multibase": "^1.1.6", "@atcute/uint8array": "^1.0.5", "nanoid": "^5.1.5" } }, "sha512-lG021GkeORG06zfFf4bH85egObjBEKHNgAWHvbtY/E2dX4wxo88hf370pJDx8acdnuUJLJ2VKPikJtZwo4Heeg=="], 59 + 60 + "@atcute/repo": ["@atcute/repo@0.1.0", "", { "dependencies": { "@atcute/car": "^5.0.0", "@atcute/cbor": "^2.2.7", "@atcute/cid": "^2.2.6", "@atcute/crypto": "^2.2.5", "@atcute/lexicons": "^1.2.2", "@atcute/mst": "^0.1.0", "@atcute/uint8array": "^1.0.5" } }, "sha512-INiYAuma8dydBu7cqd2WVpcXh3mzhIepYBUqFWAK5MqMulPRLTRCc/9GW3G9pxYrOdlvLCVamG2Jf8XK0nuFEw=="], 61 + 62 + "@atcute/uint8array": ["@atcute/uint8array@1.0.5", "", {}, "sha512-XLWWxoR2HNl2qU+FCr0rp1APwJXci7HnzbOQLxK55OaMNBXZ19+xNC5ii4QCsThsDxa4JS/JTzuiQLziITWf2Q=="], 63 + 64 + "@atcute/util-fetch": ["@atcute/util-fetch@1.0.3", "", { "dependencies": { "@badrap/valita": "^0.4.6" } }, "sha512-f8zzTb/xlKIwv2OQ31DhShPUNCmIIleX6p7qIXwWwEUjX6x8skUtpdISSjnImq01LXpltGV5y8yhV4/Mlb7CRQ=="], 65 + 66 + "@atcute/varint": ["@atcute/varint@1.0.3", "", {}, "sha512-fdvMPyBB+McDT+Ai5e9RwEbwYV4yjZ60S2Dn5PTjGqUyxvoCH1z42viuheDZRUDkmfQehXJTZ5az7dSozVNtog=="], 67 + 68 + "@badrap/valita": ["@badrap/valita@0.4.6", "", {}, "sha512-4kdqcjyxo/8RQ8ayjms47HCWZIF5981oE5nIenbfThKDxWXtEHKipAOWlflpPJzZx9y/JWYQkp18Awr7VuepFg=="], 69 + 70 + "@emnapi/core": ["@emnapi/core@1.7.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg=="], 71 + 72 + "@emnapi/runtime": ["@emnapi/runtime@1.7.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA=="], 73 + 74 + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], 75 + 76 + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], 77 + 78 + "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], 79 + 80 + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], 81 + 82 + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], 83 + 84 + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], 85 + 86 + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.0.7", "", { "dependencies": { "@emnapi/core": "^1.5.0", "@emnapi/runtime": "^1.5.0", "@tybys/wasm-util": "^0.10.1" } }, "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw=="], 87 + 88 + "@noble/secp256k1": ["@noble/secp256k1@3.0.0", "", {}, "sha512-NJBaR352KyIvj3t6sgT/+7xrNyF9Xk9QlLSIqUGVUYlsnDTAUqY8LOmwpcgEx4AMJXRITQ5XEVHD+mMaPfr3mg=="], 89 + 90 + "@optique/core": ["@optique/core@0.6.3", "", {}, "sha512-Aw7naHPeZr+YThJRrfk+Ds3OuAd7HUD1chsGncay+6crmLyrraXh0s0xDuJ52kCfNPdCTKAW3MG0XLcuEIr8qQ=="], 91 + 92 + "@optique/run": ["@optique/run@0.6.3", "", { "dependencies": { "@optique/core": "0.6.3" } }, "sha512-6zesLs4XLyFtG8s/JoG2VO/+plJVZhqbLK20yDm0hFEXrqcP+VCKTsoFAlWoWv4Us48V170SKH+8DZcxw8raJw=="], 93 + 94 + "@oxc-project/runtime": ["@oxc-project/runtime@0.97.0", "", {}, "sha512-yH0zw7z+jEws4dZ4IUKoix5Lh3yhqIJWF9Dc8PWvhpo7U7O+lJrv7ZZL4BeRO0la8LBQFwcCewtLBnVV7hPe/w=="], 95 + 96 + "@oxc-project/types": ["@oxc-project/types@0.97.0", "", {}, "sha512-lxmZK4xFrdvU0yZiDwgVQTCvh2gHWBJCBk5ALsrtsBWhs0uDIi+FTOnXRQeQfs304imdvTdaakT/lqwQ8hkOXQ=="], 97 + 98 + "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.0-beta.50", "", { "os": "android", "cpu": "arm64" }, "sha512-XlEkrOIHLyGT3avOgzfTFSjG+f+dZMw+/qd+Y3HLN86wlndrB/gSimrJCk4gOhr1XtRtEKfszpadI3Md4Z4/Ag=="], 99 + 100 + "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.0-beta.50", "", { "os": "darwin", "cpu": "arm64" }, "sha512-+JRqKJhoFlt5r9q+DecAGPLZ5PxeLva+wCMtAuoFMWPoZzgcYrr599KQ+Ix0jwll4B4HGP43avu9My8KtSOR+w=="], 101 + 102 + "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.0-beta.50", "", { "os": "darwin", "cpu": "x64" }, "sha512-fFXDjXnuX7/gQZQm/1FoivVtRcyAzdjSik7Eo+9iwPQ9EgtA5/nB2+jmbzaKtMGG3q+BnZbdKHCtOacmNrkIDA=="], 103 + 104 + "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.0-beta.50", "", { "os": "freebsd", "cpu": "x64" }, "sha512-F1b6vARy49tjmT/hbloplzgJS7GIvwWZqt+tAHEstCh0JIh9sa8FAMVqEmYxDviqKBaAI8iVvUREm/Kh/PD26Q=="], 105 + 106 + "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.50", "", { "os": "linux", "cpu": "arm" }, "sha512-U6cR76N8T8M6lHj7EZrQ3xunLPxSvYYxA8vJsBKZiFZkT8YV4kjgCO3KwMJL0NOjQCPGKyiXO07U+KmJzdPGRw=="], 107 + 108 + "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.0-beta.50", "", { "os": "linux", "cpu": "arm64" }, "sha512-ONgyjofCrrE3bnh5GZb8EINSFyR/hmwTzZ7oVuyUB170lboza1VMCnb8jgE6MsyyRgHYmN8Lb59i3NKGrxrYjw=="], 109 + 110 + "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.0-beta.50", "", { "os": "linux", "cpu": "arm64" }, "sha512-L0zRdH2oDPkmB+wvuTl+dJbXCsx62SkqcEqdM+79LOcB+PxbAxxjzHU14BuZIQdXcAVDzfpMfaHWzZuwhhBTcw=="], 111 + 112 + "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.0-beta.50", "", { "os": "linux", "cpu": "x64" }, "sha512-gyoI8o/TGpQd3OzkJnh1M2kxy1Bisg8qJ5Gci0sXm9yLFzEXIFdtc4EAzepxGvrT2ri99ar5rdsmNG0zP0SbIg=="], 113 + 114 + "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.0-beta.50", "", { "os": "linux", "cpu": "x64" }, "sha512-zti8A7M+xFDpKlghpcCAzyOi+e5nfUl3QhU023ce5NCgUxRG5zGP2GR9LTydQ1rnIPwZUVBWd4o7NjZDaQxaXA=="], 115 + 116 + "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.0-beta.50", "", { "os": "none", "cpu": "arm64" }, "sha512-eZUssog7qljrrRU9Mi0eqYEPm3Ch0UwB+qlWPMKSUXHNqhm3TvDZarJQdTevGEfu3EHAXJvBIe0YFYr0TPVaMA=="], 117 + 118 + "@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.0-beta.50", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.0.7" }, "cpu": "none" }, "sha512-nmCN0nIdeUnmgeDXiQ+2HU6FT162o+rxnF7WMkBm4M5Ds8qTU7Dzv2Wrf22bo4ftnlrb2hKK6FSwAJSAe2FWLg=="], 119 + 120 + "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.0-beta.50", "", { "os": "win32", "cpu": "arm64" }, "sha512-7kcNLi7Ua59JTTLvbe1dYb028QEPaJPJQHqkmSZ5q3tJueUeb6yjRtx8mw4uIqgWZcnQHAR3PrLN4XRJxvgIkA=="], 121 + 122 + "@rolldown/binding-win32-ia32-msvc": ["@rolldown/binding-win32-ia32-msvc@1.0.0-beta.50", "", { "os": "win32", "cpu": "ia32" }, "sha512-lL70VTNvSCdSZkDPPVMwWn/M2yQiYvSoXw9hTLgdIWdUfC3g72UaruezusR6ceRuwHCY1Ayu2LtKqXkBO5LIwg=="], 123 + 124 + "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.0-beta.50", "", { "os": "win32", "cpu": "x64" }, "sha512-4qU4x5DXWB4JPjyTne/wBNPqkbQU8J45bl21geERBKtEittleonioACBL1R0PsBu0Aq21SwMK5a9zdBkWSlQtQ=="], 125 + 126 + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.50", "", {}, "sha512-5e76wQiQVeL1ICOZVUg4LSOVYg9jyhGCin+icYozhsUzM+fHE7kddi1bdiE0jwVqTfkjba3jUFbEkoC9WkdvyA=="], 127 + 128 + "@standard-schema/spec": ["@standard-schema/spec@1.0.0", "", {}, "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA=="], 129 + 130 + "@sveltejs/acorn-typescript": ["@sveltejs/acorn-typescript@1.0.7", "", { "peerDependencies": { "acorn": "^8.9.0" } }, "sha512-znp1A/Y1Jj4l/Zy7PX5DZKBE0ZNY+5QBngiE21NJkfSTyzzC5iKNWOtwFXKtIrn7MXEFBck4jD95iBNkGjK92Q=="], 131 + 132 + "@sveltejs/vite-plugin-svelte": ["@sveltejs/vite-plugin-svelte@6.2.1", "", { "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0", "debug": "^4.4.1", "deepmerge": "^4.3.1", "magic-string": "^0.30.17", "vitefu": "^1.1.1" }, "peerDependencies": { "svelte": "^5.0.0", "vite": "^6.3.0 || ^7.0.0" } }, "sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ=="], 133 + 134 + "@sveltejs/vite-plugin-svelte-inspector": ["@sveltejs/vite-plugin-svelte-inspector@5.0.1", "", { "dependencies": { "debug": "^4.4.1" }, "peerDependencies": { "@sveltejs/vite-plugin-svelte": "^6.0.0-next.0", "svelte": "^5.0.0", "vite": "^6.3.0 || ^7.0.0" } }, "sha512-ubWshlMk4bc8mkwWbg6vNvCeT7lGQojE3ijDh3QTR6Zr/R+GXxsGbyH4PExEPpiFmqPhYiVSVmHBjUcVc1JIrA=="], 135 + 136 + "@tsconfig/svelte": ["@tsconfig/svelte@5.0.6", "", {}, "sha512-yGxYL0I9eETH1/DR9qVJey4DAsCdeau4a9wYPKuXfEhm8lFO8wg+LLYJjIpAm6Fw7HSlhepPhYPDop75485yWQ=="], 137 + 138 + "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], 139 + 140 + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], 141 + 142 + "@types/node": ["@types/node@24.10.1", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ=="], 143 + 144 + "acorn": ["acorn@8.15.0", "", { "bin": "bin/acorn" }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], 145 + 146 + "aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], 147 + 148 + "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], 149 + 150 + "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], 151 + 152 + "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], 153 + 154 + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], 155 + 156 + "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], 157 + 158 + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], 159 + 160 + "devalue": ["devalue@5.5.0", "", {}, "sha512-69sM5yrHfFLJt0AZ9QqZXGCPfJ7fQjvpln3Rq5+PS03LD32Ost1Q9N+eEnaQwGRIriKkMImXD56ocjQmfjbV3w=="], 161 + 162 + "esm-env": ["esm-env@1.2.2", "", {}, "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA=="], 163 + 164 + "esrap": ["esrap@2.2.0", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" } }, "sha512-WBmtxe7R9C5mvL4n2le8nMUe4mD5V9oiK2vJpQ9I3y20ENPUomPcphBXE8D1x/Bm84oN1V+lOfgXxtqmxTp3Xg=="], 165 + 166 + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" } }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], 167 + 168 + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], 169 + 170 + "is-reference": ["is-reference@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.6" } }, "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw=="], 171 + 172 + "lightningcss": ["lightningcss@1.30.2", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.30.2", "lightningcss-darwin-arm64": "1.30.2", "lightningcss-darwin-x64": "1.30.2", "lightningcss-freebsd-x64": "1.30.2", "lightningcss-linux-arm-gnueabihf": "1.30.2", "lightningcss-linux-arm64-gnu": "1.30.2", "lightningcss-linux-arm64-musl": "1.30.2", "lightningcss-linux-x64-gnu": "1.30.2", "lightningcss-linux-x64-musl": "1.30.2", "lightningcss-win32-arm64-msvc": "1.30.2", "lightningcss-win32-x64-msvc": "1.30.2" } }, "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ=="], 173 + 174 + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.30.2", "", { "os": "android", "cpu": "arm64" }, "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A=="], 175 + 176 + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.30.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA=="], 177 + 178 + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.30.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ=="], 179 + 180 + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.30.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA=="], 181 + 182 + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.30.2", "", { "os": "linux", "cpu": "arm" }, "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA=="], 183 + 184 + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.30.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A=="], 185 + 186 + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.30.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA=="], 187 + 188 + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.30.2", "", { "os": "linux", "cpu": "x64" }, "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w=="], 189 + 190 + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.30.2", "", { "os": "linux", "cpu": "x64" }, "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA=="], 191 + 192 + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.30.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ=="], 193 + 194 + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.30.2", "", { "os": "win32", "cpu": "x64" }, "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw=="], 195 + 196 + "locate-character": ["locate-character@3.0.0", "", {}, "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA=="], 197 + 198 + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], 199 + 200 + "mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="], 201 + 202 + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], 203 + 204 + "nanoid": ["nanoid@5.1.6", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg=="], 205 + 206 + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], 207 + 208 + "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], 209 + 210 + "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], 211 + 212 + "prettier": ["prettier@3.7.1", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-RWKXE4qB3u5Z6yz7omJkjWwmTfLdcbv44jUVHC5NpfXwFGzvpQM798FGv/6WNK879tc+Cn0AAyherCl1KjbyZQ=="], 213 + 214 + "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], 215 + 216 + "rolldown": ["rolldown@1.0.0-beta.50", "", { "dependencies": { "@oxc-project/types": "=0.97.0", "@rolldown/pluginutils": "1.0.0-beta.50" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.0-beta.50", "@rolldown/binding-darwin-arm64": "1.0.0-beta.50", "@rolldown/binding-darwin-x64": "1.0.0-beta.50", "@rolldown/binding-freebsd-x64": "1.0.0-beta.50", "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-beta.50", "@rolldown/binding-linux-arm64-gnu": "1.0.0-beta.50", "@rolldown/binding-linux-arm64-musl": "1.0.0-beta.50", "@rolldown/binding-linux-x64-gnu": "1.0.0-beta.50", "@rolldown/binding-linux-x64-musl": "1.0.0-beta.50", "@rolldown/binding-openharmony-arm64": "1.0.0-beta.50", "@rolldown/binding-wasm32-wasi": "1.0.0-beta.50", "@rolldown/binding-win32-arm64-msvc": "1.0.0-beta.50", "@rolldown/binding-win32-ia32-msvc": "1.0.0-beta.50", "@rolldown/binding-win32-x64-msvc": "1.0.0-beta.50" }, "bin": "bin/cli.mjs" }, "sha512-JFULvCNl/anKn99eKjOSEubi0lLmNqQDAjyEMME2T4CwezUDL0i6t1O9xZsu2OMehPnV2caNefWpGF+8TnzB6A=="], 217 + 218 + "sade": ["sade@1.8.1", "", { "dependencies": { "mri": "^1.1.0" } }, "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A=="], 219 + 220 + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], 221 + 222 + "svelte": ["svelte@5.45.2", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", "acorn": "^8.12.1", "aria-query": "^5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", "devalue": "^5.5.0", "esm-env": "^1.2.1", "esrap": "^2.2.0", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", "zimmerframe": "^1.1.2" } }, "sha512-yyXdW2u3H0H/zxxWoGwJoQlRgaSJLp+Vhktv12iRw2WRDlKqUPT54Fi0K/PkXqrdkcQ98aBazpy0AH4BCBVfoA=="], 223 + 224 + "svelte-check": ["svelte-check@4.3.4", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "chokidar": "^4.0.1", "fdir": "^6.2.0", "picocolors": "^1.0.0", "sade": "^1.7.4" }, "peerDependencies": { "svelte": "^4.0.0 || ^5.0.0-next.0", "typescript": ">=5.0.0" }, "bin": "bin/svelte-check" }, "sha512-DVWvxhBrDsd+0hHWKfjP99lsSXASeOhHJYyuKOFYJcP7ThfSCKgjVarE8XfuMWpS5JV3AlDf+iK1YGGo2TACdw=="], 225 + 226 + "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], 227 + 228 + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], 229 + 230 + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], 231 + 232 + "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], 233 + 234 + "vite": ["rolldown-vite@7.2.5", "", { "dependencies": { "@oxc-project/runtime": "0.97.0", "fdir": "^6.5.0", "lightningcss": "^1.30.2", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rolldown": "1.0.0-beta.50", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "esbuild": "^0.25.0", "jiti": ">=1.21.0", "less": "^4.0.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" }, "optionalPeers": ["esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-u09tdk/huMiN8xwoiBbig197jKdCamQTtOruSalOzbqGje3jdHiV0njQlAW0YvzoahkirFePNQ4RYlfnRQpXZA=="], 235 + 236 + "vitefu": ["vitefu@1.1.1", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" } }, "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ=="], 237 + 238 + "zimmerframe": ["zimmerframe@1.1.4", "", {}, "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ=="], 239 + 240 + "@atcute/lexicon-resolver/@atcute/util-fetch": ["@atcute/util-fetch@1.0.4", "", { "dependencies": { "@badrap/valita": "^0.4.6" } }, "sha512-sIU9Qk0dE8PLEXSfhy+gIJV+HpiiknMytCI2SqLlqd0vgZUtEKI/EQfP+23LHWvP+CLCzVDOa6cpH045OlmNBg=="], 241 + 242 + "postcss/nanoid": ["nanoid@3.3.11", "", { "bin": "bin/nanoid.cjs" }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], 243 + } 244 + }
+13
demo/index.html
··· 1 + <!doctype html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="UTF-8" /> 5 + <link rel="icon" type="image/svg+xml" href="/vite.svg" /> 6 + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 7 + <title>cutebook</title> 8 + </head> 9 + <body> 10 + <div id="app"></div> 11 + <script type="module" src="/src/main.ts"></script> 12 + </body> 13 + </html>
+12
demo/public/client-metadata.json
··· 1 + { 2 + "client_id": "https://guestbook.nkp.pet/client-metadata.json", 3 + "client_name": "guestbook", 4 + "client_uri": "https://guestbook.nkp.pet", 5 + "redirect_uris": ["https://guestbook.nkp.pet/"], 6 + "scope": "atproto transition:generic", 7 + "grant_types": ["authorization_code", "refresh_token"], 8 + "response_types": ["code"], 9 + "token_endpoint_auth_method": "none", 10 + "application_type": "web", 11 + "dpop_bound_access_tokens": true 12 + }
+69
demo/src/App.svelte
··· 1 + <script lang="ts"> 2 + import type { GuestbookDisplayElement } from './components/guestbook-display'; 3 + 4 + function handleSignCreated(event: CustomEvent) { 5 + console.log('New signature created:', event.detail); 6 + // refresh the display 7 + const display = document.querySelector('guestbook-display') as GuestbookDisplayElement; 8 + if (display) { 9 + display.refresh(); 10 + } 11 + } 12 + </script> 13 + 14 + <main> 15 + <header> 16 + <h1>Guestbook</h1> 17 + <p class="subtitle">Leave your thoughts and memories. Thanks for visiting!</p> 18 + </header> 19 + 20 + <div class="components"> 21 + <guestbook-sign 22 + did="did:plc:ttdrpj45ibqunmfhdsb4zdwq" 23 + onsign-created={handleSignCreated}> 24 + </guestbook-sign> 25 + 26 + <guestbook-display 27 + did="did:plc:ttdrpj45ibqunmfhdsb4zdwq" 28 + limit="50"> 29 + </guestbook-display> 30 + </div> 31 + </main> 32 + 33 + <style> 34 + main { 35 + max-width: 1200px; 36 + margin: 0 auto; 37 + padding: 48px 24px; 38 + } 39 + 40 + header { 41 + margin-bottom: 48px; 42 + } 43 + 44 + h1 { 45 + font-size: 48px; 46 + font-weight: 700; 47 + margin: 0 0 12px 0; 48 + color: #000; 49 + } 50 + 51 + .subtitle { 52 + font-size: 18px; 53 + color: #6b7280; 54 + margin: 0; 55 + } 56 + 57 + .components { 58 + display: grid; 59 + grid-template-columns: 1fr 1fr; 60 + gap: 48px; 61 + align-items: start; 62 + } 63 + 64 + @media (max-width: 768px) { 65 + .components { 66 + grid-template-columns: 1fr; 67 + } 68 + } 69 + </style>
+19
demo/src/app.css
··· 1 + * { 2 + box-sizing: border-box; 3 + margin: 0; 4 + padding: 0; 5 + } 6 + 7 + body { 8 + margin: 0; 9 + font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; 10 + -webkit-font-smoothing: antialiased; 11 + -moz-osx-font-smoothing: grayscale; 12 + background-color: #f9fafb; 13 + color: #000; 14 + line-height: 1.5; 15 + } 16 + 17 + #app { 18 + width: 100%; 19 + }
+21
demo/src/main.ts
··· 1 + import { mount } from 'svelte' 2 + import './app.css' 3 + import App from './App.svelte' 4 + 5 + // Import and configure guestbook components 6 + import { configureGuestbook } from '../../lib/register'; 7 + 8 + // Configure with demo OAuth settings 9 + configureGuestbook({ 10 + oauth: { 11 + clientId: import.meta.env.VITE_OAUTH_CLIENT_ID, 12 + redirectUri: import.meta.env.VITE_OAUTH_REDIRECT_URL, 13 + scope: import.meta.env.VITE_OAUTH_SCOPE, 14 + }, 15 + }); 16 + 17 + const app = mount(App, { 18 + target: document.getElementById('app')!, 19 + }) 20 + 21 + export default app
+14
demo/src/vite-env.d.ts
··· 1 + /// <reference types="vite/client" /> 2 + 3 + interface ImportMetaEnv { 4 + readonly VITE_DEV_SERVER_PORT?: string; 5 + readonly VITE_CLIENT_URI: string; 6 + readonly VITE_OAUTH_CLIENT_ID: string; 7 + readonly VITE_OAUTH_REDIRECT_URL: string; 8 + readonly VITE_OAUTH_SCOPE: string; 9 + } 10 + 11 + interface ImportMeta { 12 + readonly env: ImportMetaEnv; 13 + } 14 +
+8
demo/svelte.config.js
··· 1 + import { vitePreprocess } from '@sveltejs/vite-plugin-svelte' 2 + 3 + /** @type {import("@sveltejs/vite-plugin-svelte").SvelteConfig} */ 4 + export default { 5 + // Consult https://svelte.dev/docs#compile-time-svelte-preprocess 6 + // for more information about preprocessors 7 + preprocess: vitePreprocess(), 8 + }
+15
demo/tsconfig.json
··· 1 + { 2 + "compilerOptions": { 3 + "target": "ES2020", 4 + "module": "ESNext", 5 + "lib": ["ES2020", "DOM", "DOM.Iterable"], 6 + "moduleResolution": "bundler", 7 + "strict": true, 8 + "noEmit": true, 9 + "isolatedModules": true, 10 + "esModuleInterop": true, 11 + "skipLibCheck": true 12 + }, 13 + "include": ["src/**/*.ts", "src/**/*.svelte", "../lib/**/*.ts"] 14 + } 15 +
+43
demo/vite.config.ts
··· 1 + import { defineConfig } from 'vite'; 2 + import { svelte } from '@sveltejs/vite-plugin-svelte'; 3 + import metadata from './public/client-metadata.json'; 4 + 5 + const SERVER_HOST = '127.0.0.1'; 6 + const SERVER_PORT = 5173; 7 + 8 + export default defineConfig({ 9 + plugins: [ 10 + svelte(), 11 + { 12 + name: 'oauth', 13 + config(_conf, { command }) { 14 + if (command === 'build') { 15 + process.env.VITE_OAUTH_CLIENT_ID = metadata.client_id; 16 + process.env.VITE_OAUTH_REDIRECT_URL = metadata.redirect_uris[0]; 17 + } else { 18 + const redirectUri = ((): string => { 19 + const url = new URL(metadata.redirect_uris[0]); 20 + return `http://${SERVER_HOST}:${SERVER_PORT}${url.pathname}`; 21 + })(); 22 + 23 + const clientId = 24 + `http://localhost` + 25 + `?redirect_uri=${encodeURIComponent(redirectUri)}` + 26 + `&scope=${encodeURIComponent(metadata.scope)}`; 27 + 28 + process.env.VITE_DEV_SERVER_PORT = '' + SERVER_PORT; 29 + process.env.VITE_OAUTH_CLIENT_ID = clientId; 30 + process.env.VITE_OAUTH_REDIRECT_URL = redirectUri; 31 + } 32 + 33 + process.env.VITE_CLIENT_URI = metadata.client_uri; 34 + process.env.VITE_OAUTH_SCOPE = metadata.scope; 35 + }, 36 + }, 37 + ], 38 + server: { 39 + host: SERVER_HOST, 40 + port: SERVER_PORT, 41 + }, 42 + }); 43 +
+9
lex.config.ts
··· 1 + import { defineLexiconConfig } from '@atcute/lex-cli'; 2 + 3 + export default defineLexiconConfig({ 4 + files: ['lexicons/**/*.ts'], 5 + outdir: 'src/lexicons/', 6 + export: { 7 + outdir: 'lexicons/' 8 + }, 9 + });
+29
lexicons/pet/nkp/guestbook/sign.json
··· 1 + { 2 + "defs": { 3 + "main": { 4 + "description": "a sign in the guestbook", 5 + "key": "tid", 6 + "record": { 7 + "properties": { 8 + "subject": { 9 + "type": "string", 10 + "format": "at-identifier" 11 + }, 12 + "createdAt": { 13 + "type": "string", 14 + "format": "datetime" 15 + }, 16 + "message": { 17 + "type": "string", 18 + "maxLength": 100 19 + } 20 + }, 21 + "required": ["subject", "createdAt", "message"], 22 + "type": "object" 23 + }, 24 + "type": "record" 25 + } 26 + }, 27 + "id": "pet.nkp.guestbook.sign", 28 + "lexicon": 1 29 + }
+18
lexicons/pet/nkp/guestbook/sign.ts
··· 1 + import { document, object, record, required, string } from '@atcute/lexicon-doc/builder'; 2 + 3 + export default document({ 4 + id: 'pet.nkp.guestbook.sign', 5 + defs: { 6 + main: record({ 7 + key: 'tid', 8 + description: 'a sign in the guestbook', 9 + record: object({ 10 + properties: { 11 + subject: required(string({ format: 'at-identifier' })), 12 + createdAt: required(string({ format: 'datetime' })), 13 + message: required(string({ maxLength: 100 })), 14 + }, 15 + }), 16 + }), 17 + }, 18 + });
+72
lib/config.ts
··· 1 + import { 2 + configureOAuth, 3 + defaultIdentityResolver, 4 + } from '@atcute/oauth-browser-client'; 5 + import { 6 + CompositeDidDocumentResolver, 7 + PlcDidDocumentResolver, 8 + WebDidDocumentResolver, 9 + XrpcHandleResolver, 10 + } from '@atcute/identity-resolver'; 11 + 12 + export interface GuestbookConfig { 13 + oauth: { 14 + clientId: string; 15 + redirectUri: string; 16 + scope: string; 17 + }; 18 + services?: { 19 + handleResolver?: string; 20 + }; 21 + } 22 + 23 + let configured = false; 24 + let storedConfig: GuestbookConfig | null = null; 25 + 26 + /** 27 + * Configure the guestbook components with OAuth settings. 28 + * Must be called before using <guestbook-sign>. 29 + */ 30 + export function configureGuestbook(config: GuestbookConfig) { 31 + if (configured) { 32 + console.warn('Guestbook already configured'); 33 + return; 34 + } 35 + 36 + storedConfig = config; 37 + 38 + configureOAuth({ 39 + metadata: { 40 + client_id: config.oauth.clientId, 41 + redirect_uri: config.oauth.redirectUri, 42 + }, 43 + identityResolver: defaultIdentityResolver({ 44 + handleResolver: new XrpcHandleResolver({ 45 + serviceUrl: config.services?.handleResolver ?? 'https://slingshot.wisp.place' 46 + }), 47 + didDocumentResolver: new CompositeDidDocumentResolver({ 48 + methods: { 49 + plc: new PlcDidDocumentResolver(), 50 + web: new WebDidDocumentResolver(), 51 + }, 52 + }), 53 + }), 54 + }); 55 + 56 + configured = true; 57 + } 58 + 59 + /** 60 + * Check if guestbook has been configured 61 + */ 62 + export function isConfigured(): boolean { 63 + return configured; 64 + } 65 + 66 + /** 67 + * Get the stored config 68 + */ 69 + export function getConfig(): GuestbookConfig | null { 70 + return storedConfig; 71 + } 72 +
+425
lib/guestbook-display.ts
··· 1 + // no imports needed for this component - uses native fetch 2 + 3 + /** 4 + * represents a guestbook signature from constellation 5 + */ 6 + export interface GuestbookSignature { 7 + uri: string; 8 + cid: string; 9 + value: { 10 + $type: 'pet.nkp.guestbook.sign'; 11 + subject: string; // DID (at-identifier format) 12 + message: string; 13 + createdAt: string; 14 + }; 15 + author: string; 16 + authorHandle?: string; 17 + } 18 + 19 + /** 20 + * constellation API response for backlinks 21 + */ 22 + interface ConstellationBacklinksResponse { 23 + total: number; 24 + records: Array<{ 25 + did: string; 26 + collection: string; 27 + rkey: string; 28 + }>; 29 + cursor?: string; 30 + } 31 + 32 + /** 33 + * Web component for displaying guestbook signatures. 34 + * 35 + * Usage: 36 + * <guestbook-display 37 + * did="did:web:nekomimi.pet" 38 + * limit="50"> 39 + * </guestbook-display> 40 + */ 41 + export class GuestbookDisplayElement extends HTMLElement { 42 + private signatures: GuestbookSignature[] = []; 43 + private loading = false; 44 + private error: string | null = null; 45 + 46 + static get observedAttributes() { 47 + return ['did', 'limit']; 48 + } 49 + 50 + constructor() { 51 + super(); 52 + this.attachShadow({ mode: 'open' }); 53 + } 54 + 55 + connectedCallback() { 56 + this.render(); 57 + this.fetchSignatures(); 58 + } 59 + 60 + attributeChangedCallback(name: string, oldValue: string, newValue: string) { 61 + if (oldValue !== newValue && (name === 'did' || name === 'limit')) { 62 + this.fetchSignatures(); 63 + } 64 + } 65 + 66 + private render() { 67 + if (!this.shadowRoot) { 68 + return; 69 + } 70 + 71 + this.shadowRoot.innerHTML = ` 72 + <style> 73 + * { 74 + box-sizing: border-box; 75 + margin: 0; 76 + padding: 0; 77 + } 78 + 79 + :host { 80 + display: block; 81 + font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; 82 + -webkit-font-smoothing: antialiased; 83 + -moz-osx-font-smoothing: grayscale; 84 + } 85 + 86 + .guestbook-display { 87 + background: #f9fafb; 88 + padding: 0; 89 + width: 100%; 90 + } 91 + 92 + h2 { 93 + margin: 0 0 24px 0; 94 + font-size: 11px; 95 + font-weight: 700; 96 + color: #000; 97 + text-transform: uppercase; 98 + letter-spacing: 0.05em; 99 + } 100 + 101 + .signatures-list { 102 + display: flex; 103 + flex-direction: column; 104 + gap: 12px; 105 + } 106 + 107 + .signature-card { 108 + background: white; 109 + border: 1px solid #e5e7eb; 110 + border-radius: 6px; 111 + padding: 16px; 112 + transition: background-color 0.2s; 113 + } 114 + 115 + .signature-card:hover { 116 + background: rgba(255, 255, 255, 0.5); 117 + } 118 + 119 + .signature-header { 120 + display: flex; 121 + justify-content: space-between; 122 + align-items: baseline; 123 + margin-bottom: 8px; 124 + gap: 12px; 125 + } 126 + 127 + .author { 128 + font-weight: 500; 129 + color: #000; 130 + font-size: 14px; 131 + word-break: break-all; 132 + } 133 + 134 + .author a { 135 + color: #000; 136 + text-decoration: none; 137 + } 138 + 139 + .author a:hover { 140 + text-decoration: underline; 141 + } 142 + 143 + .timestamp { 144 + font-size: 12px; 145 + color: #6b7280; 146 + white-space: nowrap; 147 + } 148 + 149 + .message { 150 + font-size: 14px; 151 + line-height: 1.5; 152 + color: #000; 153 + word-wrap: break-word; 154 + } 155 + 156 + .loading { 157 + text-align: center; 158 + padding: 32px; 159 + color: #9ca3af; 160 + } 161 + 162 + .spinner { 163 + display: inline-block; 164 + width: 20px; 165 + height: 20px; 166 + border: 3px solid #e5e7eb; 167 + border-top-color: #6b7280; 168 + border-radius: 50%; 169 + animation: spin 0.8s linear infinite; 170 + } 171 + 172 + @keyframes spin { 173 + to { transform: rotate(360deg); } 174 + } 175 + 176 + .error { 177 + text-align: center; 178 + padding: 32px; 179 + color: #dc2626; 180 + background: #fef2f2; 181 + border-radius: 8px; 182 + border: 1px solid #fecaca; 183 + } 184 + 185 + .empty { 186 + text-align: center; 187 + padding: 48px 24px; 188 + color: #9ca3af; 189 + font-size: 15px; 190 + } 191 + 192 + .empty-icon { 193 + font-size: 48px; 194 + margin-bottom: 16px; 195 + opacity: 0.5; 196 + } 197 + 198 + .signature-count { 199 + font-size: 14px; 200 + color: #536471; 201 + margin-bottom: 16px; 202 + text-align: center; 203 + } 204 + </style> 205 + 206 + <div class="guestbook-display"> 207 + <h2>RECENT ENTRIES</h2> 208 + <div id="content"></div> 209 + </div> 210 + `; 211 + 212 + this.updateContent(); 213 + } 214 + 215 + private updateContent() { 216 + const contentDiv = this.shadowRoot?.querySelector('#content'); 217 + if (!contentDiv) { 218 + return; 219 + } 220 + 221 + if (this.loading) { 222 + contentDiv.innerHTML = ` 223 + <div class="loading"> 224 + <div class="spinner"></div> 225 + <p>Loading signatures...</p> 226 + </div> 227 + `; 228 + return; 229 + } 230 + 231 + if (this.error) { 232 + contentDiv.innerHTML = ` 233 + <div class="error"> 234 + <p><strong>Error:</strong> ${this.error}</p> 235 + </div> 236 + `; 237 + return; 238 + } 239 + 240 + if (this.signatures.length === 0) { 241 + contentDiv.innerHTML = ` 242 + <div class="empty"> 243 + <div class="empty-icon">✍️</div> 244 + <p>No signatures yet. Be the first to sign!</p> 245 + </div> 246 + `; 247 + return; 248 + } 249 + 250 + // render signatures 251 + const signaturesHtml = this.signatures 252 + .map((sig) => this.renderSignature(sig)) 253 + .join(''); 254 + 255 + contentDiv.innerHTML = ` 256 + <div class="signature-count"> 257 + ${this.signatures.length} signature${this.signatures.length !== 1 ? 's' : ''} 258 + </div> 259 + <div class="signatures-list"> 260 + ${signaturesHtml} 261 + </div> 262 + `; 263 + } 264 + 265 + private renderSignature(sig: GuestbookSignature): string { 266 + const timestamp = this.formatTimestamp(sig.value.createdAt); 267 + const authorIdentifier = sig.authorHandle || sig.author; 268 + const authorLink = `https://bsky.app/profile/${sig.authorHandle || sig.author}`; 269 + const displayName = sig.authorHandle || this.shortenDid(sig.author); 270 + 271 + return ` 272 + <div class="signature-card"> 273 + <div class="signature-header"> 274 + <div class="author"> 275 + <a href="${authorLink}" target="_blank" rel="noopener noreferrer"> 276 + ${this.escapeHtml(displayName)} 277 + </a> 278 + </div> 279 + <div class="timestamp">${timestamp}</div> 280 + </div> 281 + <div class="message">${this.escapeHtml(sig.value.message)}</div> 282 + </div> 283 + `; 284 + } 285 + 286 + private async fetchSignatures() { 287 + const did = this.getAttribute('did'); 288 + if (!did) { 289 + this.error = 'Missing did attribute'; 290 + this.render(); 291 + return; 292 + } 293 + 294 + // subject is just the DID (at-identifier format) 295 + const subject = did; 296 + 297 + const limit = parseInt(this.getAttribute('limit') || '50', 10); 298 + 299 + this.loading = true; 300 + this.error = null; 301 + this.updateContent(); 302 + 303 + try { 304 + // query constellation for backlinks 305 + // source format: collection:field.path 306 + // constellation is not in atproto schemas, so we use a direct fetch 307 + const url = new URL('/xrpc/blue.microcosm.links.getBacklinks', 'https://constellation.microcosm.blue'); 308 + url.searchParams.set('subject', subject); 309 + url.searchParams.set('source', 'pet.nkp.guestbook.sign:subject'); 310 + url.searchParams.set('limit', limit.toString()); 311 + 312 + const response = await fetch(url.toString()); 313 + if (!response.ok) { 314 + throw new Error('Failed to fetch signatures from Constellation'); 315 + } 316 + 317 + const data: ConstellationBacklinksResponse = await response.json(); 318 + 319 + console.log('Constellation response:', data); 320 + 321 + // fetch actual records 322 + if (!data.records || !Array.isArray(data.records)) { 323 + console.warn('No records found in response'); 324 + this.signatures = []; 325 + } else { 326 + // fetch each record from the repository 327 + const signatures: GuestbookSignature[] = []; 328 + 329 + for (const record of data.records) { 330 + try { 331 + const recordUrl = new URL('/xrpc/com.atproto.repo.getRecord', 'https://slingshot.wisp.place'); 332 + recordUrl.searchParams.set('repo', record.did); 333 + recordUrl.searchParams.set('collection', record.collection); 334 + recordUrl.searchParams.set('rkey', record.rkey); 335 + 336 + const recordResponse = await fetch(recordUrl.toString()); 337 + if (!recordResponse.ok) { 338 + console.warn(`Failed to fetch record ${record.did}/${record.collection}/${record.rkey}`); 339 + continue; 340 + } 341 + 342 + const recordData = await recordResponse.json(); 343 + 344 + // validate the record 345 + if ( 346 + recordData.value && 347 + recordData.value.$type === 'pet.nkp.guestbook.sign' && 348 + typeof recordData.value.message === 'string' && 349 + typeof recordData.value.createdAt === 'string' 350 + ) { 351 + // Fetch the handle for this author 352 + let authorHandle: string | undefined; 353 + try { 354 + const profileResponse = await fetch( 355 + `https://public.api.bsky.app/xrpc/app.bsky.actor.getProfile?actor=${record.did}` 356 + ); 357 + if (profileResponse.ok) { 358 + const profileData = await profileResponse.json(); 359 + authorHandle = profileData.handle; 360 + } 361 + } catch (err) { 362 + console.warn(`Failed to fetch handle for ${record.did}:`, err); 363 + } 364 + 365 + signatures.push({ 366 + uri: recordData.uri, 367 + cid: recordData.cid, 368 + value: recordData.value, 369 + author: record.did, 370 + authorHandle: authorHandle, 371 + }); 372 + } 373 + } catch (err) { 374 + console.warn(`Error fetching record ${record.did}/${record.collection}/${record.rkey}:`, err); 375 + } 376 + } 377 + 378 + // sort by creation time, newest first 379 + this.signatures = signatures.sort((a, b) => { 380 + return new Date(b.value.createdAt).getTime() - new Date(a.value.createdAt).getTime(); 381 + }); 382 + } 383 + 384 + this.loading = false; 385 + this.updateContent(); 386 + 387 + } catch (error) { 388 + console.error('Error fetching signatures:', error); 389 + this.error = error instanceof Error ? error.message : 'Unknown error occurred'; 390 + this.loading = false; 391 + this.updateContent(); 392 + } 393 + } 394 + 395 + private formatTimestamp(isoString: string): string { 396 + const date = new Date(isoString); 397 + // Format as "Nov 24, 2024" 398 + return date.toLocaleDateString('en-US', { 399 + month: 'short', 400 + day: 'numeric', 401 + year: 'numeric', 402 + }); 403 + } 404 + 405 + private shortenDid(did: string): string { 406 + if (did.startsWith('did:plc:')) { 407 + return `${did.slice(0, 16)}...${did.slice(-4)}`; 408 + } 409 + return did; 410 + } 411 + 412 + private escapeHtml(text: string): string { 413 + const div = document.createElement('div'); 414 + div.textContent = text; 415 + return div.innerHTML; 416 + } 417 + 418 + /** 419 + * refresh signatures from the API 420 + */ 421 + refresh() { 422 + this.fetchSignatures(); 423 + } 424 + } 425 +
+489
lib/guestbook-sign.ts
··· 1 + import { Client } from '@atcute/client'; 2 + import type {} from '@atcute/atproto'; 3 + import { 4 + createAuthorizationUrl, 5 + finalizeAuthorization, 6 + OAuthUserAgent, 7 + } from '@atcute/oauth-browser-client'; 8 + import { getConfig } from './config'; 9 + 10 + // Actor typeahead web component 11 + import 'actor-typeahead'; 12 + 13 + // Global agent instance 14 + let globalAgent: OAuthUserAgent | null = null; 15 + 16 + // Helper function to wait 17 + const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); 18 + 19 + /** 20 + * Web component for signing the guestbook. 21 + * 22 + * Usage: 23 + * <guestbook-sign did="did:web:nekomimi.pet"></guestbook-sign> 24 + */ 25 + export class GuestbookSignElement extends HTMLElement { 26 + private form: HTMLFormElement | null = null; 27 + private messageInput: HTMLTextAreaElement | null = null; 28 + private submitButton: HTMLButtonElement | null = null; 29 + private statusDiv: HTMLDivElement | null = null; 30 + private loginInput: HTMLInputElement | null = null; 31 + private loginButton: HTMLButtonElement | null = null; 32 + private userHandle: string | null = null; 33 + 34 + static get observedAttributes() { 35 + return ['did']; 36 + } 37 + 38 + constructor() { 39 + super(); 40 + this.attachShadow({ mode: 'open' }); 41 + } 42 + 43 + async connectedCallback() { 44 + await this.initializeAuth(); 45 + if (globalAgent) { 46 + await this.fetchUserHandle(); 47 + } 48 + this.render(); 49 + this.attachEventListeners(); 50 + } 51 + 52 + private async fetchUserHandle() { 53 + if (!globalAgent) return; 54 + 55 + try { 56 + const response = await fetch( 57 + `https://public.api.bsky.app/xrpc/app.bsky.actor.getProfile?actor=${globalAgent.session.info.sub}` 58 + ); 59 + if (response.ok) { 60 + const data = await response.json(); 61 + this.userHandle = data.handle || null; 62 + } 63 + } catch (error) { 64 + console.error('Failed to fetch user handle:', error); 65 + } 66 + } 67 + 68 + private async initializeAuth() { 69 + // Check if we have OAuth parameters in the hash (returning from OAuth) 70 + if (location.hash.length > 1) { 71 + const params = new URLSearchParams(location.hash.slice(1)); 72 + 73 + if (params.has('state') && (params.has('code') || params.has('error'))) { 74 + try { 75 + // Scrub the parameters from history to prevent replay 76 + history.replaceState(null, '', location.pathname + location.search); 77 + 78 + // Finalize the authorization and get the result 79 + const result = await finalizeAuthorization(params); 80 + 81 + // Create the OAuth user agent with the session 82 + globalAgent = new OAuthUserAgent(result.session); 83 + 84 + console.log('Authorization successful! Logged in as:', result.session.info.sub); 85 + 86 + } catch (error) { 87 + console.error('Failed to finalize authorization:', error); 88 + alert('Login failed. Please try again.'); 89 + } 90 + } 91 + } 92 + } 93 + 94 + private render() { 95 + if (!this.shadowRoot) { 96 + return; 97 + } 98 + 99 + const isLoggedIn = globalAgent !== null; 100 + 101 + this.shadowRoot.innerHTML = ` 102 + <style> 103 + * { 104 + box-sizing: border-box; 105 + margin: 0; 106 + padding: 0; 107 + } 108 + 109 + :host { 110 + display: block; 111 + font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; 112 + -webkit-font-smoothing: antialiased; 113 + -moz-osx-font-smoothing: grayscale; 114 + } 115 + 116 + .guestbook-sign { 117 + background: #f9fafb; 118 + padding: 0; 119 + width: 100%; 120 + } 121 + 122 + h2 { 123 + margin: 0 0 24px 0; 124 + font-size: 11px; 125 + font-weight: 700; 126 + color: #000; 127 + text-transform: uppercase; 128 + letter-spacing: 0.05em; 129 + } 130 + 131 + .form-group { 132 + margin-bottom: 24px; 133 + } 134 + 135 + label { 136 + display: block; 137 + margin-bottom: 8px; 138 + font-size: 14px; 139 + font-weight: 600; 140 + color: #000; 141 + } 142 + 143 + textarea, input[type="text"] { 144 + width: 100%; 145 + padding: 12px 16px; 146 + border: 1px solid #e5e7eb; 147 + border-radius: 6px; 148 + font-family: inherit; 149 + font-size: 15px; 150 + background: white; 151 + box-sizing: border-box; 152 + transition: border-color 0.2s, box-shadow 0.2s; 153 + } 154 + 155 + textarea { 156 + min-height: 120px; 157 + resize: vertical; 158 + } 159 + 160 + textarea:focus, input[type="text"]:focus { 161 + outline: none; 162 + border-color: #a1a1aa; 163 + box-shadow: 0 0 0 2px rgba(161, 161, 170, 0.2); 164 + } 165 + 166 + textarea::placeholder, input[type="text"]::placeholder { 167 + color: #9ca3af; 168 + } 169 + 170 + .char-count { 171 + display: none; 172 + } 173 + 174 + button { 175 + width: 100%; 176 + background: #18181b; 177 + color: white; 178 + border: none; 179 + border-radius: 6px; 180 + padding: 12px 24px; 181 + font-size: 15px; 182 + font-weight: 500; 183 + cursor: pointer; 184 + transition: background-color 0.2s; 185 + } 186 + 187 + button:hover:not(:disabled) { 188 + background: #27272a; 189 + } 190 + 191 + button:disabled { 192 + background: #d1d5db; 193 + cursor: not-allowed; 194 + } 195 + 196 + .status { 197 + margin-top: 16px; 198 + padding: 12px; 199 + border-radius: 8px; 200 + font-size: 14px; 201 + display: none; 202 + } 203 + 204 + .status.show { 205 + display: block; 206 + } 207 + 208 + .status.success { 209 + background: #ecfdf5; 210 + color: #065f46; 211 + border: 1px solid #d1fae5; 212 + } 213 + 214 + .status.error { 215 + background: #fef2f2; 216 + color: #991b1b; 217 + border: 1px solid #fecaca; 218 + } 219 + 220 + .status.loading { 221 + background: #eff6ff; 222 + color: #1e40af; 223 + border: 1px solid #dbeafe; 224 + } 225 + 226 + .login-prompt { 227 + display: none; 228 + } 229 + </style> 230 + 231 + <div class="guestbook-sign"> 232 + <h2>SIGN</h2> 233 + ${!isLoggedIn ? ` 234 + <form id="login-form"> 235 + <div class="form-group"> 236 + <label for="handle">AT Proto Handle</label> 237 + <actor-typeahead> 238 + <input 239 + type="text" 240 + id="handle" 241 + name="handle" 242 + placeholder="user.bsky.social" 243 + autocomplete="username" 244 + required 245 + /> 246 + </actor-typeahead> 247 + </div> 248 + <button type="submit" id="login-btn">Sign in to Continue</button> 249 + <div class="status" id="status"></div> 250 + </form> 251 + ` : ` 252 + <form id="sign-form"> 253 + <div class="form-group"> 254 + <label for="name">Name</label> 255 + <input 256 + type="text" 257 + id="name" 258 + name="name" 259 + placeholder="Your name" 260 + value="${this.userHandle || globalAgent?.session.info.sub || ''}" 261 + readonly 262 + /> 263 + </div> 264 + <div class="form-group"> 265 + <label for="message">Message</label> 266 + <textarea 267 + id="message" 268 + name="message" 269 + placeholder="Share your thoughts..." 270 + maxlength="100" 271 + required 272 + ></textarea> 273 + </div> 274 + <button type="submit" id="submit-btn">Sign Guestbook</button> 275 + <div class="status" id="status"></div> 276 + </form> 277 + `} 278 + </div> 279 + `; 280 + 281 + if (isLoggedIn) { 282 + this.form = this.shadowRoot.querySelector('#sign-form'); 283 + this.messageInput = this.shadowRoot.querySelector('#message'); 284 + this.submitButton = this.shadowRoot.querySelector('#submit-btn'); 285 + } else { 286 + this.form = this.shadowRoot.querySelector('#login-form'); 287 + this.loginInput = this.shadowRoot.querySelector('#handle'); 288 + this.loginButton = this.shadowRoot.querySelector('#login-btn'); 289 + } 290 + 291 + this.statusDiv = this.shadowRoot.querySelector('#status'); 292 + } 293 + 294 + private attachEventListeners() { 295 + if (!this.form) { 296 + return; 297 + } 298 + 299 + const isLoggedIn = globalAgent !== null; 300 + 301 + if (isLoggedIn && this.messageInput) { 302 + // character counter 303 + this.messageInput.addEventListener('input', () => { 304 + this.updateCharCount(); 305 + }); 306 + 307 + // form submission for signing 308 + this.form.addEventListener('submit', (e) => { 309 + e.preventDefault(); 310 + this.handleSubmit(); 311 + }); 312 + } else { 313 + // form submission for login 314 + this.form.addEventListener('submit', (e) => { 315 + e.preventDefault(); 316 + this.handleLogin(); 317 + }); 318 + } 319 + } 320 + 321 + private updateCharCount() { 322 + if (!this.messageInput || !this.shadowRoot) { 323 + return; 324 + } 325 + 326 + const length = this.messageInput.value.length; 327 + const charCountEl = this.shadowRoot.querySelector('#char-count'); 328 + 329 + if (charCountEl) { 330 + charCountEl.textContent = `${length} / 100`; 331 + charCountEl.classList.remove('warning', 'error'); 332 + 333 + if (length > 90) { 334 + charCountEl.classList.add('error'); 335 + } else if (length > 80) { 336 + charCountEl.classList.add('warning'); 337 + } 338 + } 339 + } 340 + 341 + private async handleLogin() { 342 + const handle = this.loginInput?.value.trim(); 343 + 344 + if (!handle) { 345 + this.showStatus('Please enter your Bluesky handle.', 'error'); 346 + return; 347 + } 348 + 349 + try { 350 + this.showStatus('Redirecting to sign in...', 'loading'); 351 + this.setFormDisabled(true); 352 + 353 + const config = getConfig(); 354 + if (!config) { 355 + throw new Error('Guestbook not configured. Call configureGuestbook() first.'); 356 + } 357 + 358 + const authUrl = await createAuthorizationUrl({ 359 + target: { type: 'account', identifier: handle as `${string}.${string}` }, 360 + scope: config.oauth.scope, 361 + }); 362 + 363 + // recommended to wait for the browser to persist local storage before proceeding 364 + await sleep(250); 365 + 366 + // redirect the user to sign in and authorize the app 367 + window.location.assign(authUrl); 368 + 369 + } catch (error) { 370 + console.error('Login error:', error); 371 + this.showStatus('Login failed. Please try again.', 'error'); 372 + this.setFormDisabled(false); 373 + } 374 + } 375 + 376 + private async handleSubmit() { 377 + if (!globalAgent) { 378 + this.showStatus('Please log in first.', 'error'); 379 + return; 380 + } 381 + 382 + const did = this.getAttribute('did'); 383 + if (!did) { 384 + this.showStatus('Missing guestbook DID.', 'error'); 385 + return; 386 + } 387 + 388 + // subject is just the DID (at-identifier format) 389 + const subject = did; 390 + 391 + const message = this.messageInput?.value.trim(); 392 + if (!message) { 393 + this.showStatus('Please enter a message.', 'error'); 394 + return; 395 + } 396 + 397 + try { 398 + this.showStatus('Signing guestbook...', 'loading'); 399 + this.setFormDisabled(true); 400 + 401 + // get the client from the OAuth agent 402 + const client = new Client({ handler: globalAgent }); 403 + 404 + // create the record 405 + const record = { 406 + $type: 'pet.nkp.guestbook.sign', 407 + subject: subject, 408 + message: message, 409 + createdAt: new Date().toISOString(), 410 + }; 411 + 412 + const response = await client.post('com.atproto.repo.createRecord', { 413 + input: { 414 + repo: globalAgent.session.info.sub, // user's DID 415 + collection: 'pet.nkp.guestbook.sign', 416 + record: record, 417 + }, 418 + }); 419 + 420 + if (response.ok) { 421 + this.showStatus('✓ Successfully signed the guestbook!', 'success'); 422 + 423 + // clear the form 424 + if (this.messageInput) { 425 + this.messageInput.value = ''; 426 + } 427 + this.updateCharCount(); 428 + 429 + // dispatch custom event for parent to listen to 430 + this.dispatchEvent(new CustomEvent('sign-created', { 431 + detail: { 432 + uri: response.data.uri, 433 + cid: response.data.cid, 434 + }, 435 + bubbles: true, 436 + composed: true, 437 + })); 438 + 439 + // hide success message after 3 seconds 440 + setTimeout(() => { 441 + this.hideStatus(); 442 + }, 3000); 443 + } else { 444 + throw new Error('Failed to create record'); 445 + } 446 + } catch (error) { 447 + console.error('Error signing guestbook:', error); 448 + this.showStatus( 449 + `Failed to sign: ${error instanceof Error ? error.message : 'Unknown error'}`, 450 + 'error' 451 + ); 452 + } finally { 453 + this.setFormDisabled(false); 454 + } 455 + } 456 + 457 + private showStatus(message: string, type: 'success' | 'error' | 'loading') { 458 + if (!this.statusDiv) { 459 + return; 460 + } 461 + 462 + this.statusDiv.textContent = message; 463 + this.statusDiv.className = `status show ${type}`; 464 + } 465 + 466 + private hideStatus() { 467 + if (!this.statusDiv) { 468 + return; 469 + } 470 + 471 + this.statusDiv.classList.remove('show'); 472 + } 473 + 474 + private setFormDisabled(disabled: boolean) { 475 + if (this.messageInput) { 476 + this.messageInput.disabled = disabled; 477 + } 478 + if (this.submitButton) { 479 + this.submitButton.disabled = disabled; 480 + } 481 + if (this.loginInput) { 482 + this.loginInput.disabled = disabled; 483 + } 484 + if (this.loginButton) { 485 + this.loginButton.disabled = disabled; 486 + } 487 + } 488 + } 489 +
+11
lib/index.ts
··· 1 + // Core component exports 2 + export { GuestbookSignElement } from './guestbook-sign'; 3 + export { GuestbookDisplayElement } from './guestbook-display'; 4 + 5 + // Configuration 6 + export { configureGuestbook, isConfigured, getConfig } from './config'; 7 + export type { GuestbookConfig } from './config'; 8 + 9 + // Types 10 + export type { GuestbookSignature } from './guestbook-display'; 11 +
+28
lib/register.ts
··· 1 + /** 2 + * Register guestbook custom elements. 3 + * Import this file to auto-register the components. 4 + */ 5 + import { GuestbookSignElement } from './guestbook-sign'; 6 + import { GuestbookDisplayElement } from './guestbook-display'; 7 + 8 + // Register custom elements if not already registered 9 + if (!customElements.get('guestbook-sign')) { 10 + customElements.define('guestbook-sign', GuestbookSignElement); 11 + } 12 + 13 + if (!customElements.get('guestbook-display')) { 14 + customElements.define('guestbook-display', GuestbookDisplayElement); 15 + } 16 + 17 + // Re-export for convenience 18 + export { GuestbookSignElement, GuestbookDisplayElement }; 19 + export { configureGuestbook, isConfigured, getConfig } from './config'; 20 + export type { GuestbookConfig } from './config'; 21 + 22 + // Add to global declarations for TypeScript 23 + declare global { 24 + interface HTMLElementTagNameMap { 25 + 'guestbook-sign': GuestbookSignElement; 26 + 'guestbook-display': GuestbookDisplayElement; 27 + } 28 + }
+2627
package-lock.json
··· 1 + { 2 + "name": "@aspect/guestbook", 3 + "version": "0.1.0", 4 + "lockfileVersion": 3, 5 + "requires": true, 6 + "packages": { 7 + "": { 8 + "name": "@aspect/guestbook", 9 + "version": "0.1.0", 10 + "dependencies": { 11 + "actor-typeahead": "^0.1.2" 12 + }, 13 + "devDependencies": { 14 + "@atcute/atproto": "^3.1.9", 15 + "@atcute/client": "^4.1.0", 16 + "@atcute/identity-resolver": "^1.1.4", 17 + "@atcute/lex-cli": "^2.5.0", 18 + "@atcute/lexicon-doc": "^2.0.4", 19 + "@atcute/oauth-browser-client": "^2.0.1", 20 + "@sveltejs/vite-plugin-svelte": "^6.2.1", 21 + "@tsconfig/svelte": "^5.0.6", 22 + "@types/node": "^24.10.1", 23 + "svelte": "^5.43.8", 24 + "svelte-check": "^4.3.4", 25 + "typescript": "~5.9.3", 26 + "vite": "npm:rolldown-vite@7.2.5", 27 + "vite-plugin-dts": "^4.5.4" 28 + }, 29 + "peerDependencies": { 30 + "@atcute/client": "^4.0.0", 31 + "@atcute/identity-resolver": "^1.0.0", 32 + "@atcute/oauth-browser-client": "^2.0.0" 33 + } 34 + }, 35 + "node_modules/@atcute/atproto": { 36 + "version": "3.1.9", 37 + "resolved": "https://registry.npmjs.org/@atcute/atproto/-/atproto-3.1.9.tgz", 38 + "integrity": "sha512-DyWwHCTdR4hY2BPNbLXgVmm7lI+fceOwWbE4LXbGvbvVtSn+ejSVFaAv01Ra3kWDha0whsOmbJL8JP0QPpf1+w==", 39 + "dev": true, 40 + "license": "0BSD", 41 + "dependencies": { 42 + "@atcute/lexicons": "^1.2.2" 43 + } 44 + }, 45 + "node_modules/@atcute/car": { 46 + "version": "5.0.0", 47 + "resolved": "https://registry.npmjs.org/@atcute/car/-/car-5.0.0.tgz", 48 + "integrity": "sha512-OIY2xTXv8lSpZsDSn/UYQtJSMvDw5Hi4Q+uyvmiqSM+fht08QRAEq/nxa5YFciPZ3nfDFnZ3//EgJw7QhkSXLQ==", 49 + "dev": true, 50 + "license": "0BSD", 51 + "dependencies": { 52 + "@atcute/cbor": "^2.2.7", 53 + "@atcute/cid": "^2.2.6", 54 + "@atcute/uint8array": "^1.0.5", 55 + "@atcute/varint": "^1.0.3" 56 + } 57 + }, 58 + "node_modules/@atcute/cbor": { 59 + "version": "2.2.8", 60 + "resolved": "https://registry.npmjs.org/@atcute/cbor/-/cbor-2.2.8.tgz", 61 + "integrity": "sha512-UzOAN9BuN6JCXgn0ryV8qZuRJUDrNqrbLd6EFM8jc6RYssjRyGRxNy6RZ1NU/07Hd8Tq/0pz8+nQiMu5Zai5uw==", 62 + "dev": true, 63 + "license": "0BSD", 64 + "dependencies": { 65 + "@atcute/cid": "^2.2.6", 66 + "@atcute/multibase": "^1.1.6", 67 + "@atcute/uint8array": "^1.0.5" 68 + } 69 + }, 70 + "node_modules/@atcute/cid": { 71 + "version": "2.2.6", 72 + "resolved": "https://registry.npmjs.org/@atcute/cid/-/cid-2.2.6.tgz", 73 + "integrity": "sha512-bTAHHbJ24p+E//V4KCS4xdmd39o211jJswvqQOevj7vk+5IYcgDLx1ryZWZ1sEPOo9x875li/kj5gpKL14RDwQ==", 74 + "dev": true, 75 + "license": "0BSD", 76 + "dependencies": { 77 + "@atcute/multibase": "^1.1.6", 78 + "@atcute/uint8array": "^1.0.5" 79 + } 80 + }, 81 + "node_modules/@atcute/client": { 82 + "version": "4.1.0", 83 + "resolved": "https://registry.npmjs.org/@atcute/client/-/client-4.1.0.tgz", 84 + "integrity": "sha512-AYhSu3RSDA2VDkVGOmad320NRbUUUf5pCFWJcOzlk25YC/4kyzmMFfpzhf1jjjEcY+anNBXGGhav/kKB1evggQ==", 85 + "dev": true, 86 + "license": "0BSD", 87 + "dependencies": { 88 + "@atcute/identity": "^1.1.3", 89 + "@atcute/lexicons": "^1.2.5" 90 + } 91 + }, 92 + "node_modules/@atcute/crypto": { 93 + "version": "2.2.6", 94 + "resolved": "https://registry.npmjs.org/@atcute/crypto/-/crypto-2.2.6.tgz", 95 + "integrity": "sha512-vkuexF+kmrKE1/Uqzub99Qi4QpnxA2jbu60E6PTgL4XypELQ6rb59MB/J1VbY2gs0kd3ET7+L3+NWpKD5nXyfA==", 96 + "dev": true, 97 + "license": "0BSD", 98 + "dependencies": { 99 + "@atcute/multibase": "^1.1.6", 100 + "@atcute/uint8array": "^1.0.5", 101 + "@noble/secp256k1": "^3.0.0" 102 + } 103 + }, 104 + "node_modules/@atcute/identity": { 105 + "version": "1.1.3", 106 + "resolved": "https://registry.npmjs.org/@atcute/identity/-/identity-1.1.3.tgz", 107 + "integrity": "sha512-oIqPoI8TwWeQxvcLmFEZLdN2XdWcaLVtlm8pNk0E72As9HNzzD9pwKPrLr3rmTLRIoULPPFmq9iFNsTeCIU9ng==", 108 + "dev": true, 109 + "license": "0BSD", 110 + "peer": true, 111 + "dependencies": { 112 + "@atcute/lexicons": "^1.2.4", 113 + "@badrap/valita": "^0.4.6" 114 + } 115 + }, 116 + "node_modules/@atcute/identity-resolver": { 117 + "version": "1.1.4", 118 + "resolved": "https://registry.npmjs.org/@atcute/identity-resolver/-/identity-resolver-1.1.4.tgz", 119 + "integrity": "sha512-/SVh8vf2cXFJenmBnGeYF2aY3WGQm3cJeew5NWTlkqoy3LvJ5wkvKq9PWu4Tv653VF40rPOp6LOdVr9Fa+q5rA==", 120 + "dev": true, 121 + "license": "0BSD", 122 + "peer": true, 123 + "dependencies": { 124 + "@atcute/lexicons": "^1.2.2", 125 + "@atcute/util-fetch": "^1.0.3", 126 + "@badrap/valita": "^0.4.6" 127 + }, 128 + "peerDependencies": { 129 + "@atcute/identity": "^1.0.0" 130 + } 131 + }, 132 + "node_modules/@atcute/lex-cli": { 133 + "version": "2.5.0", 134 + "resolved": "https://registry.npmjs.org/@atcute/lex-cli/-/lex-cli-2.5.0.tgz", 135 + "integrity": "sha512-mIla9XeK9HJqFW0m/FaHI3+wIQlUL3PJYFpGmlXVwJISQVHASvWpU6gCHSYtAySZTrfVDv73fsVDBkpw9mnTjA==", 136 + "dev": true, 137 + "license": "0BSD", 138 + "dependencies": { 139 + "@atcute/identity": "^1.1.3", 140 + "@atcute/identity-resolver": "^1.1.4", 141 + "@atcute/lexicon-doc": "^2.0.3", 142 + "@atcute/lexicon-resolver": "^0.1.4", 143 + "@atcute/lexicons": "^1.2.5", 144 + "@badrap/valita": "^0.4.6", 145 + "@optique/core": "^0.6.3", 146 + "@optique/run": "^0.6.3", 147 + "picocolors": "^1.1.1", 148 + "prettier": "^3.6.2" 149 + }, 150 + "bin": { 151 + "lex-cli": "cli.mjs" 152 + } 153 + }, 154 + "node_modules/@atcute/lexicon-doc": { 155 + "version": "2.0.4", 156 + "resolved": "https://registry.npmjs.org/@atcute/lexicon-doc/-/lexicon-doc-2.0.4.tgz", 157 + "integrity": "sha512-YfwlYFoYiBvRIYG0I1zsINCTFugFtS8l67uT3nQ04zdKVflzdg8uUj8cNZYRNY1V7okoOPdikhR4kPFhYGyemw==", 158 + "dev": true, 159 + "license": "0BSD", 160 + "dependencies": { 161 + "@atcute/identity": "^1.1.3", 162 + "@atcute/lexicons": "^1.2.5", 163 + "@badrap/valita": "^0.4.6" 164 + } 165 + }, 166 + "node_modules/@atcute/lexicon-resolver": { 167 + "version": "0.1.5", 168 + "resolved": "https://registry.npmjs.org/@atcute/lexicon-resolver/-/lexicon-resolver-0.1.5.tgz", 169 + "integrity": "sha512-0bx1/zdMQPuxvRcHW6ykAxRxktC2rEZLoAVSFoLSWDAA92Tf09F9QPK5wgXSF4MNODm1dvzMEdWSMIvlg8sr3A==", 170 + "dev": true, 171 + "license": "0BSD", 172 + "dependencies": { 173 + "@atcute/crypto": "^2.2.6", 174 + "@atcute/lexicon-doc": "^2.0.4", 175 + "@atcute/lexicons": "^1.2.5", 176 + "@atcute/repo": "^0.1.0", 177 + "@atcute/util-fetch": "^1.0.4", 178 + "@badrap/valita": "^0.4.6" 179 + }, 180 + "peerDependencies": { 181 + "@atcute/identity": "^1.1.0", 182 + "@atcute/identity-resolver": "^1.1.3" 183 + } 184 + }, 185 + "node_modules/@atcute/lexicons": { 186 + "version": "1.2.5", 187 + "resolved": "https://registry.npmjs.org/@atcute/lexicons/-/lexicons-1.2.5.tgz", 188 + "integrity": "sha512-9yO9WdgxW8jZ7SbzUycH710z+JmsQ9W9n5S6i6eghYju32kkluFmgBeS47r8e8p2+Dv4DemS7o/3SUGsX9FR5Q==", 189 + "dev": true, 190 + "license": "0BSD", 191 + "dependencies": { 192 + "@standard-schema/spec": "^1.0.0", 193 + "esm-env": "^1.2.2" 194 + } 195 + }, 196 + "node_modules/@atcute/mst": { 197 + "version": "0.1.0", 198 + "resolved": "https://registry.npmjs.org/@atcute/mst/-/mst-0.1.0.tgz", 199 + "integrity": "sha512-h+iDToKEnBpigk2DOHjSqY63vJtjYKUIztqu1CZ0P+I54wV2SrgoqAXAT1xrW6A1Iup8cjTv+U2H5WVG4KxPLw==", 200 + "dev": true, 201 + "license": "0BSD", 202 + "dependencies": { 203 + "@atcute/cbor": "^2.2.7", 204 + "@atcute/cid": "^2.2.6", 205 + "@atcute/uint8array": "^1.0.5" 206 + } 207 + }, 208 + "node_modules/@atcute/multibase": { 209 + "version": "1.1.6", 210 + "resolved": "https://registry.npmjs.org/@atcute/multibase/-/multibase-1.1.6.tgz", 211 + "integrity": "sha512-HBxuCgYLKPPxETV0Rot4VP9e24vKl8JdzGCZOVsDaOXJgbRZoRIF67Lp0H/OgnJeH/Xpva8Z5ReoTNJE5dn3kg==", 212 + "dev": true, 213 + "license": "0BSD", 214 + "dependencies": { 215 + "@atcute/uint8array": "^1.0.5" 216 + } 217 + }, 218 + "node_modules/@atcute/oauth-browser-client": { 219 + "version": "2.0.1", 220 + "resolved": "https://registry.npmjs.org/@atcute/oauth-browser-client/-/oauth-browser-client-2.0.1.tgz", 221 + "integrity": "sha512-lG021GkeORG06zfFf4bH85egObjBEKHNgAWHvbtY/E2dX4wxo88hf370pJDx8acdnuUJLJ2VKPikJtZwo4Heeg==", 222 + "dev": true, 223 + "license": "0BSD", 224 + "dependencies": { 225 + "@atcute/client": "^4.0.5", 226 + "@atcute/identity": "^1.1.1", 227 + "@atcute/identity-resolver": "^1.1.4", 228 + "@atcute/lexicons": "^1.2.2", 229 + "@atcute/multibase": "^1.1.6", 230 + "@atcute/uint8array": "^1.0.5", 231 + "nanoid": "^5.1.5" 232 + } 233 + }, 234 + "node_modules/@atcute/oauth-browser-client/node_modules/nanoid": { 235 + "version": "5.1.6", 236 + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.6.tgz", 237 + "integrity": "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==", 238 + "dev": true, 239 + "funding": [ 240 + { 241 + "type": "github", 242 + "url": "https://github.com/sponsors/ai" 243 + } 244 + ], 245 + "license": "MIT", 246 + "bin": { 247 + "nanoid": "bin/nanoid.js" 248 + }, 249 + "engines": { 250 + "node": "^18 || >=20" 251 + } 252 + }, 253 + "node_modules/@atcute/repo": { 254 + "version": "0.1.0", 255 + "resolved": "https://registry.npmjs.org/@atcute/repo/-/repo-0.1.0.tgz", 256 + "integrity": "sha512-INiYAuma8dydBu7cqd2WVpcXh3mzhIepYBUqFWAK5MqMulPRLTRCc/9GW3G9pxYrOdlvLCVamG2Jf8XK0nuFEw==", 257 + "dev": true, 258 + "license": "0BSD", 259 + "dependencies": { 260 + "@atcute/car": "^5.0.0", 261 + "@atcute/cbor": "^2.2.7", 262 + "@atcute/cid": "^2.2.6", 263 + "@atcute/crypto": "^2.2.5", 264 + "@atcute/lexicons": "^1.2.2", 265 + "@atcute/mst": "^0.1.0", 266 + "@atcute/uint8array": "^1.0.5" 267 + } 268 + }, 269 + "node_modules/@atcute/uint8array": { 270 + "version": "1.0.5", 271 + "resolved": "https://registry.npmjs.org/@atcute/uint8array/-/uint8array-1.0.5.tgz", 272 + "integrity": "sha512-XLWWxoR2HNl2qU+FCr0rp1APwJXci7HnzbOQLxK55OaMNBXZ19+xNC5ii4QCsThsDxa4JS/JTzuiQLziITWf2Q==", 273 + "dev": true, 274 + "license": "0BSD" 275 + }, 276 + "node_modules/@atcute/util-fetch": { 277 + "version": "1.0.4", 278 + "resolved": "https://registry.npmjs.org/@atcute/util-fetch/-/util-fetch-1.0.4.tgz", 279 + "integrity": "sha512-sIU9Qk0dE8PLEXSfhy+gIJV+HpiiknMytCI2SqLlqd0vgZUtEKI/EQfP+23LHWvP+CLCzVDOa6cpH045OlmNBg==", 280 + "dev": true, 281 + "license": "0BSD", 282 + "dependencies": { 283 + "@badrap/valita": "^0.4.6" 284 + } 285 + }, 286 + "node_modules/@atcute/varint": { 287 + "version": "1.0.3", 288 + "resolved": "https://registry.npmjs.org/@atcute/varint/-/varint-1.0.3.tgz", 289 + "integrity": "sha512-fdvMPyBB+McDT+Ai5e9RwEbwYV4yjZ60S2Dn5PTjGqUyxvoCH1z42viuheDZRUDkmfQehXJTZ5az7dSozVNtog==", 290 + "dev": true, 291 + "license": "0BSD" 292 + }, 293 + "node_modules/@babel/helper-string-parser": { 294 + "version": "7.27.1", 295 + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", 296 + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", 297 + "dev": true, 298 + "license": "MIT", 299 + "engines": { 300 + "node": ">=6.9.0" 301 + } 302 + }, 303 + "node_modules/@babel/helper-validator-identifier": { 304 + "version": "7.28.5", 305 + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", 306 + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", 307 + "dev": true, 308 + "license": "MIT", 309 + "engines": { 310 + "node": ">=6.9.0" 311 + } 312 + }, 313 + "node_modules/@babel/parser": { 314 + "version": "7.28.5", 315 + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", 316 + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", 317 + "dev": true, 318 + "license": "MIT", 319 + "dependencies": { 320 + "@babel/types": "^7.28.5" 321 + }, 322 + "bin": { 323 + "parser": "bin/babel-parser.js" 324 + }, 325 + "engines": { 326 + "node": ">=6.0.0" 327 + } 328 + }, 329 + "node_modules/@babel/types": { 330 + "version": "7.28.5", 331 + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", 332 + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", 333 + "dev": true, 334 + "license": "MIT", 335 + "dependencies": { 336 + "@babel/helper-string-parser": "^7.27.1", 337 + "@babel/helper-validator-identifier": "^7.28.5" 338 + }, 339 + "engines": { 340 + "node": ">=6.9.0" 341 + } 342 + }, 343 + "node_modules/@badrap/valita": { 344 + "version": "0.4.6", 345 + "resolved": "https://registry.npmjs.org/@badrap/valita/-/valita-0.4.6.tgz", 346 + "integrity": "sha512-4kdqcjyxo/8RQ8ayjms47HCWZIF5981oE5nIenbfThKDxWXtEHKipAOWlflpPJzZx9y/JWYQkp18Awr7VuepFg==", 347 + "dev": true, 348 + "license": "MIT", 349 + "engines": { 350 + "node": ">= 18" 351 + } 352 + }, 353 + "node_modules/@emnapi/core": { 354 + "version": "1.7.1", 355 + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", 356 + "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", 357 + "dev": true, 358 + "license": "MIT", 359 + "optional": true, 360 + "dependencies": { 361 + "@emnapi/wasi-threads": "1.1.0", 362 + "tslib": "^2.4.0" 363 + } 364 + }, 365 + "node_modules/@emnapi/runtime": { 366 + "version": "1.7.1", 367 + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", 368 + "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", 369 + "dev": true, 370 + "license": "MIT", 371 + "optional": true, 372 + "dependencies": { 373 + "tslib": "^2.4.0" 374 + } 375 + }, 376 + "node_modules/@emnapi/wasi-threads": { 377 + "version": "1.1.0", 378 + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", 379 + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", 380 + "dev": true, 381 + "license": "MIT", 382 + "optional": true, 383 + "dependencies": { 384 + "tslib": "^2.4.0" 385 + } 386 + }, 387 + "node_modules/@isaacs/balanced-match": { 388 + "version": "4.0.1", 389 + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", 390 + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", 391 + "dev": true, 392 + "license": "MIT", 393 + "engines": { 394 + "node": "20 || >=22" 395 + } 396 + }, 397 + "node_modules/@isaacs/brace-expansion": { 398 + "version": "5.0.0", 399 + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", 400 + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", 401 + "dev": true, 402 + "license": "MIT", 403 + "dependencies": { 404 + "@isaacs/balanced-match": "^4.0.1" 405 + }, 406 + "engines": { 407 + "node": "20 || >=22" 408 + } 409 + }, 410 + "node_modules/@jridgewell/gen-mapping": { 411 + "version": "0.3.13", 412 + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", 413 + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", 414 + "dev": true, 415 + "license": "MIT", 416 + "dependencies": { 417 + "@jridgewell/sourcemap-codec": "^1.5.0", 418 + "@jridgewell/trace-mapping": "^0.3.24" 419 + } 420 + }, 421 + "node_modules/@jridgewell/remapping": { 422 + "version": "2.3.5", 423 + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", 424 + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", 425 + "dev": true, 426 + "license": "MIT", 427 + "dependencies": { 428 + "@jridgewell/gen-mapping": "^0.3.5", 429 + "@jridgewell/trace-mapping": "^0.3.24" 430 + } 431 + }, 432 + "node_modules/@jridgewell/resolve-uri": { 433 + "version": "3.1.2", 434 + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 435 + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 436 + "dev": true, 437 + "license": "MIT", 438 + "engines": { 439 + "node": ">=6.0.0" 440 + } 441 + }, 442 + "node_modules/@jridgewell/sourcemap-codec": { 443 + "version": "1.5.5", 444 + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", 445 + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", 446 + "dev": true, 447 + "license": "MIT" 448 + }, 449 + "node_modules/@jridgewell/trace-mapping": { 450 + "version": "0.3.31", 451 + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", 452 + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", 453 + "dev": true, 454 + "license": "MIT", 455 + "dependencies": { 456 + "@jridgewell/resolve-uri": "^3.1.0", 457 + "@jridgewell/sourcemap-codec": "^1.4.14" 458 + } 459 + }, 460 + "node_modules/@microsoft/api-extractor": { 461 + "version": "7.55.1", 462 + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.55.1.tgz", 463 + "integrity": "sha512-l8Z+8qrLkZFM3HM95Dbpqs6G39fpCa7O5p8A7AkA6hSevxkgwsOlLrEuPv0ADOyj5dI1Af5WVDiwpKG/ya5G3w==", 464 + "dev": true, 465 + "license": "MIT", 466 + "dependencies": { 467 + "@microsoft/api-extractor-model": "7.32.1", 468 + "@microsoft/tsdoc": "~0.16.0", 469 + "@microsoft/tsdoc-config": "~0.18.0", 470 + "@rushstack/node-core-library": "5.19.0", 471 + "@rushstack/rig-package": "0.6.0", 472 + "@rushstack/terminal": "0.19.4", 473 + "@rushstack/ts-command-line": "5.1.4", 474 + "diff": "~8.0.2", 475 + "lodash": "~4.17.15", 476 + "minimatch": "10.0.3", 477 + "resolve": "~1.22.1", 478 + "semver": "~7.5.4", 479 + "source-map": "~0.6.1", 480 + "typescript": "5.8.2" 481 + }, 482 + "bin": { 483 + "api-extractor": "bin/api-extractor" 484 + } 485 + }, 486 + "node_modules/@microsoft/api-extractor-model": { 487 + "version": "7.32.1", 488 + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.32.1.tgz", 489 + "integrity": "sha512-u4yJytMYiUAnhcNQcZDTh/tVtlrzKlyKrQnLOV+4Qr/5gV+cpufWzCYAB1Q23URFqD6z2RoL2UYncM9xJVGNKA==", 490 + "dev": true, 491 + "license": "MIT", 492 + "dependencies": { 493 + "@microsoft/tsdoc": "~0.16.0", 494 + "@microsoft/tsdoc-config": "~0.18.0", 495 + "@rushstack/node-core-library": "5.19.0" 496 + } 497 + }, 498 + "node_modules/@microsoft/api-extractor/node_modules/typescript": { 499 + "version": "5.8.2", 500 + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", 501 + "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", 502 + "dev": true, 503 + "license": "Apache-2.0", 504 + "bin": { 505 + "tsc": "bin/tsc", 506 + "tsserver": "bin/tsserver" 507 + }, 508 + "engines": { 509 + "node": ">=14.17" 510 + } 511 + }, 512 + "node_modules/@microsoft/tsdoc": { 513 + "version": "0.16.0", 514 + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.16.0.tgz", 515 + "integrity": "sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==", 516 + "dev": true, 517 + "license": "MIT" 518 + }, 519 + "node_modules/@microsoft/tsdoc-config": { 520 + "version": "0.18.0", 521 + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.18.0.tgz", 522 + "integrity": "sha512-8N/vClYyfOH+l4fLkkr9+myAoR6M7akc8ntBJ4DJdWH2b09uVfr71+LTMpNyG19fNqWDg8KEDZhx5wxuqHyGjw==", 523 + "dev": true, 524 + "license": "MIT", 525 + "dependencies": { 526 + "@microsoft/tsdoc": "0.16.0", 527 + "ajv": "~8.12.0", 528 + "jju": "~1.4.0", 529 + "resolve": "~1.22.2" 530 + } 531 + }, 532 + "node_modules/@napi-rs/wasm-runtime": { 533 + "version": "1.0.7", 534 + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.7.tgz", 535 + "integrity": "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==", 536 + "dev": true, 537 + "license": "MIT", 538 + "optional": true, 539 + "dependencies": { 540 + "@emnapi/core": "^1.5.0", 541 + "@emnapi/runtime": "^1.5.0", 542 + "@tybys/wasm-util": "^0.10.1" 543 + } 544 + }, 545 + "node_modules/@noble/secp256k1": { 546 + "version": "3.0.0", 547 + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-3.0.0.tgz", 548 + "integrity": "sha512-NJBaR352KyIvj3t6sgT/+7xrNyF9Xk9QlLSIqUGVUYlsnDTAUqY8LOmwpcgEx4AMJXRITQ5XEVHD+mMaPfr3mg==", 549 + "dev": true, 550 + "license": "MIT", 551 + "funding": { 552 + "url": "https://paulmillr.com/funding/" 553 + } 554 + }, 555 + "node_modules/@optique/core": { 556 + "version": "0.6.3", 557 + "resolved": "https://registry.npmjs.org/@optique/core/-/core-0.6.3.tgz", 558 + "integrity": "sha512-Aw7naHPeZr+YThJRrfk+Ds3OuAd7HUD1chsGncay+6crmLyrraXh0s0xDuJ52kCfNPdCTKAW3MG0XLcuEIr8qQ==", 559 + "dev": true, 560 + "funding": [ 561 + "https://github.com/sponsors/dahlia" 562 + ], 563 + "license": "MIT", 564 + "engines": { 565 + "bun": ">=1.2.0", 566 + "deno": ">=2.3.0", 567 + "node": ">=20.0.0" 568 + } 569 + }, 570 + "node_modules/@optique/run": { 571 + "version": "0.6.3", 572 + "resolved": "https://registry.npmjs.org/@optique/run/-/run-0.6.3.tgz", 573 + "integrity": "sha512-6zesLs4XLyFtG8s/JoG2VO/+plJVZhqbLK20yDm0hFEXrqcP+VCKTsoFAlWoWv4Us48V170SKH+8DZcxw8raJw==", 574 + "dev": true, 575 + "funding": [ 576 + "https://github.com/sponsors/dahlia" 577 + ], 578 + "license": "MIT", 579 + "dependencies": { 580 + "@optique/core": "0.6.3" 581 + }, 582 + "engines": { 583 + "bun": ">=1.2.0", 584 + "deno": ">=2.3.0", 585 + "node": ">=20.0.0" 586 + } 587 + }, 588 + "node_modules/@oxc-project/runtime": { 589 + "version": "0.97.0", 590 + "resolved": "https://registry.npmjs.org/@oxc-project/runtime/-/runtime-0.97.0.tgz", 591 + "integrity": "sha512-yH0zw7z+jEws4dZ4IUKoix5Lh3yhqIJWF9Dc8PWvhpo7U7O+lJrv7ZZL4BeRO0la8LBQFwcCewtLBnVV7hPe/w==", 592 + "dev": true, 593 + "license": "MIT", 594 + "engines": { 595 + "node": "^20.19.0 || >=22.12.0" 596 + } 597 + }, 598 + "node_modules/@oxc-project/types": { 599 + "version": "0.97.0", 600 + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.97.0.tgz", 601 + "integrity": "sha512-lxmZK4xFrdvU0yZiDwgVQTCvh2gHWBJCBk5ALsrtsBWhs0uDIi+FTOnXRQeQfs304imdvTdaakT/lqwQ8hkOXQ==", 602 + "dev": true, 603 + "license": "MIT", 604 + "funding": { 605 + "url": "https://github.com/sponsors/Boshen" 606 + } 607 + }, 608 + "node_modules/@rolldown/binding-android-arm64": { 609 + "version": "1.0.0-beta.50", 610 + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-beta.50.tgz", 611 + "integrity": "sha512-XlEkrOIHLyGT3avOgzfTFSjG+f+dZMw+/qd+Y3HLN86wlndrB/gSimrJCk4gOhr1XtRtEKfszpadI3Md4Z4/Ag==", 612 + "cpu": [ 613 + "arm64" 614 + ], 615 + "dev": true, 616 + "license": "MIT", 617 + "optional": true, 618 + "os": [ 619 + "android" 620 + ], 621 + "engines": { 622 + "node": "^20.19.0 || >=22.12.0" 623 + } 624 + }, 625 + "node_modules/@rolldown/binding-darwin-arm64": { 626 + "version": "1.0.0-beta.50", 627 + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-beta.50.tgz", 628 + "integrity": "sha512-+JRqKJhoFlt5r9q+DecAGPLZ5PxeLva+wCMtAuoFMWPoZzgcYrr599KQ+Ix0jwll4B4HGP43avu9My8KtSOR+w==", 629 + "cpu": [ 630 + "arm64" 631 + ], 632 + "dev": true, 633 + "license": "MIT", 634 + "optional": true, 635 + "os": [ 636 + "darwin" 637 + ], 638 + "engines": { 639 + "node": "^20.19.0 || >=22.12.0" 640 + } 641 + }, 642 + "node_modules/@rolldown/binding-darwin-x64": { 643 + "version": "1.0.0-beta.50", 644 + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-beta.50.tgz", 645 + "integrity": "sha512-fFXDjXnuX7/gQZQm/1FoivVtRcyAzdjSik7Eo+9iwPQ9EgtA5/nB2+jmbzaKtMGG3q+BnZbdKHCtOacmNrkIDA==", 646 + "cpu": [ 647 + "x64" 648 + ], 649 + "dev": true, 650 + "license": "MIT", 651 + "optional": true, 652 + "os": [ 653 + "darwin" 654 + ], 655 + "engines": { 656 + "node": "^20.19.0 || >=22.12.0" 657 + } 658 + }, 659 + "node_modules/@rolldown/binding-freebsd-x64": { 660 + "version": "1.0.0-beta.50", 661 + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-beta.50.tgz", 662 + "integrity": "sha512-F1b6vARy49tjmT/hbloplzgJS7GIvwWZqt+tAHEstCh0JIh9sa8FAMVqEmYxDviqKBaAI8iVvUREm/Kh/PD26Q==", 663 + "cpu": [ 664 + "x64" 665 + ], 666 + "dev": true, 667 + "license": "MIT", 668 + "optional": true, 669 + "os": [ 670 + "freebsd" 671 + ], 672 + "engines": { 673 + "node": "^20.19.0 || >=22.12.0" 674 + } 675 + }, 676 + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { 677 + "version": "1.0.0-beta.50", 678 + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-beta.50.tgz", 679 + "integrity": "sha512-U6cR76N8T8M6lHj7EZrQ3xunLPxSvYYxA8vJsBKZiFZkT8YV4kjgCO3KwMJL0NOjQCPGKyiXO07U+KmJzdPGRw==", 680 + "cpu": [ 681 + "arm" 682 + ], 683 + "dev": true, 684 + "license": "MIT", 685 + "optional": true, 686 + "os": [ 687 + "linux" 688 + ], 689 + "engines": { 690 + "node": "^20.19.0 || >=22.12.0" 691 + } 692 + }, 693 + "node_modules/@rolldown/binding-linux-arm64-gnu": { 694 + "version": "1.0.0-beta.50", 695 + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-beta.50.tgz", 696 + "integrity": "sha512-ONgyjofCrrE3bnh5GZb8EINSFyR/hmwTzZ7oVuyUB170lboza1VMCnb8jgE6MsyyRgHYmN8Lb59i3NKGrxrYjw==", 697 + "cpu": [ 698 + "arm64" 699 + ], 700 + "dev": true, 701 + "license": "MIT", 702 + "optional": true, 703 + "os": [ 704 + "linux" 705 + ], 706 + "engines": { 707 + "node": "^20.19.0 || >=22.12.0" 708 + } 709 + }, 710 + "node_modules/@rolldown/binding-linux-arm64-musl": { 711 + "version": "1.0.0-beta.50", 712 + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-beta.50.tgz", 713 + "integrity": "sha512-L0zRdH2oDPkmB+wvuTl+dJbXCsx62SkqcEqdM+79LOcB+PxbAxxjzHU14BuZIQdXcAVDzfpMfaHWzZuwhhBTcw==", 714 + "cpu": [ 715 + "arm64" 716 + ], 717 + "dev": true, 718 + "license": "MIT", 719 + "optional": true, 720 + "os": [ 721 + "linux" 722 + ], 723 + "engines": { 724 + "node": "^20.19.0 || >=22.12.0" 725 + } 726 + }, 727 + "node_modules/@rolldown/binding-linux-x64-gnu": { 728 + "version": "1.0.0-beta.50", 729 + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-beta.50.tgz", 730 + "integrity": "sha512-gyoI8o/TGpQd3OzkJnh1M2kxy1Bisg8qJ5Gci0sXm9yLFzEXIFdtc4EAzepxGvrT2ri99ar5rdsmNG0zP0SbIg==", 731 + "cpu": [ 732 + "x64" 733 + ], 734 + "dev": true, 735 + "license": "MIT", 736 + "optional": true, 737 + "os": [ 738 + "linux" 739 + ], 740 + "engines": { 741 + "node": "^20.19.0 || >=22.12.0" 742 + } 743 + }, 744 + "node_modules/@rolldown/binding-linux-x64-musl": { 745 + "version": "1.0.0-beta.50", 746 + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-beta.50.tgz", 747 + "integrity": "sha512-zti8A7M+xFDpKlghpcCAzyOi+e5nfUl3QhU023ce5NCgUxRG5zGP2GR9LTydQ1rnIPwZUVBWd4o7NjZDaQxaXA==", 748 + "cpu": [ 749 + "x64" 750 + ], 751 + "dev": true, 752 + "license": "MIT", 753 + "optional": true, 754 + "os": [ 755 + "linux" 756 + ], 757 + "engines": { 758 + "node": "^20.19.0 || >=22.12.0" 759 + } 760 + }, 761 + "node_modules/@rolldown/binding-openharmony-arm64": { 762 + "version": "1.0.0-beta.50", 763 + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-beta.50.tgz", 764 + "integrity": "sha512-eZUssog7qljrrRU9Mi0eqYEPm3Ch0UwB+qlWPMKSUXHNqhm3TvDZarJQdTevGEfu3EHAXJvBIe0YFYr0TPVaMA==", 765 + "cpu": [ 766 + "arm64" 767 + ], 768 + "dev": true, 769 + "license": "MIT", 770 + "optional": true, 771 + "os": [ 772 + "openharmony" 773 + ], 774 + "engines": { 775 + "node": "^20.19.0 || >=22.12.0" 776 + } 777 + }, 778 + "node_modules/@rolldown/binding-wasm32-wasi": { 779 + "version": "1.0.0-beta.50", 780 + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-beta.50.tgz", 781 + "integrity": "sha512-nmCN0nIdeUnmgeDXiQ+2HU6FT162o+rxnF7WMkBm4M5Ds8qTU7Dzv2Wrf22bo4ftnlrb2hKK6FSwAJSAe2FWLg==", 782 + "cpu": [ 783 + "wasm32" 784 + ], 785 + "dev": true, 786 + "license": "MIT", 787 + "optional": true, 788 + "dependencies": { 789 + "@napi-rs/wasm-runtime": "^1.0.7" 790 + }, 791 + "engines": { 792 + "node": ">=14.0.0" 793 + } 794 + }, 795 + "node_modules/@rolldown/binding-win32-arm64-msvc": { 796 + "version": "1.0.0-beta.50", 797 + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-beta.50.tgz", 798 + "integrity": "sha512-7kcNLi7Ua59JTTLvbe1dYb028QEPaJPJQHqkmSZ5q3tJueUeb6yjRtx8mw4uIqgWZcnQHAR3PrLN4XRJxvgIkA==", 799 + "cpu": [ 800 + "arm64" 801 + ], 802 + "dev": true, 803 + "license": "MIT", 804 + "optional": true, 805 + "os": [ 806 + "win32" 807 + ], 808 + "engines": { 809 + "node": "^20.19.0 || >=22.12.0" 810 + } 811 + }, 812 + "node_modules/@rolldown/binding-win32-ia32-msvc": { 813 + "version": "1.0.0-beta.50", 814 + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.0.0-beta.50.tgz", 815 + "integrity": "sha512-lL70VTNvSCdSZkDPPVMwWn/M2yQiYvSoXw9hTLgdIWdUfC3g72UaruezusR6ceRuwHCY1Ayu2LtKqXkBO5LIwg==", 816 + "cpu": [ 817 + "ia32" 818 + ], 819 + "dev": true, 820 + "license": "MIT", 821 + "optional": true, 822 + "os": [ 823 + "win32" 824 + ], 825 + "engines": { 826 + "node": "^20.19.0 || >=22.12.0" 827 + } 828 + }, 829 + "node_modules/@rolldown/binding-win32-x64-msvc": { 830 + "version": "1.0.0-beta.50", 831 + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-beta.50.tgz", 832 + "integrity": "sha512-4qU4x5DXWB4JPjyTne/wBNPqkbQU8J45bl21geERBKtEittleonioACBL1R0PsBu0Aq21SwMK5a9zdBkWSlQtQ==", 833 + "cpu": [ 834 + "x64" 835 + ], 836 + "dev": true, 837 + "license": "MIT", 838 + "optional": true, 839 + "os": [ 840 + "win32" 841 + ], 842 + "engines": { 843 + "node": "^20.19.0 || >=22.12.0" 844 + } 845 + }, 846 + "node_modules/@rolldown/pluginutils": { 847 + "version": "1.0.0-beta.50", 848 + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.50.tgz", 849 + "integrity": "sha512-5e76wQiQVeL1ICOZVUg4LSOVYg9jyhGCin+icYozhsUzM+fHE7kddi1bdiE0jwVqTfkjba3jUFbEkoC9WkdvyA==", 850 + "dev": true, 851 + "license": "MIT" 852 + }, 853 + "node_modules/@rollup/pluginutils": { 854 + "version": "5.3.0", 855 + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", 856 + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", 857 + "dev": true, 858 + "license": "MIT", 859 + "dependencies": { 860 + "@types/estree": "^1.0.0", 861 + "estree-walker": "^2.0.2", 862 + "picomatch": "^4.0.2" 863 + }, 864 + "engines": { 865 + "node": ">=14.0.0" 866 + }, 867 + "peerDependencies": { 868 + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" 869 + }, 870 + "peerDependenciesMeta": { 871 + "rollup": { 872 + "optional": true 873 + } 874 + } 875 + }, 876 + "node_modules/@rushstack/node-core-library": { 877 + "version": "5.19.0", 878 + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.19.0.tgz", 879 + "integrity": "sha512-BxAopbeWBvNJ6VGiUL+5lbJXywTdsnMeOS8j57Cn/xY10r6sV/gbsTlfYKjzVCUBZATX2eRzJHSMCchsMTGN6A==", 880 + "dev": true, 881 + "license": "MIT", 882 + "dependencies": { 883 + "ajv": "~8.13.0", 884 + "ajv-draft-04": "~1.0.0", 885 + "ajv-formats": "~3.0.1", 886 + "fs-extra": "~11.3.0", 887 + "import-lazy": "~4.0.0", 888 + "jju": "~1.4.0", 889 + "resolve": "~1.22.1", 890 + "semver": "~7.5.4" 891 + }, 892 + "peerDependencies": { 893 + "@types/node": "*" 894 + }, 895 + "peerDependenciesMeta": { 896 + "@types/node": { 897 + "optional": true 898 + } 899 + } 900 + }, 901 + "node_modules/@rushstack/node-core-library/node_modules/ajv": { 902 + "version": "8.13.0", 903 + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", 904 + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", 905 + "dev": true, 906 + "license": "MIT", 907 + "dependencies": { 908 + "fast-deep-equal": "^3.1.3", 909 + "json-schema-traverse": "^1.0.0", 910 + "require-from-string": "^2.0.2", 911 + "uri-js": "^4.4.1" 912 + }, 913 + "funding": { 914 + "type": "github", 915 + "url": "https://github.com/sponsors/epoberezkin" 916 + } 917 + }, 918 + "node_modules/@rushstack/problem-matcher": { 919 + "version": "0.1.1", 920 + "resolved": "https://registry.npmjs.org/@rushstack/problem-matcher/-/problem-matcher-0.1.1.tgz", 921 + "integrity": "sha512-Fm5XtS7+G8HLcJHCWpES5VmeMyjAKaWeyZU5qPzZC+22mPlJzAsOxymHiWIfuirtPckX3aptWws+K2d0BzniJA==", 922 + "dev": true, 923 + "license": "MIT", 924 + "peerDependencies": { 925 + "@types/node": "*" 926 + }, 927 + "peerDependenciesMeta": { 928 + "@types/node": { 929 + "optional": true 930 + } 931 + } 932 + }, 933 + "node_modules/@rushstack/rig-package": { 934 + "version": "0.6.0", 935 + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.6.0.tgz", 936 + "integrity": "sha512-ZQmfzsLE2+Y91GF15c65L/slMRVhF6Hycq04D4TwtdGaUAbIXXg9c5pKA5KFU7M4QMaihoobp9JJYpYcaY3zOw==", 937 + "dev": true, 938 + "license": "MIT", 939 + "dependencies": { 940 + "resolve": "~1.22.1", 941 + "strip-json-comments": "~3.1.1" 942 + } 943 + }, 944 + "node_modules/@rushstack/terminal": { 945 + "version": "0.19.4", 946 + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.19.4.tgz", 947 + "integrity": "sha512-f4XQk02CrKfrMgyOfhYd3qWI944dLC21S4I/LUhrlAP23GTMDNG6EK5effQtFkISwUKCgD9vMBrJZaPSUquxWQ==", 948 + "dev": true, 949 + "license": "MIT", 950 + "dependencies": { 951 + "@rushstack/node-core-library": "5.19.0", 952 + "@rushstack/problem-matcher": "0.1.1", 953 + "supports-color": "~8.1.1" 954 + }, 955 + "peerDependencies": { 956 + "@types/node": "*" 957 + }, 958 + "peerDependenciesMeta": { 959 + "@types/node": { 960 + "optional": true 961 + } 962 + } 963 + }, 964 + "node_modules/@rushstack/ts-command-line": { 965 + "version": "5.1.4", 966 + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-5.1.4.tgz", 967 + "integrity": "sha512-H0I6VdJ6sOUbktDFpP2VW5N29w8v4hRoNZOQz02vtEi6ZTYL1Ju8u+TcFiFawUDrUsx/5MQTUhd79uwZZVwVlA==", 968 + "dev": true, 969 + "license": "MIT", 970 + "dependencies": { 971 + "@rushstack/terminal": "0.19.4", 972 + "@types/argparse": "1.0.38", 973 + "argparse": "~1.0.9", 974 + "string-argv": "~0.3.1" 975 + } 976 + }, 977 + "node_modules/@standard-schema/spec": { 978 + "version": "1.0.0", 979 + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", 980 + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", 981 + "dev": true, 982 + "license": "MIT" 983 + }, 984 + "node_modules/@sveltejs/acorn-typescript": { 985 + "version": "1.0.7", 986 + "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.7.tgz", 987 + "integrity": "sha512-znp1A/Y1Jj4l/Zy7PX5DZKBE0ZNY+5QBngiE21NJkfSTyzzC5iKNWOtwFXKtIrn7MXEFBck4jD95iBNkGjK92Q==", 988 + "dev": true, 989 + "license": "MIT", 990 + "peerDependencies": { 991 + "acorn": "^8.9.0" 992 + } 993 + }, 994 + "node_modules/@sveltejs/vite-plugin-svelte": { 995 + "version": "6.2.1", 996 + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.2.1.tgz", 997 + "integrity": "sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==", 998 + "dev": true, 999 + "license": "MIT", 1000 + "peer": true, 1001 + "dependencies": { 1002 + "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0", 1003 + "debug": "^4.4.1", 1004 + "deepmerge": "^4.3.1", 1005 + "magic-string": "^0.30.17", 1006 + "vitefu": "^1.1.1" 1007 + }, 1008 + "engines": { 1009 + "node": "^20.19 || ^22.12 || >=24" 1010 + }, 1011 + "peerDependencies": { 1012 + "svelte": "^5.0.0", 1013 + "vite": "^6.3.0 || ^7.0.0" 1014 + } 1015 + }, 1016 + "node_modules/@sveltejs/vite-plugin-svelte-inspector": { 1017 + "version": "5.0.1", 1018 + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-5.0.1.tgz", 1019 + "integrity": "sha512-ubWshlMk4bc8mkwWbg6vNvCeT7lGQojE3ijDh3QTR6Zr/R+GXxsGbyH4PExEPpiFmqPhYiVSVmHBjUcVc1JIrA==", 1020 + "dev": true, 1021 + "license": "MIT", 1022 + "dependencies": { 1023 + "debug": "^4.4.1" 1024 + }, 1025 + "engines": { 1026 + "node": "^20.19 || ^22.12 || >=24" 1027 + }, 1028 + "peerDependencies": { 1029 + "@sveltejs/vite-plugin-svelte": "^6.0.0-next.0", 1030 + "svelte": "^5.0.0", 1031 + "vite": "^6.3.0 || ^7.0.0" 1032 + } 1033 + }, 1034 + "node_modules/@tsconfig/svelte": { 1035 + "version": "5.0.6", 1036 + "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-5.0.6.tgz", 1037 + "integrity": "sha512-yGxYL0I9eETH1/DR9qVJey4DAsCdeau4a9wYPKuXfEhm8lFO8wg+LLYJjIpAm6Fw7HSlhepPhYPDop75485yWQ==", 1038 + "dev": true, 1039 + "license": "MIT" 1040 + }, 1041 + "node_modules/@tybys/wasm-util": { 1042 + "version": "0.10.1", 1043 + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", 1044 + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", 1045 + "dev": true, 1046 + "license": "MIT", 1047 + "optional": true, 1048 + "dependencies": { 1049 + "tslib": "^2.4.0" 1050 + } 1051 + }, 1052 + "node_modules/@types/argparse": { 1053 + "version": "1.0.38", 1054 + "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", 1055 + "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", 1056 + "dev": true, 1057 + "license": "MIT" 1058 + }, 1059 + "node_modules/@types/estree": { 1060 + "version": "1.0.8", 1061 + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", 1062 + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", 1063 + "dev": true, 1064 + "license": "MIT" 1065 + }, 1066 + "node_modules/@types/node": { 1067 + "version": "24.10.1", 1068 + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", 1069 + "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", 1070 + "dev": true, 1071 + "license": "MIT", 1072 + "peer": true, 1073 + "dependencies": { 1074 + "undici-types": "~7.16.0" 1075 + } 1076 + }, 1077 + "node_modules/@volar/language-core": { 1078 + "version": "2.4.26", 1079 + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.26.tgz", 1080 + "integrity": "sha512-hH0SMitMxnB43OZpyF1IFPS9bgb2I3bpCh76m2WEK7BE0A0EzpYsRp0CCH2xNKshr7kacU5TQBLYn4zj7CG60A==", 1081 + "dev": true, 1082 + "license": "MIT", 1083 + "dependencies": { 1084 + "@volar/source-map": "2.4.26" 1085 + } 1086 + }, 1087 + "node_modules/@volar/source-map": { 1088 + "version": "2.4.26", 1089 + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.26.tgz", 1090 + "integrity": "sha512-JJw0Tt/kSFsIRmgTQF4JSt81AUSI1aEye5Zl65EeZ8H35JHnTvFGmpDOBn5iOxd48fyGE+ZvZBp5FcgAy/1Qhw==", 1091 + "dev": true, 1092 + "license": "MIT" 1093 + }, 1094 + "node_modules/@volar/typescript": { 1095 + "version": "2.4.26", 1096 + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.26.tgz", 1097 + "integrity": "sha512-N87ecLD48Sp6zV9zID/5yuS1+5foj0DfuYGdQ6KHj/IbKvyKv1zNX6VCmnKYwtmHadEO6mFc2EKISiu3RDPAvA==", 1098 + "dev": true, 1099 + "license": "MIT", 1100 + "dependencies": { 1101 + "@volar/language-core": "2.4.26", 1102 + "path-browserify": "^1.0.1", 1103 + "vscode-uri": "^3.0.8" 1104 + } 1105 + }, 1106 + "node_modules/@vue/compiler-core": { 1107 + "version": "3.5.25", 1108 + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.25.tgz", 1109 + "integrity": "sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw==", 1110 + "dev": true, 1111 + "license": "MIT", 1112 + "dependencies": { 1113 + "@babel/parser": "^7.28.5", 1114 + "@vue/shared": "3.5.25", 1115 + "entities": "^4.5.0", 1116 + "estree-walker": "^2.0.2", 1117 + "source-map-js": "^1.2.1" 1118 + } 1119 + }, 1120 + "node_modules/@vue/compiler-dom": { 1121 + "version": "3.5.25", 1122 + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.25.tgz", 1123 + "integrity": "sha512-4We0OAcMZsKgYoGlMjzYvaoErltdFI2/25wqanuTu+S4gismOTRTBPi4IASOjxWdzIwrYSjnqONfKvuqkXzE2Q==", 1124 + "dev": true, 1125 + "license": "MIT", 1126 + "dependencies": { 1127 + "@vue/compiler-core": "3.5.25", 1128 + "@vue/shared": "3.5.25" 1129 + } 1130 + }, 1131 + "node_modules/@vue/compiler-vue2": { 1132 + "version": "2.7.16", 1133 + "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", 1134 + "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", 1135 + "dev": true, 1136 + "license": "MIT", 1137 + "dependencies": { 1138 + "de-indent": "^1.0.2", 1139 + "he": "^1.2.0" 1140 + } 1141 + }, 1142 + "node_modules/@vue/language-core": { 1143 + "version": "2.2.0", 1144 + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.0.tgz", 1145 + "integrity": "sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==", 1146 + "dev": true, 1147 + "license": "MIT", 1148 + "dependencies": { 1149 + "@volar/language-core": "~2.4.11", 1150 + "@vue/compiler-dom": "^3.5.0", 1151 + "@vue/compiler-vue2": "^2.7.16", 1152 + "@vue/shared": "^3.5.0", 1153 + "alien-signals": "^0.4.9", 1154 + "minimatch": "^9.0.3", 1155 + "muggle-string": "^0.4.1", 1156 + "path-browserify": "^1.0.1" 1157 + }, 1158 + "peerDependencies": { 1159 + "typescript": "*" 1160 + }, 1161 + "peerDependenciesMeta": { 1162 + "typescript": { 1163 + "optional": true 1164 + } 1165 + } 1166 + }, 1167 + "node_modules/@vue/language-core/node_modules/minimatch": { 1168 + "version": "9.0.5", 1169 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 1170 + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 1171 + "dev": true, 1172 + "license": "ISC", 1173 + "dependencies": { 1174 + "brace-expansion": "^2.0.1" 1175 + }, 1176 + "engines": { 1177 + "node": ">=16 || 14 >=14.17" 1178 + }, 1179 + "funding": { 1180 + "url": "https://github.com/sponsors/isaacs" 1181 + } 1182 + }, 1183 + "node_modules/@vue/shared": { 1184 + "version": "3.5.25", 1185 + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.25.tgz", 1186 + "integrity": "sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg==", 1187 + "dev": true, 1188 + "license": "MIT" 1189 + }, 1190 + "node_modules/acorn": { 1191 + "version": "8.15.0", 1192 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", 1193 + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", 1194 + "dev": true, 1195 + "license": "MIT", 1196 + "peer": true, 1197 + "bin": { 1198 + "acorn": "bin/acorn" 1199 + }, 1200 + "engines": { 1201 + "node": ">=0.4.0" 1202 + } 1203 + }, 1204 + "node_modules/actor-typeahead": { 1205 + "version": "0.1.2", 1206 + "resolved": "https://registry.npmjs.org/actor-typeahead/-/actor-typeahead-0.1.2.tgz", 1207 + "integrity": "sha512-I97YqqNl7Kar0J/bIJvgY/KmHpssHcDElhfwVTLP7wRFlkxso2ZLBqiS2zol5A8UVUJbQK2JXYaqNpZXz8Uk2A==", 1208 + "license": "MPL-2.0" 1209 + }, 1210 + "node_modules/ajv": { 1211 + "version": "8.12.0", 1212 + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", 1213 + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", 1214 + "dev": true, 1215 + "license": "MIT", 1216 + "dependencies": { 1217 + "fast-deep-equal": "^3.1.1", 1218 + "json-schema-traverse": "^1.0.0", 1219 + "require-from-string": "^2.0.2", 1220 + "uri-js": "^4.2.2" 1221 + }, 1222 + "funding": { 1223 + "type": "github", 1224 + "url": "https://github.com/sponsors/epoberezkin" 1225 + } 1226 + }, 1227 + "node_modules/ajv-draft-04": { 1228 + "version": "1.0.0", 1229 + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", 1230 + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", 1231 + "dev": true, 1232 + "license": "MIT", 1233 + "peerDependencies": { 1234 + "ajv": "^8.5.0" 1235 + }, 1236 + "peerDependenciesMeta": { 1237 + "ajv": { 1238 + "optional": true 1239 + } 1240 + } 1241 + }, 1242 + "node_modules/ajv-formats": { 1243 + "version": "3.0.1", 1244 + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", 1245 + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", 1246 + "dev": true, 1247 + "license": "MIT", 1248 + "dependencies": { 1249 + "ajv": "^8.0.0" 1250 + }, 1251 + "peerDependencies": { 1252 + "ajv": "^8.0.0" 1253 + }, 1254 + "peerDependenciesMeta": { 1255 + "ajv": { 1256 + "optional": true 1257 + } 1258 + } 1259 + }, 1260 + "node_modules/alien-signals": { 1261 + "version": "0.4.14", 1262 + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-0.4.14.tgz", 1263 + "integrity": "sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==", 1264 + "dev": true, 1265 + "license": "MIT" 1266 + }, 1267 + "node_modules/argparse": { 1268 + "version": "1.0.10", 1269 + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 1270 + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 1271 + "dev": true, 1272 + "license": "MIT", 1273 + "dependencies": { 1274 + "sprintf-js": "~1.0.2" 1275 + } 1276 + }, 1277 + "node_modules/aria-query": { 1278 + "version": "5.3.2", 1279 + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", 1280 + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", 1281 + "dev": true, 1282 + "license": "Apache-2.0", 1283 + "engines": { 1284 + "node": ">= 0.4" 1285 + } 1286 + }, 1287 + "node_modules/axobject-query": { 1288 + "version": "4.1.0", 1289 + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", 1290 + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", 1291 + "dev": true, 1292 + "license": "Apache-2.0", 1293 + "engines": { 1294 + "node": ">= 0.4" 1295 + } 1296 + }, 1297 + "node_modules/balanced-match": { 1298 + "version": "1.0.2", 1299 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1300 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1301 + "dev": true, 1302 + "license": "MIT" 1303 + }, 1304 + "node_modules/brace-expansion": { 1305 + "version": "2.0.2", 1306 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", 1307 + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", 1308 + "dev": true, 1309 + "license": "MIT", 1310 + "dependencies": { 1311 + "balanced-match": "^1.0.0" 1312 + } 1313 + }, 1314 + "node_modules/chokidar": { 1315 + "version": "4.0.3", 1316 + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", 1317 + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", 1318 + "dev": true, 1319 + "license": "MIT", 1320 + "dependencies": { 1321 + "readdirp": "^4.0.1" 1322 + }, 1323 + "engines": { 1324 + "node": ">= 14.16.0" 1325 + }, 1326 + "funding": { 1327 + "url": "https://paulmillr.com/funding/" 1328 + } 1329 + }, 1330 + "node_modules/clsx": { 1331 + "version": "2.1.1", 1332 + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", 1333 + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", 1334 + "dev": true, 1335 + "license": "MIT", 1336 + "engines": { 1337 + "node": ">=6" 1338 + } 1339 + }, 1340 + "node_modules/compare-versions": { 1341 + "version": "6.1.1", 1342 + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", 1343 + "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", 1344 + "dev": true, 1345 + "license": "MIT" 1346 + }, 1347 + "node_modules/confbox": { 1348 + "version": "0.2.2", 1349 + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", 1350 + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", 1351 + "dev": true, 1352 + "license": "MIT" 1353 + }, 1354 + "node_modules/de-indent": { 1355 + "version": "1.0.2", 1356 + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", 1357 + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", 1358 + "dev": true, 1359 + "license": "MIT" 1360 + }, 1361 + "node_modules/debug": { 1362 + "version": "4.4.3", 1363 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", 1364 + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", 1365 + "dev": true, 1366 + "license": "MIT", 1367 + "dependencies": { 1368 + "ms": "^2.1.3" 1369 + }, 1370 + "engines": { 1371 + "node": ">=6.0" 1372 + }, 1373 + "peerDependenciesMeta": { 1374 + "supports-color": { 1375 + "optional": true 1376 + } 1377 + } 1378 + }, 1379 + "node_modules/deepmerge": { 1380 + "version": "4.3.1", 1381 + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", 1382 + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", 1383 + "dev": true, 1384 + "license": "MIT", 1385 + "engines": { 1386 + "node": ">=0.10.0" 1387 + } 1388 + }, 1389 + "node_modules/detect-libc": { 1390 + "version": "2.1.2", 1391 + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", 1392 + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", 1393 + "dev": true, 1394 + "license": "Apache-2.0", 1395 + "engines": { 1396 + "node": ">=8" 1397 + } 1398 + }, 1399 + "node_modules/devalue": { 1400 + "version": "5.5.0", 1401 + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.5.0.tgz", 1402 + "integrity": "sha512-69sM5yrHfFLJt0AZ9QqZXGCPfJ7fQjvpln3Rq5+PS03LD32Ost1Q9N+eEnaQwGRIriKkMImXD56ocjQmfjbV3w==", 1403 + "dev": true, 1404 + "license": "MIT" 1405 + }, 1406 + "node_modules/diff": { 1407 + "version": "8.0.2", 1408 + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.2.tgz", 1409 + "integrity": "sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==", 1410 + "dev": true, 1411 + "license": "BSD-3-Clause", 1412 + "engines": { 1413 + "node": ">=0.3.1" 1414 + } 1415 + }, 1416 + "node_modules/entities": { 1417 + "version": "4.5.0", 1418 + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", 1419 + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", 1420 + "dev": true, 1421 + "license": "BSD-2-Clause", 1422 + "engines": { 1423 + "node": ">=0.12" 1424 + }, 1425 + "funding": { 1426 + "url": "https://github.com/fb55/entities?sponsor=1" 1427 + } 1428 + }, 1429 + "node_modules/esm-env": { 1430 + "version": "1.2.2", 1431 + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", 1432 + "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", 1433 + "dev": true, 1434 + "license": "MIT" 1435 + }, 1436 + "node_modules/esrap": { 1437 + "version": "2.2.0", 1438 + "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.0.tgz", 1439 + "integrity": "sha512-WBmtxe7R9C5mvL4n2le8nMUe4mD5V9oiK2vJpQ9I3y20ENPUomPcphBXE8D1x/Bm84oN1V+lOfgXxtqmxTp3Xg==", 1440 + "dev": true, 1441 + "license": "MIT", 1442 + "dependencies": { 1443 + "@jridgewell/sourcemap-codec": "^1.4.15" 1444 + } 1445 + }, 1446 + "node_modules/estree-walker": { 1447 + "version": "2.0.2", 1448 + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 1449 + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 1450 + "dev": true, 1451 + "license": "MIT" 1452 + }, 1453 + "node_modules/exsolve": { 1454 + "version": "1.0.8", 1455 + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", 1456 + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", 1457 + "dev": true, 1458 + "license": "MIT" 1459 + }, 1460 + "node_modules/fast-deep-equal": { 1461 + "version": "3.1.3", 1462 + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1463 + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1464 + "dev": true, 1465 + "license": "MIT" 1466 + }, 1467 + "node_modules/fdir": { 1468 + "version": "6.5.0", 1469 + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", 1470 + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", 1471 + "dev": true, 1472 + "license": "MIT", 1473 + "engines": { 1474 + "node": ">=12.0.0" 1475 + }, 1476 + "peerDependencies": { 1477 + "picomatch": "^3 || ^4" 1478 + }, 1479 + "peerDependenciesMeta": { 1480 + "picomatch": { 1481 + "optional": true 1482 + } 1483 + } 1484 + }, 1485 + "node_modules/fs-extra": { 1486 + "version": "11.3.2", 1487 + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", 1488 + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", 1489 + "dev": true, 1490 + "license": "MIT", 1491 + "dependencies": { 1492 + "graceful-fs": "^4.2.0", 1493 + "jsonfile": "^6.0.1", 1494 + "universalify": "^2.0.0" 1495 + }, 1496 + "engines": { 1497 + "node": ">=14.14" 1498 + } 1499 + }, 1500 + "node_modules/fsevents": { 1501 + "version": "2.3.3", 1502 + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1503 + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1504 + "dev": true, 1505 + "hasInstallScript": true, 1506 + "license": "MIT", 1507 + "optional": true, 1508 + "os": [ 1509 + "darwin" 1510 + ], 1511 + "engines": { 1512 + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1513 + } 1514 + }, 1515 + "node_modules/function-bind": { 1516 + "version": "1.1.2", 1517 + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 1518 + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 1519 + "dev": true, 1520 + "license": "MIT", 1521 + "funding": { 1522 + "url": "https://github.com/sponsors/ljharb" 1523 + } 1524 + }, 1525 + "node_modules/graceful-fs": { 1526 + "version": "4.2.11", 1527 + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 1528 + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 1529 + "dev": true, 1530 + "license": "ISC" 1531 + }, 1532 + "node_modules/has-flag": { 1533 + "version": "4.0.0", 1534 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1535 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1536 + "dev": true, 1537 + "license": "MIT", 1538 + "engines": { 1539 + "node": ">=8" 1540 + } 1541 + }, 1542 + "node_modules/hasown": { 1543 + "version": "2.0.2", 1544 + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 1545 + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 1546 + "dev": true, 1547 + "license": "MIT", 1548 + "dependencies": { 1549 + "function-bind": "^1.1.2" 1550 + }, 1551 + "engines": { 1552 + "node": ">= 0.4" 1553 + } 1554 + }, 1555 + "node_modules/he": { 1556 + "version": "1.2.0", 1557 + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 1558 + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 1559 + "dev": true, 1560 + "license": "MIT", 1561 + "bin": { 1562 + "he": "bin/he" 1563 + } 1564 + }, 1565 + "node_modules/import-lazy": { 1566 + "version": "4.0.0", 1567 + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", 1568 + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", 1569 + "dev": true, 1570 + "license": "MIT", 1571 + "engines": { 1572 + "node": ">=8" 1573 + } 1574 + }, 1575 + "node_modules/is-core-module": { 1576 + "version": "2.16.1", 1577 + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", 1578 + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", 1579 + "dev": true, 1580 + "license": "MIT", 1581 + "dependencies": { 1582 + "hasown": "^2.0.2" 1583 + }, 1584 + "engines": { 1585 + "node": ">= 0.4" 1586 + }, 1587 + "funding": { 1588 + "url": "https://github.com/sponsors/ljharb" 1589 + } 1590 + }, 1591 + "node_modules/is-reference": { 1592 + "version": "3.0.3", 1593 + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", 1594 + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", 1595 + "dev": true, 1596 + "license": "MIT", 1597 + "dependencies": { 1598 + "@types/estree": "^1.0.6" 1599 + } 1600 + }, 1601 + "node_modules/jju": { 1602 + "version": "1.4.0", 1603 + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", 1604 + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", 1605 + "dev": true, 1606 + "license": "MIT" 1607 + }, 1608 + "node_modules/json-schema-traverse": { 1609 + "version": "1.0.0", 1610 + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 1611 + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 1612 + "dev": true, 1613 + "license": "MIT" 1614 + }, 1615 + "node_modules/jsonfile": { 1616 + "version": "6.2.0", 1617 + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", 1618 + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", 1619 + "dev": true, 1620 + "license": "MIT", 1621 + "dependencies": { 1622 + "universalify": "^2.0.0" 1623 + }, 1624 + "optionalDependencies": { 1625 + "graceful-fs": "^4.1.6" 1626 + } 1627 + }, 1628 + "node_modules/kolorist": { 1629 + "version": "1.8.0", 1630 + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", 1631 + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", 1632 + "dev": true, 1633 + "license": "MIT" 1634 + }, 1635 + "node_modules/lightningcss": { 1636 + "version": "1.30.2", 1637 + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", 1638 + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", 1639 + "dev": true, 1640 + "license": "MPL-2.0", 1641 + "dependencies": { 1642 + "detect-libc": "^2.0.3" 1643 + }, 1644 + "engines": { 1645 + "node": ">= 12.0.0" 1646 + }, 1647 + "funding": { 1648 + "type": "opencollective", 1649 + "url": "https://opencollective.com/parcel" 1650 + }, 1651 + "optionalDependencies": { 1652 + "lightningcss-android-arm64": "1.30.2", 1653 + "lightningcss-darwin-arm64": "1.30.2", 1654 + "lightningcss-darwin-x64": "1.30.2", 1655 + "lightningcss-freebsd-x64": "1.30.2", 1656 + "lightningcss-linux-arm-gnueabihf": "1.30.2", 1657 + "lightningcss-linux-arm64-gnu": "1.30.2", 1658 + "lightningcss-linux-arm64-musl": "1.30.2", 1659 + "lightningcss-linux-x64-gnu": "1.30.2", 1660 + "lightningcss-linux-x64-musl": "1.30.2", 1661 + "lightningcss-win32-arm64-msvc": "1.30.2", 1662 + "lightningcss-win32-x64-msvc": "1.30.2" 1663 + } 1664 + }, 1665 + "node_modules/lightningcss-android-arm64": { 1666 + "version": "1.30.2", 1667 + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", 1668 + "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", 1669 + "cpu": [ 1670 + "arm64" 1671 + ], 1672 + "dev": true, 1673 + "license": "MPL-2.0", 1674 + "optional": true, 1675 + "os": [ 1676 + "android" 1677 + ], 1678 + "engines": { 1679 + "node": ">= 12.0.0" 1680 + }, 1681 + "funding": { 1682 + "type": "opencollective", 1683 + "url": "https://opencollective.com/parcel" 1684 + } 1685 + }, 1686 + "node_modules/lightningcss-darwin-arm64": { 1687 + "version": "1.30.2", 1688 + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", 1689 + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", 1690 + "cpu": [ 1691 + "arm64" 1692 + ], 1693 + "dev": true, 1694 + "license": "MPL-2.0", 1695 + "optional": true, 1696 + "os": [ 1697 + "darwin" 1698 + ], 1699 + "engines": { 1700 + "node": ">= 12.0.0" 1701 + }, 1702 + "funding": { 1703 + "type": "opencollective", 1704 + "url": "https://opencollective.com/parcel" 1705 + } 1706 + }, 1707 + "node_modules/lightningcss-darwin-x64": { 1708 + "version": "1.30.2", 1709 + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", 1710 + "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", 1711 + "cpu": [ 1712 + "x64" 1713 + ], 1714 + "dev": true, 1715 + "license": "MPL-2.0", 1716 + "optional": true, 1717 + "os": [ 1718 + "darwin" 1719 + ], 1720 + "engines": { 1721 + "node": ">= 12.0.0" 1722 + }, 1723 + "funding": { 1724 + "type": "opencollective", 1725 + "url": "https://opencollective.com/parcel" 1726 + } 1727 + }, 1728 + "node_modules/lightningcss-freebsd-x64": { 1729 + "version": "1.30.2", 1730 + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", 1731 + "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", 1732 + "cpu": [ 1733 + "x64" 1734 + ], 1735 + "dev": true, 1736 + "license": "MPL-2.0", 1737 + "optional": true, 1738 + "os": [ 1739 + "freebsd" 1740 + ], 1741 + "engines": { 1742 + "node": ">= 12.0.0" 1743 + }, 1744 + "funding": { 1745 + "type": "opencollective", 1746 + "url": "https://opencollective.com/parcel" 1747 + } 1748 + }, 1749 + "node_modules/lightningcss-linux-arm-gnueabihf": { 1750 + "version": "1.30.2", 1751 + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", 1752 + "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", 1753 + "cpu": [ 1754 + "arm" 1755 + ], 1756 + "dev": true, 1757 + "license": "MPL-2.0", 1758 + "optional": true, 1759 + "os": [ 1760 + "linux" 1761 + ], 1762 + "engines": { 1763 + "node": ">= 12.0.0" 1764 + }, 1765 + "funding": { 1766 + "type": "opencollective", 1767 + "url": "https://opencollective.com/parcel" 1768 + } 1769 + }, 1770 + "node_modules/lightningcss-linux-arm64-gnu": { 1771 + "version": "1.30.2", 1772 + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", 1773 + "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", 1774 + "cpu": [ 1775 + "arm64" 1776 + ], 1777 + "dev": true, 1778 + "license": "MPL-2.0", 1779 + "optional": true, 1780 + "os": [ 1781 + "linux" 1782 + ], 1783 + "engines": { 1784 + "node": ">= 12.0.0" 1785 + }, 1786 + "funding": { 1787 + "type": "opencollective", 1788 + "url": "https://opencollective.com/parcel" 1789 + } 1790 + }, 1791 + "node_modules/lightningcss-linux-arm64-musl": { 1792 + "version": "1.30.2", 1793 + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", 1794 + "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", 1795 + "cpu": [ 1796 + "arm64" 1797 + ], 1798 + "dev": true, 1799 + "license": "MPL-2.0", 1800 + "optional": true, 1801 + "os": [ 1802 + "linux" 1803 + ], 1804 + "engines": { 1805 + "node": ">= 12.0.0" 1806 + }, 1807 + "funding": { 1808 + "type": "opencollective", 1809 + "url": "https://opencollective.com/parcel" 1810 + } 1811 + }, 1812 + "node_modules/lightningcss-linux-x64-gnu": { 1813 + "version": "1.30.2", 1814 + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", 1815 + "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", 1816 + "cpu": [ 1817 + "x64" 1818 + ], 1819 + "dev": true, 1820 + "license": "MPL-2.0", 1821 + "optional": true, 1822 + "os": [ 1823 + "linux" 1824 + ], 1825 + "engines": { 1826 + "node": ">= 12.0.0" 1827 + }, 1828 + "funding": { 1829 + "type": "opencollective", 1830 + "url": "https://opencollective.com/parcel" 1831 + } 1832 + }, 1833 + "node_modules/lightningcss-linux-x64-musl": { 1834 + "version": "1.30.2", 1835 + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", 1836 + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", 1837 + "cpu": [ 1838 + "x64" 1839 + ], 1840 + "dev": true, 1841 + "license": "MPL-2.0", 1842 + "optional": true, 1843 + "os": [ 1844 + "linux" 1845 + ], 1846 + "engines": { 1847 + "node": ">= 12.0.0" 1848 + }, 1849 + "funding": { 1850 + "type": "opencollective", 1851 + "url": "https://opencollective.com/parcel" 1852 + } 1853 + }, 1854 + "node_modules/lightningcss-win32-arm64-msvc": { 1855 + "version": "1.30.2", 1856 + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", 1857 + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", 1858 + "cpu": [ 1859 + "arm64" 1860 + ], 1861 + "dev": true, 1862 + "license": "MPL-2.0", 1863 + "optional": true, 1864 + "os": [ 1865 + "win32" 1866 + ], 1867 + "engines": { 1868 + "node": ">= 12.0.0" 1869 + }, 1870 + "funding": { 1871 + "type": "opencollective", 1872 + "url": "https://opencollective.com/parcel" 1873 + } 1874 + }, 1875 + "node_modules/lightningcss-win32-x64-msvc": { 1876 + "version": "1.30.2", 1877 + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", 1878 + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", 1879 + "cpu": [ 1880 + "x64" 1881 + ], 1882 + "dev": true, 1883 + "license": "MPL-2.0", 1884 + "optional": true, 1885 + "os": [ 1886 + "win32" 1887 + ], 1888 + "engines": { 1889 + "node": ">= 12.0.0" 1890 + }, 1891 + "funding": { 1892 + "type": "opencollective", 1893 + "url": "https://opencollective.com/parcel" 1894 + } 1895 + }, 1896 + "node_modules/local-pkg": { 1897 + "version": "1.1.2", 1898 + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.2.tgz", 1899 + "integrity": "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==", 1900 + "dev": true, 1901 + "license": "MIT", 1902 + "dependencies": { 1903 + "mlly": "^1.7.4", 1904 + "pkg-types": "^2.3.0", 1905 + "quansync": "^0.2.11" 1906 + }, 1907 + "engines": { 1908 + "node": ">=14" 1909 + }, 1910 + "funding": { 1911 + "url": "https://github.com/sponsors/antfu" 1912 + } 1913 + }, 1914 + "node_modules/locate-character": { 1915 + "version": "3.0.0", 1916 + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", 1917 + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", 1918 + "dev": true, 1919 + "license": "MIT" 1920 + }, 1921 + "node_modules/lodash": { 1922 + "version": "4.17.21", 1923 + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1924 + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 1925 + "dev": true, 1926 + "license": "MIT" 1927 + }, 1928 + "node_modules/lru-cache": { 1929 + "version": "6.0.0", 1930 + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1931 + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1932 + "dev": true, 1933 + "license": "ISC", 1934 + "dependencies": { 1935 + "yallist": "^4.0.0" 1936 + }, 1937 + "engines": { 1938 + "node": ">=10" 1939 + } 1940 + }, 1941 + "node_modules/magic-string": { 1942 + "version": "0.30.21", 1943 + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", 1944 + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", 1945 + "dev": true, 1946 + "license": "MIT", 1947 + "dependencies": { 1948 + "@jridgewell/sourcemap-codec": "^1.5.5" 1949 + } 1950 + }, 1951 + "node_modules/minimatch": { 1952 + "version": "10.0.3", 1953 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", 1954 + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", 1955 + "dev": true, 1956 + "license": "ISC", 1957 + "dependencies": { 1958 + "@isaacs/brace-expansion": "^5.0.0" 1959 + }, 1960 + "engines": { 1961 + "node": "20 || >=22" 1962 + }, 1963 + "funding": { 1964 + "url": "https://github.com/sponsors/isaacs" 1965 + } 1966 + }, 1967 + "node_modules/mlly": { 1968 + "version": "1.8.0", 1969 + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz", 1970 + "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", 1971 + "dev": true, 1972 + "license": "MIT", 1973 + "dependencies": { 1974 + "acorn": "^8.15.0", 1975 + "pathe": "^2.0.3", 1976 + "pkg-types": "^1.3.1", 1977 + "ufo": "^1.6.1" 1978 + } 1979 + }, 1980 + "node_modules/mlly/node_modules/confbox": { 1981 + "version": "0.1.8", 1982 + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", 1983 + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", 1984 + "dev": true, 1985 + "license": "MIT" 1986 + }, 1987 + "node_modules/mlly/node_modules/pkg-types": { 1988 + "version": "1.3.1", 1989 + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", 1990 + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", 1991 + "dev": true, 1992 + "license": "MIT", 1993 + "dependencies": { 1994 + "confbox": "^0.1.8", 1995 + "mlly": "^1.7.4", 1996 + "pathe": "^2.0.1" 1997 + } 1998 + }, 1999 + "node_modules/mri": { 2000 + "version": "1.2.0", 2001 + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", 2002 + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", 2003 + "dev": true, 2004 + "license": "MIT", 2005 + "engines": { 2006 + "node": ">=4" 2007 + } 2008 + }, 2009 + "node_modules/ms": { 2010 + "version": "2.1.3", 2011 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2012 + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 2013 + "dev": true, 2014 + "license": "MIT" 2015 + }, 2016 + "node_modules/muggle-string": { 2017 + "version": "0.4.1", 2018 + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", 2019 + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", 2020 + "dev": true, 2021 + "license": "MIT" 2022 + }, 2023 + "node_modules/nanoid": { 2024 + "version": "3.3.11", 2025 + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", 2026 + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 2027 + "dev": true, 2028 + "funding": [ 2029 + { 2030 + "type": "github", 2031 + "url": "https://github.com/sponsors/ai" 2032 + } 2033 + ], 2034 + "license": "MIT", 2035 + "bin": { 2036 + "nanoid": "bin/nanoid.cjs" 2037 + }, 2038 + "engines": { 2039 + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 2040 + } 2041 + }, 2042 + "node_modules/path-browserify": { 2043 + "version": "1.0.1", 2044 + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", 2045 + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", 2046 + "dev": true, 2047 + "license": "MIT" 2048 + }, 2049 + "node_modules/path-parse": { 2050 + "version": "1.0.7", 2051 + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 2052 + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 2053 + "dev": true, 2054 + "license": "MIT" 2055 + }, 2056 + "node_modules/pathe": { 2057 + "version": "2.0.3", 2058 + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", 2059 + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", 2060 + "dev": true, 2061 + "license": "MIT" 2062 + }, 2063 + "node_modules/picocolors": { 2064 + "version": "1.1.1", 2065 + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 2066 + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 2067 + "dev": true, 2068 + "license": "ISC" 2069 + }, 2070 + "node_modules/picomatch": { 2071 + "version": "4.0.3", 2072 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", 2073 + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", 2074 + "dev": true, 2075 + "license": "MIT", 2076 + "peer": true, 2077 + "engines": { 2078 + "node": ">=12" 2079 + }, 2080 + "funding": { 2081 + "url": "https://github.com/sponsors/jonschlinkert" 2082 + } 2083 + }, 2084 + "node_modules/pkg-types": { 2085 + "version": "2.3.0", 2086 + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", 2087 + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", 2088 + "dev": true, 2089 + "license": "MIT", 2090 + "dependencies": { 2091 + "confbox": "^0.2.2", 2092 + "exsolve": "^1.0.7", 2093 + "pathe": "^2.0.3" 2094 + } 2095 + }, 2096 + "node_modules/postcss": { 2097 + "version": "8.5.6", 2098 + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", 2099 + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", 2100 + "dev": true, 2101 + "funding": [ 2102 + { 2103 + "type": "opencollective", 2104 + "url": "https://opencollective.com/postcss/" 2105 + }, 2106 + { 2107 + "type": "tidelift", 2108 + "url": "https://tidelift.com/funding/github/npm/postcss" 2109 + }, 2110 + { 2111 + "type": "github", 2112 + "url": "https://github.com/sponsors/ai" 2113 + } 2114 + ], 2115 + "license": "MIT", 2116 + "dependencies": { 2117 + "nanoid": "^3.3.11", 2118 + "picocolors": "^1.1.1", 2119 + "source-map-js": "^1.2.1" 2120 + }, 2121 + "engines": { 2122 + "node": "^10 || ^12 || >=14" 2123 + } 2124 + }, 2125 + "node_modules/prettier": { 2126 + "version": "3.7.1", 2127 + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.1.tgz", 2128 + "integrity": "sha512-RWKXE4qB3u5Z6yz7omJkjWwmTfLdcbv44jUVHC5NpfXwFGzvpQM798FGv/6WNK879tc+Cn0AAyherCl1KjbyZQ==", 2129 + "dev": true, 2130 + "license": "MIT", 2131 + "bin": { 2132 + "prettier": "bin/prettier.cjs" 2133 + }, 2134 + "engines": { 2135 + "node": ">=14" 2136 + }, 2137 + "funding": { 2138 + "url": "https://github.com/prettier/prettier?sponsor=1" 2139 + } 2140 + }, 2141 + "node_modules/punycode": { 2142 + "version": "2.3.1", 2143 + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 2144 + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 2145 + "dev": true, 2146 + "license": "MIT", 2147 + "engines": { 2148 + "node": ">=6" 2149 + } 2150 + }, 2151 + "node_modules/quansync": { 2152 + "version": "0.2.11", 2153 + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", 2154 + "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", 2155 + "dev": true, 2156 + "funding": [ 2157 + { 2158 + "type": "individual", 2159 + "url": "https://github.com/sponsors/antfu" 2160 + }, 2161 + { 2162 + "type": "individual", 2163 + "url": "https://github.com/sponsors/sxzz" 2164 + } 2165 + ], 2166 + "license": "MIT" 2167 + }, 2168 + "node_modules/readdirp": { 2169 + "version": "4.1.2", 2170 + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", 2171 + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", 2172 + "dev": true, 2173 + "license": "MIT", 2174 + "engines": { 2175 + "node": ">= 14.18.0" 2176 + }, 2177 + "funding": { 2178 + "type": "individual", 2179 + "url": "https://paulmillr.com/funding/" 2180 + } 2181 + }, 2182 + "node_modules/require-from-string": { 2183 + "version": "2.0.2", 2184 + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 2185 + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 2186 + "dev": true, 2187 + "license": "MIT", 2188 + "engines": { 2189 + "node": ">=0.10.0" 2190 + } 2191 + }, 2192 + "node_modules/resolve": { 2193 + "version": "1.22.11", 2194 + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", 2195 + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", 2196 + "dev": true, 2197 + "license": "MIT", 2198 + "dependencies": { 2199 + "is-core-module": "^2.16.1", 2200 + "path-parse": "^1.0.7", 2201 + "supports-preserve-symlinks-flag": "^1.0.0" 2202 + }, 2203 + "bin": { 2204 + "resolve": "bin/resolve" 2205 + }, 2206 + "engines": { 2207 + "node": ">= 0.4" 2208 + }, 2209 + "funding": { 2210 + "url": "https://github.com/sponsors/ljharb" 2211 + } 2212 + }, 2213 + "node_modules/rolldown": { 2214 + "version": "1.0.0-beta.50", 2215 + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-beta.50.tgz", 2216 + "integrity": "sha512-JFULvCNl/anKn99eKjOSEubi0lLmNqQDAjyEMME2T4CwezUDL0i6t1O9xZsu2OMehPnV2caNefWpGF+8TnzB6A==", 2217 + "dev": true, 2218 + "license": "MIT", 2219 + "dependencies": { 2220 + "@oxc-project/types": "=0.97.0", 2221 + "@rolldown/pluginutils": "1.0.0-beta.50" 2222 + }, 2223 + "bin": { 2224 + "rolldown": "bin/cli.mjs" 2225 + }, 2226 + "engines": { 2227 + "node": "^20.19.0 || >=22.12.0" 2228 + }, 2229 + "optionalDependencies": { 2230 + "@rolldown/binding-android-arm64": "1.0.0-beta.50", 2231 + "@rolldown/binding-darwin-arm64": "1.0.0-beta.50", 2232 + "@rolldown/binding-darwin-x64": "1.0.0-beta.50", 2233 + "@rolldown/binding-freebsd-x64": "1.0.0-beta.50", 2234 + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-beta.50", 2235 + "@rolldown/binding-linux-arm64-gnu": "1.0.0-beta.50", 2236 + "@rolldown/binding-linux-arm64-musl": "1.0.0-beta.50", 2237 + "@rolldown/binding-linux-x64-gnu": "1.0.0-beta.50", 2238 + "@rolldown/binding-linux-x64-musl": "1.0.0-beta.50", 2239 + "@rolldown/binding-openharmony-arm64": "1.0.0-beta.50", 2240 + "@rolldown/binding-wasm32-wasi": "1.0.0-beta.50", 2241 + "@rolldown/binding-win32-arm64-msvc": "1.0.0-beta.50", 2242 + "@rolldown/binding-win32-ia32-msvc": "1.0.0-beta.50", 2243 + "@rolldown/binding-win32-x64-msvc": "1.0.0-beta.50" 2244 + } 2245 + }, 2246 + "node_modules/sade": { 2247 + "version": "1.8.1", 2248 + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", 2249 + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", 2250 + "dev": true, 2251 + "license": "MIT", 2252 + "dependencies": { 2253 + "mri": "^1.1.0" 2254 + }, 2255 + "engines": { 2256 + "node": ">=6" 2257 + } 2258 + }, 2259 + "node_modules/semver": { 2260 + "version": "7.5.4", 2261 + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", 2262 + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", 2263 + "dev": true, 2264 + "license": "ISC", 2265 + "dependencies": { 2266 + "lru-cache": "^6.0.0" 2267 + }, 2268 + "bin": { 2269 + "semver": "bin/semver.js" 2270 + }, 2271 + "engines": { 2272 + "node": ">=10" 2273 + } 2274 + }, 2275 + "node_modules/source-map": { 2276 + "version": "0.6.1", 2277 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2278 + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2279 + "dev": true, 2280 + "license": "BSD-3-Clause", 2281 + "engines": { 2282 + "node": ">=0.10.0" 2283 + } 2284 + }, 2285 + "node_modules/source-map-js": { 2286 + "version": "1.2.1", 2287 + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 2288 + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 2289 + "dev": true, 2290 + "license": "BSD-3-Clause", 2291 + "engines": { 2292 + "node": ">=0.10.0" 2293 + } 2294 + }, 2295 + "node_modules/sprintf-js": { 2296 + "version": "1.0.3", 2297 + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 2298 + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", 2299 + "dev": true, 2300 + "license": "BSD-3-Clause" 2301 + }, 2302 + "node_modules/string-argv": { 2303 + "version": "0.3.2", 2304 + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", 2305 + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", 2306 + "dev": true, 2307 + "license": "MIT", 2308 + "engines": { 2309 + "node": ">=0.6.19" 2310 + } 2311 + }, 2312 + "node_modules/strip-json-comments": { 2313 + "version": "3.1.1", 2314 + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 2315 + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 2316 + "dev": true, 2317 + "license": "MIT", 2318 + "engines": { 2319 + "node": ">=8" 2320 + }, 2321 + "funding": { 2322 + "url": "https://github.com/sponsors/sindresorhus" 2323 + } 2324 + }, 2325 + "node_modules/supports-color": { 2326 + "version": "8.1.1", 2327 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 2328 + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 2329 + "dev": true, 2330 + "license": "MIT", 2331 + "dependencies": { 2332 + "has-flag": "^4.0.0" 2333 + }, 2334 + "engines": { 2335 + "node": ">=10" 2336 + }, 2337 + "funding": { 2338 + "url": "https://github.com/chalk/supports-color?sponsor=1" 2339 + } 2340 + }, 2341 + "node_modules/supports-preserve-symlinks-flag": { 2342 + "version": "1.0.0", 2343 + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 2344 + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 2345 + "dev": true, 2346 + "license": "MIT", 2347 + "engines": { 2348 + "node": ">= 0.4" 2349 + }, 2350 + "funding": { 2351 + "url": "https://github.com/sponsors/ljharb" 2352 + } 2353 + }, 2354 + "node_modules/svelte": { 2355 + "version": "5.45.2", 2356 + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.45.2.tgz", 2357 + "integrity": "sha512-yyXdW2u3H0H/zxxWoGwJoQlRgaSJLp+Vhktv12iRw2WRDlKqUPT54Fi0K/PkXqrdkcQ98aBazpy0AH4BCBVfoA==", 2358 + "dev": true, 2359 + "license": "MIT", 2360 + "peer": true, 2361 + "dependencies": { 2362 + "@jridgewell/remapping": "^2.3.4", 2363 + "@jridgewell/sourcemap-codec": "^1.5.0", 2364 + "@sveltejs/acorn-typescript": "^1.0.5", 2365 + "@types/estree": "^1.0.5", 2366 + "acorn": "^8.12.1", 2367 + "aria-query": "^5.3.1", 2368 + "axobject-query": "^4.1.0", 2369 + "clsx": "^2.1.1", 2370 + "devalue": "^5.5.0", 2371 + "esm-env": "^1.2.1", 2372 + "esrap": "^2.2.0", 2373 + "is-reference": "^3.0.3", 2374 + "locate-character": "^3.0.0", 2375 + "magic-string": "^0.30.11", 2376 + "zimmerframe": "^1.1.2" 2377 + }, 2378 + "engines": { 2379 + "node": ">=18" 2380 + } 2381 + }, 2382 + "node_modules/svelte-check": { 2383 + "version": "4.3.4", 2384 + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.3.4.tgz", 2385 + "integrity": "sha512-DVWvxhBrDsd+0hHWKfjP99lsSXASeOhHJYyuKOFYJcP7ThfSCKgjVarE8XfuMWpS5JV3AlDf+iK1YGGo2TACdw==", 2386 + "dev": true, 2387 + "license": "MIT", 2388 + "dependencies": { 2389 + "@jridgewell/trace-mapping": "^0.3.25", 2390 + "chokidar": "^4.0.1", 2391 + "fdir": "^6.2.0", 2392 + "picocolors": "^1.0.0", 2393 + "sade": "^1.7.4" 2394 + }, 2395 + "bin": { 2396 + "svelte-check": "bin/svelte-check" 2397 + }, 2398 + "engines": { 2399 + "node": ">= 18.0.0" 2400 + }, 2401 + "peerDependencies": { 2402 + "svelte": "^4.0.0 || ^5.0.0-next.0", 2403 + "typescript": ">=5.0.0" 2404 + } 2405 + }, 2406 + "node_modules/tinyglobby": { 2407 + "version": "0.2.15", 2408 + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", 2409 + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", 2410 + "dev": true, 2411 + "license": "MIT", 2412 + "dependencies": { 2413 + "fdir": "^6.5.0", 2414 + "picomatch": "^4.0.3" 2415 + }, 2416 + "engines": { 2417 + "node": ">=12.0.0" 2418 + }, 2419 + "funding": { 2420 + "url": "https://github.com/sponsors/SuperchupuDev" 2421 + } 2422 + }, 2423 + "node_modules/tslib": { 2424 + "version": "2.8.1", 2425 + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", 2426 + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", 2427 + "dev": true, 2428 + "license": "0BSD", 2429 + "optional": true 2430 + }, 2431 + "node_modules/typescript": { 2432 + "version": "5.9.3", 2433 + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", 2434 + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", 2435 + "dev": true, 2436 + "license": "Apache-2.0", 2437 + "peer": true, 2438 + "bin": { 2439 + "tsc": "bin/tsc", 2440 + "tsserver": "bin/tsserver" 2441 + }, 2442 + "engines": { 2443 + "node": ">=14.17" 2444 + } 2445 + }, 2446 + "node_modules/ufo": { 2447 + "version": "1.6.1", 2448 + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", 2449 + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", 2450 + "dev": true, 2451 + "license": "MIT" 2452 + }, 2453 + "node_modules/undici-types": { 2454 + "version": "7.16.0", 2455 + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", 2456 + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", 2457 + "dev": true, 2458 + "license": "MIT" 2459 + }, 2460 + "node_modules/universalify": { 2461 + "version": "2.0.1", 2462 + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", 2463 + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", 2464 + "dev": true, 2465 + "license": "MIT", 2466 + "engines": { 2467 + "node": ">= 10.0.0" 2468 + } 2469 + }, 2470 + "node_modules/uri-js": { 2471 + "version": "4.4.1", 2472 + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 2473 + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 2474 + "dev": true, 2475 + "license": "BSD-2-Clause", 2476 + "dependencies": { 2477 + "punycode": "^2.1.0" 2478 + } 2479 + }, 2480 + "node_modules/vite": { 2481 + "name": "rolldown-vite", 2482 + "version": "7.2.5", 2483 + "resolved": "https://registry.npmjs.org/rolldown-vite/-/rolldown-vite-7.2.5.tgz", 2484 + "integrity": "sha512-u09tdk/huMiN8xwoiBbig197jKdCamQTtOruSalOzbqGje3jdHiV0njQlAW0YvzoahkirFePNQ4RYlfnRQpXZA==", 2485 + "dev": true, 2486 + "license": "MIT", 2487 + "peer": true, 2488 + "dependencies": { 2489 + "@oxc-project/runtime": "0.97.0", 2490 + "fdir": "^6.5.0", 2491 + "lightningcss": "^1.30.2", 2492 + "picomatch": "^4.0.3", 2493 + "postcss": "^8.5.6", 2494 + "rolldown": "1.0.0-beta.50", 2495 + "tinyglobby": "^0.2.15" 2496 + }, 2497 + "bin": { 2498 + "vite": "bin/vite.js" 2499 + }, 2500 + "engines": { 2501 + "node": "^20.19.0 || >=22.12.0" 2502 + }, 2503 + "funding": { 2504 + "url": "https://github.com/vitejs/vite?sponsor=1" 2505 + }, 2506 + "optionalDependencies": { 2507 + "fsevents": "~2.3.3" 2508 + }, 2509 + "peerDependencies": { 2510 + "@types/node": "^20.19.0 || >=22.12.0", 2511 + "esbuild": "^0.25.0", 2512 + "jiti": ">=1.21.0", 2513 + "less": "^4.0.0", 2514 + "sass": "^1.70.0", 2515 + "sass-embedded": "^1.70.0", 2516 + "stylus": ">=0.54.8", 2517 + "sugarss": "^5.0.0", 2518 + "terser": "^5.16.0", 2519 + "tsx": "^4.8.1", 2520 + "yaml": "^2.4.2" 2521 + }, 2522 + "peerDependenciesMeta": { 2523 + "@types/node": { 2524 + "optional": true 2525 + }, 2526 + "esbuild": { 2527 + "optional": true 2528 + }, 2529 + "jiti": { 2530 + "optional": true 2531 + }, 2532 + "less": { 2533 + "optional": true 2534 + }, 2535 + "sass": { 2536 + "optional": true 2537 + }, 2538 + "sass-embedded": { 2539 + "optional": true 2540 + }, 2541 + "stylus": { 2542 + "optional": true 2543 + }, 2544 + "sugarss": { 2545 + "optional": true 2546 + }, 2547 + "terser": { 2548 + "optional": true 2549 + }, 2550 + "tsx": { 2551 + "optional": true 2552 + }, 2553 + "yaml": { 2554 + "optional": true 2555 + } 2556 + } 2557 + }, 2558 + "node_modules/vite-plugin-dts": { 2559 + "version": "4.5.4", 2560 + "resolved": "https://registry.npmjs.org/vite-plugin-dts/-/vite-plugin-dts-4.5.4.tgz", 2561 + "integrity": "sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg==", 2562 + "dev": true, 2563 + "license": "MIT", 2564 + "dependencies": { 2565 + "@microsoft/api-extractor": "^7.50.1", 2566 + "@rollup/pluginutils": "^5.1.4", 2567 + "@volar/typescript": "^2.4.11", 2568 + "@vue/language-core": "2.2.0", 2569 + "compare-versions": "^6.1.1", 2570 + "debug": "^4.4.0", 2571 + "kolorist": "^1.8.0", 2572 + "local-pkg": "^1.0.0", 2573 + "magic-string": "^0.30.17" 2574 + }, 2575 + "peerDependencies": { 2576 + "typescript": "*", 2577 + "vite": "*" 2578 + }, 2579 + "peerDependenciesMeta": { 2580 + "vite": { 2581 + "optional": true 2582 + } 2583 + } 2584 + }, 2585 + "node_modules/vitefu": { 2586 + "version": "1.1.1", 2587 + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz", 2588 + "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", 2589 + "dev": true, 2590 + "license": "MIT", 2591 + "workspaces": [ 2592 + "tests/deps/*", 2593 + "tests/projects/*", 2594 + "tests/projects/workspace/packages/*" 2595 + ], 2596 + "peerDependencies": { 2597 + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" 2598 + }, 2599 + "peerDependenciesMeta": { 2600 + "vite": { 2601 + "optional": true 2602 + } 2603 + } 2604 + }, 2605 + "node_modules/vscode-uri": { 2606 + "version": "3.1.0", 2607 + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", 2608 + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", 2609 + "dev": true, 2610 + "license": "MIT" 2611 + }, 2612 + "node_modules/yallist": { 2613 + "version": "4.0.0", 2614 + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2615 + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 2616 + "dev": true, 2617 + "license": "ISC" 2618 + }, 2619 + "node_modules/zimmerframe": { 2620 + "version": "1.1.4", 2621 + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz", 2622 + "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==", 2623 + "dev": true, 2624 + "license": "MIT" 2625 + } 2626 + } 2627 + }
+55
package.json
··· 1 + { 2 + "name": "cutebook", 3 + "version": "0.1.0", 4 + "type": "module", 5 + "main": "./dist/index.js", 6 + "module": "./dist/index.js", 7 + "types": "./dist/index.d.ts", 8 + "exports": { 9 + ".": { 10 + "import": "./dist/index.js", 11 + "types": "./dist/index.d.ts" 12 + }, 13 + "./register": { 14 + "import": "./dist/register.js", 15 + "types": "./dist/register.d.ts" 16 + } 17 + }, 18 + "files": [ 19 + "dist" 20 + ], 21 + "scripts": { 22 + "dev": "cd demo && vite", 23 + "build": "vite build -c vite.config.lib.ts", 24 + "build:demo": "cd demo && vite build", 25 + "preview": "cd demo && vite preview", 26 + "check": "tsc -p tsconfig.lib.json" 27 + }, 28 + "peerDependencies": { 29 + "@atcute/client": "^4.0.0", 30 + "@atcute/identity-resolver": "^1.0.0", 31 + "@atcute/oauth-browser-client": "^2.0.0" 32 + }, 33 + "dependencies": { 34 + "actor-typeahead": "^0.1.2" 35 + }, 36 + "devDependencies": { 37 + "@atcute/atproto": "^3.1.9", 38 + "@atcute/client": "^4.1.0", 39 + "@atcute/identity-resolver": "^1.1.4", 40 + "@atcute/lex-cli": "^2.5.0", 41 + "@atcute/lexicon-doc": "^2.0.4", 42 + "@atcute/oauth-browser-client": "^2.0.1", 43 + "@sveltejs/vite-plugin-svelte": "^6.2.1", 44 + "@tsconfig/svelte": "^5.0.6", 45 + "@types/node": "^24.10.1", 46 + "svelte": "^5.43.8", 47 + "svelte-check": "^4.3.4", 48 + "typescript": "~5.9.3", 49 + "vite": "npm:rolldown-vite@7.2.5", 50 + "vite-plugin-dts": "^4.5.4" 51 + }, 52 + "overrides": { 53 + "vite": "npm:rolldown-vite@7.2.5" 54 + } 55 + }
+15
tsconfig.json
··· 1 + { 2 + "compilerOptions": { 3 + "target": "ES2020", 4 + "module": "ESNext", 5 + "lib": ["ES2020", "DOM", "DOM.Iterable"], 6 + "moduleResolution": "bundler", 7 + "strict": true, 8 + "noEmit": true, 9 + "isolatedModules": true, 10 + "esModuleInterop": true, 11 + "skipLibCheck": true, 12 + "declaration": true 13 + }, 14 + "include": ["lib/**/*.ts"] 15 + }
+17
tsconfig.lib.json
··· 1 + { 2 + "compilerOptions": { 3 + "target": "ES2020", 4 + "module": "ESNext", 5 + "lib": ["ES2020", "DOM", "DOM.Iterable"], 6 + "moduleResolution": "bundler", 7 + "strict": true, 8 + "noEmit": true, 9 + "isolatedModules": true, 10 + "esModuleInterop": true, 11 + "skipLibCheck": true, 12 + "declaration": true, 13 + "declarationMap": true 14 + }, 15 + "include": ["lib/**/*.ts"] 16 + } 17 +
+34
vite.config.lib.ts
··· 1 + import { defineConfig } from 'vite'; 2 + import { resolve } from 'path'; 3 + import dts from 'vite-plugin-dts'; 4 + 5 + export default defineConfig({ 6 + plugins: [ 7 + dts({ 8 + include: ['lib/**/*.ts'], 9 + outDir: 'dist', 10 + }), 11 + ], 12 + build: { 13 + lib: { 14 + entry: { 15 + index: resolve(__dirname, 'lib/index.ts'), 16 + register: resolve(__dirname, 'lib/register.ts'), 17 + }, 18 + formats: ['es'], 19 + }, 20 + rollupOptions: { 21 + external: [ 22 + '@atcute/client', 23 + '@atcute/atproto', 24 + '@atcute/oauth-browser-client', 25 + '@atcute/identity-resolver', 26 + '@atcute/lexicons', 27 + 'actor-typeahead', 28 + ], 29 + }, 30 + outDir: 'dist', 31 + emptyOutDir: true, 32 + }, 33 + }); 34 +