[READ-ONLY] Mirror of https://github.com/flo-bit/bluesky-home. flo-bit.dev/bluesky-home/
0

Configure Feed

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

commit

Florian (Apr 21, 2025, 7:05 PM +0200) 8e0b5ec0 6e0661f8

+5877 -36
+14 -1
astro.config.mjs
··· 1 1 // @ts-check 2 2 import { defineConfig } from 'astro/config'; 3 3 4 + import tailwindcss from '@tailwindcss/vite'; 5 + 6 + import svelte from '@astrojs/svelte'; 7 + 4 8 // https://astro.build/config 5 - export default defineConfig({}); 9 + export default defineConfig({ 10 + vite: { 11 + plugins: [tailwindcss()] 12 + }, 13 + 14 + integrations: [svelte()], 15 + 16 + site: "https://flo-bit.dev", 17 + base: "/bluesky-home", 18 + });
+4149 -11
package-lock.json
··· 8 8 "name": "bluesky-homepage", 9 9 "version": "0.0.1", 10 10 "dependencies": { 11 - "astro": "^5.7.4" 11 + "@ascorbic/bluesky-loader": "^0.0.3", 12 + "@astrojs/svelte": "^7.0.10", 13 + "@atcute/client": "^3.0.1", 14 + "@atproto/api": "^0.15.3", 15 + "@tailwindcss/vite": "^4.1.4", 16 + "astro": "^5.7.4", 17 + "fuchs": "^0.0.28", 18 + "marked": "^15.0.8", 19 + "simple-icons": "^14.12.3", 20 + "simple-icons-astro": "^14.12.3", 21 + "svelte": "^5.28.1", 22 + "tailwind-merge": "^3.2.0", 23 + "tailwindcss": "^4.1.4", 24 + "typescript": "^5.8.3" 25 + }, 26 + "devDependencies": { 27 + "@tailwindcss/typography": "^0.5.16" 28 + } 29 + }, 30 + "node_modules/@alloc/quick-lru": { 31 + "version": "5.2.0", 32 + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", 33 + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", 34 + "license": "MIT", 35 + "engines": { 36 + "node": ">=10" 37 + }, 38 + "funding": { 39 + "url": "https://github.com/sponsors/sindresorhus" 40 + } 41 + }, 42 + "node_modules/@ampproject/remapping": { 43 + "version": "2.3.0", 44 + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", 45 + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", 46 + "license": "Apache-2.0", 47 + "dependencies": { 48 + "@jridgewell/gen-mapping": "^0.3.5", 49 + "@jridgewell/trace-mapping": "^0.3.24" 50 + }, 51 + "engines": { 52 + "node": ">=6.0.0" 53 + } 54 + }, 55 + "node_modules/@ascorbic/bluesky-loader": { 56 + "version": "0.0.3", 57 + "resolved": "https://registry.npmjs.org/@ascorbic/bluesky-loader/-/bluesky-loader-0.0.3.tgz", 58 + "integrity": "sha512-jOO+BnjL5Bxw7ak3d88EsE29TeXrsyP/FFJEp8js3RKZ9EdgTxcEQPIcP6XMTQlkkmLfr4kNkUCnozEYpv69GQ==", 59 + "license": "MIT", 60 + "dependencies": { 61 + "@ascorbic/loader-utils": "^1.0.2", 62 + "@atproto/api": "^0.13.14" 63 + }, 64 + "peerDependencies": { 65 + "astro": "^4.14.0 || ^5.0.0-beta.0" 66 + } 67 + }, 68 + "node_modules/@ascorbic/bluesky-loader/node_modules/@atproto/api": { 69 + "version": "0.13.35", 70 + "resolved": "https://registry.npmjs.org/@atproto/api/-/api-0.13.35.tgz", 71 + "integrity": "sha512-vsEfBj0C333TLjDppvTdTE0IdKlXuljKSveAeI4PPx/l6eUKNnDTsYxvILtXUVzwUlTDmSRqy5O4Ryh78n1b7g==", 72 + "license": "MIT", 73 + "dependencies": { 74 + "@atproto/common-web": "^0.4.0", 75 + "@atproto/lexicon": "^0.4.6", 76 + "@atproto/syntax": "^0.3.2", 77 + "@atproto/xrpc": "^0.6.8", 78 + "await-lock": "^2.2.2", 79 + "multiformats": "^9.9.0", 80 + "tlds": "^1.234.0", 81 + "zod": "^3.23.8" 82 + } 83 + }, 84 + "node_modules/@ascorbic/bluesky-loader/node_modules/@atproto/syntax": { 85 + "version": "0.3.4", 86 + "resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.3.4.tgz", 87 + "integrity": "sha512-8CNmi5DipOLaVeSMPggMe7FCksVag0aO6XZy9WflbduTKM4dFZVCs4686UeMLfGRXX+X966XgwECHoLYrovMMg==", 88 + "license": "MIT" 89 + }, 90 + "node_modules/@ascorbic/loader-utils": { 91 + "version": "1.0.2", 92 + "resolved": "https://registry.npmjs.org/@ascorbic/loader-utils/-/loader-utils-1.0.2.tgz", 93 + "integrity": "sha512-pg43g83gojVtEsAkXfjWuzJhuXneJp4wM/leBftGkCPV3yxKgB92EWA+nWu735BgbBMph3P7DrVqVc3ikt+dJA==", 94 + "license": "MIT", 95 + "peerDependencies": { 96 + "astro": "^4.14.0 || ^5.0.0-beta.0" 12 97 } 13 98 }, 14 99 "node_modules/@astrojs/compiler": { ··· 64 149 "node": "^18.17.1 || ^20.3.0 || >=22.0.0" 65 150 } 66 151 }, 152 + "node_modules/@astrojs/svelte": { 153 + "version": "7.0.10", 154 + "resolved": "https://registry.npmjs.org/@astrojs/svelte/-/svelte-7.0.10.tgz", 155 + "integrity": "sha512-ktu0GQeXsGUMhGEZWgsCWddV3pNqajeQlDNlDD7D1+Al6ImnU/j+xzjAkbbZgkp144guvPpo9dRqUTpgGKXodw==", 156 + "license": "MIT", 157 + "dependencies": { 158 + "@sveltejs/vite-plugin-svelte": "^5.0.3", 159 + "svelte2tsx": "^0.7.35", 160 + "vite": "^6.2.6" 161 + }, 162 + "engines": { 163 + "node": "^18.17.1 || ^20.3.0 || >=22.0.0" 164 + }, 165 + "peerDependencies": { 166 + "astro": "^5.0.0", 167 + "svelte": "^5.1.16", 168 + "typescript": "^5.3.3" 169 + } 170 + }, 67 171 "node_modules/@astrojs/telemetry": { 68 172 "version": "3.2.0", 69 173 "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.2.0.tgz", ··· 80 184 }, 81 185 "engines": { 82 186 "node": "^18.17.1 || ^20.3.0 || >=22.0.0" 187 + } 188 + }, 189 + "node_modules/@atcute/client": { 190 + "version": "3.0.1", 191 + "resolved": "https://registry.npmjs.org/@atcute/client/-/client-3.0.1.tgz", 192 + "integrity": "sha512-j51SuQYQj5jeKrx1DCXx+Q3fpVvO0JYGnKnJAdDSlesSLjPXjvnx1abC+hkuro58KRHHJvRA6P1MC0pmJsWfcg==", 193 + "license": "MIT" 194 + }, 195 + "node_modules/@atproto/api": { 196 + "version": "0.15.3", 197 + "resolved": "https://registry.npmjs.org/@atproto/api/-/api-0.15.3.tgz", 198 + "integrity": "sha512-HrNaKWHZoVv4pxrt5ITyqG/f1veEitm6Egrvs4ZaDS1FyYDLNVdgLDr4ccW76iFs8ja1xQuQtZNakHbgQUN92w==", 199 + "license": "MIT", 200 + "dependencies": { 201 + "@atproto/common-web": "^0.4.1", 202 + "@atproto/lexicon": "^0.4.10", 203 + "@atproto/syntax": "^0.4.0", 204 + "@atproto/xrpc": "^0.6.12", 205 + "await-lock": "^2.2.2", 206 + "multiformats": "^9.9.0", 207 + "tlds": "^1.234.0", 208 + "zod": "^3.23.8" 209 + } 210 + }, 211 + "node_modules/@atproto/common-web": { 212 + "version": "0.4.1", 213 + "resolved": "https://registry.npmjs.org/@atproto/common-web/-/common-web-0.4.1.tgz", 214 + "integrity": "sha512-Ghh+djHYMAUCktLKwr2IuGgtjcwSWGudp+K7+N7KBA9pDDloOXUEY8Agjc5SHSo9B1QIEFkegClU5n+apn2e0w==", 215 + "license": "MIT", 216 + "dependencies": { 217 + "graphemer": "^1.4.0", 218 + "multiformats": "^9.9.0", 219 + "uint8arrays": "3.0.0", 220 + "zod": "^3.23.8" 221 + } 222 + }, 223 + "node_modules/@atproto/lexicon": { 224 + "version": "0.4.10", 225 + "resolved": "https://registry.npmjs.org/@atproto/lexicon/-/lexicon-0.4.10.tgz", 226 + "integrity": "sha512-uDbP20vetBgtXPuxoyRcvOGBt2gNe1dFc9yYKcb6jWmXfseHiGTnIlORJOLBXIT2Pz15Eap4fLxAu6zFAykD5A==", 227 + "license": "MIT", 228 + "dependencies": { 229 + "@atproto/common-web": "^0.4.1", 230 + "@atproto/syntax": "^0.4.0", 231 + "iso-datestring-validator": "^2.2.2", 232 + "multiformats": "^9.9.0", 233 + "zod": "^3.23.8" 234 + } 235 + }, 236 + "node_modules/@atproto/syntax": { 237 + "version": "0.4.0", 238 + "resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.4.0.tgz", 239 + "integrity": "sha512-b9y5ceHS8YKOfP3mdKmwAx5yVj9294UN7FG2XzP6V5aKUdFazEYRnR9m5n5ZQFKa3GNvz7de9guZCJ/sUTcOAA==", 240 + "license": "MIT" 241 + }, 242 + "node_modules/@atproto/xrpc": { 243 + "version": "0.6.12", 244 + "resolved": "https://registry.npmjs.org/@atproto/xrpc/-/xrpc-0.6.12.tgz", 245 + "integrity": "sha512-Ut3iISNLujlmY9Gu8sNU+SPDJDvqlVzWddU8qUr0Yae5oD4SguaUFjjhireMGhQ3M5E0KljQgDbTmnBo1kIZ3w==", 246 + "license": "MIT", 247 + "dependencies": { 248 + "@atproto/lexicon": "^0.4.10", 249 + "zod": "^3.23.8" 83 250 } 84 251 }, 85 252 "node_modules/@babel/helper-string-parser": { ··· 137 304 "blob-to-buffer": "^1.2.8", 138 305 "cross-fetch": "^3.0.4", 139 306 "fontkit": "^2.0.2" 307 + } 308 + }, 309 + "node_modules/@clack/core": { 310 + "version": "0.4.2", 311 + "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.4.2.tgz", 312 + "integrity": "sha512-NYQfcEy8MWIxrT5Fj8nIVchfRFA26yYKJcvBS7WlUIlw2OmQOY9DhGGXMovyI5J5PpxrCPGkgUi207EBrjpBvg==", 313 + "license": "MIT", 314 + "dependencies": { 315 + "picocolors": "^1.0.0", 316 + "sisteransi": "^1.0.5" 317 + } 318 + }, 319 + "node_modules/@clack/prompts": { 320 + "version": "0.10.1", 321 + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.10.1.tgz", 322 + "integrity": "sha512-Q0T02vx8ZM9XSv9/Yde0jTmmBQufZhPJfYAg2XrrrxWWaZgq1rr8nU8Hv710BQ1dhoP8rtY7YUdpGej2Qza/cw==", 323 + "license": "MIT", 324 + "dependencies": { 325 + "@clack/core": "0.4.2", 326 + "picocolors": "^1.0.0", 327 + "sisteransi": "^1.0.5" 328 + } 329 + }, 330 + "node_modules/@dagrejs/dagre": { 331 + "version": "1.1.4", 332 + "resolved": "https://registry.npmjs.org/@dagrejs/dagre/-/dagre-1.1.4.tgz", 333 + "integrity": "sha512-QUTc54Cg/wvmlEUxB+uvoPVKFazM1H18kVHBQNmK2NbrDR5ihOCR6CXLnDSZzMcSQKJtabPUWridBOlJM3WkDg==", 334 + "license": "MIT", 335 + "dependencies": { 336 + "@dagrejs/graphlib": "2.2.4" 337 + } 338 + }, 339 + "node_modules/@dagrejs/graphlib": { 340 + "version": "2.2.4", 341 + "resolved": "https://registry.npmjs.org/@dagrejs/graphlib/-/graphlib-2.2.4.tgz", 342 + "integrity": "sha512-mepCf/e9+SKYy1d02/UkvSy6+6MoyXhVxP8lLDfA7BPE1X1d4dR0sZznmbM8/XVJ1GPM+Svnx7Xj6ZweByWUkw==", 343 + "license": "MIT", 344 + "engines": { 345 + "node": ">17.0.0" 140 346 } 141 347 }, 142 348 "node_modules/@emnapi/runtime": { ··· 549 755 "node": ">=18" 550 756 } 551 757 }, 758 + "node_modules/@floating-ui/core": { 759 + "version": "1.6.9", 760 + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz", 761 + "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==", 762 + "license": "MIT", 763 + "dependencies": { 764 + "@floating-ui/utils": "^0.2.9" 765 + } 766 + }, 767 + "node_modules/@floating-ui/dom": { 768 + "version": "1.6.13", 769 + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz", 770 + "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==", 771 + "license": "MIT", 772 + "dependencies": { 773 + "@floating-ui/core": "^1.6.0", 774 + "@floating-ui/utils": "^0.2.9" 775 + } 776 + }, 777 + "node_modules/@floating-ui/utils": { 778 + "version": "0.2.9", 779 + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", 780 + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", 781 + "license": "MIT" 782 + }, 552 783 "node_modules/@img/sharp-darwin-arm64": { 553 784 "version": "0.33.5", 554 785 "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", ··· 910 1141 "url": "https://opencollective.com/libvips" 911 1142 } 912 1143 }, 1144 + "node_modules/@internationalized/date": { 1145 + "version": "3.8.0", 1146 + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.8.0.tgz", 1147 + "integrity": "sha512-J51AJ0fEL68hE4CwGPa6E0PO6JDaVLd8aln48xFCSy7CZkZc96dGEGmLs2OEEbBxcsVZtfrqkXJwI2/MSG8yKw==", 1148 + "license": "Apache-2.0", 1149 + "dependencies": { 1150 + "@swc/helpers": "^0.5.0" 1151 + } 1152 + }, 1153 + "node_modules/@isaacs/cliui": { 1154 + "version": "8.0.2", 1155 + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", 1156 + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", 1157 + "license": "ISC", 1158 + "dependencies": { 1159 + "string-width": "^5.1.2", 1160 + "string-width-cjs": "npm:string-width@^4.2.0", 1161 + "strip-ansi": "^7.0.1", 1162 + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", 1163 + "wrap-ansi": "^8.1.0", 1164 + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" 1165 + }, 1166 + "engines": { 1167 + "node": ">=12" 1168 + } 1169 + }, 1170 + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { 1171 + "version": "9.2.2", 1172 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 1173 + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 1174 + "license": "MIT" 1175 + }, 1176 + "node_modules/@isaacs/cliui/node_modules/string-width": { 1177 + "version": "5.1.2", 1178 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 1179 + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 1180 + "license": "MIT", 1181 + "dependencies": { 1182 + "eastasianwidth": "^0.2.0", 1183 + "emoji-regex": "^9.2.2", 1184 + "strip-ansi": "^7.0.1" 1185 + }, 1186 + "engines": { 1187 + "node": ">=12" 1188 + }, 1189 + "funding": { 1190 + "url": "https://github.com/sponsors/sindresorhus" 1191 + } 1192 + }, 1193 + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { 1194 + "version": "8.1.0", 1195 + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 1196 + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 1197 + "license": "MIT", 1198 + "dependencies": { 1199 + "ansi-styles": "^6.1.0", 1200 + "string-width": "^5.0.1", 1201 + "strip-ansi": "^7.0.1" 1202 + }, 1203 + "engines": { 1204 + "node": ">=12" 1205 + }, 1206 + "funding": { 1207 + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1208 + } 1209 + }, 1210 + "node_modules/@isaacs/fs-minipass": { 1211 + "version": "4.0.1", 1212 + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", 1213 + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", 1214 + "license": "ISC", 1215 + "dependencies": { 1216 + "minipass": "^7.0.4" 1217 + }, 1218 + "engines": { 1219 + "node": ">=18.0.0" 1220 + } 1221 + }, 1222 + "node_modules/@jridgewell/gen-mapping": { 1223 + "version": "0.3.8", 1224 + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", 1225 + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", 1226 + "license": "MIT", 1227 + "dependencies": { 1228 + "@jridgewell/set-array": "^1.2.1", 1229 + "@jridgewell/sourcemap-codec": "^1.4.10", 1230 + "@jridgewell/trace-mapping": "^0.3.24" 1231 + }, 1232 + "engines": { 1233 + "node": ">=6.0.0" 1234 + } 1235 + }, 1236 + "node_modules/@jridgewell/resolve-uri": { 1237 + "version": "3.1.2", 1238 + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 1239 + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 1240 + "license": "MIT", 1241 + "engines": { 1242 + "node": ">=6.0.0" 1243 + } 1244 + }, 1245 + "node_modules/@jridgewell/set-array": { 1246 + "version": "1.2.1", 1247 + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 1248 + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 1249 + "license": "MIT", 1250 + "engines": { 1251 + "node": ">=6.0.0" 1252 + } 1253 + }, 913 1254 "node_modules/@jridgewell/sourcemap-codec": { 914 1255 "version": "1.5.0", 915 1256 "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 916 1257 "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 917 1258 "license": "MIT" 918 1259 }, 1260 + "node_modules/@jridgewell/trace-mapping": { 1261 + "version": "0.3.25", 1262 + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 1263 + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 1264 + "license": "MIT", 1265 + "dependencies": { 1266 + "@jridgewell/resolve-uri": "^3.1.0", 1267 + "@jridgewell/sourcemap-codec": "^1.4.14" 1268 + } 1269 + }, 1270 + "node_modules/@layerstack/svelte-actions": { 1271 + "version": "1.0.0", 1272 + "resolved": "https://registry.npmjs.org/@layerstack/svelte-actions/-/svelte-actions-1.0.0.tgz", 1273 + "integrity": "sha512-cnVxMbcc+xYta9hwHnLja4a7bR7cfX/QW9jDY4ZCI8RIt+3lKNRE+u2XzWoGp4Qsx7A0/nGUIiLWpDBgO1ihsQ==", 1274 + "license": "MIT", 1275 + "dependencies": { 1276 + "@floating-ui/dom": "^1.6.13", 1277 + "@layerstack/utils": "1.0.0", 1278 + "d3-array": "^3.2.4", 1279 + "d3-scale": "^4.0.2", 1280 + "date-fns": "^4.1.0", 1281 + "lodash-es": "^4.17.21" 1282 + } 1283 + }, 1284 + "node_modules/@layerstack/svelte-stores": { 1285 + "version": "1.0.1", 1286 + "resolved": "https://registry.npmjs.org/@layerstack/svelte-stores/-/svelte-stores-1.0.1.tgz", 1287 + "integrity": "sha512-GVm0iMNJ8pI2q8WjofwejK+m6uF7PFUqgZZfkgDv2UmVh/HyW6ZpxA2wXzIxZley4NtUlrRw8cpyy2sJOEGVSA==", 1288 + "license": "MIT", 1289 + "dependencies": { 1290 + "@layerstack/utils": "1.0.0", 1291 + "d3-array": "^3.2.4", 1292 + "date-fns": "^4.1.0", 1293 + "immer": "^10.1.1", 1294 + "lodash-es": "^4.17.21", 1295 + "zod": "^3.24.2" 1296 + } 1297 + }, 1298 + "node_modules/@layerstack/tailwind": { 1299 + "version": "1.0.0", 1300 + "resolved": "https://registry.npmjs.org/@layerstack/tailwind/-/tailwind-1.0.0.tgz", 1301 + "integrity": "sha512-xV2M6KRNBmbhV9XAvTHiw/BJSTIh5eby+Hj1iXXkMr88fObZHn4s1G2BILEDbdwjZl6Ivu1Du0gO9Vz3lzflUA==", 1302 + "license": "MIT", 1303 + "dependencies": { 1304 + "@layerstack/utils": "^1.0.0", 1305 + "clsx": "^2.1.1", 1306 + "culori": "^4.0.1", 1307 + "d3-array": "^3.2.4", 1308 + "date-fns": "^4.1.0", 1309 + "lodash-es": "^4.17.21", 1310 + "tailwind-merge": "^2.5.4", 1311 + "tailwindcss": "^3.4.15" 1312 + } 1313 + }, 1314 + "node_modules/@layerstack/tailwind/node_modules/chokidar": { 1315 + "version": "3.6.0", 1316 + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", 1317 + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", 1318 + "license": "MIT", 1319 + "dependencies": { 1320 + "anymatch": "~3.1.2", 1321 + "braces": "~3.0.2", 1322 + "glob-parent": "~5.1.2", 1323 + "is-binary-path": "~2.1.0", 1324 + "is-glob": "~4.0.1", 1325 + "normalize-path": "~3.0.0", 1326 + "readdirp": "~3.6.0" 1327 + }, 1328 + "engines": { 1329 + "node": ">= 8.10.0" 1330 + }, 1331 + "funding": { 1332 + "url": "https://paulmillr.com/funding/" 1333 + }, 1334 + "optionalDependencies": { 1335 + "fsevents": "~2.3.2" 1336 + } 1337 + }, 1338 + "node_modules/@layerstack/tailwind/node_modules/chokidar/node_modules/glob-parent": { 1339 + "version": "5.1.2", 1340 + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1341 + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1342 + "license": "ISC", 1343 + "dependencies": { 1344 + "is-glob": "^4.0.1" 1345 + }, 1346 + "engines": { 1347 + "node": ">= 6" 1348 + } 1349 + }, 1350 + "node_modules/@layerstack/tailwind/node_modules/jiti": { 1351 + "version": "1.21.7", 1352 + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", 1353 + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", 1354 + "license": "MIT", 1355 + "bin": { 1356 + "jiti": "bin/jiti.js" 1357 + } 1358 + }, 1359 + "node_modules/@layerstack/tailwind/node_modules/picomatch": { 1360 + "version": "2.3.1", 1361 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1362 + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1363 + "license": "MIT", 1364 + "engines": { 1365 + "node": ">=8.6" 1366 + }, 1367 + "funding": { 1368 + "url": "https://github.com/sponsors/jonschlinkert" 1369 + } 1370 + }, 1371 + "node_modules/@layerstack/tailwind/node_modules/readdirp": { 1372 + "version": "3.6.0", 1373 + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1374 + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1375 + "license": "MIT", 1376 + "dependencies": { 1377 + "picomatch": "^2.2.1" 1378 + }, 1379 + "engines": { 1380 + "node": ">=8.10.0" 1381 + } 1382 + }, 1383 + "node_modules/@layerstack/tailwind/node_modules/tailwind-merge": { 1384 + "version": "2.6.0", 1385 + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz", 1386 + "integrity": "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==", 1387 + "license": "MIT", 1388 + "funding": { 1389 + "type": "github", 1390 + "url": "https://github.com/sponsors/dcastil" 1391 + } 1392 + }, 1393 + "node_modules/@layerstack/tailwind/node_modules/tailwindcss": { 1394 + "version": "3.4.17", 1395 + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", 1396 + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", 1397 + "license": "MIT", 1398 + "dependencies": { 1399 + "@alloc/quick-lru": "^5.2.0", 1400 + "arg": "^5.0.2", 1401 + "chokidar": "^3.6.0", 1402 + "didyoumean": "^1.2.2", 1403 + "dlv": "^1.1.3", 1404 + "fast-glob": "^3.3.2", 1405 + "glob-parent": "^6.0.2", 1406 + "is-glob": "^4.0.3", 1407 + "jiti": "^1.21.6", 1408 + "lilconfig": "^3.1.3", 1409 + "micromatch": "^4.0.8", 1410 + "normalize-path": "^3.0.0", 1411 + "object-hash": "^3.0.0", 1412 + "picocolors": "^1.1.1", 1413 + "postcss": "^8.4.47", 1414 + "postcss-import": "^15.1.0", 1415 + "postcss-js": "^4.0.1", 1416 + "postcss-load-config": "^4.0.2", 1417 + "postcss-nested": "^6.2.0", 1418 + "postcss-selector-parser": "^6.1.2", 1419 + "resolve": "^1.22.8", 1420 + "sucrase": "^3.35.0" 1421 + }, 1422 + "bin": { 1423 + "tailwind": "lib/cli.js", 1424 + "tailwindcss": "lib/cli.js" 1425 + }, 1426 + "engines": { 1427 + "node": ">=14.0.0" 1428 + } 1429 + }, 1430 + "node_modules/@layerstack/utils": { 1431 + "version": "1.0.0", 1432 + "resolved": "https://registry.npmjs.org/@layerstack/utils/-/utils-1.0.0.tgz", 1433 + "integrity": "sha512-kIH8lo4MEzPGtdxQRacy8RsSVhMQwe62ckuev62xQDE5QcUJ4wB9EMaRWaQK8CfEOpUERGPgkMPMbMqPhdp0gw==", 1434 + "license": "MIT", 1435 + "dependencies": { 1436 + "d3-array": "^3.2.4", 1437 + "date-fns": "^4.1.0", 1438 + "lodash-es": "^4.17.21" 1439 + } 1440 + }, 1441 + "node_modules/@napi-rs/canvas": { 1442 + "version": "0.1.69", 1443 + "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.69.tgz", 1444 + "integrity": "sha512-ydvNeJMRm+l3T14yCoUKqjYQiEdXDq1isznI93LEBGYssXKfSaLNLHOkeM4z9Fnw9Pkt2EKOCAtW9cS4b00Zcg==", 1445 + "license": "MIT", 1446 + "optional": true, 1447 + "engines": { 1448 + "node": ">= 10" 1449 + }, 1450 + "optionalDependencies": { 1451 + "@napi-rs/canvas-android-arm64": "0.1.69", 1452 + "@napi-rs/canvas-darwin-arm64": "0.1.69", 1453 + "@napi-rs/canvas-darwin-x64": "0.1.69", 1454 + "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.69", 1455 + "@napi-rs/canvas-linux-arm64-gnu": "0.1.69", 1456 + "@napi-rs/canvas-linux-arm64-musl": "0.1.69", 1457 + "@napi-rs/canvas-linux-riscv64-gnu": "0.1.69", 1458 + "@napi-rs/canvas-linux-x64-gnu": "0.1.69", 1459 + "@napi-rs/canvas-linux-x64-musl": "0.1.69", 1460 + "@napi-rs/canvas-win32-x64-msvc": "0.1.69" 1461 + } 1462 + }, 1463 + "node_modules/@napi-rs/canvas-android-arm64": { 1464 + "version": "0.1.69", 1465 + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.69.tgz", 1466 + "integrity": "sha512-4icWTByY8zPvM9SelfQKf3I6kwXw0aI5drBOVrwfER5kjwXJd78FPSDSZkxDHjvIo9Q86ljl18Yr963ehA4sHQ==", 1467 + "cpu": [ 1468 + "arm64" 1469 + ], 1470 + "license": "MIT", 1471 + "optional": true, 1472 + "os": [ 1473 + "android" 1474 + ], 1475 + "engines": { 1476 + "node": ">= 10" 1477 + } 1478 + }, 1479 + "node_modules/@napi-rs/canvas-darwin-arm64": { 1480 + "version": "0.1.69", 1481 + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.69.tgz", 1482 + "integrity": "sha512-HOanhhYlHdukA+unjelT4Dg3ta7e820x87/AG2dKUMsUzH19jaeZs9bcYjzEy2vYi/dFWKz7cSv2yaIOudB8Yg==", 1483 + "cpu": [ 1484 + "arm64" 1485 + ], 1486 + "license": "MIT", 1487 + "optional": true, 1488 + "os": [ 1489 + "darwin" 1490 + ], 1491 + "engines": { 1492 + "node": ">= 10" 1493 + } 1494 + }, 1495 + "node_modules/@napi-rs/canvas-darwin-x64": { 1496 + "version": "0.1.69", 1497 + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.69.tgz", 1498 + "integrity": "sha512-SIp7WfhxAPnSVK9bkFfJp+84rbATCIq9jMUzDwpCLhQ+v+OqtXe4pggX1oeV+62/HK6BT1t18qRmJfyqwJ9f3g==", 1499 + "cpu": [ 1500 + "x64" 1501 + ], 1502 + "license": "MIT", 1503 + "optional": true, 1504 + "os": [ 1505 + "darwin" 1506 + ], 1507 + "engines": { 1508 + "node": ">= 10" 1509 + } 1510 + }, 1511 + "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": { 1512 + "version": "0.1.69", 1513 + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.69.tgz", 1514 + "integrity": "sha512-Ls+KujCp6TGpkuMVFvrlx+CxtL+casdkrprFjqIuOAnB30Mct6bCEr+I83Tu29s3nNq4EzIGjdmA3fFAZG/Dtw==", 1515 + "cpu": [ 1516 + "arm" 1517 + ], 1518 + "license": "MIT", 1519 + "optional": true, 1520 + "os": [ 1521 + "linux" 1522 + ], 1523 + "engines": { 1524 + "node": ">= 10" 1525 + } 1526 + }, 1527 + "node_modules/@napi-rs/canvas-linux-arm64-gnu": { 1528 + "version": "0.1.69", 1529 + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.69.tgz", 1530 + "integrity": "sha512-m8VcGmeSBNRbHZBd1srvdM1aq/ScS2y8KqGqmCCEgJlytYK4jdULzAo2K/BPKE1v3xvn8oUPZDLI/NBJbJkEoA==", 1531 + "cpu": [ 1532 + "arm64" 1533 + ], 1534 + "license": "MIT", 1535 + "optional": true, 1536 + "os": [ 1537 + "linux" 1538 + ], 1539 + "engines": { 1540 + "node": ">= 10" 1541 + } 1542 + }, 1543 + "node_modules/@napi-rs/canvas-linux-arm64-musl": { 1544 + "version": "0.1.69", 1545 + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.69.tgz", 1546 + "integrity": "sha512-a3xjNRIeK2m2ZORGv2moBvv3vbkaFZG1QKMeiEv/BKij+rkztuEhTJGMar+buICFgS0fLgphXXsKNkUSJb7eRQ==", 1547 + "cpu": [ 1548 + "arm64" 1549 + ], 1550 + "license": "MIT", 1551 + "optional": true, 1552 + "os": [ 1553 + "linux" 1554 + ], 1555 + "engines": { 1556 + "node": ">= 10" 1557 + } 1558 + }, 1559 + "node_modules/@napi-rs/canvas-linux-riscv64-gnu": { 1560 + "version": "0.1.69", 1561 + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.69.tgz", 1562 + "integrity": "sha512-pClUoJF5wdC9AvD0mc15G9JffL1Q85nuH1rLSQPRkGmGmQOtRjw5E9xNbanz7oFUiPbjH7xcAXUjVAcf7tdgPQ==", 1563 + "cpu": [ 1564 + "riscv64" 1565 + ], 1566 + "license": "MIT", 1567 + "optional": true, 1568 + "os": [ 1569 + "linux" 1570 + ], 1571 + "engines": { 1572 + "node": ">= 10" 1573 + } 1574 + }, 1575 + "node_modules/@napi-rs/canvas-linux-x64-gnu": { 1576 + "version": "0.1.69", 1577 + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.69.tgz", 1578 + "integrity": "sha512-96X3bFAmzemfw84Ts6Jg/omL86uuynvK06MWGR/mp3JYNumY9RXofA14eF/kJIYelbYFWXcwpbcBR71lJ6G/YQ==", 1579 + "cpu": [ 1580 + "x64" 1581 + ], 1582 + "license": "MIT", 1583 + "optional": true, 1584 + "os": [ 1585 + "linux" 1586 + ], 1587 + "engines": { 1588 + "node": ">= 10" 1589 + } 1590 + }, 1591 + "node_modules/@napi-rs/canvas-linux-x64-musl": { 1592 + "version": "0.1.69", 1593 + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.69.tgz", 1594 + "integrity": "sha512-2QTsEFO72Kwkj53W9hc5y1FAUvdGx0V+pjJB+9oQF6Ys9+y989GyPIl5wZDzeh8nIJW6koZZ1eFa8pD+pA5BFQ==", 1595 + "cpu": [ 1596 + "x64" 1597 + ], 1598 + "license": "MIT", 1599 + "optional": true, 1600 + "os": [ 1601 + "linux" 1602 + ], 1603 + "engines": { 1604 + "node": ">= 10" 1605 + } 1606 + }, 1607 + "node_modules/@napi-rs/canvas-win32-x64-msvc": { 1608 + "version": "0.1.69", 1609 + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.69.tgz", 1610 + "integrity": "sha512-Q4YA8kVnKarApBVLu7F8icGlIfSll5Glswo5hY6gPS4Is2dCI8+ig9OeDM8RlwYevUIxKq8lZBypN8Q1iLAQ7w==", 1611 + "cpu": [ 1612 + "x64" 1613 + ], 1614 + "license": "MIT", 1615 + "optional": true, 1616 + "os": [ 1617 + "win32" 1618 + ], 1619 + "engines": { 1620 + "node": ">= 10" 1621 + } 1622 + }, 1623 + "node_modules/@nodelib/fs.scandir": { 1624 + "version": "2.1.5", 1625 + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 1626 + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 1627 + "license": "MIT", 1628 + "dependencies": { 1629 + "@nodelib/fs.stat": "2.0.5", 1630 + "run-parallel": "^1.1.9" 1631 + }, 1632 + "engines": { 1633 + "node": ">= 8" 1634 + } 1635 + }, 1636 + "node_modules/@nodelib/fs.stat": { 1637 + "version": "2.0.5", 1638 + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 1639 + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 1640 + "license": "MIT", 1641 + "engines": { 1642 + "node": ">= 8" 1643 + } 1644 + }, 1645 + "node_modules/@nodelib/fs.walk": { 1646 + "version": "1.2.8", 1647 + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 1648 + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 1649 + "license": "MIT", 1650 + "dependencies": { 1651 + "@nodelib/fs.scandir": "2.1.5", 1652 + "fastq": "^1.6.0" 1653 + }, 1654 + "engines": { 1655 + "node": ">= 8" 1656 + } 1657 + }, 1658 + "node_modules/@number-flow/svelte": { 1659 + "version": "0.3.7", 1660 + "resolved": "https://registry.npmjs.org/@number-flow/svelte/-/svelte-0.3.7.tgz", 1661 + "integrity": "sha512-FusxKvImj13+15N+pQrrGsu8cNTQ0BCUWxshNUpPU4opFufVpHO+RMxsYrtZ7xloVL/TjDLpO+SWjrxxx7iPJg==", 1662 + "license": "MIT", 1663 + "dependencies": { 1664 + "esm-env": "^1.1.4", 1665 + "number-flow": "0.5.7" 1666 + }, 1667 + "peerDependencies": { 1668 + "svelte": "^4 || ^5" 1669 + } 1670 + }, 919 1671 "node_modules/@oslojs/encoding": { 920 1672 "version": "1.1.0", 921 1673 "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", 922 1674 "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", 923 1675 "license": "MIT" 1676 + }, 1677 + "node_modules/@pkgjs/parseargs": { 1678 + "version": "0.11.0", 1679 + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", 1680 + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", 1681 + "license": "MIT", 1682 + "optional": true, 1683 + "engines": { 1684 + "node": ">=14" 1685 + } 1686 + }, 1687 + "node_modules/@polka/url": { 1688 + "version": "1.0.0-next.29", 1689 + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", 1690 + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", 1691 + "license": "MIT", 1692 + "peer": true 924 1693 }, 925 1694 "node_modules/@rollup/pluginutils": { 926 1695 "version": "5.1.4", ··· 1277 2046 "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", 1278 2047 "license": "MIT" 1279 2048 }, 2049 + "node_modules/@sveltejs/acorn-typescript": { 2050 + "version": "1.0.5", 2051 + "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.5.tgz", 2052 + "integrity": "sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==", 2053 + "license": "MIT", 2054 + "peerDependencies": { 2055 + "acorn": "^8.9.0" 2056 + } 2057 + }, 2058 + "node_modules/@sveltejs/adapter-static": { 2059 + "version": "3.0.8", 2060 + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.8.tgz", 2061 + "integrity": "sha512-YaDrquRpZwfcXbnlDsSrBQNCChVOT9MGuSg+dMAyfsAa1SmiAhrA5jUYUiIMC59G92kIbY/AaQOWcBdq+lh+zg==", 2062 + "license": "MIT", 2063 + "peerDependencies": { 2064 + "@sveltejs/kit": "^2.0.0" 2065 + } 2066 + }, 2067 + "node_modules/@sveltejs/kit": { 2068 + "version": "2.20.7", 2069 + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.20.7.tgz", 2070 + "integrity": "sha512-dVbLMubpJJSLI4OYB+yWYNHGAhgc2bVevWuBjDj8jFUXIJOAnLwYP3vsmtcgoxNGUXoq0rHS5f7MFCsryb6nzg==", 2071 + "license": "MIT", 2072 + "peer": true, 2073 + "dependencies": { 2074 + "@types/cookie": "^0.6.0", 2075 + "cookie": "^0.6.0", 2076 + "devalue": "^5.1.0", 2077 + "esm-env": "^1.2.2", 2078 + "import-meta-resolve": "^4.1.0", 2079 + "kleur": "^4.1.5", 2080 + "magic-string": "^0.30.5", 2081 + "mrmime": "^2.0.0", 2082 + "sade": "^1.8.1", 2083 + "set-cookie-parser": "^2.6.0", 2084 + "sirv": "^3.0.0" 2085 + }, 2086 + "bin": { 2087 + "svelte-kit": "svelte-kit.js" 2088 + }, 2089 + "engines": { 2090 + "node": ">=18.13" 2091 + }, 2092 + "peerDependencies": { 2093 + "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0", 2094 + "svelte": "^4.0.0 || ^5.0.0-next.0", 2095 + "vite": "^5.0.3 || ^6.0.0" 2096 + } 2097 + }, 2098 + "node_modules/@sveltejs/kit/node_modules/cookie": { 2099 + "version": "0.6.0", 2100 + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", 2101 + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", 2102 + "license": "MIT", 2103 + "peer": true, 2104 + "engines": { 2105 + "node": ">= 0.6" 2106 + } 2107 + }, 2108 + "node_modules/@sveltejs/vite-plugin-svelte": { 2109 + "version": "5.0.3", 2110 + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-5.0.3.tgz", 2111 + "integrity": "sha512-MCFS6CrQDu1yGwspm4qtli0e63vaPCehf6V7pIMP15AsWgMKrqDGCPFF/0kn4SP0ii4aySu4Pa62+fIRGFMjgw==", 2112 + "license": "MIT", 2113 + "dependencies": { 2114 + "@sveltejs/vite-plugin-svelte-inspector": "^4.0.1", 2115 + "debug": "^4.4.0", 2116 + "deepmerge": "^4.3.1", 2117 + "kleur": "^4.1.5", 2118 + "magic-string": "^0.30.15", 2119 + "vitefu": "^1.0.4" 2120 + }, 2121 + "engines": { 2122 + "node": "^18.0.0 || ^20.0.0 || >=22" 2123 + }, 2124 + "peerDependencies": { 2125 + "svelte": "^5.0.0", 2126 + "vite": "^6.0.0" 2127 + } 2128 + }, 2129 + "node_modules/@sveltejs/vite-plugin-svelte-inspector": { 2130 + "version": "4.0.1", 2131 + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-4.0.1.tgz", 2132 + "integrity": "sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==", 2133 + "license": "MIT", 2134 + "dependencies": { 2135 + "debug": "^4.3.7" 2136 + }, 2137 + "engines": { 2138 + "node": "^18.0.0 || ^20.0.0 || >=22" 2139 + }, 2140 + "peerDependencies": { 2141 + "@sveltejs/vite-plugin-svelte": "^5.0.0", 2142 + "svelte": "^5.0.0", 2143 + "vite": "^6.0.0" 2144 + } 2145 + }, 1280 2146 "node_modules/@swc/helpers": { 1281 2147 "version": "0.5.17", 1282 2148 "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", ··· 1285 2151 "dependencies": { 1286 2152 "tslib": "^2.8.0" 1287 2153 } 2154 + }, 2155 + "node_modules/@tailwindcss/node": { 2156 + "version": "4.1.4", 2157 + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.4.tgz", 2158 + "integrity": "sha512-MT5118zaiO6x6hNA04OWInuAiP1YISXql8Z+/Y8iisV5nuhM8VXlyhRuqc2PEviPszcXI66W44bCIk500Oolhw==", 2159 + "license": "MIT", 2160 + "dependencies": { 2161 + "enhanced-resolve": "^5.18.1", 2162 + "jiti": "^2.4.2", 2163 + "lightningcss": "1.29.2", 2164 + "tailwindcss": "4.1.4" 2165 + } 2166 + }, 2167 + "node_modules/@tailwindcss/oxide": { 2168 + "version": "4.1.4", 2169 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.4.tgz", 2170 + "integrity": "sha512-p5wOpXyOJx7mKh5MXh5oKk+kqcz8T+bA3z/5VWWeQwFrmuBItGwz8Y2CHk/sJ+dNb9B0nYFfn0rj/cKHZyjahQ==", 2171 + "license": "MIT", 2172 + "engines": { 2173 + "node": ">= 10" 2174 + }, 2175 + "optionalDependencies": { 2176 + "@tailwindcss/oxide-android-arm64": "4.1.4", 2177 + "@tailwindcss/oxide-darwin-arm64": "4.1.4", 2178 + "@tailwindcss/oxide-darwin-x64": "4.1.4", 2179 + "@tailwindcss/oxide-freebsd-x64": "4.1.4", 2180 + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.4", 2181 + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.4", 2182 + "@tailwindcss/oxide-linux-arm64-musl": "4.1.4", 2183 + "@tailwindcss/oxide-linux-x64-gnu": "4.1.4", 2184 + "@tailwindcss/oxide-linux-x64-musl": "4.1.4", 2185 + "@tailwindcss/oxide-wasm32-wasi": "4.1.4", 2186 + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.4", 2187 + "@tailwindcss/oxide-win32-x64-msvc": "4.1.4" 2188 + } 2189 + }, 2190 + "node_modules/@tailwindcss/oxide-android-arm64": { 2191 + "version": "4.1.4", 2192 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.4.tgz", 2193 + "integrity": "sha512-xMMAe/SaCN/vHfQYui3fqaBDEXMu22BVwQ33veLc8ep+DNy7CWN52L+TTG9y1K397w9nkzv+Mw+mZWISiqhmlA==", 2194 + "cpu": [ 2195 + "arm64" 2196 + ], 2197 + "license": "MIT", 2198 + "optional": true, 2199 + "os": [ 2200 + "android" 2201 + ], 2202 + "engines": { 2203 + "node": ">= 10" 2204 + } 2205 + }, 2206 + "node_modules/@tailwindcss/oxide-darwin-arm64": { 2207 + "version": "4.1.4", 2208 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.4.tgz", 2209 + "integrity": "sha512-JGRj0SYFuDuAGilWFBlshcexev2hOKfNkoX+0QTksKYq2zgF9VY/vVMq9m8IObYnLna0Xlg+ytCi2FN2rOL0Sg==", 2210 + "cpu": [ 2211 + "arm64" 2212 + ], 2213 + "license": "MIT", 2214 + "optional": true, 2215 + "os": [ 2216 + "darwin" 2217 + ], 2218 + "engines": { 2219 + "node": ">= 10" 2220 + } 2221 + }, 2222 + "node_modules/@tailwindcss/oxide-darwin-x64": { 2223 + "version": "4.1.4", 2224 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.4.tgz", 2225 + "integrity": "sha512-sdDeLNvs3cYeWsEJ4H1DvjOzaGios4QbBTNLVLVs0XQ0V95bffT3+scptzYGPMjm7xv4+qMhCDrkHwhnUySEzA==", 2226 + "cpu": [ 2227 + "x64" 2228 + ], 2229 + "license": "MIT", 2230 + "optional": true, 2231 + "os": [ 2232 + "darwin" 2233 + ], 2234 + "engines": { 2235 + "node": ">= 10" 2236 + } 2237 + }, 2238 + "node_modules/@tailwindcss/oxide-freebsd-x64": { 2239 + "version": "4.1.4", 2240 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.4.tgz", 2241 + "integrity": "sha512-VHxAqxqdghM83HslPhRsNhHo91McsxRJaEnShJOMu8mHmEj9Ig7ToHJtDukkuLWLzLboh2XSjq/0zO6wgvykNA==", 2242 + "cpu": [ 2243 + "x64" 2244 + ], 2245 + "license": "MIT", 2246 + "optional": true, 2247 + "os": [ 2248 + "freebsd" 2249 + ], 2250 + "engines": { 2251 + "node": ">= 10" 2252 + } 2253 + }, 2254 + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { 2255 + "version": "4.1.4", 2256 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.4.tgz", 2257 + "integrity": "sha512-OTU/m/eV4gQKxy9r5acuesqaymyeSCnsx1cFto/I1WhPmi5HDxX1nkzb8KYBiwkHIGg7CTfo/AcGzoXAJBxLfg==", 2258 + "cpu": [ 2259 + "arm" 2260 + ], 2261 + "license": "MIT", 2262 + "optional": true, 2263 + "os": [ 2264 + "linux" 2265 + ], 2266 + "engines": { 2267 + "node": ">= 10" 2268 + } 2269 + }, 2270 + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { 2271 + "version": "4.1.4", 2272 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.4.tgz", 2273 + "integrity": "sha512-hKlLNvbmUC6z5g/J4H+Zx7f7w15whSVImokLPmP6ff1QqTVE+TxUM9PGuNsjHvkvlHUtGTdDnOvGNSEUiXI1Ww==", 2274 + "cpu": [ 2275 + "arm64" 2276 + ], 2277 + "license": "MIT", 2278 + "optional": true, 2279 + "os": [ 2280 + "linux" 2281 + ], 2282 + "engines": { 2283 + "node": ">= 10" 2284 + } 2285 + }, 2286 + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { 2287 + "version": "4.1.4", 2288 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.4.tgz", 2289 + "integrity": "sha512-X3As2xhtgPTY/m5edUtddmZ8rCruvBvtxYLMw9OsZdH01L2gS2icsHRwxdU0dMItNfVmrBezueXZCHxVeeb7Aw==", 2290 + "cpu": [ 2291 + "arm64" 2292 + ], 2293 + "license": "MIT", 2294 + "optional": true, 2295 + "os": [ 2296 + "linux" 2297 + ], 2298 + "engines": { 2299 + "node": ">= 10" 2300 + } 2301 + }, 2302 + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { 2303 + "version": "4.1.4", 2304 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.4.tgz", 2305 + "integrity": "sha512-2VG4DqhGaDSmYIu6C4ua2vSLXnJsb/C9liej7TuSO04NK+JJJgJucDUgmX6sn7Gw3Cs5ZJ9ZLrnI0QRDOjLfNQ==", 2306 + "cpu": [ 2307 + "x64" 2308 + ], 2309 + "license": "MIT", 2310 + "optional": true, 2311 + "os": [ 2312 + "linux" 2313 + ], 2314 + "engines": { 2315 + "node": ">= 10" 2316 + } 2317 + }, 2318 + "node_modules/@tailwindcss/oxide-linux-x64-musl": { 2319 + "version": "4.1.4", 2320 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.4.tgz", 2321 + "integrity": "sha512-v+mxVgH2kmur/X5Mdrz9m7TsoVjbdYQT0b4Z+dr+I4RvreCNXyCFELZL/DO0M1RsidZTrm6O1eMnV6zlgEzTMQ==", 2322 + "cpu": [ 2323 + "x64" 2324 + ], 2325 + "license": "MIT", 2326 + "optional": true, 2327 + "os": [ 2328 + "linux" 2329 + ], 2330 + "engines": { 2331 + "node": ">= 10" 2332 + } 2333 + }, 2334 + "node_modules/@tailwindcss/oxide-wasm32-wasi": { 2335 + "version": "4.1.4", 2336 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.4.tgz", 2337 + "integrity": "sha512-2TLe9ir+9esCf6Wm+lLWTMbgklIjiF0pbmDnwmhR9MksVOq+e8aP3TSsXySnBDDvTTVd/vKu1aNttEGj3P6l8Q==", 2338 + "bundleDependencies": [ 2339 + "@napi-rs/wasm-runtime", 2340 + "@emnapi/core", 2341 + "@emnapi/runtime", 2342 + "@tybys/wasm-util", 2343 + "@emnapi/wasi-threads", 2344 + "tslib" 2345 + ], 2346 + "cpu": [ 2347 + "wasm32" 2348 + ], 2349 + "license": "MIT", 2350 + "optional": true, 2351 + "dependencies": { 2352 + "@emnapi/core": "^1.4.0", 2353 + "@emnapi/runtime": "^1.4.0", 2354 + "@emnapi/wasi-threads": "^1.0.1", 2355 + "@napi-rs/wasm-runtime": "^0.2.8", 2356 + "@tybys/wasm-util": "^0.9.0", 2357 + "tslib": "^2.8.0" 2358 + }, 2359 + "engines": { 2360 + "node": ">=14.0.0" 2361 + } 2362 + }, 2363 + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { 2364 + "version": "4.1.4", 2365 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.4.tgz", 2366 + "integrity": "sha512-VlnhfilPlO0ltxW9/BgfLI5547PYzqBMPIzRrk4W7uupgCt8z6Trw/tAj6QUtF2om+1MH281Pg+HHUJoLesmng==", 2367 + "cpu": [ 2368 + "arm64" 2369 + ], 2370 + "license": "MIT", 2371 + "optional": true, 2372 + "os": [ 2373 + "win32" 2374 + ], 2375 + "engines": { 2376 + "node": ">= 10" 2377 + } 2378 + }, 2379 + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { 2380 + "version": "4.1.4", 2381 + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.4.tgz", 2382 + "integrity": "sha512-+7S63t5zhYjslUGb8NcgLpFXD+Kq1F/zt5Xv5qTv7HaFTG/DHyHD9GA6ieNAxhgyA4IcKa/zy7Xx4Oad2/wuhw==", 2383 + "cpu": [ 2384 + "x64" 2385 + ], 2386 + "license": "MIT", 2387 + "optional": true, 2388 + "os": [ 2389 + "win32" 2390 + ], 2391 + "engines": { 2392 + "node": ">= 10" 2393 + } 2394 + }, 2395 + "node_modules/@tailwindcss/typography": { 2396 + "version": "0.5.16", 2397 + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz", 2398 + "integrity": "sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==", 2399 + "dev": true, 2400 + "license": "MIT", 2401 + "dependencies": { 2402 + "lodash.castarray": "^4.4.0", 2403 + "lodash.isplainobject": "^4.0.6", 2404 + "lodash.merge": "^4.6.2", 2405 + "postcss-selector-parser": "6.0.10" 2406 + }, 2407 + "peerDependencies": { 2408 + "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" 2409 + } 2410 + }, 2411 + "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": { 2412 + "version": "6.0.10", 2413 + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", 2414 + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", 2415 + "dev": true, 2416 + "license": "MIT", 2417 + "dependencies": { 2418 + "cssesc": "^3.0.0", 2419 + "util-deprecate": "^1.0.2" 2420 + }, 2421 + "engines": { 2422 + "node": ">=4" 2423 + } 2424 + }, 2425 + "node_modules/@tailwindcss/vite": { 2426 + "version": "4.1.4", 2427 + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.4.tgz", 2428 + "integrity": "sha512-4UQeMrONbvrsXKXXp/uxmdEN5JIJ9RkH7YVzs6AMxC/KC1+Np7WZBaNIco7TEjlkthqxZbt8pU/ipD+hKjm80A==", 2429 + "license": "MIT", 2430 + "dependencies": { 2431 + "@tailwindcss/node": "4.1.4", 2432 + "@tailwindcss/oxide": "4.1.4", 2433 + "tailwindcss": "4.1.4" 2434 + }, 2435 + "peerDependencies": { 2436 + "vite": "^5.2.0 || ^6" 2437 + } 2438 + }, 2439 + "node_modules/@texel/color": { 2440 + "version": "1.1.10", 2441 + "resolved": "https://registry.npmjs.org/@texel/color/-/color-1.1.10.tgz", 2442 + "integrity": "sha512-0du+jhP68nvdXGoS/dxAyqkmWWzsogtU3chygmNf/u4QtDIbG1e5OfcVIWfx29B5ANCLEDOPEQIvOhrvwhlORg==", 2443 + "license": "MIT" 2444 + }, 2445 + "node_modules/@thisux/sveltednd": { 2446 + "version": "0.0.20", 2447 + "resolved": "https://registry.npmjs.org/@thisux/sveltednd/-/sveltednd-0.0.20.tgz", 2448 + "integrity": "sha512-VE0HopIlHIvNOfSZ1SsiIzl1AmTU0VSd2Nz2Q2nIdqIUsT/UP4hiLw2ed2jFqTKTbqC+kbCYL9vuBpkYnEw+Kw==", 2449 + "license": "MIT", 2450 + "dependencies": { 2451 + "@thisux/sveltednd": "^0.0.18" 2452 + }, 2453 + "peerDependencies": { 2454 + "svelte": "^5.0.0" 2455 + } 2456 + }, 2457 + "node_modules/@thisux/sveltednd/node_modules/@thisux/sveltednd": { 2458 + "version": "0.0.18", 2459 + "resolved": "https://registry.npmjs.org/@thisux/sveltednd/-/sveltednd-0.0.18.tgz", 2460 + "integrity": "sha512-MO+iR9ZRHApvtwgWujmqwUbhv9mKs0jLOmeG4tn98GmU1/9wVOi02jrNqeggKg3c8dXz6pMmUHfOfmcq7WwYZg==", 2461 + "license": "MIT", 2462 + "dependencies": { 2463 + "@thisux/sveltednd": "^0.0.17" 2464 + }, 2465 + "peerDependencies": { 2466 + "svelte": "^5.0.0" 2467 + } 2468 + }, 2469 + "node_modules/@thisux/sveltednd/node_modules/@thisux/sveltednd/node_modules/@thisux/sveltednd": { 2470 + "version": "0.0.17", 2471 + "resolved": "https://registry.npmjs.org/@thisux/sveltednd/-/sveltednd-0.0.17.tgz", 2472 + "integrity": "sha512-lRninjw439phhA8xAHqCpMAX0hnwFMdbXW4M0XJgAdnGxeum+QsLiIC4P3HnkNXAygsVKUqxRcbS84CxDZ9hPw==", 2473 + "license": "MIT", 2474 + "dependencies": { 2475 + "@thisux/sveltednd": "^0.0.14" 2476 + }, 2477 + "peerDependencies": { 2478 + "svelte": "^5.0.0" 2479 + } 2480 + }, 2481 + "node_modules/@thisux/sveltednd/node_modules/@thisux/sveltednd/node_modules/@thisux/sveltednd/node_modules/@thisux/sveltednd": { 2482 + "version": "0.0.14", 2483 + "resolved": "https://registry.npmjs.org/@thisux/sveltednd/-/sveltednd-0.0.14.tgz", 2484 + "integrity": "sha512-Vbq69SU3HUomPg6oCXtb89OG89hka0YIkdaErYibn3waK7tYE66IcQxD/Fzg8YNW3EVsXoA9kc7kW5EUBCSQGg==" 2485 + }, 2486 + "node_modules/@threejs-kit/instanced-sprite-mesh": { 2487 + "version": "2.5.1", 2488 + "resolved": "https://registry.npmjs.org/@threejs-kit/instanced-sprite-mesh/-/instanced-sprite-mesh-2.5.1.tgz", 2489 + "integrity": "sha512-pmt1ALRhbHhCJQTj2FuthH6PeLIeaM4hOuS2JO3kWSwlnvx/9xuUkjFR3JOi/myMqsH7pSsLIROSaBxDfttjeA==", 2490 + "dependencies": { 2491 + "diet-sprite": "^0.0.1", 2492 + "earcut": "^2.2.4", 2493 + "maath": "^0.10.7", 2494 + "three-instanced-uniforms-mesh": "^0.52.4", 2495 + "troika-three-utils": "^0.52.4" 2496 + }, 2497 + "peerDependencies": { 2498 + "three": ">=0.170.0" 2499 + } 2500 + }, 2501 + "node_modules/@threlte/core": { 2502 + "version": "8.0.2", 2503 + "resolved": "https://registry.npmjs.org/@threlte/core/-/core-8.0.2.tgz", 2504 + "integrity": "sha512-Ttn27O2QICrTFsQI2XvK2Ypx4NWWQ+RaGeZWiMo83Y5ATqkM6F9HCYOYZXtZIaasz1dZJpHFvVj9wxCeNS3ftA==", 2505 + "license": "MIT", 2506 + "dependencies": { 2507 + "mitt": "^3.0.1" 2508 + }, 2509 + "peerDependencies": { 2510 + "svelte": ">=5", 2511 + "three": ">=0.155" 2512 + } 2513 + }, 2514 + "node_modules/@threlte/extras": { 2515 + "version": "9.1.3", 2516 + "resolved": "https://registry.npmjs.org/@threlte/extras/-/extras-9.1.3.tgz", 2517 + "integrity": "sha512-anQjEtzt6hMne0tgM9oGAkCf/UyM/gL8dvcmzmOeN+cnuBcduUEhX8JBnOWdZLnNlq4FC9AlAjY8YeVMS+IYiQ==", 2518 + "license": "MIT", 2519 + "dependencies": { 2520 + "@threejs-kit/instanced-sprite-mesh": "^2.5.1", 2521 + "camera-controls": "^2.10.1", 2522 + "three-mesh-bvh": "^0.9.0", 2523 + "three-perf": "github:jerzakm/three-perf#three-kit-threlte-fork", 2524 + "three-viewport-gizmo": "^2.2.0", 2525 + "troika-three-text": "^0.52.4" 2526 + }, 2527 + "peerDependencies": { 2528 + "svelte": ">=5", 2529 + "three": ">=0.155" 2530 + } 2531 + }, 2532 + "node_modules/@tweenjs/tween.js": { 2533 + "version": "23.1.3", 2534 + "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-23.1.3.tgz", 2535 + "integrity": "sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==", 2536 + "license": "MIT" 2537 + }, 2538 + "node_modules/@types/cookie": { 2539 + "version": "0.6.0", 2540 + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", 2541 + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", 2542 + "license": "MIT", 2543 + "peer": true 1288 2544 }, 1289 2545 "node_modules/@types/debug": { 1290 2546 "version": "4.1.12", ··· 1334 2590 "@types/unist": "*" 1335 2591 } 1336 2592 }, 2593 + "node_modules/@types/stats.js": { 2594 + "version": "0.17.3", 2595 + "resolved": "https://registry.npmjs.org/@types/stats.js/-/stats.js-0.17.3.tgz", 2596 + "integrity": "sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ==", 2597 + "license": "MIT" 2598 + }, 2599 + "node_modules/@types/three": { 2600 + "version": "0.173.0", 2601 + "resolved": "https://registry.npmjs.org/@types/three/-/three-0.173.0.tgz", 2602 + "integrity": "sha512-KtNjfI/CRB6JVKIVeZM1R3GYDX2wkoV2itNcQu2j4d7qkhjGOuB+s2oF6jl9mztycDLGMtrAnJQYxInC8Bb20A==", 2603 + "license": "MIT", 2604 + "dependencies": { 2605 + "@tweenjs/tween.js": "~23.1.3", 2606 + "@types/stats.js": "*", 2607 + "@types/webxr": "*", 2608 + "@webgpu/types": "*", 2609 + "fflate": "~0.8.2", 2610 + "meshoptimizer": "~0.18.1" 2611 + } 2612 + }, 1337 2613 "node_modules/@types/unist": { 1338 2614 "version": "3.0.3", 1339 2615 "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", 1340 2616 "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", 2617 + "license": "MIT" 2618 + }, 2619 + "node_modules/@types/webxr": { 2620 + "version": "0.5.22", 2621 + "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.22.tgz", 2622 + "integrity": "sha512-Vr6Stjv5jPRqH690f5I5GLjVk8GSsoQSYJ2FVd/3jJF7KaqfwPi3ehfBS96mlQ2kPCwZaX6U0rG2+NGHBKkA/A==", 1341 2623 "license": "MIT" 1342 2624 }, 1343 2625 "node_modules/@ungap/structured-clone": { ··· 1345 2627 "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", 1346 2628 "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", 1347 2629 "license": "ISC" 2630 + }, 2631 + "node_modules/@use-gesture/core": { 2632 + "version": "10.3.1", 2633 + "resolved": "https://registry.npmjs.org/@use-gesture/core/-/core-10.3.1.tgz", 2634 + "integrity": "sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==", 2635 + "license": "MIT" 2636 + }, 2637 + "node_modules/@use-gesture/vanilla": { 2638 + "version": "10.3.1", 2639 + "resolved": "https://registry.npmjs.org/@use-gesture/vanilla/-/vanilla-10.3.1.tgz", 2640 + "integrity": "sha512-lT4scGLu59ovA3zmtUonukAGcA0AdOOh+iwNDS05Bsu7Lq9aZToDHhI6D8Q2qvsVraovtsLLYwPrWdG/noMAKw==", 2641 + "license": "MIT", 2642 + "dependencies": { 2643 + "@use-gesture/core": "10.3.1" 2644 + } 2645 + }, 2646 + "node_modules/@webgpu/types": { 2647 + "version": "0.1.60", 2648 + "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.60.tgz", 2649 + "integrity": "sha512-8B/tdfRFKdrnejqmvq95ogp8tf52oZ51p3f4QD5m5Paey/qlX4Rhhy5Y8tgFMi7Ms70HzcMMw3EQjH/jdhTwlA==", 2650 + "license": "BSD-3-Clause" 2651 + }, 2652 + "node_modules/@zerodevx/svelte-img": { 2653 + "version": "2.1.2", 2654 + "resolved": "https://registry.npmjs.org/@zerodevx/svelte-img/-/svelte-img-2.1.2.tgz", 2655 + "integrity": "sha512-zPyD3U8hzpe+72QzADKvo8n+uUctD7RUCajgJ9ToX4Yqkov+f80/BYA35N4TfIXj0K7Qi00yPHexeTIzj8QqHA==", 2656 + "license": "ISC", 2657 + "dependencies": { 2658 + "vite-imagetools": "^6.2.9" 2659 + }, 2660 + "peerDependencies": { 2661 + "svelte": "^3.55.1 || ^4.0.0 || ^5.0.0" 2662 + } 1348 2663 }, 1349 2664 "node_modules/acorn": { 1350 2665 "version": "8.14.1", ··· 1356 2671 }, 1357 2672 "engines": { 1358 2673 "node": ">=0.4.0" 2674 + } 2675 + }, 2676 + "node_modules/adm-zip": { 2677 + "version": "0.5.16", 2678 + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz", 2679 + "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", 2680 + "license": "MIT", 2681 + "engines": { 2682 + "node": ">=12.0" 1359 2683 } 1360 2684 }, 1361 2685 "node_modules/ansi-align": { ··· 1432 2756 "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1433 2757 } 1434 2758 }, 2759 + "node_modules/any-promise": { 2760 + "version": "1.3.0", 2761 + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 2762 + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", 2763 + "license": "MIT" 2764 + }, 1435 2765 "node_modules/anymatch": { 1436 2766 "version": "3.1.3", 1437 2767 "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", ··· 1456 2786 "funding": { 1457 2787 "url": "https://github.com/sponsors/jonschlinkert" 1458 2788 } 2789 + }, 2790 + "node_modules/arg": { 2791 + "version": "5.0.2", 2792 + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 2793 + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", 2794 + "license": "MIT" 1459 2795 }, 1460 2796 "node_modules/argparse": { 1461 2797 "version": "2.0.1", ··· 1564 2900 "sharp": "^0.33.3" 1565 2901 } 1566 2902 }, 2903 + "node_modules/await-lock": { 2904 + "version": "2.2.2", 2905 + "resolved": "https://registry.npmjs.org/await-lock/-/await-lock-2.2.2.tgz", 2906 + "integrity": "sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==", 2907 + "license": "MIT" 2908 + }, 1567 2909 "node_modules/axobject-query": { 1568 2910 "version": "4.1.0", 1569 2911 "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", ··· 1582 2924 "type": "github", 1583 2925 "url": "https://github.com/sponsors/wooorm" 1584 2926 } 2927 + }, 2928 + "node_modules/balanced-match": { 2929 + "version": "1.0.2", 2930 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 2931 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 2932 + "license": "MIT" 1585 2933 }, 1586 2934 "node_modules/base-64": { 1587 2935 "version": "1.0.0", ··· 1609 2957 ], 1610 2958 "license": "MIT" 1611 2959 }, 2960 + "node_modules/bidi-js": { 2961 + "version": "1.0.3", 2962 + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", 2963 + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", 2964 + "license": "MIT", 2965 + "dependencies": { 2966 + "require-from-string": "^2.0.2" 2967 + } 2968 + }, 2969 + "node_modules/binary-extensions": { 2970 + "version": "2.3.0", 2971 + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", 2972 + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", 2973 + "license": "MIT", 2974 + "engines": { 2975 + "node": ">=8" 2976 + }, 2977 + "funding": { 2978 + "url": "https://github.com/sponsors/sindresorhus" 2979 + } 2980 + }, 2981 + "node_modules/bits-ui": { 2982 + "version": "1.3.19", 2983 + "resolved": "https://registry.npmjs.org/bits-ui/-/bits-ui-1.3.19.tgz", 2984 + "integrity": "sha512-2blb6dkgedHUsDXqCjvmtUi4Advgd9MhaJDT8r7bEWDzHI8HGsOoYsLeh8CxpEWWEYPrlGN+7k+kpxRhIDdFrQ==", 2985 + "license": "MIT", 2986 + "dependencies": { 2987 + "@floating-ui/core": "^1.6.4", 2988 + "@floating-ui/dom": "^1.6.7", 2989 + "@internationalized/date": "^3.5.6", 2990 + "esm-env": "^1.1.2", 2991 + "runed": "^0.23.2", 2992 + "svelte-toolbelt": "^0.7.1", 2993 + "tabbable": "^6.2.0" 2994 + }, 2995 + "engines": { 2996 + "node": ">=18", 2997 + "pnpm": ">=8.7.0" 2998 + }, 2999 + "funding": { 3000 + "url": "https://github.com/sponsors/huntabyte" 3001 + }, 3002 + "peerDependencies": { 3003 + "svelte": "^5.11.0" 3004 + } 3005 + }, 1612 3006 "node_modules/blob-to-buffer": { 1613 3007 "version": "1.2.9", 1614 3008 "resolved": "https://registry.npmjs.org/blob-to-buffer/-/blob-to-buffer-1.2.9.tgz", ··· 1628 3022 } 1629 3023 ], 1630 3024 "license": "MIT" 3025 + }, 3026 + "node_modules/boolbase": { 3027 + "version": "1.0.0", 3028 + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 3029 + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", 3030 + "license": "ISC" 1631 3031 }, 1632 3032 "node_modules/boxen": { 1633 3033 "version": "8.0.1", ··· 1651 3051 "url": "https://github.com/sponsors/sindresorhus" 1652 3052 } 1653 3053 }, 3054 + "node_modules/brace-expansion": { 3055 + "version": "2.0.1", 3056 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 3057 + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 3058 + "license": "MIT", 3059 + "dependencies": { 3060 + "balanced-match": "^1.0.0" 3061 + } 3062 + }, 3063 + "node_modules/braces": { 3064 + "version": "3.0.3", 3065 + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 3066 + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 3067 + "license": "MIT", 3068 + "dependencies": { 3069 + "fill-range": "^7.1.1" 3070 + }, 3071 + "engines": { 3072 + "node": ">=8" 3073 + } 3074 + }, 1654 3075 "node_modules/brotli": { 1655 3076 "version": "1.3.3", 1656 3077 "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", ··· 1670 3091 }, 1671 3092 "funding": { 1672 3093 "url": "https://github.com/sponsors/sindresorhus" 3094 + } 3095 + }, 3096 + "node_modules/camelcase-css": { 3097 + "version": "2.0.1", 3098 + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 3099 + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", 3100 + "license": "MIT", 3101 + "engines": { 3102 + "node": ">= 6" 3103 + } 3104 + }, 3105 + "node_modules/camera-controls": { 3106 + "version": "2.10.1", 3107 + "resolved": "https://registry.npmjs.org/camera-controls/-/camera-controls-2.10.1.tgz", 3108 + "integrity": "sha512-KnaKdcvkBJ1Irbrzl8XD6WtZltkRjp869Jx8c0ujs9K+9WD+1D7ryBsCiVqJYUqt6i/HR5FxT7RLASieUD+Q5w==", 3109 + "license": "MIT", 3110 + "peerDependencies": { 3111 + "three": ">=0.126.1" 1673 3112 } 1674 3113 }, 1675 3114 "node_modules/ccount": { ··· 1724 3163 "url": "https://github.com/sponsors/wooorm" 1725 3164 } 1726 3165 }, 3166 + "node_modules/cheerio": { 3167 + "version": "1.0.0", 3168 + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0.tgz", 3169 + "integrity": "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==", 3170 + "license": "MIT", 3171 + "dependencies": { 3172 + "cheerio-select": "^2.1.0", 3173 + "dom-serializer": "^2.0.0", 3174 + "domhandler": "^5.0.3", 3175 + "domutils": "^3.1.0", 3176 + "encoding-sniffer": "^0.2.0", 3177 + "htmlparser2": "^9.1.0", 3178 + "parse5": "^7.1.2", 3179 + "parse5-htmlparser2-tree-adapter": "^7.0.0", 3180 + "parse5-parser-stream": "^7.1.2", 3181 + "undici": "^6.19.5", 3182 + "whatwg-mimetype": "^4.0.0" 3183 + }, 3184 + "engines": { 3185 + "node": ">=18.17" 3186 + }, 3187 + "funding": { 3188 + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" 3189 + } 3190 + }, 3191 + "node_modules/cheerio-select": { 3192 + "version": "2.1.0", 3193 + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", 3194 + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", 3195 + "license": "BSD-2-Clause", 3196 + "dependencies": { 3197 + "boolbase": "^1.0.0", 3198 + "css-select": "^5.1.0", 3199 + "css-what": "^6.1.0", 3200 + "domelementtype": "^2.3.0", 3201 + "domhandler": "^5.0.3", 3202 + "domutils": "^3.0.1" 3203 + }, 3204 + "funding": { 3205 + "url": "https://github.com/sponsors/fb55" 3206 + } 3207 + }, 1727 3208 "node_modules/chokidar": { 1728 3209 "version": "4.0.3", 1729 3210 "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", ··· 1737 3218 }, 1738 3219 "funding": { 1739 3220 "url": "https://paulmillr.com/funding/" 3221 + } 3222 + }, 3223 + "node_modules/chownr": { 3224 + "version": "3.0.0", 3225 + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", 3226 + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", 3227 + "license": "BlueOak-1.0.0", 3228 + "engines": { 3229 + "node": ">=18" 1740 3230 } 1741 3231 }, 1742 3232 "node_modules/ci-info": { ··· 1789 3279 "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", 1790 3280 "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", 1791 3281 "license": "MIT", 1792 - "optional": true, 1793 3282 "dependencies": { 1794 3283 "color-convert": "^2.0.1", 1795 3284 "color-string": "^1.9.0" ··· 1803 3292 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1804 3293 "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1805 3294 "license": "MIT", 1806 - "optional": true, 1807 3295 "dependencies": { 1808 3296 "color-name": "~1.1.4" 1809 3297 }, ··· 1815 3303 "version": "1.1.4", 1816 3304 "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1817 3305 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1818 - "license": "MIT", 1819 - "optional": true 3306 + "license": "MIT" 1820 3307 }, 1821 3308 "node_modules/color-string": { 1822 3309 "version": "1.9.1", 1823 3310 "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", 1824 3311 "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", 1825 3312 "license": "MIT", 1826 - "optional": true, 1827 3313 "dependencies": { 1828 3314 "color-name": "^1.0.0", 1829 3315 "simple-swizzle": "^0.2.2" ··· 1837 3323 "funding": { 1838 3324 "type": "github", 1839 3325 "url": "https://github.com/sponsors/wooorm" 3326 + } 3327 + }, 3328 + "node_modules/commander": { 3329 + "version": "13.1.0", 3330 + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", 3331 + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", 3332 + "license": "MIT", 3333 + "engines": { 3334 + "node": ">=18" 1840 3335 } 1841 3336 }, 1842 3337 "node_modules/common-ancestor-path": { ··· 1860 3355 "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", 1861 3356 "license": "MIT" 1862 3357 }, 3358 + "node_modules/core-js": { 3359 + "version": "3.41.0", 3360 + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.41.0.tgz", 3361 + "integrity": "sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==", 3362 + "hasInstallScript": true, 3363 + "license": "MIT", 3364 + "funding": { 3365 + "type": "opencollective", 3366 + "url": "https://opencollective.com/core-js" 3367 + } 3368 + }, 1863 3369 "node_modules/cross-fetch": { 1864 3370 "version": "3.2.0", 1865 3371 "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", ··· 1869 3375 "node-fetch": "^2.7.0" 1870 3376 } 1871 3377 }, 3378 + "node_modules/cross-spawn": { 3379 + "version": "7.0.6", 3380 + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 3381 + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 3382 + "license": "MIT", 3383 + "dependencies": { 3384 + "path-key": "^3.1.0", 3385 + "shebang-command": "^2.0.0", 3386 + "which": "^2.0.1" 3387 + }, 3388 + "engines": { 3389 + "node": ">= 8" 3390 + } 3391 + }, 1872 3392 "node_modules/crossws": { 1873 3393 "version": "0.3.4", 1874 3394 "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.4.tgz", ··· 1876 3396 "license": "MIT", 1877 3397 "dependencies": { 1878 3398 "uncrypto": "^0.1.3" 3399 + } 3400 + }, 3401 + "node_modules/css-select": { 3402 + "version": "5.1.0", 3403 + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", 3404 + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", 3405 + "license": "BSD-2-Clause", 3406 + "dependencies": { 3407 + "boolbase": "^1.0.0", 3408 + "css-what": "^6.1.0", 3409 + "domhandler": "^5.0.2", 3410 + "domutils": "^3.0.1", 3411 + "nth-check": "^2.0.1" 3412 + }, 3413 + "funding": { 3414 + "url": "https://github.com/sponsors/fb55" 1879 3415 } 1880 3416 }, 1881 3417 "node_modules/css-tree": { ··· 1891 3427 "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" 1892 3428 } 1893 3429 }, 3430 + "node_modules/css-what": { 3431 + "version": "6.1.0", 3432 + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", 3433 + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", 3434 + "license": "BSD-2-Clause", 3435 + "engines": { 3436 + "node": ">= 6" 3437 + }, 3438 + "funding": { 3439 + "url": "https://github.com/sponsors/fb55" 3440 + } 3441 + }, 1894 3442 "node_modules/cssesc": { 1895 3443 "version": "3.0.0", 1896 3444 "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", ··· 1901 3449 }, 1902 3450 "engines": { 1903 3451 "node": ">=4" 3452 + } 3453 + }, 3454 + "node_modules/culori": { 3455 + "version": "4.0.1", 3456 + "resolved": "https://registry.npmjs.org/culori/-/culori-4.0.1.tgz", 3457 + "integrity": "sha512-LSnjA6HuIUOlkfKVbzi2OlToZE8OjFi667JWN9qNymXVXzGDmvuP60SSgC+e92sd7B7158f7Fy3Mb6rXS5EDPw==", 3458 + "license": "MIT", 3459 + "engines": { 3460 + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 3461 + } 3462 + }, 3463 + "node_modules/custom-event-polyfill": { 3464 + "version": "1.0.7", 3465 + "resolved": "https://registry.npmjs.org/custom-event-polyfill/-/custom-event-polyfill-1.0.7.tgz", 3466 + "integrity": "sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w==", 3467 + "license": "MIT" 3468 + }, 3469 + "node_modules/d3-array": { 3470 + "version": "3.2.4", 3471 + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", 3472 + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", 3473 + "license": "ISC", 3474 + "dependencies": { 3475 + "internmap": "1 - 2" 3476 + }, 3477 + "engines": { 3478 + "node": ">=12" 3479 + } 3480 + }, 3481 + "node_modules/d3-color": { 3482 + "version": "3.1.0", 3483 + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", 3484 + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", 3485 + "license": "ISC", 3486 + "engines": { 3487 + "node": ">=12" 3488 + } 3489 + }, 3490 + "node_modules/d3-delaunay": { 3491 + "version": "6.0.4", 3492 + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", 3493 + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", 3494 + "license": "ISC", 3495 + "dependencies": { 3496 + "delaunator": "5" 3497 + }, 3498 + "engines": { 3499 + "node": ">=12" 3500 + } 3501 + }, 3502 + "node_modules/d3-dispatch": { 3503 + "version": "3.0.1", 3504 + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", 3505 + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", 3506 + "license": "ISC", 3507 + "engines": { 3508 + "node": ">=12" 3509 + } 3510 + }, 3511 + "node_modules/d3-dsv": { 3512 + "version": "3.0.1", 3513 + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", 3514 + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", 3515 + "license": "ISC", 3516 + "dependencies": { 3517 + "commander": "7", 3518 + "iconv-lite": "0.6", 3519 + "rw": "1" 3520 + }, 3521 + "bin": { 3522 + "csv2json": "bin/dsv2json.js", 3523 + "csv2tsv": "bin/dsv2dsv.js", 3524 + "dsv2dsv": "bin/dsv2dsv.js", 3525 + "dsv2json": "bin/dsv2json.js", 3526 + "json2csv": "bin/json2dsv.js", 3527 + "json2dsv": "bin/json2dsv.js", 3528 + "json2tsv": "bin/json2dsv.js", 3529 + "tsv2csv": "bin/dsv2dsv.js", 3530 + "tsv2json": "bin/dsv2json.js" 3531 + }, 3532 + "engines": { 3533 + "node": ">=12" 3534 + } 3535 + }, 3536 + "node_modules/d3-dsv/node_modules/commander": { 3537 + "version": "7.2.0", 3538 + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", 3539 + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", 3540 + "license": "MIT", 3541 + "engines": { 3542 + "node": ">= 10" 3543 + } 3544 + }, 3545 + "node_modules/d3-force": { 3546 + "version": "3.0.0", 3547 + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", 3548 + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", 3549 + "license": "ISC", 3550 + "dependencies": { 3551 + "d3-dispatch": "1 - 3", 3552 + "d3-quadtree": "1 - 3", 3553 + "d3-timer": "1 - 3" 3554 + }, 3555 + "engines": { 3556 + "node": ">=12" 3557 + } 3558 + }, 3559 + "node_modules/d3-format": { 3560 + "version": "3.1.0", 3561 + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", 3562 + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", 3563 + "license": "ISC", 3564 + "engines": { 3565 + "node": ">=12" 3566 + } 3567 + }, 3568 + "node_modules/d3-geo": { 3569 + "version": "3.1.1", 3570 + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", 3571 + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", 3572 + "license": "ISC", 3573 + "dependencies": { 3574 + "d3-array": "2.5.0 - 3" 3575 + }, 3576 + "engines": { 3577 + "node": ">=12" 3578 + } 3579 + }, 3580 + "node_modules/d3-geo-voronoi": { 3581 + "version": "2.1.0", 3582 + "resolved": "https://registry.npmjs.org/d3-geo-voronoi/-/d3-geo-voronoi-2.1.0.tgz", 3583 + "integrity": "sha512-kqE4yYuOjPbKdBXG0xztCacPwkVSK2REF1opSNrnqqtXJmNcM++UbwQ8SxvwP6IQTj9RvIjjK4qeiVsEfj0Z2Q==", 3584 + "license": "ISC", 3585 + "dependencies": { 3586 + "d3-array": "3", 3587 + "d3-delaunay": "6", 3588 + "d3-geo": "3", 3589 + "d3-tricontour": "1" 3590 + }, 3591 + "engines": { 3592 + "node": ">=12" 3593 + } 3594 + }, 3595 + "node_modules/d3-hierarchy": { 3596 + "version": "3.1.2", 3597 + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", 3598 + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", 3599 + "license": "ISC", 3600 + "engines": { 3601 + "node": ">=12" 3602 + } 3603 + }, 3604 + "node_modules/d3-interpolate": { 3605 + "version": "3.0.1", 3606 + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", 3607 + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", 3608 + "license": "ISC", 3609 + "dependencies": { 3610 + "d3-color": "1 - 3" 3611 + }, 3612 + "engines": { 3613 + "node": ">=12" 3614 + } 3615 + }, 3616 + "node_modules/d3-interpolate-path": { 3617 + "version": "2.3.0", 3618 + "resolved": "https://registry.npmjs.org/d3-interpolate-path/-/d3-interpolate-path-2.3.0.tgz", 3619 + "integrity": "sha512-tZYtGXxBmbgHsIc9Wms6LS5u4w6KbP8C09a4/ZYc4KLMYYqub57rRBUgpUr2CIarIrJEpdAWWxWQvofgaMpbKQ==", 3620 + "license": "BSD-3-Clause" 3621 + }, 3622 + "node_modules/d3-path": { 3623 + "version": "3.1.0", 3624 + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", 3625 + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", 3626 + "license": "ISC", 3627 + "engines": { 3628 + "node": ">=12" 3629 + } 3630 + }, 3631 + "node_modules/d3-quadtree": { 3632 + "version": "3.0.1", 3633 + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", 3634 + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", 3635 + "license": "ISC", 3636 + "engines": { 3637 + "node": ">=12" 3638 + } 3639 + }, 3640 + "node_modules/d3-random": { 3641 + "version": "3.0.1", 3642 + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", 3643 + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", 3644 + "license": "ISC", 3645 + "engines": { 3646 + "node": ">=12" 3647 + } 3648 + }, 3649 + "node_modules/d3-sankey": { 3650 + "version": "0.12.3", 3651 + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", 3652 + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", 3653 + "license": "BSD-3-Clause", 3654 + "dependencies": { 3655 + "d3-array": "1 - 2", 3656 + "d3-shape": "^1.2.0" 3657 + } 3658 + }, 3659 + "node_modules/d3-sankey/node_modules/d3-array": { 3660 + "version": "2.12.1", 3661 + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", 3662 + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", 3663 + "license": "BSD-3-Clause", 3664 + "dependencies": { 3665 + "internmap": "^1.0.0" 3666 + } 3667 + }, 3668 + "node_modules/d3-sankey/node_modules/d3-path": { 3669 + "version": "1.0.9", 3670 + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", 3671 + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", 3672 + "license": "BSD-3-Clause" 3673 + }, 3674 + "node_modules/d3-sankey/node_modules/d3-shape": { 3675 + "version": "1.3.7", 3676 + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", 3677 + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", 3678 + "license": "BSD-3-Clause", 3679 + "dependencies": { 3680 + "d3-path": "1" 3681 + } 3682 + }, 3683 + "node_modules/d3-sankey/node_modules/internmap": { 3684 + "version": "1.0.1", 3685 + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", 3686 + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==", 3687 + "license": "ISC" 3688 + }, 3689 + "node_modules/d3-scale": { 3690 + "version": "4.0.2", 3691 + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", 3692 + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", 3693 + "license": "ISC", 3694 + "dependencies": { 3695 + "d3-array": "2.10.0 - 3", 3696 + "d3-format": "1 - 3", 3697 + "d3-interpolate": "1.2.0 - 3", 3698 + "d3-time": "2.1.1 - 3", 3699 + "d3-time-format": "2 - 4" 3700 + }, 3701 + "engines": { 3702 + "node": ">=12" 3703 + } 3704 + }, 3705 + "node_modules/d3-scale-chromatic": { 3706 + "version": "3.1.0", 3707 + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", 3708 + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", 3709 + "license": "ISC", 3710 + "dependencies": { 3711 + "d3-color": "1 - 3", 3712 + "d3-interpolate": "1 - 3" 3713 + }, 3714 + "engines": { 3715 + "node": ">=12" 3716 + } 3717 + }, 3718 + "node_modules/d3-shape": { 3719 + "version": "3.2.0", 3720 + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", 3721 + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", 3722 + "license": "ISC", 3723 + "dependencies": { 3724 + "d3-path": "^3.1.0" 3725 + }, 3726 + "engines": { 3727 + "node": ">=12" 3728 + } 3729 + }, 3730 + "node_modules/d3-tile": { 3731 + "version": "1.0.0", 3732 + "resolved": "https://registry.npmjs.org/d3-tile/-/d3-tile-1.0.0.tgz", 3733 + "integrity": "sha512-79fnTKpPMPDS5xQ0xuS9ir0165NEwwkFpe/DSOmc2Gl9ldYzKKRDWogmTTE8wAJ8NA7PMapNfEcyKhI9Lxdu5Q==", 3734 + "license": "BSD-3-Clause" 3735 + }, 3736 + "node_modules/d3-time": { 3737 + "version": "3.1.0", 3738 + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", 3739 + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", 3740 + "license": "ISC", 3741 + "dependencies": { 3742 + "d3-array": "2 - 3" 3743 + }, 3744 + "engines": { 3745 + "node": ">=12" 3746 + } 3747 + }, 3748 + "node_modules/d3-time-format": { 3749 + "version": "4.1.0", 3750 + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", 3751 + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", 3752 + "license": "ISC", 3753 + "dependencies": { 3754 + "d3-time": "1 - 3" 3755 + }, 3756 + "engines": { 3757 + "node": ">=12" 3758 + } 3759 + }, 3760 + "node_modules/d3-timer": { 3761 + "version": "3.0.1", 3762 + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", 3763 + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", 3764 + "license": "ISC", 3765 + "engines": { 3766 + "node": ">=12" 3767 + } 3768 + }, 3769 + "node_modules/d3-tricontour": { 3770 + "version": "1.0.2", 3771 + "resolved": "https://registry.npmjs.org/d3-tricontour/-/d3-tricontour-1.0.2.tgz", 3772 + "integrity": "sha512-HIRxHzHagPtUPNabjOlfcyismJYIsc+Xlq4mlsts4e8eAcwyq9Tgk/sYdyhlBpQ0MHwVquc/8j+e29YjXnmxeA==", 3773 + "license": "ISC", 3774 + "dependencies": { 3775 + "d3-delaunay": "6", 3776 + "d3-scale": "4" 3777 + }, 3778 + "engines": { 3779 + "node": ">=12" 3780 + } 3781 + }, 3782 + "node_modules/data-uri-to-buffer": { 3783 + "version": "4.0.1", 3784 + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", 3785 + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", 3786 + "license": "MIT", 3787 + "engines": { 3788 + "node": ">= 12" 3789 + } 3790 + }, 3791 + "node_modules/date-fns": { 3792 + "version": "4.1.0", 3793 + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", 3794 + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", 3795 + "license": "MIT", 3796 + "funding": { 3797 + "type": "github", 3798 + "url": "https://github.com/sponsors/kossnocorp" 1904 3799 } 1905 3800 }, 1906 3801 "node_modules/debug": { ··· 1933 3828 "url": "https://github.com/sponsors/wooorm" 1934 3829 } 1935 3830 }, 3831 + "node_modules/dedent-js": { 3832 + "version": "1.0.1", 3833 + "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", 3834 + "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==", 3835 + "license": "MIT" 3836 + }, 3837 + "node_modules/deepmerge": { 3838 + "version": "4.3.1", 3839 + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", 3840 + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", 3841 + "license": "MIT", 3842 + "engines": { 3843 + "node": ">=0.10.0" 3844 + } 3845 + }, 1936 3846 "node_modules/defu": { 1937 3847 "version": "6.1.4", 1938 3848 "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", 1939 3849 "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", 1940 3850 "license": "MIT" 3851 + }, 3852 + "node_modules/delaunator": { 3853 + "version": "5.0.1", 3854 + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", 3855 + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", 3856 + "license": "ISC", 3857 + "dependencies": { 3858 + "robust-predicates": "^3.0.2" 3859 + } 1941 3860 }, 1942 3861 "node_modules/dequal": { 1943 3862 "version": "2.0.3", ··· 1959 3878 "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", 1960 3879 "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", 1961 3880 "license": "Apache-2.0", 1962 - "optional": true, 1963 3881 "engines": { 1964 3882 "node": ">=8" 1965 3883 } ··· 2001 3919 "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", 2002 3920 "license": "MIT" 2003 3921 }, 3922 + "node_modules/didyoumean": { 3923 + "version": "1.2.2", 3924 + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", 3925 + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", 3926 + "license": "Apache-2.0" 3927 + }, 3928 + "node_modules/diet-sprite": { 3929 + "version": "0.0.1", 3930 + "resolved": "https://registry.npmjs.org/diet-sprite/-/diet-sprite-0.0.1.tgz", 3931 + "integrity": "sha512-zSHI2WDAn1wJqJYxcmjWfJv3Iw8oL9reQIbEyx2x2/EZ4/qmUTIo8/5qOCurnAcq61EwtJJaZ0XTy2NRYqpB5A==", 3932 + "license": "ISC" 3933 + }, 2004 3934 "node_modules/diff": { 2005 3935 "version": "5.2.0", 2006 3936 "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", ··· 2016 3946 "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", 2017 3947 "license": "MIT" 2018 3948 }, 3949 + "node_modules/dom-serializer": { 3950 + "version": "2.0.0", 3951 + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", 3952 + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", 3953 + "license": "MIT", 3954 + "dependencies": { 3955 + "domelementtype": "^2.3.0", 3956 + "domhandler": "^5.0.2", 3957 + "entities": "^4.2.0" 3958 + }, 3959 + "funding": { 3960 + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" 3961 + } 3962 + }, 3963 + "node_modules/domelementtype": { 3964 + "version": "2.3.0", 3965 + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", 3966 + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", 3967 + "funding": [ 3968 + { 3969 + "type": "github", 3970 + "url": "https://github.com/sponsors/fb55" 3971 + } 3972 + ], 3973 + "license": "BSD-2-Clause" 3974 + }, 3975 + "node_modules/domhandler": { 3976 + "version": "5.0.3", 3977 + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", 3978 + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", 3979 + "license": "BSD-2-Clause", 3980 + "dependencies": { 3981 + "domelementtype": "^2.3.0" 3982 + }, 3983 + "engines": { 3984 + "node": ">= 4" 3985 + }, 3986 + "funding": { 3987 + "url": "https://github.com/fb55/domhandler?sponsor=1" 3988 + } 3989 + }, 3990 + "node_modules/domutils": { 3991 + "version": "3.2.2", 3992 + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", 3993 + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", 3994 + "license": "BSD-2-Clause", 3995 + "dependencies": { 3996 + "dom-serializer": "^2.0.0", 3997 + "domelementtype": "^2.3.0", 3998 + "domhandler": "^5.0.3" 3999 + }, 4000 + "funding": { 4001 + "url": "https://github.com/fb55/domutils?sponsor=1" 4002 + } 4003 + }, 2019 4004 "node_modules/dset": { 2020 4005 "version": "3.1.4", 2021 4006 "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", ··· 2024 4009 "engines": { 2025 4010 "node": ">=4" 2026 4011 } 4012 + }, 4013 + "node_modules/earcut": { 4014 + "version": "2.2.4", 4015 + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", 4016 + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==", 4017 + "license": "ISC" 4018 + }, 4019 + "node_modules/eastasianwidth": { 4020 + "version": "0.2.0", 4021 + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 4022 + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 4023 + "license": "MIT" 2027 4024 }, 2028 4025 "node_modules/emoji-regex": { 2029 4026 "version": "10.4.0", ··· 2036 4033 "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", 2037 4034 "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==", 2038 4035 "license": "MIT" 4036 + }, 4037 + "node_modules/encoding-sniffer": { 4038 + "version": "0.2.0", 4039 + "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz", 4040 + "integrity": "sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==", 4041 + "license": "MIT", 4042 + "dependencies": { 4043 + "iconv-lite": "^0.6.3", 4044 + "whatwg-encoding": "^3.1.1" 4045 + }, 4046 + "funding": { 4047 + "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" 4048 + } 4049 + }, 4050 + "node_modules/enhanced-resolve": { 4051 + "version": "5.18.1", 4052 + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", 4053 + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", 4054 + "license": "MIT", 4055 + "dependencies": { 4056 + "graceful-fs": "^4.2.4", 4057 + "tapable": "^2.2.0" 4058 + }, 4059 + "engines": { 4060 + "node": ">=10.13.0" 4061 + } 2039 4062 }, 2040 4063 "node_modules/entities": { 2041 4064 "version": "4.5.0", ··· 2107 4130 "url": "https://github.com/sponsors/sindresorhus" 2108 4131 } 2109 4132 }, 4133 + "node_modules/esm-env": { 4134 + "version": "1.2.2", 4135 + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", 4136 + "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", 4137 + "license": "MIT" 4138 + }, 4139 + "node_modules/esrap": { 4140 + "version": "1.4.6", 4141 + "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.4.6.tgz", 4142 + "integrity": "sha512-F/D2mADJ9SHY3IwksD4DAXjTt7qt7GWUf3/8RhCNWmC/67tyb55dpimHmy7EplakFaflV0R/PC+fdSPqrRHAQw==", 4143 + "license": "MIT", 4144 + "dependencies": { 4145 + "@jridgewell/sourcemap-codec": "^1.4.15" 4146 + } 4147 + }, 2110 4148 "node_modules/estree-walker": { 2111 4149 "version": "3.0.3", 2112 4150 "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", ··· 2134 4172 "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 2135 4173 "license": "MIT" 2136 4174 }, 4175 + "node_modules/fast-glob": { 4176 + "version": "3.3.3", 4177 + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", 4178 + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", 4179 + "license": "MIT", 4180 + "dependencies": { 4181 + "@nodelib/fs.stat": "^2.0.2", 4182 + "@nodelib/fs.walk": "^1.2.3", 4183 + "glob-parent": "^5.1.2", 4184 + "merge2": "^1.3.0", 4185 + "micromatch": "^4.0.8" 4186 + }, 4187 + "engines": { 4188 + "node": ">=8.6.0" 4189 + } 4190 + }, 4191 + "node_modules/fast-glob/node_modules/glob-parent": { 4192 + "version": "5.1.2", 4193 + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 4194 + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 4195 + "license": "ISC", 4196 + "dependencies": { 4197 + "is-glob": "^4.0.1" 4198 + }, 4199 + "engines": { 4200 + "node": ">= 6" 4201 + } 4202 + }, 4203 + "node_modules/fastq": { 4204 + "version": "1.19.1", 4205 + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", 4206 + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", 4207 + "license": "ISC", 4208 + "dependencies": { 4209 + "reusify": "^1.0.4" 4210 + } 4211 + }, 2137 4212 "node_modules/fdir": { 2138 4213 "version": "6.4.4", 2139 4214 "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", ··· 2146 4221 "picomatch": { 2147 4222 "optional": true 2148 4223 } 4224 + } 4225 + }, 4226 + "node_modules/fetch-blob": { 4227 + "version": "3.2.0", 4228 + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", 4229 + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", 4230 + "funding": [ 4231 + { 4232 + "type": "github", 4233 + "url": "https://github.com/sponsors/jimmywarting" 4234 + }, 4235 + { 4236 + "type": "paypal", 4237 + "url": "https://paypal.me/jimmywarting" 4238 + } 4239 + ], 4240 + "license": "MIT", 4241 + "dependencies": { 4242 + "node-domexception": "^1.0.0", 4243 + "web-streams-polyfill": "^3.0.3" 4244 + }, 4245 + "engines": { 4246 + "node": "^12.20 || >= 14.13" 4247 + } 4248 + }, 4249 + "node_modules/fflate": { 4250 + "version": "0.8.2", 4251 + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", 4252 + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", 4253 + "license": "MIT" 4254 + }, 4255 + "node_modules/fill-range": { 4256 + "version": "7.1.1", 4257 + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 4258 + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 4259 + "license": "MIT", 4260 + "dependencies": { 4261 + "to-regex-range": "^5.0.1" 4262 + }, 4263 + "engines": { 4264 + "node": ">=8" 2149 4265 } 2150 4266 }, 2151 4267 "node_modules/flattie": { ··· 2174 4290 "unicode-trie": "^2.0.0" 2175 4291 } 2176 4292 }, 4293 + "node_modules/foreground-child": { 4294 + "version": "3.3.1", 4295 + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", 4296 + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", 4297 + "license": "ISC", 4298 + "dependencies": { 4299 + "cross-spawn": "^7.0.6", 4300 + "signal-exit": "^4.0.1" 4301 + }, 4302 + "engines": { 4303 + "node": ">=14" 4304 + }, 4305 + "funding": { 4306 + "url": "https://github.com/sponsors/isaacs" 4307 + } 4308 + }, 4309 + "node_modules/formdata-polyfill": { 4310 + "version": "4.0.10", 4311 + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", 4312 + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", 4313 + "license": "MIT", 4314 + "dependencies": { 4315 + "fetch-blob": "^3.1.2" 4316 + }, 4317 + "engines": { 4318 + "node": ">=12.20.0" 4319 + } 4320 + }, 2177 4321 "node_modules/fsevents": { 2178 4322 "version": "2.3.3", 2179 4323 "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", ··· 2186 4330 ], 2187 4331 "engines": { 2188 4332 "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 4333 + } 4334 + }, 4335 + "node_modules/fuchs": { 4336 + "version": "0.0.28", 4337 + "resolved": "https://registry.npmjs.org/fuchs/-/fuchs-0.0.28.tgz", 4338 + "integrity": "sha512-Lal6tu8+kTOtI84u2ZNm4u7UIG3G01npO3J2MAWho1I8ubu0x27fg57nQ6k1PP/Orwv7Y78co+E74CYvbMzBMA==", 4339 + "license": "MIT", 4340 + "dependencies": { 4341 + "@atproto/api": "^0.14.7", 4342 + "@clack/prompts": "^0.10.0", 4343 + "@number-flow/svelte": "^0.3.3", 4344 + "@sveltejs/adapter-static": "^3.0.8", 4345 + "@texel/color": "^1.1.9", 4346 + "@thisux/sveltednd": "^0.0.20", 4347 + "@threlte/core": "^8.0.1", 4348 + "@threlte/extras": "^9.0.1", 4349 + "@types/three": "^0.173.0", 4350 + "@use-gesture/vanilla": "^10.3.1", 4351 + "@zerodevx/svelte-img": "^2.1.2", 4352 + "adm-zip": "^0.5.16", 4353 + "bits-ui": "^1.3.4", 4354 + "cheerio": "^1.0.0", 4355 + "commander": "^13.1.0", 4356 + "hls.js": "^1.5.20", 4357 + "layerchart": "^1.0.0", 4358 + "node-fetch": "^3.3.2", 4359 + "paneforge": "^0.0.6", 4360 + "pdfjs-dist": "^5.0.375", 4361 + "picocolors": "^1.1.1", 4362 + "plyr": "^3.7.8", 4363 + "simplex-noise": "^4.0.3", 4364 + "svelte-sonner": "^0.3.28", 4365 + "tailwind-variants": "^0.3.1", 4366 + "tailwindcss-animate": "^1.0.7", 4367 + "tar": "^7.4.3", 4368 + "three": "^0.173.0", 4369 + "vite-plugin-glsl": "^1.3.1", 4370 + "wavesurfer.js": "^7.9.1" 4371 + }, 4372 + "bin": { 4373 + "fuchs": "dist/cli.js" 4374 + }, 4375 + "peerDependencies": { 4376 + "@sveltejs/kit": "^2.16.0", 4377 + "svelte": "^5.0.0" 4378 + } 4379 + }, 4380 + "node_modules/fuchs/node_modules/@atproto/api": { 4381 + "version": "0.14.22", 4382 + "resolved": "https://registry.npmjs.org/@atproto/api/-/api-0.14.22.tgz", 4383 + "integrity": "sha512-ziXPau+sUdFovObSnsoN7JbOmUw1C5e5L28/yXf3P8vbEnSS3HVVGD1jYcscBYY34xQqi4bVDpwMYx/4yRsTuQ==", 4384 + "license": "MIT", 4385 + "dependencies": { 4386 + "@atproto/common-web": "^0.4.1", 4387 + "@atproto/lexicon": "^0.4.10", 4388 + "@atproto/syntax": "^0.4.0", 4389 + "@atproto/xrpc": "^0.6.12", 4390 + "await-lock": "^2.2.2", 4391 + "multiformats": "^9.9.0", 4392 + "tlds": "^1.234.0", 4393 + "zod": "^3.23.8" 4394 + } 4395 + }, 4396 + "node_modules/fuchs/node_modules/node-fetch": { 4397 + "version": "3.3.2", 4398 + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", 4399 + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", 4400 + "license": "MIT", 4401 + "dependencies": { 4402 + "data-uri-to-buffer": "^4.0.0", 4403 + "fetch-blob": "^3.1.4", 4404 + "formdata-polyfill": "^4.0.10" 4405 + }, 4406 + "engines": { 4407 + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 4408 + }, 4409 + "funding": { 4410 + "type": "opencollective", 4411 + "url": "https://opencollective.com/node-fetch" 4412 + } 4413 + }, 4414 + "node_modules/function-bind": { 4415 + "version": "1.1.2", 4416 + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 4417 + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 4418 + "license": "MIT", 4419 + "funding": { 4420 + "url": "https://github.com/sponsors/ljharb" 2189 4421 } 2190 4422 }, 2191 4423 "node_modules/get-east-asian-width": { ··· 2206 4438 "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", 2207 4439 "license": "ISC" 2208 4440 }, 4441 + "node_modules/glob": { 4442 + "version": "10.4.5", 4443 + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", 4444 + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", 4445 + "license": "ISC", 4446 + "dependencies": { 4447 + "foreground-child": "^3.1.0", 4448 + "jackspeak": "^3.1.2", 4449 + "minimatch": "^9.0.4", 4450 + "minipass": "^7.1.2", 4451 + "package-json-from-dist": "^1.0.0", 4452 + "path-scurry": "^1.11.1" 4453 + }, 4454 + "bin": { 4455 + "glob": "dist/esm/bin.mjs" 4456 + }, 4457 + "funding": { 4458 + "url": "https://github.com/sponsors/isaacs" 4459 + } 4460 + }, 4461 + "node_modules/glob-parent": { 4462 + "version": "6.0.2", 4463 + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 4464 + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 4465 + "license": "ISC", 4466 + "dependencies": { 4467 + "is-glob": "^4.0.3" 4468 + }, 4469 + "engines": { 4470 + "node": ">=10.13.0" 4471 + } 4472 + }, 4473 + "node_modules/graceful-fs": { 4474 + "version": "4.2.11", 4475 + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 4476 + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 4477 + "license": "ISC" 4478 + }, 4479 + "node_modules/graphemer": { 4480 + "version": "1.4.0", 4481 + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 4482 + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 4483 + "license": "MIT" 4484 + }, 2209 4485 "node_modules/h3": { 2210 4486 "version": "1.15.1", 2211 4487 "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.1.tgz", ··· 2221 4497 "radix3": "^1.1.2", 2222 4498 "ufo": "^1.5.4", 2223 4499 "uncrypto": "^0.1.3" 4500 + } 4501 + }, 4502 + "node_modules/hasown": { 4503 + "version": "2.0.2", 4504 + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 4505 + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 4506 + "license": "MIT", 4507 + "dependencies": { 4508 + "function-bind": "^1.1.2" 4509 + }, 4510 + "engines": { 4511 + "node": ">= 0.4" 2224 4512 } 2225 4513 }, 2226 4514 "node_modules/hast-util-from-html": { ··· 2410 4698 "url": "https://opencollective.com/unified" 2411 4699 } 2412 4700 }, 4701 + "node_modules/hls.js": { 4702 + "version": "1.6.2", 4703 + "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.2.tgz", 4704 + "integrity": "sha512-rx+pETSCJEDThm/JCm8CuadcAC410cVjb1XVXFNDKFuylaayHk1+tFxhkjvnMDAfqsJHxZXDAJ3Uc2d5xQyWlQ==", 4705 + "license": "Apache-2.0" 4706 + }, 2413 4707 "node_modules/html-escaper": { 2414 4708 "version": "3.0.3", 2415 4709 "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", ··· 2426 4720 "url": "https://github.com/sponsors/wooorm" 2427 4721 } 2428 4722 }, 4723 + "node_modules/htmlparser2": { 4724 + "version": "9.1.0", 4725 + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", 4726 + "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", 4727 + "funding": [ 4728 + "https://github.com/fb55/htmlparser2?sponsor=1", 4729 + { 4730 + "type": "github", 4731 + "url": "https://github.com/sponsors/fb55" 4732 + } 4733 + ], 4734 + "license": "MIT", 4735 + "dependencies": { 4736 + "domelementtype": "^2.3.0", 4737 + "domhandler": "^5.0.3", 4738 + "domutils": "^3.1.0", 4739 + "entities": "^4.5.0" 4740 + } 4741 + }, 2429 4742 "node_modules/http-cache-semantics": { 2430 4743 "version": "4.1.1", 2431 4744 "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", 2432 4745 "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", 2433 4746 "license": "BSD-2-Clause" 4747 + }, 4748 + "node_modules/iconv-lite": { 4749 + "version": "0.6.3", 4750 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 4751 + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 4752 + "license": "MIT", 4753 + "dependencies": { 4754 + "safer-buffer": ">= 2.1.2 < 3.0.0" 4755 + }, 4756 + "engines": { 4757 + "node": ">=0.10.0" 4758 + } 4759 + }, 4760 + "node_modules/imagetools-core": { 4761 + "version": "6.0.4", 4762 + "resolved": "https://registry.npmjs.org/imagetools-core/-/imagetools-core-6.0.4.tgz", 4763 + "integrity": "sha512-N1qs5qn7u9nR3kboISkYuvJm8MohiphCfBa+wx1UOropVaFis9/mh6wuDPLHJNhl6/64C7q2Pch5NASVKAaSrg==", 4764 + "license": "MIT", 4765 + "dependencies": { 4766 + "sharp": "^0.33.1" 4767 + }, 4768 + "engines": { 4769 + "node": ">=12.0.0" 4770 + } 4771 + }, 4772 + "node_modules/immer": { 4773 + "version": "10.1.1", 4774 + "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.1.tgz", 4775 + "integrity": "sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==", 4776 + "license": "MIT", 4777 + "funding": { 4778 + "type": "opencollective", 4779 + "url": "https://opencollective.com/immer" 4780 + } 2434 4781 }, 2435 4782 "node_modules/import-meta-resolve": { 2436 4783 "version": "4.1.0", ··· 2440 4787 "funding": { 2441 4788 "type": "github", 2442 4789 "url": "https://github.com/sponsors/wooorm" 4790 + } 4791 + }, 4792 + "node_modules/inline-style-parser": { 4793 + "version": "0.2.4", 4794 + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", 4795 + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", 4796 + "license": "MIT" 4797 + }, 4798 + "node_modules/internmap": { 4799 + "version": "2.0.3", 4800 + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", 4801 + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", 4802 + "license": "ISC", 4803 + "engines": { 4804 + "node": ">=12" 2443 4805 } 2444 4806 }, 2445 4807 "node_modules/iron-webcrypto": { ··· 2455 4817 "version": "0.3.2", 2456 4818 "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", 2457 4819 "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", 4820 + "license": "MIT" 4821 + }, 4822 + "node_modules/is-binary-path": { 4823 + "version": "2.1.0", 4824 + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 4825 + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 2458 4826 "license": "MIT", 2459 - "optional": true 4827 + "dependencies": { 4828 + "binary-extensions": "^2.0.0" 4829 + }, 4830 + "engines": { 4831 + "node": ">=8" 4832 + } 4833 + }, 4834 + "node_modules/is-core-module": { 4835 + "version": "2.16.1", 4836 + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", 4837 + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", 4838 + "license": "MIT", 4839 + "dependencies": { 4840 + "hasown": "^2.0.2" 4841 + }, 4842 + "engines": { 4843 + "node": ">= 0.4" 4844 + }, 4845 + "funding": { 4846 + "url": "https://github.com/sponsors/ljharb" 4847 + } 2460 4848 }, 2461 4849 "node_modules/is-docker": { 2462 4850 "version": "3.0.0", ··· 2473 4861 "url": "https://github.com/sponsors/sindresorhus" 2474 4862 } 2475 4863 }, 4864 + "node_modules/is-extglob": { 4865 + "version": "2.1.1", 4866 + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 4867 + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 4868 + "license": "MIT", 4869 + "engines": { 4870 + "node": ">=0.10.0" 4871 + } 4872 + }, 2476 4873 "node_modules/is-fullwidth-code-point": { 2477 4874 "version": "3.0.0", 2478 4875 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", ··· 2480 4877 "license": "MIT", 2481 4878 "engines": { 2482 4879 "node": ">=8" 4880 + } 4881 + }, 4882 + "node_modules/is-glob": { 4883 + "version": "4.0.3", 4884 + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 4885 + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 4886 + "license": "MIT", 4887 + "dependencies": { 4888 + "is-extglob": "^2.1.1" 4889 + }, 4890 + "engines": { 4891 + "node": ">=0.10.0" 2483 4892 } 2484 4893 }, 2485 4894 "node_modules/is-inside-container": { ··· 2500 4909 "url": "https://github.com/sponsors/sindresorhus" 2501 4910 } 2502 4911 }, 4912 + "node_modules/is-number": { 4913 + "version": "7.0.0", 4914 + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 4915 + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 4916 + "license": "MIT", 4917 + "engines": { 4918 + "node": ">=0.12.0" 4919 + } 4920 + }, 2503 4921 "node_modules/is-plain-obj": { 2504 4922 "version": "4.1.0", 2505 4923 "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", ··· 2510 4928 }, 2511 4929 "funding": { 2512 4930 "url": "https://github.com/sponsors/sindresorhus" 4931 + } 4932 + }, 4933 + "node_modules/is-reference": { 4934 + "version": "3.0.3", 4935 + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", 4936 + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", 4937 + "license": "MIT", 4938 + "dependencies": { 4939 + "@types/estree": "^1.0.6" 2513 4940 } 2514 4941 }, 2515 4942 "node_modules/is-wsl": { ··· 2525 4952 }, 2526 4953 "funding": { 2527 4954 "url": "https://github.com/sponsors/sindresorhus" 4955 + } 4956 + }, 4957 + "node_modules/isexe": { 4958 + "version": "2.0.0", 4959 + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 4960 + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 4961 + "license": "ISC" 4962 + }, 4963 + "node_modules/iso-datestring-validator": { 4964 + "version": "2.2.2", 4965 + "resolved": "https://registry.npmjs.org/iso-datestring-validator/-/iso-datestring-validator-2.2.2.tgz", 4966 + "integrity": "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==", 4967 + "license": "MIT" 4968 + }, 4969 + "node_modules/jackspeak": { 4970 + "version": "3.4.3", 4971 + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", 4972 + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", 4973 + "license": "BlueOak-1.0.0", 4974 + "dependencies": { 4975 + "@isaacs/cliui": "^8.0.2" 4976 + }, 4977 + "funding": { 4978 + "url": "https://github.com/sponsors/isaacs" 4979 + }, 4980 + "optionalDependencies": { 4981 + "@pkgjs/parseargs": "^0.11.0" 4982 + } 4983 + }, 4984 + "node_modules/jiti": { 4985 + "version": "2.4.2", 4986 + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", 4987 + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", 4988 + "license": "MIT", 4989 + "bin": { 4990 + "jiti": "lib/jiti-cli.mjs" 2528 4991 } 2529 4992 }, 2530 4993 "node_modules/js-yaml": { ··· 2548 5011 "node": ">=6" 2549 5012 } 2550 5013 }, 5014 + "node_modules/layercake": { 5015 + "version": "8.4.3", 5016 + "resolved": "https://registry.npmjs.org/layercake/-/layercake-8.4.3.tgz", 5017 + "integrity": "sha512-PZDduaPFxgHHkxlmsz5MVBECf6ZCT39DI3LgMVvuMwrmlrtlXwXUM/elJp46zHYzCE1j+cGyDuBDxnANv94tOQ==", 5018 + "license": "MIT", 5019 + "dependencies": { 5020 + "d3-array": "^3.2.4", 5021 + "d3-color": "^3.1.0", 5022 + "d3-scale": "^4.0.2", 5023 + "d3-shape": "^3.2.0" 5024 + }, 5025 + "peerDependencies": { 5026 + "svelte": "3 - 5 || >=5.0.0-next.120", 5027 + "typescript": "^5.0.2" 5028 + } 5029 + }, 5030 + "node_modules/layerchart": { 5031 + "version": "1.0.8", 5032 + "resolved": "https://registry.npmjs.org/layerchart/-/layerchart-1.0.8.tgz", 5033 + "integrity": "sha512-JkSNLUFiTkUYOmJclnM97oO/xtr/YuF4bnAf1ySz2ZeoS97HNUgWjIcYl5JkNrF112VA1K/ODranx5ZbYpXxqA==", 5034 + "license": "MIT", 5035 + "dependencies": { 5036 + "@dagrejs/dagre": "^1.1.4", 5037 + "@layerstack/svelte-actions": "^1.0.0", 5038 + "@layerstack/svelte-stores": "^1.0.0", 5039 + "@layerstack/tailwind": "^1.0.0", 5040 + "@layerstack/utils": "^1.0.0", 5041 + "d3-array": "^3.2.4", 5042 + "d3-color": "^3.1.0", 5043 + "d3-delaunay": "^6.0.4", 5044 + "d3-dsv": "^3.0.1", 5045 + "d3-force": "^3.0.0", 5046 + "d3-geo": "^3.1.1", 5047 + "d3-geo-voronoi": "^2.1.0", 5048 + "d3-hierarchy": "^3.1.2", 5049 + "d3-interpolate": "^3.0.1", 5050 + "d3-interpolate-path": "^2.3.0", 5051 + "d3-path": "^3.1.0", 5052 + "d3-quadtree": "^3.0.1", 5053 + "d3-random": "^3.0.1", 5054 + "d3-sankey": "^0.12.3", 5055 + "d3-scale": "^4.0.2", 5056 + "d3-scale-chromatic": "^3.1.0", 5057 + "d3-shape": "^3.2.0", 5058 + "d3-tile": "^1.0.0", 5059 + "d3-time": "^3.1.0", 5060 + "date-fns": "^4.1.0", 5061 + "layercake": "^8.4.2", 5062 + "lodash-es": "^4.17.21" 5063 + }, 5064 + "peerDependencies": { 5065 + "svelte": "^3.56.0 || ^4.0.0 || ^5.0.0" 5066 + } 5067 + }, 5068 + "node_modules/lightningcss": { 5069 + "version": "1.29.2", 5070 + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.2.tgz", 5071 + "integrity": "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==", 5072 + "license": "MPL-2.0", 5073 + "dependencies": { 5074 + "detect-libc": "^2.0.3" 5075 + }, 5076 + "engines": { 5077 + "node": ">= 12.0.0" 5078 + }, 5079 + "funding": { 5080 + "type": "opencollective", 5081 + "url": "https://opencollective.com/parcel" 5082 + }, 5083 + "optionalDependencies": { 5084 + "lightningcss-darwin-arm64": "1.29.2", 5085 + "lightningcss-darwin-x64": "1.29.2", 5086 + "lightningcss-freebsd-x64": "1.29.2", 5087 + "lightningcss-linux-arm-gnueabihf": "1.29.2", 5088 + "lightningcss-linux-arm64-gnu": "1.29.2", 5089 + "lightningcss-linux-arm64-musl": "1.29.2", 5090 + "lightningcss-linux-x64-gnu": "1.29.2", 5091 + "lightningcss-linux-x64-musl": "1.29.2", 5092 + "lightningcss-win32-arm64-msvc": "1.29.2", 5093 + "lightningcss-win32-x64-msvc": "1.29.2" 5094 + } 5095 + }, 5096 + "node_modules/lightningcss-darwin-arm64": { 5097 + "version": "1.29.2", 5098 + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.2.tgz", 5099 + "integrity": "sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==", 5100 + "cpu": [ 5101 + "arm64" 5102 + ], 5103 + "license": "MPL-2.0", 5104 + "optional": true, 5105 + "os": [ 5106 + "darwin" 5107 + ], 5108 + "engines": { 5109 + "node": ">= 12.0.0" 5110 + }, 5111 + "funding": { 5112 + "type": "opencollective", 5113 + "url": "https://opencollective.com/parcel" 5114 + } 5115 + }, 5116 + "node_modules/lightningcss-darwin-x64": { 5117 + "version": "1.29.2", 5118 + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.2.tgz", 5119 + "integrity": "sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==", 5120 + "cpu": [ 5121 + "x64" 5122 + ], 5123 + "license": "MPL-2.0", 5124 + "optional": true, 5125 + "os": [ 5126 + "darwin" 5127 + ], 5128 + "engines": { 5129 + "node": ">= 12.0.0" 5130 + }, 5131 + "funding": { 5132 + "type": "opencollective", 5133 + "url": "https://opencollective.com/parcel" 5134 + } 5135 + }, 5136 + "node_modules/lightningcss-freebsd-x64": { 5137 + "version": "1.29.2", 5138 + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.2.tgz", 5139 + "integrity": "sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==", 5140 + "cpu": [ 5141 + "x64" 5142 + ], 5143 + "license": "MPL-2.0", 5144 + "optional": true, 5145 + "os": [ 5146 + "freebsd" 5147 + ], 5148 + "engines": { 5149 + "node": ">= 12.0.0" 5150 + }, 5151 + "funding": { 5152 + "type": "opencollective", 5153 + "url": "https://opencollective.com/parcel" 5154 + } 5155 + }, 5156 + "node_modules/lightningcss-linux-arm-gnueabihf": { 5157 + "version": "1.29.2", 5158 + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.2.tgz", 5159 + "integrity": "sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==", 5160 + "cpu": [ 5161 + "arm" 5162 + ], 5163 + "license": "MPL-2.0", 5164 + "optional": true, 5165 + "os": [ 5166 + "linux" 5167 + ], 5168 + "engines": { 5169 + "node": ">= 12.0.0" 5170 + }, 5171 + "funding": { 5172 + "type": "opencollective", 5173 + "url": "https://opencollective.com/parcel" 5174 + } 5175 + }, 5176 + "node_modules/lightningcss-linux-arm64-gnu": { 5177 + "version": "1.29.2", 5178 + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.2.tgz", 5179 + "integrity": "sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==", 5180 + "cpu": [ 5181 + "arm64" 5182 + ], 5183 + "license": "MPL-2.0", 5184 + "optional": true, 5185 + "os": [ 5186 + "linux" 5187 + ], 5188 + "engines": { 5189 + "node": ">= 12.0.0" 5190 + }, 5191 + "funding": { 5192 + "type": "opencollective", 5193 + "url": "https://opencollective.com/parcel" 5194 + } 5195 + }, 5196 + "node_modules/lightningcss-linux-arm64-musl": { 5197 + "version": "1.29.2", 5198 + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.2.tgz", 5199 + "integrity": "sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==", 5200 + "cpu": [ 5201 + "arm64" 5202 + ], 5203 + "license": "MPL-2.0", 5204 + "optional": true, 5205 + "os": [ 5206 + "linux" 5207 + ], 5208 + "engines": { 5209 + "node": ">= 12.0.0" 5210 + }, 5211 + "funding": { 5212 + "type": "opencollective", 5213 + "url": "https://opencollective.com/parcel" 5214 + } 5215 + }, 5216 + "node_modules/lightningcss-linux-x64-gnu": { 5217 + "version": "1.29.2", 5218 + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.2.tgz", 5219 + "integrity": "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==", 5220 + "cpu": [ 5221 + "x64" 5222 + ], 5223 + "license": "MPL-2.0", 5224 + "optional": true, 5225 + "os": [ 5226 + "linux" 5227 + ], 5228 + "engines": { 5229 + "node": ">= 12.0.0" 5230 + }, 5231 + "funding": { 5232 + "type": "opencollective", 5233 + "url": "https://opencollective.com/parcel" 5234 + } 5235 + }, 5236 + "node_modules/lightningcss-linux-x64-musl": { 5237 + "version": "1.29.2", 5238 + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.2.tgz", 5239 + "integrity": "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==", 5240 + "cpu": [ 5241 + "x64" 5242 + ], 5243 + "license": "MPL-2.0", 5244 + "optional": true, 5245 + "os": [ 5246 + "linux" 5247 + ], 5248 + "engines": { 5249 + "node": ">= 12.0.0" 5250 + }, 5251 + "funding": { 5252 + "type": "opencollective", 5253 + "url": "https://opencollective.com/parcel" 5254 + } 5255 + }, 5256 + "node_modules/lightningcss-win32-arm64-msvc": { 5257 + "version": "1.29.2", 5258 + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.2.tgz", 5259 + "integrity": "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==", 5260 + "cpu": [ 5261 + "arm64" 5262 + ], 5263 + "license": "MPL-2.0", 5264 + "optional": true, 5265 + "os": [ 5266 + "win32" 5267 + ], 5268 + "engines": { 5269 + "node": ">= 12.0.0" 5270 + }, 5271 + "funding": { 5272 + "type": "opencollective", 5273 + "url": "https://opencollective.com/parcel" 5274 + } 5275 + }, 5276 + "node_modules/lightningcss-win32-x64-msvc": { 5277 + "version": "1.29.2", 5278 + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.2.tgz", 5279 + "integrity": "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==", 5280 + "cpu": [ 5281 + "x64" 5282 + ], 5283 + "license": "MPL-2.0", 5284 + "optional": true, 5285 + "os": [ 5286 + "win32" 5287 + ], 5288 + "engines": { 5289 + "node": ">= 12.0.0" 5290 + }, 5291 + "funding": { 5292 + "type": "opencollective", 5293 + "url": "https://opencollective.com/parcel" 5294 + } 5295 + }, 5296 + "node_modules/lilconfig": { 5297 + "version": "3.1.3", 5298 + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", 5299 + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", 5300 + "license": "MIT", 5301 + "engines": { 5302 + "node": ">=14" 5303 + }, 5304 + "funding": { 5305 + "url": "https://github.com/sponsors/antonk52" 5306 + } 5307 + }, 5308 + "node_modules/lines-and-columns": { 5309 + "version": "1.2.4", 5310 + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 5311 + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 5312 + "license": "MIT" 5313 + }, 5314 + "node_modules/loadjs": { 5315 + "version": "4.3.0", 5316 + "resolved": "https://registry.npmjs.org/loadjs/-/loadjs-4.3.0.tgz", 5317 + "integrity": "sha512-vNX4ZZLJBeDEOBvdr2v/F+0aN5oMuPu7JTqrMwp+DtgK+AryOlpy6Xtm2/HpNr+azEa828oQjOtWsB6iDtSfSQ==", 5318 + "license": "MIT" 5319 + }, 5320 + "node_modules/locate-character": { 5321 + "version": "3.0.0", 5322 + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", 5323 + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", 5324 + "license": "MIT" 5325 + }, 5326 + "node_modules/lodash-es": { 5327 + "version": "4.17.21", 5328 + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", 5329 + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", 5330 + "license": "MIT" 5331 + }, 5332 + "node_modules/lodash.castarray": { 5333 + "version": "4.4.0", 5334 + "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", 5335 + "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", 5336 + "dev": true, 5337 + "license": "MIT" 5338 + }, 5339 + "node_modules/lodash.isplainobject": { 5340 + "version": "4.0.6", 5341 + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", 5342 + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", 5343 + "dev": true, 5344 + "license": "MIT" 5345 + }, 5346 + "node_modules/lodash.merge": { 5347 + "version": "4.6.2", 5348 + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 5349 + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 5350 + "dev": true, 5351 + "license": "MIT" 5352 + }, 2551 5353 "node_modules/longest-streak": { 2552 5354 "version": "3.1.0", 2553 5355 "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", ··· 2558 5360 "url": "https://github.com/sponsors/wooorm" 2559 5361 } 2560 5362 }, 5363 + "node_modules/lower-case": { 5364 + "version": "2.0.2", 5365 + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", 5366 + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", 5367 + "license": "MIT", 5368 + "dependencies": { 5369 + "tslib": "^2.0.3" 5370 + } 5371 + }, 2561 5372 "node_modules/lru-cache": { 2562 5373 "version": "10.4.3", 2563 5374 "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", 2564 5375 "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", 2565 5376 "license": "ISC" 5377 + }, 5378 + "node_modules/maath": { 5379 + "version": "0.10.8", 5380 + "resolved": "https://registry.npmjs.org/maath/-/maath-0.10.8.tgz", 5381 + "integrity": "sha512-tRvbDF0Pgqz+9XUa4jjfgAQ8/aPKmQdWXilFu2tMy4GWj4NOsx99HlULO4IeREfbO3a0sA145DZYyvXPkybm0g==", 5382 + "license": "MIT", 5383 + "peerDependencies": { 5384 + "@types/three": ">=0.134.0", 5385 + "three": ">=0.134.0" 5386 + } 2566 5387 }, 2567 5388 "node_modules/magic-string": { 2568 5389 "version": "0.30.17", ··· 2592 5413 "funding": { 2593 5414 "type": "github", 2594 5415 "url": "https://github.com/sponsors/wooorm" 5416 + } 5417 + }, 5418 + "node_modules/marked": { 5419 + "version": "15.0.8", 5420 + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.8.tgz", 5421 + "integrity": "sha512-rli4l2LyZqpQuRve5C0rkn6pj3hT8EWPC+zkAxFTAJLxRbENfTAhEQq9itrmf1Y81QtAX5D/MYlGlIomNgj9lA==", 5422 + "license": "MIT", 5423 + "bin": { 5424 + "marked": "bin/marked.js" 5425 + }, 5426 + "engines": { 5427 + "node": ">= 18" 2595 5428 } 2596 5429 }, 2597 5430 "node_modules/mdast-util-definitions": { ··· 2824 5657 "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", 2825 5658 "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", 2826 5659 "license": "CC0-1.0" 5660 + }, 5661 + "node_modules/merge2": { 5662 + "version": "1.4.1", 5663 + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 5664 + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 5665 + "license": "MIT", 5666 + "engines": { 5667 + "node": ">= 8" 5668 + } 5669 + }, 5670 + "node_modules/meshoptimizer": { 5671 + "version": "0.18.1", 5672 + "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.18.1.tgz", 5673 + "integrity": "sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==", 5674 + "license": "MIT" 2827 5675 }, 2828 5676 "node_modules/micromark": { 2829 5677 "version": "4.0.2", ··· 3388 6236 ], 3389 6237 "license": "MIT" 3390 6238 }, 6239 + "node_modules/micromatch": { 6240 + "version": "4.0.8", 6241 + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", 6242 + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", 6243 + "license": "MIT", 6244 + "dependencies": { 6245 + "braces": "^3.0.3", 6246 + "picomatch": "^2.3.1" 6247 + }, 6248 + "engines": { 6249 + "node": ">=8.6" 6250 + } 6251 + }, 6252 + "node_modules/micromatch/node_modules/picomatch": { 6253 + "version": "2.3.1", 6254 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 6255 + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 6256 + "license": "MIT", 6257 + "engines": { 6258 + "node": ">=8.6" 6259 + }, 6260 + "funding": { 6261 + "url": "https://github.com/sponsors/jonschlinkert" 6262 + } 6263 + }, 6264 + "node_modules/minimatch": { 6265 + "version": "9.0.5", 6266 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 6267 + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 6268 + "license": "ISC", 6269 + "dependencies": { 6270 + "brace-expansion": "^2.0.1" 6271 + }, 6272 + "engines": { 6273 + "node": ">=16 || 14 >=14.17" 6274 + }, 6275 + "funding": { 6276 + "url": "https://github.com/sponsors/isaacs" 6277 + } 6278 + }, 6279 + "node_modules/minipass": { 6280 + "version": "7.1.2", 6281 + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", 6282 + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", 6283 + "license": "ISC", 6284 + "engines": { 6285 + "node": ">=16 || 14 >=14.17" 6286 + } 6287 + }, 6288 + "node_modules/minizlib": { 6289 + "version": "3.0.2", 6290 + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", 6291 + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", 6292 + "license": "MIT", 6293 + "dependencies": { 6294 + "minipass": "^7.1.2" 6295 + }, 6296 + "engines": { 6297 + "node": ">= 18" 6298 + } 6299 + }, 6300 + "node_modules/mitt": { 6301 + "version": "3.0.1", 6302 + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", 6303 + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", 6304 + "license": "MIT" 6305 + }, 6306 + "node_modules/mkdirp": { 6307 + "version": "3.0.1", 6308 + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", 6309 + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", 6310 + "license": "MIT", 6311 + "bin": { 6312 + "mkdirp": "dist/cjs/src/bin.js" 6313 + }, 6314 + "engines": { 6315 + "node": ">=10" 6316 + }, 6317 + "funding": { 6318 + "url": "https://github.com/sponsors/isaacs" 6319 + } 6320 + }, 6321 + "node_modules/mri": { 6322 + "version": "1.2.0", 6323 + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", 6324 + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", 6325 + "license": "MIT", 6326 + "peer": true, 6327 + "engines": { 6328 + "node": ">=4" 6329 + } 6330 + }, 3391 6331 "node_modules/mrmime": { 3392 6332 "version": "2.0.1", 3393 6333 "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", ··· 3402 6342 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 3403 6343 "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 3404 6344 "license": "MIT" 6345 + }, 6346 + "node_modules/multiformats": { 6347 + "version": "9.9.0", 6348 + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", 6349 + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", 6350 + "license": "(Apache-2.0 AND MIT)" 6351 + }, 6352 + "node_modules/mz": { 6353 + "version": "2.7.0", 6354 + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", 6355 + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", 6356 + "license": "MIT", 6357 + "dependencies": { 6358 + "any-promise": "^1.0.0", 6359 + "object-assign": "^4.0.1", 6360 + "thenify-all": "^1.0.0" 6361 + } 3405 6362 }, 3406 6363 "node_modules/nanoid": { 3407 6364 "version": "3.3.11", ··· 3443 6400 "url": "https://opencollective.com/unified" 3444 6401 } 3445 6402 }, 6403 + "node_modules/no-case": { 6404 + "version": "3.0.4", 6405 + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", 6406 + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", 6407 + "license": "MIT", 6408 + "dependencies": { 6409 + "lower-case": "^2.0.2", 6410 + "tslib": "^2.0.3" 6411 + } 6412 + }, 6413 + "node_modules/node-domexception": { 6414 + "version": "1.0.0", 6415 + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", 6416 + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", 6417 + "deprecated": "Use your platform's native DOMException instead", 6418 + "funding": [ 6419 + { 6420 + "type": "github", 6421 + "url": "https://github.com/sponsors/jimmywarting" 6422 + }, 6423 + { 6424 + "type": "github", 6425 + "url": "https://paypal.me/jimmywarting" 6426 + } 6427 + ], 6428 + "license": "MIT", 6429 + "engines": { 6430 + "node": ">=10.5.0" 6431 + } 6432 + }, 3446 6433 "node_modules/node-fetch": { 3447 6434 "version": "2.7.0", 3448 6435 "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", ··· 3482 6469 "license": "MIT", 3483 6470 "engines": { 3484 6471 "node": ">=0.10.0" 6472 + } 6473 + }, 6474 + "node_modules/nth-check": { 6475 + "version": "2.1.1", 6476 + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", 6477 + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", 6478 + "license": "BSD-2-Clause", 6479 + "dependencies": { 6480 + "boolbase": "^1.0.0" 6481 + }, 6482 + "funding": { 6483 + "url": "https://github.com/fb55/nth-check?sponsor=1" 6484 + } 6485 + }, 6486 + "node_modules/number-flow": { 6487 + "version": "0.5.7", 6488 + "resolved": "https://registry.npmjs.org/number-flow/-/number-flow-0.5.7.tgz", 6489 + "integrity": "sha512-P83Y9rBgN3Xpz5677YDNtuQHZpIldw6WXeWRg0+edrfFthhV7QqRdABas5gtu07QPLvbA8XhfO69rIvbKRzYIg==", 6490 + "license": "MIT", 6491 + "dependencies": { 6492 + "esm-env": "^1.1.4" 6493 + } 6494 + }, 6495 + "node_modules/object-assign": { 6496 + "version": "4.1.1", 6497 + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 6498 + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 6499 + "license": "MIT", 6500 + "engines": { 6501 + "node": ">=0.10.0" 6502 + } 6503 + }, 6504 + "node_modules/object-hash": { 6505 + "version": "3.0.0", 6506 + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", 6507 + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", 6508 + "license": "MIT", 6509 + "engines": { 6510 + "node": ">= 6" 3485 6511 } 3486 6512 }, 3487 6513 "node_modules/ofetch": { ··· 3562 6588 "url": "https://github.com/sponsors/sindresorhus" 3563 6589 } 3564 6590 }, 6591 + "node_modules/package-json-from-dist": { 6592 + "version": "1.0.1", 6593 + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", 6594 + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", 6595 + "license": "BlueOak-1.0.0" 6596 + }, 3565 6597 "node_modules/package-manager-detector": { 3566 6598 "version": "1.2.0", 3567 6599 "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.2.0.tgz", ··· 3573 6605 "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", 3574 6606 "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", 3575 6607 "license": "MIT" 6608 + }, 6609 + "node_modules/paneforge": { 6610 + "version": "0.0.6", 6611 + "resolved": "https://registry.npmjs.org/paneforge/-/paneforge-0.0.6.tgz", 6612 + "integrity": "sha512-jYeN/wdREihja5c6nK3S5jritDQ+EbCqC5NrDo97qCZzZ9GkmEcN5C0ZCjF4nmhBwkDKr6tLIgz4QUKWxLXjAw==", 6613 + "license": "MIT", 6614 + "dependencies": { 6615 + "nanoid": "^5.0.4" 6616 + }, 6617 + "peerDependencies": { 6618 + "svelte": "^4.0.0 || ^5.0.0-next.1" 6619 + } 6620 + }, 6621 + "node_modules/paneforge/node_modules/nanoid": { 6622 + "version": "5.1.5", 6623 + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.5.tgz", 6624 + "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==", 6625 + "funding": [ 6626 + { 6627 + "type": "github", 6628 + "url": "https://github.com/sponsors/ai" 6629 + } 6630 + ], 6631 + "license": "MIT", 6632 + "bin": { 6633 + "nanoid": "bin/nanoid.js" 6634 + }, 6635 + "engines": { 6636 + "node": "^18 || >=20" 6637 + } 3576 6638 }, 3577 6639 "node_modules/parse-latin": { 3578 6640 "version": "7.0.0", ··· 3604 6666 "url": "https://github.com/inikulin/parse5?sponsor=1" 3605 6667 } 3606 6668 }, 6669 + "node_modules/parse5-htmlparser2-tree-adapter": { 6670 + "version": "7.1.0", 6671 + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", 6672 + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", 6673 + "license": "MIT", 6674 + "dependencies": { 6675 + "domhandler": "^5.0.3", 6676 + "parse5": "^7.0.0" 6677 + }, 6678 + "funding": { 6679 + "url": "https://github.com/inikulin/parse5?sponsor=1" 6680 + } 6681 + }, 6682 + "node_modules/parse5-parser-stream": { 6683 + "version": "7.1.2", 6684 + "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", 6685 + "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", 6686 + "license": "MIT", 6687 + "dependencies": { 6688 + "parse5": "^7.0.0" 6689 + }, 6690 + "funding": { 6691 + "url": "https://github.com/inikulin/parse5?sponsor=1" 6692 + } 6693 + }, 6694 + "node_modules/pascal-case": { 6695 + "version": "3.1.2", 6696 + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", 6697 + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", 6698 + "license": "MIT", 6699 + "dependencies": { 6700 + "no-case": "^3.0.4", 6701 + "tslib": "^2.0.3" 6702 + } 6703 + }, 6704 + "node_modules/path-key": { 6705 + "version": "3.1.1", 6706 + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 6707 + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 6708 + "license": "MIT", 6709 + "engines": { 6710 + "node": ">=8" 6711 + } 6712 + }, 6713 + "node_modules/path-parse": { 6714 + "version": "1.0.7", 6715 + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 6716 + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 6717 + "license": "MIT" 6718 + }, 6719 + "node_modules/path-scurry": { 6720 + "version": "1.11.1", 6721 + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", 6722 + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", 6723 + "license": "BlueOak-1.0.0", 6724 + "dependencies": { 6725 + "lru-cache": "^10.2.0", 6726 + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" 6727 + }, 6728 + "engines": { 6729 + "node": ">=16 || 14 >=14.18" 6730 + }, 6731 + "funding": { 6732 + "url": "https://github.com/sponsors/isaacs" 6733 + } 6734 + }, 6735 + "node_modules/pdfjs-dist": { 6736 + "version": "5.1.91", 6737 + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-5.1.91.tgz", 6738 + "integrity": "sha512-qSIADdagooJB4wWCBnrBJjRvASevmxL0BwafvOuKJG5uTQdYoFBrhrRYnucKNiSc9qS6JIk0hC5y1yktFljXkA==", 6739 + "license": "Apache-2.0", 6740 + "engines": { 6741 + "node": ">=20" 6742 + }, 6743 + "optionalDependencies": { 6744 + "@napi-rs/canvas": "^0.1.67" 6745 + } 6746 + }, 3607 6747 "node_modules/picocolors": { 3608 6748 "version": "1.1.1", 3609 6749 "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", ··· 3620 6760 }, 3621 6761 "funding": { 3622 6762 "url": "https://github.com/sponsors/jonschlinkert" 6763 + } 6764 + }, 6765 + "node_modules/pify": { 6766 + "version": "2.3.0", 6767 + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 6768 + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 6769 + "license": "MIT", 6770 + "engines": { 6771 + "node": ">=0.10.0" 6772 + } 6773 + }, 6774 + "node_modules/pirates": { 6775 + "version": "4.0.7", 6776 + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", 6777 + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", 6778 + "license": "MIT", 6779 + "engines": { 6780 + "node": ">= 6" 6781 + } 6782 + }, 6783 + "node_modules/plyr": { 6784 + "version": "3.7.8", 6785 + "resolved": "https://registry.npmjs.org/plyr/-/plyr-3.7.8.tgz", 6786 + "integrity": "sha512-yG/EHDobwbB/uP+4Bm6eUpJ93f8xxHjjk2dYcD1Oqpe1EcuQl5tzzw9Oq+uVAzd2lkM11qZfydSiyIpiB8pgdA==", 6787 + "license": "MIT", 6788 + "dependencies": { 6789 + "core-js": "^3.26.1", 6790 + "custom-event-polyfill": "^1.0.7", 6791 + "loadjs": "^4.2.0", 6792 + "rangetouch": "^2.0.1", 6793 + "url-polyfill": "^1.1.12" 3623 6794 } 3624 6795 }, 3625 6796 "node_modules/postcss": { ··· 3649 6820 "engines": { 3650 6821 "node": "^10 || ^12 || >=14" 3651 6822 } 6823 + }, 6824 + "node_modules/postcss-import": { 6825 + "version": "15.1.0", 6826 + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", 6827 + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", 6828 + "license": "MIT", 6829 + "dependencies": { 6830 + "postcss-value-parser": "^4.0.0", 6831 + "read-cache": "^1.0.0", 6832 + "resolve": "^1.1.7" 6833 + }, 6834 + "engines": { 6835 + "node": ">=14.0.0" 6836 + }, 6837 + "peerDependencies": { 6838 + "postcss": "^8.0.0" 6839 + } 6840 + }, 6841 + "node_modules/postcss-js": { 6842 + "version": "4.0.1", 6843 + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", 6844 + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", 6845 + "license": "MIT", 6846 + "dependencies": { 6847 + "camelcase-css": "^2.0.1" 6848 + }, 6849 + "engines": { 6850 + "node": "^12 || ^14 || >= 16" 6851 + }, 6852 + "funding": { 6853 + "type": "opencollective", 6854 + "url": "https://opencollective.com/postcss/" 6855 + }, 6856 + "peerDependencies": { 6857 + "postcss": "^8.4.21" 6858 + } 6859 + }, 6860 + "node_modules/postcss-load-config": { 6861 + "version": "4.0.2", 6862 + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", 6863 + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", 6864 + "funding": [ 6865 + { 6866 + "type": "opencollective", 6867 + "url": "https://opencollective.com/postcss/" 6868 + }, 6869 + { 6870 + "type": "github", 6871 + "url": "https://github.com/sponsors/ai" 6872 + } 6873 + ], 6874 + "license": "MIT", 6875 + "dependencies": { 6876 + "lilconfig": "^3.0.0", 6877 + "yaml": "^2.3.4" 6878 + }, 6879 + "engines": { 6880 + "node": ">= 14" 6881 + }, 6882 + "peerDependencies": { 6883 + "postcss": ">=8.0.9", 6884 + "ts-node": ">=9.0.0" 6885 + }, 6886 + "peerDependenciesMeta": { 6887 + "postcss": { 6888 + "optional": true 6889 + }, 6890 + "ts-node": { 6891 + "optional": true 6892 + } 6893 + } 6894 + }, 6895 + "node_modules/postcss-nested": { 6896 + "version": "6.2.0", 6897 + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", 6898 + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", 6899 + "funding": [ 6900 + { 6901 + "type": "opencollective", 6902 + "url": "https://opencollective.com/postcss/" 6903 + }, 6904 + { 6905 + "type": "github", 6906 + "url": "https://github.com/sponsors/ai" 6907 + } 6908 + ], 6909 + "license": "MIT", 6910 + "dependencies": { 6911 + "postcss-selector-parser": "^6.1.1" 6912 + }, 6913 + "engines": { 6914 + "node": ">=12.0" 6915 + }, 6916 + "peerDependencies": { 6917 + "postcss": "^8.2.14" 6918 + } 6919 + }, 6920 + "node_modules/postcss-selector-parser": { 6921 + "version": "6.1.2", 6922 + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", 6923 + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", 6924 + "license": "MIT", 6925 + "dependencies": { 6926 + "cssesc": "^3.0.0", 6927 + "util-deprecate": "^1.0.2" 6928 + }, 6929 + "engines": { 6930 + "node": ">=4" 6931 + } 6932 + }, 6933 + "node_modules/postcss-value-parser": { 6934 + "version": "4.2.0", 6935 + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 6936 + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 6937 + "license": "MIT" 3652 6938 }, 3653 6939 "node_modules/prismjs": { 3654 6940 "version": "1.30.0", ··· 3691 6977 "url": "https://github.com/sponsors/wooorm" 3692 6978 } 3693 6979 }, 6980 + "node_modules/queue-microtask": { 6981 + "version": "1.2.3", 6982 + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 6983 + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 6984 + "funding": [ 6985 + { 6986 + "type": "github", 6987 + "url": "https://github.com/sponsors/feross" 6988 + }, 6989 + { 6990 + "type": "patreon", 6991 + "url": "https://www.patreon.com/feross" 6992 + }, 6993 + { 6994 + "type": "consulting", 6995 + "url": "https://feross.org/support" 6996 + } 6997 + ], 6998 + "license": "MIT" 6999 + }, 3694 7000 "node_modules/radix3": { 3695 7001 "version": "1.1.2", 3696 7002 "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", 3697 7003 "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", 3698 7004 "license": "MIT" 7005 + }, 7006 + "node_modules/rangetouch": { 7007 + "version": "2.0.1", 7008 + "resolved": "https://registry.npmjs.org/rangetouch/-/rangetouch-2.0.1.tgz", 7009 + "integrity": "sha512-sln+pNSc8NGaHoLzwNBssFSf/rSYkqeBXzX1AtJlkJiUaVSJSbRAWJk+4omsXkN+EJalzkZhWQ3th1m0FpR5xA==", 7010 + "license": "MIT" 7011 + }, 7012 + "node_modules/read-cache": { 7013 + "version": "1.0.0", 7014 + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", 7015 + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", 7016 + "license": "MIT", 7017 + "dependencies": { 7018 + "pify": "^2.3.0" 7019 + } 3699 7020 }, 3700 7021 "node_modules/readdirp": { 3701 7022 "version": "4.1.2", ··· 3876 7197 "url": "https://opencollective.com/unified" 3877 7198 } 3878 7199 }, 7200 + "node_modules/require-from-string": { 7201 + "version": "2.0.2", 7202 + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 7203 + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 7204 + "license": "MIT", 7205 + "engines": { 7206 + "node": ">=0.10.0" 7207 + } 7208 + }, 7209 + "node_modules/resolve": { 7210 + "version": "1.22.10", 7211 + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", 7212 + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", 7213 + "license": "MIT", 7214 + "dependencies": { 7215 + "is-core-module": "^2.16.0", 7216 + "path-parse": "^1.0.7", 7217 + "supports-preserve-symlinks-flag": "^1.0.0" 7218 + }, 7219 + "bin": { 7220 + "resolve": "bin/resolve" 7221 + }, 7222 + "engines": { 7223 + "node": ">= 0.4" 7224 + }, 7225 + "funding": { 7226 + "url": "https://github.com/sponsors/ljharb" 7227 + } 7228 + }, 3879 7229 "node_modules/restructure": { 3880 7230 "version": "3.0.2", 3881 7231 "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.2.tgz", ··· 3943 7293 "url": "https://opencollective.com/unified" 3944 7294 } 3945 7295 }, 7296 + "node_modules/reusify": { 7297 + "version": "1.1.0", 7298 + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", 7299 + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", 7300 + "license": "MIT", 7301 + "engines": { 7302 + "iojs": ">=1.0.0", 7303 + "node": ">=0.10.0" 7304 + } 7305 + }, 7306 + "node_modules/robust-predicates": { 7307 + "version": "3.0.2", 7308 + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", 7309 + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", 7310 + "license": "Unlicense" 7311 + }, 3946 7312 "node_modules/rollup": { 3947 7313 "version": "4.40.0", 3948 7314 "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.0.tgz", ··· 3982 7348 "fsevents": "~2.3.2" 3983 7349 } 3984 7350 }, 7351 + "node_modules/run-parallel": { 7352 + "version": "1.2.0", 7353 + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 7354 + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 7355 + "funding": [ 7356 + { 7357 + "type": "github", 7358 + "url": "https://github.com/sponsors/feross" 7359 + }, 7360 + { 7361 + "type": "patreon", 7362 + "url": "https://www.patreon.com/feross" 7363 + }, 7364 + { 7365 + "type": "consulting", 7366 + "url": "https://feross.org/support" 7367 + } 7368 + ], 7369 + "license": "MIT", 7370 + "dependencies": { 7371 + "queue-microtask": "^1.2.2" 7372 + } 7373 + }, 7374 + "node_modules/runed": { 7375 + "version": "0.23.4", 7376 + "resolved": "https://registry.npmjs.org/runed/-/runed-0.23.4.tgz", 7377 + "integrity": "sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA==", 7378 + "funding": [ 7379 + "https://github.com/sponsors/huntabyte", 7380 + "https://github.com/sponsors/tglide" 7381 + ], 7382 + "dependencies": { 7383 + "esm-env": "^1.0.0" 7384 + }, 7385 + "peerDependencies": { 7386 + "svelte": "^5.7.0" 7387 + } 7388 + }, 7389 + "node_modules/rw": { 7390 + "version": "1.3.3", 7391 + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", 7392 + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", 7393 + "license": "BSD-3-Clause" 7394 + }, 7395 + "node_modules/sade": { 7396 + "version": "1.8.1", 7397 + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", 7398 + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", 7399 + "license": "MIT", 7400 + "peer": true, 7401 + "dependencies": { 7402 + "mri": "^1.1.0" 7403 + }, 7404 + "engines": { 7405 + "node": ">=6" 7406 + } 7407 + }, 7408 + "node_modules/safer-buffer": { 7409 + "version": "2.1.2", 7410 + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 7411 + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 7412 + "license": "MIT" 7413 + }, 3985 7414 "node_modules/semver": { 3986 7415 "version": "7.7.1", 3987 7416 "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", ··· 3994 7423 "node": ">=10" 3995 7424 } 3996 7425 }, 7426 + "node_modules/set-cookie-parser": { 7427 + "version": "2.7.1", 7428 + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", 7429 + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", 7430 + "license": "MIT", 7431 + "peer": true 7432 + }, 3997 7433 "node_modules/sharp": { 3998 7434 "version": "0.33.5", 3999 7435 "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", 4000 7436 "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", 4001 7437 "hasInstallScript": true, 4002 7438 "license": "Apache-2.0", 4003 - "optional": true, 4004 7439 "dependencies": { 4005 7440 "color": "^4.2.3", 4006 7441 "detect-libc": "^2.0.3", ··· 4034 7469 "@img/sharp-win32-x64": "0.33.5" 4035 7470 } 4036 7471 }, 7472 + "node_modules/shebang-command": { 7473 + "version": "2.0.0", 7474 + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 7475 + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 7476 + "license": "MIT", 7477 + "dependencies": { 7478 + "shebang-regex": "^3.0.0" 7479 + }, 7480 + "engines": { 7481 + "node": ">=8" 7482 + } 7483 + }, 7484 + "node_modules/shebang-regex": { 7485 + "version": "3.0.0", 7486 + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 7487 + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 7488 + "license": "MIT", 7489 + "engines": { 7490 + "node": ">=8" 7491 + } 7492 + }, 4037 7493 "node_modules/shiki": { 4038 7494 "version": "3.2.2", 4039 7495 "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.2.2.tgz", ··· 4050 7506 "@types/hast": "^3.0.4" 4051 7507 } 4052 7508 }, 7509 + "node_modules/signal-exit": { 7510 + "version": "4.1.0", 7511 + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 7512 + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 7513 + "license": "ISC", 7514 + "engines": { 7515 + "node": ">=14" 7516 + }, 7517 + "funding": { 7518 + "url": "https://github.com/sponsors/isaacs" 7519 + } 7520 + }, 7521 + "node_modules/simple-icons": { 7522 + "version": "14.12.3", 7523 + "resolved": "https://registry.npmjs.org/simple-icons/-/simple-icons-14.12.3.tgz", 7524 + "integrity": "sha512-P85Pqak4picfTzdujmGL7+pFfsd32K/tDjHPQ8vvJcr2Xk380A9kBVIW5QH86qWqa+YJgFa5huLcUuwmW+YBPQ==", 7525 + "license": "CC0-1.0", 7526 + "engines": { 7527 + "node": ">=0.12.18" 7528 + }, 7529 + "funding": { 7530 + "type": "opencollective", 7531 + "url": "https://opencollective.com/simple-icons" 7532 + } 7533 + }, 7534 + "node_modules/simple-icons-astro": { 7535 + "version": "14.12.3", 7536 + "resolved": "https://registry.npmjs.org/simple-icons-astro/-/simple-icons-astro-14.12.3.tgz", 7537 + "integrity": "sha512-e/yQ/FPA+35YKUQ5EywQkXqnSF5QXrynK04zvidUFt6mNOd1Nm921yDWUpK6tYyzIp7UcvJWh5pQr5mi3kxbwQ==", 7538 + "license": "MIT", 7539 + "peerDependencies": { 7540 + "astro": ">=2.7.1" 7541 + } 7542 + }, 4053 7543 "node_modules/simple-swizzle": { 4054 7544 "version": "0.2.2", 4055 7545 "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", 4056 7546 "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", 4057 7547 "license": "MIT", 4058 - "optional": true, 4059 7548 "dependencies": { 4060 7549 "is-arrayish": "^0.3.1" 7550 + } 7551 + }, 7552 + "node_modules/simplex-noise": { 7553 + "version": "4.0.3", 7554 + "resolved": "https://registry.npmjs.org/simplex-noise/-/simplex-noise-4.0.3.tgz", 7555 + "integrity": "sha512-qSE2I4AngLQG7BXqoZj51jokT4WUXe8mOBrvfOXpci8+6Yu44+/dD5zqDpOx3Ux792eamTd2lLcI8jqFntk/lg==", 7556 + "license": "MIT" 7557 + }, 7558 + "node_modules/sirv": { 7559 + "version": "3.0.1", 7560 + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz", 7561 + "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==", 7562 + "license": "MIT", 7563 + "peer": true, 7564 + "dependencies": { 7565 + "@polka/url": "^1.0.0-next.24", 7566 + "mrmime": "^2.0.0", 7567 + "totalist": "^3.0.0" 7568 + }, 7569 + "engines": { 7570 + "node": ">=18" 4061 7571 } 4062 7572 }, 4063 7573 "node_modules/sisteransi": { ··· 4114 7624 "url": "https://github.com/sponsors/sindresorhus" 4115 7625 } 4116 7626 }, 7627 + "node_modules/string-width-cjs": { 7628 + "name": "string-width", 7629 + "version": "4.2.3", 7630 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 7631 + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 7632 + "license": "MIT", 7633 + "dependencies": { 7634 + "emoji-regex": "^8.0.0", 7635 + "is-fullwidth-code-point": "^3.0.0", 7636 + "strip-ansi": "^6.0.1" 7637 + }, 7638 + "engines": { 7639 + "node": ">=8" 7640 + } 7641 + }, 7642 + "node_modules/string-width-cjs/node_modules/ansi-regex": { 7643 + "version": "5.0.1", 7644 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 7645 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 7646 + "license": "MIT", 7647 + "engines": { 7648 + "node": ">=8" 7649 + } 7650 + }, 7651 + "node_modules/string-width-cjs/node_modules/emoji-regex": { 7652 + "version": "8.0.0", 7653 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 7654 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 7655 + "license": "MIT" 7656 + }, 7657 + "node_modules/string-width-cjs/node_modules/strip-ansi": { 7658 + "version": "6.0.1", 7659 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 7660 + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 7661 + "license": "MIT", 7662 + "dependencies": { 7663 + "ansi-regex": "^5.0.1" 7664 + }, 7665 + "engines": { 7666 + "node": ">=8" 7667 + } 7668 + }, 4117 7669 "node_modules/stringify-entities": { 4118 7670 "version": "4.0.4", 4119 7671 "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", ··· 4141 7693 }, 4142 7694 "funding": { 4143 7695 "url": "https://github.com/chalk/strip-ansi?sponsor=1" 7696 + } 7697 + }, 7698 + "node_modules/strip-ansi-cjs": { 7699 + "name": "strip-ansi", 7700 + "version": "6.0.1", 7701 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 7702 + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 7703 + "license": "MIT", 7704 + "dependencies": { 7705 + "ansi-regex": "^5.0.1" 7706 + }, 7707 + "engines": { 7708 + "node": ">=8" 7709 + } 7710 + }, 7711 + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { 7712 + "version": "5.0.1", 7713 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 7714 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 7715 + "license": "MIT", 7716 + "engines": { 7717 + "node": ">=8" 7718 + } 7719 + }, 7720 + "node_modules/style-to-object": { 7721 + "version": "1.0.8", 7722 + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz", 7723 + "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", 7724 + "license": "MIT", 7725 + "dependencies": { 7726 + "inline-style-parser": "0.2.4" 7727 + } 7728 + }, 7729 + "node_modules/sucrase": { 7730 + "version": "3.35.0", 7731 + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", 7732 + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", 7733 + "license": "MIT", 7734 + "dependencies": { 7735 + "@jridgewell/gen-mapping": "^0.3.2", 7736 + "commander": "^4.0.0", 7737 + "glob": "^10.3.10", 7738 + "lines-and-columns": "^1.1.6", 7739 + "mz": "^2.7.0", 7740 + "pirates": "^4.0.1", 7741 + "ts-interface-checker": "^0.1.9" 7742 + }, 7743 + "bin": { 7744 + "sucrase": "bin/sucrase", 7745 + "sucrase-node": "bin/sucrase-node" 7746 + }, 7747 + "engines": { 7748 + "node": ">=16 || 14 >=14.17" 7749 + } 7750 + }, 7751 + "node_modules/sucrase/node_modules/commander": { 7752 + "version": "4.1.1", 7753 + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", 7754 + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", 7755 + "license": "MIT", 7756 + "engines": { 7757 + "node": ">= 6" 7758 + } 7759 + }, 7760 + "node_modules/supports-preserve-symlinks-flag": { 7761 + "version": "1.0.0", 7762 + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 7763 + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 7764 + "license": "MIT", 7765 + "engines": { 7766 + "node": ">= 0.4" 7767 + }, 7768 + "funding": { 7769 + "url": "https://github.com/sponsors/ljharb" 7770 + } 7771 + }, 7772 + "node_modules/svelte": { 7773 + "version": "5.28.1", 7774 + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.28.1.tgz", 7775 + "integrity": "sha512-iOa9WmfNG95lSOSJdMhdjJ4Afok7IRAQYXpbnxhd5EINnXseG0GVa9j6WPght4eX78XfFez45Fi+uRglGKPV/Q==", 7776 + "license": "MIT", 7777 + "dependencies": { 7778 + "@ampproject/remapping": "^2.3.0", 7779 + "@jridgewell/sourcemap-codec": "^1.5.0", 7780 + "@sveltejs/acorn-typescript": "^1.0.5", 7781 + "@types/estree": "^1.0.5", 7782 + "acorn": "^8.12.1", 7783 + "aria-query": "^5.3.1", 7784 + "axobject-query": "^4.1.0", 7785 + "clsx": "^2.1.1", 7786 + "esm-env": "^1.2.1", 7787 + "esrap": "^1.4.6", 7788 + "is-reference": "^3.0.3", 7789 + "locate-character": "^3.0.0", 7790 + "magic-string": "^0.30.11", 7791 + "zimmerframe": "^1.1.2" 7792 + }, 7793 + "engines": { 7794 + "node": ">=18" 7795 + } 7796 + }, 7797 + "node_modules/svelte-sonner": { 7798 + "version": "0.3.28", 7799 + "resolved": "https://registry.npmjs.org/svelte-sonner/-/svelte-sonner-0.3.28.tgz", 7800 + "integrity": "sha512-K3AmlySeFifF/cKgsYNv5uXqMVNln0NBAacOYgmkQStLa/UoU0LhfAACU6Gr+YYC8bOCHdVmFNoKuDbMEsppJg==", 7801 + "license": "MIT", 7802 + "peerDependencies": { 7803 + "svelte": "^3.0.0 || ^4.0.0 || ^5.0.0-next.1" 7804 + } 7805 + }, 7806 + "node_modules/svelte-toolbelt": { 7807 + "version": "0.7.1", 7808 + "resolved": "https://registry.npmjs.org/svelte-toolbelt/-/svelte-toolbelt-0.7.1.tgz", 7809 + "integrity": "sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ==", 7810 + "funding": [ 7811 + "https://github.com/sponsors/huntabyte" 7812 + ], 7813 + "dependencies": { 7814 + "clsx": "^2.1.1", 7815 + "runed": "^0.23.2", 7816 + "style-to-object": "^1.0.8" 7817 + }, 7818 + "engines": { 7819 + "node": ">=18", 7820 + "pnpm": ">=8.7.0" 7821 + }, 7822 + "peerDependencies": { 7823 + "svelte": "^5.0.0" 7824 + } 7825 + }, 7826 + "node_modules/svelte2tsx": { 7827 + "version": "0.7.36", 7828 + "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.7.36.tgz", 7829 + "integrity": "sha512-nBlERuCZRwmpebC8m0vDqZ9oaKsqW8frQS2l3zwFQW1voQIkItYtHxh1F5OTZEmE0meDIH6cxU36eIOQVOxlCw==", 7830 + "license": "MIT", 7831 + "dependencies": { 7832 + "dedent-js": "^1.0.1", 7833 + "pascal-case": "^3.1.1" 7834 + }, 7835 + "peerDependencies": { 7836 + "svelte": "^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0", 7837 + "typescript": "^4.9.4 || ^5.0.0" 7838 + } 7839 + }, 7840 + "node_modules/tabbable": { 7841 + "version": "6.2.0", 7842 + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", 7843 + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", 7844 + "license": "MIT" 7845 + }, 7846 + "node_modules/tailwind-merge": { 7847 + "version": "3.2.0", 7848 + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.2.0.tgz", 7849 + "integrity": "sha512-FQT/OVqCD+7edmmJpsgCsY820RTD5AkBryuG5IUqR5YQZSdj5xlH5nLgH7YPths7WsLPSpSBNneJdM8aS8aeFA==", 7850 + "license": "MIT", 7851 + "funding": { 7852 + "type": "github", 7853 + "url": "https://github.com/sponsors/dcastil" 7854 + } 7855 + }, 7856 + "node_modules/tailwind-variants": { 7857 + "version": "0.3.1", 7858 + "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-0.3.1.tgz", 7859 + "integrity": "sha512-krn67M3FpPwElg4FsZrOQd0U26o7UDH/QOkK8RNaiCCrr052f6YJPBUfNKnPo/s/xRzNPtv1Mldlxsg8Tb46BQ==", 7860 + "license": "MIT", 7861 + "dependencies": { 7862 + "tailwind-merge": "2.5.4" 7863 + }, 7864 + "engines": { 7865 + "node": ">=16.x", 7866 + "pnpm": ">=7.x" 7867 + }, 7868 + "peerDependencies": { 7869 + "tailwindcss": "*" 7870 + } 7871 + }, 7872 + "node_modules/tailwind-variants/node_modules/tailwind-merge": { 7873 + "version": "2.5.4", 7874 + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.4.tgz", 7875 + "integrity": "sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==", 7876 + "license": "MIT", 7877 + "funding": { 7878 + "type": "github", 7879 + "url": "https://github.com/sponsors/dcastil" 7880 + } 7881 + }, 7882 + "node_modules/tailwindcss": { 7883 + "version": "4.1.4", 7884 + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.4.tgz", 7885 + "integrity": "sha512-1ZIUqtPITFbv/DxRmDr5/agPqJwF69d24m9qmM1939TJehgY539CtzeZRjbLt5G6fSy/7YqqYsfvoTEw9xUI2A==", 7886 + "license": "MIT" 7887 + }, 7888 + "node_modules/tailwindcss-animate": { 7889 + "version": "1.0.7", 7890 + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", 7891 + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", 7892 + "license": "MIT", 7893 + "peerDependencies": { 7894 + "tailwindcss": ">=3.0.0 || insiders" 7895 + } 7896 + }, 7897 + "node_modules/tapable": { 7898 + "version": "2.2.1", 7899 + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", 7900 + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", 7901 + "license": "MIT", 7902 + "engines": { 7903 + "node": ">=6" 7904 + } 7905 + }, 7906 + "node_modules/tar": { 7907 + "version": "7.4.3", 7908 + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", 7909 + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", 7910 + "license": "ISC", 7911 + "dependencies": { 7912 + "@isaacs/fs-minipass": "^4.0.0", 7913 + "chownr": "^3.0.0", 7914 + "minipass": "^7.1.2", 7915 + "minizlib": "^3.0.1", 7916 + "mkdirp": "^3.0.1", 7917 + "yallist": "^5.0.0" 7918 + }, 7919 + "engines": { 7920 + "node": ">=18" 7921 + } 7922 + }, 7923 + "node_modules/thenify": { 7924 + "version": "3.3.1", 7925 + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", 7926 + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", 7927 + "license": "MIT", 7928 + "dependencies": { 7929 + "any-promise": "^1.0.0" 7930 + } 7931 + }, 7932 + "node_modules/thenify-all": { 7933 + "version": "1.6.0", 7934 + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", 7935 + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", 7936 + "license": "MIT", 7937 + "dependencies": { 7938 + "thenify": ">= 3.1.0 < 4" 7939 + }, 7940 + "engines": { 7941 + "node": ">=0.8" 7942 + } 7943 + }, 7944 + "node_modules/three": { 7945 + "version": "0.173.0", 7946 + "resolved": "https://registry.npmjs.org/three/-/three-0.173.0.tgz", 7947 + "integrity": "sha512-AUwVmViIEUgBwxJJ7stnF0NkPpZxx1aZ6WiAbQ/Qq61h6I9UR4grXtZDmO8mnlaNORhHnIBlXJ1uBxILEKuVyw==", 7948 + "license": "MIT" 7949 + }, 7950 + "node_modules/three-instanced-uniforms-mesh": { 7951 + "version": "0.52.4", 7952 + "resolved": "https://registry.npmjs.org/three-instanced-uniforms-mesh/-/three-instanced-uniforms-mesh-0.52.4.tgz", 7953 + "integrity": "sha512-YwDBy05hfKZQtU+Rp0KyDf9yH4GxfhxMbVt9OYruxdgLfPwmDG5oAbGoW0DrKtKZSM3BfFcCiejiOHCjFBTeng==", 7954 + "license": "MIT", 7955 + "dependencies": { 7956 + "troika-three-utils": "^0.52.4" 7957 + }, 7958 + "peerDependencies": { 7959 + "three": ">=0.125.0" 7960 + } 7961 + }, 7962 + "node_modules/three-mesh-bvh": { 7963 + "version": "0.9.0", 7964 + "resolved": "https://registry.npmjs.org/three-mesh-bvh/-/three-mesh-bvh-0.9.0.tgz", 7965 + "integrity": "sha512-xAwZj0hZknpwVsdK5BBJTIAZDjDPZCRzURY1o+z/JHBON/jc2UetK1CzPeQZiiOVSfI4jV2z7sXnnGtgsgnjaA==", 7966 + "license": "MIT", 7967 + "peerDependencies": { 7968 + "three": ">= 0.159.0" 7969 + } 7970 + }, 7971 + "node_modules/three-perf": { 7972 + "version": "1.0.10", 7973 + "resolved": "git+ssh://git@github.com/jerzakm/three-perf.git#322d7d38a17069f2b6e9734913edad0fc4a29169", 7974 + "license": "MIT", 7975 + "dependencies": { 7976 + "troika-three-text": "^0.52.0", 7977 + "tweakpane": "^3.1.10" 7978 + }, 7979 + "peerDependencies": { 7980 + "three": ">=0.170" 7981 + } 7982 + }, 7983 + "node_modules/three-viewport-gizmo": { 7984 + "version": "2.2.0", 7985 + "resolved": "https://registry.npmjs.org/three-viewport-gizmo/-/three-viewport-gizmo-2.2.0.tgz", 7986 + "integrity": "sha512-Jo9Liur1rUmdKk75FZumLU/+hbF+RtJHi1qsKZpntjKlCYScK6tjbYoqvJ9M+IJphrlQJF5oReFW7Sambh0N4Q==", 7987 + "license": "MIT", 7988 + "peerDependencies": { 7989 + "three": ">=0.162.0 <1.0.0" 4144 7990 } 4145 7991 }, 4146 7992 "node_modules/tiny-inflate": { ··· 4171 8017 "url": "https://github.com/sponsors/SuperchupuDev" 4172 8018 } 4173 8019 }, 8020 + "node_modules/tlds": { 8021 + "version": "1.256.0", 8022 + "resolved": "https://registry.npmjs.org/tlds/-/tlds-1.256.0.tgz", 8023 + "integrity": "sha512-ZmyVB9DAw+FFTmLElGYJgdZFsKLYd/I59Bg9NHkCGPwAbVZNRilFWDMAdX8UG+bHuv7kfursd5XGqo/9wi26lA==", 8024 + "license": "MIT", 8025 + "bin": { 8026 + "tlds": "bin.js" 8027 + } 8028 + }, 8029 + "node_modules/to-regex-range": { 8030 + "version": "5.0.1", 8031 + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 8032 + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 8033 + "license": "MIT", 8034 + "dependencies": { 8035 + "is-number": "^7.0.0" 8036 + }, 8037 + "engines": { 8038 + "node": ">=8.0" 8039 + } 8040 + }, 8041 + "node_modules/totalist": { 8042 + "version": "3.0.1", 8043 + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", 8044 + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", 8045 + "license": "MIT", 8046 + "peer": true, 8047 + "engines": { 8048 + "node": ">=6" 8049 + } 8050 + }, 4174 8051 "node_modules/tr46": { 4175 8052 "version": "0.0.3", 4176 8053 "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", ··· 4187 8064 "url": "https://github.com/sponsors/wooorm" 4188 8065 } 4189 8066 }, 8067 + "node_modules/troika-three-text": { 8068 + "version": "0.52.4", 8069 + "resolved": "https://registry.npmjs.org/troika-three-text/-/troika-three-text-0.52.4.tgz", 8070 + "integrity": "sha512-V50EwcYGruV5rUZ9F4aNsrytGdKcXKALjEtQXIOBfhVoZU9VAqZNIoGQ3TMiooVqFAbR1w15T+f+8gkzoFzawg==", 8071 + "license": "MIT", 8072 + "dependencies": { 8073 + "bidi-js": "^1.0.2", 8074 + "troika-three-utils": "^0.52.4", 8075 + "troika-worker-utils": "^0.52.0", 8076 + "webgl-sdf-generator": "1.1.1" 8077 + }, 8078 + "peerDependencies": { 8079 + "three": ">=0.125.0" 8080 + } 8081 + }, 8082 + "node_modules/troika-three-utils": { 8083 + "version": "0.52.4", 8084 + "resolved": "https://registry.npmjs.org/troika-three-utils/-/troika-three-utils-0.52.4.tgz", 8085 + "integrity": "sha512-NORAStSVa/BDiG52Mfudk4j1FG4jC4ILutB3foPnfGbOeIs9+G5vZLa0pnmnaftZUGm4UwSoqEpWdqvC7zms3A==", 8086 + "license": "MIT", 8087 + "peerDependencies": { 8088 + "three": ">=0.125.0" 8089 + } 8090 + }, 8091 + "node_modules/troika-worker-utils": { 8092 + "version": "0.52.0", 8093 + "resolved": "https://registry.npmjs.org/troika-worker-utils/-/troika-worker-utils-0.52.0.tgz", 8094 + "integrity": "sha512-W1CpvTHykaPH5brv5VHLfQo9D1OYuo0cSBEUQFFT/nBUzM8iD6Lq2/tgG/f1OelbAS1WtaTPQzE5uM49egnngw==", 8095 + "license": "MIT" 8096 + }, 4190 8097 "node_modules/trough": { 4191 8098 "version": "2.2.0", 4192 8099 "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", ··· 4196 8103 "type": "github", 4197 8104 "url": "https://github.com/sponsors/wooorm" 4198 8105 } 8106 + }, 8107 + "node_modules/ts-interface-checker": { 8108 + "version": "0.1.13", 8109 + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", 8110 + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", 8111 + "license": "Apache-2.0" 4199 8112 }, 4200 8113 "node_modules/tsconfck": { 4201 8114 "version": "3.1.5", ··· 4223 8136 "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", 4224 8137 "license": "0BSD" 4225 8138 }, 8139 + "node_modules/tweakpane": { 8140 + "version": "3.1.10", 8141 + "resolved": "https://registry.npmjs.org/tweakpane/-/tweakpane-3.1.10.tgz", 8142 + "integrity": "sha512-rqwnl/pUa7+inhI2E9ayGTqqP0EPOOn/wVvSWjZsRbZUItzNShny7pzwL3hVlaN4m9t/aZhsP0aFQ9U5VVR2VQ==", 8143 + "license": "MIT", 8144 + "funding": { 8145 + "url": "https://github.com/sponsors/cocopon" 8146 + } 8147 + }, 4226 8148 "node_modules/type-fest": { 4227 8149 "version": "4.40.0", 4228 8150 "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.40.0.tgz", ··· 4240 8162 "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", 4241 8163 "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", 4242 8164 "license": "Apache-2.0", 4243 - "peer": true, 4244 8165 "bin": { 4245 8166 "tsc": "bin/tsc", 4246 8167 "tsserver": "bin/tsserver" ··· 4255 8176 "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", 4256 8177 "license": "MIT" 4257 8178 }, 8179 + "node_modules/uint8arrays": { 8180 + "version": "3.0.0", 8181 + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.0.0.tgz", 8182 + "integrity": "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==", 8183 + "license": "MIT", 8184 + "dependencies": { 8185 + "multiformats": "^9.4.2" 8186 + } 8187 + }, 4258 8188 "node_modules/ultrahtml": { 4259 8189 "version": "1.6.0", 4260 8190 "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz", ··· 4266 8196 "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", 4267 8197 "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", 4268 8198 "license": "MIT" 8199 + }, 8200 + "node_modules/undici": { 8201 + "version": "6.21.2", 8202 + "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.2.tgz", 8203 + "integrity": "sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g==", 8204 + "license": "MIT", 8205 + "engines": { 8206 + "node": ">=18.17" 8207 + } 4269 8208 }, 4270 8209 "node_modules/unicode-properties": { 4271 8210 "version": "1.4.1", ··· 4531 8470 } 4532 8471 } 4533 8472 }, 8473 + "node_modules/url-polyfill": { 8474 + "version": "1.1.13", 8475 + "resolved": "https://registry.npmjs.org/url-polyfill/-/url-polyfill-1.1.13.tgz", 8476 + "integrity": "sha512-tXzkojrv2SujumYthZ/WjF7jaSfNhSXlYMpE5AYdL2I3D7DCeo+mch8KtW2rUuKjDg+3VXODXHVgipt8yGY/eQ==", 8477 + "license": "MIT" 8478 + }, 8479 + "node_modules/util-deprecate": { 8480 + "version": "1.0.2", 8481 + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 8482 + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 8483 + "license": "MIT" 8484 + }, 4534 8485 "node_modules/vfile": { 4535 8486 "version": "6.0.3", 4536 8487 "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", ··· 4647 8598 } 4648 8599 } 4649 8600 }, 8601 + "node_modules/vite-imagetools": { 8602 + "version": "6.2.9", 8603 + "resolved": "https://registry.npmjs.org/vite-imagetools/-/vite-imagetools-6.2.9.tgz", 8604 + "integrity": "sha512-C4ZYhgj2vAj43/TpZ06XlDNP0p/7LIeYbgUYr+xG44nM++4HGX6YZBKAYpiBNgiCFUTJ6eXkRppWBrfPMevgmg==", 8605 + "license": "MIT", 8606 + "dependencies": { 8607 + "@rollup/pluginutils": "^5.0.5", 8608 + "imagetools-core": "^6.0.4" 8609 + }, 8610 + "engines": { 8611 + "node": ">=12.0.0" 8612 + } 8613 + }, 8614 + "node_modules/vite-plugin-glsl": { 8615 + "version": "1.4.1", 8616 + "resolved": "https://registry.npmjs.org/vite-plugin-glsl/-/vite-plugin-glsl-1.4.1.tgz", 8617 + "integrity": "sha512-LkfLZeHdyl0drA71GmCCfcTeLuXyn/DYwDfjzQrupvNYVwdFRvb7nkCnCm0o9LZRKxS4/8r7E3KNM7KQjWrWWQ==", 8618 + "license": "MIT", 8619 + "dependencies": { 8620 + "@rollup/pluginutils": "^5.1.4" 8621 + }, 8622 + "engines": { 8623 + "node": ">= 20.17.0", 8624 + "npm": ">= 10.8.3" 8625 + }, 8626 + "peerDependencies": { 8627 + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" 8628 + } 8629 + }, 4650 8630 "node_modules/vitefu": { 4651 8631 "version": "1.0.6", 4652 8632 "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.0.6.tgz", ··· 4665 8645 } 4666 8646 } 4667 8647 }, 8648 + "node_modules/wavesurfer.js": { 8649 + "version": "7.9.4", 8650 + "resolved": "https://registry.npmjs.org/wavesurfer.js/-/wavesurfer.js-7.9.4.tgz", 8651 + "integrity": "sha512-ahOMvrOKo5jULNnXq8Ske8v/ZStoNNTDjYohvgLNerUFuh+6fJSt7wlxFesEXmnlcTnjMy5/tIzhn9KusjO6bg==", 8652 + "license": "BSD-3-Clause" 8653 + }, 4668 8654 "node_modules/web-namespaces": { 4669 8655 "version": "2.0.1", 4670 8656 "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", ··· 4675 8661 "url": "https://github.com/sponsors/wooorm" 4676 8662 } 4677 8663 }, 8664 + "node_modules/web-streams-polyfill": { 8665 + "version": "3.3.3", 8666 + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", 8667 + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", 8668 + "license": "MIT", 8669 + "engines": { 8670 + "node": ">= 8" 8671 + } 8672 + }, 8673 + "node_modules/webgl-sdf-generator": { 8674 + "version": "1.1.1", 8675 + "resolved": "https://registry.npmjs.org/webgl-sdf-generator/-/webgl-sdf-generator-1.1.1.tgz", 8676 + "integrity": "sha512-9Z0JcMTFxeE+b2x1LJTdnaT8rT8aEp7MVxkNwoycNmJWwPdzoXzMh0BjJSh/AEFP+KPYZUli814h8bJZFIZ2jA==", 8677 + "license": "MIT" 8678 + }, 4678 8679 "node_modules/webidl-conversions": { 4679 8680 "version": "3.0.1", 4680 8681 "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 4681 8682 "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", 4682 8683 "license": "BSD-2-Clause" 8684 + }, 8685 + "node_modules/whatwg-encoding": { 8686 + "version": "3.1.1", 8687 + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", 8688 + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", 8689 + "license": "MIT", 8690 + "dependencies": { 8691 + "iconv-lite": "0.6.3" 8692 + }, 8693 + "engines": { 8694 + "node": ">=18" 8695 + } 8696 + }, 8697 + "node_modules/whatwg-mimetype": { 8698 + "version": "4.0.0", 8699 + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", 8700 + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", 8701 + "license": "MIT", 8702 + "engines": { 8703 + "node": ">=18" 8704 + } 4683 8705 }, 4684 8706 "node_modules/whatwg-url": { 4685 8707 "version": "5.0.0", ··· 4689 8711 "dependencies": { 4690 8712 "tr46": "~0.0.3", 4691 8713 "webidl-conversions": "^3.0.0" 8714 + } 8715 + }, 8716 + "node_modules/which": { 8717 + "version": "2.0.2", 8718 + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 8719 + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 8720 + "license": "ISC", 8721 + "dependencies": { 8722 + "isexe": "^2.0.0" 8723 + }, 8724 + "bin": { 8725 + "node-which": "bin/node-which" 8726 + }, 8727 + "engines": { 8728 + "node": ">= 8" 4692 8729 } 4693 8730 }, 4694 8731 "node_modules/which-pm-runs": { ··· 4732 8769 "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 4733 8770 } 4734 8771 }, 8772 + "node_modules/wrap-ansi-cjs": { 8773 + "name": "wrap-ansi", 8774 + "version": "7.0.0", 8775 + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 8776 + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 8777 + "license": "MIT", 8778 + "dependencies": { 8779 + "ansi-styles": "^4.0.0", 8780 + "string-width": "^4.1.0", 8781 + "strip-ansi": "^6.0.0" 8782 + }, 8783 + "engines": { 8784 + "node": ">=10" 8785 + }, 8786 + "funding": { 8787 + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 8788 + } 8789 + }, 8790 + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { 8791 + "version": "5.0.1", 8792 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 8793 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 8794 + "license": "MIT", 8795 + "engines": { 8796 + "node": ">=8" 8797 + } 8798 + }, 8799 + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { 8800 + "version": "4.3.0", 8801 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 8802 + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 8803 + "license": "MIT", 8804 + "dependencies": { 8805 + "color-convert": "^2.0.1" 8806 + }, 8807 + "engines": { 8808 + "node": ">=8" 8809 + }, 8810 + "funding": { 8811 + "url": "https://github.com/chalk/ansi-styles?sponsor=1" 8812 + } 8813 + }, 8814 + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { 8815 + "version": "8.0.0", 8816 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 8817 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 8818 + "license": "MIT" 8819 + }, 8820 + "node_modules/wrap-ansi-cjs/node_modules/string-width": { 8821 + "version": "4.2.3", 8822 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 8823 + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 8824 + "license": "MIT", 8825 + "dependencies": { 8826 + "emoji-regex": "^8.0.0", 8827 + "is-fullwidth-code-point": "^3.0.0", 8828 + "strip-ansi": "^6.0.1" 8829 + }, 8830 + "engines": { 8831 + "node": ">=8" 8832 + } 8833 + }, 8834 + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { 8835 + "version": "6.0.1", 8836 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 8837 + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 8838 + "license": "MIT", 8839 + "dependencies": { 8840 + "ansi-regex": "^5.0.1" 8841 + }, 8842 + "engines": { 8843 + "node": ">=8" 8844 + } 8845 + }, 4735 8846 "node_modules/xxhash-wasm": { 4736 8847 "version": "1.1.0", 4737 8848 "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", 4738 8849 "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==", 4739 8850 "license": "MIT" 8851 + }, 8852 + "node_modules/yallist": { 8853 + "version": "5.0.0", 8854 + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", 8855 + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", 8856 + "license": "BlueOak-1.0.0", 8857 + "engines": { 8858 + "node": ">=18" 8859 + } 8860 + }, 8861 + "node_modules/yaml": { 8862 + "version": "2.7.1", 8863 + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz", 8864 + "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==", 8865 + "license": "ISC", 8866 + "bin": { 8867 + "yaml": "bin.mjs" 8868 + }, 8869 + "engines": { 8870 + "node": ">= 14" 8871 + } 4740 8872 }, 4741 8873 "node_modules/yargs-parser": { 4742 8874 "version": "21.1.1", ··· 4785 8917 "funding": { 4786 8918 "url": "https://github.com/sponsors/sindresorhus" 4787 8919 } 8920 + }, 8921 + "node_modules/zimmerframe": { 8922 + "version": "1.1.2", 8923 + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz", 8924 + "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==", 8925 + "license": "MIT" 4788 8926 }, 4789 8927 "node_modules/zod": { 4790 8928 "version": "3.24.3",
+18 -2
package.json
··· 9 9 "astro": "astro" 10 10 }, 11 11 "dependencies": { 12 - "astro": "^5.7.4" 12 + "@ascorbic/bluesky-loader": "^0.0.3", 13 + "@astrojs/svelte": "^7.0.10", 14 + "@atcute/client": "^3.0.1", 15 + "@atproto/api": "^0.15.3", 16 + "@tailwindcss/vite": "^4.1.4", 17 + "astro": "^5.7.4", 18 + "fuchs": "^0.0.28", 19 + "marked": "^15.0.8", 20 + "simple-icons": "^14.12.3", 21 + "simple-icons-astro": "^14.12.3", 22 + "svelte": "^5.28.1", 23 + "tailwind-merge": "^3.2.0", 24 + "tailwindcss": "^4.1.4", 25 + "typescript": "^5.8.3" 26 + }, 27 + "devDependencies": { 28 + "@tailwindcss/typography": "^0.5.16" 13 29 } 14 - } 30 + }
+5
svelte.config.js
··· 1 + import { vitePreprocess } from '@astrojs/svelte'; 2 + 3 + export default { 4 + preprocess: vitePreprocess(), 5 + }
+42
src/content.config.ts
··· 1 + import { defineCollection } from "astro:content"; 2 + import { authorFeedLoader } from "@ascorbic/bluesky-loader"; 3 + import { authorBlogPostsLoader, authorLinksLoader, authorProfileLoader, authorSocialLinksLoader, authorAboutLoader } from "./utils/atproto"; 4 + 5 + const posts = defineCollection({ 6 + loader: authorFeedLoader({ 7 + identifier: 'flo-bit.dev', 8 + filter: 'posts_no_replies', 9 + }), 10 + }); 11 + 12 + const links = defineCollection({ 13 + loader: authorLinksLoader({ 14 + identifier: 'flo-bit.dev', 15 + }), 16 + }); 17 + 18 + const socialLinks = defineCollection({ 19 + loader: authorSocialLinksLoader({ 20 + identifier: 'flo-bit.dev', 21 + }), 22 + }); 23 + 24 + const profile = defineCollection({ 25 + loader: authorProfileLoader({ 26 + identifier: 'flo-bit.dev', 27 + }), 28 + }); 29 + 30 + const blog = defineCollection({ 31 + loader: authorBlogPostsLoader({ 32 + identifier: 'flo-bit.dev', 33 + }), 34 + }); 35 + 36 + const about = defineCollection({ 37 + loader: authorAboutLoader({ 38 + identifier: 'flo-bit.dev', 39 + }), 40 + }); 41 + 42 + export const collections = { blog, posts, links, socialLinks, profile, about };
+34
.github/workflows/deploy.yml
··· 1 + name: Deploy to GitHub Pages 2 + 3 + on: 4 + push: 5 + branches: [main] 6 + workflow_dispatch: 7 + schedule: 8 + - cron: "0 */12 * * *" # every 12 hours 9 + 10 + permissions: 11 + contents: read 12 + pages: write 13 + id-token: write 14 + 15 + jobs: 16 + build: 17 + runs-on: ubuntu-latest 18 + steps: 19 + - name: Checkout your repository using git 20 + uses: actions/checkout@v4 21 + 22 + - name: Install, build, and upload your site 23 + uses: withastro/action@v3 24 + 25 + deploy: 26 + needs: build 27 + runs-on: ubuntu-latest 28 + environment: 29 + name: github-pages 30 + url: ${{ steps.deployment.outputs.page_url }} 31 + steps: 32 + - name: Deploy to GitHub Pages 33 + id: deployment 34 + uses: actions/deploy-pages@v4
+66
src/components/Avatar.svelte
··· 1 + <script lang="ts"> 2 + import { cn } from '../utils/styling'; 3 + 4 + let { 5 + src, 6 + alt, 7 + fallback, 8 + 9 + imageRef = $bindable(null), 10 + imageClass, 11 + 12 + fallbackRef = $bindable(null), 13 + fallbackClass, 14 + 15 + useThemeColor = false, 16 + 17 + class: className, 18 + ...restProps 19 + }: { 20 + fallback?: string; 21 + imageRef?: HTMLImageElement | null; 22 + imageClass?: string; 23 + fallbackRef?: HTMLElement | null; 24 + fallbackClass?: string; 25 + 26 + src?: string; 27 + alt?: string; 28 + 29 + useThemeColor?: boolean; 30 + class?: string; 31 + } = $props(); 32 + </script> 33 + 34 + <div 35 + class={cn( 36 + 'border-base-300 bg-base-200 text-base-900 dark:border-base-800 dark:bg-base-900 dark:text-base-50 relative isolate flex size-10 shrink-0 overflow-hidden rounded-full border', 37 + className 38 + )} 39 + {...restProps} 40 + > 41 + {#if fallback} 42 + <span class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 font-medium" 43 + >{fallback}</span 44 + > 45 + {:else} 46 + <svg 47 + xmlns="http://www.w3.org/2000/svg" 48 + viewBox="0 0 24 24" 49 + fill="currentColor" 50 + class="text-base-400 dark:text-base-600 absolute top-1/2 left-1/2 mt-[15%] size-full -translate-x-1/2 -translate-y-1/2" 51 + > 52 + <path 53 + fill-rule="evenodd" 54 + d="M7.5 6a4.5 4.5 0 1 1 9 0 4.5 4.5 0 0 1-9 0ZM3.751 20.105a8.25 8.25 0 0 1 16.498 0 .75.75 0 0 1-.437.695A18.683 18.683 0 0 1 12 22.5c-2.786 0-5.433-.608-7.812-1.7a.75.75 0 0 1-.437-.695Z" 55 + clip-rule="evenodd" 56 + /> 57 + </svg> 58 + {/if} 59 + {#if src} 60 + <img 61 + {src} 62 + alt={alt ?? ''} 63 + class="z-10 aspect-square size-full object-cover" 64 + /> 65 + {/if} 66 + </div>
+37
src/components/BlogEntry.astro
··· 1 + --- 2 + import FormattedDate from "./FormattedDate.astro"; 3 + 4 + const { post } = Astro.props; 5 + 6 + console.log(post); 7 + --- 8 + 9 + <article class="relative isolate flex flex-col gap-8 md:flex-row group"> 10 + <div> 11 + <div class={"flex items-center gap-x-4 text-xs"}> 12 + <time datetime={post.createdAt} class="text-base-500 shrink-0"> 13 + <FormattedDate date={post.createdAt} /> 14 + </time> 15 + </div> 16 + <div class="max-w-xl"> 17 + <div 18 + class="mt-3 text-lg font-semibold leading-6 text-base-900 dark:text-base-50" 19 + > 20 + <a 21 + href={`/bluesky-home/blog/posts/${post.title?.replaceAll(" ", "-")}/`} 22 + > 23 + <span class="absolute inset-0"></span> 24 + {post.title} 25 + </a> 26 + 27 + <div 28 + class="absolute -inset-2 md:-inset-4 rounded-2xl opacity-0 group-hover:opacity-100 scale-95 group-hover:scale-100 bg-base-200/30 dark:bg-base-800/30 -z-10 transition-all duration-150" 29 + > 30 + </div> 31 + </div> 32 + <p class="mt-5 text-sm leading-6 text-base-600 dark:text-base-400"> 33 + {post.description} 34 + </p> 35 + </div> 36 + </div> 37 + </article>
+17
src/components/FormattedDate.astro
··· 1 + --- 2 + interface Props { 3 + date: string; 4 + } 5 + 6 + const { date } = Astro.props; 7 + --- 8 + 9 + <time datetime={date}> 10 + { 11 + new Date(date).toLocaleDateString("en-us", { 12 + year: "numeric", 13 + month: "short", 14 + day: "numeric", 15 + }) 16 + } 17 + </time>
+27
src/components/Links.astro
··· 1 + --- 2 + import { getCollection } from "astro:content"; 3 + 4 + const links = await getCollection("links"); 5 + 6 + console.log(links); 7 + --- 8 + 9 + <div class="text-white mt-6 px-4 flex flex-col gap-6"> 10 + { 11 + links.map((link) => ( 12 + <div> 13 + <a 14 + href={link.data.value.url} 15 + target="_blank" 16 + class="font-medium text-accent-600 dark:text-accent-400" 17 + > 18 + {link.data.value.label ?? link.data.value.url} 19 + </a> 20 + 21 + <div class="text-base-600 dark:text-base-400 mt-1 text-sm"> 22 + {link.data.value.description} 23 + </div> 24 + </div> 25 + )) 26 + } 27 + </div>
+22
src/components/SocialIcons.astro
··· 1 + --- 2 + import { Github, Bluesky } from "simple-icons-astro"; 3 + import { getCollection } from "astro:content"; 4 + 5 + const socialLinks = await getCollection("socialLinks"); 6 + 7 + console.log(socialLinks); 8 + --- 9 + 10 + <div class="flex flex-wrap gap-4"> 11 + { 12 + socialLinks.map((link) => ( 13 + <a 14 + href={link.data.value.url} 15 + target="_blank" 16 + class="text-white hover:text-accent-600 dark:hover:text-accent-400" 17 + > 18 + {link.data.value.name === "github" ? <Github /> : <Bluesky />} 19 + </a> 20 + )) 21 + } 22 + </div>
+52
src/components/UserProfile.astro
··· 1 + --- 2 + import { cn } from "../utils/styling"; 3 + import Avatar from "./Avatar.svelte"; 4 + 5 + let { profile } = Astro.props; 6 + --- 7 + 8 + { 9 + !profile ? null : ( 10 + <div class="mx-auto max-w-full sm:max-w-2xl sm:py-6"> 11 + <div> 12 + {profile.banner ? ( 13 + <img 14 + class="aspect-[3/1] w-full border-b border-base-200 dark:border-base-800 object-cover sm:rounded-xl sm:border" 15 + src={profile.banner} 16 + alt="" 17 + /> 18 + ) : ( 19 + <div class="aspect-[8/1] w-full" /> 20 + )} 21 + </div> 22 + <div 23 + class={cn( 24 + profile.banner ? "-mt-11" : "-mt-8", 25 + "flex max-w-full items-end space-x-5 px-4 sm:-mt-16 sm:px-6 lg:px-8" 26 + )} 27 + > 28 + <Avatar 29 + src={profile.avatar} 30 + class="border-base-50 dark:border-base-950 border-2 size-24 sm:size-32" 31 + /> 32 + <div class="flex min-w-0 flex-1 flex-row sm:flex-row sm:items-center sm:justify-end sm:space-x-6 sm:pb-1"> 33 + <div 34 + class={cn( 35 + profile.banner ? "mt-4 sm:mt-0" : "-mt-[4.5rem] sm:-mt-[6.5rem]", 36 + "flex min-w-0 max-w-full flex-1 flex-col items-baseline" 37 + )} 38 + > 39 + <h1 class="max-w-full truncate text-lg font-bold text-base-900 dark:text-base-100 sm:text-xl"> 40 + {profile.displayName || profile.handle} 41 + </h1> 42 + <div class="truncate text-xs text-base-900 dark:text-base-400 sm:text-sm"> 43 + {profile.handle} 44 + </div> 45 + </div> 46 + </div> 47 + 48 + <slot /> 49 + </div> 50 + </div> 51 + ) 52 + }
+44 -17
src/layouts/Layout.astro
··· 1 + --- 2 + import SocialIcons from "../components/SocialIcons.astro"; 3 + import UserProfile from "../components/UserProfile.astro"; 4 + import { getCollection } from "astro:content"; 5 + 6 + const profile = await getCollection("profile"); 7 + 8 + console.log(profile); 9 + 10 + import "../styles/global.css"; 11 + --- 12 + 1 13 <!doctype html> 2 - <html lang="en"> 3 - <head> 4 - <meta charset="UTF-8" /> 5 - <meta name="viewport" content="width=device-width" /> 6 - <link rel="icon" type="image/svg+xml" href="/favicon.svg" /> 7 - <meta name="generator" content={Astro.generator} /> 8 - <title>Astro Basics</title> 9 - </head> 10 - <body> 11 - <slot /> 12 - </body> 14 + <html lang="en" class="dark"> 15 + <head> 16 + <meta charset="UTF-8" /> 17 + <meta name="viewport" content="width=device-width" /> 18 + <meta name="generator" content={Astro.generator} /> 19 + 20 + <link 21 + rel="icon" 22 + href=`data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>😊</text></svg>` 23 + /> 24 + 25 + <title> 26 + {profile[0].data.displayName ?? profile[0].data.handle} 27 + </title> 28 + </head> 29 + <body class="bg-base-50 dark:bg-base-950"> 30 + <div 31 + class="flex flex-col items-start justify-start h-screen mx-auto max-w-2xl" 32 + > 33 + <UserProfile profile={profile[0].data}> 34 + <SocialIcons /> 35 + </UserProfile> 36 + 37 + <slot /> 38 + </div> 39 + </body> 13 40 </html> 14 41 15 42 <style> 16 - html, 17 - body { 18 - margin: 0; 19 - width: 100%; 20 - height: 100%; 21 - } 43 + html, 44 + body { 45 + margin: 0; 46 + width: 100%; 47 + height: 100%; 48 + } 22 49 </style>
+8
src/layouts/Markdown.astro
··· 1 + <div 2 + class:list={[ 3 + "prose prose-sm prose-img:rounded-xl dark:prose-invert prose-a:no-underline prose-zinc prose-emerald", 4 + "prose-inline-code:bg-base-100 dark:prose-inline-code:bg-base-800 prose-inline-code:p-1 prose-inline-code:rounded-md", 5 + ]} 6 + > 7 + <slot /> 8 + </div>
+18 -5
src/pages/index.astro
··· 1 1 --- 2 - import Welcome from '../components/Welcome.astro'; 3 - import Layout from '../layouts/Layout.astro'; 2 + import Layout from "../layouts/Layout.astro"; 3 + import DesktopNavigation from "../components/Navigation/DektopNavigation.astro"; 4 + import { getCollection, render } from "astro:content"; 5 + import Markdown from "../layouts/Markdown.astro"; 4 6 5 - // Welcome to Astro! Wondering what to do next? Check out the Astro documentation at https://docs.astro.build 6 - // Don't want to use any of this? Delete everything in this file, the `assets`, `components`, and `layouts` directories, and start fresh. 7 + const about = await getCollection("about"); 8 + console.log(about); 9 + 10 + const { Content } = await render(about[0]); 7 11 --- 8 12 9 13 <Layout> 10 - <Welcome /> 14 + <DesktopNavigation 15 + items={["about", "links", "feed", "blog"]} 16 + active="about" 17 + /> 18 + 19 + <div class="mt-8 mx-4"> 20 + <Markdown> 21 + <Content /> 22 + </Markdown> 23 + </div> 11 24 </Layout>
+30
src/styles/global.css
··· 1 + @import "tailwindcss"; 2 + @plugin "@tailwindcss/typography"; 3 + 4 + @custom-variant dark (&:is(.dark *)); 5 + 6 + @theme { 7 + --color-base-50: var(--color-zinc-50); 8 + --color-base-100: var(--color-zinc-100); 9 + --color-base-200: var(--color-zinc-200); 10 + --color-base-300: var(--color-zinc-300); 11 + --color-base-400: var(--color-zinc-400); 12 + --color-base-500: var(--color-zinc-500); 13 + --color-base-600: var(--color-zinc-600); 14 + --color-base-700: var(--color-zinc-700); 15 + --color-base-800: var(--color-zinc-800); 16 + --color-base-900: var(--color-zinc-900); 17 + --color-base-950: var(--color-zinc-950); 18 + 19 + --color-accent-50: var(--color-emerald-50); 20 + --color-accent-100: var(--color-emerald-100); 21 + --color-accent-200: var(--color-emerald-200); 22 + --color-accent-300: var(--color-emerald-300); 23 + --color-accent-400: var(--color-emerald-400); 24 + --color-accent-500: var(--color-emerald-500); 25 + --color-accent-600: var(--color-emerald-600); 26 + --color-accent-700: var(--color-emerald-700); 27 + --color-accent-800: var(--color-emerald-800); 28 + --color-accent-900: var(--color-emerald-900); 29 + --color-accent-950: var(--color-emerald-950); 30 + }
+355
src/utils/atproto.ts
··· 1 + 2 + import { AtpBaseClient } from "@atproto/api"; 3 + import type { Loader } from "astro/loaders"; 4 + 5 + const didPDSCache: Record<string, string> = {}; 6 + 7 + const getPDS = async (did: string) => { 8 + if (did in didPDSCache) return didPDSCache[did]; 9 + const res = await fetch( 10 + did.startsWith('did:web') 11 + ? `https://${did.split(':')[2]}/.well-known/did.json` 12 + : 'https://plc.directory/' + did 13 + ); 14 + 15 + return res.json().then((doc) => { 16 + if (!doc.service) throw new Error('No PDS found'); 17 + for (const service of doc.service) { 18 + if (service.id === '#atproto_pds') { 19 + didPDSCache[did] = service.serviceEndpoint.toString(); 20 + } 21 + } 22 + return didPDSCache[did]; 23 + }); 24 + }; 25 + 26 + 27 + export async function getProfile({ 28 + agent, 29 + did, 30 + }: { 31 + agent: AtpBaseClient; 32 + did: string; 33 + }) { 34 + const { data } = await agent.app.bsky.actor.getProfile({ actor: did }); 35 + return data; 36 + } 37 + 38 + export async function listRecords({ did, collection, cursor }: { did: string; collection: string, cursor?: string }): Promise<any> { 39 + const pds = await getPDS(did); 40 + 41 + const agent = new AtpBaseClient({ service: pds }); 42 + 43 + const room = await agent.com.atproto.repo.listRecords({ 44 + repo: did, 45 + collection, 46 + limit: 100, 47 + cursor, 48 + }); 49 + 50 + return room.data.records; 51 + } 52 + 53 + export async function getRecord({ did, collection, rkey }: { did: string; collection: string, rkey: string }): Promise<any> { 54 + const pds = await getPDS(did); 55 + 56 + const agent = new AtpBaseClient({ service: pds }); 57 + 58 + const room = await agent.com.atproto.repo.getRecord({ 59 + repo: did, 60 + collection, 61 + rkey 62 + }); 63 + 64 + return room.data; 65 + } 66 + 67 + export async function resolveHandle({ handle }: { handle: string }) { 68 + const agent = new AtpBaseClient({ service: 'https://public.api.bsky.app' }); 69 + 70 + const data = await agent.com.atproto.identity.resolveHandle({ handle }); 71 + return data.data.did; 72 + } 73 + 74 + export const authorLinksLoader = ({ 75 + identifier, 76 + limit, 77 + }: { 78 + identifier: string; 79 + limit?: number; 80 + }): Loader => { 81 + return { 82 + name: "bluesky-links-loader", 83 + async load({ store, logger, meta, parseData }) { 84 + try { 85 + const mostRecent = meta.get("lastFetched") ?? 0; 86 + 87 + let cursor = undefined; 88 + let first; 89 + let count = 0; 90 + let did = await resolveHandle({ handle: identifier }); 91 + 92 + fetching: do { 93 + const data = await listRecords({ 94 + did, 95 + collection: "link.flo-bit.dev", 96 + cursor, 97 + }); 98 + 99 + for (const post of data) { 100 + if ( 101 + (mostRecent && mostRecent === post.cid) || 102 + (limit && count >= limit) 103 + ) { 104 + count++; 105 + break fetching; 106 + } 107 + count++; 108 + 109 + first ??= post.cid; 110 + 111 + store.set({ 112 + id: post.uri, 113 + data: await parseData({ 114 + id: post.uri, 115 + // Convert the post object to a plain object 116 + data: JSON.parse(JSON.stringify(post)), 117 + }), 118 + }); 119 + } 120 + cursor = data.cursor; 121 + logger.info(`Fetched ${count} links`); 122 + } while (cursor); 123 + 124 + if (first) { 125 + meta.set("lastFetched", first); 126 + } 127 + } catch (error) { 128 + logger.error( 129 + `Failed to load Bluesky links. ${(error as Error).message}`, 130 + ); 131 + } 132 + }, 133 + }; 134 + }; 135 + 136 + 137 + export const authorSocialLinksLoader = ({ 138 + identifier, 139 + limit, 140 + }: { 141 + identifier: string; 142 + limit?: number; 143 + }): Loader => { 144 + return { 145 + name: "bluesky-social-links-loader", 146 + async load({ store, logger, meta, parseData }) { 147 + try { 148 + const mostRecent = meta.get("lastFetched") ?? 0; 149 + 150 + let cursor = undefined; 151 + let first; 152 + let count = 0; 153 + let did = await resolveHandle({ handle: identifier }); 154 + 155 + fetching: do { 156 + const data = await listRecords({ 157 + did, 158 + collection: "dev.flo-bit.social", 159 + cursor, 160 + }); 161 + 162 + for (const post of data) { 163 + if ( 164 + (mostRecent && mostRecent === post.cid) || 165 + (limit && count >= limit) 166 + ) { 167 + count++; 168 + break fetching; 169 + } 170 + count++; 171 + 172 + first ??= post.cid; 173 + 174 + store.set({ 175 + id: post.uri, 176 + data: await parseData({ 177 + id: post.uri, 178 + // Convert the post object to a plain object 179 + data: JSON.parse(JSON.stringify(post)), 180 + }), 181 + }); 182 + } 183 + cursor = data.cursor; 184 + logger.info(`Fetched ${count} links`); 185 + } while (cursor); 186 + 187 + if (first) { 188 + meta.set("lastFetched", first); 189 + } 190 + } catch (error) { 191 + logger.error( 192 + `Failed to load Bluesky links. ${(error as Error).message}`, 193 + ); 194 + } 195 + }, 196 + }; 197 + }; 198 + 199 + export const authorProfileLoader = ({ 200 + identifier, 201 + }: { 202 + identifier: string; 203 + }): Loader => { 204 + return { 205 + name: "bluesky-profile-loader", 206 + async load({ store, logger, meta, parseData }) { 207 + try { 208 + const did = await resolveHandle({ handle: identifier }); 209 + 210 + const agent = new AtpBaseClient({ service: 'https://public.api.bsky.app' }); 211 + const profile = await getProfile({ agent, did }); 212 + 213 + store.set({ 214 + id: did, 215 + data: await parseData({ 216 + id: did, 217 + data: JSON.parse(JSON.stringify(profile)), 218 + }), 219 + }); 220 + } catch (error) { 221 + logger.error(`Failed to load Bluesky profile. ${(error as Error).message}`); 222 + } 223 + } 224 + } 225 + } 226 + 227 + 228 + import { marked } from 'marked'; 229 + 230 + 231 + export const authorAboutLoader = ({ 232 + identifier, 233 + limit, 234 + }: { 235 + identifier: string; 236 + limit?: number; 237 + }): Loader => { 238 + return { 239 + name: "bluesky-about-loader", 240 + async load({ store, logger, meta, parseData }) { 241 + try { 242 + 243 + let cursor = undefined; 244 + let first; 245 + let count = 0; 246 + let did = await resolveHandle({ handle: identifier }); 247 + 248 + const data = await getRecord({ 249 + did, 250 + collection: "dev.flo-bit.about", 251 + rkey: "self", 252 + }); 253 + 254 + console.log('data'); 255 + console.log(data); 256 + 257 + 258 + const parsed = await parseData({ 259 + id: data.uri, 260 + // Convert the post object to a plain object 261 + data: JSON.parse(JSON.stringify(data)), 262 + }); 263 + 264 + console.log('parsed'); 265 + console.log(parsed); 266 + 267 + store.set({ 268 + id: data.uri, 269 + data: parsed, 270 + body: parsed.plaintext, 271 + rendered: {html: await marked.parse(data.value.content)}, 272 + }); 273 + 274 + 275 + } catch (error) { 276 + logger.error( 277 + `Failed to load Bluesky links. ${(error as Error).message}`, 278 + ); 279 + } 280 + }, 281 + }; 282 + }; 283 + 284 + 285 + export const authorBlogPostsLoader = ({ 286 + identifier, 287 + limit, 288 + }: { 289 + identifier: string; 290 + limit?: number; 291 + }): Loader => { 292 + return { 293 + name: "bluesky-blog-posts-loader", 294 + async load({ store, logger, meta, parseData }) { 295 + try { 296 + const mostRecent = meta.get("lastFetched") ?? 0; 297 + 298 + let cursor = undefined; 299 + let first; 300 + let count = 0; 301 + let did = await resolveHandle({ handle: identifier }); 302 + 303 + fetching: do { 304 + const data = await listRecords({ 305 + did, 306 + collection: "com.whtwnd.blog.entry", 307 + cursor, 308 + }); 309 + 310 + for (const post of data) { 311 + if ( 312 + (mostRecent && mostRecent === post.cid) || 313 + (limit && count >= limit) 314 + ) { 315 + count++; 316 + break fetching; 317 + } 318 + count++; 319 + 320 + first ??= post.cid; 321 + 322 + console.log('post'); 323 + console.log(post); 324 + 325 + const parsed = await parseData({ 326 + id: post.uri, 327 + // Convert the post object to a plain object 328 + data: JSON.parse(JSON.stringify(post)), 329 + }); 330 + 331 + console.log('parsed'); 332 + console.log(parsed); 333 + 334 + store.set({ 335 + id: post.uri, 336 + data: parsed, 337 + body: parsed.plaintext, 338 + rendered: {html: await marked.parse(post.value.content)}, 339 + }); 340 + } 341 + cursor = data.cursor; 342 + logger.info(`Fetched ${count} blog posts`); 343 + } while (cursor); 344 + 345 + if (first) { 346 + meta.set("lastFetched", first); 347 + } 348 + } catch (error) { 349 + logger.error( 350 + `Failed to load Bluesky links. ${(error as Error).message}`, 351 + ); 352 + } 353 + }, 354 + }; 355 + };
+6
src/utils/styling.ts
··· 1 + import { type ClassValue, clsx } from 'clsx'; 2 + import { twMerge } from 'tailwind-merge'; 3 + 4 + export function cn(...inputs: ClassValue[]) { 5 + return twMerge(clsx(inputs)); 6 + }
+25
src/components/Navigation/DektopNavigation.astro
··· 1 + --- 2 + import type { Item } from "./items"; 3 + import NavigationItem from "./NavigationItem.svelte"; 4 + 5 + let classes = ""; 6 + 7 + let { items, active } = Astro.props; 8 + --- 9 + 10 + <nav class="mt-8 sm:mt-0"> 11 + <ul 12 + class="flex rounded-full px-3 text-sm font-medium text-base-800 dark:text-base-200" 13 + > 14 + { 15 + items.map((item: Item) => ( 16 + <NavigationItem 17 + href={`/bluesky-home/${item === "about" ? "" : item}`} 18 + isActive={active == item} 19 + > 20 + {item} 21 + </NavigationItem> 22 + )) 23 + } 24 + </ul> 25 + </nav>
+25
src/components/Navigation/NavigationItem.svelte
··· 1 + <script lang="ts"> 2 + import { fade } from "svelte/transition"; 3 + 4 + export let isActive = false; 5 + 6 + export let href = ""; 7 + </script> 8 + 9 + <li> 10 + <a 11 + {href} 12 + class={"relative block px-3 py-2.5 transition duration-200 " + 13 + (isActive 14 + ? "text-accent-500 dark:text-accent-400" 15 + : "hover:text-accent-500 dark:hover:text-accent-400")} 16 + > 17 + <slot /> 18 + {#if isActive} 19 + <span 20 + transition:fade 21 + class="absolute inset-x-1 bottom-px h-px bg-gradient-to-r from-accent-500/0 via-accent-500/40 to-accent-500/0 dark:from-accent-400/0 dark:via-accent-400/40 dark:to-accent-400/0" 22 + ></span> 23 + {/if} 24 + </a> 25 + </li>
+4
src/components/Navigation/items.ts
··· 1 + 2 + export const items = ['home', 'about', 'projects', 'learning', 'contact']; 3 + 4 + export type Item = (typeof items)[number];
+260
src/components/post/Post.svelte
··· 1 + <script lang="ts"> 2 + import RelativeTime from './relative-time'; 3 + import Embed from './embeds/Embed.svelte'; 4 + import { cn } from '../../utils/styling'; 5 + import Avatar from '../Avatar.svelte'; 6 + import type { WithChildren, WithElementRef } from 'bits-ui'; 7 + import type { HTMLAttributes } from 'svelte/elements'; 8 + import type { PostData } from '.'; 9 + 10 + let { 11 + ref, 12 + data, 13 + class: className, 14 + bookmarked = $bindable(false), 15 + liked = $bindable(false), 16 + children 17 + }: WithElementRef<WithChildren<HTMLAttributes<HTMLDivElement>>> & { 18 + data: PostData; 19 + class?: string; 20 + intersect?: () => void; 21 + bookmarked?: boolean; 22 + liked?: boolean; 23 + } = $props(); 24 + 25 + export function numberToHumanReadable(number: number) { 26 + if (number < 1000) { 27 + return number; 28 + } 29 + if (number < 1000000) { 30 + return `${Math.floor(number / 1000)}k`; 31 + } 32 + return `${Math.floor(number / 1000000)}m`; 33 + } 34 + </script> 35 + 36 + <div 37 + bind:this={ref} 38 + class={cn('text-base-950 dark:text-base-50 transition-colors duration-200', className)} 39 + > 40 + {#if data.reposted} 41 + <div class="mb-3 inline-flex items-center gap-2 pl-4 text-xs font-medium"> 42 + <svg 43 + xmlns="http://www.w3.org/2000/svg" 44 + viewBox="0 0 24 24" 45 + fill="currentColor" 46 + class="size-3" 47 + > 48 + <path 49 + fill-rule="evenodd" 50 + d="M4.755 10.059a7.5 7.5 0 0 1 12.548-3.364l1.903 1.903h-3.183a.75.75 0 1 0 0 1.5h4.992a.75.75 0 0 0 .75-.75V4.356a.75.75 0 0 0-1.5 0v3.18l-1.9-1.9A9 9 0 0 0 3.306 9.67a.75.75 0 1 0 1.45.388Zm15.408 3.352a.75.75 0 0 0-.919.53 7.5 7.5 0 0 1-12.548 3.364l-1.902-1.903h3.183a.75.75 0 0 0 0-1.5H2.984a.75.75 0 0 0-.75.75v4.992a.75.75 0 0 0 1.5 0v-3.18l1.9 1.9a9 9 0 0 0 15.059-4.035.75.75 0 0 0-.53-.918Z" 51 + clip-rule="evenodd" 52 + /> 53 + </svg> 54 + 55 + <div class="inline-flex gap-1"> 56 + reposted by 57 + <a href={data.reposted.href} class="hover:text-accent-400 font-bold"> 58 + @{data.reposted.handle} 59 + </a> 60 + </div> 61 + </div> 62 + {/if} 63 + <div class="flex gap-4"> 64 + <Avatar src={data.author.avatar} /> 65 + 66 + <div class="w-full"> 67 + <div class="mb-1 flex items-start justify-between gap-2"> 68 + <a 69 + class="group hover:bg-accent-900/5 -mx-2 -my-0.5 flex flex-col items-baseline gap-x-2 gap-y-0.5 rounded-xl px-2 py-0.5 sm:flex-row" 70 + href={data.author.href} 71 + > 72 + <div 73 + class="text-base-900 group-hover:text-accent-600 dark:text-base-50 dark:group-hover:text-accent-300 text-sm leading-tight font-semibold" 74 + > 75 + {data.author.displayName} 76 + </div> 77 + <div 78 + class="text-base-600 group-hover:text-accent-600 dark:text-base-400 dark:group-hover:text-accent-400 text-sm" 79 + > 80 + @{data.author.handle} 81 + </div> 82 + </a> 83 + 84 + {#if data.createdAt} 85 + <a 86 + href={'#'} 87 + class="text-base-600 hover:text-accent-700 dark:text-base-400 dark:hover:text-accent-300 block text-sm no-underline" 88 + > 89 + <RelativeTime date={new Date(data.createdAt)} locale="en" /> 90 + </a> 91 + {/if} 92 + </div> 93 + 94 + <div class="prose-base"> 95 + <div 96 + class="prose dark:prose-invert prose-sm prose-a:no-underline prose-a:text-accent-600 dark:prose-a:text-accent-500 wrap-anywhere" 97 + > 98 + {#if data.htmlContent} 99 + {@html data.htmlContent} 100 + {:else} 101 + {@render children?.()} 102 + {/if} 103 + </div> 104 + </div> 105 + 106 + <Embed {data} /> 107 + 108 + <div class="text-base-500 dark:text-base-400 mt-4 flex justify-end gap-6 px-4"> 109 + <button class="group inline-flex items-center gap-2 text-sm"> 110 + <svg 111 + xmlns="http://www.w3.org/2000/svg" 112 + fill="none" 113 + viewBox="0 0 24 24" 114 + stroke-width="1.5" 115 + stroke="currentColor" 116 + class="group-hover:bg-accent-500/10 group-hover:text-accent-700 dark:group-hover:text-accent-400 -m-1.5 size-7 rounded-full p-1.5 transition-all duration-100" 117 + > 118 + <path 119 + stroke-linecap="round" 120 + stroke-linejoin="round" 121 + d="M12 20.25c4.97 0 9-3.694 9-8.25s-4.03-8.25-9-8.25S3 7.444 3 12c0 2.104.859 4.023 2.273 5.48.432.447.74 1.04.586 1.641a4.483 4.483 0 0 1-.923 1.785A5.969 5.969 0 0 0 6 21c1.282 0 2.47-.402 3.445-1.087.81.22 1.668.337 2.555.337Z" 122 + /> 123 + </svg> 124 + {#if data.replyCount} 125 + {numberToHumanReadable(data.replyCount)} 126 + {/if} 127 + </button> 128 + 129 + <button class="group inline-flex items-center gap-2 text-sm"> 130 + <svg 131 + xmlns="http://www.w3.org/2000/svg" 132 + fill="none" 133 + viewBox="0 0 24 24" 134 + stroke-width="1.5" 135 + stroke="currentColor" 136 + class="group-hover:bg-accent-500/10 group-hover:text-accent-700 dark:group-hover:text-accent-400 -m-1.5 size-7 rounded-full p-1.5 transition-all duration-100" 137 + > 138 + <path 139 + stroke-linecap="round" 140 + stroke-linejoin="round" 141 + d="M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0 3.181 3.183a8.25 8.25 0 0 0 13.803-3.7M4.031 9.865a8.25 8.25 0 0 1 13.803-3.7l3.181 3.182m0-4.991v4.99" 142 + /> 143 + </svg> 144 + {#if data.repostCount} 145 + {numberToHumanReadable(data.repostCount)} 146 + {/if} 147 + </button> 148 + 149 + <button class="group inline-flex items-center gap-2 text-sm" onclick={() => {}}> 150 + {#if liked} 151 + <svg 152 + xmlns="http://www.w3.org/2000/svg" 153 + viewBox="0 0 24 24" 154 + fill="currentColor" 155 + class="group-hover:bg-accent-500/10 group-hover:text-accent-700 dark:group-hover:text-accent-400 -m-1.5 size-7 rounded-full p-1.5 transition-all duration-100" 156 + > 157 + <path 158 + d="m11.645 20.91-.007-.003-.022-.012a15.247 15.247 0 0 1-.383-.218 25.18 25.18 0 0 1-4.244-3.17C4.688 15.36 2.25 12.174 2.25 8.25 2.25 5.322 4.714 3 7.688 3A5.5 5.5 0 0 1 12 5.052 5.5 5.5 0 0 1 16.313 3c2.973 0 5.437 2.322 5.437 5.25 0 3.925-2.438 7.111-4.739 9.256a25.175 25.175 0 0 1-4.244 3.17 15.247 15.247 0 0 1-.383.219l-.022.012-.007.004-.003.001a.752.752 0 0 1-.704 0l-.003-.001Z" 159 + /> 160 + </svg> 161 + {:else} 162 + <svg 163 + xmlns="http://www.w3.org/2000/svg" 164 + fill="none" 165 + viewBox="0 0 24 24" 166 + stroke-width="1.5" 167 + stroke="currentColor" 168 + class="group-hover:bg-accent-500/10 group-hover:text-accent-700 dark:group-hover:text-accent-400 -m-1.5 size-7 rounded-full p-1.5 transition-all duration-100" 169 + > 170 + <path 171 + stroke-linecap="round" 172 + stroke-linejoin="round" 173 + d="M21 8.25c0-2.485-2.099-4.5-4.688-4.5-1.935 0-3.597 1.126-4.312 2.733-.715-1.607-2.377-2.733-4.313-2.733C5.1 3.75 3 5.765 3 8.25c0 7.22 9 12 9 12s9-4.78 9-12Z" 174 + /> 175 + </svg> 176 + {/if} 177 + {#if data.likeCount} 178 + {numberToHumanReadable(data.likeCount)} 179 + {/if} 180 + </button> 181 + 182 + <button onclick={async () => {}} class="group items-center gap-2 text-sm hidden"> 183 + <span class="sr-only">Bookmark</span> 184 + 185 + {#if bookmarked} 186 + <svg 187 + xmlns="http://www.w3.org/2000/svg" 188 + viewBox="0 0 24 24" 189 + fill="currentColor" 190 + class="group-hover:bg-accent-500/10 group-hover:text-accent-700 dark:group-hover:text-accent-400 -m-1.5 size-7 rounded-full p-1.5 transition-all duration-100" 191 + > 192 + <path 193 + fill-rule="evenodd" 194 + d="M6.32 2.577a49.255 49.255 0 0 1 11.36 0c1.497.174 2.57 1.46 2.57 2.93V21a.75.75 0 0 1-1.085.67L12 18.089l-7.165 3.583A.75.75 0 0 1 3.75 21V5.507c0-1.47 1.073-2.756 2.57-2.93Z" 195 + clip-rule="evenodd" 196 + /> 197 + </svg> 198 + {:else} 199 + <svg 200 + xmlns="http://www.w3.org/2000/svg" 201 + fill="none" 202 + viewBox="0 0 24 24" 203 + stroke-width="1.5" 204 + stroke="currentColor" 205 + class="group-hover:bg-accent-500/10 group-hover:text-accent-700 dark:group-hover:text-accent-400 -m-1.5 size-7 rounded-full p-1.5 transition-all duration-100" 206 + > 207 + <path 208 + stroke-linecap="round" 209 + stroke-linejoin="round" 210 + d="M17.593 3.322c1.1.128 1.907 1.077 1.907 2.185V21L12 17.25 4.5 21V5.507c0-1.108.806-2.057 1.907-2.185a48.507 48.507 0 0 1 11.186 0Z" 211 + /> 212 + </svg> 213 + {/if} 214 + </button> 215 + </div> 216 + </div> 217 + </div> 218 + </div> 219 + 220 + <style> 221 + .prose-base { 222 + --tw-prose-body: var(--color-base-700); 223 + --tw-prose-headings: var(--color-base-900); 224 + --tw-prose-lead: var(--color-base-600); 225 + --tw-prose-links: var(--color-base-900); 226 + --tw-prose-bold: var(--color-base-900); 227 + --tw-prose-counters: var(--color-base-500); 228 + --tw-prose-bullets: var(--color-base-300); 229 + --tw-prose-hr: var(--color-base-200); 230 + --tw-prose-quotes: var(--color-base-900); 231 + --tw-prose-quote-borders: var(--color-base-200); 232 + --tw-prose-captions: var(--color-base-500); 233 + --tw-prose-kbd: var(--color-base-900); 234 + --tw-prose-kbd-shadows: var(--color-base-900); 235 + --tw-prose-code: var(--color-base-900); 236 + --tw-prose-pre-code: var(--color-base-200); 237 + --tw-prose-pre-bg: var(--color-base-800); 238 + --tw-prose-th-borders: var(--color-base-300); 239 + --tw-prose-td-borders: var(--color-base-200); 240 + 241 + --tw-prose-invert-body: var(--color-base-300); 242 + --tw-prose-invert-headings: var(--color-white); 243 + --tw-prose-invert-lead: var(--color-base-400); 244 + --tw-prose-invert-links: var(--color-white); 245 + --tw-prose-invert-bold: var(--color-white); 246 + --tw-prose-invert-counters: var(--color-base-400); 247 + --tw-prose-invert-bullets: var(--color-base-600); 248 + --tw-prose-invert-hr: var(--color-base-700); 249 + --tw-prose-invert-quotes: var(--color-base-100); 250 + --tw-prose-invert-quote-borders: var(--color-base-700); 251 + --tw-prose-invert-captions: var(--color-base-400); 252 + --tw-prose-invert-kbd: var(--color-white); 253 + --tw-prose-invert-kbd-shadows: var(--color-white); 254 + --tw-prose-invert-code: var(--color-white); 255 + --tw-prose-invert-pre-code: var(--color-base-300); 256 + --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%); 257 + --tw-prose-invert-th-borders: var(--color-base-600); 258 + --tw-prose-invert-td-borders: var(--color-base-700); 259 + } 260 + </style>
+158
src/components/post/index.ts
··· 1 + import { RichText } from '@atproto/api'; 2 + 3 + export type PostEmbedImage = { 4 + type: 'images'; 5 + 6 + images: { 7 + alt: string; 8 + thumb: string; 9 + fullsize: string; 10 + aspectRatio?: { 11 + width: number; 12 + height: number; 13 + }; 14 + }[]; 15 + }; 16 + 17 + export type PostEmbedExternal = { 18 + type: 'external'; 19 + 20 + external: { 21 + href: string; 22 + thumb: string; 23 + title: string; 24 + description: string; 25 + }; 26 + }; 27 + 28 + export type PostEmbedVideo = { 29 + type: 'video'; 30 + 31 + video: { 32 + playlist: string; 33 + 34 + thumb: string; 35 + alt: string; 36 + 37 + aspectRatio?: { 38 + width: number; 39 + height: number; 40 + }; 41 + }; 42 + }; 43 + 44 + export type UnknownEmbed = { 45 + type: 'unknown'; 46 + } & Record<string, unknown>; 47 + 48 + function blueskyEmbedTypeToEmbedType(type: string) { 49 + switch (type) { 50 + case 'app.bsky.embed.external#view': 51 + case 'app.bsky.embed.external': 52 + return 'external'; 53 + case 'app.bsky.embed.images#view': 54 + case 'app.bsky.embed.images': 55 + return 'images'; 56 + case 'app.bsky.embed.video#view': 57 + case 'app.bsky.embed.video': 58 + return 'video'; 59 + default: 60 + return 'unknown'; 61 + } 62 + } 63 + 64 + export type PostData = { 65 + reposted?: { handle: string; href: string }; 66 + 67 + author: { 68 + displayName: string; 69 + handle: string; 70 + avatar: string; 71 + href: string; 72 + }; 73 + 74 + replyCount: number; 75 + repostCount: number; 76 + likeCount: number; 77 + 78 + createdAt: string; 79 + 80 + embed?: PostEmbedImage | PostEmbedExternal | PostEmbedVideo | UnknownEmbed; 81 + 82 + htmlContent?: string; 83 + }; 84 + 85 + // eslint-disable-next-line @typescript-eslint/no-explicit-any 86 + export function blueskyPostToPostData(post: any): PostData { 87 + return { 88 + author: { 89 + displayName: post.author.displayName, 90 + handle: post.author.handle, 91 + avatar: post.author.avatar, 92 + href: '#' 93 + }, 94 + replyCount: post.replyCount, 95 + repostCount: post.repostCount, 96 + likeCount: post.likeCount, 97 + createdAt: post.createdAt, 98 + 99 + embed: { 100 + type: blueskyEmbedTypeToEmbedType(post.embed?.$type), 101 + // eslint-disable-next-line @typescript-eslint/no-explicit-any 102 + images: post.embed?.images?.map((image: any) => ({ 103 + alt: image.alt, 104 + thumb: image.thumb, 105 + aspectRatio: image.aspectRatio, 106 + fullsize: image.fullsize 107 + })), 108 + external: post.embed?.external 109 + ? { 110 + href: post.embed.external.uri, 111 + title: post.embed.external.title, 112 + description: post.embed.external.description, 113 + thumb: post.embed.external.thumb 114 + } 115 + : undefined, 116 + video: post.embed 117 + ? { 118 + playlist: post.embed.playlist, 119 + thumb: post.embed.thumbnail, 120 + alt: post.embed.alt, 121 + aspectRatio: post.embed.aspectRatio 122 + } 123 + : undefined 124 + } as PostEmbedExternal | PostEmbedVideo | PostEmbedImage | UnknownEmbed, 125 + 126 + htmlContent: blueskyPostToHTML(post) 127 + }; 128 + } 129 + 130 + // eslint-disable-next-line @typescript-eslint/no-explicit-any 131 + export function blueskyPostToHTML(post: any, baseBskyUrl: string = 'https://bsky.app') { 132 + if (!post?.record) { 133 + return ''; 134 + } 135 + const rt = new RichText(post.record); 136 + let html = ''; 137 + 138 + const createLink = (href: string, text: string) => { 139 + return `<a target="_blank" rel="noopener noreferrer nofollow" href="${encodeURI(href)}">${encodeURI(text)}</a>`; 140 + }; 141 + 142 + for (const segment of rt.segments()) { 143 + if (!segment) continue; 144 + if (segment.isLink() && segment.link?.uri) { 145 + html += createLink(segment.link?.uri, segment.text); 146 + } else if (segment.isMention() && segment.mention?.did) { 147 + html += createLink(`${baseBskyUrl}/profile/${segment.mention?.did}`, segment.text); 148 + } else if (segment.isTag() && segment.tag?.tag) { 149 + html += createLink(`${baseBskyUrl}/hashtag/${segment.tag?.tag}`, segment.text); 150 + } else { 151 + html += segment.text; 152 + } 153 + } 154 + 155 + return html.replace(/\n/g, '<br>'); 156 + } 157 + 158 + export { default as Post } from './Post.svelte';
+21
src/pages/blog/index.astro
··· 1 + --- 2 + import Layout from "../../layouts/Layout.astro"; 3 + import DesktopNavigation from "../../components/Navigation/DektopNavigation.astro"; 4 + import { getCollection } from "astro:content"; 5 + import BlogEntry from "../../components/BlogEntry.astro"; 6 + 7 + const blog = await getCollection("blog"); 8 + console.log(blog); 9 + 10 + for (const post of blog) { 11 + console.log(post.data.value.title); 12 + } 13 + --- 14 + 15 + <Layout> 16 + <DesktopNavigation items={["about", "links", "feed", "blog"]} active="blog" /> 17 + 18 + <div class="flex w-full flex-col max-w-2xl px-4 mt-8"> 19 + {blog.map((post) => <BlogEntry post={post.data.value} />)} 20 + </div> 21 + </Layout>
+28
src/pages/feed/index.astro
··· 1 + --- 2 + import Layout from "../../layouts/Layout.astro"; 3 + import { getCollection } from "astro:content"; 4 + import { blueskyPostToPostData, Post } from "../../components/post"; 5 + import DesktopNavigation from "../../components/Navigation/DektopNavigation.astro"; 6 + 7 + let posts = await getCollection("posts"); 8 + 9 + const profile = await getCollection("profile"); 10 + 11 + console.log(profile); 12 + --- 13 + 14 + <Layout> 15 + <DesktopNavigation items={["about", "links", "feed", "blog"]} active="feed" /> 16 + 17 + <div class="flex w-full flex-col max-w-2xl px-4 mt-6"> 18 + { 19 + posts.map((post) => ( 20 + <Post 21 + data={blueskyPostToPostData(post.data)} 22 + client:visible 23 + class="py-4 border-b border-base-500/20" 24 + /> 25 + )) 26 + } 27 + </div> 28 + </Layout>
+14
src/pages/links/index.astro
··· 1 + --- 2 + import Layout from "../../layouts/Layout.astro"; 3 + import Links from "../../components/Links.astro"; 4 + import DesktopNavigation from "../../components/Navigation/DektopNavigation.astro"; 5 + --- 6 + 7 + <Layout> 8 + <DesktopNavigation 9 + items={["about", "links", "feed", "blog"]} 10 + active="links" 11 + /> 12 + 13 + <Links /> 14 + </Layout>
+26
src/components/post/embeds/Embed.svelte
··· 1 + <script lang="ts"> 2 + import type { PostData } from '../'; 3 + import External from './External.svelte'; 4 + import Images from './Images.svelte'; 5 + import Video from './Video.svelte'; 6 + 7 + const { data }: { data: PostData } = $props(); 8 + </script> 9 + 10 + {#if data.embed} 11 + <div class="flex flex-col gap-2 pt-3 text-sm"> 12 + {#if data.embed.type === 'images'} 13 + <Images data={data.embed} /> 14 + {:else if data.embed.type === 'external' && data.embed.external} 15 + <External data={data.embed} /> 16 + {:else if data.embed.type === 'video' && data.embed.video} 17 + <Video data={data.embed} /> 18 + {:else if data.embed.type === 'unknown'} 19 + <div 20 + class="text-base-700 dark:text-base-300 bg-base-200/50 dark:bg-base-900/50 border-base-300 dark:border-base-600/30 rounded-2xl border p-4 text-sm" 21 + > 22 + Unknown embed type 23 + </div> 24 + {/if} 25 + </div> 26 + {/if}
+39
src/components/post/embeds/External.svelte
··· 1 + <script lang="ts"> 2 + import type { PostEmbedExternal } from '..'; 3 + 4 + const { data }: { data: PostEmbedExternal } = $props(); 5 + 6 + const domain = new URL(data.external.href).hostname.replace('www.', ''); 7 + </script> 8 + 9 + <article 10 + class={[ 11 + 'group dark:bg-base-900 bg-base-200 border-base-300 dark:border-base-600/30 relative isolate flex flex-col justify-end overflow-hidden rounded-2xl border p-4', 12 + data.external.thumb ? 'aspect-[16/9]' : '' 13 + ]} 14 + > 15 + {#if data.external.thumb} 16 + <img 17 + src={data.external.thumb} 18 + alt={data.external.description} 19 + class="absolute inset-0 -z-10 size-full object-cover transition-transform duration-500 ease-in-out group-hover:scale-105" 20 + /> 21 + {/if} 22 + <div 23 + class="dark:from-base-950/90 dark:via-base-950/40 from-base-50/90 via-base-50/40 absolute inset-0 -z-10 bg-gradient-to-t" 24 + ></div> 25 + 26 + <div 27 + class="text-base-700 dark:text-base-300 flex flex-wrap items-center gap-y-1 overflow-hidden text-sm" 28 + > 29 + <div>{domain}</div> 30 + </div> 31 + <h3 32 + class="dark:text-base-50 text-base-900 group-hover:text-accent-600 dark:group-hover:text-accent-400 mt-1 text-lg/6 font-semibold transition-colors duration-200" 33 + > 34 + <a href={data.external.href} target="_blank" rel="noopener noreferrer nofollow"> 35 + <span class="absolute inset-0"></span> 36 + {data.external.title} 37 + </a> 38 + </h3> 39 + </article>
+38
src/components/post/embeds/Images.svelte
··· 1 + <script lang="ts"> 2 + import type { PostEmbedImage } from '..'; 3 + 4 + const { data }: { data: PostEmbedImage } = $props(); 5 + </script> 6 + 7 + {#snippet imageSnippet( 8 + image: { 9 + alt: string; 10 + thumb: string; 11 + fullsize: string; 12 + aspectRatio?: { width: number; height: number }; 13 + }, 14 + className?: string 15 + )} 16 + <img 17 + loading="lazy" 18 + src={image.thumb} 19 + alt={image.alt} 20 + style={image.aspectRatio 21 + ? `aspect-ratio: ${image.aspectRatio.width} / ${image.aspectRatio.height}` 22 + : 'aspect-ratio: 1 / 1'} 23 + class={[ 24 + 'border-base-500/20 dark:border-base-400/20 w-fit max-w-full rounded-2xl border max-h-[40rem] object-contain', 25 + className 26 + ]} 27 + /> 28 + {/snippet} 29 + 30 + {#if data.images.length === 1} 31 + {@render imageSnippet(data.images[0])} 32 + {:else} 33 + <div class="columns-2 gap-4"> 34 + {#each data.images as image} 35 + {@render imageSnippet(image, 'mb-4')} 36 + {/each} 37 + </div> 38 + {/if}
+45
src/components/post/embeds/Video.svelte
··· 1 + <script lang="ts"> 2 + import { onMount } from 'svelte'; 3 + import Hls from 'hls.js'; 4 + import type { PostEmbedVideo } from '..'; 5 + 6 + const { data }: { data: PostEmbedVideo } = $props(); 7 + 8 + onMount(async () => { 9 + const Plyr = (await import('plyr')).default; 10 + if (Hls.isSupported()) { 11 + var hls = new Hls(); 12 + hls.loadSource(data.video.playlist); 13 + hls.attachMedia(element); 14 + } 15 + 16 + new Plyr(element, { 17 + controls: ['play-large', 'play', 'progress', 'current-time', 'mute', 'volume', 'fullscreen'], 18 + ratio: data.video.aspectRatio 19 + ? `${data.video.aspectRatio.width}:${data.video.aspectRatio.height}` 20 + : '16:9' 21 + }); 22 + }); 23 + 24 + let element: HTMLMediaElement; 25 + </script> 26 + 27 + <svelte:head> 28 + <link rel="stylesheet" href="https://cdn.plyr.io/3.7.8/plyr.css" /> 29 + </svelte:head> 30 + 31 + <div 32 + style={data.video.aspectRatio 33 + ? `aspect-ratio: ${data.video.aspectRatio.width} / ${data.video.aspectRatio.height}` 34 + : 'aspect-ratio: 16 / 9'} 35 + class="border-base-300 dark:border-base-400/40 w-full max-w-full overflow-hidden rounded-2xl border" 36 + > 37 + <!-- svelte-ignore a11y_media_has_caption --> 38 + <video bind:this={element} class="h-full w-full" aria-label={data.video.alt}></video> 39 + </div> 40 + 41 + <style> 42 + * { 43 + --plyr-color-main: var(--color-accent-500); 44 + } 45 + </style>
+17
src/components/post/relative-time/RelativeTime.svelte
··· 1 + <script lang="ts"> 2 + import { onDestroy } from 'svelte'; 3 + import { register, unregister } from './state'; 4 + 5 + export let date: Date | number; 6 + export let locale: string; 7 + export let live = true; 8 + 9 + let instance = new Object(); 10 + let text = ''; 11 + 12 + register(instance, date, locale, live, (value) => ({ text } = value)); 13 + 14 + onDestroy(() => unregister(instance)); 15 + </script> 16 + 17 + <span class={$$props.class}>{text}</span>
+31
src/components/post/relative-time/action.ts
··· 1 + import type { Callback } from './render'; 2 + import { register, unregister } from './state'; 3 + 4 + export interface Options { 5 + date: Date | number; 6 + locale?: string; 7 + live?: boolean; 8 + } 9 + 10 + export function relativeTime(node: HTMLElement, options: Options) { 11 + const callback: Callback = ({ text }) => (node.textContent = text); 12 + 13 + function init(options: Options) { 14 + const date = options.date; 15 + const locale = options.locale ?? navigator.language; 16 + const live = (options.live = true); 17 + 18 + register(node, date, locale, live, callback); 19 + } 20 + 21 + init(options); 22 + 23 + return { 24 + update(options: Options) { 25 + init(options); 26 + }, 27 + destroy() { 28 + unregister(node); 29 + } 30 + }; 31 + }
+12
src/components/post/relative-time/formatter.ts
··· 1 + // keep a cache of formatter per locale, to avoid re-creating them (GC) 2 + const formatters = new Map<string, Intl.RelativeTimeFormat>(); 3 + 4 + // get the Intl.RelativeTimeFormat formatter for the given locale 5 + export function getFormatter(locale: string) { 6 + if (formatters.has(locale)) { 7 + return formatters.get(locale)!; 8 + } 9 + const formatter = new Intl.RelativeTimeFormat(locale, { numeric: 'always', style: 'narrow' }); 10 + formatters.set(locale, formatter); 11 + return formatter; 12 + }
+6
src/components/post/relative-time/index.ts
··· 1 + // adapted from https://github.com/CaptainCodeman/svelte-relative-time 2 + 3 + export * from './action'; 4 + export type { Callback } from './render'; 5 + export { register, unregister } from './state'; 6 + export { default } from './RelativeTime.svelte';
+80
src/components/post/relative-time/render.ts
··· 1 + export type Callback = (result: { 2 + seconds: number; 3 + count: number; 4 + units: Intl.RelativeTimeFormatUnit; 5 + text: string; 6 + }) => void; 7 + 8 + export interface RenderState { 9 + date: Date | number; 10 + callback: Callback; 11 + formatter: Intl.RelativeTimeFormat; 12 + } 13 + 14 + // Array reprsenting one minute, hour, day, week, month, etc in seconds 15 + const cutoffs = [60, 3600, 86400, 86400 * 7, 86400 * 30, 86400 * 365, Infinity]; 16 + 17 + // Array equivalent to the above but in the string representation of the units 18 + const formatUnits: Intl.RelativeTimeFormatUnit[] = [ 19 + 'seconds', 20 + 'minutes', 21 + 'hours', 22 + 'days', 23 + 'weeks', 24 + 'months', 25 + 'years' 26 + ]; 27 + 28 + // function to render relative time into 29 + export function render(state: RenderState, now: number) { 30 + const { date, callback, formatter } = state; 31 + 32 + // Allow dates or times to be passed 33 + const timeMs = typeof date === 'number' ? date : date.getTime(); 34 + 35 + // Get the amount of seconds between the given date and now 36 + const delta = timeMs - now; 37 + const seconds = Math.round(delta / 1000); 38 + 39 + // Grab the ideal cutoff unit 40 + const unitIndex = cutoffs.findIndex((cutoff) => cutoff > Math.abs(seconds)); 41 + 42 + // units 43 + const units = formatUnits[unitIndex]; 44 + 45 + // Get the divisor to divide from the seconds. E.g. if our unit is 'day' our divisor 46 + // is one day in seconds, so we can divide our seconds by this to get the # of days 47 + const divisor = unitIndex ? cutoffs[unitIndex - 1] : 1; 48 + 49 + // count of units 50 + const count = Math.round(seconds / divisor); 51 + 52 + // Intl.RelativeTimeFormat do its magic 53 + callback({ 54 + seconds: seconds, 55 + count, 56 + units, 57 + text: formatter.format(count, units).replace('ago', '') 58 + }); 59 + 60 + // calculate time to next update, taking account rounding (e.g. it goes from 2 minutes to 1 minute at 90 seconds) 61 + // and also the changeover from units (59 seconds shouldn't show as 1 minute, so at 61 seconds we schedule the next 62 + // update for 1 second time) 63 + 64 + const divisorMs = divisor * 1000; 65 + 66 + let updateIn; 67 + 68 + if (unitIndex) { 69 + updateIn = divisorMs / 2 - (Math.abs(delta) % divisorMs); 70 + if (updateIn < 0) { 71 + updateIn += divisorMs; 72 + } 73 + } else { 74 + updateIn = divisorMs - (Math.abs(delta) % divisorMs); 75 + } 76 + 77 + const updateAt = now + updateIn; 78 + 79 + return updateAt; 80 + }
+60
src/components/post/relative-time/state.ts
··· 1 + import { getFormatter } from './formatter'; 2 + import { render } from './render'; 3 + import type { Callback, RenderState } from './render'; 4 + 5 + interface UpdateState extends RenderState { 6 + update: number; 7 + } 8 + 9 + // keep track of each instance 10 + const instances = new Map<Object, UpdateState>(); 11 + 12 + // we use a single timer for efficiency and to keep updates in sync 13 + let updateInterval: number | NodeJS.Timeout; 14 + 15 + // register or update instance 16 + export function register( 17 + instance: Object, 18 + date: Date | number, 19 + locale: string, 20 + live: boolean, 21 + callback: Callback 22 + ) { 23 + // get the formatter for the given locale, we do this here so we don't keep having to look it up on each tick 24 + const formatter = getFormatter(locale); 25 + 26 + // create state to render 27 + const state = { date, callback, formatter }; 28 + 29 + // initial render is immediate, so works for SSR 30 + const update = render(state, Date.now()); 31 + 32 + // if it's to update live, we keep a track and schedule the next update 33 + if (live) { 34 + instances.set(instance, { ...state, update }); 35 + } else { 36 + instances.delete(instance); 37 + } 38 + 39 + // start the clock ticking if there are any live instances 40 + if (instances.size) { 41 + updateInterval = 42 + updateInterval || 43 + setInterval(() => { 44 + const now = Date.now(); 45 + for (const state of instances.values()) { 46 + if (state.update <= now) { 47 + state.update = render(state, now); 48 + } 49 + } 50 + }, 1000); 51 + } 52 + } 53 + 54 + export function unregister(instance: Object) { 55 + instances.delete(instance); 56 + if (instances.size === 0) { 57 + clearInterval(updateInterval); 58 + updateInterval = 0; 59 + } 60 + }
+44
src/pages/blog/posts/[...slug].astro
··· 1 + --- 2 + import { type CollectionEntry, render } from "astro:content"; 3 + 4 + import FormattedDate from "../../../components/FormattedDate.astro"; 5 + import Layout from "../../../layouts/Layout.astro"; 6 + import { getCollection } from "astro:content"; 7 + import DesktopNavigation from "../../../components/Navigation/DektopNavigation.astro"; 8 + import Markdown from "../../../layouts/Markdown.astro"; 9 + 10 + export async function getStaticPaths() { 11 + const posts = await getCollection("blog"); 12 + console.log(posts); 13 + return posts.map((post: any) => ({ 14 + params: { slug: post.data.value.title.replaceAll(" ", "-") }, 15 + props: post, 16 + })); 17 + } 18 + type Props = CollectionEntry<"blog">; 19 + 20 + const post = Astro.props; 21 + console.log(post); 22 + const { Content } = await render(post); 23 + 24 + console.log(Content); 25 + --- 26 + 27 + <Layout> 28 + <DesktopNavigation items={["about", "links", "feed", "blog"]} active="blog" /> 29 + 30 + <main class="px-4"> 31 + <Markdown> 32 + <div 33 + class="flex mt-8 gap-4 text-xs flex-col md:flex-row items-start md:items-center" 34 + > 35 + <div class="shrink-0"> 36 + <FormattedDate date={post.data.value.createdAt} /> 37 + </div> 38 + </div> 39 + 40 + <h1 class="mt-4">{post.data.value.title}</h1> 41 + <Content /> 42 + </Markdown> 43 + </main> 44 + </Layout>