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

feat: init project

ptr.pet 47559ba1

verified
+36
.gitignore
···
+
dist
+
.wrangler
+
.output
+
.vercel
+
.netlify
+
.vinxi
+
app.config.timestamp_*.js
+
+
# Environment
+
.env
+
.env*.local
+
+
# dependencies
+
/node_modules
+
+
# IDEs and editors
+
/.idea
+
.project
+
.classpath
+
*.launch
+
.settings/
+
+
# Temp
+
gitignore
+
+
# System Files
+
.DS_Store
+
Thumbs.db
+
+
/.envrc
+
/.direnv
+
/result
+
+
## Panda
+
styled-system
+
styled-system-studio
+36
README.md
···
+
## Usage
+
+
Those templates dependencies are maintained via [pnpm](https://pnpm.io) via `pnpm up -Lri`.
+
+
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.
+
+
```bash
+
$ npm install # or pnpm install or yarn install
+
```
+
+
### Learn more on the [Solid Website](https://solidjs.com) and come chat with us on our [Discord](https://discord.com/invite/solidjs)
+
+
## Available Scripts
+
+
In the project directory, you can run:
+
+
### `npm run dev` or `npm start`
+
+
Runs the app in the development mode.<br>
+
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
+
+
The page will reload if you make edits.<br>
+
+
### `npm run build`
+
+
Builds the app for production to the `dist` folder.<br>
+
It correctly bundles Solid in production mode and optimizes the build for the best performance.
+
+
The build is minified and the filenames include the hashes.<br>
+
Your app is ready to be deployed!
+
+
## Deployment
+
+
You can deploy the `dist` folder to any static host provider (netlify, surge, now, etc.)
+
+
## This project was created with the [Solid CLI](https://github.com/solidjs-community/solid-cli)
+3347
deno.lock
···
+
{
+
"version": "5",
+
"specifiers": {
+
"npm:@ark-ui/solid@^5.28.0": "5.28.0_solid-js@1.9.10__seroval@1.3.2_@internationalized+date@3.10.0",
+
"npm:@atcute/atproto@^3.1.9": "3.1.9",
+
"npm:@atcute/bluesky@^3.2.10": "3.2.10",
+
"npm:@atcute/client@^4.0.5": "4.0.5",
+
"npm:@atcute/identity-resolver@^1.1.4": "1.1.4_@atcute+identity@1.1.2",
+
"npm:@atcute/identity@^1.1.2": "1.1.2",
+
"npm:@atcute/lexicons@^1.2.3": "1.2.3",
+
"npm:@atcute/microcosm@1": "1.0.0",
+
"npm:@atcute/oauth-browser-client@^2.0.1": "2.0.1_@atcute+identity@1.1.2",
+
"npm:@pandacss/dev@^1.5.1": "1.5.1_typescript@5.9.3",
+
"npm:@pandacss/preset-base@^1.5.1": "1.5.1",
+
"npm:@park-ui/panda-preset@~0.43.1": "0.43.1_@pandacss+dev@1.5.1__typescript@5.9.3_typescript@5.9.3",
+
"npm:@solid-primitives/map@~0.7.2": "0.7.2_solid-js@1.9.10__seroval@1.3.2",
+
"npm:fast-average-color@^9.5.0": "9.5.0",
+
"npm:lucide-solid@0.553": "0.553.0_solid-js@1.9.10__seroval@1.3.2",
+
"npm:mediabunny@^1.25.0": "1.25.0",
+
"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",
+
"npm:solid-js@^1.9.5": "1.9.10_seroval@1.3.2",
+
"npm:typescript@^5.7.2": "5.9.3",
+
"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",
+
"npm:vite-tsconfig-paths@^5.1.4": "5.1.4_vite@7.1.12__picomatch@4.0.3_typescript@5.9.3",
+
"npm:vite@^7.1.4": "7.1.12_picomatch@4.0.3"
+
},
+
"npm": {
+
"@ark-ui/anatomy@3.5.0": {
+
"integrity": "sha512-KoROLVVT23BvFHcye/GYhG8NJ2CH0C+CaoJhXrkEjvk8pbEx80Xk5NIUy5gL7xmX+LDD7kY5t3NotBqCu+2L2w==",
+
"dependencies": [
+
"@zag-js/accordion@0.62.1",
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/avatar@0.62.1",
+
"@zag-js/carousel@0.62.1",
+
"@zag-js/checkbox@0.62.1",
+
"@zag-js/clipboard@0.62.1",
+
"@zag-js/collapsible@0.62.1",
+
"@zag-js/color-picker@0.62.1",
+
"@zag-js/color-utils@0.62.1",
+
"@zag-js/combobox@0.62.1",
+
"@zag-js/date-picker@0.62.1_@internationalized+date@3.5.5",
+
"@zag-js/date-utils@0.62.1_@internationalized+date@3.10.0",
+
"@zag-js/dialog@0.62.1",
+
"@zag-js/editable@0.62.1",
+
"@zag-js/file-upload@0.62.1",
+
"@zag-js/hover-card@0.62.1",
+
"@zag-js/menu@0.62.1",
+
"@zag-js/number-input@0.62.1",
+
"@zag-js/pagination@0.62.1",
+
"@zag-js/pin-input@0.62.1",
+
"@zag-js/popover@0.62.1",
+
"@zag-js/presence@0.62.1",
+
"@zag-js/progress@0.62.1",
+
"@zag-js/qr-code@0.62.1",
+
"@zag-js/radio-group@0.62.1",
+
"@zag-js/rating-group@0.62.1",
+
"@zag-js/select@0.62.1",
+
"@zag-js/signature-pad@0.62.1",
+
"@zag-js/slider@0.62.1",
+
"@zag-js/splitter@0.62.1",
+
"@zag-js/switch@0.62.1",
+
"@zag-js/tabs@0.62.1",
+
"@zag-js/tags-input@0.62.1",
+
"@zag-js/time-picker",
+
"@zag-js/toast@0.62.1",
+
"@zag-js/toggle-group@0.62.1",
+
"@zag-js/tooltip@0.62.1",
+
"@zag-js/tree-view@0.62.1"
+
],
+
"deprecated": true
+
},
+
"@ark-ui/solid@5.28.0_solid-js@1.9.10__seroval@1.3.2_@internationalized+date@3.10.0": {
+
"integrity": "sha512-QC3oCnElmUO3lsEXoD2l/HIy7TOCITu3pbJ6udQw/QuzABsTMF5y0L/nsBfR6rzKhHr5Vkggw6W4VBjvhH8w0w==",
+
"dependencies": [
+
"@internationalized/date@3.10.0",
+
"@zag-js/accordion@1.27.1",
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/angle-slider",
+
"@zag-js/async-list",
+
"@zag-js/auto-resize@1.27.1",
+
"@zag-js/avatar@1.27.1",
+
"@zag-js/bottom-sheet",
+
"@zag-js/carousel@1.27.1",
+
"@zag-js/checkbox@1.27.1",
+
"@zag-js/clipboard@1.27.1",
+
"@zag-js/collapsible@1.27.1",
+
"@zag-js/collection@1.27.1",
+
"@zag-js/color-picker@1.27.1",
+
"@zag-js/color-utils@1.27.1",
+
"@zag-js/combobox@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/date-picker@1.27.1_@internationalized+date@3.10.0",
+
"@zag-js/date-utils@1.27.1_@internationalized+date@3.10.0",
+
"@zag-js/dialog@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/editable@1.27.1",
+
"@zag-js/file-upload@1.27.1",
+
"@zag-js/file-utils@1.27.1",
+
"@zag-js/floating-panel",
+
"@zag-js/focus-trap",
+
"@zag-js/highlight-word",
+
"@zag-js/hover-card@1.27.1",
+
"@zag-js/i18n-utils@1.27.1",
+
"@zag-js/image-cropper",
+
"@zag-js/json-tree-utils",
+
"@zag-js/listbox",
+
"@zag-js/marquee",
+
"@zag-js/menu@1.27.1",
+
"@zag-js/number-input@1.27.1",
+
"@zag-js/pagination@1.27.1",
+
"@zag-js/password-input",
+
"@zag-js/pin-input@1.27.1",
+
"@zag-js/popover@1.27.1",
+
"@zag-js/presence@1.27.1",
+
"@zag-js/progress@1.27.1",
+
"@zag-js/qr-code@1.27.1",
+
"@zag-js/radio-group@1.27.1",
+
"@zag-js/rating-group@1.27.1",
+
"@zag-js/scroll-area",
+
"@zag-js/select@1.27.1",
+
"@zag-js/signature-pad@1.27.1",
+
"@zag-js/slider@1.27.1",
+
"@zag-js/solid",
+
"@zag-js/splitter@1.27.1",
+
"@zag-js/steps",
+
"@zag-js/switch@1.27.1",
+
"@zag-js/tabs@1.27.1",
+
"@zag-js/tags-input@1.27.1",
+
"@zag-js/timer",
+
"@zag-js/toast@1.27.1",
+
"@zag-js/toggle",
+
"@zag-js/toggle-group@1.27.1",
+
"@zag-js/tooltip@1.27.1",
+
"@zag-js/tour",
+
"@zag-js/tree-view@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1",
+
"solid-js"
+
]
+
},
+
"@atcute/atproto@3.1.9": {
+
"integrity": "sha512-DyWwHCTdR4hY2BPNbLXgVmm7lI+fceOwWbE4LXbGvbvVtSn+ejSVFaAv01Ra3kWDha0whsOmbJL8JP0QPpf1+w==",
+
"dependencies": [
+
"@atcute/lexicons"
+
]
+
},
+
"@atcute/bluesky@3.2.10": {
+
"integrity": "sha512-qwQWTzRf3umnh2u41gdU+xWYkbzGlKDupc3zeOB+YjmuP1N9wEaUhwS8H7vgrqr0xC9SGNDjeUVcjC4m5BPLBg==",
+
"dependencies": [
+
"@atcute/atproto",
+
"@atcute/lexicons"
+
]
+
},
+
"@atcute/client@4.0.5": {
+
"integrity": "sha512-R8Qen8goGmEkynYGg2m6XFlVmz0GTDvQ+9w+4QqOob+XMk8/WDpF4aImev7WKEde/rV2gjcqW7zM8E6W9NShDA==",
+
"dependencies": [
+
"@atcute/identity",
+
"@atcute/lexicons"
+
]
+
},
+
"@atcute/identity-resolver@1.1.4_@atcute+identity@1.1.2": {
+
"integrity": "sha512-/SVh8vf2cXFJenmBnGeYF2aY3WGQm3cJeew5NWTlkqoy3LvJ5wkvKq9PWu4Tv653VF40rPOp6LOdVr9Fa+q5rA==",
+
"dependencies": [
+
"@atcute/identity",
+
"@atcute/lexicons",
+
"@atcute/util-fetch",
+
"@badrap/valita"
+
]
+
},
+
"@atcute/identity@1.1.2": {
+
"integrity": "sha512-vn0RN7SUF6N0sEPG9yyT6a0MzpfVS8BhsiLtB8OeS4qp2rLMQW33pelCpNitP1N+fq03MFlDGzs5p7K4qMs4cA==",
+
"dependencies": [
+
"@atcute/lexicons",
+
"@badrap/valita"
+
]
+
},
+
"@atcute/lexicons@1.2.3": {
+
"integrity": "sha512-ZNfNWS4jaR8VgWSSBaWRSSmwFeP134BmvpTt9JmM2x5vRoXeIFthxU9USY8ZV4vm0GPoxEMgkDin8HIlnFTg2w==",
+
"dependencies": [
+
"@standard-schema/spec",
+
"esm-env"
+
]
+
},
+
"@atcute/microcosm@1.0.0": {
+
"integrity": "sha512-XJW+TMvdktH2maTkVcNU6wKmnHpmNwhmg0Xj4ZY36plHpqNHfxR4kAAcXGSJcjH9CS8I1+cTHiyUQykdeOPeGg==",
+
"dependencies": [
+
"@atcute/lexicons"
+
]
+
},
+
"@atcute/multibase@1.1.6": {
+
"integrity": "sha512-HBxuCgYLKPPxETV0Rot4VP9e24vKl8JdzGCZOVsDaOXJgbRZoRIF67Lp0H/OgnJeH/Xpva8Z5ReoTNJE5dn3kg==",
+
"dependencies": [
+
"@atcute/uint8array"
+
]
+
},
+
"@atcute/oauth-browser-client@2.0.1_@atcute+identity@1.1.2": {
+
"integrity": "sha512-lG021GkeORG06zfFf4bH85egObjBEKHNgAWHvbtY/E2dX4wxo88hf370pJDx8acdnuUJLJ2VKPikJtZwo4Heeg==",
+
"dependencies": [
+
"@atcute/client",
+
"@atcute/identity",
+
"@atcute/identity-resolver",
+
"@atcute/lexicons",
+
"@atcute/multibase",
+
"@atcute/uint8array",
+
"nanoid@5.1.6"
+
]
+
},
+
"@atcute/uint8array@1.0.5": {
+
"integrity": "sha512-XLWWxoR2HNl2qU+FCr0rp1APwJXci7HnzbOQLxK55OaMNBXZ19+xNC5ii4QCsThsDxa4JS/JTzuiQLziITWf2Q=="
+
},
+
"@atcute/util-fetch@1.0.3": {
+
"integrity": "sha512-f8zzTb/xlKIwv2OQ31DhShPUNCmIIleX6p7qIXwWwEUjX6x8skUtpdISSjnImq01LXpltGV5y8yhV4/Mlb7CRQ==",
+
"dependencies": [
+
"@badrap/valita"
+
]
+
},
+
"@babel/code-frame@7.27.1": {
+
"integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
+
"dependencies": [
+
"@babel/helper-validator-identifier",
+
"js-tokens",
+
"picocolors"
+
]
+
},
+
"@babel/compat-data@7.28.5": {
+
"integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA=="
+
},
+
"@babel/core@7.28.5": {
+
"integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
+
"dependencies": [
+
"@babel/code-frame",
+
"@babel/generator",
+
"@babel/helper-compilation-targets",
+
"@babel/helper-module-transforms",
+
"@babel/helpers",
+
"@babel/parser",
+
"@babel/template",
+
"@babel/traverse",
+
"@babel/types",
+
"@jridgewell/remapping",
+
"convert-source-map",
+
"debug",
+
"gensync",
+
"json5",
+
"semver"
+
]
+
},
+
"@babel/generator@7.28.5": {
+
"integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==",
+
"dependencies": [
+
"@babel/parser",
+
"@babel/types",
+
"@jridgewell/gen-mapping",
+
"@jridgewell/trace-mapping",
+
"jsesc"
+
]
+
},
+
"@babel/helper-compilation-targets@7.27.2": {
+
"integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
+
"dependencies": [
+
"@babel/compat-data",
+
"@babel/helper-validator-option",
+
"browserslist@4.28.0",
+
"lru-cache",
+
"semver"
+
]
+
},
+
"@babel/helper-globals@7.28.0": {
+
"integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="
+
},
+
"@babel/helper-module-imports@7.18.6": {
+
"integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
+
"dependencies": [
+
"@babel/types"
+
]
+
},
+
"@babel/helper-module-imports@7.27.1": {
+
"integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
+
"dependencies": [
+
"@babel/traverse",
+
"@babel/types"
+
]
+
},
+
"@babel/helper-module-transforms@7.28.3_@babel+core@7.28.5": {
+
"integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==",
+
"dependencies": [
+
"@babel/core",
+
"@babel/helper-module-imports@7.27.1",
+
"@babel/helper-validator-identifier",
+
"@babel/traverse"
+
]
+
},
+
"@babel/helper-plugin-utils@7.27.1": {
+
"integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw=="
+
},
+
"@babel/helper-string-parser@7.27.1": {
+
"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="
+
},
+
"@babel/helper-validator-identifier@7.28.5": {
+
"integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="
+
},
+
"@babel/helper-validator-option@7.27.1": {
+
"integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="
+
},
+
"@babel/helpers@7.28.4": {
+
"integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==",
+
"dependencies": [
+
"@babel/template",
+
"@babel/types"
+
]
+
},
+
"@babel/parser@7.28.5": {
+
"integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
+
"dependencies": [
+
"@babel/types"
+
],
+
"bin": true
+
},
+
"@babel/plugin-syntax-jsx@7.27.1_@babel+core@7.28.5": {
+
"integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==",
+
"dependencies": [
+
"@babel/core",
+
"@babel/helper-plugin-utils"
+
]
+
},
+
"@babel/plugin-syntax-typescript@7.27.1_@babel+core@7.28.5": {
+
"integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==",
+
"dependencies": [
+
"@babel/core",
+
"@babel/helper-plugin-utils"
+
]
+
},
+
"@babel/template@7.27.2": {
+
"integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
+
"dependencies": [
+
"@babel/code-frame",
+
"@babel/parser",
+
"@babel/types"
+
]
+
},
+
"@babel/traverse@7.28.5": {
+
"integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==",
+
"dependencies": [
+
"@babel/code-frame",
+
"@babel/generator",
+
"@babel/helper-globals",
+
"@babel/parser",
+
"@babel/template",
+
"@babel/types",
+
"debug"
+
]
+
},
+
"@babel/types@7.28.5": {
+
"integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
+
"dependencies": [
+
"@babel/helper-string-parser",
+
"@babel/helper-validator-identifier"
+
]
+
},
+
"@badrap/valita@0.4.6": {
+
"integrity": "sha512-4kdqcjyxo/8RQ8ayjms47HCWZIF5981oE5nIenbfThKDxWXtEHKipAOWlflpPJzZx9y/JWYQkp18Awr7VuepFg=="
+
},
+
"@clack/core@0.5.0": {
+
"integrity": "sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==",
+
"dependencies": [
+
"picocolors",
+
"sisteransi"
+
]
+
},
+
"@clack/prompts@0.11.0": {
+
"integrity": "sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==",
+
"dependencies": [
+
"@clack/core",
+
"picocolors",
+
"sisteransi"
+
]
+
},
+
"@csstools/postcss-cascade-layers@5.0.2_postcss@8.5.6_postcss-selector-parser@7.1.0": {
+
"integrity": "sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg==",
+
"dependencies": [
+
"@csstools/selector-specificity",
+
"postcss",
+
"postcss-selector-parser"
+
]
+
},
+
"@csstools/selector-specificity@5.0.0_postcss-selector-parser@7.1.0": {
+
"integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==",
+
"dependencies": [
+
"postcss-selector-parser"
+
]
+
},
+
"@esbuild/aix-ppc64@0.25.12": {
+
"integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
+
"os": ["aix"],
+
"cpu": ["ppc64"]
+
},
+
"@esbuild/android-arm64@0.25.12": {
+
"integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
+
"os": ["android"],
+
"cpu": ["arm64"]
+
},
+
"@esbuild/android-arm@0.25.12": {
+
"integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
+
"os": ["android"],
+
"cpu": ["arm"]
+
},
+
"@esbuild/android-x64@0.25.12": {
+
"integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
+
"os": ["android"],
+
"cpu": ["x64"]
+
},
+
"@esbuild/darwin-arm64@0.25.12": {
+
"integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
+
"os": ["darwin"],
+
"cpu": ["arm64"]
+
},
+
"@esbuild/darwin-x64@0.25.12": {
+
"integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
+
"os": ["darwin"],
+
"cpu": ["x64"]
+
},
+
"@esbuild/freebsd-arm64@0.25.12": {
+
"integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
+
"os": ["freebsd"],
+
"cpu": ["arm64"]
+
},
+
"@esbuild/freebsd-x64@0.25.12": {
+
"integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
+
"os": ["freebsd"],
+
"cpu": ["x64"]
+
},
+
"@esbuild/linux-arm64@0.25.12": {
+
"integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
+
"os": ["linux"],
+
"cpu": ["arm64"]
+
},
+
"@esbuild/linux-arm@0.25.12": {
+
"integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
+
"os": ["linux"],
+
"cpu": ["arm"]
+
},
+
"@esbuild/linux-ia32@0.25.12": {
+
"integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
+
"os": ["linux"],
+
"cpu": ["ia32"]
+
},
+
"@esbuild/linux-loong64@0.25.12": {
+
"integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
+
"os": ["linux"],
+
"cpu": ["loong64"]
+
},
+
"@esbuild/linux-mips64el@0.25.12": {
+
"integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
+
"os": ["linux"],
+
"cpu": ["mips64el"]
+
},
+
"@esbuild/linux-ppc64@0.25.12": {
+
"integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
+
"os": ["linux"],
+
"cpu": ["ppc64"]
+
},
+
"@esbuild/linux-riscv64@0.25.12": {
+
"integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
+
"os": ["linux"],
+
"cpu": ["riscv64"]
+
},
+
"@esbuild/linux-s390x@0.25.12": {
+
"integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
+
"os": ["linux"],
+
"cpu": ["s390x"]
+
},
+
"@esbuild/linux-x64@0.25.12": {
+
"integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
+
"os": ["linux"],
+
"cpu": ["x64"]
+
},
+
"@esbuild/netbsd-arm64@0.25.12": {
+
"integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
+
"os": ["netbsd"],
+
"cpu": ["arm64"]
+
},
+
"@esbuild/netbsd-x64@0.25.12": {
+
"integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
+
"os": ["netbsd"],
+
"cpu": ["x64"]
+
},
+
"@esbuild/openbsd-arm64@0.25.12": {
+
"integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
+
"os": ["openbsd"],
+
"cpu": ["arm64"]
+
},
+
"@esbuild/openbsd-x64@0.25.12": {
+
"integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
+
"os": ["openbsd"],
+
"cpu": ["x64"]
+
},
+
"@esbuild/openharmony-arm64@0.25.12": {
+
"integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
+
"os": ["openharmony"],
+
"cpu": ["arm64"]
+
},
+
"@esbuild/sunos-x64@0.25.12": {
+
"integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
+
"os": ["sunos"],
+
"cpu": ["x64"]
+
},
+
"@esbuild/win32-arm64@0.25.12": {
+
"integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
+
"os": ["win32"],
+
"cpu": ["arm64"]
+
},
+
"@esbuild/win32-ia32@0.25.12": {
+
"integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
+
"os": ["win32"],
+
"cpu": ["ia32"]
+
},
+
"@esbuild/win32-x64@0.25.12": {
+
"integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
+
"os": ["win32"],
+
"cpu": ["x64"]
+
},
+
"@floating-ui/core@1.7.3": {
+
"integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==",
+
"dependencies": [
+
"@floating-ui/utils"
+
]
+
},
+
"@floating-ui/dom@1.6.8": {
+
"integrity": "sha512-kx62rP19VZ767Q653wsP1XZCGIirkE09E0QUGNYTM/ttbbQHqcGPdSfWFxUyyNLc/W6aoJRBajOSXhP6GXjC0Q==",
+
"dependencies": [
+
"@floating-ui/core",
+
"@floating-ui/utils"
+
]
+
},
+
"@floating-ui/dom@1.7.4": {
+
"integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==",
+
"dependencies": [
+
"@floating-ui/core",
+
"@floating-ui/utils"
+
]
+
},
+
"@floating-ui/utils@0.2.10": {
+
"integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="
+
},
+
"@internationalized/date@3.10.0": {
+
"integrity": "sha512-oxDR/NTEJ1k+UFVQElaNIk65E/Z83HK1z1WI3lQyhTtnNg4R5oVXaPzK3jcpKG8UHKDVuDQHzn+wsxSz8RP3aw==",
+
"dependencies": [
+
"@swc/helpers"
+
]
+
},
+
"@internationalized/date@3.5.5": {
+
"integrity": "sha512-H+CfYvOZ0LTJeeLOqm19E3uj/4YjrmOFtBufDHPfvtI80hFAMqtrp7oCACpe4Cil5l8S0Qu/9dYfZc/5lY8WQQ==",
+
"dependencies": [
+
"@swc/helpers"
+
]
+
},
+
"@internationalized/number@3.5.3": {
+
"integrity": "sha512-rd1wA3ebzlp0Mehj5YTuTI50AQEx80gWFyHcQu+u91/5NgdwBecO8BH6ipPfE+lmQ9d63vpB3H9SHoIUiupllw==",
+
"dependencies": [
+
"@swc/helpers"
+
]
+
},
+
"@internationalized/number@3.6.5": {
+
"integrity": "sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g==",
+
"dependencies": [
+
"@swc/helpers"
+
]
+
},
+
"@isaacs/balanced-match@4.0.1": {
+
"integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ=="
+
},
+
"@isaacs/brace-expansion@5.0.0": {
+
"integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==",
+
"dependencies": [
+
"@isaacs/balanced-match"
+
]
+
},
+
"@jridgewell/gen-mapping@0.3.13": {
+
"integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+
"dependencies": [
+
"@jridgewell/sourcemap-codec",
+
"@jridgewell/trace-mapping"
+
]
+
},
+
"@jridgewell/remapping@2.3.5": {
+
"integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+
"dependencies": [
+
"@jridgewell/gen-mapping",
+
"@jridgewell/trace-mapping"
+
]
+
},
+
"@jridgewell/resolve-uri@3.1.2": {
+
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="
+
},
+
"@jridgewell/sourcemap-codec@1.5.5": {
+
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="
+
},
+
"@jridgewell/trace-mapping@0.3.31": {
+
"integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+
"dependencies": [
+
"@jridgewell/resolve-uri",
+
"@jridgewell/sourcemap-codec"
+
]
+
},
+
"@nodelib/fs.scandir@2.1.5": {
+
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+
"dependencies": [
+
"@nodelib/fs.stat",
+
"run-parallel"
+
]
+
},
+
"@nodelib/fs.stat@2.0.5": {
+
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
+
},
+
"@nodelib/fs.walk@1.2.8": {
+
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+
"dependencies": [
+
"@nodelib/fs.scandir",
+
"fastq"
+
]
+
},
+
"@nothing-but/utils@0.17.0": {
+
"integrity": "sha512-TuCHcHLOqDL0SnaAxACfuRHBNRgNJcNn9X0GiH5H3YSDBVquCr3qEIG3FOQAuMyZCbu9w8nk2CHhOsn7IvhIwQ=="
+
},
+
"@pandacss/config@1.5.1": {
+
"integrity": "sha512-aO+YVRlccLXuFC30DEO9ZDkvXwjbCXk1blIpii8PuclTAR0+YPq8xXVRTVK3fR3MiA0zROca8nAf5Kb+wHVKPw==",
+
"dependencies": [
+
"@pandacss/logger",
+
"@pandacss/preset-base",
+
"@pandacss/preset-panda",
+
"@pandacss/shared",
+
"@pandacss/types",
+
"bundle-n-require",
+
"escalade@3.1.2",
+
"merge-anything",
+
"microdiff",
+
"typescript"
+
]
+
},
+
"@pandacss/core@1.5.1_postcss@8.5.6": {
+
"integrity": "sha512-okuvSm5o0gmQmkpLONH4ReqgBVOMMsfb9MyK8vpcZUpzvMBiraVcgsbLxKQyHlmVDZNbKLLokIycb8KEpqtIDQ==",
+
"dependencies": [
+
"@csstools/postcss-cascade-layers",
+
"@pandacss/is-valid-prop",
+
"@pandacss/logger",
+
"@pandacss/shared",
+
"@pandacss/token-dictionary",
+
"@pandacss/types",
+
"browserslist@4.24.4",
+
"hookable",
+
"lightningcss",
+
"lodash.merge",
+
"outdent",
+
"postcss",
+
"postcss-discard-duplicates",
+
"postcss-discard-empty",
+
"postcss-merge-rules",
+
"postcss-minify-selectors",
+
"postcss-nested",
+
"postcss-normalize-whitespace",
+
"postcss-selector-parser",
+
"ts-pattern"
+
]
+
},
+
"@pandacss/dev@1.5.1_typescript@5.9.3": {
+
"integrity": "sha512-U1NWO3ZgOLlABtDk6MMQwTNYOCiUtUg+HEoHPdEExLzNn+20mrLf1IZWJyn4zXKSpANGSi79EV7X4yxPa+W+MA==",
+
"dependencies": [
+
"@clack/prompts",
+
"@pandacss/config",
+
"@pandacss/logger",
+
"@pandacss/node",
+
"@pandacss/postcss",
+
"@pandacss/preset-base",
+
"@pandacss/preset-panda",
+
"@pandacss/shared",
+
"@pandacss/token-dictionary",
+
"@pandacss/types",
+
"cac"
+
],
+
"bin": true
+
},
+
"@pandacss/extractor@1.5.1_typescript@5.9.3": {
+
"integrity": "sha512-/DG4MnVo5LA0SpJq4rI0RgOp8kPjZMP5a1+q4MwLDHPtfWTwPaiKv7LULBW1L11V+fMOYn+d44dBKgU4dj6oSg==",
+
"dependencies": [
+
"@pandacss/shared",
+
"ts-evaluator",
+
"ts-morph"
+
]
+
},
+
"@pandacss/generator@1.5.1": {
+
"integrity": "sha512-kijxpjpvRQBz16BiBcghknthsdmVxSJD5C71jlcM4aVeqoZSCWDNcmlL/2SSCMy7oC6HANu2oRXS/L1YgYzHGA==",
+
"dependencies": [
+
"@pandacss/core",
+
"@pandacss/is-valid-prop",
+
"@pandacss/logger",
+
"@pandacss/shared",
+
"@pandacss/token-dictionary",
+
"@pandacss/types",
+
"javascript-stringify",
+
"outdent",
+
"pluralize",
+
"postcss",
+
"ts-pattern"
+
]
+
},
+
"@pandacss/is-valid-prop@1.5.1": {
+
"integrity": "sha512-AlOt+MqqwDlIdVEdW6wEtvDmX8MmPv004oD+7tdGN54HKpD9jqrwPwwS9p7YQ7nai631JlyladshFHqe1xl7+w=="
+
},
+
"@pandacss/logger@1.5.1": {
+
"integrity": "sha512-jC835vvSGIOxCZcqXH1alXdzO/ThUCE3HXGjt17mGli/QiVT3b/v83n/Cfz0wiHP3zSUlwVYaPAlXryepsQNWA==",
+
"dependencies": [
+
"@pandacss/types",
+
"kleur"
+
]
+
},
+
"@pandacss/node@1.5.1_typescript@5.9.3": {
+
"integrity": "sha512-qgiydokbjWcSqzsuCP1LR91IOLs7JgsMJkgAbEim/PdVH3NbKNjCUx9mK8bt1JO3/GKNC+GfePpacxGLmt/p6w==",
+
"dependencies": [
+
"@pandacss/config",
+
"@pandacss/core",
+
"@pandacss/generator",
+
"@pandacss/logger",
+
"@pandacss/parser",
+
"@pandacss/reporter",
+
"@pandacss/shared",
+
"@pandacss/token-dictionary",
+
"@pandacss/types",
+
"browserslist@4.24.4",
+
"chokidar",
+
"fast-glob",
+
"fs-extra",
+
"glob-parent@6.0.2",
+
"is-glob",
+
"lodash.merge",
+
"look-it-up",
+
"outdent",
+
"package-manager-detector",
+
"perfect-debounce",
+
"picomatch@4.0.3",
+
"pkg-types",
+
"pluralize",
+
"postcss",
+
"prettier",
+
"ts-morph",
+
"ts-pattern",
+
"tsconfck"
+
]
+
},
+
"@pandacss/parser@1.5.1_typescript@5.9.3": {
+
"integrity": "sha512-CuG5qdsQkw2xjxzN9pkfl9JaPgK28FJnRj9jmLb98Vo3J+NkUD2NyzL4k69lKZv9nbcmwn7+HbvMP/DKfx8OvQ==",
+
"dependencies": [
+
"@pandacss/config",
+
"@pandacss/core",
+
"@pandacss/extractor",
+
"@pandacss/logger",
+
"@pandacss/shared",
+
"@pandacss/types",
+
"@vue/compiler-sfc",
+
"magic-string",
+
"ts-morph",
+
"ts-pattern"
+
]
+
},
+
"@pandacss/postcss@1.5.1_typescript@5.9.3": {
+
"integrity": "sha512-fZZOf0n6WKm3JQnGXC4Y8RGzw9jDdYpFGaSpVLpE4VotbfBq/jZtACw/pLa4ryferJhRp+WraBvYtKg6w2bQ9w==",
+
"dependencies": [
+
"@pandacss/node",
+
"postcss"
+
]
+
},
+
"@pandacss/preset-base@1.5.1": {
+
"integrity": "sha512-I8USdmUqPPkluznTFilbzLgXzU/+NEzeCvkwuwfi0QZlmGXOXnatM/7IUK7yatNikPx3neqmNh4o4WwWE04dGQ==",
+
"dependencies": [
+
"@pandacss/types"
+
]
+
},
+
"@pandacss/preset-panda@1.5.1": {
+
"integrity": "sha512-ZA/MhFK3O/fYIS4p2HDpyPMgCISAi+g5LoPzX/jQbQ5WGfkBS8sTmxIM/XapGNVHAzXFzYOTwqQ87KP3Siiozw==",
+
"dependencies": [
+
"@pandacss/types"
+
]
+
},
+
"@pandacss/reporter@1.5.1": {
+
"integrity": "sha512-fCgX/VN9ZDZpvfYJU+bdQpwoR48cMmhtTvPYJIek6KoANKXXJFbpgC5t2N6EtTkktg+3+unks3XpU3FvQdGHTQ==",
+
"dependencies": [
+
"@pandacss/core",
+
"@pandacss/generator",
+
"@pandacss/logger",
+
"@pandacss/shared",
+
"@pandacss/types",
+
"table",
+
"wordwrapjs"
+
]
+
},
+
"@pandacss/shared@1.5.1": {
+
"integrity": "sha512-pTHbfT6N7vt6/BncGoMduCo4jnYOvyHC8XdSgV3mzStdGJqw+0R30jeULixYrv7HFGDXCNxzohQ2k8YGOk6UoQ=="
+
},
+
"@pandacss/token-dictionary@1.5.1": {
+
"integrity": "sha512-w/dSvEaskD7zYHYWbPdYG+zrFLVsYYYJl9hT2cE2spccgJCid40Ov/4/zuP67rC9rPfs7qETMy6ydTPGbCfZ5A==",
+
"dependencies": [
+
"@pandacss/logger",
+
"@pandacss/shared",
+
"@pandacss/types",
+
"picomatch@4.0.3",
+
"ts-pattern"
+
]
+
},
+
"@pandacss/types@1.5.1": {
+
"integrity": "sha512-fUDPtP3+yW8q5gPC2UfDcrdd/QW3H24kNt5vD30f5dt0CGDGkSoRUP4iJVNViEfQS2MzfDCnYI+PFOCw3eeQFw=="
+
},
+
"@park-ui/panda-preset@0.43.1_@pandacss+dev@1.5.1__typescript@5.9.3_typescript@5.9.3": {
+
"integrity": "sha512-kcO1ewx8zU9wHuTjZ/nqPCqjzL9AXkpzDnDrpcZ2unKR/UE3hHpP+Y1F0grTBaluPHLomjfZz3GebczJvoShBQ==",
+
"dependencies": [
+
"@ark-ui/anatomy",
+
"@pandacss/dev",
+
"effect"
+
],
+
"scripts": true
+
},
+
"@rollup/rollup-android-arm-eabi@4.52.5": {
+
"integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==",
+
"os": ["android"],
+
"cpu": ["arm"]
+
},
+
"@rollup/rollup-android-arm64@4.52.5": {
+
"integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==",
+
"os": ["android"],
+
"cpu": ["arm64"]
+
},
+
"@rollup/rollup-darwin-arm64@4.52.5": {
+
"integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==",
+
"os": ["darwin"],
+
"cpu": ["arm64"]
+
},
+
"@rollup/rollup-darwin-x64@4.52.5": {
+
"integrity": "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==",
+
"os": ["darwin"],
+
"cpu": ["x64"]
+
},
+
"@rollup/rollup-freebsd-arm64@4.52.5": {
+
"integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==",
+
"os": ["freebsd"],
+
"cpu": ["arm64"]
+
},
+
"@rollup/rollup-freebsd-x64@4.52.5": {
+
"integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==",
+
"os": ["freebsd"],
+
"cpu": ["x64"]
+
},
+
"@rollup/rollup-linux-arm-gnueabihf@4.52.5": {
+
"integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==",
+
"os": ["linux"],
+
"cpu": ["arm"]
+
},
+
"@rollup/rollup-linux-arm-musleabihf@4.52.5": {
+
"integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==",
+
"os": ["linux"],
+
"cpu": ["arm"]
+
},
+
"@rollup/rollup-linux-arm64-gnu@4.52.5": {
+
"integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==",
+
"os": ["linux"],
+
"cpu": ["arm64"]
+
},
+
"@rollup/rollup-linux-arm64-musl@4.52.5": {
+
"integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==",
+
"os": ["linux"],
+
"cpu": ["arm64"]
+
},
+
"@rollup/rollup-linux-loong64-gnu@4.52.5": {
+
"integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==",
+
"os": ["linux"],
+
"cpu": ["loong64"]
+
},
+
"@rollup/rollup-linux-ppc64-gnu@4.52.5": {
+
"integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==",
+
"os": ["linux"],
+
"cpu": ["ppc64"]
+
},
+
"@rollup/rollup-linux-riscv64-gnu@4.52.5": {
+
"integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==",
+
"os": ["linux"],
+
"cpu": ["riscv64"]
+
},
+
"@rollup/rollup-linux-riscv64-musl@4.52.5": {
+
"integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==",
+
"os": ["linux"],
+
"cpu": ["riscv64"]
+
},
+
"@rollup/rollup-linux-s390x-gnu@4.52.5": {
+
"integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==",
+
"os": ["linux"],
+
"cpu": ["s390x"]
+
},
+
"@rollup/rollup-linux-x64-gnu@4.52.5": {
+
"integrity": "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==",
+
"os": ["linux"],
+
"cpu": ["x64"]
+
},
+
"@rollup/rollup-linux-x64-musl@4.52.5": {
+
"integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==",
+
"os": ["linux"],
+
"cpu": ["x64"]
+
},
+
"@rollup/rollup-openharmony-arm64@4.52.5": {
+
"integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==",
+
"os": ["openharmony"],
+
"cpu": ["arm64"]
+
},
+
"@rollup/rollup-win32-arm64-msvc@4.52.5": {
+
"integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==",
+
"os": ["win32"],
+
"cpu": ["arm64"]
+
},
+
"@rollup/rollup-win32-ia32-msvc@4.52.5": {
+
"integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==",
+
"os": ["win32"],
+
"cpu": ["ia32"]
+
},
+
"@rollup/rollup-win32-x64-gnu@4.52.5": {
+
"integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==",
+
"os": ["win32"],
+
"cpu": ["x64"]
+
},
+
"@rollup/rollup-win32-x64-msvc@4.52.5": {
+
"integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==",
+
"os": ["win32"],
+
"cpu": ["x64"]
+
},
+
"@solid-devtools/debugger@0.28.1_solid-js@1.9.10__seroval@1.3.2": {
+
"integrity": "sha512-6qIUI6VYkXoRnL8oF5bvh2KgH71qlJ18hNw/mwSyY6v48eb80ZR48/5PDXufUa3q+MBSuYa1uqTMwLewpay9eg==",
+
"dependencies": [
+
"@nothing-but/utils",
+
"@solid-devtools/shared",
+
"@solid-primitives/bounds",
+
"@solid-primitives/event-listener",
+
"@solid-primitives/keyboard",
+
"@solid-primitives/rootless",
+
"@solid-primitives/scheduled",
+
"@solid-primitives/static-store",
+
"@solid-primitives/utils",
+
"solid-js"
+
]
+
},
+
"@solid-devtools/shared@0.20.0_solid-js@1.9.10__seroval@1.3.2": {
+
"integrity": "sha512-o5TACmUOQsxpzpOKCjbQqGk8wL8PMi+frXG9WNu4Lh3PQVUB6hs95Kl/S8xc++zwcMguUKZJn8h5URUiMOca6Q==",
+
"dependencies": [
+
"@nothing-but/utils",
+
"@solid-primitives/event-listener",
+
"@solid-primitives/media",
+
"@solid-primitives/refs",
+
"@solid-primitives/rootless",
+
"@solid-primitives/scheduled",
+
"@solid-primitives/static-store",
+
"@solid-primitives/styles",
+
"@solid-primitives/utils",
+
"solid-js"
+
]
+
},
+
"@solid-primitives/bounds@0.1.3_solid-js@1.9.10__seroval@1.3.2": {
+
"integrity": "sha512-UbiyKMdSPmtijcEDnYLQL3zzaejpwWDAJJ4Gt5P0hgVs6A72piov0GyNw7V2SroH7NZFwxlYS22YmOr8A5xc1Q==",
+
"dependencies": [
+
"@solid-primitives/event-listener",
+
"@solid-primitives/resize-observer",
+
"@solid-primitives/static-store",
+
"@solid-primitives/utils",
+
"solid-js"
+
]
+
},
+
"@solid-primitives/event-listener@2.4.3_solid-js@1.9.10__seroval@1.3.2": {
+
"integrity": "sha512-h4VqkYFv6Gf+L7SQj+Y6puigL/5DIi7x5q07VZET7AWcS+9/G3WfIE9WheniHWJs51OEkRB43w6lDys5YeFceg==",
+
"dependencies": [
+
"@solid-primitives/utils",
+
"solid-js"
+
]
+
},
+
"@solid-primitives/keyboard@1.3.3_solid-js@1.9.10__seroval@1.3.2": {
+
"integrity": "sha512-9dQHTTgLBqyAI7aavtO+HnpTVJgWQA1ghBSrmLtMu1SMxLPDuLfuNr+Tk5udb4AL4Ojg7h9JrKOGEEDqsJXWJA==",
+
"dependencies": [
+
"@solid-primitives/event-listener",
+
"@solid-primitives/rootless",
+
"@solid-primitives/utils",
+
"solid-js"
+
]
+
},
+
"@solid-primitives/keyed@1.5.2_solid-js@1.9.10__seroval@1.3.2": {
+
"integrity": "sha512-BgoEdqPw48URnI+L5sZIHdF4ua4Las1eWEBBPaoSFs42kkhnHue+rwCBPL2Z9ebOyQ75sUhUfOETdJfmv0D6Kg==",
+
"dependencies": [
+
"solid-js"
+
]
+
},
+
"@solid-primitives/map@0.7.2_solid-js@1.9.10__seroval@1.3.2": {
+
"integrity": "sha512-sXK/rS68B4oq3XXNyLrzVhLtT1pnimmMUahd2FqhtYUuyQsCfnW058ptO1s+lWc2k8F/3zQSNVkZ2ifJjlcNbQ==",
+
"dependencies": [
+
"@solid-primitives/trigger",
+
"solid-js"
+
]
+
},
+
"@solid-primitives/media@2.3.3_solid-js@1.9.10__seroval@1.3.2": {
+
"integrity": "sha512-hQ4hLOGvfbugQi5Eu1BFWAIJGIAzztq9x0h02xgBGl2l0Jaa3h7tg6bz5tV1NSuNYVGio4rPoa7zVQQLkkx9dA==",
+
"dependencies": [
+
"@solid-primitives/event-listener",
+
"@solid-primitives/rootless",
+
"@solid-primitives/static-store",
+
"@solid-primitives/utils",
+
"solid-js"
+
]
+
},
+
"@solid-primitives/refs@1.1.2_solid-js@1.9.10__seroval@1.3.2": {
+
"integrity": "sha512-K7tf2thy7L+YJjdqXspXOg5xvNEOH8tgEWsp0+1mQk3obHBRD6hEjYZk7p7FlJphSZImS35je3UfmWuD7MhDfg==",
+
"dependencies": [
+
"@solid-primitives/utils",
+
"solid-js"
+
]
+
},
+
"@solid-primitives/resize-observer@2.1.3_solid-js@1.9.10__seroval@1.3.2": {
+
"integrity": "sha512-zBLje5E06TgOg93S7rGPldmhDnouNGhvfZVKOp+oG2XU8snA+GoCSSCz1M+jpNAg5Ek2EakU5UVQqL152WmdXQ==",
+
"dependencies": [
+
"@solid-primitives/event-listener",
+
"@solid-primitives/rootless",
+
"@solid-primitives/static-store",
+
"@solid-primitives/utils",
+
"solid-js"
+
]
+
},
+
"@solid-primitives/rootless@1.5.2_solid-js@1.9.10__seroval@1.3.2": {
+
"integrity": "sha512-9HULb0QAzL2r47CCad0M+NKFtQ+LrGGNHZfteX/ThdGvKIg2o2GYhBooZubTCd/RTu2l2+Nw4s+dEfiDGvdrrQ==",
+
"dependencies": [
+
"@solid-primitives/utils",
+
"solid-js"
+
]
+
},
+
"@solid-primitives/scheduled@1.5.2_solid-js@1.9.10__seroval@1.3.2": {
+
"integrity": "sha512-/j2igE0xyNaHhj6kMfcUQn5rAVSTLbAX+CDEBm25hSNBmNiHLu2lM7Usj2kJJ5j36D67bE8wR1hBNA8hjtvsQA==",
+
"dependencies": [
+
"solid-js"
+
]
+
},
+
"@solid-primitives/static-store@0.1.2_solid-js@1.9.10__seroval@1.3.2": {
+
"integrity": "sha512-ReK+5O38lJ7fT+L6mUFvUr6igFwHBESZF+2Ug842s7fvlVeBdIVEdTCErygff6w7uR6+jrr7J8jQo+cYrEq4Iw==",
+
"dependencies": [
+
"@solid-primitives/utils",
+
"solid-js"
+
]
+
},
+
"@solid-primitives/styles@0.1.2_solid-js@1.9.10__seroval@1.3.2": {
+
"integrity": "sha512-7iX5K+J5b1PRrbgw3Ki92uvU2LgQ0Kd/QMsrAZxDg5dpUBwMyTijZkA3bbs1ikZsT1oQhS41bTyKbjrXeU0Awg==",
+
"dependencies": [
+
"@solid-primitives/rootless",
+
"@solid-primitives/utils",
+
"solid-js"
+
]
+
},
+
"@solid-primitives/trigger@1.2.2_solid-js@1.9.10__seroval@1.3.2": {
+
"integrity": "sha512-IWoptVc0SWYgmpBPpCMehS5b07+tpFcvw15tOQ3QbXedSYn6KP8zCjPkHNzMxcOvOicTneleeZDP7lqmz+PQ6g==",
+
"dependencies": [
+
"@solid-primitives/utils",
+
"solid-js"
+
]
+
},
+
"@solid-primitives/utils@6.3.2_solid-js@1.9.10__seroval@1.3.2": {
+
"integrity": "sha512-hZ/M/qr25QOCcwDPOHtGjxTD8w2mNyVAYvcfgwzBHq2RwNqHNdDNsMZYap20+ruRwW4A3Cdkczyoz0TSxLCAPQ==",
+
"dependencies": [
+
"solid-js"
+
]
+
},
+
"@standard-schema/spec@1.0.0": {
+
"integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA=="
+
},
+
"@swc/helpers@0.5.17": {
+
"integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==",
+
"dependencies": [
+
"tslib"
+
]
+
},
+
"@ts-morph/common@0.28.1": {
+
"integrity": "sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g==",
+
"dependencies": [
+
"minimatch",
+
"path-browserify",
+
"tinyglobby"
+
]
+
},
+
"@types/babel__core@7.20.5": {
+
"integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
+
"dependencies": [
+
"@babel/parser",
+
"@babel/types",
+
"@types/babel__generator",
+
"@types/babel__template",
+
"@types/babel__traverse"
+
]
+
},
+
"@types/babel__generator@7.27.0": {
+
"integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
+
"dependencies": [
+
"@babel/types"
+
]
+
},
+
"@types/babel__template@7.4.4": {
+
"integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
+
"dependencies": [
+
"@babel/parser",
+
"@babel/types"
+
]
+
},
+
"@types/babel__traverse@7.28.0": {
+
"integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==",
+
"dependencies": [
+
"@babel/types"
+
]
+
},
+
"@types/dom-mediacapture-transform@0.1.11": {
+
"integrity": "sha512-Y2p+nGf1bF2XMttBnsVPHUWzRRZzqUoJAKmiP10b5umnO6DDrWI0BrGDJy1pOHoOULVmGSfFNkQrAlC5dcj6nQ==",
+
"dependencies": [
+
"@types/dom-webcodecs"
+
]
+
},
+
"@types/dom-webcodecs@0.1.13": {
+
"integrity": "sha512-O5hkiFIcjjszPIYyUSyvScyvrBoV3NOEEZx/pMlsu44TKzWNkLVBBxnxJz42in5n3QIolYOcBYFCPZZ0h8SkwQ=="
+
},
+
"@types/estree@1.0.8": {
+
"integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="
+
},
+
"@types/node@17.0.45": {
+
"integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
+
},
+
"@vue/compiler-core@3.5.22": {
+
"integrity": "sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==",
+
"dependencies": [
+
"@babel/parser",
+
"@vue/shared",
+
"entities@4.5.0",
+
"estree-walker",
+
"source-map-js"
+
]
+
},
+
"@vue/compiler-dom@3.5.22": {
+
"integrity": "sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==",
+
"dependencies": [
+
"@vue/compiler-core",
+
"@vue/shared"
+
]
+
},
+
"@vue/compiler-sfc@3.5.22": {
+
"integrity": "sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==",
+
"dependencies": [
+
"@babel/parser",
+
"@vue/compiler-core",
+
"@vue/compiler-dom",
+
"@vue/compiler-ssr",
+
"@vue/shared",
+
"estree-walker",
+
"magic-string",
+
"postcss",
+
"source-map-js"
+
]
+
},
+
"@vue/compiler-ssr@3.5.22": {
+
"integrity": "sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==",
+
"dependencies": [
+
"@vue/compiler-dom",
+
"@vue/shared"
+
]
+
},
+
"@vue/shared@3.5.22": {
+
"integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w=="
+
},
+
"@zag-js/accordion@0.62.1": {
+
"integrity": "sha512-1lMKuD1GbiMuemOHOu+24BSAAG8iTD6l/4zYrQRBCTsxXzHhWqTtLF7okGgmSAs8iyNfOuWefCfaJJ3BJNSh5A==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dom-event",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/accordion@1.27.1": {
+
"integrity": "sha512-c6Ny0M/I4gqhcemD7THNBIKiBXLgJnRLmT1oOSZdPmwWI8Y6HMS/As8DDV3hsyzV/X26dbZiuJtuylAepMN3bQ==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/anatomy@0.62.1": {
+
"integrity": "sha512-1JiPQOyVlO1jHwLTSNJpyfy1R1UYoaVU1mKSUww5+htAuT/1txjs04pr+8vTF/L/UVzNEZZYepB1tTabyb9LYg=="
+
},
+
"@zag-js/anatomy@1.27.1": {
+
"integrity": "sha512-vAgZ9RFm9wSucTMpbV1ZY2soZ6ZHQ9JAMOkLy1EPkWyE7+68VxzDh8rKc3Gq3LAjowgF2yR8tIe05njP9KFRjg=="
+
},
+
"@zag-js/angle-slider@1.27.1": {
+
"integrity": "sha512-92rFGXNZTI4KwQPyxlSWMkaaLPgppK8MSUHR9+fhyULDqlGI3DlBrAB9J+jYQxt44rcBMWxGmbherDIz904d9g==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/rect-utils@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/aria-hidden@0.62.1": {
+
"integrity": "sha512-vVV8bwZhNU+AOOf/USEGV/n9zuTID+spHeC9ZAj29ibWAMmaiq2bx4t1kO4v9eKqKXULUBPPrZQ7CX7oiU616A==",
+
"dependencies": [
+
"@zag-js/dom-query@0.62.1"
+
]
+
},
+
"@zag-js/aria-hidden@1.27.1": {
+
"integrity": "sha512-8ax2IG0jOJnvNMb20INgxa5OS7jvr14dxuc8vgaNR9a0yfWzIuINp/O0FrN+8GNzaJzGMODwqGb0I7AOOIOAbw==",
+
"dependencies": [
+
"@zag-js/dom-query@1.27.1"
+
]
+
},
+
"@zag-js/async-list@1.27.1": {
+
"integrity": "sha512-wJkGMrlsKCsbIyTDreRL7ErAC+vwfV8DgpCx1kiY6pwnG4Lq09NR/Qprpwm+vh0d3kJdV2dJes0+dAwp3TvTtw==",
+
"dependencies": [
+
"@zag-js/core@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/auto-resize@0.62.1": {
+
"integrity": "sha512-nznVkAsZGS+L+VhNO8hPnEyvagNhTezkb64SSPa8E49hJHS2DEN3T5hKCx86tDuiCMd0EdjwUCCQq3pnbzbnCQ==",
+
"dependencies": [
+
"@zag-js/dom-query@0.62.1"
+
]
+
},
+
"@zag-js/auto-resize@1.27.1": {
+
"integrity": "sha512-1hfHePSLs2AcESHUTzZhizn6lCCUeqwsWB4MsJwUzEqpGoW7DOKfOy27mfX50YlU7ttJOjlpYJ+Fp2g5FnzWWA==",
+
"dependencies": [
+
"@zag-js/dom-query@1.27.1"
+
]
+
},
+
"@zag-js/avatar@0.62.1": {
+
"integrity": "sha512-J+IRqJlpL4S9ikCQle/FHj6p8uT8Ee/D88u4k7m/An4Ot1FcrfKqfC3INB5YOI+d8hkIQVtEIAC8Yt/s4OzAMg==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/avatar@1.27.1": {
+
"integrity": "sha512-HTxhl+06CefIQIDnFvEdazCe0To3HDeYx+KrJ7UdBGUgGHVQ/n3/767QdrtIS26h71rTV9q7dMEsmr4ttugn6w==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/bottom-sheet@1.27.1": {
+
"integrity": "sha512-priPNZJd5/c8FhzGDCLEmwRxoKqd1/LyOc+hR+xd1iEDKGrhG4VlE3YKNUicUh1FK6zGYysjPTA4s3rRWL1CTg==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/aria-hidden@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dismissable@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/focus-trap",
+
"@zag-js/remove-scroll@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/carousel@0.62.1": {
+
"integrity": "sha512-0YQ2jJjzaS1zFLVnPBslVKI8/fY2Z6aOrcJbBjxozG27iSS6zEqmbsz3OOtcYJRlB8jLboZutpMBs3PGh5zg5Q==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/carousel@1.27.1": {
+
"integrity": "sha512-3lU5KksoEsuT6sR8GZ85K2oxXRQojbK429CsuDolD1d6zoyUC81ORPxNmka5qCFlgO981NVFdrNfWX1ftlSQSQ==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/scroll-snap",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/checkbox@0.62.1": {
+
"integrity": "sha512-xiubQLhRXedlZe4Vc6zxaDFWLSpRdGEG0jTrF3OXovYZLN7bmq0iXiYcWqsLa012+2dYN9w5B1zfQQlzf4sk2w==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dom-event",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/form-utils",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/checkbox@1.27.1": {
+
"integrity": "sha512-aRyAWI1bH2IwdaCOV6YRtCBdHoCyRo9xd1kAnxSn1/Lb+vVQgs2MJrwOUcd7aNLRxpqpeKbUKIgqqgkQQkLmZw==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/focus-visible",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/clipboard@0.62.1": {
+
"integrity": "sha512-gEhCGLkAlrgNWkd7ZqF4p4yNKsR54+0YQPevEv7iX9oio8T/F8OWaDmDjA4NsXxqRe6hr5KLJbVp8dYRop30TQ==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/clipboard@1.27.1": {
+
"integrity": "sha512-Zx9MnvFb5Dx/ajtDJy0tnH+H7/W7Bgu4P5bXiCs+v0qCcWwd/CpW9tTHD6IiF7TBr/FqSWT8mAruPf4rrjIqAw==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/collapsible@0.62.1": {
+
"integrity": "sha512-M4hsuqf6dVra6RvKaxQjgQjZ+iYj3XH84w6QOnt/SXbJauQoE6nfy77RI/A8O2pPuP6uLq0h2E9Eo3ftcbGBoQ==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/collapsible@1.27.1": {
+
"integrity": "sha512-y+jw3N9BiIRaCtUFgpIC+Da1Fxn+DgwXnPdt2Ufk7xwDinRcOfD6ueGY+jBEFbZvVlOYzf+wU3rCopeKFNIh2Q==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/collection@0.62.1": {
+
"integrity": "sha512-Qg3OvGCvcoeV4u8IcQmNCu4dChRttVyQ9DF8Ab0qlyrjRDF+w8vMAcNcgNqn10/xX4A7B743cz023LooVsW6VA==",
+
"dependencies": [
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/collection@1.27.1": {
+
"integrity": "sha512-zcf2GIpsACn0RUpNJSpRmbWOLbuiqMkRgZP4+Ub2Wy6lsYKi3Fou2A9o6Sm6HuNYMLJYRvos0oEEktHNJsLNyw==",
+
"dependencies": [
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/color-picker@0.62.1": {
+
"integrity": "sha512-GLeADGcoMLcVS+UM6rn/c1BmBgSB2uTc5AWBkuKoH7TktsKo6+T/v3/QZIU7/b69qBAp3/vWZti99Flw42IDdw==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/color-utils@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dismissable@0.62.1",
+
"@zag-js/dom-event",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/form-utils",
+
"@zag-js/popper@0.62.1",
+
"@zag-js/text-selection",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/color-picker@1.27.1": {
+
"integrity": "sha512-aF/fPHQ4p6YxiMmCGZ7BB9BjGltY3X59vckLv4PqXimJQg+H9L4RBXzFQzzVZI8h8s/ycg2mwHHJfnKyTklvhw==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/color-utils@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dismissable@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/popper@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/color-utils@0.62.1": {
+
"integrity": "sha512-uXsEA0xsI4NT7YFwWZldy7LXsk32Ta+41MrckhzbSA766v+bW4sFDUYmJxwLkN4nl1QzlLAlGghhauXmW9Fs8g==",
+
"dependencies": [
+
"@zag-js/numeric-range"
+
]
+
},
+
"@zag-js/color-utils@1.27.1": {
+
"integrity": "sha512-fiwHh1tDTwNv3ME5zT4wgr9wcrqsfpfcUj+gSfne0MQWEdKseObXrrQwdGjf97udEsr0RTagseDPXrKG78U24g==",
+
"dependencies": [
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/combobox@0.62.1": {
+
"integrity": "sha512-EovqyFqD61YmYJYc42qKH2OE7GxMm3gamWLU/lvZe/3eyZt6TsxFe2xeP7WSsvq2v90myMajAnUb0DOpvYaCKw==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/aria-hidden@0.62.1",
+
"@zag-js/collection@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dismissable@0.62.1",
+
"@zag-js/dom-event",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/popper@0.62.1",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/combobox@1.27.1": {
+
"integrity": "sha512-Q+fC5SQgsLNdZoaaG1TbSZbvgm5H/tjaAbOull2zyrQzoe20WLCTJgHCWmVm1X0u5mEKXVf8xISzys8a+LJxwg==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/aria-hidden@1.27.1",
+
"@zag-js/collection@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dismissable@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/popper@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/core@0.62.1": {
+
"integrity": "sha512-ZSjqnV5vcGDassjmZ/lxWbG244A0i+IHImVZ/a4/0JkjkH126ly+At4FC+HI571pNKiNlrqYmGzRRSBMqm37yQ==",
+
"dependencies": [
+
"@zag-js/store@0.62.1",
+
"klona"
+
]
+
},
+
"@zag-js/core@1.27.1": {
+
"integrity": "sha512-C35SJO7O5fyzgk+mhTSRWiApz0QP2MngT/qgCrSEDHss0ESd1scQylpDK8LrKDGHyYObJLLJhOAoeHWKALBTPA==",
+
"dependencies": [
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/date-picker@0.62.1_@internationalized+date@3.5.5": {
+
"integrity": "sha512-Wl6yzMtrTy7XgDFbYJaRO8M5dkxLPBvAo3ilDvFBicbJViJCZ9pg1AJYh+xGaK/gfAd7O9wBdYJdHxfESlmlDg==",
+
"dependencies": [
+
"@internationalized/date@3.5.5",
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/date-utils@0.62.1_@internationalized+date@3.5.5",
+
"@zag-js/dismissable@0.62.1",
+
"@zag-js/dom-event",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/form-utils",
+
"@zag-js/live-region@0.62.1",
+
"@zag-js/popper@0.62.1",
+
"@zag-js/text-selection",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/date-picker@1.27.1_@internationalized+date@3.10.0": {
+
"integrity": "sha512-Hf3C6p+rOa7kamvRCaa4iJZZhAQoT6CMnp7V1jy57ICwpiXMhZ78HlzVZBKWmNuZlzibwzx6okfodlidMp+Mhg==",
+
"dependencies": [
+
"@internationalized/date@3.10.0",
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/date-utils@1.27.1_@internationalized+date@3.10.0",
+
"@zag-js/dismissable@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/live-region@1.27.1",
+
"@zag-js/popper@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/date-utils@0.62.1_@internationalized+date@3.10.0": {
+
"integrity": "sha512-YBqT5YRtHOCDS2IcCZtrq7BfzBkU5c+Sc2pVTncf06/3jxjE6l6YbBncMPu5a3uWKjNld1wOTFszhSoPKZfrJA==",
+
"dependencies": [
+
"@internationalized/date@3.10.0"
+
]
+
},
+
"@zag-js/date-utils@0.62.1_@internationalized+date@3.5.5": {
+
"integrity": "sha512-YBqT5YRtHOCDS2IcCZtrq7BfzBkU5c+Sc2pVTncf06/3jxjE6l6YbBncMPu5a3uWKjNld1wOTFszhSoPKZfrJA==",
+
"dependencies": [
+
"@internationalized/date@3.5.5"
+
]
+
},
+
"@zag-js/date-utils@1.27.1_@internationalized+date@3.10.0": {
+
"integrity": "sha512-0s5qZAv+ZDRtg1fv848yC/2lt8dqNVN3DpW+JmOFioR9Cp2y+aBd+Ae5Y5Zh13kPcRvwDNVJ+kaeBOTJ9756Wg==",
+
"dependencies": [
+
"@internationalized/date@3.10.0"
+
]
+
},
+
"@zag-js/dialog@0.62.1": {
+
"integrity": "sha512-7YRvWZ9UMUjFz0q537/uaTMBljLimWISfVHkUSa2ngbXB8LPYYbqYv5Vio2rvRFqy3nJR3HTO4cGZJGDjO655g==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/aria-hidden@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dismissable@0.62.1",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/remove-scroll@0.62.1",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1",
+
"focus-trap"
+
]
+
},
+
"@zag-js/dialog@1.27.1": {
+
"integrity": "sha512-FHRSqZaiFu60NMuNE+jdXFDgkapVBtaJG+ts4CHn9wKnyQYmao41Nin5ZEQI8DaLgzxkBAgwEwg33FQ5L+99mg==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/aria-hidden@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dismissable@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/focus-trap",
+
"@zag-js/remove-scroll@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/dismissable@0.62.1": {
+
"integrity": "sha512-muGTBISpjQEWLCrsYa9wAFaGXlVxYtyMaDgpcPpQdQPwZF86b445y4d8h9FjwkESdJ6Zcdjn21pu5CWD28T3uQ==",
+
"dependencies": [
+
"@zag-js/dom-event",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/interact-outside@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/dismissable@1.27.1": {
+
"integrity": "sha512-EZ9xq47m50scGV8JHYTAIL1DjnoFYChBC68cE9XNsqZO2vOINdYAfzsH73otx/CQ6RkhSk7eymP4fIzZVtRTVw==",
+
"dependencies": [
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/interact-outside@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/dom-event@0.62.1": {
+
"integrity": "sha512-/+okVW69Xdoot7dutJVMz0iciwWM6DvAeLWr7LB5DZsUQMu93oqV/8BE2JArDxEcg5C208HNThGStcWlTaddgA==",
+
"dependencies": [
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/text-selection",
+
"@zag-js/types@0.62.1"
+
]
+
},
+
"@zag-js/dom-query@0.62.1": {
+
"integrity": "sha512-sI/urNd3QX/WI7Sii+X1Z/OTWNisn7EaW3T0X9Rbn41u79DC4KeUnP+wpIq1igSJNH2zQWIWBLJ1OGhAjuSl5g=="
+
},
+
"@zag-js/dom-query@1.27.1": {
+
"integrity": "sha512-+oyhPQ6of1zCCK8iTaxxQc2FMFEJz1mr+1571vaSRdoxG31GhNkq/QDfUvQQnRR+2HV9yNiFk4hcjCDGqdXDTQ==",
+
"dependencies": [
+
"@zag-js/types@1.27.1"
+
]
+
},
+
"@zag-js/editable@0.62.1": {
+
"integrity": "sha512-BkPLV8T9ixdhz3IxvseV24a1pBNmYhR1np+JUKap0C8thtFbDoF361haEQjCqTCfHDv+j5l1rtq/+H/TF3eEIg==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dom-event",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/form-utils",
+
"@zag-js/interact-outside@0.62.1",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/editable@1.27.1": {
+
"integrity": "sha512-JnmrMLijCpIdYmR3PHFFS5oiQkuYsqoZPy9Rt5N6nUhy96IhznaDWghd2mCdxowwSRVySiplJ6qeR+CSgRY5og==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/interact-outside@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/element-rect@0.62.1": {
+
"integrity": "sha512-SefRp1IeiENoUkl7yxGzUIdxtQqgKlI+G1qlgx9MZgchH2VZCpqi+EuZgLEKzz7REMabOYqbgs6EEIxGIyNueg=="
+
},
+
"@zag-js/element-size@0.62.1": {
+
"integrity": "sha512-QCtVeIJ611hJPorKEkdfrWWcMohadplZoW8xQW/2PLSmKUhTNLfHsZLyeoYKyj5Jk4X8OAN4onnMVETFw232EA=="
+
},
+
"@zag-js/file-upload@0.62.1": {
+
"integrity": "sha512-Wh33acYMJLNRIV2y0GdSZqoN3aX/t/uzIBWh3rVsN7tpjDYWXLYIsXQttkGLFf0sgICK+3PVD+LLaIpiGDh4+Q==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/file-utils@0.62.1",
+
"@zag-js/i18n-utils@0.62.1",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/file-upload@1.27.1": {
+
"integrity": "sha512-xChLU5NGnHn/G+L4GDPkCOa8XWY/gHeBbvQAaHItFKTpVmjWwM8uZ6X/utcWuZmdmUU8j/YfWYmCGdyux58I9Q==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/file-utils@1.27.1",
+
"@zag-js/i18n-utils@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/file-utils@0.62.1": {
+
"integrity": "sha512-p363S2pqz29wf1shcSfoY2GI9wWrJkKamNiwuehqoYFh2b8isrcWFVL3VYxm937N1/m5+rtMATQbn0a9j9sggA==",
+
"dependencies": [
+
"@zag-js/i18n-utils@0.62.1"
+
]
+
},
+
"@zag-js/file-utils@1.27.1": {
+
"integrity": "sha512-Ov5gMd7qUGdWydfjmtq/sm+PEl0LdJr7G4VuLZz3b4pJYVDBMv3pEHRXJj5x+b4mgm5U82vncE/itg/1Z08wKA==",
+
"dependencies": [
+
"@zag-js/i18n-utils@1.27.1"
+
]
+
},
+
"@zag-js/floating-panel@1.27.1": {
+
"integrity": "sha512-BcTZ4oJj+V+kAhbXXRWS68ivbiVIT3Q6NhcpZ8M4Hv4x7tpsfxC+J9/qsTX4/LF1LYGZZ0v7QidaWa7t4gDGCA==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/popper@1.27.1",
+
"@zag-js/rect-utils@1.27.1",
+
"@zag-js/store@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/focus-trap@1.27.1": {
+
"integrity": "sha512-dHjN8Cxx2q7GyxfLhx6/FZgHRwTz4JnKT0bQxP3PjWsBQM1bVbFIJCL3lRy4NYQ1rJ1DA0LSbTecqqlKv4DgUw==",
+
"dependencies": [
+
"@zag-js/dom-query@1.27.1"
+
]
+
},
+
"@zag-js/focus-visible@1.27.1": {
+
"integrity": "sha512-KGQAoiEejkEi0NMS33Q8mc7kedB0Y4g8WyKNaVlMgnqCEpi39cHkszgyZEvX1SYWfv4+RezQGfYOKo0Y6ze4uQ==",
+
"dependencies": [
+
"@zag-js/dom-query@1.27.1"
+
]
+
},
+
"@zag-js/form-utils@0.62.1": {
+
"integrity": "sha512-GJWRRtEpro8TNEUuEWMhIOWmVFXqiHNTTrrRLxijxUIWbsPrPdPiKL7qwBAESYoZQCmN0hU99S0w2Xmm7Q05Zg=="
+
},
+
"@zag-js/highlight-word@1.27.1": {
+
"integrity": "sha512-4lmudpn2VfhIlDqfXzUOYqTsUMIXSZRMEeUbyhdidGGXM/r5rUXoYtHQ4wuIF48CUMuAzoAk2yn5hJm1csi8Dw=="
+
},
+
"@zag-js/hover-card@0.62.1": {
+
"integrity": "sha512-ryiNHQmmHpiDiZ5nuk9nvGUgnT017q8hYf+wLSI5OJ+klHPjrHObb7I7v/fUmKzWNtIOhaL0uw9afzjRt3bLEw==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dismissable@0.62.1",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/popper@0.62.1",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/hover-card@1.27.1": {
+
"integrity": "sha512-VolB6d8Yu8wjLi9CdGtd3w3qKtop0lQebcA9M12sOs6E+DmrmdCZfgIMMtiUrVch7HTSPa5kXlI+/6svvS6UQA==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dismissable@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/popper@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/i18n-utils@0.62.1": {
+
"integrity": "sha512-ipzx0W6VK5x+w/PnUrN8z5SULJuLqvdzsPVBJ2iGHrMcTPC/y9JDt82nJV9fUYmG898pOZUx7vysfLLPNEAFTQ==",
+
"dependencies": [
+
"@zag-js/dom-query@0.62.1"
+
]
+
},
+
"@zag-js/i18n-utils@1.27.1": {
+
"integrity": "sha512-dNP7ZMoKxCD8KOc3RPqBpj7mEr5qb2qix8o6AQHw2QMDdgMDj0E9y5ZaNHIzkpMyYmvURY5I+pwWfFricv/rHg==",
+
"dependencies": [
+
"@zag-js/dom-query@1.27.1"
+
]
+
},
+
"@zag-js/image-cropper@1.27.1": {
+
"integrity": "sha512-fzAlMZwKQVVxaHcxbGmwOY05fFdooxkAYNjuzansQo5nHWQIVVVe7/Ou6GzU7ggc/Ws+a/TY2dp3dZbzrSfc5g==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/interact-outside@0.62.1": {
+
"integrity": "sha512-V5N+kr2Uv97HWYL0U5ZVS//NMQu87XGLtI7Ae5EtHrdAEKxO2NpPwf50Gzza4zc1VEVYYFqobTlkNQ3hrrL6VQ==",
+
"dependencies": [
+
"@zag-js/dom-event",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/interact-outside@1.27.1": {
+
"integrity": "sha512-MfZobJhDWSiS9SzF35FJd/R+/ksvwzgjXl51p1sjaqVQoTIfKAe/pK8Hcky7NWX9NsVx77x/YidJpb/Bwf3f6g==",
+
"dependencies": [
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/json-tree-utils@1.27.1": {
+
"integrity": "sha512-ugiV6V4BqKufZr2XRdZB3x4x/uxUbmfG0viMAkCYJKD5wWaMukPqUAxytJ5ybAIfnDDvRRjRzaZX+erVu5rzXA=="
+
},
+
"@zag-js/listbox@1.27.1": {
+
"integrity": "sha512-qZhmdD4+Gjof21i5C0sthNz+fOylrFnKJR7HxROWOeD2vHuQi4gud5PdZubfm54p7w8huPU8RH+Aw7LsVpwQNA==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/collection@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/focus-visible",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/live-region@0.62.1": {
+
"integrity": "sha512-Giu7d5UWc2Sqb3/T0tSzqSwxJ4mVrNN+MTu06J7EaD4khK5RgX4GRpQ9rpwOS/GJT+8nc6YBhWTi7tqKN/+iHQ=="
+
},
+
"@zag-js/live-region@1.27.1": {
+
"integrity": "sha512-T5cMSazmWC9AYKHinJQPZSc2bnokF8zK8ly4NGApv6ExM6Mf5wQoH6sJIcv7dhRFfPUFVRndVdKHnWxZjTb8Og=="
+
},
+
"@zag-js/marquee@1.27.1": {
+
"integrity": "sha512-d0+7SXxsuTdHf6JD4uQFUfKWpEhsi5wEb4TCb6bRDdgkN+iJq1d/lsGx1tTV+/95rpaHkAkbaVQB07IUQnmDiQ==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/menu@0.62.1": {
+
"integrity": "sha512-l/PartHj6//NMlENYNBmUmeYG9K0SbjbnnIudv+rK+oyrUoX/MDCJ7bdy7ZMYxWTR127WdZlLHBxsgMe86lBqQ==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dismissable@0.62.1",
+
"@zag-js/dom-event",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/popper@0.62.1",
+
"@zag-js/rect-utils@0.62.1",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/menu@1.27.1": {
+
"integrity": "sha512-e4U7zbfOF6fXphJvP2xaIKTmnKR75pp6gYGUqJUVQo0VIqQh2Ax5VcPq6JcUQE8UWGRQxwuMn9tzEpXGDWm6QA==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dismissable@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/popper@1.27.1",
+
"@zag-js/rect-utils@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/number-input@0.62.1": {
+
"integrity": "sha512-THizFB4Qwq4erMk6mI82voIo/PbbrAOSQXyPF8NPyGupSzqYntS1XPEdyqFH677PhHweelxQnvtZEm5alm1HLw==",
+
"dependencies": [
+
"@internationalized/number@3.5.3",
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dom-event",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/form-utils",
+
"@zag-js/number-utils",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/number-input@1.27.1": {
+
"integrity": "sha512-oK3cc11apnQzWT6dfAbevrWm0LCKNXDkIudlI2U9FZ8JIsTLO8K4KeGSFGNPA3d6KuNLrhDWC4GsAe+fGdTL6Q==",
+
"dependencies": [
+
"@internationalized/number@3.6.5",
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/number-utils@0.62.1": {
+
"integrity": "sha512-ktnGSYKKLG9No14ivlboEzq4+jiOIWU+8yeoRrZmfdCG58g4s9JF0lBDRf3ts9vhUdofJ+vUFMPqkk2eCWyQlA=="
+
},
+
"@zag-js/numeric-range@0.62.1": {
+
"integrity": "sha512-R4/II5MvS+eJ880srPuIlexqRH7kVsGomcsDlB5yyhHsradm7OJfC5L6osvKj1DNAitfFh8901BZFaWmQe8O1w=="
+
},
+
"@zag-js/pagination@0.62.1": {
+
"integrity": "sha512-fyDXNnAGyRsQEugvNR1kfEO8hGeesOV6l2rEACdvNN6G9Cqktqd52aaWVIf805G3Ig72igW2SybI9md/rDflzQ==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/pagination@1.27.1": {
+
"integrity": "sha512-tg23cP07weOtjNeEqOqS3Ilic3ikaIYQ7s9wi/JjvKUPMS+bi/LZRM12cfLD1tIwSUYjjLkr/reTnrYU3s2lZQ==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/password-input@1.27.1": {
+
"integrity": "sha512-L6fodHRVxud5aIBh7v0dayOzrK11WaTO6CBGNC/HELf2xvFR4bs7vOPJ/NbKh1UHMZDe3s/nbwxVHpM//JpLcQ==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/pin-input@0.62.1": {
+
"integrity": "sha512-CTAOyQCLaNSWH29bhc4XruEkvnYFJN1QF/x5axtHV+cir05zcdB3L7Sna4D6nUBSwd0tOGnUmPlviyP7zkpgBA==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dom-event",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/form-utils",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/pin-input@1.27.1": {
+
"integrity": "sha512-FEJ+hk6oO23ofSaS1DqnSLS8AMkJ4Aw1N1Ny+crwmLCr+29cuNtsgZos8WxRhKguZKW4AqIjgrtIAPJEgDeHFw==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/popover@0.62.1": {
+
"integrity": "sha512-cT6okb5Yq69YWx6G1vonNEnEg4MlBXRbXLflLBqOP1PTwhk6RwlndXGV2uCdlnR0mUJa/RKldzdUcwOQesJaag==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/aria-hidden@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dismissable@0.62.1",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/popper@0.62.1",
+
"@zag-js/remove-scroll@0.62.1",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1",
+
"focus-trap"
+
]
+
},
+
"@zag-js/popover@1.27.1": {
+
"integrity": "sha512-HvzogYsWhA2eVavSDJKsA98jzU95r/bSc6SsutnMp32afqf6eo2cZDOMm29tjzP2RPmZFYMwXVrQ4VZB4mIhXw==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/aria-hidden@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dismissable@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/focus-trap",
+
"@zag-js/popper@1.27.1",
+
"@zag-js/remove-scroll@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/popper@0.62.1": {
+
"integrity": "sha512-tyLEdYIsv3cgnWCWzPPv9f72hzmQDQcObDIczIZt+OQr89qgyhGHt5jR1f0Qxsz9zZlSPsEftccyXRQYInQtxQ==",
+
"dependencies": [
+
"@floating-ui/dom@1.6.8",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/popper@1.27.1": {
+
"integrity": "sha512-ac9YpcIvhd9+QDhm85E0BzPmjTuAWc/FRQOhG/EWKSUDvFZGNAcXLSVS6zxIWPEdY2vDG3Ri9jpCNv89bzzpoQ==",
+
"dependencies": [
+
"@floating-ui/dom@1.7.4",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/presence@0.62.1": {
+
"integrity": "sha512-qjnr1WpW5yetRp2j2V0ocRvr6X6TuWNxjL2DyJAusodcsSElF2V0UuFOLT/xIZA8BVIbgcyCvcPB01PHugC5Ww==",
+
"dependencies": [
+
"@zag-js/core@0.62.1",
+
"@zag-js/types@0.62.1"
+
]
+
},
+
"@zag-js/presence@1.27.1": {
+
"integrity": "sha512-8riBzIC8XWiGdNWoUex6GnRo4/ykkeqcuiPCP6Lm67Kdi9hTCOuu3v8BdHgRkb4LxMg1LW7v+d7maCm5My9PMA==",
+
"dependencies": [
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1"
+
]
+
},
+
"@zag-js/progress@0.62.1": {
+
"integrity": "sha512-7FyeP/wCiJ2dao1y/4RzhrLeIse305YtRMTDaVE5EnOJK3nit2Rrl+z8kGx5aqrGQcGsLH/rh5QYFp689Nx57Q==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/progress@1.27.1": {
+
"integrity": "sha512-mBat/fn7jhuZXg+UBZMAQv3uL9W/HoDcrzm606PNycD+QyHFe8J1kpzHr8hFUFtCTzSDzmd5kf9zP0hieVPQTQ==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/qr-code@0.62.1": {
+
"integrity": "sha512-648qXQduIqq4CZWN07D1UOcczZrdp3UjBSHFEi4PQHTz1Vg08pH0BIZDqiqpupG9niYJEB/GPLGofRQQYoIoDw==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1",
+
"proxy-memoize",
+
"uqr"
+
]
+
},
+
"@zag-js/qr-code@1.27.1": {
+
"integrity": "sha512-o3cGKXVf7Jea4lDPs5hcA6+8D811d6rt+V4L9mf5OKWdbOi4meGpy1lNNn7szvmtvTOkQcDd6ozRprk/jI1LJA==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1",
+
"proxy-memoize",
+
"uqr"
+
]
+
},
+
"@zag-js/radio-group@0.62.1": {
+
"integrity": "sha512-VVGTUkHgD27vBTYeP7hPYi+eDRXkq7xtlv6Ml062t3gcTWBhc/2eaI6iZ7awlxTl9052sflzbawrrDysPREuAQ==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/element-rect",
+
"@zag-js/form-utils",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/radio-group@1.27.1": {
+
"integrity": "sha512-P1IHUrXv9iMHwLNdcIRoW0DQGfJ2DoMREWOohy8Gdekoo4/+xOGbr9qi9++QN//HMLsbB1cnD7+7WqqEZU1Hkw==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/focus-visible",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/rating-group@0.62.1": {
+
"integrity": "sha512-gXvHofr3gfZcaMh7Y3FU+wyj7ge1R0BgsuPJWFUShlAlxjnnE7e3AqjSGlzuvpkWMkc6KKDyKRJlMVWLCv94OA==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dom-event",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/form-utils",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/rating-group@1.27.1": {
+
"integrity": "sha512-bjsWkUwMtlm0Jsajz4j14ULFEeYtGTShqPZvFuVDrEX8xSuZXujfxOdY0dphc0EreyjL1YjvYboAXvYsVbOaVw==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/rect-utils@0.62.1": {
+
"integrity": "sha512-6w56LuRD382Oa2FXi4AfKQqgtUPS/nc/mZzXiaqKz9b5aFA1CXtmEwNC2GaiXhkqJp5DyxHwujDfQP1WXACnRQ=="
+
},
+
"@zag-js/rect-utils@1.27.1": {
+
"integrity": "sha512-BYq+dVrNt+H4hX7wkS3j9ZK+BNKrb1f9vm52D5+TnNs61coidfY5zmhOqQjkgSVBWblDqYWrLskNCymW7t5MVA=="
+
},
+
"@zag-js/remove-scroll@0.62.1": {
+
"integrity": "sha512-7xpX6HUrOEq/TNLIWojYnQf7kj20bk8ueOKpu7cTZmoN0LSL6cS09uil+NOqb+SzZsiRmQKvzd3fQBNwbdab5Q==",
+
"dependencies": [
+
"@zag-js/dom-query@0.62.1"
+
]
+
},
+
"@zag-js/remove-scroll@1.27.1": {
+
"integrity": "sha512-MOnQXzifbeEuW/XgDMbb76wbWdaq++DEwE6CLmMQZhAR4rJUNIYVhcOFVqBWwMcMIJkvK8ROZucTPxOPmTHz1Q==",
+
"dependencies": [
+
"@zag-js/dom-query@1.27.1"
+
]
+
},
+
"@zag-js/scroll-area@1.27.1": {
+
"integrity": "sha512-lfAsmdiKv6racE+rlwUJkgqjIOjjCyJcWNkM4JKZzKCI6jlqKBUOhmNjJcqiIYtGXFapaslXJrcIOTxW7nZoEg==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/scroll-snap@1.27.1": {
+
"integrity": "sha512-XTwox/aHb0J51v0ycObadvDjeA26bZwadAm+5pr1Eic1Tf8gUcMLpwEHBqlp3vay58UzrPWhqCEBKsgYwYgNEA==",
+
"dependencies": [
+
"@zag-js/dom-query@1.27.1"
+
]
+
},
+
"@zag-js/select@0.62.1": {
+
"integrity": "sha512-dgU65imBSeB8+QfHkN68j7Xqd/d6wsF42itJ0AeRSdgnCHgTWdN9rRCK5EDbNkJue51oMkdsnJ7XG1k+oCgiAg==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/collection@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dismissable@0.62.1",
+
"@zag-js/dom-event",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/form-utils",
+
"@zag-js/popper@0.62.1",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/select@1.27.1": {
+
"integrity": "sha512-yZUid+GkASbxsuXeCxn2nK7DoZOBG3fmCR/wJSlBQu/kYkXUPcy1MmrZHakmJNFr6MvrP8RVYV7O3Jr1mPBgaA==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/collection@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dismissable@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/popper@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/signature-pad@0.62.1": {
+
"integrity": "sha512-hWZSWT9J9V1kbImkj8qXHCqS0TYm7nms9oAhcQ2QNIiGO38wqW8Yswos8sqAj8VtzHxkSMIeL1by7Zgy3Xjq9g==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dom-event",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1",
+
"perfect-freehand"
+
]
+
},
+
"@zag-js/signature-pad@1.27.1": {
+
"integrity": "sha512-NuyKmZwfjBZ+PJb04xQjYf9wTkBMdU9XTS/4cpEWAOK0DoErq4kiqrV/yExPB7V7KtIEIkC4Xd+WgMOD6K1vBQ==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1",
+
"perfect-freehand"
+
]
+
},
+
"@zag-js/slider@0.62.1": {
+
"integrity": "sha512-v5rgPJF3fh7bBPu0wzEGpN4EcXpK5cSw4OAwxatmbtkYsg2Udwv6WL26CB5Q2zVwYIR6R532b/bjFqicfVs+SA==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dom-event",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/element-size",
+
"@zag-js/form-utils",
+
"@zag-js/numeric-range",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/slider@1.27.1": {
+
"integrity": "sha512-p6zyMLU6cBtubk5673q2wk9JqCHf0l8my7nWY16KWqLWd68IFBSp7wrOyTYa0ifZ9CvmZZSjdL/w2TFJ4SHVKQ==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/solid@1.27.1_solid-js@1.9.10__seroval@1.3.2": {
+
"integrity": "sha512-3r3VOWDjW3g7wkxA0AivdM3aiurwrXywwbII6FjHaIL4SrEe7OvAtE7hKHSPlKdCRS9Z0ZVt6C/uKYm/YFo9+Q==",
+
"dependencies": [
+
"@solid-primitives/keyed",
+
"@zag-js/core@1.27.1",
+
"@zag-js/store@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1",
+
"solid-js"
+
]
+
},
+
"@zag-js/splitter@0.62.1": {
+
"integrity": "sha512-Ni93ZaprnbctAsbuot8sEw9DDfNMgkelnd5xQfAiwpgjwUgnY8733LRbWydC5OUPoJ/cCs3XiNKa0CHwclcq6Q==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dom-event",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/number-utils",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/splitter@1.27.1": {
+
"integrity": "sha512-y7xKYI2d6LxHiWJ/RFl96s+PBr7gEs6J7xLiJ0hP+tqyFDeJ3215slIAuXA7Zkk8OLLcgj6f4QDEQ3xXwZl9EA==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/steps@1.27.1": {
+
"integrity": "sha512-RciH9pg3Li3u1BFZlDjFptlrqmovy3BD8lMjcCzcn3Pr+v8AQQb1ZQku40VZ6x+ZBz7ZtIp+EZkBwY93I3YEBA==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/store@0.62.1": {
+
"integrity": "sha512-0xkz7b/Rs9cHeI5CB3UH4yMlVzys3l+IsJU3KRWZwqWohDjTEqRyzcuFD6AH28WAcJPjIgOQYnRYzYSoMGZtDQ==",
+
"dependencies": [
+
"proxy-compare@3.0.0"
+
]
+
},
+
"@zag-js/store@1.27.1": {
+
"integrity": "sha512-oK8NX9gvwi9NzjPo6oujksSli+hgh7m5ZDRM4SY7T3bBaipz7GsNZuXW+i6DMvDNObtTHbVzQ5ZaqlTQUuos0A==",
+
"dependencies": [
+
"proxy-compare@3.0.1"
+
]
+
},
+
"@zag-js/switch@0.62.1": {
+
"integrity": "sha512-uh0yy3NuZqHF+jPVZ2oMcAtPx32eTnBebiROBGBDgj1A5yZBirfQm8j/vZLSILhDq9TdktHS9/gITJ7TvgV4cQ==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dom-event",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/form-utils",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/switch@1.27.1": {
+
"integrity": "sha512-IuYacFHlQsxkFCU8ABGjwhtvWARexAYS/BMQkD5W8s0cwNHR3uOLPGjrJhSkJqvx3ENpSTRRKqTwawXVeFg2BQ==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/focus-visible",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/tabs@0.62.1": {
+
"integrity": "sha512-BpY6oA2nmZLpYu8nQrpi+zTF4txTiMYIMB31CmbFmbJ3hMVkEqk8sgNzNQY3LrzkkSemDRBHxPZ5H+YKaQrEdg==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dom-event",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/element-rect",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/tabs@1.27.1": {
+
"integrity": "sha512-jI+frE9z+wVfoqYA/7Xxr+SWix3OmjpfA7+F8GK1XPdN8atD/uYRgE7CbqwPc24fhIO/xkl1sNKRv83HaCMjvw==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/tags-input@0.62.1": {
+
"integrity": "sha512-8gJ4ckQQ0BB3oUGgIEGkmB6wIKSf7xx0q6e3tqTbfZnPhmWP4hpli38XAOYjsBQyNXmQW89H/Rp8/8W1A/Vpow==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/auto-resize@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dom-event",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/form-utils",
+
"@zag-js/interact-outside@0.62.1",
+
"@zag-js/live-region@0.62.1",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/tags-input@1.27.1": {
+
"integrity": "sha512-+XUOwKFWfGwmJpl3hWK8kHq5IeuZUZaR1FgNzbO029ll3p5unBOGzEL51oCH1dpeuMY/FyXEssNLrvVgId6E3Q==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/auto-resize@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/interact-outside@1.27.1",
+
"@zag-js/live-region@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/text-selection@0.62.1": {
+
"integrity": "sha512-0b049CnWN/Nyp/F/nbeU6G8BI/fzwlSQTTDWK81yRFADDFTZ2mWpVAWJF/fY0rKjsn4ucDykCS7GXMIo5rYILQ==",
+
"dependencies": [
+
"@zag-js/dom-query@0.62.1"
+
]
+
},
+
"@zag-js/time-picker@0.62.1": {
+
"integrity": "sha512-THNASHp9Fu5f4/LC3t3qJfsYD6FqjhbP7HrjIDDFOcdNGRzOTfbEpKF3JtJgmM6F+/fuQKhe6FUbcluMd9zo8Q==",
+
"dependencies": [
+
"@internationalized/date@3.5.5",
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dismissable@0.62.1",
+
"@zag-js/dom-event",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/popper@0.62.1",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/timer@1.27.1": {
+
"integrity": "sha512-1t1APVDBoE9GcjKQHjUvfR6nlhPA6bm6JYVQj1PS04i+120fvfpcFSWAbgay2dmGcpdpFrO5W0a5vObYFQ6aXg==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/toast@0.62.1": {
+
"integrity": "sha512-Kb+OiFx7KUG0fAExIL06xWEfhxeMRJACvP6q4B4FNuFX+6N06RbV/PZtLbPbffOodd7VhSk1W37T7t6Np32mvg==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dismissable@0.62.1",
+
"@zag-js/dom-event",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/toast@1.27.1": {
+
"integrity": "sha512-XfVxYlMkV8K1inmSwF+VKXkEPG/fDZcpjlj2PfbrWQu2PSD5mrJakBi1FzKfcCybp/OOD0V9Nfki1AFkhKKEwg==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dismissable@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/toggle-group@0.62.1": {
+
"integrity": "sha512-h7jQtWJt11uws6IYBd3kQzOyOemtZ5CqR7lt4XZdni3J1EtymKRJNha2JIukIETZS9/0VU1fPcuDkQeCXcGHgQ==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dom-event",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/toggle-group@1.27.1": {
+
"integrity": "sha512-b6KOd9ZKkWIl1vAmNIkeKrxE/ikKS5aGoseNbyFrcSPW43DwFZD24EfVIQ72/afzdTttRga0VbY1JgaCXothFw==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/toggle@1.27.1": {
+
"integrity": "sha512-Klr1DzbBZ1mO6X+jwYvhEW1G/RB6DOlviKPbDQNwcma4fa+qpX0lbgSfQf/9xC8omv1sZXEDxp6dzrRUbDEyAA==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/tooltip@0.62.1": {
+
"integrity": "sha512-318EJU6B4FR0nMNU79qMAgdOiVM6vbDiRWBHjGLDBK3z5No3lKfo4TZb/NqBmmi2W7ZFPiPwvLFsTql+H0xDbA==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dom-event",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/popper@0.62.1",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/tooltip@1.27.1": {
+
"integrity": "sha512-RVMFFdqX7HaSoO4GEHikRzrScelwVMr+mbTfrCcGx1i/9AWf7YmNh1P9p3QMIkP2/9TB9FfQfqU7Flyz0qc3Iw==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/focus-visible",
+
"@zag-js/popper@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/tour@1.27.1": {
+
"integrity": "sha512-0VgJEvGNtiuhw/sy2zmG93gwBas5sOjfbqPsCxDr1zyRCHjYIUOG1FhbJmH9Lo6Y+CowQ4j+FRzYAnjHjPp8mg==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dismissable@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/focus-trap",
+
"@zag-js/interact-outside@1.27.1",
+
"@zag-js/popper@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/tree-view@0.62.1": {
+
"integrity": "sha512-Y7qj16X18uElsD5jA9l03+rKEg1/5JIGRutO+NlEbs9Ffb7y34vqcEWquA+YgDfqXVWk2b5v9xcU1iKuKhOagQ==",
+
"dependencies": [
+
"@zag-js/anatomy@0.62.1",
+
"@zag-js/core@0.62.1",
+
"@zag-js/dom-event",
+
"@zag-js/dom-query@0.62.1",
+
"@zag-js/types@0.62.1",
+
"@zag-js/utils@0.62.1"
+
]
+
},
+
"@zag-js/tree-view@1.27.1": {
+
"integrity": "sha512-YrP/F1d93/fXKtrN1Uhmzv9i13o39cLPno8X0i7PWvPVUv7HH+RqM0JZVROOQqhCWNUvkv/klGuGw5StP/RJGQ==",
+
"dependencies": [
+
"@zag-js/anatomy@1.27.1",
+
"@zag-js/collection@1.27.1",
+
"@zag-js/core@1.27.1",
+
"@zag-js/dom-query@1.27.1",
+
"@zag-js/types@1.27.1",
+
"@zag-js/utils@1.27.1"
+
]
+
},
+
"@zag-js/types@0.62.1": {
+
"integrity": "sha512-wjJvasoxg/rsFhMTaGLJEjYnSGaXz7DymtO+wWOIfa+O6y44flHc8wRQ1l6ZRRetCz4RALTuwhZI+0ESZ1Bpwg==",
+
"dependencies": [
+
"csstype"
+
]
+
},
+
"@zag-js/types@1.27.1": {
+
"integrity": "sha512-t7AtcXElKEjvvRlC1gcDmKgtIeiOtCL3vWf8K8kq7nVhq29q7PHtXB5ywn+R+CWnqJOmIDezKZjC1emXZKF0OA==",
+
"dependencies": [
+
"csstype"
+
]
+
},
+
"@zag-js/utils@0.62.1": {
+
"integrity": "sha512-90sk7Li2mqoMCAfZbns1xrySEg4PIFPwLpiRO/T2kvKpc9z/qsq2WqDFpS8eqHfYRmkLnmQa0Bw1LzItYYsGVQ=="
+
},
+
"@zag-js/utils@1.27.1": {
+
"integrity": "sha512-AHSd3VeiBvVoa8lAUe7YsCzk37X9zn2jKiYv13k5Ac+NnbYRbpWzZZZUfNGbFAsu5cSE4X1HUw38H1GTuBeWNQ=="
+
},
+
"ajv@8.17.1": {
+
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+
"dependencies": [
+
"fast-deep-equal",
+
"fast-uri",
+
"json-schema-traverse",
+
"require-from-string"
+
]
+
},
+
"ansi-colors@4.1.3": {
+
"integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw=="
+
},
+
"ansi-regex@5.0.1": {
+
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
+
},
+
"ansi-styles@4.3.0": {
+
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+
"dependencies": [
+
"color-convert"
+
]
+
},
+
"astral-regex@2.0.0": {
+
"integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ=="
+
},
+
"babel-plugin-jsx-dom-expressions@0.40.3_@babel+core@7.28.5": {
+
"integrity": "sha512-5HOwwt0BYiv/zxl7j8Pf2bGL6rDXfV6nUhLs8ygBX+EFJXzBPHM/euj9j/6deMZ6wa52Wb2PBaAV5U/jKwIY1w==",
+
"dependencies": [
+
"@babel/core",
+
"@babel/helper-module-imports@7.18.6",
+
"@babel/plugin-syntax-jsx",
+
"@babel/types",
+
"html-entities",
+
"parse5"
+
]
+
},
+
"babel-preset-solid@1.9.10_@babel+core@7.28.5_solid-js@1.9.10__seroval@1.3.2": {
+
"integrity": "sha512-HCelrgua/Y+kqO8RyL04JBWS/cVdrtUv/h45GntgQY+cJl4eBcKkCDV3TdMjtKx1nXwRaR9QXslM/Npm1dxdZQ==",
+
"dependencies": [
+
"@babel/core",
+
"babel-plugin-jsx-dom-expressions",
+
"solid-js"
+
],
+
"optionalPeers": [
+
"solid-js"
+
]
+
},
+
"baseline-browser-mapping@2.8.28": {
+
"integrity": "sha512-gYjt7OIqdM0PcttNYP2aVrr2G0bMALkBaoehD4BuRGjAOtipg0b6wHg1yNL+s5zSnLZZrGHOw4IrND8CD+3oIQ==",
+
"bin": true
+
},
+
"braces@3.0.3": {
+
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+
"dependencies": [
+
"fill-range"
+
]
+
},
+
"browserslist@4.24.4": {
+
"integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
+
"dependencies": [
+
"caniuse-lite",
+
"electron-to-chromium",
+
"node-releases",
+
"update-browserslist-db@1.1.4_browserslist@4.24.4"
+
],
+
"bin": true
+
},
+
"browserslist@4.28.0": {
+
"integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==",
+
"dependencies": [
+
"baseline-browser-mapping",
+
"caniuse-lite",
+
"electron-to-chromium",
+
"node-releases",
+
"update-browserslist-db@1.1.4_browserslist@4.28.0"
+
],
+
"bin": true
+
},
+
"bundle-n-require@1.1.2": {
+
"integrity": "sha512-bEk2jakVK1ytnZ9R2AAiZEeK/GxPUM8jvcRxHZXifZDMcjkI4EG/GlsJ2YGSVYT9y/p/gA9/0yDY8rCGsSU6Tg==",
+
"dependencies": [
+
"esbuild",
+
"node-eval"
+
]
+
},
+
"cac@6.7.14": {
+
"integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="
+
},
+
"caniuse-api@3.0.0": {
+
"integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
+
"dependencies": [
+
"browserslist@4.28.0",
+
"caniuse-lite",
+
"lodash.memoize",
+
"lodash.uniq"
+
]
+
},
+
"caniuse-lite@1.0.30001755": {
+
"integrity": "sha512-44V+Jm6ctPj7R52Na4TLi3Zri4dWUljJd+RDm+j8LtNCc/ihLCT+X1TzoOAkRETEWqjuLnh9581Tl80FvK7jVA=="
+
},
+
"chokidar@4.0.3": {
+
"integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+
"dependencies": [
+
"readdirp"
+
]
+
},
+
"code-block-writer@13.0.3": {
+
"integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg=="
+
},
+
"color-convert@2.0.1": {
+
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+
"dependencies": [
+
"color-name"
+
]
+
},
+
"color-name@1.1.4": {
+
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+
},
+
"confbox@0.2.2": {
+
"integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="
+
},
+
"convert-source-map@2.0.0": {
+
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
+
},
+
"crosspath@2.0.0": {
+
"integrity": "sha512-ju88BYCQ2uvjO2bR+SsgLSTwTSctU+6Vp2ePbKPgSCZyy4MWZxYsT738DlKVRE5utUjobjPRm1MkTYKJxCmpTA==",
+
"dependencies": [
+
"@types/node"
+
]
+
},
+
"cssesc@3.0.0": {
+
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+
"bin": true
+
},
+
"cssnano-utils@5.0.1_postcss@8.5.6": {
+
"integrity": "sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg==",
+
"dependencies": [
+
"postcss"
+
]
+
},
+
"csstype@3.1.3": {
+
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+
},
+
"debug@4.4.3": {
+
"integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+
"dependencies": [
+
"ms"
+
]
+
},
+
"detect-libc@1.0.3": {
+
"integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
+
"bin": true
+
},
+
"effect@3.10.15": {
+
"integrity": "sha512-LdczPAFbtij3xGr9i+8PyDtuWdlXjSY5UJ8PKrYrr0DClKfR/OW3j8sxtambWYljzJAYD865KFhv7LdbWdG7VQ==",
+
"dependencies": [
+
"fast-check"
+
]
+
},
+
"electron-to-chromium@1.5.254": {
+
"integrity": "sha512-DcUsWpVhv9svsKRxnSCZ86SjD+sp32SGidNB37KpqXJncp1mfUgKbHvBomE89WJDbfVKw1mdv5+ikrvd43r+Bg=="
+
},
+
"emoji-regex@8.0.0": {
+
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+
},
+
"entities@4.5.0": {
+
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
+
},
+
"entities@6.0.1": {
+
"integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="
+
},
+
"esbuild@0.25.12": {
+
"integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
+
"optionalDependencies": [
+
"@esbuild/aix-ppc64",
+
"@esbuild/android-arm",
+
"@esbuild/android-arm64",
+
"@esbuild/android-x64",
+
"@esbuild/darwin-arm64",
+
"@esbuild/darwin-x64",
+
"@esbuild/freebsd-arm64",
+
"@esbuild/freebsd-x64",
+
"@esbuild/linux-arm",
+
"@esbuild/linux-arm64",
+
"@esbuild/linux-ia32",
+
"@esbuild/linux-loong64",
+
"@esbuild/linux-mips64el",
+
"@esbuild/linux-ppc64",
+
"@esbuild/linux-riscv64",
+
"@esbuild/linux-s390x",
+
"@esbuild/linux-x64",
+
"@esbuild/netbsd-arm64",
+
"@esbuild/netbsd-x64",
+
"@esbuild/openbsd-arm64",
+
"@esbuild/openbsd-x64",
+
"@esbuild/openharmony-arm64",
+
"@esbuild/sunos-x64",
+
"@esbuild/win32-arm64",
+
"@esbuild/win32-ia32",
+
"@esbuild/win32-x64"
+
],
+
"scripts": true,
+
"bin": true
+
},
+
"escalade@3.1.2": {
+
"integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA=="
+
},
+
"escalade@3.2.0": {
+
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="
+
},
+
"esm-env@1.2.2": {
+
"integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA=="
+
},
+
"estree-walker@2.0.2": {
+
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+
},
+
"exsolve@1.0.8": {
+
"integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA=="
+
},
+
"fast-average-color@9.5.0": {
+
"integrity": "sha512-nC6x2YIlJ9xxgkMFMd1BNoM1ctMjNoRKfRliPmiEWW3S6rLTHiQcy9g3pt/xiKv/D0NAAkhb9VyV+WJFvTqMGg=="
+
},
+
"fast-check@3.23.2": {
+
"integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==",
+
"dependencies": [
+
"pure-rand"
+
]
+
},
+
"fast-deep-equal@3.1.3": {
+
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+
},
+
"fast-glob@3.3.3": {
+
"integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+
"dependencies": [
+
"@nodelib/fs.stat",
+
"@nodelib/fs.walk",
+
"glob-parent@5.1.2",
+
"merge2",
+
"micromatch"
+
]
+
},
+
"fast-uri@3.1.0": {
+
"integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA=="
+
},
+
"fastq@1.19.1": {
+
"integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
+
"dependencies": [
+
"reusify"
+
]
+
},
+
"fdir@6.5.0_picomatch@4.0.3": {
+
"integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+
"dependencies": [
+
"picomatch@4.0.3"
+
],
+
"optionalPeers": [
+
"picomatch@4.0.3"
+
]
+
},
+
"fill-range@7.1.1": {
+
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+
"dependencies": [
+
"to-regex-range"
+
]
+
},
+
"focus-trap@7.5.4": {
+
"integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==",
+
"dependencies": [
+
"tabbable"
+
]
+
},
+
"fs-extra@11.2.0": {
+
"integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+
"dependencies": [
+
"graceful-fs",
+
"jsonfile",
+
"universalify"
+
]
+
},
+
"fsevents@2.3.3": {
+
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+
"os": ["darwin"],
+
"scripts": true
+
},
+
"gensync@1.0.0-beta.2": {
+
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="
+
},
+
"glob-parent@5.1.2": {
+
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+
"dependencies": [
+
"is-glob"
+
]
+
},
+
"glob-parent@6.0.2": {
+
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+
"dependencies": [
+
"is-glob"
+
]
+
},
+
"globrex@0.1.2": {
+
"integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg=="
+
},
+
"graceful-fs@4.2.11": {
+
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
+
},
+
"hookable@5.5.3": {
+
"integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="
+
},
+
"html-entities@2.3.3": {
+
"integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA=="
+
},
+
"is-extglob@2.1.1": {
+
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
+
},
+
"is-fullwidth-code-point@3.0.0": {
+
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+
},
+
"is-glob@4.0.3": {
+
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+
"dependencies": [
+
"is-extglob"
+
]
+
},
+
"is-number@7.0.0": {
+
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+
},
+
"is-what@4.1.16": {
+
"integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A=="
+
},
+
"javascript-stringify@2.1.0": {
+
"integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg=="
+
},
+
"js-tokens@4.0.0": {
+
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+
},
+
"jsesc@3.1.0": {
+
"integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+
"bin": true
+
},
+
"json-schema-traverse@1.0.0": {
+
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
+
},
+
"json5@2.2.3": {
+
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+
"bin": true
+
},
+
"jsonfile@6.2.0": {
+
"integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
+
"dependencies": [
+
"universalify"
+
],
+
"optionalDependencies": [
+
"graceful-fs"
+
]
+
},
+
"kleur@4.1.5": {
+
"integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="
+
},
+
"klona@2.0.6": {
+
"integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA=="
+
},
+
"lightningcss-darwin-arm64@1.25.1": {
+
"integrity": "sha512-G4Dcvv85bs5NLENcu/s1f7ehzE3D5ThnlWSDwE190tWXRQCQaqwcuHe+MGSVI/slm0XrxnaayXY+cNl3cSricw==",
+
"os": ["darwin"],
+
"cpu": ["arm64"]
+
},
+
"lightningcss-darwin-x64@1.25.1": {
+
"integrity": "sha512-dYWuCzzfqRueDSmto6YU5SoGHvZTMU1Em9xvhcdROpmtOQLorurUZz8+xFxZ51lCO2LnYbfdjZ/gCqWEkwixNg==",
+
"os": ["darwin"],
+
"cpu": ["x64"]
+
},
+
"lightningcss-freebsd-x64@1.25.1": {
+
"integrity": "sha512-hXoy2s9A3KVNAIoKz+Fp6bNeY+h9c3tkcx1J3+pS48CqAt+5bI/R/YY4hxGL57fWAIquRjGKW50arltD6iRt/w==",
+
"os": ["freebsd"],
+
"cpu": ["x64"]
+
},
+
"lightningcss-linux-arm-gnueabihf@1.25.1": {
+
"integrity": "sha512-tWyMgHFlHlp1e5iW3EpqvH5MvsgoN7ZkylBbG2R2LWxnvH3FuWCJOhtGcYx9Ks0Kv0eZOBud789odkYLhyf1ng==",
+
"os": ["linux"],
+
"cpu": ["arm"]
+
},
+
"lightningcss-linux-arm64-gnu@1.25.1": {
+
"integrity": "sha512-Xjxsx286OT9/XSnVLIsFEDyDipqe4BcLeB4pXQ/FEA5+2uWCCuAEarUNQumRucnj7k6ftkAHUEph5r821KBccQ==",
+
"os": ["linux"],
+
"cpu": ["arm64"]
+
},
+
"lightningcss-linux-arm64-musl@1.25.1": {
+
"integrity": "sha512-IhxVFJoTW8wq6yLvxdPvyHv4NjzcpN1B7gjxrY3uaykQNXPHNIpChLB52+wfH+yS58zm1PL4LemUp8u9Cfp6Bw==",
+
"os": ["linux"],
+
"cpu": ["arm64"]
+
},
+
"lightningcss-linux-x64-gnu@1.25.1": {
+
"integrity": "sha512-RXIaru79KrREPEd6WLXfKfIp4QzoppZvD3x7vuTKkDA64PwTzKJ2jaC43RZHRt8BmyIkRRlmywNhTRMbmkPYpA==",
+
"os": ["linux"],
+
"cpu": ["x64"]
+
},
+
"lightningcss-linux-x64-musl@1.25.1": {
+
"integrity": "sha512-TdcNqFsAENEEFr8fJWg0Y4fZ/nwuqTRsIr7W7t2wmDUlA8eSXVepeeONYcb+gtTj1RaXn/WgNLB45SFkz+XBZA==",
+
"os": ["linux"],
+
"cpu": ["x64"]
+
},
+
"lightningcss-win32-x64-msvc@1.25.1": {
+
"integrity": "sha512-9KZZkmmy9oGDSrnyHuxP6iMhbsgChUiu/NSgOx+U1I/wTngBStDf2i2aGRCHvFqj19HqqBEI4WuGVQBa2V6e0A==",
+
"os": ["win32"],
+
"cpu": ["x64"]
+
},
+
"lightningcss@1.25.1": {
+
"integrity": "sha512-V0RMVZzK1+rCHpymRv4URK2lNhIRyO8g7U7zOFwVAhJuat74HtkjIQpQRKNCwFEYkRGpafOpmXXLoaoBcyVtBg==",
+
"dependencies": [
+
"detect-libc"
+
],
+
"optionalDependencies": [
+
"lightningcss-darwin-arm64",
+
"lightningcss-darwin-x64",
+
"lightningcss-freebsd-x64",
+
"lightningcss-linux-arm-gnueabihf",
+
"lightningcss-linux-arm64-gnu",
+
"lightningcss-linux-arm64-musl",
+
"lightningcss-linux-x64-gnu",
+
"lightningcss-linux-x64-musl",
+
"lightningcss-win32-x64-msvc"
+
]
+
},
+
"lodash.memoize@4.1.2": {
+
"integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag=="
+
},
+
"lodash.merge@4.6.2": {
+
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
+
},
+
"lodash.truncate@4.4.2": {
+
"integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw=="
+
},
+
"lodash.uniq@4.5.0": {
+
"integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="
+
},
+
"look-it-up@2.1.0": {
+
"integrity": "sha512-nMoGWW2HurtuJf6XAL56FWTDCWLOTSsanrgwOyaR5Y4e3zfG5N/0cU5xWZSEU3tBxhQugRbV1xL9jb+ug7yZww=="
+
},
+
"lru-cache@5.1.1": {
+
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+
"dependencies": [
+
"yallist"
+
]
+
},
+
"lucide-solid@0.553.0_solid-js@1.9.10__seroval@1.3.2": {
+
"integrity": "sha512-FAvWslAqD/HmCfcvFpbYAjPFf80F60aBlvn7M7Ea/FzYChqpkUiUkJEvG0K1bYHadf7dnkK0DSI992VT26sQdg==",
+
"dependencies": [
+
"solid-js"
+
]
+
},
+
"magic-string@0.30.19": {
+
"integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==",
+
"dependencies": [
+
"@jridgewell/sourcemap-codec"
+
]
+
},
+
"mediabunny@1.25.0": {
+
"integrity": "sha512-ozaqk6zS2Vbf3+3+OoxKfnCVeZRcv5PO8DgQtBrM5vpWIbpEK+kMVV6pgfo4mC3XtMwvQEMbhj3zEf0LNklh9w==",
+
"dependencies": [
+
"@types/dom-mediacapture-transform",
+
"@types/dom-webcodecs"
+
]
+
},
+
"merge-anything@5.1.7": {
+
"integrity": "sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==",
+
"dependencies": [
+
"is-what"
+
]
+
},
+
"merge2@1.4.1": {
+
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
+
},
+
"microdiff@1.5.0": {
+
"integrity": "sha512-Drq+/THMvDdzRYrK0oxJmOKiC24ayUV8ahrt8l3oRK51PWt6gdtrIGrlIH3pT/lFh1z93FbAcidtsHcWbnRz8Q=="
+
},
+
"micromatch@4.0.8": {
+
"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+
"dependencies": [
+
"braces",
+
"picomatch@2.3.1"
+
]
+
},
+
"minimatch@10.1.1": {
+
"integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==",
+
"dependencies": [
+
"@isaacs/brace-expansion"
+
]
+
},
+
"ms@2.1.3": {
+
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+
},
+
"nanoid@3.3.11": {
+
"integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+
"bin": true
+
},
+
"nanoid@5.1.6": {
+
"integrity": "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==",
+
"bin": true
+
},
+
"node-eval@2.0.0": {
+
"integrity": "sha512-Ap+L9HznXAVeJj3TJ1op6M6bg5xtTq8L5CU/PJxtkhea/DrIxdTknGKIECKd/v/Lgql95iuMAYvIzBNd0pmcMg==",
+
"dependencies": [
+
"path-is-absolute"
+
]
+
},
+
"node-releases@2.0.27": {
+
"integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="
+
},
+
"object-path@0.11.8": {
+
"integrity": "sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA=="
+
},
+
"outdent@0.8.0": {
+
"integrity": "sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A=="
+
},
+
"package-manager-detector@1.5.0": {
+
"integrity": "sha512-uBj69dVlYe/+wxj8JOpr97XfsxH/eumMt6HqjNTmJDf/6NO9s+0uxeOneIz3AsPt2m6y9PqzDzd3ATcU17MNfw=="
+
},
+
"parse5@7.3.0": {
+
"integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
+
"dependencies": [
+
"entities@6.0.1"
+
]
+
},
+
"path-browserify@1.0.1": {
+
"integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
+
},
+
"path-is-absolute@1.0.1": {
+
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+
},
+
"pathe@2.0.3": {
+
"integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="
+
},
+
"perfect-debounce@1.0.0": {
+
"integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="
+
},
+
"perfect-freehand@1.2.2": {
+
"integrity": "sha512-eh31l019WICQ03pkF3FSzHxB8n07ItqIQ++G5UV8JX0zVOXzgTGCqnRR0jJ2h9U8/2uW4W4mtGJELt9kEV0CFQ=="
+
},
+
"picocolors@1.1.1": {
+
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
+
},
+
"picomatch@2.3.1": {
+
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
+
},
+
"picomatch@4.0.3": {
+
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="
+
},
+
"pkg-types@2.3.0": {
+
"integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==",
+
"dependencies": [
+
"confbox",
+
"exsolve",
+
"pathe"
+
]
+
},
+
"pluralize@8.0.0": {
+
"integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA=="
+
},
+
"postcss-discard-duplicates@7.0.2_postcss@8.5.6": {
+
"integrity": "sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w==",
+
"dependencies": [
+
"postcss"
+
]
+
},
+
"postcss-discard-empty@7.0.1_postcss@8.5.6": {
+
"integrity": "sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg==",
+
"dependencies": [
+
"postcss"
+
]
+
},
+
"postcss-merge-rules@7.0.6_postcss@8.5.6": {
+
"integrity": "sha512-2jIPT4Tzs8K87tvgCpSukRQ2jjd+hH6Bb8rEEOUDmmhOeTcqDg5fEFK8uKIu+Pvc3//sm3Uu6FRqfyv7YF7+BQ==",
+
"dependencies": [
+
"browserslist@4.28.0",
+
"caniuse-api",
+
"cssnano-utils",
+
"postcss",
+
"postcss-selector-parser"
+
]
+
},
+
"postcss-minify-selectors@7.0.5_postcss@8.5.6": {
+
"integrity": "sha512-x2/IvofHcdIrAm9Q+p06ZD1h6FPcQ32WtCRVodJLDR+WMn8EVHI1kvLxZuGKz/9EY5nAmI6lIQIrpo4tBy5+ug==",
+
"dependencies": [
+
"cssesc",
+
"postcss",
+
"postcss-selector-parser"
+
]
+
},
+
"postcss-nested@7.0.2_postcss@8.5.6": {
+
"integrity": "sha512-5osppouFc0VR9/VYzYxO03VaDa3e8F23Kfd6/9qcZTUI8P58GIYlArOET2Wq0ywSl2o2PjELhYOFI4W7l5QHKw==",
+
"dependencies": [
+
"postcss",
+
"postcss-selector-parser"
+
]
+
},
+
"postcss-normalize-whitespace@7.0.1_postcss@8.5.6": {
+
"integrity": "sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA==",
+
"dependencies": [
+
"postcss",
+
"postcss-value-parser"
+
]
+
},
+
"postcss-selector-parser@7.1.0": {
+
"integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
+
"dependencies": [
+
"cssesc",
+
"util-deprecate"
+
]
+
},
+
"postcss-value-parser@4.2.0": {
+
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+
},
+
"postcss@8.5.6": {
+
"integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+
"dependencies": [
+
"nanoid@3.3.11",
+
"picocolors",
+
"source-map-js"
+
]
+
},
+
"prettier@3.2.5": {
+
"integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==",
+
"bin": true
+
},
+
"proxy-compare@3.0.0": {
+
"integrity": "sha512-y44MCkgtZUCT9tZGuE278fB7PWVf7fRYy0vbRXAts2o5F0EfC4fIQrvQQGBJo1WJbFcVLXzApOscyJuZqHQc1w=="
+
},
+
"proxy-compare@3.0.1": {
+
"integrity": "sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q=="
+
},
+
"proxy-memoize@3.0.1": {
+
"integrity": "sha512-VDdG/VYtOgdGkWJx7y0o7p+zArSf2383Isci8C+BP3YXgMYDoPd3cCBjw0JdWb6YBb9sFiOPbAADDVTPJnh+9g==",
+
"dependencies": [
+
"proxy-compare@3.0.1"
+
]
+
},
+
"pure-rand@6.1.0": {
+
"integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA=="
+
},
+
"queue-microtask@1.2.3": {
+
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
+
},
+
"readdirp@4.1.2": {
+
"integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="
+
},
+
"require-from-string@2.0.2": {
+
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
+
},
+
"reusify@1.1.0": {
+
"integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="
+
},
+
"rollup@4.52.5": {
+
"integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==",
+
"dependencies": [
+
"@types/estree"
+
],
+
"optionalDependencies": [
+
"@rollup/rollup-android-arm-eabi",
+
"@rollup/rollup-android-arm64",
+
"@rollup/rollup-darwin-arm64",
+
"@rollup/rollup-darwin-x64",
+
"@rollup/rollup-freebsd-arm64",
+
"@rollup/rollup-freebsd-x64",
+
"@rollup/rollup-linux-arm-gnueabihf",
+
"@rollup/rollup-linux-arm-musleabihf",
+
"@rollup/rollup-linux-arm64-gnu",
+
"@rollup/rollup-linux-arm64-musl",
+
"@rollup/rollup-linux-loong64-gnu",
+
"@rollup/rollup-linux-ppc64-gnu",
+
"@rollup/rollup-linux-riscv64-gnu",
+
"@rollup/rollup-linux-riscv64-musl",
+
"@rollup/rollup-linux-s390x-gnu",
+
"@rollup/rollup-linux-x64-gnu",
+
"@rollup/rollup-linux-x64-musl",
+
"@rollup/rollup-openharmony-arm64",
+
"@rollup/rollup-win32-arm64-msvc",
+
"@rollup/rollup-win32-ia32-msvc",
+
"@rollup/rollup-win32-x64-gnu",
+
"@rollup/rollup-win32-x64-msvc",
+
"fsevents"
+
],
+
"bin": true
+
},
+
"run-parallel@1.2.0": {
+
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+
"dependencies": [
+
"queue-microtask"
+
]
+
},
+
"semver@6.3.1": {
+
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+
"bin": true
+
},
+
"seroval-plugins@1.3.3_seroval@1.3.2": {
+
"integrity": "sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==",
+
"dependencies": [
+
"seroval"
+
]
+
},
+
"seroval@1.3.2": {
+
"integrity": "sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ=="
+
},
+
"sisteransi@1.0.5": {
+
"integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
+
},
+
"slice-ansi@4.0.0": {
+
"integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+
"dependencies": [
+
"ansi-styles",
+
"astral-regex",
+
"is-fullwidth-code-point"
+
]
+
},
+
"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": {
+
"integrity": "sha512-/s/pPTLvTkuXGZhLfsuvp7ge/cdpEwrUPoRwoJPYgz74GTUSb5Ozi2V6Z6HkO0ILT7hXB04j16HbH1aaP5VFOA==",
+
"dependencies": [
+
"@babel/core",
+
"@babel/plugin-syntax-typescript",
+
"@babel/types",
+
"@solid-devtools/debugger",
+
"@solid-devtools/shared",
+
"solid-js",
+
"vite"
+
],
+
"optionalPeers": [
+
"vite"
+
]
+
},
+
"solid-js@1.9.10_seroval@1.3.2": {
+
"integrity": "sha512-Coz956cos/EPDlhs6+jsdTxKuJDPT7B5SVIWgABwROyxjY7Xbr8wkzD68Et+NxnV7DLJ3nJdAC2r9InuV/4Jew==",
+
"dependencies": [
+
"csstype",
+
"seroval",
+
"seroval-plugins"
+
]
+
},
+
"solid-refresh@0.6.3_solid-js@1.9.10__seroval@1.3.2": {
+
"integrity": "sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==",
+
"dependencies": [
+
"@babel/generator",
+
"@babel/helper-module-imports@7.27.1",
+
"@babel/types",
+
"solid-js"
+
]
+
},
+
"source-map-js@1.2.1": {
+
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
+
},
+
"string-width@4.2.3": {
+
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+
"dependencies": [
+
"emoji-regex",
+
"is-fullwidth-code-point",
+
"strip-ansi"
+
]
+
},
+
"strip-ansi@6.0.1": {
+
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+
"dependencies": [
+
"ansi-regex"
+
]
+
},
+
"tabbable@6.3.0": {
+
"integrity": "sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ=="
+
},
+
"table@6.9.0": {
+
"integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==",
+
"dependencies": [
+
"ajv",
+
"lodash.truncate",
+
"slice-ansi",
+
"string-width",
+
"strip-ansi"
+
]
+
},
+
"tinyglobby@0.2.15_picomatch@4.0.3": {
+
"integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+
"dependencies": [
+
"fdir",
+
"picomatch@4.0.3"
+
]
+
},
+
"to-regex-range@5.0.1": {
+
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+
"dependencies": [
+
"is-number"
+
]
+
},
+
"ts-evaluator@1.2.0_typescript@5.9.3": {
+
"integrity": "sha512-ncSGek1p92bj2ifB7s9UBgryHCkU9vwC5d+Lplt12gT9DH+e41X8dMoHRQjIMeAvyG7j9dEnuHmwgOtuRIQL+Q==",
+
"dependencies": [
+
"ansi-colors",
+
"crosspath",
+
"object-path",
+
"typescript"
+
]
+
},
+
"ts-morph@27.0.2": {
+
"integrity": "sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w==",
+
"dependencies": [
+
"@ts-morph/common",
+
"code-block-writer"
+
]
+
},
+
"ts-pattern@5.9.0": {
+
"integrity": "sha512-6s5V71mX8qBUmlgbrfL33xDUwO0fq48rxAu2LBE11WBeGdpCPOsXksQbZJHvHwhrd3QjUusd3mAOM5Gg0mFBLg=="
+
},
+
"tsconfck@3.1.6_typescript@5.9.3": {
+
"integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==",
+
"dependencies": [
+
"typescript"
+
],
+
"optionalPeers": [
+
"typescript"
+
],
+
"bin": true
+
},
+
"tslib@2.8.1": {
+
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
+
},
+
"typescript@5.9.3": {
+
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
+
"bin": true
+
},
+
"universalify@2.0.1": {
+
"integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="
+
},
+
"update-browserslist-db@1.1.4_browserslist@4.24.4": {
+
"integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==",
+
"dependencies": [
+
"browserslist@4.24.4",
+
"escalade@3.2.0",
+
"picocolors"
+
],
+
"bin": true
+
},
+
"update-browserslist-db@1.1.4_browserslist@4.28.0": {
+
"integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==",
+
"dependencies": [
+
"browserslist@4.28.0",
+
"escalade@3.2.0",
+
"picocolors"
+
],
+
"bin": true
+
},
+
"uqr@0.1.2": {
+
"integrity": "sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA=="
+
},
+
"util-deprecate@1.0.2": {
+
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+
},
+
"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": {
+
"integrity": "sha512-Yr1dQybmtDtDAHkii6hXuc1oVH9CPcS/Zb2jN/P36qqcrkNnVPsMTzQ06jyzFPFjj3U1IYKMVt/9ZqcwGCEbjw==",
+
"dependencies": [
+
"@babel/core",
+
"@types/babel__core",
+
"babel-preset-solid",
+
"merge-anything",
+
"solid-js",
+
"solid-refresh",
+
"vite",
+
"vitefu"
+
]
+
},
+
"vite-tsconfig-paths@5.1.4_vite@7.1.12__picomatch@4.0.3_typescript@5.9.3": {
+
"integrity": "sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==",
+
"dependencies": [
+
"debug",
+
"globrex",
+
"tsconfck",
+
"vite"
+
],
+
"optionalPeers": [
+
"vite"
+
]
+
},
+
"vite@7.1.12_picomatch@4.0.3": {
+
"integrity": "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==",
+
"dependencies": [
+
"esbuild",
+
"fdir",
+
"picomatch@4.0.3",
+
"postcss",
+
"rollup",
+
"tinyglobby"
+
],
+
"optionalDependencies": [
+
"fsevents"
+
],
+
"bin": true
+
},
+
"vitefu@1.1.1_vite@7.1.12__picomatch@4.0.3": {
+
"integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==",
+
"dependencies": [
+
"vite"
+
],
+
"optionalPeers": [
+
"vite"
+
]
+
},
+
"wordwrapjs@5.1.1": {
+
"integrity": "sha512-0yweIbkINJodk27gX9LBGMzyQdBDan3s/dEAiwBOj+Mf0PPyWL6/rikalkv8EeD0E8jm4o5RXEOrFTP3NXbhJg=="
+
},
+
"yallist@3.1.1": {
+
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+
}
+
},
+
"workspace": {
+
"packageJson": {
+
"dependencies": [
+
"npm:@ark-ui/solid@^5.28.0",
+
"npm:@atcute/atproto@^3.1.9",
+
"npm:@atcute/bluesky@^3.2.10",
+
"npm:@atcute/client@^4.0.5",
+
"npm:@atcute/identity-resolver@^1.1.4",
+
"npm:@atcute/identity@^1.1.2",
+
"npm:@atcute/lexicons@^1.2.3",
+
"npm:@atcute/microcosm@1",
+
"npm:@atcute/oauth-browser-client@^2.0.1",
+
"npm:@pandacss/dev@^1.5.1",
+
"npm:@pandacss/preset-base@^1.5.1",
+
"npm:@park-ui/panda-preset@~0.43.1",
+
"npm:@solid-primitives/map@~0.7.2",
+
"npm:fast-average-color@^9.5.0",
+
"npm:lucide-solid@0.553",
+
"npm:mediabunny@^1.25.0",
+
"npm:solid-devtools@~0.34.3",
+
"npm:solid-js@^1.9.5",
+
"npm:typescript@^5.7.2",
+
"npm:vite-plugin-solid@^2.11.8",
+
"npm:vite-tsconfig-paths@^5.1.4",
+
"npm:vite@^7.1.4"
+
]
+
}
+
}
+
}
+76
flake.lock
···
+
{
+
"nodes": {
+
"naked-shell": {
+
"locked": {
+
"lastModified": 1681286841,
+
"narHash": "sha256-3XlJrwlR0nBiREnuogoa5i1b4+w/XPe0z8bbrJASw0g=",
+
"owner": "90-008",
+
"repo": "mk-naked-shell",
+
"rev": "7612f828dd6f22b7fb332cc69440e839d7ffe6bd",
+
"type": "github"
+
},
+
"original": {
+
"owner": "90-008",
+
"repo": "mk-naked-shell",
+
"type": "github"
+
}
+
},
+
"nixpkgs": {
+
"locked": {
+
"lastModified": 1763276407,
+
"narHash": "sha256-InTyTlu2/Jwkv/8BGfnvbYEihvbwKd11uApXQqwUhhU=",
+
"owner": "nixos",
+
"repo": "nixpkgs",
+
"rev": "5aeecbfbddb269117e7f7bf6a683730b46bb770b",
+
"type": "github"
+
},
+
"original": {
+
"owner": "nixos",
+
"repo": "nixpkgs",
+
"type": "github"
+
}
+
},
+
"nixpkgs-lib": {
+
"locked": {
+
"lastModified": 1761765539,
+
"narHash": "sha256-b0yj6kfvO8ApcSE+QmA6mUfu8IYG6/uU28OFn4PaC8M=",
+
"owner": "nix-community",
+
"repo": "nixpkgs.lib",
+
"rev": "719359f4562934ae99f5443f20aa06c2ffff91fc",
+
"type": "github"
+
},
+
"original": {
+
"owner": "nix-community",
+
"repo": "nixpkgs.lib",
+
"type": "github"
+
}
+
},
+
"parts": {
+
"inputs": {
+
"nixpkgs-lib": "nixpkgs-lib"
+
},
+
"locked": {
+
"lastModified": 1762980239,
+
"narHash": "sha256-8oNVE8TrD19ulHinjaqONf9QWCKK+w4url56cdStMpM=",
+
"owner": "hercules-ci",
+
"repo": "flake-parts",
+
"rev": "52a2caecc898d0b46b2b905f058ccc5081f842da",
+
"type": "github"
+
},
+
"original": {
+
"owner": "hercules-ci",
+
"repo": "flake-parts",
+
"type": "github"
+
}
+
},
+
"root": {
+
"inputs": {
+
"naked-shell": "naked-shell",
+
"nixpkgs": "nixpkgs",
+
"parts": "parts"
+
}
+
}
+
},
+
"root": "root",
+
"version": 7
+
}
+34
flake.nix
···
+
{
+
inputs.parts.url = "github:hercules-ci/flake-parts";
+
inputs.nixpkgs.url = "github:nixos/nixpkgs";
+
inputs.naked-shell.url = "github:90-008/mk-naked-shell";
+
+
outputs = inp:
+
inp.parts.lib.mkFlake {inputs = inp;} {
+
systems = ["x86_64-linux"];
+
imports = [inp.naked-shell.flakeModule];
+
perSystem = {
+
config,
+
system,
+
...
+
}: let
+
pkgs = inp.nixpkgs.legacyPackages.${system};
+
in {
+
devShells.default = config.mk-naked-shell.lib.mkNakedShell {
+
name = "memos-devshell";
+
packages = with pkgs; [
+
nodejs-slim_latest deno
+
];
+
shellHook = ''
+
export PATH="$PATH:$PWD/node_modules/.bin"
+
'';
+
};
+
packages.memos-modules = pkgs.callPackage ./nix/modules.nix {};
+
packages.memos = pkgs.callPackage ./nix {
+
inherit (config.packages) memos-modules;
+
};
+
packages.default = config.packages.memos;
+
};
+
};
+
}
+
+15
index.html
···
+
<!doctype html>
+
<html lang="en">
+
<head>
+
<meta charset="utf-8" />
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
+
<meta name="theme-color" content="#000000" />
+
<title>bsky voice memos</title>
+
</head>
+
<body>
+
<noscript>you need to enable javascript to run this app.</noscript>
+
<div id="root"></div>
+
+
<script src="/src/index.tsx" type="module"></script>
+
</body>
+
</html>
+55
nix/default.nix
···
+
{
+
lib,
+
stdenv,
+
deno,
+
nodejs,
+
makeBinaryWrapper,
+
memos-modules,
+
PUBLIC_DOMAIN ? "http://localhost:5173",
+
}:
+
stdenv.mkDerivation {
+
name = "memos";
+
+
src = lib.fileset.toSource {
+
root = ../.;
+
fileset = lib.fileset.unions [
+
../src
+
../static
+
../deno.lock
+
../package.json
+
../svelte.config.js
+
../tsconfig.json
+
../vite.config.ts
+
];
+
};
+
+
nativeBuildInputs = [makeBinaryWrapper];
+
buildInputs = [deno];
+
+
inherit PUBLIC_DOMAIN;
+
+
dontCheck = true;
+
+
configurePhase = ''
+
runHook preConfigure
+
cp -R --no-preserve=ownership ${memos-modules} node_modules
+
find node_modules -type d -exec chmod 755 {} \;
+
substituteInPlace node_modules/.bin/vite \
+
--replace-fail "/usr/bin/env node" "${nodejs}/bin/node"
+
runHook postConfigure
+
'';
+
buildPhase = ''
+
runHook preBuild
+
HOME=$TMPDIR deno run --cached-only build
+
runHook postBuild
+
'';
+
installPhase = ''
+
runHook preInstall
+
+
mkdir -p $out/bin
+
cp -R ./build/* $out
+
# cp -R ./node_modules $out
+
+
runHook postInstall
+
'';
+
}
+35
nix/modules.nix
···
+
{
+
lib,
+
stdenv,
+
deno,
+
}:
+
stdenv.mkDerivation {
+
name = "memos-modules";
+
+
src = lib.fileset.toSource {
+
root = ../.;
+
fileset = lib.fileset.unions [
+
../deno.lock
+
../package.json
+
];
+
};
+
+
outputHash = "sha256-s5rq8htDjR0I8MxPtLq1NYIywXGEdYbZZvE7I5+TCIU=";
+
outputHashAlgo = "sha256";
+
outputHashMode = "recursive";
+
+
nativeBuildInputs = [deno];
+
+
dontConfigure = true;
+
dontCheck = true;
+
dontFixup = true;
+
dontPatchShebangs = true;
+
+
buildPhase = ''
+
HOME=$TMPDIR deno install --frozen --seed 8008135
+
'';
+
installPhase = ''
+
cp -R node_modules $out
+
ls -la $out
+
'';
+
}
+40
package.json
···
+
{
+
"name": "vite-template-solid",
+
"version": "0.0.0",
+
"description": "",
+
"type": "module",
+
"scripts": {
+
"prepare": "panda codegen",
+
"start": "vite",
+
"dev": "vite",
+
"build": "vite build",
+
"serve": "vite preview"
+
},
+
"license": "MIT",
+
"devDependencies": {
+
"@pandacss/dev": "^1.5.1",
+
"@pandacss/preset-base": "^1.5.1",
+
"@park-ui/panda-preset": "^0.43.1",
+
"solid-devtools": "^0.34.3",
+
"typescript": "^5.7.2",
+
"vite": "^7.1.4",
+
"vite-plugin-solid": "^2.11.8",
+
"vite-tsconfig-paths": "^5.1.4"
+
},
+
"dependencies": {
+
"@ark-ui/solid": "^5.28.0",
+
"@atcute/atproto": "^3.1.9",
+
"@atcute/bluesky": "^3.2.10",
+
"@atcute/client": "^4.0.5",
+
"@atcute/identity": "^1.1.2",
+
"@atcute/identity-resolver": "^1.1.4",
+
"@atcute/lexicons": "^1.2.3",
+
"@atcute/microcosm": "^1.0.0",
+
"@atcute/oauth-browser-client": "^2.0.1",
+
"@solid-primitives/map": "^0.7.2",
+
"fast-average-color": "^9.5.0",
+
"lucide-solid": "^0.553.0",
+
"mediabunny": "^1.25.0",
+
"solid-js": "^1.9.5"
+
}
+
}
+20
panda.config.ts
···
+
import { defineConfig } from "@pandacss/dev";
+
import { createPreset } from "@park-ui/panda-preset";
+
import yellow from "@park-ui/panda-preset/colors/yellow";
+
import sand from "@park-ui/panda-preset/colors/sand";
+
+
export default defineConfig({
+
preflight: true,
+
presets: [
+
createPreset({ accentColor: yellow, grayColor: sand, radius: "xs" }),
+
],
+
include: ["./src/**/*.{js,jsx,ts,tsx}"],
+
jsxFramework: "solid",
+
outdir: "styled-system",
+
conditions: {
+
extend: {
+
dark: '.dark &, [data-theme="dark"] &',
+
light: '.light &, [data-theme="light"] &',
+
},
+
},
+
});
+5
park-ui.json
···
+
{
+
"$schema": "https://park-ui.com/registry/latest/schema.json",
+
"jsFramework": "solid",
+
"outputPath": "./src/components/ui"
+
}
+1346
pnpm-lock.yaml
···
+
lockfileVersion: '9.0'
+
+
settings:
+
autoInstallPeers: true
+
excludeLinksFromLockfile: false
+
+
importers:
+
+
.:
+
dependencies:
+
solid-js:
+
specifier: ^1.9.5
+
version: 1.9.9
+
devDependencies:
+
solid-devtools:
+
specifier: ^0.34.3
+
version: 0.34.3(solid-js@1.9.9)(vite@7.1.10)
+
typescript:
+
specifier: ^5.7.2
+
version: 5.9.2
+
vite:
+
specifier: ^7.1.4
+
version: 7.1.10
+
vite-plugin-solid:
+
specifier: ^2.11.8
+
version: 2.11.9(solid-js@1.9.9)(vite@7.1.10)
+
+
packages:
+
+
'@babel/code-frame@7.27.1':
+
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/compat-data@7.28.4':
+
resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/core@7.28.4':
+
resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/generator@7.28.3':
+
resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/helper-compilation-targets@7.27.2':
+
resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/helper-globals@7.28.0':
+
resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/helper-module-imports@7.18.6':
+
resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/helper-module-imports@7.27.1':
+
resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/helper-module-transforms@7.28.3':
+
resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==}
+
engines: {node: '>=6.9.0'}
+
peerDependencies:
+
'@babel/core': ^7.0.0
+
+
'@babel/helper-plugin-utils@7.27.1':
+
resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/helper-string-parser@7.27.1':
+
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/helper-validator-identifier@7.27.1':
+
resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/helper-validator-option@7.27.1':
+
resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/helpers@7.28.4':
+
resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/parser@7.28.4':
+
resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==}
+
engines: {node: '>=6.0.0'}
+
hasBin: true
+
+
'@babel/plugin-syntax-jsx@7.27.1':
+
resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==}
+
engines: {node: '>=6.9.0'}
+
peerDependencies:
+
'@babel/core': ^7.0.0-0
+
+
'@babel/plugin-syntax-typescript@7.27.1':
+
resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==}
+
engines: {node: '>=6.9.0'}
+
peerDependencies:
+
'@babel/core': ^7.0.0-0
+
+
'@babel/template@7.27.2':
+
resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/traverse@7.28.4':
+
resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/types@7.28.4':
+
resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==}
+
engines: {node: '>=6.9.0'}
+
+
'@esbuild/aix-ppc64@0.25.11':
+
resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==}
+
engines: {node: '>=18'}
+
cpu: [ppc64]
+
os: [aix]
+
+
'@esbuild/android-arm64@0.25.11':
+
resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==}
+
engines: {node: '>=18'}
+
cpu: [arm64]
+
os: [android]
+
+
'@esbuild/android-arm@0.25.11':
+
resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==}
+
engines: {node: '>=18'}
+
cpu: [arm]
+
os: [android]
+
+
'@esbuild/android-x64@0.25.11':
+
resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==}
+
engines: {node: '>=18'}
+
cpu: [x64]
+
os: [android]
+
+
'@esbuild/darwin-arm64@0.25.11':
+
resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==}
+
engines: {node: '>=18'}
+
cpu: [arm64]
+
os: [darwin]
+
+
'@esbuild/darwin-x64@0.25.11':
+
resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==}
+
engines: {node: '>=18'}
+
cpu: [x64]
+
os: [darwin]
+
+
'@esbuild/freebsd-arm64@0.25.11':
+
resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==}
+
engines: {node: '>=18'}
+
cpu: [arm64]
+
os: [freebsd]
+
+
'@esbuild/freebsd-x64@0.25.11':
+
resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==}
+
engines: {node: '>=18'}
+
cpu: [x64]
+
os: [freebsd]
+
+
'@esbuild/linux-arm64@0.25.11':
+
resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==}
+
engines: {node: '>=18'}
+
cpu: [arm64]
+
os: [linux]
+
+
'@esbuild/linux-arm@0.25.11':
+
resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==}
+
engines: {node: '>=18'}
+
cpu: [arm]
+
os: [linux]
+
+
'@esbuild/linux-ia32@0.25.11':
+
resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==}
+
engines: {node: '>=18'}
+
cpu: [ia32]
+
os: [linux]
+
+
'@esbuild/linux-loong64@0.25.11':
+
resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==}
+
engines: {node: '>=18'}
+
cpu: [loong64]
+
os: [linux]
+
+
'@esbuild/linux-mips64el@0.25.11':
+
resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==}
+
engines: {node: '>=18'}
+
cpu: [mips64el]
+
os: [linux]
+
+
'@esbuild/linux-ppc64@0.25.11':
+
resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==}
+
engines: {node: '>=18'}
+
cpu: [ppc64]
+
os: [linux]
+
+
'@esbuild/linux-riscv64@0.25.11':
+
resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==}
+
engines: {node: '>=18'}
+
cpu: [riscv64]
+
os: [linux]
+
+
'@esbuild/linux-s390x@0.25.11':
+
resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==}
+
engines: {node: '>=18'}
+
cpu: [s390x]
+
os: [linux]
+
+
'@esbuild/linux-x64@0.25.11':
+
resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==}
+
engines: {node: '>=18'}
+
cpu: [x64]
+
os: [linux]
+
+
'@esbuild/netbsd-arm64@0.25.11':
+
resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==}
+
engines: {node: '>=18'}
+
cpu: [arm64]
+
os: [netbsd]
+
+
'@esbuild/netbsd-x64@0.25.11':
+
resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==}
+
engines: {node: '>=18'}
+
cpu: [x64]
+
os: [netbsd]
+
+
'@esbuild/openbsd-arm64@0.25.11':
+
resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==}
+
engines: {node: '>=18'}
+
cpu: [arm64]
+
os: [openbsd]
+
+
'@esbuild/openbsd-x64@0.25.11':
+
resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==}
+
engines: {node: '>=18'}
+
cpu: [x64]
+
os: [openbsd]
+
+
'@esbuild/openharmony-arm64@0.25.11':
+
resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==}
+
engines: {node: '>=18'}
+
cpu: [arm64]
+
os: [openharmony]
+
+
'@esbuild/sunos-x64@0.25.11':
+
resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==}
+
engines: {node: '>=18'}
+
cpu: [x64]
+
os: [sunos]
+
+
'@esbuild/win32-arm64@0.25.11':
+
resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==}
+
engines: {node: '>=18'}
+
cpu: [arm64]
+
os: [win32]
+
+
'@esbuild/win32-ia32@0.25.11':
+
resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==}
+
engines: {node: '>=18'}
+
cpu: [ia32]
+
os: [win32]
+
+
'@esbuild/win32-x64@0.25.11':
+
resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==}
+
engines: {node: '>=18'}
+
cpu: [x64]
+
os: [win32]
+
+
'@jridgewell/gen-mapping@0.3.13':
+
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+
'@jridgewell/remapping@2.3.5':
+
resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+
+
'@jridgewell/resolve-uri@3.1.2':
+
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+
engines: {node: '>=6.0.0'}
+
+
'@jridgewell/sourcemap-codec@1.5.5':
+
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+
'@jridgewell/trace-mapping@0.3.30':
+
resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==}
+
+
'@nothing-but/utils@0.17.0':
+
resolution: {integrity: sha512-TuCHcHLOqDL0SnaAxACfuRHBNRgNJcNn9X0GiH5H3YSDBVquCr3qEIG3FOQAuMyZCbu9w8nk2CHhOsn7IvhIwQ==}
+
+
'@rollup/rollup-android-arm-eabi@4.52.5':
+
resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==}
+
cpu: [arm]
+
os: [android]
+
+
'@rollup/rollup-android-arm64@4.52.5':
+
resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==}
+
cpu: [arm64]
+
os: [android]
+
+
'@rollup/rollup-darwin-arm64@4.52.5':
+
resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==}
+
cpu: [arm64]
+
os: [darwin]
+
+
'@rollup/rollup-darwin-x64@4.52.5':
+
resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==}
+
cpu: [x64]
+
os: [darwin]
+
+
'@rollup/rollup-freebsd-arm64@4.52.5':
+
resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==}
+
cpu: [arm64]
+
os: [freebsd]
+
+
'@rollup/rollup-freebsd-x64@4.52.5':
+
resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==}
+
cpu: [x64]
+
os: [freebsd]
+
+
'@rollup/rollup-linux-arm-gnueabihf@4.52.5':
+
resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==}
+
cpu: [arm]
+
os: [linux]
+
+
'@rollup/rollup-linux-arm-musleabihf@4.52.5':
+
resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==}
+
cpu: [arm]
+
os: [linux]
+
+
'@rollup/rollup-linux-arm64-gnu@4.52.5':
+
resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==}
+
cpu: [arm64]
+
os: [linux]
+
+
'@rollup/rollup-linux-arm64-musl@4.52.5':
+
resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==}
+
cpu: [arm64]
+
os: [linux]
+
+
'@rollup/rollup-linux-loong64-gnu@4.52.5':
+
resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==}
+
cpu: [loong64]
+
os: [linux]
+
+
'@rollup/rollup-linux-ppc64-gnu@4.52.5':
+
resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==}
+
cpu: [ppc64]
+
os: [linux]
+
+
'@rollup/rollup-linux-riscv64-gnu@4.52.5':
+
resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==}
+
cpu: [riscv64]
+
os: [linux]
+
+
'@rollup/rollup-linux-riscv64-musl@4.52.5':
+
resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==}
+
cpu: [riscv64]
+
os: [linux]
+
+
'@rollup/rollup-linux-s390x-gnu@4.52.5':
+
resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==}
+
cpu: [s390x]
+
os: [linux]
+
+
'@rollup/rollup-linux-x64-gnu@4.52.5':
+
resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==}
+
cpu: [x64]
+
os: [linux]
+
+
'@rollup/rollup-linux-x64-musl@4.52.5':
+
resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==}
+
cpu: [x64]
+
os: [linux]
+
+
'@rollup/rollup-openharmony-arm64@4.52.5':
+
resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==}
+
cpu: [arm64]
+
os: [openharmony]
+
+
'@rollup/rollup-win32-arm64-msvc@4.52.5':
+
resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==}
+
cpu: [arm64]
+
os: [win32]
+
+
'@rollup/rollup-win32-ia32-msvc@4.52.5':
+
resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==}
+
cpu: [ia32]
+
os: [win32]
+
+
'@rollup/rollup-win32-x64-gnu@4.52.5':
+
resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==}
+
cpu: [x64]
+
os: [win32]
+
+
'@rollup/rollup-win32-x64-msvc@4.52.5':
+
resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==}
+
cpu: [x64]
+
os: [win32]
+
+
'@solid-devtools/debugger@0.28.1':
+
resolution: {integrity: sha512-6qIUI6VYkXoRnL8oF5bvh2KgH71qlJ18hNw/mwSyY6v48eb80ZR48/5PDXufUa3q+MBSuYa1uqTMwLewpay9eg==}
+
peerDependencies:
+
solid-js: ^1.9.0
+
+
'@solid-devtools/shared@0.20.0':
+
resolution: {integrity: sha512-o5TACmUOQsxpzpOKCjbQqGk8wL8PMi+frXG9WNu4Lh3PQVUB6hs95Kl/S8xc++zwcMguUKZJn8h5URUiMOca6Q==}
+
peerDependencies:
+
solid-js: ^1.9.0
+
+
'@solid-primitives/bounds@0.1.3':
+
resolution: {integrity: sha512-UbiyKMdSPmtijcEDnYLQL3zzaejpwWDAJJ4Gt5P0hgVs6A72piov0GyNw7V2SroH7NZFwxlYS22YmOr8A5xc1Q==}
+
peerDependencies:
+
solid-js: ^1.6.12
+
+
'@solid-primitives/event-listener@2.4.3':
+
resolution: {integrity: sha512-h4VqkYFv6Gf+L7SQj+Y6puigL/5DIi7x5q07VZET7AWcS+9/G3WfIE9WheniHWJs51OEkRB43w6lDys5YeFceg==}
+
peerDependencies:
+
solid-js: ^1.6.12
+
+
'@solid-primitives/keyboard@1.3.3':
+
resolution: {integrity: sha512-9dQHTTgLBqyAI7aavtO+HnpTVJgWQA1ghBSrmLtMu1SMxLPDuLfuNr+Tk5udb4AL4Ojg7h9JrKOGEEDqsJXWJA==}
+
peerDependencies:
+
solid-js: ^1.6.12
+
+
'@solid-primitives/media@2.3.3':
+
resolution: {integrity: sha512-hQ4hLOGvfbugQi5Eu1BFWAIJGIAzztq9x0h02xgBGl2l0Jaa3h7tg6bz5tV1NSuNYVGio4rPoa7zVQQLkkx9dA==}
+
peerDependencies:
+
solid-js: ^1.6.12
+
+
'@solid-primitives/refs@1.1.2':
+
resolution: {integrity: sha512-K7tf2thy7L+YJjdqXspXOg5xvNEOH8tgEWsp0+1mQk3obHBRD6hEjYZk7p7FlJphSZImS35je3UfmWuD7MhDfg==}
+
peerDependencies:
+
solid-js: ^1.6.12
+
+
'@solid-primitives/resize-observer@2.1.3':
+
resolution: {integrity: sha512-zBLje5E06TgOg93S7rGPldmhDnouNGhvfZVKOp+oG2XU8snA+GoCSSCz1M+jpNAg5Ek2EakU5UVQqL152WmdXQ==}
+
peerDependencies:
+
solid-js: ^1.6.12
+
+
'@solid-primitives/rootless@1.5.2':
+
resolution: {integrity: sha512-9HULb0QAzL2r47CCad0M+NKFtQ+LrGGNHZfteX/ThdGvKIg2o2GYhBooZubTCd/RTu2l2+Nw4s+dEfiDGvdrrQ==}
+
peerDependencies:
+
solid-js: ^1.6.12
+
+
'@solid-primitives/scheduled@1.5.2':
+
resolution: {integrity: sha512-/j2igE0xyNaHhj6kMfcUQn5rAVSTLbAX+CDEBm25hSNBmNiHLu2lM7Usj2kJJ5j36D67bE8wR1hBNA8hjtvsQA==}
+
peerDependencies:
+
solid-js: ^1.6.12
+
+
'@solid-primitives/static-store@0.1.2':
+
resolution: {integrity: sha512-ReK+5O38lJ7fT+L6mUFvUr6igFwHBESZF+2Ug842s7fvlVeBdIVEdTCErygff6w7uR6+jrr7J8jQo+cYrEq4Iw==}
+
peerDependencies:
+
solid-js: ^1.6.12
+
+
'@solid-primitives/styles@0.1.2':
+
resolution: {integrity: sha512-7iX5K+J5b1PRrbgw3Ki92uvU2LgQ0Kd/QMsrAZxDg5dpUBwMyTijZkA3bbs1ikZsT1oQhS41bTyKbjrXeU0Awg==}
+
peerDependencies:
+
solid-js: ^1.6.12
+
+
'@solid-primitives/utils@6.3.2':
+
resolution: {integrity: sha512-hZ/M/qr25QOCcwDPOHtGjxTD8w2mNyVAYvcfgwzBHq2RwNqHNdDNsMZYap20+ruRwW4A3Cdkczyoz0TSxLCAPQ==}
+
peerDependencies:
+
solid-js: ^1.6.12
+
+
'@types/babel__core@7.20.5':
+
resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
+
+
'@types/babel__generator@7.27.0':
+
resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
+
+
'@types/babel__template@7.4.4':
+
resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
+
+
'@types/babel__traverse@7.28.0':
+
resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
+
+
'@types/estree@1.0.8':
+
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
+
babel-plugin-jsx-dom-expressions@0.40.1:
+
resolution: {integrity: sha512-b4iHuirqK7RgaMzB2Lsl7MqrlDgQtVRSSazyrmx7wB3T759ggGjod5Rkok5MfHjQXhR7tRPmdwoeGPqBnW2KfA==}
+
peerDependencies:
+
'@babel/core': ^7.20.12
+
+
babel-preset-solid@1.9.9:
+
resolution: {integrity: sha512-pCnxWrciluXCeli/dj5PIEHgbNzim3evtTn12snjqqg8QZWJNMjH1AWIp4iG/tbVjqQ72aBEymMSagvmgxubXw==}
+
peerDependencies:
+
'@babel/core': ^7.0.0
+
solid-js: ^1.9.8
+
peerDependenciesMeta:
+
solid-js:
+
optional: true
+
+
browserslist@4.25.4:
+
resolution: {integrity: sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==}
+
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+
hasBin: true
+
+
caniuse-lite@1.0.30001741:
+
resolution: {integrity: sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==}
+
+
convert-source-map@2.0.0:
+
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+
csstype@3.1.3:
+
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+
+
debug@4.4.1:
+
resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
+
engines: {node: '>=6.0'}
+
peerDependencies:
+
supports-color: '*'
+
peerDependenciesMeta:
+
supports-color:
+
optional: true
+
+
electron-to-chromium@1.5.214:
+
resolution: {integrity: sha512-TpvUNdha+X3ybfU78NoQatKvQEm1oq3lf2QbnmCEdw+Bd9RuIAY+hJTvq1avzHM0f7EJfnH3vbCnbzKzisc/9Q==}
+
+
entities@6.0.1:
+
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
+
engines: {node: '>=0.12'}
+
+
esbuild@0.25.11:
+
resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==}
+
engines: {node: '>=18'}
+
hasBin: true
+
+
escalade@3.2.0:
+
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+
engines: {node: '>=6'}
+
+
fdir@6.5.0:
+
resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+
engines: {node: '>=12.0.0'}
+
peerDependencies:
+
picomatch: ^3 || ^4
+
peerDependenciesMeta:
+
picomatch:
+
optional: true
+
+
fsevents@2.3.3:
+
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+
os: [darwin]
+
+
gensync@1.0.0-beta.2:
+
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+
engines: {node: '>=6.9.0'}
+
+
html-entities@2.3.3:
+
resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==}
+
+
is-what@4.1.16:
+
resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==}
+
engines: {node: '>=12.13'}
+
+
js-tokens@4.0.0:
+
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+
jsesc@3.1.0:
+
resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+
engines: {node: '>=6'}
+
hasBin: true
+
+
json5@2.2.3:
+
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+
engines: {node: '>=6'}
+
hasBin: true
+
+
lru-cache@5.1.1:
+
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
+
merge-anything@5.1.7:
+
resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==}
+
engines: {node: '>=12.13'}
+
+
ms@2.1.3:
+
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+
nanoid@3.3.11:
+
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+
hasBin: true
+
+
node-releases@2.0.20:
+
resolution: {integrity: sha512-7gK6zSXEH6neM212JgfYFXe+GmZQM+fia5SsusuBIUgnPheLFBmIPhtFoAQRj8/7wASYQnbDlHPVwY0BefoFgA==}
+
+
parse5@7.3.0:
+
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
+
+
picocolors@1.1.1:
+
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+
picomatch@4.0.3:
+
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
+
engines: {node: '>=12'}
+
+
postcss@8.5.6:
+
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
+
engines: {node: ^10 || ^12 || >=14}
+
+
rollup@4.52.5:
+
resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==}
+
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+
hasBin: true
+
+
semver@6.3.1:
+
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+
hasBin: true
+
+
seroval-plugins@1.3.3:
+
resolution: {integrity: sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==}
+
engines: {node: '>=10'}
+
peerDependencies:
+
seroval: ^1.0
+
+
seroval@1.3.2:
+
resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==}
+
engines: {node: '>=10'}
+
+
solid-devtools@0.34.3:
+
resolution: {integrity: sha512-ZQua959n+Zu3sLbm9g0IRjYUb1YYlYbu83PWLRoKbSsq0a3ItQNhnS2OBU7rQNmOKZiMexNo9Z3izas9BcOKDg==}
+
peerDependencies:
+
solid-js: ^1.9.0
+
vite: ^2.2.3 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0
+
peerDependenciesMeta:
+
vite:
+
optional: true
+
+
solid-js@1.9.9:
+
resolution: {integrity: sha512-A0ZBPJQldAeGCTW0YRYJmt7RCeh5rbFfPZ2aOttgYnctHE7HgKeHCBB/PVc2P7eOfmNXqMFFFoYYdm3S4dcbkA==}
+
+
solid-refresh@0.6.3:
+
resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==}
+
peerDependencies:
+
solid-js: ^1.3
+
+
source-map-js@1.2.1:
+
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+
engines: {node: '>=0.10.0'}
+
+
tinyglobby@0.2.15:
+
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
+
engines: {node: '>=12.0.0'}
+
+
typescript@5.9.2:
+
resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==}
+
engines: {node: '>=14.17'}
+
hasBin: true
+
+
update-browserslist-db@1.1.3:
+
resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
+
hasBin: true
+
peerDependencies:
+
browserslist: '>= 4.21.0'
+
+
validate-html-nesting@1.2.3:
+
resolution: {integrity: sha512-kdkWdCl6eCeLlRShJKbjVOU2kFKxMF8Ghu50n+crEoyx+VKm3FxAxF9z4DCy6+bbTOqNW0+jcIYRnjoIRzigRw==}
+
+
vite-plugin-solid@2.11.9:
+
resolution: {integrity: sha512-bTA6p+bspXZsuulSd2y6aTzegF8xGaJYcq1Uyh/mv+W4DQtzCgL9nN6n2fsTaxp/dMk+ZHHKgGndlNeooqHLKw==}
+
peerDependencies:
+
'@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.*
+
solid-js: ^1.7.2
+
vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
+
peerDependenciesMeta:
+
'@testing-library/jest-dom':
+
optional: true
+
+
vite@7.1.10:
+
resolution: {integrity: sha512-CmuvUBzVJ/e3HGxhg6cYk88NGgTnBoOo7ogtfJJ0fefUWAxN/WDSUa50o+oVBxuIhO8FoEZW0j2eW7sfjs5EtA==}
+
engines: {node: ^20.19.0 || >=22.12.0}
+
hasBin: true
+
peerDependencies:
+
'@types/node': ^20.19.0 || >=22.12.0
+
jiti: '>=1.21.0'
+
less: ^4.0.0
+
lightningcss: ^1.21.0
+
sass: ^1.70.0
+
sass-embedded: ^1.70.0
+
stylus: '>=0.54.8'
+
sugarss: ^5.0.0
+
terser: ^5.16.0
+
tsx: ^4.8.1
+
yaml: ^2.4.2
+
peerDependenciesMeta:
+
'@types/node':
+
optional: true
+
jiti:
+
optional: true
+
less:
+
optional: true
+
lightningcss:
+
optional: true
+
sass:
+
optional: true
+
sass-embedded:
+
optional: true
+
stylus:
+
optional: true
+
sugarss:
+
optional: true
+
terser:
+
optional: true
+
tsx:
+
optional: true
+
yaml:
+
optional: true
+
+
vitefu@1.1.1:
+
resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==}
+
peerDependencies:
+
vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0
+
peerDependenciesMeta:
+
vite:
+
optional: true
+
+
yallist@3.1.1:
+
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
+
snapshots:
+
+
'@babel/code-frame@7.27.1':
+
dependencies:
+
'@babel/helper-validator-identifier': 7.27.1
+
js-tokens: 4.0.0
+
picocolors: 1.1.1
+
+
'@babel/compat-data@7.28.4': {}
+
+
'@babel/core@7.28.4':
+
dependencies:
+
'@babel/code-frame': 7.27.1
+
'@babel/generator': 7.28.3
+
'@babel/helper-compilation-targets': 7.27.2
+
'@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4)
+
'@babel/helpers': 7.28.4
+
'@babel/parser': 7.28.4
+
'@babel/template': 7.27.2
+
'@babel/traverse': 7.28.4
+
'@babel/types': 7.28.4
+
'@jridgewell/remapping': 2.3.5
+
convert-source-map: 2.0.0
+
debug: 4.4.1
+
gensync: 1.0.0-beta.2
+
json5: 2.2.3
+
semver: 6.3.1
+
transitivePeerDependencies:
+
- supports-color
+
+
'@babel/generator@7.28.3':
+
dependencies:
+
'@babel/parser': 7.28.4
+
'@babel/types': 7.28.4
+
'@jridgewell/gen-mapping': 0.3.13
+
'@jridgewell/trace-mapping': 0.3.30
+
jsesc: 3.1.0
+
+
'@babel/helper-compilation-targets@7.27.2':
+
dependencies:
+
'@babel/compat-data': 7.28.4
+
'@babel/helper-validator-option': 7.27.1
+
browserslist: 4.25.4
+
lru-cache: 5.1.1
+
semver: 6.3.1
+
+
'@babel/helper-globals@7.28.0': {}
+
+
'@babel/helper-module-imports@7.18.6':
+
dependencies:
+
'@babel/types': 7.28.4
+
+
'@babel/helper-module-imports@7.27.1':
+
dependencies:
+
'@babel/traverse': 7.28.4
+
'@babel/types': 7.28.4
+
transitivePeerDependencies:
+
- supports-color
+
+
'@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)':
+
dependencies:
+
'@babel/core': 7.28.4
+
'@babel/helper-module-imports': 7.27.1
+
'@babel/helper-validator-identifier': 7.27.1
+
'@babel/traverse': 7.28.4
+
transitivePeerDependencies:
+
- supports-color
+
+
'@babel/helper-plugin-utils@7.27.1': {}
+
+
'@babel/helper-string-parser@7.27.1': {}
+
+
'@babel/helper-validator-identifier@7.27.1': {}
+
+
'@babel/helper-validator-option@7.27.1': {}
+
+
'@babel/helpers@7.28.4':
+
dependencies:
+
'@babel/template': 7.27.2
+
'@babel/types': 7.28.4
+
+
'@babel/parser@7.28.4':
+
dependencies:
+
'@babel/types': 7.28.4
+
+
'@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)':
+
dependencies:
+
'@babel/core': 7.28.4
+
'@babel/helper-plugin-utils': 7.27.1
+
+
'@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.4)':
+
dependencies:
+
'@babel/core': 7.28.4
+
'@babel/helper-plugin-utils': 7.27.1
+
+
'@babel/template@7.27.2':
+
dependencies:
+
'@babel/code-frame': 7.27.1
+
'@babel/parser': 7.28.4
+
'@babel/types': 7.28.4
+
+
'@babel/traverse@7.28.4':
+
dependencies:
+
'@babel/code-frame': 7.27.1
+
'@babel/generator': 7.28.3
+
'@babel/helper-globals': 7.28.0
+
'@babel/parser': 7.28.4
+
'@babel/template': 7.27.2
+
'@babel/types': 7.28.4
+
debug: 4.4.1
+
transitivePeerDependencies:
+
- supports-color
+
+
'@babel/types@7.28.4':
+
dependencies:
+
'@babel/helper-string-parser': 7.27.1
+
'@babel/helper-validator-identifier': 7.27.1
+
+
'@esbuild/aix-ppc64@0.25.11':
+
optional: true
+
+
'@esbuild/android-arm64@0.25.11':
+
optional: true
+
+
'@esbuild/android-arm@0.25.11':
+
optional: true
+
+
'@esbuild/android-x64@0.25.11':
+
optional: true
+
+
'@esbuild/darwin-arm64@0.25.11':
+
optional: true
+
+
'@esbuild/darwin-x64@0.25.11':
+
optional: true
+
+
'@esbuild/freebsd-arm64@0.25.11':
+
optional: true
+
+
'@esbuild/freebsd-x64@0.25.11':
+
optional: true
+
+
'@esbuild/linux-arm64@0.25.11':
+
optional: true
+
+
'@esbuild/linux-arm@0.25.11':
+
optional: true
+
+
'@esbuild/linux-ia32@0.25.11':
+
optional: true
+
+
'@esbuild/linux-loong64@0.25.11':
+
optional: true
+
+
'@esbuild/linux-mips64el@0.25.11':
+
optional: true
+
+
'@esbuild/linux-ppc64@0.25.11':
+
optional: true
+
+
'@esbuild/linux-riscv64@0.25.11':
+
optional: true
+
+
'@esbuild/linux-s390x@0.25.11':
+
optional: true
+
+
'@esbuild/linux-x64@0.25.11':
+
optional: true
+
+
'@esbuild/netbsd-arm64@0.25.11':
+
optional: true
+
+
'@esbuild/netbsd-x64@0.25.11':
+
optional: true
+
+
'@esbuild/openbsd-arm64@0.25.11':
+
optional: true
+
+
'@esbuild/openbsd-x64@0.25.11':
+
optional: true
+
+
'@esbuild/openharmony-arm64@0.25.11':
+
optional: true
+
+
'@esbuild/sunos-x64@0.25.11':
+
optional: true
+
+
'@esbuild/win32-arm64@0.25.11':
+
optional: true
+
+
'@esbuild/win32-ia32@0.25.11':
+
optional: true
+
+
'@esbuild/win32-x64@0.25.11':
+
optional: true
+
+
'@jridgewell/gen-mapping@0.3.13':
+
dependencies:
+
'@jridgewell/sourcemap-codec': 1.5.5
+
'@jridgewell/trace-mapping': 0.3.30
+
+
'@jridgewell/remapping@2.3.5':
+
dependencies:
+
'@jridgewell/gen-mapping': 0.3.13
+
'@jridgewell/trace-mapping': 0.3.30
+
+
'@jridgewell/resolve-uri@3.1.2': {}
+
+
'@jridgewell/sourcemap-codec@1.5.5': {}
+
+
'@jridgewell/trace-mapping@0.3.30':
+
dependencies:
+
'@jridgewell/resolve-uri': 3.1.2
+
'@jridgewell/sourcemap-codec': 1.5.5
+
+
'@nothing-but/utils@0.17.0': {}
+
+
'@rollup/rollup-android-arm-eabi@4.52.5':
+
optional: true
+
+
'@rollup/rollup-android-arm64@4.52.5':
+
optional: true
+
+
'@rollup/rollup-darwin-arm64@4.52.5':
+
optional: true
+
+
'@rollup/rollup-darwin-x64@4.52.5':
+
optional: true
+
+
'@rollup/rollup-freebsd-arm64@4.52.5':
+
optional: true
+
+
'@rollup/rollup-freebsd-x64@4.52.5':
+
optional: true
+
+
'@rollup/rollup-linux-arm-gnueabihf@4.52.5':
+
optional: true
+
+
'@rollup/rollup-linux-arm-musleabihf@4.52.5':
+
optional: true
+
+
'@rollup/rollup-linux-arm64-gnu@4.52.5':
+
optional: true
+
+
'@rollup/rollup-linux-arm64-musl@4.52.5':
+
optional: true
+
+
'@rollup/rollup-linux-loong64-gnu@4.52.5':
+
optional: true
+
+
'@rollup/rollup-linux-ppc64-gnu@4.52.5':
+
optional: true
+
+
'@rollup/rollup-linux-riscv64-gnu@4.52.5':
+
optional: true
+
+
'@rollup/rollup-linux-riscv64-musl@4.52.5':
+
optional: true
+
+
'@rollup/rollup-linux-s390x-gnu@4.52.5':
+
optional: true
+
+
'@rollup/rollup-linux-x64-gnu@4.52.5':
+
optional: true
+
+
'@rollup/rollup-linux-x64-musl@4.52.5':
+
optional: true
+
+
'@rollup/rollup-openharmony-arm64@4.52.5':
+
optional: true
+
+
'@rollup/rollup-win32-arm64-msvc@4.52.5':
+
optional: true
+
+
'@rollup/rollup-win32-ia32-msvc@4.52.5':
+
optional: true
+
+
'@rollup/rollup-win32-x64-gnu@4.52.5':
+
optional: true
+
+
'@rollup/rollup-win32-x64-msvc@4.52.5':
+
optional: true
+
+
'@solid-devtools/debugger@0.28.1(solid-js@1.9.9)':
+
dependencies:
+
'@nothing-but/utils': 0.17.0
+
'@solid-devtools/shared': 0.20.0(solid-js@1.9.9)
+
'@solid-primitives/bounds': 0.1.3(solid-js@1.9.9)
+
'@solid-primitives/event-listener': 2.4.3(solid-js@1.9.9)
+
'@solid-primitives/keyboard': 1.3.3(solid-js@1.9.9)
+
'@solid-primitives/rootless': 1.5.2(solid-js@1.9.9)
+
'@solid-primitives/scheduled': 1.5.2(solid-js@1.9.9)
+
'@solid-primitives/static-store': 0.1.2(solid-js@1.9.9)
+
'@solid-primitives/utils': 6.3.2(solid-js@1.9.9)
+
solid-js: 1.9.9
+
+
'@solid-devtools/shared@0.20.0(solid-js@1.9.9)':
+
dependencies:
+
'@nothing-but/utils': 0.17.0
+
'@solid-primitives/event-listener': 2.4.3(solid-js@1.9.9)
+
'@solid-primitives/media': 2.3.3(solid-js@1.9.9)
+
'@solid-primitives/refs': 1.1.2(solid-js@1.9.9)
+
'@solid-primitives/rootless': 1.5.2(solid-js@1.9.9)
+
'@solid-primitives/scheduled': 1.5.2(solid-js@1.9.9)
+
'@solid-primitives/static-store': 0.1.2(solid-js@1.9.9)
+
'@solid-primitives/styles': 0.1.2(solid-js@1.9.9)
+
'@solid-primitives/utils': 6.3.2(solid-js@1.9.9)
+
solid-js: 1.9.9
+
+
'@solid-primitives/bounds@0.1.3(solid-js@1.9.9)':
+
dependencies:
+
'@solid-primitives/event-listener': 2.4.3(solid-js@1.9.9)
+
'@solid-primitives/resize-observer': 2.1.3(solid-js@1.9.9)
+
'@solid-primitives/static-store': 0.1.2(solid-js@1.9.9)
+
'@solid-primitives/utils': 6.3.2(solid-js@1.9.9)
+
solid-js: 1.9.9
+
+
'@solid-primitives/event-listener@2.4.3(solid-js@1.9.9)':
+
dependencies:
+
'@solid-primitives/utils': 6.3.2(solid-js@1.9.9)
+
solid-js: 1.9.9
+
+
'@solid-primitives/keyboard@1.3.3(solid-js@1.9.9)':
+
dependencies:
+
'@solid-primitives/event-listener': 2.4.3(solid-js@1.9.9)
+
'@solid-primitives/rootless': 1.5.2(solid-js@1.9.9)
+
'@solid-primitives/utils': 6.3.2(solid-js@1.9.9)
+
solid-js: 1.9.9
+
+
'@solid-primitives/media@2.3.3(solid-js@1.9.9)':
+
dependencies:
+
'@solid-primitives/event-listener': 2.4.3(solid-js@1.9.9)
+
'@solid-primitives/rootless': 1.5.2(solid-js@1.9.9)
+
'@solid-primitives/static-store': 0.1.2(solid-js@1.9.9)
+
'@solid-primitives/utils': 6.3.2(solid-js@1.9.9)
+
solid-js: 1.9.9
+
+
'@solid-primitives/refs@1.1.2(solid-js@1.9.9)':
+
dependencies:
+
'@solid-primitives/utils': 6.3.2(solid-js@1.9.9)
+
solid-js: 1.9.9
+
+
'@solid-primitives/resize-observer@2.1.3(solid-js@1.9.9)':
+
dependencies:
+
'@solid-primitives/event-listener': 2.4.3(solid-js@1.9.9)
+
'@solid-primitives/rootless': 1.5.2(solid-js@1.9.9)
+
'@solid-primitives/static-store': 0.1.2(solid-js@1.9.9)
+
'@solid-primitives/utils': 6.3.2(solid-js@1.9.9)
+
solid-js: 1.9.9
+
+
'@solid-primitives/rootless@1.5.2(solid-js@1.9.9)':
+
dependencies:
+
'@solid-primitives/utils': 6.3.2(solid-js@1.9.9)
+
solid-js: 1.9.9
+
+
'@solid-primitives/scheduled@1.5.2(solid-js@1.9.9)':
+
dependencies:
+
solid-js: 1.9.9
+
+
'@solid-primitives/static-store@0.1.2(solid-js@1.9.9)':
+
dependencies:
+
'@solid-primitives/utils': 6.3.2(solid-js@1.9.9)
+
solid-js: 1.9.9
+
+
'@solid-primitives/styles@0.1.2(solid-js@1.9.9)':
+
dependencies:
+
'@solid-primitives/rootless': 1.5.2(solid-js@1.9.9)
+
'@solid-primitives/utils': 6.3.2(solid-js@1.9.9)
+
solid-js: 1.9.9
+
+
'@solid-primitives/utils@6.3.2(solid-js@1.9.9)':
+
dependencies:
+
solid-js: 1.9.9
+
+
'@types/babel__core@7.20.5':
+
dependencies:
+
'@babel/parser': 7.28.4
+
'@babel/types': 7.28.4
+
'@types/babel__generator': 7.27.0
+
'@types/babel__template': 7.4.4
+
'@types/babel__traverse': 7.28.0
+
+
'@types/babel__generator@7.27.0':
+
dependencies:
+
'@babel/types': 7.28.4
+
+
'@types/babel__template@7.4.4':
+
dependencies:
+
'@babel/parser': 7.28.4
+
'@babel/types': 7.28.4
+
+
'@types/babel__traverse@7.28.0':
+
dependencies:
+
'@babel/types': 7.28.4
+
+
'@types/estree@1.0.8': {}
+
+
babel-plugin-jsx-dom-expressions@0.40.1(@babel/core@7.28.4):
+
dependencies:
+
'@babel/core': 7.28.4
+
'@babel/helper-module-imports': 7.18.6
+
'@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4)
+
'@babel/types': 7.28.4
+
html-entities: 2.3.3
+
parse5: 7.3.0
+
validate-html-nesting: 1.2.3
+
+
babel-preset-solid@1.9.9(@babel/core@7.28.4)(solid-js@1.9.9):
+
dependencies:
+
'@babel/core': 7.28.4
+
babel-plugin-jsx-dom-expressions: 0.40.1(@babel/core@7.28.4)
+
optionalDependencies:
+
solid-js: 1.9.9
+
+
browserslist@4.25.4:
+
dependencies:
+
caniuse-lite: 1.0.30001741
+
electron-to-chromium: 1.5.214
+
node-releases: 2.0.20
+
update-browserslist-db: 1.1.3(browserslist@4.25.4)
+
+
caniuse-lite@1.0.30001741: {}
+
+
convert-source-map@2.0.0: {}
+
+
csstype@3.1.3: {}
+
+
debug@4.4.1:
+
dependencies:
+
ms: 2.1.3
+
+
electron-to-chromium@1.5.214: {}
+
+
entities@6.0.1: {}
+
+
esbuild@0.25.11:
+
optionalDependencies:
+
'@esbuild/aix-ppc64': 0.25.11
+
'@esbuild/android-arm': 0.25.11
+
'@esbuild/android-arm64': 0.25.11
+
'@esbuild/android-x64': 0.25.11
+
'@esbuild/darwin-arm64': 0.25.11
+
'@esbuild/darwin-x64': 0.25.11
+
'@esbuild/freebsd-arm64': 0.25.11
+
'@esbuild/freebsd-x64': 0.25.11
+
'@esbuild/linux-arm': 0.25.11
+
'@esbuild/linux-arm64': 0.25.11
+
'@esbuild/linux-ia32': 0.25.11
+
'@esbuild/linux-loong64': 0.25.11
+
'@esbuild/linux-mips64el': 0.25.11
+
'@esbuild/linux-ppc64': 0.25.11
+
'@esbuild/linux-riscv64': 0.25.11
+
'@esbuild/linux-s390x': 0.25.11
+
'@esbuild/linux-x64': 0.25.11
+
'@esbuild/netbsd-arm64': 0.25.11
+
'@esbuild/netbsd-x64': 0.25.11
+
'@esbuild/openbsd-arm64': 0.25.11
+
'@esbuild/openbsd-x64': 0.25.11
+
'@esbuild/openharmony-arm64': 0.25.11
+
'@esbuild/sunos-x64': 0.25.11
+
'@esbuild/win32-arm64': 0.25.11
+
'@esbuild/win32-ia32': 0.25.11
+
'@esbuild/win32-x64': 0.25.11
+
+
escalade@3.2.0: {}
+
+
fdir@6.5.0(picomatch@4.0.3):
+
optionalDependencies:
+
picomatch: 4.0.3
+
+
fsevents@2.3.3:
+
optional: true
+
+
gensync@1.0.0-beta.2: {}
+
+
html-entities@2.3.3: {}
+
+
is-what@4.1.16: {}
+
+
js-tokens@4.0.0: {}
+
+
jsesc@3.1.0: {}
+
+
json5@2.2.3: {}
+
+
lru-cache@5.1.1:
+
dependencies:
+
yallist: 3.1.1
+
+
merge-anything@5.1.7:
+
dependencies:
+
is-what: 4.1.16
+
+
ms@2.1.3: {}
+
+
nanoid@3.3.11: {}
+
+
node-releases@2.0.20: {}
+
+
parse5@7.3.0:
+
dependencies:
+
entities: 6.0.1
+
+
picocolors@1.1.1: {}
+
+
picomatch@4.0.3: {}
+
+
postcss@8.5.6:
+
dependencies:
+
nanoid: 3.3.11
+
picocolors: 1.1.1
+
source-map-js: 1.2.1
+
+
rollup@4.52.5:
+
dependencies:
+
'@types/estree': 1.0.8
+
optionalDependencies:
+
'@rollup/rollup-android-arm-eabi': 4.52.5
+
'@rollup/rollup-android-arm64': 4.52.5
+
'@rollup/rollup-darwin-arm64': 4.52.5
+
'@rollup/rollup-darwin-x64': 4.52.5
+
'@rollup/rollup-freebsd-arm64': 4.52.5
+
'@rollup/rollup-freebsd-x64': 4.52.5
+
'@rollup/rollup-linux-arm-gnueabihf': 4.52.5
+
'@rollup/rollup-linux-arm-musleabihf': 4.52.5
+
'@rollup/rollup-linux-arm64-gnu': 4.52.5
+
'@rollup/rollup-linux-arm64-musl': 4.52.5
+
'@rollup/rollup-linux-loong64-gnu': 4.52.5
+
'@rollup/rollup-linux-ppc64-gnu': 4.52.5
+
'@rollup/rollup-linux-riscv64-gnu': 4.52.5
+
'@rollup/rollup-linux-riscv64-musl': 4.52.5
+
'@rollup/rollup-linux-s390x-gnu': 4.52.5
+
'@rollup/rollup-linux-x64-gnu': 4.52.5
+
'@rollup/rollup-linux-x64-musl': 4.52.5
+
'@rollup/rollup-openharmony-arm64': 4.52.5
+
'@rollup/rollup-win32-arm64-msvc': 4.52.5
+
'@rollup/rollup-win32-ia32-msvc': 4.52.5
+
'@rollup/rollup-win32-x64-gnu': 4.52.5
+
'@rollup/rollup-win32-x64-msvc': 4.52.5
+
fsevents: 2.3.3
+
+
semver@6.3.1: {}
+
+
seroval-plugins@1.3.3(seroval@1.3.2):
+
dependencies:
+
seroval: 1.3.2
+
+
seroval@1.3.2: {}
+
+
solid-devtools@0.34.3(solid-js@1.9.9)(vite@7.1.10):
+
dependencies:
+
'@babel/core': 7.28.4
+
'@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4)
+
'@babel/types': 7.28.4
+
'@solid-devtools/debugger': 0.28.1(solid-js@1.9.9)
+
'@solid-devtools/shared': 0.20.0(solid-js@1.9.9)
+
solid-js: 1.9.9
+
optionalDependencies:
+
vite: 7.1.10
+
transitivePeerDependencies:
+
- supports-color
+
+
solid-js@1.9.9:
+
dependencies:
+
csstype: 3.1.3
+
seroval: 1.3.2
+
seroval-plugins: 1.3.3(seroval@1.3.2)
+
+
solid-refresh@0.6.3(solid-js@1.9.9):
+
dependencies:
+
'@babel/generator': 7.28.3
+
'@babel/helper-module-imports': 7.27.1
+
'@babel/types': 7.28.4
+
solid-js: 1.9.9
+
transitivePeerDependencies:
+
- supports-color
+
+
source-map-js@1.2.1: {}
+
+
tinyglobby@0.2.15:
+
dependencies:
+
fdir: 6.5.0(picomatch@4.0.3)
+
picomatch: 4.0.3
+
+
typescript@5.9.2: {}
+
+
update-browserslist-db@1.1.3(browserslist@4.25.4):
+
dependencies:
+
browserslist: 4.25.4
+
escalade: 3.2.0
+
picocolors: 1.1.1
+
+
validate-html-nesting@1.2.3: {}
+
+
vite-plugin-solid@2.11.9(solid-js@1.9.9)(vite@7.1.10):
+
dependencies:
+
'@babel/core': 7.28.4
+
'@types/babel__core': 7.20.5
+
babel-preset-solid: 1.9.9(@babel/core@7.28.4)(solid-js@1.9.9)
+
merge-anything: 5.1.7
+
solid-js: 1.9.9
+
solid-refresh: 0.6.3(solid-js@1.9.9)
+
vite: 7.1.10
+
vitefu: 1.1.1(vite@7.1.10)
+
transitivePeerDependencies:
+
- supports-color
+
+
vite@7.1.10:
+
dependencies:
+
esbuild: 0.25.11
+
fdir: 6.5.0(picomatch@4.0.3)
+
picomatch: 4.0.3
+
postcss: 8.5.6
+
rollup: 4.52.5
+
tinyglobby: 0.2.15
+
optionalDependencies:
+
fsevents: 2.3.3
+
+
vitefu@1.1.1(vite@7.1.10):
+
optionalDependencies:
+
vite: 7.1.10
+
+
yallist@3.1.1: {}
+5
postcss.config.cjs
···
+
module.exports = {
+
plugins: {
+
'@pandacss/dev/postcss': {},
+
},
+
}
+264
src/App.tsx
···
+
import { createSignal, For } from "solid-js";
+
+
import {
+
CheckIcon,
+
ChevronsUpDownIcon,
+
ClipboardIcon,
+
Trash2Icon,
+
} from "lucide-solid";
+
import { Button } from "./components/ui/button";
+
import { Card } from "./components/ui/card";
+
import { Stack, Box, StackProps, HStack } from "styled-system/jsx";
+
import { FileUpload } from "./components/ui/file-upload";
+
import { IconButton } from "./components/ui/icon-button";
+
import { Text } from "./components/ui/text";
+
+
import { AtprotoDid } from "@atcute/lexicons/syntax";
+
import {
+
Account,
+
accounts,
+
selectedAccount,
+
setSelectedAccount,
+
} from "./lib/accounts";
+
import { Toaster } from "~/components/Toaster";
+
import { createListCollection, Select } from "./components/ui/select";
+
+
import { addTask, tasks, TaskState } from "./lib/task";
+
import Task from "./components/FileTask";
+
import Settings from "./components/Settings";
+
+
const App = () => {
+
const collection = () =>
+
createListCollection({
+
items: accounts().map((account) => ({
+
label: account.handle ?? account.did,
+
value: account.did,
+
})),
+
});
+
+
const AccountSelect = () => (
+
<Select.Root
+
positioning={{ sameWidth: true }}
+
value={selectedAccount() ? [selectedAccount()!] : []}
+
onValueChange={(details) =>
+
setSelectedAccount(details.value[0] as AtprotoDid)
+
}
+
collection={collection()}
+
>
+
<Select.Control>
+
<Select.Trigger
+
border="none"
+
p="2"
+
pl="0"
+
minW="8rem"
+
maxW="xs"
+
boxShadow={{ _focus: "none" }}
+
justifyContent="end"
+
disabled={accounts().length === 0}
+
>
+
<Box>
+
{selectedAccount() ? "@" : ""}
+
<Select.ValueText
+
overflow="hidden"
+
textOverflow="ellipsis"
+
whiteSpace="nowrap"
+
placeholder="account"
+
/>
+
</Box>
+
<ChevronsUpDownIcon />
+
</Select.Trigger>
+
</Select.Control>
+
<Select.Positioner>
+
<Select.Content>
+
<Select.ItemGroup>
+
<For each={collection().items}>
+
{(item) => (
+
<Select.Item item={item}>
+
<Select.ItemText
+
overflow="hidden"
+
textOverflow="ellipsis"
+
whiteSpace="nowrap"
+
>
+
@{item.label}
+
</Select.ItemText>
+
<Select.ItemIndicator pl="2">
+
<CheckIcon />
+
</Select.ItemIndicator>
+
</Select.Item>
+
)}
+
</For>
+
</Select.ItemGroup>
+
</Select.Content>
+
</Select.Positioner>
+
</Select.Root>
+
);
+
+
return (
+
<Box
+
w="100vw"
+
h="100vh"
+
display="flex"
+
justifyContent="center"
+
alignItems="center"
+
>
+
<Card.Root maxW="3xl" w="90%">
+
<Card.Header>
+
<Card.Title w="full">
+
<Stack direction="row" align="center">
+
<Text>bsky voice memo</Text>
+
<div style="flex-grow: 1;"></div>
+
<AccountSelect />
+
<Settings />
+
</Stack>
+
</Card.Title>
+
<Card.Description>
+
<ol>
+
<li>1. upload a voice memo</li>
+
<li>2. it will automatically be converted to a video</li>
+
<li>
+
3. (optional) add an account for posting and using pfp in video
+
</li>
+
</ol>
+
</Card.Description>
+
</Card.Header>
+
<Card.Body>
+
<Stack
+
gap={{ base: "4", smDown: "0" }}
+
direction={{ base: "row", smDown: "column" }}
+
>
+
<Upload
+
flex="4"
+
acceptedFiles={[]}
+
onFileAccept={(e) =>
+
e.files.forEach((file) => addTask(selectedAccount(), file))
+
}
+
/>
+
<Tasks
+
flex="3"
+
minH="20rem"
+
maxH="20rem"
+
minW="0"
+
overflowY="scroll"
+
currentTasks={tasks.values().toArray()}
+
selectedAccount={accounts().find(
+
(account) => account.did === selectedAccount(),
+
)}
+
/>
+
</Stack>
+
</Card.Body>
+
{/*<Card.Footer gap="3"></Card.Footer>*/}
+
</Card.Root>
+
<Toaster />
+
</Box>
+
);
+
};
+
export default App;
+
+
type TasksProps = StackProps & {
+
currentTasks: TaskState[];
+
selectedAccount: Account | undefined;
+
};
+
+
const Tasks = (props: TasksProps) => (
+
<Stack
+
border="1px solid var(--colors-border-subtle)"
+
gap="1.5"
+
p="2"
+
rounded="sm"
+
justifyContent={props.currentTasks.length === 0 ? "center" : undefined}
+
alignItems={props.currentTasks.length === 0 ? "center" : undefined}
+
{...props}
+
>
+
<For
+
each={props.currentTasks}
+
fallback={
+
<Box
+
fontSize="sm"
+
display="flex"
+
justifyContent="center"
+
alignItems="center"
+
h="full"
+
>
+
no files processed (yet!)
+
</Box>
+
}
+
>
+
{(process) => Task(process, props.selectedAccount)}
+
</For>
+
</Stack>
+
);
+
+
const getAudioClipboard = async () => {
+
try {
+
const clipboardItems = await navigator.clipboard.read();
+
for (const item of clipboardItems) {
+
console.log(item);
+
const type = item.types.find((type) => type.startsWith("audio/"));
+
if (type) {
+
const blob = await item.getType(type);
+
const file = new File([blob], `audio.${type.split("/")[1]}`, { type });
+
return file;
+
}
+
}
+
return;
+
} catch (err) {
+
console.error(err);
+
return;
+
}
+
};
+
+
const Upload = (props: FileUpload.RootProps) => {
+
return (
+
<FileUpload.Root maxFiles={100} {...props}>
+
<FileUpload.Dropzone>
+
<FileUpload.Label>drop your files here</FileUpload.Label>
+
<HStack alignItems="center">
+
<FileUpload.Trigger
+
asChild={(triggerProps) => (
+
<Button size="sm" {...triggerProps()}>
+
or pick file
+
</Button>
+
)}
+
/>
+
{/*<IconButton
+
size="sm"
+
onClick={() =>
+
getAudioClipboard().then((file) => {
+
if (!file) return;
+
addTask(selectedAccount(), file);
+
})
+
}
+
variant="subtle"
+
>
+
<ClipboardIcon />
+
</IconButton>*/}
+
</HStack>
+
</FileUpload.Dropzone>
+
<FileUpload.ItemGroup>
+
<FileUpload.Context>
+
{(fileUpload) => (
+
<For each={fileUpload().acceptedFiles}>
+
{(file) => (
+
<FileUpload.Item file={file}>
+
<FileUpload.ItemPreview type="image/*">
+
<FileUpload.ItemPreviewImage />
+
</FileUpload.ItemPreview>
+
<FileUpload.ItemName />
+
<FileUpload.ItemSizeText />
+
<FileUpload.ItemDeleteTrigger
+
asChild={(triggerProps) => (
+
<IconButton variant="link" size="sm" {...triggerProps()}>
+
<Trash2Icon />
+
</IconButton>
+
)}
+
/>
+
</FileUpload.Item>
+
)}
+
</For>
+
)}
+
</FileUpload.Context>
+
</FileUpload.ItemGroup>
+
<FileUpload.HiddenInput />
+
</FileUpload.Root>
+
);
+
};
+129
src/components/FileTask.tsx
···
+
import { CircleAlertIcon, DownloadIcon, SendIcon } from "lucide-solid";
+
import { Stack } from "styled-system/jsx";
+
import { IconButton } from "~/components/ui/icon-button";
+
import { Spinner } from "~/components/ui/spinner";
+
import { Popover } from "~/components/ui/popover";
+
+
import { css } from "styled-system/css";
+
import { Account } from "~/lib/accounts";
+
+
import { TaskState } from "~/lib/task";
+
import PostDialog from "./PostDialog";
+
+
const downloadFile = (blob: Blob, fileName: string) => {
+
const url = URL.createObjectURL(blob);
+
const a = document.createElement("a");
+
a.href = url;
+
// handle file names with periods in them
+
a.download = fileName;
+
document.body.appendChild(a);
+
a.click();
+
document.body.removeChild(a);
+
URL.revokeObjectURL(url);
+
};
+
+
const Task = (process: TaskState, selectedAccount: Account | undefined) => {
+
const statusError = (error: string) => (
+
<Popover.Root>
+
<Popover.Trigger
+
asChild={(triggerProps) => (
+
<IconButton
+
{...triggerProps()}
+
color={{
+
base: "red",
+
_hover: "red.emphasized",
+
}}
+
variant="ghost"
+
>
+
<CircleAlertIcon />
+
</IconButton>
+
)}
+
/>
+
<Popover.Positioner>
+
<Popover.Content>error processing file: {error}</Popover.Content>
+
</Popover.Positioner>
+
</Popover.Root>
+
);
+
const statusSuccess = (result: Blob) => {
+
return (
+
<>
+
<IconButton
+
color={{ _hover: "colorPalette.emphasized" }}
+
onClick={() =>
+
downloadFile(
+
result,
+
process.file.name
+
.split(".")
+
.slice(0, -1)
+
.join(".")
+
.concat(".mp4"),
+
)
+
}
+
variant="ghost"
+
>
+
<DownloadIcon />
+
</IconButton>
+
<PostDialog
+
trigger={(props) => (
+
<IconButton
+
{...props}
+
disabled={selectedAccount === undefined}
+
color={{ _hover: "colorPalette.emphasized" }}
+
variant="ghost"
+
>
+
<SendIcon />
+
</IconButton>
+
)}
+
account={selectedAccount}
+
result={result}
+
/>
+
</>
+
);
+
};
+
const statusProcessing = () => (
+
<Spinner
+
borderLeftColor="bg.emphasized"
+
borderBottomColor="bg.emphasized"
+
borderWidth="4px"
+
m="2"
+
/>
+
);
+
+
const status = () => {
+
switch (process.status) {
+
case "success":
+
return statusSuccess(process.result);
+
case "processing":
+
return statusProcessing();
+
default:
+
return statusError(process.error);
+
}
+
};
+
+
return (
+
<Stack
+
direction="row"
+
border="1px solid var(--colors-border-muted)"
+
gap="2"
+
align="center"
+
rounded="sm"
+
>
+
<span
+
class={css({
+
overflow: "hidden",
+
textOverflow: "ellipsis",
+
whiteSpace: "nowrap",
+
pl: 2,
+
})}
+
>
+
{process.file.name}
+
</span>
+
<div class={css({ flexGrow: 1 })}></div>
+
<Stack direction="row" gap="0" flexShrink="0" align="center">
+
{status()}
+
</Stack>
+
</Stack>
+
);
+
};
+
+
export default Task;
+142
src/components/PostDialog.tsx
···
+
import { Component, createSignal } from "solid-js";
+
+
import { SendIcon, XIcon } from "lucide-solid";
+
import { Stack } from "styled-system/jsx";
+
import { IconButton } from "~/components/ui/icon-button";
+
import { Spinner } from "~/components/ui/spinner";
+
import { Text } from "~/components/ui/text";
+
import { Link } from "~/components/ui/link";
+
+
import { parseCanonicalResourceUri } from "@atcute/lexicons/syntax";
+
import { css } from "styled-system/css";
+
import { sendPost } from "~/lib/at";
+
import { toaster } from "~/components/Toaster";
+
import { Dialog } from "~/components/ui/dialog";
+
import { Textarea } from "~/components/ui/textarea";
+
import { Account } from "~/lib/accounts";
+
+
const PostDialog = (props: {
+
trigger: Component;
+
result: Blob;
+
account: Account | undefined;
+
}) => {
+
const [postContent, setPostContent] = createSignal<string>("");
+
const [posting, setPosting] = createSignal(false);
+
const [open, setOpen] = createSignal(false);
+
+
return (
+
<Dialog.Root open={open()} onOpenChange={(e) => setOpen(e.open)}>
+
<Dialog.Trigger
+
asChild={(triggerProps) => <props.trigger {...triggerProps()} />}
+
/>
+
<Dialog.Backdrop />
+
<Dialog.Positioner>
+
<Dialog.Content>
+
<Stack>
+
<Stack gap="0">
+
<video
+
class={css({ maxW: "sm", roundedTop: "xs" })}
+
controls
+
src={URL.createObjectURL(props.result)}
+
></video>
+
<Textarea
+
placeholder="enter text content..."
+
id="post-content"
+
value={postContent()}
+
onChange={(e) => setPostContent(e.target.value)}
+
rows={2}
+
resize="none"
+
border="none"
+
borderTop="1px solid var(--colors-border-muted)"
+
boxShadow={{ base: "none", _focus: "none" }}
+
/>
+
</Stack>
+
<Stack
+
borderTop="1px solid var(--colors-border-muted)"
+
gap="2"
+
p="3"
+
direction="row"
+
align="center"
+
>
+
<Stack direction="row" align="center">
+
<Dialog.Title>
+
post to {props.account?.handle ?? props.account?.did}
+
</Dialog.Title>
+
</Stack>
+
<div class={css({ flexGrow: 1 })} />
+
{posting() ? (
+
<Spinner
+
borderLeftColor="bg.emphasized"
+
borderBottomColor="bg.emphasized"
+
borderWidth="4px"
+
size="sm"
+
/>
+
) : (
+
<Dialog.CloseTrigger
+
asChild={(closeTriggerProps) => (
+
<IconButton
+
{...closeTriggerProps()}
+
aria-label="Close Dialog"
+
variant="ghost"
+
size="sm"
+
>
+
<XIcon />
+
</IconButton>
+
)}
+
/>
+
)}
+
<IconButton
+
disabled={posting()}
+
onClick={() => {
+
setPosting(true);
+
sendPost(props.account?.did!, props.result, postContent())
+
.then((result) => {
+
const parsedUri = parseCanonicalResourceUri(result.uri);
+
if (!parsedUri.ok) throw "failed to parse atproto uri";
+
const { repo, rkey } = parsedUri.value;
+
toaster.create({
+
title: "post sent",
+
description: (
+
<>
+
<Text>view post </Text>
+
<Link
+
href={`https://bsky.app/profile/${repo}/post/${rkey}`}
+
color={{
+
base: "colorPalette.text",
+
_hover: "colorPalette.emphasized",
+
}}
+
textDecoration={{ _hover: "underline" }}
+
>
+
here
+
</Link>
+
</>
+
),
+
type: "success",
+
});
+
setOpen(false);
+
})
+
.catch((error) => {
+
toaster.create({
+
title: "send post failed",
+
description: error,
+
type: "error",
+
});
+
})
+
.finally(() => {
+
setPosting(false);
+
});
+
}}
+
variant="ghost"
+
size="sm"
+
>
+
<SendIcon />
+
</IconButton>
+
</Stack>
+
</Stack>
+
</Dialog.Content>
+
</Dialog.Positioner>
+
</Dialog.Root>
+
);
+
};
+
+
export default PostDialog;
+404
src/components/Settings.tsx
···
+
import { createSignal, For, Signal } from "solid-js";
+
+
import {
+
CheckIcon,
+
ChevronsUpDownIcon,
+
CogIcon,
+
PipetteIcon,
+
PlusIcon,
+
Trash2Icon,
+
XIcon,
+
} from "lucide-solid";
+
import { Button } from "~/components/ui/button";
+
import { Field } from "~/components/ui/field";
+
import { Stack, Box, HStack } from "styled-system/jsx";
+
import { IconButton } from "~/components/ui/icon-button";
+
import { FormLabel } from "~/components/ui/form-label";
+
import { Checkbox } from "~/components/ui/checkbox";
+
import { Drawer } from "~/components/ui/drawer";
+
import { Text } from "~/components/ui/text";
+
+
import { Handle, isHandle } from "@atcute/lexicons/syntax";
+
import { css } from "styled-system/css";
+
import { flow, sessions } from "~/lib/oauth";
+
import {
+
Account,
+
loggingIn,
+
accounts,
+
setAccounts,
+
setSelectedAccount,
+
} from "~/lib/accounts";
+
import {
+
showProfilePicture as showProfilePictureSetting,
+
showVisualizer as showVisualizerSetting,
+
backgroundColor as backgroundColorSetting,
+
frameRate as frameRateSetting,
+
useDominantColorAsBg as useDominantColorAsBgSetting,
+
Setting,
+
} from "~/lib/settings";
+
import { handleResolver } from "~/lib/at";
+
import { toaster } from "~/components/Toaster";
+
import { createListCollection, Select } from "~/components/ui/select";
+
+
import { type Color, type ListCollection, parseColor } from "@ark-ui/solid";
+
import { ColorPicker } from "~/components/ui/color-picker";
+
import { Input } from "~/components/ui/input";
+
+
const SettingCheckbox = (props: {
+
setting: Setting<boolean>;
+
signal: Signal<boolean>;
+
label: string;
+
disabled?: boolean;
+
}) => (
+
<Checkbox
+
p="2"
+
checked={props.signal[0]()}
+
onCheckedChange={(e) => {
+
const val = e.checked === "indeterminate" ? false : e.checked;
+
props.signal[1](val);
+
props.setting.set(val);
+
}}
+
disabled={props.disabled}
+
colorPalette={props.disabled ? "gray" : undefined}
+
cursor={props.disabled ? { _hover: "not-allowed" } : undefined}
+
>
+
<Text color={props.disabled ? "fg.disabled" : undefined}>
+
{props.label}
+
</Text>
+
</Checkbox>
+
);
+
+
const SettingSelect = (props: {
+
label: string;
+
signal: Signal<string>;
+
collection: ListCollection<{ label: string; value: string }>;
+
}) => (
+
<Select.Root
+
width="2xs"
+
positioning={{ sameWidth: true }}
+
value={[props.signal[0]()]}
+
onValueChange={(details) => props.signal[1](details.value[0])}
+
collection={props.collection}
+
>
+
<Select.Label px="2">{props.label}</Select.Label>
+
<Select.Control>
+
<Select.Trigger border="none" p="2" boxShadow={{ _focus: "none" }}>
+
<Select.ValueText placeholder="account" />
+
<ChevronsUpDownIcon />
+
</Select.Trigger>
+
</Select.Control>
+
<Select.Positioner>
+
<Select.Content>
+
<Select.ItemGroup>
+
<For each={props.collection.items}>
+
{(item) => (
+
<Select.Item item={item}>
+
<Select.ItemText>{item.label}</Select.ItemText>
+
<Select.ItemIndicator pl="2">
+
<CheckIcon />
+
</Select.ItemIndicator>
+
</Select.Item>
+
)}
+
</For>
+
</Select.ItemGroup>
+
</Select.Content>
+
</Select.Positioner>
+
</Select.Root>
+
);
+
+
const SettingColorPicker = (props: {
+
label: string;
+
signal: Signal<Color>;
+
}) => {
+
return (
+
<ColorPicker.Root
+
p="2"
+
value={props.signal[0]()}
+
onValueChange={(e) => props.signal[1](e.value)}
+
onValueChangeEnd={(e) => props.signal[1](e.value)}
+
>
+
<ColorPicker.Context>
+
{(api) => (
+
<>
+
<ColorPicker.Label>{props.label}</ColorPicker.Label>
+
<ColorPicker.Control>
+
<ColorPicker.ChannelInput
+
channel="hex"
+
asChild={(inputProps) => <Input {...inputProps()} />}
+
/>
+
<ColorPicker.Trigger
+
asChild={(triggerProps) => (
+
<IconButton variant="outline" {...triggerProps()}>
+
<ColorPicker.Swatch value={api().value} />
+
</IconButton>
+
)}
+
/>
+
</ColorPicker.Control>
+
<ColorPicker.Positioner>
+
<ColorPicker.Content>
+
<Stack gap="3">
+
<ColorPicker.Area>
+
<ColorPicker.AreaBackground />
+
<ColorPicker.AreaThumb />
+
</ColorPicker.Area>
+
<HStack gap="3">
+
<ColorPicker.EyeDropperTrigger
+
asChild={(triggerProps) => (
+
<IconButton
+
size="xs"
+
variant="outline"
+
aria-label="Pick a color"
+
{...triggerProps()}
+
>
+
<PipetteIcon />
+
</IconButton>
+
)}
+
/>
+
<Stack gap="2" flex="1">
+
<ColorPicker.ChannelSlider channel="hue">
+
<ColorPicker.ChannelSliderTrack />
+
<ColorPicker.ChannelSliderThumb />
+
</ColorPicker.ChannelSlider>
+
<ColorPicker.ChannelSlider channel="alpha">
+
<ColorPicker.TransparencyGrid size="8px" />
+
<ColorPicker.ChannelSliderTrack />
+
<ColorPicker.ChannelSliderThumb />
+
</ColorPicker.ChannelSlider>
+
</Stack>
+
</HStack>
+
<HStack>
+
<ColorPicker.ChannelInput
+
channel="hex"
+
asChild={(inputProps) => (
+
<Input size="2xs" {...inputProps()} />
+
)}
+
/>
+
<ColorPicker.ChannelInput
+
channel="alpha"
+
asChild={(inputProps) => (
+
<Input size="2xs" {...inputProps()} />
+
)}
+
/>
+
</HStack>
+
</Stack>
+
</ColorPicker.Content>
+
</ColorPicker.Positioner>
+
</>
+
)}
+
</ColorPicker.Context>
+
<ColorPicker.HiddenInput />
+
</ColorPicker.Root>
+
);
+
};
+
+
const Settings = () => {
+
const [handle, setHandle] = createSignal("");
+
const isHandleValid = () => isHandle(handle());
+
+
const deleteAccount = (account: Account) => {
+
const newAccounts = accounts().filter((a) => a.did !== account.did);
+
setAccounts(newAccounts);
+
sessions.remove(account.did);
+
setSelectedAccount(newAccounts[0]?.did ?? undefined);
+
};
+
+
const startAccountFlow = async () => {
+
try {
+
toaster.create({
+
title: "logging in",
+
description: `logging in to ${handle()}...`,
+
type: "info",
+
});
+
const did = await handleResolver.resolve(handle() as Handle);
+
loggingIn.set(did);
+
await flow.start(did);
+
} catch (err) {
+
console.error(err);
+
toaster.create({
+
title: "login error",
+
description: `${err}`,
+
type: "error",
+
});
+
loggingIn.set(undefined);
+
}
+
};
+
+
const Accounts = () => {
+
const item = (account: Account) => (
+
<Stack
+
direction="row"
+
w="full"
+
px="2"
+
pb="2"
+
borderBottom="1px solid var(--colors-border-muted)"
+
align="center"
+
>
+
{account.handle ? `@${account.handle}` : account.did}
+
<div class={css({ flexGrow: 1 })} />
+
<IconButton
+
onClick={() => deleteAccount(account)}
+
variant="ghost"
+
size="sm"
+
>
+
<Trash2Icon />
+
</IconButton>
+
</Stack>
+
);
+
const items = (accounts: Account[]) => (
+
<For
+
each={accounts}
+
fallback={
+
<Text color="fg.muted" px="2" pb="2" alignSelf="center">
+
no accounts added
+
</Text>
+
}
+
>
+
{item}
+
</For>
+
);
+
return (
+
<Stack>
+
<FormLabel>accounts</FormLabel>
+
<Stack border="1px solid var(--colors-border-default)" rounded="xs">
+
<Stack
+
borderBottom="1px solid var(--colors-border-default)"
+
p="2"
+
direction="row"
+
gap="2"
+
w="full"
+
>
+
<Field.Root w="full">
+
<Field.Input
+
placeholder="example.bsky.social"
+
value={handle()}
+
onInput={(e) => setHandle(e.currentTarget.value)}
+
/>
+
</Field.Root>
+
<IconButton onClick={startAccountFlow} disabled={!isHandleValid()}>
+
<PlusIcon />
+
</IconButton>
+
</Stack>
+
{items(accounts())}
+
</Stack>
+
</Stack>
+
);
+
};
+
+
const [showProfilePicture, setShowProfilePicture] = createSignal(
+
showProfilePictureSetting.get() ?? true,
+
);
+
const [showVisualizer, setShowVisualizer] = createSignal(
+
showVisualizerSetting.get() ?? true,
+
);
+
const [useDominantColorAsBg, setUseDominantColorAsBg] = createSignal(
+
useDominantColorAsBgSetting.get() ?? true,
+
);
+
+
const frameRateCollection = createListCollection({
+
items: [24, 30, 60].map((rate) => ({
+
label: `${rate} FPS`,
+
value: rate.toString(),
+
})),
+
});
+
const [frameRate, _setFrameRate] = createSignal(
+
(frameRateSetting.get() ?? 24).toString(),
+
);
+
const setFrameRate = (value: string | ((prev: string) => string)) => {
+
const newFrameRate = _setFrameRate(value);
+
frameRateSetting.set(parseInt(newFrameRate));
+
};
+
+
const [backgroundColor, _setBackgroundColor] = createSignal(
+
parseColor(backgroundColorSetting.get() ?? "#000000"),
+
);
+
const setBackgroundColor = (value: Color | ((prev: Color) => Color)) => {
+
const newColor = _setBackgroundColor(value);
+
backgroundColorSetting.set(newColor.toString("rgb"));
+
};
+
+
return (
+
<Drawer.Root>
+
<Drawer.Trigger
+
asChild={(triggerProps) => (
+
<IconButton variant="outline" {...triggerProps()}>
+
<CogIcon />
+
</IconButton>
+
)}
+
/>
+
<Drawer.Backdrop />
+
<Drawer.Positioner>
+
<Drawer.Content>
+
<Drawer.Header p="0" pl="4">
+
<Stack direction="row" alignItems="center">
+
<Drawer.Title>settings</Drawer.Title>
+
<div style="flex-grow: 1;"></div>
+
<Drawer.CloseTrigger
+
placeSelf="end"
+
asChild={(closeProps) => (
+
<IconButton size="lg" {...closeProps()} variant="ghost">
+
<XIcon />
+
</IconButton>
+
)}
+
/>
+
</Stack>
+
</Drawer.Header>
+
<Drawer.Body>
+
<Stack gap="4">
+
<Accounts />
+
<Stack>
+
<FormLabel>processing</FormLabel>
+
<Stack
+
gap="0"
+
border="1px solid var(--colors-border-default)"
+
rounded="xs"
+
>
+
<Box borderBottom="1px solid var(--colors-border-subtle)">
+
<SettingCheckbox
+
label="show profile picture"
+
setting={showProfilePictureSetting}
+
signal={[showProfilePicture, setShowProfilePicture]}
+
/>
+
</Box>
+
<SettingCheckbox
+
label="show visualizer"
+
setting={showVisualizerSetting}
+
signal={[showVisualizer, setShowVisualizer]}
+
/>
+
<Stack gap="0" borderY="1px solid var(--colors-border-muted)">
+
<SettingCheckbox
+
label="use dominant color as bg"
+
setting={useDominantColorAsBgSetting}
+
signal={[useDominantColorAsBg, setUseDominantColorAsBg]}
+
disabled={!showProfilePicture()}
+
/>
+
<SettingColorPicker
+
label="background color"
+
signal={[backgroundColor, setBackgroundColor]}
+
/>
+
</Stack>
+
<Box borderBottom="1px solid var(--colors-border-muted)">
+
<SettingSelect
+
label="frame rate"
+
signal={[frameRate, setFrameRate]}
+
collection={frameRateCollection}
+
/>
+
</Box>
+
</Stack>
+
</Stack>
+
</Stack>
+
</Drawer.Body>
+
<Drawer.Footer p="2" gap="3">
+
<Drawer.CloseTrigger
+
asChild={(closeProps) => (
+
<Button {...closeProps()} variant="outline">
+
back
+
</Button>
+
)}
+
/>
+
</Drawer.Footer>
+
</Drawer.Content>
+
</Drawer.Positioner>
+
</Drawer.Root>
+
);
+
};
+
export default Settings;
+27
src/components/Toaster.tsx
···
+
import { XIcon } from "lucide-solid";
+
import { Toast } from "~/components/ui/toast";
+
import { IconButton } from "./ui/icon-button";
+
+
export const toaster = Toast.createToaster({
+
placement: "bottom-start",
+
overlap: false,
+
gap: 12,
+
});
+
+
export const Toaster = () => (
+
<Toast.Toaster toaster={toaster}>
+
{(toast) => (
+
<Toast.Root>
+
<Toast.Title>{toast().title}</Toast.Title>
+
<Toast.Description>{toast().description}</Toast.Description>
+
<Toast.CloseTrigger
+
asChild={(closeProps) => (
+
<IconButton {...closeProps()} size="sm" variant="link">
+
<XIcon />
+
</IconButton>
+
)}
+
/>
+
</Toast.Root>
+
)}
+
</Toast.Toaster>
+
);
+43
src/components/ui/button.tsx
···
+
import type { JSX } from 'solid-js'
+
import { Show, splitProps } from 'solid-js'
+
import { Center, styled } from 'styled-system/jsx'
+
import { Spinner } from './spinner'
+
import { Button as StyledButton, type ButtonProps as StyledButtonProps } from './styled/button'
+
+
interface ButtonLoadingProps {
+
loading?: boolean
+
loadingText?: JSX.Element
+
}
+
+
export interface ButtonProps extends StyledButtonProps, ButtonLoadingProps {}
+
+
export const Button = (props: ButtonProps) => {
+
const [localProps, rest] = splitProps(props, ['loading', 'disabled', 'loadingText', 'children'])
+
const trulyDisabled = () => localProps.loading || localProps.disabled
+
+
return (
+
<StyledButton disabled={trulyDisabled()} {...rest}>
+
<Show
+
when={localProps.loading && !localProps.loadingText}
+
fallback={localProps.loadingText || localProps.children}
+
>
+
<>
+
<ButtonSpinner />
+
<styled.span opacity={0}>{localProps.children}</styled.span>
+
</>
+
</Show>
+
</StyledButton>
+
)
+
}
+
+
const ButtonSpinner = () => (
+
<Center inline position="absolute" transform="translate(-50%, -50%)" top="50%" insetStart="50%">
+
<Spinner
+
width="1.1em"
+
height="1.1em"
+
borderWidth="1.5px"
+
borderTopColor="fg.disabled"
+
borderRightColor="fg.disabled"
+
/>
+
</Center>
+
)
+1
src/components/ui/card.tsx
···
+
export * as Card from './styled/card'
+51
src/components/ui/checkbox.tsx
···
+
import { Show, children } from 'solid-js'
+
import * as StyledCheckbox from './styled/checkbox'
+
+
export interface CheckboxProps extends StyledCheckbox.RootProps {}
+
+
export const Checkbox = (props: CheckboxProps) => {
+
const getChildren = children(() => props.children)
+
+
return (
+
<StyledCheckbox.Root {...props}>
+
<StyledCheckbox.Control>
+
<StyledCheckbox.Indicator>
+
<CheckIcon />
+
</StyledCheckbox.Indicator>
+
<StyledCheckbox.Indicator indeterminate>
+
<MinusIcon />
+
</StyledCheckbox.Indicator>
+
</StyledCheckbox.Control>
+
<Show when={getChildren()}>
+
<StyledCheckbox.Label>{getChildren()}</StyledCheckbox.Label>
+
</Show>
+
<StyledCheckbox.HiddenInput />
+
</StyledCheckbox.Root>
+
)
+
}
+
+
const CheckIcon = () => (
+
<svg viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
+
<title>Check Icon</title>
+
<path
+
d="M11.6666 3.5L5.24992 9.91667L2.33325 7"
+
stroke="currentColor"
+
stroke-width="2"
+
stroke-linecap="round"
+
stroke-linejoin="round"
+
/>
+
</svg>
+
)
+
+
const MinusIcon = () => (
+
<svg viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
+
<title>Minus Icon</title>
+
<path
+
d="M2.91675 7H11.0834"
+
stroke="currentColor"
+
stroke-width="2"
+
stroke-linecap="round"
+
stroke-linejoin="round"
+
/>
+
</svg>
+
)
+1
src/components/ui/code.tsx
···
+
export { Code, type CodeProps } from './styled/code'
+1
src/components/ui/color-picker.tsx
···
+
export * as ColorPicker from './styled/color-picker'
+1
src/components/ui/dialog.tsx
···
+
export * as Dialog from './styled/dialog'
+1
src/components/ui/drawer.tsx
···
+
export * as Drawer from './styled/drawer'
+1
src/components/ui/field.tsx
···
+
export * as Field from './styled/field'
+1
src/components/ui/file-upload.tsx
···
+
export * as FileUpload from './styled/file-upload'
+1
src/components/ui/form-label.tsx
···
+
export { FormLabel, type FormLabelProps } from './styled/form-label'
+1
src/components/ui/icon-button.tsx
···
+
export { IconButton, type IconButtonProps } from './styled/icon-button'
+1
src/components/ui/input.tsx
···
+
export { Input, type InputProps } from './styled/input'
+1
src/components/ui/link.tsx
···
+
export { Link, type LinkProps } from './styled/link'
+1
src/components/ui/popover.tsx
···
+
export * as Popover from './styled/popover'
+38
src/components/ui/progress.tsx
···
+
import { Show, children, splitProps } from 'solid-js'
+
import * as StyledProgress from './styled/progress'
+
+
export interface ProgressProps extends StyledProgress.RootProps {
+
/**
+
* The type of progress to render.
+
* @default linear
+
*/
+
type?: 'linear' | 'circular'
+
}
+
+
export const Progress = (props: ProgressProps) => {
+
const [localProps, rootProps] = splitProps(props, ['children', 'type'])
+
const getChildren = children(() => localProps.children)
+
+
return (
+
<StyledProgress.Root {...rootProps}>
+
<Show when={getChildren()}>
+
<StyledProgress.Label>{getChildren()}</StyledProgress.Label>
+
</Show>
+
<Show
+
when={localProps.type === 'circular'}
+
fallback={
+
<StyledProgress.Track>
+
<StyledProgress.Range />
+
</StyledProgress.Track>
+
}
+
>
+
<StyledProgress.Circle>
+
<StyledProgress.CircleTrack />
+
<StyledProgress.CircleRange />
+
<StyledProgress.ValueText />
+
</StyledProgress.Circle>
+
</Show>
+
<StyledProgress.ValueText />
+
</StyledProgress.Root>
+
)
+
}
+2
src/components/ui/select.tsx
···
+
export { createListCollection } from '@ark-ui/solid/select'
+
export * as Select from './styled/select'
+23
src/components/ui/spinner.tsx
···
+
import { mergeProps, splitProps } from 'solid-js'
+
import { styled } from 'styled-system/jsx'
+
import { Spinner as StyledSpinner, type SpinnerProps as StyledSpinnerProps } from './styled/spinner'
+
+
export interface SpinnerProps extends StyledSpinnerProps {
+
/**
+
* For accessibility, it is important to add a fallback loading text.
+
* This text will be visible to screen readers.
+
* @default "Loading..."
+
*/
+
label?: string
+
}
+
+
export const Spinner = (props: SpinnerProps) => {
+
const [_localProps, rootProps] = splitProps(props, ['label'])
+
const localProps = mergeProps({ label: 'Loading...' }, _localProps)
+
+
return (
+
<StyledSpinner borderBottomColor="transparent" borderLeftColor="transparent" {...rootProps}>
+
<styled.span srOnly>{localProps.label}</styled.span>
+
</StyledSpinner>
+
)
+
}
+7
src/components/ui/styled/button.tsx
···
+
import { ark } from '@ark-ui/solid'
+
import type { ComponentProps } from 'solid-js'
+
import { styled } from 'styled-system/jsx'
+
import { button } from 'styled-system/recipes'
+
+
export type ButtonProps = ComponentProps<typeof Button>
+
export const Button = styled(ark.button, button)
+38
src/components/ui/styled/card.tsx
···
+
import { type Assign, type PolymorphicProps, ark } from '@ark-ui/solid'
+
import type { ComponentProps } from 'solid-js'
+
import { card } from 'styled-system/recipes'
+
import type { HTMLStyledProps } from 'styled-system/types'
+
import { createStyleContext } from './utils/create-style-context'
+
+
const { withProvider, withContext } = createStyleContext(card)
+
+
export type RootProps = ComponentProps<typeof Root>
+
export const Root = withProvider<Assign<HTMLStyledProps<'div'>, PolymorphicProps<'div'>>>(
+
ark.div,
+
'root',
+
)
+
+
export const Body = withContext<Assign<HTMLStyledProps<'div'>, PolymorphicProps<'div'>>>(
+
ark.div,
+
'body',
+
)
+
+
export const Description = withContext<Assign<HTMLStyledProps<'div'>, PolymorphicProps<'div'>>>(
+
ark.div,
+
'description',
+
)
+
+
export const Footer = withContext<Assign<HTMLStyledProps<'div'>, PolymorphicProps<'div'>>>(
+
ark.div,
+
'footer',
+
)
+
+
export const Header = withContext<Assign<HTMLStyledProps<'div'>, PolymorphicProps<'div'>>>(
+
ark.div,
+
'header',
+
)
+
+
export const Title = withContext<Assign<HTMLStyledProps<'h3'>, PolymorphicProps<'h3'>>>(
+
ark.h3,
+
'title',
+
)
+42
src/components/ui/styled/checkbox.tsx
···
+
import { type Assign, Checkbox } from '@ark-ui/solid'
+
import type { ComponentProps } from 'solid-js'
+
import { type CheckboxVariantProps, checkbox } from 'styled-system/recipes'
+
import type { HTMLStyledProps } from 'styled-system/types'
+
import { createStyleContext } from './utils/create-style-context'
+
+
const { withProvider, withContext } = createStyleContext(checkbox)
+
+
export type RootProviderProps = ComponentProps<typeof RootProvider>
+
export const RootProvider = withProvider<
+
Assign<Assign<HTMLStyledProps<'label'>, Checkbox.RootProviderBaseProps>, CheckboxVariantProps>
+
>(Checkbox.RootProvider, 'root')
+
+
export type RootProps = ComponentProps<typeof Root>
+
export const Root = withProvider<
+
Assign<Assign<HTMLStyledProps<'label'>, Checkbox.RootBaseProps>, CheckboxVariantProps>
+
>(Checkbox.Root, 'root')
+
+
export const Control = withContext<Assign<HTMLStyledProps<'div'>, Checkbox.ControlBaseProps>>(
+
Checkbox.Control,
+
'control',
+
)
+
+
export const Group = withContext<Assign<HTMLStyledProps<'div'>, Checkbox.GroupBaseProps>>(
+
Checkbox.Group,
+
'group',
+
)
+
+
export const Indicator = withContext<Assign<HTMLStyledProps<'div'>, Checkbox.IndicatorBaseProps>>(
+
Checkbox.Indicator,
+
'indicator',
+
)
+
+
export const Label = withContext<Assign<HTMLStyledProps<'span'>, Checkbox.LabelBaseProps>>(
+
Checkbox.Label,
+
'label',
+
)
+
+
export {
+
CheckboxContext as Context,
+
CheckboxHiddenInput as HiddenInput,
+
} from '@ark-ui/solid'
+7
src/components/ui/styled/code.tsx
···
+
import { ark } from '@ark-ui/solid'
+
import type { ComponentProps } from 'solid-js'
+
import { styled } from 'styled-system/jsx'
+
import { code } from 'styled-system/recipes'
+
+
export type CodeProps = ComponentProps<typeof Code>
+
export const Code = styled(ark.code, code)
+129
src/components/ui/styled/color-picker.tsx
···
+
import { type Assign, ColorPicker } from '@ark-ui/solid'
+
import type { ComponentProps } from 'solid-js'
+
import { type ColorPickerVariantProps, colorPicker } from 'styled-system/recipes'
+
import type { HTMLStyledProps } from 'styled-system/types'
+
import { createStyleContext } from './utils/create-style-context'
+
+
const { withProvider, withContext } = createStyleContext(colorPicker)
+
+
export type RootProviderProps = ComponentProps<typeof RootProvider>
+
export const RootProvider = withProvider<
+
Assign<Assign<HTMLStyledProps<'div'>, ColorPicker.RootProviderBaseProps>, ColorPickerVariantProps>
+
>(ColorPicker.RootProvider, 'root')
+
+
export type RootProps = ComponentProps<typeof Root>
+
export const Root = withProvider<
+
Assign<Assign<HTMLStyledProps<'div'>, ColorPicker.RootBaseProps>, ColorPickerVariantProps>
+
>(ColorPicker.Root, 'root')
+
+
export const AreaBackground = withContext<
+
Assign<HTMLStyledProps<'div'>, ColorPicker.AreaBackgroundBaseProps>
+
>(ColorPicker.AreaBackground, 'areaBackground')
+
+
export const Area = withContext<Assign<HTMLStyledProps<'div'>, ColorPicker.AreaBaseProps>>(
+
ColorPicker.Area,
+
'area',
+
)
+
+
export const AreaThumb = withContext<
+
Assign<HTMLStyledProps<'div'>, ColorPicker.AreaThumbBaseProps>
+
>(ColorPicker.AreaThumb, 'areaThumb')
+
+
export const ChannelInput = withContext<
+
Assign<HTMLStyledProps<'input'>, ColorPicker.ChannelInputBaseProps>
+
>(ColorPicker.ChannelInput, 'channelInput')
+
+
export const ChannelSliderLabel = withContext<
+
Assign<HTMLStyledProps<'label'>, ColorPicker.ChannelSliderLabelBaseProps>
+
>(ColorPicker.ChannelSliderLabel, 'channelSliderLabel')
+
+
export const ChannelSlider = withContext<
+
Assign<HTMLStyledProps<'div'>, ColorPicker.ChannelSliderBaseProps>
+
>(ColorPicker.ChannelSlider, 'channelSlider')
+
+
export const ChannelSliderThumb = withContext<
+
Assign<HTMLStyledProps<'div'>, ColorPicker.ChannelSliderThumbBaseProps>
+
>(ColorPicker.ChannelSliderThumb, 'channelSliderThumb')
+
+
export const ChannelSliderTrack = withContext<
+
Assign<HTMLStyledProps<'div'>, ColorPicker.ChannelSliderTrackBaseProps>
+
>(ColorPicker.ChannelSliderTrack, 'channelSliderTrack')
+
+
export const ChannelSliderValueText = withContext<
+
Assign<HTMLStyledProps<'span'>, ColorPicker.ChannelSliderValueTextBaseProps>
+
>(ColorPicker.ChannelSliderValueText, 'channelSliderValueText')
+
+
export const Content = withContext<Assign<HTMLStyledProps<'div'>, ColorPicker.ContentBaseProps>>(
+
ColorPicker.Content,
+
'content',
+
)
+
+
export const Control = withContext<Assign<HTMLStyledProps<'div'>, ColorPicker.ControlBaseProps>>(
+
ColorPicker.Control,
+
'control',
+
)
+
+
export const EyeDropperTrigger = withContext<
+
Assign<HTMLStyledProps<'button'>, ColorPicker.EyeDropperTriggerBaseProps>
+
>(ColorPicker.EyeDropperTrigger, 'eyeDropperTrigger')
+
+
export const FormatSelect = withContext<
+
Assign<HTMLStyledProps<'select'>, ColorPicker.FormatSelectBaseProps>
+
>(ColorPicker.FormatSelect, 'formatSelect')
+
+
export const FormatTrigger = withContext<
+
Assign<HTMLStyledProps<'button'>, ColorPicker.FormatTriggerBaseProps>
+
>(ColorPicker.FormatTrigger, 'formatTrigger')
+
+
export const Label = withContext<Assign<HTMLStyledProps<'label'>, ColorPicker.LabelBaseProps>>(
+
ColorPicker.Label,
+
'label',
+
)
+
+
export const Positioner = withContext<
+
Assign<HTMLStyledProps<'div'>, ColorPicker.PositionerBaseProps>
+
>(ColorPicker.Positioner, 'positioner')
+
+
export const SwatchGroup = withContext<
+
Assign<HTMLStyledProps<'div'>, ColorPicker.SwatchGroupBaseProps>
+
>(ColorPicker.SwatchGroup, 'swatchGroup')
+
+
export const SwatchIndicator = withContext<
+
Assign<HTMLStyledProps<'div'>, ColorPicker.SwatchIndicatorBaseProps>
+
>(ColorPicker.SwatchIndicator, 'swatchIndicator')
+
+
export const Swatch = withContext<Assign<HTMLStyledProps<'div'>, ColorPicker.SwatchBaseProps>>(
+
ColorPicker.Swatch,
+
'swatch',
+
)
+
+
export const SwatchTrigger = withContext<
+
Assign<HTMLStyledProps<'button'>, ColorPicker.SwatchTriggerBaseProps>
+
>(ColorPicker.SwatchTrigger, 'swatchTrigger')
+
+
export const TransparencyGrid = withContext<
+
Assign<HTMLStyledProps<'div'>, ColorPicker.TransparencyGridBaseProps>
+
>(ColorPicker.TransparencyGrid, 'transparencyGrid')
+
+
export const Trigger = withContext<Assign<HTMLStyledProps<'button'>, ColorPicker.TriggerBaseProps>>(
+
ColorPicker.Trigger,
+
'trigger',
+
)
+
+
export const ValueSwatch = withContext<
+
Assign<HTMLStyledProps<'div'>, ColorPicker.ValueSwatchBaseProps>
+
>(ColorPicker.ValueSwatch, 'swatch')
+
+
export const ValueText = withContext<
+
Assign<HTMLStyledProps<'span'>, ColorPicker.ValueTextBaseProps>
+
>(ColorPicker.ValueText, 'valueText')
+
+
export const View = withContext<Assign<HTMLStyledProps<'div'>, ColorPicker.ViewBaseProps>>(
+
ColorPicker.View,
+
'view',
+
)
+
+
export {
+
ColorPickerContext as Context,
+
ColorPickerHiddenInput as HiddenInput,
+
} from '@ark-ui/solid'
+51
src/components/ui/styled/dialog.tsx
···
+
import { type Assign, Dialog } from '@ark-ui/solid'
+
import type { ComponentProps } from 'solid-js'
+
import { type DialogVariantProps, dialog } from 'styled-system/recipes'
+
import type { HTMLStyledProps } from 'styled-system/types'
+
import { createStyleContext } from './utils/create-style-context'
+
+
const { withRootProvider, withContext } = createStyleContext(dialog)
+
+
export type RootProviderProps = ComponentProps<typeof RootProvider>
+
export const RootProvider = withRootProvider<Assign<Dialog.RootProviderProps, DialogVariantProps>>(
+
Dialog.RootProvider,
+
)
+
+
export type RootProps = ComponentProps<typeof Root>
+
export const Root = withRootProvider<Assign<Dialog.RootProps, DialogVariantProps>>(Dialog.Root)
+
+
export const Backdrop = withContext<Assign<HTMLStyledProps<'div'>, Dialog.BackdropBaseProps>>(
+
Dialog.Backdrop,
+
'backdrop',
+
)
+
+
export const CloseTrigger = withContext<
+
Assign<HTMLStyledProps<'button'>, Dialog.CloseTriggerBaseProps>
+
>(Dialog.CloseTrigger, 'closeTrigger')
+
+
export const Content = withContext<Assign<HTMLStyledProps<'div'>, Dialog.ContentBaseProps>>(
+
Dialog.Content,
+
'content',
+
)
+
+
export const Description = withContext<Assign<HTMLStyledProps<'div'>, Dialog.DescriptionBaseProps>>(
+
Dialog.Description,
+
'description',
+
)
+
+
export const Positioner = withContext<Assign<HTMLStyledProps<'div'>, Dialog.PositionerBaseProps>>(
+
Dialog.Positioner,
+
'positioner',
+
)
+
+
export const Title = withContext<Assign<HTMLStyledProps<'h2'>, Dialog.TitleBaseProps>>(
+
Dialog.Title,
+
'title',
+
)
+
+
export const Trigger = withContext<Assign<HTMLStyledProps<'button'>, Dialog.TriggerBaseProps>>(
+
Dialog.Trigger,
+
'trigger',
+
)
+
+
export { DialogContext as Context } from '@ark-ui/solid'
+74
src/components/ui/styled/drawer.tsx
···
+
import { type Assign, Dialog, type PolymorphicProps, ark } from '@ark-ui/solid'
+
import type { ComponentProps } from 'solid-js'
+
import { type DrawerVariantProps, drawer } from 'styled-system/recipes'
+
import type { HTMLStyledProps } from 'styled-system/types'
+
import { createStyleContext } from './utils/create-style-context'
+
+
const { withRootProvider, withContext } = createStyleContext(drawer)
+
+
export type RootProviderProps = ComponentProps<typeof RootProvider>
+
export const RootProvider = withRootProvider<Assign<Dialog.RootProps, DrawerVariantProps>>(Dialog.RootProvider)
+
+
export type RootProps = ComponentProps<typeof Root>
+
export const Root = withRootProvider<Assign<Dialog.RootProps, DrawerVariantProps>>(Dialog.Root)
+
+
export type BackdropProps = ComponentProps<typeof Backdrop>
+
export const Backdrop = withContext<Assign<HTMLStyledProps<'div'>, Dialog.BackdropProps>>(
+
Dialog.Backdrop,
+
'backdrop',
+
)
+
+
export type CloseTriggerProps = ComponentProps<typeof CloseTrigger>
+
export const CloseTrigger = withContext<
+
Assign<HTMLStyledProps<'button'>, Dialog.CloseTriggerProps>
+
>(Dialog.CloseTrigger, 'closeTrigger')
+
+
export type ContentProps = ComponentProps<typeof Content>
+
export const Content = withContext<Assign<HTMLStyledProps<'div'>, Dialog.ContentProps>>(
+
Dialog.Content,
+
'content',
+
)
+
+
export type DescriptionProps = ComponentProps<typeof Description>
+
export const Description = withContext<Assign<HTMLStyledProps<'div'>, Dialog.DescriptionProps>>(
+
Dialog.Description,
+
'description',
+
)
+
+
export type PositionerProps = ComponentProps<typeof Positioner>
+
export const Positioner = withContext<Assign<HTMLStyledProps<'div'>, Dialog.PositionerProps>>(
+
Dialog.Positioner,
+
'positioner',
+
)
+
+
export type TitleProps = ComponentProps<typeof Title>
+
export const Title = withContext<Assign<HTMLStyledProps<'h2'>, Dialog.TitleProps>>(
+
Dialog.Title,
+
'title',
+
)
+
+
export type TriggerProps = ComponentProps<typeof Trigger>
+
export const Trigger = withContext<Assign<HTMLStyledProps<'button'>, Dialog.TriggerProps>>(
+
Dialog.Trigger,
+
'trigger',
+
)
+
+
export const Header = withContext<Assign<HTMLStyledProps<'div'>, PolymorphicProps<'div'>>>(
+
ark.div,
+
'header',
+
)
+
+
export const Body = withContext<Assign<HTMLStyledProps<'div'>, PolymorphicProps<'div'>>>(
+
ark.div,
+
'body',
+
)
+
+
export const Footer = withContext<Assign<HTMLStyledProps<'div'>, PolymorphicProps<'div'>>>(
+
ark.div,
+
'footer',
+
)
+
+
export {
+
DialogContext as Context,
+
type DialogContextProps as ContextProps,
+
} from '@ark-ui/solid'
+46
src/components/ui/styled/field.tsx
···
+
import { type Assign, Field } from '@ark-ui/solid'
+
import type { ComponentProps } from 'solid-js'
+
import { styled } from 'styled-system/jsx'
+
import { type FieldVariantProps, field, input, textarea } from 'styled-system/recipes'
+
import type { HTMLStyledProps } from 'styled-system/types'
+
import { createStyleContext } from './utils/create-style-context'
+
+
const { withProvider, withContext } = createStyleContext(field)
+
+
export type RootProviderProps = ComponentProps<typeof RootProvider>
+
export const RootProvider = withProvider<
+
Assign<Assign<HTMLStyledProps<'div'>, Field.RootProviderBaseProps>, FieldVariantProps>
+
>(Field.RootProvider, 'root')
+
+
export type RootProps = ComponentProps<typeof Root>
+
export const Root = withProvider<
+
Assign<Assign<HTMLStyledProps<'div'>, Field.RootBaseProps>, FieldVariantProps>
+
>(Field.Root, 'root')
+
+
export const ErrorText = withContext<Assign<HTMLStyledProps<'span'>, Field.ErrorTextBaseProps>>(
+
Field.ErrorText,
+
'errorText',
+
)
+
+
export const HelperText = withContext<Assign<HTMLStyledProps<'span'>, Field.HelperTextBaseProps>>(
+
Field.HelperText,
+
'helperText',
+
)
+
+
export const Label = withContext<Assign<HTMLStyledProps<'label'>, Field.LabelBaseProps>>(
+
Field.Label,
+
'label',
+
)
+
+
export const Select = withContext<Assign<HTMLStyledProps<'select'>, Field.SelectBaseProps>>(
+
Field.Select,
+
'select',
+
)
+
+
export type InputProps = ComponentProps<typeof Input>
+
export const Input = styled(Field.Input, input)
+
+
export type TextareaProps = ComponentProps<typeof Textarea>
+
export const Textarea = styled(Field.Textarea, textarea)
+
+
export { FieldContext as Context } from '@ark-ui/solid'
+68
src/components/ui/styled/file-upload.tsx
···
+
import { type Assign, FileUpload } from '@ark-ui/solid'
+
import type { ComponentProps } from 'solid-js'
+
import { type FileUploadVariantProps, fileUpload } from 'styled-system/recipes'
+
import type { HTMLStyledProps } from 'styled-system/types'
+
import { createStyleContext } from './utils/create-style-context'
+
+
const { withProvider, withContext } = createStyleContext(fileUpload)
+
+
export type RootProviderProps = ComponentProps<typeof RootProvider>
+
export const RootProvider = withProvider<
+
Assign<Assign<HTMLStyledProps<'div'>, FileUpload.RootProviderBaseProps>, FileUploadVariantProps>
+
>(FileUpload.RootProvider, 'root')
+
+
export type RootProps = ComponentProps<typeof Root>
+
export const Root = withProvider<
+
Assign<Assign<HTMLStyledProps<'div'>, FileUpload.RootBaseProps>, FileUploadVariantProps>
+
>(FileUpload.Root, 'root')
+
+
export const Dropzone = withContext<Assign<HTMLStyledProps<'div'>, FileUpload.DropzoneBaseProps>>(
+
FileUpload.Dropzone,
+
'dropzone',
+
)
+
+
export const ItemDeleteTrigger = withContext<
+
Assign<HTMLStyledProps<'button'>, FileUpload.ItemDeleteTriggerBaseProps>
+
>(FileUpload.ItemDeleteTrigger, 'itemDeleteTrigger')
+
+
export const ItemGroup = withContext<Assign<HTMLStyledProps<'ul'>, FileUpload.ItemGroupBaseProps>>(
+
FileUpload.ItemGroup,
+
'itemGroup',
+
)
+
+
export const ItemName = withContext<Assign<HTMLStyledProps<'div'>, FileUpload.ItemNameBaseProps>>(
+
FileUpload.ItemName,
+
'itemName',
+
)
+
+
export const ItemPreviewImage = withContext<
+
Assign<HTMLStyledProps<'img'>, FileUpload.ItemPreviewImageBaseProps>
+
>(FileUpload.ItemPreviewImage, 'itemPreviewImage')
+
+
export const ItemPreview = withContext<
+
Assign<HTMLStyledProps<'div'>, FileUpload.ItemPreviewBaseProps>
+
>(FileUpload.ItemPreview, 'itemPreview')
+
+
export const Item = withContext<Assign<HTMLStyledProps<'li'>, FileUpload.ItemBaseProps>>(
+
FileUpload.Item,
+
'item',
+
)
+
+
export const ItemSizeText = withContext<
+
Assign<HTMLStyledProps<'div'>, FileUpload.ItemSizeTextBaseProps>
+
>(FileUpload.ItemSizeText, 'itemSizeText')
+
+
export const Label = withContext<Assign<HTMLStyledProps<'label'>, FileUpload.LabelBaseProps>>(
+
FileUpload.Label,
+
'label',
+
)
+
+
export const Trigger = withContext<Assign<HTMLStyledProps<'button'>, FileUpload.TriggerBaseProps>>(
+
FileUpload.Trigger,
+
'trigger',
+
)
+
+
export {
+
FileUploadContext as Context,
+
FileUploadHiddenInput as HiddenInput,
+
} from '@ark-ui/solid'
+7
src/components/ui/styled/form-label.tsx
···
+
import { ark } from '@ark-ui/solid'
+
import type { ComponentProps } from 'solid-js'
+
import { styled } from 'styled-system/jsx'
+
import { formLabel } from 'styled-system/recipes'
+
+
export type FormLabelProps = ComponentProps<typeof FormLabel>
+
export const FormLabel = styled(ark.label, formLabel)
+9
src/components/ui/styled/icon-button.tsx
···
+
import { ark } from '@ark-ui/solid'
+
import type { ComponentProps } from 'solid-js'
+
import { styled } from 'styled-system/jsx'
+
import { type ButtonVariantProps, button } from 'styled-system/recipes'
+
+
export type IconButtonProps = ComponentProps<typeof IconButton>
+
export const IconButton = styled(ark.button, button, {
+
defaultProps: { px: '0' } as ButtonVariantProps,
+
})
+7
src/components/ui/styled/input.tsx
···
+
import { ark } from '@ark-ui/solid'
+
import type { ComponentProps } from 'solid-js'
+
import { styled } from 'styled-system/jsx'
+
import { input } from 'styled-system/recipes'
+
+
export type InputProps = ComponentProps<typeof Input>
+
export const Input = styled(ark.input, input)
+7
src/components/ui/styled/link.tsx
···
+
import { ark } from '@ark-ui/solid'
+
import type { ComponentProps } from 'solid-js'
+
import { styled } from 'styled-system/jsx'
+
import { link } from 'styled-system/recipes'
+
+
export type LinkProps = ComponentProps<typeof Link>
+
export const Link = styled(ark.a, link)
+65
src/components/ui/styled/popover.tsx
···
+
import { type Assign, Popover } from '@ark-ui/solid'
+
import type { ComponentProps } from 'solid-js'
+
import { type PopoverVariantProps, popover } from 'styled-system/recipes'
+
import type { HTMLStyledProps } from 'styled-system/types'
+
import { createStyleContext } from './utils/create-style-context'
+
+
const { withRootProvider, withContext } = createStyleContext(popover)
+
+
export type RootProviderProps = ComponentProps<typeof RootProvider>
+
export const RootProvider = withRootProvider<
+
Assign<Popover.RootProviderProps, PopoverVariantProps>
+
>(Popover.RootProvider)
+
+
export type RootProps = ComponentProps<typeof Root>
+
export const Root = withRootProvider<Assign<Popover.RootProps, PopoverVariantProps>>(Popover.Root)
+
+
export const Anchor = withContext<Assign<HTMLStyledProps<'div'>, Popover.AnchorBaseProps>>(
+
Popover.Anchor,
+
'anchor',
+
)
+
+
export const Arrow = withContext<Assign<HTMLStyledProps<'div'>, Popover.ArrowBaseProps>>(
+
Popover.Arrow,
+
'arrow',
+
)
+
+
export const ArrowTip = withContext<Assign<HTMLStyledProps<'div'>, Popover.ArrowTipBaseProps>>(
+
Popover.ArrowTip,
+
'arrowTip',
+
)
+
+
export const CloseTrigger = withContext<
+
Assign<HTMLStyledProps<'button'>, Popover.CloseTriggerBaseProps>
+
>(Popover.CloseTrigger, 'closeTrigger')
+
+
export const Content = withContext<Assign<HTMLStyledProps<'div'>, Popover.ContentBaseProps>>(
+
Popover.Content,
+
'content',
+
)
+
+
export const Description = withContext<
+
Assign<HTMLStyledProps<'div'>, Popover.DescriptionBaseProps>
+
>(Popover.Description, 'description')
+
+
export const Indicator = withContext<Assign<HTMLStyledProps<'div'>, Popover.IndicatorBaseProps>>(
+
Popover.Indicator,
+
'indicator',
+
)
+
+
export const Positioner = withContext<Assign<HTMLStyledProps<'div'>, Popover.PositionerBaseProps>>(
+
Popover.Positioner,
+
'positioner',
+
)
+
+
export const Title = withContext<Assign<HTMLStyledProps<'div'>, Popover.TitleBaseProps>>(
+
Popover.Title,
+
'title',
+
)
+
+
export const Trigger = withContext<Assign<HTMLStyledProps<'button'>, Popover.TriggerBaseProps>>(
+
Popover.Trigger,
+
'trigger',
+
)
+
+
export { PopoverContext as Context } from '@ark-ui/solid'
+57
src/components/ui/styled/progress.tsx
···
+
import { type Assign, Progress } from '@ark-ui/solid'
+
import type { ComponentProps } from 'solid-js'
+
import { type ProgressVariantProps, progress } from 'styled-system/recipes'
+
import type { HTMLStyledProps } from 'styled-system/types'
+
import { createStyleContext } from './utils/create-style-context'
+
+
const { withProvider, withContext } = createStyleContext(progress)
+
+
export type RootProviderProps = ComponentProps<typeof RootProvider>
+
export const RootProvider = withProvider<
+
Assign<Assign<HTMLStyledProps<'div'>, Progress.RootProviderBaseProps>, ProgressVariantProps>
+
>(Progress.RootProvider, 'root')
+
+
export type RootProps = ComponentProps<typeof Root>
+
export const Root = withProvider<
+
Assign<Assign<HTMLStyledProps<'div'>, Progress.RootBaseProps>, ProgressVariantProps>
+
>(Progress.Root, 'root')
+
+
export const Circle = withContext<Assign<HTMLStyledProps<'svg'>, Progress.CircleBaseProps>>(
+
Progress.Circle,
+
'circle',
+
)
+
+
export const CircleRange = withContext<
+
Assign<HTMLStyledProps<'circle'>, Progress.CircleRangeBaseProps>
+
>(Progress.CircleRange, 'circleRange')
+
+
export const CircleTrack = withContext<
+
Assign<HTMLStyledProps<'circle'>, Progress.CircleTrackBaseProps>
+
>(Progress.CircleTrack, 'circleTrack')
+
+
export const Label = withContext<Assign<HTMLStyledProps<'label'>, Progress.LabelBaseProps>>(
+
Progress.Label,
+
'label',
+
)
+
+
export const Range = withContext<Assign<HTMLStyledProps<'div'>, Progress.RangeBaseProps>>(
+
Progress.Range,
+
'range',
+
)
+
+
export const Track = withContext<Assign<HTMLStyledProps<'div'>, Progress.TrackBaseProps>>(
+
Progress.Track,
+
'track',
+
)
+
+
export const ValueText = withContext<Assign<HTMLStyledProps<'span'>, Progress.ValueTextBaseProps>>(
+
Progress.ValueText,
+
'valueText',
+
)
+
+
export const View = withContext<Assign<HTMLStyledProps<'span'>, Progress.ViewBaseProps>>(
+
Progress.View,
+
'view',
+
)
+
+
export { ProgressContext as Context } from '@ark-ui/solid'
+95
src/components/ui/styled/select.tsx
···
+
import { type Assign, Select } from '@ark-ui/solid'
+
import type { ComponentProps } from 'solid-js'
+
import { type SelectVariantProps, select } from 'styled-system/recipes'
+
import type { HTMLStyledProps } from 'styled-system/types'
+
import { createStyleContext } from './utils/create-style-context'
+
+
const { withRootProvider, withContext } = createStyleContext(select)
+
+
export type RootProviderProps = ComponentProps<typeof RootProvider>
+
export const RootProvider = withRootProvider<
+
Assign<
+
Assign<HTMLStyledProps<'div'>, Select.RootProviderBaseProps<Select.CollectionItem>>,
+
SelectVariantProps
+
>
+
>(Select.RootProvider)
+
+
export type RootProps = ComponentProps<typeof Root>
+
export const Root = withRootProvider<
+
Assign<
+
Assign<HTMLStyledProps<'div'>, Select.RootBaseProps<Select.CollectionItem>>,
+
SelectVariantProps
+
>
+
>(Select.Root)
+
+
export const ClearTrigger = withContext<
+
Assign<HTMLStyledProps<'button'>, Select.ClearTriggerBaseProps>
+
>(Select.ClearTrigger, 'clearTrigger')
+
+
export const Content = withContext<Assign<HTMLStyledProps<'div'>, Select.ContentBaseProps>>(
+
Select.Content,
+
'content',
+
)
+
+
export const Control = withContext<Assign<HTMLStyledProps<'div'>, Select.ControlBaseProps>>(
+
Select.Control,
+
'control',
+
)
+
+
export const Indicator = withContext<Assign<HTMLStyledProps<'div'>, Select.IndicatorBaseProps>>(
+
Select.Indicator,
+
'indicator',
+
)
+
+
export const ItemGroupLabel = withContext<
+
Assign<HTMLStyledProps<'div'>, Select.ItemGroupLabelBaseProps>
+
>(Select.ItemGroupLabel, 'itemGroupLabel')
+
+
export const ItemGroup = withContext<Assign<HTMLStyledProps<'div'>, Select.ItemGroupBaseProps>>(
+
Select.ItemGroup,
+
'itemGroup',
+
)
+
+
export const ItemIndicator = withContext<
+
Assign<HTMLStyledProps<'div'>, Select.ItemIndicatorBaseProps>
+
>(Select.ItemIndicator, 'itemIndicator')
+
+
export const Item = withContext<Assign<HTMLStyledProps<'div'>, Select.ItemBaseProps>>(
+
Select.Item,
+
'item',
+
)
+
+
export const ItemText = withContext<Assign<HTMLStyledProps<'span'>, Select.ItemTextBaseProps>>(
+
Select.ItemText,
+
'itemText',
+
)
+
+
export const Label = withContext<Assign<HTMLStyledProps<'label'>, Select.LabelBaseProps>>(
+
Select.Label,
+
'label',
+
)
+
+
export const List = withContext<Assign<HTMLStyledProps<'div'>, Select.ListBaseProps>>(
+
Select.List,
+
'list',
+
)
+
+
export const Positioner = withContext<Assign<HTMLStyledProps<'div'>, Select.PositionerBaseProps>>(
+
Select.Positioner,
+
'positioner',
+
)
+
+
export const Trigger = withContext<Assign<HTMLStyledProps<'button'>, Select.TriggerBaseProps>>(
+
Select.Trigger,
+
'trigger',
+
)
+
+
export const ValueText = withContext<Assign<HTMLStyledProps<'span'>, Select.ValueTextBaseProps>>(
+
Select.ValueText,
+
'valueText',
+
)
+
+
export {
+
SelectContext as Context,
+
SelectHiddenSelect as HiddenSelect,
+
} from '@ark-ui/solid'
+7
src/components/ui/styled/spinner.tsx
···
+
import { ark } from '@ark-ui/solid'
+
import type { ComponentProps } from 'solid-js'
+
import { styled } from 'styled-system/jsx'
+
import { spinner } from 'styled-system/recipes'
+
+
export type SpinnerProps = ComponentProps<typeof Spinner>
+
export const Spinner = styled(ark.div, spinner)
+37
src/components/ui/styled/switch.tsx
···
+
import { type Assign, Switch } from '@ark-ui/solid'
+
import type { ComponentProps } from 'solid-js'
+
import { type SwitchRecipeVariantProps, switchRecipe } from 'styled-system/recipes'
+
import type { HTMLStyledProps } from 'styled-system/types'
+
import { createStyleContext } from './utils/create-style-context'
+
+
const { withProvider, withContext } = createStyleContext(switchRecipe)
+
+
export type RootProviderProps = ComponentProps<typeof RootProvider>
+
export const RootProvider = withProvider<
+
Assign<Assign<HTMLStyledProps<'label'>, Switch.RootProviderBaseProps>, SwitchRecipeVariantProps>
+
>(Switch.RootProvider, 'root')
+
+
export type RootProps = ComponentProps<typeof Root>
+
export const Root = withProvider<
+
Assign<Assign<HTMLStyledProps<'label'>, Switch.RootBaseProps>, SwitchRecipeVariantProps>
+
>(Switch.Root, 'root')
+
+
export const Control = withContext<Assign<HTMLStyledProps<'span'>, Switch.ControlBaseProps>>(
+
Switch.Control,
+
'control',
+
)
+
+
export const Label = withContext<Assign<HTMLStyledProps<'span'>, Switch.LabelBaseProps>>(
+
Switch.Label,
+
'label',
+
)
+
+
export const Thumb = withContext<Assign<HTMLStyledProps<'span'>, Switch.ThumbBaseProps>>(
+
Switch.Thumb,
+
'thumb',
+
)
+
+
export {
+
SwitchContext as Context,
+
SwitchHiddenInput as HiddenInput,
+
} from '@ark-ui/solid'
+9
src/components/ui/styled/text.tsx
···
+
import type { ComponentProps, JSX } from 'solid-js'
+
import { styled } from 'styled-system/jsx'
+
import { type TextVariantProps, text } from 'styled-system/recipes'
+
import type { StyledComponent } from 'styled-system/types'
+
+
type ParagraphProps = TextVariantProps & { as?: JSX.Element }
+
+
export type TextProps = ComponentProps<typeof Text>
+
export const Text = styled('p', text) as StyledComponent<'p', ParagraphProps>
+7
src/components/ui/styled/textarea.tsx
···
+
import { ark } from '@ark-ui/solid'
+
import type { ComponentProps } from 'solid-js'
+
import { styled } from 'styled-system/jsx'
+
import { textarea } from 'styled-system/recipes'
+
+
export type TextareaProps = ComponentProps<typeof Textarea>
+
export const Textarea = styled(ark.textarea, textarea)
+40
src/components/ui/styled/toast.tsx
···
+
import { type Assign, Toast } from '@ark-ui/solid'
+
import type { ComponentProps } from 'solid-js'
+
import { toast } from 'styled-system/recipes'
+
import type { HTMLStyledProps } from 'styled-system/types'
+
import { createStyleContext } from './utils/create-style-context'
+
+
const { withProvider, withContext } = createStyleContext(toast)
+
+
export type RootProps = ComponentProps<typeof Root>
+
export const Root = withProvider<Assign<HTMLStyledProps<'div'>, Toast.RootProps>>(
+
Toast.Root,
+
'root',
+
)
+
+
export const ActionTrigger = withContext<
+
Assign<HTMLStyledProps<'button'>, Toast.ActionTriggerProps>
+
>(Toast.ActionTrigger, 'actionTrigger')
+
+
export const CloseTrigger = withContext<Assign<HTMLStyledProps<'div'>, Toast.CloseTriggerProps>>(
+
Toast.CloseTrigger,
+
'closeTrigger',
+
)
+
+
export const Description = withContext<Assign<HTMLStyledProps<'div'>, Toast.DescriptionProps>>(
+
Toast.Description,
+
'description',
+
)
+
+
export const Title = withContext<Assign<HTMLStyledProps<'div'>, Toast.TitleProps>>(
+
Toast.Title,
+
'title',
+
)
+
+
export {
+
ToastContext as Context,
+
createToaster,
+
Toaster,
+
type ToastContextProps as ContextProps,
+
type ToasterProps,
+
} from '@ark-ui/solid'
+42
src/components/ui/styled/tooltip.tsx
···
+
import { type Assign, Tooltip } from '@ark-ui/solid'
+
import type { ComponentProps } from 'solid-js'
+
import { type TooltipVariantProps, tooltip } from 'styled-system/recipes'
+
import type { HTMLStyledProps } from 'styled-system/types'
+
import { createStyleContext } from './utils/create-style-context'
+
+
const { withRootProvider, withContext } = createStyleContext(tooltip)
+
+
export type RootProviderProps = ComponentProps<typeof RootProvider>
+
export const RootProvider = withRootProvider<
+
Assign<Tooltip.RootProviderProps, TooltipVariantProps>
+
>(Tooltip.RootProvider)
+
+
export type RootProps = ComponentProps<typeof Root>
+
export const Root = withRootProvider<Assign<Tooltip.RootProps, TooltipVariantProps>>(Tooltip.Root)
+
+
export const Arrow = withContext<Assign<HTMLStyledProps<'div'>, Tooltip.ArrowBaseProps>>(
+
Tooltip.Arrow,
+
'arrow',
+
)
+
+
export const ArrowTip = withContext<Assign<HTMLStyledProps<'div'>, Tooltip.ArrowTipBaseProps>>(
+
Tooltip.ArrowTip,
+
'arrowTip',
+
)
+
+
export const Content = withContext<Assign<HTMLStyledProps<'div'>, Tooltip.ContentBaseProps>>(
+
Tooltip.Content,
+
'content',
+
)
+
+
export const Positioner = withContext<Assign<HTMLStyledProps<'div'>, Tooltip.PositionerBaseProps>>(
+
Tooltip.Positioner,
+
'positioner',
+
)
+
+
export const Trigger = withContext<Assign<HTMLStyledProps<'button'>, Tooltip.TriggerBaseProps>>(
+
Tooltip.Trigger,
+
'trigger',
+
)
+
+
export { TooltipContext as Context } from '@ark-ui/solid'
+89
src/components/ui/styled/utils/create-style-context.tsx
···
+
import { type JSX, createContext, useContext } from 'solid-js'
+
import { Dynamic } from 'solid-js/web'
+
import { cx } from 'styled-system/css'
+
import { isCssProperty, styled } from 'styled-system/jsx'
+
import type { ElementType, StyledComponent } from 'styled-system/types'
+
+
type Props = Record<string, unknown>
+
type Recipe = {
+
(props?: Props): Props
+
splitVariantProps: (props: Props) => [Props, Props]
+
}
+
+
type Slot<R extends Recipe> = keyof ReturnType<R>
+
type Options = { forwardProps?: string[] }
+
+
const shouldForwardProp = (prop: string, variantKeys: string[], options: Options = {}) =>
+
options.forwardProps?.includes(prop) || (!variantKeys.includes(prop) && !isCssProperty(prop))
+
+
export const createStyleContext = <R extends Recipe>(recipe: R) => {
+
const StyleContext = createContext<Record<Slot<R>, string> | null>(null)
+
+
const withRootProvider = <P extends {}>(Component: ElementType): ((props: P) => JSX.Element) => {
+
const StyledComponent = (props: P) => {
+
const [variantProps, localProps] = recipe.splitVariantProps(props)
+
const slotStyles = recipe(variantProps) as Record<Slot<R>, string>
+
+
return (
+
<StyleContext.Provider value={slotStyles}>
+
<Component {...localProps} />
+
</StyleContext.Provider>
+
)
+
}
+
return StyledComponent
+
}
+
+
const withProvider = <P extends { class?: string }>(
+
Component: ElementType,
+
slot: Slot<R>,
+
options?: Options,
+
): ((props: P) => JSX.Element) => {
+
const StyledComponent = styled(
+
Component,
+
{},
+
{
+
shouldForwardProp: (prop, variantKeys) => shouldForwardProp(prop, variantKeys, options),
+
},
+
) as StyledComponent<ElementType>
+
+
return (props: P) => {
+
const [variantProps, localProps] = recipe.splitVariantProps(props)
+
const slotStyles = recipe(variantProps) as Record<Slot<R>, string>
+
+
return (
+
<StyleContext.Provider value={slotStyles}>
+
<Dynamic
+
component={StyledComponent}
+
{...localProps}
+
class={cx(slotStyles?.[slot], props.class)}
+
/>
+
</StyleContext.Provider>
+
)
+
}
+
}
+
+
const withContext = <P extends { class?: string }>(
+
Component: ElementType,
+
slot: Slot<R>,
+
): ((props: P) => JSX.Element) => {
+
const StyledComponent = styled(Component)
+
+
const Foo = (props: P) => {
+
const slotStyles = useContext(StyleContext)
+
return (
+
<Dynamic
+
component={StyledComponent}
+
{...props}
+
class={cx(slotStyles?.[slot], props.class)}
+
/>
+
)
+
}
+
return Foo
+
}
+
+
return {
+
withRootProvider,
+
withProvider,
+
withContext,
+
}
+
}
+20
src/components/ui/switch.tsx
···
+
import { Show, children } from 'solid-js'
+
import * as StyledSwitch from './styled/switch'
+
+
export interface SwitchProps extends StyledSwitch.RootProps {}
+
+
export const Switch = (props: SwitchProps) => {
+
const getChildren = children(() => props.children)
+
+
return (
+
<StyledSwitch.Root {...props}>
+
<StyledSwitch.Control>
+
<StyledSwitch.Thumb />
+
</StyledSwitch.Control>
+
<Show when={getChildren()}>
+
<StyledSwitch.Label>{getChildren()}</StyledSwitch.Label>
+
</Show>
+
<StyledSwitch.HiddenInput />
+
</StyledSwitch.Root>
+
)
+
}
+1
src/components/ui/text.tsx
···
+
export { Text, type TextProps } from './styled/text'
+1
src/components/ui/textarea.tsx
···
+
export { Textarea, type TextareaProps } from './styled/textarea'
+1
src/components/ui/toast.tsx
···
+
export * as Toast from './styled/toast'
+1
src/components/ui/tooltip.tsx
···
+
export * as Tooltip from './styled/tooltip'
+5
src/index.css
···
+
@layer reset, base, tokens, recipes, utilities;
+
+
.lucide {
+
stroke-width: 3px;
+
}
+56
src/index.tsx
···
+
/* @refresh reload */
+
import { render } from "solid-js/web";
+
import "solid-devtools";
+
import "./index.css";
+
+
import type {} from "@atcute/atproto";
+
import type {} from "@atcute/bluesky";
+
import type {} from "@atcute/microcosm";
+
+
import App from "./App";
+
import { tryFinalizeLogin } from "./lib/oauth";
+
import { accounts, setAccounts } from "./lib/accounts";
+
import { AtprotoDid } from "@atcute/lexicons/syntax";
+
import { toaster } from "./components/Toaster";
+
+
const root = document.getElementById("root");
+
+
if (import.meta.env.DEV && !(root instanceof HTMLElement)) {
+
throw new Error(
+
"Root element not found. Did you forget to add it to your index.html? Or maybe the id attribute got misspelled?",
+
);
+
}
+
+
const prefersDarkScheme = window.matchMedia(
+
"(prefers-color-scheme: dark)",
+
).matches;
+
document.documentElement.dataset.theme = prefersDarkScheme ? "dark" : "light";
+
+
tryFinalizeLogin()
+
.then((login) => {
+
if (!login) return;
+
let currentAccounts = accounts();
+
currentAccounts = currentAccounts.filter((acc) => acc.did !== login.did);
+
setAccounts([
+
...currentAccounts,
+
{
+
did: login.did as AtprotoDid,
+
handle: login.handle === "handle.invalid" ? undefined : login.handle,
+
},
+
]);
+
toaster.create({
+
title: "login success",
+
description: `logged in as ${login.handle}`,
+
type: "success",
+
});
+
})
+
.catch((error) => {
+
console.error(error);
+
toaster.create({
+
title: "login error",
+
description: `${error}`,
+
type: "error",
+
});
+
});
+
+
render(() => <App />, root!);
+26
src/lib/accounts.ts
···
+
import { AtprotoDid, Handle } from "@atcute/lexicons/syntax";
+
import { setting } from "./settings";
+
import { createSignal } from "solid-js";
+
+
export type Account = {
+
did: AtprotoDid;
+
handle?: Handle;
+
};
+
+
export const loggingIn = setting<AtprotoDid>("loggingIn");
+
+
export const accountSetting = setting<Account[]>("accounts");
+
const [_accounts, _setAccounts] = createSignal<Account[]>(
+
accountSetting.get() ?? [],
+
);
+
export const accounts = _accounts;
+
export const setAccounts = (
+
value: Account[] | ((prev: Account[]) => Account[]),
+
) => {
+
const newAccounts = _setAccounts(value);
+
accountSetting.set(newAccounts);
+
};
+
+
export const [selectedAccount, setSelectedAccount] = createSignal<
+
AtprotoDid | undefined
+
>(accounts().at(0)?.did);
+62
src/lib/at.ts
···
+
import { XrpcHandleResolver } from "@atcute/identity-resolver";
+
import { OAuthUserAgent } from "@atcute/oauth-browser-client";
+
import { Client as AtcuteClient, simpleFetchHandler } from "@atcute/client";
+
import { getSessionClient } from "./oauth";
+
import { AppBskyFeedPost } from "@atcute/bluesky";
+
import { AtprotoDid } from "@atcute/lexicons/syntax";
+
+
export const slingshotUrl = "https://slingshot.microcosm.blue";
+
+
export const handleResolver = new XrpcHandleResolver({
+
serviceUrl: slingshotUrl,
+
});
+
export const slingshot = new AtcuteClient({
+
handler: simpleFetchHandler({ service: slingshotUrl }),
+
});
+
+
export const login = async (agent: OAuthUserAgent) => {
+
const rpc = new AtcuteClient({ handler: agent });
+
const res = await rpc.get("com.atproto.server.getSession", { params: {} });
+
if (!res.ok) throw res.data.error;
+
const didDoc = await slingshot.get(
+
"com.bad-example.identity.resolveMiniDoc",
+
{ params: { identifier: res.data.did } },
+
);
+
if (!didDoc.ok) throw didDoc.data.error;
+
return {
+
client: rpc,
+
did: res.data.did,
+
handle: res.data.handle,
+
pds: didDoc.data.pds,
+
};
+
};
+
+
export const sendPost = async (
+
did: AtprotoDid,
+
blob: Blob,
+
postContent: string,
+
) => {
+
const login = await getSessionClient(did);
+
const upload = await login.client.post("com.atproto.repo.uploadBlob", {
+
input: blob,
+
});
+
if (!upload.ok) throw `failed to upload blob: ${upload.data.error}`;
+
const record: AppBskyFeedPost.Main = {
+
$type: "app.bsky.feed.post",
+
text: postContent,
+
embed: {
+
$type: "app.bsky.embed.video",
+
video: upload.data.blob,
+
},
+
createdAt: new Date().toISOString(),
+
};
+
const result = await login.client.post("com.atproto.repo.createRecord", {
+
input: {
+
collection: "app.bsky.feed.post",
+
record,
+
repo: did,
+
},
+
});
+
if (!result.ok) throw `failed to upload post: ${result.data.error}`;
+
return result.data;
+
};
+108
src/lib/oauth.ts
···
+
import {
+
configureOAuth,
+
defaultIdentityResolver,
+
createAuthorizationUrl,
+
finalizeAuthorization,
+
OAuthUserAgent,
+
getSession,
+
deleteStoredSession,
+
} from "@atcute/oauth-browser-client";
+
+
import {
+
CompositeDidDocumentResolver,
+
PlcDidDocumentResolver,
+
WebDidDocumentResolver,
+
} from "@atcute/identity-resolver";
+
import type { ActorIdentifier } from "@atcute/lexicons";
+
import type { AtprotoDid } from "@atcute/lexicons/syntax";
+
import { handleResolver, login } from "./at";
+
import { loggingIn } from "./accounts";
+
import { clientId, redirectUri } from "./oauthMetadata";
+
+
configureOAuth({
+
metadata: {
+
client_id: clientId,
+
redirect_uri: redirectUri,
+
},
+
identityResolver: defaultIdentityResolver({
+
handleResolver,
+
+
didDocumentResolver: new CompositeDidDocumentResolver({
+
methods: {
+
plc: new PlcDidDocumentResolver(),
+
web: new WebDidDocumentResolver(),
+
},
+
}),
+
}),
+
});
+
+
export const sessions = {
+
get: async (did: AtprotoDid) => {
+
const session = await getSession(did, { allowStale: true });
+
return new OAuthUserAgent(session);
+
},
+
remove: async (did: AtprotoDid) => {
+
try {
+
const agent = await sessions.get(did);
+
await agent.signOut();
+
} catch {
+
deleteStoredSession(did);
+
}
+
},
+
};
+
+
export const flow = {
+
start: async (identifier: ActorIdentifier): Promise<void> => {
+
const authUrl = await createAuthorizationUrl({
+
target: { type: "account", identifier },
+
scope: "atproto transition:generic",
+
});
+
// recommended to wait for the browser to persist local storage before proceeding
+
await new Promise((resolve) => setTimeout(resolve, 200));
+
// redirect the user to sign in and authorize the app
+
window.location.assign(authUrl);
+
// if this is on an async function, ideally the function should never ever resolve.
+
// the only way it should resolve at this point is if the user aborted the authorization
+
// by returning back to this page (thanks to back-forward page caching)
+
await new Promise((_resolve, reject) => {
+
const listener = () => {
+
reject(new Error(`user aborted the login request`));
+
};
+
window.addEventListener("pageshow", listener, { once: true });
+
});
+
},
+
finalize: async (url: URL): Promise<OAuthUserAgent | null> => {
+
// createAuthorizationUrl asks server to put the params in the hash
+
const params = new URLSearchParams(url.hash.slice(1));
+
if (!params.has("code")) return null;
+
const { session } = await finalizeAuthorization(params);
+
return new OAuthUserAgent(session);
+
},
+
};
+
+
export const tryFinalizeLogin = async () => {
+
const did = loggingIn.get();
+
if (!did) return;
+
+
const currentUrl = new URL(window.location.href);
+
// scrub history so auth state cant be replayed
+
try {
+
history.replaceState(null, "", "/");
+
} catch {
+
// if router was unitialized then we probably dont need to scrub anyway
+
// so its fine
+
}
+
+
loggingIn.set(undefined);
+
await sessions.remove(did);
+
const agent = await flow.finalize(currentUrl);
+
if (!agent) throw "no session was logged into?";
+
+
return await login(agent);
+
};
+
+
export const getSessionClient = async (did: AtprotoDid) => {
+
const session = await sessions.get(did);
+
if (!session) throw `no session found for ${did}`;
+
return await login(session);
+
};
+13
src/lib/oauthMetadata.json
···
+
{
+
"client_id": "http://localhost:3000",
+
"client_name": "bsky voice memos",
+
"client_uri": "http://localhost:3000",
+
"logo_uri": "http://localhost:3000/favicon.png",
+
"redirect_uris": ["http://127.0.0.1:3000/"],
+
"scope": "atproto transition:generic",
+
"grant_types": ["authorization_code", "refresh_token"],
+
"response_types": ["code"],
+
"token_endpoint_auth_method": "none",
+
"application_type": "web",
+
"dpop_bound_access_tokens": true
+
}
+4
src/lib/oauthMetadata.ts
···
+
const env = import.meta.env;
+
+
export const redirectUri = env.VITE_OAUTH_REDIRECT_URL;
+
export const clientId = env.VITE_OAUTH_CLIENT_ID;
+350
src/lib/render.ts
···
+
import {
+
Output as MediaOutput,
+
Mp4OutputFormat,
+
BufferTarget,
+
CanvasSource,
+
QUALITY_MEDIUM,
+
getFirstEncodableVideoCodec,
+
Input as MediaInput,
+
BlobSource,
+
ALL_FORMATS,
+
Conversion,
+
} from "mediabunny";
+
+
const renderCanvas = new OffscreenCanvas(1280, 720);
+
+
// claude generated visualizer code cuz im lazy and it works okay ig
+
+
/**
+
* Extracts frequency data from audio file for visualization
+
* Efficient FFT-like approach with adaptive sensitivity based on track volume
+
*/
+
const extractFrequencyData = async (file: File, fps: number = 30) => {
+
if (fps <= 0)
+
throw new Error("invalid frame rate: must be greater than zero");
+
+
const audioContext = new AudioContext();
+
const arrayBuffer = await file.arrayBuffer();
+
const audioBuffer = await audioContext.decodeAudioData(arrayBuffer);
+
+
const sampleRate = audioBuffer.sampleRate;
+
const channelData = audioBuffer.getChannelData(0);
+
const fftSize = 2048;
+
const frequencyBinCount = fftSize / 2;
+
const hopSize = Math.floor(sampleRate / fps);
+
const totalFrames = Math.floor(channelData.length / hopSize);
+
+
// Pre-calculate volume levels for adaptive scaling
+
const volumeWindowSize = Math.floor(sampleRate * 2); // 2 second windows
+
const volumeLevels: number[] = [];
+
+
for (let i = 0; i < channelData.length; i += volumeWindowSize) {
+
let sum = 0;
+
const end = Math.min(i + volumeWindowSize, channelData.length);
+
for (let j = i; j < end; j++) {
+
sum += Math.abs(channelData[j]);
+
}
+
volumeLevels.push(sum / (end - i));
+
}
+
+
// Calculate overall average and max volume for normalization
+
const avgVolume =
+
volumeLevels.reduce((a, b) => a + b, 0) / volumeLevels.length;
+
const maxVolume = Math.max(...volumeLevels);
+
+
const allFrequencyData: Uint8Array[] = [];
+
let previousFrame: Float32Array | null = null;
+
const smoothingFactor = 0.45;
+
+
// Pre-compute sine/cosine tables for efficiency
+
const numBands = 128;
+
const cosTable: number[][] = [];
+
const sinTable: number[][] = [];
+
+
for (let i = 0; i < numBands; i++) {
+
cosTable[i] = [];
+
sinTable[i] = [];
+
const freqIndex = Math.pow(i / numBands, 1.5) * frequencyBinCount;
+
+
for (let j = 0; j < fftSize; j++) {
+
const angle = (2 * Math.PI * freqIndex * j) / fftSize;
+
cosTable[i][j] = Math.cos(angle);
+
sinTable[i][j] = Math.sin(angle);
+
}
+
}
+
+
for (let frame = 0; frame < totalFrames; frame++) {
+
const offset = frame * hopSize;
+
+
// Determine which volume window this frame is in
+
const volumeIndex = Math.floor(offset / volumeWindowSize);
+
const currentVolume =
+
volumeLevels[Math.min(volumeIndex, volumeLevels.length - 1)];
+
+
// Calculate adaptive boost: quieter sections get more boost
+
// Range from 1.5x to 8x boost depending on how quiet the section is
+
const volumeRatio = currentVolume / (avgVolume + 0.0001);
+
const adaptiveBoost = Math.pow(1 / (volumeRatio + 0.3), 0.6) * 4;
+
+
const slice = new Float32Array(fftSize);
+
+
// Apply Hann window
+
for (let i = 0; i < fftSize; i++) {
+
const idx = offset + i;
+
const sample = idx < channelData.length ? channelData[idx] : 0;
+
const window = 0.5 * (1 - Math.cos((2 * Math.PI * i) / fftSize));
+
slice[i] = sample * window;
+
}
+
+
// Calculate magnitudes for reduced frequency bands
+
const frequencyData = new Float32Array(numBands);
+
+
for (let i = 0; i < numBands; i++) {
+
let real = 0;
+
let imag = 0;
+
+
for (let j = 0; j < fftSize; j += 4) {
+
real += slice[j] * cosTable[i][j];
+
imag += slice[j] * sinTable[i][j];
+
}
+
+
const magnitude = Math.sqrt(real * real + imag * imag);
+
+
// Apply logarithmic scaling with adaptive boost
+
const boosted = Math.log(magnitude * 30 * adaptiveBoost + 1) * 20;
+
frequencyData[i] = boosted;
+
}
+
+
// Temporal smoothing
+
if (previousFrame) {
+
for (let i = 0; i < numBands; i++) {
+
frequencyData[i] =
+
smoothingFactor * previousFrame[i] +
+
(1 - smoothingFactor) * frequencyData[i];
+
}
+
}
+
+
// Spatial smoothing
+
const smoothed = new Float32Array(numBands);
+
for (let i = 0; i < numBands; i++) {
+
const prev = i > 0 ? frequencyData[i - 1] : frequencyData[i];
+
const next = i < numBands - 1 ? frequencyData[i + 1] : frequencyData[i];
+
smoothed[i] = (prev + frequencyData[i] * 2 + next) / 4;
+
}
+
+
// Expand back to full frequencyBinCount for circular visualization
+
const uint8Data = new Uint8Array(frequencyBinCount);
+
for (let i = 0; i < frequencyBinCount; i++) {
+
const bandIndex = (i / frequencyBinCount) * numBands;
+
const lower = Math.floor(bandIndex);
+
const upper = Math.min(numBands - 1, Math.ceil(bandIndex));
+
const t = bandIndex - lower;
+
+
const value = smoothed[lower] * (1 - t) + smoothed[upper] * t;
+
uint8Data[i] = Math.min(255, Math.max(0, Math.floor(value)));
+
}
+
+
allFrequencyData.push(uint8Data);
+
previousFrame = smoothed;
+
}
+
+
return allFrequencyData;
+
};
+
+
const drawPfp = (
+
ctx: OffscreenCanvasRenderingContext2D,
+
pfpImg: HTMLImageElement,
+
centerX: number,
+
centerY: number,
+
baseRadius: number,
+
) => {
+
const pfpSize = baseRadius * 1.9;
+
const pfpX = centerX - pfpSize / 2;
+
const pfpY = centerY - pfpSize / 2;
+
+
ctx.save();
+
ctx.beginPath();
+
ctx.arc(centerX, centerY, pfpSize / 2, 0, Math.PI * 2);
+
ctx.closePath();
+
ctx.clip();
+
ctx.drawImage(pfpImg, pfpX, pfpY, pfpSize, pfpSize);
+
ctx.restore();
+
};
+
+
/**
+
* Draws circular audio visualizer around center
+
* Inspired by circular spectrum visualizers: https://codepen.io/nfj525/pen/rVBaab
+
*/
+
const drawCircularVisualizer = (
+
ctx: OffscreenCanvasRenderingContext2D,
+
canvas: OffscreenCanvas,
+
frequencyData: Uint8Array,
+
pfpImg: HTMLImageElement | null,
+
) => {
+
const centerX = canvas.width / 2;
+
const centerY = canvas.height / 2;
+
const baseRadius = Math.min(canvas.width, canvas.height) * 0.15;
+
const maxBarHeight = baseRadius * 1.5;
+
+
// Draw profile picture in center if provided
+
if (pfpImg) drawPfp(ctx, pfpImg, centerX, centerY, baseRadius);
+
+
// Draw circular bars
+
const barCount = 128;
+
const angleStep = (Math.PI * 2) / barCount;
+
+
for (let i = 0; i < barCount; i++) {
+
const dataIndex = Math.floor((i / barCount) * frequencyData.length);
+
const value = frequencyData[dataIndex] / 255;
+
const barHeight = value * maxBarHeight;
+
+
const angle = i * angleStep - Math.PI / 2;
+
const innerX = centerX + Math.cos(angle) * baseRadius;
+
const innerY = centerY + Math.sin(angle) * baseRadius;
+
const outerX = centerX + Math.cos(angle) * (baseRadius + barHeight);
+
const outerY = centerY + Math.sin(angle) * (baseRadius + barHeight);
+
+
const hue = (i / barCount) * 360;
+
const brightness = 50 + value * 50;
+
ctx.strokeStyle = `hsl(${hue}, 100%, ${brightness}%)`;
+
ctx.lineWidth = 3;
+
+
ctx.beginPath();
+
ctx.moveTo(innerX, innerY);
+
ctx.lineTo(outerX, outerY);
+
ctx.stroke();
+
}
+
};
+
+
/**
+
* Draws flat horizontal audio visualizer bars
+
*/
+
const drawFlatVisualizer = (
+
ctx: OffscreenCanvasRenderingContext2D,
+
canvas: OffscreenCanvas,
+
frequencyData: Uint8Array,
+
) => {
+
const barCount = 64;
+
const barWidth = canvas.width / barCount;
+
const maxBarHeight = canvas.height * 0.8;
+
const baseY = canvas.height / 2;
+
+
for (let i = 0; i < barCount; i++) {
+
const dataIndex = Math.floor((i / barCount) * frequencyData.length);
+
const value = frequencyData[dataIndex] / 255;
+
const barHeight = (value * maxBarHeight) / 2;
+
+
const hue = (i / barCount) * 360;
+
const brightness = 50 + value * 50;
+
ctx.fillStyle = `hsl(${hue}, 100%, ${brightness}%)`;
+
+
// Draw mirrored bars (top and bottom)
+
ctx.fillRect(i * barWidth, baseY - barHeight, barWidth - 2, barHeight);
+
ctx.fillRect(i * barWidth, baseY, barWidth - 2, barHeight);
+
}
+
};
+
+
type RenderOptions = {
+
pfpUrl: string | undefined;
+
visualizer: boolean;
+
frameRate: number;
+
bgColor: string;
+
};
+
+
export const render = async (file: File, opts: RenderOptions) => {
+
// load pfp picture
+
let pfpImg: HTMLImageElement | null = null;
+
if (opts.pfpUrl) {
+
pfpImg = new Image();
+
pfpImg.crossOrigin = "anonymous";
+
await new Promise((resolve, reject) => {
+
pfpImg!.onload = resolve;
+
pfpImg!.onerror = reject;
+
pfpImg!.src = opts.pfpUrl!;
+
});
+
}
+
+
const input = new MediaInput({
+
source: new BlobSource(file),
+
formats: ALL_FORMATS,
+
});
+
+
const audioTrack = await input.getPrimaryAudioTrack();
+
if (!audioTrack) throw new Error("no audio track found.");
+
+
const duration = await input.computeDuration();
+
if (!duration) throw new Error("couldn't get audio duration.");
+
+
const videoCodec = await getFirstEncodableVideoCodec(
+
new Mp4OutputFormat().getSupportedVideoCodecs(),
+
{
+
width: renderCanvas.width,
+
height: renderCanvas.height,
+
},
+
);
+
if (!videoCodec)
+
throw new Error("your browser doesn't support video encoding.");
+
+
const ctx = renderCanvas.getContext("2d");
+
if (!ctx) throw new Error("couldn't get canvas context.");
+
+
const output = new MediaOutput({
+
format: new Mp4OutputFormat({
+
fastStart: "in-memory",
+
}),
+
target: new BufferTarget(),
+
});
+
const conversion = await Conversion.init({
+
input,
+
output,
+
});
+
const videoSource = new CanvasSource(renderCanvas, {
+
codec: "avc",
+
bitrate: QUALITY_MEDIUM,
+
});
+
output.addVideoTrack(videoSource);
+
await output.start();
+
+
const bgColor = opts.bgColor;
+
const drawBackground = () => {
+
ctx.fillStyle = bgColor;
+
ctx.fillRect(0, 0, renderCanvas.width, renderCanvas.height);
+
};
+
+
if (opts.visualizer) {
+
const freqData = await extractFrequencyData(file, opts.frameRate);
+
const frameDuration = 1 / opts.frameRate;
+
+
// Render animated frames
+
for (let i = 0; i < freqData.length; i++) {
+
const timestamp = i * frameDuration;
+
if (timestamp >= duration) break;
+
+
// bg
+
drawBackground();
+
+
if (pfpImg)
+
drawCircularVisualizer(ctx, renderCanvas, freqData[i], pfpImg);
+
else drawFlatVisualizer(ctx, renderCanvas, freqData[i]);
+
+
await videoSource.add(timestamp);
+
}
+
} else {
+
drawBackground();
+
+
if (pfpImg) {
+
const pfpSize = Math.min(renderCanvas.width, renderCanvas.height) * 0.5;
+
const pfpX = (renderCanvas.width - pfpSize) / 2;
+
const pfpY = (renderCanvas.height - pfpSize) / 2;
+
+
drawPfp(ctx, pfpImg, pfpX, pfpY, pfpSize);
+
}
+
+
await videoSource.add(0, duration);
+
}
+
+
videoSource.close();
+
await conversion.execute();
+
+
return new Blob([output.target.buffer!], { type: "video/mp4" });
+
};
+19
src/lib/settings.ts
···
+
export const setting = <T>(key: string) => {
+
return {
+
get: () => {
+
const value = localStorage.getItem(key);
+
return value !== null ? (JSON.parse(value) as T) : undefined;
+
},
+
set: (value: T | undefined) =>
+
value === undefined
+
? localStorage.removeItem(key)
+
: localStorage.setItem(key, JSON.stringify(value)),
+
};
+
};
+
export type Setting<T> = ReturnType<typeof setting<T>>;
+
+
export const showVisualizer = setting<boolean>("showVisualizer");
+
export const showProfilePicture = setting<boolean>("showProfilePicture");
+
export const useDominantColorAsBg = setting<boolean>("useDominantColorAsBg");
+
export const backgroundColor = setting<string>("backgroundColor");
+
export const frameRate = setting<number>("frameRate");
+98
src/lib/task.ts
···
+
import { AtprotoDid } from "@atcute/lexicons/syntax";
+
import { ReactiveMap } from "@solid-primitives/map";
+
import {
+
backgroundColor,
+
frameRate,
+
showProfilePicture,
+
showVisualizer,
+
useDominantColorAsBg,
+
} from "./settings";
+
import { getSessionClient } from "./oauth";
+
import { is } from "@atcute/lexicons";
+
import { AppBskyActorProfile } from "@atcute/bluesky";
+
import { isBlob } from "@atcute/lexicons/interfaces";
+
import { render } from "./render";
+
import { FastAverageColor } from "fast-average-color";
+
import { toaster } from "~/components/Toaster";
+
import { parseColor } from "@ark-ui/solid";
+
+
export type TaskState = { file: File } & (
+
| { status: "processing" }
+
| { status: "error"; error: string }
+
| { status: "success"; result: Blob }
+
);
+
+
let _idCounter = 0;
+
const generateId = () => _idCounter++;
+
+
const fac = new FastAverageColor();
+
+
export const tasks = new ReactiveMap<number, TaskState>();
+
export const addTask = async (did: AtprotoDid | undefined, file: File) => {
+
const id = generateId();
+
tasks.set(id, { status: "processing", file });
+
try {
+
let pfpUrl: string | undefined = undefined;
+
console.log(did, showProfilePicture.get());
+
if (did && (showProfilePicture.get() ?? true)) {
+
const login = await getSessionClient(did);
+
const profileResult = await login.client.get(
+
"com.atproto.repo.getRecord",
+
{
+
params: {
+
collection: "app.bsky.actor.profile",
+
repo: did,
+
rkey: "self",
+
},
+
},
+
);
+
if (!profileResult.ok)
+
throw `failed to fetch profile: ${profileResult.data.error}`;
+
if (!profileResult.data.value) throw `profile not found`;
+
const profile = profileResult.data.value;
+
if (!is(AppBskyActorProfile.mainSchema, profile))
+
throw `invalid profile schema`;
+
if (profile.avatar && !isBlob(profile.avatar))
+
throw `invalid profile avatar`;
+
pfpUrl = profile.avatar
+
? `${login.pds!}/xrpc/com.atproto.sync.getBlob?did=${did}&cid=${profile.avatar.ref.$link}`
+
: undefined;
+
}
+
let bgColor = backgroundColor.get() ?? "#000000";
+
if (pfpUrl && (useDominantColorAsBg.get() ?? true)) {
+
try {
+
const dom = await fac.getColorAsync(pfpUrl);
+
const color = parseColor(dom.hex).toFormat("hsla");
+
const [h, s, l] = color
+
.getChannels()
+
.map((chan) => color.getChannelValue(chan));
+
bgColor = color.withChannelValue("lightness", l * 0.4).toString("hex");
+
} catch (error) {
+
console.error(error);
+
toaster.create({
+
title: "can't pick dominant color",
+
description: `error: ${error}`,
+
type: "error",
+
});
+
}
+
}
+
const result = await render(file, {
+
pfpUrl,
+
visualizer: showVisualizer.get() ?? true,
+
frameRate: frameRate.get() ?? 30,
+
bgColor,
+
});
+
tasks.set(id, {
+
file,
+
status: "success",
+
result,
+
});
+
} catch (error) {
+
console.error(error);
+
tasks.set(id, {
+
file,
+
status: "error",
+
error: `failed to process audio: ${error}`,
+
});
+
}
+
};
+9
src/vite-env.d.ts
···
+
interface ImportMetaEnv {
+
readonly VITE_CLIENT_URI: string;
+
readonly VITE_OAUTH_CLIENT_ID: string;
+
readonly VITE_OAUTH_REDIRECT_URL: string;
+
}
+
+
interface ImportMeta {
+
readonly env: ImportMetaEnv;
+
}
+26
tsconfig.json
···
+
{
+
"include": ["src", "styled-system"],
+
"compilerOptions": {
+
// General
+
"jsx": "preserve",
+
"jsxImportSource": "solid-js",
+
"target": "ESNext",
+
+
// Modules
+
"allowSyntheticDefaultImports": true,
+
"esModuleInterop": true,
+
"isolatedModules": true,
+
"module": "ESNext",
+
"moduleResolution": "bundler",
+
"noEmit": true,
+
+
// Type Checking & Safety
+
"strict": true,
+
"types": ["vite/client"],
+
+
"baseUrl": ".",
+
"paths": {
+
"~/*": ["./src/*"]
+
}
+
}
+
}
+90
vite.config.ts
···
+
import { defineConfig } from "vite";
+
import solidPlugin from "vite-plugin-solid";
+
import devtools from "solid-devtools/vite";
+
import tsconfigPaths from "vite-tsconfig-paths";
+
import oauthMetadata from "./src/lib/oauthMetadata.json";
+
+
export const makeOauthMetadata = (
+
client_id: string,
+
client_uri: string,
+
redirect_uri: string,
+
) => ({
+
...oauthMetadata,
+
client_id,
+
client_uri,
+
logo_uri: `${client_uri}/favicon.png`,
+
redirect_uris: [redirect_uri],
+
});
+
+
export default defineConfig({
+
plugins: [
+
{
+
name: "oauth-metadata",
+
config(_conf, { command }) {
+
if (command !== "build") {
+
process.env.VITE_CLIENT_URI = "http://localhost:3000";
+
const redirectUri = "http://127.0.0.1:3000";
+
process.env.VITE_OAUTH_REDIRECT_URL = redirectUri;
+
process.env.VITE_OAUTH_CLIENT_ID =
+
`http://localhost` +
+
`?redirect_uri=${encodeURIComponent(redirectUri)}` +
+
`&scope=${encodeURIComponent(oauthMetadata.scope)}`;
+
}
+
},
+
configureServer(server) {
+
server.middlewares.use((req, res, next) => {
+
if (req.headers.host?.startsWith("127.0.0.1")) {
+
const newUrl = `http://localhost:${req.headers.host.split(":")[1] || "3000"}${req.url}`;
+
res.writeHead(301, { Location: newUrl });
+
res.end();
+
return;
+
}
+
next();
+
});
+
server.middlewares.use((req, res, next) => {
+
if (req.url === "/oauth-client-metadata.json") {
+
res.setHeader("Content-Type", "application/json");
+
res.end(
+
JSON.stringify(
+
makeOauthMetadata(
+
process.env.VITE_OAUTH_CLIENT_ID!,
+
process.env.VITE_CLIENT_URI!,
+
process.env.VITE_OAUTH_REDIRECT_URL!,
+
),
+
null,
+
2,
+
),
+
);
+
return;
+
}
+
next();
+
});
+
},
+
generateBundle() {
+
this.emitFile({
+
type: "asset",
+
fileName: "oauth-client-metadata.json",
+
source: JSON.stringify(
+
makeOauthMetadata(
+
process.env.VITE_OAUTH_CLIENT_ID!,
+
process.env.VITE_CLIENT_URI!,
+
process.env.VITE_OAUTH_REDIRECT_URL!,
+
),
+
null,
+
2,
+
),
+
});
+
},
+
},
+
devtools(),
+
solidPlugin(),
+
tsconfigPaths({ root: "./" }),
+
],
+
server: {
+
host: "0.0.0.0",
+
port: 3000,
+
},
+
build: {
+
target: "esnext",
+
},
+
});