your personal website on atproto - mirror blento.app

Merge branch 'flo-bit:main' into main

authored by

polijn and committed by
GitHub
93fd9f28 ae4fe500

+557 -192
+3 -1
.claude/settings.local.json
··· 22 22 "Bash(pnpm config:*)", 23 23 "Bash(lsof:*)", 24 24 "Bash(pnpm dev)", 25 - "Bash(pnpm exec svelte-kit:*)" 25 + "Bash(pnpm exec svelte-kit:*)", 26 + "Bash(pnpm build:*)", 27 + "Bash(pnpm remove:*)" 26 28 ] 27 29 } 28 30 }
+23 -7
docs/Beta.md
··· 11 11 12 12 - show nsfw warnings 13 13 14 - - big button card 14 + - card with big call to action button "create your blento" 15 15 16 - - card with big call to action button 16 + - ask to fill with some default cards on page creation 17 17 18 - - video card? 18 + - when adding images try to add them in a size that best fits aspect ratio 19 19 20 - - allow setting base and accent color 20 + - onboarding? 21 21 22 - - ask to fill with some default cards on page creation 22 + - switch sidebar to a quick list of available cards with search function 23 23 24 - - when adding images try to add them in a size that best fits aspect ratio 24 + - test 25 + - selfhosting 25 26 26 - - onboarding 27 + - guestbook card 28 + 29 + - onboarding? 30 + 31 + - switch sidebar to a quick list of available cards with search function 32 + 33 + - test 34 + - selfhosting 35 + 36 + - guestbook card 37 + 38 + - analytics? 39 + 40 + - refresh recently updated blentos (move to top of list, update profiles every 24 hours) 41 + 42 + - server side oauth?
+1
package.json
··· 71 71 "@types/three": "^0.176.0", 72 72 "bits-ui": "^2.15.4", 73 73 "clsx": "^2.1.1", 74 + "dompurify": "^3.3.1", 74 75 "gsap": "^3.14.2", 75 76 "hls.js": "^1.6.15", 76 77 "leaflet": "^1.9.4",
+155 -139
pnpm-lock.yaml
··· 104 104 clsx: 105 105 specifier: ^2.1.1 106 106 version: 2.1.1 107 + dompurify: 108 + specifier: ^3.3.1 109 + version: 3.3.1 107 110 gsap: 108 111 specifier: ^3.14.2 109 112 version: 3.14.2 ··· 308 311 optional: true 309 312 310 313 '@cloudflare/workerd-darwin-64@1.20260120.0': 311 - resolution: {integrity: sha512-JLHx3p5dpwz4wjVSis45YNReftttnI3ndhdMh5BUbbpdreN/g0jgxNt5Qp9tDFqEKl++N63qv+hxJiIIvSLR+Q==} 314 + resolution: {integrity: sha512-JLHx3p5dpwz4wjVSis45YNReftttnI3ndhdMh5BUbbpdreN/g0jgxNt5Qp9tDFqEKl++N63qv+hxJiIIvSLR+Q==, tarball: https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20260120.0.tgz} 312 315 engines: {node: '>=16'} 313 316 cpu: [x64] 314 317 os: [darwin] 315 318 316 319 '@cloudflare/workerd-darwin-arm64@1.20260120.0': 317 - resolution: {integrity: sha512-1Md2tCRhZjwajsZNOiBeOVGiS3zbpLPzUDjHr4+XGTXWOA6FzzwScJwQZLa0Doc28Cp4Nr1n7xGL0Dwiz1XuOA==} 320 + resolution: {integrity: sha512-1Md2tCRhZjwajsZNOiBeOVGiS3zbpLPzUDjHr4+XGTXWOA6FzzwScJwQZLa0Doc28Cp4Nr1n7xGL0Dwiz1XuOA==, tarball: https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20260120.0.tgz} 318 321 engines: {node: '>=16'} 319 322 cpu: [arm64] 320 323 os: [darwin] 321 324 322 325 '@cloudflare/workerd-linux-64@1.20260120.0': 323 - resolution: {integrity: sha512-O0mIfJfvU7F8N5siCoRDaVDuI12wkz2xlG4zK6/Ct7U9c9FiE0ViXNFWXFQm5PPj+qbkNRyhjUwhP+GCKTk5EQ==} 326 + resolution: {integrity: sha512-O0mIfJfvU7F8N5siCoRDaVDuI12wkz2xlG4zK6/Ct7U9c9FiE0ViXNFWXFQm5PPj+qbkNRyhjUwhP+GCKTk5EQ==, tarball: https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20260120.0.tgz} 324 327 engines: {node: '>=16'} 325 328 cpu: [x64] 326 329 os: [linux] 327 330 328 331 '@cloudflare/workerd-linux-arm64@1.20260120.0': 329 - resolution: {integrity: sha512-aRHO/7bjxVpjZEmVVcpmhbzpN6ITbFCxuLLZSW0H9O0C0w40cDCClWSi19T87Ax/PQcYjFNT22pTewKsupkckA==} 332 + resolution: {integrity: sha512-aRHO/7bjxVpjZEmVVcpmhbzpN6ITbFCxuLLZSW0H9O0C0w40cDCClWSi19T87Ax/PQcYjFNT22pTewKsupkckA==, tarball: https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20260120.0.tgz} 330 333 engines: {node: '>=16'} 331 334 cpu: [arm64] 332 335 os: [linux] 333 336 334 337 '@cloudflare/workerd-windows-64@1.20260120.0': 335 - resolution: {integrity: sha512-ASZIz1E8sqZQqQCgcfY1PJbBpUDrxPt8NZ+lqNil0qxnO4qX38hbCsdDF2/TDAuq0Txh7nu8ztgTelfNDlb4EA==} 338 + resolution: {integrity: sha512-ASZIz1E8sqZQqQCgcfY1PJbBpUDrxPt8NZ+lqNil0qxnO4qX38hbCsdDF2/TDAuq0Txh7nu8ztgTelfNDlb4EA==, tarball: https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20260120.0.tgz} 336 339 engines: {node: '>=16'} 337 340 cpu: [x64] 338 341 os: [win32] ··· 348 351 resolution: {integrity: sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow==} 349 352 350 353 '@emnapi/runtime@1.8.1': 351 - resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} 354 + resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==, tarball: https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz} 352 355 353 356 '@esbuild/aix-ppc64@0.27.0': 354 - resolution: {integrity: sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==} 357 + resolution: {integrity: sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==, tarball: https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.0.tgz} 355 358 engines: {node: '>=18'} 356 359 cpu: [ppc64] 357 360 os: [aix] 358 361 359 362 '@esbuild/aix-ppc64@0.27.2': 360 - resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} 363 + resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==, tarball: https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz} 361 364 engines: {node: '>=18'} 362 365 cpu: [ppc64] 363 366 os: [aix] 364 367 365 368 '@esbuild/android-arm64@0.27.0': 366 - resolution: {integrity: sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==} 369 + resolution: {integrity: sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.0.tgz} 367 370 engines: {node: '>=18'} 368 371 cpu: [arm64] 369 372 os: [android] 370 373 371 374 '@esbuild/android-arm64@0.27.2': 372 - resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} 375 + resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz} 373 376 engines: {node: '>=18'} 374 377 cpu: [arm64] 375 378 os: [android] 376 379 377 380 '@esbuild/android-arm@0.27.0': 378 - resolution: {integrity: sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==} 381 + resolution: {integrity: sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.0.tgz} 379 382 engines: {node: '>=18'} 380 383 cpu: [arm] 381 384 os: [android] 382 385 383 386 '@esbuild/android-arm@0.27.2': 384 - resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} 387 + resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz} 385 388 engines: {node: '>=18'} 386 389 cpu: [arm] 387 390 os: [android] 388 391 389 392 '@esbuild/android-x64@0.27.0': 390 - resolution: {integrity: sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==} 393 + resolution: {integrity: sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.0.tgz} 391 394 engines: {node: '>=18'} 392 395 cpu: [x64] 393 396 os: [android] 394 397 395 398 '@esbuild/android-x64@0.27.2': 396 - resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} 399 + resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz} 397 400 engines: {node: '>=18'} 398 401 cpu: [x64] 399 402 os: [android] 400 403 401 404 '@esbuild/darwin-arm64@0.27.0': 402 - resolution: {integrity: sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==} 405 + resolution: {integrity: sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.0.tgz} 403 406 engines: {node: '>=18'} 404 407 cpu: [arm64] 405 408 os: [darwin] 406 409 407 410 '@esbuild/darwin-arm64@0.27.2': 408 - resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} 411 + resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz} 409 412 engines: {node: '>=18'} 410 413 cpu: [arm64] 411 414 os: [darwin] 412 415 413 416 '@esbuild/darwin-x64@0.27.0': 414 - resolution: {integrity: sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==} 417 + resolution: {integrity: sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.0.tgz} 415 418 engines: {node: '>=18'} 416 419 cpu: [x64] 417 420 os: [darwin] 418 421 419 422 '@esbuild/darwin-x64@0.27.2': 420 - resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} 423 + resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz} 421 424 engines: {node: '>=18'} 422 425 cpu: [x64] 423 426 os: [darwin] 424 427 425 428 '@esbuild/freebsd-arm64@0.27.0': 426 - resolution: {integrity: sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==} 429 + resolution: {integrity: sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.0.tgz} 427 430 engines: {node: '>=18'} 428 431 cpu: [arm64] 429 432 os: [freebsd] 430 433 431 434 '@esbuild/freebsd-arm64@0.27.2': 432 - resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} 435 + resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz} 433 436 engines: {node: '>=18'} 434 437 cpu: [arm64] 435 438 os: [freebsd] 436 439 437 440 '@esbuild/freebsd-x64@0.27.0': 438 - resolution: {integrity: sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==} 441 + resolution: {integrity: sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.0.tgz} 439 442 engines: {node: '>=18'} 440 443 cpu: [x64] 441 444 os: [freebsd] 442 445 443 446 '@esbuild/freebsd-x64@0.27.2': 444 - resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} 447 + resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz} 445 448 engines: {node: '>=18'} 446 449 cpu: [x64] 447 450 os: [freebsd] 448 451 449 452 '@esbuild/linux-arm64@0.27.0': 450 - resolution: {integrity: sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==} 453 + resolution: {integrity: sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.0.tgz} 451 454 engines: {node: '>=18'} 452 455 cpu: [arm64] 453 456 os: [linux] 454 457 455 458 '@esbuild/linux-arm64@0.27.2': 456 - resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} 459 + resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz} 457 460 engines: {node: '>=18'} 458 461 cpu: [arm64] 459 462 os: [linux] 460 463 461 464 '@esbuild/linux-arm@0.27.0': 462 - resolution: {integrity: sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==} 465 + resolution: {integrity: sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.0.tgz} 463 466 engines: {node: '>=18'} 464 467 cpu: [arm] 465 468 os: [linux] 466 469 467 470 '@esbuild/linux-arm@0.27.2': 468 - resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} 471 + resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz} 469 472 engines: {node: '>=18'} 470 473 cpu: [arm] 471 474 os: [linux] 472 475 473 476 '@esbuild/linux-ia32@0.27.0': 474 - resolution: {integrity: sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==} 477 + resolution: {integrity: sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.0.tgz} 475 478 engines: {node: '>=18'} 476 479 cpu: [ia32] 477 480 os: [linux] 478 481 479 482 '@esbuild/linux-ia32@0.27.2': 480 - resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} 483 + resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz} 481 484 engines: {node: '>=18'} 482 485 cpu: [ia32] 483 486 os: [linux] 484 487 485 488 '@esbuild/linux-loong64@0.27.0': 486 - resolution: {integrity: sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==} 489 + resolution: {integrity: sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.0.tgz} 487 490 engines: {node: '>=18'} 488 491 cpu: [loong64] 489 492 os: [linux] 490 493 491 494 '@esbuild/linux-loong64@0.27.2': 492 - resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} 495 + resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz} 493 496 engines: {node: '>=18'} 494 497 cpu: [loong64] 495 498 os: [linux] 496 499 497 500 '@esbuild/linux-mips64el@0.27.0': 498 - resolution: {integrity: sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==} 501 + resolution: {integrity: sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.0.tgz} 499 502 engines: {node: '>=18'} 500 503 cpu: [mips64el] 501 504 os: [linux] 502 505 503 506 '@esbuild/linux-mips64el@0.27.2': 504 - resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} 507 + resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz} 505 508 engines: {node: '>=18'} 506 509 cpu: [mips64el] 507 510 os: [linux] 508 511 509 512 '@esbuild/linux-ppc64@0.27.0': 510 - resolution: {integrity: sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==} 513 + resolution: {integrity: sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.0.tgz} 511 514 engines: {node: '>=18'} 512 515 cpu: [ppc64] 513 516 os: [linux] 514 517 515 518 '@esbuild/linux-ppc64@0.27.2': 516 - resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} 519 + resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz} 517 520 engines: {node: '>=18'} 518 521 cpu: [ppc64] 519 522 os: [linux] 520 523 521 524 '@esbuild/linux-riscv64@0.27.0': 522 - resolution: {integrity: sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==} 525 + resolution: {integrity: sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.0.tgz} 523 526 engines: {node: '>=18'} 524 527 cpu: [riscv64] 525 528 os: [linux] 526 529 527 530 '@esbuild/linux-riscv64@0.27.2': 528 - resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} 531 + resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz} 529 532 engines: {node: '>=18'} 530 533 cpu: [riscv64] 531 534 os: [linux] 532 535 533 536 '@esbuild/linux-s390x@0.27.0': 534 - resolution: {integrity: sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==} 537 + resolution: {integrity: sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.0.tgz} 535 538 engines: {node: '>=18'} 536 539 cpu: [s390x] 537 540 os: [linux] 538 541 539 542 '@esbuild/linux-s390x@0.27.2': 540 - resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} 543 + resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz} 541 544 engines: {node: '>=18'} 542 545 cpu: [s390x] 543 546 os: [linux] 544 547 545 548 '@esbuild/linux-x64@0.27.0': 546 - resolution: {integrity: sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==} 549 + resolution: {integrity: sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.0.tgz} 547 550 engines: {node: '>=18'} 548 551 cpu: [x64] 549 552 os: [linux] 550 553 551 554 '@esbuild/linux-x64@0.27.2': 552 - resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} 555 + resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz} 553 556 engines: {node: '>=18'} 554 557 cpu: [x64] 555 558 os: [linux] 556 559 557 560 '@esbuild/netbsd-arm64@0.27.0': 558 - resolution: {integrity: sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==} 561 + resolution: {integrity: sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==, tarball: https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.0.tgz} 559 562 engines: {node: '>=18'} 560 563 cpu: [arm64] 561 564 os: [netbsd] 562 565 563 566 '@esbuild/netbsd-arm64@0.27.2': 564 - resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} 567 + resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==, tarball: https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz} 565 568 engines: {node: '>=18'} 566 569 cpu: [arm64] 567 570 os: [netbsd] 568 571 569 572 '@esbuild/netbsd-x64@0.27.0': 570 - resolution: {integrity: sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==} 573 + resolution: {integrity: sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.0.tgz} 571 574 engines: {node: '>=18'} 572 575 cpu: [x64] 573 576 os: [netbsd] 574 577 575 578 '@esbuild/netbsd-x64@0.27.2': 576 - resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} 579 + resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz} 577 580 engines: {node: '>=18'} 578 581 cpu: [x64] 579 582 os: [netbsd] 580 583 581 584 '@esbuild/openbsd-arm64@0.27.0': 582 - resolution: {integrity: sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==} 585 + resolution: {integrity: sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==, tarball: https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.0.tgz} 583 586 engines: {node: '>=18'} 584 587 cpu: [arm64] 585 588 os: [openbsd] 586 589 587 590 '@esbuild/openbsd-arm64@0.27.2': 588 - resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} 591 + resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==, tarball: https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz} 589 592 engines: {node: '>=18'} 590 593 cpu: [arm64] 591 594 os: [openbsd] 592 595 593 596 '@esbuild/openbsd-x64@0.27.0': 594 - resolution: {integrity: sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==} 597 + resolution: {integrity: sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.0.tgz} 595 598 engines: {node: '>=18'} 596 599 cpu: [x64] 597 600 os: [openbsd] 598 601 599 602 '@esbuild/openbsd-x64@0.27.2': 600 - resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} 603 + resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz} 601 604 engines: {node: '>=18'} 602 605 cpu: [x64] 603 606 os: [openbsd] 604 607 605 608 '@esbuild/openharmony-arm64@0.27.0': 606 - resolution: {integrity: sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==} 609 + resolution: {integrity: sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==, tarball: https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.0.tgz} 607 610 engines: {node: '>=18'} 608 611 cpu: [arm64] 609 612 os: [openharmony] 610 613 611 614 '@esbuild/openharmony-arm64@0.27.2': 612 - resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} 615 + resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==, tarball: https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz} 613 616 engines: {node: '>=18'} 614 617 cpu: [arm64] 615 618 os: [openharmony] 616 619 617 620 '@esbuild/sunos-x64@0.27.0': 618 - resolution: {integrity: sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==} 621 + resolution: {integrity: sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.0.tgz} 619 622 engines: {node: '>=18'} 620 623 cpu: [x64] 621 624 os: [sunos] 622 625 623 626 '@esbuild/sunos-x64@0.27.2': 624 - resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} 627 + resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz} 625 628 engines: {node: '>=18'} 626 629 cpu: [x64] 627 630 os: [sunos] 628 631 629 632 '@esbuild/win32-arm64@0.27.0': 630 - resolution: {integrity: sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==} 633 + resolution: {integrity: sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.0.tgz} 631 634 engines: {node: '>=18'} 632 635 cpu: [arm64] 633 636 os: [win32] 634 637 635 638 '@esbuild/win32-arm64@0.27.2': 636 - resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} 639 + resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz} 637 640 engines: {node: '>=18'} 638 641 cpu: [arm64] 639 642 os: [win32] 640 643 641 644 '@esbuild/win32-ia32@0.27.0': 642 - resolution: {integrity: sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==} 645 + resolution: {integrity: sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.0.tgz} 643 646 engines: {node: '>=18'} 644 647 cpu: [ia32] 645 648 os: [win32] 646 649 647 650 '@esbuild/win32-ia32@0.27.2': 648 - resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} 651 + resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz} 649 652 engines: {node: '>=18'} 650 653 cpu: [ia32] 651 654 os: [win32] 652 655 653 656 '@esbuild/win32-x64@0.27.0': 654 - resolution: {integrity: sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==} 657 + resolution: {integrity: sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.0.tgz} 655 658 engines: {node: '>=18'} 656 659 cpu: [x64] 657 660 os: [win32] 658 661 659 662 '@esbuild/win32-x64@0.27.2': 660 - resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} 663 + resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz} 661 664 engines: {node: '>=18'} 662 665 cpu: [x64] 663 666 os: [win32] ··· 784 787 engines: {node: '>=18'} 785 788 786 789 '@img/sharp-darwin-arm64@0.34.5': 787 - resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} 790 + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==, tarball: https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz} 788 791 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 789 792 cpu: [arm64] 790 793 os: [darwin] 791 794 792 795 '@img/sharp-darwin-x64@0.34.5': 793 - resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} 796 + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==, tarball: https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz} 794 797 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 795 798 cpu: [x64] 796 799 os: [darwin] 797 800 798 801 '@img/sharp-libvips-darwin-arm64@1.2.4': 799 - resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} 802 + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==, tarball: https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz} 800 803 cpu: [arm64] 801 804 os: [darwin] 802 805 803 806 '@img/sharp-libvips-darwin-x64@1.2.4': 804 - resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} 807 + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==, tarball: https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz} 805 808 cpu: [x64] 806 809 os: [darwin] 807 810 808 811 '@img/sharp-libvips-linux-arm64@1.2.4': 809 - resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} 812 + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz} 810 813 cpu: [arm64] 811 814 os: [linux] 812 815 813 816 '@img/sharp-libvips-linux-arm@1.2.4': 814 - resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} 817 + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz} 815 818 cpu: [arm] 816 819 os: [linux] 817 820 818 821 '@img/sharp-libvips-linux-ppc64@1.2.4': 819 - resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} 822 + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz} 820 823 cpu: [ppc64] 821 824 os: [linux] 822 825 823 826 '@img/sharp-libvips-linux-riscv64@1.2.4': 824 - resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} 827 + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz} 825 828 cpu: [riscv64] 826 829 os: [linux] 827 830 828 831 '@img/sharp-libvips-linux-s390x@1.2.4': 829 - resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} 832 + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz} 830 833 cpu: [s390x] 831 834 os: [linux] 832 835 833 836 '@img/sharp-libvips-linux-x64@1.2.4': 834 - resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} 837 + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz} 835 838 cpu: [x64] 836 839 os: [linux] 837 840 838 841 '@img/sharp-libvips-linuxmusl-arm64@1.2.4': 839 - resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} 842 + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz} 840 843 cpu: [arm64] 841 844 os: [linux] 842 845 843 846 '@img/sharp-libvips-linuxmusl-x64@1.2.4': 844 - resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} 847 + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz} 845 848 cpu: [x64] 846 849 os: [linux] 847 850 848 851 '@img/sharp-linux-arm64@0.34.5': 849 - resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} 852 + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==, tarball: https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz} 850 853 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 851 854 cpu: [arm64] 852 855 os: [linux] 853 856 854 857 '@img/sharp-linux-arm@0.34.5': 855 - resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} 858 + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==, tarball: https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz} 856 859 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 857 860 cpu: [arm] 858 861 os: [linux] 859 862 860 863 '@img/sharp-linux-ppc64@0.34.5': 861 - resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} 864 + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==, tarball: https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz} 862 865 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 863 866 cpu: [ppc64] 864 867 os: [linux] 865 868 866 869 '@img/sharp-linux-riscv64@0.34.5': 867 - resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} 870 + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==, tarball: https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz} 868 871 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 869 872 cpu: [riscv64] 870 873 os: [linux] 871 874 872 875 '@img/sharp-linux-s390x@0.34.5': 873 - resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} 876 + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==, tarball: https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz} 874 877 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 875 878 cpu: [s390x] 876 879 os: [linux] 877 880 878 881 '@img/sharp-linux-x64@0.34.5': 879 - resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} 882 + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==, tarball: https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz} 880 883 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 881 884 cpu: [x64] 882 885 os: [linux] 883 886 884 887 '@img/sharp-linuxmusl-arm64@0.34.5': 885 - resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} 888 + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==, tarball: https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz} 886 889 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 887 890 cpu: [arm64] 888 891 os: [linux] 889 892 890 893 '@img/sharp-linuxmusl-x64@0.34.5': 891 - resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} 894 + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==, tarball: https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz} 892 895 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 893 896 cpu: [x64] 894 897 os: [linux] 895 898 896 899 '@img/sharp-wasm32@0.34.5': 897 - resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} 900 + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==, tarball: https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz} 898 901 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 899 902 cpu: [wasm32] 900 903 901 904 '@img/sharp-win32-arm64@0.34.5': 902 - resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} 905 + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==, tarball: https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz} 903 906 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 904 907 cpu: [arm64] 905 908 os: [win32] 906 909 907 910 '@img/sharp-win32-ia32@0.34.5': 908 - resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} 911 + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==, tarball: https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz} 909 912 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 910 913 cpu: [ia32] 911 914 os: [win32] 912 915 913 916 '@img/sharp-win32-x64@0.34.5': 914 - resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} 917 + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==, tarball: https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz} 915 918 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 916 919 cpu: [x64] 917 920 os: [win32] ··· 989 992 engines: {node: '>= 10'} 990 993 991 994 '@rollup/rollup-android-arm-eabi@4.56.0': 992 - resolution: {integrity: sha512-LNKIPA5k8PF1+jAFomGe3qN3bbIgJe/IlpDBwuVjrDKrJhVWywgnJvflMt/zkbVNLFtF1+94SljYQS6e99klnw==} 995 + resolution: {integrity: sha512-LNKIPA5k8PF1+jAFomGe3qN3bbIgJe/IlpDBwuVjrDKrJhVWywgnJvflMt/zkbVNLFtF1+94SljYQS6e99klnw==, tarball: https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.56.0.tgz} 993 996 cpu: [arm] 994 997 os: [android] 995 998 996 999 '@rollup/rollup-android-arm64@4.56.0': 997 - resolution: {integrity: sha512-lfbVUbelYqXlYiU/HApNMJzT1E87UPGvzveGg2h0ktUNlOCxKlWuJ9jtfvs1sKHdwU4fzY7Pl8sAl49/XaEk6Q==} 1000 + resolution: {integrity: sha512-lfbVUbelYqXlYiU/HApNMJzT1E87UPGvzveGg2h0ktUNlOCxKlWuJ9jtfvs1sKHdwU4fzY7Pl8sAl49/XaEk6Q==, tarball: https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.56.0.tgz} 998 1001 cpu: [arm64] 999 1002 os: [android] 1000 1003 1001 1004 '@rollup/rollup-darwin-arm64@4.56.0': 1002 - resolution: {integrity: sha512-EgxD1ocWfhoD6xSOeEEwyE7tDvwTgZc8Bss7wCWe+uc7wO8G34HHCUH+Q6cHqJubxIAnQzAsyUsClt0yFLu06w==} 1005 + resolution: {integrity: sha512-EgxD1ocWfhoD6xSOeEEwyE7tDvwTgZc8Bss7wCWe+uc7wO8G34HHCUH+Q6cHqJubxIAnQzAsyUsClt0yFLu06w==, tarball: https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.56.0.tgz} 1003 1006 cpu: [arm64] 1004 1007 os: [darwin] 1005 1008 1006 1009 '@rollup/rollup-darwin-x64@4.56.0': 1007 - resolution: {integrity: sha512-1vXe1vcMOssb/hOF8iv52A7feWW2xnu+c8BV4t1F//m9QVLTfNVpEdja5ia762j/UEJe2Z1jAmEqZAK42tVW3g==} 1010 + resolution: {integrity: sha512-1vXe1vcMOssb/hOF8iv52A7feWW2xnu+c8BV4t1F//m9QVLTfNVpEdja5ia762j/UEJe2Z1jAmEqZAK42tVW3g==, tarball: https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.56.0.tgz} 1008 1011 cpu: [x64] 1009 1012 os: [darwin] 1010 1013 1011 1014 '@rollup/rollup-freebsd-arm64@4.56.0': 1012 - resolution: {integrity: sha512-bof7fbIlvqsyv/DtaXSck4VYQ9lPtoWNFCB/JY4snlFuJREXfZnm+Ej6yaCHfQvofJDXLDMTVxWscVSuQvVWUQ==} 1015 + resolution: {integrity: sha512-bof7fbIlvqsyv/DtaXSck4VYQ9lPtoWNFCB/JY4snlFuJREXfZnm+Ej6yaCHfQvofJDXLDMTVxWscVSuQvVWUQ==, tarball: https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.56.0.tgz} 1013 1016 cpu: [arm64] 1014 1017 os: [freebsd] 1015 1018 1016 1019 '@rollup/rollup-freebsd-x64@4.56.0': 1017 - resolution: {integrity: sha512-KNa6lYHloW+7lTEkYGa37fpvPq+NKG/EHKM8+G/g9WDU7ls4sMqbVRV78J6LdNuVaeeK5WB9/9VAFbKxcbXKYg==} 1020 + resolution: {integrity: sha512-KNa6lYHloW+7lTEkYGa37fpvPq+NKG/EHKM8+G/g9WDU7ls4sMqbVRV78J6LdNuVaeeK5WB9/9VAFbKxcbXKYg==, tarball: https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.56.0.tgz} 1018 1021 cpu: [x64] 1019 1022 os: [freebsd] 1020 1023 1021 1024 '@rollup/rollup-linux-arm-gnueabihf@4.56.0': 1022 - resolution: {integrity: sha512-E8jKK87uOvLrrLN28jnAAAChNq5LeCd2mGgZF+fGF5D507WlG/Noct3lP/QzQ6MrqJ5BCKNwI9ipADB6jyiq2A==} 1025 + resolution: {integrity: sha512-E8jKK87uOvLrrLN28jnAAAChNq5LeCd2mGgZF+fGF5D507WlG/Noct3lP/QzQ6MrqJ5BCKNwI9ipADB6jyiq2A==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.56.0.tgz} 1023 1026 cpu: [arm] 1024 1027 os: [linux] 1025 1028 1026 1029 '@rollup/rollup-linux-arm-musleabihf@4.56.0': 1027 - resolution: {integrity: sha512-jQosa5FMYF5Z6prEpTCCmzCXz6eKr/tCBssSmQGEeozA9tkRUty/5Vx06ibaOP9RCrW1Pvb8yp3gvZhHwTDsJw==} 1030 + resolution: {integrity: sha512-jQosa5FMYF5Z6prEpTCCmzCXz6eKr/tCBssSmQGEeozA9tkRUty/5Vx06ibaOP9RCrW1Pvb8yp3gvZhHwTDsJw==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.56.0.tgz} 1028 1031 cpu: [arm] 1029 1032 os: [linux] 1030 1033 1031 1034 '@rollup/rollup-linux-arm64-gnu@4.56.0': 1032 - resolution: {integrity: sha512-uQVoKkrC1KGEV6udrdVahASIsaF8h7iLG0U0W+Xn14ucFwi6uS539PsAr24IEF9/FoDtzMeeJXJIBo5RkbNWvQ==} 1035 + resolution: {integrity: sha512-uQVoKkrC1KGEV6udrdVahASIsaF8h7iLG0U0W+Xn14ucFwi6uS539PsAr24IEF9/FoDtzMeeJXJIBo5RkbNWvQ==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.56.0.tgz} 1033 1036 cpu: [arm64] 1034 1037 os: [linux] 1035 1038 1036 1039 '@rollup/rollup-linux-arm64-musl@4.56.0': 1037 - resolution: {integrity: sha512-vLZ1yJKLxhQLFKTs42RwTwa6zkGln+bnXc8ueFGMYmBTLfNu58sl5/eXyxRa2RarTkJbXl8TKPgfS6V5ijNqEA==} 1040 + resolution: {integrity: sha512-vLZ1yJKLxhQLFKTs42RwTwa6zkGln+bnXc8ueFGMYmBTLfNu58sl5/eXyxRa2RarTkJbXl8TKPgfS6V5ijNqEA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.56.0.tgz} 1038 1041 cpu: [arm64] 1039 1042 os: [linux] 1040 1043 1041 1044 '@rollup/rollup-linux-loong64-gnu@4.56.0': 1042 - resolution: {integrity: sha512-FWfHOCub564kSE3xJQLLIC/hbKqHSVxy8vY75/YHHzWvbJL7aYJkdgwD/xGfUlL5UV2SB7otapLrcCj2xnF1dg==} 1045 + resolution: {integrity: sha512-FWfHOCub564kSE3xJQLLIC/hbKqHSVxy8vY75/YHHzWvbJL7aYJkdgwD/xGfUlL5UV2SB7otapLrcCj2xnF1dg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.56.0.tgz} 1043 1046 cpu: [loong64] 1044 1047 os: [linux] 1045 1048 1046 1049 '@rollup/rollup-linux-loong64-musl@4.56.0': 1047 - resolution: {integrity: sha512-z1EkujxIh7nbrKL1lmIpqFTc/sr0u8Uk0zK/qIEFldbt6EDKWFk/pxFq3gYj4Bjn3aa9eEhYRlL3H8ZbPT1xvA==} 1050 + resolution: {integrity: sha512-z1EkujxIh7nbrKL1lmIpqFTc/sr0u8Uk0zK/qIEFldbt6EDKWFk/pxFq3gYj4Bjn3aa9eEhYRlL3H8ZbPT1xvA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.56.0.tgz} 1048 1051 cpu: [loong64] 1049 1052 os: [linux] 1050 1053 1051 1054 '@rollup/rollup-linux-ppc64-gnu@4.56.0': 1052 - resolution: {integrity: sha512-iNFTluqgdoQC7AIE8Q34R3AuPrJGJirj5wMUErxj22deOcY7XwZRaqYmB6ZKFHoVGqRcRd0mqO+845jAibKCkw==} 1055 + resolution: {integrity: sha512-iNFTluqgdoQC7AIE8Q34R3AuPrJGJirj5wMUErxj22deOcY7XwZRaqYmB6ZKFHoVGqRcRd0mqO+845jAibKCkw==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.56.0.tgz} 1053 1056 cpu: [ppc64] 1054 1057 os: [linux] 1055 1058 1056 1059 '@rollup/rollup-linux-ppc64-musl@4.56.0': 1057 - resolution: {integrity: sha512-MtMeFVlD2LIKjp2sE2xM2slq3Zxf9zwVuw0jemsxvh1QOpHSsSzfNOTH9uYW9i1MXFxUSMmLpeVeUzoNOKBaWg==} 1060 + resolution: {integrity: sha512-MtMeFVlD2LIKjp2sE2xM2slq3Zxf9zwVuw0jemsxvh1QOpHSsSzfNOTH9uYW9i1MXFxUSMmLpeVeUzoNOKBaWg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.56.0.tgz} 1058 1061 cpu: [ppc64] 1059 1062 os: [linux] 1060 1063 1061 1064 '@rollup/rollup-linux-riscv64-gnu@4.56.0': 1062 - resolution: {integrity: sha512-in+v6wiHdzzVhYKXIk5U74dEZHdKN9KH0Q4ANHOTvyXPG41bajYRsy7a8TPKbYPl34hU7PP7hMVHRvv/5aCSew==} 1065 + resolution: {integrity: sha512-in+v6wiHdzzVhYKXIk5U74dEZHdKN9KH0Q4ANHOTvyXPG41bajYRsy7a8TPKbYPl34hU7PP7hMVHRvv/5aCSew==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.56.0.tgz} 1063 1066 cpu: [riscv64] 1064 1067 os: [linux] 1065 1068 1066 1069 '@rollup/rollup-linux-riscv64-musl@4.56.0': 1067 - resolution: {integrity: sha512-yni2raKHB8m9NQpI9fPVwN754mn6dHQSbDTwxdr9SE0ks38DTjLMMBjrwvB5+mXrX+C0npX0CVeCUcvvvD8CNQ==} 1070 + resolution: {integrity: sha512-yni2raKHB8m9NQpI9fPVwN754mn6dHQSbDTwxdr9SE0ks38DTjLMMBjrwvB5+mXrX+C0npX0CVeCUcvvvD8CNQ==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.56.0.tgz} 1068 1071 cpu: [riscv64] 1069 1072 os: [linux] 1070 1073 1071 1074 '@rollup/rollup-linux-s390x-gnu@4.56.0': 1072 - resolution: {integrity: sha512-zhLLJx9nQPu7wezbxt2ut+CI4YlXi68ndEve16tPc/iwoylWS9B3FxpLS2PkmfYgDQtosah07Mj9E0khc3Y+vQ==} 1075 + resolution: {integrity: sha512-zhLLJx9nQPu7wezbxt2ut+CI4YlXi68ndEve16tPc/iwoylWS9B3FxpLS2PkmfYgDQtosah07Mj9E0khc3Y+vQ==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.56.0.tgz} 1073 1076 cpu: [s390x] 1074 1077 os: [linux] 1075 1078 1076 1079 '@rollup/rollup-linux-x64-gnu@4.56.0': 1077 - resolution: {integrity: sha512-MVC6UDp16ZSH7x4rtuJPAEoE1RwS8N4oK9DLHy3FTEdFoUTCFVzMfJl/BVJ330C+hx8FfprA5Wqx4FhZXkj2Kw==} 1080 + resolution: {integrity: sha512-MVC6UDp16ZSH7x4rtuJPAEoE1RwS8N4oK9DLHy3FTEdFoUTCFVzMfJl/BVJ330C+hx8FfprA5Wqx4FhZXkj2Kw==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.56.0.tgz} 1078 1081 cpu: [x64] 1079 1082 os: [linux] 1080 1083 1081 1084 '@rollup/rollup-linux-x64-musl@4.56.0': 1082 - resolution: {integrity: sha512-ZhGH1eA4Qv0lxaV00azCIS1ChedK0V32952Md3FtnxSqZTBTd6tgil4nZT5cU8B+SIw3PFYkvyR4FKo2oyZIHA==} 1085 + resolution: {integrity: sha512-ZhGH1eA4Qv0lxaV00azCIS1ChedK0V32952Md3FtnxSqZTBTd6tgil4nZT5cU8B+SIw3PFYkvyR4FKo2oyZIHA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.56.0.tgz} 1083 1086 cpu: [x64] 1084 1087 os: [linux] 1085 1088 1086 1089 '@rollup/rollup-openbsd-x64@4.56.0': 1087 - resolution: {integrity: sha512-O16XcmyDeFI9879pEcmtWvD/2nyxR9mF7Gs44lf1vGGx8Vg2DRNx11aVXBEqOQhWb92WN4z7fW/q4+2NYzCbBA==} 1090 + resolution: {integrity: sha512-O16XcmyDeFI9879pEcmtWvD/2nyxR9mF7Gs44lf1vGGx8Vg2DRNx11aVXBEqOQhWb92WN4z7fW/q4+2NYzCbBA==, tarball: https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.56.0.tgz} 1088 1091 cpu: [x64] 1089 1092 os: [openbsd] 1090 1093 1091 1094 '@rollup/rollup-openharmony-arm64@4.56.0': 1092 - resolution: {integrity: sha512-LhN/Reh+7F3RCgQIRbgw8ZMwUwyqJM+8pXNT6IIJAqm2IdKkzpCh/V9EdgOMBKuebIrzswqy4ATlrDgiOwbRcQ==} 1095 + resolution: {integrity: sha512-LhN/Reh+7F3RCgQIRbgw8ZMwUwyqJM+8pXNT6IIJAqm2IdKkzpCh/V9EdgOMBKuebIrzswqy4ATlrDgiOwbRcQ==, tarball: https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.56.0.tgz} 1093 1096 cpu: [arm64] 1094 1097 os: [openharmony] 1095 1098 1096 1099 '@rollup/rollup-win32-arm64-msvc@4.56.0': 1097 - resolution: {integrity: sha512-kbFsOObXp3LBULg1d3JIUQMa9Kv4UitDmpS+k0tinPBz3watcUiV2/LUDMMucA6pZO3WGE27P7DsfaN54l9ing==} 1100 + resolution: {integrity: sha512-kbFsOObXp3LBULg1d3JIUQMa9Kv4UitDmpS+k0tinPBz3watcUiV2/LUDMMucA6pZO3WGE27P7DsfaN54l9ing==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.56.0.tgz} 1098 1101 cpu: [arm64] 1099 1102 os: [win32] 1100 1103 1101 1104 '@rollup/rollup-win32-ia32-msvc@4.56.0': 1102 - resolution: {integrity: sha512-vSSgny54D6P4vf2izbtFm/TcWYedw7f8eBrOiGGecyHyQB9q4Kqentjaj8hToe+995nob/Wv48pDqL5a62EWtg==} 1105 + resolution: {integrity: sha512-vSSgny54D6P4vf2izbtFm/TcWYedw7f8eBrOiGGecyHyQB9q4Kqentjaj8hToe+995nob/Wv48pDqL5a62EWtg==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.56.0.tgz} 1103 1106 cpu: [ia32] 1104 1107 os: [win32] 1105 1108 1106 1109 '@rollup/rollup-win32-x64-gnu@4.56.0': 1107 - resolution: {integrity: sha512-FeCnkPCTHQJFbiGG49KjV5YGW/8b9rrXAM2Mz2kiIoktq2qsJxRD5giEMEOD2lPdgs72upzefaUvS+nc8E3UzQ==} 1110 + resolution: {integrity: sha512-FeCnkPCTHQJFbiGG49KjV5YGW/8b9rrXAM2Mz2kiIoktq2qsJxRD5giEMEOD2lPdgs72upzefaUvS+nc8E3UzQ==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.56.0.tgz} 1108 1111 cpu: [x64] 1109 1112 os: [win32] 1110 1113 1111 1114 '@rollup/rollup-win32-x64-msvc@4.56.0': 1112 - resolution: {integrity: sha512-H8AE9Ur/t0+1VXujj90w0HrSOuv0Nq9r1vSZF2t5km20NTfosQsGGUXDaKdQZzwuLts7IyL1fYT4hM95TI9c4g==} 1115 + resolution: {integrity: sha512-H8AE9Ur/t0+1VXujj90w0HrSOuv0Nq9r1vSZF2t5km20NTfosQsGGUXDaKdQZzwuLts7IyL1fYT4hM95TI9c4g==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.56.0.tgz} 1113 1116 cpu: [x64] 1114 1117 os: [win32] 1115 1118 ··· 1182 1185 resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==} 1183 1186 1184 1187 '@tailwindcss/oxide-android-arm64@4.1.18': 1185 - resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==} 1188 + resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.18.tgz} 1186 1189 engines: {node: '>= 10'} 1187 1190 cpu: [arm64] 1188 1191 os: [android] 1189 1192 1190 1193 '@tailwindcss/oxide-darwin-arm64@4.1.18': 1191 - resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==} 1194 + resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.18.tgz} 1192 1195 engines: {node: '>= 10'} 1193 1196 cpu: [arm64] 1194 1197 os: [darwin] 1195 1198 1196 1199 '@tailwindcss/oxide-darwin-x64@4.1.18': 1197 - resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==} 1200 + resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.18.tgz} 1198 1201 engines: {node: '>= 10'} 1199 1202 cpu: [x64] 1200 1203 os: [darwin] 1201 1204 1202 1205 '@tailwindcss/oxide-freebsd-x64@4.1.18': 1203 - resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==} 1206 + resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.18.tgz} 1204 1207 engines: {node: '>= 10'} 1205 1208 cpu: [x64] 1206 1209 os: [freebsd] 1207 1210 1208 1211 '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': 1209 - resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==} 1212 + resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.18.tgz} 1210 1213 engines: {node: '>= 10'} 1211 1214 cpu: [arm] 1212 1215 os: [linux] 1213 1216 1214 1217 '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': 1215 - resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==} 1218 + resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.18.tgz} 1216 1219 engines: {node: '>= 10'} 1217 1220 cpu: [arm64] 1218 1221 os: [linux] 1219 1222 1220 1223 '@tailwindcss/oxide-linux-arm64-musl@4.1.18': 1221 - resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==} 1224 + resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.18.tgz} 1222 1225 engines: {node: '>= 10'} 1223 1226 cpu: [arm64] 1224 1227 os: [linux] 1225 1228 1226 1229 '@tailwindcss/oxide-linux-x64-gnu@4.1.18': 1227 - resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==} 1230 + resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.18.tgz} 1228 1231 engines: {node: '>= 10'} 1229 1232 cpu: [x64] 1230 1233 os: [linux] 1231 1234 1232 1235 '@tailwindcss/oxide-linux-x64-musl@4.1.18': 1233 - resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==} 1236 + resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.18.tgz} 1234 1237 engines: {node: '>= 10'} 1235 1238 cpu: [x64] 1236 1239 os: [linux] 1237 1240 1238 1241 '@tailwindcss/oxide-wasm32-wasi@4.1.18': 1239 - resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==} 1242 + resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.18.tgz} 1240 1243 engines: {node: '>=14.0.0'} 1241 1244 cpu: [wasm32] 1242 1245 bundledDependencies: ··· 1248 1251 - tslib 1249 1252 1250 1253 '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': 1251 - resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==} 1254 + resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.18.tgz} 1252 1255 engines: {node: '>= 10'} 1253 1256 cpu: [arm64] 1254 1257 os: [win32] 1255 1258 1256 1259 '@tailwindcss/oxide-win32-x64-msvc@4.1.18': 1257 - resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==} 1260 + resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.18.tgz} 1258 1261 engines: {node: '>= 10'} 1259 1262 cpu: [x64] 1260 1263 os: [win32] ··· 1274 1277 vite: ^5.2.0 || ^6 || ^7 1275 1278 1276 1279 '@takumi-rs/core-darwin-arm64@0.55.4': 1277 - resolution: {integrity: sha512-LH/X/ul19DActLGcBpXnxH3OBEq8qOgPD56hNHAJMbnCRxAO6TDaIh2U7WqPVliSkFk3jZfikbD21SIEpZrp8A==} 1280 + resolution: {integrity: sha512-LH/X/ul19DActLGcBpXnxH3OBEq8qOgPD56hNHAJMbnCRxAO6TDaIh2U7WqPVliSkFk3jZfikbD21SIEpZrp8A==, tarball: https://registry.npmjs.org/@takumi-rs/core-darwin-arm64/-/core-darwin-arm64-0.55.4.tgz} 1278 1281 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1279 1282 cpu: [arm64] 1280 1283 os: [darwin] 1281 1284 1282 1285 '@takumi-rs/core-darwin-x64@0.55.4': 1283 - resolution: {integrity: sha512-UW7ovR/D1Qp8n8bJOo6JLqZZUDFWWtGRXEZZUZhzUeMSzJ4k3C6ef/DEc75bUTGeBKqCeypMPcvtkQAjcVwwhw==} 1286 + resolution: {integrity: sha512-UW7ovR/D1Qp8n8bJOo6JLqZZUDFWWtGRXEZZUZhzUeMSzJ4k3C6ef/DEc75bUTGeBKqCeypMPcvtkQAjcVwwhw==, tarball: https://registry.npmjs.org/@takumi-rs/core-darwin-x64/-/core-darwin-x64-0.55.4.tgz} 1284 1287 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1285 1288 cpu: [x64] 1286 1289 os: [darwin] 1287 1290 1288 1291 '@takumi-rs/core-linux-arm64-gnu@0.55.4': 1289 - resolution: {integrity: sha512-y1d5yuPapKlmt77TpE+XrtULj7LZ51leBqWSg6qMNKxhpvRqmjI/SYjHmk5YvshnrTkdKmRQiXJiiN5EzOhbmA==} 1292 + resolution: {integrity: sha512-y1d5yuPapKlmt77TpE+XrtULj7LZ51leBqWSg6qMNKxhpvRqmjI/SYjHmk5YvshnrTkdKmRQiXJiiN5EzOhbmA==, tarball: https://registry.npmjs.org/@takumi-rs/core-linux-arm64-gnu/-/core-linux-arm64-gnu-0.55.4.tgz} 1290 1293 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1291 1294 cpu: [arm64] 1292 1295 os: [linux] 1293 1296 1294 1297 '@takumi-rs/core-linux-arm64-musl@0.55.4': 1295 - resolution: {integrity: sha512-VRbQqbMeoPlrMmaqPwn30Sw82LYya+o4ru9dqV/7BKExozWj/pX9ahexlJdHsZ6wqmsr+ZxexZivK1mPum9ang==} 1298 + resolution: {integrity: sha512-VRbQqbMeoPlrMmaqPwn30Sw82LYya+o4ru9dqV/7BKExozWj/pX9ahexlJdHsZ6wqmsr+ZxexZivK1mPum9ang==, tarball: https://registry.npmjs.org/@takumi-rs/core-linux-arm64-musl/-/core-linux-arm64-musl-0.55.4.tgz} 1296 1299 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1297 1300 cpu: [arm64] 1298 1301 os: [linux] 1299 1302 1300 1303 '@takumi-rs/core-linux-x64-gnu@0.55.4': 1301 - resolution: {integrity: sha512-ecCUtNgOe6mCWKf+SE7cbJXWd6D6TQoCnKZAJAGrJkJLAdy/gBhCFhOyPz8M7q/4uWHUATentqi35KAp+jxBiQ==} 1304 + resolution: {integrity: sha512-ecCUtNgOe6mCWKf+SE7cbJXWd6D6TQoCnKZAJAGrJkJLAdy/gBhCFhOyPz8M7q/4uWHUATentqi35KAp+jxBiQ==, tarball: https://registry.npmjs.org/@takumi-rs/core-linux-x64-gnu/-/core-linux-x64-gnu-0.55.4.tgz} 1302 1305 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1303 1306 cpu: [x64] 1304 1307 os: [linux] 1305 1308 1306 1309 '@takumi-rs/core-linux-x64-musl@0.55.4': 1307 - resolution: {integrity: sha512-YBM2zPrGE/1sfHoFZvOsCvCuK9PfaxzePN/GnnlaAvpvgeRHiAU4PJkLGDpjMFfsWUAEdjly/b0HSAjVQ7NL6Q==} 1310 + resolution: {integrity: sha512-YBM2zPrGE/1sfHoFZvOsCvCuK9PfaxzePN/GnnlaAvpvgeRHiAU4PJkLGDpjMFfsWUAEdjly/b0HSAjVQ7NL6Q==, tarball: https://registry.npmjs.org/@takumi-rs/core-linux-x64-musl/-/core-linux-x64-musl-0.55.4.tgz} 1308 1311 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1309 1312 cpu: [x64] 1310 1313 os: [linux] 1311 1314 1312 1315 '@takumi-rs/core-win32-arm64-msvc@0.55.4': 1313 - resolution: {integrity: sha512-VcgLCWnmyWuhwLv0Tpob8Hv5IFPreFVykoHruPGwXDVVoUcCo+lQ8oCO5EYTB8B/tBAXl2S0xUL0nMDbyLzMxQ==} 1316 + resolution: {integrity: sha512-VcgLCWnmyWuhwLv0Tpob8Hv5IFPreFVykoHruPGwXDVVoUcCo+lQ8oCO5EYTB8B/tBAXl2S0xUL0nMDbyLzMxQ==, tarball: https://registry.npmjs.org/@takumi-rs/core-win32-arm64-msvc/-/core-win32-arm64-msvc-0.55.4.tgz} 1314 1317 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1315 1318 cpu: [arm64] 1316 1319 os: [win32] 1317 1320 1318 1321 '@takumi-rs/core-win32-x64-msvc@0.55.4': 1319 - resolution: {integrity: sha512-ta9g1gUybS2V4mHaccJHcMeBb+w1P6pgZuqHzLoQzBIEK9a/KncHPfnR48cz4sGfg4atorfSa6UBffa2FqijyQ==} 1322 + resolution: {integrity: sha512-ta9g1gUybS2V4mHaccJHcMeBb+w1P6pgZuqHzLoQzBIEK9a/KncHPfnR48cz4sGfg4atorfSa6UBffa2FqijyQ==, tarball: https://registry.npmjs.org/@takumi-rs/core-win32-x64-msvc/-/core-win32-x64-msvc-0.55.4.tgz} 1320 1323 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1321 1324 cpu: [x64] 1322 1325 os: [win32] ··· 1537 1540 1538 1541 '@types/three@0.176.0': 1539 1542 resolution: {integrity: sha512-FwfPXxCqOtP7EdYMagCFePNKoG1AGBDUEVKtluv2BTVRpSt7b+X27xNsirPCTCqY1pGYsPUzaM3jgWP7dXSxlw==} 1543 + 1544 + '@types/trusted-types@2.0.7': 1545 + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==, tarball: https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz} 1540 1546 1541 1547 '@types/turndown@5.0.6': 1542 1548 resolution: {integrity: sha512-ru00MoyeeouE5BX4gRL+6m/BsDfbRayOskWqUvh7CLGW+UXxHQItqALa38kKnOiZPqJrtzJUgAC2+F0rL1S4Pg==} ··· 1831 1837 resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} 1832 1838 engines: {node: '>= 4'} 1833 1839 1840 + dompurify@3.3.1: 1841 + resolution: {integrity: sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==, tarball: https://registry.npmjs.org/dompurify/-/dompurify-3.3.1.tgz} 1842 + 1834 1843 domutils@3.2.2: 1835 1844 resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} 1836 1845 ··· 1992 2001 resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 1993 2002 1994 2003 fsevents@2.3.3: 1995 - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 2004 + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, tarball: https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz} 1996 2005 engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1997 2006 os: [darwin] 1998 2007 ··· 2128 2137 engines: {node: '>= 0.8.0'} 2129 2138 2130 2139 lightningcss-android-arm64@1.30.2: 2131 - resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} 2140 + resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==, tarball: https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz} 2132 2141 engines: {node: '>= 12.0.0'} 2133 2142 cpu: [arm64] 2134 2143 os: [android] 2135 2144 2136 2145 lightningcss-darwin-arm64@1.30.2: 2137 - resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} 2146 + resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==, tarball: https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz} 2138 2147 engines: {node: '>= 12.0.0'} 2139 2148 cpu: [arm64] 2140 2149 os: [darwin] 2141 2150 2142 2151 lightningcss-darwin-x64@1.30.2: 2143 - resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} 2152 + resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==, tarball: https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz} 2144 2153 engines: {node: '>= 12.0.0'} 2145 2154 cpu: [x64] 2146 2155 os: [darwin] 2147 2156 2148 2157 lightningcss-freebsd-x64@1.30.2: 2149 - resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} 2158 + resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==, tarball: https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz} 2150 2159 engines: {node: '>= 12.0.0'} 2151 2160 cpu: [x64] 2152 2161 os: [freebsd] 2153 2162 2154 2163 lightningcss-linux-arm-gnueabihf@1.30.2: 2155 - resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} 2164 + resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==, tarball: https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz} 2156 2165 engines: {node: '>= 12.0.0'} 2157 2166 cpu: [arm] 2158 2167 os: [linux] 2159 2168 2160 2169 lightningcss-linux-arm64-gnu@1.30.2: 2161 - resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} 2170 + resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==, tarball: https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz} 2162 2171 engines: {node: '>= 12.0.0'} 2163 2172 cpu: [arm64] 2164 2173 os: [linux] 2165 2174 2166 2175 lightningcss-linux-arm64-musl@1.30.2: 2167 - resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} 2176 + resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==, tarball: https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz} 2168 2177 engines: {node: '>= 12.0.0'} 2169 2178 cpu: [arm64] 2170 2179 os: [linux] 2171 2180 2172 2181 lightningcss-linux-x64-gnu@1.30.2: 2173 - resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} 2182 + resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==, tarball: https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz} 2174 2183 engines: {node: '>= 12.0.0'} 2175 2184 cpu: [x64] 2176 2185 os: [linux] 2177 2186 2178 2187 lightningcss-linux-x64-musl@1.30.2: 2179 - resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} 2188 + resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==, tarball: https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz} 2180 2189 engines: {node: '>= 12.0.0'} 2181 2190 cpu: [x64] 2182 2191 os: [linux] 2183 2192 2184 2193 lightningcss-win32-arm64-msvc@1.30.2: 2185 - resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} 2194 + resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==, tarball: https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz} 2186 2195 engines: {node: '>= 12.0.0'} 2187 2196 cpu: [arm64] 2188 2197 os: [win32] 2189 2198 2190 2199 lightningcss-win32-x64-msvc@1.30.2: 2191 - resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} 2200 + resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==, tarball: https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz} 2192 2201 engines: {node: '>= 12.0.0'} 2193 2202 cpu: [x64] 2194 2203 os: [win32] ··· 4194 4203 fflate: 0.8.2 4195 4204 meshoptimizer: 0.18.1 4196 4205 4206 + '@types/trusted-types@2.0.7': 4207 + optional: true 4208 + 4197 4209 '@types/turndown@5.0.6': {} 4198 4210 4199 4211 '@types/webxr@0.5.24': {} ··· 4512 4524 domhandler@5.0.3: 4513 4525 dependencies: 4514 4526 domelementtype: 2.3.0 4527 + 4528 + dompurify@3.3.1: 4529 + optionalDependencies: 4530 + '@types/trusted-types': 2.0.7 4515 4531 4516 4532 domutils@3.2.2: 4517 4533 dependencies:
+2 -1
src/lib/atproto/settings.ts
··· 1 1 import { dev } from '$app/environment'; 2 + import { env } from '$env/dynamic/public'; 2 3 3 - export const SITE = 'https://blento.app'; 4 + export const SITE = env.PUBLIC_DOMAIN; 4 5 5 6 type Permissions = { 6 7 collections: readonly string[];
+53
src/lib/cards/ButtonCard/ButtonCard.svelte
··· 1 + <script lang="ts"> 2 + import { goto } from '$app/navigation'; 3 + import { user } from '$lib/atproto'; 4 + import { getHandleOrDid } from '$lib/atproto/methods'; 5 + import { loginModalState } from '$lib/atproto/UI/LoginModal.svelte'; 6 + import { cn } from '@foxui/core'; 7 + import type { ContentComponentProps } from '../types'; 8 + 9 + let { item }: ContentComponentProps = $props(); 10 + </script> 11 + 12 + {#snippet content()} 13 + <span 14 + class={cn( 15 + 'text-base-950 dark:text-base-50 line-clamp-1 inline-flex items-center justify-center px-4 text-2xl font-semibold', 16 + item.color === 'transparent' 17 + ? 'bg-accent-400 dark:bg-accent-500 hover:bg-accent-400 dark:text-base-950 rounded-2xl px-5 py-2.5 text-xl transition-colors duration-100' 18 + : '' 19 + )} 20 + > 21 + {item.cardData.text || 'Click me'} 22 + </span> 23 + {/snippet} 24 + 25 + {#if item.cardData.href === '#login'} 26 + <button 27 + onclick={() => { 28 + if (user.isLoggedIn && user.profile) { 29 + goto('/' + getHandleOrDid(user.profile) + '/edit', {}); 30 + } else { 31 + loginModalState.show(); 32 + } 33 + }} 34 + class={[ 35 + 'flex h-full w-full cursor-pointer flex-col items-center justify-center transition-colors duration-100', 36 + item.color === 'transparent' ? 'hover:bg-transparent' : 'hover:bg-accent-100/20' 37 + ]} 38 + > 39 + {@render content()} 40 + </button> 41 + {:else} 42 + <a 43 + href={item.cardData.href || '#'} 44 + target="_blank" 45 + rel="noopener noreferrer" 46 + class={[ 47 + 'flex h-full w-full flex-col items-center justify-center transition-colors duration-100', 48 + item.color === 'transparent' ? 'hover:bg-transparent' : 'hover:bg-accent-100/20' 49 + ]} 50 + > 51 + {@render content()} 52 + </a> 53 + {/if}
+34
src/lib/cards/ButtonCard/ButtonCardSettings.svelte
··· 1 + <script lang="ts"> 2 + import type { Item } from '$lib/types'; 3 + import type { SettingsComponentProps } from '../types'; 4 + import { Input, Label } from '@foxui/core'; 5 + 6 + let { item = $bindable<Item>(), onclose }: SettingsComponentProps = $props(); 7 + 8 + function confirmUrl() { 9 + let href = item.cardData.href?.trim() || ''; 10 + if (href && !/^https?:\/\//i.test(href) && !href.startsWith('#')) { 11 + href = 'https://' + href; 12 + } 13 + item.cardData.href = href; 14 + onclose(); 15 + } 16 + </script> 17 + 18 + <div class="flex flex-col gap-3"> 19 + <div class="flex flex-col gap-1"> 20 + <Label for="button-href" class="text-sm">Link</Label> 21 + <Input 22 + id="button-href" 23 + bind:value={item.cardData.href} 24 + placeholder="youtube.com" 25 + class="mt-2 text-sm" 26 + onkeydown={(event) => { 27 + if (event.code === 'Enter') { 28 + event.preventDefault(); 29 + confirmUrl(); 30 + } 31 + }} 32 + /> 33 + </div> 34 + </div>
+23
src/lib/cards/ButtonCard/EditingButtonCard.svelte
··· 1 + <script lang="ts"> 2 + import type { ContentComponentProps } from '../types'; 3 + import PlainTextEditor from '$lib/components/PlainTextEditor.svelte'; 4 + import { cn } from '@foxui/core'; 5 + 6 + let { item = $bindable() }: ContentComponentProps = $props(); 7 + </script> 8 + 9 + <div 10 + class="text-base-950 dark:text-base-50 flex h-full w-full flex-col items-center justify-center gap-2 px-4" 11 + > 12 + <PlainTextEditor 13 + key="text" 14 + bind:contentDict={item.cardData} 15 + placeholder="Button text" 16 + class={cn( 17 + 'line-clamp-1 text-center text-2xl font-semibold', 18 + item.color === 'transparent' 19 + ? 'bg-accent-400 dark:bg-accent-500 hover:bg-accent-400 dark:text-base-950 rounded-2xl px-5 py-2.5 text-xl transition-colors duration-100' 20 + : '' 21 + )} 22 + /> 23 + </div>
+31
src/lib/cards/ButtonCard/index.ts
··· 1 + import type { CardDefinition } from '../types'; 2 + import ButtonCard from './ButtonCard.svelte'; 3 + import EditingButtonCard from './EditingButtonCard.svelte'; 4 + import ButtonCardSettings from './ButtonCardSettings.svelte'; 5 + 6 + export const ButtonCardDefinition: CardDefinition = { 7 + type: 'button', 8 + contentComponent: ButtonCard, 9 + editingContentComponent: EditingButtonCard, 10 + settingsComponent: ButtonCardSettings, 11 + sidebarButtonText: 'Button', 12 + 13 + createNew: (card) => { 14 + card.cardData = { 15 + text: 'Click me' 16 + }; 17 + card.w = 2; 18 + card.h = 1; 19 + card.mobileW = 4; 20 + card.mobileH = 2; 21 + }, 22 + 23 + defaultColor: 'transparent', 24 + allowSetColor: true, 25 + canHaveLabel: false, 26 + 27 + minW: 2, 28 + minH: 1, 29 + maxW: 8, 30 + maxH: 4 31 + };
+8 -11
src/lib/cards/StatusphereCard/EditStatusphereCard.svelte
··· 26 26 } 27 27 }); 28 28 29 + // Use card-specific emoji if set, otherwise fall back to PDS data 30 + let emoji = $derived(item.cardData?.emoji ?? record?.value?.status); 31 + 29 32 let showPopover = $state(false); 30 33 </script> 31 34 32 35 <div class="flex h-full w-full items-center justify-center p-4"> 33 36 <PopoverEmojiPicker 34 37 bind:open={showPopover} 35 - onpicked={(emoji) => { 36 - record ??= { 37 - value: {} 38 - }; 39 - 40 - record.value.status = emoji.unicode; 41 - 38 + onpicked={(picked) => { 42 39 item.cardData.hasUpdate = true; 43 - item.cardData.emoji = emoji.unicode; 40 + item.cardData.emoji = picked.unicode; 44 41 45 42 showPopover = false; 46 43 }} 47 44 > 48 45 {#snippet child({ props })} 49 - {@const animated = emojiToNotoAnimatedWebp(record?.value?.status)} 46 + {@const animated = emojiToNotoAnimatedWebp(emoji)} 50 47 51 48 <button {...props} class="z-20 h-full max-h-40 w-full max-w-40"> 52 49 {#if animated} ··· 55 52 alt="" 56 53 class="hover:bg-base-500/10 h-full max-h-40 w-full max-w-40 rounded-2xl object-contain" 57 54 /> 58 - {:else if record?.value?.status} 55 + {:else if emoji} 59 56 <div class="text-9xl"> 60 - {record.value.status} 57 + {emoji} 61 58 </div> 62 59 {:else} 63 60 <div>Click here to set a status</div>
+5 -3
src/lib/cards/StatusphereCard/StatusphereCard.svelte
··· 9 9 // svelte-ignore state_referenced_locally 10 10 let record = $state(data[item.cardType] as any); 11 11 12 - let animated = $derived(emojiToNotoAnimatedWebp(record?.value?.status)); 12 + // Use card-specific emoji if set, otherwise fall back to PDS data 13 + let emoji = $derived(item.cardData?.emoji ?? record?.value?.status); 14 + let animated = $derived(emojiToNotoAnimatedWebp(emoji)); 13 15 </script> 14 16 15 17 <div class="flex h-full w-full items-center justify-center p-4"> 16 18 {#if animated} 17 19 <img src={animated} alt="" class="h-full max-h-40 w-full object-contain" /> 18 - {:else if record?.value?.status} 20 + {:else if emoji} 19 21 <div class="text-9xl"> 20 - {record?.value?.status} 22 + {emoji} 21 23 </div> 22 24 {:else} 23 25 No status yet
+1 -1
src/lib/cards/StatusphereCard/index.ts
··· 36 36 } 37 37 }); 38 38 delete item.cardData.hasUpdate; 39 - delete item.cardData.emoji; 39 + // Keep item.cardData.emoji so each card can have its own status 40 40 } 41 41 42 42 return item;
+7 -2
src/lib/cards/TextCard/TextCard.svelte
··· 1 1 <script lang="ts"> 2 2 import { marked } from 'marked'; 3 + import { sanitize } from '$lib/sanitize'; 3 4 import type { ContentComponentProps } from '../types'; 4 5 import { textAlignClasses, textSizeClasses, verticalAlignClasses } from '.'; 5 6 import { cn } from '@foxui/core'; ··· 8 9 9 10 const renderer = new marked.Renderer(); 10 11 renderer.link = ({ href, title, text }) => 11 - `<a target="_blank" href="${href}" title="${title}">${text}</a>`; 12 + `<a target="_blank" href="${href}" title="${title ?? ''}">${text}</a>`; 12 13 </script> 13 14 14 15 <div ··· 19 20 textSizeClasses[(item.cardData.textSize ?? 0) as number] 20 21 )} 21 22 > 22 - <span>{@html marked.parse(item.cardData.text ?? '', { renderer })}</span> 23 + <span 24 + >{@html sanitize(marked.parse(item.cardData.text ?? '', { renderer }) as string, { 25 + ADD_ATTR: ['target'] 26 + })}</span 27 + > 23 28 </div>
+102 -10
src/lib/cards/TimerCard/TimerCard.svelte
··· 62 62 eventDiff !== null ? Math.floor((eventDiff % (1000 * 60)) / 1000) : 0 63 63 ); 64 64 65 - let isEventComplete = $derived(cardData.mode === 'event' && eventDiff === 0); 65 + // Check if event is in the past (elapsed mode) 66 + let isEventPast = $derived.by(() => { 67 + if (cardData.mode !== 'event' || !cardData.targetDate) return false; 68 + const target = new Date(cardData.targetDate); 69 + return now.getTime() > target.getTime(); 70 + }); 71 + 72 + // Elapsed time since past event 73 + let elapsedDiff = $derived.by(() => { 74 + if (!isEventPast || !cardData.targetDate) return null; 75 + const target = new Date(cardData.targetDate); 76 + return now.getTime() - target.getTime(); 77 + }); 78 + 79 + let elapsedYears = $derived( 80 + elapsedDiff !== null ? Math.floor(elapsedDiff / (1000 * 60 * 60 * 24 * 365)) : 0 81 + ); 82 + let elapsedDays = $derived( 83 + elapsedDiff !== null 84 + ? Math.floor((elapsedDiff % (1000 * 60 * 60 * 24 * 365)) / (1000 * 60 * 60 * 24)) 85 + : 0 86 + ); 87 + let elapsedHours = $derived( 88 + elapsedDiff !== null ? Math.floor((elapsedDiff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)) : 0 89 + ); 90 + let elapsedMinutes = $derived( 91 + elapsedDiff !== null ? Math.floor((elapsedDiff % (1000 * 60 * 60)) / (1000 * 60)) : 0 92 + ); 93 + let elapsedSeconds = $derived( 94 + elapsedDiff !== null ? Math.floor((elapsedDiff % (1000 * 60)) / 1000) : 0 95 + ); 66 96 67 97 // Get timezone display name 68 98 let timezoneDisplay = $derived.by(() => { ··· 113 143 114 144 <!-- Event Countdown Mode --> 115 145 {:else if cardData.mode === 'event'} 116 - {#if eventDiff !== null && !isEventComplete} 146 + {#if isEventPast && elapsedDiff !== null} 147 + <!-- Elapsed time since past event --> 148 + <NumberFlowGroup> 149 + <div 150 + class="text-base-900 dark:text-base-100 accent:text-base-900 flex items-baseline gap-4 text-center @sm:gap-6 @md:gap-8" 151 + style="font-variant-numeric: tabular-nums;" 152 + > 153 + {#if elapsedYears > 0} 154 + <div class="flex flex-col items-center"> 155 + <NumberFlow 156 + value={elapsedYears} 157 + trend={1} 158 + class="text-3xl font-bold @xs:text-4xl @sm:text-5xl @md:text-6xl @lg:text-7xl" 159 + /> 160 + <span class="text-base-500 dark:text-base-400 accent:text-accent-950 text-xs" 161 + >{elapsedYears === 1 ? 'year' : 'years'}</span 162 + > 163 + </div> 164 + {/if} 165 + {#if elapsedYears > 0 || elapsedDays > 0} 166 + <div class="flex flex-col items-center"> 167 + <NumberFlow 168 + value={elapsedDays} 169 + trend={1} 170 + class="text-3xl font-bold @xs:text-4xl @sm:text-5xl @md:text-6xl @lg:text-7xl" 171 + /> 172 + <span class="text-base-500 dark:text-base-400 accent:text-accent-950 text-xs" 173 + >{elapsedDays === 1 ? 'day' : 'days'}</span 174 + > 175 + </div> 176 + {/if} 177 + <div class="flex flex-col items-center"> 178 + <NumberFlow 179 + value={elapsedHours} 180 + trend={1} 181 + format={{ minimumIntegerDigits: 2 }} 182 + class="text-3xl font-bold @xs:text-4xl @sm:text-5xl @md:text-6xl @lg:text-7xl" 183 + /> 184 + <span class="text-base-500 dark:text-base-400 accent:text-accent-950 text-xs">hrs</span> 185 + </div> 186 + <div class="flex flex-col items-center"> 187 + <NumberFlow 188 + value={elapsedMinutes} 189 + trend={1} 190 + format={{ minimumIntegerDigits: 2 }} 191 + digits={{ 1: { max: 5 } }} 192 + class="text-3xl font-bold @xs:text-4xl @sm:text-5xl @md:text-6xl @lg:text-7xl" 193 + /> 194 + <span class="text-base-500 dark:text-base-400 accent:text-accent-950 text-xs">min</span> 195 + </div> 196 + <div class="flex flex-col items-center"> 197 + <NumberFlow 198 + value={elapsedSeconds} 199 + trend={1} 200 + format={{ minimumIntegerDigits: 2 }} 201 + digits={{ 1: { max: 5 } }} 202 + class="text-3xl font-bold @xs:text-4xl @sm:text-5xl @md:text-6xl @lg:text-7xl" 203 + /> 204 + <span class="text-base-500 dark:text-base-400 accent:text-accent-950 text-xs">sec</span> 205 + </div> 206 + </div> 207 + </NumberFlowGroup> 208 + {:else if eventDiff !== null} 209 + <!-- Countdown to future event --> 117 210 <NumberFlowGroup> 118 211 <div 119 212 class="text-base-900 dark:text-base-100 accent:text-base-900 flex items-baseline gap-4 text-center @sm:gap-6 @md:gap-8" ··· 121 214 > 122 215 {#if eventDays > 0} 123 216 <div class="flex flex-col items-center"> 124 - <NumberFlow value={eventDays} trend={-1} class="text-4xl font-bold" /> 125 - <span class="text-base-500 dark:text-base-400 accent:text-accent-950 text-xs">days</span 217 + <NumberFlow 218 + value={eventDays} 219 + trend={-1} 220 + class="text-3xl font-bold @xs:text-4xl @sm:text-5xl @md:text-6xl @lg:text-7xl" 221 + /> 222 + <span class="text-base-500 dark:text-base-400 accent:text-accent-950 text-xs" 223 + >{eventDays === 1 ? 'day' : 'days'}</span 126 224 > 127 225 </div> 128 226 {/if} ··· 157 255 </div> 158 256 </div> 159 257 </NumberFlowGroup> 160 - {:else if isEventComplete} 161 - <div 162 - class="text-accent-600 dark:text-accent-400 accent:text-accent-900 text-xl font-bold @xs:text-2xl @sm:text-3xl @md:text-4xl" 163 - > 164 - Event Started! 165 - </div> 166 258 {:else} 167 259 <div class="text-base-500 text-sm">Set a target date in settings</div> 168 260 {/if}
+2
src/lib/cards/index.ts
··· 31 31 import { DrawCardDefinition } from './DrawCard'; 32 32 import { TimerCardDefinition } from './TimerCard'; 33 33 import { SpotifyCardDefinition } from './SpotifyCard'; 34 + import { ButtonCardDefinition } from './ButtonCard'; 34 35 // import { Model3DCardDefinition } from './Model3DCard'; 35 36 36 37 export const AllCardDefinitions = [ 38 + ButtonCardDefinition, 37 39 ImageCardDefinition, 38 40 VideoCardDefinition, 39 41 TextCardDefinition,
+18 -6
src/lib/components/bluesky-post/index.ts
··· 2 2 import type { PostView } from '@atcute/bluesky/types/app/feed/defs'; 3 3 import { segmentize, type Facet, type RichtextSegment } from '@atcute/bluesky-richtext-segmenter'; 4 4 5 + function escapeHtml(str: string): string { 6 + return str 7 + .replace(/&/g, '&amp;') 8 + .replace(/</g, '&lt;') 9 + .replace(/>/g, '&gt;') 10 + .replace(/"/g, '&quot;') 11 + .replace(/'/g, '&#39;'); 12 + } 13 + 5 14 function blueskyEmbedTypeToEmbedType(type: string) { 6 15 switch (type) { 7 16 case 'app.bsky.embed.external#view': ··· 26 35 // const reason = data.reason; 27 36 // const reply = data.reply?.parent; 28 37 // const replyId = reply?.uri?.split('/').pop(); 38 + console.log(JSON.parse(JSON.stringify(data))); 29 39 30 40 const id = post.uri.split('/').pop(); 31 41 ··· 87 97 } as PostEmbed) 88 98 : undefined, 89 99 90 - htmlContent: blueskyPostToHTML(post, baseUrl) 100 + htmlContent: blueskyPostToHTML(post, baseUrl), 101 + labels: post.labels ? post.labels.map((label) => label.val) : undefined 91 102 }; 92 103 } 93 104 ··· 110 121 111 122 const renderSegment = (segment: RichtextSegment, baseUrl: string) => { 112 123 const { text, features } = segment; 124 + const escaped = escapeHtml(text); 113 125 114 126 if (!features) { 115 - return `<span>${text}</span>`; 127 + return `<span>${escaped}</span>`; 116 128 } 117 129 118 130 // segments can have multiple features, use the first one ··· 124 136 125 137 switch (feature.$type) { 126 138 case 'app.bsky.richtext.facet#mention': 127 - return createLink(`${baseUrl}/profile/${feature.did}`, segment.text); 139 + return createLink(`${baseUrl}/profile/${feature.did}`, escaped); 128 140 case 'app.bsky.richtext.facet#link': 129 - return createLink(feature.uri, segment.text); 141 + return createLink(feature.uri, escaped); 130 142 case 'app.bsky.richtext.facet#tag': 131 - return createLink(`${baseUrl}/hashtag/${feature.tag}`, segment.text); 143 + return createLink(`${baseUrl}/hashtag/${feature.tag}`, escaped); 132 144 default: 133 - return `<span>${text}</span>`; 145 + return `<span>${escaped}</span>`; 134 146 } 135 147 }; 136 148
+4 -4
src/lib/components/post/Post.svelte
··· 1 1 <script lang="ts"> 2 2 import Embed from './embeds/Embed.svelte'; 3 + import { sanitize } from '$lib/sanitize'; 3 4 import { cn, Prose } from '@foxui/core'; 4 5 import type { WithChildren, WithElementRef } from 'bits-ui'; 5 6 import type { HTMLAttributes } from 'svelte/elements'; ··· 8 9 import type { Snippet } from 'svelte'; 9 10 import { numberToHumanReadable } from '..'; 10 11 import { RelativeTime } from '@foxui/time'; 12 + import PostEmbed from './PostEmbed.svelte'; 11 13 12 14 let { 13 15 ref = $bindable(), ··· 175 177 class="accent:prose-a:text-accent-950 accent:text-base-900 accent:prose-p:text-base-900 accent:prose-a:underline" 176 178 > 177 179 {#if data.htmlContent} 178 - {@html data.htmlContent} 180 + {@html sanitize(data.htmlContent, { ADD_ATTR: ['target'] })} 179 181 {:else} 180 182 {@render children?.()} 181 183 {/if} 182 184 </Prose> 183 185 184 - {#if data.embed} 185 - <Embed embed={data.embed} /> 186 - {/if} 186 + <PostEmbed {data} /> 187 187 188 188 {#if showReply || showRepost || showLike || showBookmark || customActions} 189 189 <div
+23
src/lib/components/post/PostEmbed.svelte
··· 1 + <script lang="ts"> 2 + import { hasNSFWLabel, type PostData } from '.'; 3 + import Embed from './embeds/Embed.svelte'; 4 + 5 + let { 6 + data 7 + }: { 8 + data: PostData; 9 + } = $props(); 10 + 11 + let showNSFW = $state(false); 12 + </script> 13 + 14 + {#if hasNSFWLabel(data) && !showNSFW} 15 + <button 16 + onclick={() => (showNSFW = true)} 17 + class="border-base-500/20 bg-base-200/50 text-base-600 dark:border-base-400/20 dark:bg-base-800/50 dark:text-base-400 accent:border-accent-900 mt-4 flex h-18 w-full cursor-pointer items-center justify-center rounded-2xl border text-center text-sm" 18 + > 19 + NSFW content, click to show. 20 + </button> 21 + {:else if data.embed} 22 + <Embed embed={data.embed} /> 23 + {/if}
+10
src/lib/components/post/index.ts
··· 70 70 htmlContent?: string; 71 71 72 72 replies?: PostData[]; 73 + 74 + labels?: string[]; 73 75 }; 76 + 77 + export const nsfwLabels = ['porn', 'sexual', 'graphic-media', 'nudity']; 78 + 79 + export function hasNSFWLabel(post: PostData): boolean { 80 + if (!post.labels) return false; 81 + 82 + return post.labels.some((label) => nsfwLabels.includes(label)); 83 + } 74 84 75 85 export { default as Post } from './Post.svelte';
+30
src/lib/sanitize.ts
··· 1 + import { browser } from '$app/environment'; 2 + 3 + // Lightweight regex-based sanitizer for SSR in Cloudflare Workers 4 + // where DOMPurify is not available. Strips common XSS vectors. 5 + function regexSanitize(html: string): string { 6 + return html 7 + .replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script\s*>/gi, '') 8 + .replace(/<iframe\b[^<]*(?:(?!<\/iframe>)<[^<]*)*<\/iframe\s*>/gi, '') 9 + .replace(/<object\b[^<]*(?:(?!<\/object>)<[^<]*)*<\/object\s*>/gi, '') 10 + .replace(/<embed\b[^>]*\/?>/gi, '') 11 + .replace(/<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style\s*>/gi, '') 12 + .replace(/\s+on\w+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi, '') 13 + .replace(/href\s*=\s*["']?\s*javascript\s*:/gi, 'href="') 14 + .replace(/src\s*=\s*["']?\s*javascript\s*:/gi, 'src="'); 15 + } 16 + 17 + let _purify: ((html: string, config?: { ADD_ATTR?: string[] }) => string) | null = null; 18 + 19 + if (browser) { 20 + import('dompurify').then((mod) => { 21 + _purify = (html, config) => mod.default.sanitize(html, config) as string; 22 + }); 23 + } 24 + 25 + export function sanitize(dirty: string, config?: { ADD_ATTR?: string[] }): string { 26 + if (_purify) { 27 + return _purify(dirty, config); 28 + } 29 + return regexSanitize(dirty); 30 + }
+8 -4
src/lib/website/Profile.svelte
··· 1 1 <script lang="ts"> 2 2 import { marked } from 'marked'; 3 + import { sanitize } from '$lib/sanitize'; 3 4 import type { WebsiteData } from '$lib/types'; 4 5 import { getDescription, getImage, getName, getProfilePosition } from '$lib/helper'; 5 6 import { page } from '$app/state'; ··· 17 18 18 19 const renderer = new marked.Renderer(); 19 20 renderer.link = ({ href, title, text }) => 20 - `<a target="_blank" href="${href}" title="${title}">${text}</a>`; 21 + `<a target="_blank" href="${href}" title="${title ?? ''}">${text}</a>`; 21 22 22 23 const profileUrl = $derived(`${page.url.origin}/${data.handle}`); 23 24 const profilePosition = $derived(getProfilePosition(data)); ··· 64 65 <div 65 66 class="text-base-600 dark:text-base-400 prose dark:prose-invert prose-a:text-accent-500 prose-a:no-underline" 66 67 > 67 - {@html marked.parse(getDescription(data), { 68 - renderer 69 - })} 68 + {@html sanitize( 69 + marked.parse(getDescription(data), { 70 + renderer 71 + }) as string, 72 + { ADD_ATTR: ['target'] } 73 + )} 70 74 </div> 71 75 </div> 72 76
+3 -1
src/lib/website/ThemeScript.svelte
··· 7 7 baseColor?: string; 8 8 } = $props(); 9 9 10 + const safeJson = (v: string) => JSON.stringify(v).replace(/</g, '\\u003c'); 11 + 10 12 let script = $derived( 11 - `<script>(function(){document.documentElement.classList.add(${JSON.stringify(accentColor)},${JSON.stringify(baseColor)});})();<` + 13 + `<script>(function(){document.documentElement.classList.add(${safeJson(accentColor)},${safeJson(baseColor)});})();<` + 12 14 '/script>' 13 15 ); 14 16 </script>
+11 -2
src/routes/[handle=handle]/og.png/+server.ts
··· 3 3 import type { Handle } from '@atcute/lexicons'; 4 4 import { ImageResponse } from '@ethercorps/sveltekit-og'; 5 5 6 + function escapeHtml(str: string): string { 7 + return str 8 + .replace(/&/g, '&amp;') 9 + .replace(/</g, '&lt;') 10 + .replace(/>/g, '&gt;') 11 + .replace(/"/g, '&quot;') 12 + .replace(/'/g, '&#39;'); 13 + } 14 + 6 15 export async function GET({ params, platform }) { 7 16 const handle = params.handle; 8 17 ··· 15 24 const htmlString = ` 16 25 <div class="flex flex-col p-8 w-full h-full bg-neutral-900"> 17 26 <div class="flex items-center mb-8 mt-16"> 18 - <img src="${image}" width="128" height="128" class="rounded-full" /> 27 + <img src="${escapeHtml(image ?? '')}" width="128" height="128" class="rounded-full" /> 19 28 20 - <h1 class="text-neutral-50 text-7xl ml-4">${handle}</h1> 29 + <h1 class="text-neutral-50 text-7xl ml-4">${escapeHtml(handle)}</h1> 21 30 </div> 22 31 23 32 <p class="mt-8 text-4xl text-neutral-300">Check out my blento</p>
static/favicon.ico

This is a binary file and will not be displayed.