atproto explorer pdsls.dev
atproto tool

update deps & switch to atcute/repo

juli.ee 050f9248 d0fe10a2

verified
+9 -12
package.json
···
"devDependencies": {
"@iconify-json/lucide": "^1.2.70",
"@iconify/tailwind4": "^1.0.6",
-
"@tailwindcss/vite": "^4.1.14",
+
"@tailwindcss/vite": "^4.1.15",
"prettier": "^3.6.2",
"prettier-plugin-organize-imports": "^4.3.0",
"prettier-plugin-tailwindcss": "^0.7.1",
-
"tailwindcss": "^4.1.14",
+
"tailwindcss": "^4.1.15",
"typescript": "^5.9.3",
-
"vite": "^7.1.10",
+
"vite": "^7.1.11",
"vite-plugin-solid": "^2.11.9"
},
"dependencies": {
-
"@atcute/atproto": "^3.1.7",
-
"@atcute/bluesky": "^3.2.7",
-
"@atcute/car": "^3.1.3",
-
"@atcute/cbor": "^2.2.7",
-
"@atcute/cid": "^2.2.5",
+
"@atcute/atproto": "^3.1.8",
+
"@atcute/bluesky": "^3.2.8",
"@atcute/client": "^4.0.5",
"@atcute/crypto": "^2.2.5",
"@atcute/did-plc": "^0.1.7",
"@atcute/identity": "^1.1.1",
"@atcute/identity-resolver": "^1.1.4",
-
"@atcute/leaflet": "^1.0.10",
+
"@atcute/leaflet": "^1.0.11",
"@atcute/lexicon-doc": "^1.1.3",
-
"@atcute/lexicon-resolver": "^0.1.2",
+
"@atcute/lexicon-resolver": "^0.1.3",
"@atcute/lexicons": "^1.2.2",
"@atcute/oauth-browser-client": "^1.0.27",
-
"@atcute/tangled": "^1.0.9",
+
"@atcute/repo": "^0.1.0",
+
"@atcute/tangled": "^1.0.10",
"@atcute/tid": "^1.0.3",
-
"@atcute/uint8array": "^1.0.5",
"@codemirror/commands": "^6.9.0",
"@codemirror/lang-json": "^6.0.2",
"@codemirror/lint": "^6.9.0",
+218 -233
pnpm-lock.yaml
···
.:
dependencies:
'@atcute/atproto':
-
specifier: ^3.1.7
-
version: 3.1.7
+
specifier: ^3.1.8
+
version: 3.1.8
'@atcute/bluesky':
-
specifier: ^3.2.7
-
version: 3.2.7
-
'@atcute/car':
-
specifier: ^3.1.3
-
version: 3.1.3
-
'@atcute/cbor':
-
specifier: ^2.2.7
-
version: 2.2.7
-
'@atcute/cid':
-
specifier: ^2.2.5
-
version: 2.2.5
+
specifier: ^3.2.8
+
version: 3.2.8
'@atcute/client':
specifier: ^4.0.5
version: 4.0.5
···
specifier: ^1.1.4
version: 1.1.4(@atcute/identity@1.1.1)
'@atcute/leaflet':
-
specifier: ^1.0.10
-
version: 1.0.10
+
specifier: ^1.0.11
+
version: 1.0.11
'@atcute/lexicon-doc':
specifier: ^1.1.3
version: 1.1.3
'@atcute/lexicon-resolver':
-
specifier: ^0.1.2
-
version: 0.1.2(@atcute/identity-resolver@1.1.4(@atcute/identity@1.1.1))(@atcute/identity@1.1.1)
+
specifier: ^0.1.3
+
version: 0.1.3(@atcute/identity-resolver@1.1.4(@atcute/identity@1.1.1))(@atcute/identity@1.1.1)
'@atcute/lexicons':
specifier: ^1.2.2
version: 1.2.2
'@atcute/oauth-browser-client':
specifier: ^1.0.27
version: 1.0.27
+
'@atcute/repo':
+
specifier: ^0.1.0
+
version: 0.1.0
'@atcute/tangled':
-
specifier: ^1.0.9
-
version: 1.0.9
+
specifier: ^1.0.10
+
version: 1.0.10
'@atcute/tid':
specifier: ^1.0.3
version: 1.0.3
-
'@atcute/uint8array':
-
specifier: ^1.0.5
-
version: 1.0.5
'@codemirror/commands':
specifier: ^6.9.0
version: 6.9.0
···
version: 1.2.70
'@iconify/tailwind4':
specifier: ^1.0.6
-
version: 1.0.6(tailwindcss@4.1.14)
+
version: 1.0.6(tailwindcss@4.1.15)
'@tailwindcss/vite':
-
specifier: ^4.1.14
-
version: 4.1.14(vite@7.1.10(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.19.2))
+
specifier: ^4.1.15
+
version: 4.1.15(vite@7.1.11(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.2))
prettier:
specifier: ^3.6.2
version: 3.6.2
···
specifier: ^0.7.1
version: 0.7.1(prettier-plugin-organize-imports@4.3.0(prettier@3.6.2)(typescript@5.9.3))(prettier@3.6.2)
tailwindcss:
-
specifier: ^4.1.14
-
version: 4.1.14
+
specifier: ^4.1.15
+
version: 4.1.15
typescript:
specifier: ^5.9.3
version: 5.9.3
vite:
-
specifier: ^7.1.10
-
version: 7.1.10(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.19.2)
+
specifier: ^7.1.11
+
version: 7.1.11(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.2)
vite-plugin-solid:
specifier: ^2.11.9
-
version: 2.11.9(solid-js@1.9.9)(vite@7.1.10(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.19.2))
+
version: 2.11.9(solid-js@1.9.9)(vite@7.1.11(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.2))
packages:
···
'@antfu/utils@8.1.1':
resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==}
-
'@atcute/atproto@3.1.7':
-
resolution: {integrity: sha512-3Ym8qaVZg2vf8qw0KO1aue39z/5oik5J+UDoSes1vr8ddw40UVLA5sV4bXSKmLnhzQHiLLgoVZXe4zaKfozPoQ==}
+
'@atcute/atproto@3.1.8':
+
resolution: {integrity: sha512-Miu+S7RSgAYbmQWtHJKfSFUN5Kliqoo4YH0rILPmBtfmlZieORJgXNj9oO/Uive0/ulWkiRse07ATIcK8JxMnw==}
-
'@atcute/bluesky@3.2.7':
-
resolution: {integrity: sha512-mofkZySIIp+Z+TbBD+cDWaPY6FVKNRZG8yhMFkh6uMCuiazDUAUjxr4yaFjYMVcgMN9FkwGllwQJevUH9aTSnQ==}
+
'@atcute/bluesky@3.2.8':
+
resolution: {integrity: sha512-wxEnSOvX7nLH4sVzX9YFCkaNEWIDrTv3pTs6/x4NgJ3AJ3XJio0OYPM8tR7wAgsklY6BHvlAgt3yoCDK0cl1CA==}
'@atcute/car@3.1.3':
resolution: {integrity: sha512-WJ13bAEt7TjDMVi09ubjLtvhdljbWInGm9Kfy7Y6NhrmiyC/aZYaA/zHX/bHI6xv1c/h3SQduWqxOr4ae49eqA==}
+
'@atcute/car@5.0.0':
+
resolution: {integrity: sha512-OIY2xTXv8lSpZsDSn/UYQtJSMvDw5Hi4Q+uyvmiqSM+fht08QRAEq/nxa5YFciPZ3nfDFnZ3//EgJw7QhkSXLQ==}
+
'@atcute/cbor@2.2.7':
resolution: {integrity: sha512-/mwAF0gnokOphceZqFq3uzMGdd8sbw5y6bxF8CRutRkCCUcpjjpJc5fkLwhxyGgOveF3mZuHE6p7t/+IAqb7Aw==}
-
'@atcute/cid@2.2.5':
-
resolution: {integrity: sha512-7SId61nMyuxSwsDI02wEZn6/gVeha2TrAN4W0UPSdSEcwQD3R2W8VU7zvR4XGfU7A/KmBnVkwx5FTfzyizKj6g==}
+
'@atcute/cid@2.2.6':
+
resolution: {integrity: sha512-bTAHHbJ24p+E//V4KCS4xdmd39o211jJswvqQOevj7vk+5IYcgDLx1ryZWZ1sEPOo9x875li/kj5gpKL14RDwQ==}
'@atcute/client@4.0.5':
resolution: {integrity: sha512-R8Qen8goGmEkynYGg2m6XFlVmz0GTDvQ+9w+4QqOob+XMk8/WDpF4aImev7WKEde/rV2gjcqW7zM8E6W9NShDA==}
···
'@atcute/identity@1.1.1':
resolution: {integrity: sha512-zax42n693VEhnC+5tndvO2KLDTMkHOz8UExwmklvJv7R9VujfEwiSWhcv6Jgwb3ellaG8wjiQ1lMOIjLLvwh0Q==}
-
'@atcute/leaflet@1.0.10':
-
resolution: {integrity: sha512-BTALobkbxNO6+IiGRcqfCmMxioqh88S0LEswHLf2rBVfNNL7/gZ0EuHhwN+sizHoY7Od6/MBUk4aOEjUPr16tw==}
+
'@atcute/leaflet@1.0.11':
+
resolution: {integrity: sha512-PmhBIltPD4DqR737J412ePwtfyBeC/Xr9R+s/d55Aq0kLPo4aBWt+JDb40Mh4JCGGxiz6gu9HFCCZeaVLrL4Dw==}
'@atcute/lexicon-doc@1.1.3':
resolution: {integrity: sha512-HlQBmB4NCZPzREyVzr7lzjRxSiRHook2xfa7DgA3dk3oYZ+KnnPEtS6M1sAmAAddtUdrOrJ+0xJPQHkfElZmpQ==}
-
'@atcute/lexicon-resolver@0.1.2':
-
resolution: {integrity: sha512-qiBZspJQIcVL/9ZkWMIThsavbX4PL6F2IEEow5V/eCgKiknfq5G2X4ULb+iKvI2vwl9STCeUpctUT3/q4nXVqg==}
+
'@atcute/lexicon-resolver@0.1.3':
+
resolution: {integrity: sha512-4AOS3KKm60GtBfl7ue/35xwZlylAuX5V2xmXnAmNoiN3vIauNkYawwRqgtni5q+EIV9R7p4D8tzkv58NaZ8fEQ==}
peerDependencies:
'@atcute/identity': ^1.1.0
'@atcute/identity-resolver': ^1.1.3
···
'@atcute/lexicons@1.2.2':
resolution: {integrity: sha512-bgEhJq5Z70/0TbK5sx+tAkrR8FsCODNiL2gUEvS5PuJfPxmFmRYNWaMGehxSPaXWpU2+Oa9ckceHiYbrItDTkA==}
+
'@atcute/mst@0.1.0':
+
resolution: {integrity: sha512-h+iDToKEnBpigk2DOHjSqY63vJtjYKUIztqu1CZ0P+I54wV2SrgoqAXAT1xrW6A1Iup8cjTv+U2H5WVG4KxPLw==}
+
'@atcute/multibase@1.1.6':
resolution: {integrity: sha512-HBxuCgYLKPPxETV0Rot4VP9e24vKl8JdzGCZOVsDaOXJgbRZoRIF67Lp0H/OgnJeH/Xpva8Z5ReoTNJE5dn3kg==}
'@atcute/oauth-browser-client@1.0.27':
resolution: {integrity: sha512-Ng1tCOTMLgFHHoIHXTtCZR1/ND62an1qxPX2kBoUzkxxd7iCP7IBYYqOiKyJYT5n1R4zS+s29hFS4t9mxXa5kQ==}
-
'@atcute/tangled@1.0.9':
-
resolution: {integrity: sha512-Nr/LyEe4To5Yz+3IwL2pExKr+AJ7tPMR2+3YNMKeWHvVm+UfMTd4PkwwwAI9fKvBv2qEJ3egE1mXefGW15sqDQ==}
+
'@atcute/repo@0.1.0':
+
resolution: {integrity: sha512-INiYAuma8dydBu7cqd2WVpcXh3mzhIepYBUqFWAK5MqMulPRLTRCc/9GW3G9pxYrOdlvLCVamG2Jf8XK0nuFEw==}
+
+
'@atcute/tangled@1.0.10':
+
resolution: {integrity: sha512-DGconZIN5TpLBah+aHGbWI1tMsL7XzyVEbr/fW4CbcLWYKICU6SAUZ0YnZ+5GvltjlORWHUy7hfftvoh4zodIA==}
'@atcute/tid@1.0.3':
resolution: {integrity: sha512-wfMJx1IMdnu0CZgWl0uR4JO2s6PGT1YPhpytD4ZHzEYKKQVuqV6Eb/7vieaVo1eYNMp2FrY67FZObeR7utRl2w==}
···
'@iconify/utils@2.3.0':
resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==}
-
'@isaacs/fs-minipass@4.0.1':
-
resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
-
engines: {node: '>=18.0.0'}
-
'@jridgewell/gen-mapping@0.3.13':
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
···
'@standard-schema/spec@1.0.0':
resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==}
-
'@tailwindcss/node@4.1.14':
-
resolution: {integrity: sha512-hpz+8vFk3Ic2xssIA3e01R6jkmsAhvkQdXlEbRTk6S10xDAtiQiM3FyvZVGsucefq764euO/b8WUW9ysLdThHw==}
+
'@tailwindcss/node@4.1.15':
+
resolution: {integrity: sha512-HF4+7QxATZWY3Jr8OlZrBSXmwT3Watj0OogeDvdUY/ByXJHQ+LBtqA2brDb3sBxYslIFx6UP94BJ4X6a4L9Bmw==}
-
'@tailwindcss/oxide-android-arm64@4.1.14':
-
resolution: {integrity: sha512-a94ifZrGwMvbdeAxWoSuGcIl6/DOP5cdxagid7xJv6bwFp3oebp7y2ImYsnZBMTwjn5Ev5xESvS3FFYUGgPODQ==}
+
'@tailwindcss/oxide-android-arm64@4.1.15':
+
resolution: {integrity: sha512-TkUkUgAw8At4cBjCeVCRMc/guVLKOU1D+sBPrHt5uVcGhlbVKxrCaCW9OKUIBv1oWkjh4GbunD/u/Mf0ql6kEA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [android]
-
'@tailwindcss/oxide-darwin-arm64@4.1.14':
-
resolution: {integrity: sha512-HkFP/CqfSh09xCnrPJA7jud7hij5ahKyWomrC3oiO2U9i0UjP17o9pJbxUN0IJ471GTQQmzwhp0DEcpbp4MZTA==}
+
'@tailwindcss/oxide-darwin-arm64@4.1.15':
+
resolution: {integrity: sha512-xt5XEJpn2piMSfvd1UFN6jrWXyaKCwikP4Pidcf+yfHTSzSpYhG3dcMktjNkQO3JiLCp+0bG0HoWGvz97K162w==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
-
'@tailwindcss/oxide-darwin-x64@4.1.14':
-
resolution: {integrity: sha512-eVNaWmCgdLf5iv6Qd3s7JI5SEFBFRtfm6W0mphJYXgvnDEAZ5sZzqmI06bK6xo0IErDHdTA5/t7d4eTfWbWOFw==}
+
'@tailwindcss/oxide-darwin-x64@4.1.15':
+
resolution: {integrity: sha512-TnWaxP6Bx2CojZEXAV2M01Yl13nYPpp0EtGpUrY+LMciKfIXiLL2r/SiSRpagE5Fp2gX+rflp/Os1VJDAyqymg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
-
'@tailwindcss/oxide-freebsd-x64@4.1.14':
-
resolution: {integrity: sha512-QWLoRXNikEuqtNb0dhQN6wsSVVjX6dmUFzuuiL09ZeXju25dsei2uIPl71y2Ic6QbNBsB4scwBoFnlBfabHkEw==}
+
'@tailwindcss/oxide-freebsd-x64@4.1.15':
+
resolution: {integrity: sha512-quISQDWqiB6Cqhjc3iWptXVZHNVENsWoI77L1qgGEHNIdLDLFnw3/AfY7DidAiiCIkGX/MjIdB3bbBZR/G2aJg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [freebsd]
-
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.14':
-
resolution: {integrity: sha512-VB4gjQni9+F0VCASU+L8zSIyjrLLsy03sjcR3bM0V2g4SNamo0FakZFKyUQ96ZVwGK4CaJsc9zd/obQy74o0Fw==}
+
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.15':
+
resolution: {integrity: sha512-ObG76+vPlab65xzVUQbExmDU9FIeYLQ5k2LrQdR2Ud6hboR+ZobXpDoKEYXf/uOezOfIYmy2Ta3w0ejkTg9yxg==}
engines: {node: '>= 10'}
cpu: [arm]
os: [linux]
-
'@tailwindcss/oxide-linux-arm64-gnu@4.1.14':
-
resolution: {integrity: sha512-qaEy0dIZ6d9vyLnmeg24yzA8XuEAD9WjpM5nIM1sUgQ/Zv7cVkharPDQcmm/t/TvXoKo/0knI3me3AGfdx6w1w==}
+
'@tailwindcss/oxide-linux-arm64-gnu@4.1.15':
+
resolution: {integrity: sha512-4WbBacRmk43pkb8/xts3wnOZMDKsPFyEH/oisCm2q3aLZND25ufvJKcDUpAu0cS+CBOL05dYa8D4U5OWECuH/Q==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
-
'@tailwindcss/oxide-linux-arm64-musl@4.1.14':
-
resolution: {integrity: sha512-ISZjT44s59O8xKsPEIesiIydMG/sCXoMBCqsphDm/WcbnuWLxxb+GcvSIIA5NjUw6F8Tex7s5/LM2yDy8RqYBQ==}
+
'@tailwindcss/oxide-linux-arm64-musl@4.1.15':
+
resolution: {integrity: sha512-AbvmEiteEj1nf42nE8skdHv73NoR+EwXVSgPY6l39X12Ex8pzOwwfi3Kc8GAmjsnsaDEbk+aj9NyL3UeyHcTLg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
-
'@tailwindcss/oxide-linux-x64-gnu@4.1.14':
-
resolution: {integrity: sha512-02c6JhLPJj10L2caH4U0zF8Hji4dOeahmuMl23stk0MU1wfd1OraE7rOloidSF8W5JTHkFdVo/O7uRUJJnUAJg==}
+
'@tailwindcss/oxide-linux-x64-gnu@4.1.15':
+
resolution: {integrity: sha512-+rzMVlvVgrXtFiS+ES78yWgKqpThgV19ISKD58Ck+YO5pO5KjyxLt7AWKsWMbY0R9yBDC82w6QVGz837AKQcHg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
-
'@tailwindcss/oxide-linux-x64-musl@4.1.14':
-
resolution: {integrity: sha512-TNGeLiN1XS66kQhxHG/7wMeQDOoL0S33x9BgmydbrWAb9Qw0KYdd8o1ifx4HOGDWhVmJ+Ul+JQ7lyknQFilO3Q==}
+
'@tailwindcss/oxide-linux-x64-musl@4.1.15':
+
resolution: {integrity: sha512-fPdEy7a8eQN9qOIK3Em9D3TO1z41JScJn8yxl/76mp4sAXFDfV4YXxsiptJcOwy6bGR+70ZSwFIZhTXzQeqwQg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
-
'@tailwindcss/oxide-wasm32-wasi@4.1.14':
-
resolution: {integrity: sha512-uZYAsaW/jS/IYkd6EWPJKW/NlPNSkWkBlaeVBi/WsFQNP05/bzkebUL8FH1pdsqx4f2fH/bWFcUABOM9nfiJkQ==}
+
'@tailwindcss/oxide-wasm32-wasi@4.1.15':
+
resolution: {integrity: sha512-sJ4yd6iXXdlgIMfIBXuVGp/NvmviEoMVWMOAGxtxhzLPp9LOj5k0pMEMZdjeMCl4C6Up+RM8T3Zgk+BMQ0bGcQ==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
bundledDependencies:
···
- '@emnapi/wasi-threads'
- tslib
-
'@tailwindcss/oxide-win32-arm64-msvc@4.1.14':
-
resolution: {integrity: sha512-Az0RnnkcvRqsuoLH2Z4n3JfAef0wElgzHD5Aky/e+0tBUxUhIeIqFBTMNQvmMRSP15fWwmvjBxZ3Q8RhsDnxAA==}
+
'@tailwindcss/oxide-win32-arm64-msvc@4.1.15':
+
resolution: {integrity: sha512-sJGE5faXnNQ1iXeqmRin7Ds/ru2fgCiaQZQQz3ZGIDtvbkeV85rAZ0QJFMDg0FrqsffZG96H1U9AQlNBRLsHVg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
-
'@tailwindcss/oxide-win32-x64-msvc@4.1.14':
-
resolution: {integrity: sha512-ttblVGHgf68kEE4om1n/n44I0yGPkCPbLsqzjvybhpwa6mKKtgFfAzy6btc3HRmuW7nHe0OOrSeNP9sQmmH9XA==}
+
'@tailwindcss/oxide-win32-x64-msvc@4.1.15':
+
resolution: {integrity: sha512-NLeHE7jUV6HcFKS504bpOohyi01zPXi2PXmjFfkzTph8xRxDdxkRsXm/xDO5uV5K3brrE1cCwbUYmFUSHR3u1w==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
-
'@tailwindcss/oxide@4.1.14':
-
resolution: {integrity: sha512-23yx+VUbBwCg2x5XWdB8+1lkPajzLmALEfMb51zZUBYaYVPDQvBSD/WYDqiVyBIo2BZFa3yw1Rpy3G2Jp+K0dw==}
+
'@tailwindcss/oxide@4.1.15':
+
resolution: {integrity: sha512-krhX+UOOgnsUuks2SR7hFafXmLQrKxB4YyRTERuCE59JlYL+FawgaAlSkOYmDRJdf1Q+IFNDMl9iRnBW7QBDfQ==}
engines: {node: '>= 10'}
-
'@tailwindcss/vite@4.1.14':
-
resolution: {integrity: sha512-BoFUoU0XqgCUS1UXWhmDJroKKhNXeDzD7/XwabjkDIAbMnc4ULn5e2FuEuBbhZ6ENZoSYzKlzvZ44Yr6EUDUSA==}
+
'@tailwindcss/vite@4.1.15':
+
resolution: {integrity: sha512-B6s60MZRTUil+xKoZoGe6i0Iar5VuW+pmcGlda2FX+guDuQ1G1sjiIy1W0frneVpeL/ZjZ4KEgWZHNrIm++2qA==}
peerDependencies:
vite: ^5.2.0 || ^6 || ^7
···
solid-js:
optional: true
-
baseline-browser-mapping@2.8.17:
-
resolution: {integrity: sha512-j5zJcx6golJYTG6c05LUZ3Z8Gi+M62zRT/ycz4Xq4iCOdpcxwg7ngEYD4KA0eWZC7U17qh/Smq8bYbACJ0ipBA==}
+
baseline-browser-mapping@2.8.18:
+
resolution: {integrity: sha512-UYmTpOBwgPScZpS4A+YbapwWuBwasxvO/2IOHArSsAhL/+ZdmATBXTex3t+l2hXwLVYK382ibr/nKoY9GKe86w==}
hasBin: true
browserslist@4.26.3:
···
caniuse-lite@1.0.30001751:
resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==}
-
-
chownr@3.0.0:
-
resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
-
engines: {node: '>=18'}
codemirror@6.0.2:
resolution: {integrity: sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==}
···
kolorist@1.8.0:
resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
-
lightningcss-darwin-arm64@1.30.1:
-
resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==}
+
lightningcss-android-arm64@1.30.2:
+
resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==}
+
engines: {node: '>= 12.0.0'}
+
cpu: [arm64]
+
os: [android]
+
+
lightningcss-darwin-arm64@1.30.2:
+
resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [darwin]
-
lightningcss-darwin-x64@1.30.1:
-
resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==}
+
lightningcss-darwin-x64@1.30.2:
+
resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [darwin]
-
lightningcss-freebsd-x64@1.30.1:
-
resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==}
+
lightningcss-freebsd-x64@1.30.2:
+
resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [freebsd]
-
lightningcss-linux-arm-gnueabihf@1.30.1:
-
resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==}
+
lightningcss-linux-arm-gnueabihf@1.30.2:
+
resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==}
engines: {node: '>= 12.0.0'}
cpu: [arm]
os: [linux]
-
lightningcss-linux-arm64-gnu@1.30.1:
-
resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==}
+
lightningcss-linux-arm64-gnu@1.30.2:
+
resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
-
lightningcss-linux-arm64-musl@1.30.1:
-
resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==}
+
lightningcss-linux-arm64-musl@1.30.2:
+
resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
-
lightningcss-linux-x64-gnu@1.30.1:
-
resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==}
+
lightningcss-linux-x64-gnu@1.30.2:
+
resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
-
lightningcss-linux-x64-musl@1.30.1:
-
resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==}
+
lightningcss-linux-x64-musl@1.30.2:
+
resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
-
lightningcss-win32-arm64-msvc@1.30.1:
-
resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==}
+
lightningcss-win32-arm64-msvc@1.30.2:
+
resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [win32]
-
lightningcss-win32-x64-msvc@1.30.1:
-
resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==}
+
lightningcss-win32-x64-msvc@1.30.2:
+
resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [win32]
-
lightningcss@1.30.1:
-
resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==}
+
lightningcss@1.30.2:
+
resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==}
engines: {node: '>= 12.0.0'}
local-pkg@1.1.2:
···
resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==}
engines: {node: '>=12.13'}
-
minipass@7.1.2:
-
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
-
engines: {node: '>=16 || 14 >=14.17'}
-
-
minizlib@3.1.0:
-
resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==}
-
engines: {node: '>= 18'}
-
mlly@1.8.0:
resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
···
node-releases@2.0.25:
resolution: {integrity: sha512-4auku8B/vw5psvTiiN9j1dAOsXvMoGqJuKJcR+dTdqiXEK20mMTk1UEo3HS16LeGQsVG6+qKTPM9u/qQ2LqATA==}
-
package-manager-detector@1.4.1:
-
resolution: {integrity: sha512-dSMiVLBEA4XaNJ0PRb4N5cV/SEP4BWrWZKBmfF+OUm2pQTiZ6DDkKeWaltwu3JRhLoy59ayIkJ00cx9K9CaYTg==}
+
package-manager-detector@1.5.0:
+
resolution: {integrity: sha512-uBj69dVlYe/+wxj8JOpr97XfsxH/eumMt6HqjNTmJDf/6NO9s+0uxeOneIz3AsPt2m6y9PqzDzd3ATcU17MNfw==}
parse5@7.3.0:
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
···
style-mod@4.1.3:
resolution: {integrity: sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==}
-
tailwindcss@4.1.14:
-
resolution: {integrity: sha512-b7pCxjGO98LnxVkKjaZSDeNuljC4ueKUddjENJOADtubtdo8llTaJy7HwBMeLNSSo2N5QIAgklslK1+Ir8r6CA==}
+
tailwindcss@4.1.15:
+
resolution: {integrity: sha512-k2WLnWkYFkdpRv+Oby3EBXIyQC8/s1HOFMBUViwtAh6Z5uAozeUSMQlIsn/c6Q2iJzqG6aJT3wdPaRNj70iYxQ==}
tapable@2.3.0:
resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
engines: {node: '>=6'}
-
-
tar@7.5.1:
-
resolution: {integrity: sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==}
-
engines: {node: '>=18'}
tinyexec@1.0.1:
resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==}
···
'@testing-library/jest-dom':
optional: true
-
vite@7.1.10:
-
resolution: {integrity: sha512-CmuvUBzVJ/e3HGxhg6cYk88NGgTnBoOo7ogtfJJ0fefUWAxN/WDSUa50o+oVBxuIhO8FoEZW0j2eW7sfjs5EtA==}
+
vite@7.1.11:
+
resolution: {integrity: sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
···
yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
-
yallist@5.0.0:
-
resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
-
engines: {node: '>=18'}
-
yocto-queue@1.2.1:
resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==}
engines: {node: '>=12.20'}
···
'@antfu/install-pkg@1.1.0':
dependencies:
-
package-manager-detector: 1.4.1
+
package-manager-detector: 1.5.0
tinyexec: 1.0.1
'@antfu/utils@8.1.1': {}
-
'@atcute/atproto@3.1.7':
+
'@atcute/atproto@3.1.8':
dependencies:
'@atcute/lexicons': 1.2.2
-
'@atcute/bluesky@3.2.7':
+
'@atcute/bluesky@3.2.8':
dependencies:
-
'@atcute/atproto': 3.1.7
+
'@atcute/atproto': 3.1.8
'@atcute/lexicons': 1.2.2
'@atcute/car@3.1.3':
dependencies:
'@atcute/cbor': 2.2.7
-
'@atcute/cid': 2.2.5
+
'@atcute/cid': 2.2.6
'@atcute/uint8array': 1.0.5
'@atcute/varint': 1.0.3
yocto-queue: 1.2.1
+
'@atcute/car@5.0.0':
+
dependencies:
+
'@atcute/cbor': 2.2.7
+
'@atcute/cid': 2.2.6
+
'@atcute/uint8array': 1.0.5
+
'@atcute/varint': 1.0.3
+
'@atcute/cbor@2.2.7':
dependencies:
-
'@atcute/cid': 2.2.5
+
'@atcute/cid': 2.2.6
'@atcute/multibase': 1.1.6
'@atcute/uint8array': 1.0.5
-
'@atcute/cid@2.2.5':
+
'@atcute/cid@2.2.6':
dependencies:
'@atcute/multibase': 1.1.6
'@atcute/uint8array': 1.0.5
···
'@atcute/did-plc@0.1.7':
dependencies:
'@atcute/cbor': 2.2.7
-
'@atcute/cid': 2.2.5
+
'@atcute/cid': 2.2.6
'@atcute/crypto': 2.2.5
'@atcute/identity': 1.1.1
'@atcute/lexicons': 1.2.2
···
'@atcute/lexicons': 1.2.2
'@badrap/valita': 0.4.6
-
'@atcute/leaflet@1.0.10':
+
'@atcute/leaflet@1.0.11':
dependencies:
-
'@atcute/atproto': 3.1.7
+
'@atcute/atproto': 3.1.8
'@atcute/lexicons': 1.2.2
'@atcute/lexicon-doc@1.1.3':
dependencies:
'@badrap/valita': 0.4.6
-
'@atcute/lexicon-resolver@0.1.2(@atcute/identity-resolver@1.1.4(@atcute/identity@1.1.1))(@atcute/identity@1.1.1)':
+
'@atcute/lexicon-resolver@0.1.3(@atcute/identity-resolver@1.1.4(@atcute/identity@1.1.1))(@atcute/identity@1.1.1)':
dependencies:
-
'@atcute/car': 3.1.3
+
'@atcute/car': 5.0.0
'@atcute/cbor': 2.2.7
-
'@atcute/cid': 2.2.5
+
'@atcute/cid': 2.2.6
'@atcute/crypto': 2.2.5
'@atcute/identity': 1.1.1
'@atcute/identity-resolver': 1.1.4(@atcute/identity@1.1.1)
'@atcute/lexicon-doc': 1.1.3
'@atcute/lexicons': 1.2.2
+
'@atcute/repo': 0.1.0
'@atcute/uint8array': 1.0.5
'@atcute/util-fetch': 1.0.3
'@badrap/valita': 0.4.6
···
'@standard-schema/spec': 1.0.0
esm-env: 1.2.2
+
'@atcute/mst@0.1.0':
+
dependencies:
+
'@atcute/cbor': 2.2.7
+
'@atcute/cid': 2.2.6
+
'@atcute/uint8array': 1.0.5
+
'@atcute/multibase@1.1.6':
dependencies:
'@atcute/uint8array': 1.0.5
···
'@atcute/uint8array': 1.0.5
nanoid: 5.1.6
-
'@atcute/tangled@1.0.9':
+
'@atcute/repo@0.1.0':
+
dependencies:
+
'@atcute/car': 5.0.0
+
'@atcute/cbor': 2.2.7
+
'@atcute/cid': 2.2.6
+
'@atcute/crypto': 2.2.5
+
'@atcute/lexicons': 1.2.2
+
'@atcute/mst': 0.1.0
+
'@atcute/uint8array': 1.0.5
+
+
'@atcute/tangled@1.0.10':
dependencies:
-
'@atcute/atproto': 3.1.7
+
'@atcute/atproto': 3.1.8
'@atcute/lexicons': 1.2.2
'@atcute/tid@1.0.3': {}
···
dependencies:
'@iconify/types': 2.0.0
-
'@iconify/tailwind4@1.0.6(tailwindcss@4.1.14)':
+
'@iconify/tailwind4@1.0.6(tailwindcss@4.1.15)':
dependencies:
'@iconify/types': 2.0.0
'@iconify/utils': 2.3.0
-
tailwindcss: 4.1.14
+
tailwindcss: 4.1.15
transitivePeerDependencies:
- supports-color
···
mlly: 1.8.0
transitivePeerDependencies:
- supports-color
-
-
'@isaacs/fs-minipass@4.0.1':
-
dependencies:
-
minipass: 7.1.2
'@jridgewell/gen-mapping@0.3.13':
dependencies:
···
'@standard-schema/spec@1.0.0': {}
-
'@tailwindcss/node@4.1.14':
+
'@tailwindcss/node@4.1.15':
dependencies:
'@jridgewell/remapping': 2.3.5
enhanced-resolve: 5.18.3
jiti: 2.6.1
-
lightningcss: 1.30.1
+
lightningcss: 1.30.2
magic-string: 0.30.19
source-map-js: 1.2.1
-
tailwindcss: 4.1.14
+
tailwindcss: 4.1.15
-
'@tailwindcss/oxide-android-arm64@4.1.14':
+
'@tailwindcss/oxide-android-arm64@4.1.15':
optional: true
-
'@tailwindcss/oxide-darwin-arm64@4.1.14':
+
'@tailwindcss/oxide-darwin-arm64@4.1.15':
optional: true
-
'@tailwindcss/oxide-darwin-x64@4.1.14':
+
'@tailwindcss/oxide-darwin-x64@4.1.15':
optional: true
-
'@tailwindcss/oxide-freebsd-x64@4.1.14':
+
'@tailwindcss/oxide-freebsd-x64@4.1.15':
optional: true
-
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.14':
+
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.15':
optional: true
-
'@tailwindcss/oxide-linux-arm64-gnu@4.1.14':
+
'@tailwindcss/oxide-linux-arm64-gnu@4.1.15':
optional: true
-
'@tailwindcss/oxide-linux-arm64-musl@4.1.14':
+
'@tailwindcss/oxide-linux-arm64-musl@4.1.15':
optional: true
-
'@tailwindcss/oxide-linux-x64-gnu@4.1.14':
+
'@tailwindcss/oxide-linux-x64-gnu@4.1.15':
optional: true
-
'@tailwindcss/oxide-linux-x64-musl@4.1.14':
+
'@tailwindcss/oxide-linux-x64-musl@4.1.15':
optional: true
-
'@tailwindcss/oxide-wasm32-wasi@4.1.14':
+
'@tailwindcss/oxide-wasm32-wasi@4.1.15':
optional: true
-
'@tailwindcss/oxide-win32-arm64-msvc@4.1.14':
+
'@tailwindcss/oxide-win32-arm64-msvc@4.1.15':
optional: true
-
'@tailwindcss/oxide-win32-x64-msvc@4.1.14':
+
'@tailwindcss/oxide-win32-x64-msvc@4.1.15':
optional: true
-
'@tailwindcss/oxide@4.1.14':
-
dependencies:
-
detect-libc: 2.1.2
-
tar: 7.5.1
+
'@tailwindcss/oxide@4.1.15':
optionalDependencies:
-
'@tailwindcss/oxide-android-arm64': 4.1.14
-
'@tailwindcss/oxide-darwin-arm64': 4.1.14
-
'@tailwindcss/oxide-darwin-x64': 4.1.14
-
'@tailwindcss/oxide-freebsd-x64': 4.1.14
-
'@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.14
-
'@tailwindcss/oxide-linux-arm64-gnu': 4.1.14
-
'@tailwindcss/oxide-linux-arm64-musl': 4.1.14
-
'@tailwindcss/oxide-linux-x64-gnu': 4.1.14
-
'@tailwindcss/oxide-linux-x64-musl': 4.1.14
-
'@tailwindcss/oxide-wasm32-wasi': 4.1.14
-
'@tailwindcss/oxide-win32-arm64-msvc': 4.1.14
-
'@tailwindcss/oxide-win32-x64-msvc': 4.1.14
+
'@tailwindcss/oxide-android-arm64': 4.1.15
+
'@tailwindcss/oxide-darwin-arm64': 4.1.15
+
'@tailwindcss/oxide-darwin-x64': 4.1.15
+
'@tailwindcss/oxide-freebsd-x64': 4.1.15
+
'@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.15
+
'@tailwindcss/oxide-linux-arm64-gnu': 4.1.15
+
'@tailwindcss/oxide-linux-arm64-musl': 4.1.15
+
'@tailwindcss/oxide-linux-x64-gnu': 4.1.15
+
'@tailwindcss/oxide-linux-x64-musl': 4.1.15
+
'@tailwindcss/oxide-wasm32-wasi': 4.1.15
+
'@tailwindcss/oxide-win32-arm64-msvc': 4.1.15
+
'@tailwindcss/oxide-win32-x64-msvc': 4.1.15
-
'@tailwindcss/vite@4.1.14(vite@7.1.10(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.19.2))':
+
'@tailwindcss/vite@4.1.15(vite@7.1.11(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.2))':
dependencies:
-
'@tailwindcss/node': 4.1.14
-
'@tailwindcss/oxide': 4.1.14
-
tailwindcss: 4.1.14
-
vite: 7.1.10(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.19.2)
+
'@tailwindcss/node': 4.1.15
+
'@tailwindcss/oxide': 4.1.15
+
tailwindcss: 4.1.15
+
vite: 7.1.11(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.2)
'@types/babel__core@7.20.5':
dependencies:
···
optionalDependencies:
solid-js: 1.9.9
-
baseline-browser-mapping@2.8.17: {}
+
baseline-browser-mapping@2.8.18: {}
browserslist@4.26.3:
dependencies:
-
baseline-browser-mapping: 2.8.17
+
baseline-browser-mapping: 2.8.18
caniuse-lite: 1.0.30001751
electron-to-chromium: 1.5.237
node-releases: 2.0.25
update-browserslist-db: 1.1.3(browserslist@4.26.3)
caniuse-lite@1.0.30001751: {}
-
-
chownr@3.0.0: {}
codemirror@6.0.2:
dependencies:
···
kolorist@1.8.0: {}
-
lightningcss-darwin-arm64@1.30.1:
+
lightningcss-android-arm64@1.30.2:
optional: true
-
lightningcss-darwin-x64@1.30.1:
+
lightningcss-darwin-arm64@1.30.2:
optional: true
-
lightningcss-freebsd-x64@1.30.1:
+
lightningcss-darwin-x64@1.30.2:
optional: true
-
lightningcss-linux-arm-gnueabihf@1.30.1:
+
lightningcss-freebsd-x64@1.30.2:
optional: true
-
lightningcss-linux-arm64-gnu@1.30.1:
+
lightningcss-linux-arm-gnueabihf@1.30.2:
optional: true
-
lightningcss-linux-arm64-musl@1.30.1:
+
lightningcss-linux-arm64-gnu@1.30.2:
optional: true
-
lightningcss-linux-x64-gnu@1.30.1:
+
lightningcss-linux-arm64-musl@1.30.2:
optional: true
-
lightningcss-linux-x64-musl@1.30.1:
+
lightningcss-linux-x64-gnu@1.30.2:
optional: true
-
lightningcss-win32-arm64-msvc@1.30.1:
+
lightningcss-linux-x64-musl@1.30.2:
optional: true
-
lightningcss-win32-x64-msvc@1.30.1:
+
lightningcss-win32-arm64-msvc@1.30.2:
optional: true
-
lightningcss@1.30.1:
+
lightningcss-win32-x64-msvc@1.30.2:
+
optional: true
+
+
lightningcss@1.30.2:
dependencies:
detect-libc: 2.1.2
optionalDependencies:
-
lightningcss-darwin-arm64: 1.30.1
-
lightningcss-darwin-x64: 1.30.1
-
lightningcss-freebsd-x64: 1.30.1
-
lightningcss-linux-arm-gnueabihf: 1.30.1
-
lightningcss-linux-arm64-gnu: 1.30.1
-
lightningcss-linux-arm64-musl: 1.30.1
-
lightningcss-linux-x64-gnu: 1.30.1
-
lightningcss-linux-x64-musl: 1.30.1
-
lightningcss-win32-arm64-msvc: 1.30.1
-
lightningcss-win32-x64-msvc: 1.30.1
+
lightningcss-android-arm64: 1.30.2
+
lightningcss-darwin-arm64: 1.30.2
+
lightningcss-darwin-x64: 1.30.2
+
lightningcss-freebsd-x64: 1.30.2
+
lightningcss-linux-arm-gnueabihf: 1.30.2
+
lightningcss-linux-arm64-gnu: 1.30.2
+
lightningcss-linux-arm64-musl: 1.30.2
+
lightningcss-linux-x64-gnu: 1.30.2
+
lightningcss-linux-x64-musl: 1.30.2
+
lightningcss-win32-arm64-msvc: 1.30.2
+
lightningcss-win32-x64-msvc: 1.30.2
local-pkg@1.1.2:
dependencies:
···
merge-anything@5.1.7:
dependencies:
is-what: 4.1.16
-
-
minipass@7.1.2: {}
-
-
minizlib@3.1.0:
-
dependencies:
-
minipass: 7.1.2
mlly@1.8.0:
dependencies:
···
node-releases@2.0.25: {}
-
package-manager-detector@1.4.1: {}
+
package-manager-detector@1.5.0: {}
parse5@7.3.0:
dependencies:
···
style-mod@4.1.3: {}
-
tailwindcss@4.1.14: {}
+
tailwindcss@4.1.15: {}
tapable@2.3.0: {}
-
-
tar@7.5.1:
-
dependencies:
-
'@isaacs/fs-minipass': 4.0.1
-
chownr: 3.0.0
-
minipass: 7.1.2
-
minizlib: 3.1.0
-
yallist: 5.0.0
tinyexec@1.0.1: {}
···
validate-html-nesting@1.2.3: {}
-
vite-plugin-solid@2.11.9(solid-js@1.9.9)(vite@7.1.10(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.19.2)):
+
vite-plugin-solid@2.11.9(solid-js@1.9.9)(vite@7.1.11(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.2)):
dependencies:
'@babel/core': 7.28.4
'@types/babel__core': 7.20.5
···
merge-anything: 5.1.7
solid-js: 1.9.9
solid-refresh: 0.6.3(solid-js@1.9.9)
-
vite: 7.1.10(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.19.2)
-
vitefu: 1.1.1(vite@7.1.10(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.19.2))
+
vite: 7.1.11(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.2)
+
vitefu: 1.1.1(vite@7.1.11(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.2))
transitivePeerDependencies:
- supports-color
-
vite@7.1.10(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.19.2):
+
vite@7.1.11(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.2):
dependencies:
esbuild: 0.25.11
fdir: 6.5.0(picomatch@4.0.3)
···
'@types/node': 22.13.1
fsevents: 2.3.3
jiti: 2.6.1
-
lightningcss: 1.30.1
+
lightningcss: 1.30.2
tsx: 4.19.2
-
vitefu@1.1.1(vite@7.1.10(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.19.2)):
+
vitefu@1.1.1(vite@7.1.11(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.2)):
optionalDependencies:
-
vite: 7.1.10(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.19.2)
+
vite: 7.1.11(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.2)
w3c-keyname@2.2.8: {}
yallist@3.1.1: {}
-
-
yallist@5.0.0: {}
yocto-queue@1.2.1: {}
+2 -2
src/components/account.tsx
···
return (
<>
<Modal open={openManager()} onClose={() => setOpenManager(false)}>
-
<div class="dark:bg-dark-300 dark:shadow-dark-700 absolute top-16 left-[50%] w-[22rem] -translate-x-1/2 rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 p-4 shadow-md transition-opacity duration-200 dark:border-neutral-700 starting:opacity-0">
+
<div class="dark:bg-dark-300 dark:shadow-dark-700 absolute top-16 left-[50%] w-88 -translate-x-1/2 rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 p-4 shadow-md transition-opacity duration-200 dark:border-neutral-700 starting:opacity-0">
<div class="mb-2 px-1 font-semibold">
<span>Manage accounts</span>
</div>
-
<div class="mb-3 max-h-[20rem] overflow-y-auto md:max-h-[25rem]">
+
<div class="mb-3 max-h-80 overflow-y-auto md:max-h-100">
<For each={Object.keys(sessions)}>
{(did) => (
<div class="flex items-center">
+4 -4
src/components/create.tsx
···
<div
data-draggable
classList={{
-
"dark:bg-dark-300 dark:shadow-dark-700 pointer-events-auto absolute top-16 left-[50%] w-screen -translate-x-1/2 cursor-grab rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 p-4 shadow-md transition-opacity duration-200 sm:w-xl lg:w-[48rem] dark:border-neutral-700 starting:opacity-0": true,
+
"dark:bg-dark-300 dark:shadow-dark-700 pointer-events-auto absolute top-16 left-[50%] w-screen -translate-x-1/2 cursor-grab rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 p-4 shadow-md transition-opacity duration-200 sm:w-xl lg:w-3xl dark:border-neutral-700 starting:opacity-0": true,
"opacity-60 hover:opacity-100": nonBlocking(),
}}
ref={dragBox}
···
<div class="flex flex-wrap items-center gap-1 text-sm">
<span>at://</span>
<select
-
class="dark:bg-dark-100 dark:shadow-dark-700 max-w-[10rem] truncate rounded-lg border-[0.5px] border-neutral-300 bg-white px-1 py-1 shadow-xs select-none focus:outline-[1px] focus:outline-neutral-600 dark:border-neutral-600 dark:focus:outline-neutral-400"
+
class="dark:bg-dark-100 dark:shadow-dark-700 max-w-40 truncate rounded-lg border-[0.5px] border-neutral-300 bg-white px-1 py-1 shadow-xs select-none focus:outline-[1px] focus:outline-neutral-600 dark:border-neutral-600 dark:focus:outline-neutral-400"
name="repo"
id="repo"
>
···
id="collection"
name="collection"
placeholder="Collection (default: $type)"
-
class="w-[10rem] placeholder:text-xs lg:w-[13rem]"
+
class="w-40 placeholder:text-xs lg:w-52"
/>
<span>/</span>
<TextInput
id="rkey"
name="rkey"
placeholder="Record key (default: TID)"
-
class="w-[10rem] placeholder:text-xs lg:w-[13rem]"
+
class="w-40 placeholder:text-xs lg:w-52"
/>
</div>
</Show>
+1 -1
src/components/json.tsx
···
<span class="flex gap-x-1">
<Show when={blob.mimeType.startsWith("image/") && !hide()}>
<img
-
class="h-auto max-h-[16rem] max-w-[16rem] object-contain"
+
class="h-auto max-h-64 max-w-[16rem] object-contain"
src={`https://${pds()}/xrpc/com.atproto.sync.getBlob?did=${repo}&cid=${blob.ref.$link}`}
/>
</Show>
+1 -1
src/components/navbar.tsx
···
return (
<nav class="flex w-full flex-col px-2 text-sm wrap-anywhere sm:text-base">
<div class="relative flex items-center justify-between gap-1">
-
<div class="flex min-h-[1.25rem] basis-full items-center gap-2 sm:min-h-[1.5rem]">
+
<div class="flex min-h-5 basis-full items-center gap-2 sm:min-h-6">
<Tooltip text="PDS">
<span class="iconify lucide--hard-drive shrink-0"></span>
</Tooltip>
+1 -1
src/components/search.tsx
···
return (
<>
<Modal open={openList()} onClose={() => setOpenList(false)}>
-
<div class="dark:bg-dark-300 dark:shadow-dark-700 absolute top-16 left-[50%] w-[22rem] -translate-x-1/2 rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 p-4 shadow-md transition-opacity duration-200 sm:w-[26rem] dark:border-neutral-700 starting:opacity-0">
+
<div class="dark:bg-dark-300 dark:shadow-dark-700 absolute top-16 left-[50%] w-88 -translate-x-1/2 rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 p-4 shadow-md transition-opacity duration-200 sm:w-104 dark:border-neutral-700 starting:opacity-0">
<div class="mb-2 flex items-center gap-1 font-semibold">
<span class="iconify lucide--link"></span>
<span>Supported URLs</span>
+1 -1
src/components/video-player.tsx
···
});
return (
-
<video ref={video} class="max-h-[20rem] max-w-[20rem]" controls playsinline>
+
<video ref={video} class="max-h-80 max-w-[20rem]" controls playsinline>
<source type="video/mp4" />
</video>
);
+1 -1
src/layout.tsx
···
</Show>
<Show keyed when={location.pathname}>
<ErrorBoundary
-
fallback={(err) => <div class="mt-3 break-words">Error: {err.message}</div>}
+
fallback={(err) => <div class="mt-3 wrap-break-word">Error: {err.message}</div>}
>
<Suspense
fallback={
-306
src/utils/verify.ts
···
-
import * as CAR from "@atcute/car";
-
import { CarReader } from "@atcute/car/v4";
-
import * as CBOR from "@atcute/cbor";
-
import * as CID from "@atcute/cid";
-
import { Client } from "@atcute/client";
-
import { type FoundPublicKey, getPublicKeyFromDidController, verifySig } from "@atcute/crypto";
-
import { type DidDocument, getAtprotoVerificationMaterial } from "@atcute/identity";
-
import { Did } from "@atcute/lexicons";
-
import { toSha256 } from "@atcute/uint8array";
-
-
import { type AddressedAtUri, parseAddressedAtUri } from "./types/at-uri";
-
-
export interface VerifyError {
-
message: string;
-
detail?: unknown;
-
}
-
-
export interface VerifyResult {
-
errors: VerifyError[];
-
}
-
-
export interface VerifyOptions {
-
rpc: Client;
-
uri: string;
-
cid: string;
-
record: unknown;
-
didDoc: DidDocument;
-
}
-
-
export const verifyRecord = async (opts: VerifyOptions): Promise<VerifyResult> => {
-
const errors: VerifyError[] = [];
-
-
// verify cid can be parsed
-
try {
-
CID.fromString(opts.cid);
-
} catch (e) {
-
errors.push({ message: `provided cid is invalid`, detail: e });
-
}
-
-
// verify record content matches cid
-
let cbor: Uint8Array;
-
{
-
cbor = CBOR.encode(opts.record);
-
-
const cid = await CID.create(CID.CODEC_DCBOR, cbor);
-
const cidString = CID.toString(cid);
-
-
if (cidString !== opts.cid) {
-
errors.push({ message: `record content does not match cid` });
-
}
-
}
-
-
// verify at-uri is valid
-
let uri: AddressedAtUri;
-
try {
-
uri = parseAddressedAtUri(opts.uri);
-
-
if (uri.repo !== opts.didDoc.id) {
-
errors.push({ message: `repo in at-uri does not match did document` });
-
}
-
} catch (err) {
-
errors.push({ message: `provided at-uri is invalid`, detail: err });
-
return { errors };
-
}
-
-
// grab public key from did document
-
let publicKey: FoundPublicKey;
-
try {
-
const controller = getAtprotoVerificationMaterial(opts.didDoc);
-
if (!controller) {
-
errors.push({
-
message: `did document does not contain verification material`,
-
});
-
return { errors };
-
}
-
-
publicKey = getPublicKeyFromDidController(controller);
-
} catch (err) {
-
errors.push({
-
message: `failed to get public key from did document`,
-
detail: err,
-
});
-
return { errors };
-
}
-
-
// grab the raw record blocks from the pds
-
let car: Uint8Array;
-
const { ok, data } = await opts.rpc.get("com.atproto.sync.getRecord", {
-
params: {
-
did: opts.didDoc.id as Did,
-
collection: uri.collection,
-
rkey: uri.rkey,
-
},
-
as: "bytes",
-
});
-
if (!ok) {
-
errors.push({ message: `failed to fetch car from pds`, detail: data.error });
-
return { errors };
-
} else {
-
car = data;
-
}
-
-
// read the car
-
let blockmap: CAR.BlockMap;
-
let commit: CAR.Commit;
-
-
try {
-
const reader = CarReader.fromUint8Array(car);
-
if (reader.header.data.roots.length !== 1) {
-
errors.push({ message: `car must have exactly one root` });
-
return { errors };
-
}
-
-
blockmap = new Map();
-
for (const entry of reader) {
-
const cidString = CID.toString(entry.cid);
-
-
// Verify that `bytes` matches its associated CID
-
const expectedCid = CID.toString(await CID.create(entry.cid.codec as 85 | 113, entry.bytes));
-
if (cidString !== expectedCid) {
-
errors.push({
-
message: `cid does not match bytes`,
-
detail: { cid: cidString, expectedCid },
-
});
-
}
-
-
blockmap.set(cidString, entry);
-
}
-
-
if (blockmap.size === 0) {
-
errors.push({ message: `car must have at least one block` });
-
return { errors };
-
}
-
-
commit = CAR.readBlock(blockmap, reader.header.data.roots[0], CAR.isCommit);
-
} catch (err) {
-
errors.push({ message: `failed to read car`, detail: err });
-
return { errors };
-
}
-
-
// verify did in commit matches the did in the at-uri
-
if (commit.did !== opts.didDoc.id) {
-
errors.push({ message: `did in commit does not match did document` });
-
}
-
-
// verify signature contained in commit is valid
-
{
-
const { sig, ...unsigned } = commit;
-
-
const data = CBOR.encode(unsigned);
-
const valid = await verifySig(
-
publicKey,
-
CBOR.fromBytes(sig) as Uint8Array<ArrayBuffer>,
-
data as Uint8Array<ArrayBuffer>,
-
);
-
-
if (!valid) {
-
errors.push({ message: `signature verification failed` });
-
}
-
}
-
-
// verify the commit is a valid commit
-
try {
-
const result = await dfs(blockmap, commit.data.$link, opts.cid);
-
if (!result.found) {
-
errors.push({ message: `could not find record in car` });
-
}
-
} catch (err) {
-
errors.push({ message: `failed to iterate over car`, detail: err });
-
}
-
-
return { errors };
-
};
-
-
interface DfsResult {
-
found: boolean;
-
min?: string;
-
max?: string;
-
depth?: number;
-
}
-
-
const encoder = new TextEncoder();
-
const decoder = new TextDecoder();
-
-
const dfs = async (
-
blockmap: CAR.BlockMap,
-
from: string | undefined,
-
target: string,
-
visited = new Set<string>(),
-
): Promise<DfsResult> => {
-
// If there's no starting point, return empty state
-
if (from == null) {
-
return { found: false };
-
}
-
-
// Check for cycles
-
{
-
if (visited.has(from)) {
-
throw new Error(`cycle detected; cid=${from}`);
-
}
-
-
visited.add(from);
-
}
-
-
// Get the block data
-
let node: CAR.MstNode;
-
{
-
const entry = blockmap.get(from);
-
if (!entry) {
-
return { found: false };
-
}
-
-
const decoded = CBOR.decode(entry.bytes);
-
if (!CAR.isMstNode(decoded)) {
-
throw new Error(`invalid mst node; cid=${from}`);
-
}
-
-
node = decoded;
-
}
-
-
// Recursively process the left child
-
const left = await dfs(blockmap, node.l?.$link, target, visited);
-
-
let key = "";
-
let found = left.found;
-
let depth: number | undefined;
-
let firstKey: string | undefined;
-
let lastKey: string | undefined;
-
-
// Process all entries in this node
-
for (const entry of node.e) {
-
if (entry.v.$link === target) {
-
found = true;
-
}
-
-
// Construct the key by truncating and appending
-
key = key.substring(0, entry.p) + decoder.decode(CBOR.fromBytes(entry.k));
-
-
// Calculate depth based on leading zeros in the hash
-
const keyDigest = await toSha256(encoder.encode(key) as Uint8Array<ArrayBuffer>);
-
let zeroCount = 0;
-
-
outerLoop: for (const byte of keyDigest) {
-
for (let bit = 7; bit >= 0; bit--) {
-
if (((byte >> bit) & 1) !== 0) {
-
break outerLoop;
-
}
-
zeroCount++;
-
}
-
}
-
-
const thisDepth = Math.floor(zeroCount / 2);
-
-
// Ensure consistent depth
-
if (depth === undefined) {
-
depth = thisDepth;
-
} else if (depth !== thisDepth) {
-
throw new Error(`node has entries with different depths; cid=${from}`);
-
}
-
-
// Track first and last keys
-
if (lastKey === undefined) {
-
firstKey = key;
-
lastKey = key;
-
}
-
-
// Check key ordering
-
if (lastKey > key) {
-
throw new Error(`entries are out of order; cid=${from}`);
-
}
-
-
// Process right child
-
const right = await dfs(blockmap, entry.t?.$link, target, visited);
-
-
// Check ordering with right subtree
-
if (right.min && right.min < lastKey) {
-
throw new Error(`entries are out of order; cid=${from}`);
-
}
-
-
found ||= right.found;
-
-
// Check depth ordering
-
if (left.depth !== undefined && left.depth >= thisDepth) {
-
throw new Error(`depths are out of order; cid=${from}`);
-
}
-
-
if (right.depth !== undefined && right.depth >= thisDepth) {
-
throw new Error(`depths are out of order; cid=${from}`);
-
}
-
-
// Update last key based on right subtree
-
lastKey = right.max ?? key;
-
}
-
-
// Check ordering with left subtree
-
if (left.max && firstKey && left.max > firstKey) {
-
throw new Error(`entries are out of order; cid=${from}`);
-
}
-
-
return {
-
found,
-
min: firstKey,
-
max: lastKey,
-
depth,
-
};
-
};
+3 -3
src/views/collection.tsx
···
<Show when={hover()}>
<span
ref={previewRef}
-
class={`dark:bg-dark-300 dark:shadow-dark-700 pointer-events-none absolute left-[50%] z-25 block max-h-[20rem] w-max max-w-sm -translate-x-1/2 overflow-hidden rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 p-2 text-xs whitespace-pre-wrap shadow-md sm:max-h-[28rem] lg:max-w-lg dark:border-neutral-700 ${isOverflowing(previewHeight()) ? "bottom-7" : "top-7"}`}
+
class={`dark:bg-dark-300 dark:shadow-dark-700 pointer-events-none absolute left-[50%] z-25 block max-h-80 w-max max-w-sm -translate-x-1/2 overflow-hidden rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 p-2 text-xs whitespace-pre-wrap shadow-md sm:max-h-112 lg:max-w-lg dark:border-neutral-700 ${isOverflowing(previewHeight()) ? "bottom-7" : "top-7"}`}
>
<JSONValue
data={props.record.record.value as JSONType}
···
</Show>
<span>{records.length} records</span>
</div>
-
<div class="flex w-[5rem] items-center justify-end">
+
<div class="flex w-20 items-center justify-end">
<Show when={cursor()}>
<Show when={!response.loading}>
<Button onClick={() => refetch()}>Load More</Button>
</Show>
<Show when={response.loading}>
-
<div class="iconify lucide--loader-circle w-[5rem] animate-spin text-xl" />
+
<div class="iconify lucide--loader-circle w-20 animate-spin text-xl" />
</Show>
</Show>
</div>
+2 -2
src/views/home.tsx
···
export const Home = () => {
return (
-
<div class="flex w-full flex-col gap-4 break-words">
+
<div class="flex w-full flex-col gap-4 wrap-break-word">
<div>
<div>
<span class="text-lg font-semibold">AT Protocol Explorer</span>
···
Made by{" "}
<a
href="https://juli.ee"
-
class="font-pecita relative after:absolute after:bottom-0 after:left-0 after:h-[1px] after:w-0 after:bg-current after:transition-[width] after:duration-300 after:ease-out hover:after:w-full"
+
class="font-pecita relative after:absolute after:bottom-0 after:left-0 after:h-px after:w-0 after:bg-current after:transition-[width] after:duration-300 after:ease-out hover:after:w-full"
>
Juliet
</a>{" "}
+6 -6
src/views/labels.tsx
···
</div>
</Show>
<Show when={cursor()}>
-
<div class="flex h-[2rem] w-[5.5rem] items-center justify-center text-nowrap">
+
<div class="flex h-8 w-22 items-center justify-center text-nowrap">
<Show when={!response.loading}>
<Button onClick={() => refetch()}>Load More</Button>
</Show>
···
<div class="flex items-center justify-between gap-2 pb-2">
<div class="flex flex-col">
<div class="flex items-center gap-x-2">
-
<div class="min-w-[4rem] font-semibold">URI</div>
+
<div class="min-w-16 font-semibold">URI</div>
<A
href={`/at://${label.uri.replace("at://", "")}`}
class="text-blue-400 hover:underline active:underline"
···
</div>
<Show when={label.cid}>
<div class="flex items-center gap-x-2">
-
<div class="min-w-[4rem] font-semibold">CID</div>
+
<div class="min-w-16 font-semibold">CID</div>
{label.cid}
</div>
</Show>
<div class="flex items-center gap-x-2">
-
<div class="min-w-[4rem] font-semibold">Label</div>
+
<div class="min-w-16 font-semibold">Label</div>
{label.val}
</div>
<div class="flex items-center gap-x-2">
-
<div class="min-w-[4rem] font-semibold">Created</div>
+
<div class="min-w-16 font-semibold">Created</div>
{localDateFromTimestamp(new Date(label.cts).getTime())}
</div>
<Show when={label.exp}>
{(exp) => (
<div class="flex items-center gap-x-2">
-
<div class="min-w-[4rem] font-semibold">Expires</div>
+
<div class="min-w-16 font-semibold">Expires</div>
{localDateFromTimestamp(new Date(exp()).getTime())}
</div>
)}
+1 -1
src/views/pds.tsx
···
<span class="iconify lucide--info"></span>
</button>
<Modal open={openInfo()} onClose={() => setOpenInfo(false)}>
-
<div class="dark:bg-dark-300 dark:shadow-dark-700 absolute top-70 left-[50%] w-max max-w-full -translate-x-1/2 rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 p-3 break-words shadow-md transition-opacity duration-200 sm:max-w-[32rem] dark:border-neutral-700 starting:opacity-0">
+
<div class="dark:bg-dark-300 dark:shadow-dark-700 absolute top-70 left-[50%] w-max max-w-full -translate-x-1/2 rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 p-3 wrap-break-word shadow-md transition-opacity duration-200 sm:max-w-lg dark:border-neutral-700 starting:opacity-0">
<div class="mb-1 flex justify-between gap-2">
<div class="flex items-center gap-1">
<span class="iconify lucide--info"></span>
+27 -22
src/views/record.tsx
···
import { lexiconDoc } from "@atcute/lexicon-doc";
import { ResolvedSchema } from "@atcute/lexicon-resolver";
import { ActorIdentifier, is, Nsid, ResourceUri } from "@atcute/lexicons";
+
import { AtprotoDid, Did } from "@atcute/lexicons/syntax";
+
import { verifyRecord } from "@atcute/repo";
import { A, useLocation, useNavigate, useParams } from "@solidjs/router";
import { createResource, createSignal, ErrorBoundary, Show, Suspense } from "solid-js";
import { Backlinks } from "../components/backlinks.jsx";
···
import { pds } from "../components/navbar.jsx";
import Tooltip from "../components/tooltip.jsx";
import { setNotif } from "../layout.jsx";
-
import {
-
didDocCache,
-
resolveLexiconAuthority,
-
resolveLexiconSchema,
-
resolvePDS,
-
} from "../utils/api.js";
+
import { resolveLexiconAuthority, resolveLexiconSchema, resolvePDS } from "../utils/api.js";
import { AtUri, uriTemplates } from "../utils/templates.js";
import { lexicons } from "../utils/types/lexicons.js";
-
import { verifyRecord } from "../utils/verify.js";
export const RecordView = () => {
const location = useLocation();
···
setValidSchema(false);
}
}
-
const { errors } = await verifyRecord({
-
rpc: rpc,
-
uri: record.uri,
-
cid: record.cid!,
-
record: record.value,
-
didDoc: didDocCache[record.uri.split("/")[2]],
+
+
const { ok, data } = await rpc.get("com.atproto.sync.getRecord", {
+
params: {
+
did: did as Did,
+
collection: params.collection as Nsid,
+
rkey: params.rkey,
+
},
+
as: "bytes",
+
});
+
if (!ok) throw data.error;
+
+
await verifyRecord({
+
did: did as AtprotoDid,
+
collection: params.collection,
+
rkey: params.rkey,
+
carBytes: data,
});
-
if (errors.length > 0) {
-
console.warn(errors);
-
setNotice(`Invalid record: ${errors.map((e) => e.message).join("\n")}`);
-
}
-
setValidRecord(errors.length === 0);
-
} catch (err) {
+
setValidRecord(true);
+
} catch (err: any) {
console.error(err);
+
setNotice(err.message);
setValidRecord(false);
}
};
···
</div>
</div>
<Show when={!location.hash || location.hash === "#record"}>
-
<div class="w-max max-w-screen min-w-full px-4 font-mono text-xs wrap-anywhere whitespace-pre-wrap sm:px-2 sm:text-sm md:max-w-[48rem]">
+
<div class="w-max max-w-screen min-w-full px-4 font-mono text-xs wrap-anywhere whitespace-pre-wrap sm:px-2 sm:text-sm md:max-w-3xl">
<JSONValue data={record()?.value as any} repo={record()!.uri.split("/")[2]} />
</div>
</Show>
···
</Show>
</Show>
<Show when={location.hash === "#backlinks"}>
-
<ErrorBoundary fallback={(err) => <div class="break-words">Error: {err.message}</div>}>
+
<ErrorBoundary
+
fallback={(err) => <div class="wrap-break-word">Error: {err.message}</div>}
+
>
<Suspense
fallback={
<div class="iconify lucide--loader-circle animate-spin self-center text-xl" />
···
></span>
</div>
<Show when={validRecord() === false}>
-
<div class="break-words">{notice()}</div>
+
<div class="wrap-break-word">{notice()}</div>
</Show>
</div>
<Show when={validSchema() !== undefined}>
+10 -4
src/views/repo.tsx
···
return (
<Show when={repo()}>
-
<div class="flex w-full flex-col gap-2 break-words">
+
<div class="flex w-full flex-col gap-2 wrap-break-word">
<div
class={`dark:shadow-dark-700 dark:bg-dark-300 flex justify-between rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 px-2 py-1.5 text-sm shadow-xs dark:border-neutral-700`}
>
···
</div>
<div class="flex w-full flex-col gap-1 px-2">
<Show when={location.hash === "#logs"}>
-
<ErrorBoundary fallback={(err) => <div class="break-words">Error: {err.message}</div>}>
+
<ErrorBoundary
+
fallback={(err) => <div class="wrap-break-word">Error: {err.message}</div>}
+
>
<Suspense
fallback={
<div class="iconify lucide--loader-circle mt-2 animate-spin self-center text-xl" />
···
</ErrorBoundary>
</Show>
<Show when={location.hash === "#backlinks"}>
-
<ErrorBoundary fallback={(err) => <div class="break-words">Error: {err.message}</div>}>
+
<ErrorBoundary
+
fallback={(err) => <div class="wrap-break-word">Error: {err.message}</div>}
+
>
<Suspense
fallback={
<div class="iconify lucide--loader-circle mt-2 animate-spin self-center text-xl" />
···
</ErrorBoundary>
</Show>
<Show when={location.hash === "#blobs"}>
-
<ErrorBoundary fallback={(err) => <div class="break-words">Error: {err.message}</div>}>
+
<ErrorBoundary
+
fallback={(err) => <div class="wrap-break-word">Error: {err.message}</div>}
+
>
<Suspense
fallback={
<div class="iconify lucide--loader-circle mt-2 animate-spin self-center text-xl" />
+6 -6
src/views/stream.tsx
···
<form ref={formRef} class="flex w-full flex-col gap-1 text-sm">
<Show when={!connected()}>
<label class="flex items-center justify-end gap-x-1">
-
<span class="min-w-[5rem]">Instance</span>
+
<span class="min-w-20">Instance</span>
<TextInput
name="instance"
value={
···
</label>
<Show when={streamType === "jetstream"}>
<label class="flex items-center justify-end gap-x-1">
-
<span class="min-w-[5rem]">Collections</span>
+
<span class="min-w-20">Collections</span>
<textarea
name="collections"
spellcheck={false}
···
</Show>
<Show when={streamType === "jetstream"}>
<label class="flex items-center justify-end gap-x-1">
-
<span class="min-w-[5rem]">DIDs</span>
+
<span class="min-w-20">DIDs</span>
<textarea
name="dids"
spellcheck={false}
···
</label>
</Show>
<label class="flex items-center justify-end gap-x-1">
-
<span class="min-w-[5rem]">Cursor</span>
+
<span class="min-w-20">Cursor</span>
<TextInput
name="cursor"
placeholder="Leave empty for live-tail"
···
{(param) => (
<Show when={param.param}>
<div class="flex">
-
<div class="min-w-[6rem] font-semibold">{param.name}</div>
+
<div class="min-w-24 font-semibold">{param.name}</div>
{param.param}
</div>
</Show>
···
<Show when={notice().length}>
<div class="text-red-500 dark:text-red-400">{notice()}</div>
</Show>
-
<div class="flex w-full flex-col gap-2 divide-y-[0.5px] divide-neutral-500 font-mono text-sm wrap-anywhere whitespace-pre-wrap md:w-[48rem]">
+
<div class="flex w-full flex-col gap-2 divide-y-[0.5px] divide-neutral-500 font-mono text-sm wrap-anywhere whitespace-pre-wrap md:w-3xl">
<For each={records().toReversed()}>
{(rec) => (
<div class="pb-2">