atmosphere explorer pds.ls
tool typescript atproto
434
fork

Configure Feed

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

blob debug view

Juliet 440d035f 8f219789

+741 -407
+12 -12
package.json
··· 11 11 "serve": "vite preview" 12 12 }, 13 13 "devDependencies": { 14 - "@iconify-json/lucide": "^1.2.102", 14 + "@iconify-json/lucide": "^1.2.104", 15 15 "@iconify/tailwind4": "^1.2.3", 16 - "@tailwindcss/vite": "^4.2.2", 16 + "@tailwindcss/vite": "^4.2.4", 17 17 "esbuild": "^0.28.0", 18 - "prettier": "^3.8.2", 18 + "prettier": "^3.8.3", 19 19 "prettier-plugin-organize-imports": "^4.3.0", 20 - "prettier-plugin-tailwindcss": "^0.7.2", 21 - "tailwindcss": "^4.2.2", 22 - "typescript": "^6.0.2", 23 - "vite": "^8.0.8", 20 + "prettier-plugin-tailwindcss": "^0.7.4", 21 + "tailwindcss": "^4.2.4", 22 + "typescript": "^6.0.3", 23 + "vite": "^8.0.10", 24 24 "vite-plugin-solid": "^2.11.12" 25 25 }, 26 26 "dependencies": { 27 27 "@atcute/atproto": "^3.1.11", 28 - "@atcute/bluesky": "^3.3.2", 28 + "@atcute/bluesky": "^3.3.3", 29 29 "@atcute/car": "^5.1.1", 30 30 "@atcute/cbor": "^2.3.2", 31 31 "@atcute/cid": "^2.4.1", ··· 45 45 "@codemirror/lang-json": "^6.0.2", 46 46 "@codemirror/lint": "^6.9.5", 47 47 "@codemirror/state": "^6.6.0", 48 - "@codemirror/view": "^6.41.0", 48 + "@codemirror/view": "^6.41.1", 49 49 "@fsegurai/codemirror-theme-basic-dark": "^6.2.5", 50 50 "@fsegurai/codemirror-theme-basic-light": "^6.2.5", 51 51 "@mary/exif-rm": "jsr:^0.2.2", 52 52 "@mary/zip": "jsr:^0.1.1", 53 53 "@skyware/firehose": "^0.5.2", 54 54 "@solidjs/router": "^0.16.1", 55 - "@takumi-rs/image-response": "^1.0.9", 56 - "@takumi-rs/wasm": "^1.0.9", 57 - "@tanstack/solid-virtual": "^3.13.23", 55 + "@takumi-rs/image-response": "^1.1.2", 56 + "@takumi-rs/wasm": "^1.1.2", 57 + "@tanstack/solid-virtual": "^3.13.24", 58 58 "codemirror": "^6.0.2", 59 59 "solid-js": "^1.9.12" 60 60 },
+349 -346
pnpm-lock.yaml
··· 12 12 specifier: ^3.1.11 13 13 version: 3.1.11 14 14 '@atcute/bluesky': 15 - specifier: ^3.3.2 16 - version: 3.3.2 15 + specifier: ^3.3.3 16 + version: 3.3.3 17 17 '@atcute/car': 18 18 specifier: ^5.1.1 19 19 version: 5.1.1 ··· 72 72 specifier: ^6.6.0 73 73 version: 6.6.0 74 74 '@codemirror/view': 75 - specifier: ^6.41.0 76 - version: 6.41.0 75 + specifier: ^6.41.1 76 + version: 6.41.1 77 77 '@fsegurai/codemirror-theme-basic-dark': 78 78 specifier: ^6.2.5 79 - version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3) 79 + version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1)(@lezer/highlight@1.2.3) 80 80 '@fsegurai/codemirror-theme-basic-light': 81 81 specifier: ^6.2.5 82 - version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3) 82 + version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1)(@lezer/highlight@1.2.3) 83 83 '@mary/exif-rm': 84 84 specifier: jsr:^0.2.2 85 85 version: '@jsr/mary__exif-rm@0.2.2' ··· 93 93 specifier: ^0.16.1 94 94 version: 0.16.1(solid-js@1.9.12) 95 95 '@takumi-rs/image-response': 96 - specifier: ^1.0.9 97 - version: 1.0.9(react@19.2.5) 96 + specifier: ^1.1.2 97 + version: 1.1.2(react@19.2.5) 98 98 '@takumi-rs/wasm': 99 - specifier: ^1.0.9 100 - version: 1.0.9(react@19.2.5) 99 + specifier: ^1.1.2 100 + version: 1.1.2(react@19.2.5) 101 101 '@tanstack/solid-virtual': 102 - specifier: ^3.13.23 103 - version: 3.13.23(solid-js@1.9.12) 102 + specifier: ^3.13.24 103 + version: 3.13.24(solid-js@1.9.12) 104 104 codemirror: 105 105 specifier: ^6.0.2 106 106 version: 6.0.2 ··· 109 109 version: 1.9.12 110 110 devDependencies: 111 111 '@iconify-json/lucide': 112 - specifier: ^1.2.102 113 - version: 1.2.102 112 + specifier: ^1.2.104 113 + version: 1.2.104 114 114 '@iconify/tailwind4': 115 115 specifier: ^1.2.3 116 - version: 1.2.3(tailwindcss@4.2.2) 116 + version: 1.2.3(tailwindcss@4.2.4) 117 117 '@tailwindcss/vite': 118 - specifier: ^4.2.2 119 - version: 4.2.2(vite@8.0.8(@types/node@25.3.4)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.19.2)) 118 + specifier: ^4.2.4 119 + version: 4.2.4(vite@8.0.10(@types/node@25.3.4)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.19.2)) 120 120 esbuild: 121 121 specifier: ^0.28.0 122 122 version: 0.28.0 123 123 prettier: 124 - specifier: ^3.8.2 125 - version: 3.8.2 124 + specifier: ^3.8.3 125 + version: 3.8.3 126 126 prettier-plugin-organize-imports: 127 127 specifier: ^4.3.0 128 - version: 4.3.0(prettier@3.8.2)(typescript@6.0.2) 128 + version: 4.3.0(prettier@3.8.3)(typescript@6.0.3) 129 129 prettier-plugin-tailwindcss: 130 - specifier: ^0.7.2 131 - version: 0.7.2(prettier-plugin-organize-imports@4.3.0(prettier@3.8.2)(typescript@6.0.2))(prettier@3.8.2) 130 + specifier: ^0.7.4 131 + version: 0.7.4(prettier-plugin-organize-imports@4.3.0(prettier@3.8.3)(typescript@6.0.3))(prettier@3.8.3) 132 132 tailwindcss: 133 - specifier: ^4.2.2 134 - version: 4.2.2 133 + specifier: ^4.2.4 134 + version: 4.2.4 135 135 typescript: 136 - specifier: ^6.0.2 137 - version: 6.0.2 136 + specifier: ^6.0.3 137 + version: 6.0.3 138 138 vite: 139 - specifier: ^8.0.8 140 - version: 8.0.8(@types/node@25.3.4)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.19.2) 139 + specifier: ^8.0.10 140 + version: 8.0.10(@types/node@25.3.4)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.19.2) 141 141 vite-plugin-solid: 142 142 specifier: ^2.11.12 143 - version: 2.11.12(solid-js@1.9.12)(vite@8.0.8(@types/node@25.3.4)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.19.2)) 143 + version: 2.11.12(solid-js@1.9.12)(vite@8.0.10(@types/node@25.3.4)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.19.2)) 144 144 145 145 packages: 146 146 ··· 150 150 '@atcute/atproto@3.1.11': 151 151 resolution: {integrity: sha512-yh+ASvA+iHHQij6UeHEKp2+rwvFvQR8A6/5Dk/xvqDslIikWEFx9VlprNwm/clQIPl2bLuQg+LHS8uY9o5nFTA==} 152 152 153 - '@atcute/bluesky@3.3.2': 154 - resolution: {integrity: sha512-BqVXghoNFbBm38hveWqPQQ25VZxHXmqYk5h0NG8YFiwNLrI8Ww1nXHAJzS65zyHwV5QeSA6EDFaTrQwm+7cCFQ==} 153 + '@atcute/bluesky@3.3.3': 154 + resolution: {integrity: sha512-R1VyEmbvIUhub6ONnt7sm6FcRoKJISWf+I0qraXtk59KLmNCsJYMX8fLdIcdv5o1i9XtDg8/Um/wqLrl84IuFg==} 155 155 156 156 '@atcute/car@3.1.3': 157 157 resolution: {integrity: sha512-WJ13bAEt7TjDMVi09ubjLtvhdljbWInGm9Kfy7Y6NhrmiyC/aZYaA/zHX/bHI6xv1c/h3SQduWqxOr4ae49eqA==} ··· 227 227 '@atcute/util-fetch@1.0.5': 228 228 resolution: {integrity: sha512-qjHj01BGxjSjIFdPiAjSARnodJIIyKxnCMMEcXMESo9TAyND6XZQqrie5fia+LlYWVXdpsTds8uFQwc9jdKTig==} 229 229 230 - '@atcute/util-text@1.2.0': 231 - resolution: {integrity: sha512-b8WSh+Z7K601eUFFmTFj8QPKDO8Ic0VDDj63sdKzpkm+ySQKsYT5nXekViGqFVKbyKj1V5FyvZvgXad6/aI4QQ==} 230 + '@atcute/util-text@1.3.1': 231 + resolution: {integrity: sha512-MRgJXkx67znuBXuoAYCJkBZyd3OApL7zZlNf5kXhuoCXcdiu1nblRDycYTADSkym4epBSQWxh26kmI9sewaq6A==} 232 232 233 233 '@atcute/varint@1.0.4': 234 234 resolution: {integrity: sha512-0nGBaRyJLoxVvCHTSLGwPZKs64PPi/0lDA4viF3I5zxsRmVPsXaE92J8VQj3KoZfk0+Z+liXklG1Onw7G9S4oQ==} ··· 336 336 '@codemirror/lint@6.9.5': 337 337 resolution: {integrity: sha512-GElsbU9G7QT9xXhpUg1zWGmftA/7jamh+7+ydKRuT0ORpWS3wOSP0yT1FOlIZa7mIJjpVPipErsyvVqB9cfTFA==} 338 338 339 - '@codemirror/search@6.6.0': 340 - resolution: {integrity: sha512-koFuNXcDvyyotWcgOnZGmY7LZqEOXZaaxD/j6n18TCLx2/9HieZJ5H6hs1g8FiRxBD0DNfs0nXn17g872RmYdw==} 339 + '@codemirror/search@6.7.0': 340 + resolution: {integrity: sha512-ZvGm99wc/s2cITtMT15LFdn8aH/aS+V+DqyGq/N5ZlV5vWtH+nILvC2nw0zX7ByNoHHDZ2IxxdW38O0tc5nVHg==} 341 341 342 342 '@codemirror/state@6.6.0': 343 343 resolution: {integrity: sha512-4nbvra5R5EtiCzr9BTHiTLc+MLXK2QGiAVYMyi8PkQd3SR+6ixar/Q/01Fa21TBIDOZXgeWV4WppsQolSreAPQ==} 344 344 345 - '@codemirror/view@6.41.0': 346 - resolution: {integrity: sha512-6H/qadXsVuDY219Yljhohglve8xf4B8xJkVOEWfA5uiYKiTFppjqsvsfR5iPA0RbvRBoOyTZpbLIxe9+0UR8xA==} 345 + '@codemirror/view@6.41.1': 346 + resolution: {integrity: sha512-ToDnWKbBnke+ZLrP6vgTTDScGi5H37YYuZGniQaBzxMVdtCxMrslsmtnOvbPZk4RX9bvkQqnWR/WS/35tJA0qg==} 347 347 348 - '@cyberalien/svg-utils@1.2.9': 349 - resolution: {integrity: sha512-bd5I3TQ2k/xqcNB6P6GpFKeid3OgqgGSRz704+XHoGNBAsI7wwYKS6nuxAn26ciUtRjGKovfEy66ryEY9UGUwQ==} 348 + '@cyberalien/svg-utils@1.2.13': 349 + resolution: {integrity: sha512-/fEcy0VRnG/7Znmjx6ib4wSbb/ILRmEV6t4b1adFZyTHw64+K+DEAoWp8wKHUV0QmbZ18RFf9VeQtvQm83Fnyg==} 350 350 351 - '@emnapi/core@1.9.2': 352 - resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} 351 + '@emnapi/core@1.10.0': 352 + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} 353 353 354 - '@emnapi/runtime@1.9.2': 355 - resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} 354 + '@emnapi/runtime@1.10.0': 355 + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} 356 356 357 357 '@emnapi/wasi-threads@1.2.1': 358 358 resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} ··· 673 673 '@codemirror/view': ^6.0.0 674 674 '@lezer/highlight': ^1.0.0 675 675 676 - '@iconify-json/lucide@1.2.102': 677 - resolution: {integrity: sha512-Dm3EEqu5NrmzyDMB2U1+8yroEj2/dB9V4KlH0m/szwwF/ofSf0cPaGTZqkd1aExXjCor+vU53ttRMCGuXf+/cg==} 676 + '@iconify-json/lucide@1.2.104': 677 + resolution: {integrity: sha512-Vh4VPA/UNFhSPzEdDnSuOPA1xO6b/kI1w4SLBEiKnsFYPWimq2tVDynMgKnwddz6iZpuZfZU4PXR6kn0hJayKw==} 678 678 679 679 '@iconify/tailwind4@1.2.3': 680 680 resolution: {integrity: sha512-z8SKiMHRASJKF/IY//87MF88lcB7ulxh8vlhQXXLWsBkNtOh6ese9R41MyGpQeqXdRvQVt+/fX2glQtHFjQ+MA==} ··· 687 687 '@iconify/types@2.0.0': 688 688 resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} 689 689 690 - '@iconify/utils@3.1.0': 691 - resolution: {integrity: sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw==} 690 + '@iconify/utils@3.1.1': 691 + resolution: {integrity: sha512-MwzoDtw9rO1x+qfgLTV/IVXsHDBqeYZoMIQC8SfxfYSlaSUG+oWiAcoiB1yajAda6mqblm4/1/w2E8tRu7a7Tw==} 692 692 693 693 '@jridgewell/gen-mapping@0.3.13': 694 694 resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} ··· 733 733 '@lezer/json@1.0.3': 734 734 resolution: {integrity: sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==} 735 735 736 - '@lezer/lr@1.4.8': 737 - resolution: {integrity: sha512-bPWa0Pgx69ylNlMlPvBPryqeLYQjyJjqPx+Aupm5zydLIF3NE+6MMLT8Yi23Bd9cif9VS00aUebn+6fDIGBcDA==} 736 + '@lezer/lr@1.4.10': 737 + resolution: {integrity: sha512-rnCpTIBafOx4mRp43xOxDJbFipJm/c0cia/V5TiGlhmMa+wsSdoGmUN3w5Bqrks/09Q/D4tNAmWaT8p6NRi77A==} 738 738 739 739 '@marijn/find-cluster-break@1.0.2': 740 740 resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==} 741 741 742 - '@napi-rs/wasm-runtime@1.1.3': 743 - resolution: {integrity: sha512-xK9sGVbJWYb08+mTJt3/YV24WxvxpXcXtP6B172paPZ+Ts69Re9dAr7lKwJoeIx8OoeuimEiRZ7umkiUVClmmQ==} 742 + '@napi-rs/wasm-runtime@1.1.4': 743 + resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} 744 744 peerDependencies: 745 745 '@emnapi/core': ^1.7.1 746 746 '@emnapi/runtime': ^1.7.1 ··· 748 748 '@noble/secp256k1@3.1.0': 749 749 resolution: {integrity: sha512-+F7iS7tUMaNGXcc9X3PjmjvuQnXEuSjCRNzVVA2xAcKXgCaP0dHYz4SFyt4FKNHef7sOP//xihowcySSS7PK9g==} 750 750 751 - '@oxc-project/types@0.124.0': 752 - resolution: {integrity: sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==} 751 + '@oxc-project/types@0.127.0': 752 + resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==} 753 753 754 - '@rolldown/binding-android-arm64@1.0.0-rc.15': 755 - resolution: {integrity: sha512-YYe6aWruPZDtHNpwu7+qAHEMbQ/yRl6atqb/AhznLTnD3UY99Q1jE7ihLSahNWkF4EqRPVC4SiR4O0UkLK02tA==} 754 + '@rolldown/binding-android-arm64@1.0.0-rc.17': 755 + resolution: {integrity: sha512-s70pVGhw4zqGeFnXWvAzJDlvxhlRollagdCCKRgOsgUOH3N1l0LIxf83AtGzmb5SiVM4Hjl5HyarMRfdfj3DaQ==} 756 756 engines: {node: ^20.19.0 || >=22.12.0} 757 757 cpu: [arm64] 758 758 os: [android] 759 759 760 - '@rolldown/binding-darwin-arm64@1.0.0-rc.15': 761 - resolution: {integrity: sha512-oArR/ig8wNTPYsXL+Mzhs0oxhxfuHRfG7Ikw7jXsw8mYOtk71W0OkF2VEVh699pdmzjPQsTjlD1JIOoHkLP1Fg==} 760 + '@rolldown/binding-darwin-arm64@1.0.0-rc.17': 761 + resolution: {integrity: sha512-4ksWc9n0mhlZpZ9PMZgTGjeOPRu8MB1Z3Tz0Mo02eWfWCHMW1zN82Qz/pL/rC+yQa+8ZnutMF0JjJe7PjwasYw==} 762 762 engines: {node: ^20.19.0 || >=22.12.0} 763 763 cpu: [arm64] 764 764 os: [darwin] 765 765 766 - '@rolldown/binding-darwin-x64@1.0.0-rc.15': 767 - resolution: {integrity: sha512-YzeVqOqjPYvUbJSWJ4EDL8ahbmsIXQpgL3JVipmN+MX0XnXMeWomLN3Fb+nwCmP/jfyqte5I3XRSm7OfQrbyxw==} 766 + '@rolldown/binding-darwin-x64@1.0.0-rc.17': 767 + resolution: {integrity: sha512-SUSDOI6WwUVNcWxd02QEBjLdY1VPHvlEkw6T/8nYG322iYWCTxRb1vzk4E+mWWYehTp7ERibq54LSJGjmouOsw==} 768 768 engines: {node: ^20.19.0 || >=22.12.0} 769 769 cpu: [x64] 770 770 os: [darwin] 771 771 772 - '@rolldown/binding-freebsd-x64@1.0.0-rc.15': 773 - resolution: {integrity: sha512-9Erhx956jeQ0nNTyif1+QWAXDRD38ZNjr//bSHrt6wDwB+QkAfl2q6Mn1k6OBPerznjRmbM10lgRb1Pli4xZPw==} 772 + '@rolldown/binding-freebsd-x64@1.0.0-rc.17': 773 + resolution: {integrity: sha512-hwnz3nw9dbJ05EDO/PvcjaaewqqDy7Y1rn1UO81l8iIK1GjenME75dl16ajbvSSMfv66WXSRCYKIqfgq2KCfxw==} 774 774 engines: {node: ^20.19.0 || >=22.12.0} 775 775 cpu: [x64] 776 776 os: [freebsd] 777 777 778 - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15': 779 - resolution: {integrity: sha512-cVwk0w8QbZJGTnP/AHQBs5yNwmpgGYStL88t4UIaqcvYJWBfS0s3oqVLZPwsPU6M0zlW4GqjP0Zq5MnAGwFeGA==} 778 + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17': 779 + resolution: {integrity: sha512-IS+W7epTcwANmFSQFrS1SivEXHtl1JtuQA9wlxrZTcNi6mx+FDOYrakGevvvTwgj2JvWiK8B29/qD9BELZPyXQ==} 780 780 engines: {node: ^20.19.0 || >=22.12.0} 781 781 cpu: [arm] 782 782 os: [linux] 783 783 784 - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15': 785 - resolution: {integrity: sha512-eBZ/u8iAK9SoHGanqe/jrPnY0JvBN6iXbVOsbO38mbz+ZJsaobExAm1Iu+rxa4S1l2FjG0qEZn4Rc6X8n+9M+w==} 784 + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17': 785 + resolution: {integrity: sha512-e6usGaHKW5BMNZOymS1UcEYGowQMWcgZ71Z17Sl/h2+ZziNJ1a9n3Zvcz6LdRyIW5572wBCTH/Z+bKuZouGk9Q==} 786 786 engines: {node: ^20.19.0 || >=22.12.0} 787 787 cpu: [arm64] 788 788 os: [linux] 789 789 libc: [glibc] 790 790 791 - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15': 792 - resolution: {integrity: sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ==} 791 + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17': 792 + resolution: {integrity: sha512-b/CgbwAJpmrRLp02RPfhbudf5tZnN9nsPWK82znefso832etkem8H7FSZwxrOI9djcdTP7U6YfNhbRnh7djErg==} 793 793 engines: {node: ^20.19.0 || >=22.12.0} 794 794 cpu: [arm64] 795 795 os: [linux] 796 796 libc: [musl] 797 797 798 - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15': 799 - resolution: {integrity: sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ==} 798 + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17': 799 + resolution: {integrity: sha512-4EII1iNGRUN5WwGbF/kOh/EIkoDN9HsupgLQoXfY+D1oyJm7/F4t5PYU5n8SWZgG0FEwakyM8pGgwcBYruGTlA==} 800 800 engines: {node: ^20.19.0 || >=22.12.0} 801 801 cpu: [ppc64] 802 802 os: [linux] 803 803 libc: [glibc] 804 804 805 - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15': 806 - resolution: {integrity: sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ==} 805 + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17': 806 + resolution: {integrity: sha512-AH8oq3XqQo4IibpVXvPeLDI5pzkpYn0WiZAfT05kFzoJ6tQNzwRdDYQ45M8I/gslbodRZwW8uxLhbSBbkv96rA==} 807 807 engines: {node: ^20.19.0 || >=22.12.0} 808 808 cpu: [s390x] 809 809 os: [linux] 810 810 libc: [glibc] 811 811 812 - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15': 813 - resolution: {integrity: sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA==} 812 + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17': 813 + resolution: {integrity: sha512-cLnjV3xfo7KslbU41Z7z8BH/E1y5mzUYzAqih1d1MDaIGZRCMqTijqLv76/P7fyHuvUcfGsIpqCdddbxLLK9rA==} 814 814 engines: {node: ^20.19.0 || >=22.12.0} 815 815 cpu: [x64] 816 816 os: [linux] 817 817 libc: [glibc] 818 818 819 - '@rolldown/binding-linux-x64-musl@1.0.0-rc.15': 820 - resolution: {integrity: sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw==} 819 + '@rolldown/binding-linux-x64-musl@1.0.0-rc.17': 820 + resolution: {integrity: sha512-0phclDw1spsL7dUB37sIARuis2tAgomCJXAHZlpt8PXZ4Ba0dRP1e+66lsRqrfhISeN9bEGNjQs+T/Fbd7oYGw==} 821 821 engines: {node: ^20.19.0 || >=22.12.0} 822 822 cpu: [x64] 823 823 os: [linux] 824 824 libc: [musl] 825 825 826 - '@rolldown/binding-openharmony-arm64@1.0.0-rc.15': 827 - resolution: {integrity: sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg==} 826 + '@rolldown/binding-openharmony-arm64@1.0.0-rc.17': 827 + resolution: {integrity: sha512-0ag/hEgXOwgw4t8QyQvUCxvEg+V0KBcA6YuOx9g0r02MprutRF5dyljgm3EmR02O292UX7UeS6HzWHAl6KgyhA==} 828 828 engines: {node: ^20.19.0 || >=22.12.0} 829 829 cpu: [arm64] 830 830 os: [openharmony] 831 831 832 - '@rolldown/binding-wasm32-wasi@1.0.0-rc.15': 833 - resolution: {integrity: sha512-ApLruZq/ig+nhaE7OJm4lDjayUnOHVUa77zGeqnqZ9pn0ovdVbbNPerVibLXDmWeUZXjIYIT8V3xkT58Rm9u5Q==} 834 - engines: {node: '>=14.0.0'} 832 + '@rolldown/binding-wasm32-wasi@1.0.0-rc.17': 833 + resolution: {integrity: sha512-LEXei6vo0E5wTGwpkJ4KoT3OZJRnglwldt5ziLzOlc6qqb55z4tWNq2A+PFqCJuvWWdP53CVhG1Z9NtToDPJrA==} 834 + engines: {node: ^20.19.0 || >=22.12.0} 835 835 cpu: [wasm32] 836 836 837 - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15': 838 - resolution: {integrity: sha512-KmoUoU7HnN+Si5YWJigfTws1jz1bKBYDQKdbLspz0UaqjjFkddHsqorgiW1mxcAj88lYUE6NC/zJNwT+SloqtA==} 837 + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17': 838 + resolution: {integrity: sha512-gUmyzBl3SPMa6hrqFUth9sVfcLBlYsbMzBx5PlexMroZStgzGqlZ26pYG89rBb45Mnia+oil6YAIFeEWGWhoZA==} 839 839 engines: {node: ^20.19.0 || >=22.12.0} 840 840 cpu: [arm64] 841 841 os: [win32] 842 842 843 - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15': 844 - resolution: {integrity: sha512-3P2A8L+x75qavWLe/Dll3EYBJLQmtkJN8rfh+U/eR3MqMgL/h98PhYI+JFfXuDPgPeCB7iZAKiqii5vqOvnA0g==} 843 + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17': 844 + resolution: {integrity: sha512-3hkiolcUAvPB9FLb3UZdfjVVNWherN1f/skkGWJP/fgSQhYUZpSIRr0/I8ZK9TkF3F7kxvJAk0+IcKvPHk9qQg==} 845 845 engines: {node: ^20.19.0 || >=22.12.0} 846 846 cpu: [x64] 847 847 os: [win32] 848 848 849 - '@rolldown/pluginutils@1.0.0-rc.15': 850 - resolution: {integrity: sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g==} 849 + '@rolldown/pluginutils@1.0.0-rc.17': 850 + resolution: {integrity: sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==} 851 851 852 852 '@skyware/firehose@0.5.2': 853 853 resolution: {integrity: sha512-Ayg/cF0BkakBNQVA51ClDka0+nC96WiARNrGElMQxfqbwao0PBaCXkunfr8qS4DWS3TqLnR6hA9mvm1vAYlxJQ==} ··· 860 860 '@standard-schema/spec@1.1.0': 861 861 resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} 862 862 863 - '@tailwindcss/node@4.2.2': 864 - resolution: {integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==} 863 + '@tailwindcss/node@4.2.4': 864 + resolution: {integrity: sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA==} 865 865 866 - '@tailwindcss/oxide-android-arm64@4.2.2': 867 - resolution: {integrity: sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==} 866 + '@tailwindcss/oxide-android-arm64@4.2.4': 867 + resolution: {integrity: sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g==} 868 868 engines: {node: '>= 20'} 869 869 cpu: [arm64] 870 870 os: [android] 871 871 872 - '@tailwindcss/oxide-darwin-arm64@4.2.2': 873 - resolution: {integrity: sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==} 872 + '@tailwindcss/oxide-darwin-arm64@4.2.4': 873 + resolution: {integrity: sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg==} 874 874 engines: {node: '>= 20'} 875 875 cpu: [arm64] 876 876 os: [darwin] 877 877 878 - '@tailwindcss/oxide-darwin-x64@4.2.2': 879 - resolution: {integrity: sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==} 878 + '@tailwindcss/oxide-darwin-x64@4.2.4': 879 + resolution: {integrity: sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg==} 880 880 engines: {node: '>= 20'} 881 881 cpu: [x64] 882 882 os: [darwin] 883 883 884 - '@tailwindcss/oxide-freebsd-x64@4.2.2': 885 - resolution: {integrity: sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==} 884 + '@tailwindcss/oxide-freebsd-x64@4.2.4': 885 + resolution: {integrity: sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw==} 886 886 engines: {node: '>= 20'} 887 887 cpu: [x64] 888 888 os: [freebsd] 889 889 890 - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2': 891 - resolution: {integrity: sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==} 890 + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.4': 891 + resolution: {integrity: sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA==} 892 892 engines: {node: '>= 20'} 893 893 cpu: [arm] 894 894 os: [linux] 895 895 896 - '@tailwindcss/oxide-linux-arm64-gnu@4.2.2': 897 - resolution: {integrity: sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==} 896 + '@tailwindcss/oxide-linux-arm64-gnu@4.2.4': 897 + resolution: {integrity: sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw==} 898 898 engines: {node: '>= 20'} 899 899 cpu: [arm64] 900 900 os: [linux] 901 901 libc: [glibc] 902 902 903 - '@tailwindcss/oxide-linux-arm64-musl@4.2.2': 904 - resolution: {integrity: sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==} 903 + '@tailwindcss/oxide-linux-arm64-musl@4.2.4': 904 + resolution: {integrity: sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g==} 905 905 engines: {node: '>= 20'} 906 906 cpu: [arm64] 907 907 os: [linux] 908 908 libc: [musl] 909 909 910 - '@tailwindcss/oxide-linux-x64-gnu@4.2.2': 911 - resolution: {integrity: sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==} 910 + '@tailwindcss/oxide-linux-x64-gnu@4.2.4': 911 + resolution: {integrity: sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA==} 912 912 engines: {node: '>= 20'} 913 913 cpu: [x64] 914 914 os: [linux] 915 915 libc: [glibc] 916 916 917 - '@tailwindcss/oxide-linux-x64-musl@4.2.2': 918 - resolution: {integrity: sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==} 917 + '@tailwindcss/oxide-linux-x64-musl@4.2.4': 918 + resolution: {integrity: sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA==} 919 919 engines: {node: '>= 20'} 920 920 cpu: [x64] 921 921 os: [linux] 922 922 libc: [musl] 923 923 924 - '@tailwindcss/oxide-wasm32-wasi@4.2.2': 925 - resolution: {integrity: sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==} 924 + '@tailwindcss/oxide-wasm32-wasi@4.2.4': 925 + resolution: {integrity: sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw==} 926 926 engines: {node: '>=14.0.0'} 927 927 cpu: [wasm32] 928 928 bundledDependencies: ··· 933 933 - '@emnapi/wasi-threads' 934 934 - tslib 935 935 936 - '@tailwindcss/oxide-win32-arm64-msvc@4.2.2': 937 - resolution: {integrity: sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==} 936 + '@tailwindcss/oxide-win32-arm64-msvc@4.2.4': 937 + resolution: {integrity: sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ==} 938 938 engines: {node: '>= 20'} 939 939 cpu: [arm64] 940 940 os: [win32] 941 941 942 - '@tailwindcss/oxide-win32-x64-msvc@4.2.2': 943 - resolution: {integrity: sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==} 942 + '@tailwindcss/oxide-win32-x64-msvc@4.2.4': 943 + resolution: {integrity: sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw==} 944 944 engines: {node: '>= 20'} 945 945 cpu: [x64] 946 946 os: [win32] 947 947 948 - '@tailwindcss/oxide@4.2.2': 949 - resolution: {integrity: sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==} 948 + '@tailwindcss/oxide@4.2.4': 949 + resolution: {integrity: sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q==} 950 950 engines: {node: '>= 20'} 951 951 952 - '@tailwindcss/vite@4.2.2': 953 - resolution: {integrity: sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==} 952 + '@tailwindcss/vite@4.2.4': 953 + resolution: {integrity: sha512-pCvohwOCspk3ZFn6eJzrrX3g4n2JY73H6MmYC87XfGPyTty4YsCjYTMArRZm/zOI8dIt3+EcrLHAFPe5A4bgtw==} 954 954 peerDependencies: 955 955 vite: ^5.2.0 || ^6 || ^7 || ^8 956 956 957 - '@takumi-rs/core-darwin-arm64@1.0.9': 958 - resolution: {integrity: sha512-yOzafcUfoHx2+iR9zhN1TaqweD2Mf14me20qqrDFxtDA2LgJjiv8S7IubXhG4E0As0fDns8iM5NMcq7liVqeQQ==} 957 + '@takumi-rs/core-darwin-arm64@1.1.2': 958 + resolution: {integrity: sha512-CLPzikYAND2xFm0Lg5HKImCOnl+Sue4F/WIcm1Z2ykL7h2r9rWDBzcFqGhAEFj9onMJH6c60Mph8kDa1jdj2rQ==} 959 959 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 960 960 cpu: [arm64] 961 961 os: [darwin] 962 962 963 - '@takumi-rs/core-darwin-x64@1.0.9': 964 - resolution: {integrity: sha512-cgs2b2BmNe+wH73p8vqL2S0XBTv5s/L1YTQZ/vGQrbwIzgSmz4bq/Y4I0nLsiBF2lExUQMedhrixplvjThuhow==} 963 + '@takumi-rs/core-darwin-x64@1.1.2': 964 + resolution: {integrity: sha512-eH351x+BJOMdLQgUoVKEIfTQbBjR6Dv7rzTLZUdWwbbwjEe38geCNsxQunHQ96nsB7M+0sGc8aJjOkd+0qoK3g==} 965 965 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 966 966 cpu: [x64] 967 967 os: [darwin] 968 968 969 - '@takumi-rs/core-linux-arm64-gnu@1.0.9': 970 - resolution: {integrity: sha512-v1pgv+a9pY8CKeROx7wUshvTr9JDqx6rbXrkvWCUw7u/5VGsLHcJwoxPMTbcyx36Fc0fKxxuXOGPM+1RBGZpvw==} 969 + '@takumi-rs/core-linux-arm64-gnu@1.1.2': 970 + resolution: {integrity: sha512-2cuSnKWAfQjQwS+7aprz0LRkztPVsGqWGTto0TydVI81z7sNyC4kZWoJMTpkNb3439HB03UBStQVacgUeVOL+w==} 971 971 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 972 972 cpu: [arm64] 973 973 os: [linux] 974 974 libc: [glibc] 975 975 976 - '@takumi-rs/core-linux-arm64-musl@1.0.9': 977 - resolution: {integrity: sha512-L6aXsre2/GIf80UBAWJgKIQtp6NPzBSBfYLQqVd3dKlT4PSu+SJrlEV5SQkIuP067F/9VJ0JIocvwdh1+gGf+Q==} 976 + '@takumi-rs/core-linux-arm64-musl@1.1.2': 977 + resolution: {integrity: sha512-7OIdvVy6lbr49LIBe96uvlOg4Awmye5w+DgL4d0rRi1Zv7bmY23ciBCGaM+7jjkZgcThGrlZKz1Ecopx56pPqA==} 978 978 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 979 979 cpu: [arm64] 980 980 os: [linux] 981 981 libc: [musl] 982 982 983 - '@takumi-rs/core-linux-x64-gnu@1.0.9': 984 - resolution: {integrity: sha512-a6iVjLxaNC86Fw7s74SA48BLIGQrCDkWJu1p1y3E0uQ+vFzTW00M9jKjjHAETjslkE7uCf87ACk7BME68F/evQ==} 983 + '@takumi-rs/core-linux-x64-gnu@1.1.2': 984 + resolution: {integrity: sha512-IXEhQjGSGye+kwawDad00kN2cLpj1rPF5u0K4KsANvWxa/dho32Nnw+RX8cCtPGiuvEKhtENxtdc7pVSx1E84g==} 985 985 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 986 986 cpu: [x64] 987 987 os: [linux] 988 988 libc: [glibc] 989 989 990 - '@takumi-rs/core-linux-x64-musl@1.0.9': 991 - resolution: {integrity: sha512-o6lLpmJ6lSE3zj78p6m2Phbcb1xGkPApgmoHNHh+7QJrJkrzOvIlD7EmfiAjI98hDtW+nPFD3MPyEE+ntLpkCg==} 990 + '@takumi-rs/core-linux-x64-musl@1.1.2': 991 + resolution: {integrity: sha512-Q2vuZCwQ/XmHwwbJxSKNNEKdWdhsvBMhTF8pyyGti5s44yx7W6+a0MkDdMRAkStzDhH6HeZlpknpHcUk4R4g8w==} 992 992 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 993 993 cpu: [x64] 994 994 os: [linux] 995 995 libc: [musl] 996 996 997 - '@takumi-rs/core-win32-arm64-msvc@1.0.9': 998 - resolution: {integrity: sha512-IvrE++Xn0IXqkPI+ERo+WhUBETB9mYYjYI4HlPEYOkNV4WiRYw01TdIddrtmmYgocExUCJHS/AIHvodfGU7Z7Q==} 997 + '@takumi-rs/core-win32-arm64-msvc@1.1.2': 998 + resolution: {integrity: sha512-CKpslxYCltih/lL+h7xkVzsfIZtDcXp3WGk01fudgx82Ic87b/jjRMX5KE4f/exkgrKxshRF4yCQGGeQ3vIhiw==} 999 999 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1000 1000 cpu: [arm64] 1001 1001 os: [win32] 1002 1002 1003 - '@takumi-rs/core-win32-x64-msvc@1.0.9': 1004 - resolution: {integrity: sha512-FUvDxIaegUrjaZwppzQcClunw9sqNsh+t0c+kgsLJc/hnCVlGMvSIYaIHlrj4K7qlo4NyIQTqA1DMYDcLXUYAQ==} 1003 + '@takumi-rs/core-win32-x64-msvc@1.1.2': 1004 + resolution: {integrity: sha512-c+n2vPpDscMuTHZ29eJp8did5tlJ/KKBKicc51D6AdkA5jhr7MLeryzIKe3ob59iQttWYd/1j4+tUwoO6yEusg==} 1005 1005 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1006 1006 cpu: [x64] 1007 1007 os: [win32] 1008 1008 1009 - '@takumi-rs/core@1.0.9': 1010 - resolution: {integrity: sha512-jTXaO8nnzN9javu7lA0hmzkZtShMVQFuQOxY4jsgA2ylDbqcES+G41EQBoVJVyvcwRLRTvqOxPuya2LrCB6SAA==} 1009 + '@takumi-rs/core@1.1.2': 1010 + resolution: {integrity: sha512-JI0kUis5MCPzOt2sCahBZLVJERpp1t1fXTRBaBbCGploUa/hqRA9HW6Nr+tccDM/C6wy9FDrJnI4SB56W0HfDA==} 1011 1011 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1012 1012 1013 - '@takumi-rs/helpers@1.0.9': 1014 - resolution: {integrity: sha512-Q4O5eINwqybLXI2LE3VO4qk8/7eLmV51oG3S8DfGJJjHI5mRx/aQ91RfvFnsvFDWByrswBnBet46IyXnQU2s4A==} 1013 + '@takumi-rs/helpers@1.1.2': 1014 + resolution: {integrity: sha512-Edvmk7UzPhlbUCYpIqeBBfq9h/lAeWAhtwIhJJ10vxv7qNWjgfIPakzNWeAYhFVj8KT5y47S3RLT3cKVniqI5g==} 1015 1015 peerDependencies: 1016 1016 react: ^19.2.5 1017 1017 react-dom: ^18.0.0 || ^19.0.0 1018 1018 peerDependenciesMeta: 1019 + react: 1020 + optional: true 1019 1021 react-dom: 1020 1022 optional: true 1021 1023 1022 - '@takumi-rs/image-response@1.0.9': 1023 - resolution: {integrity: sha512-ja87V9bW0F3MWdDgtLHhw1UH/SYN3xcRjdebd7n6CF+4iNCjptJRj1mQAi0Cy2JmwLBTV8qvNeiCcJ6qLIQM3g==} 1024 + '@takumi-rs/image-response@1.1.2': 1025 + resolution: {integrity: sha512-kXkGzHdFBAXH/05KEFkgVP2oJScTeWD7nORQzEiBajYthRyU44ZBctZzEBobvWfagDhfeS86sD+OZB1AjSE1KA==} 1024 1026 1025 - '@takumi-rs/wasm@1.0.9': 1026 - resolution: {integrity: sha512-GdCzb0G2WauDfJhLYHQ2Y+56d0kWS7okxzgEeZAlzzYay10r/zduBNdhRcgRSU5Xo8tYYKQyh9FnxHV1nj8zIA==} 1027 + '@takumi-rs/wasm@1.1.2': 1028 + resolution: {integrity: sha512-in2kLgFp6nuXie5q7blvRk8m/3UuvNDtc5SEFUh6Eu2yn20PcElj1VMdXhQhn+IN0h119BUWWdJ3AuEuh8PiDg==} 1027 1029 1028 - '@tanstack/solid-virtual@3.13.23': 1029 - resolution: {integrity: sha512-knSNOb1ev78yaf4CnhCY+JS2NZXzp6WO/8pzI/P9GitrG6QLgBzltOl3duN8+13QkVdSMxRrUKl8mioWNlTQxA==} 1030 + '@tanstack/solid-virtual@3.13.24': 1031 + resolution: {integrity: sha512-sLGjpsAWLK8oxciqN+FNjs5JLs9N27DKwwoOPN8FMrmFMeXdiPQvRg3CqUAv8pYfXKD9KmcbhBxNwlmcP22a8Q==} 1030 1032 peerDependencies: 1031 1033 solid-js: ^1.3.0 1032 1034 1033 - '@tanstack/virtual-core@3.13.23': 1034 - resolution: {integrity: sha512-zSz2Z2HNyLjCplANTDyl3BcdQJc2k1+yyFoKhNRmCr7V7dY8o8q5m8uFTI1/Pg1kL+Hgrz6u3Xo6eFUB7l66cg==} 1035 + '@tanstack/virtual-core@3.14.0': 1036 + resolution: {integrity: sha512-JLANqGy/D6k4Ujmh8Tr25lGimuOXNiaVyXaCAZS0W+1390sADdGnyUdSWNIfd49gebtIxGMij4IktRVzrdr12Q==} 1035 1037 1036 1038 '@tybys/wasm-util@0.10.1': 1037 1039 resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} ··· 1070 1072 solid-js: 1071 1073 optional: true 1072 1074 1073 - baseline-browser-mapping@2.10.18: 1074 - resolution: {integrity: sha512-VSnGQAOLtP5mib/DPyg2/t+Tlv65NTBz83BJBJvmLVHHuKJVaDOBvJJykiT5TR++em5nfAySPccDZDa4oSrn8A==} 1075 + baseline-browser-mapping@2.10.23: 1076 + resolution: {integrity: sha512-xwVXGqevyKPsiuQdLj+dZMVjidjJV508TBqexND5HrF89cGdCYCJFB3qhcxRHSeMctdCfbR1jrxBajhDy7o29g==} 1075 1077 engines: {node: '>=6.0.0'} 1076 1078 hasBin: true 1077 1079 ··· 1083 1085 engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 1084 1086 hasBin: true 1085 1087 1086 - caniuse-lite@1.0.30001787: 1087 - resolution: {integrity: sha512-mNcrMN9KeI68u7muanUpEejSLghOKlVhRqS/Za2IeyGllJ9I9otGpR9g3nsw7n4W378TE/LyIteA0+/FOZm4Kg==} 1088 + caniuse-lite@1.0.30001791: 1089 + resolution: {integrity: sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==} 1088 1090 1089 1091 codemirror@6.0.2: 1090 1092 resolution: {integrity: sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==} ··· 1150 1152 domutils@3.2.2: 1151 1153 resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} 1152 1154 1153 - electron-to-chromium@1.5.336: 1154 - resolution: {integrity: sha512-AbH9q9J455r/nLmdNZes0G0ZKcRX73FicwowalLs6ijwOmCJSRRrLX63lcAlzy9ux3dWK1w1+1nsBJEWN11hcQ==} 1155 + electron-to-chromium@1.5.344: 1156 + resolution: {integrity: sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg==} 1155 1157 1156 - enhanced-resolve@5.20.1: 1157 - resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} 1158 + enhanced-resolve@5.21.0: 1159 + resolution: {integrity: sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==} 1158 1160 engines: {node: '>=10.13.0'} 1159 1161 1160 1162 entities@4.5.0: ··· 1203 1205 resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1204 1206 engines: {node: '>=6.9.0'} 1205 1207 1206 - get-tsconfig@4.13.7: 1207 - resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} 1208 + get-tsconfig@4.14.0: 1209 + resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} 1208 1210 1209 1211 graceful-fs@4.2.11: 1210 1212 resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} ··· 1342 1344 engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1343 1345 hasBin: true 1344 1346 1345 - nanoid@5.1.7: 1346 - resolution: {integrity: sha512-ua3NDgISf6jdwezAheMOk4mbE1LXjm1DfMUDMuJf4AqxLFK3ccGpgWizwa5YV7Yz9EpXwEaWoRXSb/BnV0t5dQ==} 1347 + nanoid@5.1.9: 1348 + resolution: {integrity: sha512-ZUvP7KeBLe3OZ1ypw6dI/TzYJuvHP77IM4Ry73waSQTLn8/g8rpdjfyVAh7t1/+FjBtG4lCP42MEbDxOsRpBMw==} 1347 1349 engines: {node: ^18 || >=20} 1348 1350 hasBin: true 1349 1351 1350 - node-releases@2.0.37: 1351 - resolution: {integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==} 1352 + node-releases@2.0.38: 1353 + resolution: {integrity: sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==} 1352 1354 1353 1355 nth-check@2.1.1: 1354 1356 resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} ··· 1372 1374 pkg-types@1.3.1: 1373 1375 resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} 1374 1376 1375 - postcss@8.5.9: 1376 - resolution: {integrity: sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==} 1377 + postcss@8.5.12: 1378 + resolution: {integrity: sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA==} 1377 1379 engines: {node: ^10 || ^12 || >=14} 1378 1380 1379 1381 prettier-plugin-organize-imports@4.3.0: ··· 1386 1388 vue-tsc: 1387 1389 optional: true 1388 1390 1389 - prettier-plugin-tailwindcss@0.7.2: 1390 - resolution: {integrity: sha512-LkphyK3Fw+q2HdMOoiEHWf93fNtYJwfamoKPl7UwtjFQdei/iIBoX11G6j706FzN3ymX9mPVi97qIY8328vdnA==} 1391 + prettier-plugin-tailwindcss@0.7.4: 1392 + resolution: {integrity: sha512-UKii4RjY05SNt/WQi6/NcOn/LsT0/ILLXsxygjbRg5/YZelsSu5jTqorYHPDGq4nZy5q5hpCu+XdGZ1xaJEQgw==} 1391 1393 engines: {node: '>=20.19'} 1392 1394 peerDependencies: 1393 1395 '@ianvs/prettier-plugin-sort-imports': '*' ··· 1441 1443 prettier-plugin-svelte: 1442 1444 optional: true 1443 1445 1444 - prettier@3.8.2: 1445 - resolution: {integrity: sha512-8c3mgTe0ASwWAJK+78dpviD+A8EqhndQPUBpNUIPt6+xWlIigCwfN01lWr9MAede4uqXGTEKeQWTvzb3vjia0Q==} 1446 + prettier@3.8.3: 1447 + resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==} 1446 1448 engines: {node: '>=14'} 1447 1449 hasBin: true 1448 1450 ··· 1453 1455 resolve-pkg-maps@1.0.0: 1454 1456 resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 1455 1457 1456 - rolldown@1.0.0-rc.15: 1457 - resolution: {integrity: sha512-Ff31guA5zT6WjnGp0SXw76X6hzGRk/OQq2hE+1lcDe+lJdHSgnSX6nK3erbONHyCbpSj9a9E+uX/OvytZoWp2g==} 1458 + rolldown@1.0.0-rc.17: 1459 + resolution: {integrity: sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA==} 1458 1460 engines: {node: ^20.19.0 || >=22.12.0} 1459 1461 hasBin: true 1460 1462 ··· 1496 1498 engines: {node: '>=16'} 1497 1499 hasBin: true 1498 1500 1499 - tailwindcss@4.2.2: 1500 - resolution: {integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==} 1501 + tailwindcss@4.2.4: 1502 + resolution: {integrity: sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==} 1501 1503 1502 - takumi-js@1.0.9: 1503 - resolution: {integrity: sha512-R3PdMihWL30EYfHiqQq3yRyvEjyZrbUndtfV0lCaK4UJXdZuvPffEfc11iyQg3hzfrNXi5i/RBsTfJFR1/jQTg==} 1504 + takumi-js@1.1.2: 1505 + resolution: {integrity: sha512-S8Ff0zBUQJ8VC40r7y1RPBo5QXFXV3U868M+T8B8JGt5Tko8l83DVEr1BYLOxqUenEeev853S708oE0aD50eZA==} 1504 1506 1505 - tapable@2.3.2: 1506 - resolution: {integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==} 1507 + tapable@2.3.3: 1508 + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} 1507 1509 engines: {node: '>=6'} 1508 1510 1509 1511 tinyexec@1.1.1: ··· 1522 1524 engines: {node: '>=18.0.0'} 1523 1525 hasBin: true 1524 1526 1525 - typescript@6.0.2: 1526 - resolution: {integrity: sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==} 1527 + typescript@6.0.3: 1528 + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} 1527 1529 engines: {node: '>=14.17'} 1528 1530 hasBin: true 1529 1531 ··· 1552 1554 '@testing-library/jest-dom': 1553 1555 optional: true 1554 1556 1555 - vite@8.0.8: 1556 - resolution: {integrity: sha512-dbU7/iLVa8KZALJyLOBOQ88nOXtNG8vxKuOT4I2mD+Ya70KPceF4IAmDsmU0h1Qsn5bPrvsY9HJstCRh3hG6Uw==} 1557 + vite@8.0.10: 1558 + resolution: {integrity: sha512-rZuUu9j6J5uotLDs+cAA4O5H4K1SfPliUlQwqa6YEwSrWDZzP4rhm00oJR5snMewjxF5V/K3D4kctsUTsIU9Mw==} 1557 1559 engines: {node: ^20.19.0 || >=22.12.0} 1558 1560 hasBin: true 1559 1561 peerDependencies: ··· 1624 1626 dependencies: 1625 1627 '@atcute/lexicons': 1.3.0 1626 1628 1627 - '@atcute/bluesky@3.3.2': 1629 + '@atcute/bluesky@3.3.3': 1628 1630 dependencies: 1629 1631 '@atcute/atproto': 3.1.11 1630 1632 '@atcute/lexicons': 1.3.0 ··· 1695 1697 '@atcute/identity': 1.1.4 1696 1698 '@atcute/lexicons': 1.3.0 1697 1699 '@atcute/uint8array': 1.1.1 1698 - '@atcute/util-text': 1.2.0 1700 + '@atcute/util-text': 1.3.1 1699 1701 '@badrap/valita': 0.4.6 1700 1702 1701 1703 '@atcute/lexicon-resolver@0.1.6(@atcute/identity-resolver@1.2.2(@atcute/identity@1.1.4))(@atcute/identity@1.1.4)': ··· 1712 1714 '@atcute/lexicons@1.3.0': 1713 1715 dependencies: 1714 1716 '@atcute/uint8array': 1.1.1 1715 - '@atcute/util-text': 1.2.0 1717 + '@atcute/util-text': 1.3.1 1716 1718 '@standard-schema/spec': 1.1.0 1717 1719 esm-env: 1.2.2 1718 1720 ··· 1734 1736 '@atcute/multibase': 1.2.0 1735 1737 '@atcute/oauth-crypto': 0.1.0 1736 1738 '@atcute/oauth-types': 0.1.1 1737 - nanoid: 5.1.7 1739 + nanoid: 5.1.9 1738 1740 transitivePeerDependencies: 1739 1741 - '@atcute/identity' 1740 1742 ··· 1743 1745 '@atcute/multibase': 1.2.0 1744 1746 '@atcute/uint8array': 1.1.1 1745 1747 '@badrap/valita': 0.4.6 1746 - nanoid: 5.1.7 1748 + nanoid: 5.1.9 1747 1749 1748 1750 '@atcute/oauth-keyset@0.1.0': 1749 1751 dependencies: ··· 1778 1780 dependencies: 1779 1781 '@badrap/valita': 0.4.6 1780 1782 1781 - '@atcute/util-text@1.2.0': 1783 + '@atcute/util-text@1.3.1': 1782 1784 dependencies: 1783 1785 unicode-segmenter: 0.14.5 1784 1786 ··· 1903 1905 dependencies: 1904 1906 '@codemirror/language': 6.12.3 1905 1907 '@codemirror/state': 6.6.0 1906 - '@codemirror/view': 6.41.0 1908 + '@codemirror/view': 6.41.1 1907 1909 '@lezer/common': 1.5.2 1908 1910 1909 1911 '@codemirror/commands@6.10.3': 1910 1912 dependencies: 1911 1913 '@codemirror/language': 6.12.3 1912 1914 '@codemirror/state': 6.6.0 1913 - '@codemirror/view': 6.41.0 1915 + '@codemirror/view': 6.41.1 1914 1916 '@lezer/common': 1.5.2 1915 1917 1916 1918 '@codemirror/lang-json@6.0.2': ··· 1921 1923 '@codemirror/language@6.12.3': 1922 1924 dependencies: 1923 1925 '@codemirror/state': 6.6.0 1924 - '@codemirror/view': 6.41.0 1926 + '@codemirror/view': 6.41.1 1925 1927 '@lezer/common': 1.5.2 1926 1928 '@lezer/highlight': 1.2.3 1927 - '@lezer/lr': 1.4.8 1929 + '@lezer/lr': 1.4.10 1928 1930 style-mod: 4.1.3 1929 1931 1930 1932 '@codemirror/lint@6.9.5': 1931 1933 dependencies: 1932 1934 '@codemirror/state': 6.6.0 1933 - '@codemirror/view': 6.41.0 1935 + '@codemirror/view': 6.41.1 1934 1936 crelt: 1.0.6 1935 1937 1936 - '@codemirror/search@6.6.0': 1938 + '@codemirror/search@6.7.0': 1937 1939 dependencies: 1938 1940 '@codemirror/state': 6.6.0 1939 - '@codemirror/view': 6.41.0 1941 + '@codemirror/view': 6.41.1 1940 1942 crelt: 1.0.6 1941 1943 1942 1944 '@codemirror/state@6.6.0': 1943 1945 dependencies: 1944 1946 '@marijn/find-cluster-break': 1.0.2 1945 1947 1946 - '@codemirror/view@6.41.0': 1948 + '@codemirror/view@6.41.1': 1947 1949 dependencies: 1948 1950 '@codemirror/state': 6.6.0 1949 1951 crelt: 1.0.6 1950 1952 style-mod: 4.1.3 1951 1953 w3c-keyname: 2.2.8 1952 1954 1953 - '@cyberalien/svg-utils@1.2.9': 1955 + '@cyberalien/svg-utils@1.2.13': 1954 1956 dependencies: 1955 1957 '@iconify/types': 2.0.0 1956 1958 1957 - '@emnapi/core@1.9.2': 1959 + '@emnapi/core@1.10.0': 1958 1960 dependencies: 1959 1961 '@emnapi/wasi-threads': 1.2.1 1960 1962 tslib: 2.8.1 1961 1963 optional: true 1962 1964 1963 - '@emnapi/runtime@1.9.2': 1965 + '@emnapi/runtime@1.10.0': 1964 1966 dependencies: 1965 1967 tslib: 2.8.1 1966 1968 optional: true ··· 2120 2122 '@esbuild/win32-x64@0.28.0': 2121 2123 optional: true 2122 2124 2123 - '@fsegurai/codemirror-theme-basic-dark@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)': 2125 + '@fsegurai/codemirror-theme-basic-dark@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1)(@lezer/highlight@1.2.3)': 2124 2126 dependencies: 2125 2127 '@codemirror/language': 6.12.3 2126 2128 '@codemirror/state': 6.6.0 2127 - '@codemirror/view': 6.41.0 2129 + '@codemirror/view': 6.41.1 2128 2130 '@lezer/highlight': 1.2.3 2129 2131 2130 - '@fsegurai/codemirror-theme-basic-light@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)': 2132 + '@fsegurai/codemirror-theme-basic-light@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.1)(@lezer/highlight@1.2.3)': 2131 2133 dependencies: 2132 2134 '@codemirror/language': 6.12.3 2133 2135 '@codemirror/state': 6.6.0 2134 - '@codemirror/view': 6.41.0 2136 + '@codemirror/view': 6.41.1 2135 2137 '@lezer/highlight': 1.2.3 2136 2138 2137 - '@iconify-json/lucide@1.2.102': 2139 + '@iconify-json/lucide@1.2.104': 2138 2140 dependencies: 2139 2141 '@iconify/types': 2.0.0 2140 2142 2141 - '@iconify/tailwind4@1.2.3(tailwindcss@4.2.2)': 2143 + '@iconify/tailwind4@1.2.3(tailwindcss@4.2.4)': 2142 2144 dependencies: 2143 2145 '@iconify/tools': 5.0.11 2144 2146 '@iconify/types': 2.0.0 2145 - '@iconify/utils': 3.1.0 2146 - tailwindcss: 4.2.2 2147 + '@iconify/utils': 3.1.1 2148 + tailwindcss: 4.2.4 2147 2149 2148 2150 '@iconify/tools@5.0.11': 2149 2151 dependencies: 2150 - '@cyberalien/svg-utils': 1.2.9 2152 + '@cyberalien/svg-utils': 1.2.13 2151 2153 '@iconify/types': 2.0.0 2152 - '@iconify/utils': 3.1.0 2154 + '@iconify/utils': 3.1.1 2153 2155 fflate: 0.8.2 2154 2156 modern-tar: 0.7.6 2155 2157 pathe: 2.0.3 ··· 2157 2159 2158 2160 '@iconify/types@2.0.0': {} 2159 2161 2160 - '@iconify/utils@3.1.0': 2162 + '@iconify/utils@3.1.1': 2161 2163 dependencies: 2162 2164 '@antfu/install-pkg': 1.1.0 2163 2165 '@iconify/types': 2.0.0 ··· 2209 2211 dependencies: 2210 2212 '@lezer/common': 1.5.2 2211 2213 '@lezer/highlight': 1.2.3 2212 - '@lezer/lr': 1.4.8 2214 + '@lezer/lr': 1.4.10 2213 2215 2214 - '@lezer/lr@1.4.8': 2216 + '@lezer/lr@1.4.10': 2215 2217 dependencies: 2216 2218 '@lezer/common': 1.5.2 2217 2219 2218 2220 '@marijn/find-cluster-break@1.0.2': {} 2219 2221 2220 - '@napi-rs/wasm-runtime@1.1.3(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': 2222 + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': 2221 2223 dependencies: 2222 - '@emnapi/core': 1.9.2 2223 - '@emnapi/runtime': 1.9.2 2224 + '@emnapi/core': 1.10.0 2225 + '@emnapi/runtime': 1.10.0 2224 2226 '@tybys/wasm-util': 0.10.1 2225 2227 optional: true 2226 2228 2227 2229 '@noble/secp256k1@3.1.0': {} 2228 2230 2229 - '@oxc-project/types@0.124.0': {} 2231 + '@oxc-project/types@0.127.0': {} 2230 2232 2231 - '@rolldown/binding-android-arm64@1.0.0-rc.15': 2233 + '@rolldown/binding-android-arm64@1.0.0-rc.17': 2232 2234 optional: true 2233 2235 2234 - '@rolldown/binding-darwin-arm64@1.0.0-rc.15': 2236 + '@rolldown/binding-darwin-arm64@1.0.0-rc.17': 2235 2237 optional: true 2236 2238 2237 - '@rolldown/binding-darwin-x64@1.0.0-rc.15': 2239 + '@rolldown/binding-darwin-x64@1.0.0-rc.17': 2238 2240 optional: true 2239 2241 2240 - '@rolldown/binding-freebsd-x64@1.0.0-rc.15': 2242 + '@rolldown/binding-freebsd-x64@1.0.0-rc.17': 2241 2243 optional: true 2242 2244 2243 - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15': 2245 + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17': 2244 2246 optional: true 2245 2247 2246 - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15': 2248 + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17': 2247 2249 optional: true 2248 2250 2249 - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15': 2251 + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17': 2250 2252 optional: true 2251 2253 2252 - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15': 2254 + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17': 2253 2255 optional: true 2254 2256 2255 - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15': 2257 + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17': 2256 2258 optional: true 2257 2259 2258 - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15': 2260 + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17': 2259 2261 optional: true 2260 2262 2261 - '@rolldown/binding-linux-x64-musl@1.0.0-rc.15': 2263 + '@rolldown/binding-linux-x64-musl@1.0.0-rc.17': 2262 2264 optional: true 2263 2265 2264 - '@rolldown/binding-openharmony-arm64@1.0.0-rc.15': 2266 + '@rolldown/binding-openharmony-arm64@1.0.0-rc.17': 2265 2267 optional: true 2266 2268 2267 - '@rolldown/binding-wasm32-wasi@1.0.0-rc.15': 2269 + '@rolldown/binding-wasm32-wasi@1.0.0-rc.17': 2268 2270 dependencies: 2269 - '@emnapi/core': 1.9.2 2270 - '@emnapi/runtime': 1.9.2 2271 - '@napi-rs/wasm-runtime': 1.1.3(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) 2271 + '@emnapi/core': 1.10.0 2272 + '@emnapi/runtime': 1.10.0 2273 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) 2272 2274 optional: true 2273 2275 2274 - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15': 2276 + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17': 2275 2277 optional: true 2276 2278 2277 - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15': 2279 + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17': 2278 2280 optional: true 2279 2281 2280 - '@rolldown/pluginutils@1.0.0-rc.15': {} 2282 + '@rolldown/pluginutils@1.0.0-rc.17': {} 2281 2283 2282 2284 '@skyware/firehose@0.5.2': 2283 2285 dependencies: ··· 2291 2293 2292 2294 '@standard-schema/spec@1.1.0': {} 2293 2295 2294 - '@tailwindcss/node@4.2.2': 2296 + '@tailwindcss/node@4.2.4': 2295 2297 dependencies: 2296 2298 '@jridgewell/remapping': 2.3.5 2297 - enhanced-resolve: 5.20.1 2299 + enhanced-resolve: 5.21.0 2298 2300 jiti: 2.6.1 2299 2301 lightningcss: 1.32.0 2300 2302 magic-string: 0.30.21 2301 2303 source-map-js: 1.2.1 2302 - tailwindcss: 4.2.2 2304 + tailwindcss: 4.2.4 2303 2305 2304 - '@tailwindcss/oxide-android-arm64@4.2.2': 2306 + '@tailwindcss/oxide-android-arm64@4.2.4': 2305 2307 optional: true 2306 2308 2307 - '@tailwindcss/oxide-darwin-arm64@4.2.2': 2309 + '@tailwindcss/oxide-darwin-arm64@4.2.4': 2308 2310 optional: true 2309 2311 2310 - '@tailwindcss/oxide-darwin-x64@4.2.2': 2312 + '@tailwindcss/oxide-darwin-x64@4.2.4': 2311 2313 optional: true 2312 2314 2313 - '@tailwindcss/oxide-freebsd-x64@4.2.2': 2315 + '@tailwindcss/oxide-freebsd-x64@4.2.4': 2314 2316 optional: true 2315 2317 2316 - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2': 2318 + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.4': 2317 2319 optional: true 2318 2320 2319 - '@tailwindcss/oxide-linux-arm64-gnu@4.2.2': 2321 + '@tailwindcss/oxide-linux-arm64-gnu@4.2.4': 2320 2322 optional: true 2321 2323 2322 - '@tailwindcss/oxide-linux-arm64-musl@4.2.2': 2324 + '@tailwindcss/oxide-linux-arm64-musl@4.2.4': 2323 2325 optional: true 2324 2326 2325 - '@tailwindcss/oxide-linux-x64-gnu@4.2.2': 2327 + '@tailwindcss/oxide-linux-x64-gnu@4.2.4': 2326 2328 optional: true 2327 2329 2328 - '@tailwindcss/oxide-linux-x64-musl@4.2.2': 2330 + '@tailwindcss/oxide-linux-x64-musl@4.2.4': 2329 2331 optional: true 2330 2332 2331 - '@tailwindcss/oxide-wasm32-wasi@4.2.2': 2333 + '@tailwindcss/oxide-wasm32-wasi@4.2.4': 2332 2334 optional: true 2333 2335 2334 - '@tailwindcss/oxide-win32-arm64-msvc@4.2.2': 2336 + '@tailwindcss/oxide-win32-arm64-msvc@4.2.4': 2335 2337 optional: true 2336 2338 2337 - '@tailwindcss/oxide-win32-x64-msvc@4.2.2': 2339 + '@tailwindcss/oxide-win32-x64-msvc@4.2.4': 2338 2340 optional: true 2339 2341 2340 - '@tailwindcss/oxide@4.2.2': 2342 + '@tailwindcss/oxide@4.2.4': 2341 2343 optionalDependencies: 2342 - '@tailwindcss/oxide-android-arm64': 4.2.2 2343 - '@tailwindcss/oxide-darwin-arm64': 4.2.2 2344 - '@tailwindcss/oxide-darwin-x64': 4.2.2 2345 - '@tailwindcss/oxide-freebsd-x64': 4.2.2 2346 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.2 2347 - '@tailwindcss/oxide-linux-arm64-gnu': 4.2.2 2348 - '@tailwindcss/oxide-linux-arm64-musl': 4.2.2 2349 - '@tailwindcss/oxide-linux-x64-gnu': 4.2.2 2350 - '@tailwindcss/oxide-linux-x64-musl': 4.2.2 2351 - '@tailwindcss/oxide-wasm32-wasi': 4.2.2 2352 - '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2 2353 - '@tailwindcss/oxide-win32-x64-msvc': 4.2.2 2344 + '@tailwindcss/oxide-android-arm64': 4.2.4 2345 + '@tailwindcss/oxide-darwin-arm64': 4.2.4 2346 + '@tailwindcss/oxide-darwin-x64': 4.2.4 2347 + '@tailwindcss/oxide-freebsd-x64': 4.2.4 2348 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.4 2349 + '@tailwindcss/oxide-linux-arm64-gnu': 4.2.4 2350 + '@tailwindcss/oxide-linux-arm64-musl': 4.2.4 2351 + '@tailwindcss/oxide-linux-x64-gnu': 4.2.4 2352 + '@tailwindcss/oxide-linux-x64-musl': 4.2.4 2353 + '@tailwindcss/oxide-wasm32-wasi': 4.2.4 2354 + '@tailwindcss/oxide-win32-arm64-msvc': 4.2.4 2355 + '@tailwindcss/oxide-win32-x64-msvc': 4.2.4 2354 2356 2355 - '@tailwindcss/vite@4.2.2(vite@8.0.8(@types/node@25.3.4)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.19.2))': 2357 + '@tailwindcss/vite@4.2.4(vite@8.0.10(@types/node@25.3.4)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.19.2))': 2356 2358 dependencies: 2357 - '@tailwindcss/node': 4.2.2 2358 - '@tailwindcss/oxide': 4.2.2 2359 - tailwindcss: 4.2.2 2360 - vite: 8.0.8(@types/node@25.3.4)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.19.2) 2359 + '@tailwindcss/node': 4.2.4 2360 + '@tailwindcss/oxide': 4.2.4 2361 + tailwindcss: 4.2.4 2362 + vite: 8.0.10(@types/node@25.3.4)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.19.2) 2361 2363 2362 - '@takumi-rs/core-darwin-arm64@1.0.9': 2364 + '@takumi-rs/core-darwin-arm64@1.1.2': 2363 2365 optional: true 2364 2366 2365 - '@takumi-rs/core-darwin-x64@1.0.9': 2367 + '@takumi-rs/core-darwin-x64@1.1.2': 2366 2368 optional: true 2367 2369 2368 - '@takumi-rs/core-linux-arm64-gnu@1.0.9': 2370 + '@takumi-rs/core-linux-arm64-gnu@1.1.2': 2369 2371 optional: true 2370 2372 2371 - '@takumi-rs/core-linux-arm64-musl@1.0.9': 2373 + '@takumi-rs/core-linux-arm64-musl@1.1.2': 2372 2374 optional: true 2373 2375 2374 - '@takumi-rs/core-linux-x64-gnu@1.0.9': 2376 + '@takumi-rs/core-linux-x64-gnu@1.1.2': 2375 2377 optional: true 2376 2378 2377 - '@takumi-rs/core-linux-x64-musl@1.0.9': 2379 + '@takumi-rs/core-linux-x64-musl@1.1.2': 2378 2380 optional: true 2379 2381 2380 - '@takumi-rs/core-win32-arm64-msvc@1.0.9': 2382 + '@takumi-rs/core-win32-arm64-msvc@1.1.2': 2381 2383 optional: true 2382 2384 2383 - '@takumi-rs/core-win32-x64-msvc@1.0.9': 2385 + '@takumi-rs/core-win32-x64-msvc@1.1.2': 2384 2386 optional: true 2385 2387 2386 - '@takumi-rs/core@1.0.9(react@19.2.5)': 2388 + '@takumi-rs/core@1.1.2(react@19.2.5)': 2387 2389 dependencies: 2388 - '@takumi-rs/helpers': 1.0.9(react@19.2.5) 2390 + '@takumi-rs/helpers': 1.1.2(react@19.2.5) 2389 2391 optionalDependencies: 2390 - '@takumi-rs/core-darwin-arm64': 1.0.9 2391 - '@takumi-rs/core-darwin-x64': 1.0.9 2392 - '@takumi-rs/core-linux-arm64-gnu': 1.0.9 2393 - '@takumi-rs/core-linux-arm64-musl': 1.0.9 2394 - '@takumi-rs/core-linux-x64-gnu': 1.0.9 2395 - '@takumi-rs/core-linux-x64-musl': 1.0.9 2396 - '@takumi-rs/core-win32-arm64-msvc': 1.0.9 2397 - '@takumi-rs/core-win32-x64-msvc': 1.0.9 2392 + '@takumi-rs/core-darwin-arm64': 1.1.2 2393 + '@takumi-rs/core-darwin-x64': 1.1.2 2394 + '@takumi-rs/core-linux-arm64-gnu': 1.1.2 2395 + '@takumi-rs/core-linux-arm64-musl': 1.1.2 2396 + '@takumi-rs/core-linux-x64-gnu': 1.1.2 2397 + '@takumi-rs/core-linux-x64-musl': 1.1.2 2398 + '@takumi-rs/core-win32-arm64-msvc': 1.1.2 2399 + '@takumi-rs/core-win32-x64-msvc': 1.1.2 2398 2400 transitivePeerDependencies: 2399 2401 - react 2400 2402 - react-dom 2401 2403 2402 - '@takumi-rs/helpers@1.0.9(react@19.2.5)': 2403 - dependencies: 2404 + '@takumi-rs/helpers@1.1.2(react@19.2.5)': 2405 + optionalDependencies: 2404 2406 react: 19.2.5 2405 2407 2406 - '@takumi-rs/image-response@1.0.9(react@19.2.5)': 2408 + '@takumi-rs/image-response@1.1.2(react@19.2.5)': 2407 2409 dependencies: 2408 - takumi-js: 1.0.9(react@19.2.5) 2410 + takumi-js: 1.1.2(react@19.2.5) 2409 2411 transitivePeerDependencies: 2410 2412 - react 2411 2413 - react-dom 2412 2414 2413 - '@takumi-rs/wasm@1.0.9(react@19.2.5)': 2415 + '@takumi-rs/wasm@1.1.2(react@19.2.5)': 2414 2416 dependencies: 2415 - '@takumi-rs/helpers': 1.0.9(react@19.2.5) 2417 + '@takumi-rs/helpers': 1.1.2(react@19.2.5) 2416 2418 transitivePeerDependencies: 2417 2419 - react 2418 2420 - react-dom 2419 2421 2420 - '@tanstack/solid-virtual@3.13.23(solid-js@1.9.12)': 2422 + '@tanstack/solid-virtual@3.13.24(solid-js@1.9.12)': 2421 2423 dependencies: 2422 - '@tanstack/virtual-core': 3.13.23 2424 + '@tanstack/virtual-core': 3.14.0 2423 2425 solid-js: 1.9.12 2424 2426 2425 - '@tanstack/virtual-core@3.13.23': {} 2427 + '@tanstack/virtual-core@3.14.0': {} 2426 2428 2427 2429 '@tybys/wasm-util@0.10.1': 2428 2430 dependencies: ··· 2473 2475 optionalDependencies: 2474 2476 solid-js: 1.9.12 2475 2477 2476 - baseline-browser-mapping@2.10.18: {} 2478 + baseline-browser-mapping@2.10.23: {} 2477 2479 2478 2480 boolbase@1.0.0: {} 2479 2481 2480 2482 browserslist@4.28.2: 2481 2483 dependencies: 2482 - baseline-browser-mapping: 2.10.18 2483 - caniuse-lite: 1.0.30001787 2484 - electron-to-chromium: 1.5.336 2485 - node-releases: 2.0.37 2484 + baseline-browser-mapping: 2.10.23 2485 + caniuse-lite: 1.0.30001791 2486 + electron-to-chromium: 1.5.344 2487 + node-releases: 2.0.38 2486 2488 update-browserslist-db: 1.2.3(browserslist@4.28.2) 2487 2489 2488 - caniuse-lite@1.0.30001787: {} 2490 + caniuse-lite@1.0.30001791: {} 2489 2491 2490 2492 codemirror@6.0.2: 2491 2493 dependencies: ··· 2493 2495 '@codemirror/commands': 6.10.3 2494 2496 '@codemirror/language': 6.12.3 2495 2497 '@codemirror/lint': 6.9.5 2496 - '@codemirror/search': 6.6.0 2498 + '@codemirror/search': 6.7.0 2497 2499 '@codemirror/state': 6.6.0 2498 - '@codemirror/view': 6.41.0 2500 + '@codemirror/view': 6.41.1 2499 2501 2500 2502 commander@11.1.0: {} 2501 2503 ··· 2555 2557 domelementtype: 2.3.0 2556 2558 domhandler: 5.0.3 2557 2559 2558 - electron-to-chromium@1.5.336: {} 2560 + electron-to-chromium@1.5.344: {} 2559 2561 2560 - enhanced-resolve@5.20.1: 2562 + enhanced-resolve@5.21.0: 2561 2563 dependencies: 2562 2564 graceful-fs: 4.2.11 2563 - tapable: 2.3.2 2565 + tapable: 2.3.3 2564 2566 2565 2567 entities@4.5.0: {} 2566 2568 ··· 2638 2640 2639 2641 gensync@1.0.0-beta.2: {} 2640 2642 2641 - get-tsconfig@4.13.7: 2643 + get-tsconfig@4.14.0: 2642 2644 dependencies: 2643 2645 resolve-pkg-maps: 1.0.0 2644 2646 optional: true ··· 2737 2739 2738 2740 nanoid@3.3.11: {} 2739 2741 2740 - nanoid@5.1.7: {} 2742 + nanoid@5.1.9: {} 2741 2743 2742 - node-releases@2.0.37: {} 2744 + node-releases@2.0.38: {} 2743 2745 2744 2746 nth-check@2.1.1: 2745 2747 dependencies: ··· 2763 2765 mlly: 1.8.2 2764 2766 pathe: 2.0.3 2765 2767 2766 - postcss@8.5.9: 2768 + postcss@8.5.12: 2767 2769 dependencies: 2768 2770 nanoid: 3.3.11 2769 2771 picocolors: 1.1.1 2770 2772 source-map-js: 1.2.1 2771 2773 2772 - prettier-plugin-organize-imports@4.3.0(prettier@3.8.2)(typescript@6.0.2): 2774 + prettier-plugin-organize-imports@4.3.0(prettier@3.8.3)(typescript@6.0.3): 2773 2775 dependencies: 2774 - prettier: 3.8.2 2775 - typescript: 6.0.2 2776 + prettier: 3.8.3 2777 + typescript: 6.0.3 2776 2778 2777 - prettier-plugin-tailwindcss@0.7.2(prettier-plugin-organize-imports@4.3.0(prettier@3.8.2)(typescript@6.0.2))(prettier@3.8.2): 2779 + prettier-plugin-tailwindcss@0.7.4(prettier-plugin-organize-imports@4.3.0(prettier@3.8.3)(typescript@6.0.3))(prettier@3.8.3): 2778 2780 dependencies: 2779 - prettier: 3.8.2 2781 + prettier: 3.8.3 2780 2782 optionalDependencies: 2781 - prettier-plugin-organize-imports: 4.3.0(prettier@3.8.2)(typescript@6.0.2) 2783 + prettier-plugin-organize-imports: 4.3.0(prettier@3.8.3)(typescript@6.0.3) 2782 2784 2783 - prettier@3.8.2: {} 2785 + prettier@3.8.3: {} 2784 2786 2785 - react@19.2.5: {} 2787 + react@19.2.5: 2788 + optional: true 2786 2789 2787 2790 resolve-pkg-maps@1.0.0: 2788 2791 optional: true 2789 2792 2790 - rolldown@1.0.0-rc.15: 2793 + rolldown@1.0.0-rc.17: 2791 2794 dependencies: 2792 - '@oxc-project/types': 0.124.0 2793 - '@rolldown/pluginutils': 1.0.0-rc.15 2795 + '@oxc-project/types': 0.127.0 2796 + '@rolldown/pluginutils': 1.0.0-rc.17 2794 2797 optionalDependencies: 2795 - '@rolldown/binding-android-arm64': 1.0.0-rc.15 2796 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.15 2797 - '@rolldown/binding-darwin-x64': 1.0.0-rc.15 2798 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.15 2799 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.15 2800 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.15 2801 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.15 2802 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.15 2803 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.15 2804 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.15 2805 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.15 2806 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.15 2807 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.15 2808 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.15 2809 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.15 2798 + '@rolldown/binding-android-arm64': 1.0.0-rc.17 2799 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.17 2800 + '@rolldown/binding-darwin-x64': 1.0.0-rc.17 2801 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.17 2802 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.17 2803 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.17 2804 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.17 2805 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.17 2806 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.17 2807 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.17 2808 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.17 2809 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.17 2810 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.17 2811 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.17 2812 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.17 2810 2813 2811 2814 sax@1.6.0: {} 2812 2815 ··· 2847 2850 picocolors: 1.1.1 2848 2851 sax: 1.6.0 2849 2852 2850 - tailwindcss@4.2.2: {} 2853 + tailwindcss@4.2.4: {} 2851 2854 2852 - takumi-js@1.0.9(react@19.2.5): 2855 + takumi-js@1.1.2(react@19.2.5): 2853 2856 dependencies: 2854 - '@takumi-rs/core': 1.0.9(react@19.2.5) 2855 - '@takumi-rs/helpers': 1.0.9(react@19.2.5) 2856 - '@takumi-rs/wasm': 1.0.9(react@19.2.5) 2857 + '@takumi-rs/core': 1.1.2(react@19.2.5) 2858 + '@takumi-rs/helpers': 1.1.2(react@19.2.5) 2859 + '@takumi-rs/wasm': 1.1.2(react@19.2.5) 2857 2860 transitivePeerDependencies: 2858 2861 - react 2859 2862 - react-dom 2860 2863 2861 - tapable@2.3.2: {} 2864 + tapable@2.3.3: {} 2862 2865 2863 2866 tinyexec@1.1.1: {} 2864 2867 ··· 2873 2876 tsx@4.19.2: 2874 2877 dependencies: 2875 2878 esbuild: 0.23.1 2876 - get-tsconfig: 4.13.7 2879 + get-tsconfig: 4.14.0 2877 2880 optionalDependencies: 2878 2881 fsevents: 2.3.3 2879 2882 optional: true 2880 2883 2881 - typescript@6.0.2: {} 2884 + typescript@6.0.3: {} 2882 2885 2883 2886 ufo@1.6.3: {} 2884 2887 ··· 2893 2896 escalade: 3.2.0 2894 2897 picocolors: 1.1.1 2895 2898 2896 - vite-plugin-solid@2.11.12(solid-js@1.9.12)(vite@8.0.8(@types/node@25.3.4)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.19.2)): 2899 + vite-plugin-solid@2.11.12(solid-js@1.9.12)(vite@8.0.10(@types/node@25.3.4)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.19.2)): 2897 2900 dependencies: 2898 2901 '@babel/core': 7.29.0 2899 2902 '@types/babel__core': 7.20.5 ··· 2901 2904 merge-anything: 5.1.7 2902 2905 solid-js: 1.9.12 2903 2906 solid-refresh: 0.6.3(solid-js@1.9.12) 2904 - vite: 8.0.8(@types/node@25.3.4)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.19.2) 2905 - vitefu: 1.1.3(vite@8.0.8(@types/node@25.3.4)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.19.2)) 2907 + vite: 8.0.10(@types/node@25.3.4)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.19.2) 2908 + vitefu: 1.1.3(vite@8.0.10(@types/node@25.3.4)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.19.2)) 2906 2909 transitivePeerDependencies: 2907 2910 - supports-color 2908 2911 2909 - vite@8.0.8(@types/node@25.3.4)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.19.2): 2912 + vite@8.0.10(@types/node@25.3.4)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.19.2): 2910 2913 dependencies: 2911 2914 lightningcss: 1.32.0 2912 2915 picomatch: 4.0.4 2913 - postcss: 8.5.9 2914 - rolldown: 1.0.0-rc.15 2916 + postcss: 8.5.12 2917 + rolldown: 1.0.0-rc.17 2915 2918 tinyglobby: 0.2.16 2916 2919 optionalDependencies: 2917 2920 '@types/node': 25.3.4 ··· 2920 2923 jiti: 2.6.1 2921 2924 tsx: 4.19.2 2922 2925 2923 - vitefu@1.1.3(vite@8.0.8(@types/node@25.3.4)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.19.2)): 2926 + vitefu@1.1.3(vite@8.0.10(@types/node@25.3.4)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.19.2)): 2924 2927 optionalDependencies: 2925 - vite: 8.0.8(@types/node@25.3.4)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.19.2) 2928 + vite: 8.0.10(@types/node@25.3.4)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.19.2) 2926 2929 2927 2930 w3c-keyname@2.2.8: {} 2928 2931
+5 -43
src/components/json.tsx
··· 7 7 createSignal, 8 8 ErrorBoundary, 9 9 For, 10 - onCleanup, 11 10 Show, 12 11 useContext, 13 12 } from "solid-js"; 14 - import { Portal } from "solid-js/web"; 15 13 import { resolveLexiconAuthority } from "../lib/api"; 16 14 import { formatFileSize } from "../utils/format"; 17 15 import { hideMedia } from "../views/settings"; ··· 19 17 import RecordHoverCard from "./hover-card/record"; 20 18 import { addNotification, removeNotification } from "./notification"; 21 19 import VideoPlayer from "./video-player"; 20 + import { ZoomableImage } from "./zoomable-image"; 22 21 23 22 interface JSONContext { 24 23 repo: string; ··· 57 56 const ctx = useJSONCtx(); 58 57 const navigate = useNavigate(); 59 58 const params = useParams(); 59 + const location = useLocation(); 60 60 61 61 const handleClick = async (lex: string) => { 62 62 try { ··· 103 103 : isCid(part) && props.isLink && ctx.parentIsBlob && params.repo ? 104 104 <A 105 105 class="text-blue-500 hover:underline active:underline dark:text-blue-400" 106 - rel="noopener" 107 - target="_blank" 108 - href={`${ctx.pds}/xrpc/com.atproto.sync.getBlob?did=${params.repo}&cid=${part}`} 106 + href={`/at://${params.repo}/blob/${part}`} 107 + state={{ from: location.pathname + location.hash, label: "Back to record" }} 109 108 > 110 109 {part} 111 110 </A> ··· 323 322 const MediaDisplay = () => { 324 323 const [overrideShow, setOverrideShow] = createSignal(false); 325 324 const hidden = () => hideMedia() && !overrideShow(); 326 - const [expanded, setExpanded] = createSignal(false); 327 - const [closing, setClosing] = createSignal(false); 328 325 329 - const closeExpanded = () => { 330 - setClosing(true); 331 - setTimeout(() => { 332 - setExpanded(false); 333 - setClosing(false); 334 - }, 200); 335 - }; 336 - 337 - createEffect(() => { 338 - if (!expanded()) return; 339 - const handler = (e: KeyboardEvent) => { 340 - if (e.key === "Escape") closeExpanded(); 341 - }; 342 - window.addEventListener("keydown", handler); 343 - onCleanup(() => window.removeEventListener("keydown", handler)); 344 - }); 345 326 const [imageUrl] = createResource( 346 327 () => (blob.mimeType.startsWith("image/") ? blob.ref.$link : null), 347 328 async (cid) => { ··· 371 352 </div> 372 353 } 373 354 > 374 - <img 375 - class="h-auto max-h-48 max-w-64 cursor-zoom-in object-contain" 376 - src={imageUrl()} 377 - onclick={() => setExpanded(true)} 378 - /> 379 - <Show when={expanded()}> 380 - <Portal> 381 - <div 382 - class="fixed inset-0 z-50 flex cursor-zoom-out items-center justify-center bg-black/80 transition-opacity duration-200 starting:opacity-0" 383 - classList={{ "opacity-0": closing() }} 384 - onclick={closeExpanded} 385 - > 386 - <img 387 - class="max-h-screen max-w-screen object-contain transition-all duration-200 starting:scale-95 starting:opacity-0" 388 - classList={{ "scale-95 opacity-0": closing() }} 389 - src={imageUrl()} 390 - /> 391 - </div> 392 - </Portal> 393 - </Show> 355 + <ZoomableImage src={imageUrl()} class="h-auto max-h-48 max-w-64" /> 394 356 </Show> 395 357 </Show> 396 358 <Show when={blob.mimeType === "video/mp4"}>
+49
src/components/zoomable-image.tsx
··· 1 + import { createEffect, createSignal, onCleanup, Show } from "solid-js"; 2 + import { Portal } from "solid-js/web"; 3 + 4 + export const ZoomableImage = (props: { src: string | undefined; class?: string }) => { 5 + const [expanded, setExpanded] = createSignal(false); 6 + const [closing, setClosing] = createSignal(false); 7 + 8 + const close = () => { 9 + setClosing(true); 10 + setTimeout(() => { 11 + setExpanded(false); 12 + setClosing(false); 13 + }, 200); 14 + }; 15 + 16 + createEffect(() => { 17 + if (!expanded()) return; 18 + const handler = (e: KeyboardEvent) => { 19 + if (e.key === "Escape") close(); 20 + }; 21 + window.addEventListener("keydown", handler); 22 + onCleanup(() => window.removeEventListener("keydown", handler)); 23 + }); 24 + 25 + return ( 26 + <> 27 + <img 28 + class={`cursor-zoom-in object-contain ${props.class ?? ""}`} 29 + src={props.src} 30 + onclick={() => setExpanded(true)} 31 + /> 32 + <Show when={expanded()}> 33 + <Portal> 34 + <div 35 + class="fixed inset-0 z-50 flex cursor-zoom-out items-center justify-center bg-black/80 transition-opacity duration-200 starting:opacity-0" 36 + classList={{ "opacity-0": closing() }} 37 + onclick={close} 38 + > 39 + <img 40 + class="max-h-screen max-w-screen object-contain transition-all duration-200 starting:scale-95 starting:opacity-0" 41 + classList={{ "scale-95 opacity-0": closing() }} 42 + src={props.src} 43 + /> 44 + </div> 45 + </Portal> 46 + </Show> 47 + </> 48 + ); 49 + };
+2
src/index.tsx
··· 9 9 import { LabelView } from "./views/labels.tsx"; 10 10 import { PdsLayout } from "./views/pds.tsx"; 11 11 import { RecordView } from "./views/record.tsx"; 12 + import { BlobDebugView } from "./views/repo/blob-debug.tsx"; 12 13 import { RepoLayout, repoPreload } from "./views/repo/index.tsx"; 13 14 import { Settings } from "./views/settings.tsx"; 14 15 import { StreamView } from "./views/stream"; ··· 25 26 <Route path="/" /> 26 27 <Route path="/:repo" component={RepoLayout} preload={repoPreload}> 27 28 <Route path="/" /> 29 + <Route path="/blob/:cid" component={BlobDebugView} /> 28 30 <Route path="/:collection" component={CollectionLayout}> 29 31 <Route path="/" /> 30 32 <Route path="/:rkey" component={RecordView} />
+317
src/views/repo/blob-debug.tsx
··· 1 + import * as CID from "@atcute/cid"; 2 + import { A, useLocation, useParams } from "@solidjs/router"; 3 + import { 4 + createEffect, 5 + createMemo, 6 + createResource, 7 + createSignal, 8 + ErrorBoundary, 9 + Match, 10 + onCleanup, 11 + Show, 12 + Switch, 13 + } from "solid-js"; 14 + import { Button } from "../../components/button.jsx"; 15 + import { Spinner } from "../../components/spinner.jsx"; 16 + import VideoPlayer from "../../components/video-player.jsx"; 17 + import { ZoomableImage } from "../../components/zoomable-image.jsx"; 18 + import { useRepo } from "../../lib/repo-context.jsx"; 19 + import { formatFileSize } from "../../utils/format.js"; 20 + 21 + const SIZE_CAP = 50 * 1024 * 1024; // 50 MiB 22 + 23 + const toHex = (bytes: Uint8Array) => 24 + Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join(""); 25 + 26 + type BlobResult = 27 + | { kind: "oversized"; size: number; mimeType: string | undefined } 28 + | { 29 + kind: "loaded"; 30 + bytes: Uint8Array<ArrayBuffer>; 31 + size: number; 32 + mimeType: string; 33 + digest: Uint8Array; 34 + expected: Uint8Array; 35 + matches: boolean; 36 + }; 37 + 38 + export const BlobDebugView = () => { 39 + const params = useParams(); 40 + const location = useLocation(); 41 + const repo = useRepo(); 42 + const [overrideCap, setOverrideCap] = createSignal(false); 43 + 44 + const back = () => { 45 + const state = location.state as { from?: string; label?: string } | undefined; 46 + return { 47 + href: state?.from ?? `/at://${params.repo}#blobs`, 48 + label: state?.label ?? "Back to blobs", 49 + }; 50 + }; 51 + 52 + const parsedCid = createMemo(() => { 53 + try { 54 + return { ok: true as const, cid: CID.fromString(params.cid!) }; 55 + } catch (e) { 56 + return { ok: false as const, error: (e as Error).message }; 57 + } 58 + }); 59 + 60 + const blobUrl = () => 61 + `${repo.pds()}/xrpc/com.atproto.sync.getBlob?did=${params.repo}&cid=${params.cid}`; 62 + 63 + const [blob] = createResource( 64 + () => { 65 + const pds = repo.pds(); 66 + if (!pds || !parsedCid().ok) return null; 67 + return { url: blobUrl(), override: overrideCap() }; 68 + }, 69 + async ({ url, override }): Promise<BlobResult> => { 70 + let size: number | undefined; 71 + let mimeType: string | undefined; 72 + try { 73 + const head = await fetch(url, { method: "HEAD" }); 74 + if (head.ok) { 75 + const cl = head.headers.get("content-length"); 76 + size = cl ? parseInt(cl, 10) : undefined; 77 + mimeType = head.headers.get("content-type") ?? undefined; 78 + } 79 + } catch {} 80 + 81 + if (size !== undefined && size > SIZE_CAP && !override) { 82 + return { kind: "oversized", size, mimeType }; 83 + } 84 + 85 + const res = await fetch(url); 86 + if (!res.ok) throw new Error(`${res.status} ${res.statusText}`); 87 + const finalMime = res.headers.get("content-type") ?? mimeType ?? "application/octet-stream"; 88 + const bytes = new Uint8Array(await res.arrayBuffer()); 89 + const digest = new Uint8Array(await crypto.subtle.digest("SHA-256", bytes)); 90 + const parsed = parsedCid(); 91 + const expected = 92 + parsed.ok && parsed.cid.digest.codec === CID.HASH_SHA256 ? 93 + parsed.cid.digest.contents 94 + : new Uint8Array(); 95 + const matches = 96 + expected.length === digest.length && digest.every((b, i) => b === expected[i]); 97 + 98 + return { 99 + kind: "loaded", 100 + bytes, 101 + size: bytes.byteLength, 102 + mimeType: finalMime, 103 + digest, 104 + expected, 105 + matches, 106 + }; 107 + }, 108 + ); 109 + 110 + const blobValue = createMemo<BlobResult | undefined>(() => { 111 + if (blob.loading || blob.error) return undefined; 112 + return blob(); 113 + }); 114 + 115 + const objectUrl = createMemo<string | undefined>((prev) => { 116 + if (prev) URL.revokeObjectURL(prev); 117 + const b = blobValue(); 118 + if (b?.kind !== "loaded") return undefined; 119 + return URL.createObjectURL(new Blob([b.bytes], { type: b.mimeType })); 120 + }); 121 + onCleanup(() => { 122 + const u = objectUrl(); 123 + if (u) URL.revokeObjectURL(u); 124 + }); 125 + 126 + createEffect(() => { 127 + document.title = `Blob ${params.cid?.slice(0, 12)}… - PDSls`; 128 + }); 129 + 130 + const previewKind = (mime: string) => 131 + mime.startsWith("image/") ? "image" 132 + : mime === "video/mp4" ? "video" 133 + : mime.startsWith("audio/") ? "audio" 134 + : "none"; 135 + 136 + const unsupportedHash = () => { 137 + const p = parsedCid(); 138 + return p.ok && p.cid.digest.codec !== CID.HASH_SHA256 ? p.cid.digest.codec : undefined; 139 + }; 140 + 141 + return ( 142 + <ErrorBoundary 143 + fallback={(err) => ( 144 + <div class="mx-auto w-full max-w-3xl px-3"> 145 + <div class="rounded border border-red-500 px-3 py-2 text-red-500">{String(err)}</div> 146 + </div> 147 + )} 148 + > 149 + <div class="mx-auto flex w-full max-w-3xl flex-col gap-4 px-3 pb-20"> 150 + <A 151 + href={back().href} 152 + class="flex w-fit items-center gap-1 text-sm text-blue-500 hover:underline dark:text-blue-400" 153 + > 154 + <span class="iconify lucide--arrow-left" /> 155 + {back().label} 156 + </A> 157 + 158 + <Show when={!parsedCid().ok}> 159 + <div class="rounded border border-red-500 px-3 py-2 text-red-500"> 160 + Invalid CID: {(parsedCid() as { ok: false; error: string }).error} 161 + </div> 162 + </Show> 163 + 164 + <Show when={parsedCid().ok && !repo.pds()}> 165 + <div class="rounded border border-amber-500 px-3 py-2 text-amber-600 dark:text-amber-400"> 166 + PDS unavailable for this repo. 167 + </div> 168 + </Show> 169 + 170 + <Switch> 171 + <Match when={blob.loading}> 172 + <div class="self-center"> 173 + <Spinner /> 174 + </div> 175 + </Match> 176 + <Match when={blob.error}> 177 + <div class="rounded border border-red-500 px-3 py-2 text-red-500"> 178 + Failed to fetch blob: {String(blob.error)} 179 + </div> 180 + </Match> 181 + <Match 182 + when={ 183 + blobValue()?.kind === "oversized" && 184 + (blobValue() as Extract<BlobResult, { kind: "oversized" }>) 185 + } 186 + > 187 + {(b) => ( 188 + <div class="flex flex-col gap-3 rounded border border-amber-500 px-3 py-3"> 189 + <div class="text-amber-600 dark:text-amber-400"> 190 + Blob is {formatFileSize(b().size)} (over the {formatFileSize(SIZE_CAP)} auto-fetch 191 + cap). The hash will not be verified until you fetch it. 192 + </div> 193 + <Show when={b().mimeType}> 194 + <div class="text-sm text-neutral-600 dark:text-neutral-400"> 195 + Content-Type: {b().mimeType} 196 + </div> 197 + </Show> 198 + <div class="flex gap-2"> 199 + <Button onClick={() => setOverrideCap(true)}>Fetch anyway</Button> 200 + <a 201 + href={blobUrl()} 202 + target="_blank" 203 + rel="noopener" 204 + class="dark:bg-dark-300 dark:hover:bg-dark-200 dark:active:bg-dark-100 flex items-center gap-1 rounded-md border border-neutral-200 bg-neutral-50 px-2.5 py-1.5 text-xs text-neutral-700 transition-colors select-none hover:bg-neutral-100 active:bg-neutral-200 dark:border-neutral-700 dark:text-neutral-300" 205 + > 206 + <span class="iconify lucide--external-link" /> 207 + Open raw 208 + </a> 209 + </div> 210 + </div> 211 + )} 212 + </Match> 213 + <Match 214 + when={ 215 + blobValue()?.kind === "loaded" && 216 + (blobValue() as Extract<BlobResult, { kind: "loaded" }>) 217 + } 218 + > 219 + {(b) => { 220 + const unsupported = unsupportedHash(); 221 + return ( 222 + <> 223 + <div class="grid grid-cols-[max-content_1fr] gap-x-3 gap-y-1 rounded border border-neutral-200 px-3 py-2 text-sm dark:border-neutral-700"> 224 + <div class="col-span-2"> 225 + <div class="text-neutral-500 dark:text-neutral-400">CID</div> 226 + <div dir="rtl" class="truncate text-left"> 227 + {params.cid} 228 + </div> 229 + </div> 230 + <span class="text-neutral-500 dark:text-neutral-400">Hash</span> 231 + <span class="flex flex-col gap-1"> 232 + <span 233 + class="flex items-center gap-1.5" 234 + classList={{ 235 + "text-green-600 dark:text-green-400": 236 + unsupported === undefined && b().matches, 237 + "text-red-600 dark:text-red-400": 238 + unsupported === undefined && !b().matches, 239 + "text-amber-600 dark:text-amber-400": unsupported !== undefined, 240 + }} 241 + > 242 + <span 243 + class="shrink-0" 244 + classList={{ 245 + "iconify lucide--check": unsupported === undefined && b().matches, 246 + "iconify lucide--x": unsupported === undefined && !b().matches, 247 + "iconify lucide--triangle-alert": unsupported !== undefined, 248 + }} 249 + /> 250 + <span> 251 + {unsupported !== undefined ? 252 + "Unsupported" 253 + : b().matches ? 254 + "Valid" 255 + : "Mismatch"} 256 + </span> 257 + </span> 258 + <Show when={unsupported === undefined && !b().matches}> 259 + <div class="text-xs wrap-break-word text-neutral-600 dark:text-neutral-300"> 260 + Fetched bytes do not match the requested CID. 261 + <div class="mt-1 grid grid-cols-[max-content_1fr] gap-x-3 font-mono"> 262 + <span class="text-neutral-500 dark:text-neutral-400">expected</span> 263 + <span class="wrap-anywhere">{toHex(b().expected)}</span> 264 + <span class="text-neutral-500 dark:text-neutral-400">actual</span> 265 + <span class="wrap-anywhere">{toHex(b().digest)}</span> 266 + </div> 267 + </div> 268 + </Show> 269 + <Show when={unsupported !== undefined}> 270 + <div class="text-xs wrap-break-word text-neutral-600 dark:text-neutral-300"> 271 + Hash multicodec 0x{unsupported!.toString(16)} not recognized. 272 + </div> 273 + </Show> 274 + </span> 275 + <span class="text-neutral-500 dark:text-neutral-400">Size</span> 276 + <span>{formatFileSize(b().size)}</span> 277 + <span class="text-neutral-500 dark:text-neutral-400">MIME</span> 278 + <span>{b().mimeType}</span> 279 + </div> 280 + 281 + <Show when={previewKind(b().mimeType) !== "none"}> 282 + <Show when={previewKind(b().mimeType) === "image"}> 283 + <ZoomableImage src={objectUrl()} class="h-auto max-h-96 max-w-fit" /> 284 + </Show> 285 + <Show when={previewKind(b().mimeType) === "video"}> 286 + <ErrorBoundary fallback={() => <span>Failed to load video</span>}> 287 + <VideoPlayer did={params.repo!} cid={params.cid!} /> 288 + </ErrorBoundary> 289 + </Show> 290 + <Show when={previewKind(b().mimeType) === "audio"}> 291 + <audio class="my-0.5 max-w-96" controls> 292 + <source 293 + src={blobUrl()} 294 + type={b().mimeType === "audio/x-flac" ? "audio/flac" : b().mimeType} 295 + /> 296 + </audio> 297 + </Show> 298 + </Show> 299 + 300 + <a 301 + href={blobUrl()} 302 + target="_blank" 303 + rel="noopener" 304 + class="dark:bg-dark-300 dark:hover:bg-dark-200 dark:active:bg-dark-100 flex w-fit items-center gap-1 rounded-md border border-neutral-200 bg-neutral-50 px-2.5 py-1.5 text-xs text-neutral-700 transition-colors select-none hover:bg-neutral-100 active:bg-neutral-200 dark:border-neutral-700 dark:text-neutral-300" 305 + > 306 + <span class="iconify lucide--external-link" /> 307 + Open raw 308 + </a> 309 + </> 310 + ); 311 + }} 312 + </Match> 313 + </Switch> 314 + </div> 315 + </ErrorBoundary> 316 + ); 317 + };
+5 -4
src/views/repo/blob.tsx
··· 1 1 import { Client, simpleFetchHandler } from "@atcute/client"; 2 + import { A } from "@solidjs/router"; 2 3 import { createResource, createSignal, For, Show } from "solid-js"; 3 4 import { Button } from "../../components/button"; 4 5 ··· 33 34 <div class="flex w-full flex-col gap-0.5 pb-20 font-mono text-xs sm:text-sm"> 34 35 <For each={blobs()}> 35 36 {(cid) => ( 36 - <a 37 - href={`${props.pds}/xrpc/com.atproto.sync.getBlob?did=${props.repo}&cid=${cid}`} 38 - target="_blank" 37 + <A 38 + href={`/at://${props.repo}/blob/${cid}`} 39 + state={{ from: `/at://${props.repo}#blobs`, label: "Back to blobs" }} 39 40 class="truncate rounded px-0.5 text-left text-blue-500 hover:bg-neutral-200 active:bg-neutral-300 dark:text-blue-400 dark:hover:bg-neutral-700 dark:active:bg-neutral-600" 40 41 dir="rtl" 41 42 > 42 43 {cid} 43 - </a> 44 + </A> 44 45 )} 45 46 </For> 46 47 </div>
+2 -2
src/views/repo/index.tsx
··· 52 52 const params = useParams(); 53 53 const location = useLocation(); 54 54 const navigate = useNavigate(); 55 - const hasChild = () => !!params.collection; 55 + const hasChild = () => !!params.collection || !!params.cid; 56 56 57 57 // Redirect non-DID identifiers (handles, NSIDs) via effect — must be separate from 58 58 // the resource because navigate inside a resource fetcher doesn't reliably re-trigger it ··· 224 224 const RepoView = () => { 225 225 const repo = useRepo(); 226 226 const params = useParams(); 227 - const hidden = () => !!params.collection; 227 + const hidden = () => !!params.collection || !!params.cid; 228 228 const location = useLocation(); 229 229 const [error, setError] = createSignal<string>(); 230 230 const [downloading, setDownloading] = createSignal(false);