creates video voice memos from audio clips; with bluesky integration. trill.ptr.pet

feat: init project

ptr.pet 47559ba1

+36
.gitignore
··· 1 + dist 2 + .wrangler 3 + .output 4 + .vercel 5 + .netlify 6 + .vinxi 7 + app.config.timestamp_*.js 8 + 9 + # Environment 10 + .env 11 + .env*.local 12 + 13 + # dependencies 14 + /node_modules 15 + 16 + # IDEs and editors 17 + /.idea 18 + .project 19 + .classpath 20 + *.launch 21 + .settings/ 22 + 23 + # Temp 24 + gitignore 25 + 26 + # System Files 27 + .DS_Store 28 + Thumbs.db 29 + 30 + /.envrc 31 + /.direnv 32 + /result 33 + 34 + ## Panda 35 + styled-system 36 + styled-system-studio
+36
README.md
··· 1 + ## Usage 2 + 3 + Those templates dependencies are maintained via [pnpm](https://pnpm.io) via `pnpm up -Lri`. 4 + 5 + This is the reason you see a `pnpm-lock.yaml`. That being said, any package manager will work. This file can be safely be removed once you clone a template. 6 + 7 + ```bash 8 + $ npm install # or pnpm install or yarn install 9 + ``` 10 + 11 + ### Learn more on the [Solid Website](https://solidjs.com) and come chat with us on our [Discord](https://discord.com/invite/solidjs) 12 + 13 + ## Available Scripts 14 + 15 + In the project directory, you can run: 16 + 17 + ### `npm run dev` or `npm start` 18 + 19 + Runs the app in the development mode.<br> 20 + Open [http://localhost:3000](http://localhost:3000) to view it in the browser. 21 + 22 + The page will reload if you make edits.<br> 23 + 24 + ### `npm run build` 25 + 26 + Builds the app for production to the `dist` folder.<br> 27 + It correctly bundles Solid in production mode and optimizes the build for the best performance. 28 + 29 + The build is minified and the filenames include the hashes.<br> 30 + Your app is ready to be deployed! 31 + 32 + ## Deployment 33 + 34 + You can deploy the `dist` folder to any static host provider (netlify, surge, now, etc.) 35 + 36 + ## This project was created with the [Solid CLI](https://github.com/solidjs-community/solid-cli)
+3347
deno.lock
··· 1 + { 2 + "version": "5", 3 + "specifiers": { 4 + "npm:@ark-ui/solid@^5.28.0": "5.28.0_solid-js@1.9.10__seroval@1.3.2_@internationalized+date@3.10.0", 5 + "npm:@atcute/atproto@^3.1.9": "3.1.9", 6 + "npm:@atcute/bluesky@^3.2.10": "3.2.10", 7 + "npm:@atcute/client@^4.0.5": "4.0.5", 8 + "npm:@atcute/identity-resolver@^1.1.4": "1.1.4_@atcute+identity@1.1.2", 9 + "npm:@atcute/identity@^1.1.2": "1.1.2", 10 + "npm:@atcute/lexicons@^1.2.3": "1.2.3", 11 + "npm:@atcute/microcosm@1": "1.0.0", 12 + "npm:@atcute/oauth-browser-client@^2.0.1": "2.0.1_@atcute+identity@1.1.2", 13 + "npm:@pandacss/dev@^1.5.1": "1.5.1_typescript@5.9.3", 14 + "npm:@pandacss/preset-base@^1.5.1": "1.5.1", 15 + "npm:@park-ui/panda-preset@~0.43.1": "0.43.1_@pandacss+dev@1.5.1__typescript@5.9.3_typescript@5.9.3", 16 + "npm:@solid-primitives/map@~0.7.2": "0.7.2_solid-js@1.9.10__seroval@1.3.2", 17 + "npm:fast-average-color@^9.5.0": "9.5.0", 18 + "npm:lucide-solid@0.553": "0.553.0_solid-js@1.9.10__seroval@1.3.2", 19 + "npm:mediabunny@^1.25.0": "1.25.0", 20 + "npm:solid-devtools@~0.34.3": "0.34.4_solid-js@1.9.10__seroval@1.3.2_vite@7.1.12__picomatch@4.0.3_@babel+core@7.28.5", 21 + "npm:solid-js@^1.9.5": "1.9.10_seroval@1.3.2", 22 + "npm:typescript@^5.7.2": "5.9.3", 23 + "npm:vite-plugin-solid@^2.11.8": "2.11.10_solid-js@1.9.10__seroval@1.3.2_vite@7.1.12__picomatch@4.0.3_@babel+core@7.28.5", 24 + "npm:vite-tsconfig-paths@^5.1.4": "5.1.4_vite@7.1.12__picomatch@4.0.3_typescript@5.9.3", 25 + "npm:vite@^7.1.4": "7.1.12_picomatch@4.0.3" 26 + }, 27 + "npm": { 28 + "@ark-ui/anatomy@3.5.0": { 29 + "integrity": "sha512-KoROLVVT23BvFHcye/GYhG8NJ2CH0C+CaoJhXrkEjvk8pbEx80Xk5NIUy5gL7xmX+LDD7kY5t3NotBqCu+2L2w==", 30 + "dependencies": [ 31 + "@zag-js/accordion@0.62.1", 32 + "@zag-js/anatomy@0.62.1", 33 + "@zag-js/avatar@0.62.1", 34 + "@zag-js/carousel@0.62.1", 35 + "@zag-js/checkbox@0.62.1", 36 + "@zag-js/clipboard@0.62.1", 37 + "@zag-js/collapsible@0.62.1", 38 + "@zag-js/color-picker@0.62.1", 39 + "@zag-js/color-utils@0.62.1", 40 + "@zag-js/combobox@0.62.1", 41 + "@zag-js/date-picker@0.62.1_@internationalized+date@3.5.5", 42 + "@zag-js/date-utils@0.62.1_@internationalized+date@3.10.0", 43 + "@zag-js/dialog@0.62.1", 44 + "@zag-js/editable@0.62.1", 45 + "@zag-js/file-upload@0.62.1", 46 + "@zag-js/hover-card@0.62.1", 47 + "@zag-js/menu@0.62.1", 48 + "@zag-js/number-input@0.62.1", 49 + "@zag-js/pagination@0.62.1", 50 + "@zag-js/pin-input@0.62.1", 51 + "@zag-js/popover@0.62.1", 52 + "@zag-js/presence@0.62.1", 53 + "@zag-js/progress@0.62.1", 54 + "@zag-js/qr-code@0.62.1", 55 + "@zag-js/radio-group@0.62.1", 56 + "@zag-js/rating-group@0.62.1", 57 + "@zag-js/select@0.62.1", 58 + "@zag-js/signature-pad@0.62.1", 59 + "@zag-js/slider@0.62.1", 60 + "@zag-js/splitter@0.62.1", 61 + "@zag-js/switch@0.62.1", 62 + "@zag-js/tabs@0.62.1", 63 + "@zag-js/tags-input@0.62.1", 64 + "@zag-js/time-picker", 65 + "@zag-js/toast@0.62.1", 66 + "@zag-js/toggle-group@0.62.1", 67 + "@zag-js/tooltip@0.62.1", 68 + "@zag-js/tree-view@0.62.1" 69 + ], 70 + "deprecated": true 71 + }, 72 + "@ark-ui/solid@5.28.0_solid-js@1.9.10__seroval@1.3.2_@internationalized+date@3.10.0": { 73 + "integrity": "sha512-QC3oCnElmUO3lsEXoD2l/HIy7TOCITu3pbJ6udQw/QuzABsTMF5y0L/nsBfR6rzKhHr5Vkggw6W4VBjvhH8w0w==", 74 + "dependencies": [ 75 + "@internationalized/date@3.10.0", 76 + "@zag-js/accordion@1.27.1", 77 + "@zag-js/anatomy@1.27.1", 78 + "@zag-js/angle-slider", 79 + "@zag-js/async-list", 80 + "@zag-js/auto-resize@1.27.1", 81 + "@zag-js/avatar@1.27.1", 82 + "@zag-js/bottom-sheet", 83 + "@zag-js/carousel@1.27.1", 84 + "@zag-js/checkbox@1.27.1", 85 + "@zag-js/clipboard@1.27.1", 86 + "@zag-js/collapsible@1.27.1", 87 + "@zag-js/collection@1.27.1", 88 + "@zag-js/color-picker@1.27.1", 89 + "@zag-js/color-utils@1.27.1", 90 + "@zag-js/combobox@1.27.1", 91 + "@zag-js/core@1.27.1", 92 + "@zag-js/date-picker@1.27.1_@internationalized+date@3.10.0", 93 + "@zag-js/date-utils@1.27.1_@internationalized+date@3.10.0", 94 + "@zag-js/dialog@1.27.1", 95 + "@zag-js/dom-query@1.27.1", 96 + "@zag-js/editable@1.27.1", 97 + "@zag-js/file-upload@1.27.1", 98 + "@zag-js/file-utils@1.27.1", 99 + "@zag-js/floating-panel", 100 + "@zag-js/focus-trap", 101 + "@zag-js/highlight-word", 102 + "@zag-js/hover-card@1.27.1", 103 + "@zag-js/i18n-utils@1.27.1", 104 + "@zag-js/image-cropper", 105 + "@zag-js/json-tree-utils", 106 + "@zag-js/listbox", 107 + "@zag-js/marquee", 108 + "@zag-js/menu@1.27.1", 109 + "@zag-js/number-input@1.27.1", 110 + "@zag-js/pagination@1.27.1", 111 + "@zag-js/password-input", 112 + "@zag-js/pin-input@1.27.1", 113 + "@zag-js/popover@1.27.1", 114 + "@zag-js/presence@1.27.1", 115 + "@zag-js/progress@1.27.1", 116 + "@zag-js/qr-code@1.27.1", 117 + "@zag-js/radio-group@1.27.1", 118 + "@zag-js/rating-group@1.27.1", 119 + "@zag-js/scroll-area", 120 + "@zag-js/select@1.27.1", 121 + "@zag-js/signature-pad@1.27.1", 122 + "@zag-js/slider@1.27.1", 123 + "@zag-js/solid", 124 + "@zag-js/splitter@1.27.1", 125 + "@zag-js/steps", 126 + "@zag-js/switch@1.27.1", 127 + "@zag-js/tabs@1.27.1", 128 + "@zag-js/tags-input@1.27.1", 129 + "@zag-js/timer", 130 + "@zag-js/toast@1.27.1", 131 + "@zag-js/toggle", 132 + "@zag-js/toggle-group@1.27.1", 133 + "@zag-js/tooltip@1.27.1", 134 + "@zag-js/tour", 135 + "@zag-js/tree-view@1.27.1", 136 + "@zag-js/types@1.27.1", 137 + "@zag-js/utils@1.27.1", 138 + "solid-js" 139 + ] 140 + }, 141 + "@atcute/atproto@3.1.9": { 142 + "integrity": "sha512-DyWwHCTdR4hY2BPNbLXgVmm7lI+fceOwWbE4LXbGvbvVtSn+ejSVFaAv01Ra3kWDha0whsOmbJL8JP0QPpf1+w==", 143 + "dependencies": [ 144 + "@atcute/lexicons" 145 + ] 146 + }, 147 + "@atcute/bluesky@3.2.10": { 148 + "integrity": "sha512-qwQWTzRf3umnh2u41gdU+xWYkbzGlKDupc3zeOB+YjmuP1N9wEaUhwS8H7vgrqr0xC9SGNDjeUVcjC4m5BPLBg==", 149 + "dependencies": [ 150 + "@atcute/atproto", 151 + "@atcute/lexicons" 152 + ] 153 + }, 154 + "@atcute/client@4.0.5": { 155 + "integrity": "sha512-R8Qen8goGmEkynYGg2m6XFlVmz0GTDvQ+9w+4QqOob+XMk8/WDpF4aImev7WKEde/rV2gjcqW7zM8E6W9NShDA==", 156 + "dependencies": [ 157 + "@atcute/identity", 158 + "@atcute/lexicons" 159 + ] 160 + }, 161 + "@atcute/identity-resolver@1.1.4_@atcute+identity@1.1.2": { 162 + "integrity": "sha512-/SVh8vf2cXFJenmBnGeYF2aY3WGQm3cJeew5NWTlkqoy3LvJ5wkvKq9PWu4Tv653VF40rPOp6LOdVr9Fa+q5rA==", 163 + "dependencies": [ 164 + "@atcute/identity", 165 + "@atcute/lexicons", 166 + "@atcute/util-fetch", 167 + "@badrap/valita" 168 + ] 169 + }, 170 + "@atcute/identity@1.1.2": { 171 + "integrity": "sha512-vn0RN7SUF6N0sEPG9yyT6a0MzpfVS8BhsiLtB8OeS4qp2rLMQW33pelCpNitP1N+fq03MFlDGzs5p7K4qMs4cA==", 172 + "dependencies": [ 173 + "@atcute/lexicons", 174 + "@badrap/valita" 175 + ] 176 + }, 177 + "@atcute/lexicons@1.2.3": { 178 + "integrity": "sha512-ZNfNWS4jaR8VgWSSBaWRSSmwFeP134BmvpTt9JmM2x5vRoXeIFthxU9USY8ZV4vm0GPoxEMgkDin8HIlnFTg2w==", 179 + "dependencies": [ 180 + "@standard-schema/spec", 181 + "esm-env" 182 + ] 183 + }, 184 + "@atcute/microcosm@1.0.0": { 185 + "integrity": "sha512-XJW+TMvdktH2maTkVcNU6wKmnHpmNwhmg0Xj4ZY36plHpqNHfxR4kAAcXGSJcjH9CS8I1+cTHiyUQykdeOPeGg==", 186 + "dependencies": [ 187 + "@atcute/lexicons" 188 + ] 189 + }, 190 + "@atcute/multibase@1.1.6": { 191 + "integrity": "sha512-HBxuCgYLKPPxETV0Rot4VP9e24vKl8JdzGCZOVsDaOXJgbRZoRIF67Lp0H/OgnJeH/Xpva8Z5ReoTNJE5dn3kg==", 192 + "dependencies": [ 193 + "@atcute/uint8array" 194 + ] 195 + }, 196 + "@atcute/oauth-browser-client@2.0.1_@atcute+identity@1.1.2": { 197 + "integrity": "sha512-lG021GkeORG06zfFf4bH85egObjBEKHNgAWHvbtY/E2dX4wxo88hf370pJDx8acdnuUJLJ2VKPikJtZwo4Heeg==", 198 + "dependencies": [ 199 + "@atcute/client", 200 + "@atcute/identity", 201 + "@atcute/identity-resolver", 202 + "@atcute/lexicons", 203 + "@atcute/multibase", 204 + "@atcute/uint8array", 205 + "nanoid@5.1.6" 206 + ] 207 + }, 208 + "@atcute/uint8array@1.0.5": { 209 + "integrity": "sha512-XLWWxoR2HNl2qU+FCr0rp1APwJXci7HnzbOQLxK55OaMNBXZ19+xNC5ii4QCsThsDxa4JS/JTzuiQLziITWf2Q==" 210 + }, 211 + "@atcute/util-fetch@1.0.3": { 212 + "integrity": "sha512-f8zzTb/xlKIwv2OQ31DhShPUNCmIIleX6p7qIXwWwEUjX6x8skUtpdISSjnImq01LXpltGV5y8yhV4/Mlb7CRQ==", 213 + "dependencies": [ 214 + "@badrap/valita" 215 + ] 216 + }, 217 + "@babel/code-frame@7.27.1": { 218 + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", 219 + "dependencies": [ 220 + "@babel/helper-validator-identifier", 221 + "js-tokens", 222 + "picocolors" 223 + ] 224 + }, 225 + "@babel/compat-data@7.28.5": { 226 + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==" 227 + }, 228 + "@babel/core@7.28.5": { 229 + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", 230 + "dependencies": [ 231 + "@babel/code-frame", 232 + "@babel/generator", 233 + "@babel/helper-compilation-targets", 234 + "@babel/helper-module-transforms", 235 + "@babel/helpers", 236 + "@babel/parser", 237 + "@babel/template", 238 + "@babel/traverse", 239 + "@babel/types", 240 + "@jridgewell/remapping", 241 + "convert-source-map", 242 + "debug", 243 + "gensync", 244 + "json5", 245 + "semver" 246 + ] 247 + }, 248 + "@babel/generator@7.28.5": { 249 + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", 250 + "dependencies": [ 251 + "@babel/parser", 252 + "@babel/types", 253 + "@jridgewell/gen-mapping", 254 + "@jridgewell/trace-mapping", 255 + "jsesc" 256 + ] 257 + }, 258 + "@babel/helper-compilation-targets@7.27.2": { 259 + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", 260 + "dependencies": [ 261 + "@babel/compat-data", 262 + "@babel/helper-validator-option", 263 + "browserslist@4.28.0", 264 + "lru-cache", 265 + "semver" 266 + ] 267 + }, 268 + "@babel/helper-globals@7.28.0": { 269 + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==" 270 + }, 271 + "@babel/helper-module-imports@7.18.6": { 272 + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", 273 + "dependencies": [ 274 + "@babel/types" 275 + ] 276 + }, 277 + "@babel/helper-module-imports@7.27.1": { 278 + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", 279 + "dependencies": [ 280 + "@babel/traverse", 281 + "@babel/types" 282 + ] 283 + }, 284 + "@babel/helper-module-transforms@7.28.3_@babel+core@7.28.5": { 285 + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", 286 + "dependencies": [ 287 + "@babel/core", 288 + "@babel/helper-module-imports@7.27.1", 289 + "@babel/helper-validator-identifier", 290 + "@babel/traverse" 291 + ] 292 + }, 293 + "@babel/helper-plugin-utils@7.27.1": { 294 + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==" 295 + }, 296 + "@babel/helper-string-parser@7.27.1": { 297 + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==" 298 + }, 299 + "@babel/helper-validator-identifier@7.28.5": { 300 + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==" 301 + }, 302 + "@babel/helper-validator-option@7.27.1": { 303 + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==" 304 + }, 305 + "@babel/helpers@7.28.4": { 306 + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", 307 + "dependencies": [ 308 + "@babel/template", 309 + "@babel/types" 310 + ] 311 + }, 312 + "@babel/parser@7.28.5": { 313 + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", 314 + "dependencies": [ 315 + "@babel/types" 316 + ], 317 + "bin": true 318 + }, 319 + "@babel/plugin-syntax-jsx@7.27.1_@babel+core@7.28.5": { 320 + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", 321 + "dependencies": [ 322 + "@babel/core", 323 + "@babel/helper-plugin-utils" 324 + ] 325 + }, 326 + "@babel/plugin-syntax-typescript@7.27.1_@babel+core@7.28.5": { 327 + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", 328 + "dependencies": [ 329 + "@babel/core", 330 + "@babel/helper-plugin-utils" 331 + ] 332 + }, 333 + "@babel/template@7.27.2": { 334 + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", 335 + "dependencies": [ 336 + "@babel/code-frame", 337 + "@babel/parser", 338 + "@babel/types" 339 + ] 340 + }, 341 + "@babel/traverse@7.28.5": { 342 + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", 343 + "dependencies": [ 344 + "@babel/code-frame", 345 + "@babel/generator", 346 + "@babel/helper-globals", 347 + "@babel/parser", 348 + "@babel/template", 349 + "@babel/types", 350 + "debug" 351 + ] 352 + }, 353 + "@babel/types@7.28.5": { 354 + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", 355 + "dependencies": [ 356 + "@babel/helper-string-parser", 357 + "@babel/helper-validator-identifier" 358 + ] 359 + }, 360 + "@badrap/valita@0.4.6": { 361 + "integrity": "sha512-4kdqcjyxo/8RQ8ayjms47HCWZIF5981oE5nIenbfThKDxWXtEHKipAOWlflpPJzZx9y/JWYQkp18Awr7VuepFg==" 362 + }, 363 + "@clack/core@0.5.0": { 364 + "integrity": "sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==", 365 + "dependencies": [ 366 + "picocolors", 367 + "sisteransi" 368 + ] 369 + }, 370 + "@clack/prompts@0.11.0": { 371 + "integrity": "sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==", 372 + "dependencies": [ 373 + "@clack/core", 374 + "picocolors", 375 + "sisteransi" 376 + ] 377 + }, 378 + "@csstools/postcss-cascade-layers@5.0.2_postcss@8.5.6_postcss-selector-parser@7.1.0": { 379 + "integrity": "sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg==", 380 + "dependencies": [ 381 + "@csstools/selector-specificity", 382 + "postcss", 383 + "postcss-selector-parser" 384 + ] 385 + }, 386 + "@csstools/selector-specificity@5.0.0_postcss-selector-parser@7.1.0": { 387 + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", 388 + "dependencies": [ 389 + "postcss-selector-parser" 390 + ] 391 + }, 392 + "@esbuild/aix-ppc64@0.25.12": { 393 + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", 394 + "os": ["aix"], 395 + "cpu": ["ppc64"] 396 + }, 397 + "@esbuild/android-arm64@0.25.12": { 398 + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", 399 + "os": ["android"], 400 + "cpu": ["arm64"] 401 + }, 402 + "@esbuild/android-arm@0.25.12": { 403 + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", 404 + "os": ["android"], 405 + "cpu": ["arm"] 406 + }, 407 + "@esbuild/android-x64@0.25.12": { 408 + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", 409 + "os": ["android"], 410 + "cpu": ["x64"] 411 + }, 412 + "@esbuild/darwin-arm64@0.25.12": { 413 + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", 414 + "os": ["darwin"], 415 + "cpu": ["arm64"] 416 + }, 417 + "@esbuild/darwin-x64@0.25.12": { 418 + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", 419 + "os": ["darwin"], 420 + "cpu": ["x64"] 421 + }, 422 + "@esbuild/freebsd-arm64@0.25.12": { 423 + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", 424 + "os": ["freebsd"], 425 + "cpu": ["arm64"] 426 + }, 427 + "@esbuild/freebsd-x64@0.25.12": { 428 + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", 429 + "os": ["freebsd"], 430 + "cpu": ["x64"] 431 + }, 432 + "@esbuild/linux-arm64@0.25.12": { 433 + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", 434 + "os": ["linux"], 435 + "cpu": ["arm64"] 436 + }, 437 + "@esbuild/linux-arm@0.25.12": { 438 + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", 439 + "os": ["linux"], 440 + "cpu": ["arm"] 441 + }, 442 + "@esbuild/linux-ia32@0.25.12": { 443 + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", 444 + "os": ["linux"], 445 + "cpu": ["ia32"] 446 + }, 447 + "@esbuild/linux-loong64@0.25.12": { 448 + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", 449 + "os": ["linux"], 450 + "cpu": ["loong64"] 451 + }, 452 + "@esbuild/linux-mips64el@0.25.12": { 453 + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", 454 + "os": ["linux"], 455 + "cpu": ["mips64el"] 456 + }, 457 + "@esbuild/linux-ppc64@0.25.12": { 458 + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", 459 + "os": ["linux"], 460 + "cpu": ["ppc64"] 461 + }, 462 + "@esbuild/linux-riscv64@0.25.12": { 463 + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", 464 + "os": ["linux"], 465 + "cpu": ["riscv64"] 466 + }, 467 + "@esbuild/linux-s390x@0.25.12": { 468 + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", 469 + "os": ["linux"], 470 + "cpu": ["s390x"] 471 + }, 472 + "@esbuild/linux-x64@0.25.12": { 473 + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", 474 + "os": ["linux"], 475 + "cpu": ["x64"] 476 + }, 477 + "@esbuild/netbsd-arm64@0.25.12": { 478 + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", 479 + "os": ["netbsd"], 480 + "cpu": ["arm64"] 481 + }, 482 + "@esbuild/netbsd-x64@0.25.12": { 483 + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", 484 + "os": ["netbsd"], 485 + "cpu": ["x64"] 486 + }, 487 + "@esbuild/openbsd-arm64@0.25.12": { 488 + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", 489 + "os": ["openbsd"], 490 + "cpu": ["arm64"] 491 + }, 492 + "@esbuild/openbsd-x64@0.25.12": { 493 + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", 494 + "os": ["openbsd"], 495 + "cpu": ["x64"] 496 + }, 497 + "@esbuild/openharmony-arm64@0.25.12": { 498 + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", 499 + "os": ["openharmony"], 500 + "cpu": ["arm64"] 501 + }, 502 + "@esbuild/sunos-x64@0.25.12": { 503 + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", 504 + "os": ["sunos"], 505 + "cpu": ["x64"] 506 + }, 507 + "@esbuild/win32-arm64@0.25.12": { 508 + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", 509 + "os": ["win32"], 510 + "cpu": ["arm64"] 511 + }, 512 + "@esbuild/win32-ia32@0.25.12": { 513 + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", 514 + "os": ["win32"], 515 + "cpu": ["ia32"] 516 + }, 517 + "@esbuild/win32-x64@0.25.12": { 518 + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", 519 + "os": ["win32"], 520 + "cpu": ["x64"] 521 + }, 522 + "@floating-ui/core@1.7.3": { 523 + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", 524 + "dependencies": [ 525 + "@floating-ui/utils" 526 + ] 527 + }, 528 + "@floating-ui/dom@1.6.8": { 529 + "integrity": "sha512-kx62rP19VZ767Q653wsP1XZCGIirkE09E0QUGNYTM/ttbbQHqcGPdSfWFxUyyNLc/W6aoJRBajOSXhP6GXjC0Q==", 530 + "dependencies": [ 531 + "@floating-ui/core", 532 + "@floating-ui/utils" 533 + ] 534 + }, 535 + "@floating-ui/dom@1.7.4": { 536 + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", 537 + "dependencies": [ 538 + "@floating-ui/core", 539 + "@floating-ui/utils" 540 + ] 541 + }, 542 + "@floating-ui/utils@0.2.10": { 543 + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==" 544 + }, 545 + "@internationalized/date@3.10.0": { 546 + "integrity": "sha512-oxDR/NTEJ1k+UFVQElaNIk65E/Z83HK1z1WI3lQyhTtnNg4R5oVXaPzK3jcpKG8UHKDVuDQHzn+wsxSz8RP3aw==", 547 + "dependencies": [ 548 + "@swc/helpers" 549 + ] 550 + }, 551 + "@internationalized/date@3.5.5": { 552 + "integrity": "sha512-H+CfYvOZ0LTJeeLOqm19E3uj/4YjrmOFtBufDHPfvtI80hFAMqtrp7oCACpe4Cil5l8S0Qu/9dYfZc/5lY8WQQ==", 553 + "dependencies": [ 554 + "@swc/helpers" 555 + ] 556 + }, 557 + "@internationalized/number@3.5.3": { 558 + "integrity": "sha512-rd1wA3ebzlp0Mehj5YTuTI50AQEx80gWFyHcQu+u91/5NgdwBecO8BH6ipPfE+lmQ9d63vpB3H9SHoIUiupllw==", 559 + "dependencies": [ 560 + "@swc/helpers" 561 + ] 562 + }, 563 + "@internationalized/number@3.6.5": { 564 + "integrity": "sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g==", 565 + "dependencies": [ 566 + "@swc/helpers" 567 + ] 568 + }, 569 + "@isaacs/balanced-match@4.0.1": { 570 + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==" 571 + }, 572 + "@isaacs/brace-expansion@5.0.0": { 573 + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", 574 + "dependencies": [ 575 + "@isaacs/balanced-match" 576 + ] 577 + }, 578 + "@jridgewell/gen-mapping@0.3.13": { 579 + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", 580 + "dependencies": [ 581 + "@jridgewell/sourcemap-codec", 582 + "@jridgewell/trace-mapping" 583 + ] 584 + }, 585 + "@jridgewell/remapping@2.3.5": { 586 + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", 587 + "dependencies": [ 588 + "@jridgewell/gen-mapping", 589 + "@jridgewell/trace-mapping" 590 + ] 591 + }, 592 + "@jridgewell/resolve-uri@3.1.2": { 593 + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" 594 + }, 595 + "@jridgewell/sourcemap-codec@1.5.5": { 596 + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" 597 + }, 598 + "@jridgewell/trace-mapping@0.3.31": { 599 + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", 600 + "dependencies": [ 601 + "@jridgewell/resolve-uri", 602 + "@jridgewell/sourcemap-codec" 603 + ] 604 + }, 605 + "@nodelib/fs.scandir@2.1.5": { 606 + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 607 + "dependencies": [ 608 + "@nodelib/fs.stat", 609 + "run-parallel" 610 + ] 611 + }, 612 + "@nodelib/fs.stat@2.0.5": { 613 + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" 614 + }, 615 + "@nodelib/fs.walk@1.2.8": { 616 + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 617 + "dependencies": [ 618 + "@nodelib/fs.scandir", 619 + "fastq" 620 + ] 621 + }, 622 + "@nothing-but/utils@0.17.0": { 623 + "integrity": "sha512-TuCHcHLOqDL0SnaAxACfuRHBNRgNJcNn9X0GiH5H3YSDBVquCr3qEIG3FOQAuMyZCbu9w8nk2CHhOsn7IvhIwQ==" 624 + }, 625 + "@pandacss/config@1.5.1": { 626 + "integrity": "sha512-aO+YVRlccLXuFC30DEO9ZDkvXwjbCXk1blIpii8PuclTAR0+YPq8xXVRTVK3fR3MiA0zROca8nAf5Kb+wHVKPw==", 627 + "dependencies": [ 628 + "@pandacss/logger", 629 + "@pandacss/preset-base", 630 + "@pandacss/preset-panda", 631 + "@pandacss/shared", 632 + "@pandacss/types", 633 + "bundle-n-require", 634 + "escalade@3.1.2", 635 + "merge-anything", 636 + "microdiff", 637 + "typescript" 638 + ] 639 + }, 640 + "@pandacss/core@1.5.1_postcss@8.5.6": { 641 + "integrity": "sha512-okuvSm5o0gmQmkpLONH4ReqgBVOMMsfb9MyK8vpcZUpzvMBiraVcgsbLxKQyHlmVDZNbKLLokIycb8KEpqtIDQ==", 642 + "dependencies": [ 643 + "@csstools/postcss-cascade-layers", 644 + "@pandacss/is-valid-prop", 645 + "@pandacss/logger", 646 + "@pandacss/shared", 647 + "@pandacss/token-dictionary", 648 + "@pandacss/types", 649 + "browserslist@4.24.4", 650 + "hookable", 651 + "lightningcss", 652 + "lodash.merge", 653 + "outdent", 654 + "postcss", 655 + "postcss-discard-duplicates", 656 + "postcss-discard-empty", 657 + "postcss-merge-rules", 658 + "postcss-minify-selectors", 659 + "postcss-nested", 660 + "postcss-normalize-whitespace", 661 + "postcss-selector-parser", 662 + "ts-pattern" 663 + ] 664 + }, 665 + "@pandacss/dev@1.5.1_typescript@5.9.3": { 666 + "integrity": "sha512-U1NWO3ZgOLlABtDk6MMQwTNYOCiUtUg+HEoHPdEExLzNn+20mrLf1IZWJyn4zXKSpANGSi79EV7X4yxPa+W+MA==", 667 + "dependencies": [ 668 + "@clack/prompts", 669 + "@pandacss/config", 670 + "@pandacss/logger", 671 + "@pandacss/node", 672 + "@pandacss/postcss", 673 + "@pandacss/preset-base", 674 + "@pandacss/preset-panda", 675 + "@pandacss/shared", 676 + "@pandacss/token-dictionary", 677 + "@pandacss/types", 678 + "cac" 679 + ], 680 + "bin": true 681 + }, 682 + "@pandacss/extractor@1.5.1_typescript@5.9.3": { 683 + "integrity": "sha512-/DG4MnVo5LA0SpJq4rI0RgOp8kPjZMP5a1+q4MwLDHPtfWTwPaiKv7LULBW1L11V+fMOYn+d44dBKgU4dj6oSg==", 684 + "dependencies": [ 685 + "@pandacss/shared", 686 + "ts-evaluator", 687 + "ts-morph" 688 + ] 689 + }, 690 + "@pandacss/generator@1.5.1": { 691 + "integrity": "sha512-kijxpjpvRQBz16BiBcghknthsdmVxSJD5C71jlcM4aVeqoZSCWDNcmlL/2SSCMy7oC6HANu2oRXS/L1YgYzHGA==", 692 + "dependencies": [ 693 + "@pandacss/core", 694 + "@pandacss/is-valid-prop", 695 + "@pandacss/logger", 696 + "@pandacss/shared", 697 + "@pandacss/token-dictionary", 698 + "@pandacss/types", 699 + "javascript-stringify", 700 + "outdent", 701 + "pluralize", 702 + "postcss", 703 + "ts-pattern" 704 + ] 705 + }, 706 + "@pandacss/is-valid-prop@1.5.1": { 707 + "integrity": "sha512-AlOt+MqqwDlIdVEdW6wEtvDmX8MmPv004oD+7tdGN54HKpD9jqrwPwwS9p7YQ7nai631JlyladshFHqe1xl7+w==" 708 + }, 709 + "@pandacss/logger@1.5.1": { 710 + "integrity": "sha512-jC835vvSGIOxCZcqXH1alXdzO/ThUCE3HXGjt17mGli/QiVT3b/v83n/Cfz0wiHP3zSUlwVYaPAlXryepsQNWA==", 711 + "dependencies": [ 712 + "@pandacss/types", 713 + "kleur" 714 + ] 715 + }, 716 + "@pandacss/node@1.5.1_typescript@5.9.3": { 717 + "integrity": "sha512-qgiydokbjWcSqzsuCP1LR91IOLs7JgsMJkgAbEim/PdVH3NbKNjCUx9mK8bt1JO3/GKNC+GfePpacxGLmt/p6w==", 718 + "dependencies": [ 719 + "@pandacss/config", 720 + "@pandacss/core", 721 + "@pandacss/generator", 722 + "@pandacss/logger", 723 + "@pandacss/parser", 724 + "@pandacss/reporter", 725 + "@pandacss/shared", 726 + "@pandacss/token-dictionary", 727 + "@pandacss/types", 728 + "browserslist@4.24.4", 729 + "chokidar", 730 + "fast-glob", 731 + "fs-extra", 732 + "glob-parent@6.0.2", 733 + "is-glob", 734 + "lodash.merge", 735 + "look-it-up", 736 + "outdent", 737 + "package-manager-detector", 738 + "perfect-debounce", 739 + "picomatch@4.0.3", 740 + "pkg-types", 741 + "pluralize", 742 + "postcss", 743 + "prettier", 744 + "ts-morph", 745 + "ts-pattern", 746 + "tsconfck" 747 + ] 748 + }, 749 + "@pandacss/parser@1.5.1_typescript@5.9.3": { 750 + "integrity": "sha512-CuG5qdsQkw2xjxzN9pkfl9JaPgK28FJnRj9jmLb98Vo3J+NkUD2NyzL4k69lKZv9nbcmwn7+HbvMP/DKfx8OvQ==", 751 + "dependencies": [ 752 + "@pandacss/config", 753 + "@pandacss/core", 754 + "@pandacss/extractor", 755 + "@pandacss/logger", 756 + "@pandacss/shared", 757 + "@pandacss/types", 758 + "@vue/compiler-sfc", 759 + "magic-string", 760 + "ts-morph", 761 + "ts-pattern" 762 + ] 763 + }, 764 + "@pandacss/postcss@1.5.1_typescript@5.9.3": { 765 + "integrity": "sha512-fZZOf0n6WKm3JQnGXC4Y8RGzw9jDdYpFGaSpVLpE4VotbfBq/jZtACw/pLa4ryferJhRp+WraBvYtKg6w2bQ9w==", 766 + "dependencies": [ 767 + "@pandacss/node", 768 + "postcss" 769 + ] 770 + }, 771 + "@pandacss/preset-base@1.5.1": { 772 + "integrity": "sha512-I8USdmUqPPkluznTFilbzLgXzU/+NEzeCvkwuwfi0QZlmGXOXnatM/7IUK7yatNikPx3neqmNh4o4WwWE04dGQ==", 773 + "dependencies": [ 774 + "@pandacss/types" 775 + ] 776 + }, 777 + "@pandacss/preset-panda@1.5.1": { 778 + "integrity": "sha512-ZA/MhFK3O/fYIS4p2HDpyPMgCISAi+g5LoPzX/jQbQ5WGfkBS8sTmxIM/XapGNVHAzXFzYOTwqQ87KP3Siiozw==", 779 + "dependencies": [ 780 + "@pandacss/types" 781 + ] 782 + }, 783 + "@pandacss/reporter@1.5.1": { 784 + "integrity": "sha512-fCgX/VN9ZDZpvfYJU+bdQpwoR48cMmhtTvPYJIek6KoANKXXJFbpgC5t2N6EtTkktg+3+unks3XpU3FvQdGHTQ==", 785 + "dependencies": [ 786 + "@pandacss/core", 787 + "@pandacss/generator", 788 + "@pandacss/logger", 789 + "@pandacss/shared", 790 + "@pandacss/types", 791 + "table", 792 + "wordwrapjs" 793 + ] 794 + }, 795 + "@pandacss/shared@1.5.1": { 796 + "integrity": "sha512-pTHbfT6N7vt6/BncGoMduCo4jnYOvyHC8XdSgV3mzStdGJqw+0R30jeULixYrv7HFGDXCNxzohQ2k8YGOk6UoQ==" 797 + }, 798 + "@pandacss/token-dictionary@1.5.1": { 799 + "integrity": "sha512-w/dSvEaskD7zYHYWbPdYG+zrFLVsYYYJl9hT2cE2spccgJCid40Ov/4/zuP67rC9rPfs7qETMy6ydTPGbCfZ5A==", 800 + "dependencies": [ 801 + "@pandacss/logger", 802 + "@pandacss/shared", 803 + "@pandacss/types", 804 + "picomatch@4.0.3", 805 + "ts-pattern" 806 + ] 807 + }, 808 + "@pandacss/types@1.5.1": { 809 + "integrity": "sha512-fUDPtP3+yW8q5gPC2UfDcrdd/QW3H24kNt5vD30f5dt0CGDGkSoRUP4iJVNViEfQS2MzfDCnYI+PFOCw3eeQFw==" 810 + }, 811 + "@park-ui/panda-preset@0.43.1_@pandacss+dev@1.5.1__typescript@5.9.3_typescript@5.9.3": { 812 + "integrity": "sha512-kcO1ewx8zU9wHuTjZ/nqPCqjzL9AXkpzDnDrpcZ2unKR/UE3hHpP+Y1F0grTBaluPHLomjfZz3GebczJvoShBQ==", 813 + "dependencies": [ 814 + "@ark-ui/anatomy", 815 + "@pandacss/dev", 816 + "effect" 817 + ], 818 + "scripts": true 819 + }, 820 + "@rollup/rollup-android-arm-eabi@4.52.5": { 821 + "integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==", 822 + "os": ["android"], 823 + "cpu": ["arm"] 824 + }, 825 + "@rollup/rollup-android-arm64@4.52.5": { 826 + "integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==", 827 + "os": ["android"], 828 + "cpu": ["arm64"] 829 + }, 830 + "@rollup/rollup-darwin-arm64@4.52.5": { 831 + "integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==", 832 + "os": ["darwin"], 833 + "cpu": ["arm64"] 834 + }, 835 + "@rollup/rollup-darwin-x64@4.52.5": { 836 + "integrity": "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==", 837 + "os": ["darwin"], 838 + "cpu": ["x64"] 839 + }, 840 + "@rollup/rollup-freebsd-arm64@4.52.5": { 841 + "integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==", 842 + "os": ["freebsd"], 843 + "cpu": ["arm64"] 844 + }, 845 + "@rollup/rollup-freebsd-x64@4.52.5": { 846 + "integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==", 847 + "os": ["freebsd"], 848 + "cpu": ["x64"] 849 + }, 850 + "@rollup/rollup-linux-arm-gnueabihf@4.52.5": { 851 + "integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==", 852 + "os": ["linux"], 853 + "cpu": ["arm"] 854 + }, 855 + "@rollup/rollup-linux-arm-musleabihf@4.52.5": { 856 + "integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==", 857 + "os": ["linux"], 858 + "cpu": ["arm"] 859 + }, 860 + "@rollup/rollup-linux-arm64-gnu@4.52.5": { 861 + "integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==", 862 + "os": ["linux"], 863 + "cpu": ["arm64"] 864 + }, 865 + "@rollup/rollup-linux-arm64-musl@4.52.5": { 866 + "integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==", 867 + "os": ["linux"], 868 + "cpu": ["arm64"] 869 + }, 870 + "@rollup/rollup-linux-loong64-gnu@4.52.5": { 871 + "integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==", 872 + "os": ["linux"], 873 + "cpu": ["loong64"] 874 + }, 875 + "@rollup/rollup-linux-ppc64-gnu@4.52.5": { 876 + "integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==", 877 + "os": ["linux"], 878 + "cpu": ["ppc64"] 879 + }, 880 + "@rollup/rollup-linux-riscv64-gnu@4.52.5": { 881 + "integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==", 882 + "os": ["linux"], 883 + "cpu": ["riscv64"] 884 + }, 885 + "@rollup/rollup-linux-riscv64-musl@4.52.5": { 886 + "integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==", 887 + "os": ["linux"], 888 + "cpu": ["riscv64"] 889 + }, 890 + "@rollup/rollup-linux-s390x-gnu@4.52.5": { 891 + "integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==", 892 + "os": ["linux"], 893 + "cpu": ["s390x"] 894 + }, 895 + "@rollup/rollup-linux-x64-gnu@4.52.5": { 896 + "integrity": "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==", 897 + "os": ["linux"], 898 + "cpu": ["x64"] 899 + }, 900 + "@rollup/rollup-linux-x64-musl@4.52.5": { 901 + "integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==", 902 + "os": ["linux"], 903 + "cpu": ["x64"] 904 + }, 905 + "@rollup/rollup-openharmony-arm64@4.52.5": { 906 + "integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==", 907 + "os": ["openharmony"], 908 + "cpu": ["arm64"] 909 + }, 910 + "@rollup/rollup-win32-arm64-msvc@4.52.5": { 911 + "integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==", 912 + "os": ["win32"], 913 + "cpu": ["arm64"] 914 + }, 915 + "@rollup/rollup-win32-ia32-msvc@4.52.5": { 916 + "integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==", 917 + "os": ["win32"], 918 + "cpu": ["ia32"] 919 + }, 920 + "@rollup/rollup-win32-x64-gnu@4.52.5": { 921 + "integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==", 922 + "os": ["win32"], 923 + "cpu": ["x64"] 924 + }, 925 + "@rollup/rollup-win32-x64-msvc@4.52.5": { 926 + "integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==", 927 + "os": ["win32"], 928 + "cpu": ["x64"] 929 + }, 930 + "@solid-devtools/debugger@0.28.1_solid-js@1.9.10__seroval@1.3.2": { 931 + "integrity": "sha512-6qIUI6VYkXoRnL8oF5bvh2KgH71qlJ18hNw/mwSyY6v48eb80ZR48/5PDXufUa3q+MBSuYa1uqTMwLewpay9eg==", 932 + "dependencies": [ 933 + "@nothing-but/utils", 934 + "@solid-devtools/shared", 935 + "@solid-primitives/bounds", 936 + "@solid-primitives/event-listener", 937 + "@solid-primitives/keyboard", 938 + "@solid-primitives/rootless", 939 + "@solid-primitives/scheduled", 940 + "@solid-primitives/static-store", 941 + "@solid-primitives/utils", 942 + "solid-js" 943 + ] 944 + }, 945 + "@solid-devtools/shared@0.20.0_solid-js@1.9.10__seroval@1.3.2": { 946 + "integrity": "sha512-o5TACmUOQsxpzpOKCjbQqGk8wL8PMi+frXG9WNu4Lh3PQVUB6hs95Kl/S8xc++zwcMguUKZJn8h5URUiMOca6Q==", 947 + "dependencies": [ 948 + "@nothing-but/utils", 949 + "@solid-primitives/event-listener", 950 + "@solid-primitives/media", 951 + "@solid-primitives/refs", 952 + "@solid-primitives/rootless", 953 + "@solid-primitives/scheduled", 954 + "@solid-primitives/static-store", 955 + "@solid-primitives/styles", 956 + "@solid-primitives/utils", 957 + "solid-js" 958 + ] 959 + }, 960 + "@solid-primitives/bounds@0.1.3_solid-js@1.9.10__seroval@1.3.2": { 961 + "integrity": "sha512-UbiyKMdSPmtijcEDnYLQL3zzaejpwWDAJJ4Gt5P0hgVs6A72piov0GyNw7V2SroH7NZFwxlYS22YmOr8A5xc1Q==", 962 + "dependencies": [ 963 + "@solid-primitives/event-listener", 964 + "@solid-primitives/resize-observer", 965 + "@solid-primitives/static-store", 966 + "@solid-primitives/utils", 967 + "solid-js" 968 + ] 969 + }, 970 + "@solid-primitives/event-listener@2.4.3_solid-js@1.9.10__seroval@1.3.2": { 971 + "integrity": "sha512-h4VqkYFv6Gf+L7SQj+Y6puigL/5DIi7x5q07VZET7AWcS+9/G3WfIE9WheniHWJs51OEkRB43w6lDys5YeFceg==", 972 + "dependencies": [ 973 + "@solid-primitives/utils", 974 + "solid-js" 975 + ] 976 + }, 977 + "@solid-primitives/keyboard@1.3.3_solid-js@1.9.10__seroval@1.3.2": { 978 + "integrity": "sha512-9dQHTTgLBqyAI7aavtO+HnpTVJgWQA1ghBSrmLtMu1SMxLPDuLfuNr+Tk5udb4AL4Ojg7h9JrKOGEEDqsJXWJA==", 979 + "dependencies": [ 980 + "@solid-primitives/event-listener", 981 + "@solid-primitives/rootless", 982 + "@solid-primitives/utils", 983 + "solid-js" 984 + ] 985 + }, 986 + "@solid-primitives/keyed@1.5.2_solid-js@1.9.10__seroval@1.3.2": { 987 + "integrity": "sha512-BgoEdqPw48URnI+L5sZIHdF4ua4Las1eWEBBPaoSFs42kkhnHue+rwCBPL2Z9ebOyQ75sUhUfOETdJfmv0D6Kg==", 988 + "dependencies": [ 989 + "solid-js" 990 + ] 991 + }, 992 + "@solid-primitives/map@0.7.2_solid-js@1.9.10__seroval@1.3.2": { 993 + "integrity": "sha512-sXK/rS68B4oq3XXNyLrzVhLtT1pnimmMUahd2FqhtYUuyQsCfnW058ptO1s+lWc2k8F/3zQSNVkZ2ifJjlcNbQ==", 994 + "dependencies": [ 995 + "@solid-primitives/trigger", 996 + "solid-js" 997 + ] 998 + }, 999 + "@solid-primitives/media@2.3.3_solid-js@1.9.10__seroval@1.3.2": { 1000 + "integrity": "sha512-hQ4hLOGvfbugQi5Eu1BFWAIJGIAzztq9x0h02xgBGl2l0Jaa3h7tg6bz5tV1NSuNYVGio4rPoa7zVQQLkkx9dA==", 1001 + "dependencies": [ 1002 + "@solid-primitives/event-listener", 1003 + "@solid-primitives/rootless", 1004 + "@solid-primitives/static-store", 1005 + "@solid-primitives/utils", 1006 + "solid-js" 1007 + ] 1008 + }, 1009 + "@solid-primitives/refs@1.1.2_solid-js@1.9.10__seroval@1.3.2": { 1010 + "integrity": "sha512-K7tf2thy7L+YJjdqXspXOg5xvNEOH8tgEWsp0+1mQk3obHBRD6hEjYZk7p7FlJphSZImS35je3UfmWuD7MhDfg==", 1011 + "dependencies": [ 1012 + "@solid-primitives/utils", 1013 + "solid-js" 1014 + ] 1015 + }, 1016 + "@solid-primitives/resize-observer@2.1.3_solid-js@1.9.10__seroval@1.3.2": { 1017 + "integrity": "sha512-zBLje5E06TgOg93S7rGPldmhDnouNGhvfZVKOp+oG2XU8snA+GoCSSCz1M+jpNAg5Ek2EakU5UVQqL152WmdXQ==", 1018 + "dependencies": [ 1019 + "@solid-primitives/event-listener", 1020 + "@solid-primitives/rootless", 1021 + "@solid-primitives/static-store", 1022 + "@solid-primitives/utils", 1023 + "solid-js" 1024 + ] 1025 + }, 1026 + "@solid-primitives/rootless@1.5.2_solid-js@1.9.10__seroval@1.3.2": { 1027 + "integrity": "sha512-9HULb0QAzL2r47CCad0M+NKFtQ+LrGGNHZfteX/ThdGvKIg2o2GYhBooZubTCd/RTu2l2+Nw4s+dEfiDGvdrrQ==", 1028 + "dependencies": [ 1029 + "@solid-primitives/utils", 1030 + "solid-js" 1031 + ] 1032 + }, 1033 + "@solid-primitives/scheduled@1.5.2_solid-js@1.9.10__seroval@1.3.2": { 1034 + "integrity": "sha512-/j2igE0xyNaHhj6kMfcUQn5rAVSTLbAX+CDEBm25hSNBmNiHLu2lM7Usj2kJJ5j36D67bE8wR1hBNA8hjtvsQA==", 1035 + "dependencies": [ 1036 + "solid-js" 1037 + ] 1038 + }, 1039 + "@solid-primitives/static-store@0.1.2_solid-js@1.9.10__seroval@1.3.2": { 1040 + "integrity": "sha512-ReK+5O38lJ7fT+L6mUFvUr6igFwHBESZF+2Ug842s7fvlVeBdIVEdTCErygff6w7uR6+jrr7J8jQo+cYrEq4Iw==", 1041 + "dependencies": [ 1042 + "@solid-primitives/utils", 1043 + "solid-js" 1044 + ] 1045 + }, 1046 + "@solid-primitives/styles@0.1.2_solid-js@1.9.10__seroval@1.3.2": { 1047 + "integrity": "sha512-7iX5K+J5b1PRrbgw3Ki92uvU2LgQ0Kd/QMsrAZxDg5dpUBwMyTijZkA3bbs1ikZsT1oQhS41bTyKbjrXeU0Awg==", 1048 + "dependencies": [ 1049 + "@solid-primitives/rootless", 1050 + "@solid-primitives/utils", 1051 + "solid-js" 1052 + ] 1053 + }, 1054 + "@solid-primitives/trigger@1.2.2_solid-js@1.9.10__seroval@1.3.2": { 1055 + "integrity": "sha512-IWoptVc0SWYgmpBPpCMehS5b07+tpFcvw15tOQ3QbXedSYn6KP8zCjPkHNzMxcOvOicTneleeZDP7lqmz+PQ6g==", 1056 + "dependencies": [ 1057 + "@solid-primitives/utils", 1058 + "solid-js" 1059 + ] 1060 + }, 1061 + "@solid-primitives/utils@6.3.2_solid-js@1.9.10__seroval@1.3.2": { 1062 + "integrity": "sha512-hZ/M/qr25QOCcwDPOHtGjxTD8w2mNyVAYvcfgwzBHq2RwNqHNdDNsMZYap20+ruRwW4A3Cdkczyoz0TSxLCAPQ==", 1063 + "dependencies": [ 1064 + "solid-js" 1065 + ] 1066 + }, 1067 + "@standard-schema/spec@1.0.0": { 1068 + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==" 1069 + }, 1070 + "@swc/helpers@0.5.17": { 1071 + "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", 1072 + "dependencies": [ 1073 + "tslib" 1074 + ] 1075 + }, 1076 + "@ts-morph/common@0.28.1": { 1077 + "integrity": "sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g==", 1078 + "dependencies": [ 1079 + "minimatch", 1080 + "path-browserify", 1081 + "tinyglobby" 1082 + ] 1083 + }, 1084 + "@types/babel__core@7.20.5": { 1085 + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", 1086 + "dependencies": [ 1087 + "@babel/parser", 1088 + "@babel/types", 1089 + "@types/babel__generator", 1090 + "@types/babel__template", 1091 + "@types/babel__traverse" 1092 + ] 1093 + }, 1094 + "@types/babel__generator@7.27.0": { 1095 + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", 1096 + "dependencies": [ 1097 + "@babel/types" 1098 + ] 1099 + }, 1100 + "@types/babel__template@7.4.4": { 1101 + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", 1102 + "dependencies": [ 1103 + "@babel/parser", 1104 + "@babel/types" 1105 + ] 1106 + }, 1107 + "@types/babel__traverse@7.28.0": { 1108 + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", 1109 + "dependencies": [ 1110 + "@babel/types" 1111 + ] 1112 + }, 1113 + "@types/dom-mediacapture-transform@0.1.11": { 1114 + "integrity": "sha512-Y2p+nGf1bF2XMttBnsVPHUWzRRZzqUoJAKmiP10b5umnO6DDrWI0BrGDJy1pOHoOULVmGSfFNkQrAlC5dcj6nQ==", 1115 + "dependencies": [ 1116 + "@types/dom-webcodecs" 1117 + ] 1118 + }, 1119 + "@types/dom-webcodecs@0.1.13": { 1120 + "integrity": "sha512-O5hkiFIcjjszPIYyUSyvScyvrBoV3NOEEZx/pMlsu44TKzWNkLVBBxnxJz42in5n3QIolYOcBYFCPZZ0h8SkwQ==" 1121 + }, 1122 + "@types/estree@1.0.8": { 1123 + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==" 1124 + }, 1125 + "@types/node@17.0.45": { 1126 + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" 1127 + }, 1128 + "@vue/compiler-core@3.5.22": { 1129 + "integrity": "sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==", 1130 + "dependencies": [ 1131 + "@babel/parser", 1132 + "@vue/shared", 1133 + "entities@4.5.0", 1134 + "estree-walker", 1135 + "source-map-js" 1136 + ] 1137 + }, 1138 + "@vue/compiler-dom@3.5.22": { 1139 + "integrity": "sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==", 1140 + "dependencies": [ 1141 + "@vue/compiler-core", 1142 + "@vue/shared" 1143 + ] 1144 + }, 1145 + "@vue/compiler-sfc@3.5.22": { 1146 + "integrity": "sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==", 1147 + "dependencies": [ 1148 + "@babel/parser", 1149 + "@vue/compiler-core", 1150 + "@vue/compiler-dom", 1151 + "@vue/compiler-ssr", 1152 + "@vue/shared", 1153 + "estree-walker", 1154 + "magic-string", 1155 + "postcss", 1156 + "source-map-js" 1157 + ] 1158 + }, 1159 + "@vue/compiler-ssr@3.5.22": { 1160 + "integrity": "sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==", 1161 + "dependencies": [ 1162 + "@vue/compiler-dom", 1163 + "@vue/shared" 1164 + ] 1165 + }, 1166 + "@vue/shared@3.5.22": { 1167 + "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==" 1168 + }, 1169 + "@zag-js/accordion@0.62.1": { 1170 + "integrity": "sha512-1lMKuD1GbiMuemOHOu+24BSAAG8iTD6l/4zYrQRBCTsxXzHhWqTtLF7okGgmSAs8iyNfOuWefCfaJJ3BJNSh5A==", 1171 + "dependencies": [ 1172 + "@zag-js/anatomy@0.62.1", 1173 + "@zag-js/core@0.62.1", 1174 + "@zag-js/dom-event", 1175 + "@zag-js/dom-query@0.62.1", 1176 + "@zag-js/types@0.62.1", 1177 + "@zag-js/utils@0.62.1" 1178 + ] 1179 + }, 1180 + "@zag-js/accordion@1.27.1": { 1181 + "integrity": "sha512-c6Ny0M/I4gqhcemD7THNBIKiBXLgJnRLmT1oOSZdPmwWI8Y6HMS/As8DDV3hsyzV/X26dbZiuJtuylAepMN3bQ==", 1182 + "dependencies": [ 1183 + "@zag-js/anatomy@1.27.1", 1184 + "@zag-js/core@1.27.1", 1185 + "@zag-js/dom-query@1.27.1", 1186 + "@zag-js/types@1.27.1", 1187 + "@zag-js/utils@1.27.1" 1188 + ] 1189 + }, 1190 + "@zag-js/anatomy@0.62.1": { 1191 + "integrity": "sha512-1JiPQOyVlO1jHwLTSNJpyfy1R1UYoaVU1mKSUww5+htAuT/1txjs04pr+8vTF/L/UVzNEZZYepB1tTabyb9LYg==" 1192 + }, 1193 + "@zag-js/anatomy@1.27.1": { 1194 + "integrity": "sha512-vAgZ9RFm9wSucTMpbV1ZY2soZ6ZHQ9JAMOkLy1EPkWyE7+68VxzDh8rKc3Gq3LAjowgF2yR8tIe05njP9KFRjg==" 1195 + }, 1196 + "@zag-js/angle-slider@1.27.1": { 1197 + "integrity": "sha512-92rFGXNZTI4KwQPyxlSWMkaaLPgppK8MSUHR9+fhyULDqlGI3DlBrAB9J+jYQxt44rcBMWxGmbherDIz904d9g==", 1198 + "dependencies": [ 1199 + "@zag-js/anatomy@1.27.1", 1200 + "@zag-js/core@1.27.1", 1201 + "@zag-js/dom-query@1.27.1", 1202 + "@zag-js/rect-utils@1.27.1", 1203 + "@zag-js/types@1.27.1", 1204 + "@zag-js/utils@1.27.1" 1205 + ] 1206 + }, 1207 + "@zag-js/aria-hidden@0.62.1": { 1208 + "integrity": "sha512-vVV8bwZhNU+AOOf/USEGV/n9zuTID+spHeC9ZAj29ibWAMmaiq2bx4t1kO4v9eKqKXULUBPPrZQ7CX7oiU616A==", 1209 + "dependencies": [ 1210 + "@zag-js/dom-query@0.62.1" 1211 + ] 1212 + }, 1213 + "@zag-js/aria-hidden@1.27.1": { 1214 + "integrity": "sha512-8ax2IG0jOJnvNMb20INgxa5OS7jvr14dxuc8vgaNR9a0yfWzIuINp/O0FrN+8GNzaJzGMODwqGb0I7AOOIOAbw==", 1215 + "dependencies": [ 1216 + "@zag-js/dom-query@1.27.1" 1217 + ] 1218 + }, 1219 + "@zag-js/async-list@1.27.1": { 1220 + "integrity": "sha512-wJkGMrlsKCsbIyTDreRL7ErAC+vwfV8DgpCx1kiY6pwnG4Lq09NR/Qprpwm+vh0d3kJdV2dJes0+dAwp3TvTtw==", 1221 + "dependencies": [ 1222 + "@zag-js/core@1.27.1", 1223 + "@zag-js/utils@1.27.1" 1224 + ] 1225 + }, 1226 + "@zag-js/auto-resize@0.62.1": { 1227 + "integrity": "sha512-nznVkAsZGS+L+VhNO8hPnEyvagNhTezkb64SSPa8E49hJHS2DEN3T5hKCx86tDuiCMd0EdjwUCCQq3pnbzbnCQ==", 1228 + "dependencies": [ 1229 + "@zag-js/dom-query@0.62.1" 1230 + ] 1231 + }, 1232 + "@zag-js/auto-resize@1.27.1": { 1233 + "integrity": "sha512-1hfHePSLs2AcESHUTzZhizn6lCCUeqwsWB4MsJwUzEqpGoW7DOKfOy27mfX50YlU7ttJOjlpYJ+Fp2g5FnzWWA==", 1234 + "dependencies": [ 1235 + "@zag-js/dom-query@1.27.1" 1236 + ] 1237 + }, 1238 + "@zag-js/avatar@0.62.1": { 1239 + "integrity": "sha512-J+IRqJlpL4S9ikCQle/FHj6p8uT8Ee/D88u4k7m/An4Ot1FcrfKqfC3INB5YOI+d8hkIQVtEIAC8Yt/s4OzAMg==", 1240 + "dependencies": [ 1241 + "@zag-js/anatomy@0.62.1", 1242 + "@zag-js/core@0.62.1", 1243 + "@zag-js/dom-query@0.62.1", 1244 + "@zag-js/types@0.62.1", 1245 + "@zag-js/utils@0.62.1" 1246 + ] 1247 + }, 1248 + "@zag-js/avatar@1.27.1": { 1249 + "integrity": "sha512-HTxhl+06CefIQIDnFvEdazCe0To3HDeYx+KrJ7UdBGUgGHVQ/n3/767QdrtIS26h71rTV9q7dMEsmr4ttugn6w==", 1250 + "dependencies": [ 1251 + "@zag-js/anatomy@1.27.1", 1252 + "@zag-js/core@1.27.1", 1253 + "@zag-js/dom-query@1.27.1", 1254 + "@zag-js/types@1.27.1", 1255 + "@zag-js/utils@1.27.1" 1256 + ] 1257 + }, 1258 + "@zag-js/bottom-sheet@1.27.1": { 1259 + "integrity": "sha512-priPNZJd5/c8FhzGDCLEmwRxoKqd1/LyOc+hR+xd1iEDKGrhG4VlE3YKNUicUh1FK6zGYysjPTA4s3rRWL1CTg==", 1260 + "dependencies": [ 1261 + "@zag-js/anatomy@1.27.1", 1262 + "@zag-js/aria-hidden@1.27.1", 1263 + "@zag-js/core@1.27.1", 1264 + "@zag-js/dismissable@1.27.1", 1265 + "@zag-js/dom-query@1.27.1", 1266 + "@zag-js/focus-trap", 1267 + "@zag-js/remove-scroll@1.27.1", 1268 + "@zag-js/types@1.27.1", 1269 + "@zag-js/utils@1.27.1" 1270 + ] 1271 + }, 1272 + "@zag-js/carousel@0.62.1": { 1273 + "integrity": "sha512-0YQ2jJjzaS1zFLVnPBslVKI8/fY2Z6aOrcJbBjxozG27iSS6zEqmbsz3OOtcYJRlB8jLboZutpMBs3PGh5zg5Q==", 1274 + "dependencies": [ 1275 + "@zag-js/anatomy@0.62.1", 1276 + "@zag-js/core@0.62.1", 1277 + "@zag-js/dom-query@0.62.1", 1278 + "@zag-js/types@0.62.1", 1279 + "@zag-js/utils@0.62.1" 1280 + ] 1281 + }, 1282 + "@zag-js/carousel@1.27.1": { 1283 + "integrity": "sha512-3lU5KksoEsuT6sR8GZ85K2oxXRQojbK429CsuDolD1d6zoyUC81ORPxNmka5qCFlgO981NVFdrNfWX1ftlSQSQ==", 1284 + "dependencies": [ 1285 + "@zag-js/anatomy@1.27.1", 1286 + "@zag-js/core@1.27.1", 1287 + "@zag-js/dom-query@1.27.1", 1288 + "@zag-js/scroll-snap", 1289 + "@zag-js/types@1.27.1", 1290 + "@zag-js/utils@1.27.1" 1291 + ] 1292 + }, 1293 + "@zag-js/checkbox@0.62.1": { 1294 + "integrity": "sha512-xiubQLhRXedlZe4Vc6zxaDFWLSpRdGEG0jTrF3OXovYZLN7bmq0iXiYcWqsLa012+2dYN9w5B1zfQQlzf4sk2w==", 1295 + "dependencies": [ 1296 + "@zag-js/anatomy@0.62.1", 1297 + "@zag-js/core@0.62.1", 1298 + "@zag-js/dom-event", 1299 + "@zag-js/dom-query@0.62.1", 1300 + "@zag-js/form-utils", 1301 + "@zag-js/types@0.62.1", 1302 + "@zag-js/utils@0.62.1" 1303 + ] 1304 + }, 1305 + "@zag-js/checkbox@1.27.1": { 1306 + "integrity": "sha512-aRyAWI1bH2IwdaCOV6YRtCBdHoCyRo9xd1kAnxSn1/Lb+vVQgs2MJrwOUcd7aNLRxpqpeKbUKIgqqgkQQkLmZw==", 1307 + "dependencies": [ 1308 + "@zag-js/anatomy@1.27.1", 1309 + "@zag-js/core@1.27.1", 1310 + "@zag-js/dom-query@1.27.1", 1311 + "@zag-js/focus-visible", 1312 + "@zag-js/types@1.27.1", 1313 + "@zag-js/utils@1.27.1" 1314 + ] 1315 + }, 1316 + "@zag-js/clipboard@0.62.1": { 1317 + "integrity": "sha512-gEhCGLkAlrgNWkd7ZqF4p4yNKsR54+0YQPevEv7iX9oio8T/F8OWaDmDjA4NsXxqRe6hr5KLJbVp8dYRop30TQ==", 1318 + "dependencies": [ 1319 + "@zag-js/anatomy@0.62.1", 1320 + "@zag-js/core@0.62.1", 1321 + "@zag-js/dom-query@0.62.1", 1322 + "@zag-js/types@0.62.1", 1323 + "@zag-js/utils@0.62.1" 1324 + ] 1325 + }, 1326 + "@zag-js/clipboard@1.27.1": { 1327 + "integrity": "sha512-Zx9MnvFb5Dx/ajtDJy0tnH+H7/W7Bgu4P5bXiCs+v0qCcWwd/CpW9tTHD6IiF7TBr/FqSWT8mAruPf4rrjIqAw==", 1328 + "dependencies": [ 1329 + "@zag-js/anatomy@1.27.1", 1330 + "@zag-js/core@1.27.1", 1331 + "@zag-js/dom-query@1.27.1", 1332 + "@zag-js/types@1.27.1", 1333 + "@zag-js/utils@1.27.1" 1334 + ] 1335 + }, 1336 + "@zag-js/collapsible@0.62.1": { 1337 + "integrity": "sha512-M4hsuqf6dVra6RvKaxQjgQjZ+iYj3XH84w6QOnt/SXbJauQoE6nfy77RI/A8O2pPuP6uLq0h2E9Eo3ftcbGBoQ==", 1338 + "dependencies": [ 1339 + "@zag-js/anatomy@0.62.1", 1340 + "@zag-js/core@0.62.1", 1341 + "@zag-js/dom-query@0.62.1", 1342 + "@zag-js/types@0.62.1", 1343 + "@zag-js/utils@0.62.1" 1344 + ] 1345 + }, 1346 + "@zag-js/collapsible@1.27.1": { 1347 + "integrity": "sha512-y+jw3N9BiIRaCtUFgpIC+Da1Fxn+DgwXnPdt2Ufk7xwDinRcOfD6ueGY+jBEFbZvVlOYzf+wU3rCopeKFNIh2Q==", 1348 + "dependencies": [ 1349 + "@zag-js/anatomy@1.27.1", 1350 + "@zag-js/core@1.27.1", 1351 + "@zag-js/dom-query@1.27.1", 1352 + "@zag-js/types@1.27.1", 1353 + "@zag-js/utils@1.27.1" 1354 + ] 1355 + }, 1356 + "@zag-js/collection@0.62.1": { 1357 + "integrity": "sha512-Qg3OvGCvcoeV4u8IcQmNCu4dChRttVyQ9DF8Ab0qlyrjRDF+w8vMAcNcgNqn10/xX4A7B743cz023LooVsW6VA==", 1358 + "dependencies": [ 1359 + "@zag-js/utils@0.62.1" 1360 + ] 1361 + }, 1362 + "@zag-js/collection@1.27.1": { 1363 + "integrity": "sha512-zcf2GIpsACn0RUpNJSpRmbWOLbuiqMkRgZP4+Ub2Wy6lsYKi3Fou2A9o6Sm6HuNYMLJYRvos0oEEktHNJsLNyw==", 1364 + "dependencies": [ 1365 + "@zag-js/utils@1.27.1" 1366 + ] 1367 + }, 1368 + "@zag-js/color-picker@0.62.1": { 1369 + "integrity": "sha512-GLeADGcoMLcVS+UM6rn/c1BmBgSB2uTc5AWBkuKoH7TktsKo6+T/v3/QZIU7/b69qBAp3/vWZti99Flw42IDdw==", 1370 + "dependencies": [ 1371 + "@zag-js/anatomy@0.62.1", 1372 + "@zag-js/color-utils@0.62.1", 1373 + "@zag-js/core@0.62.1", 1374 + "@zag-js/dismissable@0.62.1", 1375 + "@zag-js/dom-event", 1376 + "@zag-js/dom-query@0.62.1", 1377 + "@zag-js/form-utils", 1378 + "@zag-js/popper@0.62.1", 1379 + "@zag-js/text-selection", 1380 + "@zag-js/types@0.62.1", 1381 + "@zag-js/utils@0.62.1" 1382 + ] 1383 + }, 1384 + "@zag-js/color-picker@1.27.1": { 1385 + "integrity": "sha512-aF/fPHQ4p6YxiMmCGZ7BB9BjGltY3X59vckLv4PqXimJQg+H9L4RBXzFQzzVZI8h8s/ycg2mwHHJfnKyTklvhw==", 1386 + "dependencies": [ 1387 + "@zag-js/anatomy@1.27.1", 1388 + "@zag-js/color-utils@1.27.1", 1389 + "@zag-js/core@1.27.1", 1390 + "@zag-js/dismissable@1.27.1", 1391 + "@zag-js/dom-query@1.27.1", 1392 + "@zag-js/popper@1.27.1", 1393 + "@zag-js/types@1.27.1", 1394 + "@zag-js/utils@1.27.1" 1395 + ] 1396 + }, 1397 + "@zag-js/color-utils@0.62.1": { 1398 + "integrity": "sha512-uXsEA0xsI4NT7YFwWZldy7LXsk32Ta+41MrckhzbSA766v+bW4sFDUYmJxwLkN4nl1QzlLAlGghhauXmW9Fs8g==", 1399 + "dependencies": [ 1400 + "@zag-js/numeric-range" 1401 + ] 1402 + }, 1403 + "@zag-js/color-utils@1.27.1": { 1404 + "integrity": "sha512-fiwHh1tDTwNv3ME5zT4wgr9wcrqsfpfcUj+gSfne0MQWEdKseObXrrQwdGjf97udEsr0RTagseDPXrKG78U24g==", 1405 + "dependencies": [ 1406 + "@zag-js/utils@1.27.1" 1407 + ] 1408 + }, 1409 + "@zag-js/combobox@0.62.1": { 1410 + "integrity": "sha512-EovqyFqD61YmYJYc42qKH2OE7GxMm3gamWLU/lvZe/3eyZt6TsxFe2xeP7WSsvq2v90myMajAnUb0DOpvYaCKw==", 1411 + "dependencies": [ 1412 + "@zag-js/anatomy@0.62.1", 1413 + "@zag-js/aria-hidden@0.62.1", 1414 + "@zag-js/collection@0.62.1", 1415 + "@zag-js/core@0.62.1", 1416 + "@zag-js/dismissable@0.62.1", 1417 + "@zag-js/dom-event", 1418 + "@zag-js/dom-query@0.62.1", 1419 + "@zag-js/popper@0.62.1", 1420 + "@zag-js/types@0.62.1", 1421 + "@zag-js/utils@0.62.1" 1422 + ] 1423 + }, 1424 + "@zag-js/combobox@1.27.1": { 1425 + "integrity": "sha512-Q+fC5SQgsLNdZoaaG1TbSZbvgm5H/tjaAbOull2zyrQzoe20WLCTJgHCWmVm1X0u5mEKXVf8xISzys8a+LJxwg==", 1426 + "dependencies": [ 1427 + "@zag-js/anatomy@1.27.1", 1428 + "@zag-js/aria-hidden@1.27.1", 1429 + "@zag-js/collection@1.27.1", 1430 + "@zag-js/core@1.27.1", 1431 + "@zag-js/dismissable@1.27.1", 1432 + "@zag-js/dom-query@1.27.1", 1433 + "@zag-js/popper@1.27.1", 1434 + "@zag-js/types@1.27.1", 1435 + "@zag-js/utils@1.27.1" 1436 + ] 1437 + }, 1438 + "@zag-js/core@0.62.1": { 1439 + "integrity": "sha512-ZSjqnV5vcGDassjmZ/lxWbG244A0i+IHImVZ/a4/0JkjkH126ly+At4FC+HI571pNKiNlrqYmGzRRSBMqm37yQ==", 1440 + "dependencies": [ 1441 + "@zag-js/store@0.62.1", 1442 + "klona" 1443 + ] 1444 + }, 1445 + "@zag-js/core@1.27.1": { 1446 + "integrity": "sha512-C35SJO7O5fyzgk+mhTSRWiApz0QP2MngT/qgCrSEDHss0ESd1scQylpDK8LrKDGHyYObJLLJhOAoeHWKALBTPA==", 1447 + "dependencies": [ 1448 + "@zag-js/dom-query@1.27.1", 1449 + "@zag-js/utils@1.27.1" 1450 + ] 1451 + }, 1452 + "@zag-js/date-picker@0.62.1_@internationalized+date@3.5.5": { 1453 + "integrity": "sha512-Wl6yzMtrTy7XgDFbYJaRO8M5dkxLPBvAo3ilDvFBicbJViJCZ9pg1AJYh+xGaK/gfAd7O9wBdYJdHxfESlmlDg==", 1454 + "dependencies": [ 1455 + "@internationalized/date@3.5.5", 1456 + "@zag-js/anatomy@0.62.1", 1457 + "@zag-js/core@0.62.1", 1458 + "@zag-js/date-utils@0.62.1_@internationalized+date@3.5.5", 1459 + "@zag-js/dismissable@0.62.1", 1460 + "@zag-js/dom-event", 1461 + "@zag-js/dom-query@0.62.1", 1462 + "@zag-js/form-utils", 1463 + "@zag-js/live-region@0.62.1", 1464 + "@zag-js/popper@0.62.1", 1465 + "@zag-js/text-selection", 1466 + "@zag-js/types@0.62.1", 1467 + "@zag-js/utils@0.62.1" 1468 + ] 1469 + }, 1470 + "@zag-js/date-picker@1.27.1_@internationalized+date@3.10.0": { 1471 + "integrity": "sha512-Hf3C6p+rOa7kamvRCaa4iJZZhAQoT6CMnp7V1jy57ICwpiXMhZ78HlzVZBKWmNuZlzibwzx6okfodlidMp+Mhg==", 1472 + "dependencies": [ 1473 + "@internationalized/date@3.10.0", 1474 + "@zag-js/anatomy@1.27.1", 1475 + "@zag-js/core@1.27.1", 1476 + "@zag-js/date-utils@1.27.1_@internationalized+date@3.10.0", 1477 + "@zag-js/dismissable@1.27.1", 1478 + "@zag-js/dom-query@1.27.1", 1479 + "@zag-js/live-region@1.27.1", 1480 + "@zag-js/popper@1.27.1", 1481 + "@zag-js/types@1.27.1", 1482 + "@zag-js/utils@1.27.1" 1483 + ] 1484 + }, 1485 + "@zag-js/date-utils@0.62.1_@internationalized+date@3.10.0": { 1486 + "integrity": "sha512-YBqT5YRtHOCDS2IcCZtrq7BfzBkU5c+Sc2pVTncf06/3jxjE6l6YbBncMPu5a3uWKjNld1wOTFszhSoPKZfrJA==", 1487 + "dependencies": [ 1488 + "@internationalized/date@3.10.0" 1489 + ] 1490 + }, 1491 + "@zag-js/date-utils@0.62.1_@internationalized+date@3.5.5": { 1492 + "integrity": "sha512-YBqT5YRtHOCDS2IcCZtrq7BfzBkU5c+Sc2pVTncf06/3jxjE6l6YbBncMPu5a3uWKjNld1wOTFszhSoPKZfrJA==", 1493 + "dependencies": [ 1494 + "@internationalized/date@3.5.5" 1495 + ] 1496 + }, 1497 + "@zag-js/date-utils@1.27.1_@internationalized+date@3.10.0": { 1498 + "integrity": "sha512-0s5qZAv+ZDRtg1fv848yC/2lt8dqNVN3DpW+JmOFioR9Cp2y+aBd+Ae5Y5Zh13kPcRvwDNVJ+kaeBOTJ9756Wg==", 1499 + "dependencies": [ 1500 + "@internationalized/date@3.10.0" 1501 + ] 1502 + }, 1503 + "@zag-js/dialog@0.62.1": { 1504 + "integrity": "sha512-7YRvWZ9UMUjFz0q537/uaTMBljLimWISfVHkUSa2ngbXB8LPYYbqYv5Vio2rvRFqy3nJR3HTO4cGZJGDjO655g==", 1505 + "dependencies": [ 1506 + "@zag-js/anatomy@0.62.1", 1507 + "@zag-js/aria-hidden@0.62.1", 1508 + "@zag-js/core@0.62.1", 1509 + "@zag-js/dismissable@0.62.1", 1510 + "@zag-js/dom-query@0.62.1", 1511 + "@zag-js/remove-scroll@0.62.1", 1512 + "@zag-js/types@0.62.1", 1513 + "@zag-js/utils@0.62.1", 1514 + "focus-trap" 1515 + ] 1516 + }, 1517 + "@zag-js/dialog@1.27.1": { 1518 + "integrity": "sha512-FHRSqZaiFu60NMuNE+jdXFDgkapVBtaJG+ts4CHn9wKnyQYmao41Nin5ZEQI8DaLgzxkBAgwEwg33FQ5L+99mg==", 1519 + "dependencies": [ 1520 + "@zag-js/anatomy@1.27.1", 1521 + "@zag-js/aria-hidden@1.27.1", 1522 + "@zag-js/core@1.27.1", 1523 + "@zag-js/dismissable@1.27.1", 1524 + "@zag-js/dom-query@1.27.1", 1525 + "@zag-js/focus-trap", 1526 + "@zag-js/remove-scroll@1.27.1", 1527 + "@zag-js/types@1.27.1", 1528 + "@zag-js/utils@1.27.1" 1529 + ] 1530 + }, 1531 + "@zag-js/dismissable@0.62.1": { 1532 + "integrity": "sha512-muGTBISpjQEWLCrsYa9wAFaGXlVxYtyMaDgpcPpQdQPwZF86b445y4d8h9FjwkESdJ6Zcdjn21pu5CWD28T3uQ==", 1533 + "dependencies": [ 1534 + "@zag-js/dom-event", 1535 + "@zag-js/dom-query@0.62.1", 1536 + "@zag-js/interact-outside@0.62.1", 1537 + "@zag-js/utils@0.62.1" 1538 + ] 1539 + }, 1540 + "@zag-js/dismissable@1.27.1": { 1541 + "integrity": "sha512-EZ9xq47m50scGV8JHYTAIL1DjnoFYChBC68cE9XNsqZO2vOINdYAfzsH73otx/CQ6RkhSk7eymP4fIzZVtRTVw==", 1542 + "dependencies": [ 1543 + "@zag-js/dom-query@1.27.1", 1544 + "@zag-js/interact-outside@1.27.1", 1545 + "@zag-js/utils@1.27.1" 1546 + ] 1547 + }, 1548 + "@zag-js/dom-event@0.62.1": { 1549 + "integrity": "sha512-/+okVW69Xdoot7dutJVMz0iciwWM6DvAeLWr7LB5DZsUQMu93oqV/8BE2JArDxEcg5C208HNThGStcWlTaddgA==", 1550 + "dependencies": [ 1551 + "@zag-js/dom-query@0.62.1", 1552 + "@zag-js/text-selection", 1553 + "@zag-js/types@0.62.1" 1554 + ] 1555 + }, 1556 + "@zag-js/dom-query@0.62.1": { 1557 + "integrity": "sha512-sI/urNd3QX/WI7Sii+X1Z/OTWNisn7EaW3T0X9Rbn41u79DC4KeUnP+wpIq1igSJNH2zQWIWBLJ1OGhAjuSl5g==" 1558 + }, 1559 + "@zag-js/dom-query@1.27.1": { 1560 + "integrity": "sha512-+oyhPQ6of1zCCK8iTaxxQc2FMFEJz1mr+1571vaSRdoxG31GhNkq/QDfUvQQnRR+2HV9yNiFk4hcjCDGqdXDTQ==", 1561 + "dependencies": [ 1562 + "@zag-js/types@1.27.1" 1563 + ] 1564 + }, 1565 + "@zag-js/editable@0.62.1": { 1566 + "integrity": "sha512-BkPLV8T9ixdhz3IxvseV24a1pBNmYhR1np+JUKap0C8thtFbDoF361haEQjCqTCfHDv+j5l1rtq/+H/TF3eEIg==", 1567 + "dependencies": [ 1568 + "@zag-js/anatomy@0.62.1", 1569 + "@zag-js/core@0.62.1", 1570 + "@zag-js/dom-event", 1571 + "@zag-js/dom-query@0.62.1", 1572 + "@zag-js/form-utils", 1573 + "@zag-js/interact-outside@0.62.1", 1574 + "@zag-js/types@0.62.1", 1575 + "@zag-js/utils@0.62.1" 1576 + ] 1577 + }, 1578 + "@zag-js/editable@1.27.1": { 1579 + "integrity": "sha512-JnmrMLijCpIdYmR3PHFFS5oiQkuYsqoZPy9Rt5N6nUhy96IhznaDWghd2mCdxowwSRVySiplJ6qeR+CSgRY5og==", 1580 + "dependencies": [ 1581 + "@zag-js/anatomy@1.27.1", 1582 + "@zag-js/core@1.27.1", 1583 + "@zag-js/dom-query@1.27.1", 1584 + "@zag-js/interact-outside@1.27.1", 1585 + "@zag-js/types@1.27.1", 1586 + "@zag-js/utils@1.27.1" 1587 + ] 1588 + }, 1589 + "@zag-js/element-rect@0.62.1": { 1590 + "integrity": "sha512-SefRp1IeiENoUkl7yxGzUIdxtQqgKlI+G1qlgx9MZgchH2VZCpqi+EuZgLEKzz7REMabOYqbgs6EEIxGIyNueg==" 1591 + }, 1592 + "@zag-js/element-size@0.62.1": { 1593 + "integrity": "sha512-QCtVeIJ611hJPorKEkdfrWWcMohadplZoW8xQW/2PLSmKUhTNLfHsZLyeoYKyj5Jk4X8OAN4onnMVETFw232EA==" 1594 + }, 1595 + "@zag-js/file-upload@0.62.1": { 1596 + "integrity": "sha512-Wh33acYMJLNRIV2y0GdSZqoN3aX/t/uzIBWh3rVsN7tpjDYWXLYIsXQttkGLFf0sgICK+3PVD+LLaIpiGDh4+Q==", 1597 + "dependencies": [ 1598 + "@zag-js/anatomy@0.62.1", 1599 + "@zag-js/core@0.62.1", 1600 + "@zag-js/dom-query@0.62.1", 1601 + "@zag-js/file-utils@0.62.1", 1602 + "@zag-js/i18n-utils@0.62.1", 1603 + "@zag-js/types@0.62.1", 1604 + "@zag-js/utils@0.62.1" 1605 + ] 1606 + }, 1607 + "@zag-js/file-upload@1.27.1": { 1608 + "integrity": "sha512-xChLU5NGnHn/G+L4GDPkCOa8XWY/gHeBbvQAaHItFKTpVmjWwM8uZ6X/utcWuZmdmUU8j/YfWYmCGdyux58I9Q==", 1609 + "dependencies": [ 1610 + "@zag-js/anatomy@1.27.1", 1611 + "@zag-js/core@1.27.1", 1612 + "@zag-js/dom-query@1.27.1", 1613 + "@zag-js/file-utils@1.27.1", 1614 + "@zag-js/i18n-utils@1.27.1", 1615 + "@zag-js/types@1.27.1", 1616 + "@zag-js/utils@1.27.1" 1617 + ] 1618 + }, 1619 + "@zag-js/file-utils@0.62.1": { 1620 + "integrity": "sha512-p363S2pqz29wf1shcSfoY2GI9wWrJkKamNiwuehqoYFh2b8isrcWFVL3VYxm937N1/m5+rtMATQbn0a9j9sggA==", 1621 + "dependencies": [ 1622 + "@zag-js/i18n-utils@0.62.1" 1623 + ] 1624 + }, 1625 + "@zag-js/file-utils@1.27.1": { 1626 + "integrity": "sha512-Ov5gMd7qUGdWydfjmtq/sm+PEl0LdJr7G4VuLZz3b4pJYVDBMv3pEHRXJj5x+b4mgm5U82vncE/itg/1Z08wKA==", 1627 + "dependencies": [ 1628 + "@zag-js/i18n-utils@1.27.1" 1629 + ] 1630 + }, 1631 + "@zag-js/floating-panel@1.27.1": { 1632 + "integrity": "sha512-BcTZ4oJj+V+kAhbXXRWS68ivbiVIT3Q6NhcpZ8M4Hv4x7tpsfxC+J9/qsTX4/LF1LYGZZ0v7QidaWa7t4gDGCA==", 1633 + "dependencies": [ 1634 + "@zag-js/anatomy@1.27.1", 1635 + "@zag-js/core@1.27.1", 1636 + "@zag-js/dom-query@1.27.1", 1637 + "@zag-js/popper@1.27.1", 1638 + "@zag-js/rect-utils@1.27.1", 1639 + "@zag-js/store@1.27.1", 1640 + "@zag-js/types@1.27.1", 1641 + "@zag-js/utils@1.27.1" 1642 + ] 1643 + }, 1644 + "@zag-js/focus-trap@1.27.1": { 1645 + "integrity": "sha512-dHjN8Cxx2q7GyxfLhx6/FZgHRwTz4JnKT0bQxP3PjWsBQM1bVbFIJCL3lRy4NYQ1rJ1DA0LSbTecqqlKv4DgUw==", 1646 + "dependencies": [ 1647 + "@zag-js/dom-query@1.27.1" 1648 + ] 1649 + }, 1650 + "@zag-js/focus-visible@1.27.1": { 1651 + "integrity": "sha512-KGQAoiEejkEi0NMS33Q8mc7kedB0Y4g8WyKNaVlMgnqCEpi39cHkszgyZEvX1SYWfv4+RezQGfYOKo0Y6ze4uQ==", 1652 + "dependencies": [ 1653 + "@zag-js/dom-query@1.27.1" 1654 + ] 1655 + }, 1656 + "@zag-js/form-utils@0.62.1": { 1657 + "integrity": "sha512-GJWRRtEpro8TNEUuEWMhIOWmVFXqiHNTTrrRLxijxUIWbsPrPdPiKL7qwBAESYoZQCmN0hU99S0w2Xmm7Q05Zg==" 1658 + }, 1659 + "@zag-js/highlight-word@1.27.1": { 1660 + "integrity": "sha512-4lmudpn2VfhIlDqfXzUOYqTsUMIXSZRMEeUbyhdidGGXM/r5rUXoYtHQ4wuIF48CUMuAzoAk2yn5hJm1csi8Dw==" 1661 + }, 1662 + "@zag-js/hover-card@0.62.1": { 1663 + "integrity": "sha512-ryiNHQmmHpiDiZ5nuk9nvGUgnT017q8hYf+wLSI5OJ+klHPjrHObb7I7v/fUmKzWNtIOhaL0uw9afzjRt3bLEw==", 1664 + "dependencies": [ 1665 + "@zag-js/anatomy@0.62.1", 1666 + "@zag-js/core@0.62.1", 1667 + "@zag-js/dismissable@0.62.1", 1668 + "@zag-js/dom-query@0.62.1", 1669 + "@zag-js/popper@0.62.1", 1670 + "@zag-js/types@0.62.1", 1671 + "@zag-js/utils@0.62.1" 1672 + ] 1673 + }, 1674 + "@zag-js/hover-card@1.27.1": { 1675 + "integrity": "sha512-VolB6d8Yu8wjLi9CdGtd3w3qKtop0lQebcA9M12sOs6E+DmrmdCZfgIMMtiUrVch7HTSPa5kXlI+/6svvS6UQA==", 1676 + "dependencies": [ 1677 + "@zag-js/anatomy@1.27.1", 1678 + "@zag-js/core@1.27.1", 1679 + "@zag-js/dismissable@1.27.1", 1680 + "@zag-js/dom-query@1.27.1", 1681 + "@zag-js/popper@1.27.1", 1682 + "@zag-js/types@1.27.1", 1683 + "@zag-js/utils@1.27.1" 1684 + ] 1685 + }, 1686 + "@zag-js/i18n-utils@0.62.1": { 1687 + "integrity": "sha512-ipzx0W6VK5x+w/PnUrN8z5SULJuLqvdzsPVBJ2iGHrMcTPC/y9JDt82nJV9fUYmG898pOZUx7vysfLLPNEAFTQ==", 1688 + "dependencies": [ 1689 + "@zag-js/dom-query@0.62.1" 1690 + ] 1691 + }, 1692 + "@zag-js/i18n-utils@1.27.1": { 1693 + "integrity": "sha512-dNP7ZMoKxCD8KOc3RPqBpj7mEr5qb2qix8o6AQHw2QMDdgMDj0E9y5ZaNHIzkpMyYmvURY5I+pwWfFricv/rHg==", 1694 + "dependencies": [ 1695 + "@zag-js/dom-query@1.27.1" 1696 + ] 1697 + }, 1698 + "@zag-js/image-cropper@1.27.1": { 1699 + "integrity": "sha512-fzAlMZwKQVVxaHcxbGmwOY05fFdooxkAYNjuzansQo5nHWQIVVVe7/Ou6GzU7ggc/Ws+a/TY2dp3dZbzrSfc5g==", 1700 + "dependencies": [ 1701 + "@zag-js/anatomy@1.27.1", 1702 + "@zag-js/core@1.27.1", 1703 + "@zag-js/dom-query@1.27.1", 1704 + "@zag-js/types@1.27.1", 1705 + "@zag-js/utils@1.27.1" 1706 + ] 1707 + }, 1708 + "@zag-js/interact-outside@0.62.1": { 1709 + "integrity": "sha512-V5N+kr2Uv97HWYL0U5ZVS//NMQu87XGLtI7Ae5EtHrdAEKxO2NpPwf50Gzza4zc1VEVYYFqobTlkNQ3hrrL6VQ==", 1710 + "dependencies": [ 1711 + "@zag-js/dom-event", 1712 + "@zag-js/dom-query@0.62.1", 1713 + "@zag-js/utils@0.62.1" 1714 + ] 1715 + }, 1716 + "@zag-js/interact-outside@1.27.1": { 1717 + "integrity": "sha512-MfZobJhDWSiS9SzF35FJd/R+/ksvwzgjXl51p1sjaqVQoTIfKAe/pK8Hcky7NWX9NsVx77x/YidJpb/Bwf3f6g==", 1718 + "dependencies": [ 1719 + "@zag-js/dom-query@1.27.1", 1720 + "@zag-js/utils@1.27.1" 1721 + ] 1722 + }, 1723 + "@zag-js/json-tree-utils@1.27.1": { 1724 + "integrity": "sha512-ugiV6V4BqKufZr2XRdZB3x4x/uxUbmfG0viMAkCYJKD5wWaMukPqUAxytJ5ybAIfnDDvRRjRzaZX+erVu5rzXA==" 1725 + }, 1726 + "@zag-js/listbox@1.27.1": { 1727 + "integrity": "sha512-qZhmdD4+Gjof21i5C0sthNz+fOylrFnKJR7HxROWOeD2vHuQi4gud5PdZubfm54p7w8huPU8RH+Aw7LsVpwQNA==", 1728 + "dependencies": [ 1729 + "@zag-js/anatomy@1.27.1", 1730 + "@zag-js/collection@1.27.1", 1731 + "@zag-js/core@1.27.1", 1732 + "@zag-js/dom-query@1.27.1", 1733 + "@zag-js/focus-visible", 1734 + "@zag-js/types@1.27.1", 1735 + "@zag-js/utils@1.27.1" 1736 + ] 1737 + }, 1738 + "@zag-js/live-region@0.62.1": { 1739 + "integrity": "sha512-Giu7d5UWc2Sqb3/T0tSzqSwxJ4mVrNN+MTu06J7EaD4khK5RgX4GRpQ9rpwOS/GJT+8nc6YBhWTi7tqKN/+iHQ==" 1740 + }, 1741 + "@zag-js/live-region@1.27.1": { 1742 + "integrity": "sha512-T5cMSazmWC9AYKHinJQPZSc2bnokF8zK8ly4NGApv6ExM6Mf5wQoH6sJIcv7dhRFfPUFVRndVdKHnWxZjTb8Og==" 1743 + }, 1744 + "@zag-js/marquee@1.27.1": { 1745 + "integrity": "sha512-d0+7SXxsuTdHf6JD4uQFUfKWpEhsi5wEb4TCb6bRDdgkN+iJq1d/lsGx1tTV+/95rpaHkAkbaVQB07IUQnmDiQ==", 1746 + "dependencies": [ 1747 + "@zag-js/anatomy@1.27.1", 1748 + "@zag-js/core@1.27.1", 1749 + "@zag-js/dom-query@1.27.1", 1750 + "@zag-js/types@1.27.1", 1751 + "@zag-js/utils@1.27.1" 1752 + ] 1753 + }, 1754 + "@zag-js/menu@0.62.1": { 1755 + "integrity": "sha512-l/PartHj6//NMlENYNBmUmeYG9K0SbjbnnIudv+rK+oyrUoX/MDCJ7bdy7ZMYxWTR127WdZlLHBxsgMe86lBqQ==", 1756 + "dependencies": [ 1757 + "@zag-js/anatomy@0.62.1", 1758 + "@zag-js/core@0.62.1", 1759 + "@zag-js/dismissable@0.62.1", 1760 + "@zag-js/dom-event", 1761 + "@zag-js/dom-query@0.62.1", 1762 + "@zag-js/popper@0.62.1", 1763 + "@zag-js/rect-utils@0.62.1", 1764 + "@zag-js/types@0.62.1", 1765 + "@zag-js/utils@0.62.1" 1766 + ] 1767 + }, 1768 + "@zag-js/menu@1.27.1": { 1769 + "integrity": "sha512-e4U7zbfOF6fXphJvP2xaIKTmnKR75pp6gYGUqJUVQo0VIqQh2Ax5VcPq6JcUQE8UWGRQxwuMn9tzEpXGDWm6QA==", 1770 + "dependencies": [ 1771 + "@zag-js/anatomy@1.27.1", 1772 + "@zag-js/core@1.27.1", 1773 + "@zag-js/dismissable@1.27.1", 1774 + "@zag-js/dom-query@1.27.1", 1775 + "@zag-js/popper@1.27.1", 1776 + "@zag-js/rect-utils@1.27.1", 1777 + "@zag-js/types@1.27.1", 1778 + "@zag-js/utils@1.27.1" 1779 + ] 1780 + }, 1781 + "@zag-js/number-input@0.62.1": { 1782 + "integrity": "sha512-THizFB4Qwq4erMk6mI82voIo/PbbrAOSQXyPF8NPyGupSzqYntS1XPEdyqFH677PhHweelxQnvtZEm5alm1HLw==", 1783 + "dependencies": [ 1784 + "@internationalized/number@3.5.3", 1785 + "@zag-js/anatomy@0.62.1", 1786 + "@zag-js/core@0.62.1", 1787 + "@zag-js/dom-event", 1788 + "@zag-js/dom-query@0.62.1", 1789 + "@zag-js/form-utils", 1790 + "@zag-js/number-utils", 1791 + "@zag-js/types@0.62.1", 1792 + "@zag-js/utils@0.62.1" 1793 + ] 1794 + }, 1795 + "@zag-js/number-input@1.27.1": { 1796 + "integrity": "sha512-oK3cc11apnQzWT6dfAbevrWm0LCKNXDkIudlI2U9FZ8JIsTLO8K4KeGSFGNPA3d6KuNLrhDWC4GsAe+fGdTL6Q==", 1797 + "dependencies": [ 1798 + "@internationalized/number@3.6.5", 1799 + "@zag-js/anatomy@1.27.1", 1800 + "@zag-js/core@1.27.1", 1801 + "@zag-js/dom-query@1.27.1", 1802 + "@zag-js/types@1.27.1", 1803 + "@zag-js/utils@1.27.1" 1804 + ] 1805 + }, 1806 + "@zag-js/number-utils@0.62.1": { 1807 + "integrity": "sha512-ktnGSYKKLG9No14ivlboEzq4+jiOIWU+8yeoRrZmfdCG58g4s9JF0lBDRf3ts9vhUdofJ+vUFMPqkk2eCWyQlA==" 1808 + }, 1809 + "@zag-js/numeric-range@0.62.1": { 1810 + "integrity": "sha512-R4/II5MvS+eJ880srPuIlexqRH7kVsGomcsDlB5yyhHsradm7OJfC5L6osvKj1DNAitfFh8901BZFaWmQe8O1w==" 1811 + }, 1812 + "@zag-js/pagination@0.62.1": { 1813 + "integrity": "sha512-fyDXNnAGyRsQEugvNR1kfEO8hGeesOV6l2rEACdvNN6G9Cqktqd52aaWVIf805G3Ig72igW2SybI9md/rDflzQ==", 1814 + "dependencies": [ 1815 + "@zag-js/anatomy@0.62.1", 1816 + "@zag-js/core@0.62.1", 1817 + "@zag-js/dom-query@0.62.1", 1818 + "@zag-js/types@0.62.1", 1819 + "@zag-js/utils@0.62.1" 1820 + ] 1821 + }, 1822 + "@zag-js/pagination@1.27.1": { 1823 + "integrity": "sha512-tg23cP07weOtjNeEqOqS3Ilic3ikaIYQ7s9wi/JjvKUPMS+bi/LZRM12cfLD1tIwSUYjjLkr/reTnrYU3s2lZQ==", 1824 + "dependencies": [ 1825 + "@zag-js/anatomy@1.27.1", 1826 + "@zag-js/core@1.27.1", 1827 + "@zag-js/dom-query@1.27.1", 1828 + "@zag-js/types@1.27.1", 1829 + "@zag-js/utils@1.27.1" 1830 + ] 1831 + }, 1832 + "@zag-js/password-input@1.27.1": { 1833 + "integrity": "sha512-L6fodHRVxud5aIBh7v0dayOzrK11WaTO6CBGNC/HELf2xvFR4bs7vOPJ/NbKh1UHMZDe3s/nbwxVHpM//JpLcQ==", 1834 + "dependencies": [ 1835 + "@zag-js/anatomy@1.27.1", 1836 + "@zag-js/core@1.27.1", 1837 + "@zag-js/dom-query@1.27.1", 1838 + "@zag-js/types@1.27.1", 1839 + "@zag-js/utils@1.27.1" 1840 + ] 1841 + }, 1842 + "@zag-js/pin-input@0.62.1": { 1843 + "integrity": "sha512-CTAOyQCLaNSWH29bhc4XruEkvnYFJN1QF/x5axtHV+cir05zcdB3L7Sna4D6nUBSwd0tOGnUmPlviyP7zkpgBA==", 1844 + "dependencies": [ 1845 + "@zag-js/anatomy@0.62.1", 1846 + "@zag-js/core@0.62.1", 1847 + "@zag-js/dom-event", 1848 + "@zag-js/dom-query@0.62.1", 1849 + "@zag-js/form-utils", 1850 + "@zag-js/types@0.62.1", 1851 + "@zag-js/utils@0.62.1" 1852 + ] 1853 + }, 1854 + "@zag-js/pin-input@1.27.1": { 1855 + "integrity": "sha512-FEJ+hk6oO23ofSaS1DqnSLS8AMkJ4Aw1N1Ny+crwmLCr+29cuNtsgZos8WxRhKguZKW4AqIjgrtIAPJEgDeHFw==", 1856 + "dependencies": [ 1857 + "@zag-js/anatomy@1.27.1", 1858 + "@zag-js/core@1.27.1", 1859 + "@zag-js/dom-query@1.27.1", 1860 + "@zag-js/types@1.27.1", 1861 + "@zag-js/utils@1.27.1" 1862 + ] 1863 + }, 1864 + "@zag-js/popover@0.62.1": { 1865 + "integrity": "sha512-cT6okb5Yq69YWx6G1vonNEnEg4MlBXRbXLflLBqOP1PTwhk6RwlndXGV2uCdlnR0mUJa/RKldzdUcwOQesJaag==", 1866 + "dependencies": [ 1867 + "@zag-js/anatomy@0.62.1", 1868 + "@zag-js/aria-hidden@0.62.1", 1869 + "@zag-js/core@0.62.1", 1870 + "@zag-js/dismissable@0.62.1", 1871 + "@zag-js/dom-query@0.62.1", 1872 + "@zag-js/popper@0.62.1", 1873 + "@zag-js/remove-scroll@0.62.1", 1874 + "@zag-js/types@0.62.1", 1875 + "@zag-js/utils@0.62.1", 1876 + "focus-trap" 1877 + ] 1878 + }, 1879 + "@zag-js/popover@1.27.1": { 1880 + "integrity": "sha512-HvzogYsWhA2eVavSDJKsA98jzU95r/bSc6SsutnMp32afqf6eo2cZDOMm29tjzP2RPmZFYMwXVrQ4VZB4mIhXw==", 1881 + "dependencies": [ 1882 + "@zag-js/anatomy@1.27.1", 1883 + "@zag-js/aria-hidden@1.27.1", 1884 + "@zag-js/core@1.27.1", 1885 + "@zag-js/dismissable@1.27.1", 1886 + "@zag-js/dom-query@1.27.1", 1887 + "@zag-js/focus-trap", 1888 + "@zag-js/popper@1.27.1", 1889 + "@zag-js/remove-scroll@1.27.1", 1890 + "@zag-js/types@1.27.1", 1891 + "@zag-js/utils@1.27.1" 1892 + ] 1893 + }, 1894 + "@zag-js/popper@0.62.1": { 1895 + "integrity": "sha512-tyLEdYIsv3cgnWCWzPPv9f72hzmQDQcObDIczIZt+OQr89qgyhGHt5jR1f0Qxsz9zZlSPsEftccyXRQYInQtxQ==", 1896 + "dependencies": [ 1897 + "@floating-ui/dom@1.6.8", 1898 + "@zag-js/dom-query@0.62.1", 1899 + "@zag-js/utils@0.62.1" 1900 + ] 1901 + }, 1902 + "@zag-js/popper@1.27.1": { 1903 + "integrity": "sha512-ac9YpcIvhd9+QDhm85E0BzPmjTuAWc/FRQOhG/EWKSUDvFZGNAcXLSVS6zxIWPEdY2vDG3Ri9jpCNv89bzzpoQ==", 1904 + "dependencies": [ 1905 + "@floating-ui/dom@1.7.4", 1906 + "@zag-js/dom-query@1.27.1", 1907 + "@zag-js/utils@1.27.1" 1908 + ] 1909 + }, 1910 + "@zag-js/presence@0.62.1": { 1911 + "integrity": "sha512-qjnr1WpW5yetRp2j2V0ocRvr6X6TuWNxjL2DyJAusodcsSElF2V0UuFOLT/xIZA8BVIbgcyCvcPB01PHugC5Ww==", 1912 + "dependencies": [ 1913 + "@zag-js/core@0.62.1", 1914 + "@zag-js/types@0.62.1" 1915 + ] 1916 + }, 1917 + "@zag-js/presence@1.27.1": { 1918 + "integrity": "sha512-8riBzIC8XWiGdNWoUex6GnRo4/ykkeqcuiPCP6Lm67Kdi9hTCOuu3v8BdHgRkb4LxMg1LW7v+d7maCm5My9PMA==", 1919 + "dependencies": [ 1920 + "@zag-js/core@1.27.1", 1921 + "@zag-js/dom-query@1.27.1", 1922 + "@zag-js/types@1.27.1" 1923 + ] 1924 + }, 1925 + "@zag-js/progress@0.62.1": { 1926 + "integrity": "sha512-7FyeP/wCiJ2dao1y/4RzhrLeIse305YtRMTDaVE5EnOJK3nit2Rrl+z8kGx5aqrGQcGsLH/rh5QYFp689Nx57Q==", 1927 + "dependencies": [ 1928 + "@zag-js/anatomy@0.62.1", 1929 + "@zag-js/core@0.62.1", 1930 + "@zag-js/dom-query@0.62.1", 1931 + "@zag-js/types@0.62.1", 1932 + "@zag-js/utils@0.62.1" 1933 + ] 1934 + }, 1935 + "@zag-js/progress@1.27.1": { 1936 + "integrity": "sha512-mBat/fn7jhuZXg+UBZMAQv3uL9W/HoDcrzm606PNycD+QyHFe8J1kpzHr8hFUFtCTzSDzmd5kf9zP0hieVPQTQ==", 1937 + "dependencies": [ 1938 + "@zag-js/anatomy@1.27.1", 1939 + "@zag-js/core@1.27.1", 1940 + "@zag-js/dom-query@1.27.1", 1941 + "@zag-js/types@1.27.1", 1942 + "@zag-js/utils@1.27.1" 1943 + ] 1944 + }, 1945 + "@zag-js/qr-code@0.62.1": { 1946 + "integrity": "sha512-648qXQduIqq4CZWN07D1UOcczZrdp3UjBSHFEi4PQHTz1Vg08pH0BIZDqiqpupG9niYJEB/GPLGofRQQYoIoDw==", 1947 + "dependencies": [ 1948 + "@zag-js/anatomy@0.62.1", 1949 + "@zag-js/core@0.62.1", 1950 + "@zag-js/dom-query@0.62.1", 1951 + "@zag-js/types@0.62.1", 1952 + "@zag-js/utils@0.62.1", 1953 + "proxy-memoize", 1954 + "uqr" 1955 + ] 1956 + }, 1957 + "@zag-js/qr-code@1.27.1": { 1958 + "integrity": "sha512-o3cGKXVf7Jea4lDPs5hcA6+8D811d6rt+V4L9mf5OKWdbOi4meGpy1lNNn7szvmtvTOkQcDd6ozRprk/jI1LJA==", 1959 + "dependencies": [ 1960 + "@zag-js/anatomy@1.27.1", 1961 + "@zag-js/core@1.27.1", 1962 + "@zag-js/dom-query@1.27.1", 1963 + "@zag-js/types@1.27.1", 1964 + "@zag-js/utils@1.27.1", 1965 + "proxy-memoize", 1966 + "uqr" 1967 + ] 1968 + }, 1969 + "@zag-js/radio-group@0.62.1": { 1970 + "integrity": "sha512-VVGTUkHgD27vBTYeP7hPYi+eDRXkq7xtlv6Ml062t3gcTWBhc/2eaI6iZ7awlxTl9052sflzbawrrDysPREuAQ==", 1971 + "dependencies": [ 1972 + "@zag-js/anatomy@0.62.1", 1973 + "@zag-js/core@0.62.1", 1974 + "@zag-js/dom-query@0.62.1", 1975 + "@zag-js/element-rect", 1976 + "@zag-js/form-utils", 1977 + "@zag-js/types@0.62.1", 1978 + "@zag-js/utils@0.62.1" 1979 + ] 1980 + }, 1981 + "@zag-js/radio-group@1.27.1": { 1982 + "integrity": "sha512-P1IHUrXv9iMHwLNdcIRoW0DQGfJ2DoMREWOohy8Gdekoo4/+xOGbr9qi9++QN//HMLsbB1cnD7+7WqqEZU1Hkw==", 1983 + "dependencies": [ 1984 + "@zag-js/anatomy@1.27.1", 1985 + "@zag-js/core@1.27.1", 1986 + "@zag-js/dom-query@1.27.1", 1987 + "@zag-js/focus-visible", 1988 + "@zag-js/types@1.27.1", 1989 + "@zag-js/utils@1.27.1" 1990 + ] 1991 + }, 1992 + "@zag-js/rating-group@0.62.1": { 1993 + "integrity": "sha512-gXvHofr3gfZcaMh7Y3FU+wyj7ge1R0BgsuPJWFUShlAlxjnnE7e3AqjSGlzuvpkWMkc6KKDyKRJlMVWLCv94OA==", 1994 + "dependencies": [ 1995 + "@zag-js/anatomy@0.62.1", 1996 + "@zag-js/core@0.62.1", 1997 + "@zag-js/dom-event", 1998 + "@zag-js/dom-query@0.62.1", 1999 + "@zag-js/form-utils", 2000 + "@zag-js/types@0.62.1", 2001 + "@zag-js/utils@0.62.1" 2002 + ] 2003 + }, 2004 + "@zag-js/rating-group@1.27.1": { 2005 + "integrity": "sha512-bjsWkUwMtlm0Jsajz4j14ULFEeYtGTShqPZvFuVDrEX8xSuZXujfxOdY0dphc0EreyjL1YjvYboAXvYsVbOaVw==", 2006 + "dependencies": [ 2007 + "@zag-js/anatomy@1.27.1", 2008 + "@zag-js/core@1.27.1", 2009 + "@zag-js/dom-query@1.27.1", 2010 + "@zag-js/types@1.27.1", 2011 + "@zag-js/utils@1.27.1" 2012 + ] 2013 + }, 2014 + "@zag-js/rect-utils@0.62.1": { 2015 + "integrity": "sha512-6w56LuRD382Oa2FXi4AfKQqgtUPS/nc/mZzXiaqKz9b5aFA1CXtmEwNC2GaiXhkqJp5DyxHwujDfQP1WXACnRQ==" 2016 + }, 2017 + "@zag-js/rect-utils@1.27.1": { 2018 + "integrity": "sha512-BYq+dVrNt+H4hX7wkS3j9ZK+BNKrb1f9vm52D5+TnNs61coidfY5zmhOqQjkgSVBWblDqYWrLskNCymW7t5MVA==" 2019 + }, 2020 + "@zag-js/remove-scroll@0.62.1": { 2021 + "integrity": "sha512-7xpX6HUrOEq/TNLIWojYnQf7kj20bk8ueOKpu7cTZmoN0LSL6cS09uil+NOqb+SzZsiRmQKvzd3fQBNwbdab5Q==", 2022 + "dependencies": [ 2023 + "@zag-js/dom-query@0.62.1" 2024 + ] 2025 + }, 2026 + "@zag-js/remove-scroll@1.27.1": { 2027 + "integrity": "sha512-MOnQXzifbeEuW/XgDMbb76wbWdaq++DEwE6CLmMQZhAR4rJUNIYVhcOFVqBWwMcMIJkvK8ROZucTPxOPmTHz1Q==", 2028 + "dependencies": [ 2029 + "@zag-js/dom-query@1.27.1" 2030 + ] 2031 + }, 2032 + "@zag-js/scroll-area@1.27.1": { 2033 + "integrity": "sha512-lfAsmdiKv6racE+rlwUJkgqjIOjjCyJcWNkM4JKZzKCI6jlqKBUOhmNjJcqiIYtGXFapaslXJrcIOTxW7nZoEg==", 2034 + "dependencies": [ 2035 + "@zag-js/anatomy@1.27.1", 2036 + "@zag-js/core@1.27.1", 2037 + "@zag-js/dom-query@1.27.1", 2038 + "@zag-js/types@1.27.1", 2039 + "@zag-js/utils@1.27.1" 2040 + ] 2041 + }, 2042 + "@zag-js/scroll-snap@1.27.1": { 2043 + "integrity": "sha512-XTwox/aHb0J51v0ycObadvDjeA26bZwadAm+5pr1Eic1Tf8gUcMLpwEHBqlp3vay58UzrPWhqCEBKsgYwYgNEA==", 2044 + "dependencies": [ 2045 + "@zag-js/dom-query@1.27.1" 2046 + ] 2047 + }, 2048 + "@zag-js/select@0.62.1": { 2049 + "integrity": "sha512-dgU65imBSeB8+QfHkN68j7Xqd/d6wsF42itJ0AeRSdgnCHgTWdN9rRCK5EDbNkJue51oMkdsnJ7XG1k+oCgiAg==", 2050 + "dependencies": [ 2051 + "@zag-js/anatomy@0.62.1", 2052 + "@zag-js/collection@0.62.1", 2053 + "@zag-js/core@0.62.1", 2054 + "@zag-js/dismissable@0.62.1", 2055 + "@zag-js/dom-event", 2056 + "@zag-js/dom-query@0.62.1", 2057 + "@zag-js/form-utils", 2058 + "@zag-js/popper@0.62.1", 2059 + "@zag-js/types@0.62.1", 2060 + "@zag-js/utils@0.62.1" 2061 + ] 2062 + }, 2063 + "@zag-js/select@1.27.1": { 2064 + "integrity": "sha512-yZUid+GkASbxsuXeCxn2nK7DoZOBG3fmCR/wJSlBQu/kYkXUPcy1MmrZHakmJNFr6MvrP8RVYV7O3Jr1mPBgaA==", 2065 + "dependencies": [ 2066 + "@zag-js/anatomy@1.27.1", 2067 + "@zag-js/collection@1.27.1", 2068 + "@zag-js/core@1.27.1", 2069 + "@zag-js/dismissable@1.27.1", 2070 + "@zag-js/dom-query@1.27.1", 2071 + "@zag-js/popper@1.27.1", 2072 + "@zag-js/types@1.27.1", 2073 + "@zag-js/utils@1.27.1" 2074 + ] 2075 + }, 2076 + "@zag-js/signature-pad@0.62.1": { 2077 + "integrity": "sha512-hWZSWT9J9V1kbImkj8qXHCqS0TYm7nms9oAhcQ2QNIiGO38wqW8Yswos8sqAj8VtzHxkSMIeL1by7Zgy3Xjq9g==", 2078 + "dependencies": [ 2079 + "@zag-js/anatomy@0.62.1", 2080 + "@zag-js/core@0.62.1", 2081 + "@zag-js/dom-event", 2082 + "@zag-js/dom-query@0.62.1", 2083 + "@zag-js/types@0.62.1", 2084 + "@zag-js/utils@0.62.1", 2085 + "perfect-freehand" 2086 + ] 2087 + }, 2088 + "@zag-js/signature-pad@1.27.1": { 2089 + "integrity": "sha512-NuyKmZwfjBZ+PJb04xQjYf9wTkBMdU9XTS/4cpEWAOK0DoErq4kiqrV/yExPB7V7KtIEIkC4Xd+WgMOD6K1vBQ==", 2090 + "dependencies": [ 2091 + "@zag-js/anatomy@1.27.1", 2092 + "@zag-js/core@1.27.1", 2093 + "@zag-js/dom-query@1.27.1", 2094 + "@zag-js/types@1.27.1", 2095 + "@zag-js/utils@1.27.1", 2096 + "perfect-freehand" 2097 + ] 2098 + }, 2099 + "@zag-js/slider@0.62.1": { 2100 + "integrity": "sha512-v5rgPJF3fh7bBPu0wzEGpN4EcXpK5cSw4OAwxatmbtkYsg2Udwv6WL26CB5Q2zVwYIR6R532b/bjFqicfVs+SA==", 2101 + "dependencies": [ 2102 + "@zag-js/anatomy@0.62.1", 2103 + "@zag-js/core@0.62.1", 2104 + "@zag-js/dom-event", 2105 + "@zag-js/dom-query@0.62.1", 2106 + "@zag-js/element-size", 2107 + "@zag-js/form-utils", 2108 + "@zag-js/numeric-range", 2109 + "@zag-js/types@0.62.1", 2110 + "@zag-js/utils@0.62.1" 2111 + ] 2112 + }, 2113 + "@zag-js/slider@1.27.1": { 2114 + "integrity": "sha512-p6zyMLU6cBtubk5673q2wk9JqCHf0l8my7nWY16KWqLWd68IFBSp7wrOyTYa0ifZ9CvmZZSjdL/w2TFJ4SHVKQ==", 2115 + "dependencies": [ 2116 + "@zag-js/anatomy@1.27.1", 2117 + "@zag-js/core@1.27.1", 2118 + "@zag-js/dom-query@1.27.1", 2119 + "@zag-js/types@1.27.1", 2120 + "@zag-js/utils@1.27.1" 2121 + ] 2122 + }, 2123 + "@zag-js/solid@1.27.1_solid-js@1.9.10__seroval@1.3.2": { 2124 + "integrity": "sha512-3r3VOWDjW3g7wkxA0AivdM3aiurwrXywwbII6FjHaIL4SrEe7OvAtE7hKHSPlKdCRS9Z0ZVt6C/uKYm/YFo9+Q==", 2125 + "dependencies": [ 2126 + "@solid-primitives/keyed", 2127 + "@zag-js/core@1.27.1", 2128 + "@zag-js/store@1.27.1", 2129 + "@zag-js/types@1.27.1", 2130 + "@zag-js/utils@1.27.1", 2131 + "solid-js" 2132 + ] 2133 + }, 2134 + "@zag-js/splitter@0.62.1": { 2135 + "integrity": "sha512-Ni93ZaprnbctAsbuot8sEw9DDfNMgkelnd5xQfAiwpgjwUgnY8733LRbWydC5OUPoJ/cCs3XiNKa0CHwclcq6Q==", 2136 + "dependencies": [ 2137 + "@zag-js/anatomy@0.62.1", 2138 + "@zag-js/core@0.62.1", 2139 + "@zag-js/dom-event", 2140 + "@zag-js/dom-query@0.62.1", 2141 + "@zag-js/number-utils", 2142 + "@zag-js/types@0.62.1", 2143 + "@zag-js/utils@0.62.1" 2144 + ] 2145 + }, 2146 + "@zag-js/splitter@1.27.1": { 2147 + "integrity": "sha512-y7xKYI2d6LxHiWJ/RFl96s+PBr7gEs6J7xLiJ0hP+tqyFDeJ3215slIAuXA7Zkk8OLLcgj6f4QDEQ3xXwZl9EA==", 2148 + "dependencies": [ 2149 + "@zag-js/anatomy@1.27.1", 2150 + "@zag-js/core@1.27.1", 2151 + "@zag-js/dom-query@1.27.1", 2152 + "@zag-js/types@1.27.1", 2153 + "@zag-js/utils@1.27.1" 2154 + ] 2155 + }, 2156 + "@zag-js/steps@1.27.1": { 2157 + "integrity": "sha512-RciH9pg3Li3u1BFZlDjFptlrqmovy3BD8lMjcCzcn3Pr+v8AQQb1ZQku40VZ6x+ZBz7ZtIp+EZkBwY93I3YEBA==", 2158 + "dependencies": [ 2159 + "@zag-js/anatomy@1.27.1", 2160 + "@zag-js/core@1.27.1", 2161 + "@zag-js/dom-query@1.27.1", 2162 + "@zag-js/types@1.27.1", 2163 + "@zag-js/utils@1.27.1" 2164 + ] 2165 + }, 2166 + "@zag-js/store@0.62.1": { 2167 + "integrity": "sha512-0xkz7b/Rs9cHeI5CB3UH4yMlVzys3l+IsJU3KRWZwqWohDjTEqRyzcuFD6AH28WAcJPjIgOQYnRYzYSoMGZtDQ==", 2168 + "dependencies": [ 2169 + "proxy-compare@3.0.0" 2170 + ] 2171 + }, 2172 + "@zag-js/store@1.27.1": { 2173 + "integrity": "sha512-oK8NX9gvwi9NzjPo6oujksSli+hgh7m5ZDRM4SY7T3bBaipz7GsNZuXW+i6DMvDNObtTHbVzQ5ZaqlTQUuos0A==", 2174 + "dependencies": [ 2175 + "proxy-compare@3.0.1" 2176 + ] 2177 + }, 2178 + "@zag-js/switch@0.62.1": { 2179 + "integrity": "sha512-uh0yy3NuZqHF+jPVZ2oMcAtPx32eTnBebiROBGBDgj1A5yZBirfQm8j/vZLSILhDq9TdktHS9/gITJ7TvgV4cQ==", 2180 + "dependencies": [ 2181 + "@zag-js/anatomy@0.62.1", 2182 + "@zag-js/core@0.62.1", 2183 + "@zag-js/dom-event", 2184 + "@zag-js/dom-query@0.62.1", 2185 + "@zag-js/form-utils", 2186 + "@zag-js/types@0.62.1", 2187 + "@zag-js/utils@0.62.1" 2188 + ] 2189 + }, 2190 + "@zag-js/switch@1.27.1": { 2191 + "integrity": "sha512-IuYacFHlQsxkFCU8ABGjwhtvWARexAYS/BMQkD5W8s0cwNHR3uOLPGjrJhSkJqvx3ENpSTRRKqTwawXVeFg2BQ==", 2192 + "dependencies": [ 2193 + "@zag-js/anatomy@1.27.1", 2194 + "@zag-js/core@1.27.1", 2195 + "@zag-js/dom-query@1.27.1", 2196 + "@zag-js/focus-visible", 2197 + "@zag-js/types@1.27.1", 2198 + "@zag-js/utils@1.27.1" 2199 + ] 2200 + }, 2201 + "@zag-js/tabs@0.62.1": { 2202 + "integrity": "sha512-BpY6oA2nmZLpYu8nQrpi+zTF4txTiMYIMB31CmbFmbJ3hMVkEqk8sgNzNQY3LrzkkSemDRBHxPZ5H+YKaQrEdg==", 2203 + "dependencies": [ 2204 + "@zag-js/anatomy@0.62.1", 2205 + "@zag-js/core@0.62.1", 2206 + "@zag-js/dom-event", 2207 + "@zag-js/dom-query@0.62.1", 2208 + "@zag-js/element-rect", 2209 + "@zag-js/types@0.62.1", 2210 + "@zag-js/utils@0.62.1" 2211 + ] 2212 + }, 2213 + "@zag-js/tabs@1.27.1": { 2214 + "integrity": "sha512-jI+frE9z+wVfoqYA/7Xxr+SWix3OmjpfA7+F8GK1XPdN8atD/uYRgE7CbqwPc24fhIO/xkl1sNKRv83HaCMjvw==", 2215 + "dependencies": [ 2216 + "@zag-js/anatomy@1.27.1", 2217 + "@zag-js/core@1.27.1", 2218 + "@zag-js/dom-query@1.27.1", 2219 + "@zag-js/types@1.27.1", 2220 + "@zag-js/utils@1.27.1" 2221 + ] 2222 + }, 2223 + "@zag-js/tags-input@0.62.1": { 2224 + "integrity": "sha512-8gJ4ckQQ0BB3oUGgIEGkmB6wIKSf7xx0q6e3tqTbfZnPhmWP4hpli38XAOYjsBQyNXmQW89H/Rp8/8W1A/Vpow==", 2225 + "dependencies": [ 2226 + "@zag-js/anatomy@0.62.1", 2227 + "@zag-js/auto-resize@0.62.1", 2228 + "@zag-js/core@0.62.1", 2229 + "@zag-js/dom-event", 2230 + "@zag-js/dom-query@0.62.1", 2231 + "@zag-js/form-utils", 2232 + "@zag-js/interact-outside@0.62.1", 2233 + "@zag-js/live-region@0.62.1", 2234 + "@zag-js/types@0.62.1", 2235 + "@zag-js/utils@0.62.1" 2236 + ] 2237 + }, 2238 + "@zag-js/tags-input@1.27.1": { 2239 + "integrity": "sha512-+XUOwKFWfGwmJpl3hWK8kHq5IeuZUZaR1FgNzbO029ll3p5unBOGzEL51oCH1dpeuMY/FyXEssNLrvVgId6E3Q==", 2240 + "dependencies": [ 2241 + "@zag-js/anatomy@1.27.1", 2242 + "@zag-js/auto-resize@1.27.1", 2243 + "@zag-js/core@1.27.1", 2244 + "@zag-js/dom-query@1.27.1", 2245 + "@zag-js/interact-outside@1.27.1", 2246 + "@zag-js/live-region@1.27.1", 2247 + "@zag-js/types@1.27.1", 2248 + "@zag-js/utils@1.27.1" 2249 + ] 2250 + }, 2251 + "@zag-js/text-selection@0.62.1": { 2252 + "integrity": "sha512-0b049CnWN/Nyp/F/nbeU6G8BI/fzwlSQTTDWK81yRFADDFTZ2mWpVAWJF/fY0rKjsn4ucDykCS7GXMIo5rYILQ==", 2253 + "dependencies": [ 2254 + "@zag-js/dom-query@0.62.1" 2255 + ] 2256 + }, 2257 + "@zag-js/time-picker@0.62.1": { 2258 + "integrity": "sha512-THNASHp9Fu5f4/LC3t3qJfsYD6FqjhbP7HrjIDDFOcdNGRzOTfbEpKF3JtJgmM6F+/fuQKhe6FUbcluMd9zo8Q==", 2259 + "dependencies": [ 2260 + "@internationalized/date@3.5.5", 2261 + "@zag-js/anatomy@0.62.1", 2262 + "@zag-js/core@0.62.1", 2263 + "@zag-js/dismissable@0.62.1", 2264 + "@zag-js/dom-event", 2265 + "@zag-js/dom-query@0.62.1", 2266 + "@zag-js/popper@0.62.1", 2267 + "@zag-js/types@0.62.1", 2268 + "@zag-js/utils@0.62.1" 2269 + ] 2270 + }, 2271 + "@zag-js/timer@1.27.1": { 2272 + "integrity": "sha512-1t1APVDBoE9GcjKQHjUvfR6nlhPA6bm6JYVQj1PS04i+120fvfpcFSWAbgay2dmGcpdpFrO5W0a5vObYFQ6aXg==", 2273 + "dependencies": [ 2274 + "@zag-js/anatomy@1.27.1", 2275 + "@zag-js/core@1.27.1", 2276 + "@zag-js/dom-query@1.27.1", 2277 + "@zag-js/types@1.27.1", 2278 + "@zag-js/utils@1.27.1" 2279 + ] 2280 + }, 2281 + "@zag-js/toast@0.62.1": { 2282 + "integrity": "sha512-Kb+OiFx7KUG0fAExIL06xWEfhxeMRJACvP6q4B4FNuFX+6N06RbV/PZtLbPbffOodd7VhSk1W37T7t6Np32mvg==", 2283 + "dependencies": [ 2284 + "@zag-js/anatomy@0.62.1", 2285 + "@zag-js/core@0.62.1", 2286 + "@zag-js/dismissable@0.62.1", 2287 + "@zag-js/dom-event", 2288 + "@zag-js/dom-query@0.62.1", 2289 + "@zag-js/types@0.62.1", 2290 + "@zag-js/utils@0.62.1" 2291 + ] 2292 + }, 2293 + "@zag-js/toast@1.27.1": { 2294 + "integrity": "sha512-XfVxYlMkV8K1inmSwF+VKXkEPG/fDZcpjlj2PfbrWQu2PSD5mrJakBi1FzKfcCybp/OOD0V9Nfki1AFkhKKEwg==", 2295 + "dependencies": [ 2296 + "@zag-js/anatomy@1.27.1", 2297 + "@zag-js/core@1.27.1", 2298 + "@zag-js/dismissable@1.27.1", 2299 + "@zag-js/dom-query@1.27.1", 2300 + "@zag-js/types@1.27.1", 2301 + "@zag-js/utils@1.27.1" 2302 + ] 2303 + }, 2304 + "@zag-js/toggle-group@0.62.1": { 2305 + "integrity": "sha512-h7jQtWJt11uws6IYBd3kQzOyOemtZ5CqR7lt4XZdni3J1EtymKRJNha2JIukIETZS9/0VU1fPcuDkQeCXcGHgQ==", 2306 + "dependencies": [ 2307 + "@zag-js/anatomy@0.62.1", 2308 + "@zag-js/core@0.62.1", 2309 + "@zag-js/dom-event", 2310 + "@zag-js/dom-query@0.62.1", 2311 + "@zag-js/types@0.62.1", 2312 + "@zag-js/utils@0.62.1" 2313 + ] 2314 + }, 2315 + "@zag-js/toggle-group@1.27.1": { 2316 + "integrity": "sha512-b6KOd9ZKkWIl1vAmNIkeKrxE/ikKS5aGoseNbyFrcSPW43DwFZD24EfVIQ72/afzdTttRga0VbY1JgaCXothFw==", 2317 + "dependencies": [ 2318 + "@zag-js/anatomy@1.27.1", 2319 + "@zag-js/core@1.27.1", 2320 + "@zag-js/dom-query@1.27.1", 2321 + "@zag-js/types@1.27.1", 2322 + "@zag-js/utils@1.27.1" 2323 + ] 2324 + }, 2325 + "@zag-js/toggle@1.27.1": { 2326 + "integrity": "sha512-Klr1DzbBZ1mO6X+jwYvhEW1G/RB6DOlviKPbDQNwcma4fa+qpX0lbgSfQf/9xC8omv1sZXEDxp6dzrRUbDEyAA==", 2327 + "dependencies": [ 2328 + "@zag-js/anatomy@1.27.1", 2329 + "@zag-js/core@1.27.1", 2330 + "@zag-js/dom-query@1.27.1", 2331 + "@zag-js/types@1.27.1", 2332 + "@zag-js/utils@1.27.1" 2333 + ] 2334 + }, 2335 + "@zag-js/tooltip@0.62.1": { 2336 + "integrity": "sha512-318EJU6B4FR0nMNU79qMAgdOiVM6vbDiRWBHjGLDBK3z5No3lKfo4TZb/NqBmmi2W7ZFPiPwvLFsTql+H0xDbA==", 2337 + "dependencies": [ 2338 + "@zag-js/anatomy@0.62.1", 2339 + "@zag-js/core@0.62.1", 2340 + "@zag-js/dom-event", 2341 + "@zag-js/dom-query@0.62.1", 2342 + "@zag-js/popper@0.62.1", 2343 + "@zag-js/types@0.62.1", 2344 + "@zag-js/utils@0.62.1" 2345 + ] 2346 + }, 2347 + "@zag-js/tooltip@1.27.1": { 2348 + "integrity": "sha512-RVMFFdqX7HaSoO4GEHikRzrScelwVMr+mbTfrCcGx1i/9AWf7YmNh1P9p3QMIkP2/9TB9FfQfqU7Flyz0qc3Iw==", 2349 + "dependencies": [ 2350 + "@zag-js/anatomy@1.27.1", 2351 + "@zag-js/core@1.27.1", 2352 + "@zag-js/dom-query@1.27.1", 2353 + "@zag-js/focus-visible", 2354 + "@zag-js/popper@1.27.1", 2355 + "@zag-js/types@1.27.1", 2356 + "@zag-js/utils@1.27.1" 2357 + ] 2358 + }, 2359 + "@zag-js/tour@1.27.1": { 2360 + "integrity": "sha512-0VgJEvGNtiuhw/sy2zmG93gwBas5sOjfbqPsCxDr1zyRCHjYIUOG1FhbJmH9Lo6Y+CowQ4j+FRzYAnjHjPp8mg==", 2361 + "dependencies": [ 2362 + "@zag-js/anatomy@1.27.1", 2363 + "@zag-js/core@1.27.1", 2364 + "@zag-js/dismissable@1.27.1", 2365 + "@zag-js/dom-query@1.27.1", 2366 + "@zag-js/focus-trap", 2367 + "@zag-js/interact-outside@1.27.1", 2368 + "@zag-js/popper@1.27.1", 2369 + "@zag-js/types@1.27.1", 2370 + "@zag-js/utils@1.27.1" 2371 + ] 2372 + }, 2373 + "@zag-js/tree-view@0.62.1": { 2374 + "integrity": "sha512-Y7qj16X18uElsD5jA9l03+rKEg1/5JIGRutO+NlEbs9Ffb7y34vqcEWquA+YgDfqXVWk2b5v9xcU1iKuKhOagQ==", 2375 + "dependencies": [ 2376 + "@zag-js/anatomy@0.62.1", 2377 + "@zag-js/core@0.62.1", 2378 + "@zag-js/dom-event", 2379 + "@zag-js/dom-query@0.62.1", 2380 + "@zag-js/types@0.62.1", 2381 + "@zag-js/utils@0.62.1" 2382 + ] 2383 + }, 2384 + "@zag-js/tree-view@1.27.1": { 2385 + "integrity": "sha512-YrP/F1d93/fXKtrN1Uhmzv9i13o39cLPno8X0i7PWvPVUv7HH+RqM0JZVROOQqhCWNUvkv/klGuGw5StP/RJGQ==", 2386 + "dependencies": [ 2387 + "@zag-js/anatomy@1.27.1", 2388 + "@zag-js/collection@1.27.1", 2389 + "@zag-js/core@1.27.1", 2390 + "@zag-js/dom-query@1.27.1", 2391 + "@zag-js/types@1.27.1", 2392 + "@zag-js/utils@1.27.1" 2393 + ] 2394 + }, 2395 + "@zag-js/types@0.62.1": { 2396 + "integrity": "sha512-wjJvasoxg/rsFhMTaGLJEjYnSGaXz7DymtO+wWOIfa+O6y44flHc8wRQ1l6ZRRetCz4RALTuwhZI+0ESZ1Bpwg==", 2397 + "dependencies": [ 2398 + "csstype" 2399 + ] 2400 + }, 2401 + "@zag-js/types@1.27.1": { 2402 + "integrity": "sha512-t7AtcXElKEjvvRlC1gcDmKgtIeiOtCL3vWf8K8kq7nVhq29q7PHtXB5ywn+R+CWnqJOmIDezKZjC1emXZKF0OA==", 2403 + "dependencies": [ 2404 + "csstype" 2405 + ] 2406 + }, 2407 + "@zag-js/utils@0.62.1": { 2408 + "integrity": "sha512-90sk7Li2mqoMCAfZbns1xrySEg4PIFPwLpiRO/T2kvKpc9z/qsq2WqDFpS8eqHfYRmkLnmQa0Bw1LzItYYsGVQ==" 2409 + }, 2410 + "@zag-js/utils@1.27.1": { 2411 + "integrity": "sha512-AHSd3VeiBvVoa8lAUe7YsCzk37X9zn2jKiYv13k5Ac+NnbYRbpWzZZZUfNGbFAsu5cSE4X1HUw38H1GTuBeWNQ==" 2412 + }, 2413 + "ajv@8.17.1": { 2414 + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", 2415 + "dependencies": [ 2416 + "fast-deep-equal", 2417 + "fast-uri", 2418 + "json-schema-traverse", 2419 + "require-from-string" 2420 + ] 2421 + }, 2422 + "ansi-colors@4.1.3": { 2423 + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" 2424 + }, 2425 + "ansi-regex@5.0.1": { 2426 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 2427 + }, 2428 + "ansi-styles@4.3.0": { 2429 + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2430 + "dependencies": [ 2431 + "color-convert" 2432 + ] 2433 + }, 2434 + "astral-regex@2.0.0": { 2435 + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" 2436 + }, 2437 + "babel-plugin-jsx-dom-expressions@0.40.3_@babel+core@7.28.5": { 2438 + "integrity": "sha512-5HOwwt0BYiv/zxl7j8Pf2bGL6rDXfV6nUhLs8ygBX+EFJXzBPHM/euj9j/6deMZ6wa52Wb2PBaAV5U/jKwIY1w==", 2439 + "dependencies": [ 2440 + "@babel/core", 2441 + "@babel/helper-module-imports@7.18.6", 2442 + "@babel/plugin-syntax-jsx", 2443 + "@babel/types", 2444 + "html-entities", 2445 + "parse5" 2446 + ] 2447 + }, 2448 + "babel-preset-solid@1.9.10_@babel+core@7.28.5_solid-js@1.9.10__seroval@1.3.2": { 2449 + "integrity": "sha512-HCelrgua/Y+kqO8RyL04JBWS/cVdrtUv/h45GntgQY+cJl4eBcKkCDV3TdMjtKx1nXwRaR9QXslM/Npm1dxdZQ==", 2450 + "dependencies": [ 2451 + "@babel/core", 2452 + "babel-plugin-jsx-dom-expressions", 2453 + "solid-js" 2454 + ], 2455 + "optionalPeers": [ 2456 + "solid-js" 2457 + ] 2458 + }, 2459 + "baseline-browser-mapping@2.8.28": { 2460 + "integrity": "sha512-gYjt7OIqdM0PcttNYP2aVrr2G0bMALkBaoehD4BuRGjAOtipg0b6wHg1yNL+s5zSnLZZrGHOw4IrND8CD+3oIQ==", 2461 + "bin": true 2462 + }, 2463 + "braces@3.0.3": { 2464 + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 2465 + "dependencies": [ 2466 + "fill-range" 2467 + ] 2468 + }, 2469 + "browserslist@4.24.4": { 2470 + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", 2471 + "dependencies": [ 2472 + "caniuse-lite", 2473 + "electron-to-chromium", 2474 + "node-releases", 2475 + "update-browserslist-db@1.1.4_browserslist@4.24.4" 2476 + ], 2477 + "bin": true 2478 + }, 2479 + "browserslist@4.28.0": { 2480 + "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", 2481 + "dependencies": [ 2482 + "baseline-browser-mapping", 2483 + "caniuse-lite", 2484 + "electron-to-chromium", 2485 + "node-releases", 2486 + "update-browserslist-db@1.1.4_browserslist@4.28.0" 2487 + ], 2488 + "bin": true 2489 + }, 2490 + "bundle-n-require@1.1.2": { 2491 + "integrity": "sha512-bEk2jakVK1ytnZ9R2AAiZEeK/GxPUM8jvcRxHZXifZDMcjkI4EG/GlsJ2YGSVYT9y/p/gA9/0yDY8rCGsSU6Tg==", 2492 + "dependencies": [ 2493 + "esbuild", 2494 + "node-eval" 2495 + ] 2496 + }, 2497 + "cac@6.7.14": { 2498 + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==" 2499 + }, 2500 + "caniuse-api@3.0.0": { 2501 + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", 2502 + "dependencies": [ 2503 + "browserslist@4.28.0", 2504 + "caniuse-lite", 2505 + "lodash.memoize", 2506 + "lodash.uniq" 2507 + ] 2508 + }, 2509 + "caniuse-lite@1.0.30001755": { 2510 + "integrity": "sha512-44V+Jm6ctPj7R52Na4TLi3Zri4dWUljJd+RDm+j8LtNCc/ihLCT+X1TzoOAkRETEWqjuLnh9581Tl80FvK7jVA==" 2511 + }, 2512 + "chokidar@4.0.3": { 2513 + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", 2514 + "dependencies": [ 2515 + "readdirp" 2516 + ] 2517 + }, 2518 + "code-block-writer@13.0.3": { 2519 + "integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==" 2520 + }, 2521 + "color-convert@2.0.1": { 2522 + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2523 + "dependencies": [ 2524 + "color-name" 2525 + ] 2526 + }, 2527 + "color-name@1.1.4": { 2528 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 2529 + }, 2530 + "confbox@0.2.2": { 2531 + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==" 2532 + }, 2533 + "convert-source-map@2.0.0": { 2534 + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" 2535 + }, 2536 + "crosspath@2.0.0": { 2537 + "integrity": "sha512-ju88BYCQ2uvjO2bR+SsgLSTwTSctU+6Vp2ePbKPgSCZyy4MWZxYsT738DlKVRE5utUjobjPRm1MkTYKJxCmpTA==", 2538 + "dependencies": [ 2539 + "@types/node" 2540 + ] 2541 + }, 2542 + "cssesc@3.0.0": { 2543 + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 2544 + "bin": true 2545 + }, 2546 + "cssnano-utils@5.0.1_postcss@8.5.6": { 2547 + "integrity": "sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg==", 2548 + "dependencies": [ 2549 + "postcss" 2550 + ] 2551 + }, 2552 + "csstype@3.1.3": { 2553 + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" 2554 + }, 2555 + "debug@4.4.3": { 2556 + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", 2557 + "dependencies": [ 2558 + "ms" 2559 + ] 2560 + }, 2561 + "detect-libc@1.0.3": { 2562 + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", 2563 + "bin": true 2564 + }, 2565 + "effect@3.10.15": { 2566 + "integrity": "sha512-LdczPAFbtij3xGr9i+8PyDtuWdlXjSY5UJ8PKrYrr0DClKfR/OW3j8sxtambWYljzJAYD865KFhv7LdbWdG7VQ==", 2567 + "dependencies": [ 2568 + "fast-check" 2569 + ] 2570 + }, 2571 + "electron-to-chromium@1.5.254": { 2572 + "integrity": "sha512-DcUsWpVhv9svsKRxnSCZ86SjD+sp32SGidNB37KpqXJncp1mfUgKbHvBomE89WJDbfVKw1mdv5+ikrvd43r+Bg==" 2573 + }, 2574 + "emoji-regex@8.0.0": { 2575 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 2576 + }, 2577 + "entities@4.5.0": { 2578 + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" 2579 + }, 2580 + "entities@6.0.1": { 2581 + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==" 2582 + }, 2583 + "esbuild@0.25.12": { 2584 + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", 2585 + "optionalDependencies": [ 2586 + "@esbuild/aix-ppc64", 2587 + "@esbuild/android-arm", 2588 + "@esbuild/android-arm64", 2589 + "@esbuild/android-x64", 2590 + "@esbuild/darwin-arm64", 2591 + "@esbuild/darwin-x64", 2592 + "@esbuild/freebsd-arm64", 2593 + "@esbuild/freebsd-x64", 2594 + "@esbuild/linux-arm", 2595 + "@esbuild/linux-arm64", 2596 + "@esbuild/linux-ia32", 2597 + "@esbuild/linux-loong64", 2598 + "@esbuild/linux-mips64el", 2599 + "@esbuild/linux-ppc64", 2600 + "@esbuild/linux-riscv64", 2601 + "@esbuild/linux-s390x", 2602 + "@esbuild/linux-x64", 2603 + "@esbuild/netbsd-arm64", 2604 + "@esbuild/netbsd-x64", 2605 + "@esbuild/openbsd-arm64", 2606 + "@esbuild/openbsd-x64", 2607 + "@esbuild/openharmony-arm64", 2608 + "@esbuild/sunos-x64", 2609 + "@esbuild/win32-arm64", 2610 + "@esbuild/win32-ia32", 2611 + "@esbuild/win32-x64" 2612 + ], 2613 + "scripts": true, 2614 + "bin": true 2615 + }, 2616 + "escalade@3.1.2": { 2617 + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==" 2618 + }, 2619 + "escalade@3.2.0": { 2620 + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" 2621 + }, 2622 + "esm-env@1.2.2": { 2623 + "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==" 2624 + }, 2625 + "estree-walker@2.0.2": { 2626 + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" 2627 + }, 2628 + "exsolve@1.0.8": { 2629 + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==" 2630 + }, 2631 + "fast-average-color@9.5.0": { 2632 + "integrity": "sha512-nC6x2YIlJ9xxgkMFMd1BNoM1ctMjNoRKfRliPmiEWW3S6rLTHiQcy9g3pt/xiKv/D0NAAkhb9VyV+WJFvTqMGg==" 2633 + }, 2634 + "fast-check@3.23.2": { 2635 + "integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==", 2636 + "dependencies": [ 2637 + "pure-rand" 2638 + ] 2639 + }, 2640 + "fast-deep-equal@3.1.3": { 2641 + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 2642 + }, 2643 + "fast-glob@3.3.3": { 2644 + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", 2645 + "dependencies": [ 2646 + "@nodelib/fs.stat", 2647 + "@nodelib/fs.walk", 2648 + "glob-parent@5.1.2", 2649 + "merge2", 2650 + "micromatch" 2651 + ] 2652 + }, 2653 + "fast-uri@3.1.0": { 2654 + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==" 2655 + }, 2656 + "fastq@1.19.1": { 2657 + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", 2658 + "dependencies": [ 2659 + "reusify" 2660 + ] 2661 + }, 2662 + "fdir@6.5.0_picomatch@4.0.3": { 2663 + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", 2664 + "dependencies": [ 2665 + "picomatch@4.0.3" 2666 + ], 2667 + "optionalPeers": [ 2668 + "picomatch@4.0.3" 2669 + ] 2670 + }, 2671 + "fill-range@7.1.1": { 2672 + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 2673 + "dependencies": [ 2674 + "to-regex-range" 2675 + ] 2676 + }, 2677 + "focus-trap@7.5.4": { 2678 + "integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==", 2679 + "dependencies": [ 2680 + "tabbable" 2681 + ] 2682 + }, 2683 + "fs-extra@11.2.0": { 2684 + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", 2685 + "dependencies": [ 2686 + "graceful-fs", 2687 + "jsonfile", 2688 + "universalify" 2689 + ] 2690 + }, 2691 + "fsevents@2.3.3": { 2692 + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 2693 + "os": ["darwin"], 2694 + "scripts": true 2695 + }, 2696 + "gensync@1.0.0-beta.2": { 2697 + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" 2698 + }, 2699 + "glob-parent@5.1.2": { 2700 + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2701 + "dependencies": [ 2702 + "is-glob" 2703 + ] 2704 + }, 2705 + "glob-parent@6.0.2": { 2706 + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 2707 + "dependencies": [ 2708 + "is-glob" 2709 + ] 2710 + }, 2711 + "globrex@0.1.2": { 2712 + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==" 2713 + }, 2714 + "graceful-fs@4.2.11": { 2715 + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" 2716 + }, 2717 + "hookable@5.5.3": { 2718 + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==" 2719 + }, 2720 + "html-entities@2.3.3": { 2721 + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" 2722 + }, 2723 + "is-extglob@2.1.1": { 2724 + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" 2725 + }, 2726 + "is-fullwidth-code-point@3.0.0": { 2727 + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 2728 + }, 2729 + "is-glob@4.0.3": { 2730 + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2731 + "dependencies": [ 2732 + "is-extglob" 2733 + ] 2734 + }, 2735 + "is-number@7.0.0": { 2736 + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" 2737 + }, 2738 + "is-what@4.1.16": { 2739 + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==" 2740 + }, 2741 + "javascript-stringify@2.1.0": { 2742 + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==" 2743 + }, 2744 + "js-tokens@4.0.0": { 2745 + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 2746 + }, 2747 + "jsesc@3.1.0": { 2748 + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", 2749 + "bin": true 2750 + }, 2751 + "json-schema-traverse@1.0.0": { 2752 + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" 2753 + }, 2754 + "json5@2.2.3": { 2755 + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 2756 + "bin": true 2757 + }, 2758 + "jsonfile@6.2.0": { 2759 + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", 2760 + "dependencies": [ 2761 + "universalify" 2762 + ], 2763 + "optionalDependencies": [ 2764 + "graceful-fs" 2765 + ] 2766 + }, 2767 + "kleur@4.1.5": { 2768 + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==" 2769 + }, 2770 + "klona@2.0.6": { 2771 + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==" 2772 + }, 2773 + "lightningcss-darwin-arm64@1.25.1": { 2774 + "integrity": "sha512-G4Dcvv85bs5NLENcu/s1f7ehzE3D5ThnlWSDwE190tWXRQCQaqwcuHe+MGSVI/slm0XrxnaayXY+cNl3cSricw==", 2775 + "os": ["darwin"], 2776 + "cpu": ["arm64"] 2777 + }, 2778 + "lightningcss-darwin-x64@1.25.1": { 2779 + "integrity": "sha512-dYWuCzzfqRueDSmto6YU5SoGHvZTMU1Em9xvhcdROpmtOQLorurUZz8+xFxZ51lCO2LnYbfdjZ/gCqWEkwixNg==", 2780 + "os": ["darwin"], 2781 + "cpu": ["x64"] 2782 + }, 2783 + "lightningcss-freebsd-x64@1.25.1": { 2784 + "integrity": "sha512-hXoy2s9A3KVNAIoKz+Fp6bNeY+h9c3tkcx1J3+pS48CqAt+5bI/R/YY4hxGL57fWAIquRjGKW50arltD6iRt/w==", 2785 + "os": ["freebsd"], 2786 + "cpu": ["x64"] 2787 + }, 2788 + "lightningcss-linux-arm-gnueabihf@1.25.1": { 2789 + "integrity": "sha512-tWyMgHFlHlp1e5iW3EpqvH5MvsgoN7ZkylBbG2R2LWxnvH3FuWCJOhtGcYx9Ks0Kv0eZOBud789odkYLhyf1ng==", 2790 + "os": ["linux"], 2791 + "cpu": ["arm"] 2792 + }, 2793 + "lightningcss-linux-arm64-gnu@1.25.1": { 2794 + "integrity": "sha512-Xjxsx286OT9/XSnVLIsFEDyDipqe4BcLeB4pXQ/FEA5+2uWCCuAEarUNQumRucnj7k6ftkAHUEph5r821KBccQ==", 2795 + "os": ["linux"], 2796 + "cpu": ["arm64"] 2797 + }, 2798 + "lightningcss-linux-arm64-musl@1.25.1": { 2799 + "integrity": "sha512-IhxVFJoTW8wq6yLvxdPvyHv4NjzcpN1B7gjxrY3uaykQNXPHNIpChLB52+wfH+yS58zm1PL4LemUp8u9Cfp6Bw==", 2800 + "os": ["linux"], 2801 + "cpu": ["arm64"] 2802 + }, 2803 + "lightningcss-linux-x64-gnu@1.25.1": { 2804 + "integrity": "sha512-RXIaru79KrREPEd6WLXfKfIp4QzoppZvD3x7vuTKkDA64PwTzKJ2jaC43RZHRt8BmyIkRRlmywNhTRMbmkPYpA==", 2805 + "os": ["linux"], 2806 + "cpu": ["x64"] 2807 + }, 2808 + "lightningcss-linux-x64-musl@1.25.1": { 2809 + "integrity": "sha512-TdcNqFsAENEEFr8fJWg0Y4fZ/nwuqTRsIr7W7t2wmDUlA8eSXVepeeONYcb+gtTj1RaXn/WgNLB45SFkz+XBZA==", 2810 + "os": ["linux"], 2811 + "cpu": ["x64"] 2812 + }, 2813 + "lightningcss-win32-x64-msvc@1.25.1": { 2814 + "integrity": "sha512-9KZZkmmy9oGDSrnyHuxP6iMhbsgChUiu/NSgOx+U1I/wTngBStDf2i2aGRCHvFqj19HqqBEI4WuGVQBa2V6e0A==", 2815 + "os": ["win32"], 2816 + "cpu": ["x64"] 2817 + }, 2818 + "lightningcss@1.25.1": { 2819 + "integrity": "sha512-V0RMVZzK1+rCHpymRv4URK2lNhIRyO8g7U7zOFwVAhJuat74HtkjIQpQRKNCwFEYkRGpafOpmXXLoaoBcyVtBg==", 2820 + "dependencies": [ 2821 + "detect-libc" 2822 + ], 2823 + "optionalDependencies": [ 2824 + "lightningcss-darwin-arm64", 2825 + "lightningcss-darwin-x64", 2826 + "lightningcss-freebsd-x64", 2827 + "lightningcss-linux-arm-gnueabihf", 2828 + "lightningcss-linux-arm64-gnu", 2829 + "lightningcss-linux-arm64-musl", 2830 + "lightningcss-linux-x64-gnu", 2831 + "lightningcss-linux-x64-musl", 2832 + "lightningcss-win32-x64-msvc" 2833 + ] 2834 + }, 2835 + "lodash.memoize@4.1.2": { 2836 + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" 2837 + }, 2838 + "lodash.merge@4.6.2": { 2839 + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" 2840 + }, 2841 + "lodash.truncate@4.4.2": { 2842 + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==" 2843 + }, 2844 + "lodash.uniq@4.5.0": { 2845 + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" 2846 + }, 2847 + "look-it-up@2.1.0": { 2848 + "integrity": "sha512-nMoGWW2HurtuJf6XAL56FWTDCWLOTSsanrgwOyaR5Y4e3zfG5N/0cU5xWZSEU3tBxhQugRbV1xL9jb+ug7yZww==" 2849 + }, 2850 + "lru-cache@5.1.1": { 2851 + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 2852 + "dependencies": [ 2853 + "yallist" 2854 + ] 2855 + }, 2856 + "lucide-solid@0.553.0_solid-js@1.9.10__seroval@1.3.2": { 2857 + "integrity": "sha512-FAvWslAqD/HmCfcvFpbYAjPFf80F60aBlvn7M7Ea/FzYChqpkUiUkJEvG0K1bYHadf7dnkK0DSI992VT26sQdg==", 2858 + "dependencies": [ 2859 + "solid-js" 2860 + ] 2861 + }, 2862 + "magic-string@0.30.19": { 2863 + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", 2864 + "dependencies": [ 2865 + "@jridgewell/sourcemap-codec" 2866 + ] 2867 + }, 2868 + "mediabunny@1.25.0": { 2869 + "integrity": "sha512-ozaqk6zS2Vbf3+3+OoxKfnCVeZRcv5PO8DgQtBrM5vpWIbpEK+kMVV6pgfo4mC3XtMwvQEMbhj3zEf0LNklh9w==", 2870 + "dependencies": [ 2871 + "@types/dom-mediacapture-transform", 2872 + "@types/dom-webcodecs" 2873 + ] 2874 + }, 2875 + "merge-anything@5.1.7": { 2876 + "integrity": "sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==", 2877 + "dependencies": [ 2878 + "is-what" 2879 + ] 2880 + }, 2881 + "merge2@1.4.1": { 2882 + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" 2883 + }, 2884 + "microdiff@1.5.0": { 2885 + "integrity": "sha512-Drq+/THMvDdzRYrK0oxJmOKiC24ayUV8ahrt8l3oRK51PWt6gdtrIGrlIH3pT/lFh1z93FbAcidtsHcWbnRz8Q==" 2886 + }, 2887 + "micromatch@4.0.8": { 2888 + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", 2889 + "dependencies": [ 2890 + "braces", 2891 + "picomatch@2.3.1" 2892 + ] 2893 + }, 2894 + "minimatch@10.1.1": { 2895 + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", 2896 + "dependencies": [ 2897 + "@isaacs/brace-expansion" 2898 + ] 2899 + }, 2900 + "ms@2.1.3": { 2901 + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 2902 + }, 2903 + "nanoid@3.3.11": { 2904 + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 2905 + "bin": true 2906 + }, 2907 + "nanoid@5.1.6": { 2908 + "integrity": "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==", 2909 + "bin": true 2910 + }, 2911 + "node-eval@2.0.0": { 2912 + "integrity": "sha512-Ap+L9HznXAVeJj3TJ1op6M6bg5xtTq8L5CU/PJxtkhea/DrIxdTknGKIECKd/v/Lgql95iuMAYvIzBNd0pmcMg==", 2913 + "dependencies": [ 2914 + "path-is-absolute" 2915 + ] 2916 + }, 2917 + "node-releases@2.0.27": { 2918 + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==" 2919 + }, 2920 + "object-path@0.11.8": { 2921 + "integrity": "sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==" 2922 + }, 2923 + "outdent@0.8.0": { 2924 + "integrity": "sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==" 2925 + }, 2926 + "package-manager-detector@1.5.0": { 2927 + "integrity": "sha512-uBj69dVlYe/+wxj8JOpr97XfsxH/eumMt6HqjNTmJDf/6NO9s+0uxeOneIz3AsPt2m6y9PqzDzd3ATcU17MNfw==" 2928 + }, 2929 + "parse5@7.3.0": { 2930 + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", 2931 + "dependencies": [ 2932 + "entities@6.0.1" 2933 + ] 2934 + }, 2935 + "path-browserify@1.0.1": { 2936 + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" 2937 + }, 2938 + "path-is-absolute@1.0.1": { 2939 + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" 2940 + }, 2941 + "pathe@2.0.3": { 2942 + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==" 2943 + }, 2944 + "perfect-debounce@1.0.0": { 2945 + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==" 2946 + }, 2947 + "perfect-freehand@1.2.2": { 2948 + "integrity": "sha512-eh31l019WICQ03pkF3FSzHxB8n07ItqIQ++G5UV8JX0zVOXzgTGCqnRR0jJ2h9U8/2uW4W4mtGJELt9kEV0CFQ==" 2949 + }, 2950 + "picocolors@1.1.1": { 2951 + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" 2952 + }, 2953 + "picomatch@2.3.1": { 2954 + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" 2955 + }, 2956 + "picomatch@4.0.3": { 2957 + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" 2958 + }, 2959 + "pkg-types@2.3.0": { 2960 + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", 2961 + "dependencies": [ 2962 + "confbox", 2963 + "exsolve", 2964 + "pathe" 2965 + ] 2966 + }, 2967 + "pluralize@8.0.0": { 2968 + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==" 2969 + }, 2970 + "postcss-discard-duplicates@7.0.2_postcss@8.5.6": { 2971 + "integrity": "sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w==", 2972 + "dependencies": [ 2973 + "postcss" 2974 + ] 2975 + }, 2976 + "postcss-discard-empty@7.0.1_postcss@8.5.6": { 2977 + "integrity": "sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg==", 2978 + "dependencies": [ 2979 + "postcss" 2980 + ] 2981 + }, 2982 + "postcss-merge-rules@7.0.6_postcss@8.5.6": { 2983 + "integrity": "sha512-2jIPT4Tzs8K87tvgCpSukRQ2jjd+hH6Bb8rEEOUDmmhOeTcqDg5fEFK8uKIu+Pvc3//sm3Uu6FRqfyv7YF7+BQ==", 2984 + "dependencies": [ 2985 + "browserslist@4.28.0", 2986 + "caniuse-api", 2987 + "cssnano-utils", 2988 + "postcss", 2989 + "postcss-selector-parser" 2990 + ] 2991 + }, 2992 + "postcss-minify-selectors@7.0.5_postcss@8.5.6": { 2993 + "integrity": "sha512-x2/IvofHcdIrAm9Q+p06ZD1h6FPcQ32WtCRVodJLDR+WMn8EVHI1kvLxZuGKz/9EY5nAmI6lIQIrpo4tBy5+ug==", 2994 + "dependencies": [ 2995 + "cssesc", 2996 + "postcss", 2997 + "postcss-selector-parser" 2998 + ] 2999 + }, 3000 + "postcss-nested@7.0.2_postcss@8.5.6": { 3001 + "integrity": "sha512-5osppouFc0VR9/VYzYxO03VaDa3e8F23Kfd6/9qcZTUI8P58GIYlArOET2Wq0ywSl2o2PjELhYOFI4W7l5QHKw==", 3002 + "dependencies": [ 3003 + "postcss", 3004 + "postcss-selector-parser" 3005 + ] 3006 + }, 3007 + "postcss-normalize-whitespace@7.0.1_postcss@8.5.6": { 3008 + "integrity": "sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA==", 3009 + "dependencies": [ 3010 + "postcss", 3011 + "postcss-value-parser" 3012 + ] 3013 + }, 3014 + "postcss-selector-parser@7.1.0": { 3015 + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", 3016 + "dependencies": [ 3017 + "cssesc", 3018 + "util-deprecate" 3019 + ] 3020 + }, 3021 + "postcss-value-parser@4.2.0": { 3022 + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" 3023 + }, 3024 + "postcss@8.5.6": { 3025 + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", 3026 + "dependencies": [ 3027 + "nanoid@3.3.11", 3028 + "picocolors", 3029 + "source-map-js" 3030 + ] 3031 + }, 3032 + "prettier@3.2.5": { 3033 + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", 3034 + "bin": true 3035 + }, 3036 + "proxy-compare@3.0.0": { 3037 + "integrity": "sha512-y44MCkgtZUCT9tZGuE278fB7PWVf7fRYy0vbRXAts2o5F0EfC4fIQrvQQGBJo1WJbFcVLXzApOscyJuZqHQc1w==" 3038 + }, 3039 + "proxy-compare@3.0.1": { 3040 + "integrity": "sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q==" 3041 + }, 3042 + "proxy-memoize@3.0.1": { 3043 + "integrity": "sha512-VDdG/VYtOgdGkWJx7y0o7p+zArSf2383Isci8C+BP3YXgMYDoPd3cCBjw0JdWb6YBb9sFiOPbAADDVTPJnh+9g==", 3044 + "dependencies": [ 3045 + "proxy-compare@3.0.1" 3046 + ] 3047 + }, 3048 + "pure-rand@6.1.0": { 3049 + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==" 3050 + }, 3051 + "queue-microtask@1.2.3": { 3052 + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" 3053 + }, 3054 + "readdirp@4.1.2": { 3055 + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==" 3056 + }, 3057 + "require-from-string@2.0.2": { 3058 + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" 3059 + }, 3060 + "reusify@1.1.0": { 3061 + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==" 3062 + }, 3063 + "rollup@4.52.5": { 3064 + "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", 3065 + "dependencies": [ 3066 + "@types/estree" 3067 + ], 3068 + "optionalDependencies": [ 3069 + "@rollup/rollup-android-arm-eabi", 3070 + "@rollup/rollup-android-arm64", 3071 + "@rollup/rollup-darwin-arm64", 3072 + "@rollup/rollup-darwin-x64", 3073 + "@rollup/rollup-freebsd-arm64", 3074 + "@rollup/rollup-freebsd-x64", 3075 + "@rollup/rollup-linux-arm-gnueabihf", 3076 + "@rollup/rollup-linux-arm-musleabihf", 3077 + "@rollup/rollup-linux-arm64-gnu", 3078 + "@rollup/rollup-linux-arm64-musl", 3079 + "@rollup/rollup-linux-loong64-gnu", 3080 + "@rollup/rollup-linux-ppc64-gnu", 3081 + "@rollup/rollup-linux-riscv64-gnu", 3082 + "@rollup/rollup-linux-riscv64-musl", 3083 + "@rollup/rollup-linux-s390x-gnu", 3084 + "@rollup/rollup-linux-x64-gnu", 3085 + "@rollup/rollup-linux-x64-musl", 3086 + "@rollup/rollup-openharmony-arm64", 3087 + "@rollup/rollup-win32-arm64-msvc", 3088 + "@rollup/rollup-win32-ia32-msvc", 3089 + "@rollup/rollup-win32-x64-gnu", 3090 + "@rollup/rollup-win32-x64-msvc", 3091 + "fsevents" 3092 + ], 3093 + "bin": true 3094 + }, 3095 + "run-parallel@1.2.0": { 3096 + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 3097 + "dependencies": [ 3098 + "queue-microtask" 3099 + ] 3100 + }, 3101 + "semver@6.3.1": { 3102 + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 3103 + "bin": true 3104 + }, 3105 + "seroval-plugins@1.3.3_seroval@1.3.2": { 3106 + "integrity": "sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==", 3107 + "dependencies": [ 3108 + "seroval" 3109 + ] 3110 + }, 3111 + "seroval@1.3.2": { 3112 + "integrity": "sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==" 3113 + }, 3114 + "sisteransi@1.0.5": { 3115 + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" 3116 + }, 3117 + "slice-ansi@4.0.0": { 3118 + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", 3119 + "dependencies": [ 3120 + "ansi-styles", 3121 + "astral-regex", 3122 + "is-fullwidth-code-point" 3123 + ] 3124 + }, 3125 + "solid-devtools@0.34.4_solid-js@1.9.10__seroval@1.3.2_vite@7.1.12__picomatch@4.0.3_@babel+core@7.28.5": { 3126 + "integrity": "sha512-/s/pPTLvTkuXGZhLfsuvp7ge/cdpEwrUPoRwoJPYgz74GTUSb5Ozi2V6Z6HkO0ILT7hXB04j16HbH1aaP5VFOA==", 3127 + "dependencies": [ 3128 + "@babel/core", 3129 + "@babel/plugin-syntax-typescript", 3130 + "@babel/types", 3131 + "@solid-devtools/debugger", 3132 + "@solid-devtools/shared", 3133 + "solid-js", 3134 + "vite" 3135 + ], 3136 + "optionalPeers": [ 3137 + "vite" 3138 + ] 3139 + }, 3140 + "solid-js@1.9.10_seroval@1.3.2": { 3141 + "integrity": "sha512-Coz956cos/EPDlhs6+jsdTxKuJDPT7B5SVIWgABwROyxjY7Xbr8wkzD68Et+NxnV7DLJ3nJdAC2r9InuV/4Jew==", 3142 + "dependencies": [ 3143 + "csstype", 3144 + "seroval", 3145 + "seroval-plugins" 3146 + ] 3147 + }, 3148 + "solid-refresh@0.6.3_solid-js@1.9.10__seroval@1.3.2": { 3149 + "integrity": "sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==", 3150 + "dependencies": [ 3151 + "@babel/generator", 3152 + "@babel/helper-module-imports@7.27.1", 3153 + "@babel/types", 3154 + "solid-js" 3155 + ] 3156 + }, 3157 + "source-map-js@1.2.1": { 3158 + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" 3159 + }, 3160 + "string-width@4.2.3": { 3161 + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3162 + "dependencies": [ 3163 + "emoji-regex", 3164 + "is-fullwidth-code-point", 3165 + "strip-ansi" 3166 + ] 3167 + }, 3168 + "strip-ansi@6.0.1": { 3169 + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3170 + "dependencies": [ 3171 + "ansi-regex" 3172 + ] 3173 + }, 3174 + "tabbable@6.3.0": { 3175 + "integrity": "sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ==" 3176 + }, 3177 + "table@6.9.0": { 3178 + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", 3179 + "dependencies": [ 3180 + "ajv", 3181 + "lodash.truncate", 3182 + "slice-ansi", 3183 + "string-width", 3184 + "strip-ansi" 3185 + ] 3186 + }, 3187 + "tinyglobby@0.2.15_picomatch@4.0.3": { 3188 + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", 3189 + "dependencies": [ 3190 + "fdir", 3191 + "picomatch@4.0.3" 3192 + ] 3193 + }, 3194 + "to-regex-range@5.0.1": { 3195 + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3196 + "dependencies": [ 3197 + "is-number" 3198 + ] 3199 + }, 3200 + "ts-evaluator@1.2.0_typescript@5.9.3": { 3201 + "integrity": "sha512-ncSGek1p92bj2ifB7s9UBgryHCkU9vwC5d+Lplt12gT9DH+e41X8dMoHRQjIMeAvyG7j9dEnuHmwgOtuRIQL+Q==", 3202 + "dependencies": [ 3203 + "ansi-colors", 3204 + "crosspath", 3205 + "object-path", 3206 + "typescript" 3207 + ] 3208 + }, 3209 + "ts-morph@27.0.2": { 3210 + "integrity": "sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w==", 3211 + "dependencies": [ 3212 + "@ts-morph/common", 3213 + "code-block-writer" 3214 + ] 3215 + }, 3216 + "ts-pattern@5.9.0": { 3217 + "integrity": "sha512-6s5V71mX8qBUmlgbrfL33xDUwO0fq48rxAu2LBE11WBeGdpCPOsXksQbZJHvHwhrd3QjUusd3mAOM5Gg0mFBLg==" 3218 + }, 3219 + "tsconfck@3.1.6_typescript@5.9.3": { 3220 + "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", 3221 + "dependencies": [ 3222 + "typescript" 3223 + ], 3224 + "optionalPeers": [ 3225 + "typescript" 3226 + ], 3227 + "bin": true 3228 + }, 3229 + "tslib@2.8.1": { 3230 + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" 3231 + }, 3232 + "typescript@5.9.3": { 3233 + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", 3234 + "bin": true 3235 + }, 3236 + "universalify@2.0.1": { 3237 + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" 3238 + }, 3239 + "update-browserslist-db@1.1.4_browserslist@4.24.4": { 3240 + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", 3241 + "dependencies": [ 3242 + "browserslist@4.24.4", 3243 + "escalade@3.2.0", 3244 + "picocolors" 3245 + ], 3246 + "bin": true 3247 + }, 3248 + "update-browserslist-db@1.1.4_browserslist@4.28.0": { 3249 + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", 3250 + "dependencies": [ 3251 + "browserslist@4.28.0", 3252 + "escalade@3.2.0", 3253 + "picocolors" 3254 + ], 3255 + "bin": true 3256 + }, 3257 + "uqr@0.1.2": { 3258 + "integrity": "sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==" 3259 + }, 3260 + "util-deprecate@1.0.2": { 3261 + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 3262 + }, 3263 + "vite-plugin-solid@2.11.10_solid-js@1.9.10__seroval@1.3.2_vite@7.1.12__picomatch@4.0.3_@babel+core@7.28.5": { 3264 + "integrity": "sha512-Yr1dQybmtDtDAHkii6hXuc1oVH9CPcS/Zb2jN/P36qqcrkNnVPsMTzQ06jyzFPFjj3U1IYKMVt/9ZqcwGCEbjw==", 3265 + "dependencies": [ 3266 + "@babel/core", 3267 + "@types/babel__core", 3268 + "babel-preset-solid", 3269 + "merge-anything", 3270 + "solid-js", 3271 + "solid-refresh", 3272 + "vite", 3273 + "vitefu" 3274 + ] 3275 + }, 3276 + "vite-tsconfig-paths@5.1.4_vite@7.1.12__picomatch@4.0.3_typescript@5.9.3": { 3277 + "integrity": "sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==", 3278 + "dependencies": [ 3279 + "debug", 3280 + "globrex", 3281 + "tsconfck", 3282 + "vite" 3283 + ], 3284 + "optionalPeers": [ 3285 + "vite" 3286 + ] 3287 + }, 3288 + "vite@7.1.12_picomatch@4.0.3": { 3289 + "integrity": "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==", 3290 + "dependencies": [ 3291 + "esbuild", 3292 + "fdir", 3293 + "picomatch@4.0.3", 3294 + "postcss", 3295 + "rollup", 3296 + "tinyglobby" 3297 + ], 3298 + "optionalDependencies": [ 3299 + "fsevents" 3300 + ], 3301 + "bin": true 3302 + }, 3303 + "vitefu@1.1.1_vite@7.1.12__picomatch@4.0.3": { 3304 + "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", 3305 + "dependencies": [ 3306 + "vite" 3307 + ], 3308 + "optionalPeers": [ 3309 + "vite" 3310 + ] 3311 + }, 3312 + "wordwrapjs@5.1.1": { 3313 + "integrity": "sha512-0yweIbkINJodk27gX9LBGMzyQdBDan3s/dEAiwBOj+Mf0PPyWL6/rikalkv8EeD0E8jm4o5RXEOrFTP3NXbhJg==" 3314 + }, 3315 + "yallist@3.1.1": { 3316 + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" 3317 + } 3318 + }, 3319 + "workspace": { 3320 + "packageJson": { 3321 + "dependencies": [ 3322 + "npm:@ark-ui/solid@^5.28.0", 3323 + "npm:@atcute/atproto@^3.1.9", 3324 + "npm:@atcute/bluesky@^3.2.10", 3325 + "npm:@atcute/client@^4.0.5", 3326 + "npm:@atcute/identity-resolver@^1.1.4", 3327 + "npm:@atcute/identity@^1.1.2", 3328 + "npm:@atcute/lexicons@^1.2.3", 3329 + "npm:@atcute/microcosm@1", 3330 + "npm:@atcute/oauth-browser-client@^2.0.1", 3331 + "npm:@pandacss/dev@^1.5.1", 3332 + "npm:@pandacss/preset-base@^1.5.1", 3333 + "npm:@park-ui/panda-preset@~0.43.1", 3334 + "npm:@solid-primitives/map@~0.7.2", 3335 + "npm:fast-average-color@^9.5.0", 3336 + "npm:lucide-solid@0.553", 3337 + "npm:mediabunny@^1.25.0", 3338 + "npm:solid-devtools@~0.34.3", 3339 + "npm:solid-js@^1.9.5", 3340 + "npm:typescript@^5.7.2", 3341 + "npm:vite-plugin-solid@^2.11.8", 3342 + "npm:vite-tsconfig-paths@^5.1.4", 3343 + "npm:vite@^7.1.4" 3344 + ] 3345 + } 3346 + } 3347 + }
+76
flake.lock
··· 1 + { 2 + "nodes": { 3 + "naked-shell": { 4 + "locked": { 5 + "lastModified": 1681286841, 6 + "narHash": "sha256-3XlJrwlR0nBiREnuogoa5i1b4+w/XPe0z8bbrJASw0g=", 7 + "owner": "90-008", 8 + "repo": "mk-naked-shell", 9 + "rev": "7612f828dd6f22b7fb332cc69440e839d7ffe6bd", 10 + "type": "github" 11 + }, 12 + "original": { 13 + "owner": "90-008", 14 + "repo": "mk-naked-shell", 15 + "type": "github" 16 + } 17 + }, 18 + "nixpkgs": { 19 + "locked": { 20 + "lastModified": 1763276407, 21 + "narHash": "sha256-InTyTlu2/Jwkv/8BGfnvbYEihvbwKd11uApXQqwUhhU=", 22 + "owner": "nixos", 23 + "repo": "nixpkgs", 24 + "rev": "5aeecbfbddb269117e7f7bf6a683730b46bb770b", 25 + "type": "github" 26 + }, 27 + "original": { 28 + "owner": "nixos", 29 + "repo": "nixpkgs", 30 + "type": "github" 31 + } 32 + }, 33 + "nixpkgs-lib": { 34 + "locked": { 35 + "lastModified": 1761765539, 36 + "narHash": "sha256-b0yj6kfvO8ApcSE+QmA6mUfu8IYG6/uU28OFn4PaC8M=", 37 + "owner": "nix-community", 38 + "repo": "nixpkgs.lib", 39 + "rev": "719359f4562934ae99f5443f20aa06c2ffff91fc", 40 + "type": "github" 41 + }, 42 + "original": { 43 + "owner": "nix-community", 44 + "repo": "nixpkgs.lib", 45 + "type": "github" 46 + } 47 + }, 48 + "parts": { 49 + "inputs": { 50 + "nixpkgs-lib": "nixpkgs-lib" 51 + }, 52 + "locked": { 53 + "lastModified": 1762980239, 54 + "narHash": "sha256-8oNVE8TrD19ulHinjaqONf9QWCKK+w4url56cdStMpM=", 55 + "owner": "hercules-ci", 56 + "repo": "flake-parts", 57 + "rev": "52a2caecc898d0b46b2b905f058ccc5081f842da", 58 + "type": "github" 59 + }, 60 + "original": { 61 + "owner": "hercules-ci", 62 + "repo": "flake-parts", 63 + "type": "github" 64 + } 65 + }, 66 + "root": { 67 + "inputs": { 68 + "naked-shell": "naked-shell", 69 + "nixpkgs": "nixpkgs", 70 + "parts": "parts" 71 + } 72 + } 73 + }, 74 + "root": "root", 75 + "version": 7 76 + }
+34
flake.nix
··· 1 + { 2 + inputs.parts.url = "github:hercules-ci/flake-parts"; 3 + inputs.nixpkgs.url = "github:nixos/nixpkgs"; 4 + inputs.naked-shell.url = "github:90-008/mk-naked-shell"; 5 + 6 + outputs = inp: 7 + inp.parts.lib.mkFlake {inputs = inp;} { 8 + systems = ["x86_64-linux"]; 9 + imports = [inp.naked-shell.flakeModule]; 10 + perSystem = { 11 + config, 12 + system, 13 + ... 14 + }: let 15 + pkgs = inp.nixpkgs.legacyPackages.${system}; 16 + in { 17 + devShells.default = config.mk-naked-shell.lib.mkNakedShell { 18 + name = "memos-devshell"; 19 + packages = with pkgs; [ 20 + nodejs-slim_latest deno 21 + ]; 22 + shellHook = '' 23 + export PATH="$PATH:$PWD/node_modules/.bin" 24 + ''; 25 + }; 26 + packages.memos-modules = pkgs.callPackage ./nix/modules.nix {}; 27 + packages.memos = pkgs.callPackage ./nix { 28 + inherit (config.packages) memos-modules; 29 + }; 30 + packages.default = config.packages.memos; 31 + }; 32 + }; 33 + } 34 +
+15
index.html
··· 1 + <!doctype html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="utf-8" /> 5 + <meta name="viewport" content="width=device-width, initial-scale=1" /> 6 + <meta name="theme-color" content="#000000" /> 7 + <title>bsky voice memos</title> 8 + </head> 9 + <body> 10 + <noscript>you need to enable javascript to run this app.</noscript> 11 + <div id="root"></div> 12 + 13 + <script src="/src/index.tsx" type="module"></script> 14 + </body> 15 + </html>
+55
nix/default.nix
··· 1 + { 2 + lib, 3 + stdenv, 4 + deno, 5 + nodejs, 6 + makeBinaryWrapper, 7 + memos-modules, 8 + PUBLIC_DOMAIN ? "http://localhost:5173", 9 + }: 10 + stdenv.mkDerivation { 11 + name = "memos"; 12 + 13 + src = lib.fileset.toSource { 14 + root = ../.; 15 + fileset = lib.fileset.unions [ 16 + ../src 17 + ../static 18 + ../deno.lock 19 + ../package.json 20 + ../svelte.config.js 21 + ../tsconfig.json 22 + ../vite.config.ts 23 + ]; 24 + }; 25 + 26 + nativeBuildInputs = [makeBinaryWrapper]; 27 + buildInputs = [deno]; 28 + 29 + inherit PUBLIC_DOMAIN; 30 + 31 + dontCheck = true; 32 + 33 + configurePhase = '' 34 + runHook preConfigure 35 + cp -R --no-preserve=ownership ${memos-modules} node_modules 36 + find node_modules -type d -exec chmod 755 {} \; 37 + substituteInPlace node_modules/.bin/vite \ 38 + --replace-fail "/usr/bin/env node" "${nodejs}/bin/node" 39 + runHook postConfigure 40 + ''; 41 + buildPhase = '' 42 + runHook preBuild 43 + HOME=$TMPDIR deno run --cached-only build 44 + runHook postBuild 45 + ''; 46 + installPhase = '' 47 + runHook preInstall 48 + 49 + mkdir -p $out/bin 50 + cp -R ./build/* $out 51 + # cp -R ./node_modules $out 52 + 53 + runHook postInstall 54 + ''; 55 + }
+35
nix/modules.nix
··· 1 + { 2 + lib, 3 + stdenv, 4 + deno, 5 + }: 6 + stdenv.mkDerivation { 7 + name = "memos-modules"; 8 + 9 + src = lib.fileset.toSource { 10 + root = ../.; 11 + fileset = lib.fileset.unions [ 12 + ../deno.lock 13 + ../package.json 14 + ]; 15 + }; 16 + 17 + outputHash = "sha256-s5rq8htDjR0I8MxPtLq1NYIywXGEdYbZZvE7I5+TCIU="; 18 + outputHashAlgo = "sha256"; 19 + outputHashMode = "recursive"; 20 + 21 + nativeBuildInputs = [deno]; 22 + 23 + dontConfigure = true; 24 + dontCheck = true; 25 + dontFixup = true; 26 + dontPatchShebangs = true; 27 + 28 + buildPhase = '' 29 + HOME=$TMPDIR deno install --frozen --seed 8008135 30 + ''; 31 + installPhase = '' 32 + cp -R node_modules $out 33 + ls -la $out 34 + ''; 35 + }
+40
package.json
··· 1 + { 2 + "name": "vite-template-solid", 3 + "version": "0.0.0", 4 + "description": "", 5 + "type": "module", 6 + "scripts": { 7 + "prepare": "panda codegen", 8 + "start": "vite", 9 + "dev": "vite", 10 + "build": "vite build", 11 + "serve": "vite preview" 12 + }, 13 + "license": "MIT", 14 + "devDependencies": { 15 + "@pandacss/dev": "^1.5.1", 16 + "@pandacss/preset-base": "^1.5.1", 17 + "@park-ui/panda-preset": "^0.43.1", 18 + "solid-devtools": "^0.34.3", 19 + "typescript": "^5.7.2", 20 + "vite": "^7.1.4", 21 + "vite-plugin-solid": "^2.11.8", 22 + "vite-tsconfig-paths": "^5.1.4" 23 + }, 24 + "dependencies": { 25 + "@ark-ui/solid": "^5.28.0", 26 + "@atcute/atproto": "^3.1.9", 27 + "@atcute/bluesky": "^3.2.10", 28 + "@atcute/client": "^4.0.5", 29 + "@atcute/identity": "^1.1.2", 30 + "@atcute/identity-resolver": "^1.1.4", 31 + "@atcute/lexicons": "^1.2.3", 32 + "@atcute/microcosm": "^1.0.0", 33 + "@atcute/oauth-browser-client": "^2.0.1", 34 + "@solid-primitives/map": "^0.7.2", 35 + "fast-average-color": "^9.5.0", 36 + "lucide-solid": "^0.553.0", 37 + "mediabunny": "^1.25.0", 38 + "solid-js": "^1.9.5" 39 + } 40 + }
+20
panda.config.ts
··· 1 + import { defineConfig } from "@pandacss/dev"; 2 + import { createPreset } from "@park-ui/panda-preset"; 3 + import yellow from "@park-ui/panda-preset/colors/yellow"; 4 + import sand from "@park-ui/panda-preset/colors/sand"; 5 + 6 + export default defineConfig({ 7 + preflight: true, 8 + presets: [ 9 + createPreset({ accentColor: yellow, grayColor: sand, radius: "xs" }), 10 + ], 11 + include: ["./src/**/*.{js,jsx,ts,tsx}"], 12 + jsxFramework: "solid", 13 + outdir: "styled-system", 14 + conditions: { 15 + extend: { 16 + dark: '.dark &, [data-theme="dark"] &', 17 + light: '.light &, [data-theme="light"] &', 18 + }, 19 + }, 20 + });
+5
park-ui.json
··· 1 + { 2 + "$schema": "https://park-ui.com/registry/latest/schema.json", 3 + "jsFramework": "solid", 4 + "outputPath": "./src/components/ui" 5 + }
+1346
pnpm-lock.yaml
··· 1 + lockfileVersion: '9.0' 2 + 3 + settings: 4 + autoInstallPeers: true 5 + excludeLinksFromLockfile: false 6 + 7 + importers: 8 + 9 + .: 10 + dependencies: 11 + solid-js: 12 + specifier: ^1.9.5 13 + version: 1.9.9 14 + devDependencies: 15 + solid-devtools: 16 + specifier: ^0.34.3 17 + version: 0.34.3(solid-js@1.9.9)(vite@7.1.10) 18 + typescript: 19 + specifier: ^5.7.2 20 + version: 5.9.2 21 + vite: 22 + specifier: ^7.1.4 23 + version: 7.1.10 24 + vite-plugin-solid: 25 + specifier: ^2.11.8 26 + version: 2.11.9(solid-js@1.9.9)(vite@7.1.10) 27 + 28 + packages: 29 + 30 + '@babel/code-frame@7.27.1': 31 + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} 32 + engines: {node: '>=6.9.0'} 33 + 34 + '@babel/compat-data@7.28.4': 35 + resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} 36 + engines: {node: '>=6.9.0'} 37 + 38 + '@babel/core@7.28.4': 39 + resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} 40 + engines: {node: '>=6.9.0'} 41 + 42 + '@babel/generator@7.28.3': 43 + resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} 44 + engines: {node: '>=6.9.0'} 45 + 46 + '@babel/helper-compilation-targets@7.27.2': 47 + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} 48 + engines: {node: '>=6.9.0'} 49 + 50 + '@babel/helper-globals@7.28.0': 51 + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} 52 + engines: {node: '>=6.9.0'} 53 + 54 + '@babel/helper-module-imports@7.18.6': 55 + resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} 56 + engines: {node: '>=6.9.0'} 57 + 58 + '@babel/helper-module-imports@7.27.1': 59 + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} 60 + engines: {node: '>=6.9.0'} 61 + 62 + '@babel/helper-module-transforms@7.28.3': 63 + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} 64 + engines: {node: '>=6.9.0'} 65 + peerDependencies: 66 + '@babel/core': ^7.0.0 67 + 68 + '@babel/helper-plugin-utils@7.27.1': 69 + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} 70 + engines: {node: '>=6.9.0'} 71 + 72 + '@babel/helper-string-parser@7.27.1': 73 + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 74 + engines: {node: '>=6.9.0'} 75 + 76 + '@babel/helper-validator-identifier@7.27.1': 77 + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} 78 + engines: {node: '>=6.9.0'} 79 + 80 + '@babel/helper-validator-option@7.27.1': 81 + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} 82 + engines: {node: '>=6.9.0'} 83 + 84 + '@babel/helpers@7.28.4': 85 + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} 86 + engines: {node: '>=6.9.0'} 87 + 88 + '@babel/parser@7.28.4': 89 + resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} 90 + engines: {node: '>=6.0.0'} 91 + hasBin: true 92 + 93 + '@babel/plugin-syntax-jsx@7.27.1': 94 + resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} 95 + engines: {node: '>=6.9.0'} 96 + peerDependencies: 97 + '@babel/core': ^7.0.0-0 98 + 99 + '@babel/plugin-syntax-typescript@7.27.1': 100 + resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} 101 + engines: {node: '>=6.9.0'} 102 + peerDependencies: 103 + '@babel/core': ^7.0.0-0 104 + 105 + '@babel/template@7.27.2': 106 + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} 107 + engines: {node: '>=6.9.0'} 108 + 109 + '@babel/traverse@7.28.4': 110 + resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} 111 + engines: {node: '>=6.9.0'} 112 + 113 + '@babel/types@7.28.4': 114 + resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} 115 + engines: {node: '>=6.9.0'} 116 + 117 + '@esbuild/aix-ppc64@0.25.11': 118 + resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} 119 + engines: {node: '>=18'} 120 + cpu: [ppc64] 121 + os: [aix] 122 + 123 + '@esbuild/android-arm64@0.25.11': 124 + resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} 125 + engines: {node: '>=18'} 126 + cpu: [arm64] 127 + os: [android] 128 + 129 + '@esbuild/android-arm@0.25.11': 130 + resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} 131 + engines: {node: '>=18'} 132 + cpu: [arm] 133 + os: [android] 134 + 135 + '@esbuild/android-x64@0.25.11': 136 + resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==} 137 + engines: {node: '>=18'} 138 + cpu: [x64] 139 + os: [android] 140 + 141 + '@esbuild/darwin-arm64@0.25.11': 142 + resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} 143 + engines: {node: '>=18'} 144 + cpu: [arm64] 145 + os: [darwin] 146 + 147 + '@esbuild/darwin-x64@0.25.11': 148 + resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} 149 + engines: {node: '>=18'} 150 + cpu: [x64] 151 + os: [darwin] 152 + 153 + '@esbuild/freebsd-arm64@0.25.11': 154 + resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} 155 + engines: {node: '>=18'} 156 + cpu: [arm64] 157 + os: [freebsd] 158 + 159 + '@esbuild/freebsd-x64@0.25.11': 160 + resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} 161 + engines: {node: '>=18'} 162 + cpu: [x64] 163 + os: [freebsd] 164 + 165 + '@esbuild/linux-arm64@0.25.11': 166 + resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} 167 + engines: {node: '>=18'} 168 + cpu: [arm64] 169 + os: [linux] 170 + 171 + '@esbuild/linux-arm@0.25.11': 172 + resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} 173 + engines: {node: '>=18'} 174 + cpu: [arm] 175 + os: [linux] 176 + 177 + '@esbuild/linux-ia32@0.25.11': 178 + resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} 179 + engines: {node: '>=18'} 180 + cpu: [ia32] 181 + os: [linux] 182 + 183 + '@esbuild/linux-loong64@0.25.11': 184 + resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} 185 + engines: {node: '>=18'} 186 + cpu: [loong64] 187 + os: [linux] 188 + 189 + '@esbuild/linux-mips64el@0.25.11': 190 + resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} 191 + engines: {node: '>=18'} 192 + cpu: [mips64el] 193 + os: [linux] 194 + 195 + '@esbuild/linux-ppc64@0.25.11': 196 + resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} 197 + engines: {node: '>=18'} 198 + cpu: [ppc64] 199 + os: [linux] 200 + 201 + '@esbuild/linux-riscv64@0.25.11': 202 + resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} 203 + engines: {node: '>=18'} 204 + cpu: [riscv64] 205 + os: [linux] 206 + 207 + '@esbuild/linux-s390x@0.25.11': 208 + resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} 209 + engines: {node: '>=18'} 210 + cpu: [s390x] 211 + os: [linux] 212 + 213 + '@esbuild/linux-x64@0.25.11': 214 + resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==} 215 + engines: {node: '>=18'} 216 + cpu: [x64] 217 + os: [linux] 218 + 219 + '@esbuild/netbsd-arm64@0.25.11': 220 + resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==} 221 + engines: {node: '>=18'} 222 + cpu: [arm64] 223 + os: [netbsd] 224 + 225 + '@esbuild/netbsd-x64@0.25.11': 226 + resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==} 227 + engines: {node: '>=18'} 228 + cpu: [x64] 229 + os: [netbsd] 230 + 231 + '@esbuild/openbsd-arm64@0.25.11': 232 + resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==} 233 + engines: {node: '>=18'} 234 + cpu: [arm64] 235 + os: [openbsd] 236 + 237 + '@esbuild/openbsd-x64@0.25.11': 238 + resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==} 239 + engines: {node: '>=18'} 240 + cpu: [x64] 241 + os: [openbsd] 242 + 243 + '@esbuild/openharmony-arm64@0.25.11': 244 + resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==} 245 + engines: {node: '>=18'} 246 + cpu: [arm64] 247 + os: [openharmony] 248 + 249 + '@esbuild/sunos-x64@0.25.11': 250 + resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==} 251 + engines: {node: '>=18'} 252 + cpu: [x64] 253 + os: [sunos] 254 + 255 + '@esbuild/win32-arm64@0.25.11': 256 + resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} 257 + engines: {node: '>=18'} 258 + cpu: [arm64] 259 + os: [win32] 260 + 261 + '@esbuild/win32-ia32@0.25.11': 262 + resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} 263 + engines: {node: '>=18'} 264 + cpu: [ia32] 265 + os: [win32] 266 + 267 + '@esbuild/win32-x64@0.25.11': 268 + resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==} 269 + engines: {node: '>=18'} 270 + cpu: [x64] 271 + os: [win32] 272 + 273 + '@jridgewell/gen-mapping@0.3.13': 274 + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 275 + 276 + '@jridgewell/remapping@2.3.5': 277 + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} 278 + 279 + '@jridgewell/resolve-uri@3.1.2': 280 + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 281 + engines: {node: '>=6.0.0'} 282 + 283 + '@jridgewell/sourcemap-codec@1.5.5': 284 + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 285 + 286 + '@jridgewell/trace-mapping@0.3.30': 287 + resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} 288 + 289 + '@nothing-but/utils@0.17.0': 290 + resolution: {integrity: sha512-TuCHcHLOqDL0SnaAxACfuRHBNRgNJcNn9X0GiH5H3YSDBVquCr3qEIG3FOQAuMyZCbu9w8nk2CHhOsn7IvhIwQ==} 291 + 292 + '@rollup/rollup-android-arm-eabi@4.52.5': 293 + resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} 294 + cpu: [arm] 295 + os: [android] 296 + 297 + '@rollup/rollup-android-arm64@4.52.5': 298 + resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} 299 + cpu: [arm64] 300 + os: [android] 301 + 302 + '@rollup/rollup-darwin-arm64@4.52.5': 303 + resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} 304 + cpu: [arm64] 305 + os: [darwin] 306 + 307 + '@rollup/rollup-darwin-x64@4.52.5': 308 + resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} 309 + cpu: [x64] 310 + os: [darwin] 311 + 312 + '@rollup/rollup-freebsd-arm64@4.52.5': 313 + resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} 314 + cpu: [arm64] 315 + os: [freebsd] 316 + 317 + '@rollup/rollup-freebsd-x64@4.52.5': 318 + resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} 319 + cpu: [x64] 320 + os: [freebsd] 321 + 322 + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': 323 + resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} 324 + cpu: [arm] 325 + os: [linux] 326 + 327 + '@rollup/rollup-linux-arm-musleabihf@4.52.5': 328 + resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==} 329 + cpu: [arm] 330 + os: [linux] 331 + 332 + '@rollup/rollup-linux-arm64-gnu@4.52.5': 333 + resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==} 334 + cpu: [arm64] 335 + os: [linux] 336 + 337 + '@rollup/rollup-linux-arm64-musl@4.52.5': 338 + resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==} 339 + cpu: [arm64] 340 + os: [linux] 341 + 342 + '@rollup/rollup-linux-loong64-gnu@4.52.5': 343 + resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==} 344 + cpu: [loong64] 345 + os: [linux] 346 + 347 + '@rollup/rollup-linux-ppc64-gnu@4.52.5': 348 + resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} 349 + cpu: [ppc64] 350 + os: [linux] 351 + 352 + '@rollup/rollup-linux-riscv64-gnu@4.52.5': 353 + resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} 354 + cpu: [riscv64] 355 + os: [linux] 356 + 357 + '@rollup/rollup-linux-riscv64-musl@4.52.5': 358 + resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==} 359 + cpu: [riscv64] 360 + os: [linux] 361 + 362 + '@rollup/rollup-linux-s390x-gnu@4.52.5': 363 + resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==} 364 + cpu: [s390x] 365 + os: [linux] 366 + 367 + '@rollup/rollup-linux-x64-gnu@4.52.5': 368 + resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==} 369 + cpu: [x64] 370 + os: [linux] 371 + 372 + '@rollup/rollup-linux-x64-musl@4.52.5': 373 + resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==} 374 + cpu: [x64] 375 + os: [linux] 376 + 377 + '@rollup/rollup-openharmony-arm64@4.52.5': 378 + resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==} 379 + cpu: [arm64] 380 + os: [openharmony] 381 + 382 + '@rollup/rollup-win32-arm64-msvc@4.52.5': 383 + resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==} 384 + cpu: [arm64] 385 + os: [win32] 386 + 387 + '@rollup/rollup-win32-ia32-msvc@4.52.5': 388 + resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==} 389 + cpu: [ia32] 390 + os: [win32] 391 + 392 + '@rollup/rollup-win32-x64-gnu@4.52.5': 393 + resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==} 394 + cpu: [x64] 395 + os: [win32] 396 + 397 + '@rollup/rollup-win32-x64-msvc@4.52.5': 398 + resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==} 399 + cpu: [x64] 400 + os: [win32] 401 + 402 + '@solid-devtools/debugger@0.28.1': 403 + resolution: {integrity: sha512-6qIUI6VYkXoRnL8oF5bvh2KgH71qlJ18hNw/mwSyY6v48eb80ZR48/5PDXufUa3q+MBSuYa1uqTMwLewpay9eg==} 404 + peerDependencies: 405 + solid-js: ^1.9.0 406 + 407 + '@solid-devtools/shared@0.20.0': 408 + resolution: {integrity: sha512-o5TACmUOQsxpzpOKCjbQqGk8wL8PMi+frXG9WNu4Lh3PQVUB6hs95Kl/S8xc++zwcMguUKZJn8h5URUiMOca6Q==} 409 + peerDependencies: 410 + solid-js: ^1.9.0 411 + 412 + '@solid-primitives/bounds@0.1.3': 413 + resolution: {integrity: sha512-UbiyKMdSPmtijcEDnYLQL3zzaejpwWDAJJ4Gt5P0hgVs6A72piov0GyNw7V2SroH7NZFwxlYS22YmOr8A5xc1Q==} 414 + peerDependencies: 415 + solid-js: ^1.6.12 416 + 417 + '@solid-primitives/event-listener@2.4.3': 418 + resolution: {integrity: sha512-h4VqkYFv6Gf+L7SQj+Y6puigL/5DIi7x5q07VZET7AWcS+9/G3WfIE9WheniHWJs51OEkRB43w6lDys5YeFceg==} 419 + peerDependencies: 420 + solid-js: ^1.6.12 421 + 422 + '@solid-primitives/keyboard@1.3.3': 423 + resolution: {integrity: sha512-9dQHTTgLBqyAI7aavtO+HnpTVJgWQA1ghBSrmLtMu1SMxLPDuLfuNr+Tk5udb4AL4Ojg7h9JrKOGEEDqsJXWJA==} 424 + peerDependencies: 425 + solid-js: ^1.6.12 426 + 427 + '@solid-primitives/media@2.3.3': 428 + resolution: {integrity: sha512-hQ4hLOGvfbugQi5Eu1BFWAIJGIAzztq9x0h02xgBGl2l0Jaa3h7tg6bz5tV1NSuNYVGio4rPoa7zVQQLkkx9dA==} 429 + peerDependencies: 430 + solid-js: ^1.6.12 431 + 432 + '@solid-primitives/refs@1.1.2': 433 + resolution: {integrity: sha512-K7tf2thy7L+YJjdqXspXOg5xvNEOH8tgEWsp0+1mQk3obHBRD6hEjYZk7p7FlJphSZImS35je3UfmWuD7MhDfg==} 434 + peerDependencies: 435 + solid-js: ^1.6.12 436 + 437 + '@solid-primitives/resize-observer@2.1.3': 438 + resolution: {integrity: sha512-zBLje5E06TgOg93S7rGPldmhDnouNGhvfZVKOp+oG2XU8snA+GoCSSCz1M+jpNAg5Ek2EakU5UVQqL152WmdXQ==} 439 + peerDependencies: 440 + solid-js: ^1.6.12 441 + 442 + '@solid-primitives/rootless@1.5.2': 443 + resolution: {integrity: sha512-9HULb0QAzL2r47CCad0M+NKFtQ+LrGGNHZfteX/ThdGvKIg2o2GYhBooZubTCd/RTu2l2+Nw4s+dEfiDGvdrrQ==} 444 + peerDependencies: 445 + solid-js: ^1.6.12 446 + 447 + '@solid-primitives/scheduled@1.5.2': 448 + resolution: {integrity: sha512-/j2igE0xyNaHhj6kMfcUQn5rAVSTLbAX+CDEBm25hSNBmNiHLu2lM7Usj2kJJ5j36D67bE8wR1hBNA8hjtvsQA==} 449 + peerDependencies: 450 + solid-js: ^1.6.12 451 + 452 + '@solid-primitives/static-store@0.1.2': 453 + resolution: {integrity: sha512-ReK+5O38lJ7fT+L6mUFvUr6igFwHBESZF+2Ug842s7fvlVeBdIVEdTCErygff6w7uR6+jrr7J8jQo+cYrEq4Iw==} 454 + peerDependencies: 455 + solid-js: ^1.6.12 456 + 457 + '@solid-primitives/styles@0.1.2': 458 + resolution: {integrity: sha512-7iX5K+J5b1PRrbgw3Ki92uvU2LgQ0Kd/QMsrAZxDg5dpUBwMyTijZkA3bbs1ikZsT1oQhS41bTyKbjrXeU0Awg==} 459 + peerDependencies: 460 + solid-js: ^1.6.12 461 + 462 + '@solid-primitives/utils@6.3.2': 463 + resolution: {integrity: sha512-hZ/M/qr25QOCcwDPOHtGjxTD8w2mNyVAYvcfgwzBHq2RwNqHNdDNsMZYap20+ruRwW4A3Cdkczyoz0TSxLCAPQ==} 464 + peerDependencies: 465 + solid-js: ^1.6.12 466 + 467 + '@types/babel__core@7.20.5': 468 + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 469 + 470 + '@types/babel__generator@7.27.0': 471 + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} 472 + 473 + '@types/babel__template@7.4.4': 474 + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 475 + 476 + '@types/babel__traverse@7.28.0': 477 + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} 478 + 479 + '@types/estree@1.0.8': 480 + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 481 + 482 + babel-plugin-jsx-dom-expressions@0.40.1: 483 + resolution: {integrity: sha512-b4iHuirqK7RgaMzB2Lsl7MqrlDgQtVRSSazyrmx7wB3T759ggGjod5Rkok5MfHjQXhR7tRPmdwoeGPqBnW2KfA==} 484 + peerDependencies: 485 + '@babel/core': ^7.20.12 486 + 487 + babel-preset-solid@1.9.9: 488 + resolution: {integrity: sha512-pCnxWrciluXCeli/dj5PIEHgbNzim3evtTn12snjqqg8QZWJNMjH1AWIp4iG/tbVjqQ72aBEymMSagvmgxubXw==} 489 + peerDependencies: 490 + '@babel/core': ^7.0.0 491 + solid-js: ^1.9.8 492 + peerDependenciesMeta: 493 + solid-js: 494 + optional: true 495 + 496 + browserslist@4.25.4: 497 + resolution: {integrity: sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==} 498 + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 499 + hasBin: true 500 + 501 + caniuse-lite@1.0.30001741: 502 + resolution: {integrity: sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==} 503 + 504 + convert-source-map@2.0.0: 505 + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 506 + 507 + csstype@3.1.3: 508 + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 509 + 510 + debug@4.4.1: 511 + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} 512 + engines: {node: '>=6.0'} 513 + peerDependencies: 514 + supports-color: '*' 515 + peerDependenciesMeta: 516 + supports-color: 517 + optional: true 518 + 519 + electron-to-chromium@1.5.214: 520 + resolution: {integrity: sha512-TpvUNdha+X3ybfU78NoQatKvQEm1oq3lf2QbnmCEdw+Bd9RuIAY+hJTvq1avzHM0f7EJfnH3vbCnbzKzisc/9Q==} 521 + 522 + entities@6.0.1: 523 + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} 524 + engines: {node: '>=0.12'} 525 + 526 + esbuild@0.25.11: 527 + resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} 528 + engines: {node: '>=18'} 529 + hasBin: true 530 + 531 + escalade@3.2.0: 532 + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 533 + engines: {node: '>=6'} 534 + 535 + fdir@6.5.0: 536 + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 537 + engines: {node: '>=12.0.0'} 538 + peerDependencies: 539 + picomatch: ^3 || ^4 540 + peerDependenciesMeta: 541 + picomatch: 542 + optional: true 543 + 544 + fsevents@2.3.3: 545 + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 546 + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 547 + os: [darwin] 548 + 549 + gensync@1.0.0-beta.2: 550 + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 551 + engines: {node: '>=6.9.0'} 552 + 553 + html-entities@2.3.3: 554 + resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} 555 + 556 + is-what@4.1.16: 557 + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} 558 + engines: {node: '>=12.13'} 559 + 560 + js-tokens@4.0.0: 561 + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 562 + 563 + jsesc@3.1.0: 564 + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 565 + engines: {node: '>=6'} 566 + hasBin: true 567 + 568 + json5@2.2.3: 569 + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 570 + engines: {node: '>=6'} 571 + hasBin: true 572 + 573 + lru-cache@5.1.1: 574 + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 575 + 576 + merge-anything@5.1.7: 577 + resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} 578 + engines: {node: '>=12.13'} 579 + 580 + ms@2.1.3: 581 + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 582 + 583 + nanoid@3.3.11: 584 + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 585 + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 586 + hasBin: true 587 + 588 + node-releases@2.0.20: 589 + resolution: {integrity: sha512-7gK6zSXEH6neM212JgfYFXe+GmZQM+fia5SsusuBIUgnPheLFBmIPhtFoAQRj8/7wASYQnbDlHPVwY0BefoFgA==} 590 + 591 + parse5@7.3.0: 592 + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} 593 + 594 + picocolors@1.1.1: 595 + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 596 + 597 + picomatch@4.0.3: 598 + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 599 + engines: {node: '>=12'} 600 + 601 + postcss@8.5.6: 602 + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 603 + engines: {node: ^10 || ^12 || >=14} 604 + 605 + rollup@4.52.5: 606 + resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} 607 + engines: {node: '>=18.0.0', npm: '>=8.0.0'} 608 + hasBin: true 609 + 610 + semver@6.3.1: 611 + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 612 + hasBin: true 613 + 614 + seroval-plugins@1.3.3: 615 + resolution: {integrity: sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==} 616 + engines: {node: '>=10'} 617 + peerDependencies: 618 + seroval: ^1.0 619 + 620 + seroval@1.3.2: 621 + resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==} 622 + engines: {node: '>=10'} 623 + 624 + solid-devtools@0.34.3: 625 + resolution: {integrity: sha512-ZQua959n+Zu3sLbm9g0IRjYUb1YYlYbu83PWLRoKbSsq0a3ItQNhnS2OBU7rQNmOKZiMexNo9Z3izas9BcOKDg==} 626 + peerDependencies: 627 + solid-js: ^1.9.0 628 + vite: ^2.2.3 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 629 + peerDependenciesMeta: 630 + vite: 631 + optional: true 632 + 633 + solid-js@1.9.9: 634 + resolution: {integrity: sha512-A0ZBPJQldAeGCTW0YRYJmt7RCeh5rbFfPZ2aOttgYnctHE7HgKeHCBB/PVc2P7eOfmNXqMFFFoYYdm3S4dcbkA==} 635 + 636 + solid-refresh@0.6.3: 637 + resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} 638 + peerDependencies: 639 + solid-js: ^1.3 640 + 641 + source-map-js@1.2.1: 642 + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 643 + engines: {node: '>=0.10.0'} 644 + 645 + tinyglobby@0.2.15: 646 + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 647 + engines: {node: '>=12.0.0'} 648 + 649 + typescript@5.9.2: 650 + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} 651 + engines: {node: '>=14.17'} 652 + hasBin: true 653 + 654 + update-browserslist-db@1.1.3: 655 + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} 656 + hasBin: true 657 + peerDependencies: 658 + browserslist: '>= 4.21.0' 659 + 660 + validate-html-nesting@1.2.3: 661 + resolution: {integrity: sha512-kdkWdCl6eCeLlRShJKbjVOU2kFKxMF8Ghu50n+crEoyx+VKm3FxAxF9z4DCy6+bbTOqNW0+jcIYRnjoIRzigRw==} 662 + 663 + vite-plugin-solid@2.11.9: 664 + resolution: {integrity: sha512-bTA6p+bspXZsuulSd2y6aTzegF8xGaJYcq1Uyh/mv+W4DQtzCgL9nN6n2fsTaxp/dMk+ZHHKgGndlNeooqHLKw==} 665 + peerDependencies: 666 + '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* 667 + solid-js: ^1.7.2 668 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 669 + peerDependenciesMeta: 670 + '@testing-library/jest-dom': 671 + optional: true 672 + 673 + vite@7.1.10: 674 + resolution: {integrity: sha512-CmuvUBzVJ/e3HGxhg6cYk88NGgTnBoOo7ogtfJJ0fefUWAxN/WDSUa50o+oVBxuIhO8FoEZW0j2eW7sfjs5EtA==} 675 + engines: {node: ^20.19.0 || >=22.12.0} 676 + hasBin: true 677 + peerDependencies: 678 + '@types/node': ^20.19.0 || >=22.12.0 679 + jiti: '>=1.21.0' 680 + less: ^4.0.0 681 + lightningcss: ^1.21.0 682 + sass: ^1.70.0 683 + sass-embedded: ^1.70.0 684 + stylus: '>=0.54.8' 685 + sugarss: ^5.0.0 686 + terser: ^5.16.0 687 + tsx: ^4.8.1 688 + yaml: ^2.4.2 689 + peerDependenciesMeta: 690 + '@types/node': 691 + optional: true 692 + jiti: 693 + optional: true 694 + less: 695 + optional: true 696 + lightningcss: 697 + optional: true 698 + sass: 699 + optional: true 700 + sass-embedded: 701 + optional: true 702 + stylus: 703 + optional: true 704 + sugarss: 705 + optional: true 706 + terser: 707 + optional: true 708 + tsx: 709 + optional: true 710 + yaml: 711 + optional: true 712 + 713 + vitefu@1.1.1: 714 + resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} 715 + peerDependencies: 716 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 717 + peerDependenciesMeta: 718 + vite: 719 + optional: true 720 + 721 + yallist@3.1.1: 722 + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 723 + 724 + snapshots: 725 + 726 + '@babel/code-frame@7.27.1': 727 + dependencies: 728 + '@babel/helper-validator-identifier': 7.27.1 729 + js-tokens: 4.0.0 730 + picocolors: 1.1.1 731 + 732 + '@babel/compat-data@7.28.4': {} 733 + 734 + '@babel/core@7.28.4': 735 + dependencies: 736 + '@babel/code-frame': 7.27.1 737 + '@babel/generator': 7.28.3 738 + '@babel/helper-compilation-targets': 7.27.2 739 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) 740 + '@babel/helpers': 7.28.4 741 + '@babel/parser': 7.28.4 742 + '@babel/template': 7.27.2 743 + '@babel/traverse': 7.28.4 744 + '@babel/types': 7.28.4 745 + '@jridgewell/remapping': 2.3.5 746 + convert-source-map: 2.0.0 747 + debug: 4.4.1 748 + gensync: 1.0.0-beta.2 749 + json5: 2.2.3 750 + semver: 6.3.1 751 + transitivePeerDependencies: 752 + - supports-color 753 + 754 + '@babel/generator@7.28.3': 755 + dependencies: 756 + '@babel/parser': 7.28.4 757 + '@babel/types': 7.28.4 758 + '@jridgewell/gen-mapping': 0.3.13 759 + '@jridgewell/trace-mapping': 0.3.30 760 + jsesc: 3.1.0 761 + 762 + '@babel/helper-compilation-targets@7.27.2': 763 + dependencies: 764 + '@babel/compat-data': 7.28.4 765 + '@babel/helper-validator-option': 7.27.1 766 + browserslist: 4.25.4 767 + lru-cache: 5.1.1 768 + semver: 6.3.1 769 + 770 + '@babel/helper-globals@7.28.0': {} 771 + 772 + '@babel/helper-module-imports@7.18.6': 773 + dependencies: 774 + '@babel/types': 7.28.4 775 + 776 + '@babel/helper-module-imports@7.27.1': 777 + dependencies: 778 + '@babel/traverse': 7.28.4 779 + '@babel/types': 7.28.4 780 + transitivePeerDependencies: 781 + - supports-color 782 + 783 + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': 784 + dependencies: 785 + '@babel/core': 7.28.4 786 + '@babel/helper-module-imports': 7.27.1 787 + '@babel/helper-validator-identifier': 7.27.1 788 + '@babel/traverse': 7.28.4 789 + transitivePeerDependencies: 790 + - supports-color 791 + 792 + '@babel/helper-plugin-utils@7.27.1': {} 793 + 794 + '@babel/helper-string-parser@7.27.1': {} 795 + 796 + '@babel/helper-validator-identifier@7.27.1': {} 797 + 798 + '@babel/helper-validator-option@7.27.1': {} 799 + 800 + '@babel/helpers@7.28.4': 801 + dependencies: 802 + '@babel/template': 7.27.2 803 + '@babel/types': 7.28.4 804 + 805 + '@babel/parser@7.28.4': 806 + dependencies: 807 + '@babel/types': 7.28.4 808 + 809 + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)': 810 + dependencies: 811 + '@babel/core': 7.28.4 812 + '@babel/helper-plugin-utils': 7.27.1 813 + 814 + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.4)': 815 + dependencies: 816 + '@babel/core': 7.28.4 817 + '@babel/helper-plugin-utils': 7.27.1 818 + 819 + '@babel/template@7.27.2': 820 + dependencies: 821 + '@babel/code-frame': 7.27.1 822 + '@babel/parser': 7.28.4 823 + '@babel/types': 7.28.4 824 + 825 + '@babel/traverse@7.28.4': 826 + dependencies: 827 + '@babel/code-frame': 7.27.1 828 + '@babel/generator': 7.28.3 829 + '@babel/helper-globals': 7.28.0 830 + '@babel/parser': 7.28.4 831 + '@babel/template': 7.27.2 832 + '@babel/types': 7.28.4 833 + debug: 4.4.1 834 + transitivePeerDependencies: 835 + - supports-color 836 + 837 + '@babel/types@7.28.4': 838 + dependencies: 839 + '@babel/helper-string-parser': 7.27.1 840 + '@babel/helper-validator-identifier': 7.27.1 841 + 842 + '@esbuild/aix-ppc64@0.25.11': 843 + optional: true 844 + 845 + '@esbuild/android-arm64@0.25.11': 846 + optional: true 847 + 848 + '@esbuild/android-arm@0.25.11': 849 + optional: true 850 + 851 + '@esbuild/android-x64@0.25.11': 852 + optional: true 853 + 854 + '@esbuild/darwin-arm64@0.25.11': 855 + optional: true 856 + 857 + '@esbuild/darwin-x64@0.25.11': 858 + optional: true 859 + 860 + '@esbuild/freebsd-arm64@0.25.11': 861 + optional: true 862 + 863 + '@esbuild/freebsd-x64@0.25.11': 864 + optional: true 865 + 866 + '@esbuild/linux-arm64@0.25.11': 867 + optional: true 868 + 869 + '@esbuild/linux-arm@0.25.11': 870 + optional: true 871 + 872 + '@esbuild/linux-ia32@0.25.11': 873 + optional: true 874 + 875 + '@esbuild/linux-loong64@0.25.11': 876 + optional: true 877 + 878 + '@esbuild/linux-mips64el@0.25.11': 879 + optional: true 880 + 881 + '@esbuild/linux-ppc64@0.25.11': 882 + optional: true 883 + 884 + '@esbuild/linux-riscv64@0.25.11': 885 + optional: true 886 + 887 + '@esbuild/linux-s390x@0.25.11': 888 + optional: true 889 + 890 + '@esbuild/linux-x64@0.25.11': 891 + optional: true 892 + 893 + '@esbuild/netbsd-arm64@0.25.11': 894 + optional: true 895 + 896 + '@esbuild/netbsd-x64@0.25.11': 897 + optional: true 898 + 899 + '@esbuild/openbsd-arm64@0.25.11': 900 + optional: true 901 + 902 + '@esbuild/openbsd-x64@0.25.11': 903 + optional: true 904 + 905 + '@esbuild/openharmony-arm64@0.25.11': 906 + optional: true 907 + 908 + '@esbuild/sunos-x64@0.25.11': 909 + optional: true 910 + 911 + '@esbuild/win32-arm64@0.25.11': 912 + optional: true 913 + 914 + '@esbuild/win32-ia32@0.25.11': 915 + optional: true 916 + 917 + '@esbuild/win32-x64@0.25.11': 918 + optional: true 919 + 920 + '@jridgewell/gen-mapping@0.3.13': 921 + dependencies: 922 + '@jridgewell/sourcemap-codec': 1.5.5 923 + '@jridgewell/trace-mapping': 0.3.30 924 + 925 + '@jridgewell/remapping@2.3.5': 926 + dependencies: 927 + '@jridgewell/gen-mapping': 0.3.13 928 + '@jridgewell/trace-mapping': 0.3.30 929 + 930 + '@jridgewell/resolve-uri@3.1.2': {} 931 + 932 + '@jridgewell/sourcemap-codec@1.5.5': {} 933 + 934 + '@jridgewell/trace-mapping@0.3.30': 935 + dependencies: 936 + '@jridgewell/resolve-uri': 3.1.2 937 + '@jridgewell/sourcemap-codec': 1.5.5 938 + 939 + '@nothing-but/utils@0.17.0': {} 940 + 941 + '@rollup/rollup-android-arm-eabi@4.52.5': 942 + optional: true 943 + 944 + '@rollup/rollup-android-arm64@4.52.5': 945 + optional: true 946 + 947 + '@rollup/rollup-darwin-arm64@4.52.5': 948 + optional: true 949 + 950 + '@rollup/rollup-darwin-x64@4.52.5': 951 + optional: true 952 + 953 + '@rollup/rollup-freebsd-arm64@4.52.5': 954 + optional: true 955 + 956 + '@rollup/rollup-freebsd-x64@4.52.5': 957 + optional: true 958 + 959 + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': 960 + optional: true 961 + 962 + '@rollup/rollup-linux-arm-musleabihf@4.52.5': 963 + optional: true 964 + 965 + '@rollup/rollup-linux-arm64-gnu@4.52.5': 966 + optional: true 967 + 968 + '@rollup/rollup-linux-arm64-musl@4.52.5': 969 + optional: true 970 + 971 + '@rollup/rollup-linux-loong64-gnu@4.52.5': 972 + optional: true 973 + 974 + '@rollup/rollup-linux-ppc64-gnu@4.52.5': 975 + optional: true 976 + 977 + '@rollup/rollup-linux-riscv64-gnu@4.52.5': 978 + optional: true 979 + 980 + '@rollup/rollup-linux-riscv64-musl@4.52.5': 981 + optional: true 982 + 983 + '@rollup/rollup-linux-s390x-gnu@4.52.5': 984 + optional: true 985 + 986 + '@rollup/rollup-linux-x64-gnu@4.52.5': 987 + optional: true 988 + 989 + '@rollup/rollup-linux-x64-musl@4.52.5': 990 + optional: true 991 + 992 + '@rollup/rollup-openharmony-arm64@4.52.5': 993 + optional: true 994 + 995 + '@rollup/rollup-win32-arm64-msvc@4.52.5': 996 + optional: true 997 + 998 + '@rollup/rollup-win32-ia32-msvc@4.52.5': 999 + optional: true 1000 + 1001 + '@rollup/rollup-win32-x64-gnu@4.52.5': 1002 + optional: true 1003 + 1004 + '@rollup/rollup-win32-x64-msvc@4.52.5': 1005 + optional: true 1006 + 1007 + '@solid-devtools/debugger@0.28.1(solid-js@1.9.9)': 1008 + dependencies: 1009 + '@nothing-but/utils': 0.17.0 1010 + '@solid-devtools/shared': 0.20.0(solid-js@1.9.9) 1011 + '@solid-primitives/bounds': 0.1.3(solid-js@1.9.9) 1012 + '@solid-primitives/event-listener': 2.4.3(solid-js@1.9.9) 1013 + '@solid-primitives/keyboard': 1.3.3(solid-js@1.9.9) 1014 + '@solid-primitives/rootless': 1.5.2(solid-js@1.9.9) 1015 + '@solid-primitives/scheduled': 1.5.2(solid-js@1.9.9) 1016 + '@solid-primitives/static-store': 0.1.2(solid-js@1.9.9) 1017 + '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) 1018 + solid-js: 1.9.9 1019 + 1020 + '@solid-devtools/shared@0.20.0(solid-js@1.9.9)': 1021 + dependencies: 1022 + '@nothing-but/utils': 0.17.0 1023 + '@solid-primitives/event-listener': 2.4.3(solid-js@1.9.9) 1024 + '@solid-primitives/media': 2.3.3(solid-js@1.9.9) 1025 + '@solid-primitives/refs': 1.1.2(solid-js@1.9.9) 1026 + '@solid-primitives/rootless': 1.5.2(solid-js@1.9.9) 1027 + '@solid-primitives/scheduled': 1.5.2(solid-js@1.9.9) 1028 + '@solid-primitives/static-store': 0.1.2(solid-js@1.9.9) 1029 + '@solid-primitives/styles': 0.1.2(solid-js@1.9.9) 1030 + '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) 1031 + solid-js: 1.9.9 1032 + 1033 + '@solid-primitives/bounds@0.1.3(solid-js@1.9.9)': 1034 + dependencies: 1035 + '@solid-primitives/event-listener': 2.4.3(solid-js@1.9.9) 1036 + '@solid-primitives/resize-observer': 2.1.3(solid-js@1.9.9) 1037 + '@solid-primitives/static-store': 0.1.2(solid-js@1.9.9) 1038 + '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) 1039 + solid-js: 1.9.9 1040 + 1041 + '@solid-primitives/event-listener@2.4.3(solid-js@1.9.9)': 1042 + dependencies: 1043 + '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) 1044 + solid-js: 1.9.9 1045 + 1046 + '@solid-primitives/keyboard@1.3.3(solid-js@1.9.9)': 1047 + dependencies: 1048 + '@solid-primitives/event-listener': 2.4.3(solid-js@1.9.9) 1049 + '@solid-primitives/rootless': 1.5.2(solid-js@1.9.9) 1050 + '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) 1051 + solid-js: 1.9.9 1052 + 1053 + '@solid-primitives/media@2.3.3(solid-js@1.9.9)': 1054 + dependencies: 1055 + '@solid-primitives/event-listener': 2.4.3(solid-js@1.9.9) 1056 + '@solid-primitives/rootless': 1.5.2(solid-js@1.9.9) 1057 + '@solid-primitives/static-store': 0.1.2(solid-js@1.9.9) 1058 + '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) 1059 + solid-js: 1.9.9 1060 + 1061 + '@solid-primitives/refs@1.1.2(solid-js@1.9.9)': 1062 + dependencies: 1063 + '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) 1064 + solid-js: 1.9.9 1065 + 1066 + '@solid-primitives/resize-observer@2.1.3(solid-js@1.9.9)': 1067 + dependencies: 1068 + '@solid-primitives/event-listener': 2.4.3(solid-js@1.9.9) 1069 + '@solid-primitives/rootless': 1.5.2(solid-js@1.9.9) 1070 + '@solid-primitives/static-store': 0.1.2(solid-js@1.9.9) 1071 + '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) 1072 + solid-js: 1.9.9 1073 + 1074 + '@solid-primitives/rootless@1.5.2(solid-js@1.9.9)': 1075 + dependencies: 1076 + '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) 1077 + solid-js: 1.9.9 1078 + 1079 + '@solid-primitives/scheduled@1.5.2(solid-js@1.9.9)': 1080 + dependencies: 1081 + solid-js: 1.9.9 1082 + 1083 + '@solid-primitives/static-store@0.1.2(solid-js@1.9.9)': 1084 + dependencies: 1085 + '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) 1086 + solid-js: 1.9.9 1087 + 1088 + '@solid-primitives/styles@0.1.2(solid-js@1.9.9)': 1089 + dependencies: 1090 + '@solid-primitives/rootless': 1.5.2(solid-js@1.9.9) 1091 + '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) 1092 + solid-js: 1.9.9 1093 + 1094 + '@solid-primitives/utils@6.3.2(solid-js@1.9.9)': 1095 + dependencies: 1096 + solid-js: 1.9.9 1097 + 1098 + '@types/babel__core@7.20.5': 1099 + dependencies: 1100 + '@babel/parser': 7.28.4 1101 + '@babel/types': 7.28.4 1102 + '@types/babel__generator': 7.27.0 1103 + '@types/babel__template': 7.4.4 1104 + '@types/babel__traverse': 7.28.0 1105 + 1106 + '@types/babel__generator@7.27.0': 1107 + dependencies: 1108 + '@babel/types': 7.28.4 1109 + 1110 + '@types/babel__template@7.4.4': 1111 + dependencies: 1112 + '@babel/parser': 7.28.4 1113 + '@babel/types': 7.28.4 1114 + 1115 + '@types/babel__traverse@7.28.0': 1116 + dependencies: 1117 + '@babel/types': 7.28.4 1118 + 1119 + '@types/estree@1.0.8': {} 1120 + 1121 + babel-plugin-jsx-dom-expressions@0.40.1(@babel/core@7.28.4): 1122 + dependencies: 1123 + '@babel/core': 7.28.4 1124 + '@babel/helper-module-imports': 7.18.6 1125 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) 1126 + '@babel/types': 7.28.4 1127 + html-entities: 2.3.3 1128 + parse5: 7.3.0 1129 + validate-html-nesting: 1.2.3 1130 + 1131 + babel-preset-solid@1.9.9(@babel/core@7.28.4)(solid-js@1.9.9): 1132 + dependencies: 1133 + '@babel/core': 7.28.4 1134 + babel-plugin-jsx-dom-expressions: 0.40.1(@babel/core@7.28.4) 1135 + optionalDependencies: 1136 + solid-js: 1.9.9 1137 + 1138 + browserslist@4.25.4: 1139 + dependencies: 1140 + caniuse-lite: 1.0.30001741 1141 + electron-to-chromium: 1.5.214 1142 + node-releases: 2.0.20 1143 + update-browserslist-db: 1.1.3(browserslist@4.25.4) 1144 + 1145 + caniuse-lite@1.0.30001741: {} 1146 + 1147 + convert-source-map@2.0.0: {} 1148 + 1149 + csstype@3.1.3: {} 1150 + 1151 + debug@4.4.1: 1152 + dependencies: 1153 + ms: 2.1.3 1154 + 1155 + electron-to-chromium@1.5.214: {} 1156 + 1157 + entities@6.0.1: {} 1158 + 1159 + esbuild@0.25.11: 1160 + optionalDependencies: 1161 + '@esbuild/aix-ppc64': 0.25.11 1162 + '@esbuild/android-arm': 0.25.11 1163 + '@esbuild/android-arm64': 0.25.11 1164 + '@esbuild/android-x64': 0.25.11 1165 + '@esbuild/darwin-arm64': 0.25.11 1166 + '@esbuild/darwin-x64': 0.25.11 1167 + '@esbuild/freebsd-arm64': 0.25.11 1168 + '@esbuild/freebsd-x64': 0.25.11 1169 + '@esbuild/linux-arm': 0.25.11 1170 + '@esbuild/linux-arm64': 0.25.11 1171 + '@esbuild/linux-ia32': 0.25.11 1172 + '@esbuild/linux-loong64': 0.25.11 1173 + '@esbuild/linux-mips64el': 0.25.11 1174 + '@esbuild/linux-ppc64': 0.25.11 1175 + '@esbuild/linux-riscv64': 0.25.11 1176 + '@esbuild/linux-s390x': 0.25.11 1177 + '@esbuild/linux-x64': 0.25.11 1178 + '@esbuild/netbsd-arm64': 0.25.11 1179 + '@esbuild/netbsd-x64': 0.25.11 1180 + '@esbuild/openbsd-arm64': 0.25.11 1181 + '@esbuild/openbsd-x64': 0.25.11 1182 + '@esbuild/openharmony-arm64': 0.25.11 1183 + '@esbuild/sunos-x64': 0.25.11 1184 + '@esbuild/win32-arm64': 0.25.11 1185 + '@esbuild/win32-ia32': 0.25.11 1186 + '@esbuild/win32-x64': 0.25.11 1187 + 1188 + escalade@3.2.0: {} 1189 + 1190 + fdir@6.5.0(picomatch@4.0.3): 1191 + optionalDependencies: 1192 + picomatch: 4.0.3 1193 + 1194 + fsevents@2.3.3: 1195 + optional: true 1196 + 1197 + gensync@1.0.0-beta.2: {} 1198 + 1199 + html-entities@2.3.3: {} 1200 + 1201 + is-what@4.1.16: {} 1202 + 1203 + js-tokens@4.0.0: {} 1204 + 1205 + jsesc@3.1.0: {} 1206 + 1207 + json5@2.2.3: {} 1208 + 1209 + lru-cache@5.1.1: 1210 + dependencies: 1211 + yallist: 3.1.1 1212 + 1213 + merge-anything@5.1.7: 1214 + dependencies: 1215 + is-what: 4.1.16 1216 + 1217 + ms@2.1.3: {} 1218 + 1219 + nanoid@3.3.11: {} 1220 + 1221 + node-releases@2.0.20: {} 1222 + 1223 + parse5@7.3.0: 1224 + dependencies: 1225 + entities: 6.0.1 1226 + 1227 + picocolors@1.1.1: {} 1228 + 1229 + picomatch@4.0.3: {} 1230 + 1231 + postcss@8.5.6: 1232 + dependencies: 1233 + nanoid: 3.3.11 1234 + picocolors: 1.1.1 1235 + source-map-js: 1.2.1 1236 + 1237 + rollup@4.52.5: 1238 + dependencies: 1239 + '@types/estree': 1.0.8 1240 + optionalDependencies: 1241 + '@rollup/rollup-android-arm-eabi': 4.52.5 1242 + '@rollup/rollup-android-arm64': 4.52.5 1243 + '@rollup/rollup-darwin-arm64': 4.52.5 1244 + '@rollup/rollup-darwin-x64': 4.52.5 1245 + '@rollup/rollup-freebsd-arm64': 4.52.5 1246 + '@rollup/rollup-freebsd-x64': 4.52.5 1247 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.5 1248 + '@rollup/rollup-linux-arm-musleabihf': 4.52.5 1249 + '@rollup/rollup-linux-arm64-gnu': 4.52.5 1250 + '@rollup/rollup-linux-arm64-musl': 4.52.5 1251 + '@rollup/rollup-linux-loong64-gnu': 4.52.5 1252 + '@rollup/rollup-linux-ppc64-gnu': 4.52.5 1253 + '@rollup/rollup-linux-riscv64-gnu': 4.52.5 1254 + '@rollup/rollup-linux-riscv64-musl': 4.52.5 1255 + '@rollup/rollup-linux-s390x-gnu': 4.52.5 1256 + '@rollup/rollup-linux-x64-gnu': 4.52.5 1257 + '@rollup/rollup-linux-x64-musl': 4.52.5 1258 + '@rollup/rollup-openharmony-arm64': 4.52.5 1259 + '@rollup/rollup-win32-arm64-msvc': 4.52.5 1260 + '@rollup/rollup-win32-ia32-msvc': 4.52.5 1261 + '@rollup/rollup-win32-x64-gnu': 4.52.5 1262 + '@rollup/rollup-win32-x64-msvc': 4.52.5 1263 + fsevents: 2.3.3 1264 + 1265 + semver@6.3.1: {} 1266 + 1267 + seroval-plugins@1.3.3(seroval@1.3.2): 1268 + dependencies: 1269 + seroval: 1.3.2 1270 + 1271 + seroval@1.3.2: {} 1272 + 1273 + solid-devtools@0.34.3(solid-js@1.9.9)(vite@7.1.10): 1274 + dependencies: 1275 + '@babel/core': 7.28.4 1276 + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) 1277 + '@babel/types': 7.28.4 1278 + '@solid-devtools/debugger': 0.28.1(solid-js@1.9.9) 1279 + '@solid-devtools/shared': 0.20.0(solid-js@1.9.9) 1280 + solid-js: 1.9.9 1281 + optionalDependencies: 1282 + vite: 7.1.10 1283 + transitivePeerDependencies: 1284 + - supports-color 1285 + 1286 + solid-js@1.9.9: 1287 + dependencies: 1288 + csstype: 3.1.3 1289 + seroval: 1.3.2 1290 + seroval-plugins: 1.3.3(seroval@1.3.2) 1291 + 1292 + solid-refresh@0.6.3(solid-js@1.9.9): 1293 + dependencies: 1294 + '@babel/generator': 7.28.3 1295 + '@babel/helper-module-imports': 7.27.1 1296 + '@babel/types': 7.28.4 1297 + solid-js: 1.9.9 1298 + transitivePeerDependencies: 1299 + - supports-color 1300 + 1301 + source-map-js@1.2.1: {} 1302 + 1303 + tinyglobby@0.2.15: 1304 + dependencies: 1305 + fdir: 6.5.0(picomatch@4.0.3) 1306 + picomatch: 4.0.3 1307 + 1308 + typescript@5.9.2: {} 1309 + 1310 + update-browserslist-db@1.1.3(browserslist@4.25.4): 1311 + dependencies: 1312 + browserslist: 4.25.4 1313 + escalade: 3.2.0 1314 + picocolors: 1.1.1 1315 + 1316 + validate-html-nesting@1.2.3: {} 1317 + 1318 + vite-plugin-solid@2.11.9(solid-js@1.9.9)(vite@7.1.10): 1319 + dependencies: 1320 + '@babel/core': 7.28.4 1321 + '@types/babel__core': 7.20.5 1322 + babel-preset-solid: 1.9.9(@babel/core@7.28.4)(solid-js@1.9.9) 1323 + merge-anything: 5.1.7 1324 + solid-js: 1.9.9 1325 + solid-refresh: 0.6.3(solid-js@1.9.9) 1326 + vite: 7.1.10 1327 + vitefu: 1.1.1(vite@7.1.10) 1328 + transitivePeerDependencies: 1329 + - supports-color 1330 + 1331 + vite@7.1.10: 1332 + dependencies: 1333 + esbuild: 0.25.11 1334 + fdir: 6.5.0(picomatch@4.0.3) 1335 + picomatch: 4.0.3 1336 + postcss: 8.5.6 1337 + rollup: 4.52.5 1338 + tinyglobby: 0.2.15 1339 + optionalDependencies: 1340 + fsevents: 2.3.3 1341 + 1342 + vitefu@1.1.1(vite@7.1.10): 1343 + optionalDependencies: 1344 + vite: 7.1.10 1345 + 1346 + yallist@3.1.1: {}
+5
postcss.config.cjs
··· 1 + module.exports = { 2 + plugins: { 3 + '@pandacss/dev/postcss': {}, 4 + }, 5 + }
+264
src/App.tsx
··· 1 + import { createSignal, For } from "solid-js"; 2 + 3 + import { 4 + CheckIcon, 5 + ChevronsUpDownIcon, 6 + ClipboardIcon, 7 + Trash2Icon, 8 + } from "lucide-solid"; 9 + import { Button } from "./components/ui/button"; 10 + import { Card } from "./components/ui/card"; 11 + import { Stack, Box, StackProps, HStack } from "styled-system/jsx"; 12 + import { FileUpload } from "./components/ui/file-upload"; 13 + import { IconButton } from "./components/ui/icon-button"; 14 + import { Text } from "./components/ui/text"; 15 + 16 + import { AtprotoDid } from "@atcute/lexicons/syntax"; 17 + import { 18 + Account, 19 + accounts, 20 + selectedAccount, 21 + setSelectedAccount, 22 + } from "./lib/accounts"; 23 + import { Toaster } from "~/components/Toaster"; 24 + import { createListCollection, Select } from "./components/ui/select"; 25 + 26 + import { addTask, tasks, TaskState } from "./lib/task"; 27 + import Task from "./components/FileTask"; 28 + import Settings from "./components/Settings"; 29 + 30 + const App = () => { 31 + const collection = () => 32 + createListCollection({ 33 + items: accounts().map((account) => ({ 34 + label: account.handle ?? account.did, 35 + value: account.did, 36 + })), 37 + }); 38 + 39 + const AccountSelect = () => ( 40 + <Select.Root 41 + positioning={{ sameWidth: true }} 42 + value={selectedAccount() ? [selectedAccount()!] : []} 43 + onValueChange={(details) => 44 + setSelectedAccount(details.value[0] as AtprotoDid) 45 + } 46 + collection={collection()} 47 + > 48 + <Select.Control> 49 + <Select.Trigger 50 + border="none" 51 + p="2" 52 + pl="0" 53 + minW="8rem" 54 + maxW="xs" 55 + boxShadow={{ _focus: "none" }} 56 + justifyContent="end" 57 + disabled={accounts().length === 0} 58 + > 59 + <Box> 60 + {selectedAccount() ? "@" : ""} 61 + <Select.ValueText 62 + overflow="hidden" 63 + textOverflow="ellipsis" 64 + whiteSpace="nowrap" 65 + placeholder="account" 66 + /> 67 + </Box> 68 + <ChevronsUpDownIcon /> 69 + </Select.Trigger> 70 + </Select.Control> 71 + <Select.Positioner> 72 + <Select.Content> 73 + <Select.ItemGroup> 74 + <For each={collection().items}> 75 + {(item) => ( 76 + <Select.Item item={item}> 77 + <Select.ItemText 78 + overflow="hidden" 79 + textOverflow="ellipsis" 80 + whiteSpace="nowrap" 81 + > 82 + @{item.label} 83 + </Select.ItemText> 84 + <Select.ItemIndicator pl="2"> 85 + <CheckIcon /> 86 + </Select.ItemIndicator> 87 + </Select.Item> 88 + )} 89 + </For> 90 + </Select.ItemGroup> 91 + </Select.Content> 92 + </Select.Positioner> 93 + </Select.Root> 94 + ); 95 + 96 + return ( 97 + <Box 98 + w="100vw" 99 + h="100vh" 100 + display="flex" 101 + justifyContent="center" 102 + alignItems="center" 103 + > 104 + <Card.Root maxW="3xl" w="90%"> 105 + <Card.Header> 106 + <Card.Title w="full"> 107 + <Stack direction="row" align="center"> 108 + <Text>bsky voice memo</Text> 109 + <div style="flex-grow: 1;"></div> 110 + <AccountSelect /> 111 + <Settings /> 112 + </Stack> 113 + </Card.Title> 114 + <Card.Description> 115 + <ol> 116 + <li>1. upload a voice memo</li> 117 + <li>2. it will automatically be converted to a video</li> 118 + <li> 119 + 3. (optional) add an account for posting and using pfp in video 120 + </li> 121 + </ol> 122 + </Card.Description> 123 + </Card.Header> 124 + <Card.Body> 125 + <Stack 126 + gap={{ base: "4", smDown: "0" }} 127 + direction={{ base: "row", smDown: "column" }} 128 + > 129 + <Upload 130 + flex="4" 131 + acceptedFiles={[]} 132 + onFileAccept={(e) => 133 + e.files.forEach((file) => addTask(selectedAccount(), file)) 134 + } 135 + /> 136 + <Tasks 137 + flex="3" 138 + minH="20rem" 139 + maxH="20rem" 140 + minW="0" 141 + overflowY="scroll" 142 + currentTasks={tasks.values().toArray()} 143 + selectedAccount={accounts().find( 144 + (account) => account.did === selectedAccount(), 145 + )} 146 + /> 147 + </Stack> 148 + </Card.Body> 149 + {/*<Card.Footer gap="3"></Card.Footer>*/} 150 + </Card.Root> 151 + <Toaster /> 152 + </Box> 153 + ); 154 + }; 155 + export default App; 156 + 157 + type TasksProps = StackProps & { 158 + currentTasks: TaskState[]; 159 + selectedAccount: Account | undefined; 160 + }; 161 + 162 + const Tasks = (props: TasksProps) => ( 163 + <Stack 164 + border="1px solid var(--colors-border-subtle)" 165 + gap="1.5" 166 + p="2" 167 + rounded="sm" 168 + justifyContent={props.currentTasks.length === 0 ? "center" : undefined} 169 + alignItems={props.currentTasks.length === 0 ? "center" : undefined} 170 + {...props} 171 + > 172 + <For 173 + each={props.currentTasks} 174 + fallback={ 175 + <Box 176 + fontSize="sm" 177 + display="flex" 178 + justifyContent="center" 179 + alignItems="center" 180 + h="full" 181 + > 182 + no files processed (yet!) 183 + </Box> 184 + } 185 + > 186 + {(process) => Task(process, props.selectedAccount)} 187 + </For> 188 + </Stack> 189 + ); 190 + 191 + const getAudioClipboard = async () => { 192 + try { 193 + const clipboardItems = await navigator.clipboard.read(); 194 + for (const item of clipboardItems) { 195 + console.log(item); 196 + const type = item.types.find((type) => type.startsWith("audio/")); 197 + if (type) { 198 + const blob = await item.getType(type); 199 + const file = new File([blob], `audio.${type.split("/")[1]}`, { type }); 200 + return file; 201 + } 202 + } 203 + return; 204 + } catch (err) { 205 + console.error(err); 206 + return; 207 + } 208 + }; 209 + 210 + const Upload = (props: FileUpload.RootProps) => { 211 + return ( 212 + <FileUpload.Root maxFiles={100} {...props}> 213 + <FileUpload.Dropzone> 214 + <FileUpload.Label>drop your files here</FileUpload.Label> 215 + <HStack alignItems="center"> 216 + <FileUpload.Trigger 217 + asChild={(triggerProps) => ( 218 + <Button size="sm" {...triggerProps()}> 219 + or pick file 220 + </Button> 221 + )} 222 + /> 223 + {/*<IconButton 224 + size="sm" 225 + onClick={() => 226 + getAudioClipboard().then((file) => { 227 + if (!file) return; 228 + addTask(selectedAccount(), file); 229 + }) 230 + } 231 + variant="subtle" 232 + > 233 + <ClipboardIcon /> 234 + </IconButton>*/} 235 + </HStack> 236 + </FileUpload.Dropzone> 237 + <FileUpload.ItemGroup> 238 + <FileUpload.Context> 239 + {(fileUpload) => ( 240 + <For each={fileUpload().acceptedFiles}> 241 + {(file) => ( 242 + <FileUpload.Item file={file}> 243 + <FileUpload.ItemPreview type="image/*"> 244 + <FileUpload.ItemPreviewImage /> 245 + </FileUpload.ItemPreview> 246 + <FileUpload.ItemName /> 247 + <FileUpload.ItemSizeText /> 248 + <FileUpload.ItemDeleteTrigger 249 + asChild={(triggerProps) => ( 250 + <IconButton variant="link" size="sm" {...triggerProps()}> 251 + <Trash2Icon /> 252 + </IconButton> 253 + )} 254 + /> 255 + </FileUpload.Item> 256 + )} 257 + </For> 258 + )} 259 + </FileUpload.Context> 260 + </FileUpload.ItemGroup> 261 + <FileUpload.HiddenInput /> 262 + </FileUpload.Root> 263 + ); 264 + };
+129
src/components/FileTask.tsx
··· 1 + import { CircleAlertIcon, DownloadIcon, SendIcon } from "lucide-solid"; 2 + import { Stack } from "styled-system/jsx"; 3 + import { IconButton } from "~/components/ui/icon-button"; 4 + import { Spinner } from "~/components/ui/spinner"; 5 + import { Popover } from "~/components/ui/popover"; 6 + 7 + import { css } from "styled-system/css"; 8 + import { Account } from "~/lib/accounts"; 9 + 10 + import { TaskState } from "~/lib/task"; 11 + import PostDialog from "./PostDialog"; 12 + 13 + const downloadFile = (blob: Blob, fileName: string) => { 14 + const url = URL.createObjectURL(blob); 15 + const a = document.createElement("a"); 16 + a.href = url; 17 + // handle file names with periods in them 18 + a.download = fileName; 19 + document.body.appendChild(a); 20 + a.click(); 21 + document.body.removeChild(a); 22 + URL.revokeObjectURL(url); 23 + }; 24 + 25 + const Task = (process: TaskState, selectedAccount: Account | undefined) => { 26 + const statusError = (error: string) => ( 27 + <Popover.Root> 28 + <Popover.Trigger 29 + asChild={(triggerProps) => ( 30 + <IconButton 31 + {...triggerProps()} 32 + color={{ 33 + base: "red", 34 + _hover: "red.emphasized", 35 + }} 36 + variant="ghost" 37 + > 38 + <CircleAlertIcon /> 39 + </IconButton> 40 + )} 41 + /> 42 + <Popover.Positioner> 43 + <Popover.Content>error processing file: {error}</Popover.Content> 44 + </Popover.Positioner> 45 + </Popover.Root> 46 + ); 47 + const statusSuccess = (result: Blob) => { 48 + return ( 49 + <> 50 + <IconButton 51 + color={{ _hover: "colorPalette.emphasized" }} 52 + onClick={() => 53 + downloadFile( 54 + result, 55 + process.file.name 56 + .split(".") 57 + .slice(0, -1) 58 + .join(".") 59 + .concat(".mp4"), 60 + ) 61 + } 62 + variant="ghost" 63 + > 64 + <DownloadIcon /> 65 + </IconButton> 66 + <PostDialog 67 + trigger={(props) => ( 68 + <IconButton 69 + {...props} 70 + disabled={selectedAccount === undefined} 71 + color={{ _hover: "colorPalette.emphasized" }} 72 + variant="ghost" 73 + > 74 + <SendIcon /> 75 + </IconButton> 76 + )} 77 + account={selectedAccount} 78 + result={result} 79 + /> 80 + </> 81 + ); 82 + }; 83 + const statusProcessing = () => ( 84 + <Spinner 85 + borderLeftColor="bg.emphasized" 86 + borderBottomColor="bg.emphasized" 87 + borderWidth="4px" 88 + m="2" 89 + /> 90 + ); 91 + 92 + const status = () => { 93 + switch (process.status) { 94 + case "success": 95 + return statusSuccess(process.result); 96 + case "processing": 97 + return statusProcessing(); 98 + default: 99 + return statusError(process.error); 100 + } 101 + }; 102 + 103 + return ( 104 + <Stack 105 + direction="row" 106 + border="1px solid var(--colors-border-muted)" 107 + gap="2" 108 + align="center" 109 + rounded="sm" 110 + > 111 + <span 112 + class={css({ 113 + overflow: "hidden", 114 + textOverflow: "ellipsis", 115 + whiteSpace: "nowrap", 116 + pl: 2, 117 + })} 118 + > 119 + {process.file.name} 120 + </span> 121 + <div class={css({ flexGrow: 1 })}></div> 122 + <Stack direction="row" gap="0" flexShrink="0" align="center"> 123 + {status()} 124 + </Stack> 125 + </Stack> 126 + ); 127 + }; 128 + 129 + export default Task;
+142
src/components/PostDialog.tsx
··· 1 + import { Component, createSignal } from "solid-js"; 2 + 3 + import { SendIcon, XIcon } from "lucide-solid"; 4 + import { Stack } from "styled-system/jsx"; 5 + import { IconButton } from "~/components/ui/icon-button"; 6 + import { Spinner } from "~/components/ui/spinner"; 7 + import { Text } from "~/components/ui/text"; 8 + import { Link } from "~/components/ui/link"; 9 + 10 + import { parseCanonicalResourceUri } from "@atcute/lexicons/syntax"; 11 + import { css } from "styled-system/css"; 12 + import { sendPost } from "~/lib/at"; 13 + import { toaster } from "~/components/Toaster"; 14 + import { Dialog } from "~/components/ui/dialog"; 15 + import { Textarea } from "~/components/ui/textarea"; 16 + import { Account } from "~/lib/accounts"; 17 + 18 + const PostDialog = (props: { 19 + trigger: Component; 20 + result: Blob; 21 + account: Account | undefined; 22 + }) => { 23 + const [postContent, setPostContent] = createSignal<string>(""); 24 + const [posting, setPosting] = createSignal(false); 25 + const [open, setOpen] = createSignal(false); 26 + 27 + return ( 28 + <Dialog.Root open={open()} onOpenChange={(e) => setOpen(e.open)}> 29 + <Dialog.Trigger 30 + asChild={(triggerProps) => <props.trigger {...triggerProps()} />} 31 + /> 32 + <Dialog.Backdrop /> 33 + <Dialog.Positioner> 34 + <Dialog.Content> 35 + <Stack> 36 + <Stack gap="0"> 37 + <video 38 + class={css({ maxW: "sm", roundedTop: "xs" })} 39 + controls 40 + src={URL.createObjectURL(props.result)} 41 + ></video> 42 + <Textarea 43 + placeholder="enter text content..." 44 + id="post-content" 45 + value={postContent()} 46 + onChange={(e) => setPostContent(e.target.value)} 47 + rows={2} 48 + resize="none" 49 + border="none" 50 + borderTop="1px solid var(--colors-border-muted)" 51 + boxShadow={{ base: "none", _focus: "none" }} 52 + /> 53 + </Stack> 54 + <Stack 55 + borderTop="1px solid var(--colors-border-muted)" 56 + gap="2" 57 + p="3" 58 + direction="row" 59 + align="center" 60 + > 61 + <Stack direction="row" align="center"> 62 + <Dialog.Title> 63 + post to {props.account?.handle ?? props.account?.did} 64 + </Dialog.Title> 65 + </Stack> 66 + <div class={css({ flexGrow: 1 })} /> 67 + {posting() ? ( 68 + <Spinner 69 + borderLeftColor="bg.emphasized" 70 + borderBottomColor="bg.emphasized" 71 + borderWidth="4px" 72 + size="sm" 73 + /> 74 + ) : ( 75 + <Dialog.CloseTrigger 76 + asChild={(closeTriggerProps) => ( 77 + <IconButton 78 + {...closeTriggerProps()} 79 + aria-label="Close Dialog" 80 + variant="ghost" 81 + size="sm" 82 + > 83 + <XIcon /> 84 + </IconButton> 85 + )} 86 + /> 87 + )} 88 + <IconButton 89 + disabled={posting()} 90 + onClick={() => { 91 + setPosting(true); 92 + sendPost(props.account?.did!, props.result, postContent()) 93 + .then((result) => { 94 + const parsedUri = parseCanonicalResourceUri(result.uri); 95 + if (!parsedUri.ok) throw "failed to parse atproto uri"; 96 + const { repo, rkey } = parsedUri.value; 97 + toaster.create({ 98 + title: "post sent", 99 + description: ( 100 + <> 101 + <Text>view post </Text> 102 + <Link 103 + href={`https://bsky.app/profile/${repo}/post/${rkey}`} 104 + color={{ 105 + base: "colorPalette.text", 106 + _hover: "colorPalette.emphasized", 107 + }} 108 + textDecoration={{ _hover: "underline" }} 109 + > 110 + here 111 + </Link> 112 + </> 113 + ), 114 + type: "success", 115 + }); 116 + setOpen(false); 117 + }) 118 + .catch((error) => { 119 + toaster.create({ 120 + title: "send post failed", 121 + description: error, 122 + type: "error", 123 + }); 124 + }) 125 + .finally(() => { 126 + setPosting(false); 127 + }); 128 + }} 129 + variant="ghost" 130 + size="sm" 131 + > 132 + <SendIcon /> 133 + </IconButton> 134 + </Stack> 135 + </Stack> 136 + </Dialog.Content> 137 + </Dialog.Positioner> 138 + </Dialog.Root> 139 + ); 140 + }; 141 + 142 + export default PostDialog;
+404
src/components/Settings.tsx
··· 1 + import { createSignal, For, Signal } from "solid-js"; 2 + 3 + import { 4 + CheckIcon, 5 + ChevronsUpDownIcon, 6 + CogIcon, 7 + PipetteIcon, 8 + PlusIcon, 9 + Trash2Icon, 10 + XIcon, 11 + } from "lucide-solid"; 12 + import { Button } from "~/components/ui/button"; 13 + import { Field } from "~/components/ui/field"; 14 + import { Stack, Box, HStack } from "styled-system/jsx"; 15 + import { IconButton } from "~/components/ui/icon-button"; 16 + import { FormLabel } from "~/components/ui/form-label"; 17 + import { Checkbox } from "~/components/ui/checkbox"; 18 + import { Drawer } from "~/components/ui/drawer"; 19 + import { Text } from "~/components/ui/text"; 20 + 21 + import { Handle, isHandle } from "@atcute/lexicons/syntax"; 22 + import { css } from "styled-system/css"; 23 + import { flow, sessions } from "~/lib/oauth"; 24 + import { 25 + Account, 26 + loggingIn, 27 + accounts, 28 + setAccounts, 29 + setSelectedAccount, 30 + } from "~/lib/accounts"; 31 + import { 32 + showProfilePicture as showProfilePictureSetting, 33 + showVisualizer as showVisualizerSetting, 34 + backgroundColor as backgroundColorSetting, 35 + frameRate as frameRateSetting, 36 + useDominantColorAsBg as useDominantColorAsBgSetting, 37 + Setting, 38 + } from "~/lib/settings"; 39 + import { handleResolver } from "~/lib/at"; 40 + import { toaster } from "~/components/Toaster"; 41 + import { createListCollection, Select } from "~/components/ui/select"; 42 + 43 + import { type Color, type ListCollection, parseColor } from "@ark-ui/solid"; 44 + import { ColorPicker } from "~/components/ui/color-picker"; 45 + import { Input } from "~/components/ui/input"; 46 + 47 + const SettingCheckbox = (props: { 48 + setting: Setting<boolean>; 49 + signal: Signal<boolean>; 50 + label: string; 51 + disabled?: boolean; 52 + }) => ( 53 + <Checkbox 54 + p="2" 55 + checked={props.signal[0]()} 56 + onCheckedChange={(e) => { 57 + const val = e.checked === "indeterminate" ? false : e.checked; 58 + props.signal[1](val); 59 + props.setting.set(val); 60 + }} 61 + disabled={props.disabled} 62 + colorPalette={props.disabled ? "gray" : undefined} 63 + cursor={props.disabled ? { _hover: "not-allowed" } : undefined} 64 + > 65 + <Text color={props.disabled ? "fg.disabled" : undefined}> 66 + {props.label} 67 + </Text> 68 + </Checkbox> 69 + ); 70 + 71 + const SettingSelect = (props: { 72 + label: string; 73 + signal: Signal<string>; 74 + collection: ListCollection<{ label: string; value: string }>; 75 + }) => ( 76 + <Select.Root 77 + width="2xs" 78 + positioning={{ sameWidth: true }} 79 + value={[props.signal[0]()]} 80 + onValueChange={(details) => props.signal[1](details.value[0])} 81 + collection={props.collection} 82 + > 83 + <Select.Label px="2">{props.label}</Select.Label> 84 + <Select.Control> 85 + <Select.Trigger border="none" p="2" boxShadow={{ _focus: "none" }}> 86 + <Select.ValueText placeholder="account" /> 87 + <ChevronsUpDownIcon /> 88 + </Select.Trigger> 89 + </Select.Control> 90 + <Select.Positioner> 91 + <Select.Content> 92 + <Select.ItemGroup> 93 + <For each={props.collection.items}> 94 + {(item) => ( 95 + <Select.Item item={item}> 96 + <Select.ItemText>{item.label}</Select.ItemText> 97 + <Select.ItemIndicator pl="2"> 98 + <CheckIcon /> 99 + </Select.ItemIndicator> 100 + </Select.Item> 101 + )} 102 + </For> 103 + </Select.ItemGroup> 104 + </Select.Content> 105 + </Select.Positioner> 106 + </Select.Root> 107 + ); 108 + 109 + const SettingColorPicker = (props: { 110 + label: string; 111 + signal: Signal<Color>; 112 + }) => { 113 + return ( 114 + <ColorPicker.Root 115 + p="2" 116 + value={props.signal[0]()} 117 + onValueChange={(e) => props.signal[1](e.value)} 118 + onValueChangeEnd={(e) => props.signal[1](e.value)} 119 + > 120 + <ColorPicker.Context> 121 + {(api) => ( 122 + <> 123 + <ColorPicker.Label>{props.label}</ColorPicker.Label> 124 + <ColorPicker.Control> 125 + <ColorPicker.ChannelInput 126 + channel="hex" 127 + asChild={(inputProps) => <Input {...inputProps()} />} 128 + /> 129 + <ColorPicker.Trigger 130 + asChild={(triggerProps) => ( 131 + <IconButton variant="outline" {...triggerProps()}> 132 + <ColorPicker.Swatch value={api().value} /> 133 + </IconButton> 134 + )} 135 + /> 136 + </ColorPicker.Control> 137 + <ColorPicker.Positioner> 138 + <ColorPicker.Content> 139 + <Stack gap="3"> 140 + <ColorPicker.Area> 141 + <ColorPicker.AreaBackground /> 142 + <ColorPicker.AreaThumb /> 143 + </ColorPicker.Area> 144 + <HStack gap="3"> 145 + <ColorPicker.EyeDropperTrigger 146 + asChild={(triggerProps) => ( 147 + <IconButton 148 + size="xs" 149 + variant="outline" 150 + aria-label="Pick a color" 151 + {...triggerProps()} 152 + > 153 + <PipetteIcon /> 154 + </IconButton> 155 + )} 156 + /> 157 + <Stack gap="2" flex="1"> 158 + <ColorPicker.ChannelSlider channel="hue"> 159 + <ColorPicker.ChannelSliderTrack /> 160 + <ColorPicker.ChannelSliderThumb /> 161 + </ColorPicker.ChannelSlider> 162 + <ColorPicker.ChannelSlider channel="alpha"> 163 + <ColorPicker.TransparencyGrid size="8px" /> 164 + <ColorPicker.ChannelSliderTrack /> 165 + <ColorPicker.ChannelSliderThumb /> 166 + </ColorPicker.ChannelSlider> 167 + </Stack> 168 + </HStack> 169 + <HStack> 170 + <ColorPicker.ChannelInput 171 + channel="hex" 172 + asChild={(inputProps) => ( 173 + <Input size="2xs" {...inputProps()} /> 174 + )} 175 + /> 176 + <ColorPicker.ChannelInput 177 + channel="alpha" 178 + asChild={(inputProps) => ( 179 + <Input size="2xs" {...inputProps()} /> 180 + )} 181 + /> 182 + </HStack> 183 + </Stack> 184 + </ColorPicker.Content> 185 + </ColorPicker.Positioner> 186 + </> 187 + )} 188 + </ColorPicker.Context> 189 + <ColorPicker.HiddenInput /> 190 + </ColorPicker.Root> 191 + ); 192 + }; 193 + 194 + const Settings = () => { 195 + const [handle, setHandle] = createSignal(""); 196 + const isHandleValid = () => isHandle(handle()); 197 + 198 + const deleteAccount = (account: Account) => { 199 + const newAccounts = accounts().filter((a) => a.did !== account.did); 200 + setAccounts(newAccounts); 201 + sessions.remove(account.did); 202 + setSelectedAccount(newAccounts[0]?.did ?? undefined); 203 + }; 204 + 205 + const startAccountFlow = async () => { 206 + try { 207 + toaster.create({ 208 + title: "logging in", 209 + description: `logging in to ${handle()}...`, 210 + type: "info", 211 + }); 212 + const did = await handleResolver.resolve(handle() as Handle); 213 + loggingIn.set(did); 214 + await flow.start(did); 215 + } catch (err) { 216 + console.error(err); 217 + toaster.create({ 218 + title: "login error", 219 + description: `${err}`, 220 + type: "error", 221 + }); 222 + loggingIn.set(undefined); 223 + } 224 + }; 225 + 226 + const Accounts = () => { 227 + const item = (account: Account) => ( 228 + <Stack 229 + direction="row" 230 + w="full" 231 + px="2" 232 + pb="2" 233 + borderBottom="1px solid var(--colors-border-muted)" 234 + align="center" 235 + > 236 + {account.handle ? `@${account.handle}` : account.did} 237 + <div class={css({ flexGrow: 1 })} /> 238 + <IconButton 239 + onClick={() => deleteAccount(account)} 240 + variant="ghost" 241 + size="sm" 242 + > 243 + <Trash2Icon /> 244 + </IconButton> 245 + </Stack> 246 + ); 247 + const items = (accounts: Account[]) => ( 248 + <For 249 + each={accounts} 250 + fallback={ 251 + <Text color="fg.muted" px="2" pb="2" alignSelf="center"> 252 + no accounts added 253 + </Text> 254 + } 255 + > 256 + {item} 257 + </For> 258 + ); 259 + return ( 260 + <Stack> 261 + <FormLabel>accounts</FormLabel> 262 + <Stack border="1px solid var(--colors-border-default)" rounded="xs"> 263 + <Stack 264 + borderBottom="1px solid var(--colors-border-default)" 265 + p="2" 266 + direction="row" 267 + gap="2" 268 + w="full" 269 + > 270 + <Field.Root w="full"> 271 + <Field.Input 272 + placeholder="example.bsky.social" 273 + value={handle()} 274 + onInput={(e) => setHandle(e.currentTarget.value)} 275 + /> 276 + </Field.Root> 277 + <IconButton onClick={startAccountFlow} disabled={!isHandleValid()}> 278 + <PlusIcon /> 279 + </IconButton> 280 + </Stack> 281 + {items(accounts())} 282 + </Stack> 283 + </Stack> 284 + ); 285 + }; 286 + 287 + const [showProfilePicture, setShowProfilePicture] = createSignal( 288 + showProfilePictureSetting.get() ?? true, 289 + ); 290 + const [showVisualizer, setShowVisualizer] = createSignal( 291 + showVisualizerSetting.get() ?? true, 292 + ); 293 + const [useDominantColorAsBg, setUseDominantColorAsBg] = createSignal( 294 + useDominantColorAsBgSetting.get() ?? true, 295 + ); 296 + 297 + const frameRateCollection = createListCollection({ 298 + items: [24, 30, 60].map((rate) => ({ 299 + label: `${rate} FPS`, 300 + value: rate.toString(), 301 + })), 302 + }); 303 + const [frameRate, _setFrameRate] = createSignal( 304 + (frameRateSetting.get() ?? 24).toString(), 305 + ); 306 + const setFrameRate = (value: string | ((prev: string) => string)) => { 307 + const newFrameRate = _setFrameRate(value); 308 + frameRateSetting.set(parseInt(newFrameRate)); 309 + }; 310 + 311 + const [backgroundColor, _setBackgroundColor] = createSignal( 312 + parseColor(backgroundColorSetting.get() ?? "#000000"), 313 + ); 314 + const setBackgroundColor = (value: Color | ((prev: Color) => Color)) => { 315 + const newColor = _setBackgroundColor(value); 316 + backgroundColorSetting.set(newColor.toString("rgb")); 317 + }; 318 + 319 + return ( 320 + <Drawer.Root> 321 + <Drawer.Trigger 322 + asChild={(triggerProps) => ( 323 + <IconButton variant="outline" {...triggerProps()}> 324 + <CogIcon /> 325 + </IconButton> 326 + )} 327 + /> 328 + <Drawer.Backdrop /> 329 + <Drawer.Positioner> 330 + <Drawer.Content> 331 + <Drawer.Header p="0" pl="4"> 332 + <Stack direction="row" alignItems="center"> 333 + <Drawer.Title>settings</Drawer.Title> 334 + <div style="flex-grow: 1;"></div> 335 + <Drawer.CloseTrigger 336 + placeSelf="end" 337 + asChild={(closeProps) => ( 338 + <IconButton size="lg" {...closeProps()} variant="ghost"> 339 + <XIcon /> 340 + </IconButton> 341 + )} 342 + /> 343 + </Stack> 344 + </Drawer.Header> 345 + <Drawer.Body> 346 + <Stack gap="4"> 347 + <Accounts /> 348 + <Stack> 349 + <FormLabel>processing</FormLabel> 350 + <Stack 351 + gap="0" 352 + border="1px solid var(--colors-border-default)" 353 + rounded="xs" 354 + > 355 + <Box borderBottom="1px solid var(--colors-border-subtle)"> 356 + <SettingCheckbox 357 + label="show profile picture" 358 + setting={showProfilePictureSetting} 359 + signal={[showProfilePicture, setShowProfilePicture]} 360 + /> 361 + </Box> 362 + <SettingCheckbox 363 + label="show visualizer" 364 + setting={showVisualizerSetting} 365 + signal={[showVisualizer, setShowVisualizer]} 366 + /> 367 + <Stack gap="0" borderY="1px solid var(--colors-border-muted)"> 368 + <SettingCheckbox 369 + label="use dominant color as bg" 370 + setting={useDominantColorAsBgSetting} 371 + signal={[useDominantColorAsBg, setUseDominantColorAsBg]} 372 + disabled={!showProfilePicture()} 373 + /> 374 + <SettingColorPicker 375 + label="background color" 376 + signal={[backgroundColor, setBackgroundColor]} 377 + /> 378 + </Stack> 379 + <Box borderBottom="1px solid var(--colors-border-muted)"> 380 + <SettingSelect 381 + label="frame rate" 382 + signal={[frameRate, setFrameRate]} 383 + collection={frameRateCollection} 384 + /> 385 + </Box> 386 + </Stack> 387 + </Stack> 388 + </Stack> 389 + </Drawer.Body> 390 + <Drawer.Footer p="2" gap="3"> 391 + <Drawer.CloseTrigger 392 + asChild={(closeProps) => ( 393 + <Button {...closeProps()} variant="outline"> 394 + back 395 + </Button> 396 + )} 397 + /> 398 + </Drawer.Footer> 399 + </Drawer.Content> 400 + </Drawer.Positioner> 401 + </Drawer.Root> 402 + ); 403 + }; 404 + export default Settings;
+27
src/components/Toaster.tsx
··· 1 + import { XIcon } from "lucide-solid"; 2 + import { Toast } from "~/components/ui/toast"; 3 + import { IconButton } from "./ui/icon-button"; 4 + 5 + export const toaster = Toast.createToaster({ 6 + placement: "bottom-start", 7 + overlap: false, 8 + gap: 12, 9 + }); 10 + 11 + export const Toaster = () => ( 12 + <Toast.Toaster toaster={toaster}> 13 + {(toast) => ( 14 + <Toast.Root> 15 + <Toast.Title>{toast().title}</Toast.Title> 16 + <Toast.Description>{toast().description}</Toast.Description> 17 + <Toast.CloseTrigger 18 + asChild={(closeProps) => ( 19 + <IconButton {...closeProps()} size="sm" variant="link"> 20 + <XIcon /> 21 + </IconButton> 22 + )} 23 + /> 24 + </Toast.Root> 25 + )} 26 + </Toast.Toaster> 27 + );
+43
src/components/ui/button.tsx
··· 1 + import type { JSX } from 'solid-js' 2 + import { Show, splitProps } from 'solid-js' 3 + import { Center, styled } from 'styled-system/jsx' 4 + import { Spinner } from './spinner' 5 + import { Button as StyledButton, type ButtonProps as StyledButtonProps } from './styled/button' 6 + 7 + interface ButtonLoadingProps { 8 + loading?: boolean 9 + loadingText?: JSX.Element 10 + } 11 + 12 + export interface ButtonProps extends StyledButtonProps, ButtonLoadingProps {} 13 + 14 + export const Button = (props: ButtonProps) => { 15 + const [localProps, rest] = splitProps(props, ['loading', 'disabled', 'loadingText', 'children']) 16 + const trulyDisabled = () => localProps.loading || localProps.disabled 17 + 18 + return ( 19 + <StyledButton disabled={trulyDisabled()} {...rest}> 20 + <Show 21 + when={localProps.loading && !localProps.loadingText} 22 + fallback={localProps.loadingText || localProps.children} 23 + > 24 + <> 25 + <ButtonSpinner /> 26 + <styled.span opacity={0}>{localProps.children}</styled.span> 27 + </> 28 + </Show> 29 + </StyledButton> 30 + ) 31 + } 32 + 33 + const ButtonSpinner = () => ( 34 + <Center inline position="absolute" transform="translate(-50%, -50%)" top="50%" insetStart="50%"> 35 + <Spinner 36 + width="1.1em" 37 + height="1.1em" 38 + borderWidth="1.5px" 39 + borderTopColor="fg.disabled" 40 + borderRightColor="fg.disabled" 41 + /> 42 + </Center> 43 + )
+1
src/components/ui/card.tsx
··· 1 + export * as Card from './styled/card'
+51
src/components/ui/checkbox.tsx
··· 1 + import { Show, children } from 'solid-js' 2 + import * as StyledCheckbox from './styled/checkbox' 3 + 4 + export interface CheckboxProps extends StyledCheckbox.RootProps {} 5 + 6 + export const Checkbox = (props: CheckboxProps) => { 7 + const getChildren = children(() => props.children) 8 + 9 + return ( 10 + <StyledCheckbox.Root {...props}> 11 + <StyledCheckbox.Control> 12 + <StyledCheckbox.Indicator> 13 + <CheckIcon /> 14 + </StyledCheckbox.Indicator> 15 + <StyledCheckbox.Indicator indeterminate> 16 + <MinusIcon /> 17 + </StyledCheckbox.Indicator> 18 + </StyledCheckbox.Control> 19 + <Show when={getChildren()}> 20 + <StyledCheckbox.Label>{getChildren()}</StyledCheckbox.Label> 21 + </Show> 22 + <StyledCheckbox.HiddenInput /> 23 + </StyledCheckbox.Root> 24 + ) 25 + } 26 + 27 + const CheckIcon = () => ( 28 + <svg viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"> 29 + <title>Check Icon</title> 30 + <path 31 + d="M11.6666 3.5L5.24992 9.91667L2.33325 7" 32 + stroke="currentColor" 33 + stroke-width="2" 34 + stroke-linecap="round" 35 + stroke-linejoin="round" 36 + /> 37 + </svg> 38 + ) 39 + 40 + const MinusIcon = () => ( 41 + <svg viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"> 42 + <title>Minus Icon</title> 43 + <path 44 + d="M2.91675 7H11.0834" 45 + stroke="currentColor" 46 + stroke-width="2" 47 + stroke-linecap="round" 48 + stroke-linejoin="round" 49 + /> 50 + </svg> 51 + )
+1
src/components/ui/code.tsx
··· 1 + export { Code, type CodeProps } from './styled/code'
+1
src/components/ui/color-picker.tsx
··· 1 + export * as ColorPicker from './styled/color-picker'
+1
src/components/ui/dialog.tsx
··· 1 + export * as Dialog from './styled/dialog'
+1
src/components/ui/drawer.tsx
··· 1 + export * as Drawer from './styled/drawer'
+1
src/components/ui/field.tsx
··· 1 + export * as Field from './styled/field'
+1
src/components/ui/file-upload.tsx
··· 1 + export * as FileUpload from './styled/file-upload'
+1
src/components/ui/form-label.tsx
··· 1 + export { FormLabel, type FormLabelProps } from './styled/form-label'
+1
src/components/ui/icon-button.tsx
··· 1 + export { IconButton, type IconButtonProps } from './styled/icon-button'
+1
src/components/ui/input.tsx
··· 1 + export { Input, type InputProps } from './styled/input'
+1
src/components/ui/link.tsx
··· 1 + export { Link, type LinkProps } from './styled/link'
+1
src/components/ui/popover.tsx
··· 1 + export * as Popover from './styled/popover'
+38
src/components/ui/progress.tsx
··· 1 + import { Show, children, splitProps } from 'solid-js' 2 + import * as StyledProgress from './styled/progress' 3 + 4 + export interface ProgressProps extends StyledProgress.RootProps { 5 + /** 6 + * The type of progress to render. 7 + * @default linear 8 + */ 9 + type?: 'linear' | 'circular' 10 + } 11 + 12 + export const Progress = (props: ProgressProps) => { 13 + const [localProps, rootProps] = splitProps(props, ['children', 'type']) 14 + const getChildren = children(() => localProps.children) 15 + 16 + return ( 17 + <StyledProgress.Root {...rootProps}> 18 + <Show when={getChildren()}> 19 + <StyledProgress.Label>{getChildren()}</StyledProgress.Label> 20 + </Show> 21 + <Show 22 + when={localProps.type === 'circular'} 23 + fallback={ 24 + <StyledProgress.Track> 25 + <StyledProgress.Range /> 26 + </StyledProgress.Track> 27 + } 28 + > 29 + <StyledProgress.Circle> 30 + <StyledProgress.CircleTrack /> 31 + <StyledProgress.CircleRange /> 32 + <StyledProgress.ValueText /> 33 + </StyledProgress.Circle> 34 + </Show> 35 + <StyledProgress.ValueText /> 36 + </StyledProgress.Root> 37 + ) 38 + }
+2
src/components/ui/select.tsx
··· 1 + export { createListCollection } from '@ark-ui/solid/select' 2 + export * as Select from './styled/select'
+23
src/components/ui/spinner.tsx
··· 1 + import { mergeProps, splitProps } from 'solid-js' 2 + import { styled } from 'styled-system/jsx' 3 + import { Spinner as StyledSpinner, type SpinnerProps as StyledSpinnerProps } from './styled/spinner' 4 + 5 + export interface SpinnerProps extends StyledSpinnerProps { 6 + /** 7 + * For accessibility, it is important to add a fallback loading text. 8 + * This text will be visible to screen readers. 9 + * @default "Loading..." 10 + */ 11 + label?: string 12 + } 13 + 14 + export const Spinner = (props: SpinnerProps) => { 15 + const [_localProps, rootProps] = splitProps(props, ['label']) 16 + const localProps = mergeProps({ label: 'Loading...' }, _localProps) 17 + 18 + return ( 19 + <StyledSpinner borderBottomColor="transparent" borderLeftColor="transparent" {...rootProps}> 20 + <styled.span srOnly>{localProps.label}</styled.span> 21 + </StyledSpinner> 22 + ) 23 + }
+7
src/components/ui/styled/button.tsx
··· 1 + import { ark } from '@ark-ui/solid' 2 + import type { ComponentProps } from 'solid-js' 3 + import { styled } from 'styled-system/jsx' 4 + import { button } from 'styled-system/recipes' 5 + 6 + export type ButtonProps = ComponentProps<typeof Button> 7 + export const Button = styled(ark.button, button)
+38
src/components/ui/styled/card.tsx
··· 1 + import { type Assign, type PolymorphicProps, ark } from '@ark-ui/solid' 2 + import type { ComponentProps } from 'solid-js' 3 + import { card } from 'styled-system/recipes' 4 + import type { HTMLStyledProps } from 'styled-system/types' 5 + import { createStyleContext } from './utils/create-style-context' 6 + 7 + const { withProvider, withContext } = createStyleContext(card) 8 + 9 + export type RootProps = ComponentProps<typeof Root> 10 + export const Root = withProvider<Assign<HTMLStyledProps<'div'>, PolymorphicProps<'div'>>>( 11 + ark.div, 12 + 'root', 13 + ) 14 + 15 + export const Body = withContext<Assign<HTMLStyledProps<'div'>, PolymorphicProps<'div'>>>( 16 + ark.div, 17 + 'body', 18 + ) 19 + 20 + export const Description = withContext<Assign<HTMLStyledProps<'div'>, PolymorphicProps<'div'>>>( 21 + ark.div, 22 + 'description', 23 + ) 24 + 25 + export const Footer = withContext<Assign<HTMLStyledProps<'div'>, PolymorphicProps<'div'>>>( 26 + ark.div, 27 + 'footer', 28 + ) 29 + 30 + export const Header = withContext<Assign<HTMLStyledProps<'div'>, PolymorphicProps<'div'>>>( 31 + ark.div, 32 + 'header', 33 + ) 34 + 35 + export const Title = withContext<Assign<HTMLStyledProps<'h3'>, PolymorphicProps<'h3'>>>( 36 + ark.h3, 37 + 'title', 38 + )
+42
src/components/ui/styled/checkbox.tsx
··· 1 + import { type Assign, Checkbox } from '@ark-ui/solid' 2 + import type { ComponentProps } from 'solid-js' 3 + import { type CheckboxVariantProps, checkbox } from 'styled-system/recipes' 4 + import type { HTMLStyledProps } from 'styled-system/types' 5 + import { createStyleContext } from './utils/create-style-context' 6 + 7 + const { withProvider, withContext } = createStyleContext(checkbox) 8 + 9 + export type RootProviderProps = ComponentProps<typeof RootProvider> 10 + export const RootProvider = withProvider< 11 + Assign<Assign<HTMLStyledProps<'label'>, Checkbox.RootProviderBaseProps>, CheckboxVariantProps> 12 + >(Checkbox.RootProvider, 'root') 13 + 14 + export type RootProps = ComponentProps<typeof Root> 15 + export const Root = withProvider< 16 + Assign<Assign<HTMLStyledProps<'label'>, Checkbox.RootBaseProps>, CheckboxVariantProps> 17 + >(Checkbox.Root, 'root') 18 + 19 + export const Control = withContext<Assign<HTMLStyledProps<'div'>, Checkbox.ControlBaseProps>>( 20 + Checkbox.Control, 21 + 'control', 22 + ) 23 + 24 + export const Group = withContext<Assign<HTMLStyledProps<'div'>, Checkbox.GroupBaseProps>>( 25 + Checkbox.Group, 26 + 'group', 27 + ) 28 + 29 + export const Indicator = withContext<Assign<HTMLStyledProps<'div'>, Checkbox.IndicatorBaseProps>>( 30 + Checkbox.Indicator, 31 + 'indicator', 32 + ) 33 + 34 + export const Label = withContext<Assign<HTMLStyledProps<'span'>, Checkbox.LabelBaseProps>>( 35 + Checkbox.Label, 36 + 'label', 37 + ) 38 + 39 + export { 40 + CheckboxContext as Context, 41 + CheckboxHiddenInput as HiddenInput, 42 + } from '@ark-ui/solid'
+7
src/components/ui/styled/code.tsx
··· 1 + import { ark } from '@ark-ui/solid' 2 + import type { ComponentProps } from 'solid-js' 3 + import { styled } from 'styled-system/jsx' 4 + import { code } from 'styled-system/recipes' 5 + 6 + export type CodeProps = ComponentProps<typeof Code> 7 + export const Code = styled(ark.code, code)
+129
src/components/ui/styled/color-picker.tsx
··· 1 + import { type Assign, ColorPicker } from '@ark-ui/solid' 2 + import type { ComponentProps } from 'solid-js' 3 + import { type ColorPickerVariantProps, colorPicker } from 'styled-system/recipes' 4 + import type { HTMLStyledProps } from 'styled-system/types' 5 + import { createStyleContext } from './utils/create-style-context' 6 + 7 + const { withProvider, withContext } = createStyleContext(colorPicker) 8 + 9 + export type RootProviderProps = ComponentProps<typeof RootProvider> 10 + export const RootProvider = withProvider< 11 + Assign<Assign<HTMLStyledProps<'div'>, ColorPicker.RootProviderBaseProps>, ColorPickerVariantProps> 12 + >(ColorPicker.RootProvider, 'root') 13 + 14 + export type RootProps = ComponentProps<typeof Root> 15 + export const Root = withProvider< 16 + Assign<Assign<HTMLStyledProps<'div'>, ColorPicker.RootBaseProps>, ColorPickerVariantProps> 17 + >(ColorPicker.Root, 'root') 18 + 19 + export const AreaBackground = withContext< 20 + Assign<HTMLStyledProps<'div'>, ColorPicker.AreaBackgroundBaseProps> 21 + >(ColorPicker.AreaBackground, 'areaBackground') 22 + 23 + export const Area = withContext<Assign<HTMLStyledProps<'div'>, ColorPicker.AreaBaseProps>>( 24 + ColorPicker.Area, 25 + 'area', 26 + ) 27 + 28 + export const AreaThumb = withContext< 29 + Assign<HTMLStyledProps<'div'>, ColorPicker.AreaThumbBaseProps> 30 + >(ColorPicker.AreaThumb, 'areaThumb') 31 + 32 + export const ChannelInput = withContext< 33 + Assign<HTMLStyledProps<'input'>, ColorPicker.ChannelInputBaseProps> 34 + >(ColorPicker.ChannelInput, 'channelInput') 35 + 36 + export const ChannelSliderLabel = withContext< 37 + Assign<HTMLStyledProps<'label'>, ColorPicker.ChannelSliderLabelBaseProps> 38 + >(ColorPicker.ChannelSliderLabel, 'channelSliderLabel') 39 + 40 + export const ChannelSlider = withContext< 41 + Assign<HTMLStyledProps<'div'>, ColorPicker.ChannelSliderBaseProps> 42 + >(ColorPicker.ChannelSlider, 'channelSlider') 43 + 44 + export const ChannelSliderThumb = withContext< 45 + Assign<HTMLStyledProps<'div'>, ColorPicker.ChannelSliderThumbBaseProps> 46 + >(ColorPicker.ChannelSliderThumb, 'channelSliderThumb') 47 + 48 + export const ChannelSliderTrack = withContext< 49 + Assign<HTMLStyledProps<'div'>, ColorPicker.ChannelSliderTrackBaseProps> 50 + >(ColorPicker.ChannelSliderTrack, 'channelSliderTrack') 51 + 52 + export const ChannelSliderValueText = withContext< 53 + Assign<HTMLStyledProps<'span'>, ColorPicker.ChannelSliderValueTextBaseProps> 54 + >(ColorPicker.ChannelSliderValueText, 'channelSliderValueText') 55 + 56 + export const Content = withContext<Assign<HTMLStyledProps<'div'>, ColorPicker.ContentBaseProps>>( 57 + ColorPicker.Content, 58 + 'content', 59 + ) 60 + 61 + export const Control = withContext<Assign<HTMLStyledProps<'div'>, ColorPicker.ControlBaseProps>>( 62 + ColorPicker.Control, 63 + 'control', 64 + ) 65 + 66 + export const EyeDropperTrigger = withContext< 67 + Assign<HTMLStyledProps<'button'>, ColorPicker.EyeDropperTriggerBaseProps> 68 + >(ColorPicker.EyeDropperTrigger, 'eyeDropperTrigger') 69 + 70 + export const FormatSelect = withContext< 71 + Assign<HTMLStyledProps<'select'>, ColorPicker.FormatSelectBaseProps> 72 + >(ColorPicker.FormatSelect, 'formatSelect') 73 + 74 + export const FormatTrigger = withContext< 75 + Assign<HTMLStyledProps<'button'>, ColorPicker.FormatTriggerBaseProps> 76 + >(ColorPicker.FormatTrigger, 'formatTrigger') 77 + 78 + export const Label = withContext<Assign<HTMLStyledProps<'label'>, ColorPicker.LabelBaseProps>>( 79 + ColorPicker.Label, 80 + 'label', 81 + ) 82 + 83 + export const Positioner = withContext< 84 + Assign<HTMLStyledProps<'div'>, ColorPicker.PositionerBaseProps> 85 + >(ColorPicker.Positioner, 'positioner') 86 + 87 + export const SwatchGroup = withContext< 88 + Assign<HTMLStyledProps<'div'>, ColorPicker.SwatchGroupBaseProps> 89 + >(ColorPicker.SwatchGroup, 'swatchGroup') 90 + 91 + export const SwatchIndicator = withContext< 92 + Assign<HTMLStyledProps<'div'>, ColorPicker.SwatchIndicatorBaseProps> 93 + >(ColorPicker.SwatchIndicator, 'swatchIndicator') 94 + 95 + export const Swatch = withContext<Assign<HTMLStyledProps<'div'>, ColorPicker.SwatchBaseProps>>( 96 + ColorPicker.Swatch, 97 + 'swatch', 98 + ) 99 + 100 + export const SwatchTrigger = withContext< 101 + Assign<HTMLStyledProps<'button'>, ColorPicker.SwatchTriggerBaseProps> 102 + >(ColorPicker.SwatchTrigger, 'swatchTrigger') 103 + 104 + export const TransparencyGrid = withContext< 105 + Assign<HTMLStyledProps<'div'>, ColorPicker.TransparencyGridBaseProps> 106 + >(ColorPicker.TransparencyGrid, 'transparencyGrid') 107 + 108 + export const Trigger = withContext<Assign<HTMLStyledProps<'button'>, ColorPicker.TriggerBaseProps>>( 109 + ColorPicker.Trigger, 110 + 'trigger', 111 + ) 112 + 113 + export const ValueSwatch = withContext< 114 + Assign<HTMLStyledProps<'div'>, ColorPicker.ValueSwatchBaseProps> 115 + >(ColorPicker.ValueSwatch, 'swatch') 116 + 117 + export const ValueText = withContext< 118 + Assign<HTMLStyledProps<'span'>, ColorPicker.ValueTextBaseProps> 119 + >(ColorPicker.ValueText, 'valueText') 120 + 121 + export const View = withContext<Assign<HTMLStyledProps<'div'>, ColorPicker.ViewBaseProps>>( 122 + ColorPicker.View, 123 + 'view', 124 + ) 125 + 126 + export { 127 + ColorPickerContext as Context, 128 + ColorPickerHiddenInput as HiddenInput, 129 + } from '@ark-ui/solid'
+51
src/components/ui/styled/dialog.tsx
··· 1 + import { type Assign, Dialog } from '@ark-ui/solid' 2 + import type { ComponentProps } from 'solid-js' 3 + import { type DialogVariantProps, dialog } from 'styled-system/recipes' 4 + import type { HTMLStyledProps } from 'styled-system/types' 5 + import { createStyleContext } from './utils/create-style-context' 6 + 7 + const { withRootProvider, withContext } = createStyleContext(dialog) 8 + 9 + export type RootProviderProps = ComponentProps<typeof RootProvider> 10 + export const RootProvider = withRootProvider<Assign<Dialog.RootProviderProps, DialogVariantProps>>( 11 + Dialog.RootProvider, 12 + ) 13 + 14 + export type RootProps = ComponentProps<typeof Root> 15 + export const Root = withRootProvider<Assign<Dialog.RootProps, DialogVariantProps>>(Dialog.Root) 16 + 17 + export const Backdrop = withContext<Assign<HTMLStyledProps<'div'>, Dialog.BackdropBaseProps>>( 18 + Dialog.Backdrop, 19 + 'backdrop', 20 + ) 21 + 22 + export const CloseTrigger = withContext< 23 + Assign<HTMLStyledProps<'button'>, Dialog.CloseTriggerBaseProps> 24 + >(Dialog.CloseTrigger, 'closeTrigger') 25 + 26 + export const Content = withContext<Assign<HTMLStyledProps<'div'>, Dialog.ContentBaseProps>>( 27 + Dialog.Content, 28 + 'content', 29 + ) 30 + 31 + export const Description = withContext<Assign<HTMLStyledProps<'div'>, Dialog.DescriptionBaseProps>>( 32 + Dialog.Description, 33 + 'description', 34 + ) 35 + 36 + export const Positioner = withContext<Assign<HTMLStyledProps<'div'>, Dialog.PositionerBaseProps>>( 37 + Dialog.Positioner, 38 + 'positioner', 39 + ) 40 + 41 + export const Title = withContext<Assign<HTMLStyledProps<'h2'>, Dialog.TitleBaseProps>>( 42 + Dialog.Title, 43 + 'title', 44 + ) 45 + 46 + export const Trigger = withContext<Assign<HTMLStyledProps<'button'>, Dialog.TriggerBaseProps>>( 47 + Dialog.Trigger, 48 + 'trigger', 49 + ) 50 + 51 + export { DialogContext as Context } from '@ark-ui/solid'
+74
src/components/ui/styled/drawer.tsx
··· 1 + import { type Assign, Dialog, type PolymorphicProps, ark } from '@ark-ui/solid' 2 + import type { ComponentProps } from 'solid-js' 3 + import { type DrawerVariantProps, drawer } from 'styled-system/recipes' 4 + import type { HTMLStyledProps } from 'styled-system/types' 5 + import { createStyleContext } from './utils/create-style-context' 6 + 7 + const { withRootProvider, withContext } = createStyleContext(drawer) 8 + 9 + export type RootProviderProps = ComponentProps<typeof RootProvider> 10 + export const RootProvider = withRootProvider<Assign<Dialog.RootProps, DrawerVariantProps>>(Dialog.RootProvider) 11 + 12 + export type RootProps = ComponentProps<typeof Root> 13 + export const Root = withRootProvider<Assign<Dialog.RootProps, DrawerVariantProps>>(Dialog.Root) 14 + 15 + export type BackdropProps = ComponentProps<typeof Backdrop> 16 + export const Backdrop = withContext<Assign<HTMLStyledProps<'div'>, Dialog.BackdropProps>>( 17 + Dialog.Backdrop, 18 + 'backdrop', 19 + ) 20 + 21 + export type CloseTriggerProps = ComponentProps<typeof CloseTrigger> 22 + export const CloseTrigger = withContext< 23 + Assign<HTMLStyledProps<'button'>, Dialog.CloseTriggerProps> 24 + >(Dialog.CloseTrigger, 'closeTrigger') 25 + 26 + export type ContentProps = ComponentProps<typeof Content> 27 + export const Content = withContext<Assign<HTMLStyledProps<'div'>, Dialog.ContentProps>>( 28 + Dialog.Content, 29 + 'content', 30 + ) 31 + 32 + export type DescriptionProps = ComponentProps<typeof Description> 33 + export const Description = withContext<Assign<HTMLStyledProps<'div'>, Dialog.DescriptionProps>>( 34 + Dialog.Description, 35 + 'description', 36 + ) 37 + 38 + export type PositionerProps = ComponentProps<typeof Positioner> 39 + export const Positioner = withContext<Assign<HTMLStyledProps<'div'>, Dialog.PositionerProps>>( 40 + Dialog.Positioner, 41 + 'positioner', 42 + ) 43 + 44 + export type TitleProps = ComponentProps<typeof Title> 45 + export const Title = withContext<Assign<HTMLStyledProps<'h2'>, Dialog.TitleProps>>( 46 + Dialog.Title, 47 + 'title', 48 + ) 49 + 50 + export type TriggerProps = ComponentProps<typeof Trigger> 51 + export const Trigger = withContext<Assign<HTMLStyledProps<'button'>, Dialog.TriggerProps>>( 52 + Dialog.Trigger, 53 + 'trigger', 54 + ) 55 + 56 + export const Header = withContext<Assign<HTMLStyledProps<'div'>, PolymorphicProps<'div'>>>( 57 + ark.div, 58 + 'header', 59 + ) 60 + 61 + export const Body = withContext<Assign<HTMLStyledProps<'div'>, PolymorphicProps<'div'>>>( 62 + ark.div, 63 + 'body', 64 + ) 65 + 66 + export const Footer = withContext<Assign<HTMLStyledProps<'div'>, PolymorphicProps<'div'>>>( 67 + ark.div, 68 + 'footer', 69 + ) 70 + 71 + export { 72 + DialogContext as Context, 73 + type DialogContextProps as ContextProps, 74 + } from '@ark-ui/solid'
+46
src/components/ui/styled/field.tsx
··· 1 + import { type Assign, Field } from '@ark-ui/solid' 2 + import type { ComponentProps } from 'solid-js' 3 + import { styled } from 'styled-system/jsx' 4 + import { type FieldVariantProps, field, input, textarea } from 'styled-system/recipes' 5 + import type { HTMLStyledProps } from 'styled-system/types' 6 + import { createStyleContext } from './utils/create-style-context' 7 + 8 + const { withProvider, withContext } = createStyleContext(field) 9 + 10 + export type RootProviderProps = ComponentProps<typeof RootProvider> 11 + export const RootProvider = withProvider< 12 + Assign<Assign<HTMLStyledProps<'div'>, Field.RootProviderBaseProps>, FieldVariantProps> 13 + >(Field.RootProvider, 'root') 14 + 15 + export type RootProps = ComponentProps<typeof Root> 16 + export const Root = withProvider< 17 + Assign<Assign<HTMLStyledProps<'div'>, Field.RootBaseProps>, FieldVariantProps> 18 + >(Field.Root, 'root') 19 + 20 + export const ErrorText = withContext<Assign<HTMLStyledProps<'span'>, Field.ErrorTextBaseProps>>( 21 + Field.ErrorText, 22 + 'errorText', 23 + ) 24 + 25 + export const HelperText = withContext<Assign<HTMLStyledProps<'span'>, Field.HelperTextBaseProps>>( 26 + Field.HelperText, 27 + 'helperText', 28 + ) 29 + 30 + export const Label = withContext<Assign<HTMLStyledProps<'label'>, Field.LabelBaseProps>>( 31 + Field.Label, 32 + 'label', 33 + ) 34 + 35 + export const Select = withContext<Assign<HTMLStyledProps<'select'>, Field.SelectBaseProps>>( 36 + Field.Select, 37 + 'select', 38 + ) 39 + 40 + export type InputProps = ComponentProps<typeof Input> 41 + export const Input = styled(Field.Input, input) 42 + 43 + export type TextareaProps = ComponentProps<typeof Textarea> 44 + export const Textarea = styled(Field.Textarea, textarea) 45 + 46 + export { FieldContext as Context } from '@ark-ui/solid'
+68
src/components/ui/styled/file-upload.tsx
··· 1 + import { type Assign, FileUpload } from '@ark-ui/solid' 2 + import type { ComponentProps } from 'solid-js' 3 + import { type FileUploadVariantProps, fileUpload } from 'styled-system/recipes' 4 + import type { HTMLStyledProps } from 'styled-system/types' 5 + import { createStyleContext } from './utils/create-style-context' 6 + 7 + const { withProvider, withContext } = createStyleContext(fileUpload) 8 + 9 + export type RootProviderProps = ComponentProps<typeof RootProvider> 10 + export const RootProvider = withProvider< 11 + Assign<Assign<HTMLStyledProps<'div'>, FileUpload.RootProviderBaseProps>, FileUploadVariantProps> 12 + >(FileUpload.RootProvider, 'root') 13 + 14 + export type RootProps = ComponentProps<typeof Root> 15 + export const Root = withProvider< 16 + Assign<Assign<HTMLStyledProps<'div'>, FileUpload.RootBaseProps>, FileUploadVariantProps> 17 + >(FileUpload.Root, 'root') 18 + 19 + export const Dropzone = withContext<Assign<HTMLStyledProps<'div'>, FileUpload.DropzoneBaseProps>>( 20 + FileUpload.Dropzone, 21 + 'dropzone', 22 + ) 23 + 24 + export const ItemDeleteTrigger = withContext< 25 + Assign<HTMLStyledProps<'button'>, FileUpload.ItemDeleteTriggerBaseProps> 26 + >(FileUpload.ItemDeleteTrigger, 'itemDeleteTrigger') 27 + 28 + export const ItemGroup = withContext<Assign<HTMLStyledProps<'ul'>, FileUpload.ItemGroupBaseProps>>( 29 + FileUpload.ItemGroup, 30 + 'itemGroup', 31 + ) 32 + 33 + export const ItemName = withContext<Assign<HTMLStyledProps<'div'>, FileUpload.ItemNameBaseProps>>( 34 + FileUpload.ItemName, 35 + 'itemName', 36 + ) 37 + 38 + export const ItemPreviewImage = withContext< 39 + Assign<HTMLStyledProps<'img'>, FileUpload.ItemPreviewImageBaseProps> 40 + >(FileUpload.ItemPreviewImage, 'itemPreviewImage') 41 + 42 + export const ItemPreview = withContext< 43 + Assign<HTMLStyledProps<'div'>, FileUpload.ItemPreviewBaseProps> 44 + >(FileUpload.ItemPreview, 'itemPreview') 45 + 46 + export const Item = withContext<Assign<HTMLStyledProps<'li'>, FileUpload.ItemBaseProps>>( 47 + FileUpload.Item, 48 + 'item', 49 + ) 50 + 51 + export const ItemSizeText = withContext< 52 + Assign<HTMLStyledProps<'div'>, FileUpload.ItemSizeTextBaseProps> 53 + >(FileUpload.ItemSizeText, 'itemSizeText') 54 + 55 + export const Label = withContext<Assign<HTMLStyledProps<'label'>, FileUpload.LabelBaseProps>>( 56 + FileUpload.Label, 57 + 'label', 58 + ) 59 + 60 + export const Trigger = withContext<Assign<HTMLStyledProps<'button'>, FileUpload.TriggerBaseProps>>( 61 + FileUpload.Trigger, 62 + 'trigger', 63 + ) 64 + 65 + export { 66 + FileUploadContext as Context, 67 + FileUploadHiddenInput as HiddenInput, 68 + } from '@ark-ui/solid'
+7
src/components/ui/styled/form-label.tsx
··· 1 + import { ark } from '@ark-ui/solid' 2 + import type { ComponentProps } from 'solid-js' 3 + import { styled } from 'styled-system/jsx' 4 + import { formLabel } from 'styled-system/recipes' 5 + 6 + export type FormLabelProps = ComponentProps<typeof FormLabel> 7 + export const FormLabel = styled(ark.label, formLabel)
+9
src/components/ui/styled/icon-button.tsx
··· 1 + import { ark } from '@ark-ui/solid' 2 + import type { ComponentProps } from 'solid-js' 3 + import { styled } from 'styled-system/jsx' 4 + import { type ButtonVariantProps, button } from 'styled-system/recipes' 5 + 6 + export type IconButtonProps = ComponentProps<typeof IconButton> 7 + export const IconButton = styled(ark.button, button, { 8 + defaultProps: { px: '0' } as ButtonVariantProps, 9 + })
+7
src/components/ui/styled/input.tsx
··· 1 + import { ark } from '@ark-ui/solid' 2 + import type { ComponentProps } from 'solid-js' 3 + import { styled } from 'styled-system/jsx' 4 + import { input } from 'styled-system/recipes' 5 + 6 + export type InputProps = ComponentProps<typeof Input> 7 + export const Input = styled(ark.input, input)
+7
src/components/ui/styled/link.tsx
··· 1 + import { ark } from '@ark-ui/solid' 2 + import type { ComponentProps } from 'solid-js' 3 + import { styled } from 'styled-system/jsx' 4 + import { link } from 'styled-system/recipes' 5 + 6 + export type LinkProps = ComponentProps<typeof Link> 7 + export const Link = styled(ark.a, link)
+65
src/components/ui/styled/popover.tsx
··· 1 + import { type Assign, Popover } from '@ark-ui/solid' 2 + import type { ComponentProps } from 'solid-js' 3 + import { type PopoverVariantProps, popover } from 'styled-system/recipes' 4 + import type { HTMLStyledProps } from 'styled-system/types' 5 + import { createStyleContext } from './utils/create-style-context' 6 + 7 + const { withRootProvider, withContext } = createStyleContext(popover) 8 + 9 + export type RootProviderProps = ComponentProps<typeof RootProvider> 10 + export const RootProvider = withRootProvider< 11 + Assign<Popover.RootProviderProps, PopoverVariantProps> 12 + >(Popover.RootProvider) 13 + 14 + export type RootProps = ComponentProps<typeof Root> 15 + export const Root = withRootProvider<Assign<Popover.RootProps, PopoverVariantProps>>(Popover.Root) 16 + 17 + export const Anchor = withContext<Assign<HTMLStyledProps<'div'>, Popover.AnchorBaseProps>>( 18 + Popover.Anchor, 19 + 'anchor', 20 + ) 21 + 22 + export const Arrow = withContext<Assign<HTMLStyledProps<'div'>, Popover.ArrowBaseProps>>( 23 + Popover.Arrow, 24 + 'arrow', 25 + ) 26 + 27 + export const ArrowTip = withContext<Assign<HTMLStyledProps<'div'>, Popover.ArrowTipBaseProps>>( 28 + Popover.ArrowTip, 29 + 'arrowTip', 30 + ) 31 + 32 + export const CloseTrigger = withContext< 33 + Assign<HTMLStyledProps<'button'>, Popover.CloseTriggerBaseProps> 34 + >(Popover.CloseTrigger, 'closeTrigger') 35 + 36 + export const Content = withContext<Assign<HTMLStyledProps<'div'>, Popover.ContentBaseProps>>( 37 + Popover.Content, 38 + 'content', 39 + ) 40 + 41 + export const Description = withContext< 42 + Assign<HTMLStyledProps<'div'>, Popover.DescriptionBaseProps> 43 + >(Popover.Description, 'description') 44 + 45 + export const Indicator = withContext<Assign<HTMLStyledProps<'div'>, Popover.IndicatorBaseProps>>( 46 + Popover.Indicator, 47 + 'indicator', 48 + ) 49 + 50 + export const Positioner = withContext<Assign<HTMLStyledProps<'div'>, Popover.PositionerBaseProps>>( 51 + Popover.Positioner, 52 + 'positioner', 53 + ) 54 + 55 + export const Title = withContext<Assign<HTMLStyledProps<'div'>, Popover.TitleBaseProps>>( 56 + Popover.Title, 57 + 'title', 58 + ) 59 + 60 + export const Trigger = withContext<Assign<HTMLStyledProps<'button'>, Popover.TriggerBaseProps>>( 61 + Popover.Trigger, 62 + 'trigger', 63 + ) 64 + 65 + export { PopoverContext as Context } from '@ark-ui/solid'
+57
src/components/ui/styled/progress.tsx
··· 1 + import { type Assign, Progress } from '@ark-ui/solid' 2 + import type { ComponentProps } from 'solid-js' 3 + import { type ProgressVariantProps, progress } from 'styled-system/recipes' 4 + import type { HTMLStyledProps } from 'styled-system/types' 5 + import { createStyleContext } from './utils/create-style-context' 6 + 7 + const { withProvider, withContext } = createStyleContext(progress) 8 + 9 + export type RootProviderProps = ComponentProps<typeof RootProvider> 10 + export const RootProvider = withProvider< 11 + Assign<Assign<HTMLStyledProps<'div'>, Progress.RootProviderBaseProps>, ProgressVariantProps> 12 + >(Progress.RootProvider, 'root') 13 + 14 + export type RootProps = ComponentProps<typeof Root> 15 + export const Root = withProvider< 16 + Assign<Assign<HTMLStyledProps<'div'>, Progress.RootBaseProps>, ProgressVariantProps> 17 + >(Progress.Root, 'root') 18 + 19 + export const Circle = withContext<Assign<HTMLStyledProps<'svg'>, Progress.CircleBaseProps>>( 20 + Progress.Circle, 21 + 'circle', 22 + ) 23 + 24 + export const CircleRange = withContext< 25 + Assign<HTMLStyledProps<'circle'>, Progress.CircleRangeBaseProps> 26 + >(Progress.CircleRange, 'circleRange') 27 + 28 + export const CircleTrack = withContext< 29 + Assign<HTMLStyledProps<'circle'>, Progress.CircleTrackBaseProps> 30 + >(Progress.CircleTrack, 'circleTrack') 31 + 32 + export const Label = withContext<Assign<HTMLStyledProps<'label'>, Progress.LabelBaseProps>>( 33 + Progress.Label, 34 + 'label', 35 + ) 36 + 37 + export const Range = withContext<Assign<HTMLStyledProps<'div'>, Progress.RangeBaseProps>>( 38 + Progress.Range, 39 + 'range', 40 + ) 41 + 42 + export const Track = withContext<Assign<HTMLStyledProps<'div'>, Progress.TrackBaseProps>>( 43 + Progress.Track, 44 + 'track', 45 + ) 46 + 47 + export const ValueText = withContext<Assign<HTMLStyledProps<'span'>, Progress.ValueTextBaseProps>>( 48 + Progress.ValueText, 49 + 'valueText', 50 + ) 51 + 52 + export const View = withContext<Assign<HTMLStyledProps<'span'>, Progress.ViewBaseProps>>( 53 + Progress.View, 54 + 'view', 55 + ) 56 + 57 + export { ProgressContext as Context } from '@ark-ui/solid'
+95
src/components/ui/styled/select.tsx
··· 1 + import { type Assign, Select } from '@ark-ui/solid' 2 + import type { ComponentProps } from 'solid-js' 3 + import { type SelectVariantProps, select } from 'styled-system/recipes' 4 + import type { HTMLStyledProps } from 'styled-system/types' 5 + import { createStyleContext } from './utils/create-style-context' 6 + 7 + const { withRootProvider, withContext } = createStyleContext(select) 8 + 9 + export type RootProviderProps = ComponentProps<typeof RootProvider> 10 + export const RootProvider = withRootProvider< 11 + Assign< 12 + Assign<HTMLStyledProps<'div'>, Select.RootProviderBaseProps<Select.CollectionItem>>, 13 + SelectVariantProps 14 + > 15 + >(Select.RootProvider) 16 + 17 + export type RootProps = ComponentProps<typeof Root> 18 + export const Root = withRootProvider< 19 + Assign< 20 + Assign<HTMLStyledProps<'div'>, Select.RootBaseProps<Select.CollectionItem>>, 21 + SelectVariantProps 22 + > 23 + >(Select.Root) 24 + 25 + export const ClearTrigger = withContext< 26 + Assign<HTMLStyledProps<'button'>, Select.ClearTriggerBaseProps> 27 + >(Select.ClearTrigger, 'clearTrigger') 28 + 29 + export const Content = withContext<Assign<HTMLStyledProps<'div'>, Select.ContentBaseProps>>( 30 + Select.Content, 31 + 'content', 32 + ) 33 + 34 + export const Control = withContext<Assign<HTMLStyledProps<'div'>, Select.ControlBaseProps>>( 35 + Select.Control, 36 + 'control', 37 + ) 38 + 39 + export const Indicator = withContext<Assign<HTMLStyledProps<'div'>, Select.IndicatorBaseProps>>( 40 + Select.Indicator, 41 + 'indicator', 42 + ) 43 + 44 + export const ItemGroupLabel = withContext< 45 + Assign<HTMLStyledProps<'div'>, Select.ItemGroupLabelBaseProps> 46 + >(Select.ItemGroupLabel, 'itemGroupLabel') 47 + 48 + export const ItemGroup = withContext<Assign<HTMLStyledProps<'div'>, Select.ItemGroupBaseProps>>( 49 + Select.ItemGroup, 50 + 'itemGroup', 51 + ) 52 + 53 + export const ItemIndicator = withContext< 54 + Assign<HTMLStyledProps<'div'>, Select.ItemIndicatorBaseProps> 55 + >(Select.ItemIndicator, 'itemIndicator') 56 + 57 + export const Item = withContext<Assign<HTMLStyledProps<'div'>, Select.ItemBaseProps>>( 58 + Select.Item, 59 + 'item', 60 + ) 61 + 62 + export const ItemText = withContext<Assign<HTMLStyledProps<'span'>, Select.ItemTextBaseProps>>( 63 + Select.ItemText, 64 + 'itemText', 65 + ) 66 + 67 + export const Label = withContext<Assign<HTMLStyledProps<'label'>, Select.LabelBaseProps>>( 68 + Select.Label, 69 + 'label', 70 + ) 71 + 72 + export const List = withContext<Assign<HTMLStyledProps<'div'>, Select.ListBaseProps>>( 73 + Select.List, 74 + 'list', 75 + ) 76 + 77 + export const Positioner = withContext<Assign<HTMLStyledProps<'div'>, Select.PositionerBaseProps>>( 78 + Select.Positioner, 79 + 'positioner', 80 + ) 81 + 82 + export const Trigger = withContext<Assign<HTMLStyledProps<'button'>, Select.TriggerBaseProps>>( 83 + Select.Trigger, 84 + 'trigger', 85 + ) 86 + 87 + export const ValueText = withContext<Assign<HTMLStyledProps<'span'>, Select.ValueTextBaseProps>>( 88 + Select.ValueText, 89 + 'valueText', 90 + ) 91 + 92 + export { 93 + SelectContext as Context, 94 + SelectHiddenSelect as HiddenSelect, 95 + } from '@ark-ui/solid'
+7
src/components/ui/styled/spinner.tsx
··· 1 + import { ark } from '@ark-ui/solid' 2 + import type { ComponentProps } from 'solid-js' 3 + import { styled } from 'styled-system/jsx' 4 + import { spinner } from 'styled-system/recipes' 5 + 6 + export type SpinnerProps = ComponentProps<typeof Spinner> 7 + export const Spinner = styled(ark.div, spinner)
+37
src/components/ui/styled/switch.tsx
··· 1 + import { type Assign, Switch } from '@ark-ui/solid' 2 + import type { ComponentProps } from 'solid-js' 3 + import { type SwitchRecipeVariantProps, switchRecipe } from 'styled-system/recipes' 4 + import type { HTMLStyledProps } from 'styled-system/types' 5 + import { createStyleContext } from './utils/create-style-context' 6 + 7 + const { withProvider, withContext } = createStyleContext(switchRecipe) 8 + 9 + export type RootProviderProps = ComponentProps<typeof RootProvider> 10 + export const RootProvider = withProvider< 11 + Assign<Assign<HTMLStyledProps<'label'>, Switch.RootProviderBaseProps>, SwitchRecipeVariantProps> 12 + >(Switch.RootProvider, 'root') 13 + 14 + export type RootProps = ComponentProps<typeof Root> 15 + export const Root = withProvider< 16 + Assign<Assign<HTMLStyledProps<'label'>, Switch.RootBaseProps>, SwitchRecipeVariantProps> 17 + >(Switch.Root, 'root') 18 + 19 + export const Control = withContext<Assign<HTMLStyledProps<'span'>, Switch.ControlBaseProps>>( 20 + Switch.Control, 21 + 'control', 22 + ) 23 + 24 + export const Label = withContext<Assign<HTMLStyledProps<'span'>, Switch.LabelBaseProps>>( 25 + Switch.Label, 26 + 'label', 27 + ) 28 + 29 + export const Thumb = withContext<Assign<HTMLStyledProps<'span'>, Switch.ThumbBaseProps>>( 30 + Switch.Thumb, 31 + 'thumb', 32 + ) 33 + 34 + export { 35 + SwitchContext as Context, 36 + SwitchHiddenInput as HiddenInput, 37 + } from '@ark-ui/solid'
+9
src/components/ui/styled/text.tsx
··· 1 + import type { ComponentProps, JSX } from 'solid-js' 2 + import { styled } from 'styled-system/jsx' 3 + import { type TextVariantProps, text } from 'styled-system/recipes' 4 + import type { StyledComponent } from 'styled-system/types' 5 + 6 + type ParagraphProps = TextVariantProps & { as?: JSX.Element } 7 + 8 + export type TextProps = ComponentProps<typeof Text> 9 + export const Text = styled('p', text) as StyledComponent<'p', ParagraphProps>
+7
src/components/ui/styled/textarea.tsx
··· 1 + import { ark } from '@ark-ui/solid' 2 + import type { ComponentProps } from 'solid-js' 3 + import { styled } from 'styled-system/jsx' 4 + import { textarea } from 'styled-system/recipes' 5 + 6 + export type TextareaProps = ComponentProps<typeof Textarea> 7 + export const Textarea = styled(ark.textarea, textarea)
+40
src/components/ui/styled/toast.tsx
··· 1 + import { type Assign, Toast } from '@ark-ui/solid' 2 + import type { ComponentProps } from 'solid-js' 3 + import { toast } from 'styled-system/recipes' 4 + import type { HTMLStyledProps } from 'styled-system/types' 5 + import { createStyleContext } from './utils/create-style-context' 6 + 7 + const { withProvider, withContext } = createStyleContext(toast) 8 + 9 + export type RootProps = ComponentProps<typeof Root> 10 + export const Root = withProvider<Assign<HTMLStyledProps<'div'>, Toast.RootProps>>( 11 + Toast.Root, 12 + 'root', 13 + ) 14 + 15 + export const ActionTrigger = withContext< 16 + Assign<HTMLStyledProps<'button'>, Toast.ActionTriggerProps> 17 + >(Toast.ActionTrigger, 'actionTrigger') 18 + 19 + export const CloseTrigger = withContext<Assign<HTMLStyledProps<'div'>, Toast.CloseTriggerProps>>( 20 + Toast.CloseTrigger, 21 + 'closeTrigger', 22 + ) 23 + 24 + export const Description = withContext<Assign<HTMLStyledProps<'div'>, Toast.DescriptionProps>>( 25 + Toast.Description, 26 + 'description', 27 + ) 28 + 29 + export const Title = withContext<Assign<HTMLStyledProps<'div'>, Toast.TitleProps>>( 30 + Toast.Title, 31 + 'title', 32 + ) 33 + 34 + export { 35 + ToastContext as Context, 36 + createToaster, 37 + Toaster, 38 + type ToastContextProps as ContextProps, 39 + type ToasterProps, 40 + } from '@ark-ui/solid'
+42
src/components/ui/styled/tooltip.tsx
··· 1 + import { type Assign, Tooltip } from '@ark-ui/solid' 2 + import type { ComponentProps } from 'solid-js' 3 + import { type TooltipVariantProps, tooltip } from 'styled-system/recipes' 4 + import type { HTMLStyledProps } from 'styled-system/types' 5 + import { createStyleContext } from './utils/create-style-context' 6 + 7 + const { withRootProvider, withContext } = createStyleContext(tooltip) 8 + 9 + export type RootProviderProps = ComponentProps<typeof RootProvider> 10 + export const RootProvider = withRootProvider< 11 + Assign<Tooltip.RootProviderProps, TooltipVariantProps> 12 + >(Tooltip.RootProvider) 13 + 14 + export type RootProps = ComponentProps<typeof Root> 15 + export const Root = withRootProvider<Assign<Tooltip.RootProps, TooltipVariantProps>>(Tooltip.Root) 16 + 17 + export const Arrow = withContext<Assign<HTMLStyledProps<'div'>, Tooltip.ArrowBaseProps>>( 18 + Tooltip.Arrow, 19 + 'arrow', 20 + ) 21 + 22 + export const ArrowTip = withContext<Assign<HTMLStyledProps<'div'>, Tooltip.ArrowTipBaseProps>>( 23 + Tooltip.ArrowTip, 24 + 'arrowTip', 25 + ) 26 + 27 + export const Content = withContext<Assign<HTMLStyledProps<'div'>, Tooltip.ContentBaseProps>>( 28 + Tooltip.Content, 29 + 'content', 30 + ) 31 + 32 + export const Positioner = withContext<Assign<HTMLStyledProps<'div'>, Tooltip.PositionerBaseProps>>( 33 + Tooltip.Positioner, 34 + 'positioner', 35 + ) 36 + 37 + export const Trigger = withContext<Assign<HTMLStyledProps<'button'>, Tooltip.TriggerBaseProps>>( 38 + Tooltip.Trigger, 39 + 'trigger', 40 + ) 41 + 42 + export { TooltipContext as Context } from '@ark-ui/solid'
+89
src/components/ui/styled/utils/create-style-context.tsx
··· 1 + import { type JSX, createContext, useContext } from 'solid-js' 2 + import { Dynamic } from 'solid-js/web' 3 + import { cx } from 'styled-system/css' 4 + import { isCssProperty, styled } from 'styled-system/jsx' 5 + import type { ElementType, StyledComponent } from 'styled-system/types' 6 + 7 + type Props = Record<string, unknown> 8 + type Recipe = { 9 + (props?: Props): Props 10 + splitVariantProps: (props: Props) => [Props, Props] 11 + } 12 + 13 + type Slot<R extends Recipe> = keyof ReturnType<R> 14 + type Options = { forwardProps?: string[] } 15 + 16 + const shouldForwardProp = (prop: string, variantKeys: string[], options: Options = {}) => 17 + options.forwardProps?.includes(prop) || (!variantKeys.includes(prop) && !isCssProperty(prop)) 18 + 19 + export const createStyleContext = <R extends Recipe>(recipe: R) => { 20 + const StyleContext = createContext<Record<Slot<R>, string> | null>(null) 21 + 22 + const withRootProvider = <P extends {}>(Component: ElementType): ((props: P) => JSX.Element) => { 23 + const StyledComponent = (props: P) => { 24 + const [variantProps, localProps] = recipe.splitVariantProps(props) 25 + const slotStyles = recipe(variantProps) as Record<Slot<R>, string> 26 + 27 + return ( 28 + <StyleContext.Provider value={slotStyles}> 29 + <Component {...localProps} /> 30 + </StyleContext.Provider> 31 + ) 32 + } 33 + return StyledComponent 34 + } 35 + 36 + const withProvider = <P extends { class?: string }>( 37 + Component: ElementType, 38 + slot: Slot<R>, 39 + options?: Options, 40 + ): ((props: P) => JSX.Element) => { 41 + const StyledComponent = styled( 42 + Component, 43 + {}, 44 + { 45 + shouldForwardProp: (prop, variantKeys) => shouldForwardProp(prop, variantKeys, options), 46 + }, 47 + ) as StyledComponent<ElementType> 48 + 49 + return (props: P) => { 50 + const [variantProps, localProps] = recipe.splitVariantProps(props) 51 + const slotStyles = recipe(variantProps) as Record<Slot<R>, string> 52 + 53 + return ( 54 + <StyleContext.Provider value={slotStyles}> 55 + <Dynamic 56 + component={StyledComponent} 57 + {...localProps} 58 + class={cx(slotStyles?.[slot], props.class)} 59 + /> 60 + </StyleContext.Provider> 61 + ) 62 + } 63 + } 64 + 65 + const withContext = <P extends { class?: string }>( 66 + Component: ElementType, 67 + slot: Slot<R>, 68 + ): ((props: P) => JSX.Element) => { 69 + const StyledComponent = styled(Component) 70 + 71 + const Foo = (props: P) => { 72 + const slotStyles = useContext(StyleContext) 73 + return ( 74 + <Dynamic 75 + component={StyledComponent} 76 + {...props} 77 + class={cx(slotStyles?.[slot], props.class)} 78 + /> 79 + ) 80 + } 81 + return Foo 82 + } 83 + 84 + return { 85 + withRootProvider, 86 + withProvider, 87 + withContext, 88 + } 89 + }
+20
src/components/ui/switch.tsx
··· 1 + import { Show, children } from 'solid-js' 2 + import * as StyledSwitch from './styled/switch' 3 + 4 + export interface SwitchProps extends StyledSwitch.RootProps {} 5 + 6 + export const Switch = (props: SwitchProps) => { 7 + const getChildren = children(() => props.children) 8 + 9 + return ( 10 + <StyledSwitch.Root {...props}> 11 + <StyledSwitch.Control> 12 + <StyledSwitch.Thumb /> 13 + </StyledSwitch.Control> 14 + <Show when={getChildren()}> 15 + <StyledSwitch.Label>{getChildren()}</StyledSwitch.Label> 16 + </Show> 17 + <StyledSwitch.HiddenInput /> 18 + </StyledSwitch.Root> 19 + ) 20 + }
+1
src/components/ui/text.tsx
··· 1 + export { Text, type TextProps } from './styled/text'
+1
src/components/ui/textarea.tsx
··· 1 + export { Textarea, type TextareaProps } from './styled/textarea'
+1
src/components/ui/toast.tsx
··· 1 + export * as Toast from './styled/toast'
+1
src/components/ui/tooltip.tsx
··· 1 + export * as Tooltip from './styled/tooltip'
+5
src/index.css
··· 1 + @layer reset, base, tokens, recipes, utilities; 2 + 3 + .lucide { 4 + stroke-width: 3px; 5 + }
+56
src/index.tsx
··· 1 + /* @refresh reload */ 2 + import { render } from "solid-js/web"; 3 + import "solid-devtools"; 4 + import "./index.css"; 5 + 6 + import type {} from "@atcute/atproto"; 7 + import type {} from "@atcute/bluesky"; 8 + import type {} from "@atcute/microcosm"; 9 + 10 + import App from "./App"; 11 + import { tryFinalizeLogin } from "./lib/oauth"; 12 + import { accounts, setAccounts } from "./lib/accounts"; 13 + import { AtprotoDid } from "@atcute/lexicons/syntax"; 14 + import { toaster } from "./components/Toaster"; 15 + 16 + const root = document.getElementById("root"); 17 + 18 + if (import.meta.env.DEV && !(root instanceof HTMLElement)) { 19 + throw new Error( 20 + "Root element not found. Did you forget to add it to your index.html? Or maybe the id attribute got misspelled?", 21 + ); 22 + } 23 + 24 + const prefersDarkScheme = window.matchMedia( 25 + "(prefers-color-scheme: dark)", 26 + ).matches; 27 + document.documentElement.dataset.theme = prefersDarkScheme ? "dark" : "light"; 28 + 29 + tryFinalizeLogin() 30 + .then((login) => { 31 + if (!login) return; 32 + let currentAccounts = accounts(); 33 + currentAccounts = currentAccounts.filter((acc) => acc.did !== login.did); 34 + setAccounts([ 35 + ...currentAccounts, 36 + { 37 + did: login.did as AtprotoDid, 38 + handle: login.handle === "handle.invalid" ? undefined : login.handle, 39 + }, 40 + ]); 41 + toaster.create({ 42 + title: "login success", 43 + description: `logged in as ${login.handle}`, 44 + type: "success", 45 + }); 46 + }) 47 + .catch((error) => { 48 + console.error(error); 49 + toaster.create({ 50 + title: "login error", 51 + description: `${error}`, 52 + type: "error", 53 + }); 54 + }); 55 + 56 + render(() => <App />, root!);
+26
src/lib/accounts.ts
··· 1 + import { AtprotoDid, Handle } from "@atcute/lexicons/syntax"; 2 + import { setting } from "./settings"; 3 + import { createSignal } from "solid-js"; 4 + 5 + export type Account = { 6 + did: AtprotoDid; 7 + handle?: Handle; 8 + }; 9 + 10 + export const loggingIn = setting<AtprotoDid>("loggingIn"); 11 + 12 + export const accountSetting = setting<Account[]>("accounts"); 13 + const [_accounts, _setAccounts] = createSignal<Account[]>( 14 + accountSetting.get() ?? [], 15 + ); 16 + export const accounts = _accounts; 17 + export const setAccounts = ( 18 + value: Account[] | ((prev: Account[]) => Account[]), 19 + ) => { 20 + const newAccounts = _setAccounts(value); 21 + accountSetting.set(newAccounts); 22 + }; 23 + 24 + export const [selectedAccount, setSelectedAccount] = createSignal< 25 + AtprotoDid | undefined 26 + >(accounts().at(0)?.did);
+62
src/lib/at.ts
··· 1 + import { XrpcHandleResolver } from "@atcute/identity-resolver"; 2 + import { OAuthUserAgent } from "@atcute/oauth-browser-client"; 3 + import { Client as AtcuteClient, simpleFetchHandler } from "@atcute/client"; 4 + import { getSessionClient } from "./oauth"; 5 + import { AppBskyFeedPost } from "@atcute/bluesky"; 6 + import { AtprotoDid } from "@atcute/lexicons/syntax"; 7 + 8 + export const slingshotUrl = "https://slingshot.microcosm.blue"; 9 + 10 + export const handleResolver = new XrpcHandleResolver({ 11 + serviceUrl: slingshotUrl, 12 + }); 13 + export const slingshot = new AtcuteClient({ 14 + handler: simpleFetchHandler({ service: slingshotUrl }), 15 + }); 16 + 17 + export const login = async (agent: OAuthUserAgent) => { 18 + const rpc = new AtcuteClient({ handler: agent }); 19 + const res = await rpc.get("com.atproto.server.getSession", { params: {} }); 20 + if (!res.ok) throw res.data.error; 21 + const didDoc = await slingshot.get( 22 + "com.bad-example.identity.resolveMiniDoc", 23 + { params: { identifier: res.data.did } }, 24 + ); 25 + if (!didDoc.ok) throw didDoc.data.error; 26 + return { 27 + client: rpc, 28 + did: res.data.did, 29 + handle: res.data.handle, 30 + pds: didDoc.data.pds, 31 + }; 32 + }; 33 + 34 + export const sendPost = async ( 35 + did: AtprotoDid, 36 + blob: Blob, 37 + postContent: string, 38 + ) => { 39 + const login = await getSessionClient(did); 40 + const upload = await login.client.post("com.atproto.repo.uploadBlob", { 41 + input: blob, 42 + }); 43 + if (!upload.ok) throw `failed to upload blob: ${upload.data.error}`; 44 + const record: AppBskyFeedPost.Main = { 45 + $type: "app.bsky.feed.post", 46 + text: postContent, 47 + embed: { 48 + $type: "app.bsky.embed.video", 49 + video: upload.data.blob, 50 + }, 51 + createdAt: new Date().toISOString(), 52 + }; 53 + const result = await login.client.post("com.atproto.repo.createRecord", { 54 + input: { 55 + collection: "app.bsky.feed.post", 56 + record, 57 + repo: did, 58 + }, 59 + }); 60 + if (!result.ok) throw `failed to upload post: ${result.data.error}`; 61 + return result.data; 62 + };
+108
src/lib/oauth.ts
··· 1 + import { 2 + configureOAuth, 3 + defaultIdentityResolver, 4 + createAuthorizationUrl, 5 + finalizeAuthorization, 6 + OAuthUserAgent, 7 + getSession, 8 + deleteStoredSession, 9 + } from "@atcute/oauth-browser-client"; 10 + 11 + import { 12 + CompositeDidDocumentResolver, 13 + PlcDidDocumentResolver, 14 + WebDidDocumentResolver, 15 + } from "@atcute/identity-resolver"; 16 + import type { ActorIdentifier } from "@atcute/lexicons"; 17 + import type { AtprotoDid } from "@atcute/lexicons/syntax"; 18 + import { handleResolver, login } from "./at"; 19 + import { loggingIn } from "./accounts"; 20 + import { clientId, redirectUri } from "./oauthMetadata"; 21 + 22 + configureOAuth({ 23 + metadata: { 24 + client_id: clientId, 25 + redirect_uri: redirectUri, 26 + }, 27 + identityResolver: defaultIdentityResolver({ 28 + handleResolver, 29 + 30 + didDocumentResolver: new CompositeDidDocumentResolver({ 31 + methods: { 32 + plc: new PlcDidDocumentResolver(), 33 + web: new WebDidDocumentResolver(), 34 + }, 35 + }), 36 + }), 37 + }); 38 + 39 + export const sessions = { 40 + get: async (did: AtprotoDid) => { 41 + const session = await getSession(did, { allowStale: true }); 42 + return new OAuthUserAgent(session); 43 + }, 44 + remove: async (did: AtprotoDid) => { 45 + try { 46 + const agent = await sessions.get(did); 47 + await agent.signOut(); 48 + } catch { 49 + deleteStoredSession(did); 50 + } 51 + }, 52 + }; 53 + 54 + export const flow = { 55 + start: async (identifier: ActorIdentifier): Promise<void> => { 56 + const authUrl = await createAuthorizationUrl({ 57 + target: { type: "account", identifier }, 58 + scope: "atproto transition:generic", 59 + }); 60 + // recommended to wait for the browser to persist local storage before proceeding 61 + await new Promise((resolve) => setTimeout(resolve, 200)); 62 + // redirect the user to sign in and authorize the app 63 + window.location.assign(authUrl); 64 + // if this is on an async function, ideally the function should never ever resolve. 65 + // the only way it should resolve at this point is if the user aborted the authorization 66 + // by returning back to this page (thanks to back-forward page caching) 67 + await new Promise((_resolve, reject) => { 68 + const listener = () => { 69 + reject(new Error(`user aborted the login request`)); 70 + }; 71 + window.addEventListener("pageshow", listener, { once: true }); 72 + }); 73 + }, 74 + finalize: async (url: URL): Promise<OAuthUserAgent | null> => { 75 + // createAuthorizationUrl asks server to put the params in the hash 76 + const params = new URLSearchParams(url.hash.slice(1)); 77 + if (!params.has("code")) return null; 78 + const { session } = await finalizeAuthorization(params); 79 + return new OAuthUserAgent(session); 80 + }, 81 + }; 82 + 83 + export const tryFinalizeLogin = async () => { 84 + const did = loggingIn.get(); 85 + if (!did) return; 86 + 87 + const currentUrl = new URL(window.location.href); 88 + // scrub history so auth state cant be replayed 89 + try { 90 + history.replaceState(null, "", "/"); 91 + } catch { 92 + // if router was unitialized then we probably dont need to scrub anyway 93 + // so its fine 94 + } 95 + 96 + loggingIn.set(undefined); 97 + await sessions.remove(did); 98 + const agent = await flow.finalize(currentUrl); 99 + if (!agent) throw "no session was logged into?"; 100 + 101 + return await login(agent); 102 + }; 103 + 104 + export const getSessionClient = async (did: AtprotoDid) => { 105 + const session = await sessions.get(did); 106 + if (!session) throw `no session found for ${did}`; 107 + return await login(session); 108 + };
+13
src/lib/oauthMetadata.json
··· 1 + { 2 + "client_id": "http://localhost:3000", 3 + "client_name": "bsky voice memos", 4 + "client_uri": "http://localhost:3000", 5 + "logo_uri": "http://localhost:3000/favicon.png", 6 + "redirect_uris": ["http://127.0.0.1:3000/"], 7 + "scope": "atproto transition:generic", 8 + "grant_types": ["authorization_code", "refresh_token"], 9 + "response_types": ["code"], 10 + "token_endpoint_auth_method": "none", 11 + "application_type": "web", 12 + "dpop_bound_access_tokens": true 13 + }
+4
src/lib/oauthMetadata.ts
··· 1 + const env = import.meta.env; 2 + 3 + export const redirectUri = env.VITE_OAUTH_REDIRECT_URL; 4 + export const clientId = env.VITE_OAUTH_CLIENT_ID;
+350
src/lib/render.ts
··· 1 + import { 2 + Output as MediaOutput, 3 + Mp4OutputFormat, 4 + BufferTarget, 5 + CanvasSource, 6 + QUALITY_MEDIUM, 7 + getFirstEncodableVideoCodec, 8 + Input as MediaInput, 9 + BlobSource, 10 + ALL_FORMATS, 11 + Conversion, 12 + } from "mediabunny"; 13 + 14 + const renderCanvas = new OffscreenCanvas(1280, 720); 15 + 16 + // claude generated visualizer code cuz im lazy and it works okay ig 17 + 18 + /** 19 + * Extracts frequency data from audio file for visualization 20 + * Efficient FFT-like approach with adaptive sensitivity based on track volume 21 + */ 22 + const extractFrequencyData = async (file: File, fps: number = 30) => { 23 + if (fps <= 0) 24 + throw new Error("invalid frame rate: must be greater than zero"); 25 + 26 + const audioContext = new AudioContext(); 27 + const arrayBuffer = await file.arrayBuffer(); 28 + const audioBuffer = await audioContext.decodeAudioData(arrayBuffer); 29 + 30 + const sampleRate = audioBuffer.sampleRate; 31 + const channelData = audioBuffer.getChannelData(0); 32 + const fftSize = 2048; 33 + const frequencyBinCount = fftSize / 2; 34 + const hopSize = Math.floor(sampleRate / fps); 35 + const totalFrames = Math.floor(channelData.length / hopSize); 36 + 37 + // Pre-calculate volume levels for adaptive scaling 38 + const volumeWindowSize = Math.floor(sampleRate * 2); // 2 second windows 39 + const volumeLevels: number[] = []; 40 + 41 + for (let i = 0; i < channelData.length; i += volumeWindowSize) { 42 + let sum = 0; 43 + const end = Math.min(i + volumeWindowSize, channelData.length); 44 + for (let j = i; j < end; j++) { 45 + sum += Math.abs(channelData[j]); 46 + } 47 + volumeLevels.push(sum / (end - i)); 48 + } 49 + 50 + // Calculate overall average and max volume for normalization 51 + const avgVolume = 52 + volumeLevels.reduce((a, b) => a + b, 0) / volumeLevels.length; 53 + const maxVolume = Math.max(...volumeLevels); 54 + 55 + const allFrequencyData: Uint8Array[] = []; 56 + let previousFrame: Float32Array | null = null; 57 + const smoothingFactor = 0.45; 58 + 59 + // Pre-compute sine/cosine tables for efficiency 60 + const numBands = 128; 61 + const cosTable: number[][] = []; 62 + const sinTable: number[][] = []; 63 + 64 + for (let i = 0; i < numBands; i++) { 65 + cosTable[i] = []; 66 + sinTable[i] = []; 67 + const freqIndex = Math.pow(i / numBands, 1.5) * frequencyBinCount; 68 + 69 + for (let j = 0; j < fftSize; j++) { 70 + const angle = (2 * Math.PI * freqIndex * j) / fftSize; 71 + cosTable[i][j] = Math.cos(angle); 72 + sinTable[i][j] = Math.sin(angle); 73 + } 74 + } 75 + 76 + for (let frame = 0; frame < totalFrames; frame++) { 77 + const offset = frame * hopSize; 78 + 79 + // Determine which volume window this frame is in 80 + const volumeIndex = Math.floor(offset / volumeWindowSize); 81 + const currentVolume = 82 + volumeLevels[Math.min(volumeIndex, volumeLevels.length - 1)]; 83 + 84 + // Calculate adaptive boost: quieter sections get more boost 85 + // Range from 1.5x to 8x boost depending on how quiet the section is 86 + const volumeRatio = currentVolume / (avgVolume + 0.0001); 87 + const adaptiveBoost = Math.pow(1 / (volumeRatio + 0.3), 0.6) * 4; 88 + 89 + const slice = new Float32Array(fftSize); 90 + 91 + // Apply Hann window 92 + for (let i = 0; i < fftSize; i++) { 93 + const idx = offset + i; 94 + const sample = idx < channelData.length ? channelData[idx] : 0; 95 + const window = 0.5 * (1 - Math.cos((2 * Math.PI * i) / fftSize)); 96 + slice[i] = sample * window; 97 + } 98 + 99 + // Calculate magnitudes for reduced frequency bands 100 + const frequencyData = new Float32Array(numBands); 101 + 102 + for (let i = 0; i < numBands; i++) { 103 + let real = 0; 104 + let imag = 0; 105 + 106 + for (let j = 0; j < fftSize; j += 4) { 107 + real += slice[j] * cosTable[i][j]; 108 + imag += slice[j] * sinTable[i][j]; 109 + } 110 + 111 + const magnitude = Math.sqrt(real * real + imag * imag); 112 + 113 + // Apply logarithmic scaling with adaptive boost 114 + const boosted = Math.log(magnitude * 30 * adaptiveBoost + 1) * 20; 115 + frequencyData[i] = boosted; 116 + } 117 + 118 + // Temporal smoothing 119 + if (previousFrame) { 120 + for (let i = 0; i < numBands; i++) { 121 + frequencyData[i] = 122 + smoothingFactor * previousFrame[i] + 123 + (1 - smoothingFactor) * frequencyData[i]; 124 + } 125 + } 126 + 127 + // Spatial smoothing 128 + const smoothed = new Float32Array(numBands); 129 + for (let i = 0; i < numBands; i++) { 130 + const prev = i > 0 ? frequencyData[i - 1] : frequencyData[i]; 131 + const next = i < numBands - 1 ? frequencyData[i + 1] : frequencyData[i]; 132 + smoothed[i] = (prev + frequencyData[i] * 2 + next) / 4; 133 + } 134 + 135 + // Expand back to full frequencyBinCount for circular visualization 136 + const uint8Data = new Uint8Array(frequencyBinCount); 137 + for (let i = 0; i < frequencyBinCount; i++) { 138 + const bandIndex = (i / frequencyBinCount) * numBands; 139 + const lower = Math.floor(bandIndex); 140 + const upper = Math.min(numBands - 1, Math.ceil(bandIndex)); 141 + const t = bandIndex - lower; 142 + 143 + const value = smoothed[lower] * (1 - t) + smoothed[upper] * t; 144 + uint8Data[i] = Math.min(255, Math.max(0, Math.floor(value))); 145 + } 146 + 147 + allFrequencyData.push(uint8Data); 148 + previousFrame = smoothed; 149 + } 150 + 151 + return allFrequencyData; 152 + }; 153 + 154 + const drawPfp = ( 155 + ctx: OffscreenCanvasRenderingContext2D, 156 + pfpImg: HTMLImageElement, 157 + centerX: number, 158 + centerY: number, 159 + baseRadius: number, 160 + ) => { 161 + const pfpSize = baseRadius * 1.9; 162 + const pfpX = centerX - pfpSize / 2; 163 + const pfpY = centerY - pfpSize / 2; 164 + 165 + ctx.save(); 166 + ctx.beginPath(); 167 + ctx.arc(centerX, centerY, pfpSize / 2, 0, Math.PI * 2); 168 + ctx.closePath(); 169 + ctx.clip(); 170 + ctx.drawImage(pfpImg, pfpX, pfpY, pfpSize, pfpSize); 171 + ctx.restore(); 172 + }; 173 + 174 + /** 175 + * Draws circular audio visualizer around center 176 + * Inspired by circular spectrum visualizers: https://codepen.io/nfj525/pen/rVBaab 177 + */ 178 + const drawCircularVisualizer = ( 179 + ctx: OffscreenCanvasRenderingContext2D, 180 + canvas: OffscreenCanvas, 181 + frequencyData: Uint8Array, 182 + pfpImg: HTMLImageElement | null, 183 + ) => { 184 + const centerX = canvas.width / 2; 185 + const centerY = canvas.height / 2; 186 + const baseRadius = Math.min(canvas.width, canvas.height) * 0.15; 187 + const maxBarHeight = baseRadius * 1.5; 188 + 189 + // Draw profile picture in center if provided 190 + if (pfpImg) drawPfp(ctx, pfpImg, centerX, centerY, baseRadius); 191 + 192 + // Draw circular bars 193 + const barCount = 128; 194 + const angleStep = (Math.PI * 2) / barCount; 195 + 196 + for (let i = 0; i < barCount; i++) { 197 + const dataIndex = Math.floor((i / barCount) * frequencyData.length); 198 + const value = frequencyData[dataIndex] / 255; 199 + const barHeight = value * maxBarHeight; 200 + 201 + const angle = i * angleStep - Math.PI / 2; 202 + const innerX = centerX + Math.cos(angle) * baseRadius; 203 + const innerY = centerY + Math.sin(angle) * baseRadius; 204 + const outerX = centerX + Math.cos(angle) * (baseRadius + barHeight); 205 + const outerY = centerY + Math.sin(angle) * (baseRadius + barHeight); 206 + 207 + const hue = (i / barCount) * 360; 208 + const brightness = 50 + value * 50; 209 + ctx.strokeStyle = `hsl(${hue}, 100%, ${brightness}%)`; 210 + ctx.lineWidth = 3; 211 + 212 + ctx.beginPath(); 213 + ctx.moveTo(innerX, innerY); 214 + ctx.lineTo(outerX, outerY); 215 + ctx.stroke(); 216 + } 217 + }; 218 + 219 + /** 220 + * Draws flat horizontal audio visualizer bars 221 + */ 222 + const drawFlatVisualizer = ( 223 + ctx: OffscreenCanvasRenderingContext2D, 224 + canvas: OffscreenCanvas, 225 + frequencyData: Uint8Array, 226 + ) => { 227 + const barCount = 64; 228 + const barWidth = canvas.width / barCount; 229 + const maxBarHeight = canvas.height * 0.8; 230 + const baseY = canvas.height / 2; 231 + 232 + for (let i = 0; i < barCount; i++) { 233 + const dataIndex = Math.floor((i / barCount) * frequencyData.length); 234 + const value = frequencyData[dataIndex] / 255; 235 + const barHeight = (value * maxBarHeight) / 2; 236 + 237 + const hue = (i / barCount) * 360; 238 + const brightness = 50 + value * 50; 239 + ctx.fillStyle = `hsl(${hue}, 100%, ${brightness}%)`; 240 + 241 + // Draw mirrored bars (top and bottom) 242 + ctx.fillRect(i * barWidth, baseY - barHeight, barWidth - 2, barHeight); 243 + ctx.fillRect(i * barWidth, baseY, barWidth - 2, barHeight); 244 + } 245 + }; 246 + 247 + type RenderOptions = { 248 + pfpUrl: string | undefined; 249 + visualizer: boolean; 250 + frameRate: number; 251 + bgColor: string; 252 + }; 253 + 254 + export const render = async (file: File, opts: RenderOptions) => { 255 + // load pfp picture 256 + let pfpImg: HTMLImageElement | null = null; 257 + if (opts.pfpUrl) { 258 + pfpImg = new Image(); 259 + pfpImg.crossOrigin = "anonymous"; 260 + await new Promise((resolve, reject) => { 261 + pfpImg!.onload = resolve; 262 + pfpImg!.onerror = reject; 263 + pfpImg!.src = opts.pfpUrl!; 264 + }); 265 + } 266 + 267 + const input = new MediaInput({ 268 + source: new BlobSource(file), 269 + formats: ALL_FORMATS, 270 + }); 271 + 272 + const audioTrack = await input.getPrimaryAudioTrack(); 273 + if (!audioTrack) throw new Error("no audio track found."); 274 + 275 + const duration = await input.computeDuration(); 276 + if (!duration) throw new Error("couldn't get audio duration."); 277 + 278 + const videoCodec = await getFirstEncodableVideoCodec( 279 + new Mp4OutputFormat().getSupportedVideoCodecs(), 280 + { 281 + width: renderCanvas.width, 282 + height: renderCanvas.height, 283 + }, 284 + ); 285 + if (!videoCodec) 286 + throw new Error("your browser doesn't support video encoding."); 287 + 288 + const ctx = renderCanvas.getContext("2d"); 289 + if (!ctx) throw new Error("couldn't get canvas context."); 290 + 291 + const output = new MediaOutput({ 292 + format: new Mp4OutputFormat({ 293 + fastStart: "in-memory", 294 + }), 295 + target: new BufferTarget(), 296 + }); 297 + const conversion = await Conversion.init({ 298 + input, 299 + output, 300 + }); 301 + const videoSource = new CanvasSource(renderCanvas, { 302 + codec: "avc", 303 + bitrate: QUALITY_MEDIUM, 304 + }); 305 + output.addVideoTrack(videoSource); 306 + await output.start(); 307 + 308 + const bgColor = opts.bgColor; 309 + const drawBackground = () => { 310 + ctx.fillStyle = bgColor; 311 + ctx.fillRect(0, 0, renderCanvas.width, renderCanvas.height); 312 + }; 313 + 314 + if (opts.visualizer) { 315 + const freqData = await extractFrequencyData(file, opts.frameRate); 316 + const frameDuration = 1 / opts.frameRate; 317 + 318 + // Render animated frames 319 + for (let i = 0; i < freqData.length; i++) { 320 + const timestamp = i * frameDuration; 321 + if (timestamp >= duration) break; 322 + 323 + // bg 324 + drawBackground(); 325 + 326 + if (pfpImg) 327 + drawCircularVisualizer(ctx, renderCanvas, freqData[i], pfpImg); 328 + else drawFlatVisualizer(ctx, renderCanvas, freqData[i]); 329 + 330 + await videoSource.add(timestamp); 331 + } 332 + } else { 333 + drawBackground(); 334 + 335 + if (pfpImg) { 336 + const pfpSize = Math.min(renderCanvas.width, renderCanvas.height) * 0.5; 337 + const pfpX = (renderCanvas.width - pfpSize) / 2; 338 + const pfpY = (renderCanvas.height - pfpSize) / 2; 339 + 340 + drawPfp(ctx, pfpImg, pfpX, pfpY, pfpSize); 341 + } 342 + 343 + await videoSource.add(0, duration); 344 + } 345 + 346 + videoSource.close(); 347 + await conversion.execute(); 348 + 349 + return new Blob([output.target.buffer!], { type: "video/mp4" }); 350 + };
+19
src/lib/settings.ts
··· 1 + export const setting = <T>(key: string) => { 2 + return { 3 + get: () => { 4 + const value = localStorage.getItem(key); 5 + return value !== null ? (JSON.parse(value) as T) : undefined; 6 + }, 7 + set: (value: T | undefined) => 8 + value === undefined 9 + ? localStorage.removeItem(key) 10 + : localStorage.setItem(key, JSON.stringify(value)), 11 + }; 12 + }; 13 + export type Setting<T> = ReturnType<typeof setting<T>>; 14 + 15 + export const showVisualizer = setting<boolean>("showVisualizer"); 16 + export const showProfilePicture = setting<boolean>("showProfilePicture"); 17 + export const useDominantColorAsBg = setting<boolean>("useDominantColorAsBg"); 18 + export const backgroundColor = setting<string>("backgroundColor"); 19 + export const frameRate = setting<number>("frameRate");
+98
src/lib/task.ts
··· 1 + import { AtprotoDid } from "@atcute/lexicons/syntax"; 2 + import { ReactiveMap } from "@solid-primitives/map"; 3 + import { 4 + backgroundColor, 5 + frameRate, 6 + showProfilePicture, 7 + showVisualizer, 8 + useDominantColorAsBg, 9 + } from "./settings"; 10 + import { getSessionClient } from "./oauth"; 11 + import { is } from "@atcute/lexicons"; 12 + import { AppBskyActorProfile } from "@atcute/bluesky"; 13 + import { isBlob } from "@atcute/lexicons/interfaces"; 14 + import { render } from "./render"; 15 + import { FastAverageColor } from "fast-average-color"; 16 + import { toaster } from "~/components/Toaster"; 17 + import { parseColor } from "@ark-ui/solid"; 18 + 19 + export type TaskState = { file: File } & ( 20 + | { status: "processing" } 21 + | { status: "error"; error: string } 22 + | { status: "success"; result: Blob } 23 + ); 24 + 25 + let _idCounter = 0; 26 + const generateId = () => _idCounter++; 27 + 28 + const fac = new FastAverageColor(); 29 + 30 + export const tasks = new ReactiveMap<number, TaskState>(); 31 + export const addTask = async (did: AtprotoDid | undefined, file: File) => { 32 + const id = generateId(); 33 + tasks.set(id, { status: "processing", file }); 34 + try { 35 + let pfpUrl: string | undefined = undefined; 36 + console.log(did, showProfilePicture.get()); 37 + if (did && (showProfilePicture.get() ?? true)) { 38 + const login = await getSessionClient(did); 39 + const profileResult = await login.client.get( 40 + "com.atproto.repo.getRecord", 41 + { 42 + params: { 43 + collection: "app.bsky.actor.profile", 44 + repo: did, 45 + rkey: "self", 46 + }, 47 + }, 48 + ); 49 + if (!profileResult.ok) 50 + throw `failed to fetch profile: ${profileResult.data.error}`; 51 + if (!profileResult.data.value) throw `profile not found`; 52 + const profile = profileResult.data.value; 53 + if (!is(AppBskyActorProfile.mainSchema, profile)) 54 + throw `invalid profile schema`; 55 + if (profile.avatar && !isBlob(profile.avatar)) 56 + throw `invalid profile avatar`; 57 + pfpUrl = profile.avatar 58 + ? `${login.pds!}/xrpc/com.atproto.sync.getBlob?did=${did}&cid=${profile.avatar.ref.$link}` 59 + : undefined; 60 + } 61 + let bgColor = backgroundColor.get() ?? "#000000"; 62 + if (pfpUrl && (useDominantColorAsBg.get() ?? true)) { 63 + try { 64 + const dom = await fac.getColorAsync(pfpUrl); 65 + const color = parseColor(dom.hex).toFormat("hsla"); 66 + const [h, s, l] = color 67 + .getChannels() 68 + .map((chan) => color.getChannelValue(chan)); 69 + bgColor = color.withChannelValue("lightness", l * 0.4).toString("hex"); 70 + } catch (error) { 71 + console.error(error); 72 + toaster.create({ 73 + title: "can't pick dominant color", 74 + description: `error: ${error}`, 75 + type: "error", 76 + }); 77 + } 78 + } 79 + const result = await render(file, { 80 + pfpUrl, 81 + visualizer: showVisualizer.get() ?? true, 82 + frameRate: frameRate.get() ?? 30, 83 + bgColor, 84 + }); 85 + tasks.set(id, { 86 + file, 87 + status: "success", 88 + result, 89 + }); 90 + } catch (error) { 91 + console.error(error); 92 + tasks.set(id, { 93 + file, 94 + status: "error", 95 + error: `failed to process audio: ${error}`, 96 + }); 97 + } 98 + };
+9
src/vite-env.d.ts
··· 1 + interface ImportMetaEnv { 2 + readonly VITE_CLIENT_URI: string; 3 + readonly VITE_OAUTH_CLIENT_ID: string; 4 + readonly VITE_OAUTH_REDIRECT_URL: string; 5 + } 6 + 7 + interface ImportMeta { 8 + readonly env: ImportMetaEnv; 9 + }
+26
tsconfig.json
··· 1 + { 2 + "include": ["src", "styled-system"], 3 + "compilerOptions": { 4 + // General 5 + "jsx": "preserve", 6 + "jsxImportSource": "solid-js", 7 + "target": "ESNext", 8 + 9 + // Modules 10 + "allowSyntheticDefaultImports": true, 11 + "esModuleInterop": true, 12 + "isolatedModules": true, 13 + "module": "ESNext", 14 + "moduleResolution": "bundler", 15 + "noEmit": true, 16 + 17 + // Type Checking & Safety 18 + "strict": true, 19 + "types": ["vite/client"], 20 + 21 + "baseUrl": ".", 22 + "paths": { 23 + "~/*": ["./src/*"] 24 + } 25 + } 26 + }
+90
vite.config.ts
··· 1 + import { defineConfig } from "vite"; 2 + import solidPlugin from "vite-plugin-solid"; 3 + import devtools from "solid-devtools/vite"; 4 + import tsconfigPaths from "vite-tsconfig-paths"; 5 + import oauthMetadata from "./src/lib/oauthMetadata.json"; 6 + 7 + export const makeOauthMetadata = ( 8 + client_id: string, 9 + client_uri: string, 10 + redirect_uri: string, 11 + ) => ({ 12 + ...oauthMetadata, 13 + client_id, 14 + client_uri, 15 + logo_uri: `${client_uri}/favicon.png`, 16 + redirect_uris: [redirect_uri], 17 + }); 18 + 19 + export default defineConfig({ 20 + plugins: [ 21 + { 22 + name: "oauth-metadata", 23 + config(_conf, { command }) { 24 + if (command !== "build") { 25 + process.env.VITE_CLIENT_URI = "http://localhost:3000"; 26 + const redirectUri = "http://127.0.0.1:3000"; 27 + process.env.VITE_OAUTH_REDIRECT_URL = redirectUri; 28 + process.env.VITE_OAUTH_CLIENT_ID = 29 + `http://localhost` + 30 + `?redirect_uri=${encodeURIComponent(redirectUri)}` + 31 + `&scope=${encodeURIComponent(oauthMetadata.scope)}`; 32 + } 33 + }, 34 + configureServer(server) { 35 + server.middlewares.use((req, res, next) => { 36 + if (req.headers.host?.startsWith("127.0.0.1")) { 37 + const newUrl = `http://localhost:${req.headers.host.split(":")[1] || "3000"}${req.url}`; 38 + res.writeHead(301, { Location: newUrl }); 39 + res.end(); 40 + return; 41 + } 42 + next(); 43 + }); 44 + server.middlewares.use((req, res, next) => { 45 + if (req.url === "/oauth-client-metadata.json") { 46 + res.setHeader("Content-Type", "application/json"); 47 + res.end( 48 + JSON.stringify( 49 + makeOauthMetadata( 50 + process.env.VITE_OAUTH_CLIENT_ID!, 51 + process.env.VITE_CLIENT_URI!, 52 + process.env.VITE_OAUTH_REDIRECT_URL!, 53 + ), 54 + null, 55 + 2, 56 + ), 57 + ); 58 + return; 59 + } 60 + next(); 61 + }); 62 + }, 63 + generateBundle() { 64 + this.emitFile({ 65 + type: "asset", 66 + fileName: "oauth-client-metadata.json", 67 + source: JSON.stringify( 68 + makeOauthMetadata( 69 + process.env.VITE_OAUTH_CLIENT_ID!, 70 + process.env.VITE_CLIENT_URI!, 71 + process.env.VITE_OAUTH_REDIRECT_URL!, 72 + ), 73 + null, 74 + 2, 75 + ), 76 + }); 77 + }, 78 + }, 79 + devtools(), 80 + solidPlugin(), 81 + tsconfigPaths({ root: "./" }), 82 + ], 83 + server: { 84 + host: "0.0.0.0", 85 + port: 3000, 86 + }, 87 + build: { 88 + target: "esnext", 89 + }, 90 + });