+11
README.md
+11
README.md
···
2
2
3
3
Navigate and manage [atproto](https://atproto.com/) repositories and the records they contain, as well as watching the relay in real time (firehose + jetstream support).
4
4
5
+
### Hacking
6
+
7
+
You will need `node` and `pnpm` to get started:
8
+
9
+
```
10
+
pnpm i # install deps
11
+
pnpm dev # or pnpm run start, runs vite
12
+
pnpm build # runs vite build
13
+
pnpm serve # runs vite preview
14
+
```
15
+
5
16
### Credits
6
17
7
18
[atcute](https://github.com/mary-ext/atcute) - atproto SDK\
-1
index.html
-1
index.html
···
9
9
<meta property="og:url" content="https://pdsls.dev" />
10
10
<meta property="og:description" content="Browse and manage atproto repositories" />
11
11
<meta property="description" content="Browse and manage atproto repositories" />
12
-
<title>PDSls</title>
13
12
<script>
14
13
if (
15
14
localStorage.theme === "dark" ||
+5
-5
package.json
+5
-5
package.json
···
9
9
"serve": "vite preview"
10
10
},
11
11
"devDependencies": {
12
-
"@iconify-json/lucide": "^1.2.60",
12
+
"@iconify-json/lucide": "^1.2.62",
13
13
"@iconify-json/lucide-lab": "^1.2.3",
14
14
"prettier": "^3.6.2",
15
15
"prettier-plugin-tailwindcss": "^0.6.14",
16
16
"typescript": "^5.9.2",
17
-
"unocss": "66.4.0",
18
-
"vite": "^7.0.6",
17
+
"unocss": "66.4.2",
18
+
"vite": "^7.1.1",
19
19
"vite-plugin-solid": "^2.11.8"
20
20
},
21
21
"dependencies": {
···
38
38
"@skyware/firehose": "^0.5.2",
39
39
"@solidjs/meta": "^0.29.4",
40
40
"@solidjs/router": "^0.15.3",
41
-
"hls.js": "^1.6.7",
41
+
"hls.js": "^1.6.9",
42
42
"monaco-editor": "^0.52.2",
43
-
"solid-js": "^1.9.7"
43
+
"solid-js": "^1.9.8"
44
44
},
45
45
"packageManager": "pnpm@10.12.2+sha512.a32540185b964ee30bb4e979e405adc6af59226b438ee4cc19f9e8773667a66d302f5bfee60a39d3cac69e35e4b96e708a71dd002b7e9359c4112a1722ac323f",
46
46
"pnpm": {
+224
-219
pnpm-lock.yaml
+224
-219
pnpm-lock.yaml
···
61
61
version: 0.5.2
62
62
'@solidjs/meta':
63
63
specifier: ^0.29.4
64
-
version: 0.29.4(solid-js@1.9.7)
64
+
version: 0.29.4(solid-js@1.9.8)
65
65
'@solidjs/router':
66
66
specifier: ^0.15.3
67
-
version: 0.15.3(solid-js@1.9.7)
67
+
version: 0.15.3(solid-js@1.9.8)
68
68
hls.js:
69
-
specifier: ^1.6.7
70
-
version: 1.6.7
69
+
specifier: ^1.6.9
70
+
version: 1.6.9
71
71
monaco-editor:
72
72
specifier: ^0.52.2
73
73
version: 0.52.2
74
74
solid-js:
75
-
specifier: ^1.9.7
76
-
version: 1.9.7
75
+
specifier: ^1.9.8
76
+
version: 1.9.8
77
77
devDependencies:
78
78
'@iconify-json/lucide':
79
-
specifier: ^1.2.60
80
-
version: 1.2.60
79
+
specifier: ^1.2.62
80
+
version: 1.2.62
81
81
'@iconify-json/lucide-lab':
82
82
specifier: ^1.2.3
83
83
version: 1.2.3
···
91
91
specifier: ^5.9.2
92
92
version: 5.9.2
93
93
unocss:
94
-
specifier: 66.4.0
95
-
version: 66.4.0(postcss@8.5.6)(vite@7.0.6(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2))
94
+
specifier: 66.4.2
95
+
version: 66.4.2(postcss@8.5.6)(vite@7.1.1(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2))
96
96
vite:
97
-
specifier: ^7.0.6
98
-
version: 7.0.6(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)
97
+
specifier: ^7.1.1
98
+
version: 7.1.1(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)
99
99
vite-plugin-solid:
100
100
specifier: ^2.11.8
101
-
version: 2.11.8(solid-js@1.9.7)(vite@7.0.6(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2))
101
+
version: 2.11.8(solid-js@1.9.8)(vite@7.1.1(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2))
102
102
103
103
packages:
104
104
···
109
109
'@antfu/install-pkg@1.1.0':
110
110
resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
111
111
112
-
'@antfu/utils@8.1.1':
113
-
resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==}
112
+
'@antfu/utils@9.2.0':
113
+
resolution: {integrity: sha512-Oq1d9BGZakE/FyoEtcNeSwM7MpDO2vUBi11RWBZXf75zPsbUVWmUs03EqkRFrcgbXyKTas0BdZWC1wcuSoqSAw==}
114
114
115
115
'@atcute/atproto@3.1.1':
116
116
resolution: {integrity: sha512-D+RLTIPF0xLu7BPZY8KSewAPemJFh+3n3zeQ3ROsLxbTtCHbrTDMAmAFexaVRAPGcPYrwXaBUlv7yZjScJolMg==}
···
556
556
'@iconify-json/lucide-lab@1.2.3':
557
557
resolution: {integrity: sha512-N+8vnVt4IY/6FZi81f6nh5VhJSMYrs5KTVsT2Z/E0Wn7Lu4jJKO5fOfiTVX1YWVI4FFwQ1zVXPFb8kLAwskrjA==}
558
558
559
-
'@iconify-json/lucide@1.2.60':
560
-
resolution: {integrity: sha512-iVhpjcJkrR65jaJCJAFr02FkL73Qth039MgDJOcuKYOl32183qgAeHmo44DI2SzkYURGpc0GMwnhRPpQPOaChg==}
559
+
'@iconify-json/lucide@1.2.62':
560
+
resolution: {integrity: sha512-K0KfhvP5YQZ2KraOgCm6jJbwwzQCVocvXcdMpDou5uLa48QnLBRW/dQ8VDGmxHTGpwF9EqLlvnUSinH2i6xs3Q==}
561
561
562
562
'@iconify/types@2.0.0':
563
563
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
564
564
565
-
'@iconify/utils@2.3.0':
566
-
resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==}
565
+
'@iconify/utils@3.0.0':
566
+
resolution: {integrity: sha512-Bjf0HTRAB59thKK9QFvyLEXE9S793IqxqJEhNQEboh+IjOXj0nDtOIFh63oz+Y6X/ye4UWpxne5sVQ2W250iSA==}
567
567
568
568
'@jridgewell/gen-mapping@0.3.12':
569
569
resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==}
···
587
587
'@polka/url@1.0.0-next.29':
588
588
resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
589
589
590
-
'@quansync/fs@0.1.3':
591
-
resolution: {integrity: sha512-G0OnZbMWEs5LhDyqy2UL17vGhSVHkQIfVojMtEWVenvj0V5S84VBgy86kJIuNsGDp2p7sTKlpSIpBUWdC35OKg==}
592
-
engines: {node: '>=20.0.0'}
590
+
'@quansync/fs@0.1.4':
591
+
resolution: {integrity: sha512-vy/41FCdnIalPTQCb2Wl0ic1caMdzGus4ktDp+gpZesQNydXcx8nhh8qB3qMPbGkictOTaXgXEUUfQEm8DQYoA==}
593
592
594
593
'@rollup/rollup-android-arm-eabi@4.46.2':
595
594
resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==}
···
722
721
'@types/node@22.13.1':
723
722
resolution: {integrity: sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==}
724
723
725
-
'@unocss/astro@66.4.0':
726
-
resolution: {integrity: sha512-DDc22MhzS5SD7LXiJetNl/WglkBkQEKDDzaay4rUpvINdRu3eME1ISdgUBel4jkchSSenTt2AZlD9l6CecFXEw==}
724
+
'@unocss/astro@66.4.2':
725
+
resolution: {integrity: sha512-En3AKHwkiPxtZT95vkVrNiRYrB+DFVCikew6/dMMCWDWVKK0+5tEVUTzR1ak3+YnzAXl0NpWj8D4zHb0PxOs/A==}
727
726
peerDependencies:
728
727
vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0
729
728
peerDependenciesMeta:
730
729
vite:
731
730
optional: true
732
731
733
-
'@unocss/cli@66.4.0':
734
-
resolution: {integrity: sha512-zSdFHrYwgDuHTklFXWnWqp5dJq+aDOFxCZHK0M3hnZtEiaSgMce8Fdje9hOOi/FtCuKr1/BHLyjD1Vj240PVOw==}
732
+
'@unocss/cli@66.4.2':
733
+
resolution: {integrity: sha512-WsXzrB0SHbSt2nOHtD5QM91VN8j38+wObqyGcoIhtBSugqzsc+t7AdPkxV/ZaYgtPAz87bR0WFEVKcbiBRnmJw==}
735
734
engines: {node: '>=14'}
736
735
hasBin: true
737
736
738
-
'@unocss/config@66.4.0':
739
-
resolution: {integrity: sha512-0H0dd5sWuFg9Z7oN+nGaL9UV4KitNuEcFcVVMUxPW3l+j3BKGMy6B+2jNS2+ezmpJoh5jaaL/fm5loYvOvaATA==}
737
+
'@unocss/config@66.4.2':
738
+
resolution: {integrity: sha512-plji1gNGSzlWjuV2Uh0q6Dt5ZlNkOKCHpgxekW9J458WghGAMBeXgB9uNpWg6flilqP1g0GJQv+XvJcSkYRGpQ==}
740
739
engines: {node: '>=14'}
741
740
742
-
'@unocss/core@66.4.0':
743
-
resolution: {integrity: sha512-vrfK8i3EwbKDbrhmR5lJQQltU1U0SvPqr2XVTHqZdCdzTUsg73I4NqFSiadt486i421C8BfTa2MPNHBnv35RuA==}
741
+
'@unocss/core@66.4.2':
742
+
resolution: {integrity: sha512-cYgMQrLhB9nRekv5c+yPDDa+5dzlMkA2UMQRil0s5D9Lb5n7NsCMcr6+nfxkcSYVLy92SbwDV45c6T7vIxFTOA==}
744
743
745
-
'@unocss/extractor-arbitrary-variants@66.4.0':
746
-
resolution: {integrity: sha512-P4bAb/oQ14TP7KZE4jxj4jcgCROkj8Ndnm3WKAmX+gwZLeAATjF0dn40EqLzmhLkXQYttp1DIEyvV77hsDZZOw==}
744
+
'@unocss/extractor-arbitrary-variants@66.4.2':
745
+
resolution: {integrity: sha512-T/eSeodfAp7HaWnQGqVLOsW4PbKUAvuybNRyvFWThMneM2qo+dOo3kFnA5my9ULAmRSFsAlyB1DnupD3qv5Klg==}
747
746
748
-
'@unocss/inspector@66.4.0':
749
-
resolution: {integrity: sha512-wYWvvoiycl06SSLMKD1PAshSRzXnAd1Zk3F3CfviJUVKrp5ugLSbzZe+mnYKpNWTrNwfCNG69YhdsJnSdkb35Q==}
747
+
'@unocss/inspector@66.4.2':
748
+
resolution: {integrity: sha512-ugcJK8r2ypM4eIdgetVn8RhfKrbA3AF3OQ/RohK5PPk2UPDAScqabzYpfdNW4eYQsBOZOgoiqWtnfc8weqo8LQ==}
750
749
751
-
'@unocss/postcss@66.4.0':
752
-
resolution: {integrity: sha512-MX6hFo54+tiysvstHKhNP1nQabqKzXDzdX/6Ctqhj++cL/yRfz6vqcv8MSbfBQDciiTin0ikDytBYik0pRgENQ==}
750
+
'@unocss/postcss@66.4.2':
751
+
resolution: {integrity: sha512-tu4lnh6K27pIAuaQHlFlhXin8korwC0r1kQl00YMmF3THiX7orXkTP6xWGcQwnkbx4uQz1dw+tBimYxeaAMrhA==}
753
752
engines: {node: '>=14'}
754
753
peerDependencies:
755
754
postcss: ^8.4.21
756
755
757
-
'@unocss/preset-attributify@66.4.0':
758
-
resolution: {integrity: sha512-iH/ZwbAJmbIMIBfeahzNcQ7OmHHzqvyHyC8rGIkInE0xdFsHcfqjsb6hasedy5VTX3EecWZ3RE7FpNjuV3PLAA==}
756
+
'@unocss/preset-attributify@66.4.2':
757
+
resolution: {integrity: sha512-DwFJJkkawmHpjo3pGQE8FyoPsvhbxh+QMvvaAdYpo+iZ5HRkeDml9SOj7u6SGTcmbNyI+QR61s0KM8fxx6HcVQ==}
759
758
760
-
'@unocss/preset-icons@66.4.0':
761
-
resolution: {integrity: sha512-Fm4/wgNfnVrJgmFrWs9JUjJy+il57hM+4qilSo7zR0QaeyES1z+VnIavGAPI02neBSztIHR8Rh6+6/bhVmByzg==}
759
+
'@unocss/preset-icons@66.4.2':
760
+
resolution: {integrity: sha512-qJx9gmesrvrmoTe9Mqoidihad8hm2MSD4QAezhfDSAyllioJOgyT0Bev/IEWAbehe9jtqYIh8v1oCerBPbGn6Q==}
762
761
763
-
'@unocss/preset-mini@66.4.0':
764
-
resolution: {integrity: sha512-gOdTB9qo5PIusB8WTyCnkwc/GQT7ifAYzn4a+wuk51Ml3i+JxxN90l25dRlgw6hsyx2LgX/CHMzoKXYzuqsnPg==}
762
+
'@unocss/preset-mini@66.4.2':
763
+
resolution: {integrity: sha512-Ry+5hM+XLmT8HrEb182mUfcZuyrZ8xR+TBe72DBcliJ1DhOV3K67TCxwQucfb0zHbGV71HNWdPmHsLKxPDgweQ==}
765
764
766
-
'@unocss/preset-tagify@66.4.0':
767
-
resolution: {integrity: sha512-DeIwGoW39iGI4BHz53PWJk2HTOqzJKWQnGBwYb0qw3+PknGRFg18ERRwm4KBGQjyAjt46sIrGm9Zxu5Y9wYh+w==}
765
+
'@unocss/preset-tagify@66.4.2':
766
+
resolution: {integrity: sha512-dECS09LqWJY4sYpgPUH2OAUftWU/tiZPR2XDRoTngeGU37GxSN+1sWtSmB7vwDm3C7opsdVUN20he8F1LUNubw==}
768
767
769
-
'@unocss/preset-typography@66.4.0':
770
-
resolution: {integrity: sha512-iWPsCzmUBzwHQRq7cHbtkWAy6V1S4QyzitT6cLf4241njeHnjMJHWwrpyfYNCrdeESjgO9HuoGiyevvqcQ9mRw==}
768
+
'@unocss/preset-typography@66.4.2':
769
+
resolution: {integrity: sha512-ZOKRuR5+V0r30QTVq04/6ZoIw75me3V25v2dU2YWJXIzwpMKmQ9TUN/M1yeiEUFfXjOaruWX6Ad6CvAw2MlCew==}
771
770
772
-
'@unocss/preset-uno@66.4.0':
773
-
resolution: {integrity: sha512-1Ep9gkxsW6hfEeZUjJTNofNbZ2/SgFohKb41U9DwBoXCOhGYTE2nmjr6EgoooF6XQNicPNa0tO6xVM/8n9z/NQ==}
771
+
'@unocss/preset-uno@66.4.2':
772
+
resolution: {integrity: sha512-1MFtPivGcpqRQFWdjtP40Enop1y3XDb3tlZXoMQUX0IGLG8HJOT+lfQx/Xl9t73ShJ8aAJ/l6qTxC43ZGNACzA==}
774
773
775
-
'@unocss/preset-web-fonts@66.4.0':
776
-
resolution: {integrity: sha512-pq9lOuR0VoshLaWlZNqM8A3V9DtsGZEmnX6qAzXCBF7LKO72gFKBn+K2IB6TxET0fMV0pagwhezzU5Jnu9nbMw==}
774
+
'@unocss/preset-web-fonts@66.4.2':
775
+
resolution: {integrity: sha512-4FYmleeRoM8r2DqGl6dfIjnX57tepcfZCvVfeCqYnk7475Yddmv1OYkoMjkWMnkK9MzdSxsFwHMU6CIUTmFTzQ==}
777
776
778
-
'@unocss/preset-wind3@66.4.0':
779
-
resolution: {integrity: sha512-9Qo8W3TBcSDtQDV/J1sJrsTa4AHss+wxzZj1ngyHUpgZTE45KEaHH0zEjxM04oC5hrOU9FqRZgwV8Q03UR4v8w==}
777
+
'@unocss/preset-wind3@66.4.2':
778
+
resolution: {integrity: sha512-0Aye/PaT08M/cQhPnGKn93iEVoRJbym0/1eomMvXoL+8oc7DVry35ws06r5CLu5h1sXI6UmS6sejoePFlSkLJQ==}
780
779
781
-
'@unocss/preset-wind4@66.4.0':
782
-
resolution: {integrity: sha512-Ut0B8JRt+aDjHJxZpwm4RtiBBEHE//XBhFFWMz2iljPZLPgN/uhbwr/M53yvpoA07Bz4IhtkaSsgOTLCSEsN0w==}
780
+
'@unocss/preset-wind4@66.4.2':
781
+
resolution: {integrity: sha512-F4RZsDqIpnSevD9hY353+Tw5gxpJuHA5HwdKjLnC/TnT9VKKVmV7qUEZ6M0jEuAk1kz2x3/ngnQ9Ftw+C2L84A==}
783
782
784
-
'@unocss/preset-wind@66.4.0':
785
-
resolution: {integrity: sha512-M1RrLvr827F6jNZsWjvM8FqhJgLR+bJKouhfPhixQFk00dqmS0NiFMKhMEt4kMtByh0fR+CBsEmB0um/vw+T3A==}
783
+
'@unocss/preset-wind@66.4.2':
784
+
resolution: {integrity: sha512-z/rFYFINNqmBtl3Dh+7UCKpPnPkxM7IIUGszMnvdntky9uhLauJ11dt/Puir73sM2cAfywfgvnHyZ00m0pg7rA==}
786
785
787
-
'@unocss/reset@66.4.0':
788
-
resolution: {integrity: sha512-zbH648K61/Umjy2tCj481ETMuaOlKjyzlXCvVO+U5dF1LhoWM2B7/mdBAiz/cmsKTeE2SfpUmusTRQr6X3n0/Q==}
786
+
'@unocss/reset@66.4.2':
787
+
resolution: {integrity: sha512-s3Kq4Q6a/d3/jYe6HTCfXUx7zYAYufetId5n66DZHzQxpeu6CoBS83+b37STTKsw27SOgV28cPJlJtZ6/D6Bhw==}
789
788
790
-
'@unocss/rule-utils@66.4.0':
791
-
resolution: {integrity: sha512-cWqs6Vre54iwbeYmJIjx1I912M3zNXYQ+lvytkn3NMysNsJlYYhyM4T0L6Jt3dz74X7I4vTcN0sQvVeE2TS3Fg==}
789
+
'@unocss/rule-utils@66.4.2':
790
+
resolution: {integrity: sha512-7z3IuajwXhy2cx3E0IGOFXIiuKC79/jzm4Tt56TC68nXLh/etlH0fKhxVwkZ/HbcQRpVwWyDRNcbh29pmA3DwQ==}
792
791
engines: {node: '>=14'}
793
792
794
-
'@unocss/transformer-attributify-jsx@66.4.0':
795
-
resolution: {integrity: sha512-jDCzDAqGft3WR0cYGJWdghRJnSnu0dqnMNyii0avp/v2qH2J+X6Lmbn6y11sdW9krkPTtXnuF29nd/XWbK7leg==}
793
+
'@unocss/transformer-attributify-jsx@66.4.2':
794
+
resolution: {integrity: sha512-de6LzoyW1tkdOftlCrj6z8wEb4j6l1sqmOU1nYKkYHw7luLFGxRUELC7iujlI9KmylbM02bcKfLETAfJy/je2w==}
796
795
797
-
'@unocss/transformer-compile-class@66.4.0':
798
-
resolution: {integrity: sha512-QETg2SAzmU15e5QmM9lPoWE6Yq8O/pcjLkSrL4HhkARnrEFCiRO3nohXXA/bdnu1bRLxgYp43Q1JwVGPooeb4Q==}
796
+
'@unocss/transformer-compile-class@66.4.2':
797
+
resolution: {integrity: sha512-+oiIrV8c3T7qiJdICr6YsEWik5sjbWirXF0mlpcBvZu2HyV559hvHjzuWKr/fl7xYYZKDL9FvddbqWo3DOXh3Q==}
799
798
800
-
'@unocss/transformer-directives@66.4.0':
801
-
resolution: {integrity: sha512-QOKQNEEuG/WRdD5thYgMWh/RFQtBpk0T1g5bobWzxi4Z0HxIpUKhu7bgmN9pUzeiN5rW8O42aNHMzIR9thP/1g==}
799
+
'@unocss/transformer-directives@66.4.2':
800
+
resolution: {integrity: sha512-7m/dTrCUkBkZeSRKPxPEo65Rav239orQSLq6sztwZhoA4x/6H8r58xCkAK0qC9VEalyerpCpyarU3sKN4+ehNg==}
802
801
803
-
'@unocss/transformer-variant-group@66.4.0':
804
-
resolution: {integrity: sha512-6GEtDyVuac06MVeVmAlZHQ4KvWivplHasYWcRll1517XnnCcTJq7qScHv8OoiL6MOYLyTt0hWlecWubESP3MPg==}
802
+
'@unocss/transformer-variant-group@66.4.2':
803
+
resolution: {integrity: sha512-SbPDbZUrhQyL4CpvnpvUfrr1DFq8AKf8ofPGbMJDm5S2TInQ34vFaIrhNroGR0szntMZRH5Zlkq6LtVUKDRs5g==}
805
804
806
-
'@unocss/vite@66.4.0':
807
-
resolution: {integrity: sha512-TCfHwjU6L5ddtTsRe2RmYy6y9zTsu7SD+lFiD5fidUh3FJ80M9wcE3+xNAdjYEdbow4bkF8IzZPbImr2C9imFw==}
805
+
'@unocss/vite@66.4.2':
806
+
resolution: {integrity: sha512-7eON9iPF3qWzuI+M6u0kq7K3y9nEbimZlLj01nGoqrgSGxEsyJpP01QQQsmT7FPRiZzRMJv7BiKMEyDQSuRRCA==}
808
807
peerDependencies:
809
808
vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0
810
809
···
817
816
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
818
817
engines: {node: '>= 8'}
819
818
820
-
babel-plugin-jsx-dom-expressions@0.39.8:
821
-
resolution: {integrity: sha512-/MVOIIjonylDXnrWmG23ZX82m9mtKATsVHB7zYlPfDR9Vdd/NBE48if+wv27bSkBtyO7EPMUlcUc4J63QwuACQ==}
819
+
babel-plugin-jsx-dom-expressions@0.40.1:
820
+
resolution: {integrity: sha512-b4iHuirqK7RgaMzB2Lsl7MqrlDgQtVRSSazyrmx7wB3T759ggGjod5Rkok5MfHjQXhR7tRPmdwoeGPqBnW2KfA==}
822
821
peerDependencies:
823
822
'@babel/core': ^7.20.12
824
823
825
-
babel-preset-solid@1.9.6:
826
-
resolution: {integrity: sha512-HXTK9f93QxoH8dYn1M2mJdOlWgMsR88Lg/ul6QCZGkNTktjTE5HAf93YxQumHoCudLEtZrU1cFCMFOVho6GqFg==}
824
+
babel-preset-solid@1.9.8:
825
+
resolution: {integrity: sha512-Tz2ZoKCPITeV+cANGeIA6pxHBLeEtX7hwk04tEh3xSWVqHMf2FqFwVz0RBxCLlBehpKfY1scDiuijBkmyVpqrQ==}
827
826
peerDependencies:
828
827
'@babel/core': ^7.0.0
828
+
solid-js: ^1.9.8
829
+
peerDependenciesMeta:
830
+
solid-js:
831
+
optional: true
829
832
830
833
binary-extensions@2.3.0:
831
834
resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
···
835
838
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
836
839
engines: {node: '>=8'}
837
840
838
-
browserslist@4.25.1:
839
-
resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==}
841
+
browserslist@4.25.2:
842
+
resolution: {integrity: sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==}
840
843
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
841
844
hasBin: true
842
845
···
844
847
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
845
848
engines: {node: '>=8'}
846
849
847
-
caniuse-lite@1.0.30001731:
848
-
resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==}
850
+
caniuse-lite@1.0.30001733:
851
+
resolution: {integrity: sha512-e4QKw/O2Kavj2VQTKZWrwzkt3IxOmIlU6ajRb6LP64LHpBo1J67k2Hi4Vu/TgJWsNtynurfS0uK3MaUTCPfu5Q==}
849
852
850
853
chokidar@3.6.0:
851
854
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
···
892
895
duplexer@0.1.2:
893
896
resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
894
897
895
-
electron-to-chromium@1.5.194:
896
-
resolution: {integrity: sha512-SdnWJwSUot04UR51I2oPD8kuP2VI37/CADR1OHsFOUzZIvfWJBO6q11k5P/uKNyTT3cdOsnyjkrZ+DDShqYqJA==}
898
+
electron-to-chromium@1.5.199:
899
+
resolution: {integrity: sha512-3gl0S7zQd88kCAZRO/DnxtBKuhMO4h0EaQIN3YgZfV6+pW+5+bf2AdQeHNESCoaQqo/gjGVYEf2YM4O5HJQqpQ==}
897
900
898
901
entities@6.0.1:
899
902
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
···
955
958
resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==}
956
959
engines: {node: '>=10'}
957
960
958
-
hls.js@1.6.7:
959
-
resolution: {integrity: sha512-QW2fnwDGKGc9DwQUGLbmMOz8G48UZK7PVNJPcOUql1b8jubKx4/eMHNP5mGqr6tYlJNDG1g10Lx2U/qPzL6zwQ==}
961
+
hls.js@1.6.9:
962
+
resolution: {integrity: sha512-q7qPrri6GRwjcNd7EkFCmhiJ6PBIxeUsdxKbquBkQZpg9jAnp6zSAeN9eEWFlOB09J8JfzAQGoXL5ZEAltjO9g==}
960
963
961
964
html-entities@2.3.3:
962
965
resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==}
···
1190
1193
resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==}
1191
1194
engines: {node: '>=18'}
1192
1195
1193
-
solid-js@1.9.7:
1194
-
resolution: {integrity: sha512-/saTKi8iWEM233n5OSi1YHCCuh66ZIQ7aK2hsToPe4tqGm7qAejU1SwNuTPivbWAYq7SjuHVVYxxuZQNRbICiw==}
1196
+
solid-js@1.9.8:
1197
+
resolution: {integrity: sha512-zF9Whfqk+s8wWuyDKnE7ekl+dJburjdZq54O6X1k4XChA57uZ5FOauYAa0s4I44XkBOM3CZmPrZC0DGjH9fKjQ==}
1195
1198
1196
1199
solid-refresh@0.6.3:
1197
1200
resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==}
···
1236
1239
undici-types@6.20.0:
1237
1240
resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
1238
1241
1239
-
unocss@66.4.0:
1240
-
resolution: {integrity: sha512-rT88p+Q0O3BX9WmWE1EQi4eNXdRhrFxQRBSvjGXFuWSMZWGWM66jF68OBNf7C5uWtVlv1fT9oFJCwW8cvaBQaA==}
1242
+
unocss@66.4.2:
1243
+
resolution: {integrity: sha512-PsZ+4XF/ekiParR7PZEM7AchvHJ78EIfOXlqTPflTOXCYgZ77kG9NaIaIf4lHRevY+rRTyrHrjxdg1Ern2j8qw==}
1241
1244
engines: {node: '>=14'}
1242
1245
peerDependencies:
1243
-
'@unocss/webpack': 66.4.0
1246
+
'@unocss/webpack': 66.4.2
1244
1247
vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0
1245
1248
peerDependenciesMeta:
1246
1249
'@unocss/webpack':
···
1248
1251
vite:
1249
1252
optional: true
1250
1253
1251
-
unplugin-utils@0.2.4:
1252
-
resolution: {integrity: sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==}
1254
+
unplugin-utils@0.2.5:
1255
+
resolution: {integrity: sha512-gwXJnPRewT4rT7sBi/IvxKTjsms7jX7QIDLOClApuZwR49SXbrB1z2NLUZ+vDHyqCj/n58OzRRqaW+B8OZi8vg==}
1253
1256
engines: {node: '>=18.12.0'}
1254
1257
1255
1258
update-browserslist-db@1.1.3:
···
1271
1274
'@testing-library/jest-dom':
1272
1275
optional: true
1273
1276
1274
-
vite@7.0.6:
1275
-
resolution: {integrity: sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==}
1277
+
vite@7.1.1:
1278
+
resolution: {integrity: sha512-yJ+Mp7OyV+4S+afWo+QyoL9jFWD11QFH0i5i7JypnfTcA1rmgxCbiA8WwAICDEtZ1Z1hzrVhN8R8rGTqkTY8ZQ==}
1276
1279
engines: {node: ^20.19.0 || >=22.12.0}
1277
1280
hasBin: true
1278
1281
peerDependencies:
···
1341
1344
package-manager-detector: 1.3.0
1342
1345
tinyexec: 1.0.1
1343
1346
1344
-
'@antfu/utils@8.1.1': {}
1347
+
'@antfu/utils@9.2.0': {}
1345
1348
1346
1349
'@atcute/atproto@3.1.1':
1347
1350
dependencies:
···
1476
1479
dependencies:
1477
1480
'@babel/compat-data': 7.28.0
1478
1481
'@babel/helper-validator-option': 7.27.1
1479
-
browserslist: 4.25.1
1482
+
browserslist: 4.25.2
1480
1483
lru-cache: 5.1.1
1481
1484
semver: 6.3.1
1482
1485
···
1703
1706
dependencies:
1704
1707
'@iconify/types': 2.0.0
1705
1708
1706
-
'@iconify-json/lucide@1.2.60':
1709
+
'@iconify-json/lucide@1.2.62':
1707
1710
dependencies:
1708
1711
'@iconify/types': 2.0.0
1709
1712
1710
1713
'@iconify/types@2.0.0': {}
1711
1714
1712
-
'@iconify/utils@2.3.0':
1715
+
'@iconify/utils@3.0.0':
1713
1716
dependencies:
1714
1717
'@antfu/install-pkg': 1.1.0
1715
-
'@antfu/utils': 8.1.1
1718
+
'@antfu/utils': 9.2.0
1716
1719
'@iconify/types': 2.0.0
1717
1720
debug: 4.4.1
1718
1721
globals: 15.15.0
···
1742
1745
1743
1746
'@polka/url@1.0.0-next.29': {}
1744
1747
1745
-
'@quansync/fs@0.1.3':
1748
+
'@quansync/fs@0.1.4':
1746
1749
dependencies:
1747
1750
quansync: 0.2.10
1748
1751
···
1812
1815
'@atcute/cbor': 2.2.5
1813
1816
nanoevents: 9.1.0
1814
1817
1815
-
'@solidjs/meta@0.29.4(solid-js@1.9.7)':
1818
+
'@solidjs/meta@0.29.4(solid-js@1.9.8)':
1816
1819
dependencies:
1817
-
solid-js: 1.9.7
1820
+
solid-js: 1.9.8
1818
1821
1819
-
'@solidjs/router@0.15.3(solid-js@1.9.7)':
1822
+
'@solidjs/router@0.15.3(solid-js@1.9.8)':
1820
1823
dependencies:
1821
-
solid-js: 1.9.7
1824
+
solid-js: 1.9.8
1822
1825
1823
1826
'@types/babel__core@7.20.5':
1824
1827
dependencies:
···
1848
1851
undici-types: 6.20.0
1849
1852
optional: true
1850
1853
1851
-
'@unocss/astro@66.4.0(vite@7.0.6(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2))':
1854
+
'@unocss/astro@66.4.2(vite@7.1.1(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2))':
1852
1855
dependencies:
1853
-
'@unocss/core': 66.4.0
1854
-
'@unocss/reset': 66.4.0
1855
-
'@unocss/vite': 66.4.0(vite@7.0.6(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2))
1856
+
'@unocss/core': 66.4.2
1857
+
'@unocss/reset': 66.4.2
1858
+
'@unocss/vite': 66.4.2(vite@7.1.1(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2))
1856
1859
optionalDependencies:
1857
-
vite: 7.0.6(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)
1860
+
vite: 7.1.1(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)
1858
1861
1859
-
'@unocss/cli@66.4.0':
1862
+
'@unocss/cli@66.4.2':
1860
1863
dependencies:
1861
1864
'@ampproject/remapping': 2.3.0
1862
-
'@unocss/config': 66.4.0
1863
-
'@unocss/core': 66.4.0
1864
-
'@unocss/preset-uno': 66.4.0
1865
+
'@unocss/config': 66.4.2
1866
+
'@unocss/core': 66.4.2
1867
+
'@unocss/preset-uno': 66.4.2
1865
1868
cac: 6.7.14
1866
1869
chokidar: 3.6.0
1867
1870
colorette: 2.0.20
···
1870
1873
pathe: 2.0.3
1871
1874
perfect-debounce: 1.0.0
1872
1875
tinyglobby: 0.2.14
1873
-
unplugin-utils: 0.2.4
1876
+
unplugin-utils: 0.2.5
1874
1877
1875
-
'@unocss/config@66.4.0':
1878
+
'@unocss/config@66.4.2':
1876
1879
dependencies:
1877
-
'@unocss/core': 66.4.0
1880
+
'@unocss/core': 66.4.2
1878
1881
unconfig: 7.3.2
1879
1882
1880
-
'@unocss/core@66.4.0': {}
1883
+
'@unocss/core@66.4.2': {}
1881
1884
1882
-
'@unocss/extractor-arbitrary-variants@66.4.0':
1885
+
'@unocss/extractor-arbitrary-variants@66.4.2':
1883
1886
dependencies:
1884
-
'@unocss/core': 66.4.0
1887
+
'@unocss/core': 66.4.2
1885
1888
1886
-
'@unocss/inspector@66.4.0':
1889
+
'@unocss/inspector@66.4.2':
1887
1890
dependencies:
1888
-
'@unocss/core': 66.4.0
1889
-
'@unocss/rule-utils': 66.4.0
1891
+
'@unocss/core': 66.4.2
1892
+
'@unocss/rule-utils': 66.4.2
1890
1893
colorette: 2.0.20
1891
1894
gzip-size: 6.0.0
1892
1895
sirv: 3.0.1
1893
1896
vue-flow-layout: 0.2.0
1894
1897
1895
-
'@unocss/postcss@66.4.0(postcss@8.5.6)':
1898
+
'@unocss/postcss@66.4.2(postcss@8.5.6)':
1896
1899
dependencies:
1897
-
'@unocss/config': 66.4.0
1898
-
'@unocss/core': 66.4.0
1899
-
'@unocss/rule-utils': 66.4.0
1900
+
'@unocss/config': 66.4.2
1901
+
'@unocss/core': 66.4.2
1902
+
'@unocss/rule-utils': 66.4.2
1900
1903
css-tree: 3.1.0
1901
1904
postcss: 8.5.6
1902
1905
tinyglobby: 0.2.14
1903
1906
1904
-
'@unocss/preset-attributify@66.4.0':
1907
+
'@unocss/preset-attributify@66.4.2':
1905
1908
dependencies:
1906
-
'@unocss/core': 66.4.0
1909
+
'@unocss/core': 66.4.2
1907
1910
1908
-
'@unocss/preset-icons@66.4.0':
1911
+
'@unocss/preset-icons@66.4.2':
1909
1912
dependencies:
1910
-
'@iconify/utils': 2.3.0
1911
-
'@unocss/core': 66.4.0
1913
+
'@iconify/utils': 3.0.0
1914
+
'@unocss/core': 66.4.2
1912
1915
ofetch: 1.4.1
1913
1916
transitivePeerDependencies:
1914
1917
- supports-color
1915
1918
1916
-
'@unocss/preset-mini@66.4.0':
1919
+
'@unocss/preset-mini@66.4.2':
1917
1920
dependencies:
1918
-
'@unocss/core': 66.4.0
1919
-
'@unocss/extractor-arbitrary-variants': 66.4.0
1920
-
'@unocss/rule-utils': 66.4.0
1921
+
'@unocss/core': 66.4.2
1922
+
'@unocss/extractor-arbitrary-variants': 66.4.2
1923
+
'@unocss/rule-utils': 66.4.2
1921
1924
1922
-
'@unocss/preset-tagify@66.4.0':
1925
+
'@unocss/preset-tagify@66.4.2':
1923
1926
dependencies:
1924
-
'@unocss/core': 66.4.0
1927
+
'@unocss/core': 66.4.2
1925
1928
1926
-
'@unocss/preset-typography@66.4.0':
1929
+
'@unocss/preset-typography@66.4.2':
1927
1930
dependencies:
1928
-
'@unocss/core': 66.4.0
1929
-
'@unocss/preset-mini': 66.4.0
1930
-
'@unocss/rule-utils': 66.4.0
1931
+
'@unocss/core': 66.4.2
1932
+
'@unocss/preset-mini': 66.4.2
1933
+
'@unocss/rule-utils': 66.4.2
1931
1934
1932
-
'@unocss/preset-uno@66.4.0':
1935
+
'@unocss/preset-uno@66.4.2':
1933
1936
dependencies:
1934
-
'@unocss/core': 66.4.0
1935
-
'@unocss/preset-wind3': 66.4.0
1937
+
'@unocss/core': 66.4.2
1938
+
'@unocss/preset-wind3': 66.4.2
1936
1939
1937
-
'@unocss/preset-web-fonts@66.4.0':
1940
+
'@unocss/preset-web-fonts@66.4.2':
1938
1941
dependencies:
1939
-
'@unocss/core': 66.4.0
1942
+
'@unocss/core': 66.4.2
1940
1943
ofetch: 1.4.1
1941
1944
1942
-
'@unocss/preset-wind3@66.4.0':
1945
+
'@unocss/preset-wind3@66.4.2':
1943
1946
dependencies:
1944
-
'@unocss/core': 66.4.0
1945
-
'@unocss/preset-mini': 66.4.0
1946
-
'@unocss/rule-utils': 66.4.0
1947
+
'@unocss/core': 66.4.2
1948
+
'@unocss/preset-mini': 66.4.2
1949
+
'@unocss/rule-utils': 66.4.2
1947
1950
1948
-
'@unocss/preset-wind4@66.4.0':
1951
+
'@unocss/preset-wind4@66.4.2':
1949
1952
dependencies:
1950
-
'@unocss/core': 66.4.0
1951
-
'@unocss/extractor-arbitrary-variants': 66.4.0
1952
-
'@unocss/rule-utils': 66.4.0
1953
+
'@unocss/core': 66.4.2
1954
+
'@unocss/extractor-arbitrary-variants': 66.4.2
1955
+
'@unocss/rule-utils': 66.4.2
1953
1956
1954
-
'@unocss/preset-wind@66.4.0':
1957
+
'@unocss/preset-wind@66.4.2':
1955
1958
dependencies:
1956
-
'@unocss/core': 66.4.0
1957
-
'@unocss/preset-wind3': 66.4.0
1959
+
'@unocss/core': 66.4.2
1960
+
'@unocss/preset-wind3': 66.4.2
1958
1961
1959
-
'@unocss/reset@66.4.0': {}
1962
+
'@unocss/reset@66.4.2': {}
1960
1963
1961
-
'@unocss/rule-utils@66.4.0':
1964
+
'@unocss/rule-utils@66.4.2':
1962
1965
dependencies:
1963
-
'@unocss/core': 66.4.0
1966
+
'@unocss/core': 66.4.2
1964
1967
magic-string: 0.30.17
1965
1968
1966
-
'@unocss/transformer-attributify-jsx@66.4.0':
1969
+
'@unocss/transformer-attributify-jsx@66.4.2':
1967
1970
dependencies:
1968
1971
'@babel/parser': 7.28.0
1969
1972
'@babel/traverse': 7.28.0
1970
-
'@unocss/core': 66.4.0
1973
+
'@unocss/core': 66.4.2
1971
1974
transitivePeerDependencies:
1972
1975
- supports-color
1973
1976
1974
-
'@unocss/transformer-compile-class@66.4.0':
1977
+
'@unocss/transformer-compile-class@66.4.2':
1975
1978
dependencies:
1976
-
'@unocss/core': 66.4.0
1979
+
'@unocss/core': 66.4.2
1977
1980
1978
-
'@unocss/transformer-directives@66.4.0':
1981
+
'@unocss/transformer-directives@66.4.2':
1979
1982
dependencies:
1980
-
'@unocss/core': 66.4.0
1981
-
'@unocss/rule-utils': 66.4.0
1983
+
'@unocss/core': 66.4.2
1984
+
'@unocss/rule-utils': 66.4.2
1982
1985
css-tree: 3.1.0
1983
1986
1984
-
'@unocss/transformer-variant-group@66.4.0':
1987
+
'@unocss/transformer-variant-group@66.4.2':
1985
1988
dependencies:
1986
-
'@unocss/core': 66.4.0
1989
+
'@unocss/core': 66.4.2
1987
1990
1988
-
'@unocss/vite@66.4.0(vite@7.0.6(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2))':
1991
+
'@unocss/vite@66.4.2(vite@7.1.1(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2))':
1989
1992
dependencies:
1990
1993
'@ampproject/remapping': 2.3.0
1991
-
'@unocss/config': 66.4.0
1992
-
'@unocss/core': 66.4.0
1993
-
'@unocss/inspector': 66.4.0
1994
+
'@unocss/config': 66.4.2
1995
+
'@unocss/core': 66.4.2
1996
+
'@unocss/inspector': 66.4.2
1994
1997
chokidar: 3.6.0
1995
1998
magic-string: 0.30.17
1996
1999
pathe: 2.0.3
1997
2000
tinyglobby: 0.2.14
1998
-
unplugin-utils: 0.2.4
1999
-
vite: 7.0.6(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)
2001
+
unplugin-utils: 0.2.5
2002
+
vite: 7.1.1(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)
2000
2003
2001
2004
acorn@8.15.0: {}
2002
2005
···
2005
2008
normalize-path: 3.0.0
2006
2009
picomatch: 2.3.1
2007
2010
2008
-
babel-plugin-jsx-dom-expressions@0.39.8(@babel/core@7.28.0):
2011
+
babel-plugin-jsx-dom-expressions@0.40.1(@babel/core@7.28.0):
2009
2012
dependencies:
2010
2013
'@babel/core': 7.28.0
2011
2014
'@babel/helper-module-imports': 7.18.6
···
2015
2018
parse5: 7.3.0
2016
2019
validate-html-nesting: 1.2.3
2017
2020
2018
-
babel-preset-solid@1.9.6(@babel/core@7.28.0):
2021
+
babel-preset-solid@1.9.8(@babel/core@7.28.0)(solid-js@1.9.8):
2019
2022
dependencies:
2020
2023
'@babel/core': 7.28.0
2021
-
babel-plugin-jsx-dom-expressions: 0.39.8(@babel/core@7.28.0)
2024
+
babel-plugin-jsx-dom-expressions: 0.40.1(@babel/core@7.28.0)
2025
+
optionalDependencies:
2026
+
solid-js: 1.9.8
2022
2027
2023
2028
binary-extensions@2.3.0: {}
2024
2029
···
2026
2031
dependencies:
2027
2032
fill-range: 7.1.1
2028
2033
2029
-
browserslist@4.25.1:
2034
+
browserslist@4.25.2:
2030
2035
dependencies:
2031
-
caniuse-lite: 1.0.30001731
2032
-
electron-to-chromium: 1.5.194
2036
+
caniuse-lite: 1.0.30001733
2037
+
electron-to-chromium: 1.5.199
2033
2038
node-releases: 2.0.19
2034
-
update-browserslist-db: 1.1.3(browserslist@4.25.1)
2039
+
update-browserslist-db: 1.1.3(browserslist@4.25.2)
2035
2040
2036
2041
cac@6.7.14: {}
2037
2042
2038
-
caniuse-lite@1.0.30001731: {}
2043
+
caniuse-lite@1.0.30001733: {}
2039
2044
2040
2045
chokidar@3.6.0:
2041
2046
dependencies:
···
2076
2081
2077
2082
duplexer@0.1.2: {}
2078
2083
2079
-
electron-to-chromium@1.5.194: {}
2084
+
electron-to-chromium@1.5.199: {}
2080
2085
2081
2086
entities@6.0.1: {}
2082
2087
···
2171
2176
dependencies:
2172
2177
duplexer: 0.1.2
2173
2178
2174
-
hls.js@1.6.7: {}
2179
+
hls.js@1.6.9: {}
2175
2180
2176
2181
html-entities@2.3.3: {}
2177
2182
···
2339
2344
mrmime: 2.0.1
2340
2345
totalist: 3.0.1
2341
2346
2342
-
solid-js@1.9.7:
2347
+
solid-js@1.9.8:
2343
2348
dependencies:
2344
2349
csstype: 3.1.3
2345
2350
seroval: 1.3.2
2346
2351
seroval-plugins: 1.3.2(seroval@1.3.2)
2347
2352
2348
-
solid-refresh@0.6.3(solid-js@1.9.7):
2353
+
solid-refresh@0.6.3(solid-js@1.9.8):
2349
2354
dependencies:
2350
2355
'@babel/generator': 7.28.0
2351
2356
'@babel/helper-module-imports': 7.27.1
2352
2357
'@babel/types': 7.28.2
2353
-
solid-js: 1.9.7
2358
+
solid-js: 1.9.8
2354
2359
transitivePeerDependencies:
2355
2360
- supports-color
2356
2361
···
2383
2388
2384
2389
unconfig@7.3.2:
2385
2390
dependencies:
2386
-
'@quansync/fs': 0.1.3
2391
+
'@quansync/fs': 0.1.4
2387
2392
defu: 6.1.4
2388
2393
jiti: 2.5.1
2389
2394
quansync: 0.2.10
···
2391
2396
undici-types@6.20.0:
2392
2397
optional: true
2393
2398
2394
-
unocss@66.4.0(postcss@8.5.6)(vite@7.0.6(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)):
2399
+
unocss@66.4.2(postcss@8.5.6)(vite@7.1.1(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)):
2395
2400
dependencies:
2396
-
'@unocss/astro': 66.4.0(vite@7.0.6(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2))
2397
-
'@unocss/cli': 66.4.0
2398
-
'@unocss/core': 66.4.0
2399
-
'@unocss/postcss': 66.4.0(postcss@8.5.6)
2400
-
'@unocss/preset-attributify': 66.4.0
2401
-
'@unocss/preset-icons': 66.4.0
2402
-
'@unocss/preset-mini': 66.4.0
2403
-
'@unocss/preset-tagify': 66.4.0
2404
-
'@unocss/preset-typography': 66.4.0
2405
-
'@unocss/preset-uno': 66.4.0
2406
-
'@unocss/preset-web-fonts': 66.4.0
2407
-
'@unocss/preset-wind': 66.4.0
2408
-
'@unocss/preset-wind3': 66.4.0
2409
-
'@unocss/preset-wind4': 66.4.0
2410
-
'@unocss/transformer-attributify-jsx': 66.4.0
2411
-
'@unocss/transformer-compile-class': 66.4.0
2412
-
'@unocss/transformer-directives': 66.4.0
2413
-
'@unocss/transformer-variant-group': 66.4.0
2414
-
'@unocss/vite': 66.4.0(vite@7.0.6(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2))
2401
+
'@unocss/astro': 66.4.2(vite@7.1.1(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2))
2402
+
'@unocss/cli': 66.4.2
2403
+
'@unocss/core': 66.4.2
2404
+
'@unocss/postcss': 66.4.2(postcss@8.5.6)
2405
+
'@unocss/preset-attributify': 66.4.2
2406
+
'@unocss/preset-icons': 66.4.2
2407
+
'@unocss/preset-mini': 66.4.2
2408
+
'@unocss/preset-tagify': 66.4.2
2409
+
'@unocss/preset-typography': 66.4.2
2410
+
'@unocss/preset-uno': 66.4.2
2411
+
'@unocss/preset-web-fonts': 66.4.2
2412
+
'@unocss/preset-wind': 66.4.2
2413
+
'@unocss/preset-wind3': 66.4.2
2414
+
'@unocss/preset-wind4': 66.4.2
2415
+
'@unocss/transformer-attributify-jsx': 66.4.2
2416
+
'@unocss/transformer-compile-class': 66.4.2
2417
+
'@unocss/transformer-directives': 66.4.2
2418
+
'@unocss/transformer-variant-group': 66.4.2
2419
+
'@unocss/vite': 66.4.2(vite@7.1.1(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2))
2415
2420
optionalDependencies:
2416
-
vite: 7.0.6(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)
2421
+
vite: 7.1.1(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)
2417
2422
transitivePeerDependencies:
2418
2423
- postcss
2419
2424
- supports-color
2420
2425
2421
-
unplugin-utils@0.2.4:
2426
+
unplugin-utils@0.2.5:
2422
2427
dependencies:
2423
2428
pathe: 2.0.3
2424
2429
picomatch: 4.0.3
2425
2430
2426
-
update-browserslist-db@1.1.3(browserslist@4.25.1):
2431
+
update-browserslist-db@1.1.3(browserslist@4.25.2):
2427
2432
dependencies:
2428
-
browserslist: 4.25.1
2433
+
browserslist: 4.25.2
2429
2434
escalade: 3.2.0
2430
2435
picocolors: 1.1.1
2431
2436
2432
2437
validate-html-nesting@1.2.3: {}
2433
2438
2434
-
vite-plugin-solid@2.11.8(solid-js@1.9.7)(vite@7.0.6(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)):
2439
+
vite-plugin-solid@2.11.8(solid-js@1.9.8)(vite@7.1.1(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)):
2435
2440
dependencies:
2436
2441
'@babel/core': 7.28.0
2437
2442
'@types/babel__core': 7.20.5
2438
-
babel-preset-solid: 1.9.6(@babel/core@7.28.0)
2443
+
babel-preset-solid: 1.9.8(@babel/core@7.28.0)(solid-js@1.9.8)
2439
2444
merge-anything: 5.1.7
2440
-
solid-js: 1.9.7
2441
-
solid-refresh: 0.6.3(solid-js@1.9.7)
2442
-
vite: 7.0.6(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)
2443
-
vitefu: 1.1.1(vite@7.0.6(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2))
2445
+
solid-js: 1.9.8
2446
+
solid-refresh: 0.6.3(solid-js@1.9.8)
2447
+
vite: 7.1.1(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)
2448
+
vitefu: 1.1.1(vite@7.1.1(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2))
2444
2449
transitivePeerDependencies:
2445
2450
- supports-color
2446
2451
2447
-
vite@7.0.6(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2):
2452
+
vite@7.1.1(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2):
2448
2453
dependencies:
2449
2454
esbuild: 0.25.8
2450
2455
fdir: 6.4.6(picomatch@4.0.3)
···
2458
2463
jiti: 2.5.1
2459
2464
tsx: 4.19.2
2460
2465
2461
-
vitefu@1.1.1(vite@7.0.6(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)):
2466
+
vitefu@1.1.1(vite@7.1.1(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)):
2462
2467
optionalDependencies:
2463
-
vite: 7.0.6(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)
2468
+
vite: 7.1.1(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)
2464
2469
2465
2470
vue-flow-layout@0.2.0: {}
2466
2471
+8
-7
src/components/account.tsx
+8
-7
src/components/account.tsx
···
1
1
import { createSignal, onMount, For, Show } from "solid-js";
2
2
import Tooltip from "./tooltip.jsx";
3
3
import { deleteStoredSession, getSession, OAuthUserAgent } from "@atcute/oauth-browser-client";
4
-
import { agent, Login, loginState, retrieveSession, setLoginState } from "./login.jsx";
4
+
import { agent, Login, retrieveSession, setAgent } from "./login.jsx";
5
5
import { Did } from "@atcute/lexicons";
6
6
import { resolveDidDoc } from "../utils/api.js";
7
7
import { createStore } from "solid-js/store";
···
35
35
if (repo) setAvatar(await getAvatar(repo as Did));
36
36
});
37
37
38
-
const resumeSession = (did: Did) => {
38
+
const resumeSession = async (did: Did) => {
39
39
localStorage.setItem("lastSignedIn", did);
40
-
window.location.href = "/";
40
+
retrieveSession();
41
+
setAvatar(await getAvatar(did));
41
42
};
42
43
43
44
const removeSession = async (did: Did) => {
44
-
const currentSession = agent?.sub;
45
+
const currentSession = agent()?.sub;
45
46
try {
46
47
const session = await getSession(did, { allowStale: true });
47
48
const agent = new OAuthUserAgent(session);
···
50
51
deleteStoredSession(did);
51
52
}
52
53
setSessions(did, undefined);
53
-
if (currentSession === did) setLoginState(false);
54
+
if (currentSession === did) setAgent(undefined);
54
55
};
55
56
56
57
const getAvatar = async (did: Did) => {
···
78
79
onclick={() => resumeSession(did as Did)}
79
80
>
80
81
<span class="truncate">{sessions[did]?.length ? sessions[did] : did}</span>
81
-
<Show when={did === agent?.sub}>
82
+
<Show when={did === agent()?.sub}>
82
83
<div class="i-lucide-check shrink-0" />
83
84
</Show>
84
85
</button>
···
94
95
</Modal>
95
96
<button onclick={() => setOpenManager(true)}>
96
97
<Tooltip text="Accounts">
97
-
{loginState() && avatar() ?
98
+
{agent() && avatar() ?
98
99
<img src={avatar()} class="dark:shadow-dark-900/80 size-5 rounded-full shadow-sm" />
99
100
: <div class="i-lucide-circle-user-round text-xl" />}
100
101
</Tooltip>
+7
-7
src/components/create.tsx
+7
-7
src/components/create.tsx
···
37
37
};
38
38
39
39
const createRecord = async (formData: FormData) => {
40
-
const rpc = new Client({ handler: agent });
40
+
const rpc = new Client({ handler: agent()! });
41
41
const collection = formData.get("collection");
42
42
const rkey = formData.get("rkey");
43
43
const validate = formData.get("validate")?.toString();
···
50
50
}
51
51
const res = await rpc.post("com.atproto.repo.createRecord", {
52
52
input: {
53
-
repo: agent.sub,
53
+
repo: agent()!.sub,
54
54
collection: collection ? collection.toString() : record.$type,
55
55
rkey: rkey?.toString().length ? rkey?.toString() : undefined,
56
56
record: record,
···
75
75
: formData.get("validate")?.toString() === "false" ? false
76
76
: undefined;
77
77
if (!record) return;
78
-
const rpc = new Client({ handler: agent });
78
+
const rpc = new Client({ handler: agent()! });
79
79
try {
80
80
const editedRecord = JSON.parse(record.toString());
81
81
if (formData.get("recreate")) {
82
82
const res = await rpc.post("com.atproto.repo.applyWrites", {
83
83
input: {
84
-
repo: agent.sub,
84
+
repo: agent()!.sub,
85
85
validate: validate,
86
86
writes: [
87
87
{
···
105
105
} else {
106
106
const res = await rpc.post("com.atproto.repo.putRecord", {
107
107
input: {
108
-
repo: agent.sub,
108
+
repo: agent()!.sub,
109
109
collection: params.collection as `${string}.${string}.${string}`,
110
110
rkey: params.rkey,
111
111
record: editedRecord,
···
141
141
if (exifRemoved !== null) blob = new Blob([exifRemoved], { type: blob.type });
142
142
}
143
143
144
-
const rpc = new Client({ handler: agent });
144
+
const rpc = new Client({ handler: agent()! });
145
145
setUploading(true);
146
146
const res = await rpc.post("com.atproto.repo.uploadBlob", {
147
147
input: blob,
···
172
172
return (
173
173
<>
174
174
<Modal open={openDialog()} onClose={() => setOpenDialog(false)}>
175
-
<div class="w-21rem sm:w-xl lg:w-50rem starting:opacity-0 dark:bg-dark-800/70 left-50% backdrop-blur-xs border-0.5 dark:shadow-dark-900/80 absolute top-12 -translate-x-1/2 rounded-md border-neutral-300 bg-zinc-200/70 p-2 text-slate-900 shadow-md transition-opacity duration-300 sm:p-4 dark:border-neutral-700 dark:text-slate-100">
175
+
<div class="w-21rem sm:w-xl lg:w-48rem starting:opacity-0 dark:bg-dark-800/70 left-50% backdrop-blur-xs border-0.5 dark:shadow-dark-900/80 absolute top-12 -translate-x-1/2 rounded-md border-neutral-300 bg-zinc-200/70 p-2 text-slate-900 shadow-md transition-opacity duration-300 sm:p-4 dark:border-neutral-700 dark:text-slate-100">
176
176
<div class="mb-2 flex w-full justify-between">
177
177
<h3 class="font-bold">{props.create ? "Creating" : "Editing"} record</h3>
178
178
<div
+5
src/components/editor.tsx
+5
src/components/editor.tsx
···
3
3
import * as monaco from "monaco-editor";
4
4
import { onMount } from "solid-js";
5
5
6
+
const isTouchDevice = "ontouchstart" in window || navigator.maxTouchPoints > 1;
7
+
6
8
self.MonacoEnvironment = {
7
9
getWorker(_, label) {
8
10
if (label === "json") return new jsonWorker();
···
22
24
model: props.model,
23
25
wordWrap: "on",
24
26
automaticLayout: true,
27
+
fontFamily: "Roboto Mono",
28
+
lineNumbers: isTouchDevice ? "off" : "on",
29
+
fontSize: 12,
25
30
});
26
31
});
27
32
+3
-7
src/components/login.tsx
+3
-7
src/components/login.tsx
···
21
21
},
22
22
});
23
23
24
-
export const [loginState, setLoginState] = createSignal(false);
25
-
let agent: OAuthUserAgent;
24
+
export const [agent, setAgent] = createSignal<OAuthUserAgent | undefined>();
26
25
27
26
const Login = () => {
28
27
const [notice, setNotice] = createSignal("");
···
106
105
107
106
const session = await init().catch(() => {});
108
107
109
-
if (session) {
110
-
agent = new OAuthUserAgent(session);
111
-
setLoginState(true);
112
-
}
108
+
if (session) setAgent(new OAuthUserAgent(session));
113
109
};
114
110
115
-
export { Login, retrieveSession, agent };
111
+
export { Login, retrieveSession };
+4
-4
src/components/search.tsx
+4
-4
src/components/search.tsx
···
2
2
import { A, useNavigate } from "@solidjs/router";
3
3
import Tooltip from "./tooltip.jsx";
4
4
import { createSignal, Show } from "solid-js";
5
-
import { agent, loginState } from "../components/login.jsx";
5
+
import { agent } from "../components/login.jsx";
6
6
import { Handle } from "@atcute/lexicons";
7
7
8
8
const Search = () => {
···
51
51
>
52
52
<div class="w-full">
53
53
<label for="input" class="ml-0.5 text-sm">
54
-
PDS URL or AT URI
54
+
PDS URL or AT URI (at:// optional)
55
55
</label>
56
56
</div>
57
57
<div class="flex w-full items-center gap-2">
···
72
72
</button>
73
73
</Show>
74
74
</div>
75
-
<Show when={loginState()}>
75
+
<Show when={agent()}>
76
76
<Tooltip
77
77
text="Repository"
78
78
children={
79
-
<A href={`/at://${agent.sub}`} class="flex">
79
+
<A href={`/at://${agent()?.sub}`} class="flex">
80
80
<div class="i-lucide-house text-xl" />
81
81
</A>
82
82
}
+4
-4
src/components/settings.tsx
+4
-4
src/components/settings.tsx
···
59
59
<div class="starting:opacity-0 w-21rem dark:bg-dark-800/70 border-0.5 dark:shadow-dark-900/80 backdrop-blur-xs left-50% absolute top-12 -translate-x-1/2 rounded-md border-neutral-300 bg-zinc-200/70 p-4 text-slate-900 shadow-md transition-opacity duration-300 dark:border-neutral-700 dark:text-slate-100">
60
60
<h3 class="border-b-0.5 mb-2 border-neutral-500 pb-2 font-bold">Settings</h3>
61
61
<h4 class="mb-1 font-semibold">Theme</h4>
62
-
<div class="flex w-full gap-2">
62
+
<div class="flex w-full gap-1">
63
63
<button
64
64
classList={{
65
-
"basis-1/3 py-1 rounded-lg justify-center flex items-center gap-1": true,
65
+
"basis-1/3 py-1 rounded-full justify-center flex items-center gap-1": true,
66
66
"bg-transparent hover:bg-neutral-100 dark:hover:bg-dark-200": !theme().system,
67
67
"bg-white dark:bg-neutral-600 font-semibold": theme().system,
68
68
}}
···
79
79
</button>
80
80
<button
81
81
classList={{
82
-
"basis-1/3 py-1 rounded-lg justify-center flex items-center gap-1": true,
82
+
"basis-1/3 py-1 rounded-full justify-center flex items-center gap-1": true,
83
83
"bg-transparent hover:bg-neutral-100 dark:hover:bg-dark-200":
84
84
theme().color !== "light" || theme().system,
85
85
"bg-white font-semibold": theme().color === "light" && !theme().system,
···
91
91
</button>
92
92
<button
93
93
classList={{
94
-
"basis-1/3 py-1 justify-center rounded-lg flex items-center gap-1": true,
94
+
"basis-1/3 py-1 justify-center rounded-full flex items-center gap-1": true,
95
95
"bg-transparent hover:bg-neutral-100 dark:hover:bg-dark-200":
96
96
theme().color !== "dark" || theme().system,
97
97
"bg-neutral-600 font-semibold": theme().color === "dark" && !theme().system,
+13
-8
src/layout.tsx
+13
-8
src/layout.tsx
···
1
1
import { createEffect, ErrorBoundary, Show, Suspense } from "solid-js";
2
2
import { A, RouteSectionProps, useLocation, useNavigate, useParams } from "@solidjs/router";
3
-
import { loginState } from "./components/login.jsx";
3
+
import { agent } from "./components/login.jsx";
4
4
import { RecordEditor } from "./components/create.jsx";
5
5
import Tooltip from "./components/tooltip.jsx";
6
6
import { NavBar } from "./components/navbar.jsx";
7
7
import { Search } from "./components/search.jsx";
8
8
import { AccountManager } from "./components/account.jsx";
9
9
import { resolveHandle } from "./utils/api.js";
10
-
import { Meta, MetaProvider } from "@solidjs/meta";
10
+
import { Meta, MetaProvider, Title } from "@solidjs/meta";
11
11
import { kawaii, Settings } from "./components/settings.jsx";
12
12
import { Handle } from "@atcute/lexicons";
13
13
import { copyNotice } from "./utils/copy.js";
14
14
15
+
const customTitle: Record<string, string> = {
16
+
"did:plc:hx53snho72xoj7zqt5uice4u": "wrenls",
17
+
};
18
+
15
19
const Layout = (props: RouteSectionProps<unknown>) => {
16
20
const params = useParams();
17
21
const location = useLocation();
···
27
31
28
32
return (
29
33
<div id="main" class="m-4 flex flex-col items-center text-slate-900 dark:text-slate-100">
30
-
<Show when={location.pathname !== "/"}>
31
-
<MetaProvider>
34
+
<MetaProvider>
35
+
<Show when={location.pathname !== "/"}>
32
36
<Meta name="robots" content="noindex, nofollow" />
33
-
</MetaProvider>
34
-
</Show>
37
+
</Show>
38
+
<Title>{customTitle[params.repo] ?? "PDSls"}</Title>
39
+
</MetaProvider>
35
40
<div class="mb-2 flex w-[21rem] items-center sm:w-[24rem]">
36
41
<div class="flex basis-1/3 gap-x-2">
37
42
<A href="/jetstream">
···
43
48
</div>
44
49
<div class="flex basis-1/3 items-center justify-center text-center">
45
50
<A href="/" class="font-mono font-bold hover:underline">
46
-
PDSls
51
+
{customTitle[params.repo] ?? "PDSls"}
47
52
</A>
48
53
<Show when={localStorage.kawaii === "true" || kawaii()}>
49
54
<a
···
60
65
</Show>
61
66
</div>
62
67
<div class="justify-right flex basis-1/3 items-center gap-x-2">
63
-
<Show when={loginState()}>
68
+
<Show when={agent()}>
64
69
<RecordEditor create={true} />
65
70
</Show>
66
71
<Settings />
+8
-5
src/views/collection.tsx
+8
-5
src/views/collection.tsx
···
4
4
import { resolvePDS } from "../utils/api.js";
5
5
import * as TID from "@atcute/tid";
6
6
import { JSONType, JSONValue } from "../components/json.jsx";
7
-
import { agent, loginState } from "../components/login.jsx";
7
+
import { agent } from "../components/login.jsx";
8
8
import { createStore } from "solid-js/store";
9
9
import Tooltip from "../components/tooltip.jsx";
10
10
import { localDateFromTimestamp } from "../utils/date.js";
···
119
119
});
120
120
121
121
const BATCHSIZE = 200;
122
-
rpc = new Client({ handler: agent });
122
+
rpc = new Client({ handler: agent()! });
123
123
for (let i = 0; i < writes.length; i += BATCHSIZE) {
124
124
await rpc.post("com.atproto.repo.applyWrites", {
125
125
input: {
126
-
repo: agent.sub,
126
+
repo: agent()!.sub,
127
127
writes: writes.slice(i, i + BATCHSIZE),
128
128
},
129
129
});
130
130
}
131
-
window.location.reload();
131
+
setBatchDelete(false);
132
+
setRecords([]);
133
+
setCursor(undefined);
134
+
refetch();
132
135
};
133
136
134
137
const handleSelectionClick = (e: MouseEvent, index: number) => {
···
159
162
<Show when={records.length || response()}>
160
163
<div class="z-5 dark:bg-dark-500/70 backdrop-blur-xs sticky top-0 flex w-screen flex-col items-center justify-center gap-2 bg-zinc-100/70 py-3">
161
164
<div class="w-21rem sm:w-24rem flex items-center gap-2">
162
-
<Show when={loginState() && agent.sub === did}>
165
+
<Show when={agent() && agent()?.sub === did}>
163
166
<div class="flex items-center gap-x-2">
164
167
<Tooltip
165
168
text={batchDelete() ? "Cancel" : "Delete"}
+6
-1
src/views/home.tsx
+6
-1
src/views/home.tsx
···
21
21
<A href="/firehose" class="text-blue-400 hover:underline">
22
22
firehose
23
23
</A>{" "}
24
-
support.
24
+
streaming.
25
25
</p>
26
26
<p>
27
27
<A
···
70
70
<Tooltip text="GitHub">
71
71
<A href="https://github.com/notjuliet/pdsls" target="_blank">
72
72
<div class="i-lucide-github text-xl" />
73
+
</A>
74
+
</Tooltip>
75
+
<Tooltip text="Tangled">
76
+
<A href="https://tangled.sh/@pdsls.dev/pdsls/" target="_blank">
77
+
<div class="i-lucide-line-squiggle text-xl" />
73
78
</A>
74
79
</Tooltip>
75
80
<Tooltip text="Bluesky">
+3
-1
src/views/pds.tsx
+3
-1
src/views/pds.tsx
···
119
119
</>
120
120
)}
121
121
</Show>
122
-
<p class="w-full font-semibold text-stone-600 dark:text-stone-400">Repositories</p>
122
+
<p class="w-full font-semibold text-stone-600 dark:text-stone-400">
123
+
{repos()?.length} Repositories
124
+
</p>
123
125
<For each={repos()}>
124
126
{(repo) => (
125
127
<A
+23
-22
src/views/record.tsx
+23
-22
src/views/record.tsx
···
5
5
6
6
import { Backlinks } from "../components/backlinks.jsx";
7
7
import { JSONValue } from "../components/json.jsx";
8
-
import { agent, loginState } from "../components/login.jsx";
9
-
import { setCID, setValidRecord, setValidSchema, validRecord } from "../components/navbar.jsx";
8
+
import { agent } from "../components/login.jsx";
9
+
import { pds, setCID, setValidRecord, setValidSchema, validRecord } from "../components/navbar.jsx";
10
10
11
11
import { didDocCache, getAllBacklinks, LinkData, resolvePDS } from "../utils/api.js";
12
12
import { AtUri, uriTemplates } from "../utils/templates.js";
···
41
41
setValidSchema(undefined);
42
42
const pds = await resolvePDS(did);
43
43
rpc = new Client({ handler: new CredentialManager({ service: pds }) });
44
-
const res = await getRecord(did, params.collection, params.rkey);
44
+
const res = await rpc.get("com.atproto.repo.getRecord", {
45
+
params: {
46
+
repo: did as ActorIdentifier,
47
+
collection: params.collection as `${string}.${string}.${string}`,
48
+
rkey: params.rkey,
49
+
},
50
+
});
45
51
if (!res.ok) {
46
52
setValidRecord(false);
47
53
setNotice(res.data.error);
···
92
98
}
93
99
});
94
100
95
-
const getRecord = (repo: string, collection: string, rkey: string) =>
96
-
rpc.get("com.atproto.repo.getRecord", {
97
-
params: {
98
-
repo: repo as ActorIdentifier,
99
-
collection: collection as `${string}.${string}.${string}`,
100
-
rkey: rkey,
101
-
},
102
-
});
103
-
104
101
const deleteRecord = async () => {
105
-
rpc = new Client({ handler: agent });
102
+
rpc = new Client({ handler: agent()! });
106
103
await rpc.post("com.atproto.repo.deleteRecord", {
107
104
input: {
108
105
repo: params.repo as ActorIdentifier,
···
117
114
const uriParts = uri.split("/"); // expected: ["at:", "", "repo", "collection", "rkey"]
118
115
if (uriParts.length != 5) return undefined;
119
116
if (uriParts[0] !== "at:" || uriParts[1] !== "") return undefined;
120
-
const parsedUri: AtUri = {
121
-
repo: uriParts[2],
122
-
collection: uriParts[3],
123
-
rkey: uriParts[4],
124
-
};
117
+
const parsedUri: AtUri = { repo: uriParts[2], collection: uriParts[3], rkey: uriParts[4] };
125
118
const template = uriTemplates[parsedUri.collection];
126
119
if (!template) return undefined;
127
120
return template(parsedUri);
···
136
129
<div class="mt-3 break-words text-red-500 dark:text-red-400">{notice()}</div>
137
130
</Show>
138
131
<Show when={record()}>
139
-
<div class="my-3 flex gap-3">
132
+
<div class="dark:shadow-dark-900/80 dark:bg-dark-300 my-3 flex gap-3 rounded-full bg-white px-2.5 py-2 shadow-sm">
140
133
<Tooltip text="Copy record">
141
-
<button onclick={() => addToClipboard(JSON.stringify(record()?.value))}>
134
+
<button onclick={() => addToClipboard(JSON.stringify(record()?.value, null, 2))}>
142
135
<div class="i-lucide-copy text-xl" />
143
136
</button>
144
137
</Tooltip>
145
-
<Show when={loginState() && agent.sub === record()?.uri.split("/")[2]}>
138
+
<Show when={agent() && agent()?.sub === record()?.uri.split("/")[2]}>
146
139
<RecordEditor create={false} record={record()?.value} />
147
140
<div class="relative flex">
148
141
<Tooltip text="Delete">
···
177
170
{(externalLink) => (
178
171
<Tooltip text={`Open on ${externalLink().label}`}>
179
172
<a target="_blank" href={externalLink()?.link}>
180
-
<div class={`${externalLink().icon ?? "i-lucide-external-link"} text-xl`} />
173
+
<div class={`${externalLink().icon ?? "i-lucide-app-window"} text-xl`} />
181
174
</a>
182
175
</Tooltip>
183
176
)}
184
177
</Show>
178
+
<Tooltip text="Record on PDS">
179
+
<a
180
+
href={`https://${pds()}/xrpc/com.atproto.repo.getRecord?repo=${params.repo}&collection=${params.collection}&rkey=${params.rkey}`}
181
+
target="_blank"
182
+
>
183
+
<div class="i-lucide-external-link text-xl" />
184
+
</a>
185
+
</Tooltip>
185
186
<Show when={backlinks()}>
186
187
<Tooltip text={showBacklinks() ? "Show record" : "Show backlinks"}>
187
188
<button onclick={() => setShowBacklinks(!showBacklinks())}>
+4
-4
src/views/repo.tsx
+4
-4
src/views/repo.tsx
···
117
117
<Tooltip text="Filter operations">
118
118
<div class="i-lucide-filter text-xl" />
119
119
</Tooltip>
120
-
<div class="dark:shadow-dark-900/80 flex w-fit items-center rounded-full bg-neutral-200 shadow-md dark:bg-neutral-700">
120
+
<div class="dark:shadow-dark-900/80 dark:bg-dark-300 flex w-fit items-center rounded-full bg-white shadow-sm">
121
121
<FilterButton icon="i-lucide-at-sign" event="handle" />
122
122
<FilterButton icon="i-lucide-key-round" event="rotation_key" />
123
123
<FilterButton icon="i-lucide-server" event="service" />
···
178
178
const RepoTab = (props: { tab: Tab; label: string }) => (
179
179
<button
180
180
classList={{
181
-
"rounded-lg flex flex-1 py-1 justify-center": true,
182
-
"bg-zinc-200/70 dark:bg-dark-200 shadow-sm dark:shadow-dark-900/80": tab() === props.tab,
183
-
"bg-transparent hover:bg-zinc-200/50 dark:hover:bg-dark-300": tab() !== props.tab,
181
+
"rounded-full text-xs sm:text-sm flex flex-1 py-1.5 justify-center": true,
182
+
"bg-white dark:bg-dark-300 shadow-sm dark:shadow-dark-900/80": tab() === props.tab,
183
+
"bg-transparent hover:bg-zinc-200 dark:hover:bg-dark-200": tab() !== props.tab,
184
184
}}
185
185
onclick={() => setTab(props.tab)}
186
186
>
+1
-1
src/views/stream.tsx
+1
-1
src/views/stream.tsx