+4
-5
index.html
+4
-5
index.html
···
15
15
<link rel="preconnect" href="https://fonts.bunny.net" />
16
16
<link href="https://fonts.bunny.net/css?family=roboto-mono:400" rel="stylesheet" />
17
17
<script>
18
-
if (
18
+
document.documentElement.classList.toggle(
19
+
"dark",
19
20
localStorage.theme === "dark" ||
20
-
(!("theme" in localStorage) && window.matchMedia("(prefers-color-scheme: dark)").matches)
21
-
)
22
-
document.documentElement.classList.add("dark");
23
-
else document.documentElement.classList.remove("dark");
21
+
(!("theme" in localStorage) && window.matchMedia("(prefers-color-scheme: dark)").matches),
22
+
);
24
23
</script>
25
24
<script src="/src/index.tsx" type="module"></script>
26
25
</head>
+3
-1
package.json
+3
-1
package.json
···
9
9
"serve": "vite preview"
10
10
},
11
11
"devDependencies": {
12
+
"@iconify/tailwind4": "^1.0.6",
12
13
"@iconify-json/lucide": "^1.2.65",
14
+
"@tailwindcss/vite": "^4.1.12",
13
15
"prettier": "^3.6.2",
14
16
"prettier-plugin-tailwindcss": "^0.6.14",
17
+
"tailwindcss": "^4.1.12",
15
18
"typescript": "^5.9.2",
16
-
"unocss": "66.4.2",
17
19
"vite": "^7.1.3",
18
20
"vite-plugin-solid": "^2.11.8"
19
21
},
+389
-523
pnpm-lock.yaml
+389
-523
pnpm-lock.yaml
···
81
81
'@iconify-json/lucide':
82
82
specifier: ^1.2.65
83
83
version: 1.2.65
84
+
'@iconify/tailwind4':
85
+
specifier: ^1.0.6
86
+
version: 1.0.6(tailwindcss@4.1.12)
87
+
'@tailwindcss/vite':
88
+
specifier: ^4.1.12
89
+
version: 4.1.12(vite@7.1.3(@types/node@22.13.1)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.2))
84
90
prettier:
85
91
specifier: ^3.6.2
86
92
version: 3.6.2
87
93
prettier-plugin-tailwindcss:
88
94
specifier: ^0.6.14
89
95
version: 0.6.14(prettier@3.6.2)
96
+
tailwindcss:
97
+
specifier: ^4.1.12
98
+
version: 4.1.12
90
99
typescript:
91
100
specifier: ^5.9.2
92
101
version: 5.9.2
93
-
unocss:
94
-
specifier: 66.4.2
95
-
version: 66.4.2(postcss@8.5.6)(vite@7.1.3(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2))
96
102
vite:
97
103
specifier: ^7.1.3
98
-
version: 7.1.3(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)
104
+
version: 7.1.3(@types/node@22.13.1)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.2)
99
105
vite-plugin-solid:
100
106
specifier: ^2.11.8
101
-
version: 2.11.8(solid-js@1.9.9)(vite@7.1.3(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2))
107
+
version: 2.11.8(solid-js@1.9.9)(vite@7.1.3(@types/node@22.13.1)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.2))
102
108
103
109
packages:
104
110
···
109
115
'@antfu/install-pkg@1.1.0':
110
116
resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
111
117
112
-
'@antfu/utils@9.2.0':
113
-
resolution: {integrity: sha512-Oq1d9BGZakE/FyoEtcNeSwM7MpDO2vUBi11RWBZXf75zPsbUVWmUs03EqkRFrcgbXyKTas0BdZWC1wcuSoqSAw==}
118
+
'@antfu/utils@8.1.1':
119
+
resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==}
114
120
115
121
'@atcute/atproto@3.1.2':
116
122
resolution: {integrity: sha512-m6OWoGTeL8Wlw7cm8Nrf+NU24rlx5A0DzxEQQPPu1wqYNHw6S33nOU90W+U09vVN0aZGZUrLFfWWhAaSWTp1ZQ==}
···
559
565
'@iconify-json/lucide@1.2.65':
560
566
resolution: {integrity: sha512-Ur5I3dZyLW8bZLTEtsMKQ9lkl8u5HIiwO79pYxlvAzKQ0Mc4milB+G04CxnFqlB15x/lRq2rTPSi7ep1utDXrg==}
561
567
568
+
'@iconify/tailwind4@1.0.6':
569
+
resolution: {integrity: sha512-43ZXe+bC7CuE2LCgROdqbQeFYJi/J7L/k1UpSy8KDQlWVsWxPzLSWbWhlJx4uRYLOh1NRyw02YlDOgzBOFNd+A==}
570
+
peerDependencies:
571
+
tailwindcss: '>= 4'
572
+
562
573
'@iconify/types@2.0.0':
563
574
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
564
575
565
-
'@iconify/utils@3.0.1':
566
-
resolution: {integrity: sha512-A78CUEnFGX8I/WlILxJCuIJXloL0j/OJ9PSchPAfCargEIKmUBWvvEMmKWB5oONwiUqlNt+5eRufdkLxeHIWYw==}
576
+
'@iconify/utils@2.3.0':
577
+
resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==}
578
+
579
+
'@isaacs/fs-minipass@4.0.1':
580
+
resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
581
+
engines: {node: '>=18.0.0'}
567
582
568
583
'@jridgewell/gen-mapping@0.3.13':
569
584
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
585
+
586
+
'@jridgewell/remapping@2.3.5':
587
+
resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
570
588
571
589
'@jridgewell/resolve-uri@3.1.2':
572
590
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
···
583
601
584
602
'@noble/secp256k1@2.3.0':
585
603
resolution: {integrity: sha512-0TQed2gcBbIrh7Ccyw+y/uZQvbJwm7Ao4scBUxqpBCcsOlZG0O4KGfjtNAy/li4W8n1xt3dxrwJ0beZ2h2G6Kw==}
586
-
587
-
'@polka/url@1.0.0-next.29':
588
-
resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
589
-
590
-
'@quansync/fs@0.1.5':
591
-
resolution: {integrity: sha512-lNS9hL2aS2NZgNW7BBj+6EBl4rOf8l+tQ0eRY6JWCI8jI2kc53gSoqbjojU0OnAWhzoXiOjFyGsHcDGePB3lhA==}
592
604
593
605
'@rollup/rollup-android-arm-eabi@4.49.0':
594
606
resolution: {integrity: sha512-rlKIeL854Ed0e09QGYFlmDNbka6I3EQFw7iZuugQjMb11KMpJCLPFL4ZPbMfaEhLADEL1yx0oujGkBQ7+qW3eA==}
···
703
715
peerDependencies:
704
716
solid-js: ^1.8.6
705
717
706
-
'@types/babel__core@7.20.5':
707
-
resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
718
+
'@tailwindcss/node@4.1.12':
719
+
resolution: {integrity: sha512-3hm9brwvQkZFe++SBt+oLjo4OLDtkvlE8q2WalaD/7QWaeM7KEJbAiY/LJZUaCs7Xa8aUu4xy3uoyX4q54UVdQ==}
708
720
709
-
'@types/babel__generator@7.27.0':
710
-
resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
711
-
712
-
'@types/babel__template@7.4.4':
713
-
resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
714
-
715
-
'@types/babel__traverse@7.28.0':
716
-
resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
717
-
718
-
'@types/estree@1.0.8':
719
-
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
720
-
721
-
'@types/node@22.13.1':
722
-
resolution: {integrity: sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==}
723
-
724
-
'@unocss/astro@66.4.2':
725
-
resolution: {integrity: sha512-En3AKHwkiPxtZT95vkVrNiRYrB+DFVCikew6/dMMCWDWVKK0+5tEVUTzR1ak3+YnzAXl0NpWj8D4zHb0PxOs/A==}
726
-
peerDependencies:
727
-
vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0
728
-
peerDependenciesMeta:
729
-
vite:
730
-
optional: true
731
-
732
-
'@unocss/cli@66.4.2':
733
-
resolution: {integrity: sha512-WsXzrB0SHbSt2nOHtD5QM91VN8j38+wObqyGcoIhtBSugqzsc+t7AdPkxV/ZaYgtPAz87bR0WFEVKcbiBRnmJw==}
734
-
engines: {node: '>=14'}
735
-
hasBin: true
736
-
737
-
'@unocss/config@66.4.2':
738
-
resolution: {integrity: sha512-plji1gNGSzlWjuV2Uh0q6Dt5ZlNkOKCHpgxekW9J458WghGAMBeXgB9uNpWg6flilqP1g0GJQv+XvJcSkYRGpQ==}
739
-
engines: {node: '>=14'}
740
-
741
-
'@unocss/core@66.4.2':
742
-
resolution: {integrity: sha512-cYgMQrLhB9nRekv5c+yPDDa+5dzlMkA2UMQRil0s5D9Lb5n7NsCMcr6+nfxkcSYVLy92SbwDV45c6T7vIxFTOA==}
743
-
744
-
'@unocss/extractor-arbitrary-variants@66.4.2':
745
-
resolution: {integrity: sha512-T/eSeodfAp7HaWnQGqVLOsW4PbKUAvuybNRyvFWThMneM2qo+dOo3kFnA5my9ULAmRSFsAlyB1DnupD3qv5Klg==}
721
+
'@tailwindcss/oxide-android-arm64@4.1.12':
722
+
resolution: {integrity: sha512-oNY5pq+1gc4T6QVTsZKwZaGpBb2N1H1fsc1GD4o7yinFySqIuRZ2E4NvGasWc6PhYJwGK2+5YT1f9Tp80zUQZQ==}
723
+
engines: {node: '>= 10'}
724
+
cpu: [arm64]
725
+
os: [android]
746
726
747
-
'@unocss/inspector@66.4.2':
748
-
resolution: {integrity: sha512-ugcJK8r2ypM4eIdgetVn8RhfKrbA3AF3OQ/RohK5PPk2UPDAScqabzYpfdNW4eYQsBOZOgoiqWtnfc8weqo8LQ==}
727
+
'@tailwindcss/oxide-darwin-arm64@4.1.12':
728
+
resolution: {integrity: sha512-cq1qmq2HEtDV9HvZlTtrj671mCdGB93bVY6J29mwCyaMYCP/JaUBXxrQQQm7Qn33AXXASPUb2HFZlWiiHWFytw==}
729
+
engines: {node: '>= 10'}
730
+
cpu: [arm64]
731
+
os: [darwin]
749
732
750
-
'@unocss/postcss@66.4.2':
751
-
resolution: {integrity: sha512-tu4lnh6K27pIAuaQHlFlhXin8korwC0r1kQl00YMmF3THiX7orXkTP6xWGcQwnkbx4uQz1dw+tBimYxeaAMrhA==}
752
-
engines: {node: '>=14'}
753
-
peerDependencies:
754
-
postcss: ^8.4.21
733
+
'@tailwindcss/oxide-darwin-x64@4.1.12':
734
+
resolution: {integrity: sha512-6UCsIeFUcBfpangqlXay9Ffty9XhFH1QuUFn0WV83W8lGdX8cD5/+2ONLluALJD5+yJ7k8mVtwy3zMZmzEfbLg==}
735
+
engines: {node: '>= 10'}
736
+
cpu: [x64]
737
+
os: [darwin]
755
738
756
-
'@unocss/preset-attributify@66.4.2':
757
-
resolution: {integrity: sha512-DwFJJkkawmHpjo3pGQE8FyoPsvhbxh+QMvvaAdYpo+iZ5HRkeDml9SOj7u6SGTcmbNyI+QR61s0KM8fxx6HcVQ==}
739
+
'@tailwindcss/oxide-freebsd-x64@4.1.12':
740
+
resolution: {integrity: sha512-JOH/f7j6+nYXIrHobRYCtoArJdMJh5zy5lr0FV0Qu47MID/vqJAY3r/OElPzx1C/wdT1uS7cPq+xdYYelny1ww==}
741
+
engines: {node: '>= 10'}
742
+
cpu: [x64]
743
+
os: [freebsd]
758
744
759
-
'@unocss/preset-icons@66.4.2':
760
-
resolution: {integrity: sha512-qJx9gmesrvrmoTe9Mqoidihad8hm2MSD4QAezhfDSAyllioJOgyT0Bev/IEWAbehe9jtqYIh8v1oCerBPbGn6Q==}
745
+
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.12':
746
+
resolution: {integrity: sha512-v4Ghvi9AU1SYgGr3/j38PD8PEe6bRfTnNSUE3YCMIRrrNigCFtHZ2TCm8142X8fcSqHBZBceDx+JlFJEfNg5zQ==}
747
+
engines: {node: '>= 10'}
748
+
cpu: [arm]
749
+
os: [linux]
761
750
762
-
'@unocss/preset-mini@66.4.2':
763
-
resolution: {integrity: sha512-Ry+5hM+XLmT8HrEb182mUfcZuyrZ8xR+TBe72DBcliJ1DhOV3K67TCxwQucfb0zHbGV71HNWdPmHsLKxPDgweQ==}
751
+
'@tailwindcss/oxide-linux-arm64-gnu@4.1.12':
752
+
resolution: {integrity: sha512-YP5s1LmetL9UsvVAKusHSyPlzSRqYyRB0f+Kl/xcYQSPLEw/BvGfxzbH+ihUciePDjiXwHh+p+qbSP3SlJw+6g==}
753
+
engines: {node: '>= 10'}
754
+
cpu: [arm64]
755
+
os: [linux]
764
756
765
-
'@unocss/preset-tagify@66.4.2':
766
-
resolution: {integrity: sha512-dECS09LqWJY4sYpgPUH2OAUftWU/tiZPR2XDRoTngeGU37GxSN+1sWtSmB7vwDm3C7opsdVUN20he8F1LUNubw==}
757
+
'@tailwindcss/oxide-linux-arm64-musl@4.1.12':
758
+
resolution: {integrity: sha512-V8pAM3s8gsrXcCv6kCHSuwyb/gPsd863iT+v1PGXC4fSL/OJqsKhfK//v8P+w9ThKIoqNbEnsZqNy+WDnwQqCA==}
759
+
engines: {node: '>= 10'}
760
+
cpu: [arm64]
761
+
os: [linux]
767
762
768
-
'@unocss/preset-typography@66.4.2':
769
-
resolution: {integrity: sha512-ZOKRuR5+V0r30QTVq04/6ZoIw75me3V25v2dU2YWJXIzwpMKmQ9TUN/M1yeiEUFfXjOaruWX6Ad6CvAw2MlCew==}
763
+
'@tailwindcss/oxide-linux-x64-gnu@4.1.12':
764
+
resolution: {integrity: sha512-xYfqYLjvm2UQ3TZggTGrwxjYaLB62b1Wiysw/YE3Yqbh86sOMoTn0feF98PonP7LtjsWOWcXEbGqDL7zv0uW8Q==}
765
+
engines: {node: '>= 10'}
766
+
cpu: [x64]
767
+
os: [linux]
770
768
771
-
'@unocss/preset-uno@66.4.2':
772
-
resolution: {integrity: sha512-1MFtPivGcpqRQFWdjtP40Enop1y3XDb3tlZXoMQUX0IGLG8HJOT+lfQx/Xl9t73ShJ8aAJ/l6qTxC43ZGNACzA==}
769
+
'@tailwindcss/oxide-linux-x64-musl@4.1.12':
770
+
resolution: {integrity: sha512-ha0pHPamN+fWZY7GCzz5rKunlv9L5R8kdh+YNvP5awe3LtuXb5nRi/H27GeL2U+TdhDOptU7T6Is7mdwh5Ar3A==}
771
+
engines: {node: '>= 10'}
772
+
cpu: [x64]
773
+
os: [linux]
773
774
774
-
'@unocss/preset-web-fonts@66.4.2':
775
-
resolution: {integrity: sha512-4FYmleeRoM8r2DqGl6dfIjnX57tepcfZCvVfeCqYnk7475Yddmv1OYkoMjkWMnkK9MzdSxsFwHMU6CIUTmFTzQ==}
775
+
'@tailwindcss/oxide-wasm32-wasi@4.1.12':
776
+
resolution: {integrity: sha512-4tSyu3dW+ktzdEpuk6g49KdEangu3eCYoqPhWNsZgUhyegEda3M9rG0/j1GV/JjVVsj+lG7jWAyrTlLzd/WEBg==}
777
+
engines: {node: '>=14.0.0'}
778
+
cpu: [wasm32]
779
+
bundledDependencies:
780
+
- '@napi-rs/wasm-runtime'
781
+
- '@emnapi/core'
782
+
- '@emnapi/runtime'
783
+
- '@tybys/wasm-util'
784
+
- '@emnapi/wasi-threads'
785
+
- tslib
776
786
777
-
'@unocss/preset-wind3@66.4.2':
778
-
resolution: {integrity: sha512-0Aye/PaT08M/cQhPnGKn93iEVoRJbym0/1eomMvXoL+8oc7DVry35ws06r5CLu5h1sXI6UmS6sejoePFlSkLJQ==}
787
+
'@tailwindcss/oxide-win32-arm64-msvc@4.1.12':
788
+
resolution: {integrity: sha512-iGLyD/cVP724+FGtMWslhcFyg4xyYyM+5F4hGvKA7eifPkXHRAUDFaimu53fpNg9X8dfP75pXx/zFt/jlNF+lg==}
789
+
engines: {node: '>= 10'}
790
+
cpu: [arm64]
791
+
os: [win32]
779
792
780
-
'@unocss/preset-wind4@66.4.2':
781
-
resolution: {integrity: sha512-F4RZsDqIpnSevD9hY353+Tw5gxpJuHA5HwdKjLnC/TnT9VKKVmV7qUEZ6M0jEuAk1kz2x3/ngnQ9Ftw+C2L84A==}
793
+
'@tailwindcss/oxide-win32-x64-msvc@4.1.12':
794
+
resolution: {integrity: sha512-NKIh5rzw6CpEodv/++r0hGLlfgT/gFN+5WNdZtvh6wpU2BpGNgdjvj6H2oFc8nCM839QM1YOhjpgbAONUb4IxA==}
795
+
engines: {node: '>= 10'}
796
+
cpu: [x64]
797
+
os: [win32]
782
798
783
-
'@unocss/preset-wind@66.4.2':
784
-
resolution: {integrity: sha512-z/rFYFINNqmBtl3Dh+7UCKpPnPkxM7IIUGszMnvdntky9uhLauJ11dt/Puir73sM2cAfywfgvnHyZ00m0pg7rA==}
799
+
'@tailwindcss/oxide@4.1.12':
800
+
resolution: {integrity: sha512-gM5EoKHW/ukmlEtphNwaGx45fGoEmP10v51t9unv55voWh6WrOL19hfuIdo2FjxIaZzw776/BUQg7Pck++cIVw==}
801
+
engines: {node: '>= 10'}
785
802
786
-
'@unocss/reset@66.4.2':
787
-
resolution: {integrity: sha512-s3Kq4Q6a/d3/jYe6HTCfXUx7zYAYufetId5n66DZHzQxpeu6CoBS83+b37STTKsw27SOgV28cPJlJtZ6/D6Bhw==}
803
+
'@tailwindcss/vite@4.1.12':
804
+
resolution: {integrity: sha512-4pt0AMFDx7gzIrAOIYgYP0KCBuKWqyW8ayrdiLEjoJTT4pKTjrzG/e4uzWtTLDziC+66R9wbUqZBccJalSE5vQ==}
805
+
peerDependencies:
806
+
vite: ^5.2.0 || ^6 || ^7
788
807
789
-
'@unocss/rule-utils@66.4.2':
790
-
resolution: {integrity: sha512-7z3IuajwXhy2cx3E0IGOFXIiuKC79/jzm4Tt56TC68nXLh/etlH0fKhxVwkZ/HbcQRpVwWyDRNcbh29pmA3DwQ==}
791
-
engines: {node: '>=14'}
808
+
'@types/babel__core@7.20.5':
809
+
resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
792
810
793
-
'@unocss/transformer-attributify-jsx@66.4.2':
794
-
resolution: {integrity: sha512-de6LzoyW1tkdOftlCrj6z8wEb4j6l1sqmOU1nYKkYHw7luLFGxRUELC7iujlI9KmylbM02bcKfLETAfJy/je2w==}
811
+
'@types/babel__generator@7.27.0':
812
+
resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
795
813
796
-
'@unocss/transformer-compile-class@66.4.2':
797
-
resolution: {integrity: sha512-+oiIrV8c3T7qiJdICr6YsEWik5sjbWirXF0mlpcBvZu2HyV559hvHjzuWKr/fl7xYYZKDL9FvddbqWo3DOXh3Q==}
814
+
'@types/babel__template@7.4.4':
815
+
resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
798
816
799
-
'@unocss/transformer-directives@66.4.2':
800
-
resolution: {integrity: sha512-7m/dTrCUkBkZeSRKPxPEo65Rav239orQSLq6sztwZhoA4x/6H8r58xCkAK0qC9VEalyerpCpyarU3sKN4+ehNg==}
817
+
'@types/babel__traverse@7.28.0':
818
+
resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
801
819
802
-
'@unocss/transformer-variant-group@66.4.2':
803
-
resolution: {integrity: sha512-SbPDbZUrhQyL4CpvnpvUfrr1DFq8AKf8ofPGbMJDm5S2TInQ34vFaIrhNroGR0szntMZRH5Zlkq6LtVUKDRs5g==}
820
+
'@types/estree@1.0.8':
821
+
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
804
822
805
-
'@unocss/vite@66.4.2':
806
-
resolution: {integrity: sha512-7eON9iPF3qWzuI+M6u0kq7K3y9nEbimZlLj01nGoqrgSGxEsyJpP01QQQsmT7FPRiZzRMJv7BiKMEyDQSuRRCA==}
807
-
peerDependencies:
808
-
vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0
823
+
'@types/node@22.13.1':
824
+
resolution: {integrity: sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==}
809
825
810
826
acorn@8.15.0:
811
827
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
812
828
engines: {node: '>=0.4.0'}
813
829
hasBin: true
814
830
815
-
anymatch@3.1.3:
816
-
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
817
-
engines: {node: '>= 8'}
818
-
819
831
babel-plugin-jsx-dom-expressions@0.40.1:
820
832
resolution: {integrity: sha512-b4iHuirqK7RgaMzB2Lsl7MqrlDgQtVRSSazyrmx7wB3T759ggGjod5Rkok5MfHjQXhR7tRPmdwoeGPqBnW2KfA==}
821
833
peerDependencies:
···
830
842
solid-js:
831
843
optional: true
832
844
833
-
binary-extensions@2.3.0:
834
-
resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
835
-
engines: {node: '>=8'}
836
-
837
-
braces@3.0.3:
838
-
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
839
-
engines: {node: '>=8'}
840
-
841
845
browserslist@4.25.3:
842
846
resolution: {integrity: sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ==}
843
847
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
844
848
hasBin: true
845
-
846
-
cac@6.7.14:
847
-
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
848
-
engines: {node: '>=8'}
849
849
850
850
caniuse-lite@1.0.30001737:
851
851
resolution: {integrity: sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw==}
852
852
853
-
chokidar@3.6.0:
854
-
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
855
-
engines: {node: '>= 8.10.0'}
856
-
857
-
colorette@2.0.20:
858
-
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
853
+
chownr@3.0.0:
854
+
resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
855
+
engines: {node: '>=18'}
859
856
860
857
confbox@0.1.8:
861
858
resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
···
863
860
confbox@0.2.2:
864
861
resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==}
865
862
866
-
consola@3.4.2:
867
-
resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
868
-
engines: {node: ^14.18.0 || >=16.10.0}
869
-
870
863
convert-source-map@2.0.0:
871
864
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
872
865
873
-
css-tree@3.1.0:
874
-
resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==}
875
-
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
876
-
877
866
csstype@3.1.3:
878
867
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
879
868
···
886
875
supports-color:
887
876
optional: true
888
877
889
-
defu@6.1.4:
890
-
resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
891
-
892
-
destr@2.0.5:
893
-
resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==}
894
-
895
-
duplexer@0.1.2:
896
-
resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
878
+
detect-libc@2.0.4:
879
+
resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==}
880
+
engines: {node: '>=8'}
897
881
898
882
electron-to-chromium@1.5.211:
899
883
resolution: {integrity: sha512-IGBvimJkotaLzFnwIVgW9/UD/AOJ2tByUmeOrtqBfACSbAw5b1G0XpvdaieKyc7ULmbwXVx+4e4Be8pOPBrYkw==}
900
884
885
+
enhanced-resolve@5.18.3:
886
+
resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==}
887
+
engines: {node: '>=10.13.0'}
888
+
901
889
entities@6.0.1:
902
890
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
903
891
engines: {node: '>=0.12'}
···
931
919
picomatch:
932
920
optional: true
933
921
934
-
fill-range@7.1.1:
935
-
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
936
-
engines: {node: '>=8'}
937
-
938
922
fsevents@2.3.3:
939
923
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
940
924
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
···
947
931
get-tsconfig@4.10.1:
948
932
resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==}
949
933
950
-
glob-parent@5.1.2:
951
-
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
952
-
engines: {node: '>= 6'}
953
-
954
934
globals@15.15.0:
955
935
resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==}
956
936
engines: {node: '>=18'}
957
937
958
-
gzip-size@6.0.0:
959
-
resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==}
960
-
engines: {node: '>=10'}
938
+
graceful-fs@4.2.11:
939
+
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
961
940
962
941
hls.js@1.6.11:
963
942
resolution: {integrity: sha512-tdDwOAgPGXohSiNE4oxGr3CI9Hx9lsGLFe6TULUvRk2TfHS+w1tSAJntrvxsHaxvjtr6BXsDZM7NOqJFhU4mmg==}
···
965
944
html-entities@2.3.3:
966
945
resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==}
967
946
968
-
is-binary-path@2.1.0:
969
-
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
970
-
engines: {node: '>=8'}
971
-
972
-
is-extglob@2.1.1:
973
-
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
974
-
engines: {node: '>=0.10.0'}
975
-
976
-
is-glob@4.0.3:
977
-
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
978
-
engines: {node: '>=0.10.0'}
979
-
980
-
is-number@7.0.0:
981
-
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
982
-
engines: {node: '>=0.12.0'}
983
-
984
947
is-what@4.1.16:
985
948
resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==}
986
949
engines: {node: '>=12.13'}
···
1005
968
kolorist@1.8.0:
1006
969
resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
1007
970
971
+
lightningcss-darwin-arm64@1.30.1:
972
+
resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==}
973
+
engines: {node: '>= 12.0.0'}
974
+
cpu: [arm64]
975
+
os: [darwin]
976
+
977
+
lightningcss-darwin-x64@1.30.1:
978
+
resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==}
979
+
engines: {node: '>= 12.0.0'}
980
+
cpu: [x64]
981
+
os: [darwin]
982
+
983
+
lightningcss-freebsd-x64@1.30.1:
984
+
resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==}
985
+
engines: {node: '>= 12.0.0'}
986
+
cpu: [x64]
987
+
os: [freebsd]
988
+
989
+
lightningcss-linux-arm-gnueabihf@1.30.1:
990
+
resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==}
991
+
engines: {node: '>= 12.0.0'}
992
+
cpu: [arm]
993
+
os: [linux]
994
+
995
+
lightningcss-linux-arm64-gnu@1.30.1:
996
+
resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==}
997
+
engines: {node: '>= 12.0.0'}
998
+
cpu: [arm64]
999
+
os: [linux]
1000
+
1001
+
lightningcss-linux-arm64-musl@1.30.1:
1002
+
resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==}
1003
+
engines: {node: '>= 12.0.0'}
1004
+
cpu: [arm64]
1005
+
os: [linux]
1006
+
1007
+
lightningcss-linux-x64-gnu@1.30.1:
1008
+
resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==}
1009
+
engines: {node: '>= 12.0.0'}
1010
+
cpu: [x64]
1011
+
os: [linux]
1012
+
1013
+
lightningcss-linux-x64-musl@1.30.1:
1014
+
resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==}
1015
+
engines: {node: '>= 12.0.0'}
1016
+
cpu: [x64]
1017
+
os: [linux]
1018
+
1019
+
lightningcss-win32-arm64-msvc@1.30.1:
1020
+
resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==}
1021
+
engines: {node: '>= 12.0.0'}
1022
+
cpu: [arm64]
1023
+
os: [win32]
1024
+
1025
+
lightningcss-win32-x64-msvc@1.30.1:
1026
+
resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==}
1027
+
engines: {node: '>= 12.0.0'}
1028
+
cpu: [x64]
1029
+
os: [win32]
1030
+
1031
+
lightningcss@1.30.1:
1032
+
resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==}
1033
+
engines: {node: '>= 12.0.0'}
1034
+
1008
1035
local-pkg@1.1.2:
1009
1036
resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==}
1010
1037
engines: {node: '>=14'}
···
1015
1042
magic-string@0.30.18:
1016
1043
resolution: {integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==}
1017
1044
1018
-
mdn-data@2.12.2:
1019
-
resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
1020
-
1021
1045
merge-anything@5.1.7:
1022
1046
resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==}
1023
1047
engines: {node: '>=12.13'}
1024
1048
1049
+
minipass@7.1.2:
1050
+
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
1051
+
engines: {node: '>=16 || 14 >=14.17'}
1052
+
1053
+
minizlib@3.0.2:
1054
+
resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==}
1055
+
engines: {node: '>= 18'}
1056
+
1057
+
mkdirp@3.0.1:
1058
+
resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==}
1059
+
engines: {node: '>=10'}
1060
+
hasBin: true
1061
+
1025
1062
mlly@1.8.0:
1026
1063
resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
1027
1064
1028
1065
monaco-editor@0.52.2:
1029
1066
resolution: {integrity: sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==}
1030
-
1031
-
mrmime@2.0.1:
1032
-
resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
1033
-
engines: {node: '>=10'}
1034
1067
1035
1068
ms@2.1.3:
1036
1069
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
···
1049
1082
engines: {node: ^18 || >=20}
1050
1083
hasBin: true
1051
1084
1052
-
node-fetch-native@1.6.7:
1053
-
resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==}
1054
-
1055
1085
node-releases@2.0.19:
1056
1086
resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
1057
1087
1058
-
normalize-path@3.0.0:
1059
-
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
1060
-
engines: {node: '>=0.10.0'}
1061
-
1062
-
ofetch@1.4.1:
1063
-
resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==}
1064
-
1065
1088
package-manager-detector@1.3.0:
1066
1089
resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==}
1067
1090
···
1071
1094
pathe@2.0.3:
1072
1095
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
1073
1096
1074
-
perfect-debounce@1.0.0:
1075
-
resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
1076
-
1077
1097
picocolors@1.1.1:
1078
1098
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
1079
-
1080
-
picomatch@2.3.1:
1081
-
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1082
-
engines: {node: '>=8.6'}
1083
1099
1084
1100
picomatch@4.0.3:
1085
1101
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
···
1163
1179
1164
1180
quansync@0.2.11:
1165
1181
resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==}
1166
-
1167
-
readdirp@3.6.0:
1168
-
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1169
-
engines: {node: '>=8.10.0'}
1170
1182
1171
1183
resolve-pkg-maps@1.0.0:
1172
1184
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
···
1190
1202
resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==}
1191
1203
engines: {node: '>=10'}
1192
1204
1193
-
sirv@3.0.1:
1194
-
resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==}
1195
-
engines: {node: '>=18'}
1196
-
1197
1205
solid-js@1.9.9:
1198
1206
resolution: {integrity: sha512-A0ZBPJQldAeGCTW0YRYJmt7RCeh5rbFfPZ2aOttgYnctHE7HgKeHCBB/PVc2P7eOfmNXqMFFFoYYdm3S4dcbkA==}
1199
1207
···
1206
1214
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
1207
1215
engines: {node: '>=0.10.0'}
1208
1216
1217
+
tailwindcss@4.1.12:
1218
+
resolution: {integrity: sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==}
1219
+
1220
+
tapable@2.2.3:
1221
+
resolution: {integrity: sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==}
1222
+
engines: {node: '>=6'}
1223
+
1224
+
tar@7.4.3:
1225
+
resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==}
1226
+
engines: {node: '>=18'}
1227
+
1209
1228
tinyexec@1.0.1:
1210
1229
resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==}
1211
1230
···
1213
1232
resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
1214
1233
engines: {node: '>=12.0.0'}
1215
1234
1216
-
to-regex-range@5.0.1:
1217
-
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1218
-
engines: {node: '>=8.0'}
1219
-
1220
-
totalist@3.0.1:
1221
-
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
1222
-
engines: {node: '>=6'}
1223
-
1224
1235
tsx@4.19.2:
1225
1236
resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==}
1226
1237
engines: {node: '>=18.0.0'}
···
1233
1244
1234
1245
ufo@1.6.1:
1235
1246
resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
1236
-
1237
-
unconfig@7.3.3:
1238
-
resolution: {integrity: sha512-QCkQoOnJF8L107gxfHL0uavn7WD9b3dpBcFX6HtfQYmjw2YzWxGuFQ0N0J6tE9oguCBJn9KOvfqYDCMPHIZrBA==}
1239
1247
1240
1248
undici-types@6.20.0:
1241
1249
resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
1242
1250
1243
-
unocss@66.4.2:
1244
-
resolution: {integrity: sha512-PsZ+4XF/ekiParR7PZEM7AchvHJ78EIfOXlqTPflTOXCYgZ77kG9NaIaIf4lHRevY+rRTyrHrjxdg1Ern2j8qw==}
1245
-
engines: {node: '>=14'}
1246
-
peerDependencies:
1247
-
'@unocss/webpack': 66.4.2
1248
-
vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0
1249
-
peerDependenciesMeta:
1250
-
'@unocss/webpack':
1251
-
optional: true
1252
-
vite:
1253
-
optional: true
1254
-
1255
-
unplugin-utils@0.2.5:
1256
-
resolution: {integrity: sha512-gwXJnPRewT4rT7sBi/IvxKTjsms7jX7QIDLOClApuZwR49SXbrB1z2NLUZ+vDHyqCj/n58OzRRqaW+B8OZi8vg==}
1257
-
engines: {node: '>=18.12.0'}
1258
-
1259
1251
update-browserslist-db@1.1.3:
1260
1252
resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
1261
1253
hasBin: true
···
1323
1315
vite:
1324
1316
optional: true
1325
1317
1326
-
vue-flow-layout@0.2.0:
1327
-
resolution: {integrity: sha512-zKgsWWkXq0xrus7H4Mc+uFs1ESrmdTXlO0YNbR6wMdPaFvosL3fMB8N7uTV308UhGy9UvTrGhIY7mVz9eN+L0Q==}
1328
-
1329
1318
yallist@3.1.1:
1330
1319
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
1320
+
1321
+
yallist@5.0.0:
1322
+
resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
1323
+
engines: {node: '>=18'}
1331
1324
1332
1325
yocto-queue@1.2.1:
1333
1326
resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==}
···
1345
1338
package-manager-detector: 1.3.0
1346
1339
tinyexec: 1.0.1
1347
1340
1348
-
'@antfu/utils@9.2.0': {}
1341
+
'@antfu/utils@8.1.1': {}
1349
1342
1350
1343
'@atcute/atproto@3.1.2':
1351
1344
dependencies:
···
1712
1705
dependencies:
1713
1706
'@iconify/types': 2.0.0
1714
1707
1708
+
'@iconify/tailwind4@1.0.6(tailwindcss@4.1.12)':
1709
+
dependencies:
1710
+
'@iconify/types': 2.0.0
1711
+
'@iconify/utils': 2.3.0
1712
+
tailwindcss: 4.1.12
1713
+
transitivePeerDependencies:
1714
+
- supports-color
1715
+
1715
1716
'@iconify/types@2.0.0': {}
1716
1717
1717
-
'@iconify/utils@3.0.1':
1718
+
'@iconify/utils@2.3.0':
1718
1719
dependencies:
1719
1720
'@antfu/install-pkg': 1.1.0
1720
-
'@antfu/utils': 9.2.0
1721
+
'@antfu/utils': 8.1.1
1721
1722
'@iconify/types': 2.0.0
1722
1723
debug: 4.4.1
1723
1724
globals: 15.15.0
···
1727
1728
transitivePeerDependencies:
1728
1729
- supports-color
1729
1730
1731
+
'@isaacs/fs-minipass@4.0.1':
1732
+
dependencies:
1733
+
minipass: 7.1.2
1734
+
1730
1735
'@jridgewell/gen-mapping@0.3.13':
1731
1736
dependencies:
1732
1737
'@jridgewell/sourcemap-codec': 1.5.5
1733
1738
'@jridgewell/trace-mapping': 0.3.30
1734
1739
1740
+
'@jridgewell/remapping@2.3.5':
1741
+
dependencies:
1742
+
'@jridgewell/gen-mapping': 0.3.13
1743
+
'@jridgewell/trace-mapping': 0.3.30
1744
+
1735
1745
'@jridgewell/resolve-uri@3.1.2': {}
1736
1746
1737
1747
'@jridgewell/sourcemap-codec@1.5.5': {}
···
1744
1754
'@jsr/mary__exif-rm@0.2.2': {}
1745
1755
1746
1756
'@noble/secp256k1@2.3.0': {}
1747
-
1748
-
'@polka/url@1.0.0-next.29': {}
1749
-
1750
-
'@quansync/fs@0.1.5':
1751
-
dependencies:
1752
-
quansync: 0.2.11
1753
1757
1754
1758
'@rollup/rollup-android-arm-eabi@4.49.0':
1755
1759
optional: true
···
1825
1829
dependencies:
1826
1830
solid-js: 1.9.9
1827
1831
1828
-
'@types/babel__core@7.20.5':
1832
+
'@tailwindcss/node@4.1.12':
1829
1833
dependencies:
1830
-
'@babel/parser': 7.28.3
1831
-
'@babel/types': 7.28.2
1832
-
'@types/babel__generator': 7.27.0
1833
-
'@types/babel__template': 7.4.4
1834
-
'@types/babel__traverse': 7.28.0
1835
-
1836
-
'@types/babel__generator@7.27.0':
1837
-
dependencies:
1838
-
'@babel/types': 7.28.2
1839
-
1840
-
'@types/babel__template@7.4.4':
1841
-
dependencies:
1842
-
'@babel/parser': 7.28.3
1843
-
'@babel/types': 7.28.2
1844
-
1845
-
'@types/babel__traverse@7.28.0':
1846
-
dependencies:
1847
-
'@babel/types': 7.28.2
1848
-
1849
-
'@types/estree@1.0.8': {}
1850
-
1851
-
'@types/node@22.13.1':
1852
-
dependencies:
1853
-
undici-types: 6.20.0
1854
-
optional: true
1855
-
1856
-
'@unocss/astro@66.4.2(vite@7.1.3(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2))':
1857
-
dependencies:
1858
-
'@unocss/core': 66.4.2
1859
-
'@unocss/reset': 66.4.2
1860
-
'@unocss/vite': 66.4.2(vite@7.1.3(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2))
1861
-
optionalDependencies:
1862
-
vite: 7.1.3(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)
1863
-
1864
-
'@unocss/cli@66.4.2':
1865
-
dependencies:
1866
-
'@ampproject/remapping': 2.3.0
1867
-
'@unocss/config': 66.4.2
1868
-
'@unocss/core': 66.4.2
1869
-
'@unocss/preset-uno': 66.4.2
1870
-
cac: 6.7.14
1871
-
chokidar: 3.6.0
1872
-
colorette: 2.0.20
1873
-
consola: 3.4.2
1834
+
'@jridgewell/remapping': 2.3.5
1835
+
enhanced-resolve: 5.18.3
1836
+
jiti: 2.5.1
1837
+
lightningcss: 1.30.1
1874
1838
magic-string: 0.30.18
1875
-
pathe: 2.0.3
1876
-
perfect-debounce: 1.0.0
1877
-
tinyglobby: 0.2.14
1878
-
unplugin-utils: 0.2.5
1839
+
source-map-js: 1.2.1
1840
+
tailwindcss: 4.1.12
1879
1841
1880
-
'@unocss/config@66.4.2':
1881
-
dependencies:
1882
-
'@unocss/core': 66.4.2
1883
-
unconfig: 7.3.3
1842
+
'@tailwindcss/oxide-android-arm64@4.1.12':
1843
+
optional: true
1884
1844
1885
-
'@unocss/core@66.4.2': {}
1845
+
'@tailwindcss/oxide-darwin-arm64@4.1.12':
1846
+
optional: true
1886
1847
1887
-
'@unocss/extractor-arbitrary-variants@66.4.2':
1888
-
dependencies:
1889
-
'@unocss/core': 66.4.2
1848
+
'@tailwindcss/oxide-darwin-x64@4.1.12':
1849
+
optional: true
1890
1850
1891
-
'@unocss/inspector@66.4.2':
1892
-
dependencies:
1893
-
'@unocss/core': 66.4.2
1894
-
'@unocss/rule-utils': 66.4.2
1895
-
colorette: 2.0.20
1896
-
gzip-size: 6.0.0
1897
-
sirv: 3.0.1
1898
-
vue-flow-layout: 0.2.0
1851
+
'@tailwindcss/oxide-freebsd-x64@4.1.12':
1852
+
optional: true
1899
1853
1900
-
'@unocss/postcss@66.4.2(postcss@8.5.6)':
1901
-
dependencies:
1902
-
'@unocss/config': 66.4.2
1903
-
'@unocss/core': 66.4.2
1904
-
'@unocss/rule-utils': 66.4.2
1905
-
css-tree: 3.1.0
1906
-
postcss: 8.5.6
1907
-
tinyglobby: 0.2.14
1854
+
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.12':
1855
+
optional: true
1908
1856
1909
-
'@unocss/preset-attributify@66.4.2':
1910
-
dependencies:
1911
-
'@unocss/core': 66.4.2
1857
+
'@tailwindcss/oxide-linux-arm64-gnu@4.1.12':
1858
+
optional: true
1912
1859
1913
-
'@unocss/preset-icons@66.4.2':
1914
-
dependencies:
1915
-
'@iconify/utils': 3.0.1
1916
-
'@unocss/core': 66.4.2
1917
-
ofetch: 1.4.1
1918
-
transitivePeerDependencies:
1919
-
- supports-color
1860
+
'@tailwindcss/oxide-linux-arm64-musl@4.1.12':
1861
+
optional: true
1920
1862
1921
-
'@unocss/preset-mini@66.4.2':
1922
-
dependencies:
1923
-
'@unocss/core': 66.4.2
1924
-
'@unocss/extractor-arbitrary-variants': 66.4.2
1925
-
'@unocss/rule-utils': 66.4.2
1863
+
'@tailwindcss/oxide-linux-x64-gnu@4.1.12':
1864
+
optional: true
1926
1865
1927
-
'@unocss/preset-tagify@66.4.2':
1928
-
dependencies:
1929
-
'@unocss/core': 66.4.2
1866
+
'@tailwindcss/oxide-linux-x64-musl@4.1.12':
1867
+
optional: true
1930
1868
1931
-
'@unocss/preset-typography@66.4.2':
1932
-
dependencies:
1933
-
'@unocss/core': 66.4.2
1934
-
'@unocss/preset-mini': 66.4.2
1935
-
'@unocss/rule-utils': 66.4.2
1869
+
'@tailwindcss/oxide-wasm32-wasi@4.1.12':
1870
+
optional: true
1936
1871
1937
-
'@unocss/preset-uno@66.4.2':
1938
-
dependencies:
1939
-
'@unocss/core': 66.4.2
1940
-
'@unocss/preset-wind3': 66.4.2
1872
+
'@tailwindcss/oxide-win32-arm64-msvc@4.1.12':
1873
+
optional: true
1941
1874
1942
-
'@unocss/preset-web-fonts@66.4.2':
1943
-
dependencies:
1944
-
'@unocss/core': 66.4.2
1945
-
ofetch: 1.4.1
1875
+
'@tailwindcss/oxide-win32-x64-msvc@4.1.12':
1876
+
optional: true
1946
1877
1947
-
'@unocss/preset-wind3@66.4.2':
1878
+
'@tailwindcss/oxide@4.1.12':
1948
1879
dependencies:
1949
-
'@unocss/core': 66.4.2
1950
-
'@unocss/preset-mini': 66.4.2
1951
-
'@unocss/rule-utils': 66.4.2
1880
+
detect-libc: 2.0.4
1881
+
tar: 7.4.3
1882
+
optionalDependencies:
1883
+
'@tailwindcss/oxide-android-arm64': 4.1.12
1884
+
'@tailwindcss/oxide-darwin-arm64': 4.1.12
1885
+
'@tailwindcss/oxide-darwin-x64': 4.1.12
1886
+
'@tailwindcss/oxide-freebsd-x64': 4.1.12
1887
+
'@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.12
1888
+
'@tailwindcss/oxide-linux-arm64-gnu': 4.1.12
1889
+
'@tailwindcss/oxide-linux-arm64-musl': 4.1.12
1890
+
'@tailwindcss/oxide-linux-x64-gnu': 4.1.12
1891
+
'@tailwindcss/oxide-linux-x64-musl': 4.1.12
1892
+
'@tailwindcss/oxide-wasm32-wasi': 4.1.12
1893
+
'@tailwindcss/oxide-win32-arm64-msvc': 4.1.12
1894
+
'@tailwindcss/oxide-win32-x64-msvc': 4.1.12
1952
1895
1953
-
'@unocss/preset-wind4@66.4.2':
1896
+
'@tailwindcss/vite@4.1.12(vite@7.1.3(@types/node@22.13.1)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.2))':
1954
1897
dependencies:
1955
-
'@unocss/core': 66.4.2
1956
-
'@unocss/extractor-arbitrary-variants': 66.4.2
1957
-
'@unocss/rule-utils': 66.4.2
1898
+
'@tailwindcss/node': 4.1.12
1899
+
'@tailwindcss/oxide': 4.1.12
1900
+
tailwindcss: 4.1.12
1901
+
vite: 7.1.3(@types/node@22.13.1)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.2)
1958
1902
1959
-
'@unocss/preset-wind@66.4.2':
1903
+
'@types/babel__core@7.20.5':
1960
1904
dependencies:
1961
-
'@unocss/core': 66.4.2
1962
-
'@unocss/preset-wind3': 66.4.2
1905
+
'@babel/parser': 7.28.3
1906
+
'@babel/types': 7.28.2
1907
+
'@types/babel__generator': 7.27.0
1908
+
'@types/babel__template': 7.4.4
1909
+
'@types/babel__traverse': 7.28.0
1963
1910
1964
-
'@unocss/reset@66.4.2': {}
1965
-
1966
-
'@unocss/rule-utils@66.4.2':
1911
+
'@types/babel__generator@7.27.0':
1967
1912
dependencies:
1968
-
'@unocss/core': 66.4.2
1969
-
magic-string: 0.30.18
1913
+
'@babel/types': 7.28.2
1970
1914
1971
-
'@unocss/transformer-attributify-jsx@66.4.2':
1915
+
'@types/babel__template@7.4.4':
1972
1916
dependencies:
1973
1917
'@babel/parser': 7.28.3
1974
-
'@babel/traverse': 7.28.3
1975
-
'@unocss/core': 66.4.2
1976
-
transitivePeerDependencies:
1977
-
- supports-color
1978
-
1979
-
'@unocss/transformer-compile-class@66.4.2':
1980
-
dependencies:
1981
-
'@unocss/core': 66.4.2
1918
+
'@babel/types': 7.28.2
1982
1919
1983
-
'@unocss/transformer-directives@66.4.2':
1920
+
'@types/babel__traverse@7.28.0':
1984
1921
dependencies:
1985
-
'@unocss/core': 66.4.2
1986
-
'@unocss/rule-utils': 66.4.2
1987
-
css-tree: 3.1.0
1922
+
'@babel/types': 7.28.2
1988
1923
1989
-
'@unocss/transformer-variant-group@66.4.2':
1990
-
dependencies:
1991
-
'@unocss/core': 66.4.2
1924
+
'@types/estree@1.0.8': {}
1992
1925
1993
-
'@unocss/vite@66.4.2(vite@7.1.3(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2))':
1926
+
'@types/node@22.13.1':
1994
1927
dependencies:
1995
-
'@ampproject/remapping': 2.3.0
1996
-
'@unocss/config': 66.4.2
1997
-
'@unocss/core': 66.4.2
1998
-
'@unocss/inspector': 66.4.2
1999
-
chokidar: 3.6.0
2000
-
magic-string: 0.30.18
2001
-
pathe: 2.0.3
2002
-
tinyglobby: 0.2.14
2003
-
unplugin-utils: 0.2.5
2004
-
vite: 7.1.3(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)
1928
+
undici-types: 6.20.0
1929
+
optional: true
2005
1930
2006
1931
acorn@8.15.0: {}
2007
-
2008
-
anymatch@3.1.3:
2009
-
dependencies:
2010
-
normalize-path: 3.0.0
2011
-
picomatch: 2.3.1
2012
1932
2013
1933
babel-plugin-jsx-dom-expressions@0.40.1(@babel/core@7.28.3):
2014
1934
dependencies:
···
2027
1947
optionalDependencies:
2028
1948
solid-js: 1.9.9
2029
1949
2030
-
binary-extensions@2.3.0: {}
2031
-
2032
-
braces@3.0.3:
2033
-
dependencies:
2034
-
fill-range: 7.1.1
2035
-
2036
1950
browserslist@4.25.3:
2037
1951
dependencies:
2038
1952
caniuse-lite: 1.0.30001737
···
2040
1954
node-releases: 2.0.19
2041
1955
update-browserslist-db: 1.1.3(browserslist@4.25.3)
2042
1956
2043
-
cac@6.7.14: {}
2044
-
2045
1957
caniuse-lite@1.0.30001737: {}
2046
1958
2047
-
chokidar@3.6.0:
2048
-
dependencies:
2049
-
anymatch: 3.1.3
2050
-
braces: 3.0.3
2051
-
glob-parent: 5.1.2
2052
-
is-binary-path: 2.1.0
2053
-
is-glob: 4.0.3
2054
-
normalize-path: 3.0.0
2055
-
readdirp: 3.6.0
2056
-
optionalDependencies:
2057
-
fsevents: 2.3.3
2058
-
2059
-
colorette@2.0.20: {}
1959
+
chownr@3.0.0: {}
2060
1960
2061
1961
confbox@0.1.8: {}
2062
1962
2063
1963
confbox@0.2.2: {}
2064
-
2065
-
consola@3.4.2: {}
2066
1964
2067
1965
convert-source-map@2.0.0: {}
2068
1966
2069
-
css-tree@3.1.0:
2070
-
dependencies:
2071
-
mdn-data: 2.12.2
2072
-
source-map-js: 1.2.1
2073
-
2074
1967
csstype@3.1.3: {}
2075
1968
2076
1969
debug@4.4.1:
2077
1970
dependencies:
2078
1971
ms: 2.1.3
2079
1972
2080
-
defu@6.1.4: {}
1973
+
detect-libc@2.0.4: {}
2081
1974
2082
-
destr@2.0.5: {}
1975
+
electron-to-chromium@1.5.211: {}
2083
1976
2084
-
duplexer@0.1.2: {}
2085
-
2086
-
electron-to-chromium@1.5.211: {}
1977
+
enhanced-resolve@5.18.3:
1978
+
dependencies:
1979
+
graceful-fs: 4.2.11
1980
+
tapable: 2.2.3
2087
1981
2088
1982
entities@6.0.1: {}
2089
1983
···
2154
2048
optionalDependencies:
2155
2049
picomatch: 4.0.3
2156
2050
2157
-
fill-range@7.1.1:
2158
-
dependencies:
2159
-
to-regex-range: 5.0.1
2160
-
2161
2051
fsevents@2.3.3:
2162
2052
optional: true
2163
2053
···
2168
2058
resolve-pkg-maps: 1.0.0
2169
2059
optional: true
2170
2060
2171
-
glob-parent@5.1.2:
2172
-
dependencies:
2173
-
is-glob: 4.0.3
2174
-
2175
2061
globals@15.15.0: {}
2176
2062
2177
-
gzip-size@6.0.0:
2178
-
dependencies:
2179
-
duplexer: 0.1.2
2063
+
graceful-fs@4.2.11: {}
2180
2064
2181
2065
hls.js@1.6.11: {}
2182
2066
2183
2067
html-entities@2.3.3: {}
2184
-
2185
-
is-binary-path@2.1.0:
2186
-
dependencies:
2187
-
binary-extensions: 2.3.0
2188
-
2189
-
is-extglob@2.1.1: {}
2190
-
2191
-
is-glob@4.0.3:
2192
-
dependencies:
2193
-
is-extglob: 2.1.1
2194
-
2195
-
is-number@7.0.0: {}
2196
2068
2197
2069
is-what@4.1.16: {}
2198
2070
···
2206
2078
2207
2079
kolorist@1.8.0: {}
2208
2080
2081
+
lightningcss-darwin-arm64@1.30.1:
2082
+
optional: true
2083
+
2084
+
lightningcss-darwin-x64@1.30.1:
2085
+
optional: true
2086
+
2087
+
lightningcss-freebsd-x64@1.30.1:
2088
+
optional: true
2089
+
2090
+
lightningcss-linux-arm-gnueabihf@1.30.1:
2091
+
optional: true
2092
+
2093
+
lightningcss-linux-arm64-gnu@1.30.1:
2094
+
optional: true
2095
+
2096
+
lightningcss-linux-arm64-musl@1.30.1:
2097
+
optional: true
2098
+
2099
+
lightningcss-linux-x64-gnu@1.30.1:
2100
+
optional: true
2101
+
2102
+
lightningcss-linux-x64-musl@1.30.1:
2103
+
optional: true
2104
+
2105
+
lightningcss-win32-arm64-msvc@1.30.1:
2106
+
optional: true
2107
+
2108
+
lightningcss-win32-x64-msvc@1.30.1:
2109
+
optional: true
2110
+
2111
+
lightningcss@1.30.1:
2112
+
dependencies:
2113
+
detect-libc: 2.0.4
2114
+
optionalDependencies:
2115
+
lightningcss-darwin-arm64: 1.30.1
2116
+
lightningcss-darwin-x64: 1.30.1
2117
+
lightningcss-freebsd-x64: 1.30.1
2118
+
lightningcss-linux-arm-gnueabihf: 1.30.1
2119
+
lightningcss-linux-arm64-gnu: 1.30.1
2120
+
lightningcss-linux-arm64-musl: 1.30.1
2121
+
lightningcss-linux-x64-gnu: 1.30.1
2122
+
lightningcss-linux-x64-musl: 1.30.1
2123
+
lightningcss-win32-arm64-msvc: 1.30.1
2124
+
lightningcss-win32-x64-msvc: 1.30.1
2125
+
2209
2126
local-pkg@1.1.2:
2210
2127
dependencies:
2211
2128
mlly: 1.8.0
···
2220
2137
dependencies:
2221
2138
'@jridgewell/sourcemap-codec': 1.5.5
2222
2139
2223
-
mdn-data@2.12.2: {}
2224
-
2225
2140
merge-anything@5.1.7:
2226
2141
dependencies:
2227
2142
is-what: 4.1.16
2228
2143
2144
+
minipass@7.1.2: {}
2145
+
2146
+
minizlib@3.0.2:
2147
+
dependencies:
2148
+
minipass: 7.1.2
2149
+
2150
+
mkdirp@3.0.1: {}
2151
+
2229
2152
mlly@1.8.0:
2230
2153
dependencies:
2231
2154
acorn: 8.15.0
···
2234
2157
ufo: 1.6.1
2235
2158
2236
2159
monaco-editor@0.52.2: {}
2237
-
2238
-
mrmime@2.0.1: {}
2239
2160
2240
2161
ms@2.1.3: {}
2241
2162
···
2245
2166
2246
2167
nanoid@5.1.5: {}
2247
2168
2248
-
node-fetch-native@1.6.7: {}
2249
-
2250
2169
node-releases@2.0.19: {}
2251
2170
2252
-
normalize-path@3.0.0: {}
2253
-
2254
-
ofetch@1.4.1:
2255
-
dependencies:
2256
-
destr: 2.0.5
2257
-
node-fetch-native: 1.6.7
2258
-
ufo: 1.6.1
2259
-
2260
2171
package-manager-detector@1.3.0: {}
2261
2172
2262
2173
parse5@7.3.0:
···
2265
2176
2266
2177
pathe@2.0.3: {}
2267
2178
2268
-
perfect-debounce@1.0.0: {}
2269
-
2270
2179
picocolors@1.1.1: {}
2271
-
2272
-
picomatch@2.3.1: {}
2273
2180
2274
2181
picomatch@4.0.3: {}
2275
2182
···
2299
2206
2300
2207
quansync@0.2.11: {}
2301
2208
2302
-
readdirp@3.6.0:
2303
-
dependencies:
2304
-
picomatch: 2.3.1
2305
-
2306
2209
resolve-pkg-maps@1.0.0:
2307
2210
optional: true
2308
2211
···
2340
2243
2341
2244
seroval@1.3.2: {}
2342
2245
2343
-
sirv@3.0.1:
2344
-
dependencies:
2345
-
'@polka/url': 1.0.0-next.29
2346
-
mrmime: 2.0.1
2347
-
totalist: 3.0.1
2348
-
2349
2246
solid-js@1.9.9:
2350
2247
dependencies:
2351
2248
csstype: 3.1.3
···
2363
2260
2364
2261
source-map-js@1.2.1: {}
2365
2262
2263
+
tailwindcss@4.1.12: {}
2264
+
2265
+
tapable@2.2.3: {}
2266
+
2267
+
tar@7.4.3:
2268
+
dependencies:
2269
+
'@isaacs/fs-minipass': 4.0.1
2270
+
chownr: 3.0.0
2271
+
minipass: 7.1.2
2272
+
minizlib: 3.0.2
2273
+
mkdirp: 3.0.1
2274
+
yallist: 5.0.0
2275
+
2366
2276
tinyexec@1.0.1: {}
2367
2277
2368
2278
tinyglobby@0.2.14:
···
2370
2280
fdir: 6.5.0(picomatch@4.0.3)
2371
2281
picomatch: 4.0.3
2372
2282
2373
-
to-regex-range@5.0.1:
2374
-
dependencies:
2375
-
is-number: 7.0.0
2376
-
2377
-
totalist@3.0.1: {}
2378
-
2379
2283
tsx@4.19.2:
2380
2284
dependencies:
2381
2285
esbuild: 0.23.1
···
2387
2291
typescript@5.9.2: {}
2388
2292
2389
2293
ufo@1.6.1: {}
2390
-
2391
-
unconfig@7.3.3:
2392
-
dependencies:
2393
-
'@quansync/fs': 0.1.5
2394
-
defu: 6.1.4
2395
-
jiti: 2.5.1
2396
-
quansync: 0.2.11
2397
2294
2398
2295
undici-types@6.20.0:
2399
2296
optional: true
2400
2297
2401
-
unocss@66.4.2(postcss@8.5.6)(vite@7.1.3(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)):
2402
-
dependencies:
2403
-
'@unocss/astro': 66.4.2(vite@7.1.3(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2))
2404
-
'@unocss/cli': 66.4.2
2405
-
'@unocss/core': 66.4.2
2406
-
'@unocss/postcss': 66.4.2(postcss@8.5.6)
2407
-
'@unocss/preset-attributify': 66.4.2
2408
-
'@unocss/preset-icons': 66.4.2
2409
-
'@unocss/preset-mini': 66.4.2
2410
-
'@unocss/preset-tagify': 66.4.2
2411
-
'@unocss/preset-typography': 66.4.2
2412
-
'@unocss/preset-uno': 66.4.2
2413
-
'@unocss/preset-web-fonts': 66.4.2
2414
-
'@unocss/preset-wind': 66.4.2
2415
-
'@unocss/preset-wind3': 66.4.2
2416
-
'@unocss/preset-wind4': 66.4.2
2417
-
'@unocss/transformer-attributify-jsx': 66.4.2
2418
-
'@unocss/transformer-compile-class': 66.4.2
2419
-
'@unocss/transformer-directives': 66.4.2
2420
-
'@unocss/transformer-variant-group': 66.4.2
2421
-
'@unocss/vite': 66.4.2(vite@7.1.3(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2))
2422
-
optionalDependencies:
2423
-
vite: 7.1.3(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)
2424
-
transitivePeerDependencies:
2425
-
- postcss
2426
-
- supports-color
2427
-
2428
-
unplugin-utils@0.2.5:
2429
-
dependencies:
2430
-
pathe: 2.0.3
2431
-
picomatch: 4.0.3
2432
-
2433
2298
update-browserslist-db@1.1.3(browserslist@4.25.3):
2434
2299
dependencies:
2435
2300
browserslist: 4.25.3
···
2438
2303
2439
2304
validate-html-nesting@1.2.3: {}
2440
2305
2441
-
vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.1.3(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)):
2306
+
vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.1.3(@types/node@22.13.1)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.2)):
2442
2307
dependencies:
2443
2308
'@babel/core': 7.28.3
2444
2309
'@types/babel__core': 7.20.5
···
2446
2311
merge-anything: 5.1.7
2447
2312
solid-js: 1.9.9
2448
2313
solid-refresh: 0.6.3(solid-js@1.9.9)
2449
-
vite: 7.1.3(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)
2450
-
vitefu: 1.1.1(vite@7.1.3(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2))
2314
+
vite: 7.1.3(@types/node@22.13.1)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.2)
2315
+
vitefu: 1.1.1(vite@7.1.3(@types/node@22.13.1)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.2))
2451
2316
transitivePeerDependencies:
2452
2317
- supports-color
2453
2318
2454
-
vite@7.1.3(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2):
2319
+
vite@7.1.3(@types/node@22.13.1)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.2):
2455
2320
dependencies:
2456
2321
esbuild: 0.25.9
2457
2322
fdir: 6.5.0(picomatch@4.0.3)
···
2463
2328
'@types/node': 22.13.1
2464
2329
fsevents: 2.3.3
2465
2330
jiti: 2.5.1
2331
+
lightningcss: 1.30.1
2466
2332
tsx: 4.19.2
2467
2333
2468
-
vitefu@1.1.1(vite@7.1.3(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)):
2334
+
vitefu@1.1.1(vite@7.1.3(@types/node@22.13.1)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.2)):
2469
2335
optionalDependencies:
2470
-
vite: 7.1.3(@types/node@22.13.1)(jiti@2.5.1)(tsx@4.19.2)
2336
+
vite: 7.1.3(@types/node@22.13.1)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.19.2)
2471
2337
2472
-
vue-flow-layout@0.2.0: {}
2338
+
yallist@3.1.1: {}
2473
2339
2474
-
yallist@3.1.1: {}
2340
+
yallist@5.0.0: {}
2475
2341
2476
2342
yocto-queue@1.2.1: {}
+7
-7
src/components/account.tsx
+7
-7
src/components/account.tsx
···
68
68
return (
69
69
<>
70
70
<Modal open={openManager()} onClose={() => setOpenManager(false)}>
71
-
<div class="starting:opacity-0 dark:bg-dark-800/70 border-0.5 w-22rem dark:shadow-dark-900/80 backdrop-blur-xs left-50% absolute top-12 -translate-x-1/2 rounded-lg border-neutral-300 bg-neutral-200/70 p-4 text-neutral-900 shadow-md transition-opacity duration-300 dark:border-neutral-700 dark:text-neutral-200">
71
+
<div class="dark:bg-dark-800/70 dark:shadow-dark-900/80 absolute top-12 left-[50%] w-[22rem] -translate-x-1/2 rounded-lg border-[0.5px] border-neutral-300 bg-neutral-200/70 p-4 text-neutral-900 shadow-md backdrop-blur-xs transition-opacity duration-300 dark:border-neutral-700 dark:text-neutral-200 starting:opacity-0">
72
72
<div class="mb-2 flex items-center gap-1 font-bold">
73
-
<div class="i-lucide-user-round" />
73
+
<span class="iconify lucide--user-round"></span>
74
74
<span>Manage accounts</span>
75
75
</div>
76
76
<div class="mb-3 max-h-[20rem] overflow-y-auto md:max-h-[25rem]">
77
77
<For each={Object.keys(sessions)}>
78
78
{(did) => (
79
-
<div class="flex w-full items-center justify-between gap-x-2 rounded-lg hover:bg-neutral-100 dark:hover:bg-neutral-600">
79
+
<div class="flex w-full items-center justify-between gap-x-2 rounded-lg hover:bg-neutral-100 active:bg-neutral-100 dark:hover:bg-neutral-600 dark:active:bg-neutral-600">
80
80
<button
81
81
class="flex basis-full items-center justify-between gap-1 truncate p-1"
82
82
onclick={() => resumeSession(did as Did)}
83
83
>
84
84
<span class="truncate">{sessions[did]?.length ? sessions[did] : did}</span>
85
85
<Show when={did === agent()?.sub}>
86
-
<div class="i-lucide-check shrink-0" />
86
+
<span class="iconify lucide--check shrink-0"></span>
87
87
</Show>
88
88
</button>
89
89
<button
90
90
onclick={() => removeSession(did as Did)}
91
-
class="p-1.5 hover:text-red-500 hover:dark:text-red-400"
91
+
class="flex items-center p-1.5 hover:text-red-500 hover:dark:text-red-400"
92
92
>
93
-
<div class="i-lucide-user-round-x text-lg" />
93
+
<span class="iconify lucide--user-round-x text-lg"></span>
94
94
</button>
95
95
</div>
96
96
)}
···
103
103
<Tooltip text="Accounts">
104
104
{agent() && avatar() ?
105
105
<img src={avatar()} class="dark:shadow-dark-900/80 size-5 rounded-full shadow-sm" />
106
-
: <div class="i-lucide-circle-user-round text-xl" />}
106
+
: <span class="iconify lucide--circle-user-round text-xl"></span>}
107
107
</Tooltip>
108
108
</button>
109
109
</>
+7
-7
src/components/backlinks.tsx
+7
-7
src/components/backlinks.tsx
···
39
39
40
40
return (
41
41
<Show when={response()}>
42
-
<div class="break-anywhere flex w-full flex-col gap-1 text-sm">
42
+
<div class="flex w-full flex-col gap-1 text-sm wrap-anywhere">
43
43
<For each={backlinks()}>
44
44
{({ collection, path, counts }) => (
45
45
<div>
46
46
<div>
47
47
<div title="Collection containing linking records" class="flex items-center gap-1">
48
-
<div class="i-lucide-book-text shrink-0" />
48
+
<span class="iconify lucide--book-text shrink-0"></span>
49
49
{collection}
50
50
</div>
51
51
<div title="Record path where the link is found" class="flex items-center gap-1">
52
-
<div class="i-lucide-route shrink-0" />
52
+
<span class="iconify lucide--route shrink-0"></span>
53
53
{path.slice(1)}
54
54
</div>
55
55
</div>
56
56
<div class="ml-4.5">
57
57
<p>
58
58
<a
59
-
class="text-blue-400 hover:underline"
59
+
class="text-blue-400 hover:underline active:underline"
60
60
href="#"
61
61
title="Show linking records"
62
62
onclick={() =>
···
73
73
</a>
74
74
{" from "}
75
75
<a
76
-
class="text-blue-400 hover:underline"
76
+
class="text-blue-400 hover:underline active:underline"
77
77
href="#"
78
78
title="Show linking DIDs"
79
79
onclick={() =>
···
158
158
{(did) => (
159
159
<a
160
160
href={`/at://${did}`}
161
-
class="relative flex w-full font-mono text-blue-400 hover:underline"
161
+
class="relative flex w-full font-mono text-blue-400 hover:underline active:underline"
162
162
>
163
163
{did}
164
164
</a>
···
169
169
<For each={links().linking_records}>
170
170
{({ did, collection, rkey }) => (
171
171
<p class="relative flex w-full items-center gap-1 font-mono">
172
-
<a href={`/at://${did}/${collection}/${rkey}`} class="text-blue-400 hover:underline">
172
+
<a href={`/at://${did}/${collection}/${rkey}`} class="text-blue-400 hover:underline active:underline">
173
173
{rkey}
174
174
</a>
175
175
<span class="text-xs text-neutral-500 dark:text-neutral-400">
+15
-15
src/components/create.tsx
+15
-15
src/components/create.tsx
···
173
173
return (
174
174
<>
175
175
<Modal open={openDialog()} onClose={() => setOpenDialog(false)}>
176
-
<div class="w-22rem 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-lg border-neutral-300 bg-neutral-200/70 p-2 text-neutral-900 shadow-md transition-opacity duration-300 sm:p-4 dark:border-neutral-700 dark:text-neutral-200">
176
+
<div class="dark:bg-dark-800/70 dark:shadow-dark-900/80 absolute top-12 left-[50%] w-[22rem] -translate-x-1/2 rounded-lg border-[0.5px] border-neutral-300 bg-neutral-200/70 p-2 text-neutral-900 shadow-md backdrop-blur-xs transition-opacity duration-300 sm:w-xl sm:p-4 lg:w-[48rem] dark:border-neutral-700 dark:text-neutral-200 starting:opacity-0">
177
177
<div class="mb-2 flex w-full justify-between">
178
178
<div class="flex items-center gap-1 font-bold">
179
-
<div class="i-lucide-square-pen" />
179
+
<span class="iconify lucide--square-pen"></span>
180
180
<span>{props.create ? "Creating" : "Editing"} record</span>
181
181
</div>
182
-
<button onclick={() => setOpenDialog(false)}>
183
-
<div class="i-lucide-x text-lg hover:text-neutral-500 dark:hover:text-neutral-400" />
182
+
<button onclick={() => setOpenDialog(false)} class="flex items-center">
183
+
<span class="iconify lucide--x text-lg hover:text-neutral-500 dark:hover:text-neutral-400"></span>
184
184
</button>
185
185
</div>
186
186
<form ref={formRef} class="flex flex-col gap-y-2">
···
194
194
id="collection"
195
195
name="collection"
196
196
placeholder="Optional (default: record type)"
197
-
class="w-14rem"
197
+
class="w-[14rem]"
198
198
/>
199
199
</div>
200
200
<div class="flex items-center gap-x-2">
201
201
<label for="rkey" class="min-w-20 select-none">
202
202
Record key
203
203
</label>
204
-
<TextInput id="rkey" name="rkey" placeholder="Optional" class="w-14rem" />
204
+
<TextInput id="rkey" name="rkey" placeholder="Optional" class="w-[14rem]" />
205
205
</div>
206
206
</Show>
207
207
<div class="flex items-center gap-x-2">
···
220
220
</div>
221
221
<div class="flex items-center gap-2">
222
222
<Show when={!uploading()}>
223
-
<div class="dark:hover:bg-dark-100 dark:bg-dark-300 dark:shadow-dark-900/80 flex rounded-lg bg-white text-xs font-semibold shadow-sm hover:bg-neutral-50">
223
+
<div class="dark:hover:bg-dark-100 dark:bg-dark-300 dark:shadow-dark-900/80 dark:active:bg-dark-100 flex rounded-lg bg-white text-xs font-semibold shadow-sm hover:bg-neutral-50 active:bg-neutral-50">
224
224
<input type="file" id="blob" hidden onChange={() => uploadBlob()} />
225
225
<label class="flex items-center gap-1 px-2 py-1.5" for="blob">
226
-
<div class="i-lucide-upload text-sm" />
226
+
<span class="iconify lucide--upload text-sm"></span>
227
227
Upload
228
228
</label>
229
229
</div>
230
230
<p class="text-xs">Metadata will be pasted after the cursor</p>
231
231
</Show>
232
232
<Show when={uploading()}>
233
-
<div class="i-lucide-loader-circle animate-spin text-xl" />
233
+
<span class="iconify lucide--loader-circle animate-spin text-xl"></span>
234
234
<p>Uploading...</p>
235
235
</Show>
236
236
</div>
···
239
239
<label for="mimetype" class="min-w-20 select-none">
240
240
MIME type
241
241
</label>
242
-
<TextInput id="mimetype" placeholder="Optional" class="w-14rem" />
242
+
<TextInput id="mimetype" placeholder="Optional" class="w-[14rem]" />
243
243
</div>
244
244
<div class="flex items-center gap-1">
245
245
<input id="exif-rm" class="size-4" type="checkbox" checked />
···
258
258
<Show when={!props.create}>
259
259
<div class="flex items-center gap-1">
260
260
<input id="recreate" class="size-4" name="recreate" type="checkbox" />
261
-
<label for="recreate" class="select-none text-sm">
261
+
<label for="recreate" class="text-sm select-none">
262
262
Recreate record
263
263
</label>
264
264
</div>
···
279
279
</Modal>
280
280
<Tooltip text={`${props.create ? "Create" : "Edit"} record`}>
281
281
<button
282
-
class={
283
-
props.create ? "" : "rounded-sm p-1 hover:bg-neutral-100 dark:hover:bg-neutral-600"
284
-
}
282
+
class={`flex items-center ${props.create ? "" : "rounded-sm p-1 hover:bg-neutral-100 active:bg-neutral-100 dark:hover:bg-neutral-600 dark:active:bg-neutral-600"}`}
285
283
onclick={() => {
286
284
createModel();
287
285
setOpenDialog(true);
288
286
}}
289
287
>
290
-
<div class={props.create ? "i-lucide-square-pen text-xl" : "i-lucide-pencil"} />
288
+
<div
289
+
class={props.create ? "iconify lucide--square-pen text-xl" : "iconify lucide--pencil"}
290
+
/>
291
291
</button>
292
292
</Tooltip>
293
293
</>
+3
-1
src/components/editor.tsx
+3
-1
src/components/editor.tsx
+14
-12
src/components/json.tsx
+14
-12
src/components/json.tsx
···
35
35
{(part) => (
36
36
<>
37
37
{ATURI_RE.test(part) ?
38
-
<A class="text-blue-400 hover:underline" href={`/${part}`}>
38
+
<A class="text-blue-400 hover:underline active:underline" href={`/${part}`}>
39
39
{part}
40
40
</A>
41
41
: DID_RE.test(part) ?
42
-
<A class="text-blue-400 hover:underline" href={`/at://${part}`}>
42
+
<A class="text-blue-400 hover:underline active:underline" href={`/at://${part}`}>
43
43
{part}
44
44
</A>
45
45
: (
···
48
48
part.split("\n").length === 1
49
49
) ?
50
50
<a
51
-
class="text-blue-400 hover:underline"
51
+
class="text-blue-400 hover:underline active:underline"
52
52
href={part}
53
53
target="_blank"
54
54
rel="noopener noreferrer"
···
92
92
}}
93
93
>
94
94
<button
95
-
class="max-w-40% sm:max-w-50% break-anywhere group/clip relative flex size-fit shrink-0 items-center text-neutral-500 hover:text-neutral-700 dark:text-neutral-400 dark:hover:text-neutral-300"
95
+
class="max-w-40% sm:max-w-50% group/clip relative flex size-fit shrink-0 items-center wrap-anywhere text-neutral-500 hover:text-neutral-700 active:text-neutral-700 dark:text-neutral-400 dark:hover:text-neutral-300 dark:active:text-neutral-300"
96
96
onclick={() => setShow(!show())}
97
97
>
98
98
<span
99
99
classList={{
100
-
"dark:bg-dark-500 absolute w-5 -left-5 bg-neutral-100 text-sm": true,
101
-
"hidden group-hover/clip:block": show(),
100
+
"dark:bg-dark-500 absolute w-5 flex items-center -left-5 bg-neutral-100 text-sm": true,
101
+
"hidden group-hover/clip:flex": show(),
102
102
}}
103
103
>
104
104
{show() ?
105
-
<div class="i-lucide-chevron-down" />
106
-
: <div class="i-lucide-chevron-right" />}
105
+
<span class="iconify lucide--chevron-down"></span>
106
+
: <span class="iconify lucide--chevron-right"></span>}
107
107
</span>
108
108
{key}:
109
109
</button>
110
110
<span
111
111
classList={{
112
112
"self-center": value !== Object(value),
113
-
"pl-[calc(2ch-1px)] border-l-0.5 border-neutral-500/50 dark:border-neutral-400/50 has-hover:group-hover/indent:border-neutral-700 dark:has-hover:group-hover/indent:border-neutral-300":
113
+
"pl-[calc(2ch-1px)] border-l-[0.5px] border-neutral-500/50 dark:border-neutral-400/50 has-hover:group-hover/indent:border-neutral-700 dark:has-hover:group-hover/indent:border-neutral-300":
114
114
value === Object(value),
115
115
"invisible h-0": !show(),
116
116
}}
···
150
150
>
151
151
<Show when={blob.mimeType.startsWith("image/") || blob.mimeType === "video/mp4"}>
152
152
<Tooltip text={hide() ? "Show" : "Hide"}>
153
-
<button onclick={() => setHide(!hide())}>
154
-
<div class={`text-base ${hide() ? "i-lucide-eye-off" : "i-lucide-eye"}`} />
153
+
<button onclick={() => setHide(!hide())} class="flex items-center">
154
+
<span
155
+
class={`iconify text-base ${hide() ? "lucide--eye-off" : "lucide--eye"}`}
156
+
></span>
155
157
</button>
156
158
</Tooltip>
157
159
</Show>
···
162
164
class="size-fit"
163
165
>
164
166
<Tooltip text="Blob link">
165
-
<div class="i-lucide-external-link text-base" />
167
+
<span class="iconify lucide--external-link text-base"></span>
166
168
</Tooltip>
167
169
</a>
168
170
</Show>
+3
-5
src/components/login.tsx
+3
-5
src/components/login.tsx
···
58
58
return (
59
59
<form class="flex flex-col gap-y-2" onsubmit={(e) => e.preventDefault()}>
60
60
<div class="flex items-center gap-2">
61
-
<label for="handle">
62
-
<div class="i-lucide-user-round-plus text-lg" />
61
+
<label for="handle" class="flex items-center">
62
+
<span class="iconify lucide--user-round-plus text-lg"></span>
63
63
</label>
64
64
<TextInput
65
65
id="handle"
···
67
67
onInput={(e) => setLoginInput(e.currentTarget.value)}
68
68
class="grow"
69
69
/>
70
-
<button onclick={() => login(loginInput())}>
71
-
<div class="i-lucide-log-in text-lg" />
72
-
</button>
70
+
<button onclick={() => login(loginInput())} class="iconify lucide--log-in text-lg"></button>
73
71
</div>
74
72
<div>{notice()}</div>
75
73
</form>
+8
-8
src/components/search.tsx
+8
-8
src/components/search.tsx
···
59
59
</label>
60
60
</div>
61
61
<div class="flex w-full items-center gap-2">
62
-
<div class="dark:bg-dark-100 focus-within:outline-1.5 dark:shadow-dark-900/80 flex grow items-center gap-2 rounded-lg bg-white px-2 py-1 shadow-sm focus-within:outline-neutral-900 dark:focus-within:outline-neutral-200">
62
+
<div class="dark:bg-dark-100 dark:shadow-dark-900/80 flex grow items-center gap-2 rounded-lg bg-white px-2 py-1 shadow-sm focus-within:outline-[1.5px] focus-within:outline-neutral-900 dark:focus-within:outline-neutral-200">
63
63
<input
64
64
type="text"
65
65
spellcheck={false}
···
68
68
class="grow focus:outline-none"
69
69
/>
70
70
<Show when={loading()}>
71
-
<div class="i-lucide-loader-circle animate-spin text-lg" />
71
+
<span class="iconify lucide--loader-circle animate-spin text-lg"></span>
72
72
</Show>
73
73
<Show when={!loading()}>
74
-
<button type="submit" onclick={() => processInput(searchInput.value)}>
75
-
<div class="i-lucide-arrow-right text-lg text-neutral-500 dark:text-neutral-400" />
76
-
</button>
74
+
<button
75
+
type="submit"
76
+
class="iconify lucide--arrow-right text-lg text-neutral-500 dark:text-neutral-400"
77
+
onclick={() => processInput(searchInput.value)}
78
+
></button>
77
79
</Show>
78
80
</div>
79
81
<Show when={agent()}>
80
82
<Tooltip
81
83
text="Repository"
82
84
children={
83
-
<A href={`/at://${agent()?.sub}`}>
84
-
<div class="i-lucide-book-user text-lg" />
85
-
</A>
85
+
<A href={`/at://${agent()?.sub}`} class="iconify lucide--book-user text-lg"></A>
86
86
}
87
87
/>
88
88
</Show>
+45
-45
src/components/settings.tsx
+45
-45
src/components/settings.tsx
···
51
51
return (
52
52
<>
53
53
<Modal open={openSettings()} onClose={() => setOpenSettings(false)}>
54
-
<div class="starting:opacity-0 w-22rem 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-lg border-neutral-300 bg-neutral-200/70 p-4 text-neutral-900 shadow-md transition-opacity duration-300 dark:border-neutral-700 dark:text-neutral-200">
54
+
<div class="dark:bg-dark-800/70 dark:shadow-dark-900/80 absolute top-12 left-[50%] w-[22rem] -translate-x-1/2 rounded-lg border-[0.5px] border-neutral-300 bg-neutral-200/70 p-4 text-neutral-900 shadow-md backdrop-blur-xs transition-opacity duration-300 dark:border-neutral-700 dark:text-neutral-200 starting:opacity-0">
55
55
<div class="mb-2 flex items-center gap-1 font-bold">
56
-
<div class="i-lucide-settings" />
56
+
<span class="iconify lucide--settings"></span>
57
57
<span>Settings</span>
58
58
</div>
59
59
<div class="flex flex-col gap-2">
···
87
87
Hide media embeds
88
88
</label>
89
89
</div>
90
-
<div class="dark:shadow-dark-900/80 dark:bg-dark-100 flex w-fit items-center gap-1 rounded-full bg-white p-0.5 text-lg shadow-sm">
91
-
<Tooltip text="System Theme">
92
-
<button
93
-
classList={{
94
-
"p-1.5 rounded-full": true,
95
-
"bg-neutral-200 dark:bg-dark-400": theme().system,
96
-
}}
97
-
onclick={() =>
98
-
updateTheme({
99
-
color:
100
-
window.matchMedia("(prefers-color-scheme: dark)").matches ?
101
-
"dark"
102
-
: "light",
103
-
system: true,
104
-
})
105
-
}
106
-
>
107
-
<div class="i-lucide-monitor" />
108
-
</button>
109
-
</Tooltip>
110
-
<Tooltip text="Light Theme">
111
-
<button
112
-
classList={{
113
-
"p-1.5 rounded-full": true,
114
-
"bg-neutral-200": theme().color === "light" && !theme().system,
115
-
}}
116
-
onclick={() => updateTheme({ color: "light", system: false })}
117
-
>
118
-
<div class="i-lucide-sun" />
119
-
</button>
120
-
</Tooltip>
121
-
<Tooltip text="Dark Theme">
122
-
<button
123
-
classList={{
124
-
"p-1.5 rounded-full": true,
125
-
"bg-dark-400": theme().color === "dark" && !theme().system,
126
-
}}
127
-
onclick={() => updateTheme({ color: "dark", system: false })}
128
-
>
129
-
<div class="i-lucide-moon" />
130
-
</button>
131
-
</Tooltip>
90
+
<div class="dark:shadow-dark-900/80 dark:bg-dark-100 flex items-center gap-1 rounded-full bg-white p-0.5 text-lg shadow-sm">
91
+
<button
92
+
name="System Theme"
93
+
classList={{
94
+
"p-1.5 flex items-center rounded-full": true,
95
+
"bg-neutral-200 dark:bg-dark-400": theme().system,
96
+
}}
97
+
onclick={() =>
98
+
updateTheme({
99
+
color:
100
+
window.matchMedia("(prefers-color-scheme: dark)").matches ?
101
+
"dark"
102
+
: "light",
103
+
system: true,
104
+
})
105
+
}
106
+
>
107
+
<span class="iconify lucide--monitor"></span>
108
+
</button>
109
+
<button
110
+
name="Light Theme"
111
+
classList={{
112
+
"p-1.5 flex items-center rounded-full": true,
113
+
"bg-neutral-200": theme().color === "light" && !theme().system,
114
+
}}
115
+
onclick={() => updateTheme({ color: "light", system: false })}
116
+
>
117
+
<span class="iconify lucide--sun"></span>
118
+
</button>
119
+
<button
120
+
name="Dark Theme"
121
+
classList={{
122
+
"p-1.5 flex items-center rounded-full": true,
123
+
"bg-dark-400": theme().color === "dark" && !theme().system,
124
+
}}
125
+
onclick={() => updateTheme({ color: "dark", system: false })}
126
+
>
127
+
<span class="iconify lucide--moon"></span>
128
+
</button>
132
129
</div>
133
130
</div>
134
131
</div>
135
132
</div>
136
133
</Modal>
137
134
<button onclick={() => setOpenSettings(true)}>
138
-
<Tooltip text="Settings" children={<div class="i-lucide-settings text-xl" />} />
135
+
<Tooltip
136
+
text="Settings"
137
+
children={<span class="iconify lucide--settings text-xl"></span>}
138
+
/>
139
139
</button>
140
140
</>
141
141
);
+1
-1
src/components/text-input.tsx
+1
-1
src/components/text-input.tsx
···
25
25
disabled={props.disabled}
26
26
required={props.required}
27
27
class={
28
-
"dark:bg-dark-100 focus:outline-1.5 dark:shadow-dark-900/80 rounded-lg bg-white px-2 py-1 shadow-sm focus:outline-neutral-900 dark:focus:outline-neutral-200 " +
28
+
"dark:bg-dark-100 dark:shadow-dark-900/80 rounded-lg bg-white px-2 py-1 shadow-sm focus:outline-[1.5px] focus:outline-neutral-900 dark:focus:outline-neutral-200 " +
29
29
props.class
30
30
}
31
31
onInput={props.onInput}
+1
-1
src/components/tooltip.tsx
+1
-1
src/components/tooltip.tsx
···
8
8
<Show when={!isTouchDevice}>
9
9
<span
10
10
style={`transform: translate(-50%, 28px)`}
11
-
class={`left-50% border-0.5 dark:shadow-dark-900/80 pointer-events-none absolute z-10 hidden min-w-fit select-none whitespace-nowrap rounded border-neutral-300 bg-white p-1 text-center font-sans text-xs text-neutral-900 shadow-md group-hover/tooltip:inline dark:border-neutral-600 dark:bg-neutral-800 dark:text-neutral-200`}
11
+
class={`dark:shadow-dark-900/80 pointer-events-none absolute left-[50%] z-10 hidden min-w-fit rounded border-[0.5px] border-neutral-300 bg-white p-1 text-center font-sans text-xs whitespace-nowrap text-neutral-900 shadow-md select-none group-hover/tooltip:inline dark:border-neutral-600 dark:bg-neutral-800 dark:text-neutral-200`}
12
12
>
13
13
{props.text}
14
14
</span>
-1
src/index.tsx
-1
src/index.tsx
+13
-11
src/layout.tsx
+13
-11
src/layout.tsx
···
33
33
</MetaProvider>
34
34
<div class="mb-2 flex w-[22rem] items-center sm:w-[24rem]">
35
35
<div class="flex basis-1/3 gap-x-2">
36
-
<A href="/jetstream">
37
-
<Tooltip text="Relay">
38
-
<div class="i-lucide-radio-tower text-xl" />
39
-
</Tooltip>
40
-
</A>
36
+
<Tooltip text="Relay">
37
+
<A href="/jetstream" class="iconify lucide--radio-tower text-xl"></A>
38
+
</Tooltip>
41
39
<AccountManager />
42
40
</div>
43
41
<div class="flex basis-1/3 items-center justify-center text-center">
44
-
<A href="/" style='font-feature-settings: "cv05"' class="font-bold hover:underline">
42
+
<A href="/" style='font-feature-settings: "cv05"' class="font-bold hover:underline active:underline">
45
43
PDSls
46
44
</A>
47
45
</div>
48
-
<div class="justify-right flex basis-1/3 items-center gap-x-2">
46
+
<div class="flex basis-1/3 items-center justify-end gap-x-2">
49
47
<Show when={agent()}>
50
48
<RecordEditor create={true} />
51
49
</Show>
52
50
<Settings />
53
51
</div>
54
52
</div>
55
-
<div class="min-w-22rem sm:min-w-24rem z-1 dark:bg-dark-500 mb-4 flex max-w-full flex-col items-center text-pretty bg-neutral-100 md:max-w-screen-md">
53
+
<div class="dark:bg-dark-500 z-1 mb-4 flex max-w-full min-w-[22rem] flex-col items-center bg-neutral-100 text-pretty sm:min-w-[24rem] md:max-w-[48rem]">
56
54
<Show when={location.pathname !== "/jetstream" && location.pathname !== "/firehose"}>
57
55
<Search />
58
56
</Show>
···
63
61
<ErrorBoundary
64
62
fallback={(err) => <div class="mt-3 break-words">Error: {err.message}</div>}
65
63
>
66
-
<Suspense fallback={<div class="i-lucide-loader-circle mt-3 animate-spin text-xl" />}>
64
+
<Suspense
65
+
fallback={
66
+
<span class="iconify lucide--loader-circle mt-3 animate-spin text-xl"></span>
67
+
}
68
+
>
67
69
{props.children}
68
70
</Suspense>
69
71
</ErrorBoundary>
70
72
</Show>
71
73
</div>
72
74
<Show when={copyNotice()}>
73
-
<div class="backdrop-blur-xs border-0.5 dark:shadow-dark-900/80 dark:bg-dark-100/70 fixed bottom-10 z-50 flex items-center rounded-lg border-neutral-300 bg-neutral-100/70 p-2 shadow-md dark:border-neutral-700">
74
-
<div class="i-lucide-clipboard-check mr-1" />
75
+
<div class="dark:shadow-dark-900/80 dark:bg-dark-100/70 fixed bottom-10 z-50 flex items-center rounded-lg border-[0.5px] border-neutral-300 bg-neutral-100/70 p-2 shadow-md backdrop-blur-xs dark:border-neutral-700">
76
+
<span class="iconify lucide--clipboard-check mr-1"></span>
75
77
Copied to clipboard
76
78
</div>
77
79
</Show>
+25
src/styles/index.css
+25
src/styles/index.css
···
1
+
@import "tailwindcss";
2
+
3
+
@plugin "@iconify/tailwind4" {
4
+
prefixes: lucide;
5
+
}
6
+
7
+
@custom-variant dark (&:where(.dark, .dark *));
8
+
9
+
@theme {
10
+
--font-sans: "Inter", sans-serif;
11
+
--font-mono: "Roboto Mono", monospace;
12
+
13
+
--color-dark-50: oklch(40.91% 0 0);
14
+
--color-dark-100: oklch(35.62% 0 0);
15
+
--color-dark-200: oklch(31.71% 0 0);
16
+
--color-dark-300: oklch(29.72% 0 0);
17
+
--color-dark-400: oklch(25.2% 0 0);
18
+
--color-dark-500: oklch(23.93% 0 0);
19
+
--color-dark-600: oklch(22.73% 0.0038 286.09);
20
+
--color-dark-700: oklch(22.21% 0 0);
21
+
--color-dark-800: oklch(20.9% 0 0);
22
+
--color-dark-900: oklch(16.84% 0 0);
23
+
--color-dark-950: oklch(13.44% 0 0);
24
+
}
25
+
1
26
html {
2
27
scrollbar-gutter: stable both-edges;
3
28
}
+3
-3
src/views/blob.tsx
+3
-3
src/views/blob.tsx
···
36
36
<p>
37
37
{blobs()?.length} blob{(blobs()?.length ?? 0 > 1) ? "s" : ""}
38
38
</p>
39
-
<div class="break-anywhere flex flex-col gap-0.5 font-mono text-sm lg:break-normal">
39
+
<div class="flex flex-col gap-0.5 font-mono text-sm wrap-anywhere lg:break-normal">
40
40
<For each={blobs()}>
41
41
{(cid) => (
42
42
<a
43
43
href={`${props.pds}/xrpc/com.atproto.sync.getBlob?did=${props.repo}&cid=${cid}`}
44
44
target="_blank"
45
-
class="rounded px-0.5 hover:bg-neutral-200 dark:hover:bg-neutral-700"
45
+
class="rounded px-0.5 hover:bg-neutral-200 active:bg-neutral-200 dark:hover:bg-neutral-700 dark:active:bg-neutral-700"
46
46
>
47
47
<span class="text-blue-400">{cid}</span>
48
48
</a>
···
54
54
<Button onClick={() => refetch()}>Load More</Button>
55
55
</Show>
56
56
<Show when={response.loading}>
57
-
<div class="i-lucide-loader-circle mt-2 animate-spin text-xl" />
57
+
<span class="iconify lucide--loader-circle mt-2 animate-spin text-xl"></span>
58
58
</Show>
59
59
</div>
60
60
);
+19
-16
src/views/collection.tsx
+19
-16
src/views/collection.tsx
···
37
37
38
38
return (
39
39
<span
40
-
class="relative flex items-baseline rounded px-0.5 hover:bg-neutral-200 dark:hover:bg-neutral-700"
40
+
class="relative flex items-baseline rounded px-0.5 hover:bg-neutral-200 active:bg-neutral-200 dark:hover:bg-neutral-700 dark:active:bg-neutral-700"
41
41
ref={rkeyRef}
42
42
onmouseover={() => setHover(true)}
43
43
onmouseleave={() => setHover(false)}
···
51
51
<Show when={hover()}>
52
52
<span
53
53
ref={previewRef}
54
-
class={`dark:bg-dark-500/70 left-50% max-h-xs sm:max-h-md z-25 backdrop-blur-xs border-0.5 dark:shadow-dark-900/80 pointer-events-none absolute block w-max max-w-sm -translate-x-1/2 overflow-hidden whitespace-pre-wrap rounded-lg border-neutral-300 bg-neutral-100/70 p-2 text-xs shadow-md lg:max-w-lg dark:border-neutral-700 ${isOverflowing(previewHeight()) ? "bottom-7" : "top-7"}`}
54
+
class={`dark:bg-dark-500/70 max-h-xs sm:max-h-md dark:shadow-dark-900/80 pointer-events-none absolute left-[50%] z-25 block w-max max-w-sm -translate-x-1/2 overflow-hidden rounded-lg border-[0.5px] border-neutral-300 bg-neutral-100/70 p-2 text-xs whitespace-pre-wrap shadow-md backdrop-blur-xs lg:max-w-lg dark:border-neutral-700 ${isOverflowing(previewHeight()) ? "bottom-7" : "top-7"}`}
55
55
>
56
56
<JSONValue
57
57
data={props.record.record.value as JSONType}
···
161
161
162
162
return (
163
163
<Show when={records.length || response()}>
164
-
<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-neutral-100/70 py-3">
165
-
<div class="w-22rem sm:w-24rem flex items-center gap-2">
164
+
<div class="dark:bg-dark-500/70 sticky top-0 z-5 flex w-screen flex-col items-center justify-center gap-2 bg-neutral-100/70 py-3 backdrop-blur-xs">
165
+
<div class="flex w-[22rem] items-center gap-2 sm:w-[24rem]">
166
166
<Show when={agent() && agent()?.sub === did}>
167
167
<div class="flex items-center gap-x-2">
168
168
<Tooltip
···
178
178
setLastSelected(undefined);
179
179
setBatchDelete(!batchDelete());
180
180
}}
181
+
class="flex items-center"
181
182
>
182
-
<div
183
-
class={`text-lg ${batchDelete() ? "i-lucide-circle-x" : "i-lucide-trash-2"} `}
184
-
/>
183
+
<span
184
+
class={`iconify text-lg ${batchDelete() ? "lucide--circle-x" : "lucide--trash-2"} `}
185
+
></span>
185
186
</button>
186
187
}
187
188
/>
···
189
190
<Tooltip
190
191
text="Select All"
191
192
children={
192
-
<button onclick={() => selectAll()}>
193
-
<div class="i-lucide-copy-check text-lg" />
193
+
<button onclick={() => selectAll()} class="flex items-center">
194
+
<span class="iconify lucide--copy-check text-lg"></span>
194
195
</button>
195
196
}
196
197
/>
197
198
<Tooltip
198
199
text="Confirm"
199
200
children={
200
-
<button onclick={() => deleteRecords()}>
201
-
<div class="i-lucide-trash-2 text-lg text-red-500 dark:text-red-400" />
201
+
<button onclick={() => deleteRecords()} class="flex items-center">
202
+
<span class="iconify lucide--trash-2 text-lg text-red-500 dark:text-red-400"></span>
202
203
</button>
203
204
}
204
205
/>
···
212
213
/>
213
214
</div>
214
215
<Show when={records.length > 1}>
215
-
<div class="w-22rem sm:w-24rem flex items-center justify-between gap-x-2">
216
+
<div class="flex w-[22rem] items-center justify-between gap-x-2 sm:w-[24rem]">
216
217
<Button
217
218
onClick={() => {
218
219
setReverse(!reverse());
···
221
222
refetch();
222
223
}}
223
224
>
224
-
<div class={`${reverse() ? "i-lucide-rotate-ccw" : "i-lucide-rotate-cw"} text-sm`} />
225
+
<span
226
+
class={`iconify ${reverse() ? "lucide--rotate-ccw" : "lucide--rotate-cw"} text-sm`}
227
+
></span>
225
228
Reverse
226
229
</Button>
227
230
<div>
···
231
234
</Show>
232
235
<span>{records.length} records</span>
233
236
</div>
234
-
<div class="w-5rem flex items-center justify-end">
237
+
<div class="flex w-[5rem] items-center justify-end">
235
238
<Show when={cursor()}>
236
239
<Show when={!response.loading}>
237
240
<Button onClick={() => refetch()}>Load More</Button>
238
241
</Show>
239
242
<Show when={response.loading}>
240
-
<div class="i-lucide-loader-circle w-5rem animate-spin text-xl" />
243
+
<div class="iconify lucide--loader-circle w-[5rem] animate-spin text-xl" />
241
244
</Show>
242
245
</Show>
243
246
</div>
···
254
257
<>
255
258
<Show when={batchDelete()}>
256
259
<label
257
-
class="flex select-none items-center gap-1"
260
+
class="flex items-center gap-1 select-none"
258
261
onclick={(e) => handleSelectionClick(e, index())}
259
262
>
260
263
<input
+17
-17
src/views/home.tsx
+17
-17
src/views/home.tsx
···
3
3
4
4
const Home = () => {
5
5
return (
6
-
<div class="w-22rem sm:w-24rem mt-4 flex flex-col gap-2 break-words">
6
+
<div class="mt-4 flex w-[22rem] flex-col gap-2 break-words sm:w-[24rem]">
7
7
<div>
8
8
<div>
9
9
<span class="font-semibold">AT Protocol Explorer</span>
10
10
</div>
11
11
<div class="flex items-center gap-1">
12
-
<div class="i-lucide-search" />
12
+
<div class="iconify lucide--search" />
13
13
<span>
14
14
Browse the public data on{" "}
15
-
<a class="text-blue-400 hover:underline" href="https://atproto.com" target="_blank">
15
+
<a class="text-blue-400 hover:underline active:underline" href="https://atproto.com" target="_blank">
16
16
atproto
17
17
</a>
18
18
.
19
19
</span>
20
20
</div>
21
21
<div class="flex items-center gap-1">
22
-
<div class="i-lucide-user-round" />
22
+
<div class="iconify lucide--user-round" />
23
23
<span>Login to manage records in your repo.</span>
24
24
</div>
25
25
<div class="flex items-center gap-1">
26
-
<div class="i-lucide-radio-tower" />
26
+
<div class="iconify lucide--radio-tower" />
27
27
<div>
28
-
<A href="/jetstream" class="text-blue-400 hover:underline">
28
+
<A href="/jetstream" class="text-blue-400 hover:underline active:underline">
29
29
Jetstream
30
30
</A>{" "}
31
31
and{" "}
32
-
<A href="/firehose" class="text-blue-400 hover:underline">
32
+
<A href="/firehose" class="text-blue-400 hover:underline active:underline">
33
33
firehose
34
34
</A>{" "}
35
35
streaming.
36
36
</div>
37
37
</div>
38
38
<div class="flex items-center gap-1">
39
-
<div class="i-lucide-send-to-back" />
39
+
<div class="iconify lucide--send-to-back" />
40
40
<span>
41
41
Backlinks support with{" "}
42
42
<A
43
43
href="https://constellation.microcosm.blue"
44
-
class="text-blue-400 hover:underline"
44
+
class="text-blue-400 hover:underline active:underline"
45
45
target="_blank"
46
46
>
47
47
constellation
···
53
53
<div>
54
54
<span class="font-semibold">Examples</span>
55
55
<div class="flex items-center gap-1">
56
-
<div class="i-lucide-server" />
57
-
<A href="/pds.kelinci.net" class="text-blue-400 hover:underline">
56
+
<div class="iconify lucide--server" />
57
+
<A href="/pds.kelinci.net" class="text-blue-400 hover:underline active:underline">
58
58
https://pds.kelinci.net
59
59
</A>
60
60
</div>
61
61
<div class="flex items-center gap-1">
62
-
<div class="i-lucide-at-sign" />
63
-
<A href="/at://did:plc:vwzwgnygau7ed7b7wt5ux7y2" class="text-blue-400 hover:underline">
62
+
<div class="iconify lucide--at-sign" />
63
+
<A href="/at://did:plc:vwzwgnygau7ed7b7wt5ux7y2" class="text-blue-400 hover:underline active:underline">
64
64
at://did:plc:vwzwgnygau7ed7b7wt5ux7y2
65
65
</A>
66
66
</div>
67
67
<div class="flex items-center gap-1">
68
-
<div class="i-lucide-file-json shrink-0" />
68
+
<div class="iconify lucide--file-json shrink-0" />
69
69
<A
70
70
href="/at://did:plc:oisofpd7lj26yvgiivf3lxsi/app.bsky.actor.profile/self"
71
-
class="text-blue-400 hover:underline"
71
+
class="text-blue-400 hover:underline active:underline"
72
72
>
73
73
at://hailey.at/app.bsky.actor.profile/self
74
74
</A>
75
75
</div>
76
76
<div class="flex items-center gap-1">
77
-
<div class="i-lucide-tag" />
77
+
<div class="iconify lucide--tag" />
78
78
<A
79
79
href="/at://did:plc:wkoofae5uytcm7bjncmev6n6/labels"
80
-
class="text-blue-400 hover:underline"
80
+
class="text-blue-400 hover:underline active:underline"
81
81
>
82
82
at://pronouns.diy/labels
83
83
</A>
+13
-11
src/views/labels.tsx
+13
-11
src/views/labels.tsx
···
66
66
URI Patterns (comma-separated)
67
67
</label>
68
68
</div>
69
-
<div class="w-22rem sm:w-24rem flex items-center gap-x-2">
69
+
<div class="flex w-[22rem] items-center gap-x-2 sm:w-[24rem]">
70
70
<textarea
71
71
id="patterns"
72
72
name="patterns"
···
77
77
/>
78
78
<div class="flex justify-center">
79
79
<Show when={!response.loading}>
80
-
<button onclick={() => initQuery()} type="submit">
81
-
<div class="i-lucide-search text-xl" />
82
-
</button>
80
+
<button
81
+
onclick={() => initQuery()}
82
+
type="submit"
83
+
class="iconify lucide--search text-xl"
84
+
></button>
83
85
</Show>
84
86
<Show when={response.loading}>
85
-
<div class="i-lucide-loader-circle animate-spin text-xl" />
87
+
<div class="iconify lucide--loader-circle animate-spin text-xl" />
86
88
</Show>
87
89
</div>
88
90
</div>
89
91
</form>
90
-
<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-3 bg-neutral-100/70 py-3">
92
+
<div class="dark:bg-dark-500/70 sticky top-0 z-5 flex w-screen flex-col items-center justify-center gap-3 bg-neutral-100/70 py-3 backdrop-blur-xs">
91
93
<TextInput
92
94
placeholder="Filter by label"
93
95
onInput={(e) => setFilter(e.currentTarget.value)}
94
-
class="w-22rem sm:w-24rem"
96
+
class="w-[22rem] sm:w-[24rem]"
95
97
/>
96
98
<div class="flex items-center gap-x-2">
97
99
<Show when={labelCount() && labels().length}>
···
107
109
<Button onClick={() => refetch()}>Load More</Button>
108
110
</Show>
109
111
<Show when={response.loading}>
110
-
<div class="i-lucide-loader-circle animate-spin text-xl" />
112
+
<div class="iconify lucide--loader-circle animate-spin text-xl" />
111
113
</Show>
112
114
</div>
113
115
</Show>
114
116
</div>
115
117
</div>
116
118
<Show when={labels().length}>
117
-
<div class="break-anywhere min-w-22rem sm:min-w-24rem divide-y-0.5 flex flex-col gap-2 divide-neutral-400 whitespace-pre-wrap text-sm dark:divide-neutral-600">
119
+
<div class="flex min-w-[22rem] flex-col gap-2 divide-y-[0.5px] divide-neutral-400 text-sm wrap-anywhere whitespace-pre-wrap sm:min-w-[24rem] dark:divide-neutral-600">
118
120
<For each={filterLabels()}>
119
121
{(label) => (
120
122
<div class="flex items-center justify-between gap-2 pb-2">
···
124
126
<A
125
127
href={`/at://${label.uri.replace("at://", "")}`}
126
128
target="_blank"
127
-
class="text-blue-400 hover:underline"
129
+
class="text-blue-400 hover:underline active:underline"
128
130
>
129
131
{label.uri}
130
132
</A>
···
153
155
</Show>
154
156
</div>
155
157
<Show when={label.neg}>
156
-
<div class="i-lucide-minus shrink-0 text-lg text-red-500 dark:text-red-400" />
158
+
<div class="iconify lucide--minus shrink-0 text-lg text-red-500 dark:text-red-400" />
157
159
</Show>
158
160
</div>
159
161
)}
+4
-4
src/views/pds.tsx
+4
-4
src/views/pds.tsx
···
78
78
<div class="flex flex-col">
79
79
<span class="font-semibold">Available User Domains</span>
80
80
<For each={server().availableUserDomains}>
81
-
{(domain) => <span class="break-anywhere text-sm">{domain}</span>}
81
+
{(domain) => <span class="text-sm wrap-anywhere">{domain}</span>}
82
82
</For>
83
83
</div>
84
84
</Show>
···
91
91
<A
92
92
href={`/at://${repo.did}`}
93
93
classList={{
94
-
"rounded items-center text-sm gap-1 flex justify-between font-mono relative hover:bg-neutral-200 dark:hover:bg-neutral-700": true,
94
+
"rounded items-center text-sm gap-1 flex justify-between font-mono relative hover:bg-neutral-200 dark:hover:bg-neutral-700 active:bg-neutral-200 dark:active:bg-neutral-700": true,
95
95
"text-blue-400": repo.active,
96
96
"text-neutral-400 dark:text-neutral-500": !repo.active,
97
97
}}
···
99
99
<Show when={!repo.active}>
100
100
<div class="absolute -left-4">
101
101
<Tooltip text={repo.status ?? "???"}>
102
-
<div class="i-lucide-skull" />
102
+
<span class="iconify lucide--skull"></span>
103
103
</Tooltip>
104
104
</div>
105
105
</Show>
···
117
117
<Button onClick={() => refetch()}>Load More</Button>
118
118
</Show>
119
119
<Show when={response.loading}>
120
-
<div class="i-lucide-loader-circle animate-spin text-xl" />
120
+
<span class="iconify lucide--loader-circle animate-spin text-xl"></span>
121
121
</Show>
122
122
</div>
123
123
</div>
+18
-16
src/views/record.tsx
+18
-16
src/views/record.tsx
···
114
114
return (
115
115
<div class="flex w-full flex-col items-center">
116
116
<Show when={record() === undefined && validRecord() !== false}>
117
-
<div class="i-lucide-loader-circle mt-3 animate-spin text-xl" />
117
+
<div class="iconify lucide--loader-circle mt-3 animate-spin text-xl" />
118
118
</Show>
119
119
<Show when={validRecord() === false}>
120
120
<div class="mt-3 break-words text-red-500 dark:text-red-400">{notice()}</div>
121
121
</Show>
122
122
<Show when={record()}>
123
-
<div class="w-22rem sm:w-24rem dark:shadow-dark-900/80 dark:bg-dark-300 my-3 flex justify-between rounded-lg bg-white px-2 py-1.5 shadow-sm">
123
+
<div class="dark:shadow-dark-900/80 dark:bg-dark-300 my-3 flex w-[22rem] justify-between rounded-lg bg-white px-2 py-1.5 shadow-sm sm:w-[24rem]">
124
124
<div class="flex gap-3 text-sm">
125
125
<button
126
126
classList={{
···
130
130
}}
131
131
onclick={() => setShowBacklinks(!showBacklinks())}
132
132
>
133
-
<div class="i-lucide-file-json" />
133
+
<div class="iconify lucide--file-json" />
134
134
Record
135
135
</button>
136
136
<button
···
141
141
}}
142
142
onclick={() => setShowBacklinks(!showBacklinks())}
143
143
>
144
-
<div class="i-lucide-send-to-back" />
144
+
<div class="iconify lucide--send-to-back" />
145
145
Backlinks
146
146
</button>
147
147
</div>
···
150
150
<RecordEditor create={false} record={record()?.value} />
151
151
<Tooltip text="Delete">
152
152
<button
153
-
class="rounded-sm p-1 hover:bg-neutral-100 dark:hover:bg-neutral-600"
153
+
class="flex items-center rounded-sm p-1 hover:bg-neutral-100 active:bg-neutral-100 dark:hover:bg-neutral-600 dark:active:bg-neutral-600"
154
154
onclick={() => setOpenDelete(true)}
155
155
>
156
-
<div class="i-lucide-trash-2" />
156
+
<span class="iconify lucide--trash-2"></span>
157
157
</button>
158
158
</Tooltip>
159
159
<Modal open={openDelete()} onClose={() => setOpenDelete(false)}>
160
-
<div class="starting:opacity-0 dark:bg-dark-800/70 border-0.5 dark:shadow-dark-900/80 backdrop-blur-xs left-50% top-70 absolute -translate-x-1/2 rounded-lg border-neutral-300 bg-neutral-200/70 p-4 text-neutral-900 shadow-md transition-opacity duration-300 dark:border-neutral-700 dark:text-neutral-200">
160
+
<div class="dark:bg-dark-800/70 border-0.5 dark:shadow-dark-900/80 left-50% absolute top-70 -translate-x-1/2 rounded-lg border-neutral-300 bg-neutral-200/70 p-4 text-neutral-900 shadow-md backdrop-blur-xs transition-opacity duration-300 dark:border-neutral-700 dark:text-neutral-200 starting:opacity-0">
161
161
<h2 class="mb-2 font-bold">Delete this record?</h2>
162
162
<div class="flex justify-end gap-2">
163
163
<Button onClick={() => setOpenDelete(false)}>Cancel</Button>
164
164
<Button
165
165
onClick={deleteRecord}
166
-
class="dark:shadow-dark-900/80 rounded-lg bg-red-500 px-2 py-1.5 text-xs font-semibold text-neutral-200 shadow-sm hover:bg-red-400"
166
+
class="dark:shadow-dark-900/80 rounded-lg bg-red-500 px-2 py-1.5 text-xs font-semibold text-neutral-200 shadow-sm hover:bg-red-400 active:bg-red-400"
167
167
>
168
168
Delete
169
169
</Button>
···
173
173
</Show>
174
174
<Tooltip text="Copy record">
175
175
<button
176
-
class="rounded-sm p-1 hover:bg-neutral-100 dark:hover:bg-neutral-600"
176
+
class="flex items-center rounded-sm p-1 hover:bg-neutral-100 active:bg-neutral-100 dark:hover:bg-neutral-600 dark:active:bg-neutral-600"
177
177
onclick={() => addToClipboard(JSON.stringify(record()?.value, null, 2))}
178
178
>
179
-
<div class="i-lucide-copy" />
179
+
<span class="iconify lucide--copy"></span>
180
180
</button>
181
181
</Tooltip>
182
182
<Show when={externalLink()}>
183
183
{(externalLink) => (
184
184
<Tooltip text={`Open on ${externalLink().label}`}>
185
185
<a
186
-
class="rounded-sm p-1 hover:bg-neutral-100 dark:hover:bg-neutral-600"
186
+
class="flex items-center rounded-sm p-1 hover:bg-neutral-100 active:bg-neutral-100 dark:hover:bg-neutral-600 dark:active:bg-neutral-600"
187
187
target="_blank"
188
188
href={externalLink()?.link}
189
189
>
190
-
<div class={`${externalLink().icon ?? "i-lucide-app-window"}`} />
190
+
<span class={`iconify ${externalLink().icon ?? "lucide--app-window"}`}></span>
191
191
</a>
192
192
</Tooltip>
193
193
)}
194
194
</Show>
195
195
<Tooltip text="Record on PDS">
196
196
<a
197
-
class="rounded-sm p-1 hover:bg-neutral-100 dark:hover:bg-neutral-600"
197
+
class="flex items-center rounded-sm p-1 hover:bg-neutral-100 active:bg-neutral-100 dark:hover:bg-neutral-600 dark:active:bg-neutral-600"
198
198
href={`https://${pds()}/xrpc/com.atproto.repo.getRecord?repo=${params.repo}&collection=${params.collection}&rkey=${params.rkey}`}
199
199
target="_blank"
200
200
>
201
-
<div class="i-lucide-external-link" />
201
+
<span class="iconify lucide--external-link"></span>
202
202
</a>
203
203
</Tooltip>
204
204
</div>
205
205
</div>
206
206
<Show when={!showBacklinks()}>
207
-
<div class="break-anywhere w-full whitespace-pre-wrap font-mono text-xs sm:text-sm">
207
+
<div class="w-full font-mono text-xs wrap-anywhere whitespace-pre-wrap sm:text-sm">
208
208
<JSONValue data={record()?.value as any} repo={record()!.uri.split("/")[2]} />
209
209
</div>
210
210
</Show>
211
211
<Show when={showBacklinks()}>
212
212
<ErrorBoundary fallback={(err) => <div class="break-words">Error: {err.message}</div>}>
213
213
<Suspense
214
-
fallback={<div class="i-lucide-loader-circle animate-spin self-center text-xl" />}
214
+
fallback={
215
+
<div class="iconify lucide--loader-circle animate-spin self-center text-xl" />
216
+
}
215
217
>
216
218
<Backlinks target={`at://${did}/${params.collection}/${params.rkey}`} />
217
219
</Suspense>
+51
-45
src/views/repo.tsx
+51
-45
src/views/repo.tsx
···
31
31
const FilterButton = (props: { icon: string; event: PlcEvent }) => (
32
32
<button
33
33
classList={{
34
-
"rounded-full p-1.5": true,
34
+
"flex items-center rounded-full p-1.5": true,
35
35
"bg-neutral-700 dark:bg-neutral-200": activePlcEvent() === props.event,
36
36
}}
37
37
onclick={() => setActivePlcEvent(activePlcEvent() === props.event ? undefined : props.event)}
38
38
>
39
-
<div
39
+
<span
40
40
class={`${props.icon} ${activePlcEvent() === props.event ? "text-neutral-200 dark:text-neutral-900" : ""}`}
41
-
/>
41
+
></span>
42
42
</button>
43
43
);
44
44
45
45
const DiffItem = (props: { diff: DiffEntry }) => {
46
46
const diff = props.diff;
47
47
let title = "Unknown log entry";
48
-
let icon = "i-lucide-circle-help";
48
+
let icon = "lucide--circle-help";
49
49
let value = "";
50
50
51
51
if (diff.type === "identity_created") {
52
-
icon = "i-lucide-bell";
52
+
icon = "lucide--bell";
53
53
title = `Identity created`;
54
54
} else if (diff.type === "identity_tombstoned") {
55
-
icon = "i-lucide-skull";
55
+
icon = "lucide--skull";
56
56
title = `Identity tombstoned`;
57
57
} else if (diff.type === "handle_added" || diff.type === "handle_removed") {
58
-
icon = "i-lucide-at-sign";
58
+
icon = "lucide--at-sign";
59
59
title = diff.type === "handle_added" ? "Alias added" : "Alias removed";
60
60
value = diff.handle;
61
61
} else if (diff.type === "handle_changed") {
62
-
icon = "i-lucide-at-sign";
62
+
icon = "lucide--at-sign";
63
63
title = "Alias updated";
64
64
value = `${diff.prev_handle} → ${diff.next_handle}`;
65
65
} else if (diff.type === "rotation_key_added" || diff.type === "rotation_key_removed") {
66
-
icon = "i-lucide-key-round";
66
+
icon = "lucide--key-round";
67
67
title = diff.type === "rotation_key_added" ? "Rotation key added" : "Rotation key removed";
68
68
value = diff.rotation_key;
69
69
} else if (diff.type === "service_added" || diff.type === "service_removed") {
70
-
icon = "i-lucide-server";
70
+
icon = "lucide--server";
71
71
title = `Service ${diff.service_id} ${diff.type === "service_added" ? "added" : "removed"}`;
72
72
value = `${diff.service_endpoint}`;
73
73
} else if (diff.type === "service_changed") {
74
-
icon = "i-lucide-server";
74
+
icon = "lucide--server";
75
75
title = `Service ${diff.service_id} updated`;
76
76
value = `${diff.prev_service_endpoint} → ${diff.next_service_endpoint}`;
77
77
} else if (
78
78
diff.type === "verification_method_added" ||
79
79
diff.type === "verification_method_removed"
80
80
) {
81
-
icon = "i-lucide-shield-check";
81
+
icon = "lucide--shield-check";
82
82
title = `Verification method ${diff.method_id} ${diff.type === "verification_method_added" ? "added" : "removed"}`;
83
83
value = `${diff.method_key}`;
84
84
} else if (diff.type === "verification_method_changed") {
85
-
icon = "i-lucide-shield-check";
85
+
icon = "lucide--shield-check";
86
86
title = `Verification method ${diff.method_id} updated`;
87
87
value = `${diff.prev_method_key} → ${diff.next_method_key}`;
88
88
}
89
89
90
90
return (
91
91
<div class="grid grid-cols-[min-content_1fr] items-center gap-x-1">
92
-
<div class={icon + ` shrink-0`} />
92
+
<div class={icon + ` iconify shrink-0`} />
93
93
<p
94
94
classList={{
95
95
"font-semibold": true,
···
109
109
<div class="flex items-center justify-between">
110
110
<div class="flex items-center gap-1">
111
111
<Tooltip text="Filter operations">
112
-
<div class="i-lucide-filter" />
112
+
<div class="iconify lucide--filter" />
113
113
</Tooltip>
114
114
<div class="dark:shadow-dark-900/80 dark:bg-dark-300 flex w-fit items-center rounded-full bg-white shadow-sm">
115
-
<FilterButton icon="i-lucide-at-sign" event="handle" />
116
-
<FilterButton icon="i-lucide-key-round" event="rotation_key" />
117
-
<FilterButton icon="i-lucide-server" event="service" />
118
-
<FilterButton icon="i-lucide-shield-check" event="verification_method" />
115
+
<FilterButton icon="iconify lucide--at-sign" event="handle" />
116
+
<FilterButton icon="iconify lucide--key-round" event="rotation_key" />
117
+
<FilterButton icon="iconify lucide--server" event="service" />
118
+
<FilterButton icon="iconify lucide--shield-check" event="verification_method" />
119
119
</div>
120
120
</div>
121
121
<Tooltip text="Audit log">
122
122
<a
123
123
href={`${localStorage.plcDirectory ?? "https://plc.directory"}/${props.did}/log/audit`}
124
124
target="_blank"
125
+
class="flex items-center"
125
126
>
126
-
<div class="i-lucide-external-link" />
127
+
<span class="iconify lucide--external-link"></span>
127
128
</a>
128
129
</Tooltip>
129
130
</div>
···
177
178
}}
178
179
onclick={() => setTab(props.tab)}
179
180
>
180
-
<div class={props.icon} />
181
+
<div class={"iconify " + props.icon} />
181
182
{props.label}
182
183
</button>
183
184
);
···
264
265
</Show>
265
266
<div class="flex justify-between text-sm">
266
267
<Show when={!error()}>
267
-
<RepoTab tab="collections" label="Collections" icon="i-lucide-folder-open" />
268
+
<RepoTab tab="collections" label="Collections" icon="lucide--folder-open" />
268
269
</Show>
269
-
<RepoTab tab="doc" label="Identity" icon="i-lucide-id-card" />
270
+
<RepoTab tab="doc" label="Identity" icon="lucide--id-card" />
270
271
<Show when={!error()}>
271
-
<RepoTab tab="blobs" label="Blobs" icon="i-lucide-file-digit" />
272
+
<RepoTab tab="blobs" label="Blobs" icon="lucide--file-digit" />
272
273
</Show>
273
-
<RepoTab tab="backlinks" label="Backlinks" icon="i-lucide-send-to-back" />
274
+
<RepoTab tab="backlinks" label="Backlinks" icon="lucide--send-to-back" />
274
275
</div>
275
276
<Show when={tab() === "backlinks"}>
276
277
<ErrorBoundary fallback={(err) => <div class="break-words">Error: {err.message}</div>}>
277
278
<Suspense
278
-
fallback={<div class="i-lucide-loader-circle animate-spin self-center text-xl" />}
279
+
fallback={
280
+
<div class="iconify lucide--loader-circle animate-spin self-center text-xl" />
281
+
}
279
282
>
280
283
<Backlinks target={did} />
281
284
</Suspense>
···
284
287
<Show when={tab() === "blobs"}>
285
288
<ErrorBoundary fallback={(err) => <div class="break-words">Error: {err.message}</div>}>
286
289
<Suspense
287
-
fallback={<div class="i-lucide-loader-circle animate-spin self-center text-xl" />}
290
+
fallback={
291
+
<div class="iconify lucide--loader-circle animate-spin self-center text-xl" />
292
+
}
288
293
>
289
294
<BlobView pds={pds!} repo={did} />
290
295
</Suspense>
···
306
311
>
307
312
{(authority) => (
308
313
<>
309
-
<button onclick={() => toggleCollection(authority)}>
310
-
<div
314
+
<button onclick={() => toggleCollection(authority)} class="flex items-center">
315
+
<span
311
316
classList={{
312
-
"i-lucide-chevron-down text-lg transition-transform": true,
317
+
"iconify lucide--chevron-down text-lg transition-transform": true,
313
318
"-rotate-90": nsids()?.[authority].hidden,
314
319
}}
315
-
/>
320
+
></span>
316
321
</button>
317
322
<button
318
-
class="break-anywhere bg-transparent text-left"
323
+
class="bg-transparent text-left wrap-anywhere"
319
324
onclick={() => toggleCollection(authority)}
320
325
>
321
326
{authority}
···
333
338
{(nsid) => (
334
339
<A
335
340
href={`/at://${did}/${authority}.${nsid}`}
336
-
class="text-blue-400 hover:underline"
341
+
class="text-blue-400 hover:underline active:underline"
337
342
>
338
343
{authority}.{nsid}
339
344
</A>
···
350
355
<Show when={tab() === "doc"}>
351
356
<Show when={didDoc()}>
352
357
{(didDocument) => (
353
-
<div class="break-anywhere flex flex-col gap-y-2">
358
+
<div class="flex flex-col gap-y-2 wrap-anywhere">
354
359
<div class="flex flex-col gap-y-1">
355
360
<div class="flex items-baseline justify-between gap-2">
356
361
<div>
357
362
<div class="flex items-center gap-1">
358
-
<div class="i-lucide-id-card" />
363
+
<div class="iconify lucide--id-card" />
359
364
<p class="font-semibold">ID</p>
360
365
</div>
361
366
<div class="text-sm">{didDocument().id}</div>
···
368
373
: `https://${did.split("did:web:")[1]}/.well-known/did.json`
369
374
}
370
375
target="_blank"
376
+
class="flex items-center"
371
377
>
372
-
<div class="i-lucide-external-link" />
378
+
<span class="iconify lucide--external-link"></span>
373
379
</a>
374
380
</Tooltip>
375
381
</div>
376
382
<div>
377
383
<div class="flex items-center gap-1">
378
-
<div class="i-lucide-at-sign" />
384
+
<div class="iconify lucide--at-sign" />
379
385
<p class="font-semibold">Aliases</p>
380
386
</div>
381
387
<ul>
···
386
392
</div>
387
393
<div>
388
394
<div class="flex items-center gap-1">
389
-
<div class="i-lucide-server" />
395
+
<div class="iconify lucide--server" />
390
396
<p class="font-semibold">Services</p>
391
397
</div>
392
398
<ul>
···
395
401
<li class="flex flex-col text-sm">
396
402
<span>#{service.id.split("#")[1]}</span>
397
403
<a
398
-
class="w-fit text-blue-400 hover:underline"
404
+
class="w-fit text-blue-400 hover:underline active:underline"
399
405
href={service.serviceEndpoint.toString()}
400
406
target="_blank"
401
407
>
···
408
414
</div>
409
415
<div>
410
416
<div class="flex items-center gap-1">
411
-
<div class="i-lucide-shield-check" />
417
+
<div class="iconify lucide--shield-check" />
412
418
<p class="font-semibold">Verification methods</p>
413
419
</div>
414
420
<ul>
···
420
426
<span class="flex justify-between gap-1">
421
427
<span>#{verif.id.split("#")[1]}</span>
422
428
<span class="flex items-center gap-0.5">
423
-
<div class="i-lucide-key-round" />
429
+
<div class="iconify lucide--key-round" />
424
430
<ErrorBoundary fallback={<>unknown</>}>
425
431
{parsePublicMultikey(key()).type}
426
432
</ErrorBoundary>
···
462
468
setShowPlcLogs(!showPlcLogs());
463
469
}}
464
470
>
465
-
<div class="i-lucide-logs text-sm" />
471
+
<span class="iconify lucide--logs text-sm"></span>
466
472
{showPlcLogs() ? "Hide" : "Show"} PLC Logs
467
473
</Button>
468
474
<Show when={loading()}>
469
-
<div class="i-lucide-loader-circle animate-spin text-xl" />
475
+
<div class="iconify lucide--loader-circle animate-spin text-xl" />
470
476
</Show>
471
477
</div>
472
478
</Show>
···
478
484
}}
479
485
>
480
486
<Show when={downloading()}>
481
-
<div class="i-lucide-loader-circle animate-spin text-xl" />
487
+
<div class="iconify lucide--loader-circle animate-spin text-xl" />
482
488
</Show>
483
489
<Button onClick={() => downloadRepo()}>
484
-
<div class="i-lucide-download text-sm" />
490
+
<span class="iconify lucide--download text-sm"></span>
485
491
Export Repo
486
492
</Button>
487
493
</div>
+10
-10
src/views/stream.tsx
+10
-10
src/views/stream.tsx
···
155
155
inactiveClass="border-transparent hover:border-neutral-400 dark:hover:border-neutral-600"
156
156
href="/jetstream"
157
157
>
158
-
<div class="i-lucide-wind" />
158
+
<span class="iconify lucide--wind"></span>
159
159
Jetstream
160
160
</A>
161
161
<A
···
163
163
inactiveClass="border-transparent hover:border-neutral-400 dark:hover:border-neutral-600"
164
164
href="/firehose"
165
165
>
166
-
<div class="i-lucide-fire-extinguisher" />
166
+
<span class="iconify lucide--fire-extinguisher"></span>
167
167
Firehose
168
168
</A>
169
169
</div>
170
170
<form
171
171
ref={formRef}
172
-
class="z-5 dark:bg-dark-500/70 backdrop-blur-xs sticky top-0 flex w-screen flex-col items-center bg-neutral-100/70 px-4 text-sm"
172
+
class="dark:bg-dark-500/70 sticky top-0 z-5 flex w-screen flex-col items-center bg-neutral-100/70 px-4 text-sm backdrop-blur-xs"
173
173
>
174
174
<div class="flex flex-col gap-2 py-3">
175
175
<Show when={!connected()}>
···
183
183
"wss://jetstream1.us-east.bsky.network/subscribe"
184
184
: "wss://bsky.network")
185
185
}
186
-
class="w-16rem"
186
+
class="w-[16rem]"
187
187
/>
188
188
</label>
189
189
<Show when={streamType === StreamType.JETSTREAM}>
···
194
194
spellcheck={false}
195
195
placeholder="Comma-separated list of collections"
196
196
value={searchParams.collections ?? ""}
197
-
class="w-16rem dark:bg-dark-100 focus:outline-1.5 dark:shadow-dark-900/80 rounded-lg bg-white px-2 py-1 shadow-sm focus:outline-neutral-900 dark:focus:outline-neutral-200"
197
+
class="dark:bg-dark-100 focus:outline-1.5 dark:shadow-dark-900/80 w-[16rem] rounded-lg bg-white px-2 py-1 shadow-sm focus:outline-neutral-900 dark:focus:outline-neutral-200"
198
198
/>
199
199
</label>
200
200
</Show>
···
206
206
spellcheck={false}
207
207
placeholder="Comma-separated list of DIDs"
208
208
value={searchParams.dids ?? ""}
209
-
class="w-16rem dark:bg-dark-100 focus:outline-1.5 dark:shadow-dark-900/80 rounded-lg bg-white px-2 py-1 shadow-sm focus:outline-neutral-900 dark:focus:outline-neutral-200"
209
+
class="dark:bg-dark-100 focus:outline-1.5 dark:shadow-dark-900/80 w-[16rem] rounded-lg bg-white px-2 py-1 shadow-sm focus:outline-neutral-900 dark:focus:outline-neutral-200"
210
210
/>
211
211
</label>
212
212
</Show>
···
216
216
name="cursor"
217
217
placeholder="Leave empty for live-tail"
218
218
value={searchParams.cursor ?? ""}
219
-
class="w-16rem"
219
+
class="w-[16rem]"
220
220
/>
221
221
</label>
222
222
<Show when={streamType === StreamType.JETSTREAM}>
···
235
235
</Show>
236
236
</Show>
237
237
<Show when={connected()}>
238
-
<div class="break-anywhere flex flex-col gap-1">
238
+
<div class="flex flex-col gap-1 wrap-anywhere">
239
239
<For each={parameters()}>
240
240
{(param) => (
241
241
<Show when={param.param}>
242
242
<div class="flex">
243
-
<div class="min-w-6rem font-semibold">{param.name}</div>
243
+
<div class="min-w-[6rem] font-semibold">{param.name}</div>
244
244
{param.param}
245
245
</div>
246
246
</Show>
···
258
258
<Show when={notice().length}>
259
259
<div class="text-red-500 dark:text-red-400">{notice()}</div>
260
260
</Show>
261
-
<div class="break-anywhere md:w-screen-md divide-y-0.5 flex w-full flex-col gap-2 divide-neutral-500 whitespace-pre-wrap px-4 font-mono text-sm">
261
+
<div class="flex w-full flex-col gap-2 divide-y-[0.5px] divide-neutral-500 px-4 font-mono text-sm wrap-anywhere whitespace-pre-wrap md:w-[48rem]">
262
262
<For each={records().toReversed()}>
263
263
{(rec) => (
264
264
<div class="pb-2">
-15
uno.config.ts
-15
uno.config.ts
···
1
-
import { defineConfig, presetIcons, presetWebFonts, presetWind4 } from "unocss";
2
-
3
-
export default defineConfig({
4
-
presets: [
5
-
presetIcons(),
6
-
presetWind4(),
7
-
presetWebFonts({
8
-
provider: "none",
9
-
fonts: {
10
-
sans: "Inter:400,600,700",
11
-
mono: "Roboto Mono:400",
12
-
},
13
-
}),
14
-
],
15
-
});
+2
-2
vite.config.ts
+2
-2
vite.config.ts
···
1
1
import { defineConfig } from "vite";
2
2
import solidPlugin from "vite-plugin-solid";
3
-
import UnoCSS from "unocss/vite";
4
3
import metadata from "./public/oauth-client-metadata.json";
4
+
import tailwindcss from "@tailwindcss/vite";
5
5
6
6
const SERVER_HOST = "127.0.0.1";
7
7
const SERVER_PORT = 13213;
8
8
9
9
export default defineConfig({
10
10
plugins: [
11
-
UnoCSS(),
11
+
tailwindcss(),
12
12
solidPlugin(),
13
13
// Injects OAuth-related variables
14
14
{