From addffce004050a609ff7cb2aac72ef726095ff46 Mon Sep 17 00:00:00 2001 From: Max Farrell Date: Tue, 12 May 2026 23:16:48 -0500 Subject: [PATCH 1/6] feat: add Svelte 5 support via @boldkit/svelte package MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds a new `packages/svelte` workspace with 20 core UI components ported from the Vue package, using Svelte 5 runes syntax and bits-ui as the headless primitive layer (analogous to reka-ui for Vue). Components (50+ .svelte files): - Foundation: Button, Badge, Input, Label, Textarea, Separator, Skeleton - Card: Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter - Display: Alert (+ Title, Description, Action), Avatar (+ Image, Fallback) - Interactive: Checkbox, Switch, Progress, Toggle - Compound: Accordion (+ Item, Trigger, Content) - Navigation: Tabs (+ List, Trigger, Content) - Overlay: Dialog (+ Trigger, Content, Header, Footer, Title, Description, Close) - Form: Select (+ Trigger, Value, Content, Item, Group, Label, Separator) - Menu: DropdownMenu (+ Trigger, Content, Item, Label, Separator, Shortcut) Registry: - `public/r/svelte/*.json` — shadcn-svelte-compatible registry entries - `packages/svelte/scripts/build-registry.js` — registry build script - Root `registry:build:svelte` script wired into `registry:build` All components pass `svelte-check` with 0 errors (Svelte 5 strict mode). CSS variables and keyframe animations reuse the shared neubrutalism design system; accordion/collapsible height variables updated from `--reka-*` to `--bits-*` for bits-ui compatibility. Co-Authored-By: Claude Sonnet 4.6 --- bun.lock | 111 +- package.json | 5 +- packages/svelte/package.json | 63 + packages/svelte/scripts/build-registry.js | 266 ++++ .../components/ui/accordion-content.svelte | 21 + .../lib/components/ui/accordion-item.svelte | 22 + .../components/ui/accordion-trigger.svelte | 26 + .../src/lib/components/ui/accordion.svelte | 18 + .../src/lib/components/ui/alert-action.svelte | 41 + .../components/ui/alert-description.svelte | 16 + .../src/lib/components/ui/alert-title.svelte | 16 + .../svelte/src/lib/components/ui/alert.svelte | 38 + .../lib/components/ui/avatar-fallback.svelte | 22 + .../src/lib/components/ui/avatar-image.svelte | 15 + .../src/lib/components/ui/avatar.svelte | 22 + .../svelte/src/lib/components/ui/badge.svelte | 41 + .../src/lib/components/ui/button.svelte | 79 ++ .../src/lib/components/ui/card-content.svelte | 16 + .../lib/components/ui/card-description.svelte | 16 + .../src/lib/components/ui/card-footer.svelte | 16 + .../src/lib/components/ui/card-header.svelte | 16 + .../src/lib/components/ui/card-title.svelte | 16 + .../svelte/src/lib/components/ui/card.svelte | 25 + .../src/lib/components/ui/checkbox.svelte | 27 + .../src/lib/components/ui/dialog-close.svelte | 14 + .../lib/components/ui/dialog-content.svelte | 34 + .../components/ui/dialog-description.svelte | 19 + .../lib/components/ui/dialog-footer.svelte | 16 + .../lib/components/ui/dialog-header.svelte | 16 + .../src/lib/components/ui/dialog-title.svelte | 19 + .../lib/components/ui/dialog-trigger.svelte | 14 + .../src/lib/components/ui/dialog.svelte | 14 + .../ui/dropdown-menu-content.svelte | 26 + .../components/ui/dropdown-menu-item.svelte | 24 + .../components/ui/dropdown-menu-label.svelte | 24 + .../ui/dropdown-menu-separator.svelte | 12 + .../ui/dropdown-menu-shortcut.svelte | 16 + .../ui/dropdown-menu-trigger.svelte | 14 + .../lib/components/ui/dropdown-menu.svelte | 14 + .../svelte/src/lib/components/ui/input.svelte | 18 + .../svelte/src/lib/components/ui/label.svelte | 22 + .../src/lib/components/ui/progress.svelte | 25 + .../lib/components/ui/select-content.svelte | 33 + .../src/lib/components/ui/select-group.svelte | 14 + .../src/lib/components/ui/select-item.svelte | 31 + .../src/lib/components/ui/select-label.svelte | 19 + .../lib/components/ui/select-separator.svelte | 12 + .../lib/components/ui/select-trigger.svelte | 24 + .../src/lib/components/ui/select-value.svelte | 18 + .../src/lib/components/ui/select.svelte | 16 + .../src/lib/components/ui/separator.svelte | 28 + .../src/lib/components/ui/skeleton.svelte | 15 + .../src/lib/components/ui/switch.svelte | 22 + .../src/lib/components/ui/tabs-content.svelte | 22 + .../src/lib/components/ui/tabs-list.svelte | 22 + .../src/lib/components/ui/tabs-trigger.svelte | 22 + .../svelte/src/lib/components/ui/tabs.svelte | 16 + .../src/lib/components/ui/textarea.svelte | 18 + .../src/lib/components/ui/toggle-variants.ts | 22 + .../src/lib/components/ui/toggle.svelte | 31 + packages/svelte/src/lib/index.ts | 68 + packages/svelte/src/lib/styles/globals.css | 1187 +++++++++++++++++ packages/svelte/src/lib/utils.ts | 6 + packages/svelte/svelte.config.js | 5 + packages/svelte/tsconfig.json | 29 + packages/svelte/vite.config.ts | 13 + public/r/svelte/accordion.json | 39 + public/r/svelte/alert.json | 38 + public/r/svelte/avatar.json | 32 + public/r/svelte/badge.json | 20 + public/r/svelte/button.json | 20 + public/r/svelte/card.json | 48 + public/r/svelte/checkbox.json | 21 + public/r/svelte/dialog.json | 63 + public/r/svelte/dropdown-menu.json | 56 + public/r/svelte/index.json | 102 ++ public/r/svelte/input.json | 18 + public/r/svelte/label.json | 18 + public/r/svelte/progress.json | 20 + public/r/svelte/select.json | 63 + public/r/svelte/separator.json | 18 + public/r/svelte/skeleton.json | 18 + public/r/svelte/styles.json | 14 + public/r/svelte/switch.json | 20 + public/r/svelte/tabs.json | 38 + public/r/svelte/textarea.json | 18 + public/r/svelte/toggle.json | 27 + public/r/svelte/utils.json | 18 + 88 files changed, 3707 insertions(+), 10 deletions(-) create mode 100644 packages/svelte/package.json create mode 100644 packages/svelte/scripts/build-registry.js create mode 100644 packages/svelte/src/lib/components/ui/accordion-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/accordion-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/accordion-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/accordion.svelte create mode 100644 packages/svelte/src/lib/components/ui/alert-action.svelte create mode 100644 packages/svelte/src/lib/components/ui/alert-description.svelte create mode 100644 packages/svelte/src/lib/components/ui/alert-title.svelte create mode 100644 packages/svelte/src/lib/components/ui/alert.svelte create mode 100644 packages/svelte/src/lib/components/ui/avatar-fallback.svelte create mode 100644 packages/svelte/src/lib/components/ui/avatar-image.svelte create mode 100644 packages/svelte/src/lib/components/ui/avatar.svelte create mode 100644 packages/svelte/src/lib/components/ui/badge.svelte create mode 100644 packages/svelte/src/lib/components/ui/button.svelte create mode 100644 packages/svelte/src/lib/components/ui/card-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/card-description.svelte create mode 100644 packages/svelte/src/lib/components/ui/card-footer.svelte create mode 100644 packages/svelte/src/lib/components/ui/card-header.svelte create mode 100644 packages/svelte/src/lib/components/ui/card-title.svelte create mode 100644 packages/svelte/src/lib/components/ui/card.svelte create mode 100644 packages/svelte/src/lib/components/ui/checkbox.svelte create mode 100644 packages/svelte/src/lib/components/ui/dialog-close.svelte create mode 100644 packages/svelte/src/lib/components/ui/dialog-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/dialog-description.svelte create mode 100644 packages/svelte/src/lib/components/ui/dialog-footer.svelte create mode 100644 packages/svelte/src/lib/components/ui/dialog-header.svelte create mode 100644 packages/svelte/src/lib/components/ui/dialog-title.svelte create mode 100644 packages/svelte/src/lib/components/ui/dialog-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/dialog.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu-label.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu-separator.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu-shortcut.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu.svelte create mode 100644 packages/svelte/src/lib/components/ui/input.svelte create mode 100644 packages/svelte/src/lib/components/ui/label.svelte create mode 100644 packages/svelte/src/lib/components/ui/progress.svelte create mode 100644 packages/svelte/src/lib/components/ui/select-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/select-group.svelte create mode 100644 packages/svelte/src/lib/components/ui/select-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/select-label.svelte create mode 100644 packages/svelte/src/lib/components/ui/select-separator.svelte create mode 100644 packages/svelte/src/lib/components/ui/select-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/select-value.svelte create mode 100644 packages/svelte/src/lib/components/ui/select.svelte create mode 100644 packages/svelte/src/lib/components/ui/separator.svelte create mode 100644 packages/svelte/src/lib/components/ui/skeleton.svelte create mode 100644 packages/svelte/src/lib/components/ui/switch.svelte create mode 100644 packages/svelte/src/lib/components/ui/tabs-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/tabs-list.svelte create mode 100644 packages/svelte/src/lib/components/ui/tabs-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/tabs.svelte create mode 100644 packages/svelte/src/lib/components/ui/textarea.svelte create mode 100644 packages/svelte/src/lib/components/ui/toggle-variants.ts create mode 100644 packages/svelte/src/lib/components/ui/toggle.svelte create mode 100644 packages/svelte/src/lib/index.ts create mode 100644 packages/svelte/src/lib/styles/globals.css create mode 100644 packages/svelte/src/lib/utils.ts create mode 100644 packages/svelte/svelte.config.js create mode 100644 packages/svelte/tsconfig.json create mode 100644 packages/svelte/vite.config.ts create mode 100644 public/r/svelte/accordion.json create mode 100644 public/r/svelte/alert.json create mode 100644 public/r/svelte/avatar.json create mode 100644 public/r/svelte/badge.json create mode 100644 public/r/svelte/button.json create mode 100644 public/r/svelte/card.json create mode 100644 public/r/svelte/checkbox.json create mode 100644 public/r/svelte/dialog.json create mode 100644 public/r/svelte/dropdown-menu.json create mode 100644 public/r/svelte/index.json create mode 100644 public/r/svelte/input.json create mode 100644 public/r/svelte/label.json create mode 100644 public/r/svelte/progress.json create mode 100644 public/r/svelte/select.json create mode 100644 public/r/svelte/separator.json create mode 100644 public/r/svelte/skeleton.json create mode 100644 public/r/svelte/styles.json create mode 100644 public/r/svelte/switch.json create mode 100644 public/r/svelte/tabs.json create mode 100644 public/r/svelte/textarea.json create mode 100644 public/r/svelte/toggle.json create mode 100644 public/r/svelte/utils.json diff --git a/bun.lock b/bun.lock index c8c0a694..8857f8a2 100644 --- a/bun.lock +++ b/bun.lock @@ -1,5 +1,6 @@ { "lockfileVersion": 1, + "configVersion": 0, "workspaces": { "": { "name": "boldkit", @@ -82,9 +83,33 @@ "react-dom": ">=18.0.0", }, }, + "packages/svelte": { + "name": "@boldkit/svelte", + "version": "1.0.0", + "dependencies": { + "bits-ui": "^1.3.11", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-svelte": "^0.518.0", + "svelte-sonner": "^1.0.5", + "tailwind-merge": "^3.4.0", + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^5.0.3", + "@tailwindcss/vite": "^4.1.18", + "svelte": "^5.34.6", + "svelte-check": "^4.2.1", + "tailwindcss": "^4.1.18", + "typescript": "~5.9.3", + "vite": "^7.2.4", + }, + "peerDependencies": { + "svelte": ">=5.0.0", + }, + }, "packages/vue": { "name": "@boldkit/vue", - "version": "3.1.3", + "version": "3.1.5", "dependencies": { "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", @@ -180,6 +205,8 @@ "@bcoe/v8-coverage": ["@bcoe/v8-coverage@1.0.2", "", {}, "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA=="], + "@boldkit/svelte": ["@boldkit/svelte@workspace:packages/svelte"], + "@boldkit/vue": ["@boldkit/vue@workspace:packages/vue"], "@date-fns/tz": ["@date-fns/tz@1.4.1", "", {}, "sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA=="], @@ -258,13 +285,13 @@ "@eslint/plugin-kit": ["@eslint/plugin-kit@0.4.1", "", { "dependencies": { "@eslint/core": "^0.17.0", "levn": "^0.4.1" } }, "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA=="], - "@floating-ui/core": ["@floating-ui/core@1.7.3", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w=="], + "@floating-ui/core": ["@floating-ui/core@1.7.5", "", { "dependencies": { "@floating-ui/utils": "^0.2.11" } }, "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ=="], - "@floating-ui/dom": ["@floating-ui/dom@1.7.4", "", { "dependencies": { "@floating-ui/core": "^1.7.3", "@floating-ui/utils": "^0.2.10" } }, "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA=="], + "@floating-ui/dom": ["@floating-ui/dom@1.7.6", "", { "dependencies": { "@floating-ui/core": "^1.7.5", "@floating-ui/utils": "^0.2.11" } }, "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ=="], "@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.6", "", { "dependencies": { "@floating-ui/dom": "^1.7.4" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw=="], - "@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="], + "@floating-ui/utils": ["@floating-ui/utils@0.2.11", "", {}, "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg=="], "@floating-ui/vue": ["@floating-ui/vue@1.1.11", "", { "dependencies": { "@floating-ui/dom": "^1.7.6", "@floating-ui/utils": "^0.2.11", "vue-demi": ">=0.13.0" } }, "sha512-HzHKCNVxnGS35r9fCHBc3+uCnjw9IWIlCPL683cGgM9Kgj2BiAl8x1mS7vtvP6F9S/e/q4O6MApwSHj8hNLGfw=="], @@ -498,6 +525,12 @@ "@standard-schema/utils": ["@standard-schema/utils@0.3.0", "", {}, "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g=="], + "@sveltejs/acorn-typescript": ["@sveltejs/acorn-typescript@1.0.9", "", { "peerDependencies": { "acorn": "^8.9.0" } }, "sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA=="], + + "@sveltejs/vite-plugin-svelte": ["@sveltejs/vite-plugin-svelte@5.1.1", "", { "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^4.0.1", "debug": "^4.4.1", "deepmerge": "^4.3.1", "kleur": "^4.1.5", "magic-string": "^0.30.17", "vitefu": "^1.0.6" }, "peerDependencies": { "svelte": "^5.0.0", "vite": "^6.0.0" } }, "sha512-Y1Cs7hhTc+a5E9Va/xwKlAJoariQyHY+5zBgCZg4PFWNYQ1nMN9sjK1zhw1gK69DuqVP++sht/1GZg1aRwmAXQ=="], + + "@sveltejs/vite-plugin-svelte-inspector": ["@sveltejs/vite-plugin-svelte-inspector@4.0.1", "", { "dependencies": { "debug": "^4.3.7" }, "peerDependencies": { "@sveltejs/vite-plugin-svelte": "^5.0.0", "svelte": "^5.0.0", "vite": "^6.0.0" } }, "sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw=="], + "@swc/helpers": ["@swc/helpers@0.5.21", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg=="], "@tailwindcss/node": ["@tailwindcss/node@4.1.18", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "enhanced-resolve": "^5.18.3", "jiti": "^2.6.1", "lightningcss": "1.30.2", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.1.18" } }, "sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ=="], @@ -598,6 +631,8 @@ "@types/statuses": ["@types/statuses@2.0.6", "", {}, "sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA=="], + "@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="], + "@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], "@types/use-sync-external-store": ["@types/use-sync-external-store@0.0.6", "", {}, "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg=="], @@ -718,10 +753,14 @@ "ast-v8-to-istanbul": ["ast-v8-to-istanbul@1.0.0", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.31", "estree-walker": "^3.0.3", "js-tokens": "^10.0.0" } }, "sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg=="], + "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], "baseline-browser-mapping": ["baseline-browser-mapping@2.9.17", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-agD0MgJFUP/4nvjqzIB29zRPUuCF7Ge6mEv9s8dHrtYD7QWXRcx75rOADE/d5ah1NI+0vkDl0yorDd5U852IQQ=="], + "bits-ui": ["bits-ui@1.8.0", "", { "dependencies": { "@floating-ui/core": "^1.6.4", "@floating-ui/dom": "^1.6.7", "@internationalized/date": "^3.5.6", "css.escape": "^1.5.1", "esm-env": "^1.1.2", "runed": "^0.23.2", "svelte-toolbelt": "^0.7.1", "tabbable": "^6.2.0" }, "peerDependencies": { "svelte": "^5.11.0" } }, "sha512-CXD6Orp7l8QevNDcRPLXc/b8iMVgxDWT2LyTwsdLzJKh9CxesOmPuNePSPqAxKoT59FIdU4aFPS1k7eBdbaCxg=="], + "body-parser": ["body-parser@2.2.2", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.3", "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" } }, "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA=="], "brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], @@ -752,6 +791,8 @@ "character-reference-invalid": ["character-reference-invalid@2.0.1", "", {}, "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw=="], + "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], + "class-variance-authority": ["class-variance-authority@0.7.1", "", { "dependencies": { "clsx": "^2.1.1" } }, "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg=="], "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], @@ -858,6 +899,8 @@ "detect-node-es": ["detect-node-es@1.1.0", "", {}, "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="], + "devalue": ["devalue@5.8.0", "", {}, "sha512-2zA9pFEsnp7vWBZbXF5JAgAq0fsUIt/1XPbRiAmRV3lp/2C3upzH+sADiyy66aFCihoLEsrQHxNM5w1gIDfsBg=="], + "diff": ["diff@8.0.4", "", {}, "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw=="], "dom-accessibility-api": ["dom-accessibility-api@0.6.3", "", {}, "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w=="], @@ -922,12 +965,16 @@ "eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], + "esm-env": ["esm-env@1.2.2", "", {}, "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA=="], + "espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="], "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], "esquery": ["esquery@1.7.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g=="], + "esrap": ["esrap@2.2.8", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" }, "peerDependencies": { "@typescript-eslint/types": "^8.2.0" }, "optionalPeers": ["@typescript-eslint/types"] }, "sha512-MPweq2EvEGj8jwOI7Hgycw/QIHzqA1EbAM8lG7p+FBfZbZq/hQ6h3AMsqnu/djzisH1KVWNzbb7LSgIVtMlPSg=="], + "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], @@ -1080,6 +1127,8 @@ "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + "inline-style-parser": ["inline-style-parser@0.2.7", "", {}, "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA=="], + "input-otp": ["input-otp@1.4.2", "", { "peerDependencies": { "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA=="], "internmap": ["internmap@2.0.3", "", {}, "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg=="], @@ -1122,6 +1171,8 @@ "is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="], + "is-reference": ["is-reference@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.6" } }, "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw=="], + "is-regexp": ["is-regexp@3.1.0", "", {}, "sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA=="], "is-stream": ["is-stream@4.0.1", "", {}, "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A=="], @@ -1194,6 +1245,8 @@ "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], + "locate-character": ["locate-character@3.0.0", "", {}, "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA=="], + "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], @@ -1206,6 +1259,8 @@ "lucide-react": ["lucide-react@0.562.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw=="], + "lucide-svelte": ["lucide-svelte@0.518.0", "", { "peerDependencies": { "svelte": "^3 || ^4 || ^5.0.0-next.42" } }, "sha512-LWuXcRAOFqqSa6QI4Awfe1Y7yZngpX0bB6gfTUefZc/hqHUWb/lukHF5M1SuR4A2O9ra7jsT46WnDtXPMmkNvg=="], + "lucide-vue-next": ["lucide-vue-next@0.468.0", "", { "peerDependencies": { "vue": ">=3.0.1" } }, "sha512-quV/6T8YB1XK0VOEnebg3Byd8Rsan5/m95cvjnuHV4vcS3qEnLAybkrSh0hk3ppavx+V7R1PjNW+mGDvcBdz4A=="], "lz-string": ["lz-string@1.5.0", "", { "bin": { "lz-string": "bin/bin.js" } }, "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ=="], @@ -1242,6 +1297,8 @@ "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + "mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="], + "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], @@ -1378,6 +1435,8 @@ "react-syntax-highlighter": ["react-syntax-highlighter@16.1.0", "", { "dependencies": { "@babel/runtime": "^7.28.4", "highlight.js": "^10.4.1", "highlightjs-vue": "^1.0.0", "lowlight": "^1.17.0", "prismjs": "^1.30.0", "refractor": "^5.0.0" }, "peerDependencies": { "react": ">= 0.14.0" } }, "sha512-E40/hBiP5rCNwkeBN1vRP+xow1X0pndinO+z3h7HLsHyjztbyjfzNWNKuAsJj+7DLam9iT4AaaOZnueCU+Nplg=="], + "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], + "recast": ["recast@0.23.11", "", { "dependencies": { "ast-types": "^0.16.1", "esprima": "~4.0.0", "source-map": "~0.6.1", "tiny-invariant": "^1.3.3", "tslib": "^2.0.1" } }, "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA=="], "recharts": ["recharts@3.7.0", "", { "dependencies": { "@reduxjs/toolkit": "1.x.x || 2.x.x", "clsx": "^2.1.1", "decimal.js-light": "^2.5.1", "es-toolkit": "^1.39.3", "eventemitter3": "^5.0.1", "immer": "^10.1.1", "react-redux": "8.x.x || 9.x.x", "reselect": "5.1.1", "tiny-invariant": "^1.3.3", "use-sync-external-store": "^1.2.2", "victory-vendor": "^37.0.2" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-l2VCsy3XXeraxIID9fx23eCb6iCBsxUQDnE8tWm6DFdszVAO7WVY/ChAD9wVit01y6B2PMupYiMmQwhgPHc9Ew=="], @@ -1416,6 +1475,10 @@ "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], + "runed": ["runed@0.23.4", "", { "dependencies": { "esm-env": "^1.0.0" }, "peerDependencies": { "svelte": "^5.7.0" } }, "sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA=="], + + "sade": ["sade@1.8.1", "", { "dependencies": { "mri": "^1.1.0" } }, "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A=="], + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], @@ -1484,8 +1547,20 @@ "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], + "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="], + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + "svelte": ["svelte@5.55.5", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", "@types/trusted-types": "^2.0.7", "acorn": "^8.12.1", "aria-query": "5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", "devalue": "^5.6.4", "esm-env": "^1.2.1", "esrap": "^2.2.4", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", "zimmerframe": "^1.1.2" } }, "sha512-2uCs/LZ9us+AktdzYJM8OcxQ8qnPS1kpaO7syGT/MgO+6Qr1Ybl+TqPq+97u7PHqmmMlye5ZkoyXONy5mjjAbw=="], + + "svelte-check": ["svelte-check@4.4.8", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "chokidar": "^4.0.1", "fdir": "^6.2.0", "picocolors": "^1.0.0", "sade": "^1.7.4" }, "peerDependencies": { "svelte": "^4.0.0 || ^5.0.0-next.0", "typescript": ">=5.0.0" }, "bin": { "svelte-check": "bin/svelte-check" } }, "sha512-67adfgBox5eNSNIvIIwgFizKGdcRrGpiMoNO2obHcYuLz7iTa8Xgm/NGU3ntMFnNm8K1grFOIG6HhMLX/vcN8w=="], + + "svelte-sonner": ["svelte-sonner@1.1.1", "", { "dependencies": { "runed": "^0.28.0" }, "peerDependencies": { "svelte": "^5.0.0" } }, "sha512-5cd3p7wa4cq0NsqslMwdlPb7x1JglEZ/GKrLePWNr5bCxR1nagAVrY01FRFrXfUGs41miLt3C327+8XJo5BzZw=="], + + "svelte-toolbelt": ["svelte-toolbelt@0.7.1", "", { "dependencies": { "clsx": "^2.1.1", "runed": "^0.23.2", "style-to-object": "^1.0.8" }, "peerDependencies": { "svelte": "^5.0.0" } }, "sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ=="], + + "tabbable": ["tabbable@6.4.0", "", {}, "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg=="], + "tagged-tag": ["tagged-tag@1.0.0", "", {}, "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng=="], "tailwind-merge": ["tailwind-merge@3.4.0", "", {}, "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g=="], @@ -1570,6 +1645,8 @@ "vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "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" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], + "vitefu": ["vitefu@1.1.3", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["vite"] }, "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg=="], + "vitest": ["vitest@4.1.3", "", { "dependencies": { "@vitest/expect": "4.1.3", "@vitest/mocker": "4.1.3", "@vitest/pretty-format": "4.1.3", "@vitest/runner": "4.1.3", "@vitest/snapshot": "4.1.3", "@vitest/spy": "4.1.3", "@vitest/utils": "4.1.3", "es-module-lexer": "^2.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^4.0.0-rc.1", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.1.0", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.1.3", "@vitest/browser-preview": "4.1.3", "@vitest/browser-webdriverio": "4.1.3", "@vitest/coverage-istanbul": "4.1.3", "@vitest/coverage-v8": "4.1.3", "@vitest/ui": "4.1.3", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/coverage-istanbul", "@vitest/coverage-v8", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-DBc4Tx0MPNsqb9isoyOq00lHftVx/KIU44QOm2q59npZyLUkENn8TMFsuzuO+4U2FUa9rgbbPt3udrP25GcjXw=="], "vscode-uri": ["vscode-uri@3.1.0", "", {}, "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ=="], @@ -1618,6 +1695,8 @@ "yoctocolors-cjs": ["yoctocolors-cjs@2.1.3", "", {}, "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw=="], + "zimmerframe": ["zimmerframe@1.1.4", "", {}, "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ=="], + "zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], "zod-to-json-schema": ["zod-to-json-schema@3.25.2", "", { "peerDependencies": { "zod": "^3.25.28 || ^4" } }, "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA=="], @@ -1658,9 +1737,7 @@ "@eslint/eslintrc/globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], - "@floating-ui/vue/@floating-ui/dom": ["@floating-ui/dom@1.7.6", "", { "dependencies": { "@floating-ui/core": "^1.7.5", "@floating-ui/utils": "^0.2.11" } }, "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ=="], - - "@floating-ui/vue/@floating-ui/utils": ["@floating-ui/utils@0.2.11", "", {}, "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg=="], + "@floating-ui/react-dom/@floating-ui/dom": ["@floating-ui/dom@1.7.4", "", { "dependencies": { "@floating-ui/core": "^1.7.3", "@floating-ui/utils": "^0.2.10" } }, "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA=="], "@modelcontextprotocol/sdk/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], @@ -1786,6 +1863,8 @@ "prompts/kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], + "radix-vue/@floating-ui/dom": ["@floating-ui/dom@1.7.4", "", { "dependencies": { "@floating-ui/core": "^1.7.3", "@floating-ui/utils": "^0.2.10" } }, "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA=="], + "radix-vue/@vueuse/core": ["@vueuse/core@10.11.1", "", { "dependencies": { "@types/web-bluetooth": "^0.0.20", "@vueuse/metadata": "10.11.1", "@vueuse/shared": "10.11.1", "vue-demi": ">=0.14.8" } }, "sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww=="], "radix-vue/@vueuse/shared": ["@vueuse/shared@10.11.1", "", { "dependencies": { "vue-demi": ">=0.14.8" } }, "sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA=="], @@ -1800,6 +1879,8 @@ "recast/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "reka-ui/@floating-ui/dom": ["@floating-ui/dom@1.7.4", "", { "dependencies": { "@floating-ui/core": "^1.7.3", "@floating-ui/utils": "^0.2.10" } }, "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA=="], + "restore-cursor/onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], "router/path-to-regexp": ["path-to-regexp@8.4.2", "", {}, "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA=="], @@ -1808,6 +1889,10 @@ "strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + "svelte/aria-query": ["aria-query@5.3.1", "", {}, "sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g=="], + + "svelte-sonner/runed": ["runed@0.28.0", "", { "dependencies": { "esm-env": "^1.0.0" }, "peerDependencies": { "svelte": "^5.7.0" } }, "sha512-k2xx7RuO9hWcdd9f+8JoBeqWtYrm5CALfgpkg2YDB80ds/QE4w0qqu34A7fqiAwiBBSBQOid7TLxwxVC27ymWQ=="], + "use-callback-ref/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], "use-sidecar/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], @@ -1846,7 +1931,9 @@ "@dotenvx/dotenvx/which/isexe": ["isexe@3.1.5", "", {}, "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w=="], - "@floating-ui/vue/@floating-ui/dom/@floating-ui/core": ["@floating-ui/core@1.7.5", "", { "dependencies": { "@floating-ui/utils": "^0.2.11" } }, "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ=="], + "@floating-ui/react-dom/@floating-ui/dom/@floating-ui/core": ["@floating-ui/core@1.7.3", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w=="], + + "@floating-ui/react-dom/@floating-ui/dom/@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="], "@modelcontextprotocol/sdk/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], @@ -1884,10 +1971,18 @@ "eslint-plugin-react-hooks/@babel/core/@babel/types": ["@babel/types@7.28.6", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg=="], + "radix-vue/@floating-ui/dom/@floating-ui/core": ["@floating-ui/core@1.7.3", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w=="], + + "radix-vue/@floating-ui/dom/@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="], + "radix-vue/@vueuse/core/@types/web-bluetooth": ["@types/web-bluetooth@0.0.20", "", {}, "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow=="], "radix-vue/@vueuse/core/@vueuse/metadata": ["@vueuse/metadata@10.11.1", "", {}, "sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw=="], + "reka-ui/@floating-ui/dom/@floating-ui/core": ["@floating-ui/core@1.7.3", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w=="], + + "reka-ui/@floating-ui/dom/@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="], + "vaul-vue/@vueuse/core/@types/web-bluetooth": ["@types/web-bluetooth@0.0.20", "", {}, "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow=="], "vaul-vue/@vueuse/core/@vueuse/metadata": ["@vueuse/metadata@10.11.1", "", {}, "sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw=="], diff --git a/package.json b/package.json index dabd2dd0..9a0a5210 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "workspaces": ["packages/vue"], + "workspaces": ["packages/vue", "packages/svelte"], "name": "boldkit", "version": "3.3.2", "description": "A neubrutalism UI component library for React and Vue 3 - Bold, raw, beautiful.", @@ -32,8 +32,9 @@ "lint:fix": "eslint . --fix", "format": "prettier --write \"src/**/*.{ts,tsx,css}\"", "typecheck": "tsc --noEmit", - "registry:build": "shadcn build && node scripts/build-registry.js && npm run registry:build:vue", + "registry:build": "shadcn build && node scripts/build-registry.js && npm run registry:build:vue && npm run registry:build:svelte", "registry:build:vue": "cd packages/vue && node scripts/build-registry.js", + "registry:build:svelte": "cd packages/svelte && node scripts/build-registry.js", "test": "vitest", "test:run": "vitest run", "test:ui": "vitest --ui", diff --git a/packages/svelte/package.json b/packages/svelte/package.json new file mode 100644 index 00000000..6b6a20cc --- /dev/null +++ b/packages/svelte/package.json @@ -0,0 +1,63 @@ +{ + "name": "@boldkit/svelte", + "version": "1.0.0", + "description": "A neubrutalism Svelte 5 component library built on bits-ui - Bold, raw, beautiful.", + "author": "BoldKit Team", + "license": "MIT", + "homepage": "https://boldkit.dev", + "repository": { + "type": "git", + "url": "https://github.com/ANIBIT14/boldkit.git", + "directory": "packages/svelte" + }, + "keywords": [ + "svelte", + "svelte5", + "components", + "ui", + "neubrutalism", + "brutalism", + "tailwindcss", + "bits-ui", + "shadcn-svelte", + "design-system" + ], + "type": "module", + "exports": { + ".": { + "svelte": "./src/lib/index.ts", + "types": "./src/lib/index.ts" + }, + "./styles": "./src/lib/styles/globals.css" + }, + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview", + "check": "svelte-check --tsconfig ./tsconfig.json", + "build:registry": "node scripts/build-registry.js" + }, + "dependencies": { + "bits-ui": "^1.3.11", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-svelte": "^0.518.0", + "svelte-sonner": "^1.0.5", + "tailwind-merge": "^3.4.0" + }, + "peerDependencies": { + "svelte": ">=5.0.0" + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^5.0.3", + "@tailwindcss/vite": "^4.1.18", + "svelte": "^5.34.6", + "svelte-check": "^4.2.1", + "tailwindcss": "^4.1.18", + "typescript": "~5.9.3", + "vite": "^7.2.4" + }, + "engines": { + "node": ">=20.0.0" + } +} diff --git a/packages/svelte/scripts/build-registry.js b/packages/svelte/scripts/build-registry.js new file mode 100644 index 00000000..936af24d --- /dev/null +++ b/packages/svelte/scripts/build-registry.js @@ -0,0 +1,266 @@ +#!/usr/bin/env node + +/** + * Build Svelte Registry Script + * Generates registry JSON files from Svelte components for shadcn-svelte CLI + */ + +import fs from 'fs' +import path from 'path' +import { fileURLToPath } from 'url' + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) + +const UI_DIR = path.join(__dirname, '../src/lib/components/ui') +const STYLES_DIR = path.join(__dirname, '../src/lib/styles') +const REGISTRY_DIR = path.join(__dirname, '../../../public/r/svelte') + +// Component metadata with dependencies +const componentMeta = { + // Foundation + button: { deps: ['class-variance-authority'], desc: 'Displays a button with neubrutalism styling and press-down animation' }, + input: { deps: [], desc: 'Displays a form input with thick borders' }, + label: { deps: [], desc: 'Renders an accessible label' }, + badge: { deps: ['class-variance-authority'], desc: 'Displays a badge or tag' }, + separator: { deps: [], desc: 'Visually separates content' }, + skeleton: { deps: [], desc: 'Displays a loading placeholder' }, + textarea: { deps: [], desc: 'Displays a multi-line text input' }, + + // Card + card: { + deps: [], + desc: 'Displays a card with header, content, and footer', + files: ['card', 'card-header', 'card-title', 'card-description', 'card-content', 'card-footer'], + }, + + // Alert + alert: { + deps: ['class-variance-authority'], + desc: 'Displays a callout for user attention', + files: ['alert', 'alert-title', 'alert-description', 'alert-action'], + }, + + // Avatar + avatar: { + deps: ['bits-ui'], + desc: 'An image element with fallback', + files: ['avatar', 'avatar-image', 'avatar-fallback'], + }, + + // Interactive (bits-ui) + checkbox: { deps: ['bits-ui', 'lucide-svelte'], desc: 'A checkbox input control' }, + switch: { deps: ['bits-ui'], desc: 'A toggle switch control' }, + progress: { deps: ['bits-ui'], desc: 'Displays an indicator showing completion progress' }, + toggle: { deps: ['bits-ui', 'class-variance-authority'], desc: 'A two-state button', files: ['toggle', 'toggle-variants'] }, + + // Accordion + accordion: { + deps: ['bits-ui', 'lucide-svelte'], + desc: 'A vertically stacked set of interactive headings', + files: ['accordion', 'accordion-item', 'accordion-trigger', 'accordion-content'], + }, + + // Tabs + tabs: { + deps: ['bits-ui'], + desc: 'A set of layered sections of content', + files: ['tabs', 'tabs-list', 'tabs-trigger', 'tabs-content'], + }, + + // Dialog + dialog: { + deps: ['bits-ui', 'lucide-svelte'], + desc: 'A modal dialog with overlay', + files: [ + 'dialog', + 'dialog-trigger', + 'dialog-content', + 'dialog-header', + 'dialog-footer', + 'dialog-title', + 'dialog-description', + 'dialog-close', + ], + }, + + // Select + select: { + deps: ['bits-ui', 'lucide-svelte'], + desc: 'Displays a list of options for the user to pick from', + files: [ + 'select', + 'select-trigger', + 'select-value', + 'select-content', + 'select-item', + 'select-group', + 'select-label', + 'select-separator', + ], + }, + + // Dropdown Menu + 'dropdown-menu': { + deps: ['bits-ui'], + desc: 'Displays a menu to the user', + files: [ + 'dropdown-menu', + 'dropdown-menu-trigger', + 'dropdown-menu-content', + 'dropdown-menu-item', + 'dropdown-menu-label', + 'dropdown-menu-separator', + 'dropdown-menu-shortcut', + ], + }, +} + +function readFile(filePath) { + if (!fs.existsSync(filePath)) return null + return fs.readFileSync(filePath, 'utf-8') +} + +function getComponentFiles(name, meta) { + const filenames = meta.files || [name] + const registryFiles = [] + + for (const filename of filenames) { + const ext = filename.endsWith('-variants') ? '.ts' : '.svelte' + const filePath = path.join(UI_DIR, `${filename}${ext}`) + const content = readFile(filePath) + if (content) { + registryFiles.push({ + path: `registry/default/ui/${filename}${ext}`, + content, + type: 'registry:ui', + target: `lib/components/ui/${filename}${ext}`, + }) + } else { + console.warn(`Missing file: ${filename}${ext}`) + } + } + + return registryFiles +} + +function createRegistryJson(name, meta) { + const registryFiles = getComponentFiles(name, meta) + if (registryFiles.length === 0) return null + + return { + $schema: 'https://ui.shadcn.com/schema/registry-item.json', + name, + type: 'registry:ui', + description: meta.desc, + dependencies: meta.deps || [], + registryDependencies: (meta.registryDeps || ['utils']).concat( + name !== 'utils' ? ['utils'] : [] + ).filter((v, i, a) => a.indexOf(v) === i), + files: registryFiles, + } +} + +function createUtilsRegistry() { + const utilsPath = path.join(__dirname, '../src/lib/utils.ts') + const content = readFile(utilsPath) + if (!content) return null + + return { + $schema: 'https://ui.shadcn.com/schema/registry-item.json', + name: 'utils', + type: 'registry:lib', + description: 'Utility function for merging Tailwind CSS class names', + dependencies: ['clsx', 'tailwind-merge'], + files: [ + { + path: 'registry/default/lib/utils.ts', + content, + type: 'registry:lib', + target: 'lib/utils.ts', + }, + ], + } +} + +function createStylesRegistry() { + const cssPath = path.join(STYLES_DIR, 'globals.css') + const cssContent = readFile(cssPath) + + if (!cssContent) { + console.warn('globals.css not found') + return null + } + + return { + $schema: 'https://ui.shadcn.com/schema/registry-item.json', + name: 'styles', + type: 'registry:style', + description: 'BoldKit neubrutalism CSS variables and utilities', + files: [ + { + path: 'registry/default/styles/globals.css', + content: cssContent, + type: 'registry:style', + target: 'styles/globals.css', + }, + ], + } +} + +function createIndexRegistry(componentNames) { + return { + $schema: 'https://ui.shadcn.com/schema/registry.json', + name: 'boldkit-svelte', + homepage: 'https://boldkit.dev', + items: componentNames.map((name) => ({ + name, + type: 'registry:ui', + registryUrl: `https://boldkit.dev/r/svelte/${name}.json`, + })), + } +} + +// Ensure registry directory exists +if (!fs.existsSync(REGISTRY_DIR)) { + fs.mkdirSync(REGISTRY_DIR, { recursive: true }) +} + +// Generate utils registry +const utilsRegistry = createUtilsRegistry() +if (utilsRegistry) { + fs.writeFileSync(path.join(REGISTRY_DIR, 'utils.json'), JSON.stringify(utilsRegistry, null, 2)) + console.log('Generated: utils.json') +} + +// Generate component registry files +let count = 0 +const componentNames = [] + +for (const [name, meta] of Object.entries(componentMeta)) { + const registry = createRegistryJson(name, meta) + if (registry) { + const outPath = path.join(REGISTRY_DIR, `${name}.json`) + fs.writeFileSync(outPath, JSON.stringify(registry, null, 2)) + count++ + componentNames.push(name) + console.log(`Generated: ${name}.json`) + } +} + +// Generate styles.json +const stylesRegistry = createStylesRegistry() +if (stylesRegistry) { + const stylesPath = path.join(REGISTRY_DIR, 'styles.json') + fs.writeFileSync(stylesPath, JSON.stringify(stylesRegistry, null, 2)) + count++ + console.log('Generated: styles.json') +} + +// Generate index.json +const indexRegistry = createIndexRegistry(componentNames) +const indexPath = path.join(REGISTRY_DIR, 'index.json') +fs.writeFileSync(indexPath, JSON.stringify(indexRegistry, null, 2)) +console.log('Generated: index.json') + +console.log(`\nGenerated ${count} registry files + utils.json + styles.json + index.json`) diff --git a/packages/svelte/src/lib/components/ui/accordion-content.svelte b/packages/svelte/src/lib/components/ui/accordion-content.svelte new file mode 100644 index 00000000..57fd6f69 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/accordion-content.svelte @@ -0,0 +1,21 @@ + + + +
+ {@render children?.()} +
+
diff --git a/packages/svelte/src/lib/components/ui/accordion-item.svelte b/packages/svelte/src/lib/components/ui/accordion-item.svelte new file mode 100644 index 00000000..4795f780 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/accordion-item.svelte @@ -0,0 +1,22 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/accordion-trigger.svelte b/packages/svelte/src/lib/components/ui/accordion-trigger.svelte new file mode 100644 index 00000000..e900ac35 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/accordion-trigger.svelte @@ -0,0 +1,26 @@ + + + + svg]:rotate-180', + className + )} + {...restProps} + > + {@render children?.()} + + + diff --git a/packages/svelte/src/lib/components/ui/accordion.svelte b/packages/svelte/src/lib/components/ui/accordion.svelte new file mode 100644 index 00000000..98b0e0ca --- /dev/null +++ b/packages/svelte/src/lib/components/ui/accordion.svelte @@ -0,0 +1,18 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/alert-action.svelte b/packages/svelte/src/lib/components/ui/alert-action.svelte new file mode 100644 index 00000000..6733a2ac --- /dev/null +++ b/packages/svelte/src/lib/components/ui/alert-action.svelte @@ -0,0 +1,41 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/alert-description.svelte b/packages/svelte/src/lib/components/ui/alert-description.svelte new file mode 100644 index 00000000..3ada1e9c --- /dev/null +++ b/packages/svelte/src/lib/components/ui/alert-description.svelte @@ -0,0 +1,16 @@ + + +
+ {@render children?.()} +
diff --git a/packages/svelte/src/lib/components/ui/alert-title.svelte b/packages/svelte/src/lib/components/ui/alert-title.svelte new file mode 100644 index 00000000..347b90b2 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/alert-title.svelte @@ -0,0 +1,16 @@ + + +
+ {@render children?.()} +
diff --git a/packages/svelte/src/lib/components/ui/alert.svelte b/packages/svelte/src/lib/components/ui/alert.svelte new file mode 100644 index 00000000..f89ef7c9 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/alert.svelte @@ -0,0 +1,38 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/avatar-fallback.svelte b/packages/svelte/src/lib/components/ui/avatar-fallback.svelte new file mode 100644 index 00000000..c23dcfbe --- /dev/null +++ b/packages/svelte/src/lib/components/ui/avatar-fallback.svelte @@ -0,0 +1,22 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/avatar-image.svelte b/packages/svelte/src/lib/components/ui/avatar-image.svelte new file mode 100644 index 00000000..00548ca5 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/avatar-image.svelte @@ -0,0 +1,15 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/avatar.svelte b/packages/svelte/src/lib/components/ui/avatar.svelte new file mode 100644 index 00000000..619f2467 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/avatar.svelte @@ -0,0 +1,22 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/badge.svelte b/packages/svelte/src/lib/components/ui/badge.svelte new file mode 100644 index 00000000..d9e8b684 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/badge.svelte @@ -0,0 +1,41 @@ + + +
+ {@render children?.()} +
diff --git a/packages/svelte/src/lib/components/ui/button.svelte b/packages/svelte/src/lib/components/ui/button.svelte new file mode 100644 index 00000000..6bad6f8b --- /dev/null +++ b/packages/svelte/src/lib/components/ui/button.svelte @@ -0,0 +1,79 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/card-content.svelte b/packages/svelte/src/lib/components/ui/card-content.svelte new file mode 100644 index 00000000..1924f45a --- /dev/null +++ b/packages/svelte/src/lib/components/ui/card-content.svelte @@ -0,0 +1,16 @@ + + +
+ {@render children?.()} +
diff --git a/packages/svelte/src/lib/components/ui/card-description.svelte b/packages/svelte/src/lib/components/ui/card-description.svelte new file mode 100644 index 00000000..8512a085 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/card-description.svelte @@ -0,0 +1,16 @@ + + +
+ {@render children?.()} +
diff --git a/packages/svelte/src/lib/components/ui/card-footer.svelte b/packages/svelte/src/lib/components/ui/card-footer.svelte new file mode 100644 index 00000000..43fe4092 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/card-footer.svelte @@ -0,0 +1,16 @@ + + +
+ {@render children?.()} +
diff --git a/packages/svelte/src/lib/components/ui/card-header.svelte b/packages/svelte/src/lib/components/ui/card-header.svelte new file mode 100644 index 00000000..242a0a2f --- /dev/null +++ b/packages/svelte/src/lib/components/ui/card-header.svelte @@ -0,0 +1,16 @@ + + +
+ {@render children?.()} +
diff --git a/packages/svelte/src/lib/components/ui/card-title.svelte b/packages/svelte/src/lib/components/ui/card-title.svelte new file mode 100644 index 00000000..f42077e6 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/card-title.svelte @@ -0,0 +1,16 @@ + + +
+ {@render children?.()} +
diff --git a/packages/svelte/src/lib/components/ui/card.svelte b/packages/svelte/src/lib/components/ui/card.svelte new file mode 100644 index 00000000..26b77729 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/card.svelte @@ -0,0 +1,25 @@ + + +
+ {@render children?.()} +
diff --git a/packages/svelte/src/lib/components/ui/checkbox.svelte b/packages/svelte/src/lib/components/ui/checkbox.svelte new file mode 100644 index 00000000..6b44cda3 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/checkbox.svelte @@ -0,0 +1,27 @@ + + + +
+ {#if checked} + + {/if} +
+
diff --git a/packages/svelte/src/lib/components/ui/dialog-close.svelte b/packages/svelte/src/lib/components/ui/dialog-close.svelte new file mode 100644 index 00000000..da1bfc4d --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dialog-close.svelte @@ -0,0 +1,14 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/dialog-content.svelte b/packages/svelte/src/lib/components/ui/dialog-content.svelte new file mode 100644 index 00000000..ec950a68 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dialog-content.svelte @@ -0,0 +1,34 @@ + + + + + + {@render children?.()} + + + Close + + + diff --git a/packages/svelte/src/lib/components/ui/dialog-description.svelte b/packages/svelte/src/lib/components/ui/dialog-description.svelte new file mode 100644 index 00000000..91cc537c --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dialog-description.svelte @@ -0,0 +1,19 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/dialog-footer.svelte b/packages/svelte/src/lib/components/ui/dialog-footer.svelte new file mode 100644 index 00000000..797977be --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dialog-footer.svelte @@ -0,0 +1,16 @@ + + +
+ {@render children?.()} +
diff --git a/packages/svelte/src/lib/components/ui/dialog-header.svelte b/packages/svelte/src/lib/components/ui/dialog-header.svelte new file mode 100644 index 00000000..ec4c619e --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dialog-header.svelte @@ -0,0 +1,16 @@ + + +
+ {@render children?.()} +
diff --git a/packages/svelte/src/lib/components/ui/dialog-title.svelte b/packages/svelte/src/lib/components/ui/dialog-title.svelte new file mode 100644 index 00000000..68f0a23d --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dialog-title.svelte @@ -0,0 +1,19 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/dialog-trigger.svelte b/packages/svelte/src/lib/components/ui/dialog-trigger.svelte new file mode 100644 index 00000000..98687307 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dialog-trigger.svelte @@ -0,0 +1,14 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/dialog.svelte b/packages/svelte/src/lib/components/ui/dialog.svelte new file mode 100644 index 00000000..d9d8ee25 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dialog.svelte @@ -0,0 +1,14 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu-content.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu-content.svelte new file mode 100644 index 00000000..8f2981e4 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu-content.svelte @@ -0,0 +1,26 @@ + + + + + {@render children?.()} + + diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu-item.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu-item.svelte new file mode 100644 index 00000000..91f44e40 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu-item.svelte @@ -0,0 +1,24 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu-label.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu-label.svelte new file mode 100644 index 00000000..e9e39db1 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu-label.svelte @@ -0,0 +1,24 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu-separator.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu-separator.svelte new file mode 100644 index 00000000..fc99e0e1 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu-separator.svelte @@ -0,0 +1,12 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu-shortcut.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu-shortcut.svelte new file mode 100644 index 00000000..0a121f34 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu-shortcut.svelte @@ -0,0 +1,16 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu-trigger.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu-trigger.svelte new file mode 100644 index 00000000..ba4c37f5 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu-trigger.svelte @@ -0,0 +1,14 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu.svelte new file mode 100644 index 00000000..84477d63 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu.svelte @@ -0,0 +1,14 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/input.svelte b/packages/svelte/src/lib/components/ui/input.svelte new file mode 100644 index 00000000..2b4e0265 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/input.svelte @@ -0,0 +1,18 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/label.svelte b/packages/svelte/src/lib/components/ui/label.svelte new file mode 100644 index 00000000..e09ec1ee --- /dev/null +++ b/packages/svelte/src/lib/components/ui/label.svelte @@ -0,0 +1,22 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/progress.svelte b/packages/svelte/src/lib/components/ui/progress.svelte new file mode 100644 index 00000000..bcfbd2e6 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/progress.svelte @@ -0,0 +1,25 @@ + + + +
+
diff --git a/packages/svelte/src/lib/components/ui/select-content.svelte b/packages/svelte/src/lib/components/ui/select-content.svelte new file mode 100644 index 00000000..e8d0a106 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/select-content.svelte @@ -0,0 +1,33 @@ + + + + + + + + + {@render children?.()} + + + + + + diff --git a/packages/svelte/src/lib/components/ui/select-group.svelte b/packages/svelte/src/lib/components/ui/select-group.svelte new file mode 100644 index 00000000..72a82802 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/select-group.svelte @@ -0,0 +1,14 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/select-item.svelte b/packages/svelte/src/lib/components/ui/select-item.svelte new file mode 100644 index 00000000..c2329e30 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/select-item.svelte @@ -0,0 +1,31 @@ + + + + {#snippet children({ selected })} + + {#if selected} + + {/if} + + {label ?? value} + {/snippet} + diff --git a/packages/svelte/src/lib/components/ui/select-label.svelte b/packages/svelte/src/lib/components/ui/select-label.svelte new file mode 100644 index 00000000..d60f10be --- /dev/null +++ b/packages/svelte/src/lib/components/ui/select-label.svelte @@ -0,0 +1,19 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/select-separator.svelte b/packages/svelte/src/lib/components/ui/select-separator.svelte new file mode 100644 index 00000000..69443891 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/select-separator.svelte @@ -0,0 +1,12 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/select-trigger.svelte b/packages/svelte/src/lib/components/ui/select-trigger.svelte new file mode 100644 index 00000000..3f91e319 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/select-trigger.svelte @@ -0,0 +1,24 @@ + + +span]:line-clamp-1 transition-all duration-200', + className + )} + {...restProps} +> + {@render children?.()} + + diff --git a/packages/svelte/src/lib/components/ui/select-value.svelte b/packages/svelte/src/lib/components/ui/select-value.svelte new file mode 100644 index 00000000..37433356 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/select-value.svelte @@ -0,0 +1,18 @@ + + +{#if children} + {@render children()} +{:else if placeholder} + {placeholder} +{/if} diff --git a/packages/svelte/src/lib/components/ui/select.svelte b/packages/svelte/src/lib/components/ui/select.svelte new file mode 100644 index 00000000..d3f68e45 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/select.svelte @@ -0,0 +1,16 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/separator.svelte b/packages/svelte/src/lib/components/ui/separator.svelte new file mode 100644 index 00000000..2fca1104 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/separator.svelte @@ -0,0 +1,28 @@ + + +
diff --git a/packages/svelte/src/lib/components/ui/skeleton.svelte b/packages/svelte/src/lib/components/ui/skeleton.svelte new file mode 100644 index 00000000..df6ff70c --- /dev/null +++ b/packages/svelte/src/lib/components/ui/skeleton.svelte @@ -0,0 +1,15 @@ + + +
diff --git a/packages/svelte/src/lib/components/ui/switch.svelte b/packages/svelte/src/lib/components/ui/switch.svelte new file mode 100644 index 00000000..e79a54ad --- /dev/null +++ b/packages/svelte/src/lib/components/ui/switch.svelte @@ -0,0 +1,22 @@ + + + + + diff --git a/packages/svelte/src/lib/components/ui/tabs-content.svelte b/packages/svelte/src/lib/components/ui/tabs-content.svelte new file mode 100644 index 00000000..91b4d91e --- /dev/null +++ b/packages/svelte/src/lib/components/ui/tabs-content.svelte @@ -0,0 +1,22 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/tabs-list.svelte b/packages/svelte/src/lib/components/ui/tabs-list.svelte new file mode 100644 index 00000000..009f9368 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/tabs-list.svelte @@ -0,0 +1,22 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/tabs-trigger.svelte b/packages/svelte/src/lib/components/ui/tabs-trigger.svelte new file mode 100644 index 00000000..5b828a86 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/tabs-trigger.svelte @@ -0,0 +1,22 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/tabs.svelte b/packages/svelte/src/lib/components/ui/tabs.svelte new file mode 100644 index 00000000..73cfb5a7 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/tabs.svelte @@ -0,0 +1,16 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/textarea.svelte b/packages/svelte/src/lib/components/ui/textarea.svelte new file mode 100644 index 00000000..10d547d7 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/textarea.svelte @@ -0,0 +1,18 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/toggle-variants.ts b/packages/svelte/src/lib/components/ui/toggle-variants.ts new file mode 100644 index 00000000..a274e02c --- /dev/null +++ b/packages/svelte/src/lib/components/ui/toggle-variants.ts @@ -0,0 +1,22 @@ +import { cva } from 'class-variance-authority' + +export const toggleVariants = cva( + 'inline-flex items-center justify-center text-sm font-bold uppercase tracking-wide transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border-3 border-foreground shadow-[4px_4px_0px_hsl(var(--shadow-color))] [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 gap-2 hover:translate-x-[4px] hover:translate-y-[4px] hover:shadow-none active:translate-x-[4px] active:translate-y-[4px] active:shadow-none data-[state=on]:bg-primary data-[state=on]:text-primary-foreground data-[state=on]:translate-x-[4px] data-[state=on]:translate-y-[4px] data-[state=on]:shadow-none', + { + variants: { + variant: { + default: 'bg-transparent hover:bg-muted', + outline: 'bg-background hover:bg-muted', + }, + size: { + default: 'h-10 px-3 min-w-10', + sm: 'h-9 px-2.5 min-w-9', + lg: 'h-11 px-5 min-w-11', + }, + }, + defaultVariants: { + variant: 'default', + size: 'default', + }, + } +) diff --git a/packages/svelte/src/lib/components/ui/toggle.svelte b/packages/svelte/src/lib/components/ui/toggle.svelte new file mode 100644 index 00000000..74b5f4a1 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/toggle.svelte @@ -0,0 +1,31 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/index.ts b/packages/svelte/src/lib/index.ts new file mode 100644 index 00000000..7a4f6505 --- /dev/null +++ b/packages/svelte/src/lib/index.ts @@ -0,0 +1,68 @@ +export { default as Button } from './components/ui/button.svelte' +export { default as Badge } from './components/ui/badge.svelte' + +export { default as Card } from './components/ui/card.svelte' +export { default as CardHeader } from './components/ui/card-header.svelte' +export { default as CardTitle } from './components/ui/card-title.svelte' +export { default as CardDescription } from './components/ui/card-description.svelte' +export { default as CardContent } from './components/ui/card-content.svelte' +export { default as CardFooter } from './components/ui/card-footer.svelte' + +export { default as Input } from './components/ui/input.svelte' +export { default as Label } from './components/ui/label.svelte' +export { default as Textarea } from './components/ui/textarea.svelte' +export { default as Separator } from './components/ui/separator.svelte' +export { default as Skeleton } from './components/ui/skeleton.svelte' + +export { default as Alert } from './components/ui/alert.svelte' +export { default as AlertTitle } from './components/ui/alert-title.svelte' +export { default as AlertDescription } from './components/ui/alert-description.svelte' +export { default as AlertAction } from './components/ui/alert-action.svelte' + +export { default as Avatar } from './components/ui/avatar.svelte' +export { default as AvatarImage } from './components/ui/avatar-image.svelte' +export { default as AvatarFallback } from './components/ui/avatar-fallback.svelte' + +export { default as Checkbox } from './components/ui/checkbox.svelte' +export { default as Switch } from './components/ui/switch.svelte' +export { default as Progress } from './components/ui/progress.svelte' +export { default as Toggle } from './components/ui/toggle.svelte' +export { toggleVariants } from './components/ui/toggle-variants.js' + +export { default as Accordion } from './components/ui/accordion.svelte' +export { default as AccordionItem } from './components/ui/accordion-item.svelte' +export { default as AccordionTrigger } from './components/ui/accordion-trigger.svelte' +export { default as AccordionContent } from './components/ui/accordion-content.svelte' + +export { default as Tabs } from './components/ui/tabs.svelte' +export { default as TabsList } from './components/ui/tabs-list.svelte' +export { default as TabsTrigger } from './components/ui/tabs-trigger.svelte' +export { default as TabsContent } from './components/ui/tabs-content.svelte' + +export { default as Dialog } from './components/ui/dialog.svelte' +export { default as DialogTrigger } from './components/ui/dialog-trigger.svelte' +export { default as DialogContent } from './components/ui/dialog-content.svelte' +export { default as DialogHeader } from './components/ui/dialog-header.svelte' +export { default as DialogFooter } from './components/ui/dialog-footer.svelte' +export { default as DialogTitle } from './components/ui/dialog-title.svelte' +export { default as DialogDescription } from './components/ui/dialog-description.svelte' +export { default as DialogClose } from './components/ui/dialog-close.svelte' + +export { default as Select } from './components/ui/select.svelte' +export { default as SelectTrigger } from './components/ui/select-trigger.svelte' +export { default as SelectValue } from './components/ui/select-value.svelte' +export { default as SelectContent } from './components/ui/select-content.svelte' +export { default as SelectItem } from './components/ui/select-item.svelte' +export { default as SelectGroup } from './components/ui/select-group.svelte' +export { default as SelectLabel } from './components/ui/select-label.svelte' +export { default as SelectSeparator } from './components/ui/select-separator.svelte' + +export { default as DropdownMenu } from './components/ui/dropdown-menu.svelte' +export { default as DropdownMenuTrigger } from './components/ui/dropdown-menu-trigger.svelte' +export { default as DropdownMenuContent } from './components/ui/dropdown-menu-content.svelte' +export { default as DropdownMenuItem } from './components/ui/dropdown-menu-item.svelte' +export { default as DropdownMenuLabel } from './components/ui/dropdown-menu-label.svelte' +export { default as DropdownMenuSeparator } from './components/ui/dropdown-menu-separator.svelte' +export { default as DropdownMenuShortcut } from './components/ui/dropdown-menu-shortcut.svelte' + +export { cn } from './utils.js' diff --git a/packages/svelte/src/lib/styles/globals.css b/packages/svelte/src/lib/styles/globals.css new file mode 100644 index 00000000..b7c33a1e --- /dev/null +++ b/packages/svelte/src/lib/styles/globals.css @@ -0,0 +1,1187 @@ +@import 'tailwindcss'; + +@custom-variant dark (&:is(.dark *)); + +/* BoldKit Theme Definition for Tailwind v4 */ +@theme { + --color-background: hsl(var(--background)); + --color-foreground: hsl(var(--foreground)); + --color-card: hsl(var(--card)); + --color-card-foreground: hsl(var(--card-foreground)); + --color-popover: hsl(var(--popover)); + --color-popover-foreground: hsl(var(--popover-foreground)); + --color-primary: hsl(var(--primary)); + --color-primary-foreground: hsl(var(--primary-foreground)); + --color-secondary: hsl(var(--secondary)); + --color-secondary-foreground: hsl(var(--secondary-foreground)); + --color-accent: hsl(var(--accent)); + --color-accent-foreground: hsl(var(--accent-foreground)); + --color-muted: hsl(var(--muted)); + --color-muted-foreground: hsl(var(--muted-foreground)); + --color-destructive: hsl(var(--destructive)); + --color-destructive-foreground: hsl(var(--destructive-foreground)); + --color-success: hsl(var(--success)); + --color-success-foreground: hsl(var(--success-foreground)); + --color-warning: hsl(var(--warning)); + --color-warning-foreground: hsl(var(--warning-foreground)); + --color-info: hsl(var(--info)); + --color-info-foreground: hsl(var(--info-foreground)); + --color-border: hsl(var(--border)); + --color-input: hsl(var(--input)); + --color-ring: hsl(var(--ring)); + --color-chart-1: hsl(var(--chart-1)); + --color-chart-2: hsl(var(--chart-2)); + --color-chart-3: hsl(var(--chart-3)); + --color-chart-4: hsl(var(--chart-4)); + --color-chart-5: hsl(var(--chart-5)); + /* Neon Colors */ + --color-neon-pink: hsl(var(--neon-pink)); + --color-neon-green: hsl(var(--neon-green)); + --color-neon-blue: hsl(var(--neon-blue)); + --color-neon-orange: hsl(var(--neon-orange)); + --color-neon-purple: hsl(var(--neon-purple)); + /* Clash Colors */ + --color-clash-1: hsl(var(--clash-1)); + --color-clash-2: hsl(var(--clash-2)); + --color-clash-3: hsl(var(--clash-3)); + --color-clash-4: hsl(var(--clash-4)); + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); +} + +/* BoldKit - Neubrutalism Design System */ +:root { + /* Base Colors */ + --background: 60 9% 98%; + --foreground: 240 10% 10%; + + /* Card */ + --card: 0 0% 100%; + --card-foreground: 240 10% 10%; + + /* Popover */ + --popover: 0 0% 100%; + --popover-foreground: 240 10% 10%; + + /* Primary - Coral Red */ + --primary: 0 84% 71%; + --primary-foreground: 240 10% 10%; + + /* Secondary - Teal */ + --secondary: 174 62% 56%; + --secondary-foreground: 240 10% 10%; + + /* Accent - Yellow */ + --accent: 49 100% 71%; + --accent-foreground: 240 10% 10%; + + /* Muted */ + --muted: 60 5% 90%; + --muted-foreground: 240 4% 46%; + + /* Destructive */ + --destructive: 0 84% 60%; + --destructive-foreground: 0 0% 100%; + + /* Success */ + --success: 152 69% 69%; + --success-foreground: 240 10% 10%; + + /* Warning */ + --warning: 49 100% 60%; + --warning-foreground: 240 10% 10%; + + /* Info */ + --info: 212 100% 73%; + --info-foreground: 240 10% 10%; + + /* Border & Input */ + --border: 240 10% 10%; + --input: 240 10% 10%; + --ring: 240 10% 10%; + + /* Radius - Minimal for neubrutalism */ + --radius: 0rem; + + /* BoldKit specific */ + --shadow-color: 240 10% 10%; + --shadow-offset: 4px; + --border-width: 3px; + + /* Chart colors */ + --chart-1: 0 84% 71%; + --chart-2: 174 62% 56%; + --chart-3: 49 100% 71%; + --chart-4: 271 76% 53%; + --chart-5: 326 78% 60%; + + /* Neon Colors - High saturation, vibrant */ + --neon-pink: 330 100% 65%; + --neon-green: 120 100% 50%; + --neon-blue: 195 100% 50%; + --neon-orange: 25 100% 55%; + --neon-purple: 280 100% 60%; + + /* Clash Colors - Unconventional pairings */ + --clash-1: 15 85% 60%; /* Burnt orange */ + --clash-2: 280 70% 50%; /* Deep purple */ + --clash-3: 165 80% 45%; /* Cyan-teal */ + --clash-4: 45 95% 55%; /* Mustard */ +} + +.dark { + --background: 240 10% 10%; + --foreground: 60 9% 98%; + + --card: 240 10% 14%; + --card-foreground: 60 9% 98%; + + --popover: 240 10% 14%; + --popover-foreground: 60 9% 98%; + + --primary: 0 84% 71%; + --primary-foreground: 240 10% 10%; + + --secondary: 174 62% 56%; + --secondary-foreground: 240 10% 10%; + + --accent: 49 100% 71%; + --accent-foreground: 240 10% 10%; + + --muted: 240 10% 20%; + --muted-foreground: 60 5% 65%; + + --destructive: 0 84% 60%; + --destructive-foreground: 0 0% 100%; + + --success: 152 69% 69%; + --success-foreground: 240 10% 10%; + + --warning: 49 100% 60%; + --warning-foreground: 240 10% 10%; + + --info: 212 100% 73%; + --info-foreground: 240 10% 10%; + + --border: 60 9% 98%; + --input: 60 9% 98%; + --ring: 60 9% 98%; + + --shadow-color: 0 0% 0%; + + /* Neon Colors - Slightly adjusted for dark mode */ + --neon-pink: 330 100% 70%; + --neon-green: 120 100% 55%; + --neon-blue: 195 100% 55%; + --neon-orange: 25 100% 60%; + --neon-purple: 280 100% 65%; + + /* Clash Colors */ + --clash-1: 15 85% 65%; + --clash-2: 280 70% 55%; + --clash-3: 165 80% 50%; + --clash-4: 45 95% 60%; +} + +/* Base styles */ +* { + @apply border-border; +} + +body { + @apply bg-background text-foreground antialiased; + font-family: 'Outfit', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; +} + +/* BoldKit Shadow Utility */ +.bk-shadow { + box-shadow: var(--shadow-offset) var(--shadow-offset) 0px hsl(var(--shadow-color)); +} + +.bk-shadow-sm { + box-shadow: 2px 2px 0px hsl(var(--shadow-color)); +} + +.bk-shadow-md { + box-shadow: 6px 6px 0px hsl(var(--shadow-color)); +} + +.bk-shadow-lg { + box-shadow: 8px 8px 0px hsl(var(--shadow-color)); +} + +.bk-shadow-xl { + box-shadow: 12px 12px 0px hsl(var(--shadow-color)); +} + +.bk-shadow-2xl { + box-shadow: 16px 16px 0px hsl(var(--shadow-color)); +} + +/* Colored Shadow Variants */ +.bk-shadow-primary { + box-shadow: 4px 4px 0px hsl(var(--primary)); +} + +.bk-shadow-secondary { + box-shadow: 4px 4px 0px hsl(var(--secondary)); +} + +.bk-shadow-accent { + box-shadow: 4px 4px 0px hsl(var(--accent)); +} + +.bk-shadow-destructive { + box-shadow: 4px 4px 0px hsl(var(--destructive)); +} + +.bk-shadow-neon-pink { + box-shadow: 4px 4px 0px hsl(var(--neon-pink)); +} + +.bk-shadow-neon-green { + box-shadow: 4px 4px 0px hsl(var(--neon-green)); +} + +.bk-shadow-neon-blue { + box-shadow: 4px 4px 0px hsl(var(--neon-blue)); +} + +/* Double Shadow Effect - Layered depth */ +.bk-shadow-double { + box-shadow: + 4px 4px 0px hsl(var(--primary)), + 8px 8px 0px hsl(var(--shadow-color)); +} + +.bk-shadow-double-accent { + box-shadow: + 4px 4px 0px hsl(var(--accent)), + 8px 8px 0px hsl(var(--shadow-color)); +} + +.bk-shadow-double-lg { + box-shadow: + 6px 6px 0px hsl(var(--primary)), + 12px 12px 0px hsl(var(--shadow-color)); +} + +/* Triple Shadow Effect - Maximum depth */ +.bk-shadow-triple { + box-shadow: + 3px 3px 0px hsl(var(--primary)), + 6px 6px 0px hsl(var(--secondary)), + 9px 9px 0px hsl(var(--shadow-color)); +} + +/* Hover transform effect */ +.bk-hover:hover { + transform: translate(-2px, -2px); +} + +.bk-hover:active { + transform: translate(2px, 2px); + box-shadow: 2px 2px 0px hsl(var(--shadow-color)); +} + +/* Enhanced hover with scale */ +.bk-hover-scale:hover { + transform: translate(-2px, -2px) scale(1.02); +} + +.bk-hover-scale:active { + transform: translate(2px, 2px) scale(0.98); + box-shadow: 2px 2px 0px hsl(var(--shadow-color)); +} + +/* Border Variations */ +.border-4 { + border-width: 4px; +} + +.border-5 { + border-width: 5px; +} + +.border-6 { + border-width: 6px; +} + +/* Double Border Effect - Sticker/Stamp style */ +.bk-double-border { + outline: 3px solid hsl(var(--foreground)); + outline-offset: 3px; +} + +.bk-double-border-primary { + outline: 3px solid hsl(var(--primary)); + outline-offset: 3px; +} + +.bk-double-border-accent { + outline: 3px solid hsl(var(--accent)); + outline-offset: 3px; +} + +/* Dashed border for rough/hand-drawn feel */ +.bk-dashed-border { + border-style: dashed; + border-width: 3px; +} + +/* Sticker Effect - Rotated with double border */ +.bk-sticker { + position: relative; + display: inline-block; + padding: 0.5rem 1rem; + border: 3px solid hsl(var(--foreground)); + background: hsl(var(--accent)); + box-shadow: 4px 4px 0px hsl(var(--shadow-color)); + transform: rotate(-2deg); + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.05em; +} + +.bk-sticker::before { + content: ''; + position: absolute; + inset: -6px; + border: 2px dashed hsl(var(--foreground) / 0.5); +} + +.bk-sticker-tilted { + transform: rotate(-6deg); +} + +.bk-sticker-tilted-right { + transform: rotate(6deg); +} + +/* Stamp Effect - Circular with rough edges */ +.bk-stamp { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 1rem; + border: 4px solid hsl(var(--foreground)); + border-radius: 50%; + background: hsl(var(--primary)); + color: hsl(var(--primary-foreground)); + font-weight: 900; + text-transform: uppercase; + letter-spacing: 0.1em; + box-shadow: 4px 4px 0px hsl(var(--shadow-color)); + transform: rotate(-12deg); +} + +/* Tape Effect - Decorative tape strips */ +.bk-tape { + position: relative; +} + +.bk-tape::before { + content: ''; + position: absolute; + top: -8px; + left: 50%; + transform: translateX(-50%) rotate(-2deg); + width: 60px; + height: 20px; + background: hsl(var(--accent) / 0.8); + border: 2px solid hsl(var(--foreground)); +} + +/* Selection */ +::selection { + @apply bg-accent text-accent-foreground; +} + +/* ========================================== + TYPOGRAPHY ENHANCEMENTS + ========================================== */ + +/* Extra-wide letter spacing for emphasis */ +.tracking-extra-wide { + letter-spacing: 0.2em; +} + +.tracking-ultra-wide { + letter-spacing: 0.3em; +} + +/* Text overflow effect - intentional overflow */ +.bk-text-overflow { + overflow: visible; + white-space: nowrap; +} + +.bk-text-overflow-clip { + position: relative; +} + +.bk-text-overflow-clip::after { + content: ''; + position: absolute; + right: -20px; + top: 0; + bottom: 0; + width: 40px; + background: linear-gradient(to right, transparent, hsl(var(--background))); +} + +/* Dramatic text sizes */ +.text-display { + font-size: 4rem; + line-height: 1; + font-weight: 900; + letter-spacing: -0.02em; +} + +.text-display-lg { + font-size: 6rem; + line-height: 0.9; + font-weight: 900; + letter-spacing: -0.03em; +} + +.text-display-xl { + font-size: 8rem; + line-height: 0.85; + font-weight: 900; + letter-spacing: -0.04em; +} + +/* Outlined text */ +.bk-text-outline { + -webkit-text-stroke: 2px hsl(var(--foreground)); + color: transparent; +} + +.bk-text-outline-thick { + -webkit-text-stroke: 3px hsl(var(--foreground)); + color: transparent; +} + +/* Text with shadow */ +.bk-text-shadow { + text-shadow: 3px 3px 0px hsl(var(--shadow-color)); +} + +.bk-text-shadow-lg { + text-shadow: 5px 5px 0px hsl(var(--shadow-color)); +} + +.bk-text-shadow-colored { + text-shadow: 3px 3px 0px hsl(var(--primary)); +} + +/* ========================================== + TEXTURE & PATTERN UTILITIES + ========================================== */ + +/* Noise/Grain texture overlay */ +.bk-noise { + position: relative; +} + +.bk-noise::before { + content: ''; + position: absolute; + inset: 0; + background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E"); + opacity: 0.08; + pointer-events: none; + mix-blend-mode: overlay; +} + +.bk-noise-heavy::before { + opacity: 0.15; +} + +.bk-noise-light::before { + opacity: 0.04; +} + +/* Halftone dot pattern */ +.bk-halftone { + position: relative; +} + +.bk-halftone::before { + content: ''; + position: absolute; + inset: 0; + background-image: radial-gradient(circle, hsl(var(--foreground) / 0.15) 1px, transparent 1px); + background-size: 8px 8px; + pointer-events: none; +} + +.bk-halftone-dense::before { + background-size: 4px 4px; +} + +.bk-halftone-sparse::before { + background-size: 12px 12px; +} + +/* Grid pattern variations */ +.grid-pattern-sm { + background-image: + linear-gradient(hsl(var(--border) / 0.3) 1px, transparent 1px), + linear-gradient(90deg, hsl(var(--border) / 0.3) 1px, transparent 1px); + background-size: 20px 20px; +} + +.grid-pattern-lg { + background-image: + linear-gradient(hsl(var(--border) / 0.3) 1px, transparent 1px), + linear-gradient(90deg, hsl(var(--border) / 0.3) 1px, transparent 1px); + background-size: 60px 60px; +} + +.grid-pattern-bold { + background-image: + linear-gradient(hsl(var(--border) / 0.5) 2px, transparent 2px), + linear-gradient(90deg, hsl(var(--border) / 0.5) 2px, transparent 2px); + background-size: 40px 40px; +} + +/* Diagonal lines pattern */ +.bk-diagonal-lines { + background-image: repeating-linear-gradient( + 45deg, + transparent, + transparent 10px, + hsl(var(--border) / 0.2) 10px, + hsl(var(--border) / 0.2) 11px + ); +} + +/* Checkerboard pattern */ +.bk-checkerboard { + background-image: + linear-gradient(45deg, hsl(var(--muted)) 25%, transparent 25%), + linear-gradient(-45deg, hsl(var(--muted)) 25%, transparent 25%), + linear-gradient(45deg, transparent 75%, hsl(var(--muted)) 75%), + linear-gradient(-45deg, transparent 75%, hsl(var(--muted)) 75%); + background-size: 20px 20px; + background-position: 0 0, 0 10px, 10px -10px, -10px 0px; +} + +/* Focus visible */ +:focus-visible { + @apply outline-none ring-2 ring-ring ring-offset-2 ring-offset-background; +} + +/* Scrollbar styling */ +::-webkit-scrollbar { + width: 12px; + height: 12px; +} + +::-webkit-scrollbar-track { + @apply bg-muted; +} + +::-webkit-scrollbar-thumb { + @apply bg-foreground border-3 border-muted; +} + +/* Grid pattern for hero sections */ +.grid-pattern { + background-image: + linear-gradient(hsl(var(--border) / 0.3) 1px, transparent 1px), + linear-gradient(90deg, hsl(var(--border) / 0.3) 1px, transparent 1px); + background-size: 40px 40px; +} + +/* Animation Keyframes */ +@keyframes accordion-down { + from { + height: 0; + opacity: 0; + } + to { + height: var(--bits-accordion-content-height, var(--bits-accordion-content-height)); + opacity: 1; + } +} + +@keyframes accordion-up { + from { + height: var(--bits-accordion-content-height, var(--bits-accordion-content-height)); + opacity: 1; + } + to { + height: 0; + opacity: 0; + } +} + +@keyframes collapsible-down { + from { + height: 0; + opacity: 0; + } + to { + height: var(--bits-collapsible-content-height, var(--bits-collapsible-content-height)); + opacity: 1; + } +} + +@keyframes collapsible-up { + from { + height: var(--bits-collapsible-content-height, var(--bits-collapsible-content-height)); + opacity: 1; + } + to { + height: 0; + opacity: 0; + } +} + +@keyframes shake { + 0%, 100% { transform: translateX(0); } + 25% { transform: translateX(-4px); } + 75% { transform: translateX(4px); } +} + +@keyframes bounce-in { + 0% { transform: scale(0.95); opacity: 0; } + 50% { transform: scale(1.02); } + 100% { transform: scale(1); opacity: 1; } +} + +@keyframes pulse-shadow { + 0%, 100% { box-shadow: 4px 4px 0px hsl(var(--shadow-color)); } + 50% { box-shadow: 6px 6px 0px hsl(var(--shadow-color)); } +} + +/* Wiggle animation - playful error state */ +@keyframes wiggle { + 0%, 100% { transform: rotate(0deg); } + 25% { transform: rotate(-3deg); } + 50% { transform: rotate(3deg); } + 75% { transform: rotate(-3deg); } +} + +/* Pop animation - success/attention */ +@keyframes pop { + 0% { transform: scale(1); } + 50% { transform: scale(1.1); } + 100% { transform: scale(1); } +} + +/* Rubber band effect */ +@keyframes rubber-band { + 0% { transform: scale(1); } + 30% { transform: scaleX(1.25) scaleY(0.75); } + 40% { transform: scaleX(0.75) scaleY(1.25); } + 50% { transform: scaleX(1.15) scaleY(0.85); } + 65% { transform: scaleX(0.95) scaleY(1.05); } + 75% { transform: scaleX(1.05) scaleY(0.95); } + 100% { transform: scale(1); } +} + +/* Jello wobble */ +@keyframes jello { + 0%, 100% { transform: skewX(0deg) skewY(0deg); } + 30% { transform: skewX(-12.5deg) skewY(-12.5deg); } + 40% { transform: skewX(6.25deg) skewY(6.25deg); } + 50% { transform: skewX(-3.125deg) skewY(-3.125deg); } + 65% { transform: skewX(1.5625deg) skewY(1.5625deg); } + 75% { transform: skewX(-0.78125deg) skewY(-0.78125deg); } +} + +/* Marquee scroll animation */ +@keyframes marquee { + 0% { transform: translateX(0); } + 100% { transform: translateX(-50%); } +} + +@keyframes marquee-reverse { + 0% { transform: translateX(-50%); } + 100% { transform: translateX(0); } +} + +/* Stagger fade in */ +@keyframes stagger-fade-in { + 0% { opacity: 0; transform: translateY(10px); } + 100% { opacity: 1; transform: translateY(0); } +} + +/* Pulse scale */ +@keyframes pulse-scale { + 0%, 100% { transform: scale(1); } + 50% { transform: scale(1.05); } +} + +/* Glitch effect */ +@keyframes glitch { + 0%, 100% { transform: translate(0); } + 20% { transform: translate(-2px, 2px); } + 40% { transform: translate(-2px, -2px); } + 60% { transform: translate(2px, 2px); } + 80% { transform: translate(2px, -2px); } +} + +/* Float animation */ +@keyframes float { + 0%, 100% { transform: translateY(0); } + 50% { transform: translateY(-10px); } +} + +/* Typewriter cursor blink */ +@keyframes blink { + 0%, 50% { opacity: 1; } + 51%, 100% { opacity: 0; } +} + +/* Animation Classes */ +.animate-accordion-down { + animation: accordion-down 200ms ease-out; +} + +.animate-accordion-up { + animation: accordion-up 200ms ease-out; +} + +.animate-collapsible-down { + animation: collapsible-down 200ms ease-out; +} + +.animate-collapsible-up { + animation: collapsible-up 200ms ease-out; +} + +.animate-shake { + animation: shake 200ms ease-in-out; +} + +.animate-bounce-in { + animation: bounce-in 300ms ease-out; +} + +.animate-pulse-shadow { + animation: pulse-shadow 2s ease-in-out infinite; +} + +.animate-wiggle { + animation: wiggle 300ms ease-in-out; +} + +.animate-pop { + animation: pop 300ms ease-out; +} + +.animate-rubber-band { + animation: rubber-band 800ms ease-out; +} + +.animate-jello { + animation: jello 800ms ease-out; +} + +.animate-marquee { + animation: marquee 20s linear infinite; +} + +.animate-marquee-fast { + animation: marquee 10s linear infinite; +} + +.animate-marquee-slow { + animation: marquee 40s linear infinite; +} + +.animate-marquee-reverse { + animation: marquee-reverse 20s linear infinite; +} + +.animate-stagger-fade-in { + animation: stagger-fade-in 300ms ease-out forwards; + opacity: 0; +} + +/* Stagger delay utilities */ +.stagger-1 { animation-delay: 50ms; } +.stagger-2 { animation-delay: 100ms; } +.stagger-3 { animation-delay: 150ms; } +.stagger-4 { animation-delay: 200ms; } +.stagger-5 { animation-delay: 250ms; } +.stagger-6 { animation-delay: 300ms; } +.stagger-7 { animation-delay: 350ms; } +.stagger-8 { animation-delay: 400ms; } + +.animate-pulse-scale { + animation: pulse-scale 2s ease-in-out infinite; +} + +.animate-glitch { + animation: glitch 200ms ease-in-out; +} + +.animate-float { + animation: float 3s ease-in-out infinite; +} + +.animate-blink { + animation: blink 1s step-end infinite; +} + +/* Hover-triggered animations */ +.hover-wiggle:hover { + animation: wiggle 300ms ease-in-out; +} + +.hover-pop:hover { + animation: pop 300ms ease-out; +} + +.hover-jello:hover { + animation: jello 800ms ease-out; +} + +.hover-rubber-band:hover { + animation: rubber-band 800ms ease-out; +} + +/* Tooltip & Popover Animations */ +@keyframes fade-in { + from { opacity: 0; } + to { opacity: 1; } +} + +@keyframes fade-out { + from { opacity: 1; } + to { opacity: 0; } +} + +@keyframes zoom-in { + from { transform: scale(0.95); opacity: 0; } + to { transform: scale(1); opacity: 1; } +} + +@keyframes zoom-out { + from { transform: scale(1); opacity: 1; } + to { transform: scale(0.95); opacity: 0; } +} + +@keyframes slide-in-from-top { + from { transform: translateY(-4px); } + to { transform: translateY(0); } +} + +@keyframes slide-in-from-bottom { + from { transform: translateY(4px); } + to { transform: translateY(0); } +} + +@keyframes slide-in-from-left { + from { transform: translateX(-4px); } + to { transform: translateX(0); } +} + +@keyframes slide-in-from-right { + from { transform: translateX(4px); } + to { transform: translateX(0); } +} + +/* Reka UI animation states (compatible with Radix) */ +[data-state="open"] { + animation: zoom-in 150ms ease-out; +} + +[data-state="closed"] { + animation: zoom-out 100ms ease-in; +} + +/* Tooltip specific animations */ +[data-reka-popper-content-wrapper] [data-side="top"], +[data-radix-popper-content-wrapper] [data-side="top"] { + animation: fade-in 150ms ease-out, slide-in-from-bottom 150ms ease-out; +} + +[data-reka-popper-content-wrapper] [data-side="bottom"], +[data-radix-popper-content-wrapper] [data-side="bottom"] { + animation: fade-in 150ms ease-out, slide-in-from-top 150ms ease-out; +} + +[data-reka-popper-content-wrapper] [data-side="left"], +[data-radix-popper-content-wrapper] [data-side="left"] { + animation: fade-in 150ms ease-out, slide-in-from-right 150ms ease-out; +} + +[data-reka-popper-content-wrapper] [data-side="right"], +[data-radix-popper-content-wrapper] [data-side="right"] { + animation: fade-in 150ms ease-out, slide-in-from-left 150ms ease-out; +} + +/* ========================================== + MARQUEE COMPONENT UTILITIES + ========================================== */ + +.bk-marquee { + display: flex; + overflow: hidden; + user-select: none; + gap: 1rem; +} + +.bk-marquee-content { + display: flex; + gap: 1rem; + flex-shrink: 0; + animation: marquee 20s linear infinite; +} + +.bk-marquee:hover .bk-marquee-content { + animation-play-state: paused; +} + +.bk-marquee-vertical { + flex-direction: column; + height: 100%; +} + +.bk-marquee-vertical .bk-marquee-content { + flex-direction: column; + animation: marquee-vertical 20s linear infinite; +} + +@keyframes marquee-vertical { + 0% { transform: translateY(0); } + 100% { transform: translateY(-50%); } +} + +/* ========================================== + LAYERED CARD UTILITIES + ========================================== */ + +.bk-layered { + position: relative; +} + +.bk-layered::before, +.bk-layered::after { + content: ''; + position: absolute; + inset: 0; + border: 3px solid hsl(var(--foreground)); + background: hsl(var(--card)); + z-index: -1; +} + +.bk-layered::before { + transform: translate(6px, 6px); +} + +.bk-layered::after { + transform: translate(12px, 12px); +} + +.bk-layered-sm::before { + transform: translate(4px, 4px); +} + +.bk-layered-sm::after { + transform: translate(8px, 8px); +} + +.bk-layered-lg::before { + transform: translate(8px, 8px); +} + +.bk-layered-lg::after { + transform: translate(16px, 16px); +} + +/* Single layer variant */ +.bk-layered-single::after { + display: none; +} + +/* Colored layers */ +.bk-layered-primary::before { + background: hsl(var(--primary)); +} + +.bk-layered-accent::before { + background: hsl(var(--accent)); +} + +.bk-layered-secondary::before { + background: hsl(var(--secondary)); +} + +/* ========================================== + NEON GLOW UTILITIES + ========================================== */ + +.bk-glow-neon-pink { + box-shadow: + 0 0 5px hsl(var(--neon-pink)), + 0 0 10px hsl(var(--neon-pink)), + 0 0 20px hsl(var(--neon-pink) / 0.5); +} + +.bk-glow-neon-green { + box-shadow: + 0 0 5px hsl(var(--neon-green)), + 0 0 10px hsl(var(--neon-green)), + 0 0 20px hsl(var(--neon-green) / 0.5); +} + +.bk-glow-neon-blue { + box-shadow: + 0 0 5px hsl(var(--neon-blue)), + 0 0 10px hsl(var(--neon-blue)), + 0 0 20px hsl(var(--neon-blue) / 0.5); +} + +/* Combined neon + brutal shadow */ +.bk-shadow-neon-brutal-pink { + box-shadow: + 4px 4px 0px hsl(var(--shadow-color)), + 0 0 10px hsl(var(--neon-pink) / 0.5); +} + +.bk-shadow-neon-brutal-green { + box-shadow: + 4px 4px 0px hsl(var(--shadow-color)), + 0 0 10px hsl(var(--neon-green) / 0.5); +} + +/* ========================================== + UTILITY HELPERS + ========================================== */ + +/* Force neubrutalism style reset */ +.bk-brutal { + border-radius: 0 !important; + border-width: 3px; + border-style: solid; + border-color: hsl(var(--foreground)); +} + +/* Pressed state utility */ +.bk-pressed { + transform: translate(4px, 4px); + box-shadow: none !important; +} + +/* Lifted state utility */ +.bk-lifted { + transform: translate(-4px, -4px); + box-shadow: 8px 8px 0px hsl(var(--shadow-color)); +} + +/* ========================================== + BUTTON ANIMATION KEYFRAMES + ========================================== */ + +@keyframes brutal-pulse { + 0%, 100% { + box-shadow: 4px 4px 0px hsl(var(--shadow-color)); + transform: translate(0, 0); + } + 50% { + box-shadow: 6px 6px 0px hsl(var(--shadow-color)); + transform: translate(-2px, -2px); + } +} + +@keyframes brutal-bounce { + 0%, 100% { + transform: translateY(0); + } + 50% { + transform: translateY(-6px); + } +} + +@keyframes brutal-shake { + 0%, 100% { + transform: translateX(0); + } + 20% { + transform: translateX(-4px) rotate(-2deg); + } + 40% { + transform: translateX(4px) rotate(2deg); + } + 60% { + transform: translateX(-4px) rotate(-2deg); + } + 80% { + transform: translateX(4px) rotate(2deg); + } +} + +@keyframes brutal-wiggle { + 0%, 100% { + transform: rotate(0deg); + } + 25% { + transform: rotate(-5deg); + } + 75% { + transform: rotate(5deg); + } +} + +@keyframes brutal-pop { + 0% { + transform: scale(1); + } + 50% { + transform: scale(1.1); + } + 100% { + transform: scale(1); + } +} + +/* ── Shape Animations ────────────────────────────────── */ +@keyframes shape-spin { + from { transform: rotate(0deg); } + to { transform: rotate(360deg); } +} + +@keyframes shape-pulse { + 0%, 100% { transform: scale(1); filter: drop-shadow(0 0 0 hsl(var(--primary))); } + 50% { transform: scale(1.12); filter: drop-shadow(0 0 8px hsl(var(--primary))); } +} + +@keyframes shape-bounce { + 0%, 100% { transform: translateY(0) scaleX(1); } + 40% { transform: translateY(-16px) scaleX(0.95); } + 60% { transform: translateY(-10px) scaleX(1.05); } +} + +/* slow / normal / fast speed modifiers */ +.shape-animate-spin { animation: shape-spin 2s linear infinite; } +.shape-animate-spin-slow { animation: shape-spin 4s linear infinite; } +.shape-animate-spin-fast { animation: shape-spin 0.8s linear infinite; } + +.shape-animate-pulse { animation: shape-pulse 2s ease-in-out infinite; } +.shape-animate-pulse-slow { animation: shape-pulse 3.5s ease-in-out infinite; } +.shape-animate-pulse-fast { animation: shape-pulse 1s ease-in-out infinite; } + +.shape-animate-float { animation: float 3s ease-in-out infinite; } +.shape-animate-float-slow { animation: float 5s ease-in-out infinite; } +.shape-animate-float-fast { animation: float 1.5s ease-in-out infinite; } + +.shape-animate-wiggle { animation: wiggle 0.8s ease-in-out infinite; } +.shape-animate-wiggle-slow { animation: wiggle 1.5s ease-in-out infinite; } +.shape-animate-wiggle-fast { animation: wiggle 0.4s ease-in-out infinite; } + +.shape-animate-bounce { animation: shape-bounce 1.2s ease-in-out infinite; } +.shape-animate-bounce-slow { animation: shape-bounce 2.2s ease-in-out infinite; } +.shape-animate-bounce-fast { animation: shape-bounce 0.6s ease-in-out infinite; } + +.shape-animate-glitch { animation: glitch 2s steps(1) infinite; } +.shape-animate-glitch-slow { animation: glitch 4s steps(1) infinite; } +.shape-animate-glitch-fast { animation: glitch 0.8s steps(1) infinite; } diff --git a/packages/svelte/src/lib/utils.ts b/packages/svelte/src/lib/utils.ts new file mode 100644 index 00000000..d32b0fe6 --- /dev/null +++ b/packages/svelte/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from 'clsx' +import { twMerge } from 'tailwind-merge' + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/packages/svelte/svelte.config.js b/packages/svelte/svelte.config.js new file mode 100644 index 00000000..8abe4369 --- /dev/null +++ b/packages/svelte/svelte.config.js @@ -0,0 +1,5 @@ +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte' + +export default { + preprocess: vitePreprocess(), +} diff --git a/packages/svelte/tsconfig.json b/packages/svelte/tsconfig.json new file mode 100644 index 00000000..ad0e5a61 --- /dev/null +++ b/packages/svelte/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + "target": "ES2022", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Path aliases */ + "baseUrl": ".", + "paths": { + "$lib/*": ["./src/lib/*"] + }, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src/**/*.ts", "src/**/*.svelte", "vite.config.ts"] +} diff --git a/packages/svelte/vite.config.ts b/packages/svelte/vite.config.ts new file mode 100644 index 00000000..903fbb4c --- /dev/null +++ b/packages/svelte/vite.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from 'vite' +import { svelte } from '@sveltejs/vite-plugin-svelte' +import tailwindcss from '@tailwindcss/vite' +import path from 'path' + +export default defineConfig({ + plugins: [svelte(), tailwindcss()], + resolve: { + alias: { + $lib: path.resolve(__dirname, './src/lib'), + }, + }, +}) diff --git a/public/r/svelte/accordion.json b/public/r/svelte/accordion.json new file mode 100644 index 00000000..15d69be3 --- /dev/null +++ b/public/r/svelte/accordion.json @@ -0,0 +1,39 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "accordion", + "type": "registry:ui", + "description": "A vertically stacked set of interactive headings", + "dependencies": [ + "bits-ui", + "lucide-svelte" + ], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/accordion.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion.svelte" + }, + { + "path": "registry/default/ui/accordion-item.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion-item.svelte" + }, + { + "path": "registry/default/ui/accordion-trigger.svelte", + "content": "\n\n\n svg]:rotate-180',\n className\n )}\n {...restProps}\n >\n {@render children?.()}\n \n \n\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion-trigger.svelte" + }, + { + "path": "registry/default/ui/accordion-content.svelte", + "content": "\n\n\n
\n {@render children?.()}\n
\n\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion-content.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/alert.json b/public/r/svelte/alert.json new file mode 100644 index 00000000..b0200ec5 --- /dev/null +++ b/public/r/svelte/alert.json @@ -0,0 +1,38 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "alert", + "type": "registry:ui", + "description": "Displays a callout for user attention", + "dependencies": [ + "class-variance-authority" + ], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/alert.svelte", + "content": "\n\n
\n {@render children?.()}\n
\n", + "type": "registry:ui", + "target": "lib/components/ui/alert.svelte" + }, + { + "path": "registry/default/ui/alert-title.svelte", + "content": "\n\n
\n {@render children?.()}\n
\n", + "type": "registry:ui", + "target": "lib/components/ui/alert-title.svelte" + }, + { + "path": "registry/default/ui/alert-description.svelte", + "content": "\n\n
\n {@render children?.()}\n
\n", + "type": "registry:ui", + "target": "lib/components/ui/alert-description.svelte" + }, + { + "path": "registry/default/ui/alert-action.svelte", + "content": "\n\n\n {#if loading}\n \n {/if}\n \n {@render children?.()}\n \n\n", + "type": "registry:ui", + "target": "lib/components/ui/alert-action.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/avatar.json b/public/r/svelte/avatar.json new file mode 100644 index 00000000..ec0babcd --- /dev/null +++ b/public/r/svelte/avatar.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "avatar", + "type": "registry:ui", + "description": "An image element with fallback", + "dependencies": [ + "bits-ui" + ], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/avatar.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/avatar.svelte" + }, + { + "path": "registry/default/ui/avatar-image.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/avatar-image.svelte" + }, + { + "path": "registry/default/ui/avatar-fallback.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/avatar-fallback.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/badge.json b/public/r/svelte/badge.json new file mode 100644 index 00000000..62e21bf9 --- /dev/null +++ b/public/r/svelte/badge.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "badge", + "type": "registry:ui", + "description": "Displays a badge or tag", + "dependencies": [ + "class-variance-authority" + ], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/badge.svelte", + "content": "\n\n
\n {@render children?.()}\n
\n", + "type": "registry:ui", + "target": "lib/components/ui/badge.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/button.json b/public/r/svelte/button.json new file mode 100644 index 00000000..16342467 --- /dev/null +++ b/public/r/svelte/button.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "button", + "type": "registry:ui", + "description": "Displays a button with neubrutalism styling and press-down animation", + "dependencies": [ + "class-variance-authority" + ], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/button.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/button.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/card.json b/public/r/svelte/card.json new file mode 100644 index 00000000..8f76f8de --- /dev/null +++ b/public/r/svelte/card.json @@ -0,0 +1,48 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "card", + "type": "registry:ui", + "description": "Displays a card with header, content, and footer", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/card.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/card.svelte" + }, + { + "path": "registry/default/ui/card-header.svelte", + "content": "\n\n
\n {@render children?.()}\n
\n", + "type": "registry:ui", + "target": "lib/components/ui/card-header.svelte" + }, + { + "path": "registry/default/ui/card-title.svelte", + "content": "\n\n
\n {@render children?.()}\n
\n", + "type": "registry:ui", + "target": "lib/components/ui/card-title.svelte" + }, + { + "path": "registry/default/ui/card-description.svelte", + "content": "\n\n
\n {@render children?.()}\n
\n", + "type": "registry:ui", + "target": "lib/components/ui/card-description.svelte" + }, + { + "path": "registry/default/ui/card-content.svelte", + "content": "\n\n
\n {@render children?.()}\n
\n", + "type": "registry:ui", + "target": "lib/components/ui/card-content.svelte" + }, + { + "path": "registry/default/ui/card-footer.svelte", + "content": "\n\n
\n {@render children?.()}\n
\n", + "type": "registry:ui", + "target": "lib/components/ui/card-footer.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/checkbox.json b/public/r/svelte/checkbox.json new file mode 100644 index 00000000..4f8649a1 --- /dev/null +++ b/public/r/svelte/checkbox.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "checkbox", + "type": "registry:ui", + "description": "A checkbox input control", + "dependencies": [ + "bits-ui", + "lucide-svelte" + ], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/checkbox.svelte", + "content": "\n\n\n \n \n \n\n", + "type": "registry:ui", + "target": "lib/components/ui/checkbox.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/dialog.json b/public/r/svelte/dialog.json new file mode 100644 index 00000000..859ddebc --- /dev/null +++ b/public/r/svelte/dialog.json @@ -0,0 +1,63 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "dialog", + "type": "registry:ui", + "description": "A modal dialog with overlay", + "dependencies": [ + "bits-ui", + "lucide-svelte" + ], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/dialog.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dialog.svelte" + }, + { + "path": "registry/default/ui/dialog-trigger.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dialog-trigger.svelte" + }, + { + "path": "registry/default/ui/dialog-content.svelte", + "content": "\n\n\n \n \n {@render children?.()}\n \n \n Close\n \n \n\n", + "type": "registry:ui", + "target": "lib/components/ui/dialog-content.svelte" + }, + { + "path": "registry/default/ui/dialog-header.svelte", + "content": "\n\n
\n {@render children?.()}\n
\n", + "type": "registry:ui", + "target": "lib/components/ui/dialog-header.svelte" + }, + { + "path": "registry/default/ui/dialog-footer.svelte", + "content": "\n\n
\n {@render children?.()}\n
\n", + "type": "registry:ui", + "target": "lib/components/ui/dialog-footer.svelte" + }, + { + "path": "registry/default/ui/dialog-title.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dialog-title.svelte" + }, + { + "path": "registry/default/ui/dialog-description.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dialog-description.svelte" + }, + { + "path": "registry/default/ui/dialog-close.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dialog-close.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/dropdown-menu.json b/public/r/svelte/dropdown-menu.json new file mode 100644 index 00000000..c27ee721 --- /dev/null +++ b/public/r/svelte/dropdown-menu.json @@ -0,0 +1,56 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "dropdown-menu", + "type": "registry:ui", + "description": "Displays a menu to the user", + "dependencies": [ + "bits-ui" + ], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/dropdown-menu.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dropdown-menu.svelte" + }, + { + "path": "registry/default/ui/dropdown-menu-trigger.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dropdown-menu-trigger.svelte" + }, + { + "path": "registry/default/ui/dropdown-menu-content.svelte", + "content": "\n\n\n \n {@render children?.()}\n \n\n", + "type": "registry:ui", + "target": "lib/components/ui/dropdown-menu-content.svelte" + }, + { + "path": "registry/default/ui/dropdown-menu-item.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dropdown-menu-item.svelte" + }, + { + "path": "registry/default/ui/dropdown-menu-label.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dropdown-menu-label.svelte" + }, + { + "path": "registry/default/ui/dropdown-menu-separator.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dropdown-menu-separator.svelte" + }, + { + "path": "registry/default/ui/dropdown-menu-shortcut.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dropdown-menu-shortcut.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/index.json b/public/r/svelte/index.json new file mode 100644 index 00000000..c58617a9 --- /dev/null +++ b/public/r/svelte/index.json @@ -0,0 +1,102 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry.json", + "name": "boldkit-svelte", + "homepage": "https://boldkit.dev", + "items": [ + { + "name": "button", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/button.json" + }, + { + "name": "input", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/input.json" + }, + { + "name": "label", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/label.json" + }, + { + "name": "badge", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/badge.json" + }, + { + "name": "separator", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/separator.json" + }, + { + "name": "skeleton", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/skeleton.json" + }, + { + "name": "textarea", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/textarea.json" + }, + { + "name": "card", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/card.json" + }, + { + "name": "alert", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/alert.json" + }, + { + "name": "avatar", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/avatar.json" + }, + { + "name": "checkbox", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/checkbox.json" + }, + { + "name": "switch", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/switch.json" + }, + { + "name": "progress", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/progress.json" + }, + { + "name": "toggle", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/toggle.json" + }, + { + "name": "accordion", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/accordion.json" + }, + { + "name": "tabs", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/tabs.json" + }, + { + "name": "dialog", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/dialog.json" + }, + { + "name": "select", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/select.json" + }, + { + "name": "dropdown-menu", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/dropdown-menu.json" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/input.json b/public/r/svelte/input.json new file mode 100644 index 00000000..96f7598b --- /dev/null +++ b/public/r/svelte/input.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "input", + "type": "registry:ui", + "description": "Displays a form input with thick borders", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/input.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/input.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/label.json b/public/r/svelte/label.json new file mode 100644 index 00000000..933f5f3f --- /dev/null +++ b/public/r/svelte/label.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "label", + "type": "registry:ui", + "description": "Renders an accessible label", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/label.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/label.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/progress.json b/public/r/svelte/progress.json new file mode 100644 index 00000000..5142bb24 --- /dev/null +++ b/public/r/svelte/progress.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "progress", + "type": "registry:ui", + "description": "Displays an indicator showing completion progress", + "dependencies": [ + "bits-ui" + ], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/progress.svelte", + "content": "\n\n\n \n\n", + "type": "registry:ui", + "target": "lib/components/ui/progress.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/select.json b/public/r/svelte/select.json new file mode 100644 index 00000000..f0c24c32 --- /dev/null +++ b/public/r/svelte/select.json @@ -0,0 +1,63 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "select", + "type": "registry:ui", + "description": "Displays a list of options for the user to pick from", + "dependencies": [ + "bits-ui", + "lucide-svelte" + ], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/select.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/select.svelte" + }, + { + "path": "registry/default/ui/select-trigger.svelte", + "content": "\n\nspan]:line-clamp-1 transition-all duration-200',\n className\n )}\n {...restProps}\n>\n {@render children?.()}\n \n\n", + "type": "registry:ui", + "target": "lib/components/ui/select-trigger.svelte" + }, + { + "path": "registry/default/ui/select-value.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/select-value.svelte" + }, + { + "path": "registry/default/ui/select-content.svelte", + "content": "\n\n\n \n \n \n \n \n {@render children?.()}\n \n \n \n \n \n\n", + "type": "registry:ui", + "target": "lib/components/ui/select-content.svelte" + }, + { + "path": "registry/default/ui/select-item.svelte", + "content": "\n\n\n {#snippet children({ isSelected })}\n \n {#if isSelected}\n \n {/if}\n \n {label}\n {/snippet}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/select-item.svelte" + }, + { + "path": "registry/default/ui/select-group.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/select-group.svelte" + }, + { + "path": "registry/default/ui/select-label.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/select-label.svelte" + }, + { + "path": "registry/default/ui/select-separator.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/select-separator.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/separator.json b/public/r/svelte/separator.json new file mode 100644 index 00000000..cb0c568a --- /dev/null +++ b/public/r/svelte/separator.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "separator", + "type": "registry:ui", + "description": "Visually separates content", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/separator.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/separator.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/skeleton.json b/public/r/svelte/skeleton.json new file mode 100644 index 00000000..9533497c --- /dev/null +++ b/public/r/svelte/skeleton.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "skeleton", + "type": "registry:ui", + "description": "Displays a loading placeholder", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/skeleton.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/skeleton.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/styles.json b/public/r/svelte/styles.json new file mode 100644 index 00000000..e580f55e --- /dev/null +++ b/public/r/svelte/styles.json @@ -0,0 +1,14 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "styles", + "type": "registry:style", + "description": "BoldKit neubrutalism CSS variables and utilities", + "files": [ + { + "path": "registry/default/styles/globals.css", + "content": "@import 'tailwindcss';\n\n@custom-variant dark (&:is(.dark *));\n\n/* BoldKit Theme Definition for Tailwind v4 */\n@theme {\n --color-background: hsl(var(--background));\n --color-foreground: hsl(var(--foreground));\n --color-card: hsl(var(--card));\n --color-card-foreground: hsl(var(--card-foreground));\n --color-popover: hsl(var(--popover));\n --color-popover-foreground: hsl(var(--popover-foreground));\n --color-primary: hsl(var(--primary));\n --color-primary-foreground: hsl(var(--primary-foreground));\n --color-secondary: hsl(var(--secondary));\n --color-secondary-foreground: hsl(var(--secondary-foreground));\n --color-accent: hsl(var(--accent));\n --color-accent-foreground: hsl(var(--accent-foreground));\n --color-muted: hsl(var(--muted));\n --color-muted-foreground: hsl(var(--muted-foreground));\n --color-destructive: hsl(var(--destructive));\n --color-destructive-foreground: hsl(var(--destructive-foreground));\n --color-success: hsl(var(--success));\n --color-success-foreground: hsl(var(--success-foreground));\n --color-warning: hsl(var(--warning));\n --color-warning-foreground: hsl(var(--warning-foreground));\n --color-info: hsl(var(--info));\n --color-info-foreground: hsl(var(--info-foreground));\n --color-border: hsl(var(--border));\n --color-input: hsl(var(--input));\n --color-ring: hsl(var(--ring));\n --color-chart-1: hsl(var(--chart-1));\n --color-chart-2: hsl(var(--chart-2));\n --color-chart-3: hsl(var(--chart-3));\n --color-chart-4: hsl(var(--chart-4));\n --color-chart-5: hsl(var(--chart-5));\n /* Neon Colors */\n --color-neon-pink: hsl(var(--neon-pink));\n --color-neon-green: hsl(var(--neon-green));\n --color-neon-blue: hsl(var(--neon-blue));\n --color-neon-orange: hsl(var(--neon-orange));\n --color-neon-purple: hsl(var(--neon-purple));\n /* Clash Colors */\n --color-clash-1: hsl(var(--clash-1));\n --color-clash-2: hsl(var(--clash-2));\n --color-clash-3: hsl(var(--clash-3));\n --color-clash-4: hsl(var(--clash-4));\n --radius-sm: calc(var(--radius) - 4px);\n --radius-md: calc(var(--radius) - 2px);\n --radius-lg: var(--radius);\n}\n\n/* BoldKit - Neubrutalism Design System */\n:root {\n /* Base Colors */\n --background: 60 9% 98%;\n --foreground: 240 10% 10%;\n\n /* Card */\n --card: 0 0% 100%;\n --card-foreground: 240 10% 10%;\n\n /* Popover */\n --popover: 0 0% 100%;\n --popover-foreground: 240 10% 10%;\n\n /* Primary - Coral Red */\n --primary: 0 84% 71%;\n --primary-foreground: 240 10% 10%;\n\n /* Secondary - Teal */\n --secondary: 174 62% 56%;\n --secondary-foreground: 240 10% 10%;\n\n /* Accent - Yellow */\n --accent: 49 100% 71%;\n --accent-foreground: 240 10% 10%;\n\n /* Muted */\n --muted: 60 5% 90%;\n --muted-foreground: 240 4% 46%;\n\n /* Destructive */\n --destructive: 0 84% 60%;\n --destructive-foreground: 0 0% 100%;\n\n /* Success */\n --success: 152 69% 69%;\n --success-foreground: 240 10% 10%;\n\n /* Warning */\n --warning: 49 100% 60%;\n --warning-foreground: 240 10% 10%;\n\n /* Info */\n --info: 212 100% 73%;\n --info-foreground: 240 10% 10%;\n\n /* Border & Input */\n --border: 240 10% 10%;\n --input: 240 10% 10%;\n --ring: 240 10% 10%;\n\n /* Radius - Minimal for neubrutalism */\n --radius: 0rem;\n\n /* BoldKit specific */\n --shadow-color: 240 10% 10%;\n --shadow-offset: 4px;\n --border-width: 3px;\n\n /* Chart colors */\n --chart-1: 0 84% 71%;\n --chart-2: 174 62% 56%;\n --chart-3: 49 100% 71%;\n --chart-4: 271 76% 53%;\n --chart-5: 326 78% 60%;\n\n /* Neon Colors - High saturation, vibrant */\n --neon-pink: 330 100% 65%;\n --neon-green: 120 100% 50%;\n --neon-blue: 195 100% 50%;\n --neon-orange: 25 100% 55%;\n --neon-purple: 280 100% 60%;\n\n /* Clash Colors - Unconventional pairings */\n --clash-1: 15 85% 60%; /* Burnt orange */\n --clash-2: 280 70% 50%; /* Deep purple */\n --clash-3: 165 80% 45%; /* Cyan-teal */\n --clash-4: 45 95% 55%; /* Mustard */\n}\n\n.dark {\n --background: 240 10% 10%;\n --foreground: 60 9% 98%;\n\n --card: 240 10% 14%;\n --card-foreground: 60 9% 98%;\n\n --popover: 240 10% 14%;\n --popover-foreground: 60 9% 98%;\n\n --primary: 0 84% 71%;\n --primary-foreground: 240 10% 10%;\n\n --secondary: 174 62% 56%;\n --secondary-foreground: 240 10% 10%;\n\n --accent: 49 100% 71%;\n --accent-foreground: 240 10% 10%;\n\n --muted: 240 10% 20%;\n --muted-foreground: 60 5% 65%;\n\n --destructive: 0 84% 60%;\n --destructive-foreground: 0 0% 100%;\n\n --success: 152 69% 69%;\n --success-foreground: 240 10% 10%;\n\n --warning: 49 100% 60%;\n --warning-foreground: 240 10% 10%;\n\n --info: 212 100% 73%;\n --info-foreground: 240 10% 10%;\n\n --border: 60 9% 98%;\n --input: 60 9% 98%;\n --ring: 60 9% 98%;\n\n --shadow-color: 0 0% 0%;\n\n /* Neon Colors - Slightly adjusted for dark mode */\n --neon-pink: 330 100% 70%;\n --neon-green: 120 100% 55%;\n --neon-blue: 195 100% 55%;\n --neon-orange: 25 100% 60%;\n --neon-purple: 280 100% 65%;\n\n /* Clash Colors */\n --clash-1: 15 85% 65%;\n --clash-2: 280 70% 55%;\n --clash-3: 165 80% 50%;\n --clash-4: 45 95% 60%;\n}\n\n/* Base styles */\n* {\n @apply border-border;\n}\n\nbody {\n @apply bg-background text-foreground antialiased;\n font-family: 'Outfit', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n}\n\n/* BoldKit Shadow Utility */\n.bk-shadow {\n box-shadow: var(--shadow-offset) var(--shadow-offset) 0px hsl(var(--shadow-color));\n}\n\n.bk-shadow-sm {\n box-shadow: 2px 2px 0px hsl(var(--shadow-color));\n}\n\n.bk-shadow-md {\n box-shadow: 6px 6px 0px hsl(var(--shadow-color));\n}\n\n.bk-shadow-lg {\n box-shadow: 8px 8px 0px hsl(var(--shadow-color));\n}\n\n.bk-shadow-xl {\n box-shadow: 12px 12px 0px hsl(var(--shadow-color));\n}\n\n.bk-shadow-2xl {\n box-shadow: 16px 16px 0px hsl(var(--shadow-color));\n}\n\n/* Colored Shadow Variants */\n.bk-shadow-primary {\n box-shadow: 4px 4px 0px hsl(var(--primary));\n}\n\n.bk-shadow-secondary {\n box-shadow: 4px 4px 0px hsl(var(--secondary));\n}\n\n.bk-shadow-accent {\n box-shadow: 4px 4px 0px hsl(var(--accent));\n}\n\n.bk-shadow-destructive {\n box-shadow: 4px 4px 0px hsl(var(--destructive));\n}\n\n.bk-shadow-neon-pink {\n box-shadow: 4px 4px 0px hsl(var(--neon-pink));\n}\n\n.bk-shadow-neon-green {\n box-shadow: 4px 4px 0px hsl(var(--neon-green));\n}\n\n.bk-shadow-neon-blue {\n box-shadow: 4px 4px 0px hsl(var(--neon-blue));\n}\n\n/* Double Shadow Effect - Layered depth */\n.bk-shadow-double {\n box-shadow:\n 4px 4px 0px hsl(var(--primary)),\n 8px 8px 0px hsl(var(--shadow-color));\n}\n\n.bk-shadow-double-accent {\n box-shadow:\n 4px 4px 0px hsl(var(--accent)),\n 8px 8px 0px hsl(var(--shadow-color));\n}\n\n.bk-shadow-double-lg {\n box-shadow:\n 6px 6px 0px hsl(var(--primary)),\n 12px 12px 0px hsl(var(--shadow-color));\n}\n\n/* Triple Shadow Effect - Maximum depth */\n.bk-shadow-triple {\n box-shadow:\n 3px 3px 0px hsl(var(--primary)),\n 6px 6px 0px hsl(var(--secondary)),\n 9px 9px 0px hsl(var(--shadow-color));\n}\n\n/* Hover transform effect */\n.bk-hover:hover {\n transform: translate(-2px, -2px);\n}\n\n.bk-hover:active {\n transform: translate(2px, 2px);\n box-shadow: 2px 2px 0px hsl(var(--shadow-color));\n}\n\n/* Enhanced hover with scale */\n.bk-hover-scale:hover {\n transform: translate(-2px, -2px) scale(1.02);\n}\n\n.bk-hover-scale:active {\n transform: translate(2px, 2px) scale(0.98);\n box-shadow: 2px 2px 0px hsl(var(--shadow-color));\n}\n\n/* Border Variations */\n.border-4 {\n border-width: 4px;\n}\n\n.border-5 {\n border-width: 5px;\n}\n\n.border-6 {\n border-width: 6px;\n}\n\n/* Double Border Effect - Sticker/Stamp style */\n.bk-double-border {\n outline: 3px solid hsl(var(--foreground));\n outline-offset: 3px;\n}\n\n.bk-double-border-primary {\n outline: 3px solid hsl(var(--primary));\n outline-offset: 3px;\n}\n\n.bk-double-border-accent {\n outline: 3px solid hsl(var(--accent));\n outline-offset: 3px;\n}\n\n/* Dashed border for rough/hand-drawn feel */\n.bk-dashed-border {\n border-style: dashed;\n border-width: 3px;\n}\n\n/* Sticker Effect - Rotated with double border */\n.bk-sticker {\n position: relative;\n display: inline-block;\n padding: 0.5rem 1rem;\n border: 3px solid hsl(var(--foreground));\n background: hsl(var(--accent));\n box-shadow: 4px 4px 0px hsl(var(--shadow-color));\n transform: rotate(-2deg);\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n}\n\n.bk-sticker::before {\n content: '';\n position: absolute;\n inset: -6px;\n border: 2px dashed hsl(var(--foreground) / 0.5);\n}\n\n.bk-sticker-tilted {\n transform: rotate(-6deg);\n}\n\n.bk-sticker-tilted-right {\n transform: rotate(6deg);\n}\n\n/* Stamp Effect - Circular with rough edges */\n.bk-stamp {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 1rem;\n border: 4px solid hsl(var(--foreground));\n border-radius: 50%;\n background: hsl(var(--primary));\n color: hsl(var(--primary-foreground));\n font-weight: 900;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n box-shadow: 4px 4px 0px hsl(var(--shadow-color));\n transform: rotate(-12deg);\n}\n\n/* Tape Effect - Decorative tape strips */\n.bk-tape {\n position: relative;\n}\n\n.bk-tape::before {\n content: '';\n position: absolute;\n top: -8px;\n left: 50%;\n transform: translateX(-50%) rotate(-2deg);\n width: 60px;\n height: 20px;\n background: hsl(var(--accent) / 0.8);\n border: 2px solid hsl(var(--foreground));\n}\n\n/* Selection */\n::selection {\n @apply bg-accent text-accent-foreground;\n}\n\n/* ==========================================\n TYPOGRAPHY ENHANCEMENTS\n ========================================== */\n\n/* Extra-wide letter spacing for emphasis */\n.tracking-extra-wide {\n letter-spacing: 0.2em;\n}\n\n.tracking-ultra-wide {\n letter-spacing: 0.3em;\n}\n\n/* Text overflow effect - intentional overflow */\n.bk-text-overflow {\n overflow: visible;\n white-space: nowrap;\n}\n\n.bk-text-overflow-clip {\n position: relative;\n}\n\n.bk-text-overflow-clip::after {\n content: '';\n position: absolute;\n right: -20px;\n top: 0;\n bottom: 0;\n width: 40px;\n background: linear-gradient(to right, transparent, hsl(var(--background)));\n}\n\n/* Dramatic text sizes */\n.text-display {\n font-size: 4rem;\n line-height: 1;\n font-weight: 900;\n letter-spacing: -0.02em;\n}\n\n.text-display-lg {\n font-size: 6rem;\n line-height: 0.9;\n font-weight: 900;\n letter-spacing: -0.03em;\n}\n\n.text-display-xl {\n font-size: 8rem;\n line-height: 0.85;\n font-weight: 900;\n letter-spacing: -0.04em;\n}\n\n/* Outlined text */\n.bk-text-outline {\n -webkit-text-stroke: 2px hsl(var(--foreground));\n color: transparent;\n}\n\n.bk-text-outline-thick {\n -webkit-text-stroke: 3px hsl(var(--foreground));\n color: transparent;\n}\n\n/* Text with shadow */\n.bk-text-shadow {\n text-shadow: 3px 3px 0px hsl(var(--shadow-color));\n}\n\n.bk-text-shadow-lg {\n text-shadow: 5px 5px 0px hsl(var(--shadow-color));\n}\n\n.bk-text-shadow-colored {\n text-shadow: 3px 3px 0px hsl(var(--primary));\n}\n\n/* ==========================================\n TEXTURE & PATTERN UTILITIES\n ========================================== */\n\n/* Noise/Grain texture overlay */\n.bk-noise {\n position: relative;\n}\n\n.bk-noise::before {\n content: '';\n position: absolute;\n inset: 0;\n background-image: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E\");\n opacity: 0.08;\n pointer-events: none;\n mix-blend-mode: overlay;\n}\n\n.bk-noise-heavy::before {\n opacity: 0.15;\n}\n\n.bk-noise-light::before {\n opacity: 0.04;\n}\n\n/* Halftone dot pattern */\n.bk-halftone {\n position: relative;\n}\n\n.bk-halftone::before {\n content: '';\n position: absolute;\n inset: 0;\n background-image: radial-gradient(circle, hsl(var(--foreground) / 0.15) 1px, transparent 1px);\n background-size: 8px 8px;\n pointer-events: none;\n}\n\n.bk-halftone-dense::before {\n background-size: 4px 4px;\n}\n\n.bk-halftone-sparse::before {\n background-size: 12px 12px;\n}\n\n/* Grid pattern variations */\n.grid-pattern-sm {\n background-image:\n linear-gradient(hsl(var(--border) / 0.3) 1px, transparent 1px),\n linear-gradient(90deg, hsl(var(--border) / 0.3) 1px, transparent 1px);\n background-size: 20px 20px;\n}\n\n.grid-pattern-lg {\n background-image:\n linear-gradient(hsl(var(--border) / 0.3) 1px, transparent 1px),\n linear-gradient(90deg, hsl(var(--border) / 0.3) 1px, transparent 1px);\n background-size: 60px 60px;\n}\n\n.grid-pattern-bold {\n background-image:\n linear-gradient(hsl(var(--border) / 0.5) 2px, transparent 2px),\n linear-gradient(90deg, hsl(var(--border) / 0.5) 2px, transparent 2px);\n background-size: 40px 40px;\n}\n\n/* Diagonal lines pattern */\n.bk-diagonal-lines {\n background-image: repeating-linear-gradient(\n 45deg,\n transparent,\n transparent 10px,\n hsl(var(--border) / 0.2) 10px,\n hsl(var(--border) / 0.2) 11px\n );\n}\n\n/* Checkerboard pattern */\n.bk-checkerboard {\n background-image:\n linear-gradient(45deg, hsl(var(--muted)) 25%, transparent 25%),\n linear-gradient(-45deg, hsl(var(--muted)) 25%, transparent 25%),\n linear-gradient(45deg, transparent 75%, hsl(var(--muted)) 75%),\n linear-gradient(-45deg, transparent 75%, hsl(var(--muted)) 75%);\n background-size: 20px 20px;\n background-position: 0 0, 0 10px, 10px -10px, -10px 0px;\n}\n\n/* Focus visible */\n:focus-visible {\n @apply outline-none ring-2 ring-ring ring-offset-2 ring-offset-background;\n}\n\n/* Scrollbar styling */\n::-webkit-scrollbar {\n width: 12px;\n height: 12px;\n}\n\n::-webkit-scrollbar-track {\n @apply bg-muted;\n}\n\n::-webkit-scrollbar-thumb {\n @apply bg-foreground border-3 border-muted;\n}\n\n/* Grid pattern for hero sections */\n.grid-pattern {\n background-image:\n linear-gradient(hsl(var(--border) / 0.3) 1px, transparent 1px),\n linear-gradient(90deg, hsl(var(--border) / 0.3) 1px, transparent 1px);\n background-size: 40px 40px;\n}\n\n/* Animation Keyframes */\n@keyframes accordion-down {\n from {\n height: 0;\n opacity: 0;\n }\n to {\n height: var(--bits-accordion-content-height, var(--bits-accordion-content-height));\n opacity: 1;\n }\n}\n\n@keyframes accordion-up {\n from {\n height: var(--bits-accordion-content-height, var(--bits-accordion-content-height));\n opacity: 1;\n }\n to {\n height: 0;\n opacity: 0;\n }\n}\n\n@keyframes collapsible-down {\n from {\n height: 0;\n opacity: 0;\n }\n to {\n height: var(--bits-collapsible-content-height, var(--bits-collapsible-content-height));\n opacity: 1;\n }\n}\n\n@keyframes collapsible-up {\n from {\n height: var(--bits-collapsible-content-height, var(--bits-collapsible-content-height));\n opacity: 1;\n }\n to {\n height: 0;\n opacity: 0;\n }\n}\n\n@keyframes shake {\n 0%, 100% { transform: translateX(0); }\n 25% { transform: translateX(-4px); }\n 75% { transform: translateX(4px); }\n}\n\n@keyframes bounce-in {\n 0% { transform: scale(0.95); opacity: 0; }\n 50% { transform: scale(1.02); }\n 100% { transform: scale(1); opacity: 1; }\n}\n\n@keyframes pulse-shadow {\n 0%, 100% { box-shadow: 4px 4px 0px hsl(var(--shadow-color)); }\n 50% { box-shadow: 6px 6px 0px hsl(var(--shadow-color)); }\n}\n\n/* Wiggle animation - playful error state */\n@keyframes wiggle {\n 0%, 100% { transform: rotate(0deg); }\n 25% { transform: rotate(-3deg); }\n 50% { transform: rotate(3deg); }\n 75% { transform: rotate(-3deg); }\n}\n\n/* Pop animation - success/attention */\n@keyframes pop {\n 0% { transform: scale(1); }\n 50% { transform: scale(1.1); }\n 100% { transform: scale(1); }\n}\n\n/* Rubber band effect */\n@keyframes rubber-band {\n 0% { transform: scale(1); }\n 30% { transform: scaleX(1.25) scaleY(0.75); }\n 40% { transform: scaleX(0.75) scaleY(1.25); }\n 50% { transform: scaleX(1.15) scaleY(0.85); }\n 65% { transform: scaleX(0.95) scaleY(1.05); }\n 75% { transform: scaleX(1.05) scaleY(0.95); }\n 100% { transform: scale(1); }\n}\n\n/* Jello wobble */\n@keyframes jello {\n 0%, 100% { transform: skewX(0deg) skewY(0deg); }\n 30% { transform: skewX(-12.5deg) skewY(-12.5deg); }\n 40% { transform: skewX(6.25deg) skewY(6.25deg); }\n 50% { transform: skewX(-3.125deg) skewY(-3.125deg); }\n 65% { transform: skewX(1.5625deg) skewY(1.5625deg); }\n 75% { transform: skewX(-0.78125deg) skewY(-0.78125deg); }\n}\n\n/* Marquee scroll animation */\n@keyframes marquee {\n 0% { transform: translateX(0); }\n 100% { transform: translateX(-50%); }\n}\n\n@keyframes marquee-reverse {\n 0% { transform: translateX(-50%); }\n 100% { transform: translateX(0); }\n}\n\n/* Stagger fade in */\n@keyframes stagger-fade-in {\n 0% { opacity: 0; transform: translateY(10px); }\n 100% { opacity: 1; transform: translateY(0); }\n}\n\n/* Pulse scale */\n@keyframes pulse-scale {\n 0%, 100% { transform: scale(1); }\n 50% { transform: scale(1.05); }\n}\n\n/* Glitch effect */\n@keyframes glitch {\n 0%, 100% { transform: translate(0); }\n 20% { transform: translate(-2px, 2px); }\n 40% { transform: translate(-2px, -2px); }\n 60% { transform: translate(2px, 2px); }\n 80% { transform: translate(2px, -2px); }\n}\n\n/* Float animation */\n@keyframes float {\n 0%, 100% { transform: translateY(0); }\n 50% { transform: translateY(-10px); }\n}\n\n/* Typewriter cursor blink */\n@keyframes blink {\n 0%, 50% { opacity: 1; }\n 51%, 100% { opacity: 0; }\n}\n\n/* Animation Classes */\n.animate-accordion-down {\n animation: accordion-down 200ms ease-out;\n}\n\n.animate-accordion-up {\n animation: accordion-up 200ms ease-out;\n}\n\n.animate-collapsible-down {\n animation: collapsible-down 200ms ease-out;\n}\n\n.animate-collapsible-up {\n animation: collapsible-up 200ms ease-out;\n}\n\n.animate-shake {\n animation: shake 200ms ease-in-out;\n}\n\n.animate-bounce-in {\n animation: bounce-in 300ms ease-out;\n}\n\n.animate-pulse-shadow {\n animation: pulse-shadow 2s ease-in-out infinite;\n}\n\n.animate-wiggle {\n animation: wiggle 300ms ease-in-out;\n}\n\n.animate-pop {\n animation: pop 300ms ease-out;\n}\n\n.animate-rubber-band {\n animation: rubber-band 800ms ease-out;\n}\n\n.animate-jello {\n animation: jello 800ms ease-out;\n}\n\n.animate-marquee {\n animation: marquee 20s linear infinite;\n}\n\n.animate-marquee-fast {\n animation: marquee 10s linear infinite;\n}\n\n.animate-marquee-slow {\n animation: marquee 40s linear infinite;\n}\n\n.animate-marquee-reverse {\n animation: marquee-reverse 20s linear infinite;\n}\n\n.animate-stagger-fade-in {\n animation: stagger-fade-in 300ms ease-out forwards;\n opacity: 0;\n}\n\n/* Stagger delay utilities */\n.stagger-1 { animation-delay: 50ms; }\n.stagger-2 { animation-delay: 100ms; }\n.stagger-3 { animation-delay: 150ms; }\n.stagger-4 { animation-delay: 200ms; }\n.stagger-5 { animation-delay: 250ms; }\n.stagger-6 { animation-delay: 300ms; }\n.stagger-7 { animation-delay: 350ms; }\n.stagger-8 { animation-delay: 400ms; }\n\n.animate-pulse-scale {\n animation: pulse-scale 2s ease-in-out infinite;\n}\n\n.animate-glitch {\n animation: glitch 200ms ease-in-out;\n}\n\n.animate-float {\n animation: float 3s ease-in-out infinite;\n}\n\n.animate-blink {\n animation: blink 1s step-end infinite;\n}\n\n/* Hover-triggered animations */\n.hover-wiggle:hover {\n animation: wiggle 300ms ease-in-out;\n}\n\n.hover-pop:hover {\n animation: pop 300ms ease-out;\n}\n\n.hover-jello:hover {\n animation: jello 800ms ease-out;\n}\n\n.hover-rubber-band:hover {\n animation: rubber-band 800ms ease-out;\n}\n\n/* Tooltip & Popover Animations */\n@keyframes fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes fade-out {\n from { opacity: 1; }\n to { opacity: 0; }\n}\n\n@keyframes zoom-in {\n from { transform: scale(0.95); opacity: 0; }\n to { transform: scale(1); opacity: 1; }\n}\n\n@keyframes zoom-out {\n from { transform: scale(1); opacity: 1; }\n to { transform: scale(0.95); opacity: 0; }\n}\n\n@keyframes slide-in-from-top {\n from { transform: translateY(-4px); }\n to { transform: translateY(0); }\n}\n\n@keyframes slide-in-from-bottom {\n from { transform: translateY(4px); }\n to { transform: translateY(0); }\n}\n\n@keyframes slide-in-from-left {\n from { transform: translateX(-4px); }\n to { transform: translateX(0); }\n}\n\n@keyframes slide-in-from-right {\n from { transform: translateX(4px); }\n to { transform: translateX(0); }\n}\n\n/* Reka UI animation states (compatible with Radix) */\n[data-state=\"open\"] {\n animation: zoom-in 150ms ease-out;\n}\n\n[data-state=\"closed\"] {\n animation: zoom-out 100ms ease-in;\n}\n\n/* Tooltip specific animations */\n[data-reka-popper-content-wrapper] [data-side=\"top\"],\n[data-radix-popper-content-wrapper] [data-side=\"top\"] {\n animation: fade-in 150ms ease-out, slide-in-from-bottom 150ms ease-out;\n}\n\n[data-reka-popper-content-wrapper] [data-side=\"bottom\"],\n[data-radix-popper-content-wrapper] [data-side=\"bottom\"] {\n animation: fade-in 150ms ease-out, slide-in-from-top 150ms ease-out;\n}\n\n[data-reka-popper-content-wrapper] [data-side=\"left\"],\n[data-radix-popper-content-wrapper] [data-side=\"left\"] {\n animation: fade-in 150ms ease-out, slide-in-from-right 150ms ease-out;\n}\n\n[data-reka-popper-content-wrapper] [data-side=\"right\"],\n[data-radix-popper-content-wrapper] [data-side=\"right\"] {\n animation: fade-in 150ms ease-out, slide-in-from-left 150ms ease-out;\n}\n\n/* ==========================================\n MARQUEE COMPONENT UTILITIES\n ========================================== */\n\n.bk-marquee {\n display: flex;\n overflow: hidden;\n user-select: none;\n gap: 1rem;\n}\n\n.bk-marquee-content {\n display: flex;\n gap: 1rem;\n flex-shrink: 0;\n animation: marquee 20s linear infinite;\n}\n\n.bk-marquee:hover .bk-marquee-content {\n animation-play-state: paused;\n}\n\n.bk-marquee-vertical {\n flex-direction: column;\n height: 100%;\n}\n\n.bk-marquee-vertical .bk-marquee-content {\n flex-direction: column;\n animation: marquee-vertical 20s linear infinite;\n}\n\n@keyframes marquee-vertical {\n 0% { transform: translateY(0); }\n 100% { transform: translateY(-50%); }\n}\n\n/* ==========================================\n LAYERED CARD UTILITIES\n ========================================== */\n\n.bk-layered {\n position: relative;\n}\n\n.bk-layered::before,\n.bk-layered::after {\n content: '';\n position: absolute;\n inset: 0;\n border: 3px solid hsl(var(--foreground));\n background: hsl(var(--card));\n z-index: -1;\n}\n\n.bk-layered::before {\n transform: translate(6px, 6px);\n}\n\n.bk-layered::after {\n transform: translate(12px, 12px);\n}\n\n.bk-layered-sm::before {\n transform: translate(4px, 4px);\n}\n\n.bk-layered-sm::after {\n transform: translate(8px, 8px);\n}\n\n.bk-layered-lg::before {\n transform: translate(8px, 8px);\n}\n\n.bk-layered-lg::after {\n transform: translate(16px, 16px);\n}\n\n/* Single layer variant */\n.bk-layered-single::after {\n display: none;\n}\n\n/* Colored layers */\n.bk-layered-primary::before {\n background: hsl(var(--primary));\n}\n\n.bk-layered-accent::before {\n background: hsl(var(--accent));\n}\n\n.bk-layered-secondary::before {\n background: hsl(var(--secondary));\n}\n\n/* ==========================================\n NEON GLOW UTILITIES\n ========================================== */\n\n.bk-glow-neon-pink {\n box-shadow:\n 0 0 5px hsl(var(--neon-pink)),\n 0 0 10px hsl(var(--neon-pink)),\n 0 0 20px hsl(var(--neon-pink) / 0.5);\n}\n\n.bk-glow-neon-green {\n box-shadow:\n 0 0 5px hsl(var(--neon-green)),\n 0 0 10px hsl(var(--neon-green)),\n 0 0 20px hsl(var(--neon-green) / 0.5);\n}\n\n.bk-glow-neon-blue {\n box-shadow:\n 0 0 5px hsl(var(--neon-blue)),\n 0 0 10px hsl(var(--neon-blue)),\n 0 0 20px hsl(var(--neon-blue) / 0.5);\n}\n\n/* Combined neon + brutal shadow */\n.bk-shadow-neon-brutal-pink {\n box-shadow:\n 4px 4px 0px hsl(var(--shadow-color)),\n 0 0 10px hsl(var(--neon-pink) / 0.5);\n}\n\n.bk-shadow-neon-brutal-green {\n box-shadow:\n 4px 4px 0px hsl(var(--shadow-color)),\n 0 0 10px hsl(var(--neon-green) / 0.5);\n}\n\n/* ==========================================\n UTILITY HELPERS\n ========================================== */\n\n/* Force neubrutalism style reset */\n.bk-brutal {\n border-radius: 0 !important;\n border-width: 3px;\n border-style: solid;\n border-color: hsl(var(--foreground));\n}\n\n/* Pressed state utility */\n.bk-pressed {\n transform: translate(4px, 4px);\n box-shadow: none !important;\n}\n\n/* Lifted state utility */\n.bk-lifted {\n transform: translate(-4px, -4px);\n box-shadow: 8px 8px 0px hsl(var(--shadow-color));\n}\n\n/* ==========================================\n BUTTON ANIMATION KEYFRAMES\n ========================================== */\n\n@keyframes brutal-pulse {\n 0%, 100% {\n box-shadow: 4px 4px 0px hsl(var(--shadow-color));\n transform: translate(0, 0);\n }\n 50% {\n box-shadow: 6px 6px 0px hsl(var(--shadow-color));\n transform: translate(-2px, -2px);\n }\n}\n\n@keyframes brutal-bounce {\n 0%, 100% {\n transform: translateY(0);\n }\n 50% {\n transform: translateY(-6px);\n }\n}\n\n@keyframes brutal-shake {\n 0%, 100% {\n transform: translateX(0);\n }\n 20% {\n transform: translateX(-4px) rotate(-2deg);\n }\n 40% {\n transform: translateX(4px) rotate(2deg);\n }\n 60% {\n transform: translateX(-4px) rotate(-2deg);\n }\n 80% {\n transform: translateX(4px) rotate(2deg);\n }\n}\n\n@keyframes brutal-wiggle {\n 0%, 100% {\n transform: rotate(0deg);\n }\n 25% {\n transform: rotate(-5deg);\n }\n 75% {\n transform: rotate(5deg);\n }\n}\n\n@keyframes brutal-pop {\n 0% {\n transform: scale(1);\n }\n 50% {\n transform: scale(1.1);\n }\n 100% {\n transform: scale(1);\n }\n}\n\n/* ── Shape Animations ────────────────────────────────── */\n@keyframes shape-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n@keyframes shape-pulse {\n 0%, 100% { transform: scale(1); filter: drop-shadow(0 0 0 hsl(var(--primary))); }\n 50% { transform: scale(1.12); filter: drop-shadow(0 0 8px hsl(var(--primary))); }\n}\n\n@keyframes shape-bounce {\n 0%, 100% { transform: translateY(0) scaleX(1); }\n 40% { transform: translateY(-16px) scaleX(0.95); }\n 60% { transform: translateY(-10px) scaleX(1.05); }\n}\n\n/* slow / normal / fast speed modifiers */\n.shape-animate-spin { animation: shape-spin 2s linear infinite; }\n.shape-animate-spin-slow { animation: shape-spin 4s linear infinite; }\n.shape-animate-spin-fast { animation: shape-spin 0.8s linear infinite; }\n\n.shape-animate-pulse { animation: shape-pulse 2s ease-in-out infinite; }\n.shape-animate-pulse-slow { animation: shape-pulse 3.5s ease-in-out infinite; }\n.shape-animate-pulse-fast { animation: shape-pulse 1s ease-in-out infinite; }\n\n.shape-animate-float { animation: float 3s ease-in-out infinite; }\n.shape-animate-float-slow { animation: float 5s ease-in-out infinite; }\n.shape-animate-float-fast { animation: float 1.5s ease-in-out infinite; }\n\n.shape-animate-wiggle { animation: wiggle 0.8s ease-in-out infinite; }\n.shape-animate-wiggle-slow { animation: wiggle 1.5s ease-in-out infinite; }\n.shape-animate-wiggle-fast { animation: wiggle 0.4s ease-in-out infinite; }\n\n.shape-animate-bounce { animation: shape-bounce 1.2s ease-in-out infinite; }\n.shape-animate-bounce-slow { animation: shape-bounce 2.2s ease-in-out infinite; }\n.shape-animate-bounce-fast { animation: shape-bounce 0.6s ease-in-out infinite; }\n\n.shape-animate-glitch { animation: glitch 2s steps(1) infinite; }\n.shape-animate-glitch-slow { animation: glitch 4s steps(1) infinite; }\n.shape-animate-glitch-fast { animation: glitch 0.8s steps(1) infinite; }\n", + "type": "registry:style", + "target": "styles/globals.css" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/switch.json b/public/r/svelte/switch.json new file mode 100644 index 00000000..0e5a07f9 --- /dev/null +++ b/public/r/svelte/switch.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "switch", + "type": "registry:ui", + "description": "A toggle switch control", + "dependencies": [ + "bits-ui" + ], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/switch.svelte", + "content": "\n\n\n \n\n", + "type": "registry:ui", + "target": "lib/components/ui/switch.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/tabs.json b/public/r/svelte/tabs.json new file mode 100644 index 00000000..acbdeab1 --- /dev/null +++ b/public/r/svelte/tabs.json @@ -0,0 +1,38 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "tabs", + "type": "registry:ui", + "description": "A set of layered sections of content", + "dependencies": [ + "bits-ui" + ], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/tabs.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/tabs.svelte" + }, + { + "path": "registry/default/ui/tabs-list.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/tabs-list.svelte" + }, + { + "path": "registry/default/ui/tabs-trigger.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/tabs-trigger.svelte" + }, + { + "path": "registry/default/ui/tabs-content.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/tabs-content.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/textarea.json b/public/r/svelte/textarea.json new file mode 100644 index 00000000..35bef60d --- /dev/null +++ b/public/r/svelte/textarea.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "textarea", + "type": "registry:ui", + "description": "Displays a multi-line text input", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/textarea.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/textarea.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/toggle.json b/public/r/svelte/toggle.json new file mode 100644 index 00000000..01960725 --- /dev/null +++ b/public/r/svelte/toggle.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "toggle", + "type": "registry:ui", + "description": "A two-state button", + "dependencies": [ + "bits-ui", + "class-variance-authority" + ], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/toggle.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/toggle.svelte" + }, + { + "path": "registry/default/ui/toggle-variants.ts", + "content": "import { cva } from 'class-variance-authority'\n\nexport const toggleVariants = cva(\n 'inline-flex items-center justify-center text-sm font-bold uppercase tracking-wide transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border-3 border-foreground shadow-[4px_4px_0px_hsl(var(--shadow-color))] [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 gap-2 hover:translate-x-[4px] hover:translate-y-[4px] hover:shadow-none active:translate-x-[4px] active:translate-y-[4px] active:shadow-none data-[state=on]:bg-primary data-[state=on]:text-primary-foreground data-[state=on]:translate-x-[4px] data-[state=on]:translate-y-[4px] data-[state=on]:shadow-none',\n {\n variants: {\n variant: {\n default: 'bg-transparent hover:bg-muted',\n outline: 'bg-background hover:bg-muted',\n },\n size: {\n default: 'h-10 px-3 min-w-10',\n sm: 'h-9 px-2.5 min-w-9',\n lg: 'h-11 px-5 min-w-11',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n)\n", + "type": "registry:ui", + "target": "lib/components/ui/toggle-variants.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/utils.json b/public/r/svelte/utils.json new file mode 100644 index 00000000..e217f7b5 --- /dev/null +++ b/public/r/svelte/utils.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "utils", + "type": "registry:lib", + "description": "Utility function for merging Tailwind CSS class names", + "dependencies": [ + "clsx", + "tailwind-merge" + ], + "files": [ + { + "path": "registry/default/lib/utils.ts", + "content": "import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n", + "type": "registry:lib", + "target": "lib/utils.ts" + } + ] +} \ No newline at end of file From 15721c6388c5007910bcdae5df6fff08c37ad2f1 Mon Sep 17 00:00:00 2001 From: Max Farrell Date: Wed, 13 May 2026 00:05:08 -0500 Subject: [PATCH 2/6] feat(svelte): rebuild with shadcn-svelte CLI + BoldKit neubrutalism styling - Use `pnpm dlx shadcn-svelte@latest add -a` to scaffold all standard components (accordion, alert, alert-dialog, avatar, badge, breadcrumb, button, calendar, card, carousel, chart, checkbox, collapsible, command, context-menu, data-table, dialog, drawer, dropdown-menu, field, form, hover-card, input, input-group, input-otp, kbd, label, menubar, native-select, navigation-menu, pagination, popover, progress, radio-group, range-calendar, resizable, scroll-area, select, separator, sheet, sidebar, skeleton, slider, sonner, spinner, switch, table, tabs, textarea, toggle, toggle-group, tooltip) - Remove old manually-written flat files, move to proper subdirectory structure - Apply BoldKit neubrutalism styling to all CLI components: border-3 border-foreground, shadow-[4px_4px_0px_hsl(var(--shadow-color))], hover press effect, font-bold uppercase tracking-wide, no border-radius - Add BoldKit-unique components in subdirectories: marquee, sticker, layered-card, timeline, empty-state - Add WithElementRef/WithoutChild* type helpers to $lib/utils.ts - Update index.ts with explicit named exports (no wildcard to avoid collisions) - Upgrade bits-ui to v2.16.3, add vaul-svelte, embla-carousel-svelte - svelte-check passes: 0 errors, 0 warnings Co-Authored-By: Claude Sonnet 4.6 --- bun.lock | 221 +- packages/svelte/components.json | 16 + packages/svelte/package.json | 15 +- packages/svelte/pnpm-lock.yaml | 2533 +++++++++++++++++ .../components/ui/accordion-content.svelte | 21 - .../lib/components/ui/accordion-item.svelte | 22 - .../components/ui/accordion-trigger.svelte | 26 - .../src/lib/components/ui/accordion.svelte | 18 - .../ui/accordion/accordion-content.svelte | 22 + .../ui/accordion/accordion-item.svelte | 17 + .../ui/accordion/accordion-trigger.svelte | 30 + .../components/ui/accordion/accordion.svelte | 19 + .../src/lib/components/ui/accordion/index.ts | 16 + .../src/lib/components/ui/alert-action.svelte | 41 - .../components/ui/alert-description.svelte | 16 - .../alert-dialog/alert-dialog-action.svelte | 27 + .../alert-dialog/alert-dialog-cancel.svelte | 27 + .../alert-dialog/alert-dialog-content.svelte | 32 + .../alert-dialog-description.svelte | 17 + .../alert-dialog/alert-dialog-footer.svelte | 23 + .../alert-dialog/alert-dialog-header.svelte | 20 + .../ui/alert-dialog/alert-dialog-media.svelte | 20 + .../alert-dialog/alert-dialog-overlay.svelte | 17 + .../alert-dialog/alert-dialog-portal.svelte | 7 + .../ui/alert-dialog/alert-dialog-title.svelte | 17 + .../alert-dialog/alert-dialog-trigger.svelte | 7 + .../ui/alert-dialog/alert-dialog.svelte | 7 + .../lib/components/ui/alert-dialog/index.ts | 40 + .../src/lib/components/ui/alert-title.svelte | 16 - .../svelte/src/lib/components/ui/alert.svelte | 38 - .../components/ui/alert/alert-action.svelte | 20 + .../ui/alert/alert-description.svelte | 23 + .../components/ui/alert/alert-title.svelte | 20 + .../src/lib/components/ui/alert/alert.svelte | 46 + .../src/lib/components/ui/alert/index.ts | 17 + .../ui/aspect-ratio/aspect-ratio.svelte | 7 + .../lib/components/ui/aspect-ratio/index.ts | 3 + .../lib/components/ui/avatar-fallback.svelte | 22 - .../src/lib/components/ui/avatar-image.svelte | 15 - .../src/lib/components/ui/avatar.svelte | 22 - .../components/ui/avatar/avatar-badge.svelte | 26 + .../ui/avatar/avatar-fallback.svelte | 20 + .../ui/avatar/avatar-group-count.svelte | 23 + .../components/ui/avatar/avatar-group.svelte | 23 + .../components/ui/avatar/avatar-image.svelte | 17 + .../lib/components/ui/avatar/avatar.svelte | 26 + .../src/lib/components/ui/avatar/index.ts | 22 + .../svelte/src/lib/components/ui/badge.svelte | 41 - .../src/lib/components/ui/badge/badge.svelte | 51 + .../src/lib/components/ui/badge/index.ts | 2 + .../ui/breadcrumb/breadcrumb-ellipsis.svelte | 23 + .../ui/breadcrumb/breadcrumb-item.svelte | 20 + .../ui/breadcrumb/breadcrumb-link.svelte | 31 + .../ui/breadcrumb/breadcrumb-list.svelte | 20 + .../ui/breadcrumb/breadcrumb-page.svelte | 23 + .../ui/breadcrumb/breadcrumb-separator.svelte | 27 + .../ui/breadcrumb/breadcrumb.svelte | 22 + .../src/lib/components/ui/breadcrumb/index.ts | 25 + .../button-group-separator.svelte | 23 + .../ui/button-group/button-group-text.svelte | 28 + .../ui/button-group/button-group.svelte | 46 + .../lib/components/ui/button-group/index.ts | 15 + .../src/lib/components/ui/button.svelte | 79 - .../lib/components/ui/button/button.svelte | 94 + .../src/lib/components/ui/button/index.ts | 17 + .../ui/calendar/calendar-caption.svelte | 76 + .../ui/calendar/calendar-cell.svelte | 19 + .../ui/calendar/calendar-day.svelte | 33 + .../ui/calendar/calendar-grid-body.svelte | 12 + .../ui/calendar/calendar-grid-head.svelte | 12 + .../ui/calendar/calendar-grid-row.svelte | 12 + .../ui/calendar/calendar-grid.svelte | 16 + .../ui/calendar/calendar-head-cell.svelte | 19 + .../ui/calendar/calendar-header.svelte | 19 + .../ui/calendar/calendar-heading.svelte | 16 + .../ui/calendar/calendar-month-select.svelte | 48 + .../ui/calendar/calendar-month.svelte | 15 + .../ui/calendar/calendar-months.svelte | 19 + .../ui/calendar/calendar-nav.svelte | 19 + .../ui/calendar/calendar-next-button.svelte | 36 + .../ui/calendar/calendar-prev-button.svelte | 36 + .../ui/calendar/calendar-year-select.svelte | 47 + .../components/ui/calendar/calendar.svelte | 115 + .../src/lib/components/ui/calendar/index.ts | 40 + .../src/lib/components/ui/card-content.svelte | 16 - .../lib/components/ui/card-description.svelte | 16 - .../src/lib/components/ui/card-footer.svelte | 16 - .../src/lib/components/ui/card-header.svelte | 16 - .../src/lib/components/ui/card-title.svelte | 16 - .../svelte/src/lib/components/ui/card.svelte | 25 - .../lib/components/ui/card/card-action.svelte | 23 + .../components/ui/card/card-content.svelte | 20 + .../ui/card/card-description.svelte | 20 + .../lib/components/ui/card/card-footer.svelte | 20 + .../lib/components/ui/card/card-header.svelte | 23 + .../lib/components/ui/card/card-title.svelte | 20 + .../src/lib/components/ui/card/card.svelte | 25 + .../src/lib/components/ui/card/index.ts | 25 + .../ui/carousel/carousel-content.svelte | 43 + .../ui/carousel/carousel-item.svelte | 30 + .../ui/carousel/carousel-next.svelte | 39 + .../ui/carousel/carousel-previous.svelte | 39 + .../components/ui/carousel/carousel.svelte | 94 + .../src/lib/components/ui/carousel/context.ts | 58 + .../src/lib/components/ui/carousel/index.ts | 19 + .../ui/chart/chart-container.svelte | 80 + .../components/ui/chart/chart-style.svelte | 37 + .../components/ui/chart/chart-tooltip.svelte | 184 ++ .../lib/components/ui/chart/chart-utils.ts | 68 + .../src/lib/components/ui/chart/index.ts | 6 + .../src/lib/components/ui/checkbox.svelte | 27 - .../components/ui/checkbox/checkbox.svelte | 34 + .../src/lib/components/ui/checkbox/index.ts | 6 + .../ui/collapsible/collapsible-content.svelte | 7 + .../ui/collapsible/collapsible-trigger.svelte | 7 + .../ui/collapsible/collapsible.svelte | 11 + .../lib/components/ui/collapsible/index.ts | 13 + .../ui/command/command-dialog.svelte | 42 + .../ui/command/command-empty.svelte | 17 + .../ui/command/command-group.svelte | 32 + .../ui/command/command-input.svelte | 34 + .../components/ui/command/command-item.svelte | 25 + .../ui/command/command-link-item.svelte | 20 + .../components/ui/command/command-list.svelte | 17 + .../ui/command/command-loading.svelte | 7 + .../ui/command/command-separator.svelte | 17 + .../ui/command/command-shortcut.svelte | 20 + .../lib/components/ui/command/command.svelte | 25 + .../src/lib/components/ui/command/index.ts | 37 + .../context-menu-checkbox-item.svelte | 41 + .../context-menu/context-menu-content.svelte | 28 + .../context-menu-group-heading.svelte | 21 + .../ui/context-menu/context-menu-group.svelte | 7 + .../ui/context-menu/context-menu-item.svelte | 27 + .../ui/context-menu/context-menu-label.svelte | 24 + .../context-menu/context-menu-portal.svelte | 7 + .../context-menu-radio-group.svelte | 16 + .../context-menu-radio-item.svelte | 35 + .../context-menu-separator.svelte | 17 + .../context-menu/context-menu-shortcut.svelte | 20 + .../context-menu-sub-content.svelte | 17 + .../context-menu-sub-trigger.svelte | 29 + .../ui/context-menu/context-menu-sub.svelte | 7 + .../context-menu/context-menu-trigger.svelte | 17 + .../ui/context-menu/context-menu.svelte | 7 + .../lib/components/ui/context-menu/index.ts | 52 + .../ui/data-table/data-table.svelte.ts | 142 + .../ui/data-table/flex-render.svelte | 40 + .../src/lib/components/ui/data-table/index.ts | 3 + .../ui/data-table/render-helpers.ts | 111 + .../src/lib/components/ui/dialog-close.svelte | 14 - .../lib/components/ui/dialog-content.svelte | 34 - .../components/ui/dialog-description.svelte | 19 - .../lib/components/ui/dialog-footer.svelte | 16 - .../lib/components/ui/dialog-header.svelte | 16 - .../src/lib/components/ui/dialog-title.svelte | 19 - .../lib/components/ui/dialog-trigger.svelte | 14 - .../src/lib/components/ui/dialog.svelte | 14 - .../components/ui/dialog/dialog-close.svelte | 11 + .../ui/dialog/dialog-content.svelte | 46 + .../ui/dialog/dialog-description.svelte | 17 + .../components/ui/dialog/dialog-footer.svelte | 32 + .../components/ui/dialog/dialog-header.svelte | 20 + .../ui/dialog/dialog-overlay.svelte | 17 + .../components/ui/dialog/dialog-portal.svelte | 7 + .../components/ui/dialog/dialog-title.svelte | 17 + .../ui/dialog/dialog-trigger.svelte | 11 + .../lib/components/ui/dialog/dialog.svelte | 7 + .../src/lib/components/ui/dialog/index.ts | 34 + .../components/ui/drawer/drawer-close.svelte | 7 + .../ui/drawer/drawer-content.svelte | 33 + .../ui/drawer/drawer-description.svelte | 17 + .../components/ui/drawer/drawer-footer.svelte | 20 + .../components/ui/drawer/drawer-header.svelte | 20 + .../components/ui/drawer/drawer-nested.svelte | 12 + .../ui/drawer/drawer-overlay.svelte | 17 + .../components/ui/drawer/drawer-portal.svelte | 7 + .../components/ui/drawer/drawer-title.svelte | 17 + .../ui/drawer/drawer-trigger.svelte | 7 + .../lib/components/ui/drawer/drawer.svelte | 12 + .../src/lib/components/ui/drawer/index.ts | 38 + .../ui/dropdown-menu-content.svelte | 26 - .../components/ui/dropdown-menu-item.svelte | 24 - .../components/ui/dropdown-menu-label.svelte | 24 - .../ui/dropdown-menu-separator.svelte | 12 - .../ui/dropdown-menu-shortcut.svelte | 16 - .../ui/dropdown-menu-trigger.svelte | 14 - .../lib/components/ui/dropdown-menu.svelte | 14 - .../dropdown-menu-checkbox-group.svelte | 16 + .../dropdown-menu-checkbox-item.svelte | 44 + .../dropdown-menu-content.svelte | 31 + .../dropdown-menu-group-heading.svelte | 22 + .../dropdown-menu/dropdown-menu-group.svelte | 7 + .../dropdown-menu/dropdown-menu-item.svelte | 27 + .../dropdown-menu/dropdown-menu-label.svelte | 24 + .../dropdown-menu/dropdown-menu-portal.svelte | 7 + .../dropdown-menu-radio-group.svelte | 16 + .../dropdown-menu-radio-item.svelte | 34 + .../dropdown-menu-separator.svelte | 17 + .../dropdown-menu-shortcut.svelte | 20 + .../dropdown-menu-sub-content.svelte | 17 + .../dropdown-menu-sub-trigger.svelte | 29 + .../ui/dropdown-menu/dropdown-menu-sub.svelte | 7 + .../dropdown-menu-trigger.svelte | 7 + .../ui/dropdown-menu/dropdown-menu.svelte | 7 + .../lib/components/ui/dropdown-menu/index.ts | 54 + .../empty-state-description.svelte | 10 + .../ui/empty-state/empty-state-icon.svelte | 15 + .../ui/empty-state/empty-state-title.svelte | 10 + .../ui/empty-state/empty-state-variants.ts | 15 + .../ui/empty-state/empty-state.svelte | 14 + .../lib/components/ui/empty-state/index.ts | 17 + .../components/ui/empty/empty-content.svelte | 23 + .../ui/empty/empty-description.svelte | 23 + .../components/ui/empty/empty-header.svelte | 20 + .../components/ui/empty/empty-media.svelte | 41 + .../components/ui/empty/empty-title.svelte | 20 + .../src/lib/components/ui/empty/empty.svelte | 23 + .../src/lib/components/ui/empty/index.ts | 22 + .../components/ui/field/field-content.svelte | 20 + .../ui/field/field-description.svelte | 25 + .../components/ui/field/field-error.svelte | 58 + .../components/ui/field/field-group.svelte | 23 + .../components/ui/field/field-label.svelte | 25 + .../components/ui/field/field-legend.svelte | 24 + .../ui/field/field-separator.svelte | 35 + .../lib/components/ui/field/field-set.svelte | 20 + .../components/ui/field/field-title.svelte | 20 + .../src/lib/components/ui/field/field.svelte | 47 + .../src/lib/components/ui/field/index.ts | 33 + .../lib/components/ui/form/form-button.svelte | 7 + .../ui/form/form-description.svelte | 17 + .../ui/form/form-element-field.svelte | 24 + .../ui/form/form-field-errors.svelte | 30 + .../lib/components/ui/form/form-field.svelte | 29 + .../components/ui/form/form-fieldset.svelte | 15 + .../lib/components/ui/form/form-label.svelte | 24 + .../lib/components/ui/form/form-legend.svelte | 16 + .../src/lib/components/ui/form/index.ts | 33 + .../ui/hover-card/hover-card-content.svelte | 31 + .../ui/hover-card/hover-card-portal.svelte | 7 + .../ui/hover-card/hover-card-trigger.svelte | 7 + .../ui/hover-card/hover-card.svelte | 7 + .../src/lib/components/ui/hover-card/index.ts | 15 + .../lib/components/ui/input-group/index.ts | 22 + .../ui/input-group/input-group-addon.svelte | 52 + .../ui/input-group/input-group-button.svelte | 49 + .../ui/input-group/input-group-input.svelte | 20 + .../ui/input-group/input-group-text.svelte | 19 + .../input-group/input-group-textarea.svelte | 20 + .../ui/input-group/input-group.svelte | 24 + .../src/lib/components/ui/input-otp/index.ts | 15 + .../ui/input-otp/input-otp-group.svelte | 20 + .../ui/input-otp/input-otp-separator.svelte | 27 + .../ui/input-otp/input-otp-slot.svelte | 31 + .../components/ui/input-otp/input-otp.svelte | 23 + .../svelte/src/lib/components/ui/input.svelte | 18 - .../src/lib/components/ui/input/index.ts | 7 + .../src/lib/components/ui/input/input.svelte | 48 + .../src/lib/components/ui/item/index.ts | 34 + .../components/ui/item/item-actions.svelte | 20 + .../components/ui/item/item-content.svelte | 23 + .../ui/item/item-description.svelte | 23 + .../lib/components/ui/item/item-footer.svelte | 20 + .../lib/components/ui/item/item-group.svelte | 21 + .../lib/components/ui/item/item-header.svelte | 20 + .../lib/components/ui/item/item-media.svelte | 42 + .../components/ui/item/item-separator.svelte | 19 + .../lib/components/ui/item/item-title.svelte | 20 + .../src/lib/components/ui/item/item.svelte | 61 + .../svelte/src/lib/components/ui/kbd/index.ts | 10 + .../lib/components/ui/kbd/kbd-group.svelte | 20 + .../src/lib/components/ui/kbd/kbd.svelte | 23 + .../svelte/src/lib/components/ui/label.svelte | 22 - .../src/lib/components/ui/label/index.ts | 7 + .../src/lib/components/ui/label/label.svelte | 20 + .../lib/components/ui/layered-card/index.ts | 23 + .../layered-card/layered-card-content.svelte | 10 + .../layered-card-description.svelte | 10 + .../layered-card/layered-card-footer.svelte | 10 + .../layered-card/layered-card-header.svelte | 10 + .../ui/layered-card/layered-card-title.svelte | 10 + .../ui/layered-card/layered-card-variants.ts | 10 + .../ui/layered-card/layered-card.svelte | 66 + .../src/lib/components/ui/marquee/index.ts | 13 + .../components/ui/marquee/marquee-item.svelte | 10 + .../ui/marquee/marquee-separator.svelte | 14 + .../lib/components/ui/marquee/marquee.svelte | 59 + .../src/lib/components/ui/menubar/index.ts | 55 + .../ui/menubar/menubar-checkbox-item.svelte | 46 + .../ui/menubar/menubar-content.svelte | 35 + .../ui/menubar/menubar-group-heading.svelte | 22 + .../ui/menubar/menubar-group.svelte | 12 + .../components/ui/menubar/menubar-item.svelte | 24 + .../ui/menubar/menubar-label.svelte | 25 + .../components/ui/menubar/menubar-menu.svelte | 7 + .../ui/menubar/menubar-portal.svelte | 7 + .../ui/menubar/menubar-radio-group.svelte | 11 + .../ui/menubar/menubar-radio-item.svelte | 37 + .../ui/menubar/menubar-separator.svelte | 17 + .../ui/menubar/menubar-shortcut.svelte | 20 + .../ui/menubar/menubar-sub-content.svelte | 17 + .../ui/menubar/menubar-sub-trigger.svelte | 29 + .../components/ui/menubar/menubar-sub.svelte | 7 + .../ui/menubar/menubar-trigger.svelte | 17 + .../lib/components/ui/menubar/menubar.svelte | 17 + .../lib/components/ui/native-select/index.ts | 12 + .../native-select-opt-group.svelte | 14 + .../native-select/native-select-option.svelte | 20 + .../ui/native-select/native-select.svelte | 39 + .../components/ui/navigation-menu/index.ts | 28 + .../navigation-menu-content.svelte | 20 + .../navigation-menu-indicator.svelte | 22 + .../navigation-menu-item.svelte | 17 + .../navigation-menu-link.svelte | 17 + .../navigation-menu-list.svelte | 20 + .../navigation-menu-trigger.svelte | 29 + .../navigation-menu-viewport.svelte | 22 + .../ui/navigation-menu/navigation-menu.svelte | 31 + .../src/lib/components/ui/pagination/index.ts | 31 + .../ui/pagination/pagination-content.svelte | 20 + .../ui/pagination/pagination-ellipsis.svelte | 22 + .../ui/pagination/pagination-item.svelte | 14 + .../ui/pagination/pagination-link.svelte | 42 + .../pagination/pagination-next-button.svelte | 31 + .../ui/pagination/pagination-next.svelte | 20 + .../pagination/pagination-prev-button.svelte | 31 + .../ui/pagination/pagination-previous.svelte | 20 + .../ui/pagination/pagination.svelte | 28 + .../src/lib/components/ui/popover/index.ts | 28 + .../ui/popover/popover-close.svelte | 7 + .../ui/popover/popover-content.svelte | 31 + .../ui/popover/popover-description.svelte | 20 + .../ui/popover/popover-header.svelte | 20 + .../ui/popover/popover-portal.svelte | 7 + .../ui/popover/popover-title.svelte | 20 + .../ui/popover/popover-trigger.svelte | 17 + .../lib/components/ui/popover/popover.svelte | 7 + .../src/lib/components/ui/progress.svelte | 25 - .../src/lib/components/ui/progress/index.ts | 7 + .../components/ui/progress/progress.svelte | 27 + .../lib/components/ui/radio-group/index.ts | 10 + .../ui/radio-group/radio-group-item.svelte | 29 + .../ui/radio-group/radio-group.svelte | 19 + .../lib/components/ui/range-calendar/index.ts | 40 + .../range-calendar-caption.svelte | 76 + .../range-calendar/range-calendar-cell.svelte | 19 + .../range-calendar/range-calendar-day.svelte | 36 + .../range-calendar-grid-body.svelte | 7 + .../range-calendar-grid-head.svelte | 7 + .../range-calendar-grid-row.svelte | 12 + .../range-calendar/range-calendar-grid.svelte | 16 + .../range-calendar-head-cell.svelte | 19 + .../range-calendar-header.svelte | 19 + .../range-calendar-heading.svelte | 16 + .../range-calendar-month-select.svelte | 44 + .../range-calendar-month.svelte | 15 + .../range-calendar-months.svelte | 19 + .../range-calendar/range-calendar-nav.svelte | 19 + .../range-calendar-next-button.svelte | 36 + .../range-calendar-prev-button.svelte | 36 + .../range-calendar-year-select.svelte | 43 + .../ui/range-calendar/range-calendar.svelte | 112 + .../src/lib/components/ui/resizable/index.ts | 13 + .../ui/resizable/resizable-handle.svelte | 27 + .../ui/resizable/resizable-pane-group.svelte | 24 + .../lib/components/ui/scroll-area/index.ts | 10 + .../scroll-area/scroll-area-scrollbar.svelte | 30 + .../ui/scroll-area/scroll-area.svelte | 43 + .../lib/components/ui/select-content.svelte | 33 - .../src/lib/components/ui/select-group.svelte | 14 - .../src/lib/components/ui/select-item.svelte | 31 - .../src/lib/components/ui/select-label.svelte | 19 - .../lib/components/ui/select-separator.svelte | 12 - .../lib/components/ui/select-trigger.svelte | 24 - .../src/lib/components/ui/select-value.svelte | 18 - .../src/lib/components/ui/select.svelte | 16 - .../src/lib/components/ui/select/index.ts | 37 + .../ui/select/select-content.svelte | 43 + .../ui/select/select-group-heading.svelte | 21 + .../components/ui/select/select-group.svelte | 17 + .../components/ui/select/select-item.svelte | 38 + .../components/ui/select/select-label.svelte | 20 + .../components/ui/select/select-portal.svelte | 7 + .../select/select-scroll-down-button.svelte | 20 + .../ui/select/select-scroll-up-button.svelte | 20 + .../ui/select/select-separator.svelte | 18 + .../ui/select/select-trigger.svelte | 25 + .../lib/components/ui/select/select.svelte | 11 + .../src/lib/components/ui/separator.svelte | 28 - .../src/lib/components/ui/separator/index.ts | 7 + .../components/ui/separator/separator.svelte | 21 + .../src/lib/components/ui/sheet/index.ts | 34 + .../components/ui/sheet/sheet-close.svelte | 7 + .../components/ui/sheet/sheet-content.svelte | 53 + .../ui/sheet/sheet-description.svelte | 17 + .../components/ui/sheet/sheet-footer.svelte | 20 + .../components/ui/sheet/sheet-header.svelte | 20 + .../components/ui/sheet/sheet-overlay.svelte | 17 + .../components/ui/sheet/sheet-portal.svelte | 7 + .../components/ui/sheet/sheet-title.svelte | 17 + .../components/ui/sheet/sheet-trigger.svelte | 7 + .../src/lib/components/ui/sheet/sheet.svelte | 7 + .../lib/components/ui/sidebar/constants.ts | 6 + .../components/ui/sidebar/context.svelte.ts | 81 + .../src/lib/components/ui/sidebar/index.ts | 75 + .../ui/sidebar/sidebar-content.svelte | 24 + .../ui/sidebar/sidebar-footer.svelte | 21 + .../ui/sidebar/sidebar-group-action.svelte | 33 + .../ui/sidebar/sidebar-group-content.svelte | 21 + .../ui/sidebar/sidebar-group-label.svelte | 33 + .../ui/sidebar/sidebar-group.svelte | 21 + .../ui/sidebar/sidebar-header.svelte | 21 + .../ui/sidebar/sidebar-input.svelte | 21 + .../ui/sidebar/sidebar-inset.svelte | 20 + .../ui/sidebar/sidebar-menu-action.svelte | 37 + .../ui/sidebar/sidebar-menu-badge.svelte | 24 + .../ui/sidebar/sidebar-menu-button.svelte | 102 + .../ui/sidebar/sidebar-menu-item.svelte | 21 + .../ui/sidebar/sidebar-menu-skeleton.svelte | 36 + .../ui/sidebar/sidebar-menu-sub-button.svelte | 39 + .../ui/sidebar/sidebar-menu-sub-item.svelte | 21 + .../ui/sidebar/sidebar-menu-sub.svelte | 21 + .../components/ui/sidebar/sidebar-menu.svelte | 21 + .../ui/sidebar/sidebar-provider.svelte | 53 + .../components/ui/sidebar/sidebar-rail.svelte | 36 + .../ui/sidebar/sidebar-separator.svelte | 19 + .../ui/sidebar/sidebar-trigger.svelte | 36 + .../lib/components/ui/sidebar/sidebar.svelte | 108 + .../src/lib/components/ui/skeleton.svelte | 15 - .../src/lib/components/ui/skeleton/index.ts | 7 + .../components/ui/skeleton/skeleton.svelte | 17 + .../src/lib/components/ui/slider/index.ts | 7 + .../lib/components/ui/slider/slider.svelte | 52 + .../src/lib/components/ui/sonner/index.ts | 1 + .../lib/components/ui/sonner/sonner.svelte | 34 + .../src/lib/components/ui/spinner/index.ts | 1 + .../lib/components/ui/spinner/spinner.svelte | 18 + .../src/lib/components/ui/sticker/index.ts | 7 + .../components/ui/sticker/sticker-variants.ts | 44 + .../lib/components/ui/sticker/sticker.svelte | 46 + .../src/lib/components/ui/switch.svelte | 22 - .../src/lib/components/ui/switch/index.ts | 7 + .../lib/components/ui/switch/switch.svelte | 27 + .../src/lib/components/ui/table/index.ts | 28 + .../lib/components/ui/table/table-body.svelte | 15 + .../components/ui/table/table-caption.svelte | 20 + .../lib/components/ui/table/table-cell.svelte | 15 + .../components/ui/table/table-footer.svelte | 20 + .../lib/components/ui/table/table-head.svelte | 15 + .../components/ui/table/table-header.svelte | 20 + .../lib/components/ui/table/table-row.svelte | 15 + .../src/lib/components/ui/table/table.svelte | 17 + .../src/lib/components/ui/tabs-content.svelte | 22 - .../src/lib/components/ui/tabs-list.svelte | 22 - .../src/lib/components/ui/tabs-trigger.svelte | 22 - .../svelte/src/lib/components/ui/tabs.svelte | 16 - .../src/lib/components/ui/tabs/index.ts | 16 + .../components/ui/tabs/tabs-content.svelte | 17 + .../lib/components/ui/tabs/tabs-list.svelte | 20 + .../components/ui/tabs/tabs-trigger.svelte | 20 + .../src/lib/components/ui/tabs/tabs.svelte | 19 + .../src/lib/components/ui/textarea.svelte | 18 - .../src/lib/components/ui/textarea/index.ts | 7 + .../components/ui/textarea/textarea.svelte | 23 + .../src/lib/components/ui/timeline/index.ts | 34 + .../ui/timeline/timeline-card.svelte | 15 + .../ui/timeline/timeline-connector.svelte | 12 + .../ui/timeline/timeline-content.svelte | 10 + .../ui/timeline/timeline-description.svelte | 10 + .../ui/timeline/timeline-dot.svelte | 22 + .../ui/timeline/timeline-header.svelte | 10 + .../ui/timeline/timeline-item.svelte | 10 + .../ui/timeline/timeline-time.svelte | 10 + .../ui/timeline/timeline-title.svelte | 10 + .../components/ui/timeline/timeline.svelte | 10 + .../lib/components/ui/toggle-group/index.ts | 10 + .../ui/toggle-group/toggle-group-item.svelte | 35 + .../ui/toggle-group/toggle-group.svelte | 75 + .../src/lib/components/ui/toggle-variants.ts | 22 - .../src/lib/components/ui/toggle.svelte | 31 - .../src/lib/components/ui/toggle/index.ts | 13 + .../lib/components/ui/toggle/toggle.svelte | 51 + .../src/lib/components/ui/tooltip/index.ts | 19 + .../ui/tooltip/tooltip-content.svelte | 52 + .../ui/tooltip/tooltip-portal.svelte | 7 + .../ui/tooltip/tooltip-provider.svelte | 7 + .../ui/tooltip/tooltip-trigger.svelte | 7 + .../lib/components/ui/tooltip/tooltip.svelte | 7 + .../svelte/src/lib/hooks/is-mobile.svelte.ts | 9 + packages/svelte/src/lib/index.ts | 237 +- packages/svelte/src/lib/utils.ts | 8 + 492 files changed, 13668 insertions(+), 1309 deletions(-) create mode 100644 packages/svelte/components.json create mode 100644 packages/svelte/pnpm-lock.yaml delete mode 100644 packages/svelte/src/lib/components/ui/accordion-content.svelte delete mode 100644 packages/svelte/src/lib/components/ui/accordion-item.svelte delete mode 100644 packages/svelte/src/lib/components/ui/accordion-trigger.svelte delete mode 100644 packages/svelte/src/lib/components/ui/accordion.svelte create mode 100644 packages/svelte/src/lib/components/ui/accordion/accordion-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/accordion/accordion-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/accordion/accordion-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/accordion/accordion.svelte create mode 100644 packages/svelte/src/lib/components/ui/accordion/index.ts delete mode 100644 packages/svelte/src/lib/components/ui/alert-action.svelte delete mode 100644 packages/svelte/src/lib/components/ui/alert-description.svelte create mode 100644 packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-action.svelte create mode 100644 packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-cancel.svelte create mode 100644 packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-description.svelte create mode 100644 packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-footer.svelte create mode 100644 packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-header.svelte create mode 100644 packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-media.svelte create mode 100644 packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-overlay.svelte create mode 100644 packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-portal.svelte create mode 100644 packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-title.svelte create mode 100644 packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog.svelte create mode 100644 packages/svelte/src/lib/components/ui/alert-dialog/index.ts delete mode 100644 packages/svelte/src/lib/components/ui/alert-title.svelte delete mode 100644 packages/svelte/src/lib/components/ui/alert.svelte create mode 100644 packages/svelte/src/lib/components/ui/alert/alert-action.svelte create mode 100644 packages/svelte/src/lib/components/ui/alert/alert-description.svelte create mode 100644 packages/svelte/src/lib/components/ui/alert/alert-title.svelte create mode 100644 packages/svelte/src/lib/components/ui/alert/alert.svelte create mode 100644 packages/svelte/src/lib/components/ui/alert/index.ts create mode 100644 packages/svelte/src/lib/components/ui/aspect-ratio/aspect-ratio.svelte create mode 100644 packages/svelte/src/lib/components/ui/aspect-ratio/index.ts delete mode 100644 packages/svelte/src/lib/components/ui/avatar-fallback.svelte delete mode 100644 packages/svelte/src/lib/components/ui/avatar-image.svelte delete mode 100644 packages/svelte/src/lib/components/ui/avatar.svelte create mode 100644 packages/svelte/src/lib/components/ui/avatar/avatar-badge.svelte create mode 100644 packages/svelte/src/lib/components/ui/avatar/avatar-fallback.svelte create mode 100644 packages/svelte/src/lib/components/ui/avatar/avatar-group-count.svelte create mode 100644 packages/svelte/src/lib/components/ui/avatar/avatar-group.svelte create mode 100644 packages/svelte/src/lib/components/ui/avatar/avatar-image.svelte create mode 100644 packages/svelte/src/lib/components/ui/avatar/avatar.svelte create mode 100644 packages/svelte/src/lib/components/ui/avatar/index.ts delete mode 100644 packages/svelte/src/lib/components/ui/badge.svelte create mode 100644 packages/svelte/src/lib/components/ui/badge/badge.svelte create mode 100644 packages/svelte/src/lib/components/ui/badge/index.ts create mode 100644 packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb-ellipsis.svelte create mode 100644 packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb-link.svelte create mode 100644 packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb-list.svelte create mode 100644 packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb-page.svelte create mode 100644 packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb-separator.svelte create mode 100644 packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb.svelte create mode 100644 packages/svelte/src/lib/components/ui/breadcrumb/index.ts create mode 100644 packages/svelte/src/lib/components/ui/button-group/button-group-separator.svelte create mode 100644 packages/svelte/src/lib/components/ui/button-group/button-group-text.svelte create mode 100644 packages/svelte/src/lib/components/ui/button-group/button-group.svelte create mode 100644 packages/svelte/src/lib/components/ui/button-group/index.ts delete mode 100644 packages/svelte/src/lib/components/ui/button.svelte create mode 100644 packages/svelte/src/lib/components/ui/button/button.svelte create mode 100644 packages/svelte/src/lib/components/ui/button/index.ts create mode 100644 packages/svelte/src/lib/components/ui/calendar/calendar-caption.svelte create mode 100644 packages/svelte/src/lib/components/ui/calendar/calendar-cell.svelte create mode 100644 packages/svelte/src/lib/components/ui/calendar/calendar-day.svelte create mode 100644 packages/svelte/src/lib/components/ui/calendar/calendar-grid-body.svelte create mode 100644 packages/svelte/src/lib/components/ui/calendar/calendar-grid-head.svelte create mode 100644 packages/svelte/src/lib/components/ui/calendar/calendar-grid-row.svelte create mode 100644 packages/svelte/src/lib/components/ui/calendar/calendar-grid.svelte create mode 100644 packages/svelte/src/lib/components/ui/calendar/calendar-head-cell.svelte create mode 100644 packages/svelte/src/lib/components/ui/calendar/calendar-header.svelte create mode 100644 packages/svelte/src/lib/components/ui/calendar/calendar-heading.svelte create mode 100644 packages/svelte/src/lib/components/ui/calendar/calendar-month-select.svelte create mode 100644 packages/svelte/src/lib/components/ui/calendar/calendar-month.svelte create mode 100644 packages/svelte/src/lib/components/ui/calendar/calendar-months.svelte create mode 100644 packages/svelte/src/lib/components/ui/calendar/calendar-nav.svelte create mode 100644 packages/svelte/src/lib/components/ui/calendar/calendar-next-button.svelte create mode 100644 packages/svelte/src/lib/components/ui/calendar/calendar-prev-button.svelte create mode 100644 packages/svelte/src/lib/components/ui/calendar/calendar-year-select.svelte create mode 100644 packages/svelte/src/lib/components/ui/calendar/calendar.svelte create mode 100644 packages/svelte/src/lib/components/ui/calendar/index.ts delete mode 100644 packages/svelte/src/lib/components/ui/card-content.svelte delete mode 100644 packages/svelte/src/lib/components/ui/card-description.svelte delete mode 100644 packages/svelte/src/lib/components/ui/card-footer.svelte delete mode 100644 packages/svelte/src/lib/components/ui/card-header.svelte delete mode 100644 packages/svelte/src/lib/components/ui/card-title.svelte delete mode 100644 packages/svelte/src/lib/components/ui/card.svelte create mode 100644 packages/svelte/src/lib/components/ui/card/card-action.svelte create mode 100644 packages/svelte/src/lib/components/ui/card/card-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/card/card-description.svelte create mode 100644 packages/svelte/src/lib/components/ui/card/card-footer.svelte create mode 100644 packages/svelte/src/lib/components/ui/card/card-header.svelte create mode 100644 packages/svelte/src/lib/components/ui/card/card-title.svelte create mode 100644 packages/svelte/src/lib/components/ui/card/card.svelte create mode 100644 packages/svelte/src/lib/components/ui/card/index.ts create mode 100644 packages/svelte/src/lib/components/ui/carousel/carousel-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/carousel/carousel-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/carousel/carousel-next.svelte create mode 100644 packages/svelte/src/lib/components/ui/carousel/carousel-previous.svelte create mode 100644 packages/svelte/src/lib/components/ui/carousel/carousel.svelte create mode 100644 packages/svelte/src/lib/components/ui/carousel/context.ts create mode 100644 packages/svelte/src/lib/components/ui/carousel/index.ts create mode 100644 packages/svelte/src/lib/components/ui/chart/chart-container.svelte create mode 100644 packages/svelte/src/lib/components/ui/chart/chart-style.svelte create mode 100644 packages/svelte/src/lib/components/ui/chart/chart-tooltip.svelte create mode 100644 packages/svelte/src/lib/components/ui/chart/chart-utils.ts create mode 100644 packages/svelte/src/lib/components/ui/chart/index.ts delete mode 100644 packages/svelte/src/lib/components/ui/checkbox.svelte create mode 100644 packages/svelte/src/lib/components/ui/checkbox/checkbox.svelte create mode 100644 packages/svelte/src/lib/components/ui/checkbox/index.ts create mode 100644 packages/svelte/src/lib/components/ui/collapsible/collapsible-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/collapsible/collapsible-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/collapsible/collapsible.svelte create mode 100644 packages/svelte/src/lib/components/ui/collapsible/index.ts create mode 100644 packages/svelte/src/lib/components/ui/command/command-dialog.svelte create mode 100644 packages/svelte/src/lib/components/ui/command/command-empty.svelte create mode 100644 packages/svelte/src/lib/components/ui/command/command-group.svelte create mode 100644 packages/svelte/src/lib/components/ui/command/command-input.svelte create mode 100644 packages/svelte/src/lib/components/ui/command/command-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/command/command-link-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/command/command-list.svelte create mode 100644 packages/svelte/src/lib/components/ui/command/command-loading.svelte create mode 100644 packages/svelte/src/lib/components/ui/command/command-separator.svelte create mode 100644 packages/svelte/src/lib/components/ui/command/command-shortcut.svelte create mode 100644 packages/svelte/src/lib/components/ui/command/command.svelte create mode 100644 packages/svelte/src/lib/components/ui/command/index.ts create mode 100644 packages/svelte/src/lib/components/ui/context-menu/context-menu-checkbox-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/context-menu/context-menu-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/context-menu/context-menu-group-heading.svelte create mode 100644 packages/svelte/src/lib/components/ui/context-menu/context-menu-group.svelte create mode 100644 packages/svelte/src/lib/components/ui/context-menu/context-menu-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/context-menu/context-menu-label.svelte create mode 100644 packages/svelte/src/lib/components/ui/context-menu/context-menu-portal.svelte create mode 100644 packages/svelte/src/lib/components/ui/context-menu/context-menu-radio-group.svelte create mode 100644 packages/svelte/src/lib/components/ui/context-menu/context-menu-radio-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/context-menu/context-menu-separator.svelte create mode 100644 packages/svelte/src/lib/components/ui/context-menu/context-menu-shortcut.svelte create mode 100644 packages/svelte/src/lib/components/ui/context-menu/context-menu-sub-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/context-menu/context-menu-sub-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/context-menu/context-menu-sub.svelte create mode 100644 packages/svelte/src/lib/components/ui/context-menu/context-menu-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/context-menu/context-menu.svelte create mode 100644 packages/svelte/src/lib/components/ui/context-menu/index.ts create mode 100644 packages/svelte/src/lib/components/ui/data-table/data-table.svelte.ts create mode 100644 packages/svelte/src/lib/components/ui/data-table/flex-render.svelte create mode 100644 packages/svelte/src/lib/components/ui/data-table/index.ts create mode 100644 packages/svelte/src/lib/components/ui/data-table/render-helpers.ts delete mode 100644 packages/svelte/src/lib/components/ui/dialog-close.svelte delete mode 100644 packages/svelte/src/lib/components/ui/dialog-content.svelte delete mode 100644 packages/svelte/src/lib/components/ui/dialog-description.svelte delete mode 100644 packages/svelte/src/lib/components/ui/dialog-footer.svelte delete mode 100644 packages/svelte/src/lib/components/ui/dialog-header.svelte delete mode 100644 packages/svelte/src/lib/components/ui/dialog-title.svelte delete mode 100644 packages/svelte/src/lib/components/ui/dialog-trigger.svelte delete mode 100644 packages/svelte/src/lib/components/ui/dialog.svelte create mode 100644 packages/svelte/src/lib/components/ui/dialog/dialog-close.svelte create mode 100644 packages/svelte/src/lib/components/ui/dialog/dialog-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/dialog/dialog-description.svelte create mode 100644 packages/svelte/src/lib/components/ui/dialog/dialog-footer.svelte create mode 100644 packages/svelte/src/lib/components/ui/dialog/dialog-header.svelte create mode 100644 packages/svelte/src/lib/components/ui/dialog/dialog-overlay.svelte create mode 100644 packages/svelte/src/lib/components/ui/dialog/dialog-portal.svelte create mode 100644 packages/svelte/src/lib/components/ui/dialog/dialog-title.svelte create mode 100644 packages/svelte/src/lib/components/ui/dialog/dialog-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/dialog/dialog.svelte create mode 100644 packages/svelte/src/lib/components/ui/dialog/index.ts create mode 100644 packages/svelte/src/lib/components/ui/drawer/drawer-close.svelte create mode 100644 packages/svelte/src/lib/components/ui/drawer/drawer-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/drawer/drawer-description.svelte create mode 100644 packages/svelte/src/lib/components/ui/drawer/drawer-footer.svelte create mode 100644 packages/svelte/src/lib/components/ui/drawer/drawer-header.svelte create mode 100644 packages/svelte/src/lib/components/ui/drawer/drawer-nested.svelte create mode 100644 packages/svelte/src/lib/components/ui/drawer/drawer-overlay.svelte create mode 100644 packages/svelte/src/lib/components/ui/drawer/drawer-portal.svelte create mode 100644 packages/svelte/src/lib/components/ui/drawer/drawer-title.svelte create mode 100644 packages/svelte/src/lib/components/ui/drawer/drawer-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/drawer/drawer.svelte create mode 100644 packages/svelte/src/lib/components/ui/drawer/index.ts delete mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu-content.svelte delete mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu-item.svelte delete mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu-label.svelte delete mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu-separator.svelte delete mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu-shortcut.svelte delete mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu-trigger.svelte delete mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-group.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-portal.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-sub.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropdown-menu/index.ts create mode 100644 packages/svelte/src/lib/components/ui/empty-state/empty-state-description.svelte create mode 100644 packages/svelte/src/lib/components/ui/empty-state/empty-state-icon.svelte create mode 100644 packages/svelte/src/lib/components/ui/empty-state/empty-state-title.svelte create mode 100644 packages/svelte/src/lib/components/ui/empty-state/empty-state-variants.ts create mode 100644 packages/svelte/src/lib/components/ui/empty-state/empty-state.svelte create mode 100644 packages/svelte/src/lib/components/ui/empty-state/index.ts create mode 100644 packages/svelte/src/lib/components/ui/empty/empty-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/empty/empty-description.svelte create mode 100644 packages/svelte/src/lib/components/ui/empty/empty-header.svelte create mode 100644 packages/svelte/src/lib/components/ui/empty/empty-media.svelte create mode 100644 packages/svelte/src/lib/components/ui/empty/empty-title.svelte create mode 100644 packages/svelte/src/lib/components/ui/empty/empty.svelte create mode 100644 packages/svelte/src/lib/components/ui/empty/index.ts create mode 100644 packages/svelte/src/lib/components/ui/field/field-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/field/field-description.svelte create mode 100644 packages/svelte/src/lib/components/ui/field/field-error.svelte create mode 100644 packages/svelte/src/lib/components/ui/field/field-group.svelte create mode 100644 packages/svelte/src/lib/components/ui/field/field-label.svelte create mode 100644 packages/svelte/src/lib/components/ui/field/field-legend.svelte create mode 100644 packages/svelte/src/lib/components/ui/field/field-separator.svelte create mode 100644 packages/svelte/src/lib/components/ui/field/field-set.svelte create mode 100644 packages/svelte/src/lib/components/ui/field/field-title.svelte create mode 100644 packages/svelte/src/lib/components/ui/field/field.svelte create mode 100644 packages/svelte/src/lib/components/ui/field/index.ts create mode 100644 packages/svelte/src/lib/components/ui/form/form-button.svelte create mode 100644 packages/svelte/src/lib/components/ui/form/form-description.svelte create mode 100644 packages/svelte/src/lib/components/ui/form/form-element-field.svelte create mode 100644 packages/svelte/src/lib/components/ui/form/form-field-errors.svelte create mode 100644 packages/svelte/src/lib/components/ui/form/form-field.svelte create mode 100644 packages/svelte/src/lib/components/ui/form/form-fieldset.svelte create mode 100644 packages/svelte/src/lib/components/ui/form/form-label.svelte create mode 100644 packages/svelte/src/lib/components/ui/form/form-legend.svelte create mode 100644 packages/svelte/src/lib/components/ui/form/index.ts create mode 100644 packages/svelte/src/lib/components/ui/hover-card/hover-card-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/hover-card/hover-card-portal.svelte create mode 100644 packages/svelte/src/lib/components/ui/hover-card/hover-card-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/hover-card/hover-card.svelte create mode 100644 packages/svelte/src/lib/components/ui/hover-card/index.ts create mode 100644 packages/svelte/src/lib/components/ui/input-group/index.ts create mode 100644 packages/svelte/src/lib/components/ui/input-group/input-group-addon.svelte create mode 100644 packages/svelte/src/lib/components/ui/input-group/input-group-button.svelte create mode 100644 packages/svelte/src/lib/components/ui/input-group/input-group-input.svelte create mode 100644 packages/svelte/src/lib/components/ui/input-group/input-group-text.svelte create mode 100644 packages/svelte/src/lib/components/ui/input-group/input-group-textarea.svelte create mode 100644 packages/svelte/src/lib/components/ui/input-group/input-group.svelte create mode 100644 packages/svelte/src/lib/components/ui/input-otp/index.ts create mode 100644 packages/svelte/src/lib/components/ui/input-otp/input-otp-group.svelte create mode 100644 packages/svelte/src/lib/components/ui/input-otp/input-otp-separator.svelte create mode 100644 packages/svelte/src/lib/components/ui/input-otp/input-otp-slot.svelte create mode 100644 packages/svelte/src/lib/components/ui/input-otp/input-otp.svelte delete mode 100644 packages/svelte/src/lib/components/ui/input.svelte create mode 100644 packages/svelte/src/lib/components/ui/input/index.ts create mode 100644 packages/svelte/src/lib/components/ui/input/input.svelte create mode 100644 packages/svelte/src/lib/components/ui/item/index.ts create mode 100644 packages/svelte/src/lib/components/ui/item/item-actions.svelte create mode 100644 packages/svelte/src/lib/components/ui/item/item-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/item/item-description.svelte create mode 100644 packages/svelte/src/lib/components/ui/item/item-footer.svelte create mode 100644 packages/svelte/src/lib/components/ui/item/item-group.svelte create mode 100644 packages/svelte/src/lib/components/ui/item/item-header.svelte create mode 100644 packages/svelte/src/lib/components/ui/item/item-media.svelte create mode 100644 packages/svelte/src/lib/components/ui/item/item-separator.svelte create mode 100644 packages/svelte/src/lib/components/ui/item/item-title.svelte create mode 100644 packages/svelte/src/lib/components/ui/item/item.svelte create mode 100644 packages/svelte/src/lib/components/ui/kbd/index.ts create mode 100644 packages/svelte/src/lib/components/ui/kbd/kbd-group.svelte create mode 100644 packages/svelte/src/lib/components/ui/kbd/kbd.svelte delete mode 100644 packages/svelte/src/lib/components/ui/label.svelte create mode 100644 packages/svelte/src/lib/components/ui/label/index.ts create mode 100644 packages/svelte/src/lib/components/ui/label/label.svelte create mode 100644 packages/svelte/src/lib/components/ui/layered-card/index.ts create mode 100644 packages/svelte/src/lib/components/ui/layered-card/layered-card-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/layered-card/layered-card-description.svelte create mode 100644 packages/svelte/src/lib/components/ui/layered-card/layered-card-footer.svelte create mode 100644 packages/svelte/src/lib/components/ui/layered-card/layered-card-header.svelte create mode 100644 packages/svelte/src/lib/components/ui/layered-card/layered-card-title.svelte create mode 100644 packages/svelte/src/lib/components/ui/layered-card/layered-card-variants.ts create mode 100644 packages/svelte/src/lib/components/ui/layered-card/layered-card.svelte create mode 100644 packages/svelte/src/lib/components/ui/marquee/index.ts create mode 100644 packages/svelte/src/lib/components/ui/marquee/marquee-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/marquee/marquee-separator.svelte create mode 100644 packages/svelte/src/lib/components/ui/marquee/marquee.svelte create mode 100644 packages/svelte/src/lib/components/ui/menubar/index.ts create mode 100644 packages/svelte/src/lib/components/ui/menubar/menubar-checkbox-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/menubar/menubar-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/menubar/menubar-group-heading.svelte create mode 100644 packages/svelte/src/lib/components/ui/menubar/menubar-group.svelte create mode 100644 packages/svelte/src/lib/components/ui/menubar/menubar-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/menubar/menubar-label.svelte create mode 100644 packages/svelte/src/lib/components/ui/menubar/menubar-menu.svelte create mode 100644 packages/svelte/src/lib/components/ui/menubar/menubar-portal.svelte create mode 100644 packages/svelte/src/lib/components/ui/menubar/menubar-radio-group.svelte create mode 100644 packages/svelte/src/lib/components/ui/menubar/menubar-radio-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/menubar/menubar-separator.svelte create mode 100644 packages/svelte/src/lib/components/ui/menubar/menubar-shortcut.svelte create mode 100644 packages/svelte/src/lib/components/ui/menubar/menubar-sub-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/menubar/menubar-sub-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/menubar/menubar-sub.svelte create mode 100644 packages/svelte/src/lib/components/ui/menubar/menubar-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/menubar/menubar.svelte create mode 100644 packages/svelte/src/lib/components/ui/native-select/index.ts create mode 100644 packages/svelte/src/lib/components/ui/native-select/native-select-opt-group.svelte create mode 100644 packages/svelte/src/lib/components/ui/native-select/native-select-option.svelte create mode 100644 packages/svelte/src/lib/components/ui/native-select/native-select.svelte create mode 100644 packages/svelte/src/lib/components/ui/navigation-menu/index.ts create mode 100644 packages/svelte/src/lib/components/ui/navigation-menu/navigation-menu-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/navigation-menu/navigation-menu-indicator.svelte create mode 100644 packages/svelte/src/lib/components/ui/navigation-menu/navigation-menu-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/navigation-menu/navigation-menu-link.svelte create mode 100644 packages/svelte/src/lib/components/ui/navigation-menu/navigation-menu-list.svelte create mode 100644 packages/svelte/src/lib/components/ui/navigation-menu/navigation-menu-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/navigation-menu/navigation-menu-viewport.svelte create mode 100644 packages/svelte/src/lib/components/ui/navigation-menu/navigation-menu.svelte create mode 100644 packages/svelte/src/lib/components/ui/pagination/index.ts create mode 100644 packages/svelte/src/lib/components/ui/pagination/pagination-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/pagination/pagination-ellipsis.svelte create mode 100644 packages/svelte/src/lib/components/ui/pagination/pagination-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/pagination/pagination-link.svelte create mode 100644 packages/svelte/src/lib/components/ui/pagination/pagination-next-button.svelte create mode 100644 packages/svelte/src/lib/components/ui/pagination/pagination-next.svelte create mode 100644 packages/svelte/src/lib/components/ui/pagination/pagination-prev-button.svelte create mode 100644 packages/svelte/src/lib/components/ui/pagination/pagination-previous.svelte create mode 100644 packages/svelte/src/lib/components/ui/pagination/pagination.svelte create mode 100644 packages/svelte/src/lib/components/ui/popover/index.ts create mode 100644 packages/svelte/src/lib/components/ui/popover/popover-close.svelte create mode 100644 packages/svelte/src/lib/components/ui/popover/popover-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/popover/popover-description.svelte create mode 100644 packages/svelte/src/lib/components/ui/popover/popover-header.svelte create mode 100644 packages/svelte/src/lib/components/ui/popover/popover-portal.svelte create mode 100644 packages/svelte/src/lib/components/ui/popover/popover-title.svelte create mode 100644 packages/svelte/src/lib/components/ui/popover/popover-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/popover/popover.svelte delete mode 100644 packages/svelte/src/lib/components/ui/progress.svelte create mode 100644 packages/svelte/src/lib/components/ui/progress/index.ts create mode 100644 packages/svelte/src/lib/components/ui/progress/progress.svelte create mode 100644 packages/svelte/src/lib/components/ui/radio-group/index.ts create mode 100644 packages/svelte/src/lib/components/ui/radio-group/radio-group-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/radio-group/radio-group.svelte create mode 100644 packages/svelte/src/lib/components/ui/range-calendar/index.ts create mode 100644 packages/svelte/src/lib/components/ui/range-calendar/range-calendar-caption.svelte create mode 100644 packages/svelte/src/lib/components/ui/range-calendar/range-calendar-cell.svelte create mode 100644 packages/svelte/src/lib/components/ui/range-calendar/range-calendar-day.svelte create mode 100644 packages/svelte/src/lib/components/ui/range-calendar/range-calendar-grid-body.svelte create mode 100644 packages/svelte/src/lib/components/ui/range-calendar/range-calendar-grid-head.svelte create mode 100644 packages/svelte/src/lib/components/ui/range-calendar/range-calendar-grid-row.svelte create mode 100644 packages/svelte/src/lib/components/ui/range-calendar/range-calendar-grid.svelte create mode 100644 packages/svelte/src/lib/components/ui/range-calendar/range-calendar-head-cell.svelte create mode 100644 packages/svelte/src/lib/components/ui/range-calendar/range-calendar-header.svelte create mode 100644 packages/svelte/src/lib/components/ui/range-calendar/range-calendar-heading.svelte create mode 100644 packages/svelte/src/lib/components/ui/range-calendar/range-calendar-month-select.svelte create mode 100644 packages/svelte/src/lib/components/ui/range-calendar/range-calendar-month.svelte create mode 100644 packages/svelte/src/lib/components/ui/range-calendar/range-calendar-months.svelte create mode 100644 packages/svelte/src/lib/components/ui/range-calendar/range-calendar-nav.svelte create mode 100644 packages/svelte/src/lib/components/ui/range-calendar/range-calendar-next-button.svelte create mode 100644 packages/svelte/src/lib/components/ui/range-calendar/range-calendar-prev-button.svelte create mode 100644 packages/svelte/src/lib/components/ui/range-calendar/range-calendar-year-select.svelte create mode 100644 packages/svelte/src/lib/components/ui/range-calendar/range-calendar.svelte create mode 100644 packages/svelte/src/lib/components/ui/resizable/index.ts create mode 100644 packages/svelte/src/lib/components/ui/resizable/resizable-handle.svelte create mode 100644 packages/svelte/src/lib/components/ui/resizable/resizable-pane-group.svelte create mode 100644 packages/svelte/src/lib/components/ui/scroll-area/index.ts create mode 100644 packages/svelte/src/lib/components/ui/scroll-area/scroll-area-scrollbar.svelte create mode 100644 packages/svelte/src/lib/components/ui/scroll-area/scroll-area.svelte delete mode 100644 packages/svelte/src/lib/components/ui/select-content.svelte delete mode 100644 packages/svelte/src/lib/components/ui/select-group.svelte delete mode 100644 packages/svelte/src/lib/components/ui/select-item.svelte delete mode 100644 packages/svelte/src/lib/components/ui/select-label.svelte delete mode 100644 packages/svelte/src/lib/components/ui/select-separator.svelte delete mode 100644 packages/svelte/src/lib/components/ui/select-trigger.svelte delete mode 100644 packages/svelte/src/lib/components/ui/select-value.svelte delete mode 100644 packages/svelte/src/lib/components/ui/select.svelte create mode 100644 packages/svelte/src/lib/components/ui/select/index.ts create mode 100644 packages/svelte/src/lib/components/ui/select/select-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/select/select-group-heading.svelte create mode 100644 packages/svelte/src/lib/components/ui/select/select-group.svelte create mode 100644 packages/svelte/src/lib/components/ui/select/select-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/select/select-label.svelte create mode 100644 packages/svelte/src/lib/components/ui/select/select-portal.svelte create mode 100644 packages/svelte/src/lib/components/ui/select/select-scroll-down-button.svelte create mode 100644 packages/svelte/src/lib/components/ui/select/select-scroll-up-button.svelte create mode 100644 packages/svelte/src/lib/components/ui/select/select-separator.svelte create mode 100644 packages/svelte/src/lib/components/ui/select/select-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/select/select.svelte delete mode 100644 packages/svelte/src/lib/components/ui/separator.svelte create mode 100644 packages/svelte/src/lib/components/ui/separator/index.ts create mode 100644 packages/svelte/src/lib/components/ui/separator/separator.svelte create mode 100644 packages/svelte/src/lib/components/ui/sheet/index.ts create mode 100644 packages/svelte/src/lib/components/ui/sheet/sheet-close.svelte create mode 100644 packages/svelte/src/lib/components/ui/sheet/sheet-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/sheet/sheet-description.svelte create mode 100644 packages/svelte/src/lib/components/ui/sheet/sheet-footer.svelte create mode 100644 packages/svelte/src/lib/components/ui/sheet/sheet-header.svelte create mode 100644 packages/svelte/src/lib/components/ui/sheet/sheet-overlay.svelte create mode 100644 packages/svelte/src/lib/components/ui/sheet/sheet-portal.svelte create mode 100644 packages/svelte/src/lib/components/ui/sheet/sheet-title.svelte create mode 100644 packages/svelte/src/lib/components/ui/sheet/sheet-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/sheet/sheet.svelte create mode 100644 packages/svelte/src/lib/components/ui/sidebar/constants.ts create mode 100644 packages/svelte/src/lib/components/ui/sidebar/context.svelte.ts create mode 100644 packages/svelte/src/lib/components/ui/sidebar/index.ts create mode 100644 packages/svelte/src/lib/components/ui/sidebar/sidebar-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/sidebar/sidebar-footer.svelte create mode 100644 packages/svelte/src/lib/components/ui/sidebar/sidebar-group-action.svelte create mode 100644 packages/svelte/src/lib/components/ui/sidebar/sidebar-group-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/sidebar/sidebar-group-label.svelte create mode 100644 packages/svelte/src/lib/components/ui/sidebar/sidebar-group.svelte create mode 100644 packages/svelte/src/lib/components/ui/sidebar/sidebar-header.svelte create mode 100644 packages/svelte/src/lib/components/ui/sidebar/sidebar-input.svelte create mode 100644 packages/svelte/src/lib/components/ui/sidebar/sidebar-inset.svelte create mode 100644 packages/svelte/src/lib/components/ui/sidebar/sidebar-menu-action.svelte create mode 100644 packages/svelte/src/lib/components/ui/sidebar/sidebar-menu-badge.svelte create mode 100644 packages/svelte/src/lib/components/ui/sidebar/sidebar-menu-button.svelte create mode 100644 packages/svelte/src/lib/components/ui/sidebar/sidebar-menu-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/sidebar/sidebar-menu-skeleton.svelte create mode 100644 packages/svelte/src/lib/components/ui/sidebar/sidebar-menu-sub-button.svelte create mode 100644 packages/svelte/src/lib/components/ui/sidebar/sidebar-menu-sub-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/sidebar/sidebar-menu-sub.svelte create mode 100644 packages/svelte/src/lib/components/ui/sidebar/sidebar-menu.svelte create mode 100644 packages/svelte/src/lib/components/ui/sidebar/sidebar-provider.svelte create mode 100644 packages/svelte/src/lib/components/ui/sidebar/sidebar-rail.svelte create mode 100644 packages/svelte/src/lib/components/ui/sidebar/sidebar-separator.svelte create mode 100644 packages/svelte/src/lib/components/ui/sidebar/sidebar-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/sidebar/sidebar.svelte delete mode 100644 packages/svelte/src/lib/components/ui/skeleton.svelte create mode 100644 packages/svelte/src/lib/components/ui/skeleton/index.ts create mode 100644 packages/svelte/src/lib/components/ui/skeleton/skeleton.svelte create mode 100644 packages/svelte/src/lib/components/ui/slider/index.ts create mode 100644 packages/svelte/src/lib/components/ui/slider/slider.svelte create mode 100644 packages/svelte/src/lib/components/ui/sonner/index.ts create mode 100644 packages/svelte/src/lib/components/ui/sonner/sonner.svelte create mode 100644 packages/svelte/src/lib/components/ui/spinner/index.ts create mode 100644 packages/svelte/src/lib/components/ui/spinner/spinner.svelte create mode 100644 packages/svelte/src/lib/components/ui/sticker/index.ts create mode 100644 packages/svelte/src/lib/components/ui/sticker/sticker-variants.ts create mode 100644 packages/svelte/src/lib/components/ui/sticker/sticker.svelte delete mode 100644 packages/svelte/src/lib/components/ui/switch.svelte create mode 100644 packages/svelte/src/lib/components/ui/switch/index.ts create mode 100644 packages/svelte/src/lib/components/ui/switch/switch.svelte create mode 100644 packages/svelte/src/lib/components/ui/table/index.ts create mode 100644 packages/svelte/src/lib/components/ui/table/table-body.svelte create mode 100644 packages/svelte/src/lib/components/ui/table/table-caption.svelte create mode 100644 packages/svelte/src/lib/components/ui/table/table-cell.svelte create mode 100644 packages/svelte/src/lib/components/ui/table/table-footer.svelte create mode 100644 packages/svelte/src/lib/components/ui/table/table-head.svelte create mode 100644 packages/svelte/src/lib/components/ui/table/table-header.svelte create mode 100644 packages/svelte/src/lib/components/ui/table/table-row.svelte create mode 100644 packages/svelte/src/lib/components/ui/table/table.svelte delete mode 100644 packages/svelte/src/lib/components/ui/tabs-content.svelte delete mode 100644 packages/svelte/src/lib/components/ui/tabs-list.svelte delete mode 100644 packages/svelte/src/lib/components/ui/tabs-trigger.svelte delete mode 100644 packages/svelte/src/lib/components/ui/tabs.svelte create mode 100644 packages/svelte/src/lib/components/ui/tabs/index.ts create mode 100644 packages/svelte/src/lib/components/ui/tabs/tabs-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/tabs/tabs-list.svelte create mode 100644 packages/svelte/src/lib/components/ui/tabs/tabs-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/tabs/tabs.svelte delete mode 100644 packages/svelte/src/lib/components/ui/textarea.svelte create mode 100644 packages/svelte/src/lib/components/ui/textarea/index.ts create mode 100644 packages/svelte/src/lib/components/ui/textarea/textarea.svelte create mode 100644 packages/svelte/src/lib/components/ui/timeline/index.ts create mode 100644 packages/svelte/src/lib/components/ui/timeline/timeline-card.svelte create mode 100644 packages/svelte/src/lib/components/ui/timeline/timeline-connector.svelte create mode 100644 packages/svelte/src/lib/components/ui/timeline/timeline-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/timeline/timeline-description.svelte create mode 100644 packages/svelte/src/lib/components/ui/timeline/timeline-dot.svelte create mode 100644 packages/svelte/src/lib/components/ui/timeline/timeline-header.svelte create mode 100644 packages/svelte/src/lib/components/ui/timeline/timeline-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/timeline/timeline-time.svelte create mode 100644 packages/svelte/src/lib/components/ui/timeline/timeline-title.svelte create mode 100644 packages/svelte/src/lib/components/ui/timeline/timeline.svelte create mode 100644 packages/svelte/src/lib/components/ui/toggle-group/index.ts create mode 100644 packages/svelte/src/lib/components/ui/toggle-group/toggle-group-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/toggle-group/toggle-group.svelte delete mode 100644 packages/svelte/src/lib/components/ui/toggle-variants.ts delete mode 100644 packages/svelte/src/lib/components/ui/toggle.svelte create mode 100644 packages/svelte/src/lib/components/ui/toggle/index.ts create mode 100644 packages/svelte/src/lib/components/ui/toggle/toggle.svelte create mode 100644 packages/svelte/src/lib/components/ui/tooltip/index.ts create mode 100644 packages/svelte/src/lib/components/ui/tooltip/tooltip-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/tooltip/tooltip-portal.svelte create mode 100644 packages/svelte/src/lib/components/ui/tooltip/tooltip-provider.svelte create mode 100644 packages/svelte/src/lib/components/ui/tooltip/tooltip-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/tooltip/tooltip.svelte create mode 100644 packages/svelte/src/lib/hooks/is-mobile.svelte.ts diff --git a/bun.lock b/bun.lock index 8857f8a2..cab4ee09 100644 --- a/bun.lock +++ b/bun.lock @@ -87,20 +87,31 @@ "name": "@boldkit/svelte", "version": "1.0.0", "dependencies": { - "bits-ui": "^1.3.11", + "bits-ui": "^2.16.3", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-svelte": "^0.518.0", - "svelte-sonner": "^1.0.5", + "svelte-sonner": "^1.1.0", "tailwind-merge": "^3.4.0", }, "devDependencies": { + "@internationalized/date": "^3.12.0", + "@lucide/svelte": "^1.14.0", "@sveltejs/vite-plugin-svelte": "^5.0.3", "@tailwindcss/vite": "^4.1.18", + "@tanstack/table-core": "^8.21.3", + "embla-carousel-svelte": "^8.6.0", + "formsnap": "^2.0.1", + "layerchart": "2.0.0-next.48", + "mode-watcher": "^1.1.0", + "paneforge": "^1.0.2", "svelte": "^5.34.6", "svelte-check": "^4.2.1", + "sveltekit-superforms": "^2.30.0", + "tailwind-variants": "^3.2.2", "tailwindcss": "^4.1.18", "typescript": "~5.9.3", + "vaul-svelte": "^1.0.0-next.7", "vite": "^7.2.4", }, "peerDependencies": { @@ -141,6 +152,10 @@ "packages": { "@adobe/css-tools": ["@adobe/css-tools@4.4.4", "", {}, "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg=="], + "@ark/schema": ["@ark/schema@0.56.0", "", { "dependencies": { "@ark/util": "0.56.0" } }, "sha512-ECg3hox/6Z/nLajxXqNhgPtNdHWC9zNsDyskwO28WinoFEnWow4IsERNz9AnXRhTZJnYIlAJ4uGn3nlLk65vZA=="], + + "@ark/util": ["@ark/util@0.56.0", "", {}, "sha512-BghfRC8b9pNs3vBoDJhcta0/c1J1rsoS1+HgVUreMFPdhz/CRAKReAu57YEllNaSy98rWAdY1gE+gFup7OXpgA=="], + "@babel/code-frame": ["@babel/code-frame@7.29.0", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw=="], "@babel/compat-data": ["@babel/compat-data@7.28.6", "", {}, "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg=="], @@ -209,6 +224,10 @@ "@boldkit/vue": ["@boldkit/vue@workspace:packages/vue"], + "@dagrejs/dagre": ["@dagrejs/dagre@2.0.4", "", { "dependencies": { "@dagrejs/graphlib": "3.0.4" } }, "sha512-J6vCWTNpicHF4zFlZG1cS5DkGzMr9941gddYkakjrg3ZNev4bbqEgLHFTWiFrcJm7UCRu7olO3K6IRDd9gSGhA=="], + + "@dagrejs/graphlib": ["@dagrejs/graphlib@3.0.4", "", {}, "sha512-HxZ7fCvAwTLCWCO0WjDkzAFQze8LdC6iOpKbetDKHIuDfIgMlIzYzqZ4nxwLlclQX+3ZVeZ1K2OuaOE2WWcyOg=="], + "@date-fns/tz": ["@date-fns/tz@1.4.1", "", {}, "sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA=="], "@dotenvx/dotenvx": ["@dotenvx/dotenvx@1.60.2", "", { "dependencies": { "commander": "^11.1.0", "dotenv": "^17.2.1", "eciesjs": "^0.4.10", "execa": "^5.1.1", "fdir": "^6.2.0", "ignore": "^5.3.0", "object-treeify": "1.1.33", "picomatch": "^4.0.2", "which": "^4.0.0", "yocto-spinner": "^1.1.0" }, "bin": { "dotenvx": "src/cli/dotenvx.js" } }, "sha512-r4AznHUvfLONuWdoSIQtut6Ez/ym+lGXRtDvRaoAEMEhAmwSoK24jRsfR28vcb3ygWm7qeYOcbZolhtseJl6mA=="], @@ -285,6 +304,8 @@ "@eslint/plugin-kit": ["@eslint/plugin-kit@0.4.1", "", { "dependencies": { "@eslint/core": "^0.17.0", "levn": "^0.4.1" } }, "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA=="], + "@exodus/schemasafe": ["@exodus/schemasafe@1.3.0", "", {}, "sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw=="], + "@floating-ui/core": ["@floating-ui/core@1.7.5", "", { "dependencies": { "@floating-ui/utils": "^0.2.11" } }, "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ=="], "@floating-ui/dom": ["@floating-ui/dom@1.7.6", "", { "dependencies": { "@floating-ui/core": "^1.7.5", "@floating-ui/utils": "^0.2.11" } }, "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ=="], @@ -295,6 +316,10 @@ "@floating-ui/vue": ["@floating-ui/vue@1.1.11", "", { "dependencies": { "@floating-ui/dom": "^1.7.6", "@floating-ui/utils": "^0.2.11", "vue-demi": ">=0.13.0" } }, "sha512-HzHKCNVxnGS35r9fCHBc3+uCnjw9IWIlCPL683cGgM9Kgj2BiAl8x1mS7vtvP6F9S/e/q4O6MApwSHj8hNLGfw=="], + "@hapi/hoek": ["@hapi/hoek@9.3.0", "", {}, "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ=="], + + "@hapi/topo": ["@hapi/topo@5.1.0", "", { "dependencies": { "@hapi/hoek": "^9.0.0" } }, "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg=="], + "@hono/node-server": ["@hono/node-server@1.19.13", "", { "peerDependencies": { "hono": "^4" } }, "sha512-TsQLe4i2gvoTtrHje625ngThGBySOgSK3Xo2XRYOdqGN1teR8+I7vchQC46uLJi8OF62YTYA3AhSpumtkhsaKQ=="], "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], @@ -329,6 +354,16 @@ "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + "@layerstack/svelte-actions": ["@layerstack/svelte-actions@1.0.1-next.18", "", { "dependencies": { "@floating-ui/dom": "^1.7.0", "@layerstack/utils": "2.0.0-next.18", "d3-scale": "^4.0.2" } }, "sha512-gxPzCnJ1c9LTfWtRqLUzefCx+k59ZpxDUQ2XB+LokveZQPe7IDSOwHaBOEMlaGoGrtwc3Ft8dSZq+2WT2o9u/g=="], + + "@layerstack/svelte-state": ["@layerstack/svelte-state@0.1.0-next.23", "", { "dependencies": { "@layerstack/utils": "2.0.0-next.18" } }, "sha512-7O4umv+gXwFfs3/vjzFWYHNXGwYnnjBapWJ5Y+9u99F4eVk6rh4ocNwqkqQNkpMZ5tUJBlRTWjPE1So6+hEzIg=="], + + "@layerstack/tailwind": ["@layerstack/tailwind@2.0.0-next.21", "", { "dependencies": { "@layerstack/utils": "^2.0.0-next.18", "clsx": "^2.1.1", "d3-array": "^3.2.4", "tailwind-merge": "^3.2.0" } }, "sha512-Qgp2EpmEHmjtura8MQzWicR6ztBRSsRvddakFtx9ShrLMz6jWzd6bCMVVRu44Q3ZOrtXmSu4QxjCZWu1ytvuPg=="], + + "@layerstack/utils": ["@layerstack/utils@2.0.0-next.18", "", { "dependencies": { "d3-array": "^3.2.4", "d3-time": "^3.1.0", "d3-time-format": "^4.1.0" } }, "sha512-EYILHpfBRYMMEahajInu9C2AXQom5IcAEdtCeucD3QIl/fdDgRbtzn6/8QW9ewumfyNZetdUvitOksmI1+gZYQ=="], + + "@lucide/svelte": ["@lucide/svelte@1.14.0", "", { "peerDependencies": { "svelte": "^5" } }, "sha512-MVuP5VRCBQa2OaIpaRbuEV4k5OV2dy9MyxA6Tf4Sz/IN0v3zzUU72ObHc9r2Zn/wSMXDg6lLrHrczqI7w7gCzQ=="], + "@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.29.0", "", { "dependencies": { "@hono/node-server": "^1.19.9", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", "cors": "^2.8.5", "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", "eventsource-parser": "^3.0.0", "express": "^5.2.1", "express-rate-limit": "^8.2.1", "hono": "^4.11.4", "jose": "^6.1.3", "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.25 || ^4.0", "zod-to-json-schema": "^3.25.1" }, "peerDependencies": { "@cfworker/json-schema": "^4.1.1" }, "optionalPeers": ["@cfworker/json-schema"] }, "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ=="], "@mswjs/interceptors": ["@mswjs/interceptors@0.41.3", "", { "dependencies": { "@open-draft/deferred-promise": "^2.2.0", "@open-draft/logger": "^0.3.0", "@open-draft/until": "^2.0.0", "is-node-process": "^1.2.0", "outvariant": "^1.4.3", "strict-event-emitter": "^0.5.1" } }, "sha512-cXu86tF4VQVfwz8W1SPbhoRyHJkti6mjH/XJIxp40jhO4j2k1m4KYrEykxqWPkFF3vrK4rgQppBh//AwyGSXPA=="], @@ -353,6 +388,8 @@ "@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="], + "@poppinss/macroable": ["@poppinss/macroable@1.1.2", "", {}, "sha512-FAVBRzzWhYP5mA3lCwLH1A0fKBqq5anyjGet90Z81aRK5c/+LTGUE1zJhZrErjaenBSOOI9BVUs3WVmotneFQA=="], + "@radix-ui/number": ["@radix-ui/number@1.1.1", "", {}, "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g=="], "@radix-ui/primitive": ["@radix-ui/primitive@1.1.3", "", {}, "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg=="], @@ -519,6 +556,12 @@ "@sec-ant/readable-stream": ["@sec-ant/readable-stream@0.4.1", "", {}, "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg=="], + "@sideway/address": ["@sideway/address@4.1.5", "", { "dependencies": { "@hapi/hoek": "^9.0.0" } }, "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q=="], + + "@sideway/formula": ["@sideway/formula@3.0.1", "", {}, "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg=="], + + "@sideway/pinpoint": ["@sideway/pinpoint@2.0.0", "", {}, "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ=="], + "@sindresorhus/merge-streams": ["@sindresorhus/merge-streams@4.0.0", "", {}, "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ=="], "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], @@ -527,6 +570,8 @@ "@sveltejs/acorn-typescript": ["@sveltejs/acorn-typescript@1.0.9", "", { "peerDependencies": { "acorn": "^8.9.0" } }, "sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA=="], + "@sveltejs/kit": ["@sveltejs/kit@2.59.1", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/cookie": "^0.6.0", "acorn": "^8.14.1", "cookie": "^0.6.0", "devalue": "^5.6.4", "esm-env": "^1.2.2", "kleur": "^4.1.5", "magic-string": "^0.30.5", "mrmime": "^2.0.0", "set-cookie-parser": "^3.0.0", "sirv": "^3.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.0.0", "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 || ^7.0.0", "svelte": "^4.0.0 || ^5.0.0-next.0", "typescript": "^5.3.3 || ^6.0.0", "vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 || ^8.0.0" }, "optionalPeers": ["@opentelemetry/api", "typescript"], "bin": { "svelte-kit": "svelte-kit.js" } }, "sha512-d8OON70AphLdDesuTIl//M2O6fRTIicX8aYv8vhCiYEhTTI2OboKqey0Hu1A4VFhqwgqtq0vKDmPFGkw8kKmgw=="], + "@sveltejs/vite-plugin-svelte": ["@sveltejs/vite-plugin-svelte@5.1.1", "", { "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^4.0.1", "debug": "^4.4.1", "deepmerge": "^4.3.1", "kleur": "^4.1.5", "magic-string": "^0.30.17", "vitefu": "^1.0.6" }, "peerDependencies": { "svelte": "^5.0.0", "vite": "^6.0.0" } }, "sha512-Y1Cs7hhTc+a5E9Va/xwKlAJoariQyHY+5zBgCZg4PFWNYQ1nMN9sjK1zhw1gK69DuqVP++sht/1GZg1aRwmAXQ=="], "@sveltejs/vite-plugin-svelte-inspector": ["@sveltejs/vite-plugin-svelte-inspector@4.0.1", "", { "dependencies": { "debug": "^4.3.7" }, "peerDependencies": { "@sveltejs/vite-plugin-svelte": "^5.0.0", "svelte": "^5.0.0", "vite": "^6.0.0" } }, "sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw=="], @@ -593,10 +638,14 @@ "@types/chai": ["@types/chai@5.2.3", "", { "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA=="], + "@types/cookie": ["@types/cookie@0.6.0", "", {}, "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA=="], + "@types/d3-array": ["@types/d3-array@3.2.2", "", {}, "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw=="], "@types/d3-color": ["@types/d3-color@3.1.3", "", {}, "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A=="], + "@types/d3-contour": ["@types/d3-contour@3.0.6", "", { "dependencies": { "@types/d3-array": "*", "@types/geojson": "*" } }, "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg=="], + "@types/d3-ease": ["@types/d3-ease@3.0.2", "", {}, "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA=="], "@types/d3-interpolate": ["@types/d3-interpolate@3.0.4", "", { "dependencies": { "@types/d3-color": "*" } }, "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA=="], @@ -615,6 +664,8 @@ "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + "@types/geojson": ["@types/geojson@7946.0.16", "", {}, "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg=="], + "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], @@ -639,12 +690,18 @@ "@types/validate-npm-package-name": ["@types/validate-npm-package-name@4.0.2", "", {}, "sha512-lrpDziQipxCEeK5kWxvljWYhUvOiB2A9izZd9B2AFarYAkqZshb4lPbRs7zKEic6eGtH8V/2qJW+dPp9OtF6bw=="], + "@types/validator": ["@types/validator@13.15.10", "", {}, "sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA=="], + "@types/web-bluetooth": ["@types/web-bluetooth@0.0.21", "", {}, "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA=="], "@types/whatwg-mimetype": ["@types/whatwg-mimetype@3.0.2", "", {}, "sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA=="], "@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="], + "@typeschema/class-validator": ["@typeschema/class-validator@0.3.0", "", { "dependencies": { "@typeschema/core": "0.14.0" }, "peerDependencies": { "class-validator": "^0.14.1" }, "optionalPeers": ["class-validator"] }, "sha512-OJSFeZDIQ8EK1HTljKLT5CItM2wsbgczLN8tMEfz3I1Lmhc5TBfkZ0eikFzUC16tI3d1Nag7um6TfCgp2I2Bww=="], + + "@typeschema/core": ["@typeschema/core@0.14.0", "", { "peerDependencies": { "@types/json-schema": "^7.0.15" }, "optionalPeers": ["@types/json-schema"] }, "sha512-Ia6PtZHcL3KqsAWXjMi5xIyZ7XMH4aSnOQes8mfMLx+wGFGtGRNlwe6Y7cYvX+WfNK67OL0/HSe9t8QDygV0/w=="], + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.53.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.53.1", "@typescript-eslint/type-utils": "8.53.1", "@typescript-eslint/utils": "8.53.1", "@typescript-eslint/visitor-keys": "8.53.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.53.1", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-cFYYFZ+oQFi6hUnBTbLRXfTJiaQtYE3t4O692agbBl+2Zy+eqSKWtPjhPXJu1G7j4RLjKgeJPDdq3EqOwmX5Ag=="], "@typescript-eslint/parser": ["@typescript-eslint/parser@8.53.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.53.1", "@typescript-eslint/types": "8.53.1", "@typescript-eslint/typescript-estree": "8.53.1", "@typescript-eslint/visitor-keys": "8.53.1", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-nm3cvFN9SqZGXjmw5bZ6cGmvJSyJPn0wU9gHAZZHDnZl2wF9PhHv78Xf06E0MaNk4zLVHL8hb2/c32XvyJOLQg=="], @@ -665,6 +722,12 @@ "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.53.1", "", { "dependencies": { "@typescript-eslint/types": "8.53.1", "eslint-visitor-keys": "^4.2.1" } }, "sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg=="], + "@valibot/to-json-schema": ["@valibot/to-json-schema@1.7.0", "", { "peerDependencies": { "valibot": "^1.4.0" } }, "sha512-Y3pPVibbIOHzohrlxSINvO7w/bvXkoYS3BQHoImV9ynE+bXKf171bdMucPurV2zp7gdmt0L1HCcNAsbo7cFRQw=="], + + "@vinejs/compiler": ["@vinejs/compiler@3.0.0", "", {}, "sha512-v9Lsv59nR56+bmy2p0+czjZxsLHwaibJ+SV5iK9JJfehlJMa501jUJQqqz4X/OqKXrxtE3uTQmSqjUqzF3B2mw=="], + + "@vinejs/vine": ["@vinejs/vine@3.0.1", "", { "dependencies": { "@poppinss/macroable": "^1.0.4", "@types/validator": "^13.12.2", "@vinejs/compiler": "^3.0.0", "camelcase": "^8.0.0", "dayjs": "^1.11.13", "dlv": "^1.1.3", "normalize-url": "^8.0.1", "validator": "^13.12.0" } }, "sha512-ZtvYkYpZOYdvbws3uaOAvTFuvFXoQGAtmzeiXu+XSMGxi5GVsODpoI9Xu9TplEMuD/5fmAtBbKb9cQHkWkLXDQ=="], + "@vitejs/plugin-react": ["@vitejs/plugin-react@5.2.0", "", { "dependencies": { "@babel/core": "^7.29.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-rc.3", "@types/babel__core": "^7.20.5", "react-refresh": "^0.18.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw=="], "@vitejs/plugin-vue": ["@vitejs/plugin-vue@6.0.6", "", { "dependencies": { "@rolldown/pluginutils": "1.0.0-rc.13" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", "vue": "^3.2.25" } }, "sha512-u9HHgfrq3AjXlysn0eINFnWQOJQLO9WN6VprZ8FXl7A2bYisv3Hui9Ij+7QZ41F/WYWarHjwBbXtD7dKg3uxbg=="], @@ -747,6 +810,10 @@ "aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], + "arkregex": ["arkregex@0.0.5", "", { "dependencies": { "@ark/util": "0.56.0" } }, "sha512-ncYjBdLlh5/QnVsAA8De16Tc9EqmYM7y/WU9j+236KcyYNUXogpz3sC4ATIZYzzLxwI+0sEOaQLEmLmRleaEXw=="], + + "arktype": ["arktype@2.2.0", "", { "dependencies": { "@ark/schema": "0.56.0", "@ark/util": "0.56.0", "arkregex": "0.0.5" } }, "sha512-t54MZ7ti5BhOEvzEkgKnWvqj+UbDfWig+DHr5I34xatymPusKLS0lQpNJd8M6DzmIto2QGszHfNKoFIT8tMCZQ=="], + "assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], "ast-types": ["ast-types@0.16.1", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg=="], @@ -759,7 +826,7 @@ "baseline-browser-mapping": ["baseline-browser-mapping@2.9.17", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-agD0MgJFUP/4nvjqzIB29zRPUuCF7Ge6mEv9s8dHrtYD7QWXRcx75rOADE/d5ah1NI+0vkDl0yorDd5U852IQQ=="], - "bits-ui": ["bits-ui@1.8.0", "", { "dependencies": { "@floating-ui/core": "^1.6.4", "@floating-ui/dom": "^1.6.7", "@internationalized/date": "^3.5.6", "css.escape": "^1.5.1", "esm-env": "^1.1.2", "runed": "^0.23.2", "svelte-toolbelt": "^0.7.1", "tabbable": "^6.2.0" }, "peerDependencies": { "svelte": "^5.11.0" } }, "sha512-CXD6Orp7l8QevNDcRPLXc/b8iMVgxDWT2LyTwsdLzJKh9CxesOmPuNePSPqAxKoT59FIdU4aFPS1k7eBdbaCxg=="], + "bits-ui": ["bits-ui@2.18.1", "", { "dependencies": { "@floating-ui/core": "^1.7.1", "@floating-ui/dom": "^1.7.1", "esm-env": "^1.1.2", "runed": "^0.35.1", "svelte-toolbelt": "^0.10.6", "tabbable": "^6.2.0" }, "peerDependencies": { "@internationalized/date": "^3.8.1", "svelte": "^5.33.0" } }, "sha512-KkemzKFH4T3gt3H+P86JcnAWExjByv/6vlwjm/BoCwTPHu03yiCdxbghdJLvFReQTe0acCAiRcKfmixxD6XvlA=="], "body-parser": ["body-parser@2.2.2", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.3", "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" } }, "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA=="], @@ -779,6 +846,8 @@ "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], + "camelcase": ["camelcase@8.0.0", "", {}, "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA=="], + "caniuse-lite": ["caniuse-lite@1.0.30001766", "", {}, "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA=="], "chai": ["chai@6.2.2", "", {}, "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="], @@ -793,6 +862,8 @@ "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], + "class-validator": ["class-validator@0.14.4", "", { "dependencies": { "@types/validator": "^13.15.3", "libphonenumber-js": "^1.11.1", "validator": "^13.15.22" } }, "sha512-AwNusCCam51q703dW82x95tOqQp6oC9HNUl724KxJJOfnKscI8dOloXFgyez7LbTTKWuRBA37FScqVbJEoq8Yw=="], + "class-variance-authority": ["class-variance-authority@0.7.1", "", { "dependencies": { "clsx": "^2.1.1" } }, "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg=="], "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], @@ -843,32 +914,66 @@ "d3-array": ["d3-array@3.2.4", "", { "dependencies": { "internmap": "1 - 2" } }, "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg=="], + "d3-chord": ["d3-chord@3.0.1", "", { "dependencies": { "d3-path": "1 - 3" } }, "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g=="], + "d3-color": ["d3-color@3.1.0", "", {}, "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA=="], + "d3-contour": ["d3-contour@4.0.2", "", { "dependencies": { "d3-array": "^3.2.0" } }, "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA=="], + + "d3-delaunay": ["d3-delaunay@6.0.4", "", { "dependencies": { "delaunator": "5" } }, "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A=="], + + "d3-dispatch": ["d3-dispatch@3.0.1", "", {}, "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg=="], + + "d3-dsv": ["d3-dsv@3.0.1", "", { "dependencies": { "commander": "7", "iconv-lite": "0.6", "rw": "1" }, "bin": { "csv2json": "bin/dsv2json.js", "csv2tsv": "bin/dsv2dsv.js", "dsv2dsv": "bin/dsv2dsv.js", "dsv2json": "bin/dsv2json.js", "json2csv": "bin/json2dsv.js", "json2dsv": "bin/json2dsv.js", "json2tsv": "bin/json2dsv.js", "tsv2csv": "bin/dsv2dsv.js", "tsv2json": "bin/dsv2json.js" } }, "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q=="], + "d3-ease": ["d3-ease@3.0.1", "", {}, "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w=="], + "d3-force": ["d3-force@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-quadtree": "1 - 3", "d3-timer": "1 - 3" } }, "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg=="], + "d3-format": ["d3-format@3.1.2", "", {}, "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg=="], + "d3-geo": ["d3-geo@3.1.1", "", { "dependencies": { "d3-array": "2.5.0 - 3" } }, "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q=="], + + "d3-geo-voronoi": ["d3-geo-voronoi@2.1.0", "", { "dependencies": { "d3-array": "3", "d3-delaunay": "6", "d3-geo": "3", "d3-tricontour": "1" } }, "sha512-kqE4yYuOjPbKdBXG0xztCacPwkVSK2REF1opSNrnqqtXJmNcM++UbwQ8SxvwP6IQTj9RvIjjK4qeiVsEfj0Z2Q=="], + + "d3-hierarchy": ["d3-hierarchy@3.1.2", "", {}, "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA=="], + "d3-interpolate": ["d3-interpolate@3.0.1", "", { "dependencies": { "d3-color": "1 - 3" } }, "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g=="], + "d3-interpolate-path": ["d3-interpolate-path@2.3.0", "", {}, "sha512-tZYtGXxBmbgHsIc9Wms6LS5u4w6KbP8C09a4/ZYc4KLMYYqub57rRBUgpUr2CIarIrJEpdAWWxWQvofgaMpbKQ=="], + "d3-path": ["d3-path@3.1.0", "", {}, "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ=="], + "d3-quadtree": ["d3-quadtree@3.0.1", "", {}, "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw=="], + + "d3-random": ["d3-random@3.0.1", "", {}, "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ=="], + + "d3-sankey": ["d3-sankey@0.12.3", "", { "dependencies": { "d3-array": "1 - 2", "d3-shape": "^1.2.0" } }, "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ=="], + "d3-scale": ["d3-scale@4.0.2", "", { "dependencies": { "d3-array": "2.10.0 - 3", "d3-format": "1 - 3", "d3-interpolate": "1.2.0 - 3", "d3-time": "2.1.1 - 3", "d3-time-format": "2 - 4" } }, "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ=="], + "d3-scale-chromatic": ["d3-scale-chromatic@3.1.0", "", { "dependencies": { "d3-color": "1 - 3", "d3-interpolate": "1 - 3" } }, "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ=="], + "d3-shape": ["d3-shape@3.2.0", "", { "dependencies": { "d3-path": "^3.1.0" } }, "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA=="], + "d3-tile": ["d3-tile@1.0.0", "", {}, "sha512-79fnTKpPMPDS5xQ0xuS9ir0165NEwwkFpe/DSOmc2Gl9ldYzKKRDWogmTTE8wAJ8NA7PMapNfEcyKhI9Lxdu5Q=="], + "d3-time": ["d3-time@3.1.0", "", { "dependencies": { "d3-array": "2 - 3" } }, "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q=="], "d3-time-format": ["d3-time-format@4.1.0", "", { "dependencies": { "d3-time": "1 - 3" } }, "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg=="], "d3-timer": ["d3-timer@3.0.1", "", {}, "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA=="], + "d3-tricontour": ["d3-tricontour@1.1.0", "", { "dependencies": { "d3-delaunay": "6", "d3-scale": "4" } }, "sha512-G7gHKj89n2owmkGb6WX6ixcnQ0Kf/0wpa9VIh9DGdbHu8wdrlaHU4ir3/bFNERl8N8nn4G7e7qbtBG8N9caihQ=="], + "data-uri-to-buffer": ["data-uri-to-buffer@4.0.1", "", {}, "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="], "date-fns": ["date-fns@4.1.0", "", {}, "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg=="], "date-fns-jalali": ["date-fns-jalali@4.1.0-0", "", {}, "sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg=="], + "dayjs": ["dayjs@1.11.20", "", {}, "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ=="], + "de-indent": ["de-indent@1.0.2", "", {}, "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg=="], "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], @@ -891,6 +996,8 @@ "defu": ["defu@6.1.7", "", {}, "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ=="], + "delaunator": ["delaunator@5.1.0", "", { "dependencies": { "robust-predicates": "^3.0.2" } }, "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ=="], + "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], @@ -903,6 +1010,8 @@ "diff": ["diff@8.0.4", "", {}, "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw=="], + "dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="], + "dom-accessibility-api": ["dom-accessibility-api@0.6.3", "", {}, "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w=="], "dotenv": ["dotenv@17.4.1", "", {}, "sha512-k8DaKGP6r1G30Lx8V4+pCsLzKr8vLmV2paqEj1Y55GdAgJuIqpRp5FfajGF8KtwMxCz9qJc6wUIJnm053d/WCw=="], @@ -915,6 +1024,8 @@ "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], + "effect": ["effect@3.21.2", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-rXd2FGDM8KdjSIrc+mqEELo7ScW7xTVxEf1iInmPSpIde9/nyGuFM710cjTo7/EreGXiUX2MOonPpprbz2XHCg=="], + "electron-to-chromium": ["electron-to-chromium@1.5.277", "", {}, "sha512-wKXFZw4erWmmOz5N/grBoJ2XrNJGDFMu2+W5ACHza5rHtvsqrK4gb6rnLC7XxKB9WlJ+RmyQatuEXmtm86xbnw=="], "embla-carousel": ["embla-carousel@8.6.0", "", {}, "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA=="], @@ -923,6 +1034,8 @@ "embla-carousel-reactive-utils": ["embla-carousel-reactive-utils@8.6.0", "", { "peerDependencies": { "embla-carousel": "8.6.0" } }, "sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A=="], + "embla-carousel-svelte": ["embla-carousel-svelte@8.6.0", "", { "dependencies": { "embla-carousel": "8.6.0", "embla-carousel-reactive-utils": "8.6.0" }, "peerDependencies": { "svelte": "^3.49.0 || ^4.0.0 || ^5.0.0" } }, "sha512-ZDsKk8Sdv+AUTygMYcwZjfRd1DTh+JSUzxkOo8b9iKAkYjg+39mzbY/lwHsE3jXSpKxdKWS69hPSNuzlOGtR2Q=="], + "embla-carousel-vue": ["embla-carousel-vue@8.6.0", "", { "dependencies": { "embla-carousel": "8.6.0", "embla-carousel-reactive-utils": "8.6.0" }, "peerDependencies": { "vue": "^3.2.37" } }, "sha512-v8UO5UsyLocZnu/LbfQA7Dn2QHuZKurJY93VUmZYP//QRWoCWOsionmvLLAlibkET3pGPs7++03VhJKbWD7vhQ=="], "emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], @@ -999,6 +1112,8 @@ "express-rate-limit": ["express-rate-limit@8.3.2", "", { "dependencies": { "ip-address": "10.1.0" }, "peerDependencies": { "express": ">= 4.11" } }, "sha512-77VmFeJkO0/rvimEDuUC5H30oqUC4EyOhyGccfqoLebB0oiEYfM7nwPrsDsBL1gsTpwfzX8SFy2MT3TDyRq+bg=="], + "fast-check": ["fast-check@3.23.2", "", { "dependencies": { "pure-rand": "^6.1.0" } }, "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A=="], + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], @@ -1037,6 +1152,8 @@ "formdata-polyfill": ["formdata-polyfill@4.0.10", "", { "dependencies": { "fetch-blob": "^3.1.2" } }, "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g=="], + "formsnap": ["formsnap@2.0.1", "", { "dependencies": { "svelte-toolbelt": "^0.5.0" }, "peerDependencies": { "svelte": "^5.0.0", "sveltekit-superforms": "^2.19.0" } }, "sha512-iJSe4YKd/W6WhLwKDVJU9FQeaJRpEFuolhju7ZXlRpUVyDdqFdMP8AUBICgnVvQPyP41IPAlBa/v0Eo35iE6wQ=="], + "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="], @@ -1113,7 +1230,7 @@ "human-signals": ["human-signals@8.0.1", "", {}, "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ=="], - "iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="], + "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], @@ -1191,6 +1308,8 @@ "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], + "joi": ["joi@17.13.3", "", { "dependencies": { "@hapi/hoek": "^9.3.0", "@hapi/topo": "^5.1.0", "@sideway/address": "^4.1.5", "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } }, "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA=="], + "jose": ["jose@6.2.2", "", {}, "sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ=="], "js-tokens": ["js-tokens@10.0.0", "", {}, "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q=="], @@ -1203,6 +1322,8 @@ "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], + "json-schema-to-ts": ["json-schema-to-ts@3.1.1", "", { "dependencies": { "@babel/runtime": "^7.18.3", "ts-algebra": "^2.0.0" } }, "sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g=="], + "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], "json-schema-typed": ["json-schema-typed@8.0.2", "", {}, "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA=="], @@ -1217,8 +1338,12 @@ "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="], + "layerchart": ["layerchart@2.0.0-next.48", "", { "dependencies": { "@dagrejs/dagre": "^2.0.4", "@layerstack/svelte-actions": "1.0.1-next.18", "@layerstack/svelte-state": "0.1.0-next.23", "@layerstack/tailwind": "2.0.0-next.21", "@layerstack/utils": "2.0.0-next.18", "@types/d3-contour": "^3.0.6", "d3-array": "^3.2.4", "d3-chord": "^3.0.1", "d3-color": "^3.1.0", "d3-contour": "^4.0.2", "d3-delaunay": "^6.0.4", "d3-dsv": "^3.0.1", "d3-force": "^3.0.0", "d3-geo": "^3.1.1", "d3-geo-voronoi": "^2.1.0", "d3-hierarchy": "^3.1.2", "d3-interpolate": "^3.0.1", "d3-interpolate-path": "^2.3.0", "d3-path": "^3.1.0", "d3-quadtree": "^3.0.1", "d3-random": "^3.0.1", "d3-sankey": "^0.12.3", "d3-scale": "^4.0.2", "d3-scale-chromatic": "^3.1.0", "d3-shape": "^3.2.0", "d3-tile": "^1.0.0", "d3-time": "^3.1.0", "memoize": "^10.2.0", "runed": "^0.37.1" }, "peerDependencies": { "svelte": "^5.0.0" } }, "sha512-XoEYBztamA8lMxtF/Jz3aDX0HMk8dI+o4fK9fSl8ecT2Tdx3DQUjtKGtlQAOFdwC/AWifeLmKq5cMTQt9COZPQ=="], + "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], + "libphonenumber-js": ["libphonenumber-js@1.13.1", "", {}, "sha512-GEw0GLL7YUUA6nv21IsCvVjtI5Ejn84sjbdfQ9KxdbqEVOk1PZh7xejn01EEiniKw+dBeCfim+8MGeuvVuE2BA=="], + "lightningcss": ["lightningcss@1.30.2", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.30.2", "lightningcss-darwin-arm64": "1.30.2", "lightningcss-darwin-x64": "1.30.2", "lightningcss-freebsd-x64": "1.30.2", "lightningcss-linux-arm-gnueabihf": "1.30.2", "lightningcss-linux-arm64-gnu": "1.30.2", "lightningcss-linux-arm64-musl": "1.30.2", "lightningcss-linux-x64-gnu": "1.30.2", "lightningcss-linux-x64-musl": "1.30.2", "lightningcss-win32-arm64-msvc": "1.30.2", "lightningcss-win32-x64-msvc": "1.30.2" } }, "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ=="], "lightningcss-android-arm64": ["lightningcss-android-arm64@1.30.2", "", { "os": "android", "cpu": "arm64" }, "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A=="], @@ -1275,6 +1400,10 @@ "media-typer": ["media-typer@1.1.0", "", {}, "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="], + "memoize": ["memoize@10.2.0", "", { "dependencies": { "mimic-function": "^5.0.1" } }, "sha512-DeC6b7QBrZsRs3Y02A6A7lQyzFbsQbqgjI6UW0GigGWV+u1s25TycMr0XHZE4cJce7rY/vyw2ctMQqfDkIhUEA=="], + + "memoize-weak": ["memoize-weak@1.0.2", "", {}, "sha512-gj39xkrjEw7nCn4nJ1M5ms6+MyMlyiGmttzsqAUsAKn6bYKwuTHh/AO3cKPF8IBrTIYTxb0wWXFs3E//Y8VoWQ=="], + "merge-descriptors": ["merge-descriptors@2.0.0", "", {}, "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g=="], "merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="], @@ -1297,6 +1426,8 @@ "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + "mode-watcher": ["mode-watcher@1.1.0", "", { "dependencies": { "runed": "^0.25.0", "svelte-toolbelt": "^0.7.1" }, "peerDependencies": { "svelte": "^5.27.0" } }, "sha512-mUT9RRGPDYenk59qJauN1rhsIMKBmWA3xMF+uRwE8MW/tjhaDSCCARqkSuDTq8vr4/2KcAxIGVjACxTjdk5C3g=="], + "mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="], "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], @@ -1321,6 +1452,8 @@ "node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="], + "normalize-url": ["normalize-url@8.1.1", "", {}, "sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ=="], + "npm-run-path": ["npm-run-path@6.0.0", "", { "dependencies": { "path-key": "^4.0.0", "unicorn-magic": "^0.3.0" } }, "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA=="], "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], @@ -1351,6 +1484,8 @@ "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], + "paneforge": ["paneforge@1.0.2", "", { "dependencies": { "runed": "^0.23.4", "svelte-toolbelt": "^0.9.2" }, "peerDependencies": { "svelte": "^5.29.0" } }, "sha512-KzmIXQH1wCfwZ4RsMohD/IUtEjVhteR+c+ulb/CHYJHX8SuDXoJmChtsc/Xs5Wl8NHS4L5Q7cxL8MG40gSU1bA=="], + "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], "parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="], @@ -1395,12 +1530,16 @@ "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], + "property-expr": ["property-expr@2.0.6", "", {}, "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA=="], + "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="], "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + "pure-rand": ["pure-rand@6.1.0", "", {}, "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA=="], + "qs": ["qs@6.15.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ=="], "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], @@ -1467,6 +1606,8 @@ "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], + "robust-predicates": ["robust-predicates@3.0.3", "", {}, "sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA=="], + "rollup": ["rollup@4.56.0", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.56.0", "@rollup/rollup-android-arm64": "4.56.0", "@rollup/rollup-darwin-arm64": "4.56.0", "@rollup/rollup-darwin-x64": "4.56.0", "@rollup/rollup-freebsd-arm64": "4.56.0", "@rollup/rollup-freebsd-x64": "4.56.0", "@rollup/rollup-linux-arm-gnueabihf": "4.56.0", "@rollup/rollup-linux-arm-musleabihf": "4.56.0", "@rollup/rollup-linux-arm64-gnu": "4.56.0", "@rollup/rollup-linux-arm64-musl": "4.56.0", "@rollup/rollup-linux-loong64-gnu": "4.56.0", "@rollup/rollup-linux-loong64-musl": "4.56.0", "@rollup/rollup-linux-ppc64-gnu": "4.56.0", "@rollup/rollup-linux-ppc64-musl": "4.56.0", "@rollup/rollup-linux-riscv64-gnu": "4.56.0", "@rollup/rollup-linux-riscv64-musl": "4.56.0", "@rollup/rollup-linux-s390x-gnu": "4.56.0", "@rollup/rollup-linux-x64-gnu": "4.56.0", "@rollup/rollup-linux-x64-musl": "4.56.0", "@rollup/rollup-openbsd-x64": "4.56.0", "@rollup/rollup-openharmony-arm64": "4.56.0", "@rollup/rollup-win32-arm64-msvc": "4.56.0", "@rollup/rollup-win32-ia32-msvc": "4.56.0", "@rollup/rollup-win32-x64-gnu": "4.56.0", "@rollup/rollup-win32-x64-msvc": "4.56.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-9FwVqlgUHzbXtDg9RCMgodF3Ua4Na6Gau+Sdt9vyCN4RhHfVKX2DCHy3BjMLTDd47ITDhYAnTwGulWTblJSDLg=="], "router": ["router@2.2.0", "", { "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" } }, "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ=="], @@ -1475,7 +1616,9 @@ "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], - "runed": ["runed@0.23.4", "", { "dependencies": { "esm-env": "^1.0.0" }, "peerDependencies": { "svelte": "^5.7.0" } }, "sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA=="], + "runed": ["runed@0.37.1", "", { "dependencies": { "dequal": "^2.0.3", "esm-env": "^1.0.0", "lz-string": "^1.5.0" }, "peerDependencies": { "@sveltejs/kit": "^2.21.0", "svelte": "^5.7.0", "zod": "^4.1.0" }, "optionalPeers": ["@sveltejs/kit", "zod"] }, "sha512-MeFY73xBW8IueWBm012nNFIGy19WUGPLtknavyUPMpnyt350M47PhGSGrGoSLbidwn+Zlt/O0cp8/OZE3LASWA=="], + + "rw": ["rw@1.3.3", "", {}, "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="], "sade": ["sade@1.8.1", "", { "dependencies": { "mri": "^1.1.0" } }, "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A=="], @@ -1549,6 +1692,8 @@ "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="], + "superstruct": ["superstruct@2.0.2", "", {}, "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A=="], + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], "svelte": ["svelte@5.55.5", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", "@types/trusted-types": "^2.0.7", "acorn": "^8.12.1", "aria-query": "5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", "devalue": "^5.6.4", "esm-env": "^1.2.1", "esrap": "^2.2.4", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", "zimmerframe": "^1.1.2" } }, "sha512-2uCs/LZ9us+AktdzYJM8OcxQ8qnPS1kpaO7syGT/MgO+6Qr1Ybl+TqPq+97u7PHqmmMlye5ZkoyXONy5mjjAbw=="], @@ -1557,7 +1702,9 @@ "svelte-sonner": ["svelte-sonner@1.1.1", "", { "dependencies": { "runed": "^0.28.0" }, "peerDependencies": { "svelte": "^5.0.0" } }, "sha512-5cd3p7wa4cq0NsqslMwdlPb7x1JglEZ/GKrLePWNr5bCxR1nagAVrY01FRFrXfUGs41miLt3C327+8XJo5BzZw=="], - "svelte-toolbelt": ["svelte-toolbelt@0.7.1", "", { "dependencies": { "clsx": "^2.1.1", "runed": "^0.23.2", "style-to-object": "^1.0.8" }, "peerDependencies": { "svelte": "^5.0.0" } }, "sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ=="], + "svelte-toolbelt": ["svelte-toolbelt@0.5.0", "", { "dependencies": { "clsx": "^2.1.1", "style-to-object": "^1.0.8" }, "peerDependencies": { "svelte": "^5.0.0-next.126" } }, "sha512-t3tenZcnfQoIeRuQf/jBU7bvTeT3TGkcEE+1EUr5orp0lR7NEpprflpuie3x9Dn0W9nOKqs3HwKGJeeN5Ok1sQ=="], + + "sveltekit-superforms": ["sveltekit-superforms@2.30.1", "", { "dependencies": { "devalue": "^5.6.4", "memoize-weak": "^1.0.2", "ts-deepmerge": "^7.0.3" }, "optionalDependencies": { "@exodus/schemasafe": "^1.3.0", "@standard-schema/spec": "^1.1.0", "@typeschema/class-validator": "^0.3.0", "@valibot/to-json-schema": "^1.6.0", "@vinejs/vine": "^3.0.1", "arktype": "^2.2.0", "class-validator": "^0.14.4", "effect": "^3.21.0", "joi": "^17.13.3", "json-schema-to-ts": "^3.1.1", "superstruct": "^2.0.2", "typebox": "^1.1.6", "valibot": "^1.3.1", "yup": "^1.7.1", "zod": "^4.3.6", "zod-v3-to-json-schema": "^4.0.0" }, "peerDependencies": { "@sveltejs/kit": "1.x || 2.x", "svelte": "3.x || 4.x || >=5.0.0-next.51" } }, "sha512-wBzyqsE0idvEJWuNJ+HCiAtdxa7Z55GZ8jmtlVHJfonrk9bRYC49MoPaloYyFoYuU3QPy6Omna/Qzn1kaIkgew=="], "tabbable": ["tabbable@6.4.0", "", {}, "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg=="], @@ -1565,10 +1712,14 @@ "tailwind-merge": ["tailwind-merge@3.4.0", "", {}, "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g=="], + "tailwind-variants": ["tailwind-variants@3.2.2", "", { "peerDependencies": { "tailwind-merge": ">=3.0.0", "tailwindcss": "*" }, "optionalPeers": ["tailwind-merge"] }, "sha512-Mi4kHeMTLvKlM98XPnK+7HoBPmf4gygdFmqQPaDivc3DpYS6aIY6KiG/PgThrGvii5YZJqRsPz0aPyhoFzmZgg=="], + "tailwindcss": ["tailwindcss@4.1.18", "", {}, "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw=="], "tapable": ["tapable@2.3.0", "", {}, "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg=="], + "tiny-case": ["tiny-case@1.0.3", "", {}, "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q=="], + "tiny-invariant": ["tiny-invariant@1.3.3", "", {}, "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="], "tinybench": ["tinybench@2.9.0", "", {}, "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="], @@ -1587,12 +1738,18 @@ "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], + "toposort": ["toposort@2.0.2", "", {}, "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg=="], + "totalist": ["totalist@3.0.1", "", {}, "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ=="], "tough-cookie": ["tough-cookie@6.0.1", "", { "dependencies": { "tldts": "^7.0.5" } }, "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw=="], + "ts-algebra": ["ts-algebra@2.0.0", "", {}, "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw=="], + "ts-api-utils": ["ts-api-utils@2.4.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA=="], + "ts-deepmerge": ["ts-deepmerge@7.0.3", "", {}, "sha512-Du/ZW2RfwV/D4cmA5rXafYjBQVuvu4qGiEEla4EmEHVHgRdx68Gftx7i66jn2bzHPwSVZY36Ae6OuDn9el4ZKA=="], + "ts-morph": ["ts-morph@26.0.0", "", { "dependencies": { "@ts-morph/common": "~0.27.0", "code-block-writer": "^13.0.3" } }, "sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug=="], "tsconfig-paths": ["tsconfig-paths@4.2.0", "", { "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg=="], @@ -1607,6 +1764,8 @@ "type-is": ["type-is@2.0.1", "", { "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw=="], + "typebox": ["typebox@1.1.38", "", {}, "sha512-pZ0aQPmMmXoUvSbeuWf/Hzsc+avNw/Zd6VeE8CFgkVGWyuHPJvqeJJDeJqLve+K70LvjYIoleGcoJHPT17cWoA=="], + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "typescript-eslint": ["typescript-eslint@8.53.1", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.53.1", "@typescript-eslint/parser": "8.53.1", "@typescript-eslint/typescript-estree": "8.53.1", "@typescript-eslint/utils": "8.53.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-gB+EVQfP5RDElh9ittfXlhZJdjSU4jUSTyE2+ia8CYyNvet4ElfaLlAIqDvQV9JPknKx0jQH1racTYe/4LaLSg=="], @@ -1633,12 +1792,18 @@ "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + "valibot": ["valibot@1.4.0", "", { "peerDependencies": { "typescript": ">=5" }, "optionalPeers": ["typescript"] }, "sha512-iC/x7fVcSyOwlm/VSt7RlHnzNGLGvR9GnxdifUeWoCJo0q4ZZvrVkIHC6faTlkxG47I2Y4UrFquPuVHCrOnrLg=="], + "validate-npm-package-name": ["validate-npm-package-name@7.0.2", "", {}, "sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A=="], + "validator": ["validator@13.15.35", "", {}, "sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw=="], + "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], "vaul": ["vaul@1.1.2", "", { "dependencies": { "@radix-ui/react-dialog": "^1.1.1" }, "peerDependencies": { "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA=="], + "vaul-svelte": ["vaul-svelte@1.0.0-next.7", "", { "dependencies": { "runed": "^0.23.2", "svelte-toolbelt": "^0.7.1" }, "peerDependencies": { "svelte": "^5.0.0" } }, "sha512-7zN7Bi3dFQixvvbUJY9uGDe7Ws/dGZeBQR2pXdXmzQiakjrxBvWo0QrmsX3HK+VH+SZOltz378cmgmCS9f9rSg=="], + "vaul-vue": ["vaul-vue@0.2.1", "", { "dependencies": { "@vueuse/core": "^10.8.0", "radix-vue": "^1.4.9", "vue": "^3.4.5" } }, "sha512-iF91R1JQZzxb9mb9uGNHYv8rVFxR5bL5Fj51iqvyXjzMPAzNMciCrXb9OUBu2NdlhcF6rVtEADXnQoTY+pKIeA=="], "victory-vendor": ["victory-vendor@37.3.6", "", { "dependencies": { "@types/d3-array": "^3.0.3", "@types/d3-ease": "^3.0.0", "@types/d3-interpolate": "^3.0.1", "@types/d3-scale": "^4.0.2", "@types/d3-shape": "^3.1.0", "@types/d3-time": "^3.0.0", "@types/d3-timer": "^3.0.0", "d3-array": "^3.1.6", "d3-ease": "^3.0.1", "d3-interpolate": "^3.0.1", "d3-scale": "^4.0.2", "d3-shape": "^3.1.0", "d3-time": "^3.0.0", "d3-timer": "^3.0.1" } }, "sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ=="], @@ -1695,12 +1860,16 @@ "yoctocolors-cjs": ["yoctocolors-cjs@2.1.3", "", {}, "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw=="], + "yup": ["yup@1.7.1", "", { "dependencies": { "property-expr": "^2.0.5", "tiny-case": "^1.0.3", "toposort": "^2.0.2", "type-fest": "^2.19.0" } }, "sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw=="], + "zimmerframe": ["zimmerframe@1.1.4", "", {}, "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ=="], "zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], "zod-to-json-schema": ["zod-to-json-schema@3.25.2", "", { "peerDependencies": { "zod": "^3.25.28 || ^4" } }, "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA=="], + "zod-v3-to-json-schema": ["zod-v3-to-json-schema@4.0.0", "", { "peerDependencies": { "zod": "^3.25 || ^4.0.14" } }, "sha512-KixLrhX/uPmRFnDgsZrzrk4x5SSJA+PmaE5adbfID9+3KPJcdxqRobaHU397EfWBqfQircrjKqvEqZ/mW5QH6w=="], + "zod-validation-error": ["zod-validation-error@4.0.2", "", { "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ=="], "zrender": ["zrender@6.0.0", "", { "dependencies": { "tslib": "2.3.0" } }, "sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg=="], @@ -1773,6 +1942,10 @@ "@reduxjs/toolkit/immer": ["immer@11.1.3", "", {}, "sha512-6jQTc5z0KJFtr1UgFpIL3N9XSC3saRaI9PwWtzM2pSqkNGtiNkYY2OSwkOGDK2XcTRcLb1pi/aNkKZz0nxVH4Q=="], + "@sveltejs/kit/cookie": ["cookie@0.6.0", "", {}, "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw=="], + + "@sveltejs/kit/set-cookie-parser": ["set-cookie-parser@3.1.0", "", {}, "sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw=="], + "@swc/helpers/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="], @@ -1827,6 +2000,12 @@ "ast-types/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "bits-ui/runed": ["runed@0.35.1", "", { "dependencies": { "dequal": "^2.0.3", "esm-env": "^1.0.0", "lz-string": "^1.5.0" }, "peerDependencies": { "@sveltejs/kit": "^2.21.0", "svelte": "^5.7.0" }, "optionalPeers": ["@sveltejs/kit"] }, "sha512-2F4Q/FZzbeJTFdIS/PuOoPRSm92sA2LhzTnv6FXhCoENb3huf5+fDuNOg1LNvGOouy3u/225qxmuJvcV3IZK5Q=="], + + "bits-ui/svelte-toolbelt": ["svelte-toolbelt@0.10.6", "", { "dependencies": { "clsx": "^2.1.1", "runed": "^0.35.1", "style-to-object": "^1.0.8" }, "peerDependencies": { "svelte": "^5.30.2" } }, "sha512-YWuX+RE+CnWYx09yseAe4ZVMM7e7GRFZM6OYWpBKOb++s+SQ8RBIMMe+Bs/CznBMc0QPLjr+vDBxTAkozXsFXQ=="], + + "body-parser/iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="], + "cliui/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], "cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], @@ -1835,6 +2014,12 @@ "cmdk/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.4", "", { "dependencies": { "@radix-ui/react-slot": "1.2.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg=="], + "d3-dsv/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], + + "d3-sankey/d3-array": ["d3-array@2.12.1", "", { "dependencies": { "internmap": "^1.0.0" } }, "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ=="], + + "d3-sankey/d3-shape": ["d3-shape@1.3.7", "", { "dependencies": { "d3-path": "1" } }, "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw=="], + "eslint-plugin-react-hooks/@babel/core": ["@babel/core@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/generator": "^7.28.6", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/template": "^7.28.6", "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw=="], "express/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], @@ -1853,10 +2038,18 @@ "micromatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], + "mode-watcher/runed": ["runed@0.25.0", "", { "dependencies": { "esm-env": "^1.0.0" }, "peerDependencies": { "svelte": "^5.7.0" } }, "sha512-7+ma4AG9FT2sWQEA0Egf6mb7PBT2vHyuHail1ie8ropfSjvZGtEAx8YTmUjv/APCsdRRxEVvArNjALk9zFSOrg=="], + + "mode-watcher/svelte-toolbelt": ["svelte-toolbelt@0.7.1", "", { "dependencies": { "clsx": "^2.1.1", "runed": "^0.23.2", "style-to-object": "^1.0.8" }, "peerDependencies": { "svelte": "^5.0.0" } }, "sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ=="], + "npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], "ora/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + "paneforge/runed": ["runed@0.23.4", "", { "dependencies": { "esm-env": "^1.0.0" }, "peerDependencies": { "svelte": "^5.7.0" } }, "sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA=="], + + "paneforge/svelte-toolbelt": ["svelte-toolbelt@0.9.3", "", { "dependencies": { "clsx": "^2.1.1", "runed": "^0.29.0", "style-to-object": "^1.0.8" }, "peerDependencies": { "svelte": "^5.30.2" } }, "sha512-HCSWxCtVmv+c6g1ACb8LTwHVbDqLKJvHpo6J8TaqwUme2hj9ATJCpjCPNISR1OCq2Q4U1KT41if9ON0isINQZw=="], + "pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], "pretty-format/react-is": ["react-is@17.0.2", "", {}, "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="], @@ -1871,6 +2064,8 @@ "radix-vue/nanoid": ["nanoid@5.1.11", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-v+KEsUv2ps74PaSKv0gHTxTCgMXOIfBEbaqa6w6ISIGC7ZsvHN4N9oJ8d4cmf0n5oTzQz2SLmThbQWhjd/8eKg=="], + "raw-body/iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="], + "react-remove-scroll/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], "react-remove-scroll-bar/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], @@ -1897,6 +2092,10 @@ "use-sidecar/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "vaul-svelte/runed": ["runed@0.23.4", "", { "dependencies": { "esm-env": "^1.0.0" }, "peerDependencies": { "svelte": "^5.7.0" } }, "sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA=="], + + "vaul-svelte/svelte-toolbelt": ["svelte-toolbelt@0.7.1", "", { "dependencies": { "clsx": "^2.1.1", "runed": "^0.23.2", "style-to-object": "^1.0.8" }, "peerDependencies": { "svelte": "^5.0.0" } }, "sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ=="], + "vaul-vue/@vueuse/core": ["@vueuse/core@10.11.1", "", { "dependencies": { "@types/web-bluetooth": "^0.0.20", "@vueuse/metadata": "10.11.1", "@vueuse/shared": "10.11.1", "vue-demi": ">=0.14.8" } }, "sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww=="], "wrap-ansi/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], @@ -1905,6 +2104,8 @@ "yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "yup/type-fest": ["type-fest@2.19.0", "", {}, "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA=="], + "@babel/helper-module-imports/@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.28.6", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q=="], "@babel/helper-module-imports/@babel/traverse/@babel/generator": ["@babel/generator@7.28.6", "", { "dependencies": { "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw=="], @@ -1963,6 +2164,10 @@ "cliui/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "d3-sankey/d3-array/internmap": ["internmap@1.0.1", "", {}, "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw=="], + + "d3-sankey/d3-shape/d3-path": ["d3-path@1.0.9", "", {}, "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="], + "eslint-plugin-react-hooks/@babel/core/@babel/code-frame": ["@babel/code-frame@7.28.6", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q=="], "eslint-plugin-react-hooks/@babel/core/@babel/generator": ["@babel/generator@7.28.6", "", { "dependencies": { "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw=="], @@ -1971,6 +2176,10 @@ "eslint-plugin-react-hooks/@babel/core/@babel/types": ["@babel/types@7.28.6", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg=="], + "mode-watcher/svelte-toolbelt/runed": ["runed@0.23.4", "", { "dependencies": { "esm-env": "^1.0.0" }, "peerDependencies": { "svelte": "^5.7.0" } }, "sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA=="], + + "paneforge/svelte-toolbelt/runed": ["runed@0.29.2", "", { "dependencies": { "esm-env": "^1.0.0" }, "peerDependencies": { "svelte": "^5.7.0" } }, "sha512-0cq6cA6sYGZwl/FvVqjx9YN+1xEBu9sDDyuWdDW1yWX7JF2wmvmVKfH+hVCZs+csW+P3ARH92MjI3H9QTagOQA=="], + "radix-vue/@floating-ui/dom/@floating-ui/core": ["@floating-ui/core@1.7.3", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w=="], "radix-vue/@floating-ui/dom/@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="], diff --git a/packages/svelte/components.json b/packages/svelte/components.json new file mode 100644 index 00000000..a9c0206c --- /dev/null +++ b/packages/svelte/components.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://shadcn-svelte.com/schema.json", + "style": "default", + "tailwind": { + "config": "", + "css": "src/lib/styles/globals.css", + "baseColor": "neutral" + }, + "aliases": { + "components": "$lib/components", + "utils": "$lib/utils", + "ui": "$lib/components/ui", + "hooks": "$lib/hooks" + }, + "typescript": true +} diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 6b6a20cc..47876207 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -38,23 +38,34 @@ "build:registry": "node scripts/build-registry.js" }, "dependencies": { - "bits-ui": "^1.3.11", + "bits-ui": "^2.16.3", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-svelte": "^0.518.0", - "svelte-sonner": "^1.0.5", + "svelte-sonner": "^1.1.0", "tailwind-merge": "^3.4.0" }, "peerDependencies": { "svelte": ">=5.0.0" }, "devDependencies": { + "@internationalized/date": "^3.12.0", + "@lucide/svelte": "^1.14.0", "@sveltejs/vite-plugin-svelte": "^5.0.3", "@tailwindcss/vite": "^4.1.18", + "@tanstack/table-core": "^8.21.3", + "embla-carousel-svelte": "^8.6.0", + "formsnap": "^2.0.1", + "layerchart": "2.0.0-next.48", + "mode-watcher": "^1.1.0", + "paneforge": "^1.0.2", "svelte": "^5.34.6", "svelte-check": "^4.2.1", + "sveltekit-superforms": "^2.30.0", + "tailwind-variants": "^3.2.2", "tailwindcss": "^4.1.18", "typescript": "~5.9.3", + "vaul-svelte": "^1.0.0-next.7", "vite": "^7.2.4" }, "engines": { diff --git a/packages/svelte/pnpm-lock.yaml b/packages/svelte/pnpm-lock.yaml new file mode 100644 index 00000000..2441afab --- /dev/null +++ b/packages/svelte/pnpm-lock.yaml @@ -0,0 +1,2533 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + bits-ui: + specifier: ^2.16.3 + version: 2.18.1(@internationalized/date@3.12.1)(@sveltejs/kit@2.59.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5) + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + lucide-svelte: + specifier: ^0.518.0 + version: 0.518.0(svelte@5.55.5) + svelte-sonner: + specifier: ^1.1.0 + version: 1.1.1(svelte@5.55.5) + tailwind-merge: + specifier: ^3.4.0 + version: 3.6.0 + devDependencies: + '@internationalized/date': + specifier: ^3.12.0 + version: 3.12.1 + '@lucide/svelte': + specifier: ^1.14.0 + version: 1.14.0(svelte@5.55.5) + '@sveltejs/vite-plugin-svelte': + specifier: ^5.0.3 + version: 5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)) + '@tailwindcss/vite': + specifier: ^4.1.18 + version: 4.3.0(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)) + '@tanstack/table-core': + specifier: ^8.21.3 + version: 8.21.3 + embla-carousel-svelte: + specifier: ^8.6.0 + version: 8.6.0(svelte@5.55.5) + formsnap: + specifier: ^2.0.1 + version: 2.0.1(svelte@5.55.5)(sveltekit-superforms@2.30.1(@sveltejs/kit@2.59.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3)) + layerchart: + specifier: 2.0.0-next.48 + version: 2.0.0-next.48(@sveltejs/kit@2.59.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(zod@4.4.3) + mode-watcher: + specifier: ^1.1.0 + version: 1.1.0(svelte@5.55.5) + paneforge: + specifier: ^1.0.2 + version: 1.0.2(svelte@5.55.5) + svelte: + specifier: ^5.34.6 + version: 5.55.5 + svelte-check: + specifier: ^4.2.1 + version: 4.4.8(picomatch@4.0.4)(svelte@5.55.5)(typescript@5.9.3) + sveltekit-superforms: + specifier: ^2.30.0 + version: 2.30.1(@sveltejs/kit@2.59.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3) + tailwind-variants: + specifier: ^3.2.2 + version: 3.2.2(tailwind-merge@3.6.0)(tailwindcss@4.3.0) + tailwindcss: + specifier: ^4.1.18 + version: 4.3.0 + typescript: + specifier: ~5.9.3 + version: 5.9.3 + vaul-svelte: + specifier: ^1.0.0-next.7 + version: 1.0.0-next.7(svelte@5.55.5) + vite: + specifier: ^7.2.4 + version: 7.3.3(jiti@2.7.0)(lightningcss@1.32.0) + +packages: + + '@ark/schema@0.56.0': + resolution: {integrity: sha512-ECg3hox/6Z/nLajxXqNhgPtNdHWC9zNsDyskwO28WinoFEnWow4IsERNz9AnXRhTZJnYIlAJ4uGn3nlLk65vZA==} + + '@ark/util@0.56.0': + resolution: {integrity: sha512-BghfRC8b9pNs3vBoDJhcta0/c1J1rsoS1+HgVUreMFPdhz/CRAKReAu57YEllNaSy98rWAdY1gE+gFup7OXpgA==} + + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} + engines: {node: '>=6.9.0'} + + '@dagrejs/dagre@2.0.4': + resolution: {integrity: sha512-J6vCWTNpicHF4zFlZG1cS5DkGzMr9941gddYkakjrg3ZNev4bbqEgLHFTWiFrcJm7UCRu7olO3K6IRDd9gSGhA==} + + '@dagrejs/graphlib@3.0.4': + resolution: {integrity: sha512-HxZ7fCvAwTLCWCO0WjDkzAFQze8LdC6iOpKbetDKHIuDfIgMlIzYzqZ4nxwLlclQX+3ZVeZ1K2OuaOE2WWcyOg==} + + '@esbuild/aix-ppc64@0.27.7': + resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.27.7': + resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.27.7': + resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.27.7': + resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.27.7': + resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.7': + resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.27.7': + resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.7': + resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.27.7': + resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.27.7': + resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.27.7': + resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.27.7': + resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.27.7': + resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.27.7': + resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.7': + resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.27.7': + resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.27.7': + resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.27.7': + resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.7': + resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.27.7': + resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.7': + resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.27.7': + resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.27.7': + resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.27.7': + resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.27.7': + resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.27.7': + resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@exodus/schemasafe@1.3.0': + resolution: {integrity: sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==} + + '@floating-ui/core@1.7.5': + resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} + + '@floating-ui/dom@1.7.6': + resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} + + '@floating-ui/utils@0.2.11': + resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + + '@hapi/hoek@9.3.0': + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} + + '@hapi/topo@5.1.0': + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + + '@internationalized/date@3.12.1': + resolution: {integrity: sha512-6IedsVWXyq4P9Tj+TxuU8WGWM70hYLl12nbYU8jkikVpa6WXapFazPUcHUMDMoWftIDE2ILDkFFte6W2nFCkRQ==} + + '@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.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@layerstack/svelte-actions@1.0.1-next.18': + resolution: {integrity: sha512-gxPzCnJ1c9LTfWtRqLUzefCx+k59ZpxDUQ2XB+LokveZQPe7IDSOwHaBOEMlaGoGrtwc3Ft8dSZq+2WT2o9u/g==} + + '@layerstack/svelte-state@0.1.0-next.23': + resolution: {integrity: sha512-7O4umv+gXwFfs3/vjzFWYHNXGwYnnjBapWJ5Y+9u99F4eVk6rh4ocNwqkqQNkpMZ5tUJBlRTWjPE1So6+hEzIg==} + + '@layerstack/tailwind@2.0.0-next.21': + resolution: {integrity: sha512-Qgp2EpmEHmjtura8MQzWicR6ztBRSsRvddakFtx9ShrLMz6jWzd6bCMVVRu44Q3ZOrtXmSu4QxjCZWu1ytvuPg==} + + '@layerstack/utils@2.0.0-next.18': + resolution: {integrity: sha512-EYILHpfBRYMMEahajInu9C2AXQom5IcAEdtCeucD3QIl/fdDgRbtzn6/8QW9ewumfyNZetdUvitOksmI1+gZYQ==} + + '@lucide/svelte@1.14.0': + resolution: {integrity: sha512-MVuP5VRCBQa2OaIpaRbuEV4k5OV2dy9MyxA6Tf4Sz/IN0v3zzUU72ObHc9r2Zn/wSMXDg6lLrHrczqI7w7gCzQ==} + peerDependencies: + svelte: ^5 + + '@polka/url@1.0.0-next.29': + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + + '@poppinss/macroable@1.1.2': + resolution: {integrity: sha512-FAVBRzzWhYP5mA3lCwLH1A0fKBqq5anyjGet90Z81aRK5c/+LTGUE1zJhZrErjaenBSOOI9BVUs3WVmotneFQA==} + + '@rollup/rollup-android-arm-eabi@4.60.3': + resolution: {integrity: sha512-x35CNW/ANXG3hE/EZpRU8MXX1JDN86hBb2wMGAtltkz7pc6cxgjpy1OMMfDosOQ+2hWqIkag/fGok1Yady9nGw==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.60.3': + resolution: {integrity: sha512-xw3xtkDApIOGayehp2+Rz4zimfkaX65r4t47iy+ymQB2G4iJCBBfj0ogVg5jpvjpn8UWn/+q9tprxleYeNp3Hw==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.60.3': + resolution: {integrity: sha512-vo6Y5Qfpx7/5EaamIwi0WqW2+zfiusVihKatLvtN1VFVy3D13uERk/6gZLU1UiHRL6fDXqj/ELIeVRGnvcTE1g==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.60.3': + resolution: {integrity: sha512-D+0QGcZhBzTN82weOnsSlY7V7+RMmPuF1CkbxyMAGE8+ZHeUjyb76ZiWmBlCu//AQQONvxcqRbwZTajZKqjuOw==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.60.3': + resolution: {integrity: sha512-6HnvHCT7fDyj6R0Ph7A6x8dQS/S38MClRWeDLqc0MdfWkxjiu1HSDYrdPhqSILzjTIC/pnXbbJbo+ft+gy/9hQ==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.60.3': + resolution: {integrity: sha512-KHLgC3WKlUYW3ShFKnnosZDOJ0xjg9zp7au3sIm2bs/tGBeC2ipmvRh/N7JKi0t9Ue20C0dpEshi8WUubg+cnA==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.60.3': + resolution: {integrity: sha512-DV6fJoxEYWJOvaZIsok7KrYl0tPvga5OZ2yvKHNNYyk/2roMLqQAbGhr78EQ5YhHpnhLKJD3S1WFusAkmUuV5g==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.60.3': + resolution: {integrity: sha512-mQKoJAzvuOs6F+TZybQO4GOTSMUu7v0WdxEk24krQ/uUxXoPTtHjuaUuPmFhtBcM4K0ons8nrE3JyhTuCFtT/w==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.60.3': + resolution: {integrity: sha512-Whjj2qoiJ6+OOJMGptTYazaJvjOJm+iKHpXQM1P3LzGjt7Ff++Tp7nH4N8J/BUA7R9IHfDyx4DJIflifwnbmIA==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.60.3': + resolution: {integrity: sha512-4YTNHKqGng5+yiZt3mg77nmyuCfmNfX4fPmyUapBcIk+BdwSwmCWGXOUxhXbBEkFHtoN5boLj/5NON+u5QC9tg==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loong64-gnu@4.60.3': + resolution: {integrity: sha512-SU3kNlhkpI4UqlUc2VXPGK9o886ZsSeGfMAX2ba2b8DKmMXq4AL7KUrkSWVbb7koVqx41Yczx6dx5PNargIrEA==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-loong64-musl@4.60.3': + resolution: {integrity: sha512-6lDLl5h4TXpB1mTf2rQWnAk/LcXrx9vBfu/DT5TIPhvMhRWaZ5MxkIc8u4lJAmBo6klTe1ywXIUHFjylW505sg==} + cpu: [loong64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-ppc64-gnu@4.60.3': + resolution: {integrity: sha512-BMo8bOw8evlup/8G+cj5xWtPyp93xPdyoSN16Zy90Q2QZ0ZYRhCt6ZJSwbrRzG9HApFabjwj2p25TUPDWrhzqQ==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-ppc64-musl@4.60.3': + resolution: {integrity: sha512-E0L8X1dZN1/Rph+5VPF6Xj2G7JJvMACVXtamTJIDrVI44Y3K+G8gQaMEAavbqCGTa16InptiVrX6eM6pmJ+7qA==} + cpu: [ppc64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-riscv64-gnu@4.60.3': + resolution: {integrity: sha512-oZJ/WHaVfHUiRAtmTAeo3DcevNsVvH8mbvodjZy7D5QKvCefO371SiKRpxoDcCxB3PTRTLayWBkvmDQKTcX/sw==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-musl@4.60.3': + resolution: {integrity: sha512-Dhbyh7j9FybM3YaTgaHmVALwA8AkUwTPccyCQ79TG9AJUsMQqgN1DDEZNr4+QUfwiWvLDumW5vdwzoeUF+TNxQ==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-s390x-gnu@4.60.3': + resolution: {integrity: sha512-cJd1X5XhHHlltkaypz1UcWLA8AcoIi1aWhsvaWDskD1oz2eKCypnqvTQ8ykMNI0RSmm7NkTdSqSSD7zM0xa6Ig==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.60.3': + resolution: {integrity: sha512-DAZDBHQfG2oQuhY7mc6I3/qB4LU2fQCjRvxbDwd/Jdvb9fypP4IJ4qmtu6lNjes6B531AI8cg1aKC2di97bUxA==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.60.3': + resolution: {integrity: sha512-cRxsE8c13mZOh3vP+wLDxpQBRrOHDIGOWyDL93Sy0Ga8y515fBcC2pjUfFwUe5T7tqvTvWbCpg1URM/AXdWIXA==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-openbsd-x64@4.60.3': + resolution: {integrity: sha512-QaWcIgRxqEdQdhJqW4DJctsH6HCmo5vHxY0krHSX4jMtOqfzC+dqDGuHM87bu4H8JBeibWx7jFz+h6/4C8wA5Q==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.60.3': + resolution: {integrity: sha512-AaXwSvUi3QIPtroAUw1t5yHGIyqKEXwH54WUocFolZhpGDruJcs8c+xPNDRn4XiQsS7MEwnYsHW2l0MBLDMkWg==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.60.3': + resolution: {integrity: sha512-65LAKM/bAWDqKNEelHlcHvm2V+Vfb8C6INFxQXRHCvaVN1rJfwr4NvdP4FyzUaLqWfaCGaadf6UbTm8xJeYfEg==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.60.3': + resolution: {integrity: sha512-EEM2gyhBF5MFnI6vMKdX1LAosE627RGBzIoGMdLloPZkXrUN0Ckqgr2Qi8+J3zip/8NVVro3/FjB+tjhZUgUHA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.60.3': + resolution: {integrity: sha512-E5Eb5H/DpxaoXH++Qkv28RcUJboMopmdDUALBczvHMf7hNIxaDZqwY5lK12UK1BHacSmvupoEWGu+n993Z0y1A==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.60.3': + resolution: {integrity: sha512-hPt/bgL5cE+Qp+/TPHBqptcAgPzgj46mPcg/16zNUmbQk0j+mOEQV/+Lqu8QRtDV3Ek95Q6FeFITpuhl6OTsAA==} + cpu: [x64] + os: [win32] + + '@sideway/address@4.1.5': + resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} + + '@sideway/formula@3.0.1': + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} + + '@sideway/pinpoint@2.0.0': + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@sveltejs/acorn-typescript@1.0.9': + resolution: {integrity: sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==} + peerDependencies: + acorn: ^8.9.0 + + '@sveltejs/kit@2.59.1': + resolution: {integrity: sha512-d8OON70AphLdDesuTIl//M2O6fRTIicX8aYv8vhCiYEhTTI2OboKqey0Hu1A4VFhqwgqtq0vKDmPFGkw8kKmgw==} + engines: {node: '>=18.13'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.0.0 + '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 || ^7.0.0 + svelte: ^4.0.0 || ^5.0.0-next.0 + typescript: ^5.3.3 || ^6.0.0 + vite: ^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 || ^8.0.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + typescript: + optional: true + + '@sveltejs/vite-plugin-svelte-inspector@4.0.1': + resolution: {integrity: sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22} + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^5.0.0 + svelte: ^5.0.0 + vite: ^6.0.0 + + '@sveltejs/vite-plugin-svelte@5.1.1': + resolution: {integrity: sha512-Y1Cs7hhTc+a5E9Va/xwKlAJoariQyHY+5zBgCZg4PFWNYQ1nMN9sjK1zhw1gK69DuqVP++sht/1GZg1aRwmAXQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22} + peerDependencies: + svelte: ^5.0.0 + vite: ^6.0.0 + + '@swc/helpers@0.5.21': + resolution: {integrity: sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg==} + + '@tailwindcss/node@4.3.0': + resolution: {integrity: sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==} + + '@tailwindcss/oxide-android-arm64@4.3.0': + resolution: {integrity: sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.3.0': + resolution: {integrity: sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.3.0': + resolution: {integrity: sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA==} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.3.0': + resolution: {integrity: sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ==} + engines: {node: '>= 20'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0': + resolution: {integrity: sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA==} + engines: {node: '>= 20'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.3.0': + resolution: {integrity: sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-arm64-musl@4.3.0': + resolution: {integrity: sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-linux-x64-gnu@4.3.0': + resolution: {integrity: sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-x64-musl@4.3.0': + resolution: {integrity: sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-wasm32-wasi@4.3.0': + resolution: {integrity: sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.3.0': + resolution: {integrity: sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.3.0': + resolution: {integrity: sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA==} + engines: {node: '>= 20'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.3.0': + resolution: {integrity: sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg==} + engines: {node: '>= 20'} + + '@tailwindcss/vite@4.3.0': + resolution: {integrity: sha512-t6J3OrB5Fc0ExuhohouH0fWUGMYL6PTLhW+E7zIk/pdbnJARZDCwjBznFnkh5ynRnIRSI4YjtTH0t6USjJISrw==} + peerDependencies: + vite: ^5.2.0 || ^6 || ^7 || ^8 + + '@tanstack/table-core@8.21.3': + resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==} + engines: {node: '>=12'} + + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + + '@types/d3-array@3.2.2': + resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} + + '@types/d3-contour@3.0.6': + resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/geojson@7946.0.16': + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} + + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + + '@types/validator@13.15.10': + resolution: {integrity: sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==} + + '@typeschema/class-validator@0.3.0': + resolution: {integrity: sha512-OJSFeZDIQ8EK1HTljKLT5CItM2wsbgczLN8tMEfz3I1Lmhc5TBfkZ0eikFzUC16tI3d1Nag7um6TfCgp2I2Bww==} + peerDependencies: + class-validator: ^0.14.1 + peerDependenciesMeta: + class-validator: + optional: true + + '@typeschema/core@0.14.0': + resolution: {integrity: sha512-Ia6PtZHcL3KqsAWXjMi5xIyZ7XMH4aSnOQes8mfMLx+wGFGtGRNlwe6Y7cYvX+WfNK67OL0/HSe9t8QDygV0/w==} + peerDependencies: + '@types/json-schema': ^7.0.15 + peerDependenciesMeta: + '@types/json-schema': + optional: true + + '@valibot/to-json-schema@1.7.0': + resolution: {integrity: sha512-Y3pPVibbIOHzohrlxSINvO7w/bvXkoYS3BQHoImV9ynE+bXKf171bdMucPurV2zp7gdmt0L1HCcNAsbo7cFRQw==} + peerDependencies: + valibot: ^1.4.0 + + '@vinejs/compiler@3.0.0': + resolution: {integrity: sha512-v9Lsv59nR56+bmy2p0+czjZxsLHwaibJ+SV5iK9JJfehlJMa501jUJQqqz4X/OqKXrxtE3uTQmSqjUqzF3B2mw==} + engines: {node: '>=18.0.0'} + + '@vinejs/vine@3.0.1': + resolution: {integrity: sha512-ZtvYkYpZOYdvbws3uaOAvTFuvFXoQGAtmzeiXu+XSMGxi5GVsODpoI9Xu9TplEMuD/5fmAtBbKb9cQHkWkLXDQ==} + engines: {node: '>=18.16.0'} + + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true + + aria-query@5.3.1: + resolution: {integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==} + engines: {node: '>= 0.4'} + + arkregex@0.0.5: + resolution: {integrity: sha512-ncYjBdLlh5/QnVsAA8De16Tc9EqmYM7y/WU9j+236KcyYNUXogpz3sC4ATIZYzzLxwI+0sEOaQLEmLmRleaEXw==} + + arktype@2.2.0: + resolution: {integrity: sha512-t54MZ7ti5BhOEvzEkgKnWvqj+UbDfWig+DHr5I34xatymPusKLS0lQpNJd8M6DzmIto2QGszHfNKoFIT8tMCZQ==} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + bits-ui@2.18.1: + resolution: {integrity: sha512-KkemzKFH4T3gt3H+P86JcnAWExjByv/6vlwjm/BoCwTPHu03yiCdxbghdJLvFReQTe0acCAiRcKfmixxD6XvlA==} + engines: {node: '>=20'} + peerDependencies: + '@internationalized/date': ^3.8.1 + svelte: ^5.33.0 + + camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + class-validator@0.14.4: + resolution: {integrity: sha512-AwNusCCam51q703dW82x95tOqQp6oC9HNUl724KxJJOfnKscI8dOloXFgyez7LbTTKWuRBA37FScqVbJEoq8Yw==} + + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} + + d3-array@2.12.1: + resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} + + d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + + d3-chord@3.0.1: + resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} + engines: {node: '>=12'} + + d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + + d3-contour@4.0.2: + resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} + engines: {node: '>=12'} + + d3-delaunay@6.0.4: + resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} + engines: {node: '>=12'} + + d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + + d3-dsv@3.0.1: + resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} + engines: {node: '>=12'} + hasBin: true + + d3-force@3.0.0: + resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} + engines: {node: '>=12'} + + d3-format@3.1.2: + resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==} + engines: {node: '>=12'} + + d3-geo-voronoi@2.1.0: + resolution: {integrity: sha512-kqE4yYuOjPbKdBXG0xztCacPwkVSK2REF1opSNrnqqtXJmNcM++UbwQ8SxvwP6IQTj9RvIjjK4qeiVsEfj0Z2Q==} + engines: {node: '>=12'} + + d3-geo@3.1.1: + resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==} + engines: {node: '>=12'} + + d3-hierarchy@3.1.2: + resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} + engines: {node: '>=12'} + + d3-interpolate-path@2.3.0: + resolution: {integrity: sha512-tZYtGXxBmbgHsIc9Wms6LS5u4w6KbP8C09a4/ZYc4KLMYYqub57rRBUgpUr2CIarIrJEpdAWWxWQvofgaMpbKQ==} + + d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + + d3-path@1.0.9: + resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} + + d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + + d3-quadtree@3.0.1: + resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} + engines: {node: '>=12'} + + d3-random@3.0.1: + resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} + engines: {node: '>=12'} + + d3-sankey@0.12.3: + resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} + + d3-scale-chromatic@3.1.0: + resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} + engines: {node: '>=12'} + + d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + + d3-shape@1.3.7: + resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} + + d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} + + d3-tile@1.0.0: + resolution: {integrity: sha512-79fnTKpPMPDS5xQ0xuS9ir0165NEwwkFpe/DSOmc2Gl9ldYzKKRDWogmTTE8wAJ8NA7PMapNfEcyKhI9Lxdu5Q==} + + d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + + d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + + d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + + d3-tricontour@1.1.0: + resolution: {integrity: sha512-G7gHKj89n2owmkGb6WX6ixcnQ0Kf/0wpa9VIh9DGdbHu8wdrlaHU4ir3/bFNERl8N8nn4G7e7qbtBG8N9caihQ==} + engines: {node: '>=12'} + + dayjs@1.11.20: + resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + delaunator@5.1.0: + resolution: {integrity: sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + devalue@5.8.0: + resolution: {integrity: sha512-2zA9pFEsnp7vWBZbXF5JAgAq0fsUIt/1XPbRiAmRV3lp/2C3upzH+sADiyy66aFCihoLEsrQHxNM5w1gIDfsBg==} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + effect@3.21.2: + resolution: {integrity: sha512-rXd2FGDM8KdjSIrc+mqEELo7ScW7xTVxEf1iInmPSpIde9/nyGuFM710cjTo7/EreGXiUX2MOonPpprbz2XHCg==} + + embla-carousel-reactive-utils@8.6.0: + resolution: {integrity: sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==} + peerDependencies: + embla-carousel: 8.6.0 + + embla-carousel-svelte@8.6.0: + resolution: {integrity: sha512-ZDsKk8Sdv+AUTygMYcwZjfRd1DTh+JSUzxkOo8b9iKAkYjg+39mzbY/lwHsE3jXSpKxdKWS69hPSNuzlOGtR2Q==} + peerDependencies: + svelte: ^3.49.0 || ^4.0.0 || ^5.0.0 + + embla-carousel@8.6.0: + resolution: {integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==} + + enhanced-resolve@5.21.3: + resolution: {integrity: sha512-QyL119InA+XXEkNLNTPCXPugSvOfhwv0JOlGNzvxs0hZaiHLNvXSpudUWsOlsXGWJh8G6ckCScEkVHfX3kw/2Q==} + engines: {node: '>=10.13.0'} + + esbuild@0.27.7: + resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} + engines: {node: '>=18'} + hasBin: true + + esm-env@1.2.2: + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} + + esrap@2.2.8: + resolution: {integrity: sha512-MPweq2EvEGj8jwOI7Hgycw/QIHzqA1EbAM8lG7p+FBfZbZq/hQ6h3AMsqnu/djzisH1KVWNzbb7LSgIVtMlPSg==} + peerDependencies: + '@typescript-eslint/types': ^8.2.0 + peerDependenciesMeta: + '@typescript-eslint/types': + optional: true + + fast-check@3.23.2: + resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} + engines: {node: '>=8.0.0'} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + formsnap@2.0.1: + resolution: {integrity: sha512-iJSe4YKd/W6WhLwKDVJU9FQeaJRpEFuolhju7ZXlRpUVyDdqFdMP8AUBICgnVvQPyP41IPAlBa/v0Eo35iE6wQ==} + engines: {node: '>=18', pnpm: '>=8.7.0'} + peerDependencies: + svelte: ^5.0.0 + sveltekit-superforms: ^2.19.0 + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + inline-style-parser@0.2.7: + resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} + + internmap@1.0.1: + resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} + + internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + + is-reference@3.0.3: + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + + joi@17.13.3: + resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} + + json-schema-to-ts@3.1.1: + resolution: {integrity: sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==} + engines: {node: '>=16'} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + layerchart@2.0.0-next.48: + resolution: {integrity: sha512-XoEYBztamA8lMxtF/Jz3aDX0HMk8dI+o4fK9fSl8ecT2Tdx3DQUjtKGtlQAOFdwC/AWifeLmKq5cMTQt9COZPQ==} + peerDependencies: + svelte: ^5.0.0 + + libphonenumber-js@1.13.1: + resolution: {integrity: sha512-GEw0GLL7YUUA6nv21IsCvVjtI5Ejn84sjbdfQ9KxdbqEVOk1PZh7xejn01EEiniKw+dBeCfim+8MGeuvVuE2BA==} + + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + + locate-character@3.0.0: + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} + + lucide-svelte@0.518.0: + resolution: {integrity: sha512-LWuXcRAOFqqSa6QI4Awfe1Y7yZngpX0bB6gfTUefZc/hqHUWb/lukHF5M1SuR4A2O9ra7jsT46WnDtXPMmkNvg==} + peerDependencies: + svelte: ^3 || ^4 || ^5.0.0-next.42 + + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + memoize-weak@1.0.2: + resolution: {integrity: sha512-gj39xkrjEw7nCn4nJ1M5ms6+MyMlyiGmttzsqAUsAKn6bYKwuTHh/AO3cKPF8IBrTIYTxb0wWXFs3E//Y8VoWQ==} + + memoize@10.2.0: + resolution: {integrity: sha512-DeC6b7QBrZsRs3Y02A6A7lQyzFbsQbqgjI6UW0GigGWV+u1s25TycMr0XHZE4cJce7rY/vyw2ctMQqfDkIhUEA==} + engines: {node: '>=18'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + mode-watcher@1.1.0: + resolution: {integrity: sha512-mUT9RRGPDYenk59qJauN1rhsIMKBmWA3xMF+uRwE8MW/tjhaDSCCARqkSuDTq8vr4/2KcAxIGVjACxTjdk5C3g==} + peerDependencies: + svelte: ^5.27.0 + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + normalize-url@8.1.1: + resolution: {integrity: sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==} + engines: {node: '>=14.16'} + + paneforge@1.0.2: + resolution: {integrity: sha512-KzmIXQH1wCfwZ4RsMohD/IUtEjVhteR+c+ulb/CHYJHX8SuDXoJmChtsc/Xs5Wl8NHS4L5Q7cxL8MG40gSU1bA==} + peerDependencies: + svelte: ^5.29.0 + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + + postcss@8.5.14: + resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} + engines: {node: ^10 || ^12 || >=14} + + property-expr@2.0.6: + resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==} + + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + robust-predicates@3.0.3: + resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==} + + rollup@4.60.3: + resolution: {integrity: sha512-pAQK9HalE84QSm4Po3EmWIZPd3FnjkShVkiMlz1iligWYkWQ7wHYd1PF/T7QZ5TVSD6uSTon5gBVMSM4JfBV+A==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + runed@0.23.4: + resolution: {integrity: sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA==} + peerDependencies: + svelte: ^5.7.0 + + runed@0.25.0: + resolution: {integrity: sha512-7+ma4AG9FT2sWQEA0Egf6mb7PBT2vHyuHail1ie8ropfSjvZGtEAx8YTmUjv/APCsdRRxEVvArNjALk9zFSOrg==} + peerDependencies: + svelte: ^5.7.0 + + runed@0.28.0: + resolution: {integrity: sha512-k2xx7RuO9hWcdd9f+8JoBeqWtYrm5CALfgpkg2YDB80ds/QE4w0qqu34A7fqiAwiBBSBQOid7TLxwxVC27ymWQ==} + peerDependencies: + svelte: ^5.7.0 + + runed@0.29.2: + resolution: {integrity: sha512-0cq6cA6sYGZwl/FvVqjx9YN+1xEBu9sDDyuWdDW1yWX7JF2wmvmVKfH+hVCZs+csW+P3ARH92MjI3H9QTagOQA==} + peerDependencies: + svelte: ^5.7.0 + + runed@0.35.1: + resolution: {integrity: sha512-2F4Q/FZzbeJTFdIS/PuOoPRSm92sA2LhzTnv6FXhCoENb3huf5+fDuNOg1LNvGOouy3u/225qxmuJvcV3IZK5Q==} + peerDependencies: + '@sveltejs/kit': ^2.21.0 + svelte: ^5.7.0 + peerDependenciesMeta: + '@sveltejs/kit': + optional: true + + runed@0.37.1: + resolution: {integrity: sha512-MeFY73xBW8IueWBm012nNFIGy19WUGPLtknavyUPMpnyt350M47PhGSGrGoSLbidwn+Zlt/O0cp8/OZE3LASWA==} + peerDependencies: + '@sveltejs/kit': ^2.21.0 + svelte: ^5.7.0 + zod: ^4.1.0 + peerDependenciesMeta: + '@sveltejs/kit': + optional: true + zod: + optional: true + + rw@1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + set-cookie-parser@3.1.0: + resolution: {integrity: sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw==} + + sirv@3.0.2: + resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} + engines: {node: '>=18'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + style-to-object@1.0.14: + resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} + + superstruct@2.0.2: + resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} + engines: {node: '>=14.0.0'} + + svelte-check@4.4.8: + resolution: {integrity: sha512-67adfgBox5eNSNIvIIwgFizKGdcRrGpiMoNO2obHcYuLz7iTa8Xgm/NGU3ntMFnNm8K1grFOIG6HhMLX/vcN8w==} + engines: {node: '>= 18.0.0'} + hasBin: true + peerDependencies: + svelte: ^4.0.0 || ^5.0.0-next.0 + typescript: '>=5.0.0' + + svelte-sonner@1.1.1: + resolution: {integrity: sha512-5cd3p7wa4cq0NsqslMwdlPb7x1JglEZ/GKrLePWNr5bCxR1nagAVrY01FRFrXfUGs41miLt3C327+8XJo5BzZw==} + peerDependencies: + svelte: ^5.0.0 + + svelte-toolbelt@0.10.6: + resolution: {integrity: sha512-YWuX+RE+CnWYx09yseAe4ZVMM7e7GRFZM6OYWpBKOb++s+SQ8RBIMMe+Bs/CznBMc0QPLjr+vDBxTAkozXsFXQ==} + engines: {node: '>=18', pnpm: '>=8.7.0'} + peerDependencies: + svelte: ^5.30.2 + + svelte-toolbelt@0.5.0: + resolution: {integrity: sha512-t3tenZcnfQoIeRuQf/jBU7bvTeT3TGkcEE+1EUr5orp0lR7NEpprflpuie3x9Dn0W9nOKqs3HwKGJeeN5Ok1sQ==} + engines: {node: '>=18', pnpm: '>=8.7.0'} + peerDependencies: + svelte: ^5.0.0-next.126 + + svelte-toolbelt@0.7.1: + resolution: {integrity: sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ==} + engines: {node: '>=18', pnpm: '>=8.7.0'} + peerDependencies: + svelte: ^5.0.0 + + svelte-toolbelt@0.9.3: + resolution: {integrity: sha512-HCSWxCtVmv+c6g1ACb8LTwHVbDqLKJvHpo6J8TaqwUme2hj9ATJCpjCPNISR1OCq2Q4U1KT41if9ON0isINQZw==} + engines: {node: '>=18', pnpm: '>=8.7.0'} + peerDependencies: + svelte: ^5.30.2 + + svelte@5.55.5: + resolution: {integrity: sha512-2uCs/LZ9us+AktdzYJM8OcxQ8qnPS1kpaO7syGT/MgO+6Qr1Ybl+TqPq+97u7PHqmmMlye5ZkoyXONy5mjjAbw==} + engines: {node: '>=18'} + + sveltekit-superforms@2.30.1: + resolution: {integrity: sha512-wBzyqsE0idvEJWuNJ+HCiAtdxa7Z55GZ8jmtlVHJfonrk9bRYC49MoPaloYyFoYuU3QPy6Omna/Qzn1kaIkgew==} + peerDependencies: + '@sveltejs/kit': 1.x || 2.x + svelte: 3.x || 4.x || >=5.0.0-next.51 + + tabbable@6.4.0: + resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} + + tailwind-merge@3.6.0: + resolution: {integrity: sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==} + + tailwind-variants@3.2.2: + resolution: {integrity: sha512-Mi4kHeMTLvKlM98XPnK+7HoBPmf4gygdFmqQPaDivc3DpYS6aIY6KiG/PgThrGvii5YZJqRsPz0aPyhoFzmZgg==} + engines: {node: '>=16.x', pnpm: '>=7.x'} + peerDependencies: + tailwind-merge: '>=3.0.0' + tailwindcss: '*' + peerDependenciesMeta: + tailwind-merge: + optional: true + + tailwindcss@4.3.0: + resolution: {integrity: sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==} + + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} + engines: {node: '>=6'} + + tiny-case@1.0.3: + resolution: {integrity: sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==} + + tinyglobby@0.2.16: + resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} + engines: {node: '>=12.0.0'} + + toposort@2.0.2: + resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==} + + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + ts-algebra@2.0.0: + resolution: {integrity: sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==} + + ts-deepmerge@7.0.3: + resolution: {integrity: sha512-Du/ZW2RfwV/D4cmA5rXafYjBQVuvu4qGiEEla4EmEHVHgRdx68Gftx7i66jn2bzHPwSVZY36Ae6OuDn9el4ZKA==} + engines: {node: '>=14.13.1'} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + typebox@1.1.38: + resolution: {integrity: sha512-pZ0aQPmMmXoUvSbeuWf/Hzsc+avNw/Zd6VeE8CFgkVGWyuHPJvqeJJDeJqLve+K70LvjYIoleGcoJHPT17cWoA==} + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + valibot@1.4.0: + resolution: {integrity: sha512-iC/x7fVcSyOwlm/VSt7RlHnzNGLGvR9GnxdifUeWoCJo0q4ZZvrVkIHC6faTlkxG47I2Y4UrFquPuVHCrOnrLg==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + + validator@13.15.35: + resolution: {integrity: sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw==} + engines: {node: '>= 0.10'} + + vaul-svelte@1.0.0-next.7: + resolution: {integrity: sha512-7zN7Bi3dFQixvvbUJY9uGDe7Ws/dGZeBQR2pXdXmzQiakjrxBvWo0QrmsX3HK+VH+SZOltz378cmgmCS9f9rSg==} + engines: {node: '>=18', pnpm: '>=8.7.0'} + peerDependencies: + svelte: ^5.0.0 + + vite@7.3.3: + resolution: {integrity: sha512-/4XH147Ui7OGTjg3HbdWe5arnZQSbfuRzdr9Ec7TQi5I7R+ir0Rlc9GIvD4v0XZurELqA035KVXJXpR61xhiTA==} + 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.3: + resolution: {integrity: sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + vite: + optional: true + + yup@1.7.1: + resolution: {integrity: sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw==} + + zimmerframe@1.1.4: + resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} + + zod-v3-to-json-schema@4.0.0: + resolution: {integrity: sha512-KixLrhX/uPmRFnDgsZrzrk4x5SSJA+PmaE5adbfID9+3KPJcdxqRobaHU397EfWBqfQircrjKqvEqZ/mW5QH6w==} + peerDependencies: + zod: ^3.25 || ^4.0.14 + + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + +snapshots: + + '@ark/schema@0.56.0': + dependencies: + '@ark/util': 0.56.0 + optional: true + + '@ark/util@0.56.0': + optional: true + + '@babel/runtime@7.29.2': + optional: true + + '@dagrejs/dagre@2.0.4': + dependencies: + '@dagrejs/graphlib': 3.0.4 + + '@dagrejs/graphlib@3.0.4': {} + + '@esbuild/aix-ppc64@0.27.7': + optional: true + + '@esbuild/android-arm64@0.27.7': + optional: true + + '@esbuild/android-arm@0.27.7': + optional: true + + '@esbuild/android-x64@0.27.7': + optional: true + + '@esbuild/darwin-arm64@0.27.7': + optional: true + + '@esbuild/darwin-x64@0.27.7': + optional: true + + '@esbuild/freebsd-arm64@0.27.7': + optional: true + + '@esbuild/freebsd-x64@0.27.7': + optional: true + + '@esbuild/linux-arm64@0.27.7': + optional: true + + '@esbuild/linux-arm@0.27.7': + optional: true + + '@esbuild/linux-ia32@0.27.7': + optional: true + + '@esbuild/linux-loong64@0.27.7': + optional: true + + '@esbuild/linux-mips64el@0.27.7': + optional: true + + '@esbuild/linux-ppc64@0.27.7': + optional: true + + '@esbuild/linux-riscv64@0.27.7': + optional: true + + '@esbuild/linux-s390x@0.27.7': + optional: true + + '@esbuild/linux-x64@0.27.7': + optional: true + + '@esbuild/netbsd-arm64@0.27.7': + optional: true + + '@esbuild/netbsd-x64@0.27.7': + optional: true + + '@esbuild/openbsd-arm64@0.27.7': + optional: true + + '@esbuild/openbsd-x64@0.27.7': + optional: true + + '@esbuild/openharmony-arm64@0.27.7': + optional: true + + '@esbuild/sunos-x64@0.27.7': + optional: true + + '@esbuild/win32-arm64@0.27.7': + optional: true + + '@esbuild/win32-ia32@0.27.7': + optional: true + + '@esbuild/win32-x64@0.27.7': + optional: true + + '@exodus/schemasafe@1.3.0': + optional: true + + '@floating-ui/core@1.7.5': + dependencies: + '@floating-ui/utils': 0.2.11 + + '@floating-ui/dom@1.7.6': + dependencies: + '@floating-ui/core': 1.7.5 + '@floating-ui/utils': 0.2.11 + + '@floating-ui/utils@0.2.11': {} + + '@hapi/hoek@9.3.0': + optional: true + + '@hapi/topo@5.1.0': + dependencies: + '@hapi/hoek': 9.3.0 + optional: true + + '@internationalized/date@3.12.1': + dependencies: + '@swc/helpers': 0.5.21 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@layerstack/svelte-actions@1.0.1-next.18': + dependencies: + '@floating-ui/dom': 1.7.6 + '@layerstack/utils': 2.0.0-next.18 + d3-scale: 4.0.2 + + '@layerstack/svelte-state@0.1.0-next.23': + dependencies: + '@layerstack/utils': 2.0.0-next.18 + + '@layerstack/tailwind@2.0.0-next.21': + dependencies: + '@layerstack/utils': 2.0.0-next.18 + clsx: 2.1.1 + d3-array: 3.2.4 + tailwind-merge: 3.6.0 + + '@layerstack/utils@2.0.0-next.18': + dependencies: + d3-array: 3.2.4 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + + '@lucide/svelte@1.14.0(svelte@5.55.5)': + dependencies: + svelte: 5.55.5 + + '@polka/url@1.0.0-next.29': {} + + '@poppinss/macroable@1.1.2': + optional: true + + '@rollup/rollup-android-arm-eabi@4.60.3': + optional: true + + '@rollup/rollup-android-arm64@4.60.3': + optional: true + + '@rollup/rollup-darwin-arm64@4.60.3': + optional: true + + '@rollup/rollup-darwin-x64@4.60.3': + optional: true + + '@rollup/rollup-freebsd-arm64@4.60.3': + optional: true + + '@rollup/rollup-freebsd-x64@4.60.3': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.60.3': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.60.3': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.60.3': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.60.3': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.60.3': + optional: true + + '@rollup/rollup-linux-loong64-musl@4.60.3': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.60.3': + optional: true + + '@rollup/rollup-linux-ppc64-musl@4.60.3': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.60.3': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.60.3': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.60.3': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.60.3': + optional: true + + '@rollup/rollup-linux-x64-musl@4.60.3': + optional: true + + '@rollup/rollup-openbsd-x64@4.60.3': + optional: true + + '@rollup/rollup-openharmony-arm64@4.60.3': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.60.3': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.60.3': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.60.3': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.60.3': + optional: true + + '@sideway/address@4.1.5': + dependencies: + '@hapi/hoek': 9.3.0 + optional: true + + '@sideway/formula@3.0.1': + optional: true + + '@sideway/pinpoint@2.0.0': + optional: true + + '@standard-schema/spec@1.1.0': {} + + '@sveltejs/acorn-typescript@1.0.9(acorn@8.16.0)': + dependencies: + acorn: 8.16.0 + + '@sveltejs/kit@2.59.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0))': + dependencies: + '@standard-schema/spec': 1.1.0 + '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)) + '@types/cookie': 0.6.0 + acorn: 8.16.0 + cookie: 0.6.0 + devalue: 5.8.0 + esm-env: 1.2.2 + kleur: 4.1.5 + magic-string: 0.30.21 + mrmime: 2.0.1 + set-cookie-parser: 3.1.0 + sirv: 3.0.2 + svelte: 5.55.5 + vite: 7.3.3(jiti@2.7.0)(lightningcss@1.32.0) + optionalDependencies: + typescript: 5.9.3 + + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0))': + dependencies: + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)) + debug: 4.4.3 + svelte: 5.55.5 + vite: 7.3.3(jiti@2.7.0)(lightningcss@1.32.0) + transitivePeerDependencies: + - supports-color + + '@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0))': + dependencies: + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)) + debug: 4.4.3 + deepmerge: 4.3.1 + kleur: 4.1.5 + magic-string: 0.30.21 + svelte: 5.55.5 + vite: 7.3.3(jiti@2.7.0)(lightningcss@1.32.0) + vitefu: 1.1.3(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)) + transitivePeerDependencies: + - supports-color + + '@swc/helpers@0.5.21': + dependencies: + tslib: 2.8.1 + + '@tailwindcss/node@4.3.0': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.21.3 + jiti: 2.7.0 + lightningcss: 1.32.0 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.3.0 + + '@tailwindcss/oxide-android-arm64@4.3.0': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.3.0': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.3.0': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.3.0': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.3.0': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.3.0': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.3.0': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.3.0': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.3.0': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.3.0': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.3.0': + optional: true + + '@tailwindcss/oxide@4.3.0': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.3.0 + '@tailwindcss/oxide-darwin-arm64': 4.3.0 + '@tailwindcss/oxide-darwin-x64': 4.3.0 + '@tailwindcss/oxide-freebsd-x64': 4.3.0 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.0 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.0 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.0 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.0 + '@tailwindcss/oxide-linux-x64-musl': 4.3.0 + '@tailwindcss/oxide-wasm32-wasi': 4.3.0 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.0 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.0 + + '@tailwindcss/vite@4.3.0(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0))': + dependencies: + '@tailwindcss/node': 4.3.0 + '@tailwindcss/oxide': 4.3.0 + tailwindcss: 4.3.0 + vite: 7.3.3(jiti@2.7.0)(lightningcss@1.32.0) + + '@tanstack/table-core@8.21.3': {} + + '@types/cookie@0.6.0': {} + + '@types/d3-array@3.2.2': {} + + '@types/d3-contour@3.0.6': + dependencies: + '@types/d3-array': 3.2.2 + '@types/geojson': 7946.0.16 + + '@types/estree@1.0.8': {} + + '@types/estree@1.0.9': {} + + '@types/geojson@7946.0.16': {} + + '@types/trusted-types@2.0.7': {} + + '@types/validator@13.15.10': + optional: true + + '@typeschema/class-validator@0.3.0(class-validator@0.14.4)': + dependencies: + '@typeschema/core': 0.14.0 + optionalDependencies: + class-validator: 0.14.4 + transitivePeerDependencies: + - '@types/json-schema' + optional: true + + '@typeschema/core@0.14.0': + optional: true + + '@valibot/to-json-schema@1.7.0(valibot@1.4.0(typescript@5.9.3))': + dependencies: + valibot: 1.4.0(typescript@5.9.3) + optional: true + + '@vinejs/compiler@3.0.0': + optional: true + + '@vinejs/vine@3.0.1': + dependencies: + '@poppinss/macroable': 1.1.2 + '@types/validator': 13.15.10 + '@vinejs/compiler': 3.0.0 + camelcase: 8.0.0 + dayjs: 1.11.20 + dlv: 1.1.3 + normalize-url: 8.1.1 + validator: 13.15.35 + optional: true + + acorn@8.16.0: {} + + aria-query@5.3.1: {} + + arkregex@0.0.5: + dependencies: + '@ark/util': 0.56.0 + optional: true + + arktype@2.2.0: + dependencies: + '@ark/schema': 0.56.0 + '@ark/util': 0.56.0 + arkregex: 0.0.5 + optional: true + + axobject-query@4.1.0: {} + + bits-ui@2.18.1(@internationalized/date@3.12.1)(@sveltejs/kit@2.59.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5): + dependencies: + '@floating-ui/core': 1.7.5 + '@floating-ui/dom': 1.7.6 + '@internationalized/date': 3.12.1 + esm-env: 1.2.2 + runed: 0.35.1(@sveltejs/kit@2.59.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5) + svelte: 5.55.5 + svelte-toolbelt: 0.10.6(@sveltejs/kit@2.59.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5) + tabbable: 6.4.0 + transitivePeerDependencies: + - '@sveltejs/kit' + + camelcase@8.0.0: + optional: true + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + class-validator@0.14.4: + dependencies: + '@types/validator': 13.15.10 + libphonenumber-js: 1.13.1 + validator: 13.15.35 + optional: true + + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + + clsx@2.1.1: {} + + commander@7.2.0: {} + + cookie@0.6.0: {} + + d3-array@2.12.1: + dependencies: + internmap: 1.0.1 + + d3-array@3.2.4: + dependencies: + internmap: 2.0.3 + + d3-chord@3.0.1: + dependencies: + d3-path: 3.1.0 + + d3-color@3.1.0: {} + + d3-contour@4.0.2: + dependencies: + d3-array: 3.2.4 + + d3-delaunay@6.0.4: + dependencies: + delaunator: 5.1.0 + + d3-dispatch@3.0.1: {} + + d3-dsv@3.0.1: + dependencies: + commander: 7.2.0 + iconv-lite: 0.6.3 + rw: 1.3.3 + + d3-force@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-quadtree: 3.0.1 + d3-timer: 3.0.1 + + d3-format@3.1.2: {} + + d3-geo-voronoi@2.1.0: + dependencies: + d3-array: 3.2.4 + d3-delaunay: 6.0.4 + d3-geo: 3.1.1 + d3-tricontour: 1.1.0 + + d3-geo@3.1.1: + dependencies: + d3-array: 3.2.4 + + d3-hierarchy@3.1.2: {} + + d3-interpolate-path@2.3.0: {} + + d3-interpolate@3.0.1: + dependencies: + d3-color: 3.1.0 + + d3-path@1.0.9: {} + + d3-path@3.1.0: {} + + d3-quadtree@3.0.1: {} + + d3-random@3.0.1: {} + + d3-sankey@0.12.3: + dependencies: + d3-array: 2.12.1 + d3-shape: 1.3.7 + + d3-scale-chromatic@3.1.0: + dependencies: + d3-color: 3.1.0 + d3-interpolate: 3.0.1 + + d3-scale@4.0.2: + dependencies: + d3-array: 3.2.4 + d3-format: 3.1.2 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + + d3-shape@1.3.7: + dependencies: + d3-path: 1.0.9 + + d3-shape@3.2.0: + dependencies: + d3-path: 3.1.0 + + d3-tile@1.0.0: {} + + d3-time-format@4.1.0: + dependencies: + d3-time: 3.1.0 + + d3-time@3.1.0: + dependencies: + d3-array: 3.2.4 + + d3-timer@3.0.1: {} + + d3-tricontour@1.1.0: + dependencies: + d3-delaunay: 6.0.4 + d3-scale: 4.0.2 + + dayjs@1.11.20: + optional: true + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + deepmerge@4.3.1: {} + + delaunator@5.1.0: + dependencies: + robust-predicates: 3.0.3 + + dequal@2.0.3: {} + + detect-libc@2.1.2: {} + + devalue@5.8.0: {} + + dlv@1.1.3: + optional: true + + effect@3.21.2: + dependencies: + '@standard-schema/spec': 1.1.0 + fast-check: 3.23.2 + optional: true + + embla-carousel-reactive-utils@8.6.0(embla-carousel@8.6.0): + dependencies: + embla-carousel: 8.6.0 + + embla-carousel-svelte@8.6.0(svelte@5.55.5): + dependencies: + embla-carousel: 8.6.0 + embla-carousel-reactive-utils: 8.6.0(embla-carousel@8.6.0) + svelte: 5.55.5 + + embla-carousel@8.6.0: {} + + enhanced-resolve@5.21.3: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.3 + + esbuild@0.27.7: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.7 + '@esbuild/android-arm': 0.27.7 + '@esbuild/android-arm64': 0.27.7 + '@esbuild/android-x64': 0.27.7 + '@esbuild/darwin-arm64': 0.27.7 + '@esbuild/darwin-x64': 0.27.7 + '@esbuild/freebsd-arm64': 0.27.7 + '@esbuild/freebsd-x64': 0.27.7 + '@esbuild/linux-arm': 0.27.7 + '@esbuild/linux-arm64': 0.27.7 + '@esbuild/linux-ia32': 0.27.7 + '@esbuild/linux-loong64': 0.27.7 + '@esbuild/linux-mips64el': 0.27.7 + '@esbuild/linux-ppc64': 0.27.7 + '@esbuild/linux-riscv64': 0.27.7 + '@esbuild/linux-s390x': 0.27.7 + '@esbuild/linux-x64': 0.27.7 + '@esbuild/netbsd-arm64': 0.27.7 + '@esbuild/netbsd-x64': 0.27.7 + '@esbuild/openbsd-arm64': 0.27.7 + '@esbuild/openbsd-x64': 0.27.7 + '@esbuild/openharmony-arm64': 0.27.7 + '@esbuild/sunos-x64': 0.27.7 + '@esbuild/win32-arm64': 0.27.7 + '@esbuild/win32-ia32': 0.27.7 + '@esbuild/win32-x64': 0.27.7 + + esm-env@1.2.2: {} + + esrap@2.2.8: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + fast-check@3.23.2: + dependencies: + pure-rand: 6.1.0 + optional: true + + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + + formsnap@2.0.1(svelte@5.55.5)(sveltekit-superforms@2.30.1(@sveltejs/kit@2.59.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3)): + dependencies: + svelte: 5.55.5 + svelte-toolbelt: 0.5.0(svelte@5.55.5) + sveltekit-superforms: 2.30.1(@sveltejs/kit@2.59.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3) + + fsevents@2.3.3: + optional: true + + graceful-fs@4.2.11: {} + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + inline-style-parser@0.2.7: {} + + internmap@1.0.1: {} + + internmap@2.0.3: {} + + is-reference@3.0.3: + dependencies: + '@types/estree': 1.0.9 + + jiti@2.7.0: {} + + joi@17.13.3: + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.5 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + optional: true + + json-schema-to-ts@3.1.1: + dependencies: + '@babel/runtime': 7.29.2 + ts-algebra: 2.0.0 + optional: true + + kleur@4.1.5: {} + + layerchart@2.0.0-next.48(@sveltejs/kit@2.59.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(zod@4.4.3): + dependencies: + '@dagrejs/dagre': 2.0.4 + '@layerstack/svelte-actions': 1.0.1-next.18 + '@layerstack/svelte-state': 0.1.0-next.23 + '@layerstack/tailwind': 2.0.0-next.21 + '@layerstack/utils': 2.0.0-next.18 + '@types/d3-contour': 3.0.6 + d3-array: 3.2.4 + d3-chord: 3.0.1 + d3-color: 3.1.0 + d3-contour: 4.0.2 + d3-delaunay: 6.0.4 + d3-dsv: 3.0.1 + d3-force: 3.0.0 + d3-geo: 3.1.1 + d3-geo-voronoi: 2.1.0 + d3-hierarchy: 3.1.2 + d3-interpolate: 3.0.1 + d3-interpolate-path: 2.3.0 + d3-path: 3.1.0 + d3-quadtree: 3.0.1 + d3-random: 3.0.1 + d3-sankey: 0.12.3 + d3-scale: 4.0.2 + d3-scale-chromatic: 3.1.0 + d3-shape: 3.2.0 + d3-tile: 1.0.0 + d3-time: 3.1.0 + memoize: 10.2.0 + runed: 0.37.1(@sveltejs/kit@2.59.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(zod@4.4.3) + svelte: 5.55.5 + transitivePeerDependencies: + - '@sveltejs/kit' + - zod + + libphonenumber-js@1.13.1: + optional: true + + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + + locate-character@3.0.0: {} + + lucide-svelte@0.518.0(svelte@5.55.5): + dependencies: + svelte: 5.55.5 + + lz-string@1.5.0: {} + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + memoize-weak@1.0.2: {} + + memoize@10.2.0: + dependencies: + mimic-function: 5.0.1 + + mimic-function@5.0.1: {} + + mode-watcher@1.1.0(svelte@5.55.5): + dependencies: + runed: 0.25.0(svelte@5.55.5) + svelte: 5.55.5 + svelte-toolbelt: 0.7.1(svelte@5.55.5) + + mri@1.2.0: {} + + mrmime@2.0.1: {} + + ms@2.1.3: {} + + nanoid@3.3.12: {} + + normalize-url@8.1.1: + optional: true + + paneforge@1.0.2(svelte@5.55.5): + dependencies: + runed: 0.23.4(svelte@5.55.5) + svelte: 5.55.5 + svelte-toolbelt: 0.9.3(svelte@5.55.5) + + picocolors@1.1.1: {} + + picomatch@4.0.4: {} + + postcss@8.5.14: + dependencies: + nanoid: 3.3.12 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + property-expr@2.0.6: + optional: true + + pure-rand@6.1.0: + optional: true + + readdirp@4.1.2: {} + + robust-predicates@3.0.3: {} + + rollup@4.60.3: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.60.3 + '@rollup/rollup-android-arm64': 4.60.3 + '@rollup/rollup-darwin-arm64': 4.60.3 + '@rollup/rollup-darwin-x64': 4.60.3 + '@rollup/rollup-freebsd-arm64': 4.60.3 + '@rollup/rollup-freebsd-x64': 4.60.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.60.3 + '@rollup/rollup-linux-arm-musleabihf': 4.60.3 + '@rollup/rollup-linux-arm64-gnu': 4.60.3 + '@rollup/rollup-linux-arm64-musl': 4.60.3 + '@rollup/rollup-linux-loong64-gnu': 4.60.3 + '@rollup/rollup-linux-loong64-musl': 4.60.3 + '@rollup/rollup-linux-ppc64-gnu': 4.60.3 + '@rollup/rollup-linux-ppc64-musl': 4.60.3 + '@rollup/rollup-linux-riscv64-gnu': 4.60.3 + '@rollup/rollup-linux-riscv64-musl': 4.60.3 + '@rollup/rollup-linux-s390x-gnu': 4.60.3 + '@rollup/rollup-linux-x64-gnu': 4.60.3 + '@rollup/rollup-linux-x64-musl': 4.60.3 + '@rollup/rollup-openbsd-x64': 4.60.3 + '@rollup/rollup-openharmony-arm64': 4.60.3 + '@rollup/rollup-win32-arm64-msvc': 4.60.3 + '@rollup/rollup-win32-ia32-msvc': 4.60.3 + '@rollup/rollup-win32-x64-gnu': 4.60.3 + '@rollup/rollup-win32-x64-msvc': 4.60.3 + fsevents: 2.3.3 + + runed@0.23.4(svelte@5.55.5): + dependencies: + esm-env: 1.2.2 + svelte: 5.55.5 + + runed@0.25.0(svelte@5.55.5): + dependencies: + esm-env: 1.2.2 + svelte: 5.55.5 + + runed@0.28.0(svelte@5.55.5): + dependencies: + esm-env: 1.2.2 + svelte: 5.55.5 + + runed@0.29.2(svelte@5.55.5): + dependencies: + esm-env: 1.2.2 + svelte: 5.55.5 + + runed@0.35.1(@sveltejs/kit@2.59.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5): + dependencies: + dequal: 2.0.3 + esm-env: 1.2.2 + lz-string: 1.5.0 + svelte: 5.55.5 + optionalDependencies: + '@sveltejs/kit': 2.59.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)) + + runed@0.37.1(@sveltejs/kit@2.59.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(zod@4.4.3): + dependencies: + dequal: 2.0.3 + esm-env: 1.2.2 + lz-string: 1.5.0 + svelte: 5.55.5 + optionalDependencies: + '@sveltejs/kit': 2.59.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)) + zod: 4.4.3 + + rw@1.3.3: {} + + sade@1.8.1: + dependencies: + mri: 1.2.0 + + safer-buffer@2.1.2: {} + + set-cookie-parser@3.1.0: {} + + sirv@3.0.2: + dependencies: + '@polka/url': 1.0.0-next.29 + mrmime: 2.0.1 + totalist: 3.0.1 + + source-map-js@1.2.1: {} + + style-to-object@1.0.14: + dependencies: + inline-style-parser: 0.2.7 + + superstruct@2.0.2: + optional: true + + svelte-check@4.4.8(picomatch@4.0.4)(svelte@5.55.5)(typescript@5.9.3): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + chokidar: 4.0.3 + fdir: 6.5.0(picomatch@4.0.4) + picocolors: 1.1.1 + sade: 1.8.1 + svelte: 5.55.5 + typescript: 5.9.3 + transitivePeerDependencies: + - picomatch + + svelte-sonner@1.1.1(svelte@5.55.5): + dependencies: + runed: 0.28.0(svelte@5.55.5) + svelte: 5.55.5 + + svelte-toolbelt@0.10.6(@sveltejs/kit@2.59.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5): + dependencies: + clsx: 2.1.1 + runed: 0.35.1(@sveltejs/kit@2.59.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5) + style-to-object: 1.0.14 + svelte: 5.55.5 + transitivePeerDependencies: + - '@sveltejs/kit' + + svelte-toolbelt@0.5.0(svelte@5.55.5): + dependencies: + clsx: 2.1.1 + style-to-object: 1.0.14 + svelte: 5.55.5 + + svelte-toolbelt@0.7.1(svelte@5.55.5): + dependencies: + clsx: 2.1.1 + runed: 0.23.4(svelte@5.55.5) + style-to-object: 1.0.14 + svelte: 5.55.5 + + svelte-toolbelt@0.9.3(svelte@5.55.5): + dependencies: + clsx: 2.1.1 + runed: 0.29.2(svelte@5.55.5) + style-to-object: 1.0.14 + svelte: 5.55.5 + + svelte@5.55.5: + dependencies: + '@jridgewell/remapping': 2.3.5 + '@jridgewell/sourcemap-codec': 1.5.5 + '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) + '@types/estree': 1.0.9 + '@types/trusted-types': 2.0.7 + acorn: 8.16.0 + aria-query: 5.3.1 + axobject-query: 4.1.0 + clsx: 2.1.1 + devalue: 5.8.0 + esm-env: 1.2.2 + esrap: 2.2.8 + is-reference: 3.0.3 + locate-character: 3.0.0 + magic-string: 0.30.21 + zimmerframe: 1.1.4 + transitivePeerDependencies: + - '@typescript-eslint/types' + + sveltekit-superforms@2.30.1(@sveltejs/kit@2.59.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3): + dependencies: + '@sveltejs/kit': 2.59.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)))(svelte@5.55.5)(typescript@5.9.3)(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)) + devalue: 5.8.0 + memoize-weak: 1.0.2 + svelte: 5.55.5 + ts-deepmerge: 7.0.3 + optionalDependencies: + '@exodus/schemasafe': 1.3.0 + '@standard-schema/spec': 1.1.0 + '@typeschema/class-validator': 0.3.0(class-validator@0.14.4) + '@valibot/to-json-schema': 1.7.0(valibot@1.4.0(typescript@5.9.3)) + '@vinejs/vine': 3.0.1 + arktype: 2.2.0 + class-validator: 0.14.4 + effect: 3.21.2 + joi: 17.13.3 + json-schema-to-ts: 3.1.1 + superstruct: 2.0.2 + typebox: 1.1.38 + valibot: 1.4.0(typescript@5.9.3) + yup: 1.7.1 + zod: 4.4.3 + zod-v3-to-json-schema: 4.0.0(zod@4.4.3) + transitivePeerDependencies: + - '@types/json-schema' + - typescript + + tabbable@6.4.0: {} + + tailwind-merge@3.6.0: {} + + tailwind-variants@3.2.2(tailwind-merge@3.6.0)(tailwindcss@4.3.0): + dependencies: + tailwindcss: 4.3.0 + optionalDependencies: + tailwind-merge: 3.6.0 + + tailwindcss@4.3.0: {} + + tapable@2.3.3: {} + + tiny-case@1.0.3: + optional: true + + tinyglobby@0.2.16: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + + toposort@2.0.2: + optional: true + + totalist@3.0.1: {} + + ts-algebra@2.0.0: + optional: true + + ts-deepmerge@7.0.3: {} + + tslib@2.8.1: {} + + type-fest@2.19.0: + optional: true + + typebox@1.1.38: + optional: true + + typescript@5.9.3: {} + + valibot@1.4.0(typescript@5.9.3): + optionalDependencies: + typescript: 5.9.3 + optional: true + + validator@13.15.35: + optional: true + + vaul-svelte@1.0.0-next.7(svelte@5.55.5): + dependencies: + runed: 0.23.4(svelte@5.55.5) + svelte: 5.55.5 + svelte-toolbelt: 0.7.1(svelte@5.55.5) + + vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0): + dependencies: + esbuild: 0.27.7 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + postcss: 8.5.14 + rollup: 4.60.3 + tinyglobby: 0.2.16 + optionalDependencies: + fsevents: 2.3.3 + jiti: 2.7.0 + lightningcss: 1.32.0 + + vitefu@1.1.3(vite@7.3.3(jiti@2.7.0)(lightningcss@1.32.0)): + optionalDependencies: + vite: 7.3.3(jiti@2.7.0)(lightningcss@1.32.0) + + yup@1.7.1: + dependencies: + property-expr: 2.0.6 + tiny-case: 1.0.3 + toposort: 2.0.2 + type-fest: 2.19.0 + optional: true + + zimmerframe@1.1.4: {} + + zod-v3-to-json-schema@4.0.0(zod@4.4.3): + dependencies: + zod: 4.4.3 + optional: true + + zod@4.4.3: + optional: true diff --git a/packages/svelte/src/lib/components/ui/accordion-content.svelte b/packages/svelte/src/lib/components/ui/accordion-content.svelte deleted file mode 100644 index 57fd6f69..00000000 --- a/packages/svelte/src/lib/components/ui/accordion-content.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - - -
- {@render children?.()} -
-
diff --git a/packages/svelte/src/lib/components/ui/accordion-item.svelte b/packages/svelte/src/lib/components/ui/accordion-item.svelte deleted file mode 100644 index 4795f780..00000000 --- a/packages/svelte/src/lib/components/ui/accordion-item.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - - {@render children?.()} - diff --git a/packages/svelte/src/lib/components/ui/accordion-trigger.svelte b/packages/svelte/src/lib/components/ui/accordion-trigger.svelte deleted file mode 100644 index e900ac35..00000000 --- a/packages/svelte/src/lib/components/ui/accordion-trigger.svelte +++ /dev/null @@ -1,26 +0,0 @@ - - - - svg]:rotate-180', - className - )} - {...restProps} - > - {@render children?.()} - - - diff --git a/packages/svelte/src/lib/components/ui/accordion.svelte b/packages/svelte/src/lib/components/ui/accordion.svelte deleted file mode 100644 index 98b0e0ca..00000000 --- a/packages/svelte/src/lib/components/ui/accordion.svelte +++ /dev/null @@ -1,18 +0,0 @@ - - - - {@render children?.()} - diff --git a/packages/svelte/src/lib/components/ui/accordion/accordion-content.svelte b/packages/svelte/src/lib/components/ui/accordion/accordion-content.svelte new file mode 100644 index 00000000..f18f4b36 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/accordion/accordion-content.svelte @@ -0,0 +1,22 @@ + + + +
+ {@render children?.()} +
+
diff --git a/packages/svelte/src/lib/components/ui/accordion/accordion-item.svelte b/packages/svelte/src/lib/components/ui/accordion/accordion-item.svelte new file mode 100644 index 00000000..6f339638 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/accordion/accordion-item.svelte @@ -0,0 +1,17 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/accordion/accordion-trigger.svelte b/packages/svelte/src/lib/components/ui/accordion/accordion-trigger.svelte new file mode 100644 index 00000000..ba9b124d --- /dev/null +++ b/packages/svelte/src/lib/components/ui/accordion/accordion-trigger.svelte @@ -0,0 +1,30 @@ + + + + svg]:rotate-180 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", + className + )} + {...restProps} + > + {@render children?.()} + + + diff --git a/packages/svelte/src/lib/components/ui/accordion/accordion.svelte b/packages/svelte/src/lib/components/ui/accordion/accordion.svelte new file mode 100644 index 00000000..b19a3c5c --- /dev/null +++ b/packages/svelte/src/lib/components/ui/accordion/accordion.svelte @@ -0,0 +1,19 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/accordion/index.ts b/packages/svelte/src/lib/components/ui/accordion/index.ts new file mode 100644 index 00000000..ac343a10 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/accordion/index.ts @@ -0,0 +1,16 @@ +import Root from "./accordion.svelte"; +import Content from "./accordion-content.svelte"; +import Item from "./accordion-item.svelte"; +import Trigger from "./accordion-trigger.svelte"; + +export { + Root, + Content, + Item, + Trigger, + // + Root as Accordion, + Content as AccordionContent, + Item as AccordionItem, + Trigger as AccordionTrigger, +}; diff --git a/packages/svelte/src/lib/components/ui/alert-action.svelte b/packages/svelte/src/lib/components/ui/alert-action.svelte deleted file mode 100644 index 6733a2ac..00000000 --- a/packages/svelte/src/lib/components/ui/alert-action.svelte +++ /dev/null @@ -1,41 +0,0 @@ - - - diff --git a/packages/svelte/src/lib/components/ui/alert-description.svelte b/packages/svelte/src/lib/components/ui/alert-description.svelte deleted file mode 100644 index 3ada1e9c..00000000 --- a/packages/svelte/src/lib/components/ui/alert-description.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - -
- {@render children?.()} -
diff --git a/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-action.svelte b/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-action.svelte new file mode 100644 index 00000000..7e63004f --- /dev/null +++ b/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-action.svelte @@ -0,0 +1,27 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-cancel.svelte b/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-cancel.svelte new file mode 100644 index 00000000..a4ce03c8 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-cancel.svelte @@ -0,0 +1,27 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-content.svelte b/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-content.svelte new file mode 100644 index 00000000..c9b3eb32 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-content.svelte @@ -0,0 +1,32 @@ + + + + + + diff --git a/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-description.svelte b/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-description.svelte new file mode 100644 index 00000000..5024f3f2 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-description.svelte @@ -0,0 +1,17 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-footer.svelte b/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-footer.svelte new file mode 100644 index 00000000..f4214db3 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-footer.svelte @@ -0,0 +1,23 @@ + + +
+ {@render children?.()} +
diff --git a/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-header.svelte b/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-header.svelte new file mode 100644 index 00000000..d6df4d35 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-header.svelte @@ -0,0 +1,20 @@ + + +
+ {@render children?.()} +
diff --git a/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-media.svelte b/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-media.svelte new file mode 100644 index 00000000..3f634f3c --- /dev/null +++ b/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-media.svelte @@ -0,0 +1,20 @@ + + +
+ {@render children?.()} +
diff --git a/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-overlay.svelte b/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-overlay.svelte new file mode 100644 index 00000000..9ffcc858 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-overlay.svelte @@ -0,0 +1,17 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-portal.svelte b/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-portal.svelte new file mode 100644 index 00000000..f0a19a8c --- /dev/null +++ b/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-portal.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-title.svelte b/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-title.svelte new file mode 100644 index 00000000..652da331 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-title.svelte @@ -0,0 +1,17 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-trigger.svelte b/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-trigger.svelte new file mode 100644 index 00000000..b22d1d50 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog-trigger.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog.svelte b/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog.svelte new file mode 100644 index 00000000..7ea78bb4 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/alert-dialog/alert-dialog.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/alert-dialog/index.ts b/packages/svelte/src/lib/components/ui/alert-dialog/index.ts new file mode 100644 index 00000000..ca81c2a9 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/alert-dialog/index.ts @@ -0,0 +1,40 @@ +import Root from "./alert-dialog.svelte"; +import Portal from "./alert-dialog-portal.svelte"; +import Trigger from "./alert-dialog-trigger.svelte"; +import Title from "./alert-dialog-title.svelte"; +import Action from "./alert-dialog-action.svelte"; +import Cancel from "./alert-dialog-cancel.svelte"; +import Footer from "./alert-dialog-footer.svelte"; +import Header from "./alert-dialog-header.svelte"; +import Overlay from "./alert-dialog-overlay.svelte"; +import Content from "./alert-dialog-content.svelte"; +import Description from "./alert-dialog-description.svelte"; +import Media from "./alert-dialog-media.svelte"; + +export { + Root, + Title, + Action, + Cancel, + Portal, + Footer, + Header, + Trigger, + Overlay, + Content, + Description, + Media, + // + Root as AlertDialog, + Title as AlertDialogTitle, + Action as AlertDialogAction, + Cancel as AlertDialogCancel, + Portal as AlertDialogPortal, + Footer as AlertDialogFooter, + Header as AlertDialogHeader, + Trigger as AlertDialogTrigger, + Overlay as AlertDialogOverlay, + Content as AlertDialogContent, + Description as AlertDialogDescription, + Media as AlertDialogMedia, +}; diff --git a/packages/svelte/src/lib/components/ui/alert-title.svelte b/packages/svelte/src/lib/components/ui/alert-title.svelte deleted file mode 100644 index 347b90b2..00000000 --- a/packages/svelte/src/lib/components/ui/alert-title.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - -
- {@render children?.()} -
diff --git a/packages/svelte/src/lib/components/ui/alert.svelte b/packages/svelte/src/lib/components/ui/alert.svelte deleted file mode 100644 index f89ef7c9..00000000 --- a/packages/svelte/src/lib/components/ui/alert.svelte +++ /dev/null @@ -1,38 +0,0 @@ - - - diff --git a/packages/svelte/src/lib/components/ui/alert/alert-action.svelte b/packages/svelte/src/lib/components/ui/alert/alert-action.svelte new file mode 100644 index 00000000..1877d38c --- /dev/null +++ b/packages/svelte/src/lib/components/ui/alert/alert-action.svelte @@ -0,0 +1,20 @@ + + +
+ {@render children?.()} +
diff --git a/packages/svelte/src/lib/components/ui/alert/alert-description.svelte b/packages/svelte/src/lib/components/ui/alert/alert-description.svelte new file mode 100644 index 00000000..7ee60395 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/alert/alert-description.svelte @@ -0,0 +1,23 @@ + + +
+ {@render children?.()} +
diff --git a/packages/svelte/src/lib/components/ui/alert/alert-title.svelte b/packages/svelte/src/lib/components/ui/alert/alert-title.svelte new file mode 100644 index 00000000..31f0e434 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/alert/alert-title.svelte @@ -0,0 +1,20 @@ + + +
+ {@render children?.()} +
diff --git a/packages/svelte/src/lib/components/ui/alert/alert.svelte b/packages/svelte/src/lib/components/ui/alert/alert.svelte new file mode 100644 index 00000000..3eaef107 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/alert/alert.svelte @@ -0,0 +1,46 @@ + + + + + diff --git a/packages/svelte/src/lib/components/ui/alert/index.ts b/packages/svelte/src/lib/components/ui/alert/index.ts new file mode 100644 index 00000000..071b113c --- /dev/null +++ b/packages/svelte/src/lib/components/ui/alert/index.ts @@ -0,0 +1,17 @@ +import Root from "./alert.svelte"; +import Description from "./alert-description.svelte"; +import Title from "./alert-title.svelte"; +import Action from "./alert-action.svelte"; +export { alertVariants, type AlertVariant } from "./alert.svelte"; + +export { + Root, + Description, + Title, + Action, + // + Root as Alert, + Description as AlertDescription, + Title as AlertTitle, + Action as AlertAction, +}; diff --git a/packages/svelte/src/lib/components/ui/aspect-ratio/aspect-ratio.svelte b/packages/svelte/src/lib/components/ui/aspect-ratio/aspect-ratio.svelte new file mode 100644 index 00000000..815aab03 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/aspect-ratio/aspect-ratio.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/aspect-ratio/index.ts b/packages/svelte/src/lib/components/ui/aspect-ratio/index.ts new file mode 100644 index 00000000..985c75fd --- /dev/null +++ b/packages/svelte/src/lib/components/ui/aspect-ratio/index.ts @@ -0,0 +1,3 @@ +import Root from "./aspect-ratio.svelte"; + +export { Root, Root as AspectRatio }; diff --git a/packages/svelte/src/lib/components/ui/avatar-fallback.svelte b/packages/svelte/src/lib/components/ui/avatar-fallback.svelte deleted file mode 100644 index c23dcfbe..00000000 --- a/packages/svelte/src/lib/components/ui/avatar-fallback.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - - {@render children?.()} - diff --git a/packages/svelte/src/lib/components/ui/avatar-image.svelte b/packages/svelte/src/lib/components/ui/avatar-image.svelte deleted file mode 100644 index 00548ca5..00000000 --- a/packages/svelte/src/lib/components/ui/avatar-image.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - - diff --git a/packages/svelte/src/lib/components/ui/avatar.svelte b/packages/svelte/src/lib/components/ui/avatar.svelte deleted file mode 100644 index 619f2467..00000000 --- a/packages/svelte/src/lib/components/ui/avatar.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - - {@render children?.()} - diff --git a/packages/svelte/src/lib/components/ui/avatar/avatar-badge.svelte b/packages/svelte/src/lib/components/ui/avatar/avatar-badge.svelte new file mode 100644 index 00000000..ca9d9ed2 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/avatar/avatar-badge.svelte @@ -0,0 +1,26 @@ + + +svg]:hidden", + "group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2", + "group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2", + className + )} + {...restProps} +> + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/avatar/avatar-fallback.svelte b/packages/svelte/src/lib/components/ui/avatar/avatar-fallback.svelte new file mode 100644 index 00000000..2b3bacae --- /dev/null +++ b/packages/svelte/src/lib/components/ui/avatar/avatar-fallback.svelte @@ -0,0 +1,20 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/avatar/avatar-group-count.svelte b/packages/svelte/src/lib/components/ui/avatar/avatar-group-count.svelte new file mode 100644 index 00000000..c89684ab --- /dev/null +++ b/packages/svelte/src/lib/components/ui/avatar/avatar-group-count.svelte @@ -0,0 +1,23 @@ + + +
svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3 ring-background relative flex shrink-0 items-center justify-center ring-2", + className + )} + {...restProps} +> + {@render children?.()} +
diff --git a/packages/svelte/src/lib/components/ui/avatar/avatar-group.svelte b/packages/svelte/src/lib/components/ui/avatar/avatar-group.svelte new file mode 100644 index 00000000..78714fc0 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/avatar/avatar-group.svelte @@ -0,0 +1,23 @@ + + +
+ {@render children?.()} +
diff --git a/packages/svelte/src/lib/components/ui/avatar/avatar-image.svelte b/packages/svelte/src/lib/components/ui/avatar/avatar-image.svelte new file mode 100644 index 00000000..f41cf8fe --- /dev/null +++ b/packages/svelte/src/lib/components/ui/avatar/avatar-image.svelte @@ -0,0 +1,17 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/avatar/avatar.svelte b/packages/svelte/src/lib/components/ui/avatar/avatar.svelte new file mode 100644 index 00000000..da34ddac --- /dev/null +++ b/packages/svelte/src/lib/components/ui/avatar/avatar.svelte @@ -0,0 +1,26 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/avatar/index.ts b/packages/svelte/src/lib/components/ui/avatar/index.ts new file mode 100644 index 00000000..38ccef84 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/avatar/index.ts @@ -0,0 +1,22 @@ +import Root from "./avatar.svelte"; +import Image from "./avatar-image.svelte"; +import Fallback from "./avatar-fallback.svelte"; +import Badge from "./avatar-badge.svelte"; +import Group from "./avatar-group.svelte"; +import GroupCount from "./avatar-group-count.svelte"; + +export { + Root, + Image, + Fallback, + Badge, + Group, + GroupCount, + // + Root as Avatar, + Image as AvatarImage, + Fallback as AvatarFallback, + Badge as AvatarBadge, + Group as AvatarGroup, + GroupCount as AvatarGroupCount, +}; diff --git a/packages/svelte/src/lib/components/ui/badge.svelte b/packages/svelte/src/lib/components/ui/badge.svelte deleted file mode 100644 index d9e8b684..00000000 --- a/packages/svelte/src/lib/components/ui/badge.svelte +++ /dev/null @@ -1,41 +0,0 @@ - - -
- {@render children?.()} -
diff --git a/packages/svelte/src/lib/components/ui/badge/badge.svelte b/packages/svelte/src/lib/components/ui/badge/badge.svelte new file mode 100644 index 00000000..aad98cee --- /dev/null +++ b/packages/svelte/src/lib/components/ui/badge/badge.svelte @@ -0,0 +1,51 @@ + + + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/badge/index.ts b/packages/svelte/src/lib/components/ui/badge/index.ts new file mode 100644 index 00000000..64e0aa9b --- /dev/null +++ b/packages/svelte/src/lib/components/ui/badge/index.ts @@ -0,0 +1,2 @@ +export { default as Badge } from "./badge.svelte"; +export { badgeVariants, type BadgeVariant } from "./badge.svelte"; diff --git a/packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb-ellipsis.svelte b/packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb-ellipsis.svelte new file mode 100644 index 00000000..9e1e22c9 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb-ellipsis.svelte @@ -0,0 +1,23 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb-item.svelte b/packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb-item.svelte new file mode 100644 index 00000000..e9c77ea4 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb-item.svelte @@ -0,0 +1,20 @@ + + +
  • + {@render children?.()} +
  • diff --git a/packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb-link.svelte b/packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb-link.svelte new file mode 100644 index 00000000..e6bc17d3 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb-link.svelte @@ -0,0 +1,31 @@ + + +{#if child} + {@render child({ props: attrs })} +{:else} + + {@render children?.()} + +{/if} diff --git a/packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb-list.svelte b/packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb-list.svelte new file mode 100644 index 00000000..4873cf09 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb-list.svelte @@ -0,0 +1,20 @@ + + +
      + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb-page.svelte b/packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb-page.svelte new file mode 100644 index 00000000..5fb69794 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb-page.svelte @@ -0,0 +1,23 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb-separator.svelte b/packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb-separator.svelte new file mode 100644 index 00000000..0f62fbaa --- /dev/null +++ b/packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb-separator.svelte @@ -0,0 +1,27 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb.svelte b/packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb.svelte new file mode 100644 index 00000000..29ea3f5d --- /dev/null +++ b/packages/svelte/src/lib/components/ui/breadcrumb/breadcrumb.svelte @@ -0,0 +1,22 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/breadcrumb/index.ts b/packages/svelte/src/lib/components/ui/breadcrumb/index.ts new file mode 100644 index 00000000..dc914ec3 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/breadcrumb/index.ts @@ -0,0 +1,25 @@ +import Root from "./breadcrumb.svelte"; +import Ellipsis from "./breadcrumb-ellipsis.svelte"; +import Item from "./breadcrumb-item.svelte"; +import Separator from "./breadcrumb-separator.svelte"; +import Link from "./breadcrumb-link.svelte"; +import List from "./breadcrumb-list.svelte"; +import Page from "./breadcrumb-page.svelte"; + +export { + Root, + Ellipsis, + Item, + Separator, + Link, + List, + Page, + // + Root as Breadcrumb, + Ellipsis as BreadcrumbEllipsis, + Item as BreadcrumbItem, + Separator as BreadcrumbSeparator, + Link as BreadcrumbLink, + List as BreadcrumbList, + Page as BreadcrumbPage, +}; diff --git a/packages/svelte/src/lib/components/ui/button-group/button-group-separator.svelte b/packages/svelte/src/lib/components/ui/button-group/button-group-separator.svelte new file mode 100644 index 00000000..a13f023e --- /dev/null +++ b/packages/svelte/src/lib/components/ui/button-group/button-group-separator.svelte @@ -0,0 +1,23 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/button-group/button-group-text.svelte b/packages/svelte/src/lib/components/ui/button-group/button-group-text.svelte new file mode 100644 index 00000000..67c0a28a --- /dev/null +++ b/packages/svelte/src/lib/components/ui/button-group/button-group-text.svelte @@ -0,0 +1,28 @@ + + +{#if child} + {@render child({ props: mergedProps })} +{:else} +
    + {@render mergedProps.children?.()} +
    +{/if} diff --git a/packages/svelte/src/lib/components/ui/button-group/button-group.svelte b/packages/svelte/src/lib/components/ui/button-group/button-group.svelte new file mode 100644 index 00000000..06d48dc9 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/button-group/button-group.svelte @@ -0,0 +1,46 @@ + + + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/button-group/index.ts b/packages/svelte/src/lib/components/ui/button-group/index.ts new file mode 100644 index 00000000..664167f7 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/button-group/index.ts @@ -0,0 +1,15 @@ +import Root, { buttonGroupVariants, type ButtonGroupOrientation } from "./button-group.svelte"; +import Text from "./button-group-text.svelte"; +import Separator from "./button-group-separator.svelte"; + +export { + Root, + Text, + Separator, + buttonGroupVariants, + type ButtonGroupOrientation, + // + Root as ButtonGroup, + Text as ButtonGroupText, + Separator as ButtonGroupSeparator, +}; diff --git a/packages/svelte/src/lib/components/ui/button.svelte b/packages/svelte/src/lib/components/ui/button.svelte deleted file mode 100644 index 6bad6f8b..00000000 --- a/packages/svelte/src/lib/components/ui/button.svelte +++ /dev/null @@ -1,79 +0,0 @@ - - - diff --git a/packages/svelte/src/lib/components/ui/button/button.svelte b/packages/svelte/src/lib/components/ui/button/button.svelte new file mode 100644 index 00000000..6271765a --- /dev/null +++ b/packages/svelte/src/lib/components/ui/button/button.svelte @@ -0,0 +1,94 @@ + + + + +{#if href} + + {@render children?.()} + +{:else} + +{/if} diff --git a/packages/svelte/src/lib/components/ui/button/index.ts b/packages/svelte/src/lib/components/ui/button/index.ts new file mode 100644 index 00000000..fb585d76 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/button/index.ts @@ -0,0 +1,17 @@ +import Root, { + type ButtonProps, + type ButtonSize, + type ButtonVariant, + buttonVariants, +} from "./button.svelte"; + +export { + Root, + type ButtonProps as Props, + // + Root as Button, + buttonVariants, + type ButtonProps, + type ButtonSize, + type ButtonVariant, +}; diff --git a/packages/svelte/src/lib/components/ui/calendar/calendar-caption.svelte b/packages/svelte/src/lib/components/ui/calendar/calendar-caption.svelte new file mode 100644 index 00000000..5c930370 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/calendar/calendar-caption.svelte @@ -0,0 +1,76 @@ + + +{#snippet MonthSelect()} + { + if (!placeholder) return; + const v = Number.parseInt(e.currentTarget.value); + const newPlaceholder = placeholder.set({ month: v }); + placeholder = newPlaceholder.subtract({ months: monthIndex }); + }} + /> +{/snippet} + +{#snippet YearSelect()} + +{/snippet} + +{#if captionLayout === "dropdown"} + {@render MonthSelect()} + {@render YearSelect()} +{:else if captionLayout === "dropdown-months"} + {@render MonthSelect()} + {#if placeholder} + {formatYear(placeholder)} + {/if} +{:else if captionLayout === "dropdown-years"} + {#if placeholder} + {formatMonth(placeholder)} + {/if} + {@render YearSelect()} +{:else} + {formatMonth(month)} {formatYear(month)} +{/if} diff --git a/packages/svelte/src/lib/components/ui/calendar/calendar-cell.svelte b/packages/svelte/src/lib/components/ui/calendar/calendar-cell.svelte new file mode 100644 index 00000000..7ceb5e1d --- /dev/null +++ b/packages/svelte/src/lib/components/ui/calendar/calendar-cell.svelte @@ -0,0 +1,19 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/calendar/calendar-day.svelte b/packages/svelte/src/lib/components/ui/calendar/calendar-day.svelte new file mode 100644 index 00000000..edc8c9d8 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/calendar/calendar-day.svelte @@ -0,0 +1,33 @@ + + +span]:text-xs [&>span]:opacity-70", + className + )} + {...restProps} +/> diff --git a/packages/svelte/src/lib/components/ui/calendar/calendar-grid-body.svelte b/packages/svelte/src/lib/components/ui/calendar/calendar-grid-body.svelte new file mode 100644 index 00000000..8cd86dec --- /dev/null +++ b/packages/svelte/src/lib/components/ui/calendar/calendar-grid-body.svelte @@ -0,0 +1,12 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/calendar/calendar-grid-head.svelte b/packages/svelte/src/lib/components/ui/calendar/calendar-grid-head.svelte new file mode 100644 index 00000000..333edc47 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/calendar/calendar-grid-head.svelte @@ -0,0 +1,12 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/calendar/calendar-grid-row.svelte b/packages/svelte/src/lib/components/ui/calendar/calendar-grid-row.svelte new file mode 100644 index 00000000..90322369 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/calendar/calendar-grid-row.svelte @@ -0,0 +1,12 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/calendar/calendar-grid.svelte b/packages/svelte/src/lib/components/ui/calendar/calendar-grid.svelte new file mode 100644 index 00000000..5fbb18fd --- /dev/null +++ b/packages/svelte/src/lib/components/ui/calendar/calendar-grid.svelte @@ -0,0 +1,16 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/calendar/calendar-head-cell.svelte b/packages/svelte/src/lib/components/ui/calendar/calendar-head-cell.svelte new file mode 100644 index 00000000..131807e2 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/calendar/calendar-head-cell.svelte @@ -0,0 +1,19 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/calendar/calendar-header.svelte b/packages/svelte/src/lib/components/ui/calendar/calendar-header.svelte new file mode 100644 index 00000000..c39e955d --- /dev/null +++ b/packages/svelte/src/lib/components/ui/calendar/calendar-header.svelte @@ -0,0 +1,19 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/calendar/calendar-heading.svelte b/packages/svelte/src/lib/components/ui/calendar/calendar-heading.svelte new file mode 100644 index 00000000..a9b9810c --- /dev/null +++ b/packages/svelte/src/lib/components/ui/calendar/calendar-heading.svelte @@ -0,0 +1,16 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/calendar/calendar-month-select.svelte b/packages/svelte/src/lib/components/ui/calendar/calendar-month-select.svelte new file mode 100644 index 00000000..63e76f6c --- /dev/null +++ b/packages/svelte/src/lib/components/ui/calendar/calendar-month-select.svelte @@ -0,0 +1,48 @@ + + + + + {#snippet child({ props, monthItems, selectedMonthItem })} + + + {/snippet} + + diff --git a/packages/svelte/src/lib/components/ui/calendar/calendar-month.svelte b/packages/svelte/src/lib/components/ui/calendar/calendar-month.svelte new file mode 100644 index 00000000..7bdafe72 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/calendar/calendar-month.svelte @@ -0,0 +1,15 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/calendar/calendar-months.svelte b/packages/svelte/src/lib/components/ui/calendar/calendar-months.svelte new file mode 100644 index 00000000..f717a9d9 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/calendar/calendar-months.svelte @@ -0,0 +1,19 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/calendar/calendar-nav.svelte b/packages/svelte/src/lib/components/ui/calendar/calendar-nav.svelte new file mode 100644 index 00000000..27f33d79 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/calendar/calendar-nav.svelte @@ -0,0 +1,19 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/calendar/calendar-next-button.svelte b/packages/svelte/src/lib/components/ui/calendar/calendar-next-button.svelte new file mode 100644 index 00000000..cc5e8a90 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/calendar/calendar-next-button.svelte @@ -0,0 +1,36 @@ + + +{#snippet Fallback()} + +{/snippet} + + + {#if children} + {@render children?.()} + {:else} + {@render Fallback()} + {/if} + diff --git a/packages/svelte/src/lib/components/ui/calendar/calendar-prev-button.svelte b/packages/svelte/src/lib/components/ui/calendar/calendar-prev-button.svelte new file mode 100644 index 00000000..fc0dd6c0 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/calendar/calendar-prev-button.svelte @@ -0,0 +1,36 @@ + + +{#snippet Fallback()} + +{/snippet} + + + {#if children} + {@render children?.()} + {:else} + {@render Fallback()} + {/if} + diff --git a/packages/svelte/src/lib/components/ui/calendar/calendar-year-select.svelte b/packages/svelte/src/lib/components/ui/calendar/calendar-year-select.svelte new file mode 100644 index 00000000..bb580bed --- /dev/null +++ b/packages/svelte/src/lib/components/ui/calendar/calendar-year-select.svelte @@ -0,0 +1,47 @@ + + + + + {#snippet child({ props, yearItems, selectedYearItem })} + + + {/snippet} + + diff --git a/packages/svelte/src/lib/components/ui/calendar/calendar.svelte b/packages/svelte/src/lib/components/ui/calendar/calendar.svelte new file mode 100644 index 00000000..463d5713 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/calendar/calendar.svelte @@ -0,0 +1,115 @@ + + + + + {#snippet children({ months, weekdays })} + + + + + + {#each months as month, monthIndex (month)} + + + + + + + + {#each weekdays as weekday, i (i)} + + {weekday.slice(0, 2)} + + {/each} + + + + {#each month.weeks as weekDates (weekDates)} + + {#each weekDates as date (date)} + + {#if day} + {@render day({ + day: date, + outsideMonth: !isEqualMonth(date, month.value), + })} + {:else} + + {/if} + + {/each} + + {/each} + + + + {/each} + + {/snippet} + diff --git a/packages/svelte/src/lib/components/ui/calendar/index.ts b/packages/svelte/src/lib/components/ui/calendar/index.ts new file mode 100644 index 00000000..f3a16d2d --- /dev/null +++ b/packages/svelte/src/lib/components/ui/calendar/index.ts @@ -0,0 +1,40 @@ +import Root from "./calendar.svelte"; +import Cell from "./calendar-cell.svelte"; +import Day from "./calendar-day.svelte"; +import Grid from "./calendar-grid.svelte"; +import Header from "./calendar-header.svelte"; +import Months from "./calendar-months.svelte"; +import GridRow from "./calendar-grid-row.svelte"; +import Heading from "./calendar-heading.svelte"; +import GridBody from "./calendar-grid-body.svelte"; +import GridHead from "./calendar-grid-head.svelte"; +import HeadCell from "./calendar-head-cell.svelte"; +import NextButton from "./calendar-next-button.svelte"; +import PrevButton from "./calendar-prev-button.svelte"; +import MonthSelect from "./calendar-month-select.svelte"; +import YearSelect from "./calendar-year-select.svelte"; +import Month from "./calendar-month.svelte"; +import Nav from "./calendar-nav.svelte"; +import Caption from "./calendar-caption.svelte"; + +export { + Day, + Cell, + Grid, + Header, + Months, + GridRow, + Heading, + GridBody, + GridHead, + HeadCell, + NextButton, + PrevButton, + Nav, + Month, + YearSelect, + MonthSelect, + Caption, + // + Root as Calendar, +}; diff --git a/packages/svelte/src/lib/components/ui/card-content.svelte b/packages/svelte/src/lib/components/ui/card-content.svelte deleted file mode 100644 index 1924f45a..00000000 --- a/packages/svelte/src/lib/components/ui/card-content.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/packages/svelte/src/lib/components/ui/card-description.svelte b/packages/svelte/src/lib/components/ui/card-description.svelte deleted file mode 100644 index 8512a085..00000000 --- a/packages/svelte/src/lib/components/ui/card-description.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/packages/svelte/src/lib/components/ui/card-footer.svelte b/packages/svelte/src/lib/components/ui/card-footer.svelte deleted file mode 100644 index 43fe4092..00000000 --- a/packages/svelte/src/lib/components/ui/card-footer.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/packages/svelte/src/lib/components/ui/card-header.svelte b/packages/svelte/src/lib/components/ui/card-header.svelte deleted file mode 100644 index 242a0a2f..00000000 --- a/packages/svelte/src/lib/components/ui/card-header.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/packages/svelte/src/lib/components/ui/card-title.svelte b/packages/svelte/src/lib/components/ui/card-title.svelte deleted file mode 100644 index f42077e6..00000000 --- a/packages/svelte/src/lib/components/ui/card-title.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/packages/svelte/src/lib/components/ui/card.svelte b/packages/svelte/src/lib/components/ui/card.svelte deleted file mode 100644 index 26b77729..00000000 --- a/packages/svelte/src/lib/components/ui/card.svelte +++ /dev/null @@ -1,25 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/packages/svelte/src/lib/components/ui/card/card-action.svelte b/packages/svelte/src/lib/components/ui/card/card-action.svelte new file mode 100644 index 00000000..7c48844a --- /dev/null +++ b/packages/svelte/src/lib/components/ui/card/card-action.svelte @@ -0,0 +1,23 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/card/card-content.svelte b/packages/svelte/src/lib/components/ui/card/card-content.svelte new file mode 100644 index 00000000..88c9ea10 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/card/card-content.svelte @@ -0,0 +1,20 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/card/card-description.svelte b/packages/svelte/src/lib/components/ui/card/card-description.svelte new file mode 100644 index 00000000..9b20ac70 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/card/card-description.svelte @@ -0,0 +1,20 @@ + + +

    + {@render children?.()} +

    diff --git a/packages/svelte/src/lib/components/ui/card/card-footer.svelte b/packages/svelte/src/lib/components/ui/card/card-footer.svelte new file mode 100644 index 00000000..5653c733 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/card/card-footer.svelte @@ -0,0 +1,20 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/card/card-header.svelte b/packages/svelte/src/lib/components/ui/card/card-header.svelte new file mode 100644 index 00000000..7480597b --- /dev/null +++ b/packages/svelte/src/lib/components/ui/card/card-header.svelte @@ -0,0 +1,23 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/card/card-title.svelte b/packages/svelte/src/lib/components/ui/card/card-title.svelte new file mode 100644 index 00000000..8086046e --- /dev/null +++ b/packages/svelte/src/lib/components/ui/card/card-title.svelte @@ -0,0 +1,20 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/card/card.svelte b/packages/svelte/src/lib/components/ui/card/card.svelte new file mode 100644 index 00000000..3daebab2 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/card/card.svelte @@ -0,0 +1,25 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/card/index.ts b/packages/svelte/src/lib/components/ui/card/index.ts new file mode 100644 index 00000000..4d3fce48 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/card/index.ts @@ -0,0 +1,25 @@ +import Root from "./card.svelte"; +import Content from "./card-content.svelte"; +import Description from "./card-description.svelte"; +import Footer from "./card-footer.svelte"; +import Header from "./card-header.svelte"; +import Title from "./card-title.svelte"; +import Action from "./card-action.svelte"; + +export { + Root, + Content, + Description, + Footer, + Header, + Title, + Action, + // + Root as Card, + Content as CardContent, + Description as CardDescription, + Footer as CardFooter, + Header as CardHeader, + Title as CardTitle, + Action as CardAction, +}; diff --git a/packages/svelte/src/lib/components/ui/carousel/carousel-content.svelte b/packages/svelte/src/lib/components/ui/carousel/carousel-content.svelte new file mode 100644 index 00000000..84c71f8c --- /dev/null +++ b/packages/svelte/src/lib/components/ui/carousel/carousel-content.svelte @@ -0,0 +1,43 @@ + + +
    +
    + {@render children?.()} +
    +
    diff --git a/packages/svelte/src/lib/components/ui/carousel/carousel-item.svelte b/packages/svelte/src/lib/components/ui/carousel/carousel-item.svelte new file mode 100644 index 00000000..ebf16491 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/carousel/carousel-item.svelte @@ -0,0 +1,30 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/carousel/carousel-next.svelte b/packages/svelte/src/lib/components/ui/carousel/carousel-next.svelte new file mode 100644 index 00000000..981498d4 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/carousel/carousel-next.svelte @@ -0,0 +1,39 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/carousel/carousel-previous.svelte b/packages/svelte/src/lib/components/ui/carousel/carousel-previous.svelte new file mode 100644 index 00000000..414696ba --- /dev/null +++ b/packages/svelte/src/lib/components/ui/carousel/carousel-previous.svelte @@ -0,0 +1,39 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/carousel/carousel.svelte b/packages/svelte/src/lib/components/ui/carousel/carousel.svelte new file mode 100644 index 00000000..b3933b88 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/carousel/carousel.svelte @@ -0,0 +1,94 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/carousel/context.ts b/packages/svelte/src/lib/components/ui/carousel/context.ts new file mode 100644 index 00000000..a5fd74fb --- /dev/null +++ b/packages/svelte/src/lib/components/ui/carousel/context.ts @@ -0,0 +1,58 @@ +import type { WithElementRef } from "$lib/utils.js"; +import type { + EmblaCarouselSvelteType, + default as emblaCarouselSvelte, +} from "embla-carousel-svelte"; +import { getContext, hasContext, setContext } from "svelte"; +import type { HTMLAttributes } from "svelte/elements"; + +export type CarouselAPI = + NonNullable["on:emblaInit"]> extends ( + evt: CustomEvent + ) => void + ? CarouselAPI + : never; + +type EmblaCarouselConfig = NonNullable[1]>; + +export type CarouselOptions = EmblaCarouselConfig["options"]; +export type CarouselPlugins = EmblaCarouselConfig["plugins"]; + +//// + +export type CarouselProps = { + opts?: CarouselOptions; + plugins?: CarouselPlugins; + setApi?: (api: CarouselAPI | undefined) => void; + orientation?: "horizontal" | "vertical"; +} & WithElementRef>; + +const EMBLA_CAROUSEL_CONTEXT = Symbol("EMBLA_CAROUSEL_CONTEXT"); + +export type EmblaContext = { + api: CarouselAPI | undefined; + orientation: "horizontal" | "vertical"; + scrollNext: () => void; + scrollPrev: () => void; + canScrollNext: boolean; + canScrollPrev: boolean; + handleKeyDown: (e: KeyboardEvent) => void; + options: CarouselOptions; + plugins: CarouselPlugins; + onInit: (e: CustomEvent) => void; + scrollTo: (index: number, jump?: boolean) => void; + scrollSnaps: number[]; + selectedIndex: number; +}; + +export function setEmblaContext(config: EmblaContext): EmblaContext { + setContext(EMBLA_CAROUSEL_CONTEXT, config); + return config; +} + +export function getEmblaContext(name = "This component") { + if (!hasContext(EMBLA_CAROUSEL_CONTEXT)) { + throw new Error(`${name} must be used within a component`); + } + return getContext>(EMBLA_CAROUSEL_CONTEXT); +} diff --git a/packages/svelte/src/lib/components/ui/carousel/index.ts b/packages/svelte/src/lib/components/ui/carousel/index.ts new file mode 100644 index 00000000..957fc74a --- /dev/null +++ b/packages/svelte/src/lib/components/ui/carousel/index.ts @@ -0,0 +1,19 @@ +import Root from "./carousel.svelte"; +import Content from "./carousel-content.svelte"; +import Item from "./carousel-item.svelte"; +import Previous from "./carousel-previous.svelte"; +import Next from "./carousel-next.svelte"; + +export { + Root, + Content, + Item, + Previous, + Next, + // + Root as Carousel, + Content as CarouselContent, + Item as CarouselItem, + Previous as CarouselPrevious, + Next as CarouselNext, +}; diff --git a/packages/svelte/src/lib/components/ui/chart/chart-container.svelte b/packages/svelte/src/lib/components/ui/chart/chart-container.svelte new file mode 100644 index 00000000..1eb8e390 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/chart/chart-container.svelte @@ -0,0 +1,80 @@ + + +
    + + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/chart/chart-style.svelte b/packages/svelte/src/lib/components/ui/chart/chart-style.svelte new file mode 100644 index 00000000..ea1b3b20 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/chart/chart-style.svelte @@ -0,0 +1,37 @@ + + +{#if themeContents} + {#key id} + + {themeContents} + + {/key} +{/if} diff --git a/packages/svelte/src/lib/components/ui/chart/chart-tooltip.svelte b/packages/svelte/src/lib/components/ui/chart/chart-tooltip.svelte new file mode 100644 index 00000000..e0da9ca9 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/chart/chart-tooltip.svelte @@ -0,0 +1,184 @@ + + +{#snippet TooltipLabel()} + {#if formattedLabel} +
    + {#if typeof formattedLabel === "function"} + {@render formattedLabel()} + {:else} + {formattedLabel} + {/if} +
    + {/if} +{/snippet} + + +
    + {#if !nestLabel} + {@render TooltipLabel()} + {/if} +
    + {#each visibleSeries as item, i (item.key + i)} + {@const key = `${nameKey || item.key || item.label || "value"}`} + {@const itemConfig = getPayloadConfigFromPayload( + chart.config, + item, + key, + chartCtx.tooltip.data + )} + {@const indicatorColor = color || item.config?.color || item.color} +
    svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:size-2.5", + indicator === "dot" && "items-center" + )} + > + {#if formatter && item.value !== undefined && item.label} + {@render formatter({ + value: item.value, + name: item.label, + item, + index: i, + payload: visibleSeries, + })} + {:else} + {#if itemConfig?.icon} + + {:else if !hideIndicator} +
    + {/if} +
    +
    + {#if nestLabel} + {@render TooltipLabel()} + {/if} + + {itemConfig?.label || item.label} + +
    + {#if item.value !== undefined} + + {item.value.toLocaleString()} + + {/if} +
    + {/if} +
    + {/each} +
    +
    +
    diff --git a/packages/svelte/src/lib/components/ui/chart/chart-utils.ts b/packages/svelte/src/lib/components/ui/chart/chart-utils.ts new file mode 100644 index 00000000..a289e355 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/chart/chart-utils.ts @@ -0,0 +1,68 @@ +import type { Tooltip } from "layerchart"; +import { getContext, setContext, type Component, type Snippet } from "svelte"; + +export const THEMES = { light: "", dark: ".dark" } as const; + +export type ChartConfig = { + [k in string]: { + label?: string; + icon?: Component; + } & ( + | { color?: string; theme?: never } + | { color?: never; theme: Record } + ); +}; + +export type ExtractSnippetParams = T extends Snippet<[infer P]> ? P : never; + +export type TooltipPayload = Tooltip.TooltipSeries; + +// Helper to extract item config from a payload. +export function getPayloadConfigFromPayload( + config: ChartConfig, + payload: TooltipPayload, + key: string, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + data?: Record | null +) { + if (typeof payload !== "object" || payload === null) return undefined; + + const payloadConfig = + "config" in payload && typeof payload.config === "object" && payload.config !== null + ? payload.config + : undefined; + + let configLabelKey: string = key; + + if (payload.key === key) { + configLabelKey = payload.key; + } else if (payload.label === key) { + configLabelKey = payload.label; + } else if (key in payload && typeof payload[key as keyof typeof payload] === "string") { + configLabelKey = payload[key as keyof typeof payload] as string; + } else if ( + payloadConfig !== undefined && + key in payloadConfig && + typeof payloadConfig[key as keyof typeof payloadConfig] === "string" + ) { + configLabelKey = payloadConfig[key as keyof typeof payloadConfig] as string; + } else if (data != null && key in data && typeof data[key] === "string") { + configLabelKey = data[key] as string; + } + + return configLabelKey in config ? config[configLabelKey] : config[key as keyof typeof config]; +} + +type ChartContextValue = { + config: ChartConfig; +}; + +const chartContextKey = Symbol("chart-context"); + +export function setChartContext(value: ChartContextValue) { + return setContext(chartContextKey, value); +} + +export function useChart() { + return getContext(chartContextKey); +} diff --git a/packages/svelte/src/lib/components/ui/chart/index.ts b/packages/svelte/src/lib/components/ui/chart/index.ts new file mode 100644 index 00000000..f22375e0 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/chart/index.ts @@ -0,0 +1,6 @@ +import ChartContainer from "./chart-container.svelte"; +import ChartTooltip from "./chart-tooltip.svelte"; + +export { getPayloadConfigFromPayload, type ChartConfig } from "./chart-utils.js"; + +export { ChartContainer, ChartTooltip, ChartContainer as Container, ChartTooltip as Tooltip }; diff --git a/packages/svelte/src/lib/components/ui/checkbox.svelte b/packages/svelte/src/lib/components/ui/checkbox.svelte deleted file mode 100644 index 6b44cda3..00000000 --- a/packages/svelte/src/lib/components/ui/checkbox.svelte +++ /dev/null @@ -1,27 +0,0 @@ - - - -
    - {#if checked} - - {/if} -
    -
    diff --git a/packages/svelte/src/lib/components/ui/checkbox/checkbox.svelte b/packages/svelte/src/lib/components/ui/checkbox/checkbox.svelte new file mode 100644 index 00000000..6f282749 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/checkbox/checkbox.svelte @@ -0,0 +1,34 @@ + + + + {#snippet children({ checked, indeterminate })} + {#if checked} + + {:else if indeterminate} + + {/if} + {/snippet} + diff --git a/packages/svelte/src/lib/components/ui/checkbox/index.ts b/packages/svelte/src/lib/components/ui/checkbox/index.ts new file mode 100644 index 00000000..6d92d945 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/checkbox/index.ts @@ -0,0 +1,6 @@ +import Root from "./checkbox.svelte"; +export { + Root, + // + Root as Checkbox, +}; diff --git a/packages/svelte/src/lib/components/ui/collapsible/collapsible-content.svelte b/packages/svelte/src/lib/components/ui/collapsible/collapsible-content.svelte new file mode 100644 index 00000000..bdabb559 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/collapsible/collapsible-content.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/collapsible/collapsible-trigger.svelte b/packages/svelte/src/lib/components/ui/collapsible/collapsible-trigger.svelte new file mode 100644 index 00000000..ece7ad68 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/collapsible/collapsible-trigger.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/collapsible/collapsible.svelte b/packages/svelte/src/lib/components/ui/collapsible/collapsible.svelte new file mode 100644 index 00000000..39cdd4e4 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/collapsible/collapsible.svelte @@ -0,0 +1,11 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/collapsible/index.ts b/packages/svelte/src/lib/components/ui/collapsible/index.ts new file mode 100644 index 00000000..169b4791 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/collapsible/index.ts @@ -0,0 +1,13 @@ +import Root from "./collapsible.svelte"; +import Trigger from "./collapsible-trigger.svelte"; +import Content from "./collapsible-content.svelte"; + +export { + Root, + Content, + Trigger, + // + Root as Collapsible, + Content as CollapsibleContent, + Trigger as CollapsibleTrigger, +}; diff --git a/packages/svelte/src/lib/components/ui/command/command-dialog.svelte b/packages/svelte/src/lib/components/ui/command/command-dialog.svelte new file mode 100644 index 00000000..63b445c2 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/command/command-dialog.svelte @@ -0,0 +1,42 @@ + + + + + {title} + {description} + + + + + diff --git a/packages/svelte/src/lib/components/ui/command/command-empty.svelte b/packages/svelte/src/lib/components/ui/command/command-empty.svelte new file mode 100644 index 00000000..6726cd8d --- /dev/null +++ b/packages/svelte/src/lib/components/ui/command/command-empty.svelte @@ -0,0 +1,17 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/command/command-group.svelte b/packages/svelte/src/lib/components/ui/command/command-group.svelte new file mode 100644 index 00000000..f5da0df8 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/command/command-group.svelte @@ -0,0 +1,32 @@ + + + + {#if heading} + + {heading} + + {/if} + + diff --git a/packages/svelte/src/lib/components/ui/command/command-input.svelte b/packages/svelte/src/lib/components/ui/command/command-input.svelte new file mode 100644 index 00000000..1ca256ff --- /dev/null +++ b/packages/svelte/src/lib/components/ui/command/command-input.svelte @@ -0,0 +1,34 @@ + + +
    + + + {#snippet child({ props })} + + {/snippet} + + + + + +
    diff --git a/packages/svelte/src/lib/components/ui/command/command-item.svelte b/packages/svelte/src/lib/components/ui/command/command-item.svelte new file mode 100644 index 00000000..42468404 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/command/command-item.svelte @@ -0,0 +1,25 @@ + + + + {@render children?.()} + + diff --git a/packages/svelte/src/lib/components/ui/command/command-link-item.svelte b/packages/svelte/src/lib/components/ui/command/command-link-item.svelte new file mode 100644 index 00000000..ada6d2c4 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/command/command-link-item.svelte @@ -0,0 +1,20 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/command/command-list.svelte b/packages/svelte/src/lib/components/ui/command/command-list.svelte new file mode 100644 index 00000000..f663bd3e --- /dev/null +++ b/packages/svelte/src/lib/components/ui/command/command-list.svelte @@ -0,0 +1,17 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/command/command-loading.svelte b/packages/svelte/src/lib/components/ui/command/command-loading.svelte new file mode 100644 index 00000000..19dd2985 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/command/command-loading.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/command/command-separator.svelte b/packages/svelte/src/lib/components/ui/command/command-separator.svelte new file mode 100644 index 00000000..35c4c957 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/command/command-separator.svelte @@ -0,0 +1,17 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/command/command-shortcut.svelte b/packages/svelte/src/lib/components/ui/command/command-shortcut.svelte new file mode 100644 index 00000000..5322e6af --- /dev/null +++ b/packages/svelte/src/lib/components/ui/command/command-shortcut.svelte @@ -0,0 +1,20 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/command/command.svelte b/packages/svelte/src/lib/components/ui/command/command.svelte new file mode 100644 index 00000000..c814599b --- /dev/null +++ b/packages/svelte/src/lib/components/ui/command/command.svelte @@ -0,0 +1,25 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/command/index.ts b/packages/svelte/src/lib/components/ui/command/index.ts new file mode 100644 index 00000000..5435fbe8 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/command/index.ts @@ -0,0 +1,37 @@ +import Root from "./command.svelte"; +import Loading from "./command-loading.svelte"; +import Dialog from "./command-dialog.svelte"; +import Empty from "./command-empty.svelte"; +import Group from "./command-group.svelte"; +import Item from "./command-item.svelte"; +import Input from "./command-input.svelte"; +import List from "./command-list.svelte"; +import Separator from "./command-separator.svelte"; +import Shortcut from "./command-shortcut.svelte"; +import LinkItem from "./command-link-item.svelte"; + +export { + Root, + Dialog, + Empty, + Group, + Item, + LinkItem, + Input, + List, + Separator, + Shortcut, + Loading, + // + Root as Command, + Dialog as CommandDialog, + Empty as CommandEmpty, + Group as CommandGroup, + Item as CommandItem, + LinkItem as CommandLinkItem, + Input as CommandInput, + List as CommandList, + Separator as CommandSeparator, + Shortcut as CommandShortcut, + Loading as CommandLoading, +}; diff --git a/packages/svelte/src/lib/components/ui/context-menu/context-menu-checkbox-item.svelte b/packages/svelte/src/lib/components/ui/context-menu/context-menu-checkbox-item.svelte new file mode 100644 index 00000000..9ffcfbe7 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/context-menu/context-menu-checkbox-item.svelte @@ -0,0 +1,41 @@ + + + + {#snippet children({ checked })} + + {#if checked} + + {/if} + + {@render childrenProp?.()} + {/snippet} + diff --git a/packages/svelte/src/lib/components/ui/context-menu/context-menu-content.svelte b/packages/svelte/src/lib/components/ui/context-menu/context-menu-content.svelte new file mode 100644 index 00000000..5f324200 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/context-menu/context-menu-content.svelte @@ -0,0 +1,28 @@ + + + + + diff --git a/packages/svelte/src/lib/components/ui/context-menu/context-menu-group-heading.svelte b/packages/svelte/src/lib/components/ui/context-menu/context-menu-group-heading.svelte new file mode 100644 index 00000000..0c0f4599 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/context-menu/context-menu-group-heading.svelte @@ -0,0 +1,21 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/context-menu/context-menu-group.svelte b/packages/svelte/src/lib/components/ui/context-menu/context-menu-group.svelte new file mode 100644 index 00000000..c7c1e06a --- /dev/null +++ b/packages/svelte/src/lib/components/ui/context-menu/context-menu-group.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/context-menu/context-menu-item.svelte b/packages/svelte/src/lib/components/ui/context-menu/context-menu-item.svelte new file mode 100644 index 00000000..fccba283 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/context-menu/context-menu-item.svelte @@ -0,0 +1,27 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/context-menu/context-menu-label.svelte b/packages/svelte/src/lib/components/ui/context-menu/context-menu-label.svelte new file mode 100644 index 00000000..8b9e9c69 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/context-menu/context-menu-label.svelte @@ -0,0 +1,24 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/context-menu/context-menu-portal.svelte b/packages/svelte/src/lib/components/ui/context-menu/context-menu-portal.svelte new file mode 100644 index 00000000..96b1e3e4 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/context-menu/context-menu-portal.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/context-menu/context-menu-radio-group.svelte b/packages/svelte/src/lib/components/ui/context-menu/context-menu-radio-group.svelte new file mode 100644 index 00000000..964cb55f --- /dev/null +++ b/packages/svelte/src/lib/components/ui/context-menu/context-menu-radio-group.svelte @@ -0,0 +1,16 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/context-menu/context-menu-radio-item.svelte b/packages/svelte/src/lib/components/ui/context-menu/context-menu-radio-item.svelte new file mode 100644 index 00000000..ad4e56f9 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/context-menu/context-menu-radio-item.svelte @@ -0,0 +1,35 @@ + + + + {#snippet children({ checked })} + + {#if checked} + + {/if} + + {@render childrenProp?.({ checked })} + {/snippet} + diff --git a/packages/svelte/src/lib/components/ui/context-menu/context-menu-separator.svelte b/packages/svelte/src/lib/components/ui/context-menu/context-menu-separator.svelte new file mode 100644 index 00000000..7f5b237b --- /dev/null +++ b/packages/svelte/src/lib/components/ui/context-menu/context-menu-separator.svelte @@ -0,0 +1,17 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/context-menu/context-menu-shortcut.svelte b/packages/svelte/src/lib/components/ui/context-menu/context-menu-shortcut.svelte new file mode 100644 index 00000000..3305abc2 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/context-menu/context-menu-shortcut.svelte @@ -0,0 +1,20 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/context-menu/context-menu-sub-content.svelte b/packages/svelte/src/lib/components/ui/context-menu/context-menu-sub-content.svelte new file mode 100644 index 00000000..fa46397d --- /dev/null +++ b/packages/svelte/src/lib/components/ui/context-menu/context-menu-sub-content.svelte @@ -0,0 +1,17 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/context-menu/context-menu-sub-trigger.svelte b/packages/svelte/src/lib/components/ui/context-menu/context-menu-sub-trigger.svelte new file mode 100644 index 00000000..af016c55 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/context-menu/context-menu-sub-trigger.svelte @@ -0,0 +1,29 @@ + + + + {@render children?.()} + + diff --git a/packages/svelte/src/lib/components/ui/context-menu/context-menu-sub.svelte b/packages/svelte/src/lib/components/ui/context-menu/context-menu-sub.svelte new file mode 100644 index 00000000..a03827b9 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/context-menu/context-menu-sub.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/context-menu/context-menu-trigger.svelte b/packages/svelte/src/lib/components/ui/context-menu/context-menu-trigger.svelte new file mode 100644 index 00000000..f6a1542f --- /dev/null +++ b/packages/svelte/src/lib/components/ui/context-menu/context-menu-trigger.svelte @@ -0,0 +1,17 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/context-menu/context-menu.svelte b/packages/svelte/src/lib/components/ui/context-menu/context-menu.svelte new file mode 100644 index 00000000..cfaefb39 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/context-menu/context-menu.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/context-menu/index.ts b/packages/svelte/src/lib/components/ui/context-menu/index.ts new file mode 100644 index 00000000..cbeaee10 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/context-menu/index.ts @@ -0,0 +1,52 @@ +import Root from "./context-menu.svelte"; +import Sub from "./context-menu-sub.svelte"; +import Portal from "./context-menu-portal.svelte"; +import Trigger from "./context-menu-trigger.svelte"; +import Group from "./context-menu-group.svelte"; +import RadioGroup from "./context-menu-radio-group.svelte"; +import Item from "./context-menu-item.svelte"; +import GroupHeading from "./context-menu-group-heading.svelte"; +import Content from "./context-menu-content.svelte"; +import Shortcut from "./context-menu-shortcut.svelte"; +import RadioItem from "./context-menu-radio-item.svelte"; +import Separator from "./context-menu-separator.svelte"; +import SubContent from "./context-menu-sub-content.svelte"; +import SubTrigger from "./context-menu-sub-trigger.svelte"; +import CheckboxItem from "./context-menu-checkbox-item.svelte"; +import Label from "./context-menu-label.svelte"; + +export { + Root, + Sub, + Portal, + Item, + GroupHeading, + Label, + Group, + Trigger, + Content, + Shortcut, + Separator, + RadioItem, + SubContent, + SubTrigger, + RadioGroup, + CheckboxItem, + // + Root as ContextMenu, + Sub as ContextMenuSub, + Portal as ContextMenuPortal, + Item as ContextMenuItem, + GroupHeading as ContextMenuGroupHeading, + Group as ContextMenuGroup, + Content as ContextMenuContent, + Trigger as ContextMenuTrigger, + Shortcut as ContextMenuShortcut, + RadioItem as ContextMenuRadioItem, + Separator as ContextMenuSeparator, + RadioGroup as ContextMenuRadioGroup, + SubContent as ContextMenuSubContent, + SubTrigger as ContextMenuSubTrigger, + CheckboxItem as ContextMenuCheckboxItem, + Label as ContextMenuLabel, +}; diff --git a/packages/svelte/src/lib/components/ui/data-table/data-table.svelte.ts b/packages/svelte/src/lib/components/ui/data-table/data-table.svelte.ts new file mode 100644 index 00000000..f3c30a7f --- /dev/null +++ b/packages/svelte/src/lib/components/ui/data-table/data-table.svelte.ts @@ -0,0 +1,142 @@ +import { + type RowData, + type TableOptions, + type TableOptionsResolved, + type TableState, + type Updater, + createTable, +} from "@tanstack/table-core"; + +/** + * Creates a reactive TanStack table object for Svelte. + * @param options Table options to create the table with. + * @returns A reactive table object. + * @example + * ```svelte + * + * + * + * + * {#each table.getHeaderGroups() as headerGroup} + * + * {#each headerGroup.headers as header} + * + * {/each} + * + * {/each} + * + * + *
    + * + *
    + * ``` + */ +export function createSvelteTable(options: TableOptions) { + const resolvedOptions: TableOptionsResolved = mergeObjects( + { + state: {}, + onStateChange() {}, + renderFallbackValue: null, + mergeOptions: ( + defaultOptions: TableOptions, + options: Partial> + ) => { + return mergeObjects(defaultOptions, options); + }, + }, + options + ); + + const table = createTable(resolvedOptions); + let state = $state(table.initialState); + + function updateOptions() { + table.setOptions(() => { + return mergeObjects(resolvedOptions, options, { + state: mergeObjects(state, options.state || {}), + + onStateChange: (updater: Updater) => { + if (updater instanceof Function) state = updater(state); + else state = mergeObjects(state, updater); + + options.onStateChange?.(updater); + }, + }); + }); + } + + updateOptions(); + + $effect.pre(() => { + updateOptions(); + }); + + return table; +} + +type MaybeThunk = T | (() => T | null | undefined); +type Intersection = (T extends [infer H, ...infer R] + ? H & Intersection + : unknown) & {}; + +/** + * Lazily merges several objects (or thunks) while preserving + * getter semantics from every source. + * + * Proxy-based to avoid known WebKit recursion issue. + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function mergeObjects[]>( + ...sources: Sources +): Intersection<{ [K in keyof Sources]: Sources[K] }> { + const resolve = (src: MaybeThunk): T | undefined => + typeof src === "function" ? (src() ?? undefined) : src; + + const findSourceWithKey = (key: PropertyKey) => { + for (let i = sources.length - 1; i >= 0; i--) { + const obj = resolve(sources[i]); + if (obj && key in obj) return obj; + } + return undefined; + }; + + return new Proxy(Object.create(null), { + get(_, key) { + const src = findSourceWithKey(key); + + return src?.[key as never]; + }, + + has(_, key) { + return !!findSourceWithKey(key); + }, + + ownKeys(): (string | symbol)[] { + // eslint-disable-next-line svelte/prefer-svelte-reactivity + const all = new Set(); + for (const s of sources) { + const obj = resolve(s); + if (obj) { + for (const k of Reflect.ownKeys(obj) as (string | symbol)[]) { + all.add(k); + } + } + } + return [...all]; + }, + + getOwnPropertyDescriptor(_, key) { + const src = findSourceWithKey(key); + if (!src) return undefined; + return { + configurable: true, + enumerable: true, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + value: (src as any)[key], + writable: true, + }; + }, + }) as Intersection<{ [K in keyof Sources]: Sources[K] }>; +} diff --git a/packages/svelte/src/lib/components/ui/data-table/flex-render.svelte b/packages/svelte/src/lib/components/ui/data-table/flex-render.svelte new file mode 100644 index 00000000..ac82a581 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/data-table/flex-render.svelte @@ -0,0 +1,40 @@ + + +{#if typeof content === "string"} + {content} +{:else if content instanceof Function} + + + {@const result = content(context as any)} + {#if result instanceof RenderComponentConfig} + {@const { component: Component, props } = result} + + {:else if result instanceof RenderSnippetConfig} + {@const { snippet, params } = result} + {@render snippet({ ...params, attach })} + {:else} + {result} + {/if} +{/if} diff --git a/packages/svelte/src/lib/components/ui/data-table/index.ts b/packages/svelte/src/lib/components/ui/data-table/index.ts new file mode 100644 index 00000000..5f4e77ea --- /dev/null +++ b/packages/svelte/src/lib/components/ui/data-table/index.ts @@ -0,0 +1,3 @@ +export { default as FlexRender } from "./flex-render.svelte"; +export { renderComponent, renderSnippet } from "./render-helpers.js"; +export { createSvelteTable } from "./data-table.svelte.js"; diff --git a/packages/svelte/src/lib/components/ui/data-table/render-helpers.ts b/packages/svelte/src/lib/components/ui/data-table/render-helpers.ts new file mode 100644 index 00000000..fa036d62 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/data-table/render-helpers.ts @@ -0,0 +1,111 @@ +import type { Component, ComponentProps, Snippet } from "svelte"; + +/** + * A helper class to make it easy to identify Svelte components in + * `columnDef.cell` and `columnDef.header` properties. + * + * > NOTE: This class should only be used internally by the adapter. If you're + * reading this and you don't know what this is for, you probably don't need it. + * + * @example + * ```svelte + * {@const result = content(context as any)} + * {#if result instanceof RenderComponentConfig} + * {@const { component: Component, props } = result} + * + * {/if} + * ``` + */ +export class RenderComponentConfig { + component: TComponent; + props: ComponentProps | Record; + constructor( + component: TComponent, + props: ComponentProps | Record = {} + ) { + this.component = component; + this.props = props; + } +} + +/** + * A helper class to make it easy to identify Svelte Snippets in `columnDef.cell` and `columnDef.header` properties. + * + * > NOTE: This class should only be used internally by the adapter. If you're + * reading this and you don't know what this is for, you probably don't need it. + * + * @example + * ```svelte + * {@const result = content(context as any)} + * {#if result instanceof RenderSnippetConfig} + * {@const { snippet, params } = result} + * {@render snippet(params)} + * {/if} + * ``` + */ +export class RenderSnippetConfig { + snippet: Snippet<[TProps]>; + params: TProps; + constructor(snippet: Snippet<[TProps]>, params: TProps) { + this.snippet = snippet; + this.params = params; + } +} + +/** + * A helper function to help create cells from Svelte components through ColumnDef's `cell` and `header` properties. + * + * This is only to be used with Svelte Components - use `renderSnippet` for Svelte Snippets. + * + * @param component A Svelte component + * @param props The props to pass to `component` + * @returns A `RenderComponentConfig` object that helps svelte-table know how to render the header/cell component. + * @example + * ```ts + * // +page.svelte + * const defaultColumns = [ + * columnHelper.accessor('name', { + * header: header => renderComponent(SortHeader, { label: 'Name', header }), + * }), + * columnHelper.accessor('state', { + * header: header => renderComponent(SortHeader, { label: 'State', header }), + * }), + * ] + * ``` + * @see {@link https://tanstack.com/table/latest/docs/guide/column-defs} + */ +export function renderComponent< + // eslint-disable-next-line @typescript-eslint/no-explicit-any + T extends Component, + Props extends ComponentProps, +>(component: T, props: Props = {} as Props) { + return new RenderComponentConfig(component, props); +} + +/** + * A helper function to help create cells from Svelte Snippets through ColumnDef's `cell` and `header` properties. + * + * The snippet must only take one parameter. + * + * This is only to be used with Snippets - use `renderComponent` for Svelte Components. + * + * @param snippet + * @param params + * @returns - A `RenderSnippetConfig` object that helps svelte-table know how to render the header/cell snippet. + * @example + * ```ts + * // +page.svelte + * const defaultColumns = [ + * columnHelper.accessor('name', { + * cell: cell => renderSnippet(nameSnippet, { name: cell.row.name }), + * }), + * columnHelper.accessor('state', { + * cell: cell => renderSnippet(stateSnippet, { state: cell.row.state }), + * }), + * ] + * ``` + * @see {@link https://tanstack.com/table/latest/docs/guide/column-defs} + */ +export function renderSnippet(snippet: Snippet<[TProps]>, params: TProps = {} as TProps) { + return new RenderSnippetConfig(snippet, params); +} diff --git a/packages/svelte/src/lib/components/ui/dialog-close.svelte b/packages/svelte/src/lib/components/ui/dialog-close.svelte deleted file mode 100644 index da1bfc4d..00000000 --- a/packages/svelte/src/lib/components/ui/dialog-close.svelte +++ /dev/null @@ -1,14 +0,0 @@ - - - - {@render children?.()} - diff --git a/packages/svelte/src/lib/components/ui/dialog-content.svelte b/packages/svelte/src/lib/components/ui/dialog-content.svelte deleted file mode 100644 index ec950a68..00000000 --- a/packages/svelte/src/lib/components/ui/dialog-content.svelte +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - {@render children?.()} - - - Close - - - diff --git a/packages/svelte/src/lib/components/ui/dialog-description.svelte b/packages/svelte/src/lib/components/ui/dialog-description.svelte deleted file mode 100644 index 91cc537c..00000000 --- a/packages/svelte/src/lib/components/ui/dialog-description.svelte +++ /dev/null @@ -1,19 +0,0 @@ - - - - {@render children?.()} - diff --git a/packages/svelte/src/lib/components/ui/dialog-footer.svelte b/packages/svelte/src/lib/components/ui/dialog-footer.svelte deleted file mode 100644 index 797977be..00000000 --- a/packages/svelte/src/lib/components/ui/dialog-footer.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/packages/svelte/src/lib/components/ui/dialog-header.svelte b/packages/svelte/src/lib/components/ui/dialog-header.svelte deleted file mode 100644 index ec4c619e..00000000 --- a/packages/svelte/src/lib/components/ui/dialog-header.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - -
    - {@render children?.()} -
    diff --git a/packages/svelte/src/lib/components/ui/dialog-title.svelte b/packages/svelte/src/lib/components/ui/dialog-title.svelte deleted file mode 100644 index 68f0a23d..00000000 --- a/packages/svelte/src/lib/components/ui/dialog-title.svelte +++ /dev/null @@ -1,19 +0,0 @@ - - - - {@render children?.()} - diff --git a/packages/svelte/src/lib/components/ui/dialog-trigger.svelte b/packages/svelte/src/lib/components/ui/dialog-trigger.svelte deleted file mode 100644 index 98687307..00000000 --- a/packages/svelte/src/lib/components/ui/dialog-trigger.svelte +++ /dev/null @@ -1,14 +0,0 @@ - - - - {@render children?.()} - diff --git a/packages/svelte/src/lib/components/ui/dialog.svelte b/packages/svelte/src/lib/components/ui/dialog.svelte deleted file mode 100644 index d9d8ee25..00000000 --- a/packages/svelte/src/lib/components/ui/dialog.svelte +++ /dev/null @@ -1,14 +0,0 @@ - - - - {@render children?.()} - diff --git a/packages/svelte/src/lib/components/ui/dialog/dialog-close.svelte b/packages/svelte/src/lib/components/ui/dialog/dialog-close.svelte new file mode 100644 index 00000000..de68f2f0 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dialog/dialog-close.svelte @@ -0,0 +1,11 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/dialog/dialog-content.svelte b/packages/svelte/src/lib/components/ui/dialog/dialog-content.svelte new file mode 100644 index 00000000..f26e4957 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dialog/dialog-content.svelte @@ -0,0 +1,46 @@ + + + + + + {@render children?.()} + {#if showCloseButton} + + + Close + + {/if} + + diff --git a/packages/svelte/src/lib/components/ui/dialog/dialog-description.svelte b/packages/svelte/src/lib/components/ui/dialog/dialog-description.svelte new file mode 100644 index 00000000..0102d910 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dialog/dialog-description.svelte @@ -0,0 +1,17 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/dialog/dialog-footer.svelte b/packages/svelte/src/lib/components/ui/dialog/dialog-footer.svelte new file mode 100644 index 00000000..e23160ae --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dialog/dialog-footer.svelte @@ -0,0 +1,32 @@ + + +
    + {@render children?.()} + {#if showCloseButton} + + {#snippet child({ props })} + + {/snippet} + + {/if} +
    diff --git a/packages/svelte/src/lib/components/ui/dialog/dialog-header.svelte b/packages/svelte/src/lib/components/ui/dialog/dialog-header.svelte new file mode 100644 index 00000000..c3ce8a24 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dialog/dialog-header.svelte @@ -0,0 +1,20 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/dialog/dialog-overlay.svelte b/packages/svelte/src/lib/components/ui/dialog/dialog-overlay.svelte new file mode 100644 index 00000000..dfe191ce --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dialog/dialog-overlay.svelte @@ -0,0 +1,17 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/dialog/dialog-portal.svelte b/packages/svelte/src/lib/components/ui/dialog/dialog-portal.svelte new file mode 100644 index 00000000..ccfa79ca --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dialog/dialog-portal.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/dialog/dialog-title.svelte b/packages/svelte/src/lib/components/ui/dialog/dialog-title.svelte new file mode 100644 index 00000000..fbba0c2e --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dialog/dialog-title.svelte @@ -0,0 +1,17 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/dialog/dialog-trigger.svelte b/packages/svelte/src/lib/components/ui/dialog/dialog-trigger.svelte new file mode 100644 index 00000000..589ee0c3 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dialog/dialog-trigger.svelte @@ -0,0 +1,11 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/dialog/dialog.svelte b/packages/svelte/src/lib/components/ui/dialog/dialog.svelte new file mode 100644 index 00000000..211672c6 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dialog/dialog.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/dialog/index.ts b/packages/svelte/src/lib/components/ui/dialog/index.ts new file mode 100644 index 00000000..076cef52 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dialog/index.ts @@ -0,0 +1,34 @@ +import Root from "./dialog.svelte"; +import Portal from "./dialog-portal.svelte"; +import Title from "./dialog-title.svelte"; +import Footer from "./dialog-footer.svelte"; +import Header from "./dialog-header.svelte"; +import Overlay from "./dialog-overlay.svelte"; +import Content from "./dialog-content.svelte"; +import Description from "./dialog-description.svelte"; +import Trigger from "./dialog-trigger.svelte"; +import Close from "./dialog-close.svelte"; + +export { + Root, + Title, + Portal, + Footer, + Header, + Trigger, + Overlay, + Content, + Description, + Close, + // + Root as Dialog, + Title as DialogTitle, + Portal as DialogPortal, + Footer as DialogFooter, + Header as DialogHeader, + Trigger as DialogTrigger, + Overlay as DialogOverlay, + Content as DialogContent, + Description as DialogDescription, + Close as DialogClose, +}; diff --git a/packages/svelte/src/lib/components/ui/drawer/drawer-close.svelte b/packages/svelte/src/lib/components/ui/drawer/drawer-close.svelte new file mode 100644 index 00000000..95c24796 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/drawer/drawer-close.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/drawer/drawer-content.svelte b/packages/svelte/src/lib/components/ui/drawer/drawer-content.svelte new file mode 100644 index 00000000..c5b6cb9f --- /dev/null +++ b/packages/svelte/src/lib/components/ui/drawer/drawer-content.svelte @@ -0,0 +1,33 @@ + + + + + + + {@render children?.()} + + diff --git a/packages/svelte/src/lib/components/ui/drawer/drawer-description.svelte b/packages/svelte/src/lib/components/ui/drawer/drawer-description.svelte new file mode 100644 index 00000000..2763a1aa --- /dev/null +++ b/packages/svelte/src/lib/components/ui/drawer/drawer-description.svelte @@ -0,0 +1,17 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/drawer/drawer-footer.svelte b/packages/svelte/src/lib/components/ui/drawer/drawer-footer.svelte new file mode 100644 index 00000000..56a1fc6e --- /dev/null +++ b/packages/svelte/src/lib/components/ui/drawer/drawer-footer.svelte @@ -0,0 +1,20 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/drawer/drawer-header.svelte b/packages/svelte/src/lib/components/ui/drawer/drawer-header.svelte new file mode 100644 index 00000000..861f956d --- /dev/null +++ b/packages/svelte/src/lib/components/ui/drawer/drawer-header.svelte @@ -0,0 +1,20 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/drawer/drawer-nested.svelte b/packages/svelte/src/lib/components/ui/drawer/drawer-nested.svelte new file mode 100644 index 00000000..834af946 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/drawer/drawer-nested.svelte @@ -0,0 +1,12 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/drawer/drawer-overlay.svelte b/packages/svelte/src/lib/components/ui/drawer/drawer-overlay.svelte new file mode 100644 index 00000000..84df1e8b --- /dev/null +++ b/packages/svelte/src/lib/components/ui/drawer/drawer-overlay.svelte @@ -0,0 +1,17 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/drawer/drawer-portal.svelte b/packages/svelte/src/lib/components/ui/drawer/drawer-portal.svelte new file mode 100644 index 00000000..5a0dd740 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/drawer/drawer-portal.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/drawer/drawer-title.svelte b/packages/svelte/src/lib/components/ui/drawer/drawer-title.svelte new file mode 100644 index 00000000..fc3649b0 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/drawer/drawer-title.svelte @@ -0,0 +1,17 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/drawer/drawer-trigger.svelte b/packages/svelte/src/lib/components/ui/drawer/drawer-trigger.svelte new file mode 100644 index 00000000..f1877d8e --- /dev/null +++ b/packages/svelte/src/lib/components/ui/drawer/drawer-trigger.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/drawer/drawer.svelte b/packages/svelte/src/lib/components/ui/drawer/drawer.svelte new file mode 100644 index 00000000..0cb57ff9 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/drawer/drawer.svelte @@ -0,0 +1,12 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/drawer/index.ts b/packages/svelte/src/lib/components/ui/drawer/index.ts new file mode 100644 index 00000000..1656cac5 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/drawer/index.ts @@ -0,0 +1,38 @@ +import Root from "./drawer.svelte"; +import Content from "./drawer-content.svelte"; +import Description from "./drawer-description.svelte"; +import Overlay from "./drawer-overlay.svelte"; +import Footer from "./drawer-footer.svelte"; +import Header from "./drawer-header.svelte"; +import Title from "./drawer-title.svelte"; +import NestedRoot from "./drawer-nested.svelte"; +import Close from "./drawer-close.svelte"; +import Trigger from "./drawer-trigger.svelte"; +import Portal from "./drawer-portal.svelte"; + +export { + Root, + NestedRoot, + Content, + Description, + Overlay, + Footer, + Header, + Title, + Trigger, + Portal, + Close, + + // + Root as Drawer, + NestedRoot as DrawerNestedRoot, + Content as DrawerContent, + Description as DrawerDescription, + Overlay as DrawerOverlay, + Footer as DrawerFooter, + Header as DrawerHeader, + Title as DrawerTitle, + Trigger as DrawerTrigger, + Portal as DrawerPortal, + Close as DrawerClose, +}; diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu-content.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu-content.svelte deleted file mode 100644 index 8f2981e4..00000000 --- a/packages/svelte/src/lib/components/ui/dropdown-menu-content.svelte +++ /dev/null @@ -1,26 +0,0 @@ - - - - - {@render children?.()} - - diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu-item.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu-item.svelte deleted file mode 100644 index 91f44e40..00000000 --- a/packages/svelte/src/lib/components/ui/dropdown-menu-item.svelte +++ /dev/null @@ -1,24 +0,0 @@ - - - - {@render children?.()} - diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu-label.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu-label.svelte deleted file mode 100644 index e9e39db1..00000000 --- a/packages/svelte/src/lib/components/ui/dropdown-menu-label.svelte +++ /dev/null @@ -1,24 +0,0 @@ - - - - {@render children?.()} - diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu-separator.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu-separator.svelte deleted file mode 100644 index fc99e0e1..00000000 --- a/packages/svelte/src/lib/components/ui/dropdown-menu-separator.svelte +++ /dev/null @@ -1,12 +0,0 @@ - - - diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu-shortcut.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu-shortcut.svelte deleted file mode 100644 index 0a121f34..00000000 --- a/packages/svelte/src/lib/components/ui/dropdown-menu-shortcut.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - - - {@render children?.()} - diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu-trigger.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu-trigger.svelte deleted file mode 100644 index ba4c37f5..00000000 --- a/packages/svelte/src/lib/components/ui/dropdown-menu-trigger.svelte +++ /dev/null @@ -1,14 +0,0 @@ - - - - {@render children?.()} - diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu.svelte deleted file mode 100644 index 84477d63..00000000 --- a/packages/svelte/src/lib/components/ui/dropdown-menu.svelte +++ /dev/null @@ -1,14 +0,0 @@ - - - - {@render children?.()} - diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte new file mode 100644 index 00000000..e0e19718 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte @@ -0,0 +1,16 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte new file mode 100644 index 00000000..a81b48d0 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte @@ -0,0 +1,44 @@ + + + + {#snippet children({ checked, indeterminate })} + + {#if indeterminate} + + {:else if checked} + + {/if} + + {@render childrenProp?.()} + {/snippet} + diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte new file mode 100644 index 00000000..5ec35dae --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte @@ -0,0 +1,31 @@ + + + + + diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte new file mode 100644 index 00000000..433540fd --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte @@ -0,0 +1,22 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-group.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-group.svelte new file mode 100644 index 00000000..aca1f7bd --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-group.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte new file mode 100644 index 00000000..374e08f1 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte @@ -0,0 +1,27 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte new file mode 100644 index 00000000..e0c534fe --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte @@ -0,0 +1,24 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-portal.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-portal.svelte new file mode 100644 index 00000000..274cfef7 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-portal.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte new file mode 100644 index 00000000..189aef40 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte @@ -0,0 +1,16 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte new file mode 100644 index 00000000..c8aa07b1 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte @@ -0,0 +1,34 @@ + + + + {#snippet children({ checked })} + + {#if checked} + + {/if} + + {@render childrenProp?.({ checked })} + {/snippet} + diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte new file mode 100644 index 00000000..90f1b6f1 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte @@ -0,0 +1,17 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte new file mode 100644 index 00000000..ed7cc85a --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte @@ -0,0 +1,20 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte new file mode 100644 index 00000000..b5750d4d --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte @@ -0,0 +1,17 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte new file mode 100644 index 00000000..fab0275d --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte @@ -0,0 +1,29 @@ + + + + {@render children?.()} + + diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-sub.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-sub.svelte new file mode 100644 index 00000000..f0445813 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-sub.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-trigger.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-trigger.svelte new file mode 100644 index 00000000..cb053444 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu-trigger.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu.svelte b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu.svelte new file mode 100644 index 00000000..cb4bc621 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu/dropdown-menu.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/dropdown-menu/index.ts b/packages/svelte/src/lib/components/ui/dropdown-menu/index.ts new file mode 100644 index 00000000..7850c6a3 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropdown-menu/index.ts @@ -0,0 +1,54 @@ +import Root from "./dropdown-menu.svelte"; +import Sub from "./dropdown-menu-sub.svelte"; +import CheckboxGroup from "./dropdown-menu-checkbox-group.svelte"; +import CheckboxItem from "./dropdown-menu-checkbox-item.svelte"; +import Content from "./dropdown-menu-content.svelte"; +import Group from "./dropdown-menu-group.svelte"; +import Item from "./dropdown-menu-item.svelte"; +import Label from "./dropdown-menu-label.svelte"; +import RadioGroup from "./dropdown-menu-radio-group.svelte"; +import RadioItem from "./dropdown-menu-radio-item.svelte"; +import Separator from "./dropdown-menu-separator.svelte"; +import Shortcut from "./dropdown-menu-shortcut.svelte"; +import Trigger from "./dropdown-menu-trigger.svelte"; +import SubContent from "./dropdown-menu-sub-content.svelte"; +import SubTrigger from "./dropdown-menu-sub-trigger.svelte"; +import GroupHeading from "./dropdown-menu-group-heading.svelte"; +import Portal from "./dropdown-menu-portal.svelte"; + +export { + CheckboxGroup, + CheckboxItem, + Content, + Portal, + Root as DropdownMenu, + CheckboxGroup as DropdownMenuCheckboxGroup, + CheckboxItem as DropdownMenuCheckboxItem, + Content as DropdownMenuContent, + Portal as DropdownMenuPortal, + Group as DropdownMenuGroup, + Item as DropdownMenuItem, + Label as DropdownMenuLabel, + RadioGroup as DropdownMenuRadioGroup, + RadioItem as DropdownMenuRadioItem, + Separator as DropdownMenuSeparator, + Shortcut as DropdownMenuShortcut, + Sub as DropdownMenuSub, + SubContent as DropdownMenuSubContent, + SubTrigger as DropdownMenuSubTrigger, + Trigger as DropdownMenuTrigger, + GroupHeading as DropdownMenuGroupHeading, + Group, + GroupHeading, + Item, + Label, + RadioGroup, + RadioItem, + Root, + Separator, + Shortcut, + Sub, + SubContent, + SubTrigger, + Trigger, +}; diff --git a/packages/svelte/src/lib/components/ui/empty-state/empty-state-description.svelte b/packages/svelte/src/lib/components/ui/empty-state/empty-state-description.svelte new file mode 100644 index 00000000..2e1c77ef --- /dev/null +++ b/packages/svelte/src/lib/components/ui/empty-state/empty-state-description.svelte @@ -0,0 +1,10 @@ + + +

    + {@render children?.()} +

    diff --git a/packages/svelte/src/lib/components/ui/empty-state/empty-state-icon.svelte b/packages/svelte/src/lib/components/ui/empty-state/empty-state-icon.svelte new file mode 100644 index 00000000..40ec5839 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/empty-state/empty-state-icon.svelte @@ -0,0 +1,15 @@ + + +
    svg]:h-8 [&>svg]:w-8', + className + )} +> + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/empty-state/empty-state-title.svelte b/packages/svelte/src/lib/components/ui/empty-state/empty-state-title.svelte new file mode 100644 index 00000000..888d1903 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/empty-state/empty-state-title.svelte @@ -0,0 +1,10 @@ + + +

    + {@render children?.()} +

    diff --git a/packages/svelte/src/lib/components/ui/empty-state/empty-state-variants.ts b/packages/svelte/src/lib/components/ui/empty-state/empty-state-variants.ts new file mode 100644 index 00000000..5df56472 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/empty-state/empty-state-variants.ts @@ -0,0 +1,15 @@ +import { cva } from 'class-variance-authority' + +export const emptyStateVariants = cva( + 'flex flex-col items-center justify-center text-center border-3 border-foreground bg-card p-8 shadow-[4px_4px_0px_hsl(var(--shadow-color))]', + { + variants: { + size: { + sm: 'p-6 gap-3', + default: 'p-8 gap-4', + lg: 'p-12 gap-6', + }, + }, + defaultVariants: { size: 'default' }, + } +) diff --git a/packages/svelte/src/lib/components/ui/empty-state/empty-state.svelte b/packages/svelte/src/lib/components/ui/empty-state/empty-state.svelte new file mode 100644 index 00000000..55bbe1ff --- /dev/null +++ b/packages/svelte/src/lib/components/ui/empty-state/empty-state.svelte @@ -0,0 +1,14 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/empty-state/index.ts b/packages/svelte/src/lib/components/ui/empty-state/index.ts new file mode 100644 index 00000000..b367d242 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/empty-state/index.ts @@ -0,0 +1,17 @@ +import Root from "./empty-state.svelte"; +import Icon from "./empty-state-icon.svelte"; +import Title from "./empty-state-title.svelte"; +import Description from "./empty-state-description.svelte"; +export { emptyStateVariants } from "./empty-state-variants.js"; + +export { + Root, + Icon, + Title, + Description, + // + Root as EmptyState, + Icon as EmptyStateIcon, + Title as EmptyStateTitle, + Description as EmptyStateDescription, +}; diff --git a/packages/svelte/src/lib/components/ui/empty/empty-content.svelte b/packages/svelte/src/lib/components/ui/empty/empty-content.svelte new file mode 100644 index 00000000..607b9f72 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/empty/empty-content.svelte @@ -0,0 +1,23 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/empty/empty-description.svelte b/packages/svelte/src/lib/components/ui/empty/empty-description.svelte new file mode 100644 index 00000000..024228b8 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/empty/empty-description.svelte @@ -0,0 +1,23 @@ + + +
    a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4", + className + )} + {...restProps} +> + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/empty/empty-header.svelte b/packages/svelte/src/lib/components/ui/empty/empty-header.svelte new file mode 100644 index 00000000..7112f666 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/empty/empty-header.svelte @@ -0,0 +1,20 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/empty/empty-media.svelte b/packages/svelte/src/lib/components/ui/empty/empty-media.svelte new file mode 100644 index 00000000..95819a4e --- /dev/null +++ b/packages/svelte/src/lib/components/ui/empty/empty-media.svelte @@ -0,0 +1,41 @@ + + + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/empty/empty-title.svelte b/packages/svelte/src/lib/components/ui/empty/empty-title.svelte new file mode 100644 index 00000000..4ab45eba --- /dev/null +++ b/packages/svelte/src/lib/components/ui/empty/empty-title.svelte @@ -0,0 +1,20 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/empty/empty.svelte b/packages/svelte/src/lib/components/ui/empty/empty.svelte new file mode 100644 index 00000000..3aef0624 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/empty/empty.svelte @@ -0,0 +1,23 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/empty/index.ts b/packages/svelte/src/lib/components/ui/empty/index.ts new file mode 100644 index 00000000..ae4c106e --- /dev/null +++ b/packages/svelte/src/lib/components/ui/empty/index.ts @@ -0,0 +1,22 @@ +import Root from "./empty.svelte"; +import Header from "./empty-header.svelte"; +import Media from "./empty-media.svelte"; +import Title from "./empty-title.svelte"; +import Description from "./empty-description.svelte"; +import Content from "./empty-content.svelte"; + +export { + Root, + Header, + Media, + Title, + Description, + Content, + // + Root as Empty, + Header as EmptyHeader, + Media as EmptyMedia, + Title as EmptyTitle, + Description as EmptyDescription, + Content as EmptyContent, +}; diff --git a/packages/svelte/src/lib/components/ui/field/field-content.svelte b/packages/svelte/src/lib/components/ui/field/field-content.svelte new file mode 100644 index 00000000..1545c435 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/field/field-content.svelte @@ -0,0 +1,20 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/field/field-description.svelte b/packages/svelte/src/lib/components/ui/field/field-description.svelte new file mode 100644 index 00000000..75183660 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/field/field-description.svelte @@ -0,0 +1,25 @@ + + +

    a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4", + className + )} + {...restProps} +> + {@render children?.()} +

    diff --git a/packages/svelte/src/lib/components/ui/field/field-error.svelte b/packages/svelte/src/lib/components/ui/field/field-error.svelte new file mode 100644 index 00000000..2381b36e --- /dev/null +++ b/packages/svelte/src/lib/components/ui/field/field-error.svelte @@ -0,0 +1,58 @@ + + +{#if hasContent} + +{/if} diff --git a/packages/svelte/src/lib/components/ui/field/field-group.svelte b/packages/svelte/src/lib/components/ui/field/field-group.svelte new file mode 100644 index 00000000..37951951 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/field/field-group.svelte @@ -0,0 +1,23 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/field/field-label.svelte b/packages/svelte/src/lib/components/ui/field/field-label.svelte new file mode 100644 index 00000000..da58659b --- /dev/null +++ b/packages/svelte/src/lib/components/ui/field/field-label.svelte @@ -0,0 +1,25 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/field/field-legend.svelte b/packages/svelte/src/lib/components/ui/field/field-legend.svelte new file mode 100644 index 00000000..75bf8d20 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/field/field-legend.svelte @@ -0,0 +1,24 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/field/field-separator.svelte b/packages/svelte/src/lib/components/ui/field/field-separator.svelte new file mode 100644 index 00000000..5aa77393 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/field/field-separator.svelte @@ -0,0 +1,35 @@ + + +
    + + {#if children} + + {@render children()} + + {/if} +
    diff --git a/packages/svelte/src/lib/components/ui/field/field-set.svelte b/packages/svelte/src/lib/components/ui/field/field-set.svelte new file mode 100644 index 00000000..27ee3307 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/field/field-set.svelte @@ -0,0 +1,20 @@ + + +
    [data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3 flex flex-col", className)} + {...restProps} +> + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/field/field-title.svelte b/packages/svelte/src/lib/components/ui/field/field-title.svelte new file mode 100644 index 00000000..30dec2cd --- /dev/null +++ b/packages/svelte/src/lib/components/ui/field/field-title.svelte @@ -0,0 +1,20 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/field/field.svelte b/packages/svelte/src/lib/components/ui/field/field.svelte new file mode 100644 index 00000000..03d23c02 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/field/field.svelte @@ -0,0 +1,47 @@ + + + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/field/index.ts b/packages/svelte/src/lib/components/ui/field/index.ts new file mode 100644 index 00000000..a644a956 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/field/index.ts @@ -0,0 +1,33 @@ +import Field from "./field.svelte"; +import Set from "./field-set.svelte"; +import Legend from "./field-legend.svelte"; +import Group from "./field-group.svelte"; +import Content from "./field-content.svelte"; +import Label from "./field-label.svelte"; +import Title from "./field-title.svelte"; +import Description from "./field-description.svelte"; +import Separator from "./field-separator.svelte"; +import Error from "./field-error.svelte"; + +export { + Field, + Set, + Legend, + Group, + Content, + Label, + Title, + Description, + Separator, + Error, + // + Set as FieldSet, + Legend as FieldLegend, + Group as FieldGroup, + Content as FieldContent, + Label as FieldLabel, + Title as FieldTitle, + Description as FieldDescription, + Separator as FieldSeparator, + Error as FieldError, +}; diff --git a/packages/svelte/src/lib/components/ui/form/form-button.svelte b/packages/svelte/src/lib/components/ui/form/form-button.svelte new file mode 100644 index 00000000..48d39369 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/form/form-button.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/input-group/input-group-input.svelte b/packages/svelte/src/lib/components/ui/input-group/input-group-input.svelte new file mode 100644 index 00000000..316c0cb2 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/input-group/input-group-input.svelte @@ -0,0 +1,20 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/input-group/input-group-text.svelte b/packages/svelte/src/lib/components/ui/input-group/input-group-text.svelte new file mode 100644 index 00000000..77907c65 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/input-group/input-group-text.svelte @@ -0,0 +1,19 @@ + + + + {@render children?.()} + diff --git a/packages/svelte/src/lib/components/ui/input-group/input-group-textarea.svelte b/packages/svelte/src/lib/components/ui/input-group/input-group-textarea.svelte new file mode 100644 index 00000000..9fbabe6d --- /dev/null +++ b/packages/svelte/src/lib/components/ui/input-group/input-group-textarea.svelte @@ -0,0 +1,20 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/textarea/index.ts b/packages/svelte/src/lib/components/ui/textarea/index.ts new file mode 100644 index 00000000..ace797a8 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/textarea/index.ts @@ -0,0 +1,7 @@ +import Root from "./textarea.svelte"; + +export { + Root, + // + Root as Textarea, +}; diff --git a/packages/svelte/src/lib/components/ui/textarea/textarea.svelte b/packages/svelte/src/lib/components/ui/textarea/textarea.svelte new file mode 100644 index 00000000..771fd622 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/textarea/textarea.svelte @@ -0,0 +1,23 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/timeline/index.ts b/packages/svelte/src/lib/components/ui/timeline/index.ts new file mode 100644 index 00000000..169017dc --- /dev/null +++ b/packages/svelte/src/lib/components/ui/timeline/index.ts @@ -0,0 +1,34 @@ +import Root from "./timeline.svelte"; +import Item from "./timeline-item.svelte"; +import Dot from "./timeline-dot.svelte"; +import Connector from "./timeline-connector.svelte"; +import Content from "./timeline-content.svelte"; +import Header from "./timeline-header.svelte"; +import Time from "./timeline-time.svelte"; +import Title from "./timeline-title.svelte"; +import Description from "./timeline-description.svelte"; +import Card from "./timeline-card.svelte"; + +export { + Root, + Item, + Dot, + Connector, + Content, + Header, + Time, + Title, + Description, + Card, + // + Root as Timeline, + Item as TimelineItem, + Dot as TimelineDot, + Connector as TimelineConnector, + Content as TimelineContent, + Header as TimelineHeader, + Time as TimelineTime, + Title as TimelineTitle, + Description as TimelineDescription, + Card as TimelineCard, +}; diff --git a/packages/svelte/src/lib/components/ui/timeline/timeline-card.svelte b/packages/svelte/src/lib/components/ui/timeline/timeline-card.svelte new file mode 100644 index 00000000..bf5ff855 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/timeline/timeline-card.svelte @@ -0,0 +1,15 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/timeline/timeline-connector.svelte b/packages/svelte/src/lib/components/ui/timeline/timeline-connector.svelte new file mode 100644 index 00000000..ba3d33fb --- /dev/null +++ b/packages/svelte/src/lib/components/ui/timeline/timeline-connector.svelte @@ -0,0 +1,12 @@ + + +
    diff --git a/packages/svelte/src/lib/components/ui/timeline/timeline-content.svelte b/packages/svelte/src/lib/components/ui/timeline/timeline-content.svelte new file mode 100644 index 00000000..9aadd515 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/timeline/timeline-content.svelte @@ -0,0 +1,10 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/timeline/timeline-description.svelte b/packages/svelte/src/lib/components/ui/timeline/timeline-description.svelte new file mode 100644 index 00000000..0d747fd8 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/timeline/timeline-description.svelte @@ -0,0 +1,10 @@ + + +

    + {@render children?.()} +

    diff --git a/packages/svelte/src/lib/components/ui/timeline/timeline-dot.svelte b/packages/svelte/src/lib/components/ui/timeline/timeline-dot.svelte new file mode 100644 index 00000000..ab1840a5 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/timeline/timeline-dot.svelte @@ -0,0 +1,22 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/timeline/timeline-header.svelte b/packages/svelte/src/lib/components/ui/timeline/timeline-header.svelte new file mode 100644 index 00000000..df1a0a10 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/timeline/timeline-header.svelte @@ -0,0 +1,10 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/timeline/timeline-item.svelte b/packages/svelte/src/lib/components/ui/timeline/timeline-item.svelte new file mode 100644 index 00000000..9a2eee35 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/timeline/timeline-item.svelte @@ -0,0 +1,10 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/timeline/timeline-time.svelte b/packages/svelte/src/lib/components/ui/timeline/timeline-time.svelte new file mode 100644 index 00000000..480364d2 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/timeline/timeline-time.svelte @@ -0,0 +1,10 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/timeline/timeline-title.svelte b/packages/svelte/src/lib/components/ui/timeline/timeline-title.svelte new file mode 100644 index 00000000..f5345c70 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/timeline/timeline-title.svelte @@ -0,0 +1,10 @@ + + +

    + {@render children?.()} +

    diff --git a/packages/svelte/src/lib/components/ui/timeline/timeline.svelte b/packages/svelte/src/lib/components/ui/timeline/timeline.svelte new file mode 100644 index 00000000..3cdbc79c --- /dev/null +++ b/packages/svelte/src/lib/components/ui/timeline/timeline.svelte @@ -0,0 +1,10 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/toggle-group/index.ts b/packages/svelte/src/lib/components/ui/toggle-group/index.ts new file mode 100644 index 00000000..12b14b96 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/toggle-group/index.ts @@ -0,0 +1,10 @@ +import Root from "./toggle-group.svelte"; +import Item from "./toggle-group-item.svelte"; + +export { + Root, + Item, + // + Root as ToggleGroup, + Item as ToggleGroupItem, +}; diff --git a/packages/svelte/src/lib/components/ui/toggle-group/toggle-group-item.svelte b/packages/svelte/src/lib/components/ui/toggle-group/toggle-group-item.svelte new file mode 100644 index 00000000..f685ae31 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/toggle-group/toggle-group-item.svelte @@ -0,0 +1,35 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/toggle-group/toggle-group.svelte b/packages/svelte/src/lib/components/ui/toggle-group/toggle-group.svelte new file mode 100644 index 00000000..98b062bb --- /dev/null +++ b/packages/svelte/src/lib/components/ui/toggle-group/toggle-group.svelte @@ -0,0 +1,75 @@ + + + + + + diff --git a/packages/svelte/src/lib/components/ui/toggle-variants.ts b/packages/svelte/src/lib/components/ui/toggle-variants.ts deleted file mode 100644 index a274e02c..00000000 --- a/packages/svelte/src/lib/components/ui/toggle-variants.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { cva } from 'class-variance-authority' - -export const toggleVariants = cva( - 'inline-flex items-center justify-center text-sm font-bold uppercase tracking-wide transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border-3 border-foreground shadow-[4px_4px_0px_hsl(var(--shadow-color))] [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 gap-2 hover:translate-x-[4px] hover:translate-y-[4px] hover:shadow-none active:translate-x-[4px] active:translate-y-[4px] active:shadow-none data-[state=on]:bg-primary data-[state=on]:text-primary-foreground data-[state=on]:translate-x-[4px] data-[state=on]:translate-y-[4px] data-[state=on]:shadow-none', - { - variants: { - variant: { - default: 'bg-transparent hover:bg-muted', - outline: 'bg-background hover:bg-muted', - }, - size: { - default: 'h-10 px-3 min-w-10', - sm: 'h-9 px-2.5 min-w-9', - lg: 'h-11 px-5 min-w-11', - }, - }, - defaultVariants: { - variant: 'default', - size: 'default', - }, - } -) diff --git a/packages/svelte/src/lib/components/ui/toggle.svelte b/packages/svelte/src/lib/components/ui/toggle.svelte deleted file mode 100644 index 74b5f4a1..00000000 --- a/packages/svelte/src/lib/components/ui/toggle.svelte +++ /dev/null @@ -1,31 +0,0 @@ - - - - {@render children?.()} - diff --git a/packages/svelte/src/lib/components/ui/toggle/index.ts b/packages/svelte/src/lib/components/ui/toggle/index.ts new file mode 100644 index 00000000..8cb2936f --- /dev/null +++ b/packages/svelte/src/lib/components/ui/toggle/index.ts @@ -0,0 +1,13 @@ +import Root from "./toggle.svelte"; +export { + toggleVariants, + type ToggleSize, + type ToggleVariant, + type ToggleVariants, +} from "./toggle.svelte"; + +export { + Root, + // + Root as Toggle, +}; diff --git a/packages/svelte/src/lib/components/ui/toggle/toggle.svelte b/packages/svelte/src/lib/components/ui/toggle/toggle.svelte new file mode 100644 index 00000000..8e50317e --- /dev/null +++ b/packages/svelte/src/lib/components/ui/toggle/toggle.svelte @@ -0,0 +1,51 @@ + + + + + diff --git a/packages/svelte/src/lib/components/ui/tooltip/index.ts b/packages/svelte/src/lib/components/ui/tooltip/index.ts new file mode 100644 index 00000000..17186042 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/tooltip/index.ts @@ -0,0 +1,19 @@ +import Root from "./tooltip.svelte"; +import Trigger from "./tooltip-trigger.svelte"; +import Content from "./tooltip-content.svelte"; +import Provider from "./tooltip-provider.svelte"; +import Portal from "./tooltip-portal.svelte"; + +export { + Root, + Trigger, + Content, + Provider, + Portal, + // + Root as Tooltip, + Content as TooltipContent, + Trigger as TooltipTrigger, + Provider as TooltipProvider, + Portal as TooltipPortal, +}; diff --git a/packages/svelte/src/lib/components/ui/tooltip/tooltip-content.svelte b/packages/svelte/src/lib/components/ui/tooltip/tooltip-content.svelte new file mode 100644 index 00000000..08090a7f --- /dev/null +++ b/packages/svelte/src/lib/components/ui/tooltip/tooltip-content.svelte @@ -0,0 +1,52 @@ + + + + + {@render children?.()} + + {#snippet child({ props })} +
    + {/snippet} +
    +
    +
    diff --git a/packages/svelte/src/lib/components/ui/tooltip/tooltip-portal.svelte b/packages/svelte/src/lib/components/ui/tooltip/tooltip-portal.svelte new file mode 100644 index 00000000..d234f7d7 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/tooltip/tooltip-portal.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/tooltip/tooltip-provider.svelte b/packages/svelte/src/lib/components/ui/tooltip/tooltip-provider.svelte new file mode 100644 index 00000000..6dba9a67 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/tooltip/tooltip-provider.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/tooltip/tooltip-trigger.svelte b/packages/svelte/src/lib/components/ui/tooltip/tooltip-trigger.svelte new file mode 100644 index 00000000..1acdaa47 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/tooltip/tooltip-trigger.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/tooltip/tooltip.svelte b/packages/svelte/src/lib/components/ui/tooltip/tooltip.svelte new file mode 100644 index 00000000..0b0f9cef --- /dev/null +++ b/packages/svelte/src/lib/components/ui/tooltip/tooltip.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/src/lib/hooks/is-mobile.svelte.ts b/packages/svelte/src/lib/hooks/is-mobile.svelte.ts new file mode 100644 index 00000000..4829c00b --- /dev/null +++ b/packages/svelte/src/lib/hooks/is-mobile.svelte.ts @@ -0,0 +1,9 @@ +import { MediaQuery } from "svelte/reactivity"; + +const DEFAULT_MOBILE_BREAKPOINT = 768; + +export class IsMobile extends MediaQuery { + constructor(breakpoint: number = DEFAULT_MOBILE_BREAKPOINT) { + super(`max-width: ${breakpoint - 1}px`); + } +} diff --git a/packages/svelte/src/lib/index.ts b/packages/svelte/src/lib/index.ts index 7a4f6505..19ab1340 100644 --- a/packages/svelte/src/lib/index.ts +++ b/packages/svelte/src/lib/index.ts @@ -1,68 +1,173 @@ -export { default as Button } from './components/ui/button.svelte' -export { default as Badge } from './components/ui/badge.svelte' - -export { default as Card } from './components/ui/card.svelte' -export { default as CardHeader } from './components/ui/card-header.svelte' -export { default as CardTitle } from './components/ui/card-title.svelte' -export { default as CardDescription } from './components/ui/card-description.svelte' -export { default as CardContent } from './components/ui/card-content.svelte' -export { default as CardFooter } from './components/ui/card-footer.svelte' - -export { default as Input } from './components/ui/input.svelte' -export { default as Label } from './components/ui/label.svelte' -export { default as Textarea } from './components/ui/textarea.svelte' -export { default as Separator } from './components/ui/separator.svelte' -export { default as Skeleton } from './components/ui/skeleton.svelte' - -export { default as Alert } from './components/ui/alert.svelte' -export { default as AlertTitle } from './components/ui/alert-title.svelte' -export { default as AlertDescription } from './components/ui/alert-description.svelte' -export { default as AlertAction } from './components/ui/alert-action.svelte' - -export { default as Avatar } from './components/ui/avatar.svelte' -export { default as AvatarImage } from './components/ui/avatar-image.svelte' -export { default as AvatarFallback } from './components/ui/avatar-fallback.svelte' - -export { default as Checkbox } from './components/ui/checkbox.svelte' -export { default as Switch } from './components/ui/switch.svelte' -export { default as Progress } from './components/ui/progress.svelte' -export { default as Toggle } from './components/ui/toggle.svelte' -export { toggleVariants } from './components/ui/toggle-variants.js' - -export { default as Accordion } from './components/ui/accordion.svelte' -export { default as AccordionItem } from './components/ui/accordion-item.svelte' -export { default as AccordionTrigger } from './components/ui/accordion-trigger.svelte' -export { default as AccordionContent } from './components/ui/accordion-content.svelte' - -export { default as Tabs } from './components/ui/tabs.svelte' -export { default as TabsList } from './components/ui/tabs-list.svelte' -export { default as TabsTrigger } from './components/ui/tabs-trigger.svelte' -export { default as TabsContent } from './components/ui/tabs-content.svelte' - -export { default as Dialog } from './components/ui/dialog.svelte' -export { default as DialogTrigger } from './components/ui/dialog-trigger.svelte' -export { default as DialogContent } from './components/ui/dialog-content.svelte' -export { default as DialogHeader } from './components/ui/dialog-header.svelte' -export { default as DialogFooter } from './components/ui/dialog-footer.svelte' -export { default as DialogTitle } from './components/ui/dialog-title.svelte' -export { default as DialogDescription } from './components/ui/dialog-description.svelte' -export { default as DialogClose } from './components/ui/dialog-close.svelte' - -export { default as Select } from './components/ui/select.svelte' -export { default as SelectTrigger } from './components/ui/select-trigger.svelte' -export { default as SelectValue } from './components/ui/select-value.svelte' -export { default as SelectContent } from './components/ui/select-content.svelte' -export { default as SelectItem } from './components/ui/select-item.svelte' -export { default as SelectGroup } from './components/ui/select-group.svelte' -export { default as SelectLabel } from './components/ui/select-label.svelte' -export { default as SelectSeparator } from './components/ui/select-separator.svelte' - -export { default as DropdownMenu } from './components/ui/dropdown-menu.svelte' -export { default as DropdownMenuTrigger } from './components/ui/dropdown-menu-trigger.svelte' -export { default as DropdownMenuContent } from './components/ui/dropdown-menu-content.svelte' -export { default as DropdownMenuItem } from './components/ui/dropdown-menu-item.svelte' -export { default as DropdownMenuLabel } from './components/ui/dropdown-menu-label.svelte' -export { default as DropdownMenuSeparator } from './components/ui/dropdown-menu-separator.svelte' -export { default as DropdownMenuShortcut } from './components/ui/dropdown-menu-shortcut.svelte' +// Accordion +export { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from './components/ui/accordion/index.js' +// Alert +export { Alert, AlertTitle, AlertDescription, AlertAction, alertVariants, type AlertVariant } from './components/ui/alert/index.js' + +// Alert Dialog +export { AlertDialog, AlertDialogTrigger, AlertDialogContent, AlertDialogHeader, AlertDialogFooter, AlertDialogTitle, AlertDialogDescription, AlertDialogAction, AlertDialogCancel } from './components/ui/alert-dialog/index.js' + +// Aspect Ratio +export { AspectRatio } from './components/ui/aspect-ratio/index.js' + +// Avatar +export { Avatar, AvatarImage, AvatarFallback } from './components/ui/avatar/index.js' + +// Badge +export { Badge, badgeVariants, type BadgeVariant } from './components/ui/badge/index.js' + +// Breadcrumb +export { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator, BreadcrumbEllipsis } from './components/ui/breadcrumb/index.js' + +// Button +export { Button, buttonVariants, type ButtonVariant, type ButtonSize, type ButtonProps } from './components/ui/button/index.js' + +// Button Group +export { ButtonGroup } from './components/ui/button-group/index.js' + +// Calendar +export { Calendar } from './components/ui/calendar/index.js' + +// Card +export { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from './components/ui/card/index.js' + +// Carousel +export { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious } from './components/ui/carousel/index.js' + +// Checkbox +export { Checkbox } from './components/ui/checkbox/index.js' + +// Collapsible +export { Collapsible, CollapsibleTrigger, CollapsibleContent } from './components/ui/collapsible/index.js' + +// Command +export { Command, CommandDialog, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandSeparator, CommandShortcut } from './components/ui/command/index.js' + +// Context Menu +export { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem, ContextMenuSeparator, ContextMenuLabel, ContextMenuShortcut, ContextMenuCheckboxItem, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSub, ContextMenuSubTrigger, ContextMenuSubContent } from './components/ui/context-menu/index.js' + +// Dialog +export { Dialog, DialogTrigger, DialogPortal, DialogClose, DialogOverlay, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription } from './components/ui/dialog/index.js' + +// Drawer +export { Drawer, DrawerTrigger, DrawerPortal, DrawerClose, DrawerOverlay, DrawerContent, DrawerHeader, DrawerFooter, DrawerTitle, DrawerDescription } from './components/ui/drawer/index.js' + +// Dropdown Menu +export { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuLabel, DropdownMenuShortcut, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent } from './components/ui/dropdown-menu/index.js' + +// Empty (shadcn-svelte) +export { Empty, EmptyHeader, EmptyMedia, EmptyTitle, EmptyDescription, EmptyContent } from './components/ui/empty/index.js' + +// Empty State (BoldKit) +export { EmptyState, EmptyStateIcon, EmptyStateTitle, EmptyStateDescription, emptyStateVariants } from './components/ui/empty-state/index.js' + +// Field +export { Field } from './components/ui/field/index.js' + +// Form +export { FormField, FormControl, FormLabel, FormDescription, FormFieldErrors, FormFieldset, FormLegend, FormElementField, FormButton } from './components/ui/form/index.js' + +// Hover Card +export { HoverCard, HoverCardTrigger, HoverCardContent } from './components/ui/hover-card/index.js' + +// Input +export { Input } from './components/ui/input/index.js' + +// Input Group +export { InputGroup } from './components/ui/input-group/index.js' + +// Input OTP +export { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator } from './components/ui/input-otp/index.js' + +// Kbd +export { Kbd, KbdGroup } from './components/ui/kbd/index.js' + +// Label +export { Label } from './components/ui/label/index.js' + +// Layered Card (BoldKit) +export { LayeredCard, LayeredCardHeader, LayeredCardTitle, LayeredCardDescription, LayeredCardContent, LayeredCardFooter, layeredCardVariants } from './components/ui/layered-card/index.js' + +// Marquee (BoldKit) +export { Marquee, MarqueeItem, MarqueeSeparator } from './components/ui/marquee/index.js' + +// Menubar +export { Menubar, MenubarMenu, MenubarTrigger, MenubarContent, MenubarItem, MenubarSeparator, MenubarLabel, MenubarShortcut, MenubarGroup, MenubarSub, MenubarSubTrigger, MenubarSubContent, MenubarCheckboxItem, MenubarRadioGroup, MenubarRadioItem } from './components/ui/menubar/index.js' + +// Native Select +export { NativeSelect } from './components/ui/native-select/index.js' + +// Navigation Menu +export { NavigationMenuRoot as NavigationMenu, NavigationMenuList, NavigationMenuItem, NavigationMenuContent, NavigationMenuTrigger, NavigationMenuLink, NavigationMenuIndicator, NavigationMenuViewport } from './components/ui/navigation-menu/index.js' + +// Pagination +export { Pagination, PaginationContent, PaginationItem, PaginationLink, PaginationPrevious, PaginationNext, PaginationEllipsis } from './components/ui/pagination/index.js' + +// Popover +export { Popover, PopoverTrigger, PopoverContent } from './components/ui/popover/index.js' + +// Progress +export { Progress } from './components/ui/progress/index.js' + +// Radio Group +export { RadioGroup, RadioGroupItem } from './components/ui/radio-group/index.js' + +// Range Calendar +export { RangeCalendar } from './components/ui/range-calendar/index.js' + +// Resizable +export { ResizablePaneGroup, ResizablePane, ResizableHandle } from './components/ui/resizable/index.js' + +// Scroll Area +export { ScrollArea, ScrollAreaScrollbar } from './components/ui/scroll-area/index.js' + +// Select +export { Select, SelectTrigger, SelectContent, SelectItem, SelectLabel, SelectSeparator, SelectGroup } from './components/ui/select/index.js' + +// Separator +export { Separator } from './components/ui/separator/index.js' + +// Sheet +export { Sheet, SheetTrigger, SheetPortal, SheetClose, SheetOverlay, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription } from './components/ui/sheet/index.js' + +// Skeleton +export { Skeleton } from './components/ui/skeleton/index.js' + +// Slider +export { Slider } from './components/ui/slider/index.js' + +// Sonner +export { Toaster } from './components/ui/sonner/index.js' + +// Spinner +export { Spinner } from './components/ui/spinner/index.js' + +// Sticker (BoldKit) +export { Sticker, stickerVariants } from './components/ui/sticker/index.js' + +// Switch +export { Switch } from './components/ui/switch/index.js' + +// Table +export { Table, TableHeader, TableBody, TableFooter, TableRow, TableHead, TableCell, TableCaption } from './components/ui/table/index.js' + +// Tabs +export { Tabs, TabsList, TabsTrigger, TabsContent } from './components/ui/tabs/index.js' + +// Textarea +export { Textarea } from './components/ui/textarea/index.js' + +// Timeline (BoldKit) +export { Timeline, TimelineItem, TimelineDot, TimelineConnector, TimelineContent, TimelineHeader, TimelineTime, TimelineTitle, TimelineDescription, TimelineCard } from './components/ui/timeline/index.js' + +// Toggle +export { Toggle, toggleVariants, type ToggleVariant } from './components/ui/toggle/index.js' + +// Toggle Group +export { ToggleGroup, ToggleGroupItem } from './components/ui/toggle-group/index.js' + +// Tooltip +export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from './components/ui/tooltip/index.js' + +// Utilities export { cn } from './utils.js' diff --git a/packages/svelte/src/lib/utils.ts b/packages/svelte/src/lib/utils.ts index d32b0fe6..f3257066 100644 --- a/packages/svelte/src/lib/utils.ts +++ b/packages/svelte/src/lib/utils.ts @@ -4,3 +4,11 @@ import { twMerge } from 'tailwind-merge' export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)) } + +export type WithElementRef = T & { + ref?: E | null +} + +export type WithoutChild = T extends { child?: unknown } ? Omit : T +export type WithoutChildren = T extends { children?: unknown } ? Omit : T +export type WithoutChildrenOrChild = WithoutChildren> From 275fa953694454a467d79da8a0343eedfcf87c1c Mon Sep 17 00:00:00 2001 From: Max Farrell Date: Wed, 13 May 2026 22:10:10 -0500 Subject: [PATCH 3/6] feat(svelte): add missing components to reach Vue surface area parity Port Rating, StatCard, Stamp, StickyNote, Stepper (6 parts), TagInput, Dropzone, FileList, MathCurveBackground/Loader/Progress, CarouselDots, ComboboxTrigger/MultiTrigger, KbdCombo, EmptyStateActions/Illustration/Preset. Add stampVariants + stickyNoteVariants to sticker-variants.ts and copy math-curves.ts engine from Vue. Export Sonner alias, Stamp, StickyNote. svelte-check: 0 errors, 4 non-blocking warnings. Co-Authored-By: Claude Sonnet 4.6 --- .../ui/carousel/carousel-dots.svelte | 26 ++ .../src/lib/components/ui/carousel/index.ts | 3 + .../ui/combobox/combobox-multi-trigger.svelte | 44 ++ .../ui/combobox/combobox-trigger.svelte | 30 ++ .../src/lib/components/ui/combobox/index.ts | 9 + .../components/ui/dropzone/dropzone.svelte | 125 ++++++ .../src/lib/components/ui/dropzone/index.ts | 7 + .../ui/empty-state/empty-state-actions.svelte | 11 + .../empty-state-illustration.svelte | 17 + .../ui/empty-state/empty-state-preset.svelte | 79 ++++ .../lib/components/ui/empty-state/index.ts | 10 + .../components/ui/file-list/file-list.svelte | 82 ++++ .../src/lib/components/ui/file-list/index.ts | 7 + .../svelte/src/lib/components/ui/kbd/index.ts | 3 + .../lib/components/ui/kbd/kbd-combo.svelte | 44 ++ .../src/lib/components/ui/math-curve/index.ts | 12 + .../math-curve/math-curve-background.svelte | 79 ++++ .../ui/math-curve/math-curve-loader.svelte | 79 ++++ .../ui/math-curve/math-curve-progress.svelte | 68 +++ .../src/lib/components/ui/rating/index.ts | 6 + .../lib/components/ui/rating/rating.svelte | 161 +++++++ .../src/lib/components/ui/stat-card/index.ts | 6 + .../components/ui/stat-card/stat-card.svelte | 93 ++++ .../src/lib/components/ui/stepper/context.ts | 30 ++ .../src/lib/components/ui/stepper/index.ts | 22 + .../ui/stepper/stepper-content.svelte | 17 + .../components/ui/stepper/stepper-item.svelte | 27 ++ .../components/ui/stepper/stepper-list.svelte | 21 + .../ui/stepper/stepper-separator.svelte | 23 + .../ui/stepper/stepper-trigger.svelte | 59 +++ .../lib/components/ui/stepper/stepper.svelte | 40 ++ .../src/lib/components/ui/sticker/index.ts | 6 +- .../lib/components/ui/sticker/stamp.svelte | 36 ++ .../components/ui/sticker/sticker-variants.ts | 64 +++ .../components/ui/sticker/sticky-note.svelte | 39 ++ .../src/lib/components/ui/tag-input/index.ts | 6 + .../components/ui/tag-input/tag-input.svelte | 194 +++++++++ packages/svelte/src/lib/index.ts | 35 +- packages/svelte/src/lib/math-curves.ts | 398 ++++++++++++++++++ 39 files changed, 2013 insertions(+), 5 deletions(-) create mode 100644 packages/svelte/src/lib/components/ui/carousel/carousel-dots.svelte create mode 100644 packages/svelte/src/lib/components/ui/combobox/combobox-multi-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/combobox/combobox-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/combobox/index.ts create mode 100644 packages/svelte/src/lib/components/ui/dropzone/dropzone.svelte create mode 100644 packages/svelte/src/lib/components/ui/dropzone/index.ts create mode 100644 packages/svelte/src/lib/components/ui/empty-state/empty-state-actions.svelte create mode 100644 packages/svelte/src/lib/components/ui/empty-state/empty-state-illustration.svelte create mode 100644 packages/svelte/src/lib/components/ui/empty-state/empty-state-preset.svelte create mode 100644 packages/svelte/src/lib/components/ui/file-list/file-list.svelte create mode 100644 packages/svelte/src/lib/components/ui/file-list/index.ts create mode 100644 packages/svelte/src/lib/components/ui/kbd/kbd-combo.svelte create mode 100644 packages/svelte/src/lib/components/ui/math-curve/index.ts create mode 100644 packages/svelte/src/lib/components/ui/math-curve/math-curve-background.svelte create mode 100644 packages/svelte/src/lib/components/ui/math-curve/math-curve-loader.svelte create mode 100644 packages/svelte/src/lib/components/ui/math-curve/math-curve-progress.svelte create mode 100644 packages/svelte/src/lib/components/ui/rating/index.ts create mode 100644 packages/svelte/src/lib/components/ui/rating/rating.svelte create mode 100644 packages/svelte/src/lib/components/ui/stat-card/index.ts create mode 100644 packages/svelte/src/lib/components/ui/stat-card/stat-card.svelte create mode 100644 packages/svelte/src/lib/components/ui/stepper/context.ts create mode 100644 packages/svelte/src/lib/components/ui/stepper/index.ts create mode 100644 packages/svelte/src/lib/components/ui/stepper/stepper-content.svelte create mode 100644 packages/svelte/src/lib/components/ui/stepper/stepper-item.svelte create mode 100644 packages/svelte/src/lib/components/ui/stepper/stepper-list.svelte create mode 100644 packages/svelte/src/lib/components/ui/stepper/stepper-separator.svelte create mode 100644 packages/svelte/src/lib/components/ui/stepper/stepper-trigger.svelte create mode 100644 packages/svelte/src/lib/components/ui/stepper/stepper.svelte create mode 100644 packages/svelte/src/lib/components/ui/sticker/stamp.svelte create mode 100644 packages/svelte/src/lib/components/ui/sticker/sticky-note.svelte create mode 100644 packages/svelte/src/lib/components/ui/tag-input/index.ts create mode 100644 packages/svelte/src/lib/components/ui/tag-input/tag-input.svelte create mode 100644 packages/svelte/src/lib/math-curves.ts diff --git a/packages/svelte/src/lib/components/ui/carousel/carousel-dots.svelte b/packages/svelte/src/lib/components/ui/carousel/carousel-dots.svelte new file mode 100644 index 00000000..f3434528 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/carousel/carousel-dots.svelte @@ -0,0 +1,26 @@ + + +{#if emblaCtx.scrollSnaps.length > 1} +
    + {#each emblaCtx.scrollSnaps as _, index} + + {/each} +
    +{/if} diff --git a/packages/svelte/src/lib/components/ui/carousel/index.ts b/packages/svelte/src/lib/components/ui/carousel/index.ts index 957fc74a..6ca4d7c5 100644 --- a/packages/svelte/src/lib/components/ui/carousel/index.ts +++ b/packages/svelte/src/lib/components/ui/carousel/index.ts @@ -3,6 +3,7 @@ import Content from "./carousel-content.svelte"; import Item from "./carousel-item.svelte"; import Previous from "./carousel-previous.svelte"; import Next from "./carousel-next.svelte"; +import Dots from "./carousel-dots.svelte"; export { Root, @@ -10,10 +11,12 @@ export { Item, Previous, Next, + Dots, // Root as Carousel, Content as CarouselContent, Item as CarouselItem, Previous as CarouselPrevious, Next as CarouselNext, + Dots as CarouselDots, }; diff --git a/packages/svelte/src/lib/components/ui/combobox/combobox-multi-trigger.svelte b/packages/svelte/src/lib/components/ui/combobox/combobox-multi-trigger.svelte new file mode 100644 index 00000000..93c852d9 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/combobox/combobox-multi-trigger.svelte @@ -0,0 +1,44 @@ + + + + + {#if values && values.length > 0} + {#each values as item} + + {item.label} + { e.stopPropagation(); onRemove?.(item.value); }} + /> + + {/each} + {:else} + {placeholder} + {/if} + + + diff --git a/packages/svelte/src/lib/components/ui/combobox/combobox-trigger.svelte b/packages/svelte/src/lib/components/ui/combobox/combobox-trigger.svelte new file mode 100644 index 00000000..3af50c56 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/combobox/combobox-trigger.svelte @@ -0,0 +1,30 @@ + + + + + {value || placeholder} + + + diff --git a/packages/svelte/src/lib/components/ui/combobox/index.ts b/packages/svelte/src/lib/components/ui/combobox/index.ts new file mode 100644 index 00000000..c655efdb --- /dev/null +++ b/packages/svelte/src/lib/components/ui/combobox/index.ts @@ -0,0 +1,9 @@ +import Trigger from "./combobox-trigger.svelte"; +import MultiTrigger from "./combobox-multi-trigger.svelte"; + +export { + Trigger, + MultiTrigger, + Trigger as ComboboxTrigger, + MultiTrigger as ComboboxMultiTrigger, +}; diff --git a/packages/svelte/src/lib/components/ui/dropzone/dropzone.svelte b/packages/svelte/src/lib/components/ui/dropzone/dropzone.svelte new file mode 100644 index 00000000..9d77d65d --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropzone/dropzone.svelte @@ -0,0 +1,125 @@ + + +
    { e.preventDefault(); e.stopPropagation(); if (!disabled) isDragging = true; }} + ondragleave={(e) => { e.preventDefault(); e.stopPropagation(); isDragging = false; }} + ondragover={(e) => { e.preventDefault(); e.stopPropagation(); }} + ondrop={(e) => { e.preventDefault(); e.stopPropagation(); isDragging = false; processFiles(e.dataTransfer?.files ?? null); }} + onclick={() => { if (!disabled) inputRef?.click(); }} +> + 1} + {disabled} + class="hidden" + onchange={(e) => { processFiles((e.target as HTMLInputElement).files); (e.target as HTMLInputElement).value = ''; }} + /> + {#if children} + {@render children({ isDragging, isDisabled: disabled, acceptedFiles, rejectedFiles })} + {:else} +
    +
    + +
    + {#if variant !== 'minimal'} +

    {isDragging ? 'Drop files here' : 'Drag & drop files'}

    +

    or click to browse

    + {/if} +
    + {/if} +
    diff --git a/packages/svelte/src/lib/components/ui/dropzone/index.ts b/packages/svelte/src/lib/components/ui/dropzone/index.ts new file mode 100644 index 00000000..720dff36 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/dropzone/index.ts @@ -0,0 +1,7 @@ +import Root from "./dropzone.svelte"; +export type { FileRejection } from "./dropzone.svelte"; + +export { + Root, + Root as Dropzone, +}; diff --git a/packages/svelte/src/lib/components/ui/empty-state/empty-state-actions.svelte b/packages/svelte/src/lib/components/ui/empty-state/empty-state-actions.svelte new file mode 100644 index 00000000..6d67d7c9 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/empty-state/empty-state-actions.svelte @@ -0,0 +1,11 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/empty-state/empty-state-illustration.svelte b/packages/svelte/src/lib/components/ui/empty-state/empty-state-illustration.svelte new file mode 100644 index 00000000..fcd55d6e --- /dev/null +++ b/packages/svelte/src/lib/components/ui/empty-state/empty-state-illustration.svelte @@ -0,0 +1,17 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/empty-state/empty-state-preset.svelte b/packages/svelte/src/lib/components/ui/empty-state/empty-state-preset.svelte new file mode 100644 index 00000000..b824ffce --- /dev/null +++ b/packages/svelte/src/lib/components/ui/empty-state/empty-state-preset.svelte @@ -0,0 +1,79 @@ + + + + {#if illustration} + {@render illustration()} + {:else} + + + + {/if} +
    + {customTitle ?? config.title} + {customDescription ?? config.description} + {#if action} + {@render action()} + {/if} +
    +
    diff --git a/packages/svelte/src/lib/components/ui/empty-state/index.ts b/packages/svelte/src/lib/components/ui/empty-state/index.ts index b367d242..3dc137fb 100644 --- a/packages/svelte/src/lib/components/ui/empty-state/index.ts +++ b/packages/svelte/src/lib/components/ui/empty-state/index.ts @@ -2,16 +2,26 @@ import Root from "./empty-state.svelte"; import Icon from "./empty-state-icon.svelte"; import Title from "./empty-state-title.svelte"; import Description from "./empty-state-description.svelte"; +import Actions from "./empty-state-actions.svelte"; +import Illustration from "./empty-state-illustration.svelte"; +import Preset from "./empty-state-preset.svelte"; export { emptyStateVariants } from "./empty-state-variants.js"; +export type { PresetType } from "./empty-state-preset.svelte"; export { Root, Icon, Title, Description, + Actions, + Illustration, + Preset, // Root as EmptyState, Icon as EmptyStateIcon, Title as EmptyStateTitle, Description as EmptyStateDescription, + Actions as EmptyStateActions, + Illustration as EmptyStateIllustration, + Preset as EmptyStatePreset, }; diff --git a/packages/svelte/src/lib/components/ui/file-list/file-list.svelte b/packages/svelte/src/lib/components/ui/file-list/file-list.svelte new file mode 100644 index 00000000..570ac55e --- /dev/null +++ b/packages/svelte/src/lib/components/ui/file-list/file-list.svelte @@ -0,0 +1,82 @@ + + +{#if files.length > 0} +
    + {#each files as item} + {@const Icon = getFileIcon(item.file.type)} +
    +
    + +
    +
    +

    {item.file.name}

    +

    {formatBytes(item.file.size)}

    + {#if item.error} +

    {item.error}

    + {/if} + {#if item.uploading && item.progress !== undefined} + + {/if} +
    + {#if item.uploading} + + {:else} + + {/if} +
    + {/each} +
    +{/if} diff --git a/packages/svelte/src/lib/components/ui/file-list/index.ts b/packages/svelte/src/lib/components/ui/file-list/index.ts new file mode 100644 index 00000000..3b18d0ae --- /dev/null +++ b/packages/svelte/src/lib/components/ui/file-list/index.ts @@ -0,0 +1,7 @@ +import Root from "./file-list.svelte"; +export type { FileItem } from "./file-list.svelte"; + +export { + Root, + Root as FileList, +}; diff --git a/packages/svelte/src/lib/components/ui/kbd/index.ts b/packages/svelte/src/lib/components/ui/kbd/index.ts index 6aa7f075..cede71ad 100644 --- a/packages/svelte/src/lib/components/ui/kbd/index.ts +++ b/packages/svelte/src/lib/components/ui/kbd/index.ts @@ -1,10 +1,13 @@ import Root from "./kbd.svelte"; import Group from "./kbd-group.svelte"; +import Combo from "./kbd-combo.svelte"; export { Root, Group, + Combo, // Root as Kbd, Group as KbdGroup, + Combo as KbdCombo, }; diff --git a/packages/svelte/src/lib/components/ui/kbd/kbd-combo.svelte b/packages/svelte/src/lib/components/ui/kbd/kbd-combo.svelte new file mode 100644 index 00000000..23031f13 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/kbd/kbd-combo.svelte @@ -0,0 +1,44 @@ + + +
    + {#each keys as key, i} + {#if i > 0} + {separator} + {/if} + {key} + {/each} +
    diff --git a/packages/svelte/src/lib/components/ui/math-curve/index.ts b/packages/svelte/src/lib/components/ui/math-curve/index.ts new file mode 100644 index 00000000..02b61981 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/math-curve/index.ts @@ -0,0 +1,12 @@ +import Background from "./math-curve-background.svelte"; +import Loader from "./math-curve-loader.svelte"; +import Progress from "./math-curve-progress.svelte"; + +export { + Background, + Loader, + Progress, + Background as MathCurveBackground, + Loader as MathCurveLoader, + Progress as MathCurveProgress, +}; diff --git a/packages/svelte/src/lib/components/ui/math-curve/math-curve-background.svelte b/packages/svelte/src/lib/components/ui/math-curve/math-curve-background.svelte new file mode 100644 index 00000000..e927bd3c --- /dev/null +++ b/packages/svelte/src/lib/components/ui/math-curve/math-curve-background.svelte @@ -0,0 +1,79 @@ + + +
    + +
    + {@render children?.()} +
    +
    diff --git a/packages/svelte/src/lib/components/ui/math-curve/math-curve-loader.svelte b/packages/svelte/src/lib/components/ui/math-curve/math-curve-loader.svelte new file mode 100644 index 00000000..6ccb9f66 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/math-curve/math-curve-loader.svelte @@ -0,0 +1,79 @@ + + + + + + diff --git a/packages/svelte/src/lib/components/ui/math-curve/math-curve-progress.svelte b/packages/svelte/src/lib/components/ui/math-curve/math-curve-progress.svelte new file mode 100644 index 00000000..12c6045f --- /dev/null +++ b/packages/svelte/src/lib/components/ui/math-curve/math-curve-progress.svelte @@ -0,0 +1,68 @@ + + + + + + {#if showValue} + + {Math.round(clamped)}% + + {/if} + diff --git a/packages/svelte/src/lib/components/ui/rating/index.ts b/packages/svelte/src/lib/components/ui/rating/index.ts new file mode 100644 index 00000000..fa2a4c6e --- /dev/null +++ b/packages/svelte/src/lib/components/ui/rating/index.ts @@ -0,0 +1,6 @@ +import Root from "./rating.svelte"; + +export { + Root, + Root as Rating, +}; diff --git a/packages/svelte/src/lib/components/ui/rating/rating.svelte b/packages/svelte/src/lib/components/ui/rating/rating.svelte new file mode 100644 index 00000000..9315f4b0 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/rating/rating.svelte @@ -0,0 +1,161 @@ + + +
    + {#each { length: max } as _, i} + {@const { isFilled, isHalfFilled } = getFillState(i)} + + {/each} +
    diff --git a/packages/svelte/src/lib/components/ui/stat-card/index.ts b/packages/svelte/src/lib/components/ui/stat-card/index.ts new file mode 100644 index 00000000..550e06e1 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/stat-card/index.ts @@ -0,0 +1,6 @@ +import Root from "./stat-card.svelte"; + +export { + Root, + Root as StatCard, +}; diff --git a/packages/svelte/src/lib/components/ui/stat-card/stat-card.svelte b/packages/svelte/src/lib/components/ui/stat-card/stat-card.svelte new file mode 100644 index 00000000..bdb6fc26 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/stat-card/stat-card.svelte @@ -0,0 +1,93 @@ + + + +
    + +
    +
    +

    {title}

    +

    {value}

    + {#if change} +
    + + {change} + {comparison} +
    + {/if} +
    + {#if icon} +
    + {@render icon()} +
    + {/if} +
    + {#if progress} +
    +
    + {progress.label ?? 'Progress'} + {progress.value}% +
    + +
    + {/if} +
    +
    diff --git a/packages/svelte/src/lib/components/ui/stepper/context.ts b/packages/svelte/src/lib/components/ui/stepper/context.ts new file mode 100644 index 00000000..b3a02c38 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/stepper/context.ts @@ -0,0 +1,30 @@ +import { getContext, setContext } from 'svelte'; + +export type StepperContext = { + activeStep: () => number; + setActiveStep: (step: number) => void; + orientation: 'horizontal' | 'vertical'; +}; + +export type StepperItemContext = { + index: number; +}; + +const STEPPER_CTX = Symbol('stepper'); +const STEPPER_ITEM_CTX = Symbol('stepper-item'); + +export function setStepperContext(ctx: StepperContext) { + setContext(STEPPER_CTX, ctx); +} + +export function getStepperContext() { + return getContext(STEPPER_CTX); +} + +export function setStepperItemContext(ctx: StepperItemContext) { + setContext(STEPPER_ITEM_CTX, ctx); +} + +export function getStepperItemContext() { + return getContext(STEPPER_ITEM_CTX); +} diff --git a/packages/svelte/src/lib/components/ui/stepper/index.ts b/packages/svelte/src/lib/components/ui/stepper/index.ts new file mode 100644 index 00000000..abf9e0b4 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/stepper/index.ts @@ -0,0 +1,22 @@ +import Root from "./stepper.svelte"; +import Item from "./stepper-item.svelte"; +import List from "./stepper-list.svelte"; +import Trigger from "./stepper-trigger.svelte"; +import Content from "./stepper-content.svelte"; +import Separator from "./stepper-separator.svelte"; + +export { + Root, + Item, + List, + Trigger, + Content, + Separator, + // + Root as Stepper, + Item as StepperItem, + List as StepperList, + Trigger as StepperTrigger, + Content as StepperContent, + Separator as StepperSeparator, +}; diff --git a/packages/svelte/src/lib/components/ui/stepper/stepper-content.svelte b/packages/svelte/src/lib/components/ui/stepper/stepper-content.svelte new file mode 100644 index 00000000..828fa3fa --- /dev/null +++ b/packages/svelte/src/lib/components/ui/stepper/stepper-content.svelte @@ -0,0 +1,17 @@ + + +{#if isActive} +
    + {@render children?.()} +
    +{/if} diff --git a/packages/svelte/src/lib/components/ui/stepper/stepper-item.svelte b/packages/svelte/src/lib/components/ui/stepper/stepper-item.svelte new file mode 100644 index 00000000..c65d247e --- /dev/null +++ b/packages/svelte/src/lib/components/ui/stepper/stepper-item.svelte @@ -0,0 +1,27 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/stepper/stepper-list.svelte b/packages/svelte/src/lib/components/ui/stepper/stepper-list.svelte new file mode 100644 index 00000000..232fd90f --- /dev/null +++ b/packages/svelte/src/lib/components/ui/stepper/stepper-list.svelte @@ -0,0 +1,21 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/stepper/stepper-separator.svelte b/packages/svelte/src/lib/components/ui/stepper/stepper-separator.svelte new file mode 100644 index 00000000..21cbb419 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/stepper/stepper-separator.svelte @@ -0,0 +1,23 @@ + + +
    diff --git a/packages/svelte/src/lib/components/ui/stepper/stepper-trigger.svelte b/packages/svelte/src/lib/components/ui/stepper/stepper-trigger.svelte new file mode 100644 index 00000000..e5fee530 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/stepper/stepper-trigger.svelte @@ -0,0 +1,59 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/stepper/stepper.svelte b/packages/svelte/src/lib/components/ui/stepper/stepper.svelte new file mode 100644 index 00000000..6209a0ea --- /dev/null +++ b/packages/svelte/src/lib/components/ui/stepper/stepper.svelte @@ -0,0 +1,40 @@ + + +
    + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/sticker/index.ts b/packages/svelte/src/lib/components/ui/sticker/index.ts index ef30e15e..a475e266 100644 --- a/packages/svelte/src/lib/components/ui/sticker/index.ts +++ b/packages/svelte/src/lib/components/ui/sticker/index.ts @@ -1,7 +1,11 @@ import Root from "./sticker.svelte"; -export { stickerVariants } from "./sticker-variants.js"; +import Stamp from "./stamp.svelte"; +import StickyNote from "./sticky-note.svelte"; +export { stickerVariants, stampVariants, stickyNoteVariants } from "./sticker-variants.js"; export { Root, + Stamp, + StickyNote, Root as Sticker, }; diff --git a/packages/svelte/src/lib/components/ui/sticker/stamp.svelte b/packages/svelte/src/lib/components/ui/sticker/stamp.svelte new file mode 100644 index 00000000..b1aa23dd --- /dev/null +++ b/packages/svelte/src/lib/components/ui/sticker/stamp.svelte @@ -0,0 +1,36 @@ + + +
    + + {@render children?.()} + +
    diff --git a/packages/svelte/src/lib/components/ui/sticker/sticker-variants.ts b/packages/svelte/src/lib/components/ui/sticker/sticker-variants.ts index b1cffcda..a5070414 100644 --- a/packages/svelte/src/lib/components/ui/sticker/sticker-variants.ts +++ b/packages/svelte/src/lib/components/ui/sticker/sticker-variants.ts @@ -1,5 +1,69 @@ import { cva } from 'class-variance-authority' +export const stampVariants = cva( + 'relative inline-flex items-center justify-center rounded-full border-4 border-foreground font-black uppercase tracking-widest', + { + variants: { + variant: { + default: 'bg-primary text-primary-foreground', + secondary: 'bg-secondary text-secondary-foreground', + accent: 'bg-accent text-accent-foreground', + destructive: 'bg-destructive text-destructive-foreground', + outline: 'bg-background text-foreground', + }, + size: { + sm: 'h-16 w-16 text-[10px]', + default: 'h-24 w-24 text-xs', + lg: 'h-32 w-32 text-sm', + xl: 'h-40 w-40 text-base', + }, + rotation: { + none: 'rotate-0', + slight: '-rotate-12', + medium: '-rotate-[25deg]', + heavy: '-rotate-45', + }, + }, + defaultVariants: { + variant: 'default', + size: 'default', + rotation: 'slight', + }, + } +) + +export const stickyNoteVariants = cva( + 'relative border-3 border-foreground font-medium shadow-[4px_4px_0px_hsl(var(--shadow-color))]', + { + variants: { + variant: { + yellow: 'bg-accent text-accent-foreground', + pink: 'bg-primary text-primary-foreground', + blue: 'bg-info text-info-foreground', + green: 'bg-success text-success-foreground', + purple: 'bg-secondary text-secondary-foreground', + }, + size: { + sm: 'p-3 text-sm min-w-[120px]', + default: 'p-4 text-base min-w-[160px]', + lg: 'p-6 text-lg min-w-[200px]', + }, + rotation: { + none: 'rotate-0', + left: '-rotate-2', + right: 'rotate-2', + 'tilt-left': '-rotate-6', + 'tilt-right': 'rotate-6', + }, + }, + defaultVariants: { + variant: 'yellow', + size: 'default', + rotation: 'left', + }, + } +) + export const stickerVariants = cva( 'relative inline-flex items-center justify-center border-3 border-foreground font-bold uppercase tracking-wide transition-transform', { diff --git a/packages/svelte/src/lib/components/ui/sticker/sticky-note.svelte b/packages/svelte/src/lib/components/ui/sticker/sticky-note.svelte new file mode 100644 index 00000000..20e54e1a --- /dev/null +++ b/packages/svelte/src/lib/components/ui/sticker/sticky-note.svelte @@ -0,0 +1,39 @@ + + +
    + {#if pin} +
    + {/if} + {@render children?.()} +
    diff --git a/packages/svelte/src/lib/components/ui/tag-input/index.ts b/packages/svelte/src/lib/components/ui/tag-input/index.ts new file mode 100644 index 00000000..49108b8d --- /dev/null +++ b/packages/svelte/src/lib/components/ui/tag-input/index.ts @@ -0,0 +1,6 @@ +import Root from "./tag-input.svelte"; + +export { + Root, + Root as TagInput, +}; diff --git a/packages/svelte/src/lib/components/ui/tag-input/tag-input.svelte b/packages/svelte/src/lib/components/ui/tag-input/tag-input.svelte new file mode 100644 index 00000000..97e92803 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/tag-input/tag-input.svelte @@ -0,0 +1,194 @@ + + + + +
    +
    inputRef?.focus()} + class={cn( + 'flex flex-wrap items-center gap-2 min-h-11 w-full border-3 border-input bg-background px-3 py-2', + 'shadow-[4px_4px_0px_hsl(var(--shadow-color))] transition-all duration-200', + 'focus-within:translate-x-[4px] focus-within:translate-y-[4px] focus-within:shadow-none', + disabled && 'opacity-50 cursor-not-allowed', + error && 'border-destructive', + className + )} + > + {#each tags as tag, i} + + {tag} + {#if !disabled} + + {/if} + + {/each} + (showSuggestions = true)} + placeholder={tags.length === 0 ? placeholder : ''} + {disabled} + class="flex-1 min-w-[120px] bg-transparent outline-none text-sm placeholder:text-muted-foreground disabled:cursor-not-allowed" + /> +
    + {#if error} + + {/if} + {#if showSuggestions && filteredSuggestions.length > 0} +
    + {#each filteredSuggestions as suggestion, i} + + {/each} +
    + {/if} +
    diff --git a/packages/svelte/src/lib/index.ts b/packages/svelte/src/lib/index.ts index 19ab1340..a4b0c87c 100644 --- a/packages/svelte/src/lib/index.ts +++ b/packages/svelte/src/lib/index.ts @@ -32,7 +32,10 @@ export { Calendar } from './components/ui/calendar/index.js' export { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from './components/ui/card/index.js' // Carousel -export { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious } from './components/ui/carousel/index.js' +export { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, CarouselDots } from './components/ui/carousel/index.js' + +// Combobox (BoldKit) +export { ComboboxTrigger, ComboboxMultiTrigger } from './components/ui/combobox/index.js' // Checkbox export { Checkbox } from './components/ui/checkbox/index.js' @@ -59,7 +62,7 @@ export { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuIte export { Empty, EmptyHeader, EmptyMedia, EmptyTitle, EmptyDescription, EmptyContent } from './components/ui/empty/index.js' // Empty State (BoldKit) -export { EmptyState, EmptyStateIcon, EmptyStateTitle, EmptyStateDescription, emptyStateVariants } from './components/ui/empty-state/index.js' +export { EmptyState, EmptyStateIcon, EmptyStateTitle, EmptyStateDescription, EmptyStateActions, EmptyStateIllustration, EmptyStatePreset, emptyStateVariants } from './components/ui/empty-state/index.js' // Field export { Field } from './components/ui/field/index.js' @@ -79,8 +82,14 @@ export { InputGroup } from './components/ui/input-group/index.js' // Input OTP export { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator } from './components/ui/input-otp/index.js' +// File List (BoldKit) +export { FileList } from './components/ui/file-list/index.js' + +// Dropzone (BoldKit) +export { Dropzone } from './components/ui/dropzone/index.js' + // Kbd -export { Kbd, KbdGroup } from './components/ui/kbd/index.js' +export { Kbd, KbdGroup, KbdCombo } from './components/ui/kbd/index.js' // Label export { Label } from './components/ui/label/index.js' @@ -142,8 +151,23 @@ export { Toaster } from './components/ui/sonner/index.js' // Spinner export { Spinner } from './components/ui/spinner/index.js' +// MathCurve (BoldKit) +export { MathCurveBackground, MathCurveLoader, MathCurveProgress } from './components/ui/math-curve/index.js' + +// Rating (BoldKit) +export { Rating } from './components/ui/rating/index.js' + +// Stat Card (BoldKit) +export { StatCard } from './components/ui/stat-card/index.js' + +// Stepper (BoldKit) +export { Stepper, StepperItem, StepperList, StepperTrigger, StepperContent, StepperSeparator } from './components/ui/stepper/index.js' + // Sticker (BoldKit) -export { Sticker, stickerVariants } from './components/ui/sticker/index.js' +export { Sticker, Stamp, StickyNote, stickerVariants, stampVariants, stickyNoteVariants } from './components/ui/sticker/index.js' + +// Sonner (alias) +export { Toaster as Sonner } from './components/ui/sonner/index.js' // Switch export { Switch } from './components/ui/switch/index.js' @@ -154,6 +178,9 @@ export { Table, TableHeader, TableBody, TableFooter, TableRow, TableHead, TableC // Tabs export { Tabs, TabsList, TabsTrigger, TabsContent } from './components/ui/tabs/index.js' +// Tag Input (BoldKit) +export { TagInput } from './components/ui/tag-input/index.js' + // Textarea export { Textarea } from './components/ui/textarea/index.js' diff --git a/packages/svelte/src/lib/math-curves.ts b/packages/svelte/src/lib/math-curves.ts new file mode 100644 index 00000000..84968059 --- /dev/null +++ b/packages/svelte/src/lib/math-curves.ts @@ -0,0 +1,398 @@ +/** + * math-curves.ts + * Framework-agnostic math engine for parametric curve animations. + * All coordinates are in [0, 100] SVG space, center at (50, 50). + * progress: 0–1 (fraction of full curve loop) + * detailScale: 0.52–1.0 (breathing oscillator, see getDetailScale) + */ + +export type LoaderCurveKey = + | 'rose' | 'lissajous' | 'butterfly' | 'hypotrochoid' + | 'cardioid' | 'lemniscate' | 'fourier' | 'rose3' + | 'astroid' | 'deltoid' | 'nephroid' | 'epicycloid' + | 'superellipse' | 'triskelion' | 'involute' + +export type ProgressCurveKey = + | 'spiral' | 'heart' | 'lissajous' | 'cardioid' | 'rose' + | 'astroid' | 'superellipse' | 'deltoid' | 'nephroid' + +export type BackgroundCurveKey = + | 'rose' | 'lissajous' | 'fourier' | 'spiral' + | 'triskelion' | 'involute' | 'epicycloid' + +export type CurveKey = LoaderCurveKey | ProgressCurveKey | BackgroundCurveKey + +type Point = { x: number; y: number } + +interface CurveDefinition { + /** t parameter range — progress 0→1 maps to tMin→tMax */ + tMin: number + tMax: number + /** Default breathing cycle duration in ms */ + pulseDurationMs: number + /** Default segment count for buildPath */ + defaultSegments: number + /** Core parametric function — returns {x, y} in [0,100] space */ + compute: (t: number, detailScale: number) => Point +} + +const CURVE_DEFS: Record = { + // 5-petal rose: r = a·cos(5θ), odd k → full flower in [0, π] + rose: { + tMin: 0, + tMax: Math.PI, + pulseDurationMs: 5000, + defaultSegments: 300, + compute: (t, ds) => { + const a = 30 + ds * 8 + const r = a * Math.cos(5 * t) + return { x: 50 + r * Math.cos(t), y: 50 + r * Math.sin(t) } + }, + }, + + // 3-petal rose: r = a·cos(3θ), odd k → full flower in [0, π] + rose3: { + tMin: 0, + tMax: Math.PI, + pulseDurationMs: 5500, + defaultSegments: 240, + compute: (t, ds) => { + const a = 34 + ds * 6 + const r = a * Math.cos(3 * t) + return { x: 50 + r * Math.cos(t), y: 50 + r * Math.sin(t) } + }, + }, + + // Lissajous figure (3:4 ratio): x = A·sin(3t + π/2), y = B·sin(4t) + lissajous: { + tMin: 0, + tMax: 2 * Math.PI, + pulseDurationMs: 4800, + defaultSegments: 240, + compute: (t, ds) => { + const A = 34 + ds * 6 + const B = A * 0.86 + return { x: 50 + A * Math.sin(3 * t + Math.PI / 2), y: 50 + B * Math.sin(4 * t) } + }, + }, + + // Butterfly curve: r = e^cos(t) - 2·cos(4t) - sin^5(t/12) + // Full closure at t = 12π (6 full rotations) + butterfly: { + tMin: 0, + tMax: 12 * Math.PI, + pulseDurationMs: 6000, + defaultSegments: 480, + compute: (t, ds) => { + const r = + Math.exp(Math.cos(t)) - + 2 * Math.cos(4 * t) - + Math.pow(Math.sin(t / 12), 5) + const scale = 7 + ds * 2.5 + return { x: 50 + scale * r * Math.cos(t), y: 50 + scale * r * Math.sin(t) } + }, + }, + + // Hypotrochoid (spirograph): R=5, r=3, d varies with detailScale + // (R-r)/r = 2/3 → closes at t = 6π (3 outer rotations) + hypotrochoid: { + tMin: 0, + tMax: 6 * Math.PI, + pulseDurationMs: 5500, + defaultSegments: 300, + compute: (t, ds) => { + const R = 5, + r = 3 + const d = 3.5 + ds * 1.5 // 3.5–5.0 + const scale = 5 + const x = scale * ((R - r) * Math.cos(t) + d * Math.cos(((R - r) / r) * t)) + const y = scale * ((R - r) * Math.sin(t) - d * Math.sin(((R - r) / r) * t)) + return { x: 50 + x, y: 50 + y } + }, + }, + + // Cardioid: r = a(1 - cos t), shifted to center + cardioid: { + tMin: 0, + tMax: 2 * Math.PI, + pulseDurationMs: 5000, + defaultSegments: 300, + compute: (t, ds) => { + const a = 18 + ds * 4 + const r = a * (1 - Math.cos(t)) + // Shift right by a so the cusp is at (50 - a, 50) and tip at (50 + a, 50) + return { x: 50 - a + r * Math.cos(t), y: 50 + r * Math.sin(t) } + }, + }, + + // Bernoulli lemniscate: x = a·cos(t)/(1+sin²t), y = a·sin(t)·cos(t)/(1+sin²t) + lemniscate: { + tMin: 0, + tMax: 2 * Math.PI, + pulseDurationMs: 4500, + defaultSegments: 300, + compute: (t, ds) => { + const a = 36 + ds * 6 + const sinT = Math.sin(t) + const denom = 1 + sinT * sinT + return { + x: 50 + (a * Math.cos(t)) / denom, + y: 50 + (a * Math.sin(t) * Math.cos(t)) / denom, + } + }, + }, + + // Fourier sum: multiple interfering harmonics + fourier: { + tMin: 0, + tMax: 2 * Math.PI, + pulseDurationMs: 6500, + defaultSegments: 480, + compute: (t, ds) => { + const a1 = 20 + const a2 = 10 + ds * 6 + const a3 = 7 + const a4 = 4 + ds * 3 + const x = + a1 * Math.cos(t) + + a2 * Math.cos(2 * t) + + a3 * Math.cos(3 * t) + + a4 * Math.cos(5 * t) + const y = + a1 * Math.sin(t) + + a2 * Math.sin(2 * t) - + a3 * Math.sin(3 * t) + + a4 * Math.sin(5 * t) + return { x: 50 + x, y: 50 + y } + }, + }, + + // Archimedean spiral: r = b·t, progress 0→1 maps to 0 full revolutions outward + spiral: { + tMin: 0, + tMax: 4 * Math.PI, + pulseDurationMs: 5000, + defaultSegments: 200, + compute: (t, ds) => { + const b = 2.5 + ds * 0.5 + const r = b * t + return { x: 50 + r * Math.cos(t), y: 50 + r * Math.sin(t) } + }, + }, + + // Parametric heart: x = 16sin³t, y = -(13cost - 5cos2t - 2cos3t - cos4t) + heart: { + tMin: 0, + tMax: 2 * Math.PI, + pulseDurationMs: 5200, + defaultSegments: 200, + compute: (t, ds) => { + const scale = 1.8 + ds * 0.4 + const x = scale * 16 * Math.pow(Math.sin(t), 3) + const y = + -scale * + (13 * Math.cos(t) - + 5 * Math.cos(2 * t) - + 2 * Math.cos(3 * t) - + Math.cos(4 * t)) + return { x: 50 + x, y: 50 + y } + }, + }, + + // Astroid (4-cusped hypocycloid): x = a·cos³t, y = a·sin³t + astroid: { + tMin: 0, + tMax: 2 * Math.PI, + pulseDurationMs: 4000, + defaultSegments: 300, + compute: (t, ds) => { + const a = 38 + ds * 4 + return { + x: 50 + a * Math.pow(Math.cos(t), 3), + y: 50 + a * Math.pow(Math.sin(t), 3), + } + }, + }, + + // Deltoid (3-cusped hypocycloid, R=3 r=1): x=(2cos+cos2t), y=(2sin-sin2t) + deltoid: { + tMin: 0, + tMax: 2 * Math.PI, + pulseDurationMs: 4800, + defaultSegments: 240, + compute: (t, ds) => { + const scale = 11 + ds * 2 + return { + x: 50 + scale * (2 * Math.cos(t) + Math.cos(2 * t)), + y: 50 + scale * (2 * Math.sin(t) - Math.sin(2 * t)), + } + }, + }, + + // Nephroid (2-cusped epicycloid, R=2 r=1): x=3cos(t)-cos(3t), y=3sin(t)-sin(3t) + nephroid: { + tMin: 0, + tMax: 2 * Math.PI, + pulseDurationMs: 5200, + defaultSegments: 300, + compute: (t, ds) => { + const scale = 9 + ds * 2 + return { + x: 50 + scale * (3 * Math.cos(t) - Math.cos(3 * t)), + y: 50 + scale * (3 * Math.sin(t) - Math.sin(3 * t)), + } + }, + }, + + // Epicycloid (5-cusped, R=5 r=1): x=6cos-cos6t, y=6sin-sin6t + epicycloid: { + tMin: 0, + tMax: 2 * Math.PI, + pulseDurationMs: 5000, + defaultSegments: 300, + compute: (t, ds) => { + const scale = 5 + ds * 0.5 + return { + x: 50 + scale * (6 * Math.cos(t) - Math.cos(6 * t)), + y: 50 + scale * (6 * Math.sin(t) - Math.sin(6 * t)), + } + }, + }, + + // Superellipse (Lamé curve): |x/a|^n + |y/a|^n = 1, n oscillates 2→4 + superellipse: { + tMin: 0, + tMax: 2 * Math.PI, + pulseDurationMs: 6000, + defaultSegments: 360, + compute: (t, ds) => { + const a = 36 + const n = 2 + ds * 2 + const exp = 2 / n + const cosT = Math.cos(t) + const sinT = Math.sin(t) + return { + x: 50 + a * Math.sign(cosT) * Math.pow(Math.abs(cosT), exp), + y: 50 + a * Math.sign(sinT) * Math.pow(Math.abs(sinT), exp), + } + }, + }, + + // Triskelion: 3 Archimedean spiral arms, 120° apart + triskelion: { + tMin: 0, + tMax: 6 * Math.PI, + pulseDurationMs: 5500, + defaultSegments: 360, + compute: (t, ds) => { + const b = 32 + ds * 8 + const arm = Math.floor(t / (2 * Math.PI)) + const theta = t - arm * 2 * Math.PI + const offset = (arm * 2 * Math.PI) / 3 + const r = b * (theta / (2 * Math.PI)) + return { + x: 50 + r * Math.cos(theta + offset), + y: 50 + r * Math.sin(theta + offset), + } + }, + }, + + // Involute of circle: x = a(cos t + t·sin t), y = a(sin t - t·cos t) + involute: { + tMin: 0, + tMax: 4 * Math.PI, + pulseDurationMs: 5800, + defaultSegments: 300, + compute: (t, ds) => { + const a = 2.5 + ds * 0.5 + return { + x: 50 + a * (Math.cos(t) + t * Math.sin(t)), + y: 50 + a * (Math.sin(t) - t * Math.cos(t)), + } + }, + }, +} + +/** + * Returns {x, y} in [0, 100] coordinate space for a given curve at a progress position. + * @param curve - curve key (e.g. 'rose', 'lissajous') + * @param progress - 0–1 position along the full curve loop + * @param detailScale - breathing oscillator value 0.52–1.0, defaults to 1.0 + */ +export function getPoint(curve: string, progress: number, detailScale = 1.0): Point { + const def = CURVE_DEFS[curve] + if (!def) return { x: 50, y: 50 } + const t = def.tMin + progress * (def.tMax - def.tMin) + return def.compute(t, detailScale) +} + +/** + * Returns the curve tangent angle in degrees at the given progress position. + * Computed via finite difference: angle between (progress - ε) and (progress + ε). + * Used to rotate the head to follow the curve direction. + * @param curve - curve key + * @param progress - 0–1 + * @param detailScale - defaults to 1.0 + */ +export function getAngle(curve: string, progress: number, detailScale = 1.0): number { + const EPS = 0.001 + const p1 = getPoint(curve, Math.max(0, progress - EPS), detailScale) + const p2 = getPoint(curve, Math.min(1, progress + EPS), detailScale) + const dx = p2.x - p1.x + const dy = p2.y - p1.y + // Fallback to larger epsilon when sample points are too close (e.g. spiral at progress=0) + if (dx * dx + dy * dy < 1e-6) { + const BIG_EPS = 0.01 + const q1 = getPoint(curve, Math.max(0, progress - BIG_EPS), detailScale) + const q2 = getPoint(curve, Math.min(1, progress + BIG_EPS), detailScale) + return Math.atan2(q2.y - q1.y, q2.x - q1.x) * (180 / Math.PI) + } + return Math.atan2(dy, dx) * (180 / Math.PI) +} + +/** + * Returns a full SVG path string (M + L commands) for the guide track. + * Default segment counts per curve type: + * rose/cardioid/lemniscate/hypotrochoid = 300 + * lissajous/butterfly/rose3 = 240 (butterfly: 480) + * fourier = 480 + * spiral/heart = 200 + * @param curve - curve key + * @param detailScale - defaults to 1.0 + * @param segments - optional override + */ +export function buildPath(curve: string, detailScale = 1.0, segments?: number): string { + const def = CURVE_DEFS[curve] + if (!def) return '' + const n = segments ?? def.defaultSegments + let d = '' + for (let i = 0; i <= n; i++) { + const progress = i / n + const { x, y } = getPoint(curve, progress, detailScale) + if (i === 0) { + d = `M ${x.toFixed(2)} ${y.toFixed(2)}` + } else { + d += ` L ${x.toFixed(2)} ${y.toFixed(2)}` + } + } + return d +} + +/** + * Returns a sine-based breathing oscillator value in [0.52, 1.0]. + * Formula: 0.52 + ((sin(2π × (elapsed % pulseDurationMs) / pulseDurationMs) + 1) / 2) × 0.48 + * @param elapsed - current time in ms (e.g. performance.now()) + * @param pulseDurationMs - full breathing cycle duration + */ +export function getDetailScale(elapsed: number, pulseDurationMs: number): number { + const phase = (elapsed % pulseDurationMs) / pulseDurationMs + return 0.52 + ((Math.sin(2 * Math.PI * phase) + 1) / 2) * 0.48 +} + +/** + * Returns the default pulse duration for a given curve key. + * Useful for initializing the breathing animation. + */ +export function getCurvePulseDuration(curve: string): number { + return CURVE_DEFS[curve]?.pulseDurationMs ?? 5000 +} From 6e48ca08b175a8d109f535b9a150ef202dbc5b41 Mon Sep 17 00:00:00 2001 From: Max Farrell Date: Tue, 19 May 2026 10:10:50 -0400 Subject: [PATCH 4/6] Add first-class Svelte docs support --- src/components/SEO.tsx | 6 +- src/components/docs/BlockDoc.tsx | 57 ++--- src/components/docs/ComponentDoc.tsx | 196 ++++++++++++++++-- src/components/docs/OpenInV0Button.tsx | 4 +- src/components/layout/Footer.tsx | 5 +- src/components/templates/DocsTemplate.tsx | 2 +- src/hooks/use-framework.tsx | 92 ++++++++- src/layouts/DocsLayout.tsx | 7 +- src/pages/Blocks.tsx | 39 ++-- src/pages/CanvasEffects.tsx | 22 +- src/pages/Charts.tsx | 54 ++--- src/pages/Home.tsx | 67 +++--- src/pages/ShapeBuilder.tsx | 6 +- src/pages/Shapes.tsx | 14 +- src/pages/Templates.tsx | 31 ++- src/pages/ThemeBuilder.tsx | 9 +- src/pages/docs/EmptyStateDoc.tsx | 98 +++++++-- src/pages/docs/Installation.tsx | 240 ++++++++++------------ src/pages/docs/Introduction.tsx | 137 +++++------- 19 files changed, 682 insertions(+), 404 deletions(-) diff --git a/src/components/SEO.tsx b/src/components/SEO.tsx index 6ec83472..e0f8bf5e 100644 --- a/src/components/SEO.tsx +++ b/src/components/SEO.tsx @@ -33,8 +33,8 @@ interface SEOProps { } const defaultMeta = { - title: 'BoldKit — Neubrutalism UI for React & Vue 3', - description: `Free neubrutalism component library for React and Vue 3 with ${COUNTS.components}+ UI components, ${COUNTS.blocks} section blocks, ${COUNTS.templates} templates, ${COUNTS.shapes} animated SVG shapes, and ${COUNTS.charts} chart types. Built on shadcn/ui with thick borders, hard shadows, and bold colors.`, + title: 'BoldKit — Neubrutalism UI for React, Vue & Svelte', + description: `Free neubrutalism component library for React, Vue 3, and Svelte with ${COUNTS.components}+ UI components, ${COUNTS.blocks} section blocks, ${COUNTS.templates} templates, ${COUNTS.shapes} animated SVG shapes, and ${COUNTS.charts} chart types. Built on shadcn/ui with thick borders, hard shadows, and bold colors.`, ogImage: DEFAULT_OG_IMAGE, twitterCreator: '@boldkitdev', siteName: 'BoldKit', @@ -165,7 +165,7 @@ export const pageSEO = { }, docs: { title: 'Documentation', - description: 'Learn how to install and use BoldKit neubrutalism components in your React or Vue 3 project. Comprehensive guides, API references, and examples for both frameworks.', + description: 'Learn how to install and use BoldKit neubrutalism components in your React, Vue 3, or Svelte project. Comprehensive guides, API references, and examples across supported frameworks.', canonical: `${SITE_URL}/docs`, breadcrumbs: [ { name: 'Home', url: `${SITE_URL}/` }, diff --git a/src/components/docs/BlockDoc.tsx b/src/components/docs/BlockDoc.tsx index ac10cbf4..ea423d45 100644 --- a/src/components/docs/BlockDoc.tsx +++ b/src/components/docs/BlockDoc.tsx @@ -12,38 +12,10 @@ import { } from '@/components/ui/breadcrumb' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' -import { Copy, Check, Home, LayoutGrid, Eye, Code } from 'lucide-react' +import { Home, LayoutGrid, Eye, Code } from 'lucide-react' import { SEO } from '@/components/SEO' -import { useFramework, FrameworkToggle, ReactIcon, VueIcon } from '@/hooks/use-framework' - -export function CodeBlock({ code, language = 'tsx' }: { code: string; language?: string }) { - const [copied, setCopied] = useState(false) - - const copyCode = () => { - navigator.clipboard.writeText(code) - setCopied(true) - setTimeout(() => setCopied(false), 2000) - } - - return ( -
    -
    - {language} - -
    -
    -        {code}
    -      
    -
    - ) -} +import { FrameworkIcon, FrameworkToggle, frameworkBadgeClasses, frameworkBadgeVariants, frameworkLabels, useFramework } from '@/hooks/use-framework' +import { CodeBlock } from './ComponentDoc' interface BlockVariant { name: string @@ -51,6 +23,7 @@ interface BlockVariant { preview: ReactNode reactCode: string vueCode: string + svelteCode?: string } interface BlockDocProps { @@ -107,9 +80,9 @@ export function BlockDoc({ {category === 'marketing' ? 'Marketing Block' : 'Application Block'} - - {framework === 'react' ? : } - {framework === 'react' ? 'React' : 'Vue 3'} + + + {frameworkLabels[framework]} @@ -171,8 +144,14 @@ export function BlockDoc({ ' + } + language={framework === 'react' ? 'tsx' : framework === 'vue' ? 'vue' : 'svelte'} /> @@ -217,15 +196,17 @@ export function BlockDoc({ // Use the ${variants[0].name} variant <${name.replace(/\s+/g, '')}.${variants[0].name} {...props} />` - : ` ` + : `` } - language={framework === 'react' ? 'tsx' : 'vue'} + language={framework === 'react' ? 'tsx' : framework === 'vue' ? 'vue' : 'svelte'} /> diff --git a/src/components/docs/ComponentDoc.tsx b/src/components/docs/ComponentDoc.tsx index b0eacbb8..f99a8fba 100644 --- a/src/components/docs/ComponentDoc.tsx +++ b/src/components/docs/ComponentDoc.tsx @@ -1,4 +1,4 @@ -import { useState, type ReactNode } from 'react' +import { useEffect, useState, type ReactNode } from 'react' import { Link } from 'react-router-dom' import { Badge } from '@/components/ui/badge' import { Button } from '@/components/ui/button' @@ -13,9 +13,84 @@ import { import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' import { Copy, Check, Terminal, Home } from 'lucide-react' +import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter' import { OpenInV0Button } from './OpenInV0Button' import { SEO, getComponentSEO } from '@/components/SEO' -import { useFramework, FrameworkToggle, VueIcon } from '@/hooks/use-framework' +import { useFramework, FrameworkToggle, SvelteIcon, VueIcon, type Framework } from '@/hooks/use-framework' + +interface RegistryFile { + content?: string +} + +interface RegistryItem { + dependencies?: string[] + files?: RegistryFile[] +} + +const codeTheme = { + 'code[class*="language-"]': { + color: 'hsl(var(--foreground))', + background: 'transparent', + textShadow: 'none', + fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace', + fontSize: '0.875rem', + lineHeight: '1.6', + }, + 'pre[class*="language-"]': { + color: 'hsl(var(--foreground))', + background: 'transparent', + textShadow: 'none', + margin: 0, + padding: 0, + overflow: 'visible', + fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace', + fontSize: '0.875rem', + lineHeight: '1.6', + }, + comment: { color: 'hsl(var(--muted-foreground))', fontStyle: 'italic' }, + prolog: { color: 'hsl(var(--muted-foreground))' }, + doctype: { color: 'hsl(var(--muted-foreground))' }, + cdata: { color: 'hsl(var(--muted-foreground))' }, + punctuation: { color: 'hsl(var(--foreground) / 0.65)' }, + property: { color: 'hsl(var(--info))' }, + tag: { color: 'hsl(var(--primary))' }, + boolean: { color: 'hsl(var(--accent))' }, + number: { color: 'hsl(var(--accent))' }, + constant: { color: 'hsl(var(--warning))' }, + symbol: { color: 'hsl(var(--warning))' }, + deleted: { color: 'hsl(var(--destructive))' }, + selector: { color: 'hsl(var(--success))' }, + 'attr-name': { color: 'hsl(var(--info))' }, + string: { color: 'hsl(var(--success))' }, + char: { color: 'hsl(var(--success))' }, + builtin: { color: 'hsl(var(--secondary))' }, + inserted: { color: 'hsl(var(--success))' }, + operator: { color: 'hsl(var(--foreground) / 0.7)' }, + entity: { color: 'hsl(var(--warning))' }, + url: { color: 'hsl(var(--info))' }, + atrule: { color: 'hsl(var(--accent))' }, + 'attr-value': { color: 'hsl(var(--success))' }, + keyword: { color: 'hsl(var(--secondary))', fontWeight: 700 }, + function: { color: 'hsl(var(--primary))' }, + 'class-name': { color: 'hsl(var(--warning))' }, + regex: { color: 'hsl(var(--accent))' }, + important: { color: 'hsl(var(--destructive))', fontWeight: 700 }, + variable: { color: 'hsl(var(--info))' }, +} as const + +const languageAliases: Record = { + ts: 'typescript', + tsx: 'tsx', + js: 'javascript', + jsx: 'jsx', + vue: 'vue', + svelte: 'svelte', + bash: 'bash', + shell: 'bash', + json: 'json', + css: 'css', + html: 'markup', +} export function CodeBlock({ code, language = 'tsx' }: { code: string; language?: string }) { const [copied, setCopied] = useState(false) @@ -40,7 +115,15 @@ export function CodeBlock({ code, language = 'tsx' }: { code: string; language?:
    -        {code}
    +        
    +          {code}
    +        
           
    ) @@ -79,6 +162,10 @@ interface ComponentDocProps { vueSourceCode?: string vueUsageCode?: string vueDependencies?: string[] + // Svelte-specific props. When omitted, docs load the generated Svelte registry item. + svelteSourceCode?: string + svelteUsageCode?: string + svelteDependencies?: string[] // Nuxt-specific nuxtClientOnly?: boolean } @@ -95,6 +182,9 @@ export function ComponentDoc({ vueSourceCode, vueUsageCode, vueDependencies, + svelteSourceCode, + svelteUsageCode, + svelteDependencies, nuxtClientOnly = false, }: ComponentDocProps) { // Use global framework context @@ -102,16 +192,84 @@ export function ComponentDoc({ // Convert component name to registry name (e.g., "Alert Dialog" -> "alert-dialog") const componentRegistryName = registryName || name.toLowerCase().replace(/\s+/g, '-') + const [svelteRegistryItem, setSvelteRegistryItem] = useState(null) + const [hasSvelteRegistry, setHasSvelteRegistry] = useState(false) + + useEffect(() => { + if (framework !== 'svelte' || svelteSourceCode) { + return + } + + let cancelled = false + + fetch(`/r/svelte/${componentRegistryName}.json`) + .then((response) => { + if (!response.ok) { + throw new Error('Svelte registry item unavailable') + } + return response.json() as Promise + }) + .then((item) => { + if (!cancelled) { + setSvelteRegistryItem(item) + setHasSvelteRegistry(true) + } + }) + .catch(() => { + if (!cancelled) { + setSvelteRegistryItem(null) + setHasSvelteRegistry(false) + } + }) + + return () => { + cancelled = true + } + }, [componentRegistryName, framework, svelteSourceCode]) // Generate the correct CLI commands for each framework const reactCliCommand = installCommand || `npx shadcn@latest add https://boldkit.dev/r/${componentRegistryName}.json` const vueCliCommand = `npx shadcn-vue@latest add https://boldkit.dev/r/vue/${componentRegistryName}.json` + const svelteCliCommand = `npx shadcn-svelte@latest add https://boldkit.dev/r/svelte/${componentRegistryName}.json` + const svelteRegistrySourceCode = svelteRegistryItem?.files?.map((file) => file.content).filter(Boolean).join('\n\n') || '' + const defaultSvelteUsageCode = ` + +<${name.replace(/\s+/g, '')} />` - const currentCliCommand = framework === 'react' ? reactCliCommand : vueCliCommand - const currentSourceCode = framework === 'react' ? sourceCode : (vueSourceCode || sourceCode) - const currentUsageCode = framework === 'react' ? usageCode : (vueUsageCode || usageCode) - const currentDependencies = framework === 'react' ? dependencies : (vueDependencies || dependencies) - const fileExtension = framework === 'react' ? 'tsx' : 'vue' + const getFrameworkValue = (values: Record) => values[framework] + + const currentCliCommand = getFrameworkValue({ + react: reactCliCommand, + vue: vueCliCommand, + svelte: svelteCliCommand, + }) + const currentSourceCode = getFrameworkValue({ + react: sourceCode, + vue: vueSourceCode || sourceCode, + svelte: svelteSourceCode || svelteRegistrySourceCode || sourceCode, + }) + const currentUsageCode = getFrameworkValue({ + react: usageCode, + vue: vueUsageCode || usageCode, + svelte: svelteUsageCode || defaultSvelteUsageCode, + }) + const currentDependencies = getFrameworkValue({ + react: dependencies, + vue: vueDependencies || dependencies, + svelte: svelteDependencies || svelteRegistryItem?.dependencies || dependencies, + }) + const fileExtension = getFrameworkValue({ + react: 'tsx', + vue: 'vue', + svelte: 'svelte', + }) + const programmingLanguage = getFrameworkValue({ + react: 'React', + vue: 'Vue', + svelte: 'Svelte', + }) const componentSEO = { ...getComponentSEO(componentRegistryName, name), @@ -123,7 +281,7 @@ export function ComponentDoc({ articleSection: 'Components', dependencies: currentDependencies.join(', '), proficiencyLevel: 'Beginner', - programmingLanguage: framework === 'react' ? 'React' : 'Vue', + programmingLanguage, author: { '@type': 'Person', name: 'Aniruddha Agarwal', @@ -136,6 +294,7 @@ export function ComponentDoc({ // Check if Vue code is available const hasVueCode = !!vueSourceCode + const hasSvelteCode = !!svelteSourceCode || hasSvelteRegistry return ( <> @@ -186,6 +345,13 @@ export function ComponentDoc({

    )} + {framework === 'svelte' && !hasSvelteCode && ( +
    +

    + Svelte code sample coming soon. +

    +
    + )} {framework === 'vue' && nuxtClientOnly && (

    @@ -232,6 +398,11 @@ export function ComponentDoc({ Using shadcn-vue CLI with BoldKit Vue registry.

    )} + {framework === 'svelte' && ( +

    + Using shadcn-svelte CLI with BoldKit Svelte registry. +

    + )} @@ -272,12 +443,13 @@ interface ExampleSectionProps { children: ReactNode code: string vueCode?: string + svelteCode?: string } -export function ExampleSection({ title, description, children, code, vueCode }: ExampleSectionProps) { +export function ExampleSection({ title, description, children, code, vueCode, svelteCode }: ExampleSectionProps) { const { framework } = useFramework() - const currentCode = framework === 'react' ? code : (vueCode || code) - const language = framework === 'react' ? 'tsx' : 'vue' + const currentCode = framework === 'react' ? code : framework === 'vue' ? (vueCode || code) : (svelteCode || '') + const language = framework === 'react' ? 'tsx' : framework === 'vue' ? 'vue' : 'svelte' return (
    diff --git a/src/components/docs/OpenInV0Button.tsx b/src/components/docs/OpenInV0Button.tsx index f5748b1d..d857bdb5 100644 --- a/src/components/docs/OpenInV0Button.tsx +++ b/src/components/docs/OpenInV0Button.tsx @@ -9,8 +9,8 @@ interface OpenInV0ButtonProps { export function OpenInV0Button({ name, className }: OpenInV0ButtonProps) { const { framework } = useFramework() - // v0 only supports React, hide button when Vue is selected - if (framework === 'vue') { + // v0 only supports React, hide button when another framework is selected + if (framework !== 'react') { return null } diff --git a/src/components/layout/Footer.tsx b/src/components/layout/Footer.tsx index 77608ba9..bccc2dd3 100644 --- a/src/components/layout/Footer.tsx +++ b/src/components/layout/Footer.tsx @@ -46,15 +46,16 @@ export function Footer() {

    A neubrutalism UI library for{' '} React{' '} - and{' '} Vue 3 + {' '}and{' '} + Svelte

    {/* What's included grid */}
    {[ - { icon: Package, value: '50+', label: 'Components', desc: 'React & Vue 3', accent: '#f87171' }, + { icon: Package, value: '50+', label: 'Components', desc: 'React, Vue, Svelte', accent: '#f87171' }, { icon: BarChart3, value: '10', label: 'Chart Types', desc: 'Recharts + ECharts', accent: '#4db8a8' }, { icon: LayoutGrid, value: '15', label: 'Blocks', desc: 'Copy & paste', accent: '#fcd34d' }, { icon: Shield, value: 'MIT', label: 'License', desc: 'Free forever', accent: '#5cdb5c' }, diff --git a/src/components/templates/DocsTemplate.tsx b/src/components/templates/DocsTemplate.tsx index 36100b60..c352c779 100644 --- a/src/components/templates/DocsTemplate.tsx +++ b/src/components/templates/DocsTemplate.tsx @@ -302,7 +302,7 @@ export function DocsTemplate() {
    New in v3.0 - React & Vue 3 + React, Vue 3 & Svelte

    Introduction diff --git a/src/hooks/use-framework.tsx b/src/hooks/use-framework.tsx index d5f20f92..ed9ee43f 100644 --- a/src/hooks/use-framework.tsx +++ b/src/hooks/use-framework.tsx @@ -1,6 +1,6 @@ -import { createContext, useContext, useState, type ReactNode } from 'react' +import { createContext, useContext, useId, useState, type ReactNode } from 'react' -type Framework = 'react' | 'vue' +export type Framework = 'react' | 'vue' | 'svelte' interface FrameworkContextType { framework: Framework @@ -16,7 +16,7 @@ export function FrameworkProvider({ children }: { children: ReactNode }) { // Check localStorage on initial load if (typeof window !== 'undefined') { const stored = localStorage.getItem(STORAGE_KEY) - if (stored === 'vue' || stored === 'react') { + if (stored === 'vue' || stored === 'react' || stored === 'svelte') { return stored } } @@ -56,6 +56,69 @@ export const VueIcon = ({ className = 'h-4 w-4' }: { className?: string }) => ( ) +export const SvelteIcon = ({ className = 'h-4 w-4' }: { className?: string }) => { + const maskId = useId() + + return ( + + ) +} + +export const frameworkLabels: Record = { + react: 'React', + vue: 'Vue 3', + svelte: 'Svelte', +} + +export const frameworkCliNames: Record = { + react: 'shadcn', + vue: 'shadcn-vue', + svelte: 'shadcn-svelte', +} + +export const frameworkRegistryPaths: Record = { + react: '/r', + vue: '/r/vue', + svelte: '/r/svelte', +} + +export const frameworkActiveClasses: Record = { + react: 'bg-secondary text-secondary-foreground', + vue: 'bg-success', + svelte: 'bg-primary', +} + +export const frameworkBadgeVariants: Record = { + react: 'secondary', + vue: 'success', + svelte: 'default', +} + +export const frameworkBadgeClasses: Record = { + react: '', + vue: '', + svelte: '', +} + +export function FrameworkIcon({ framework, className }: { framework: Framework; className?: string }) { + if (framework === 'vue') return + if (framework === 'svelte') return + return +} + // Reusable framework toggle component export function FrameworkToggle({ size = 'default', variant = 'horizontal' }: { size?: 'default' | 'sm'; variant?: 'horizontal' | 'compact' }) { const { framework, setFramework } = useFramework() @@ -69,7 +132,7 @@ export function FrameworkToggle({ size = 'default', variant = 'horizontal' }: { +

    ) } @@ -100,7 +173,7 @@ export function FrameworkToggle({ size = 'default', variant = 'horizontal' }: { +
    ) } diff --git a/src/layouts/DocsLayout.tsx b/src/layouts/DocsLayout.tsx index ea3916ed..0df2b7df 100644 --- a/src/layouts/DocsLayout.tsx +++ b/src/layouts/DocsLayout.tsx @@ -7,7 +7,7 @@ import { Sheet, SheetContent, SheetTrigger } from '@/components/ui/sheet' import { ScrollArea } from '@/components/ui/scroll-area' import { Menu } from 'lucide-react' import { Header } from '@/components/layout' -import { FrameworkToggle, useFramework } from '@/hooks/use-framework' +import { FrameworkToggle, frameworkLabels, useFramework } from '@/hooks/use-framework' import { TableOfContents } from '@/components/TableOfContents' const marketingBlocks = [ @@ -101,11 +101,6 @@ function Sidebar({ className, onLinkClick }: { className?: string; onLinkClick?: const location = useLocation() const { framework } = useFramework() - const frameworkLabels: Record = { - react: 'React', - vue: 'Vue 3' - } - return (
    diff --git a/src/pages/Blocks.tsx b/src/pages/Blocks.tsx index fc3aaabc..60458997 100644 --- a/src/pages/Blocks.tsx +++ b/src/pages/Blocks.tsx @@ -25,7 +25,17 @@ import { ChevronRight, } from 'lucide-react' import { SEO, pageSEO } from '@/components/SEO' -import { useFramework, FrameworkToggle, ReactIcon, VueIcon } from '@/hooks/use-framework' +import { + FrameworkIcon, + FrameworkToggle, + frameworkBadgeClasses, + frameworkBadgeVariants, + frameworkCliNames, + frameworkLabels, + frameworkRegistryPaths, + useFramework, + type Framework, +} from '@/hooks/use-framework' import type { CSSProperties } from 'react' const DISPLAY: CSSProperties = { fontFamily: "'Bebas Neue', sans-serif" } @@ -669,13 +679,12 @@ const accentColors = [ 'bg-info/15 border-info/40', ] -function BlockCard({ block, framework, index }: { block: BlockInfo; framework: string; index: number }) { +function BlockCard({ block, framework, index }: { block: BlockInfo; framework: Framework; index: number }) { const [showCode, setShowCode] = useState(false) const Icon = block.icon - const installCmd = - framework === 'react' - ? `npx shadcn@latest add "https://boldkit.dev/r/${block.name.toLowerCase().replace(/\s+/g, '-')}.json"` - : `npx shadcn-vue@latest add "https://boldkit.dev/r/vue/${block.name.toLowerCase().replace(/\s+/g, '-')}.json"` + const registryName = block.name.toLowerCase().replace(/\s+/g, '-') + const installCmd = `npx ${frameworkCliNames[framework]}@latest add "https://boldkit.dev${frameworkRegistryPaths[framework]}/${registryName}.json"` + const usageCode = block.code[framework] || '' const accentClass = accentColors[index % accentColors.length] return ( @@ -728,7 +737,7 @@ function BlockCard({ block, framework, index }: { block: BlockInfo; framework: s
    - npx shadcn add "boldkit.dev/r/{block.name.toLowerCase().replace(/\s+/g, '-')}" + {installCmd}
    @@ -738,14 +747,14 @@ function BlockCard({ block, framework, index }: { block: BlockInfo; framework: s className="w-full flex items-center justify-between px-2.5 py-1.5 border-t border-foreground/20 hover:bg-foreground/5 transition-colors touch-manipulation" > - {framework === 'react' ? 'React' : 'Vue'} usage + {frameworkLabels[framework]} usage {showCode && (
    -                {block.code[framework]}
    +                {usageCode}
                   
    )} @@ -820,7 +829,7 @@ export function Blocks() { {[ { value: String(marketingBlocks.length + applicationBlocks.length), label: 'Blocks', bg: 'bg-primary' }, { value: String(totalVariants) + '+', label: 'Variants', bg: 'bg-secondary' }, - { value: '2', label: 'Frameworks', bg: 'bg-accent' }, + { value: '3', label: 'Frameworks', bg: 'bg-accent' }, { value: 'Free', label: 'Forever', bg: 'bg-success' }, ].map((s) => (
    Pre-built - {framework === 'react' - ? - : } - {framework === 'react' ? 'React' : 'Vue 3'} + + {frameworkLabels[framework]}
    diff --git a/src/pages/CanvasEffects.tsx b/src/pages/CanvasEffects.tsx index 221386d7..510a6500 100644 --- a/src/pages/CanvasEffects.tsx +++ b/src/pages/CanvasEffects.tsx @@ -3,7 +3,7 @@ import { Layout } from '@/components/layout' import { SEO, pageSEO } from '@/components/SEO' import { Copy, Check, Code2, Terminal } from 'lucide-react' import { toast } from 'sonner' -import { useFramework, FrameworkToggle } from '@/hooks/use-framework' +import { FrameworkToggle, frameworkCliNames, frameworkLabels, frameworkRegistryPaths, useFramework, type Framework } from '@/hooks/use-framework' import { DotBlob, Aurora, DotWave, MatrixRain, ParticleWeb, MouseRipple, FlowField, Metaballs, LissajousGrid, Plasma, @@ -107,15 +107,13 @@ const GRID = EFFECTS.filter(e => !e.featured) function EffectCard({ effect, featured = false, framework }: { effect: EffectDef featured?: boolean - framework: string + framework: Framework }) { const [copied, setCopied] = useState(false) const [copiedInstall, setCopiedInstall] = useState(false) const code = framework === 'react' ? effect.reactCode : effect.vueCode - const installCmd = framework === 'react' - ? `npx shadcn@latest add "https://boldkit.dev/r/${effect.id}.json"` - : `npx shadcn-vue@latest add "https://boldkit.dev/r/vue/${effect.id}.json"` + const installCmd = `npx ${frameworkCliNames[framework]}@latest add "https://boldkit.dev${frameworkRegistryPaths[framework]}/${effect.id}.json"` const copy = () => { navigator.clipboard.writeText(code) @@ -175,7 +173,7 @@ function EffectCard({ effect, featured = false, framework }: {
    -
    -                {currentCode}
    -              
    + {framework === 'vue' && !vueCode && (

    Vue code sample coming soon. Uses vue-echarts for charting. @@ -1370,9 +1370,9 @@ export function Charts() {

    Charts - - {framework === 'react' ? : } - {framework === 'react' ? 'React' : 'Vue 3'} + + + {frameworkLabels[framework]}

    @@ -2638,9 +2638,9 @@ export function Charts() { Usage Example - - {framework === 'react' ? : } - {framework === 'react' ? 'React' : 'Vue'} + + + {frameworkLabels[framework]} How to use the chart utilities @@ -2743,9 +2743,9 @@ const option = ref({ Code - - {framework === 'react' ? : } - {framework === 'react' ? 'React' : 'Vue'} + + + {frameworkLabels[framework]} @@ -2821,9 +2821,9 @@ const option = ref({ Code - - {framework === 'react' ? : } - {framework === 'react' ? 'React' : 'Vue'} + + + {frameworkLabels[framework]} @@ -2891,9 +2891,9 @@ const option = ref({ Code - - {framework === 'react' ? : } - {framework === 'react' ? 'React' : 'Vue'} + + + {frameworkLabels[framework]} @@ -2973,9 +2973,9 @@ const option = ref({ Code - - {framework === 'react' ? : } - {framework === 'react' ? 'React' : 'Vue'} + + + {frameworkLabels[framework]} diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx index 92e9e747..375e3ea8 100644 --- a/src/pages/Home.tsx +++ b/src/pages/Home.tsx @@ -23,7 +23,16 @@ import { } from 'lucide-react' import { useState, useEffect, useRef, type CSSProperties } from 'react' import { SEO, pageSEO } from '@/components/SEO' -import { useFramework, ReactIcon, VueIcon } from '@/hooks/use-framework' +import { + FrameworkIcon, + frameworkActiveClasses, + frameworkLabels, + useFramework, + ReactIcon, + SvelteIcon, + VueIcon, + type Framework, +} from '@/hooks/use-framework' import { useScrollReveal } from '@/hooks/use-scroll-reveal' import { useCountUp } from '@/hooks/use-count-up' import { COUNTS } from '@/config/routes-meta' @@ -79,7 +88,7 @@ function DotMatrixPreview() { } const MARQUEE_ITEMS = [ - `${COUNTS.components}+ Components`, 'React', 'Vue 3', 'Nuxt', `${COUNTS.charts} Charts`, + `${COUNTS.components}+ Components`, 'React', 'Vue 3', 'Nuxt', 'Svelte', `${COUNTS.charts} Charts`, `${COUNTS.shapes} Shapes`, `${COUNTS.blocks} Blocks`, 'TypeScript', 'Accessible', 'Open Source', 'Free', 'Neubrutalism', 'Dot Matrix Studio', 'Canvas Effects', 'ASCII Art', ] @@ -115,9 +124,10 @@ export function Home() { const featuresReveal = useScrollReveal() const ctaReveal = useScrollReveal() - const commands: Record = { + const commands: Record = { react: 'npx shadcn@latest add https://boldkit.dev/r/button.json', - vue: 'npx shadcn-vue@latest add https://boldkit.dev/r/vue/button.json', + vue: 'npx shadcn-vue@latest add https://boldkit.dev/r/vue/button.json', + svelte: 'npx shadcn-svelte@latest add https://boldkit.dev/r/svelte/button.json', } const copyCommand = async () => { @@ -164,7 +174,7 @@ export function Home() { {/* Version badge row */}
    - + React @@ -177,6 +187,9 @@ export function Home() { Nuxt NEW + + Svelte + v3.3.2
    @@ -236,22 +249,21 @@ export function Home() { {/* Framework toggle + CLI */}
    - - + {(['react', 'vue', 'svelte'] as const).map((item, index) => ( + + ))}
    {commands[framework]} @@ -860,7 +872,7 @@ export function Home() { SHAPE
    BUILDER

    - 42 shapes. 7 animations. React & Vue. Dial in every prop and copy the code. + 42 shapes. 7 animations. React, Vue, and Svelte. Dial in every prop and copy the code.

    {/* Mini shape grid */}
    @@ -1072,7 +1084,7 @@ export function Home() { ))}
    - {['5 Charsets', '4 Sizes', 'React & Vue'].map(v => ( + {['5 Charsets', '4 Sizes', 'React · Vue · Svelte'].map(v => ( {v} ))}
    @@ -1146,7 +1158,7 @@ export function Home() {
    Multi-Framework -

    React, Vue 3 & Nuxt

    +

    React, Vue 3, Svelte & Nuxt

    @@ -1155,6 +1167,7 @@ export function Home() {
    React Vue + Svelte Nuxt
    @@ -1166,6 +1179,10 @@ export function Home() { npx shadcn-vue@latest add
    boldkit.dev/r/vue/button.json
    + + npx shadcn-svelte@latest add
    + boldkit.dev/r/svelte/button.json +
    @@ -1299,7 +1316,7 @@ export function Home() { BOLD.

    - Free, open-source, and ready for production. Start building in seconds with React, Vue 3, or Nuxt. + Free, open-source, and ready for production. Start building in seconds with React, Vue 3, Svelte, or Nuxt.

    diff --git a/src/pages/ShapeBuilder.tsx b/src/pages/ShapeBuilder.tsx index 67f4c17c..325a5010 100644 --- a/src/pages/ShapeBuilder.tsx +++ b/src/pages/ShapeBuilder.tsx @@ -9,7 +9,7 @@ import { Layout } from '@/components/layout' import { SEO } from '@/components/SEO' import { Copy, Check, ChevronLeft, Wand2 } from 'lucide-react' import { toast } from 'sonner' -import { useFramework, FrameworkToggle, ReactIcon, VueIcon } from '@/hooks/use-framework' +import { FrameworkIcon, FrameworkToggle, frameworkLabels, useFramework } from '@/hooks/use-framework' import { TriangleShape, DiamondBadge, PentagonShape, HexagonShape, OctagonShape, CrossShape, TrapezoidShape, ParallelogramShape, @@ -439,8 +439,8 @@ export function ShapeBuilder() {

    Code

    - {framework === 'react' ? : } - {framework} + + {frameworkLabels[framework]}
    @@ -239,9 +237,7 @@ export function Shapes() { const [copiedInstall, setCopiedInstall] = useState(false) const { framework } = useFramework() - const cliCommand = framework === 'react' - ? 'npx shadcn@latest add https://boldkit.dev/r/shapes.json' - : 'npx shadcn-vue@latest add https://boldkit.dev/r/vue/shapes.json' + const cliCommand = `npx ${frameworkCliNames[framework]}@latest add https://boldkit.dev${frameworkRegistryPaths[framework]}/shapes.json` const totalShapes = shapeCategories.reduce((acc, cat) => acc + cat.shapes.length, 0) @@ -353,7 +349,7 @@ export function Shapes() {
    - {framework === 'react' ? 'shadcn' : 'shadcn-vue'} + {frameworkCliNames[framework]} | diff --git a/src/pages/Templates.tsx b/src/pages/Templates.tsx index 067af76a..3f0c7d7a 100644 --- a/src/pages/Templates.tsx +++ b/src/pages/Templates.tsx @@ -3,7 +3,7 @@ import { Button } from '@/components/ui/button' import { Layout } from '@/components/layout' import { ExternalLink, Copy, Check, ArrowRight } from 'lucide-react' import { SEO, pageSEO } from '@/components/SEO' -import { useFramework, FrameworkToggle } from '@/hooks/use-framework' +import { FrameworkToggle, frameworkLabels, useFramework, type Framework } from '@/hooks/use-framework' // Per-template accent colors — used as left border stripe + underline const ACCENT_COLORS = [ @@ -531,6 +531,24 @@ import DocsTemplate from '@/components/templates/DocsTemplate.vue' }, ] +function getTemplateCode(template: (typeof templates)[number], framework: Framework) { + if (framework !== 'svelte') { + return template.code[framework] + } + + const componentName = template.name + .split(/\s+/) + .map((part) => part.replace(/[^a-zA-Z0-9]/g, '')) + .filter(Boolean) + .join('') + + return ` + +<${componentName}Template />` +} + // ─── Page ────────────────────────────────────────────────────────────────────── export function Templates() { @@ -612,7 +630,7 @@ export function Templates() {
    - 7 templates — React + Vue 3 + 7 templates — React + Vue 3 + Svelte
    @@ -649,6 +667,7 @@ export function Templates() { const accent = ACCENT_COLORS[index % ACCENT_COLORS.length] const isEven = index % 2 === 0 const PreviewComp = previewComponents[template.name] + const templateCode = getTemplateCode(template, framework) return (
    - {framework === 'react' ? 'React' : 'Vue 3'} Usage + {frameworkLabels[framework]} Usage - +
    -                          {template.code[framework]}
    +                          {templateCode}
                             
    @@ -757,7 +776,7 @@ export function Templates() { diff --git a/src/pages/ThemeBuilder.tsx b/src/pages/ThemeBuilder.tsx index 3fc4df2b..171177ac 100644 --- a/src/pages/ThemeBuilder.tsx +++ b/src/pages/ThemeBuilder.tsx @@ -12,7 +12,7 @@ import { Progress } from '@/components/ui/progress' import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' import { Copy, Check, AlertCircle, Palette, Sun, Moon } from 'lucide-react' import { Layout } from '@/components/layout' -import { ReactIcon, VueIcon } from '@/hooks/use-framework' +import { ReactIcon, SvelteIcon, VueIcon } from '@/hooks/use-framework' import { SEO, pageSEO } from '@/components/SEO' // Helper functions for color conversion @@ -356,18 +356,21 @@ export function ThemeBuilder({ embedded = false }: ThemeBuilderProps) { Theme Builder - + React Vue 3 + + Svelte +

    Customize Your Theme

    - Adjust colors, shadows, and borders to match your brand. CSS variables work identically for both React and Vue. + Adjust colors, shadows, and borders to match your brand. CSS variables work identically for React, Vue, and Svelte.

    diff --git a/src/pages/docs/EmptyStateDoc.tsx b/src/pages/docs/EmptyStateDoc.tsx index bf189e90..0db0978c 100644 --- a/src/pages/docs/EmptyStateDoc.tsx +++ b/src/pages/docs/EmptyStateDoc.tsx @@ -11,13 +11,14 @@ import { } from '@/components/ui/empty-state' import { CodeBlock } from '@/components/docs/ComponentDoc' import { SEO, getComponentSEO } from '@/components/SEO' -import { useFramework, ReactIcon, VueIcon } from '@/hooks/use-framework' +import { useFramework, ReactIcon, SvelteIcon, VueIcon, frameworkBadgeClasses, frameworkBadgeVariants } from '@/hooks/use-framework' import { Plus, Upload, Search, Inbox, Star, RotateCcw } from 'lucide-react' import { useState } from 'react' // ─── Install ─────────────────────────────────────────────────────────────── const reactInstallCode = `npx shadcn@latest add "https://boldkit.dev/r/empty-state.json"` const vueInstallCode = `npx shadcn-vue@latest add "https://boldkit.dev/r/vue/empty-state.json"` +const svelteInstallCode = `npx shadcn-svelte@latest add "https://boldkit.dev/r/svelte/empty-state.json"` // ─── Basic Usage ─────────────────────────────────────────────────────────── const reactUsageCode = `import { @@ -80,6 +81,34 @@ import { Button } from '@/components/ui/button' ` +const svelteUsageCode = ` + + + + + + No messages yet + + Your inbox is empty. Send a message to get started. + + + + +` + // ─── Presets ─────────────────────────────────────────────────────────────── const reactPresetCode = `import { EmptyStatePreset } from '@/components/ui/empty-state' import { Button } from '@/components/ui/button' @@ -123,6 +152,24 @@ import { Button } from '@/components/ui/button' ` +const sveltePresetCode = ` + + + + {#snippet action()} + + {/snippet} +` + // ─── Animations ──────────────────────────────────────────────────────────── const reactAnimationCode = `// Fade in on mount ... @@ -285,6 +332,17 @@ const vueActionsCode = ` export function EmptyStateDoc() { const { framework } = useFramework() const [animKey, setAnimKey] = useState(0) + const isSvelte = framework === 'svelte' + const codeLanguage = framework === 'react' ? 'tsx' : isSvelte ? 'svelte' : 'vue' + const svelteExamplePending = '' + const getFrameworkCode = (code: Partial>) => code[framework] || svelteExamplePending + const frameworkIcon = framework === 'react' + ? + : isSvelte + ? + : + const frameworkLabel = framework === 'react' ? 'React' : isSvelte ? 'Svelte' : 'Vue 3' + const installCode = framework === 'react' ? reactInstallCode : isSvelte ? svelteInstallCode : vueInstallCode return ( <> @@ -296,9 +354,9 @@ export function EmptyStateDoc() {

    Empty State

    UI Component - - {framework === 'react' ? : } - {framework === 'react' ? 'React' : 'Vue 3'} + + {frameworkIcon} + {frameworkLabel} New
    @@ -312,7 +370,7 @@ export function EmptyStateDoc() {

    Installation

    @@ -338,8 +396,8 @@ export function EmptyStateDoc() { @@ -369,8 +427,8 @@ export function EmptyStateDoc() { @@ -419,8 +477,8 @@ export function EmptyStateDoc() { @@ -461,7 +519,7 @@ export function EmptyStateDoc() { @@ -511,8 +569,8 @@ export function EmptyStateDoc() { @@ -560,8 +618,8 @@ export function EmptyStateDoc() { @@ -586,8 +644,8 @@ export function EmptyStateDoc() { @@ -618,8 +676,8 @@ export function EmptyStateDoc() { diff --git a/src/pages/docs/Installation.tsx b/src/pages/docs/Installation.tsx index 238edea3..3bd66f83 100644 --- a/src/pages/docs/Installation.tsx +++ b/src/pages/docs/Installation.tsx @@ -1,43 +1,13 @@ import { Badge } from '@/components/ui/badge' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' import { useState } from 'react' -import { Copy, Check, Terminal } from 'lucide-react' +import { Terminal } from 'lucide-react' import { Button } from '@/components/ui/button' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { toast } from 'sonner' -import { useFramework, FrameworkToggle, ReactIcon, VueIcon } from '@/hooks/use-framework' +import { useFramework, FrameworkToggle, ReactIcon, SvelteIcon, VueIcon, frameworkActiveClasses, type Framework } from '@/hooks/use-framework' import { SEO, pageSEO } from '@/components/SEO' - -function CodeBlock({ code, language }: { code: string; language?: string }) { - const [copied, setCopied] = useState(false) - - const copyCode = () => { - navigator.clipboard.writeText(code) - setCopied(true) - setTimeout(() => setCopied(false), 2000) - } - - return ( -
    - {language && ( -
    - {language} -
    - )} -
    -        {code}
    -      
    - -
    - ) -} +import { CodeBlock } from '@/components/docs/ComponentDoc' const allComponents = [ { name: 'accordion', description: 'Collapsible content sections' }, @@ -101,11 +71,15 @@ const allComponents = [ { name: 'tree-view', description: 'Nested tree navigation' }, ] -function ComponentRow({ name, description, framework }: { name: string; description: string; framework: 'react' | 'vue' }) { +function ComponentRow({ name, description, framework }: { name: string; description: string; framework: Framework }) { const [copied, setCopied] = useState(false) const getCommand = () => { - const registryPath = framework === 'vue' ? `/r/vue/${name}.json` : `/r/${name}.json` - const cli = framework === 'vue' ? 'shadcn-vue' : 'shadcn' + const registryPath = framework === 'vue' + ? `/r/vue/${name}.json` + : framework === 'svelte' + ? `/r/svelte/${name}.json` + : `/r/${name}.json` + const cli = framework === 'vue' ? 'shadcn-vue' : framework === 'svelte' ? 'shadcn-svelte' : 'shadcn' return `npx ${cli}@latest add https://boldkit.dev${registryPath}` } const command = getCommand() @@ -139,6 +113,20 @@ function ComponentRow({ name, description, framework }: { name: string; descript export function Installation() { // Use global framework context const { framework } = useFramework() + const isVue = framework === 'vue' + const isSvelte = framework === 'svelte' + const cliName = isVue ? 'shadcn-vue' : isSvelte ? 'shadcn-svelte' : 'shadcn' + const registryPath = isVue ? '/r/vue' : isSvelte ? '/r/svelte' : '/r' + const schemaUrl = isVue ? 'https://shadcn-vue.com/schema.json' : 'https://ui.shadcn.com/schema.json' + const viteTemplate = isVue ? 'vue-ts' : isSvelte ? 'svelte-ts' : 'react-ts' + const baseDependencies = isVue + ? 'clsx tailwind-merge class-variance-authority lucide-vue-next reka-ui' + : isSvelte + ? 'clsx tailwind-merge tailwind-variants bits-ui lucide-svelte' + : 'clsx tailwind-merge class-variance-authority lucide-react @radix-ui/react-slot' + const frameworkIcon = isVue ? : isSvelte ? : + const frameworkBorderClass = isVue ? 'border-success' : isSvelte ? 'border-primary' : 'border-secondary' + const frameworkHeaderClass = frameworkActiveClasses[framework] return (
    @@ -161,16 +149,16 @@ export function Installation() {
    {/* shadcn CLI Method */} - - + + - {framework === 'vue' ? : } - Recommended: {framework === 'vue' ? 'shadcn-vue' : 'shadcn'} CLI + {frameworkIcon} + Recommended: {cliName} CLI

    - The fastest way to add BoldKit components is using the {framework === 'vue' ? 'shadcn-vue' : 'shadcn'} CLI with our registry. + The fastest way to add BoldKit components is using the {cliName} CLI with our registry.

    @@ -178,21 +166,12 @@ export function Installation() {

    Add BoldKit to the registries in your components.json:

    - {framework === 'react' ? ( - - ) : ( - - )}
    @@ -203,18 +182,10 @@ export function Installation() { Multiple - {framework === 'react' ? ( - - ) : ( - - )} + - {framework === 'react' ? ( - - ) : ( - - )} +
    @@ -224,11 +195,7 @@ export function Installation() {

    Install the BoldKit theme for CSS variables:

    - {framework === 'react' ? ( - - ) : ( - - )} +
    @@ -236,11 +203,7 @@ export function Installation() {

    You can also install directly from the registry URL:

    - {framework === 'react' ? ( - - ) : ( - - )} +
    @@ -249,7 +212,7 @@ export function Installation() {

    Manual Installation

    - If you prefer to set up manually or don't use {framework === 'vue' ? 'shadcn-vue' : 'shadcn'} CLI, follow these steps: + If you prefer to set up manually or don't use {cliName} CLI, follow these steps:

    @@ -264,19 +227,25 @@ export function Installation() {
  • Tailwind CSS v4
  • TypeScript (recommended)
  • - ) : ( + ) : framework === 'vue' ? (
    • Vue 3.5+
    • Tailwind CSS v4
    • TypeScript (recommended)
    + ) : ( +
      +
    • Svelte 5
    • +
    • Tailwind CSS v4
    • +
    • TypeScript (recommended)
    • +
    )}

    Step 1: Create Project

    - Start with a new Vite + {framework === 'vue' ? 'Vue' : 'React'} + TypeScript project: + Start with a new Vite + {isVue ? 'Vue' : isSvelte ? 'Svelte' : 'React'} + TypeScript project:

    @@ -285,25 +254,13 @@ export function Installation() { bun - {framework === 'react' ? ( - - ) : ( - - )} + - {framework === 'react' ? ( - - ) : ( - - )} + - {framework === 'react' ? ( - - ) : ( - - )} +
    @@ -339,31 +296,15 @@ export function Installation() { pnpm bun - {framework === 'react' ? ( - <> - - - - - - - - - - - ) : ( - <> - - - - - - - - - - - )} + + + + + + + + + @@ -389,7 +330,7 @@ export default defineConfig({ })`} language="typescript" /> - ) : ( + ) : framework === 'vue' ? ( + ) : ( + @@ -445,17 +404,17 @@ export function cn(...inputs: ClassValue[]) {

    All Components

    - Click to copy the {framework === 'vue' ? 'shadcn-vue' : 'shadcn'} CLI install command for any component: + Click to copy the {cliName} CLI install command for any component:

    - {framework === 'vue' ? : } + {frameworkIcon} {allComponents.length} Components Available - - {framework === 'vue' ? 'shadcn-vue CLI' : 'shadcn CLI'} + + {cliName} CLI
    @@ -474,20 +433,37 @@ export function cn(...inputs: ClassValue[]) { You can also install the styles and utilities:

    - {framework === 'react' ? ( - <> - - - - ) : ( - <> - - - - )} + +
    + {framework === 'svelte' && ( +
    + + + + Svelte 5 Notes + + + +
    +

    Svelte 5 Components

    +

    + BoldKit Svelte components use Svelte 5 syntax and the shadcn-svelte registry format. +

    +
    +
    +

    Headless Primitives

    +

    + Interactive primitives are built on Bits UI. +

    +
    +
    +
    +
    + )} + {/* Vue-specific notes */} {framework === 'vue' && (
    diff --git a/src/pages/docs/Introduction.tsx b/src/pages/docs/Introduction.tsx index bb40aa8b..a3aaad38 100644 --- a/src/pages/docs/Introduction.tsx +++ b/src/pages/docs/Introduction.tsx @@ -5,7 +5,14 @@ import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' import { ArrowRight, Copy, Check, LayoutGrid, Settings, Terminal, TrendingUp } from 'lucide-react' import { useState } from 'react' -import { useFramework, FrameworkToggle, ReactIcon, VueIcon } from '@/hooks/use-framework' +import { + FrameworkIcon, + FrameworkToggle, + frameworkCliNames, + frameworkLabels, + frameworkRegistryPaths, + useFramework, +} from '@/hooks/use-framework' import { SEO, pageSEO } from '@/components/SEO' import { COUNTS } from '@/config/routes-meta' @@ -27,6 +34,13 @@ function CopyButton({ text }: { text: string }) { export function Introduction() { const { framework } = useFramework() + const cliName = frameworkCliNames[framework] + const registryPath = frameworkRegistryPaths[framework] + const frameworkLabel = frameworkLabels[framework] + const primitiveName = framework === 'react' ? 'Radix UI' : framework === 'vue' ? 'Reka UI' : 'Bits UI' + const singleCommand = `npx ${cliName}@latest add @boldkit/button` + const multipleCommand = `npx ${cliName}@latest add @boldkit/button @boldkit/card @boldkit/input` + const urlCommand = `npx ${cliName}@latest add https://boldkit.dev${registryPath}/button.json` return (
    @@ -37,7 +51,7 @@ export function Introduction() { Introduction

    - BoldKit is a neubrutalism-styled component library for React, Vue, and Nuxt, built on top of shadcn/ui primitives. + BoldKit is a neubrutalism-styled component library for React, Vue, Svelte, and Nuxt, built on top of shadcn/ui primitives.

    @@ -50,7 +64,7 @@ export function Introduction() {

    What is BoldKit?

    - BoldKit brings the bold, raw aesthetic of neubrutalism to your {framework === 'vue' ? 'Vue 3' : 'React'} applications. + BoldKit brings the bold, raw aesthetic of neubrutalism to your {frameworkLabel} applications. It features high-contrast colors, thick borders, hard shadows, and a deliberately unpolished look that makes your UI stand out.

    @@ -87,11 +101,11 @@ export function Introduction() {
  • - {framework === 'vue' ? 'shadcn-vue' : 'shadcn'} CLI Compatible - Install components directly using the CLI + {cliName} CLI Compatible - Install components directly using the CLI
  • - Accessible - Built on {framework === 'vue' ? 'Reka UI' : 'Radix UI'} primitives + Accessible - Built on {primitiveName} primitives
  • @@ -175,7 +189,7 @@ export function Introduction() { New

    - 12 animated ASCII art components rendered with perspective projection, z-buffering, and Lambertian shading — no canvas, no WebGL, just text characters. Works in React, Vue 3, and Nuxt. + 12 animated ASCII art components rendered with perspective projection, z-buffering, and Lambertian shading — no canvas, no WebGL, just text characters. Works in React, Vue 3, Svelte, and Nuxt.

    @@ -217,21 +231,14 @@ export function Introduction() {

    Install ASCII Shapes

    - {framework === 'react' ? ( -
    - npx shadcn@latest add https://boldkit.dev/r/ascii-shapes.json - -
    - ) : ( - <> -
    - npx shadcn-vue@latest add https://boldkit.dev/r/vue/ascii-shapes.json - -
    -

    - Nuxt: Wrap animated shapes in <ClientOnly>. Use :animated="false" for SSR-safe static rendering without any wrapper. -

    - +
    + npx {cliName}@latest add https://boldkit.dev{registryPath}/ascii-shapes.json + +
    + {framework === 'vue' && ( +

    + Nuxt: Wrap animated shapes in <ClientOnly>. Use :animated="false" for SSR-safe static rendering without any wrapper. +

    )}
    @@ -286,28 +293,19 @@ export function Introduction() {

    - Quick Start with {framework === 'vue' ? 'shadcn-vue' : 'shadcn'} CLI - {framework === 'vue' ? : } + Quick Start with {cliName} CLI +

    -

    The fastest way to add BoldKit components is using the {framework === 'vue' ? 'shadcn-vue' : 'shadcn'} CLI:

    +

    The fastest way to add BoldKit components is using the {cliName} CLI:

    1. Add BoldKit registry to your components.json:

    - {framework === 'react' ? ( -
    - - {`"registries": { "@boldkit": "https://boldkit.dev/r" }`} - - -
    - ) : ( -
    - - {`"registries": { "@boldkit": "https://boldkit.dev/r/vue" }`} - - -
    - )} +
    + + {`"registries": { "@boldkit": "https://boldkit.dev${registryPath}" }`} + + +
    @@ -318,49 +316,24 @@ export function Introduction() { Multiple Direct URL - {framework === 'react' ? ( - <> - -
    - npx shadcn@latest add @boldkit/button - -
    -
    - -
    - npx shadcn@latest add @boldkit/button @boldkit/card @boldkit/input - -
    -
    - -
    - npx shadcn@latest add https://boldkit.dev/r/button.json - -
    -
    - - ) : ( - <> - -
    - npx shadcn-vue@latest add @boldkit/button - -
    -
    - -
    - npx shadcn-vue@latest add @boldkit/button @boldkit/card @boldkit/input - -
    -
    - -
    - npx shadcn-vue@latest add https://boldkit.dev/r/vue/button.json - -
    -
    - - )} + +
    + {singleCommand} + +
    +
    + +
    + {multipleCommand} + +
    +
    + +
    + {urlCommand} + +
    +
    From dddbba53fdb9bdbce14836f13bcef9d134695e22 Mon Sep 17 00:00:00 2001 From: Max Farrell Date: Tue, 19 May 2026 10:18:09 -0400 Subject: [PATCH 5/6] Improve Svelte parity across docs registry --- packages/svelte/scripts/build-registry.js | 79 ++++- .../components/ui/dropzone/dropzone.svelte | 7 + .../lib/components/ui/rating/rating.svelte | 4 +- .../components/ui/tag-input/tag-input.svelte | 5 +- public/r/alert.json | 2 +- public/r/svelte/accordion.json | 26 +- public/r/svelte/alert-dialog.json | 90 ++++++ public/r/svelte/alert.json | 28 +- public/r/svelte/aspect-ratio.json | 24 ++ public/r/svelte/avatar.json | 40 ++- public/r/svelte/badge.json | 10 +- public/r/svelte/breadcrumb.json | 60 ++++ public/r/svelte/button-group.json | 36 +++ public/r/svelte/button.json | 10 +- public/r/svelte/calendar.json | 126 ++++++++ public/r/svelte/card.json | 48 +-- public/r/svelte/carousel.json | 60 ++++ public/r/svelte/chart.json | 42 +++ public/r/svelte/checkbox.json | 10 +- public/r/svelte/collapsible.json | 36 +++ public/r/svelte/combobox.json | 30 ++ public/r/svelte/command.json | 84 +++++ public/r/svelte/context-menu.json | 114 +++++++ public/r/svelte/data-table.json | 36 +++ public/r/svelte/dialog.json | 62 ++-- public/r/svelte/drawer.json | 84 +++++ public/r/svelte/dropdown-menu.json | 98 +++++- public/r/svelte/dropzone.json | 24 ++ public/r/svelte/empty-state.json | 66 ++++ public/r/svelte/empty.json | 54 ++++ public/r/svelte/field.json | 78 +++++ public/r/svelte/file-list.json | 24 ++ public/r/svelte/form.json | 66 ++++ public/r/svelte/hover-card.json | 42 +++ public/r/svelte/index.json | 302 ++++++++++++++++-- public/r/svelte/input-group.json | 54 ++++ public/r/svelte/input-otp.json | 42 +++ public/r/svelte/input.json | 10 +- public/r/svelte/item.json | 78 +++++ public/r/svelte/kbd.json | 36 +++ public/r/svelte/label.json | 10 +- public/r/svelte/layered-card.json | 60 ++++ public/r/svelte/marquee.json | 36 +++ public/r/svelte/math-curve.json | 36 +++ public/r/svelte/menubar.json | 120 +++++++ public/r/svelte/native-select.json | 36 +++ public/r/svelte/navigation-menu.json | 66 ++++ public/r/svelte/pagination.json | 72 +++++ public/r/svelte/popover.json | 66 ++++ public/r/svelte/progress.json | 10 +- public/r/svelte/radio-group.json | 30 ++ public/r/svelte/range-calendar.json | 126 ++++++++ public/r/svelte/rating.json | 24 ++ public/r/svelte/resizable.json | 30 ++ public/r/svelte/scroll-area.json | 30 ++ public/r/svelte/select.json | 68 ++-- public/r/svelte/separator.json | 10 +- public/r/svelte/sheet.json | 78 +++++ public/r/svelte/sidebar.json | 168 ++++++++++ public/r/svelte/skeleton.json | 10 +- public/r/svelte/slider.json | 24 ++ public/r/svelte/sonner.json | 24 ++ public/r/svelte/spinner.json | 24 ++ public/r/svelte/stat-card.json | 24 ++ public/r/svelte/stepper.json | 60 ++++ public/r/svelte/sticker.json | 42 +++ public/r/svelte/switch.json | 10 +- public/r/svelte/table.json | 66 ++++ public/r/svelte/tabs.json | 26 +- public/r/svelte/tag-input.json | 24 ++ public/r/svelte/textarea.json | 10 +- public/r/svelte/timeline.json | 78 +++++ public/r/svelte/toggle-group.json | 30 ++ public/r/svelte/toggle.json | 12 +- public/r/svelte/tooltip.json | 48 +++ public/r/svelte/utils.json | 2 +- public/r/vue/alert.json | 2 +- public/sitemap.xml | 6 + src/pages/CanvasEffects.tsx | 2 +- src/pages/Charts.tsx | 10 +- src/pages/ShapeBuilder.tsx | 6 +- src/pages/Shapes.tsx | 4 +- src/pages/docs/EmptyStateDoc.tsx | 2 +- src/pages/docs/Installation.tsx | 2 +- 84 files changed, 3559 insertions(+), 192 deletions(-) create mode 100644 public/r/svelte/alert-dialog.json create mode 100644 public/r/svelte/aspect-ratio.json create mode 100644 public/r/svelte/breadcrumb.json create mode 100644 public/r/svelte/button-group.json create mode 100644 public/r/svelte/calendar.json create mode 100644 public/r/svelte/carousel.json create mode 100644 public/r/svelte/chart.json create mode 100644 public/r/svelte/collapsible.json create mode 100644 public/r/svelte/combobox.json create mode 100644 public/r/svelte/command.json create mode 100644 public/r/svelte/context-menu.json create mode 100644 public/r/svelte/data-table.json create mode 100644 public/r/svelte/drawer.json create mode 100644 public/r/svelte/dropzone.json create mode 100644 public/r/svelte/empty-state.json create mode 100644 public/r/svelte/empty.json create mode 100644 public/r/svelte/field.json create mode 100644 public/r/svelte/file-list.json create mode 100644 public/r/svelte/form.json create mode 100644 public/r/svelte/hover-card.json create mode 100644 public/r/svelte/input-group.json create mode 100644 public/r/svelte/input-otp.json create mode 100644 public/r/svelte/item.json create mode 100644 public/r/svelte/kbd.json create mode 100644 public/r/svelte/layered-card.json create mode 100644 public/r/svelte/marquee.json create mode 100644 public/r/svelte/math-curve.json create mode 100644 public/r/svelte/menubar.json create mode 100644 public/r/svelte/native-select.json create mode 100644 public/r/svelte/navigation-menu.json create mode 100644 public/r/svelte/pagination.json create mode 100644 public/r/svelte/popover.json create mode 100644 public/r/svelte/radio-group.json create mode 100644 public/r/svelte/range-calendar.json create mode 100644 public/r/svelte/rating.json create mode 100644 public/r/svelte/resizable.json create mode 100644 public/r/svelte/scroll-area.json create mode 100644 public/r/svelte/sheet.json create mode 100644 public/r/svelte/sidebar.json create mode 100644 public/r/svelte/slider.json create mode 100644 public/r/svelte/sonner.json create mode 100644 public/r/svelte/spinner.json create mode 100644 public/r/svelte/stat-card.json create mode 100644 public/r/svelte/stepper.json create mode 100644 public/r/svelte/sticker.json create mode 100644 public/r/svelte/table.json create mode 100644 public/r/svelte/tag-input.json create mode 100644 public/r/svelte/timeline.json create mode 100644 public/r/svelte/toggle-group.json create mode 100644 public/r/svelte/tooltip.json diff --git a/packages/svelte/scripts/build-registry.js b/packages/svelte/scripts/build-registry.js index 936af24d..8dfe2c00 100644 --- a/packages/svelte/scripts/build-registry.js +++ b/packages/svelte/scripts/build-registry.js @@ -116,25 +116,80 @@ const componentMeta = { }, } +function toTitle(name) { + return name + .split('-') + .map((part) => part.charAt(0).toUpperCase() + part.slice(1)) + .join(' ') +} + +function discoverComponentMeta() { + const discovered = {} + + for (const entry of fs.readdirSync(UI_DIR, { withFileTypes: true })) { + if (!entry.isDirectory()) continue + + const componentDir = path.join(UI_DIR, entry.name) + const files = fs + .readdirSync(componentDir) + .filter((file) => file.endsWith('.svelte') || file.endsWith('.ts')) + + if (files.length === 0) continue + + discovered[entry.name] = { + deps: [], + desc: `${toTitle(entry.name)} component for BoldKit Svelte`, + files, + } + } + + return discovered +} + function readFile(filePath) { if (!fs.existsSync(filePath)) return null return fs.readFileSync(filePath, 'utf-8') } +function findComponentFile(filename, ext) { + const directPath = path.join(UI_DIR, `${filename}${ext}`) + if (fs.existsSync(directPath)) return directPath + + const dirname = filename.endsWith('-variants') + ? filename.replace(/-variants$/, '') + : filename + const nestedPath = path.join(UI_DIR, dirname, `${filename}${ext}`) + if (fs.existsSync(nestedPath)) return nestedPath + + for (const entry of fs.readdirSync(UI_DIR, { withFileTypes: true })) { + if (!entry.isDirectory()) continue + + const candidate = path.join(UI_DIR, entry.name, `${filename}${ext}`) + if (fs.existsSync(candidate)) return candidate + } + + return directPath +} + function getComponentFiles(name, meta) { const filenames = meta.files || [name] const registryFiles = [] for (const filename of filenames) { - const ext = filename.endsWith('-variants') ? '.ts' : '.svelte' - const filePath = path.join(UI_DIR, `${filename}${ext}`) + const ext = filename.endsWith('.svelte') || filename.endsWith('.ts') + ? '' + : filename.endsWith('-variants') + ? '.ts' + : '.svelte' + const filePath = findComponentFile(filename, ext) const content = readFile(filePath) if (content) { + const basename = `${filename}${ext}` registryFiles.push({ - path: `registry/default/ui/${filename}${ext}`, + path: `registry/default/ui/${basename}`, content, type: 'registry:ui', - target: `lib/components/ui/${filename}${ext}`, + target: path.relative(path.join(__dirname, '../src'), filePath), }) } else { console.warn(`Missing file: ${filename}${ext}`) @@ -237,7 +292,21 @@ if (utilsRegistry) { let count = 0 const componentNames = [] -for (const [name, meta] of Object.entries(componentMeta)) { +const discoveredComponentMeta = discoverComponentMeta() +const allComponentMeta = { + ...discoveredComponentMeta, + ...Object.fromEntries( + Object.entries(componentMeta).map(([name, meta]) => [ + name, + { + ...meta, + files: discoveredComponentMeta[name]?.files || meta.files, + }, + ]) + ), +} + +for (const [name, meta] of Object.entries(allComponentMeta)) { const registry = createRegistryJson(name, meta) if (registry) { const outPath = path.join(REGISTRY_DIR, `${name}.json`) diff --git a/packages/svelte/src/lib/components/ui/dropzone/dropzone.svelte b/packages/svelte/src/lib/components/ui/dropzone/dropzone.svelte index 9d77d65d..0cd690d8 100644 --- a/packages/svelte/src/lib/components/ui/dropzone/dropzone.svelte +++ b/packages/svelte/src/lib/components/ui/dropzone/dropzone.svelte @@ -72,6 +72,12 @@ if (rejected.length > 0) onFilesRejected?.(rejected); } + function handleKeyDown(e: KeyboardEvent) { + if (disabled || (e.key !== 'Enter' && e.key !== ' ')) return; + e.preventDefault(); + inputRef?.click(); + } + const stateClasses = { idle: 'bg-background hover:bg-muted/30 shadow-[4px_4px_0px_hsl(var(--shadow-color))] hover:shadow-[6px_6px_0px_hsl(var(--shadow-color))] hover:translate-x-[-2px] hover:translate-y-[-2px]', dragging: 'border-solid border-primary bg-primary/10 scale-[1.02] shadow-[8px_8px_0px_hsl(var(--primary))]', @@ -99,6 +105,7 @@ ondragover={(e) => { e.preventDefault(); e.stopPropagation(); }} ondrop={(e) => { e.preventDefault(); e.stopPropagation(); isDragging = false; processFiles(e.dataTransfer?.files ?? null); }} onclick={() => { if (!disabled) inputRef?.click(); }} + onkeydown={handleKeyDown} > (undefined); let hoverValue = $state(null); const isControlled = $derived(value !== undefined); - const currentValue = $derived(isControlled ? value! : internalValue); + const currentValue = $derived(isControlled ? value! : (internalValue ?? defaultValue)); const displayValue = $derived(hoverValue ?? currentValue); const IconComponent = $derived(iconComponents[icon]); diff --git a/packages/svelte/src/lib/components/ui/tag-input/tag-input.svelte b/packages/svelte/src/lib/components/ui/tag-input/tag-input.svelte index 97e92803..962e0908 100644 --- a/packages/svelte/src/lib/components/ui/tag-input/tag-input.svelte +++ b/packages/svelte/src/lib/components/ui/tag-input/tag-input.svelte @@ -140,10 +140,9 @@
    -
    inputRef?.focus()} class={cn( 'flex flex-wrap items-center gap-2 min-h-11 w-full border-3 border-input bg-background px-3 py-2', 'shadow-[4px_4px_0px_hsl(var(--shadow-color))] transition-all duration-200', @@ -174,7 +173,7 @@ {disabled} class="flex-1 min-w-[120px] bg-transparent outline-none text-sm placeholder:text-muted-foreground disabled:cursor-not-allowed" /> -
    + {#if error} {/if} diff --git a/public/r/alert.json b/public/r/alert.json index dd5a6e27..53d587c0 100644 --- a/public/r/alert.json +++ b/public/r/alert.json @@ -12,7 +12,7 @@ "files": [ { "path": "registry/default/ui/alert.tsx", - "content": "import * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '@/lib/utils'\n\nconst alertVariants = cva(\n 'relative w-full border-3 border-foreground p-4 shadow-[4px_4px_0px_hsl(var(--shadow-color))] transition-all duration-200 [&>svg~*]:pl-8 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground',\n {\n variants: {\n variant: {\n default: 'bg-background text-foreground',\n destructive: 'bg-destructive text-destructive-foreground [&>svg]:text-destructive-foreground',\n success: 'bg-success text-success-foreground',\n warning: 'bg-warning text-warning-foreground',\n info: 'bg-info text-info-foreground',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n)\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes & VariantProps\n>(({ className, variant, ...props }, ref) => (\n \n))\nAlert.displayName = 'Alert'\n\nconst AlertTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes\n>(({ className, ...props }, ref) => (\n \n))\nAlertTitle.displayName = 'AlertTitle'\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes\n>(({ className, ...props }, ref) => (\n \n))\nAlertDescription.displayName = 'AlertDescription'\n\nexport { Alert, AlertTitle, AlertDescription }\n", + "content": "import * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '@/lib/utils'\n\nconst alertVariants = cva(\n 'relative w-full border-3 border-foreground p-4 shadow-[4px_4px_0px_hsl(var(--shadow-color))] animate-in fade-in-0 slide-in-from-top-2 duration-300 transition-all [&>svg~*:not([data-alert-action])]:pl-8 [&>svg~[data-alert-action]]:ml-8 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground',\n {\n variants: {\n variant: {\n default: 'bg-background text-foreground',\n destructive: 'bg-destructive text-destructive-foreground [&>svg]:text-destructive-foreground',\n success: 'bg-success text-success-foreground',\n warning: 'bg-warning text-warning-foreground',\n info: 'bg-info text-info-foreground',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n)\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes & VariantProps\n>(({ className, variant, ...props }, ref) => (\n \n))\nAlert.displayName = 'Alert'\n\nconst AlertTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes\n>(({ className, ...props }, ref) => (\n \n))\nAlertTitle.displayName = 'AlertTitle'\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes\n>(({ className, ...props }, ref) => (\n \n))\nAlertDescription.displayName = 'AlertDescription'\n\nexport interface AlertActionProps extends React.ButtonHTMLAttributes {\n /** Shows an inline spinner and disables the button automatically */\n loading?: boolean\n}\n\nconst AlertAction = React.forwardRef(\n ({ className, loading, disabled, children, ...props }, ref) => (\n \n {loading && (\n \n )}\n {children}\n \n )\n)\nAlertAction.displayName = 'AlertAction'\n\nexport { Alert, AlertTitle, AlertDescription, AlertAction }\n", "type": "registry:ui", "target": "components/ui/alert.tsx" } diff --git a/public/r/svelte/accordion.json b/public/r/svelte/accordion.json index 15d69be3..b1d74b42 100644 --- a/public/r/svelte/accordion.json +++ b/public/r/svelte/accordion.json @@ -12,28 +12,34 @@ ], "files": [ { - "path": "registry/default/ui/accordion.svelte", - "content": "\n\n\n {@render children?.()}\n\n", + "path": "registry/default/ui/accordion-content.svelte", + "content": "\n\n\n\t
    \n\t\t{@render children?.()}\n\t
    \n\n", "type": "registry:ui", - "target": "lib/components/ui/accordion.svelte" + "target": "lib/components/ui/accordion/accordion-content.svelte" }, { "path": "registry/default/ui/accordion-item.svelte", - "content": "\n\n\n {@render children?.()}\n\n", + "content": "\n\n\n", "type": "registry:ui", - "target": "lib/components/ui/accordion-item.svelte" + "target": "lib/components/ui/accordion/accordion-item.svelte" }, { "path": "registry/default/ui/accordion-trigger.svelte", - "content": "\n\n\n svg]:rotate-180',\n className\n )}\n {...restProps}\n >\n {@render children?.()}\n \n \n\n", + "content": "\n\n\n\tsvg]:rotate-180 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n\t\t\tclassName\n\t\t)}\n\t\t{...restProps}\n\t>\n\t\t{@render children?.()}\n\t\t\n\t\n\n", "type": "registry:ui", - "target": "lib/components/ui/accordion-trigger.svelte" + "target": "lib/components/ui/accordion/accordion-trigger.svelte" }, { - "path": "registry/default/ui/accordion-content.svelte", - "content": "\n\n\n
    \n {@render children?.()}\n
    \n\n", + "path": "registry/default/ui/accordion.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/accordion.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", "type": "registry:ui", - "target": "lib/components/ui/accordion-content.svelte" + "target": "lib/components/ui/accordion/index.ts" } ] } \ No newline at end of file diff --git a/public/r/svelte/alert-dialog.json b/public/r/svelte/alert-dialog.json new file mode 100644 index 00000000..2c4ffa5f --- /dev/null +++ b/public/r/svelte/alert-dialog.json @@ -0,0 +1,90 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "alert-dialog", + "type": "registry:ui", + "description": "Alert Dialog component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/alert-dialog-action.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/alert-dialog/alert-dialog-action.svelte" + }, + { + "path": "registry/default/ui/alert-dialog-cancel.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/alert-dialog/alert-dialog-cancel.svelte" + }, + { + "path": "registry/default/ui/alert-dialog-content.svelte", + "content": "\n\n\n\t\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/alert-dialog/alert-dialog-content.svelte" + }, + { + "path": "registry/default/ui/alert-dialog-description.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/alert-dialog/alert-dialog-description.svelte" + }, + { + "path": "registry/default/ui/alert-dialog-footer.svelte", + "content": "\n\n\n\t{@render children?.()}\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/alert-dialog/alert-dialog-footer.svelte" + }, + { + "path": "registry/default/ui/alert-dialog-header.svelte", + "content": "\n\n\n\t{@render children?.()}\n
  • \n", + "type": "registry:ui", + "target": "lib/components/ui/alert-dialog/alert-dialog-header.svelte" + }, + { + "path": "registry/default/ui/alert-dialog-media.svelte", + "content": "\n\n\n\t{@render children?.()}\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/alert-dialog/alert-dialog-media.svelte" + }, + { + "path": "registry/default/ui/alert-dialog-overlay.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/alert-dialog/alert-dialog-overlay.svelte" + }, + { + "path": "registry/default/ui/alert-dialog-portal.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/alert-dialog/alert-dialog-portal.svelte" + }, + { + "path": "registry/default/ui/alert-dialog-title.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/alert-dialog/alert-dialog-title.svelte" + }, + { + "path": "registry/default/ui/alert-dialog-trigger.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/alert-dialog/alert-dialog-trigger.svelte" + }, + { + "path": "registry/default/ui/alert-dialog.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/alert-dialog/alert-dialog.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/alert.json b/public/r/svelte/alert.json index b0200ec5..2f5d7b91 100644 --- a/public/r/svelte/alert.json +++ b/public/r/svelte/alert.json @@ -11,28 +11,34 @@ ], "files": [ { - "path": "registry/default/ui/alert.svelte", - "content": "\n\n
    \n {@render children?.()}\n
    \n", + "path": "registry/default/ui/alert-action.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", "type": "registry:ui", - "target": "lib/components/ui/alert.svelte" + "target": "lib/components/ui/alert/alert-action.svelte" + }, + { + "path": "registry/default/ui/alert-description.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/alert/alert-description.svelte" }, { "path": "registry/default/ui/alert-title.svelte", - "content": "\n\n
    \n {@render children?.()}\n
    \n", + "content": "\n\n\n\t{@render children?.()}\n\n", "type": "registry:ui", - "target": "lib/components/ui/alert-title.svelte" + "target": "lib/components/ui/alert/alert-title.svelte" }, { - "path": "registry/default/ui/alert-description.svelte", - "content": "\n\n
    \n {@render children?.()}\n
    \n", + "path": "registry/default/ui/alert.svelte", + "content": "\n\n\n\n\n\t{@render children?.()}\n\n", "type": "registry:ui", - "target": "lib/components/ui/alert-description.svelte" + "target": "lib/components/ui/alert/alert.svelte" }, { - "path": "registry/default/ui/alert-action.svelte", - "content": "\n\n\n {#if loading}\n \n {/if}\n \n {@render children?.()}\n \n\n", + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", "type": "registry:ui", - "target": "lib/components/ui/alert-action.svelte" + "target": "lib/components/ui/accordion/index.ts" } ] } \ No newline at end of file diff --git a/public/r/svelte/aspect-ratio.json b/public/r/svelte/aspect-ratio.json new file mode 100644 index 00000000..8cc6647b --- /dev/null +++ b/public/r/svelte/aspect-ratio.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "aspect-ratio", + "type": "registry:ui", + "description": "Aspect Ratio component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/aspect-ratio.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/aspect-ratio/aspect-ratio.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/avatar.json b/public/r/svelte/avatar.json index ec0babcd..5353bc1f 100644 --- a/public/r/svelte/avatar.json +++ b/public/r/svelte/avatar.json @@ -11,22 +11,46 @@ ], "files": [ { - "path": "registry/default/ui/avatar.svelte", - "content": "\n\n\n {@render children?.()}\n\n", + "path": "registry/default/ui/avatar-badge.svelte", + "content": "\n\nsvg]:hidden\",\n\t\t\"group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2\",\n\t\t\"group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/avatar/avatar-badge.svelte" + }, + { + "path": "registry/default/ui/avatar-fallback.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/avatar/avatar-fallback.svelte" + }, + { + "path": "registry/default/ui/avatar-group-count.svelte", + "content": "\n\nsvg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3 ring-background relative flex shrink-0 items-center justify-center ring-2\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n\n", "type": "registry:ui", - "target": "lib/components/ui/avatar.svelte" + "target": "lib/components/ui/avatar/avatar-group-count.svelte" + }, + { + "path": "registry/default/ui/avatar-group.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/avatar/avatar-group.svelte" }, { "path": "registry/default/ui/avatar-image.svelte", - "content": "\n\n\n", + "content": "\n\n\n", "type": "registry:ui", - "target": "lib/components/ui/avatar-image.svelte" + "target": "lib/components/ui/avatar/avatar-image.svelte" }, { - "path": "registry/default/ui/avatar-fallback.svelte", - "content": "\n\n\n {@render children?.()}\n\n", + "path": "registry/default/ui/avatar.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/avatar/avatar.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", "type": "registry:ui", - "target": "lib/components/ui/avatar-fallback.svelte" + "target": "lib/components/ui/accordion/index.ts" } ] } \ No newline at end of file diff --git a/public/r/svelte/badge.json b/public/r/svelte/badge.json index 62e21bf9..f3c1f20c 100644 --- a/public/r/svelte/badge.json +++ b/public/r/svelte/badge.json @@ -12,9 +12,15 @@ "files": [ { "path": "registry/default/ui/badge.svelte", - "content": "\n\n
    \n {@render children?.()}\n
    \n", + "content": "\n\n\n\n\n\t{@render children?.()}\n\n", "type": "registry:ui", - "target": "lib/components/ui/badge.svelte" + "target": "lib/components/ui/badge/badge.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" } ] } \ No newline at end of file diff --git a/public/r/svelte/breadcrumb.json b/public/r/svelte/breadcrumb.json new file mode 100644 index 00000000..0ca14d87 --- /dev/null +++ b/public/r/svelte/breadcrumb.json @@ -0,0 +1,60 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "breadcrumb", + "type": "registry:ui", + "description": "Breadcrumb component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/breadcrumb-ellipsis.svelte", + "content": "\n\nsvg]:size-4 flex items-center justify-center\", className)}\n\t{...restProps}\n>\n\t\n\tMore\n\n", + "type": "registry:ui", + "target": "lib/components/ui/breadcrumb/breadcrumb-ellipsis.svelte" + }, + { + "path": "registry/default/ui/breadcrumb-item.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/breadcrumb/breadcrumb-item.svelte" + }, + { + "path": "registry/default/ui/breadcrumb-link.svelte", + "content": "\n\n{#if child}\n\t{@render child({ props: attrs })}\n{:else}\n\t\n\t\t{@render children?.()}\n\t\n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/breadcrumb/breadcrumb-link.svelte" + }, + { + "path": "registry/default/ui/breadcrumb-list.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/breadcrumb/breadcrumb-list.svelte" + }, + { + "path": "registry/default/ui/breadcrumb-page.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/breadcrumb/breadcrumb-page.svelte" + }, + { + "path": "registry/default/ui/breadcrumb-separator.svelte", + "content": "\n\nsvg]:size-3.5\", className)}\n\t{...restProps}\n>\n\t{#if children}\n\t\t{@render children?.()}\n\t{:else}\n\t\t\n\t{/if}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/breadcrumb/breadcrumb-separator.svelte" + }, + { + "path": "registry/default/ui/breadcrumb.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/breadcrumb/breadcrumb.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/button-group.json b/public/r/svelte/button-group.json new file mode 100644 index 00000000..41a03d47 --- /dev/null +++ b/public/r/svelte/button-group.json @@ -0,0 +1,36 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "button-group", + "type": "registry:ui", + "description": "Button Group component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/button-group-separator.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/button-group/button-group-separator.svelte" + }, + { + "path": "registry/default/ui/button-group-text.svelte", + "content": "\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t
    \n\t\t{@render mergedProps.children?.()}\n\t
    \n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/button-group/button-group-text.svelte" + }, + { + "path": "registry/default/ui/button-group.svelte", + "content": "\n\n\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/button-group/button-group.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/button.json b/public/r/svelte/button.json index 16342467..bd38156d 100644 --- a/public/r/svelte/button.json +++ b/public/r/svelte/button.json @@ -12,9 +12,15 @@ "files": [ { "path": "registry/default/ui/button.svelte", - "content": "\n\n\n {@render children?.()}\n\n", + "content": "\n\n\n\n{#if href}\n\t\n\t\t{@render children?.()}\n\t\n{:else}\n\t\n\t\t{@render children?.()}\n\t\n{/if}\n", "type": "registry:ui", - "target": "lib/components/ui/button.svelte" + "target": "lib/components/ui/button/button.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" } ] } \ No newline at end of file diff --git a/public/r/svelte/calendar.json b/public/r/svelte/calendar.json new file mode 100644 index 00000000..8b3f24ef --- /dev/null +++ b/public/r/svelte/calendar.json @@ -0,0 +1,126 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "calendar", + "type": "registry:ui", + "description": "Calendar component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/calendar-caption.svelte", + "content": "\n\n{#snippet MonthSelect()}\n\t {\n\t\t\tif (!placeholder) return;\n\t\t\tconst v = Number.parseInt(e.currentTarget.value);\n\t\t\tconst newPlaceholder = placeholder.set({ month: v });\n\t\t\tplaceholder = newPlaceholder.subtract({ months: monthIndex });\n\t\t}}\n\t/>\n{/snippet}\n\n{#snippet YearSelect()}\n\t\n{/snippet}\n\n{#if captionLayout === \"dropdown\"}\n\t{@render MonthSelect()}\n\t{@render YearSelect()}\n{:else if captionLayout === \"dropdown-months\"}\n\t{@render MonthSelect()}\n\t{#if placeholder}\n\t\t{formatYear(placeholder)}\n\t{/if}\n{:else if captionLayout === \"dropdown-years\"}\n\t{#if placeholder}\n\t\t{formatMonth(placeholder)}\n\t{/if}\n\t{@render YearSelect()}\n{:else}\n\t{formatMonth(month)} {formatYear(month)}\n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/calendar/calendar-caption.svelte" + }, + { + "path": "registry/default/ui/calendar-cell.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/calendar/calendar-cell.svelte" + }, + { + "path": "registry/default/ui/calendar-day.svelte", + "content": "\n\nspan]:text-xs [&>span]:opacity-70\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n", + "type": "registry:ui", + "target": "lib/components/ui/calendar/calendar-day.svelte" + }, + { + "path": "registry/default/ui/calendar-grid-body.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/calendar/calendar-grid-body.svelte" + }, + { + "path": "registry/default/ui/calendar-grid-head.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/calendar/calendar-grid-head.svelte" + }, + { + "path": "registry/default/ui/calendar-grid-row.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/calendar/calendar-grid-row.svelte" + }, + { + "path": "registry/default/ui/calendar-grid.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/calendar/calendar-grid.svelte" + }, + { + "path": "registry/default/ui/calendar-head-cell.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/calendar/calendar-head-cell.svelte" + }, + { + "path": "registry/default/ui/calendar-header.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/calendar/calendar-header.svelte" + }, + { + "path": "registry/default/ui/calendar-heading.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/calendar/calendar-heading.svelte" + }, + { + "path": "registry/default/ui/calendar-month-select.svelte", + "content": "\n\n\n\t\n\t\t{#snippet child({ props, monthItems, selectedMonthItem })}\n\t\t\t\n\t\t\tsvg]:text-muted-foreground flex h-(--cell-size) items-center gap-1 rounded-md ps-2 pe-1 text-sm font-medium select-none [&>svg]:size-3.5\"\n\t\t\t\taria-hidden=\"true\"\n\t\t\t>\n\t\t\t\t{monthItems.find((item) => item.value === value)?.label || selectedMonthItem.label}\n\t\t\t\t\n\t\t\t\n\t\t{/snippet}\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/calendar/calendar-month-select.svelte" + }, + { + "path": "registry/default/ui/calendar-month.svelte", + "content": "\n\n
    \n\t{@render children?.()}\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/calendar/calendar-month.svelte" + }, + { + "path": "registry/default/ui/calendar-months.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/calendar/calendar-months.svelte" + }, + { + "path": "registry/default/ui/calendar-nav.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/calendar/calendar-nav.svelte" + }, + { + "path": "registry/default/ui/calendar-next-button.svelte", + "content": "\n\n{#snippet Fallback()}\n\t\n{/snippet}\n\n\n\t{#if children}\n\t\t{@render children?.()}\n\t{:else}\n\t\t{@render Fallback()}\n\t{/if}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/calendar/calendar-next-button.svelte" + }, + { + "path": "registry/default/ui/calendar-prev-button.svelte", + "content": "\n\n{#snippet Fallback()}\n\t\n{/snippet}\n\n\n\t{#if children}\n\t\t{@render children?.()}\n\t{:else}\n\t\t{@render Fallback()}\n\t{/if}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/calendar/calendar-prev-button.svelte" + }, + { + "path": "registry/default/ui/calendar-year-select.svelte", + "content": "\n\n\n\t\n\t\t{#snippet child({ props, yearItems, selectedYearItem })}\n\t\t\t\n\t\t\tsvg]:text-muted-foreground flex h-(--cell-size) items-center gap-1 rounded-md ps-2 pe-1 text-sm font-medium select-none [&>svg]:size-3.5\"\n\t\t\t\taria-hidden=\"true\"\n\t\t\t>\n\t\t\t\t{yearItems.find((item) => item.value === value)?.label || selectedYearItem.label}\n\t\t\t\t\n\t\t\t\n\t\t{/snippet}\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/calendar/calendar-year-select.svelte" + }, + { + "path": "registry/default/ui/calendar.svelte", + "content": "\n\n\n\n\t{#snippet children({ months, weekdays })}\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{#each months as month, monthIndex (month)}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{#each weekdays as weekday, i (i)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{weekday.slice(0, 2)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{#each month.weeks as weekDates (weekDates)}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{#each weekDates as date (date)}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{#if day}\n\t\t\t\t\t\t\t\t\t\t\t\t{@render day({\n\t\t\t\t\t\t\t\t\t\t\t\t\tday: date,\n\t\t\t\t\t\t\t\t\t\t\t\t\toutsideMonth: !isEqualMonth(date, month.value),\n\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t{/each}\n\t\t\n\t{/snippet}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/calendar/calendar.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/card.json b/public/r/svelte/card.json index 8f76f8de..e934283d 100644 --- a/public/r/svelte/card.json +++ b/public/r/svelte/card.json @@ -9,40 +9,52 @@ ], "files": [ { - "path": "registry/default/ui/card.svelte", - "content": "\n\n\n {@render children?.()}\n\n", + "path": "registry/default/ui/card-action.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", "type": "registry:ui", - "target": "lib/components/ui/card.svelte" + "target": "lib/components/ui/card/card-action.svelte" }, { - "path": "registry/default/ui/card-header.svelte", - "content": "\n\n
    \n {@render children?.()}\n
    \n", + "path": "registry/default/ui/card-content.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", "type": "registry:ui", - "target": "lib/components/ui/card-header.svelte" + "target": "lib/components/ui/card/card-content.svelte" }, { - "path": "registry/default/ui/card-title.svelte", - "content": "\n\n
    \n {@render children?.()}\n
    \n", + "path": "registry/default/ui/card-description.svelte", + "content": "\n\n\n\t{@render children?.()}\n

    \n", "type": "registry:ui", - "target": "lib/components/ui/card-title.svelte" + "target": "lib/components/ui/card/card-description.svelte" }, { - "path": "registry/default/ui/card-description.svelte", - "content": "\n\n
    \n {@render children?.()}\n
    \n", + "path": "registry/default/ui/card-footer.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", "type": "registry:ui", - "target": "lib/components/ui/card-description.svelte" + "target": "lib/components/ui/card/card-footer.svelte" }, { - "path": "registry/default/ui/card-content.svelte", - "content": "\n\n
    \n {@render children?.()}\n
    \n", + "path": "registry/default/ui/card-header.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", "type": "registry:ui", - "target": "lib/components/ui/card-content.svelte" + "target": "lib/components/ui/card/card-header.svelte" }, { - "path": "registry/default/ui/card-footer.svelte", - "content": "\n\n
    \n {@render children?.()}\n
    \n", + "path": "registry/default/ui/card-title.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/card/card-title.svelte" + }, + { + "path": "registry/default/ui/card.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/card/card.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", "type": "registry:ui", - "target": "lib/components/ui/card-footer.svelte" + "target": "lib/components/ui/accordion/index.ts" } ] } \ No newline at end of file diff --git a/public/r/svelte/carousel.json b/public/r/svelte/carousel.json new file mode 100644 index 00000000..c3f0b39f --- /dev/null +++ b/public/r/svelte/carousel.json @@ -0,0 +1,60 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "carousel", + "type": "registry:ui", + "description": "Carousel component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/carousel-content.svelte", + "content": "\n\n\n\t\n\t\t{@render children?.()}\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/carousel/carousel-content.svelte" + }, + { + "path": "registry/default/ui/carousel-dots.svelte", + "content": "\n\n{#if emblaCtx.scrollSnaps.length > 1}\n\t
    \n\t\t{#each emblaCtx.scrollSnaps as _, index}\n\t\t\t emblaCtx.scrollTo(index)}\n\t\t\t>\n\t\t{/each}\n\t
    \n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/carousel/carousel-dots.svelte" + }, + { + "path": "registry/default/ui/carousel-item.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/carousel/carousel-item.svelte" + }, + { + "path": "registry/default/ui/carousel-next.svelte", + "content": "\n\n\n\t\n\tNext slide\n\n", + "type": "registry:ui", + "target": "lib/components/ui/carousel/carousel-next.svelte" + }, + { + "path": "registry/default/ui/carousel-previous.svelte", + "content": "\n\n\n\t\n\tPrevious slide\n\n", + "type": "registry:ui", + "target": "lib/components/ui/carousel/carousel-previous.svelte" + }, + { + "path": "registry/default/ui/carousel.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/carousel/carousel.svelte" + }, + { + "path": "registry/default/ui/context.ts", + "content": "import type { WithElementRef } from \"$lib/utils.js\";\nimport type {\n\tEmblaCarouselSvelteType,\n\tdefault as emblaCarouselSvelte,\n} from \"embla-carousel-svelte\";\nimport { getContext, hasContext, setContext } from \"svelte\";\nimport type { HTMLAttributes } from \"svelte/elements\";\n\nexport type CarouselAPI =\n\tNonNullable[\"on:emblaInit\"]> extends (\n\t\tevt: CustomEvent\n\t) => void\n\t\t? CarouselAPI\n\t\t: never;\n\ntype EmblaCarouselConfig = NonNullable[1]>;\n\nexport type CarouselOptions = EmblaCarouselConfig[\"options\"];\nexport type CarouselPlugins = EmblaCarouselConfig[\"plugins\"];\n\n////\n\nexport type CarouselProps = {\n\topts?: CarouselOptions;\n\tplugins?: CarouselPlugins;\n\tsetApi?: (api: CarouselAPI | undefined) => void;\n\torientation?: \"horizontal\" | \"vertical\";\n} & WithElementRef>;\n\nconst EMBLA_CAROUSEL_CONTEXT = Symbol(\"EMBLA_CAROUSEL_CONTEXT\");\n\nexport type EmblaContext = {\n\tapi: CarouselAPI | undefined;\n\torientation: \"horizontal\" | \"vertical\";\n\tscrollNext: () => void;\n\tscrollPrev: () => void;\n\tcanScrollNext: boolean;\n\tcanScrollPrev: boolean;\n\thandleKeyDown: (e: KeyboardEvent) => void;\n\toptions: CarouselOptions;\n\tplugins: CarouselPlugins;\n\tonInit: (e: CustomEvent) => void;\n\tscrollTo: (index: number, jump?: boolean) => void;\n\tscrollSnaps: number[];\n\tselectedIndex: number;\n};\n\nexport function setEmblaContext(config: EmblaContext): EmblaContext {\n\tsetContext(EMBLA_CAROUSEL_CONTEXT, config);\n\treturn config;\n}\n\nexport function getEmblaContext(name = \"This component\") {\n\tif (!hasContext(EMBLA_CAROUSEL_CONTEXT)) {\n\t\tthrow new Error(`${name} must be used within a component`);\n\t}\n\treturn getContext>(EMBLA_CAROUSEL_CONTEXT);\n}\n", + "type": "registry:ui", + "target": "lib/components/ui/carousel/context.ts" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/chart.json b/public/r/svelte/chart.json new file mode 100644 index 00000000..a9cb9cc5 --- /dev/null +++ b/public/r/svelte/chart.json @@ -0,0 +1,42 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "chart", + "type": "registry:ui", + "description": "Chart component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/chart-container.svelte", + "content": "\n\n\n\t\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-container.svelte" + }, + { + "path": "registry/default/ui/chart-style.svelte", + "content": "\n\n{#if themeContents}\n\t{#key id}\n\t\t\n\t\t\t{themeContents}\n\t\t\n\t{/key}\n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-style.svelte" + }, + { + "path": "registry/default/ui/chart-tooltip.svelte", + "content": "\n\n{#snippet TooltipLabel()}\n\t{#if formattedLabel}\n\t\t
    \n\t\t\t{#if typeof formattedLabel === \"function\"}\n\t\t\t\t{@render formattedLabel()}\n\t\t\t{:else}\n\t\t\t\t{formattedLabel}\n\t\t\t{/if}\n\t\t
    \n\t{/if}\n{/snippet}\n\n\n\t\n\t\t{#if !nestLabel}\n\t\t\t{@render TooltipLabel()}\n\t\t{/if}\n\t\t
    \n\t\t\t{#each visibleSeries as item, i (item.key + i)}\n\t\t\t\t{@const key = `${nameKey || item.key || item.label || \"value\"}`}\n\t\t\t\t{@const itemConfig = getPayloadConfigFromPayload(\n\t\t\t\t\tchart.config,\n\t\t\t\t\titem,\n\t\t\t\t\tkey,\n\t\t\t\t\tchartCtx.tooltip.data\n\t\t\t\t)}\n\t\t\t\t{@const indicatorColor = color || item.config?.color || item.color}\n\t\t\t\tsvg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:size-2.5\",\n\t\t\t\t\t\tindicator === \"dot\" && \"items-center\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{#if formatter && item.value !== undefined && item.label}\n\t\t\t\t\t\t{@render formatter({\n\t\t\t\t\t\t\tvalue: item.value,\n\t\t\t\t\t\t\tname: item.label,\n\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tpayload: visibleSeries,\n\t\t\t\t\t\t})}\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t{#if itemConfig?.icon}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t{:else if !hideIndicator}\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t{#if nestLabel}\n\t\t\t\t\t\t\t\t\t{@render TooltipLabel()}\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{itemConfig?.label || item.label}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t{#if item.value !== undefined}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{item.value.toLocaleString()}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\n\t\t\t\t\t{/if}\n\t\t\t\t\n\t\t\t{/each}\n\t\t\n\t\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-tooltip.svelte" + }, + { + "path": "registry/default/ui/chart-utils.ts", + "content": "import type { Tooltip } from \"layerchart\";\nimport { getContext, setContext, type Component, type Snippet } from \"svelte\";\n\nexport const THEMES = { light: \"\", dark: \".dark\" } as const;\n\nexport type ChartConfig = {\n\t[k in string]: {\n\t\tlabel?: string;\n\t\ticon?: Component;\n\t} & (\n\t\t| { color?: string; theme?: never }\n\t\t| { color?: never; theme: Record }\n\t);\n};\n\nexport type ExtractSnippetParams = T extends Snippet<[infer P]> ? P : never;\n\nexport type TooltipPayload = Tooltip.TooltipSeries;\n\n// Helper to extract item config from a payload.\nexport function getPayloadConfigFromPayload(\n\tconfig: ChartConfig,\n\tpayload: TooltipPayload,\n\tkey: string,\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tdata?: Record | null\n) {\n\tif (typeof payload !== \"object\" || payload === null) return undefined;\n\n\tconst payloadConfig =\n\t\t\"config\" in payload && typeof payload.config === \"object\" && payload.config !== null\n\t\t\t? payload.config\n\t\t\t: undefined;\n\n\tlet configLabelKey: string = key;\n\n\tif (payload.key === key) {\n\t\tconfigLabelKey = payload.key;\n\t} else if (payload.label === key) {\n\t\tconfigLabelKey = payload.label;\n\t} else if (key in payload && typeof payload[key as keyof typeof payload] === \"string\") {\n\t\tconfigLabelKey = payload[key as keyof typeof payload] as string;\n\t} else if (\n\t\tpayloadConfig !== undefined &&\n\t\tkey in payloadConfig &&\n\t\ttypeof payloadConfig[key as keyof typeof payloadConfig] === \"string\"\n\t) {\n\t\tconfigLabelKey = payloadConfig[key as keyof typeof payloadConfig] as string;\n\t} else if (data != null && key in data && typeof data[key] === \"string\") {\n\t\tconfigLabelKey = data[key] as string;\n\t}\n\n\treturn configLabelKey in config ? config[configLabelKey] : config[key as keyof typeof config];\n}\n\ntype ChartContextValue = {\n\tconfig: ChartConfig;\n};\n\nconst chartContextKey = Symbol(\"chart-context\");\n\nexport function setChartContext(value: ChartContextValue) {\n\treturn setContext(chartContextKey, value);\n}\n\nexport function useChart() {\n\treturn getContext(chartContextKey);\n}\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-utils.ts" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/checkbox.json b/public/r/svelte/checkbox.json index 4f8649a1..0e921428 100644 --- a/public/r/svelte/checkbox.json +++ b/public/r/svelte/checkbox.json @@ -13,9 +13,15 @@ "files": [ { "path": "registry/default/ui/checkbox.svelte", - "content": "\n\n\n \n \n \n\n", + "content": "\n\n\n\t{#snippet children({ checked, indeterminate })}\n\t\t{#if checked}\n\t\t\t\n\t\t{:else if indeterminate}\n\t\t\t\n\t\t{/if}\n\t{/snippet}\n\n", "type": "registry:ui", - "target": "lib/components/ui/checkbox.svelte" + "target": "lib/components/ui/checkbox/checkbox.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" } ] } \ No newline at end of file diff --git a/public/r/svelte/collapsible.json b/public/r/svelte/collapsible.json new file mode 100644 index 00000000..26dff252 --- /dev/null +++ b/public/r/svelte/collapsible.json @@ -0,0 +1,36 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "collapsible", + "type": "registry:ui", + "description": "Collapsible component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/collapsible-content.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/collapsible/collapsible-content.svelte" + }, + { + "path": "registry/default/ui/collapsible-trigger.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/collapsible/collapsible-trigger.svelte" + }, + { + "path": "registry/default/ui/collapsible.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/collapsible/collapsible.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/combobox.json b/public/r/svelte/combobox.json new file mode 100644 index 00000000..297f8e7f --- /dev/null +++ b/public/r/svelte/combobox.json @@ -0,0 +1,30 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "combobox", + "type": "registry:ui", + "description": "Combobox component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/combobox-multi-trigger.svelte", + "content": "\n\n\n\t\n\t\t{#if values && values.length > 0}\n\t\t\t{#each values as item}\n\t\t\t\t\n\t\t\t\t\t{item.label}\n\t\t\t\t\t { e.stopPropagation(); onRemove?.(item.value); }}\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t{/each}\n\t\t{:else}\n\t\t\t{placeholder}\n\t\t{/if}\n\t\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/combobox/combobox-multi-trigger.svelte" + }, + { + "path": "registry/default/ui/combobox-trigger.svelte", + "content": "\n\n\n\t\n\t\t{value || placeholder}\n\t\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/combobox/combobox-trigger.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/command.json b/public/r/svelte/command.json new file mode 100644 index 00000000..88f77e56 --- /dev/null +++ b/public/r/svelte/command.json @@ -0,0 +1,84 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "command", + "type": "registry:ui", + "description": "Command component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/command-dialog.svelte", + "content": "\n\n\n\t\n\t\t{title}\n\t\t{description}\n\t\n\t\n\t\t\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/command/command-dialog.svelte" + }, + { + "path": "registry/default/ui/command-empty.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/command/command-empty.svelte" + }, + { + "path": "registry/default/ui/command-group.svelte", + "content": "\n\n\n\t{#if heading}\n\t\t\n\t\t\t{heading}\n\t\t\n\t{/if}\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/command/command-group.svelte" + }, + { + "path": "registry/default/ui/command-input.svelte", + "content": "\n\n
    \n\t\n\t\t\n\t\t\t{#snippet child({ props })}\n\t\t\t\t\n\t\t\t{/snippet}\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/command/command-input.svelte" + }, + { + "path": "registry/default/ui/command-item.svelte", + "content": "\n\n\n\t{@render children?.()}\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/command/command-item.svelte" + }, + { + "path": "registry/default/ui/command-link-item.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/command/command-link-item.svelte" + }, + { + "path": "registry/default/ui/command-list.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/command/command-list.svelte" + }, + { + "path": "registry/default/ui/command-loading.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/command/command-loading.svelte" + }, + { + "path": "registry/default/ui/command-separator.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/command/command-separator.svelte" + }, + { + "path": "registry/default/ui/command-shortcut.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/command/command-shortcut.svelte" + }, + { + "path": "registry/default/ui/command.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/command/command.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/context-menu.json b/public/r/svelte/context-menu.json new file mode 100644 index 00000000..e34ba522 --- /dev/null +++ b/public/r/svelte/context-menu.json @@ -0,0 +1,114 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "context-menu", + "type": "registry:ui", + "description": "Context Menu component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/context-menu-checkbox-item.svelte", + "content": "\n\n\n\t{#snippet children({ checked })}\n\t\t\n\t\t\t{#if checked}\n\t\t\t\t\n\t\t\t{/if}\n\t\t\n\t\t{@render childrenProp?.()}\n\t{/snippet}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/context-menu/context-menu-checkbox-item.svelte" + }, + { + "path": "registry/default/ui/context-menu-content.svelte", + "content": "\n\n\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/context-menu/context-menu-content.svelte" + }, + { + "path": "registry/default/ui/context-menu-group-heading.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/context-menu/context-menu-group-heading.svelte" + }, + { + "path": "registry/default/ui/context-menu-group.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/context-menu/context-menu-group.svelte" + }, + { + "path": "registry/default/ui/context-menu-item.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/context-menu/context-menu-item.svelte" + }, + { + "path": "registry/default/ui/context-menu-label.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/context-menu/context-menu-label.svelte" + }, + { + "path": "registry/default/ui/context-menu-portal.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/context-menu/context-menu-portal.svelte" + }, + { + "path": "registry/default/ui/context-menu-radio-group.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/context-menu/context-menu-radio-group.svelte" + }, + { + "path": "registry/default/ui/context-menu-radio-item.svelte", + "content": "\n\n\n\t{#snippet children({ checked })}\n\t\t\n\t\t\t{#if checked}\n\t\t\t\t\n\t\t\t{/if}\n\t\t\n\t\t{@render childrenProp?.({ checked })}\n\t{/snippet}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/context-menu/context-menu-radio-item.svelte" + }, + { + "path": "registry/default/ui/context-menu-separator.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/context-menu/context-menu-separator.svelte" + }, + { + "path": "registry/default/ui/context-menu-shortcut.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/context-menu/context-menu-shortcut.svelte" + }, + { + "path": "registry/default/ui/context-menu-sub-content.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/context-menu/context-menu-sub-content.svelte" + }, + { + "path": "registry/default/ui/context-menu-sub-trigger.svelte", + "content": "\n\n\n\t{@render children?.()}\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/context-menu/context-menu-sub-trigger.svelte" + }, + { + "path": "registry/default/ui/context-menu-sub.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/context-menu/context-menu-sub.svelte" + }, + { + "path": "registry/default/ui/context-menu-trigger.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/context-menu/context-menu-trigger.svelte" + }, + { + "path": "registry/default/ui/context-menu.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/context-menu/context-menu.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/data-table.json b/public/r/svelte/data-table.json new file mode 100644 index 00000000..2eec2f3b --- /dev/null +++ b/public/r/svelte/data-table.json @@ -0,0 +1,36 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "data-table", + "type": "registry:ui", + "description": "Data Table component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/data-table.svelte.ts", + "content": "import {\n\ttype RowData,\n\ttype TableOptions,\n\ttype TableOptionsResolved,\n\ttype TableState,\n\ttype Updater,\n\tcreateTable,\n} from \"@tanstack/table-core\";\n\n/**\n * Creates a reactive TanStack table object for Svelte.\n * @param options Table options to create the table with.\n * @returns A reactive table object.\n * @example\n * ```svelte\n * \n *\n * \n * \n * {#each table.getHeaderGroups() as headerGroup}\n * \n * {#each headerGroup.headers as header}\n * \n * {/each}\n * \n * {/each}\n * \n * \t \n *
    \n * \t \n * \t
    \n * ```\n */\nexport function createSvelteTable(options: TableOptions) {\n\tconst resolvedOptions: TableOptionsResolved = mergeObjects(\n\t\t{\n\t\t\tstate: {},\n\t\t\tonStateChange() {},\n\t\t\trenderFallbackValue: null,\n\t\t\tmergeOptions: (\n\t\t\t\tdefaultOptions: TableOptions,\n\t\t\t\toptions: Partial>\n\t\t\t) => {\n\t\t\t\treturn mergeObjects(defaultOptions, options);\n\t\t\t},\n\t\t},\n\t\toptions\n\t);\n\n\tconst table = createTable(resolvedOptions);\n\tlet state = $state(table.initialState);\n\n\tfunction updateOptions() {\n\t\ttable.setOptions(() => {\n\t\t\treturn mergeObjects(resolvedOptions, options, {\n\t\t\t\tstate: mergeObjects(state, options.state || {}),\n\n\t\t\t\tonStateChange: (updater: Updater) => {\n\t\t\t\t\tif (updater instanceof Function) state = updater(state);\n\t\t\t\t\telse state = mergeObjects(state, updater);\n\n\t\t\t\t\toptions.onStateChange?.(updater);\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t}\n\n\tupdateOptions();\n\n\t$effect.pre(() => {\n\t\tupdateOptions();\n\t});\n\n\treturn table;\n}\n\ntype MaybeThunk = T | (() => T | null | undefined);\ntype Intersection = (T extends [infer H, ...infer R]\n\t? H & Intersection\n\t: unknown) & {};\n\n/**\n * Lazily merges several objects (or thunks) while preserving\n * getter semantics from every source.\n *\n * Proxy-based to avoid known WebKit recursion issue.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function mergeObjects[]>(\n\t...sources: Sources\n): Intersection<{ [K in keyof Sources]: Sources[K] }> {\n\tconst resolve = (src: MaybeThunk): T | undefined =>\n\t\ttypeof src === \"function\" ? (src() ?? undefined) : src;\n\n\tconst findSourceWithKey = (key: PropertyKey) => {\n\t\tfor (let i = sources.length - 1; i >= 0; i--) {\n\t\t\tconst obj = resolve(sources[i]);\n\t\t\tif (obj && key in obj) return obj;\n\t\t}\n\t\treturn undefined;\n\t};\n\n\treturn new Proxy(Object.create(null), {\n\t\tget(_, key) {\n\t\t\tconst src = findSourceWithKey(key);\n\n\t\t\treturn src?.[key as never];\n\t\t},\n\n\t\thas(_, key) {\n\t\t\treturn !!findSourceWithKey(key);\n\t\t},\n\n\t\townKeys(): (string | symbol)[] {\n\t\t\t// eslint-disable-next-line svelte/prefer-svelte-reactivity\n\t\t\tconst all = new Set();\n\t\t\tfor (const s of sources) {\n\t\t\t\tconst obj = resolve(s);\n\t\t\t\tif (obj) {\n\t\t\t\t\tfor (const k of Reflect.ownKeys(obj) as (string | symbol)[]) {\n\t\t\t\t\t\tall.add(k);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn [...all];\n\t\t},\n\n\t\tgetOwnPropertyDescriptor(_, key) {\n\t\t\tconst src = findSourceWithKey(key);\n\t\t\tif (!src) return undefined;\n\t\t\treturn {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\tvalue: (src as any)[key],\n\t\t\t\twritable: true,\n\t\t\t};\n\t\t},\n\t}) as Intersection<{ [K in keyof Sources]: Sources[K] }>;\n}\n", + "type": "registry:ui", + "target": "lib/components/ui/data-table/data-table.svelte.ts" + }, + { + "path": "registry/default/ui/flex-render.svelte", + "content": " | CellContext\"\n>\n\timport type { CellContext, ColumnDefTemplate, HeaderContext } from \"@tanstack/table-core\";\n\timport { RenderComponentConfig, RenderSnippetConfig } from \"./render-helpers.js\";\n\timport type { Attachment } from \"svelte/attachments\";\n\ttype Props = {\n\t\t/** The cell or header field of the current cell's column definition. */\n\t\tcontent?: TContext extends HeaderContext\n\t\t\t? ColumnDefTemplate>\n\t\t\t: TContext extends CellContext\n\t\t\t\t? ColumnDefTemplate>\n\t\t\t\t: never;\n\t\t/** The result of the `getContext()` function of the header or cell */\n\t\tcontext: TContext;\n\n\t\t/** Used to pass attachments that can't be gotten through context */\n\t\tattach?: Attachment;\n\t};\n\n\tlet { content, context, attach }: Props = $props();\n\n\n{#if typeof content === \"string\"}\n\t{content}\n{:else if content instanceof Function}\n\t\n\t\n\t{@const result = content(context as any)}\n\t{#if result instanceof RenderComponentConfig}\n\t\t{@const { component: Component, props } = result}\n\t\t\n\t{:else if result instanceof RenderSnippetConfig}\n\t\t{@const { snippet, params } = result}\n\t\t{@render snippet({ ...params, attach })}\n\t{:else}\n\t\t{result}\n\t{/if}\n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/data-table/flex-render.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, + { + "path": "registry/default/ui/render-helpers.ts", + "content": "import type { Component, ComponentProps, Snippet } from \"svelte\";\n\n/**\n * A helper class to make it easy to identify Svelte components in\n * `columnDef.cell` and `columnDef.header` properties.\n *\n * > NOTE: This class should only be used internally by the adapter. If you're\n * reading this and you don't know what this is for, you probably don't need it.\n *\n * @example\n * ```svelte\n * {@const result = content(context as any)}\n * {#if result instanceof RenderComponentConfig}\n * {@const { component: Component, props } = result}\n * \n * {/if}\n * ```\n */\nexport class RenderComponentConfig {\n\tcomponent: TComponent;\n\tprops: ComponentProps | Record;\n\tconstructor(\n\t\tcomponent: TComponent,\n\t\tprops: ComponentProps | Record = {}\n\t) {\n\t\tthis.component = component;\n\t\tthis.props = props;\n\t}\n}\n\n/**\n * A helper class to make it easy to identify Svelte Snippets in `columnDef.cell` and `columnDef.header` properties.\n *\n * > NOTE: This class should only be used internally by the adapter. If you're\n * reading this and you don't know what this is for, you probably don't need it.\n *\n * @example\n * ```svelte\n * {@const result = content(context as any)}\n * {#if result instanceof RenderSnippetConfig}\n * {@const { snippet, params } = result}\n * {@render snippet(params)}\n * {/if}\n * ```\n */\nexport class RenderSnippetConfig {\n\tsnippet: Snippet<[TProps]>;\n\tparams: TProps;\n\tconstructor(snippet: Snippet<[TProps]>, params: TProps) {\n\t\tthis.snippet = snippet;\n\t\tthis.params = params;\n\t}\n}\n\n/**\n * A helper function to help create cells from Svelte components through ColumnDef's `cell` and `header` properties.\n *\n * This is only to be used with Svelte Components - use `renderSnippet` for Svelte Snippets.\n *\n * @param component A Svelte component\n * @param props The props to pass to `component`\n * @returns A `RenderComponentConfig` object that helps svelte-table know how to render the header/cell component.\n * @example\n * ```ts\n * // +page.svelte\n * const defaultColumns = [\n * columnHelper.accessor('name', {\n * header: header => renderComponent(SortHeader, { label: 'Name', header }),\n * }),\n * columnHelper.accessor('state', {\n * header: header => renderComponent(SortHeader, { label: 'State', header }),\n * }),\n * ]\n * ```\n * @see {@link https://tanstack.com/table/latest/docs/guide/column-defs}\n */\nexport function renderComponent<\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tT extends Component,\n\tProps extends ComponentProps,\n>(component: T, props: Props = {} as Props) {\n\treturn new RenderComponentConfig(component, props);\n}\n\n/**\n * A helper function to help create cells from Svelte Snippets through ColumnDef's `cell` and `header` properties.\n *\n * The snippet must only take one parameter.\n *\n * This is only to be used with Snippets - use `renderComponent` for Svelte Components.\n *\n * @param snippet\n * @param params\n * @returns - A `RenderSnippetConfig` object that helps svelte-table know how to render the header/cell snippet.\n * @example\n * ```ts\n * // +page.svelte\n * const defaultColumns = [\n * columnHelper.accessor('name', {\n * cell: cell => renderSnippet(nameSnippet, { name: cell.row.name }),\n * }),\n * columnHelper.accessor('state', {\n * cell: cell => renderSnippet(stateSnippet, { state: cell.row.state }),\n * }),\n * ]\n * ```\n * @see {@link https://tanstack.com/table/latest/docs/guide/column-defs}\n */\nexport function renderSnippet(snippet: Snippet<[TProps]>, params: TProps = {} as TProps) {\n\treturn new RenderSnippetConfig(snippet, params);\n}\n", + "type": "registry:ui", + "target": "lib/components/ui/data-table/render-helpers.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/dialog.json b/public/r/svelte/dialog.json index 859ddebc..3bd62ca7 100644 --- a/public/r/svelte/dialog.json +++ b/public/r/svelte/dialog.json @@ -12,52 +12,70 @@ ], "files": [ { - "path": "registry/default/ui/dialog.svelte", - "content": "\n\n\n {@render children?.()}\n\n", + "path": "registry/default/ui/dialog-close.svelte", + "content": "\n\n\n", "type": "registry:ui", - "target": "lib/components/ui/dialog.svelte" + "target": "lib/components/ui/dialog/dialog-close.svelte" }, { - "path": "registry/default/ui/dialog-trigger.svelte", - "content": "\n\n\n {@render children?.()}\n\n", + "path": "registry/default/ui/dialog-content.svelte", + "content": "\n\n\n\t\n\t\n\t\t{@render children?.()}\n\t\t{#if showCloseButton}\n\t\t\t\n\t\t\t\t\n\t\t\t\tClose\n\t\t\t\n\t\t{/if}\n\t\n\n", "type": "registry:ui", - "target": "lib/components/ui/dialog-trigger.svelte" + "target": "lib/components/ui/dialog/dialog-content.svelte" }, { - "path": "registry/default/ui/dialog-content.svelte", - "content": "\n\n\n \n \n {@render children?.()}\n \n \n Close\n \n \n\n", + "path": "registry/default/ui/dialog-description.svelte", + "content": "\n\n\n", "type": "registry:ui", - "target": "lib/components/ui/dialog-content.svelte" + "target": "lib/components/ui/dialog/dialog-description.svelte" + }, + { + "path": "registry/default/ui/dialog-footer.svelte", + "content": "\n\n\n\t{@render children?.()}\n\t{#if showCloseButton}\n\t\t\n\t\t\t{#snippet child({ props })}\n\t\t\t\t\n\t\t\t{/snippet}\n\t\t\n\t{/if}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dialog/dialog-footer.svelte" }, { "path": "registry/default/ui/dialog-header.svelte", - "content": "\n\n
    \n {@render children?.()}\n
    \n", + "content": "\n\n\n\t{@render children?.()}\n\n", "type": "registry:ui", - "target": "lib/components/ui/dialog-header.svelte" + "target": "lib/components/ui/dialog/dialog-header.svelte" }, { - "path": "registry/default/ui/dialog-footer.svelte", - "content": "\n\n
    \n {@render children?.()}\n
    \n", + "path": "registry/default/ui/dialog-overlay.svelte", + "content": "\n\n\n", "type": "registry:ui", - "target": "lib/components/ui/dialog-footer.svelte" + "target": "lib/components/ui/dialog/dialog-overlay.svelte" + }, + { + "path": "registry/default/ui/dialog-portal.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dialog/dialog-portal.svelte" }, { "path": "registry/default/ui/dialog-title.svelte", - "content": "\n\n\n {@render children?.()}\n\n", + "content": "\n\n\n", "type": "registry:ui", - "target": "lib/components/ui/dialog-title.svelte" + "target": "lib/components/ui/dialog/dialog-title.svelte" }, { - "path": "registry/default/ui/dialog-description.svelte", - "content": "\n\n\n {@render children?.()}\n\n", + "path": "registry/default/ui/dialog-trigger.svelte", + "content": "\n\n\n", "type": "registry:ui", - "target": "lib/components/ui/dialog-description.svelte" + "target": "lib/components/ui/dialog/dialog-trigger.svelte" }, { - "path": "registry/default/ui/dialog-close.svelte", - "content": "\n\n\n {@render children?.()}\n\n", + "path": "registry/default/ui/dialog.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dialog/dialog.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", "type": "registry:ui", - "target": "lib/components/ui/dialog-close.svelte" + "target": "lib/components/ui/accordion/index.ts" } ] } \ No newline at end of file diff --git a/public/r/svelte/drawer.json b/public/r/svelte/drawer.json new file mode 100644 index 00000000..68d3c57b --- /dev/null +++ b/public/r/svelte/drawer.json @@ -0,0 +1,84 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "drawer", + "type": "registry:ui", + "description": "Drawer component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/drawer-close.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/drawer/drawer-close.svelte" + }, + { + "path": "registry/default/ui/drawer-content.svelte", + "content": "\n\n\n\t\n\t\n\t\t\n", + "type": "registry:ui", + "target": "lib/components/ui/drawer/drawer-content.svelte" + }, + { + "path": "registry/default/ui/drawer-description.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/drawer/drawer-description.svelte" + }, + { + "path": "registry/default/ui/drawer-footer.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/drawer/drawer-footer.svelte" + }, + { + "path": "registry/default/ui/drawer-header.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/drawer/drawer-header.svelte" + }, + { + "path": "registry/default/ui/drawer-nested.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/drawer/drawer-nested.svelte" + }, + { + "path": "registry/default/ui/drawer-overlay.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/drawer/drawer-overlay.svelte" + }, + { + "path": "registry/default/ui/drawer-portal.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/drawer/drawer-portal.svelte" + }, + { + "path": "registry/default/ui/drawer-title.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/drawer/drawer-title.svelte" + }, + { + "path": "registry/default/ui/drawer-trigger.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/drawer/drawer-trigger.svelte" + }, + { + "path": "registry/default/ui/drawer.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/drawer/drawer.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/dropdown-menu.json b/public/r/svelte/dropdown-menu.json index c27ee721..9c117050 100644 --- a/public/r/svelte/dropdown-menu.json +++ b/public/r/svelte/dropdown-menu.json @@ -11,46 +11,112 @@ ], "files": [ { - "path": "registry/default/ui/dropdown-menu.svelte", - "content": "\n\n\n {@render children?.()}\n\n", + "path": "registry/default/ui/dropdown-menu-checkbox-group.svelte", + "content": "\n\n\n", "type": "registry:ui", - "target": "lib/components/ui/dropdown-menu.svelte" + "target": "lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte" }, { - "path": "registry/default/ui/dropdown-menu-trigger.svelte", - "content": "\n\n\n {@render children?.()}\n\n", + "path": "registry/default/ui/dropdown-menu-checkbox-item.svelte", + "content": "\n\n\n\t{#snippet children({ checked, indeterminate })}\n\t\t\n\t\t\t{#if indeterminate}\n\t\t\t\t\n\t\t\t{:else if checked}\n\t\t\t\t\n\t\t\t{/if}\n\t\t\n\t\t{@render childrenProp?.()}\n\t{/snippet}\n\n", "type": "registry:ui", - "target": "lib/components/ui/dropdown-menu-trigger.svelte" + "target": "lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte" }, { "path": "registry/default/ui/dropdown-menu-content.svelte", - "content": "\n\n\n \n {@render children?.()}\n \n\n", + "content": "\n\n\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dropdown-menu/dropdown-menu-content.svelte" + }, + { + "path": "registry/default/ui/dropdown-menu-group-heading.svelte", + "content": "\n\n\n", "type": "registry:ui", - "target": "lib/components/ui/dropdown-menu-content.svelte" + "target": "lib/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte" + }, + { + "path": "registry/default/ui/dropdown-menu-group.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dropdown-menu/dropdown-menu-group.svelte" }, { "path": "registry/default/ui/dropdown-menu-item.svelte", - "content": "\n\n\n {@render children?.()}\n\n", + "content": "\n\n\n", "type": "registry:ui", - "target": "lib/components/ui/dropdown-menu-item.svelte" + "target": "lib/components/ui/dropdown-menu/dropdown-menu-item.svelte" }, { "path": "registry/default/ui/dropdown-menu-label.svelte", - "content": "\n\n\n {@render children?.()}\n\n", + "content": "\n\n\n\t{@render children?.()}\n\n", "type": "registry:ui", - "target": "lib/components/ui/dropdown-menu-label.svelte" + "target": "lib/components/ui/dropdown-menu/dropdown-menu-label.svelte" + }, + { + "path": "registry/default/ui/dropdown-menu-portal.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dropdown-menu/dropdown-menu-portal.svelte" + }, + { + "path": "registry/default/ui/dropdown-menu-radio-group.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte" + }, + { + "path": "registry/default/ui/dropdown-menu-radio-item.svelte", + "content": "\n\n\n\t{#snippet children({ checked })}\n\t\t\n\t\t\t{#if checked}\n\t\t\t\t\n\t\t\t{/if}\n\t\t\n\t\t{@render childrenProp?.({ checked })}\n\t{/snippet}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte" }, { "path": "registry/default/ui/dropdown-menu-separator.svelte", - "content": "\n\n\n", + "content": "\n\n\n", "type": "registry:ui", - "target": "lib/components/ui/dropdown-menu-separator.svelte" + "target": "lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte" }, { "path": "registry/default/ui/dropdown-menu-shortcut.svelte", - "content": "\n\n\n {@render children?.()}\n\n", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte" + }, + { + "path": "registry/default/ui/dropdown-menu-sub-content.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte" + }, + { + "path": "registry/default/ui/dropdown-menu-sub-trigger.svelte", + "content": "\n\n\n\t{@render children?.()}\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte" + }, + { + "path": "registry/default/ui/dropdown-menu-sub.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dropdown-menu/dropdown-menu-sub.svelte" + }, + { + "path": "registry/default/ui/dropdown-menu-trigger.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dropdown-menu/dropdown-menu-trigger.svelte" + }, + { + "path": "registry/default/ui/dropdown-menu.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dropdown-menu/dropdown-menu.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", "type": "registry:ui", - "target": "lib/components/ui/dropdown-menu-shortcut.svelte" + "target": "lib/components/ui/accordion/index.ts" } ] } \ No newline at end of file diff --git a/public/r/svelte/dropzone.json b/public/r/svelte/dropzone.json new file mode 100644 index 00000000..6fa039d6 --- /dev/null +++ b/public/r/svelte/dropzone.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "dropzone", + "type": "registry:ui", + "description": "Dropzone component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/dropzone.svelte", + "content": "\n\n { e.preventDefault(); e.stopPropagation(); if (!disabled) isDragging = true; }}\n\tondragleave={(e) => { e.preventDefault(); e.stopPropagation(); isDragging = false; }}\n\tondragover={(e) => { e.preventDefault(); e.stopPropagation(); }}\n\tondrop={(e) => { e.preventDefault(); e.stopPropagation(); isDragging = false; processFiles(e.dataTransfer?.files ?? null); }}\n\tonclick={() => { if (!disabled) inputRef?.click(); }}\n\tonkeydown={handleKeyDown}\n>\n\t 1}\n\t\t{disabled}\n\t\tclass=\"hidden\"\n\t\tonchange={(e) => { processFiles((e.target as HTMLInputElement).files); (e.target as HTMLInputElement).value = ''; }}\n\t/>\n\t{#if children}\n\t\t{@render children({ isDragging, isDisabled: disabled, acceptedFiles, rejectedFiles })}\n\t{:else}\n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\t{#if variant !== 'minimal'}\n\t\t\t\t

    {isDragging ? 'Drop files here' : 'Drag & drop files'}

    \n\t\t\t\t

    or click to browse

    \n\t\t\t{/if}\n\t\t
    \n\t{/if}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/dropzone/dropzone.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/empty-state.json b/public/r/svelte/empty-state.json new file mode 100644 index 00000000..1ba09fe3 --- /dev/null +++ b/public/r/svelte/empty-state.json @@ -0,0 +1,66 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "empty-state", + "type": "registry:ui", + "description": "Empty State component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/empty-state-actions.svelte", + "content": "\n\n
    \n\t{@render children?.()}\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/empty-state/empty-state-actions.svelte" + }, + { + "path": "registry/default/ui/empty-state-description.svelte", + "content": "\n\n

    \n {@render children?.()}\n

    \n", + "type": "registry:ui", + "target": "lib/components/ui/empty-state/empty-state-description.svelte" + }, + { + "path": "registry/default/ui/empty-state-icon.svelte", + "content": "\n\nsvg]:h-8 [&>svg]:w-8',\n className\n )}\n>\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/empty-state/empty-state-icon.svelte" + }, + { + "path": "registry/default/ui/empty-state-illustration.svelte", + "content": "\n\n
    \n\t{@render children?.()}\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/empty-state/empty-state-illustration.svelte" + }, + { + "path": "registry/default/ui/empty-state-preset.svelte", + "content": "\n\n\n\t{#if illustration}\n\t\t{@render illustration()}\n\t{:else}\n\t\t\n\t\t\t\n\t\t\n\t{/if}\n\t
    \n\t\t{customTitle ?? config.title}\n\t\t{customDescription ?? config.description}\n\t\t{#if action}\n\t\t\t{@render action()}\n\t\t{/if}\n\t
    \n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/empty-state/empty-state-preset.svelte" + }, + { + "path": "registry/default/ui/empty-state-title.svelte", + "content": "\n\n

    \n {@render children?.()}\n

    \n", + "type": "registry:ui", + "target": "lib/components/ui/empty-state/empty-state-title.svelte" + }, + { + "path": "registry/default/ui/empty-state-variants.ts", + "content": "import { cva } from 'class-variance-authority'\n\nexport const emptyStateVariants = cva(\n 'flex flex-col items-center justify-center text-center border-3 border-foreground bg-card p-8 shadow-[4px_4px_0px_hsl(var(--shadow-color))]',\n {\n variants: {\n size: {\n sm: 'p-6 gap-3',\n default: 'p-8 gap-4',\n lg: 'p-12 gap-6',\n },\n },\n defaultVariants: { size: 'default' },\n }\n)\n", + "type": "registry:ui", + "target": "lib/components/ui/empty-state/empty-state-variants.ts" + }, + { + "path": "registry/default/ui/empty-state.svelte", + "content": "\n\n
    \n {@render children?.()}\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/empty-state/empty-state.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/empty.json b/public/r/svelte/empty.json new file mode 100644 index 00000000..4eb7c3ca --- /dev/null +++ b/public/r/svelte/empty.json @@ -0,0 +1,54 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "empty", + "type": "registry:ui", + "description": "Empty component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/empty-content.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/empty/empty-content.svelte" + }, + { + "path": "registry/default/ui/empty-description.svelte", + "content": "\n\na:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/empty/empty-description.svelte" + }, + { + "path": "registry/default/ui/empty-header.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/empty/empty-header.svelte" + }, + { + "path": "registry/default/ui/empty-media.svelte", + "content": "\n\n\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/empty/empty-media.svelte" + }, + { + "path": "registry/default/ui/empty-title.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/empty/empty-title.svelte" + }, + { + "path": "registry/default/ui/empty.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/empty/empty.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/field.json b/public/r/svelte/field.json new file mode 100644 index 00000000..d49c717f --- /dev/null +++ b/public/r/svelte/field.json @@ -0,0 +1,78 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "field", + "type": "registry:ui", + "description": "Field component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/field-content.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/field/field-content.svelte" + }, + { + "path": "registry/default/ui/field-description.svelte", + "content": "\n\na:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n

    \n", + "type": "registry:ui", + "target": "lib/components/ui/field/field-description.svelte" + }, + { + "path": "registry/default/ui/field-error.svelte", + "content": "\n\n{#if hasContent}\n\t\n\t\t{#if children}\n\t\t\t{@render children()}\n\t\t{:else if singleErrorMessage}\n\t\t\t{singleErrorMessage}\n\t\t{:else if isMultipleErrors}\n\t\t\t
      \n\t\t\t\t{#each errors ?? [] as error, index (index)}\n\t\t\t\t\t{#if error?.message}\n\t\t\t\t\t\t
    • {error.message}
    • \n\t\t\t\t\t{/if}\n\t\t\t\t{/each}\n\t\t\t
    \n\t\t{/if}\n\t\n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/field/field-error.svelte" + }, + { + "path": "registry/default/ui/field-group.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/field/field-group.svelte" + }, + { + "path": "registry/default/ui/field-label.svelte", + "content": "\n\n[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border *:data-[slot=field]:p-2.5 group/field-label peer/field-label flex w-fit leading-snug\",\n\t\t\"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/field/field-label.svelte" + }, + { + "path": "registry/default/ui/field-legend.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/field/field-legend.svelte" + }, + { + "path": "registry/default/ui/field-separator.svelte", + "content": "\n\n\n\t\n\t{#if children}\n\t\t\n\t\t\t{@render children()}\n\t\t\n\t{/if}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/field/field-separator.svelte" + }, + { + "path": "registry/default/ui/field-set.svelte", + "content": "\n\n[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3 flex flex-col\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/field/field-set.svelte" + }, + { + "path": "registry/default/ui/field-title.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/field/field-title.svelte" + }, + { + "path": "registry/default/ui/field.svelte", + "content": "\n\n\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/field/field.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/file-list.json b/public/r/svelte/file-list.json new file mode 100644 index 00000000..c248815b --- /dev/null +++ b/public/r/svelte/file-list.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "file-list", + "type": "registry:ui", + "description": "File List component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/file-list.svelte", + "content": "\n\n{#if files.length > 0}\n\t
    \n\t\t{#each files as item}\n\t\t\t{@const Icon = getFileIcon(item.file.type)}\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t

    {item.file.name}

    \n\t\t\t\t\t

    {formatBytes(item.file.size)}

    \n\t\t\t\t\t{#if item.error}\n\t\t\t\t\t\t

    {item.error}

    \n\t\t\t\t\t{/if}\n\t\t\t\t\t{#if item.uploading && item.progress !== undefined}\n\t\t\t\t\t\t\n\t\t\t\t\t{/if}\n\t\t\t\t
    \n\t\t\t\t{#if item.uploading}\n\t\t\t\t\t\n\t\t\t\t{:else}\n\t\t\t\t\t onRemove?.(item.file)}\n\t\t\t\t\t>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t{/if}\n\t\t\t
    \n\t\t{/each}\n\t\n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/file-list/file-list.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/form.json b/public/r/svelte/form.json new file mode 100644 index 00000000..57135c47 --- /dev/null +++ b/public/r/svelte/form.json @@ -0,0 +1,66 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "form", + "type": "registry:ui", + "description": "Form component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/form-button.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/input-group/input-group-button.svelte" + }, + { + "path": "registry/default/ui/input-group-input.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/input-group/input-group-input.svelte" + }, + { + "path": "registry/default/ui/input-group-text.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/input-group/input-group-text.svelte" + }, + { + "path": "registry/default/ui/input-group-textarea.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/input-group/input-group-textarea.svelte" + }, + { + "path": "registry/default/ui/input-group.svelte", + "content": "\n\n[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5 relative flex w-full min-w-0 items-center outline-none has-[>textarea]:h-auto\",\n\t\tclassName\n\t)}\n\t{...props}\n>\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/input-group/input-group.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/input-otp.json b/public/r/svelte/input-otp.json new file mode 100644 index 00000000..fc924c42 --- /dev/null +++ b/public/r/svelte/input-otp.json @@ -0,0 +1,42 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "input-otp", + "type": "registry:ui", + "description": "Input Otp component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, + { + "path": "registry/default/ui/input-otp-group.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/input-otp/input-otp-group.svelte" + }, + { + "path": "registry/default/ui/input-otp-separator.svelte", + "content": "\n\n\n\t{#if children}\n\t\t{@render children?.()}\n\t{:else}\n\t\t\n\t{/if}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/input-otp/input-otp-separator.svelte" + }, + { + "path": "registry/default/ui/input-otp-slot.svelte", + "content": "\n\n\n\t{cell.char}\n\t{#if cell.hasFakeCaret}\n\t\t\n\t\t\t\n\t\t\n\t{/if}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/input-otp/input-otp-slot.svelte" + }, + { + "path": "registry/default/ui/input-otp.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/input-otp/input-otp.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/input.json b/public/r/svelte/input.json index 96f7598b..c600c981 100644 --- a/public/r/svelte/input.json +++ b/public/r/svelte/input.json @@ -8,11 +8,17 @@ "utils" ], "files": [ + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, { "path": "registry/default/ui/input.svelte", - "content": "\n\n\n", + "content": "\n\n{#if type === \"file\"}\n\t\n{:else}\n\t\n{/if}\n", "type": "registry:ui", - "target": "lib/components/ui/input.svelte" + "target": "lib/components/ui/input/input.svelte" } ] } \ No newline at end of file diff --git a/public/r/svelte/item.json b/public/r/svelte/item.json new file mode 100644 index 00000000..71c00ea8 --- /dev/null +++ b/public/r/svelte/item.json @@ -0,0 +1,78 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "item", + "type": "registry:ui", + "description": "Item component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, + { + "path": "registry/default/ui/item-actions.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/item/item-actions.svelte" + }, + { + "path": "registry/default/ui/item-content.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/item/item-content.svelte" + }, + { + "path": "registry/default/ui/item-description.svelte", + "content": "\n\na:hover]:text-primary line-clamp-2 font-normal [&>a]:underline [&>a]:underline-offset-4\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n

    \n", + "type": "registry:ui", + "target": "lib/components/ui/item/item-description.svelte" + }, + { + "path": "registry/default/ui/item-footer.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/item/item-footer.svelte" + }, + { + "path": "registry/default/ui/item-group.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/item/item-group.svelte" + }, + { + "path": "registry/default/ui/item-header.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/item/item-header.svelte" + }, + { + "path": "registry/default/ui/item-media.svelte", + "content": "\n\n\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/item/item-media.svelte" + }, + { + "path": "registry/default/ui/item-separator.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/item/item-separator.svelte" + }, + { + "path": "registry/default/ui/item-title.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/item/item-title.svelte" + }, + { + "path": "registry/default/ui/item.svelte", + "content": "\n\n\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t
    \n\t\t{@render mergedProps.children?.()}\n\t
    \n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/item/item.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/kbd.json b/public/r/svelte/kbd.json new file mode 100644 index 00000000..f4f72f8f --- /dev/null +++ b/public/r/svelte/kbd.json @@ -0,0 +1,36 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "kbd", + "type": "registry:ui", + "description": "Kbd component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, + { + "path": "registry/default/ui/kbd-combo.svelte", + "content": "\n\n
    \n\t{#each keys as key, i}\n\t\t{#if i > 0}\n\t\t\t{separator}\n\t\t{/if}\n\t\t{key}\n\t{/each}\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/kbd/kbd-combo.svelte" + }, + { + "path": "registry/default/ui/kbd-group.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/kbd/kbd-group.svelte" + }, + { + "path": "registry/default/ui/kbd.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/kbd/kbd.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/label.json b/public/r/svelte/label.json index 933f5f3f..fdaba9e2 100644 --- a/public/r/svelte/label.json +++ b/public/r/svelte/label.json @@ -8,11 +8,17 @@ "utils" ], "files": [ + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, { "path": "registry/default/ui/label.svelte", - "content": "\n\n\n {@render children?.()}\n\n", + "content": "\n\n\n", "type": "registry:ui", - "target": "lib/components/ui/label.svelte" + "target": "lib/components/ui/label/label.svelte" } ] } \ No newline at end of file diff --git a/public/r/svelte/layered-card.json b/public/r/svelte/layered-card.json new file mode 100644 index 00000000..391c0827 --- /dev/null +++ b/public/r/svelte/layered-card.json @@ -0,0 +1,60 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "layered-card", + "type": "registry:ui", + "description": "Layered Card component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, + { + "path": "registry/default/ui/layered-card-content.svelte", + "content": "\n\n
    \n {@render children?.()}\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/layered-card/layered-card-content.svelte" + }, + { + "path": "registry/default/ui/layered-card-description.svelte", + "content": "\n\n

    \n {@render children?.()}\n

    \n", + "type": "registry:ui", + "target": "lib/components/ui/layered-card/layered-card-description.svelte" + }, + { + "path": "registry/default/ui/layered-card-footer.svelte", + "content": "\n\n
    \n {@render children?.()}\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/layered-card/layered-card-footer.svelte" + }, + { + "path": "registry/default/ui/layered-card-header.svelte", + "content": "\n\n
    \n {@render children?.()}\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/layered-card/layered-card-header.svelte" + }, + { + "path": "registry/default/ui/layered-card-title.svelte", + "content": "\n\n

    \n {@render children?.()}\n

    \n", + "type": "registry:ui", + "target": "lib/components/ui/layered-card/layered-card-title.svelte" + }, + { + "path": "registry/default/ui/layered-card-variants.ts", + "content": "import { cva } from 'class-variance-authority'\n\nexport const layeredCardVariants = cva('relative', {\n variants: {\n layers: { single: '', double: '', triple: '' },\n offset: { sm: '', default: '', lg: '' },\n layerColor: { default: '', primary: '', secondary: '', accent: '', muted: '' },\n },\n defaultVariants: { layers: 'double', offset: 'default', layerColor: 'default' },\n})\n", + "type": "registry:ui", + "target": "lib/components/ui/layered-card/layered-card-variants.ts" + }, + { + "path": "registry/default/ui/layered-card.svelte", + "content": "\n\n
    \n {#if layerCount >= 3}\n
    \n {/if}\n {#if layerCount >= 2}\n \n {/if}\n \n \n {@render children?.()}\n \n\n", + "type": "registry:ui", + "target": "lib/components/ui/layered-card/layered-card.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/marquee.json b/public/r/svelte/marquee.json new file mode 100644 index 00000000..dc6e6a3f --- /dev/null +++ b/public/r/svelte/marquee.json @@ -0,0 +1,36 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "marquee", + "type": "registry:ui", + "description": "Marquee component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, + { + "path": "registry/default/ui/marquee-item.svelte", + "content": "\n\n\n {@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/marquee/marquee-item.svelte" + }, + { + "path": "registry/default/ui/marquee-separator.svelte", + "content": "\n\n\n {#if children}\n {@render children()}\n {:else}\n /\n {/if}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/marquee/marquee-separator.svelte" + }, + { + "path": "registry/default/ui/marquee.svelte", + "content": "\n\n\n {#each [0, 1] as _, groupIdx}\n \n {#each { length: repeat } as _}\n {@render children?.()}\n {/each}\n \n {/each}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/marquee/marquee.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/math-curve.json b/public/r/svelte/math-curve.json new file mode 100644 index 00000000..adf53f8d --- /dev/null +++ b/public/r/svelte/math-curve.json @@ -0,0 +1,36 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "math-curve", + "type": "registry:ui", + "description": "Math Curve component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, + { + "path": "registry/default/ui/math-curve-background.svelte", + "content": "\n\n
    \n\t\n\t\t\n\t\t\n\t\n\t
    \n\t\t{@render children?.()}\n\t
    \n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/math-curve/math-curve-background.svelte" + }, + { + "path": "registry/default/ui/math-curve-loader.svelte", + "content": "\n\n\n\t\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/math-curve/math-curve-loader.svelte" + }, + { + "path": "registry/default/ui/math-curve-progress.svelte", + "content": "\n\n\n\t\n\t\n\t{#if showValue}\n\t\t\n\t\t\t{Math.round(clamped)}%\n\t\t\n\t{/if}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/math-curve/math-curve-progress.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/menubar.json b/public/r/svelte/menubar.json new file mode 100644 index 00000000..80ce316f --- /dev/null +++ b/public/r/svelte/menubar.json @@ -0,0 +1,120 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "menubar", + "type": "registry:ui", + "description": "Menubar component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, + { + "path": "registry/default/ui/menubar-checkbox-item.svelte", + "content": "\n\n\n\t{#snippet children({ checked: checked, indeterminate: indeterminate })}\n\t\t\n\t\t\t{#if indeterminate}\n\t\t\t\t\n\t\t\t{:else if checked}\n\t\t\t\t\n\t\t\t{/if}\n\t\t\n\t\t{@render childrenProp?.()}\n\t{/snippet}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/menubar/menubar-checkbox-item.svelte" + }, + { + "path": "registry/default/ui/menubar-content.svelte", + "content": "\n\n\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/menubar/menubar-content.svelte" + }, + { + "path": "registry/default/ui/menubar-group-heading.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/menubar/menubar-group-heading.svelte" + }, + { + "path": "registry/default/ui/menubar-group.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/menubar/menubar-group.svelte" + }, + { + "path": "registry/default/ui/menubar-item.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/menubar/menubar-item.svelte" + }, + { + "path": "registry/default/ui/menubar-label.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/menubar/menubar-label.svelte" + }, + { + "path": "registry/default/ui/menubar-menu.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/menubar/menubar-menu.svelte" + }, + { + "path": "registry/default/ui/menubar-portal.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/menubar/menubar-portal.svelte" + }, + { + "path": "registry/default/ui/menubar-radio-group.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/menubar/menubar-radio-group.svelte" + }, + { + "path": "registry/default/ui/menubar-radio-item.svelte", + "content": "\n\n\n\t{#snippet children({ checked })}\n\t\t\n\t\t\t{#if checked}\n\t\t\t\t\n\t\t\t{/if}\n\t\t\n\t\t{@render childrenProp?.({ checked })}\n\t{/snippet}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/menubar/menubar-radio-item.svelte" + }, + { + "path": "registry/default/ui/menubar-separator.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/menubar/menubar-separator.svelte" + }, + { + "path": "registry/default/ui/menubar-shortcut.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/menubar/menubar-shortcut.svelte" + }, + { + "path": "registry/default/ui/menubar-sub-content.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/menubar/menubar-sub-content.svelte" + }, + { + "path": "registry/default/ui/menubar-sub-trigger.svelte", + "content": "\n\n\n\t{@render children?.()}\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/menubar/menubar-sub-trigger.svelte" + }, + { + "path": "registry/default/ui/menubar-sub.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/menubar/menubar-sub.svelte" + }, + { + "path": "registry/default/ui/menubar-trigger.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/menubar/menubar-trigger.svelte" + }, + { + "path": "registry/default/ui/menubar.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/menubar/menubar.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/native-select.json b/public/r/svelte/native-select.json new file mode 100644 index 00000000..24c8c348 --- /dev/null +++ b/public/r/svelte/native-select.json @@ -0,0 +1,36 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "native-select", + "type": "registry:ui", + "description": "Native Select component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, + { + "path": "registry/default/ui/native-select-opt-group.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/native-select/native-select-opt-group.svelte" + }, + { + "path": "registry/default/ui/native-select-option.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/native-select/native-select-option.svelte" + }, + { + "path": "registry/default/ui/native-select.svelte", + "content": "\n\n\n\t\n\t\t{@render children?.()}\n\t\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/native-select/native-select.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/navigation-menu.json b/public/r/svelte/navigation-menu.json new file mode 100644 index 00000000..e4b432e4 --- /dev/null +++ b/public/r/svelte/navigation-menu.json @@ -0,0 +1,66 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "navigation-menu", + "type": "registry:ui", + "description": "Navigation Menu component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, + { + "path": "registry/default/ui/navigation-menu-content.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/navigation-menu/navigation-menu-content.svelte" + }, + { + "path": "registry/default/ui/navigation-menu-indicator.svelte", + "content": "\n\n\n\t
    \n\n", + "type": "registry:ui", + "target": "lib/components/ui/navigation-menu/navigation-menu-indicator.svelte" + }, + { + "path": "registry/default/ui/navigation-menu-item.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/navigation-menu/navigation-menu-item.svelte" + }, + { + "path": "registry/default/ui/navigation-menu-link.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/navigation-menu/navigation-menu-link.svelte" + }, + { + "path": "registry/default/ui/navigation-menu-list.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/navigation-menu/navigation-menu-list.svelte" + }, + { + "path": "registry/default/ui/navigation-menu-trigger.svelte", + "content": "\n\n\n\n\n\t{@render children?.()}\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/navigation-menu/navigation-menu-trigger.svelte" + }, + { + "path": "registry/default/ui/navigation-menu-viewport.svelte", + "content": "\n\n
    \n\t\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/navigation-menu/navigation-menu-viewport.svelte" + }, + { + "path": "registry/default/ui/navigation-menu.svelte", + "content": "\n\n\n\t{@render children?.()}\n\t{#if viewport}\n\t\t\n\t{/if}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/navigation-menu/navigation-menu.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/pagination.json b/public/r/svelte/pagination.json new file mode 100644 index 00000000..517bc482 --- /dev/null +++ b/public/r/svelte/pagination.json @@ -0,0 +1,72 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "pagination", + "type": "registry:ui", + "description": "Pagination component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, + { + "path": "registry/default/ui/pagination-content.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/pagination/pagination-content.svelte" + }, + { + "path": "registry/default/ui/pagination-ellipsis.svelte", + "content": "\n\n\n\t\n\tMore pages\n\n", + "type": "registry:ui", + "target": "lib/components/ui/pagination/pagination-ellipsis.svelte" + }, + { + "path": "registry/default/ui/pagination-item.svelte", + "content": "\n\n
  • \n\t{@render children?.()}\n
  • \n", + "type": "registry:ui", + "target": "lib/components/ui/pagination/pagination-item.svelte" + }, + { + "path": "registry/default/ui/pagination-link.svelte", + "content": "\n\n{#snippet Fallback()}\n\t{page.value}\n{/snippet}\n\n\n\t{#if children}\n\t\t{@render children?.()}\n\t{:else}\n\t\t{@render Fallback()}\n\t{/if}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/pagination/pagination-link.svelte" + }, + { + "path": "registry/default/ui/pagination-next-button.svelte", + "content": "\n\n{#snippet Fallback()}\n\tNext\n\t\n{/snippet}\n\n\n\t{#if children}\n\t\t{@render children?.()}\n\t{:else}\n\t\t{@render Fallback()}\n\t{/if}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/pagination/pagination-next-button.svelte" + }, + { + "path": "registry/default/ui/pagination-next.svelte", + "content": "\n\n\n\t\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/pagination/pagination-next.svelte" + }, + { + "path": "registry/default/ui/pagination-prev-button.svelte", + "content": "\n\n{#snippet Fallback()}\n\t\n\tPrevious\n{/snippet}\n\n\n\t{#if children}\n\t\t{@render children?.()}\n\t{:else}\n\t\t{@render Fallback()}\n\t{/if}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/pagination/pagination-prev-button.svelte" + }, + { + "path": "registry/default/ui/pagination-previous.svelte", + "content": "\n\n\n\t\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/pagination/pagination-previous.svelte" + }, + { + "path": "registry/default/ui/pagination.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/pagination/pagination.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/popover.json b/public/r/svelte/popover.json new file mode 100644 index 00000000..059f152e --- /dev/null +++ b/public/r/svelte/popover.json @@ -0,0 +1,66 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "popover", + "type": "registry:ui", + "description": "Popover component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, + { + "path": "registry/default/ui/popover-close.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/popover/popover-close.svelte" + }, + { + "path": "registry/default/ui/popover-content.svelte", + "content": "\n\n\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/popover/popover-content.svelte" + }, + { + "path": "registry/default/ui/popover-description.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/popover/popover-description.svelte" + }, + { + "path": "registry/default/ui/popover-header.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/popover/popover-header.svelte" + }, + { + "path": "registry/default/ui/popover-portal.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/popover/popover-portal.svelte" + }, + { + "path": "registry/default/ui/popover-title.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/popover/popover-title.svelte" + }, + { + "path": "registry/default/ui/popover-trigger.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/popover/popover-trigger.svelte" + }, + { + "path": "registry/default/ui/popover.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/popover/popover.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/progress.json b/public/r/svelte/progress.json index 5142bb24..2919d836 100644 --- a/public/r/svelte/progress.json +++ b/public/r/svelte/progress.json @@ -10,11 +10,17 @@ "utils" ], "files": [ + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, { "path": "registry/default/ui/progress.svelte", - "content": "\n\n\n \n\n", + "content": "\n\n\n\t\n\n", "type": "registry:ui", - "target": "lib/components/ui/progress.svelte" + "target": "lib/components/ui/progress/progress.svelte" } ] } \ No newline at end of file diff --git a/public/r/svelte/radio-group.json b/public/r/svelte/radio-group.json new file mode 100644 index 00000000..2a5a1b1b --- /dev/null +++ b/public/r/svelte/radio-group.json @@ -0,0 +1,30 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "radio-group", + "type": "registry:ui", + "description": "Radio Group component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, + { + "path": "registry/default/ui/radio-group-item.svelte", + "content": "\n\n\n\t{#snippet children({ checked })}\n\t\t
    \n\t\t\t{#if checked}\n\t\t\t\t\n\t\t\t{/if}\n\t\t
    \n\t{/snippet}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/radio-group/radio-group-item.svelte" + }, + { + "path": "registry/default/ui/radio-group.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/radio-group/radio-group.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/range-calendar.json b/public/r/svelte/range-calendar.json new file mode 100644 index 00000000..7d6f2c28 --- /dev/null +++ b/public/r/svelte/range-calendar.json @@ -0,0 +1,126 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "range-calendar", + "type": "registry:ui", + "description": "Range Calendar component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, + { + "path": "registry/default/ui/range-calendar-caption.svelte", + "content": "\n\n{#snippet MonthSelect()}\n\t {\n\t\t\tif (!placeholder) return;\n\t\t\tconst v = Number.parseInt(e.currentTarget.value);\n\t\t\tconst newPlaceholder = placeholder.set({ month: v });\n\t\t\tplaceholder = newPlaceholder.subtract({ months: monthIndex });\n\t\t}}\n\t/>\n{/snippet}\n\n{#snippet YearSelect()}\n\t\n{/snippet}\n\n{#if captionLayout === \"dropdown\"}\n\t{@render MonthSelect()}\n\t{@render YearSelect()}\n{:else if captionLayout === \"dropdown-months\"}\n\t{@render MonthSelect()}\n\t{#if placeholder}\n\t\t{formatYear(placeholder)}\n\t{/if}\n{:else if captionLayout === \"dropdown-years\"}\n\t{#if placeholder}\n\t\t{formatMonth(placeholder)}\n\t{/if}\n\t{@render YearSelect()}\n{:else}\n\t{formatMonth(month)} {formatYear(month)}\n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-caption.svelte" + }, + { + "path": "registry/default/ui/range-calendar-cell.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-cell.svelte" + }, + { + "path": "registry/default/ui/range-calendar-day.svelte", + "content": "\n\nspan]:text-xs [&>span]:opacity-70\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-day.svelte" + }, + { + "path": "registry/default/ui/range-calendar-grid-body.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-grid-body.svelte" + }, + { + "path": "registry/default/ui/range-calendar-grid-head.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-grid-head.svelte" + }, + { + "path": "registry/default/ui/range-calendar-grid-row.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-grid-row.svelte" + }, + { + "path": "registry/default/ui/range-calendar-grid.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-grid.svelte" + }, + { + "path": "registry/default/ui/range-calendar-head-cell.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-head-cell.svelte" + }, + { + "path": "registry/default/ui/range-calendar-header.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-header.svelte" + }, + { + "path": "registry/default/ui/range-calendar-heading.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-heading.svelte" + }, + { + "path": "registry/default/ui/range-calendar-month-select.svelte", + "content": "\n\n\n\t\n\t\t{#snippet child({ props, monthItems, selectedMonthItem })}\n\t\t\t\n\t\t\tsvg]:text-muted-foreground flex h-(--cell-size) items-center gap-1 rounded-md ps-2 pe-1 text-sm font-medium select-none [&>svg]:size-3.5\"\n\t\t\t\taria-hidden=\"true\"\n\t\t\t>\n\t\t\t\t{monthItems.find((item) => item.value === value)?.label || selectedMonthItem.label}\n\t\t\t\t\n\t\t\t\n\t\t{/snippet}\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-month-select.svelte" + }, + { + "path": "registry/default/ui/range-calendar-month.svelte", + "content": "\n\n
    \n\t{@render children?.()}\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-month.svelte" + }, + { + "path": "registry/default/ui/range-calendar-months.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-months.svelte" + }, + { + "path": "registry/default/ui/range-calendar-nav.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-nav.svelte" + }, + { + "path": "registry/default/ui/range-calendar-next-button.svelte", + "content": "\n\n{#snippet Fallback()}\n\t\n{/snippet}\n\n\n\t{#if children}\n\t\t{@render children?.()}\n\t{:else}\n\t\t{@render Fallback()}\n\t{/if}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-next-button.svelte" + }, + { + "path": "registry/default/ui/range-calendar-prev-button.svelte", + "content": "\n\n{#snippet Fallback()}\n\t\n{/snippet}\n\n\n\t{#if children}\n\t\t{@render children?.()}\n\t{:else}\n\t\t{@render Fallback()}\n\t{/if}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-prev-button.svelte" + }, + { + "path": "registry/default/ui/range-calendar-year-select.svelte", + "content": "\n\n\n\t\n\t\t{#snippet child({ props, yearItems, selectedYearItem })}\n\t\t\t\n\t\t\tsvg]:text-muted-foreground flex h-(--cell-size) items-center gap-1 rounded-md ps-2 pe-1 text-sm font-medium select-none [&>svg]:size-3.5\"\n\t\t\t\taria-hidden=\"true\"\n\t\t\t>\n\t\t\t\t{yearItems.find((item) => item.value === value)?.label || selectedYearItem.label}\n\t\t\t\t\n\t\t\t\n\t\t{/snippet}\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-year-select.svelte" + }, + { + "path": "registry/default/ui/range-calendar.svelte", + "content": "\n\n\n\t{#snippet children({ months, weekdays })}\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{#each months as month, monthIndex (month)}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{#each weekdays as weekday, i (i)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{weekday.slice(0, 2)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{#each month.weeks as weekDates (weekDates)}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{#each weekDates as date (date)}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{#if day}\n\t\t\t\t\t\t\t\t\t\t\t\t{@render day({\n\t\t\t\t\t\t\t\t\t\t\t\t\tday: date,\n\t\t\t\t\t\t\t\t\t\t\t\t\toutsideMonth: !isEqualMonth(date, month.value),\n\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t{/each}\n\t\t\n\t{/snippet}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/rating.json b/public/r/svelte/rating.json new file mode 100644 index 00000000..9edeca9c --- /dev/null +++ b/public/r/svelte/rating.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "rating", + "type": "registry:ui", + "description": "Rating component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, + { + "path": "registry/default/ui/rating.svelte", + "content": "\n\n\n\t{#each { length: max } as _, i}\n\t\t{@const { isFilled, isHalfFilled } = getFillState(i)}\n\t\t handleIconClick(e, i)}\n\t\t\tonmousemove={(e) => handleMouseMove(e, i)}\n\t\t>\n\t\t\t\n\t\t\t{#if isFilled || isHalfFilled}\n\t\t\t\t\n\t\t\t{/if}\n\t\t\n\t{/each}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/rating/rating.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/resizable.json b/public/r/svelte/resizable.json new file mode 100644 index 00000000..5a4677ce --- /dev/null +++ b/public/r/svelte/resizable.json @@ -0,0 +1,30 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "resizable", + "type": "registry:ui", + "description": "Resizable component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, + { + "path": "registry/default/ui/resizable-handle.svelte", + "content": "\n\ndiv]:rotate-90\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{#if withHandle}\n\t\t
    \n\t{/if}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/resizable/resizable-handle.svelte" + }, + { + "path": "registry/default/ui/resizable-pane-group.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/resizable/resizable-pane-group.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/scroll-area.json b/public/r/svelte/scroll-area.json new file mode 100644 index 00000000..f96a89a3 --- /dev/null +++ b/public/r/svelte/scroll-area.json @@ -0,0 +1,30 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "scroll-area", + "type": "registry:ui", + "description": "Scroll Area component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, + { + "path": "registry/default/ui/scroll-area-scrollbar.svelte", + "content": "\n\n\n\t{@render children?.()}\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/scroll-area/scroll-area-scrollbar.svelte" + }, + { + "path": "registry/default/ui/scroll-area.svelte", + "content": "\n\n\n\t\n\t\t{@render children?.()}\n\t\n\t{#if orientation === \"vertical\" || orientation === \"both\"}\n\t\t\n\t{/if}\n\t{#if orientation === \"horizontal\" || orientation === \"both\"}\n\t\t\n\t{/if}\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/scroll-area/scroll-area.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/select.json b/public/r/svelte/select.json index f0c24c32..858f7259 100644 --- a/public/r/svelte/select.json +++ b/public/r/svelte/select.json @@ -12,52 +12,76 @@ ], "files": [ { - "path": "registry/default/ui/select.svelte", - "content": "\n\n\n {@render children?.()}\n\n", + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", "type": "registry:ui", - "target": "lib/components/ui/select.svelte" + "target": "lib/components/ui/accordion/index.ts" }, { - "path": "registry/default/ui/select-trigger.svelte", - "content": "\n\nspan]:line-clamp-1 transition-all duration-200',\n className\n )}\n {...restProps}\n>\n {@render children?.()}\n \n\n", + "path": "registry/default/ui/select-content.svelte", + "content": "\n\n\n\t\n\t\t\n\t\t\n\t\t\t{@render children?.()}\n\t\t\n\t\t\n\t\n\n", "type": "registry:ui", - "target": "lib/components/ui/select-trigger.svelte" + "target": "lib/components/ui/select/select-content.svelte" }, { - "path": "registry/default/ui/select-value.svelte", - "content": "\n\n\n", + "path": "registry/default/ui/select-group-heading.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", "type": "registry:ui", - "target": "lib/components/ui/select-value.svelte" + "target": "lib/components/ui/select/select-group-heading.svelte" }, { - "path": "registry/default/ui/select-content.svelte", - "content": "\n\n\n \n \n \n \n \n {@render children?.()}\n \n \n \n \n \n\n", + "path": "registry/default/ui/select-group.svelte", + "content": "\n\n\n", "type": "registry:ui", - "target": "lib/components/ui/select-content.svelte" + "target": "lib/components/ui/select/select-group.svelte" }, { "path": "registry/default/ui/select-item.svelte", - "content": "\n\n\n {#snippet children({ isSelected })}\n \n {#if isSelected}\n \n {/if}\n \n {label}\n {/snippet}\n\n", + "content": "\n\n\n\t{#snippet children({ selected, highlighted })}\n\t\t\n\t\t\t{#if selected}\n\t\t\t\t\n\t\t\t{/if}\n\t\t\n\t\t{#if childrenProp}\n\t\t\t{@render childrenProp({ selected, highlighted })}\n\t\t{:else}\n\t\t\t{label || value}\n\t\t{/if}\n\t{/snippet}\n\n", "type": "registry:ui", - "target": "lib/components/ui/select-item.svelte" + "target": "lib/components/ui/select/select-item.svelte" }, { - "path": "registry/default/ui/select-group.svelte", - "content": "\n\n\n {@render children?.()}\n\n", + "path": "registry/default/ui/select-label.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", "type": "registry:ui", - "target": "lib/components/ui/select-group.svelte" + "target": "lib/components/ui/select/select-label.svelte" }, { - "path": "registry/default/ui/select-label.svelte", - "content": "\n\n\n {@render children?.()}\n\n", + "path": "registry/default/ui/select-portal.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/select/select-portal.svelte" + }, + { + "path": "registry/default/ui/select-scroll-down-button.svelte", + "content": "\n\n\n\t\n\n", "type": "registry:ui", - "target": "lib/components/ui/select-label.svelte" + "target": "lib/components/ui/select/select-scroll-down-button.svelte" + }, + { + "path": "registry/default/ui/select-scroll-up-button.svelte", + "content": "\n\n\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/select/select-scroll-up-button.svelte" }, { "path": "registry/default/ui/select-separator.svelte", - "content": "\n\n\n", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/select/select-separator.svelte" + }, + { + "path": "registry/default/ui/select-trigger.svelte", + "content": "\n\nspan]:line-clamp-1 transition-all duration-200\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/select/select-trigger.svelte" + }, + { + "path": "registry/default/ui/select.svelte", + "content": "\n\n\n", "type": "registry:ui", - "target": "lib/components/ui/select-separator.svelte" + "target": "lib/components/ui/select/select.svelte" } ] } \ No newline at end of file diff --git a/public/r/svelte/separator.json b/public/r/svelte/separator.json index cb0c568a..8598fa33 100644 --- a/public/r/svelte/separator.json +++ b/public/r/svelte/separator.json @@ -8,11 +8,17 @@ "utils" ], "files": [ + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, { "path": "registry/default/ui/separator.svelte", - "content": "\n\n\n", + "content": "\n\n\n", "type": "registry:ui", - "target": "lib/components/ui/separator.svelte" + "target": "lib/components/ui/separator/separator.svelte" } ] } \ No newline at end of file diff --git a/public/r/svelte/sheet.json b/public/r/svelte/sheet.json new file mode 100644 index 00000000..f7827347 --- /dev/null +++ b/public/r/svelte/sheet.json @@ -0,0 +1,78 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "sheet", + "type": "registry:ui", + "description": "Sheet component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, + { + "path": "registry/default/ui/sheet-close.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/sheet/sheet-close.svelte" + }, + { + "path": "registry/default/ui/sheet-content.svelte", + "content": "\n\n\n\n\n\t\n\t\n\t\t{@render children?.()}\n\t\t{#if showCloseButton}\n\t\t\t\n\t\t\t\t\n\t\t\t\tClose\n\t\t\t\n\t\t{/if}\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/sheet/sheet-content.svelte" + }, + { + "path": "registry/default/ui/sheet-description.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/sheet/sheet-description.svelte" + }, + { + "path": "registry/default/ui/sheet-footer.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/sheet/sheet-footer.svelte" + }, + { + "path": "registry/default/ui/sheet-header.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/sheet/sheet-header.svelte" + }, + { + "path": "registry/default/ui/sheet-overlay.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/sheet/sheet-overlay.svelte" + }, + { + "path": "registry/default/ui/sheet-portal.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/sheet/sheet-portal.svelte" + }, + { + "path": "registry/default/ui/sheet-title.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/sheet/sheet-title.svelte" + }, + { + "path": "registry/default/ui/sheet-trigger.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/sheet/sheet-trigger.svelte" + }, + { + "path": "registry/default/ui/sheet.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/sheet/sheet.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/sidebar.json b/public/r/svelte/sidebar.json new file mode 100644 index 00000000..9b43351d --- /dev/null +++ b/public/r/svelte/sidebar.json @@ -0,0 +1,168 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "sidebar", + "type": "registry:ui", + "description": "Sidebar component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/constants.ts", + "content": "export const SIDEBAR_COOKIE_NAME = \"sidebar_state\";\nexport const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nexport const SIDEBAR_WIDTH = \"16rem\";\nexport const SIDEBAR_WIDTH_MOBILE = \"18rem\";\nexport const SIDEBAR_WIDTH_ICON = \"3rem\";\nexport const SIDEBAR_KEYBOARD_SHORTCUT = \"b\";\n", + "type": "registry:ui", + "target": "lib/components/ui/sidebar/constants.ts" + }, + { + "path": "registry/default/ui/context.svelte.ts", + "content": "import { IsMobile } from \"$lib/hooks/is-mobile.svelte.js\";\nimport { getContext, setContext } from \"svelte\";\nimport { SIDEBAR_KEYBOARD_SHORTCUT } from \"./constants.js\";\n\ntype Getter = () => T;\n\nexport type SidebarStateProps = {\n\t/**\n\t * A getter function that returns the current open state of the sidebar.\n\t * We use a getter function here to support `bind:open` on the `Sidebar.Provider`\n\t * component.\n\t */\n\topen: Getter;\n\n\t/**\n\t * A function that sets the open state of the sidebar. To support `bind:open`, we need\n\t * a source of truth for changing the open state to ensure it will be synced throughout\n\t * the sub-components and any `bind:` references.\n\t */\n\tsetOpen: (open: boolean) => void;\n};\n\nclass SidebarState {\n\treadonly props: SidebarStateProps;\n\topen = $derived.by(() => this.props.open());\n\topenMobile = $state(false);\n\tsetOpen: SidebarStateProps[\"setOpen\"];\n\t#isMobile: IsMobile;\n\tstate = $derived.by(() => (this.open ? \"expanded\" : \"collapsed\"));\n\n\tconstructor(props: SidebarStateProps) {\n\t\tthis.setOpen = props.setOpen;\n\t\tthis.#isMobile = new IsMobile();\n\t\tthis.props = props;\n\t}\n\n\t// Convenience getter for checking if the sidebar is mobile\n\t// without this, we would need to use `sidebar.isMobile.current` everywhere\n\tget isMobile() {\n\t\treturn this.#isMobile.current;\n\t}\n\n\t// Event handler to apply to the ``\n\thandleShortcutKeydown = (e: KeyboardEvent) => {\n\t\tif (e.key === SIDEBAR_KEYBOARD_SHORTCUT && (e.metaKey || e.ctrlKey)) {\n\t\t\te.preventDefault();\n\t\t\tthis.toggle();\n\t\t}\n\t};\n\n\tsetOpenMobile = (value: boolean) => {\n\t\tthis.openMobile = value;\n\t};\n\n\ttoggle = () => {\n\t\treturn this.#isMobile.current\n\t\t\t? (this.openMobile = !this.openMobile)\n\t\t\t: this.setOpen(!this.open);\n\t};\n}\n\nconst SYMBOL_KEY = \"scn-sidebar\";\n\n/**\n * Instantiates a new `SidebarState` instance and sets it in the context.\n *\n * @param props The constructor props for the `SidebarState` class.\n * @returns The `SidebarState` instance.\n */\nexport function setSidebar(props: SidebarStateProps): SidebarState {\n\treturn setContext(Symbol.for(SYMBOL_KEY), new SidebarState(props));\n}\n\n/**\n * Retrieves the `SidebarState` instance from the context. This is a class instance,\n * so you cannot destructure it.\n * @returns The `SidebarState` instance.\n */\nexport function useSidebar(): SidebarState {\n\treturn getContext(Symbol.for(SYMBOL_KEY));\n}\n", + "type": "registry:ui", + "target": "lib/components/ui/sidebar/context.svelte.ts" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, + { + "path": "registry/default/ui/sidebar-content.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/sidebar/sidebar-content.svelte" + }, + { + "path": "registry/default/ui/sidebar-footer.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/sidebar/sidebar-footer.svelte" + }, + { + "path": "registry/default/ui/sidebar-group-action.svelte", + "content": "\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t\n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/sidebar/sidebar-group-action.svelte" + }, + { + "path": "registry/default/ui/sidebar-group-content.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/sidebar/sidebar-group-content.svelte" + }, + { + "path": "registry/default/ui/sidebar-group-label.svelte", + "content": "\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t
    \n\t\t{@render children?.()}\n\t
    \n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/sidebar/sidebar-group-label.svelte" + }, + { + "path": "registry/default/ui/sidebar-group.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/sidebar/sidebar-group.svelte" + }, + { + "path": "registry/default/ui/sidebar-header.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/sidebar/sidebar-header.svelte" + }, + { + "path": "registry/default/ui/sidebar-input.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/sidebar/sidebar-input.svelte" + }, + { + "path": "registry/default/ui/sidebar-inset.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/sidebar/sidebar-inset.svelte" + }, + { + "path": "registry/default/ui/sidebar-menu-action.svelte", + "content": "\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t\n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/sidebar/sidebar-menu-action.svelte" + }, + { + "path": "registry/default/ui/sidebar-menu-badge.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/sidebar/sidebar-menu-badge.svelte" + }, + { + "path": "registry/default/ui/sidebar-menu-button.svelte", + "content": "\n\n\n\n{#snippet Button({ props }: { props?: Record })}\n\t{@const mergedProps = mergeProps(buttonProps, props)}\n\t{#if child}\n\t\t{@render child({ props: mergedProps })}\n\t{:else}\n\t\t\n\t{/if}\n{/snippet}\n\n{#if !tooltipContent}\n\t{@render Button({})}\n{:else}\n\t\n\t\t\n\t\t\t{#snippet child({ props })}\n\t\t\t\t{@render Button({ props })}\n\t\t\t{/snippet}\n\t\t\n\t\t\n\t\t\t{#if typeof tooltipContent === \"string\"}\n\t\t\t\t{tooltipContent}\n\t\t\t{:else if tooltipContent}\n\t\t\t\t{@render tooltipContent()}\n\t\t\t{/if}\n\t\t\n\t\n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/sidebar/sidebar-menu-button.svelte" + }, + { + "path": "registry/default/ui/sidebar-menu-item.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/sidebar/sidebar-menu-item.svelte" + }, + { + "path": "registry/default/ui/sidebar-menu-skeleton.svelte", + "content": "\n\n\n\t{#if showIcon}\n\t\t\n\t{/if}\n\t\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/sidebar/sidebar-menu-skeleton.svelte" + }, + { + "path": "registry/default/ui/sidebar-menu-sub-button.svelte", + "content": "\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t\n\t\t{@render children?.()}\n\t\n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/sidebar/sidebar-menu-sub-button.svelte" + }, + { + "path": "registry/default/ui/sidebar-menu-sub-item.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/sidebar/sidebar-menu-sub-item.svelte" + }, + { + "path": "registry/default/ui/sidebar-menu-sub.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/sidebar/sidebar-menu-sub.svelte" + }, + { + "path": "registry/default/ui/sidebar-menu.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/sidebar/sidebar-menu.svelte" + }, + { + "path": "registry/default/ui/sidebar-provider.svelte", + "content": "\n\n\n\n\n\t\n\t\t{@render children?.()}\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/sidebar/sidebar-provider.svelte" + }, + { + "path": "registry/default/ui/sidebar-rail.svelte", + "content": "\n\n
    @@ -1379,7 +1385,7 @@ export function Charts() { Chart Components

    - Beautiful charts with neubrutalism styling. Built on top of {framework === 'react' ? 'Recharts' : 'vue-echarts'} with bold borders and hard shadows. + Beautiful charts with neubrutalism styling. Built on top of {framework === 'react' ? 'Recharts' : framework === 'vue' ? 'vue-echarts' : 'Svelte-native chart components'} with bold borders and hard shadows.

    {framework === 'vue' && ( diff --git a/src/pages/ShapeBuilder.tsx b/src/pages/ShapeBuilder.tsx index 325a5010..6cc4f190 100644 --- a/src/pages/ShapeBuilder.tsx +++ b/src/pages/ShapeBuilder.tsx @@ -167,7 +167,7 @@ export function ShapeBuilder() { return `\n\n` } - const code = framework === 'react' ? buildReactCode() : buildVueCode() + const code = framework === 'vue' ? buildVueCode() : buildReactCode() const copyCode = () => { navigator.clipboard.writeText(code) @@ -182,8 +182,8 @@ export function ShapeBuilder() { <> { navigator.clipboard.writeText(currentCode) @@ -398,7 +398,7 @@ export function Shapes() { {[ { prop: 'size', type: 'number', def: '100' }, - { prop: framework === 'react' ? 'strokeWidth' : 'stroke-width', type: 'number', def: '3' }, + { prop: framework === 'vue' ? 'stroke-width' : 'strokeWidth', type: 'number', def: '3' }, { prop: 'filled', type: 'boolean', def: 'true' }, { prop: 'color', type: 'string', def: 'currentColor' }, { prop: 'animation', type: "'none' | 'spin' | 'pulse' | 'float' | 'wiggle' | 'bounce' | 'glitch'", def: "'none'" }, diff --git a/src/pages/docs/EmptyStateDoc.tsx b/src/pages/docs/EmptyStateDoc.tsx index 0db0978c..23cfec0e 100644 --- a/src/pages/docs/EmptyStateDoc.tsx +++ b/src/pages/docs/EmptyStateDoc.tsx @@ -518,7 +518,7 @@ export function EmptyStateDoc() { diff --git a/src/pages/docs/Installation.tsx b/src/pages/docs/Installation.tsx index 3bd66f83..aadff800 100644 --- a/src/pages/docs/Installation.tsx +++ b/src/pages/docs/Installation.tsx @@ -1,7 +1,7 @@ import { Badge } from '@/components/ui/badge' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' import { useState } from 'react' -import { Terminal } from 'lucide-react' +import { Check, Terminal } from 'lucide-react' import { Button } from '@/components/ui/button' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { toast } from 'sonner' From 0f77c1e3957847f403461880b7d53666464f5f96 Mon Sep 17 00:00:00 2001 From: Max Farrell Date: Tue, 19 May 2026 10:49:41 -0400 Subject: [PATCH 6/6] Bring Svelte registry to framework parity --- packages/svelte/scripts/build-registry.js | 27 ++++ .../ui/canvas-effects/aurora.svelte | 6 + .../ui/canvas-effects/canvas-effect.svelte | 150 ++++++++++++++++++ .../ui/canvas-effects/dot-blob.svelte | 6 + .../ui/canvas-effects/dot-wave.svelte | 6 + .../ui/canvas-effects/flow-field.svelte | 6 + .../lib/components/ui/canvas-effects/index.ts | 12 ++ .../ui/canvas-effects/lissajous-grid.svelte | 6 + .../ui/canvas-effects/matrix-rain.svelte | 6 + .../ui/canvas-effects/metaballs.svelte | 6 + .../ui/canvas-effects/mouse-ripple.svelte | 6 + .../ui/canvas-effects/particle-web.svelte | 6 + .../ui/canvas-effects/plasma.svelte | 6 + .../src/lib/components/ui/shapes/index.ts | 59 +++++++ .../src/lib/components/ui/shapes/shape.svelte | 43 +++++ .../src/lib/components/ui/theme/index.ts | 1 + .../src/lib/components/ui/theme/theme.ts | 7 + .../lib/components/ui/time-picker/index.ts | 3 + .../ui/time-picker/time-picker.svelte | 122 ++++++++++++++ .../src/lib/components/ui/tour/index.ts | 4 + .../src/lib/components/ui/tour/tour.svelte | 98 ++++++++++++ .../src/lib/components/ui/tree-view/index.ts | 4 + .../components/ui/tree-view/tree-view.svelte | 104 ++++++++++++ public/r/svelte/aurora.json | 24 +++ public/r/svelte/canvas-effects.json | 84 ++++++++++ public/r/svelte/chart-utils.json | 18 +++ public/r/svelte/date-range-picker.json | 123 ++++++++++++++ public/r/svelte/donut-chart.json | 38 +++++ public/r/svelte/dot-blob.json | 24 +++ public/r/svelte/dot-wave.json | 24 +++ public/r/svelte/flow-field.json | 24 +++ public/r/svelte/funnel-chart.json | 38 +++++ public/r/svelte/gauge-chart.json | 38 +++++ public/r/svelte/heatmap-chart.json | 38 +++++ public/r/svelte/index.json | 135 ++++++++++++++++ public/r/svelte/lissajous-grid.json | 24 +++ public/r/svelte/matrix-rain.json | 24 +++ public/r/svelte/metaballs.json | 24 +++ public/r/svelte/mouse-ripple.json | 24 +++ public/r/svelte/particle-web.json | 24 +++ public/r/svelte/plasma.json | 24 +++ public/r/svelte/radar-chart.json | 38 +++++ public/r/svelte/radial-bar-chart.json | 38 +++++ public/r/svelte/sankey-chart.json | 38 +++++ public/r/svelte/shapes.json | 24 +++ public/r/svelte/sparkline.json | 38 +++++ public/r/svelte/theme.json | 18 +++ public/r/svelte/time-picker.json | 24 +++ public/r/svelte/tour.json | 24 +++ public/r/svelte/tree-view.json | 24 +++ public/r/svelte/treemap-chart.json | 38 +++++ 51 files changed, 1750 insertions(+) create mode 100644 packages/svelte/src/lib/components/ui/canvas-effects/aurora.svelte create mode 100644 packages/svelte/src/lib/components/ui/canvas-effects/canvas-effect.svelte create mode 100644 packages/svelte/src/lib/components/ui/canvas-effects/dot-blob.svelte create mode 100644 packages/svelte/src/lib/components/ui/canvas-effects/dot-wave.svelte create mode 100644 packages/svelte/src/lib/components/ui/canvas-effects/flow-field.svelte create mode 100644 packages/svelte/src/lib/components/ui/canvas-effects/index.ts create mode 100644 packages/svelte/src/lib/components/ui/canvas-effects/lissajous-grid.svelte create mode 100644 packages/svelte/src/lib/components/ui/canvas-effects/matrix-rain.svelte create mode 100644 packages/svelte/src/lib/components/ui/canvas-effects/metaballs.svelte create mode 100644 packages/svelte/src/lib/components/ui/canvas-effects/mouse-ripple.svelte create mode 100644 packages/svelte/src/lib/components/ui/canvas-effects/particle-web.svelte create mode 100644 packages/svelte/src/lib/components/ui/canvas-effects/plasma.svelte create mode 100644 packages/svelte/src/lib/components/ui/shapes/index.ts create mode 100644 packages/svelte/src/lib/components/ui/shapes/shape.svelte create mode 100644 packages/svelte/src/lib/components/ui/theme/index.ts create mode 100644 packages/svelte/src/lib/components/ui/theme/theme.ts create mode 100644 packages/svelte/src/lib/components/ui/time-picker/index.ts create mode 100644 packages/svelte/src/lib/components/ui/time-picker/time-picker.svelte create mode 100644 packages/svelte/src/lib/components/ui/tour/index.ts create mode 100644 packages/svelte/src/lib/components/ui/tour/tour.svelte create mode 100644 packages/svelte/src/lib/components/ui/tree-view/index.ts create mode 100644 packages/svelte/src/lib/components/ui/tree-view/tree-view.svelte create mode 100644 public/r/svelte/aurora.json create mode 100644 public/r/svelte/canvas-effects.json create mode 100644 public/r/svelte/chart-utils.json create mode 100644 public/r/svelte/date-range-picker.json create mode 100644 public/r/svelte/donut-chart.json create mode 100644 public/r/svelte/dot-blob.json create mode 100644 public/r/svelte/dot-wave.json create mode 100644 public/r/svelte/flow-field.json create mode 100644 public/r/svelte/funnel-chart.json create mode 100644 public/r/svelte/gauge-chart.json create mode 100644 public/r/svelte/heatmap-chart.json create mode 100644 public/r/svelte/lissajous-grid.json create mode 100644 public/r/svelte/matrix-rain.json create mode 100644 public/r/svelte/metaballs.json create mode 100644 public/r/svelte/mouse-ripple.json create mode 100644 public/r/svelte/particle-web.json create mode 100644 public/r/svelte/plasma.json create mode 100644 public/r/svelte/radar-chart.json create mode 100644 public/r/svelte/radial-bar-chart.json create mode 100644 public/r/svelte/sankey-chart.json create mode 100644 public/r/svelte/shapes.json create mode 100644 public/r/svelte/sparkline.json create mode 100644 public/r/svelte/theme.json create mode 100644 public/r/svelte/time-picker.json create mode 100644 public/r/svelte/tour.json create mode 100644 public/r/svelte/tree-view.json create mode 100644 public/r/svelte/treemap-chart.json diff --git a/packages/svelte/scripts/build-registry.js b/packages/svelte/scripts/build-registry.js index 8dfe2c00..f6e5c512 100644 --- a/packages/svelte/scripts/build-registry.js +++ b/packages/svelte/scripts/build-registry.js @@ -116,6 +116,32 @@ const componentMeta = { }, } +const registryAliases = { + aurora: { deps: [], desc: 'Animated aurora canvas background', files: ['aurora.svelte', 'canvas-effect.svelte'] }, + 'dot-blob': { deps: [], desc: 'Animated dot blob canvas effect', files: ['dot-blob.svelte', 'canvas-effect.svelte'] }, + 'dot-wave': { deps: [], desc: 'Animated dot wave canvas effect', files: ['dot-wave.svelte', 'canvas-effect.svelte'] }, + 'flow-field': { deps: [], desc: 'Animated flow field canvas effect', files: ['flow-field.svelte', 'canvas-effect.svelte'] }, + 'lissajous-grid': { deps: [], desc: 'Animated Lissajous grid canvas effect', files: ['lissajous-grid.svelte', 'canvas-effect.svelte'] }, + 'matrix-rain': { deps: [], desc: 'Animated matrix rain canvas effect', files: ['matrix-rain.svelte', 'canvas-effect.svelte'] }, + metaballs: { deps: [], desc: 'Animated metaballs canvas effect', files: ['metaballs.svelte', 'canvas-effect.svelte'] }, + 'mouse-ripple': { deps: [], desc: 'Pointer-reactive ripple canvas effect', files: ['mouse-ripple.svelte', 'canvas-effect.svelte'] }, + 'particle-web': { deps: [], desc: 'Animated particle web canvas effect', files: ['particle-web.svelte', 'canvas-effect.svelte'] }, + plasma: { deps: [], desc: 'Animated plasma canvas effect', files: ['plasma.svelte', 'canvas-effect.svelte'] }, + 'chart-utils': { deps: [], desc: 'Shared chart utilities', files: ['chart-utils.ts'] }, + 'donut-chart': { deps: ['layerchart'], desc: 'Donut chart components and utilities', files: ['chart-container.svelte', 'chart-tooltip.svelte', 'chart-style.svelte', 'chart-utils.ts'] }, + 'funnel-chart': { deps: ['layerchart'], desc: 'Funnel chart components and utilities', files: ['chart-container.svelte', 'chart-tooltip.svelte', 'chart-style.svelte', 'chart-utils.ts'] }, + 'gauge-chart': { deps: ['layerchart'], desc: 'Gauge chart components and utilities', files: ['chart-container.svelte', 'chart-tooltip.svelte', 'chart-style.svelte', 'chart-utils.ts'] }, + 'heatmap-chart': { deps: ['layerchart'], desc: 'Heatmap chart components and utilities', files: ['chart-container.svelte', 'chart-tooltip.svelte', 'chart-style.svelte', 'chart-utils.ts'] }, + 'radar-chart': { deps: ['layerchart'], desc: 'Radar chart components and utilities', files: ['chart-container.svelte', 'chart-tooltip.svelte', 'chart-style.svelte', 'chart-utils.ts'] }, + 'radial-bar-chart': { deps: ['layerchart'], desc: 'Radial bar chart components and utilities', files: ['chart-container.svelte', 'chart-tooltip.svelte', 'chart-style.svelte', 'chart-utils.ts'] }, + 'sankey-chart': { deps: ['layerchart'], desc: 'Sankey chart components and utilities', files: ['chart-container.svelte', 'chart-tooltip.svelte', 'chart-style.svelte', 'chart-utils.ts'] }, + sparkline: { deps: ['layerchart'], desc: 'Sparkline chart components and utilities', files: ['chart-container.svelte', 'chart-tooltip.svelte', 'chart-style.svelte', 'chart-utils.ts'] }, + 'treemap-chart': { deps: ['layerchart'], desc: 'Treemap chart components and utilities', files: ['chart-container.svelte', 'chart-tooltip.svelte', 'chart-style.svelte', 'chart-utils.ts'] }, + 'date-range-picker': { deps: ['bits-ui', '@internationalized/date'], desc: 'Date range picker built from range calendar components', files: ['range-calendar.svelte', 'range-calendar-caption.svelte', 'range-calendar-cell.svelte', 'range-calendar-day.svelte', 'range-calendar-grid.svelte', 'range-calendar-grid-body.svelte', 'range-calendar-grid-head.svelte', 'range-calendar-grid-row.svelte', 'range-calendar-head-cell.svelte', 'range-calendar-header.svelte', 'range-calendar-heading.svelte', 'range-calendar-month.svelte', 'range-calendar-month-select.svelte', 'range-calendar-months.svelte', 'range-calendar-nav.svelte', 'range-calendar-next-button.svelte', 'range-calendar-prev-button.svelte', 'range-calendar-year-select.svelte'] }, + shapes: { deps: [], desc: 'SVG shape components', files: ['shape.svelte', 'index.ts'] }, + theme: { deps: [], desc: 'BoldKit theme tokens', files: ['theme.ts'] }, +} + function toTitle(name) { return name .split('-') @@ -295,6 +321,7 @@ const componentNames = [] const discoveredComponentMeta = discoverComponentMeta() const allComponentMeta = { ...discoveredComponentMeta, + ...registryAliases, ...Object.fromEntries( Object.entries(componentMeta).map(([name, meta]) => [ name, diff --git a/packages/svelte/src/lib/components/ui/canvas-effects/aurora.svelte b/packages/svelte/src/lib/components/ui/canvas-effects/aurora.svelte new file mode 100644 index 00000000..20e49871 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/canvas-effects/aurora.svelte @@ -0,0 +1,6 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/canvas-effects/canvas-effect.svelte b/packages/svelte/src/lib/components/ui/canvas-effects/canvas-effect.svelte new file mode 100644 index 00000000..2c815ee0 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/canvas-effects/canvas-effect.svelte @@ -0,0 +1,150 @@ + + + { + const rect = canvas.getBoundingClientRect(); + pointer = { x: (e.clientX - rect.left) / rect.width, y: (e.clientY - rect.top) / rect.height }; + }} +> diff --git a/packages/svelte/src/lib/components/ui/canvas-effects/dot-blob.svelte b/packages/svelte/src/lib/components/ui/canvas-effects/dot-blob.svelte new file mode 100644 index 00000000..63a8a05a --- /dev/null +++ b/packages/svelte/src/lib/components/ui/canvas-effects/dot-blob.svelte @@ -0,0 +1,6 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/canvas-effects/dot-wave.svelte b/packages/svelte/src/lib/components/ui/canvas-effects/dot-wave.svelte new file mode 100644 index 00000000..1053965d --- /dev/null +++ b/packages/svelte/src/lib/components/ui/canvas-effects/dot-wave.svelte @@ -0,0 +1,6 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/canvas-effects/flow-field.svelte b/packages/svelte/src/lib/components/ui/canvas-effects/flow-field.svelte new file mode 100644 index 00000000..7d984815 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/canvas-effects/flow-field.svelte @@ -0,0 +1,6 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/canvas-effects/index.ts b/packages/svelte/src/lib/components/ui/canvas-effects/index.ts new file mode 100644 index 00000000..665d03c6 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/canvas-effects/index.ts @@ -0,0 +1,12 @@ +import Aurora from './aurora.svelte'; +import DotBlob from './dot-blob.svelte'; +import DotWave from './dot-wave.svelte'; +import FlowField from './flow-field.svelte'; +import LissajousGrid from './lissajous-grid.svelte'; +import MatrixRain from './matrix-rain.svelte'; +import Metaballs from './metaballs.svelte'; +import MouseRipple from './mouse-ripple.svelte'; +import ParticleWeb from './particle-web.svelte'; +import Plasma from './plasma.svelte'; + +export { Aurora, DotBlob, DotWave, FlowField, LissajousGrid, MatrixRain, Metaballs, MouseRipple, ParticleWeb, Plasma }; diff --git a/packages/svelte/src/lib/components/ui/canvas-effects/lissajous-grid.svelte b/packages/svelte/src/lib/components/ui/canvas-effects/lissajous-grid.svelte new file mode 100644 index 00000000..2badd57b --- /dev/null +++ b/packages/svelte/src/lib/components/ui/canvas-effects/lissajous-grid.svelte @@ -0,0 +1,6 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/canvas-effects/matrix-rain.svelte b/packages/svelte/src/lib/components/ui/canvas-effects/matrix-rain.svelte new file mode 100644 index 00000000..9ce4bfed --- /dev/null +++ b/packages/svelte/src/lib/components/ui/canvas-effects/matrix-rain.svelte @@ -0,0 +1,6 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/canvas-effects/metaballs.svelte b/packages/svelte/src/lib/components/ui/canvas-effects/metaballs.svelte new file mode 100644 index 00000000..38bd44e6 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/canvas-effects/metaballs.svelte @@ -0,0 +1,6 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/canvas-effects/mouse-ripple.svelte b/packages/svelte/src/lib/components/ui/canvas-effects/mouse-ripple.svelte new file mode 100644 index 00000000..03ab767e --- /dev/null +++ b/packages/svelte/src/lib/components/ui/canvas-effects/mouse-ripple.svelte @@ -0,0 +1,6 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/canvas-effects/particle-web.svelte b/packages/svelte/src/lib/components/ui/canvas-effects/particle-web.svelte new file mode 100644 index 00000000..9a09ef2d --- /dev/null +++ b/packages/svelte/src/lib/components/ui/canvas-effects/particle-web.svelte @@ -0,0 +1,6 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/canvas-effects/plasma.svelte b/packages/svelte/src/lib/components/ui/canvas-effects/plasma.svelte new file mode 100644 index 00000000..fd059e18 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/canvas-effects/plasma.svelte @@ -0,0 +1,6 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/shapes/index.ts b/packages/svelte/src/lib/components/ui/shapes/index.ts new file mode 100644 index 00000000..d5f90cf7 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/shapes/index.ts @@ -0,0 +1,59 @@ +import Shape from './shape.svelte'; + +export { + Shape as AppleShape, + Shape as ArrowBadge, + Shape as BlobShape, + Shape as BookmarkShape, + Shape as BurstShape, + Shape as CloudShape, + Shape as CouponShape, + Shape as CrescentShape, + Shape as CrossShape, + Shape as CursorShape, + Shape as DecagonShape, + Shape as DiamondBadge, + Shape as EllipseShape, + Shape as ExplosionShape, + Shape as EyeShape, + Shape as FibonacciSpiralShape, + Shape as FlagShape, + Shape as GearShape, + Shape as HeartShape, + Shape as HeptagonShape, + Shape as HexagonShape, + Shape as KochSnowflakeShape, + Shape as LightningShape, + Shape as MobiusStripShape, + Shape as OctagonShape, + Shape as PaperTearShape, + Shape as ParallelogramShape, + Shape as PenroseTriangleShape, + Shape as PentagonShape, + Shape as PillShape, + Shape as PlanetShape, + Shape as PriceTagShape, + Shape as RainbowShape, + Shape as RhombusShape, + Shape as RibbonShape, + Shape as ScribbleCircle, + Shape as ScribbleUnderline, + Shape as SealShape, + Shape as ShieldShape, + Shape as SpeechBubble, + Shape as SplatShape, + Shape as Star4Shape, + Shape as Star5Shape, + Shape as Star6Shape, + Shape as SunShape, + Shape as TagShape, + Shape as TicketShape, + Shape as TorusShape, + Shape as TrapezoidShape, + Shape as TrefoilShape, + Shape as TriangleShape, + Shape as UmbrellaShape, + Shape as WaveShape, + Shape as WavyRectangleShape, + Shape as ZigzagBanner, +}; diff --git a/packages/svelte/src/lib/components/ui/shapes/shape.svelte b/packages/svelte/src/lib/components/ui/shapes/shape.svelte new file mode 100644 index 00000000..47caf7c7 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/shapes/shape.svelte @@ -0,0 +1,43 @@ + + + diff --git a/packages/svelte/src/lib/components/ui/theme/index.ts b/packages/svelte/src/lib/components/ui/theme/index.ts new file mode 100644 index 00000000..ab7318d7 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/theme/index.ts @@ -0,0 +1 @@ +export { boldkitTheme } from './theme.js'; diff --git a/packages/svelte/src/lib/components/ui/theme/theme.ts b/packages/svelte/src/lib/components/ui/theme/theme.ts new file mode 100644 index 00000000..bd8477fb --- /dev/null +++ b/packages/svelte/src/lib/components/ui/theme/theme.ts @@ -0,0 +1,7 @@ +export const boldkitTheme = { + name: 'boldkit', + cssVars: { + radius: '0rem', + shadow: '4px 4px 0px hsl(var(--shadow-color))', + }, +}; diff --git a/packages/svelte/src/lib/components/ui/time-picker/index.ts b/packages/svelte/src/lib/components/ui/time-picker/index.ts new file mode 100644 index 00000000..bed63028 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/time-picker/index.ts @@ -0,0 +1,3 @@ +import TimePicker from './time-picker.svelte'; + +export { TimePicker }; diff --git a/packages/svelte/src/lib/components/ui/time-picker/time-picker.svelte b/packages/svelte/src/lib/components/ui/time-picker/time-picker.svelte new file mode 100644 index 00000000..7dd589c1 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/time-picker/time-picker.svelte @@ -0,0 +1,122 @@ + + +
    + +
    +
    +
    Hour
    + {#each hours as hour (hour)} + + {/each} +
    +
    +
    Min
    + {#each minutes as minute (minute)} + + {/each} +
    + {#if showSeconds} +
    +
    Sec
    + {#each Array.from({ length: 60 }, (_, i) => i) as second (second)} + + {/each} +
    + {/if} + {#if format === '12h'} +
    +
    AM/PM
    + {#each periods as period (period)} + + {/each} +
    + {/if} +
    +
    diff --git a/packages/svelte/src/lib/components/ui/tour/index.ts b/packages/svelte/src/lib/components/ui/tour/index.ts new file mode 100644 index 00000000..7db58462 --- /dev/null +++ b/packages/svelte/src/lib/components/ui/tour/index.ts @@ -0,0 +1,4 @@ +import Tour from './tour.svelte'; + +export { Tour }; +export type { TourStep } from './tour.svelte'; diff --git a/packages/svelte/src/lib/components/ui/tour/tour.svelte b/packages/svelte/src/lib/components/ui/tour/tour.svelte new file mode 100644 index 00000000..1b74fa1e --- /dev/null +++ b/packages/svelte/src/lib/components/ui/tour/tour.svelte @@ -0,0 +1,98 @@ + + +{#if open && step} + + +{/if} diff --git a/packages/svelte/src/lib/components/ui/tree-view/index.ts b/packages/svelte/src/lib/components/ui/tree-view/index.ts new file mode 100644 index 00000000..14d9483a --- /dev/null +++ b/packages/svelte/src/lib/components/ui/tree-view/index.ts @@ -0,0 +1,4 @@ +import TreeView from './tree-view.svelte'; + +export { TreeView }; +export type { TreeNode } from './tree-view.svelte'; diff --git a/packages/svelte/src/lib/components/ui/tree-view/tree-view.svelte b/packages/svelte/src/lib/components/ui/tree-view/tree-view.svelte new file mode 100644 index 00000000..37afc7ff --- /dev/null +++ b/packages/svelte/src/lib/components/ui/tree-view/tree-view.svelte @@ -0,0 +1,104 @@ + + +{#snippet NodeItem(node: TreeNode, level: number)} + {@const hasChildren = Boolean(node.children?.length)} + {@const isExpanded = currentExpandedIds.has(node.id)} + {@const isSelected = currentSelectedIds.has(node.id)} +
    + + {#if hasChildren && isExpanded} + {#each node.children ?? [] as child (child.id)} + {@render NodeItem(child, level + 1)} + {/each} + {/if} +
    +{/snippet} + +
    + {#each data as node (node.id)} + {@render NodeItem(node, 0)} + {/each} +
    diff --git a/public/r/svelte/aurora.json b/public/r/svelte/aurora.json new file mode 100644 index 00000000..4d37b7ba --- /dev/null +++ b/public/r/svelte/aurora.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "aurora", + "type": "registry:ui", + "description": "Animated aurora canvas background", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/aurora.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/aurora.svelte" + }, + { + "path": "registry/default/ui/canvas-effect.svelte", + "content": "\n\n {\n\t\tconst rect = canvas.getBoundingClientRect();\n\t\tpointer = { x: (e.clientX - rect.left) / rect.width, y: (e.clientY - rect.top) / rect.height };\n\t}}\n>\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/canvas-effect.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/canvas-effects.json b/public/r/svelte/canvas-effects.json new file mode 100644 index 00000000..6b35fd4a --- /dev/null +++ b/public/r/svelte/canvas-effects.json @@ -0,0 +1,84 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "canvas-effects", + "type": "registry:ui", + "description": "Canvas Effects component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/aurora.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/aurora.svelte" + }, + { + "path": "registry/default/ui/canvas-effect.svelte", + "content": "\n\n {\n\t\tconst rect = canvas.getBoundingClientRect();\n\t\tpointer = { x: (e.clientX - rect.left) / rect.width, y: (e.clientY - rect.top) / rect.height };\n\t}}\n>\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/canvas-effect.svelte" + }, + { + "path": "registry/default/ui/dot-blob.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/dot-blob.svelte" + }, + { + "path": "registry/default/ui/dot-wave.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/dot-wave.svelte" + }, + { + "path": "registry/default/ui/flow-field.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/flow-field.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, + { + "path": "registry/default/ui/lissajous-grid.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/lissajous-grid.svelte" + }, + { + "path": "registry/default/ui/matrix-rain.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/matrix-rain.svelte" + }, + { + "path": "registry/default/ui/metaballs.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/metaballs.svelte" + }, + { + "path": "registry/default/ui/mouse-ripple.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/mouse-ripple.svelte" + }, + { + "path": "registry/default/ui/particle-web.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/particle-web.svelte" + }, + { + "path": "registry/default/ui/plasma.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/plasma.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/chart-utils.json b/public/r/svelte/chart-utils.json new file mode 100644 index 00000000..b760e343 --- /dev/null +++ b/public/r/svelte/chart-utils.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "chart-utils", + "type": "registry:ui", + "description": "Shared chart utilities", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/chart-utils.ts", + "content": "import type { Tooltip } from \"layerchart\";\nimport { getContext, setContext, type Component, type Snippet } from \"svelte\";\n\nexport const THEMES = { light: \"\", dark: \".dark\" } as const;\n\nexport type ChartConfig = {\n\t[k in string]: {\n\t\tlabel?: string;\n\t\ticon?: Component;\n\t} & (\n\t\t| { color?: string; theme?: never }\n\t\t| { color?: never; theme: Record }\n\t);\n};\n\nexport type ExtractSnippetParams = T extends Snippet<[infer P]> ? P : never;\n\nexport type TooltipPayload = Tooltip.TooltipSeries;\n\n// Helper to extract item config from a payload.\nexport function getPayloadConfigFromPayload(\n\tconfig: ChartConfig,\n\tpayload: TooltipPayload,\n\tkey: string,\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tdata?: Record | null\n) {\n\tif (typeof payload !== \"object\" || payload === null) return undefined;\n\n\tconst payloadConfig =\n\t\t\"config\" in payload && typeof payload.config === \"object\" && payload.config !== null\n\t\t\t? payload.config\n\t\t\t: undefined;\n\n\tlet configLabelKey: string = key;\n\n\tif (payload.key === key) {\n\t\tconfigLabelKey = payload.key;\n\t} else if (payload.label === key) {\n\t\tconfigLabelKey = payload.label;\n\t} else if (key in payload && typeof payload[key as keyof typeof payload] === \"string\") {\n\t\tconfigLabelKey = payload[key as keyof typeof payload] as string;\n\t} else if (\n\t\tpayloadConfig !== undefined &&\n\t\tkey in payloadConfig &&\n\t\ttypeof payloadConfig[key as keyof typeof payloadConfig] === \"string\"\n\t) {\n\t\tconfigLabelKey = payloadConfig[key as keyof typeof payloadConfig] as string;\n\t} else if (data != null && key in data && typeof data[key] === \"string\") {\n\t\tconfigLabelKey = data[key] as string;\n\t}\n\n\treturn configLabelKey in config ? config[configLabelKey] : config[key as keyof typeof config];\n}\n\ntype ChartContextValue = {\n\tconfig: ChartConfig;\n};\n\nconst chartContextKey = Symbol(\"chart-context\");\n\nexport function setChartContext(value: ChartContextValue) {\n\treturn setContext(chartContextKey, value);\n}\n\nexport function useChart() {\n\treturn getContext(chartContextKey);\n}\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-utils.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/date-range-picker.json b/public/r/svelte/date-range-picker.json new file mode 100644 index 00000000..b29d6c03 --- /dev/null +++ b/public/r/svelte/date-range-picker.json @@ -0,0 +1,123 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "date-range-picker", + "type": "registry:ui", + "description": "Date range picker built from range calendar components", + "dependencies": [ + "bits-ui", + "@internationalized/date" + ], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/range-calendar.svelte", + "content": "\n\n\n\t{#snippet children({ months, weekdays })}\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{#each months as month, monthIndex (month)}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{#each weekdays as weekday, i (i)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{weekday.slice(0, 2)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{#each month.weeks as weekDates (weekDates)}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{#each weekDates as date (date)}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{#if day}\n\t\t\t\t\t\t\t\t\t\t\t\t{@render day({\n\t\t\t\t\t\t\t\t\t\t\t\t\tday: date,\n\t\t\t\t\t\t\t\t\t\t\t\t\toutsideMonth: !isEqualMonth(date, month.value),\n\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t{/each}\n\t\t\n\t{/snippet}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar.svelte" + }, + { + "path": "registry/default/ui/range-calendar-caption.svelte", + "content": "\n\n{#snippet MonthSelect()}\n\t {\n\t\t\tif (!placeholder) return;\n\t\t\tconst v = Number.parseInt(e.currentTarget.value);\n\t\t\tconst newPlaceholder = placeholder.set({ month: v });\n\t\t\tplaceholder = newPlaceholder.subtract({ months: monthIndex });\n\t\t}}\n\t/>\n{/snippet}\n\n{#snippet YearSelect()}\n\t\n{/snippet}\n\n{#if captionLayout === \"dropdown\"}\n\t{@render MonthSelect()}\n\t{@render YearSelect()}\n{:else if captionLayout === \"dropdown-months\"}\n\t{@render MonthSelect()}\n\t{#if placeholder}\n\t\t{formatYear(placeholder)}\n\t{/if}\n{:else if captionLayout === \"dropdown-years\"}\n\t{#if placeholder}\n\t\t{formatMonth(placeholder)}\n\t{/if}\n\t{@render YearSelect()}\n{:else}\n\t{formatMonth(month)} {formatYear(month)}\n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-caption.svelte" + }, + { + "path": "registry/default/ui/range-calendar-cell.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-cell.svelte" + }, + { + "path": "registry/default/ui/range-calendar-day.svelte", + "content": "\n\nspan]:text-xs [&>span]:opacity-70\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-day.svelte" + }, + { + "path": "registry/default/ui/range-calendar-grid.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-grid.svelte" + }, + { + "path": "registry/default/ui/range-calendar-grid-body.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-grid-body.svelte" + }, + { + "path": "registry/default/ui/range-calendar-grid-head.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-grid-head.svelte" + }, + { + "path": "registry/default/ui/range-calendar-grid-row.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-grid-row.svelte" + }, + { + "path": "registry/default/ui/range-calendar-head-cell.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-head-cell.svelte" + }, + { + "path": "registry/default/ui/range-calendar-header.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-header.svelte" + }, + { + "path": "registry/default/ui/range-calendar-heading.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-heading.svelte" + }, + { + "path": "registry/default/ui/range-calendar-month.svelte", + "content": "\n\n
    \n\t{@render children?.()}\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-month.svelte" + }, + { + "path": "registry/default/ui/range-calendar-month-select.svelte", + "content": "\n\n\n\t\n\t\t{#snippet child({ props, monthItems, selectedMonthItem })}\n\t\t\t\n\t\t\tsvg]:text-muted-foreground flex h-(--cell-size) items-center gap-1 rounded-md ps-2 pe-1 text-sm font-medium select-none [&>svg]:size-3.5\"\n\t\t\t\taria-hidden=\"true\"\n\t\t\t>\n\t\t\t\t{monthItems.find((item) => item.value === value)?.label || selectedMonthItem.label}\n\t\t\t\t\n\t\t\t\n\t\t{/snippet}\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-month-select.svelte" + }, + { + "path": "registry/default/ui/range-calendar-months.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-months.svelte" + }, + { + "path": "registry/default/ui/range-calendar-nav.svelte", + "content": "\n\n\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-nav.svelte" + }, + { + "path": "registry/default/ui/range-calendar-next-button.svelte", + "content": "\n\n{#snippet Fallback()}\n\t\n{/snippet}\n\n\n\t{#if children}\n\t\t{@render children?.()}\n\t{:else}\n\t\t{@render Fallback()}\n\t{/if}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-next-button.svelte" + }, + { + "path": "registry/default/ui/range-calendar-prev-button.svelte", + "content": "\n\n{#snippet Fallback()}\n\t\n{/snippet}\n\n\n\t{#if children}\n\t\t{@render children?.()}\n\t{:else}\n\t\t{@render Fallback()}\n\t{/if}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-prev-button.svelte" + }, + { + "path": "registry/default/ui/range-calendar-year-select.svelte", + "content": "\n\n\n\t\n\t\t{#snippet child({ props, yearItems, selectedYearItem })}\n\t\t\t\n\t\t\tsvg]:text-muted-foreground flex h-(--cell-size) items-center gap-1 rounded-md ps-2 pe-1 text-sm font-medium select-none [&>svg]:size-3.5\"\n\t\t\t\taria-hidden=\"true\"\n\t\t\t>\n\t\t\t\t{yearItems.find((item) => item.value === value)?.label || selectedYearItem.label}\n\t\t\t\t\n\t\t\t\n\t\t{/snippet}\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/range-calendar/range-calendar-year-select.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/donut-chart.json b/public/r/svelte/donut-chart.json new file mode 100644 index 00000000..6b2c462b --- /dev/null +++ b/public/r/svelte/donut-chart.json @@ -0,0 +1,38 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "donut-chart", + "type": "registry:ui", + "description": "Donut chart components and utilities", + "dependencies": [ + "layerchart" + ], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/chart-container.svelte", + "content": "\n\n\n\t\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-container.svelte" + }, + { + "path": "registry/default/ui/chart-tooltip.svelte", + "content": "\n\n{#snippet TooltipLabel()}\n\t{#if formattedLabel}\n\t\t
    \n\t\t\t{#if typeof formattedLabel === \"function\"}\n\t\t\t\t{@render formattedLabel()}\n\t\t\t{:else}\n\t\t\t\t{formattedLabel}\n\t\t\t{/if}\n\t\t
    \n\t{/if}\n{/snippet}\n\n\n\t\n\t\t{#if !nestLabel}\n\t\t\t{@render TooltipLabel()}\n\t\t{/if}\n\t\t
    \n\t\t\t{#each visibleSeries as item, i (item.key + i)}\n\t\t\t\t{@const key = `${nameKey || item.key || item.label || \"value\"}`}\n\t\t\t\t{@const itemConfig = getPayloadConfigFromPayload(\n\t\t\t\t\tchart.config,\n\t\t\t\t\titem,\n\t\t\t\t\tkey,\n\t\t\t\t\tchartCtx.tooltip.data\n\t\t\t\t)}\n\t\t\t\t{@const indicatorColor = color || item.config?.color || item.color}\n\t\t\t\tsvg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:size-2.5\",\n\t\t\t\t\t\tindicator === \"dot\" && \"items-center\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{#if formatter && item.value !== undefined && item.label}\n\t\t\t\t\t\t{@render formatter({\n\t\t\t\t\t\t\tvalue: item.value,\n\t\t\t\t\t\t\tname: item.label,\n\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tpayload: visibleSeries,\n\t\t\t\t\t\t})}\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t{#if itemConfig?.icon}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t{:else if !hideIndicator}\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t{#if nestLabel}\n\t\t\t\t\t\t\t\t\t{@render TooltipLabel()}\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{itemConfig?.label || item.label}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t{#if item.value !== undefined}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{item.value.toLocaleString()}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\n\t\t\t\t\t{/if}\n\t\t\t\t\n\t\t\t{/each}\n\t\t\n\t\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-tooltip.svelte" + }, + { + "path": "registry/default/ui/chart-style.svelte", + "content": "\n\n{#if themeContents}\n\t{#key id}\n\t\t\n\t\t\t{themeContents}\n\t\t\n\t{/key}\n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-style.svelte" + }, + { + "path": "registry/default/ui/chart-utils.ts", + "content": "import type { Tooltip } from \"layerchart\";\nimport { getContext, setContext, type Component, type Snippet } from \"svelte\";\n\nexport const THEMES = { light: \"\", dark: \".dark\" } as const;\n\nexport type ChartConfig = {\n\t[k in string]: {\n\t\tlabel?: string;\n\t\ticon?: Component;\n\t} & (\n\t\t| { color?: string; theme?: never }\n\t\t| { color?: never; theme: Record }\n\t);\n};\n\nexport type ExtractSnippetParams = T extends Snippet<[infer P]> ? P : never;\n\nexport type TooltipPayload = Tooltip.TooltipSeries;\n\n// Helper to extract item config from a payload.\nexport function getPayloadConfigFromPayload(\n\tconfig: ChartConfig,\n\tpayload: TooltipPayload,\n\tkey: string,\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tdata?: Record | null\n) {\n\tif (typeof payload !== \"object\" || payload === null) return undefined;\n\n\tconst payloadConfig =\n\t\t\"config\" in payload && typeof payload.config === \"object\" && payload.config !== null\n\t\t\t? payload.config\n\t\t\t: undefined;\n\n\tlet configLabelKey: string = key;\n\n\tif (payload.key === key) {\n\t\tconfigLabelKey = payload.key;\n\t} else if (payload.label === key) {\n\t\tconfigLabelKey = payload.label;\n\t} else if (key in payload && typeof payload[key as keyof typeof payload] === \"string\") {\n\t\tconfigLabelKey = payload[key as keyof typeof payload] as string;\n\t} else if (\n\t\tpayloadConfig !== undefined &&\n\t\tkey in payloadConfig &&\n\t\ttypeof payloadConfig[key as keyof typeof payloadConfig] === \"string\"\n\t) {\n\t\tconfigLabelKey = payloadConfig[key as keyof typeof payloadConfig] as string;\n\t} else if (data != null && key in data && typeof data[key] === \"string\") {\n\t\tconfigLabelKey = data[key] as string;\n\t}\n\n\treturn configLabelKey in config ? config[configLabelKey] : config[key as keyof typeof config];\n}\n\ntype ChartContextValue = {\n\tconfig: ChartConfig;\n};\n\nconst chartContextKey = Symbol(\"chart-context\");\n\nexport function setChartContext(value: ChartContextValue) {\n\treturn setContext(chartContextKey, value);\n}\n\nexport function useChart() {\n\treturn getContext(chartContextKey);\n}\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-utils.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/dot-blob.json b/public/r/svelte/dot-blob.json new file mode 100644 index 00000000..e841898e --- /dev/null +++ b/public/r/svelte/dot-blob.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "dot-blob", + "type": "registry:ui", + "description": "Animated dot blob canvas effect", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/dot-blob.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/dot-blob.svelte" + }, + { + "path": "registry/default/ui/canvas-effect.svelte", + "content": "\n\n {\n\t\tconst rect = canvas.getBoundingClientRect();\n\t\tpointer = { x: (e.clientX - rect.left) / rect.width, y: (e.clientY - rect.top) / rect.height };\n\t}}\n>\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/canvas-effect.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/dot-wave.json b/public/r/svelte/dot-wave.json new file mode 100644 index 00000000..aa92feca --- /dev/null +++ b/public/r/svelte/dot-wave.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "dot-wave", + "type": "registry:ui", + "description": "Animated dot wave canvas effect", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/dot-wave.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/dot-wave.svelte" + }, + { + "path": "registry/default/ui/canvas-effect.svelte", + "content": "\n\n {\n\t\tconst rect = canvas.getBoundingClientRect();\n\t\tpointer = { x: (e.clientX - rect.left) / rect.width, y: (e.clientY - rect.top) / rect.height };\n\t}}\n>\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/canvas-effect.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/flow-field.json b/public/r/svelte/flow-field.json new file mode 100644 index 00000000..aa8375ac --- /dev/null +++ b/public/r/svelte/flow-field.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "flow-field", + "type": "registry:ui", + "description": "Animated flow field canvas effect", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/flow-field.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/flow-field.svelte" + }, + { + "path": "registry/default/ui/canvas-effect.svelte", + "content": "\n\n {\n\t\tconst rect = canvas.getBoundingClientRect();\n\t\tpointer = { x: (e.clientX - rect.left) / rect.width, y: (e.clientY - rect.top) / rect.height };\n\t}}\n>\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/canvas-effect.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/funnel-chart.json b/public/r/svelte/funnel-chart.json new file mode 100644 index 00000000..e800070b --- /dev/null +++ b/public/r/svelte/funnel-chart.json @@ -0,0 +1,38 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "funnel-chart", + "type": "registry:ui", + "description": "Funnel chart components and utilities", + "dependencies": [ + "layerchart" + ], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/chart-container.svelte", + "content": "\n\n\n\t\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-container.svelte" + }, + { + "path": "registry/default/ui/chart-tooltip.svelte", + "content": "\n\n{#snippet TooltipLabel()}\n\t{#if formattedLabel}\n\t\t
    \n\t\t\t{#if typeof formattedLabel === \"function\"}\n\t\t\t\t{@render formattedLabel()}\n\t\t\t{:else}\n\t\t\t\t{formattedLabel}\n\t\t\t{/if}\n\t\t
    \n\t{/if}\n{/snippet}\n\n\n\t\n\t\t{#if !nestLabel}\n\t\t\t{@render TooltipLabel()}\n\t\t{/if}\n\t\t
    \n\t\t\t{#each visibleSeries as item, i (item.key + i)}\n\t\t\t\t{@const key = `${nameKey || item.key || item.label || \"value\"}`}\n\t\t\t\t{@const itemConfig = getPayloadConfigFromPayload(\n\t\t\t\t\tchart.config,\n\t\t\t\t\titem,\n\t\t\t\t\tkey,\n\t\t\t\t\tchartCtx.tooltip.data\n\t\t\t\t)}\n\t\t\t\t{@const indicatorColor = color || item.config?.color || item.color}\n\t\t\t\tsvg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:size-2.5\",\n\t\t\t\t\t\tindicator === \"dot\" && \"items-center\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{#if formatter && item.value !== undefined && item.label}\n\t\t\t\t\t\t{@render formatter({\n\t\t\t\t\t\t\tvalue: item.value,\n\t\t\t\t\t\t\tname: item.label,\n\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tpayload: visibleSeries,\n\t\t\t\t\t\t})}\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t{#if itemConfig?.icon}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t{:else if !hideIndicator}\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t{#if nestLabel}\n\t\t\t\t\t\t\t\t\t{@render TooltipLabel()}\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{itemConfig?.label || item.label}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t{#if item.value !== undefined}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{item.value.toLocaleString()}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\n\t\t\t\t\t{/if}\n\t\t\t\t\n\t\t\t{/each}\n\t\t\n\t\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-tooltip.svelte" + }, + { + "path": "registry/default/ui/chart-style.svelte", + "content": "\n\n{#if themeContents}\n\t{#key id}\n\t\t\n\t\t\t{themeContents}\n\t\t\n\t{/key}\n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-style.svelte" + }, + { + "path": "registry/default/ui/chart-utils.ts", + "content": "import type { Tooltip } from \"layerchart\";\nimport { getContext, setContext, type Component, type Snippet } from \"svelte\";\n\nexport const THEMES = { light: \"\", dark: \".dark\" } as const;\n\nexport type ChartConfig = {\n\t[k in string]: {\n\t\tlabel?: string;\n\t\ticon?: Component;\n\t} & (\n\t\t| { color?: string; theme?: never }\n\t\t| { color?: never; theme: Record }\n\t);\n};\n\nexport type ExtractSnippetParams = T extends Snippet<[infer P]> ? P : never;\n\nexport type TooltipPayload = Tooltip.TooltipSeries;\n\n// Helper to extract item config from a payload.\nexport function getPayloadConfigFromPayload(\n\tconfig: ChartConfig,\n\tpayload: TooltipPayload,\n\tkey: string,\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tdata?: Record | null\n) {\n\tif (typeof payload !== \"object\" || payload === null) return undefined;\n\n\tconst payloadConfig =\n\t\t\"config\" in payload && typeof payload.config === \"object\" && payload.config !== null\n\t\t\t? payload.config\n\t\t\t: undefined;\n\n\tlet configLabelKey: string = key;\n\n\tif (payload.key === key) {\n\t\tconfigLabelKey = payload.key;\n\t} else if (payload.label === key) {\n\t\tconfigLabelKey = payload.label;\n\t} else if (key in payload && typeof payload[key as keyof typeof payload] === \"string\") {\n\t\tconfigLabelKey = payload[key as keyof typeof payload] as string;\n\t} else if (\n\t\tpayloadConfig !== undefined &&\n\t\tkey in payloadConfig &&\n\t\ttypeof payloadConfig[key as keyof typeof payloadConfig] === \"string\"\n\t) {\n\t\tconfigLabelKey = payloadConfig[key as keyof typeof payloadConfig] as string;\n\t} else if (data != null && key in data && typeof data[key] === \"string\") {\n\t\tconfigLabelKey = data[key] as string;\n\t}\n\n\treturn configLabelKey in config ? config[configLabelKey] : config[key as keyof typeof config];\n}\n\ntype ChartContextValue = {\n\tconfig: ChartConfig;\n};\n\nconst chartContextKey = Symbol(\"chart-context\");\n\nexport function setChartContext(value: ChartContextValue) {\n\treturn setContext(chartContextKey, value);\n}\n\nexport function useChart() {\n\treturn getContext(chartContextKey);\n}\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-utils.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/gauge-chart.json b/public/r/svelte/gauge-chart.json new file mode 100644 index 00000000..150c8418 --- /dev/null +++ b/public/r/svelte/gauge-chart.json @@ -0,0 +1,38 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "gauge-chart", + "type": "registry:ui", + "description": "Gauge chart components and utilities", + "dependencies": [ + "layerchart" + ], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/chart-container.svelte", + "content": "\n\n\n\t\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-container.svelte" + }, + { + "path": "registry/default/ui/chart-tooltip.svelte", + "content": "\n\n{#snippet TooltipLabel()}\n\t{#if formattedLabel}\n\t\t
    \n\t\t\t{#if typeof formattedLabel === \"function\"}\n\t\t\t\t{@render formattedLabel()}\n\t\t\t{:else}\n\t\t\t\t{formattedLabel}\n\t\t\t{/if}\n\t\t
    \n\t{/if}\n{/snippet}\n\n\n\t\n\t\t{#if !nestLabel}\n\t\t\t{@render TooltipLabel()}\n\t\t{/if}\n\t\t
    \n\t\t\t{#each visibleSeries as item, i (item.key + i)}\n\t\t\t\t{@const key = `${nameKey || item.key || item.label || \"value\"}`}\n\t\t\t\t{@const itemConfig = getPayloadConfigFromPayload(\n\t\t\t\t\tchart.config,\n\t\t\t\t\titem,\n\t\t\t\t\tkey,\n\t\t\t\t\tchartCtx.tooltip.data\n\t\t\t\t)}\n\t\t\t\t{@const indicatorColor = color || item.config?.color || item.color}\n\t\t\t\tsvg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:size-2.5\",\n\t\t\t\t\t\tindicator === \"dot\" && \"items-center\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{#if formatter && item.value !== undefined && item.label}\n\t\t\t\t\t\t{@render formatter({\n\t\t\t\t\t\t\tvalue: item.value,\n\t\t\t\t\t\t\tname: item.label,\n\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tpayload: visibleSeries,\n\t\t\t\t\t\t})}\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t{#if itemConfig?.icon}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t{:else if !hideIndicator}\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t{#if nestLabel}\n\t\t\t\t\t\t\t\t\t{@render TooltipLabel()}\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{itemConfig?.label || item.label}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t{#if item.value !== undefined}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{item.value.toLocaleString()}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\n\t\t\t\t\t{/if}\n\t\t\t\t\n\t\t\t{/each}\n\t\t\n\t\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-tooltip.svelte" + }, + { + "path": "registry/default/ui/chart-style.svelte", + "content": "\n\n{#if themeContents}\n\t{#key id}\n\t\t\n\t\t\t{themeContents}\n\t\t\n\t{/key}\n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-style.svelte" + }, + { + "path": "registry/default/ui/chart-utils.ts", + "content": "import type { Tooltip } from \"layerchart\";\nimport { getContext, setContext, type Component, type Snippet } from \"svelte\";\n\nexport const THEMES = { light: \"\", dark: \".dark\" } as const;\n\nexport type ChartConfig = {\n\t[k in string]: {\n\t\tlabel?: string;\n\t\ticon?: Component;\n\t} & (\n\t\t| { color?: string; theme?: never }\n\t\t| { color?: never; theme: Record }\n\t);\n};\n\nexport type ExtractSnippetParams = T extends Snippet<[infer P]> ? P : never;\n\nexport type TooltipPayload = Tooltip.TooltipSeries;\n\n// Helper to extract item config from a payload.\nexport function getPayloadConfigFromPayload(\n\tconfig: ChartConfig,\n\tpayload: TooltipPayload,\n\tkey: string,\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tdata?: Record | null\n) {\n\tif (typeof payload !== \"object\" || payload === null) return undefined;\n\n\tconst payloadConfig =\n\t\t\"config\" in payload && typeof payload.config === \"object\" && payload.config !== null\n\t\t\t? payload.config\n\t\t\t: undefined;\n\n\tlet configLabelKey: string = key;\n\n\tif (payload.key === key) {\n\t\tconfigLabelKey = payload.key;\n\t} else if (payload.label === key) {\n\t\tconfigLabelKey = payload.label;\n\t} else if (key in payload && typeof payload[key as keyof typeof payload] === \"string\") {\n\t\tconfigLabelKey = payload[key as keyof typeof payload] as string;\n\t} else if (\n\t\tpayloadConfig !== undefined &&\n\t\tkey in payloadConfig &&\n\t\ttypeof payloadConfig[key as keyof typeof payloadConfig] === \"string\"\n\t) {\n\t\tconfigLabelKey = payloadConfig[key as keyof typeof payloadConfig] as string;\n\t} else if (data != null && key in data && typeof data[key] === \"string\") {\n\t\tconfigLabelKey = data[key] as string;\n\t}\n\n\treturn configLabelKey in config ? config[configLabelKey] : config[key as keyof typeof config];\n}\n\ntype ChartContextValue = {\n\tconfig: ChartConfig;\n};\n\nconst chartContextKey = Symbol(\"chart-context\");\n\nexport function setChartContext(value: ChartContextValue) {\n\treturn setContext(chartContextKey, value);\n}\n\nexport function useChart() {\n\treturn getContext(chartContextKey);\n}\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-utils.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/heatmap-chart.json b/public/r/svelte/heatmap-chart.json new file mode 100644 index 00000000..0f3e90a2 --- /dev/null +++ b/public/r/svelte/heatmap-chart.json @@ -0,0 +1,38 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "heatmap-chart", + "type": "registry:ui", + "description": "Heatmap chart components and utilities", + "dependencies": [ + "layerchart" + ], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/chart-container.svelte", + "content": "\n\n\n\t\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-container.svelte" + }, + { + "path": "registry/default/ui/chart-tooltip.svelte", + "content": "\n\n{#snippet TooltipLabel()}\n\t{#if formattedLabel}\n\t\t
    \n\t\t\t{#if typeof formattedLabel === \"function\"}\n\t\t\t\t{@render formattedLabel()}\n\t\t\t{:else}\n\t\t\t\t{formattedLabel}\n\t\t\t{/if}\n\t\t
    \n\t{/if}\n{/snippet}\n\n\n\t\n\t\t{#if !nestLabel}\n\t\t\t{@render TooltipLabel()}\n\t\t{/if}\n\t\t
    \n\t\t\t{#each visibleSeries as item, i (item.key + i)}\n\t\t\t\t{@const key = `${nameKey || item.key || item.label || \"value\"}`}\n\t\t\t\t{@const itemConfig = getPayloadConfigFromPayload(\n\t\t\t\t\tchart.config,\n\t\t\t\t\titem,\n\t\t\t\t\tkey,\n\t\t\t\t\tchartCtx.tooltip.data\n\t\t\t\t)}\n\t\t\t\t{@const indicatorColor = color || item.config?.color || item.color}\n\t\t\t\tsvg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:size-2.5\",\n\t\t\t\t\t\tindicator === \"dot\" && \"items-center\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{#if formatter && item.value !== undefined && item.label}\n\t\t\t\t\t\t{@render formatter({\n\t\t\t\t\t\t\tvalue: item.value,\n\t\t\t\t\t\t\tname: item.label,\n\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tpayload: visibleSeries,\n\t\t\t\t\t\t})}\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t{#if itemConfig?.icon}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t{:else if !hideIndicator}\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t{#if nestLabel}\n\t\t\t\t\t\t\t\t\t{@render TooltipLabel()}\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{itemConfig?.label || item.label}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t{#if item.value !== undefined}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{item.value.toLocaleString()}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\n\t\t\t\t\t{/if}\n\t\t\t\t\n\t\t\t{/each}\n\t\t\n\t\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-tooltip.svelte" + }, + { + "path": "registry/default/ui/chart-style.svelte", + "content": "\n\n{#if themeContents}\n\t{#key id}\n\t\t\n\t\t\t{themeContents}\n\t\t\n\t{/key}\n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-style.svelte" + }, + { + "path": "registry/default/ui/chart-utils.ts", + "content": "import type { Tooltip } from \"layerchart\";\nimport { getContext, setContext, type Component, type Snippet } from \"svelte\";\n\nexport const THEMES = { light: \"\", dark: \".dark\" } as const;\n\nexport type ChartConfig = {\n\t[k in string]: {\n\t\tlabel?: string;\n\t\ticon?: Component;\n\t} & (\n\t\t| { color?: string; theme?: never }\n\t\t| { color?: never; theme: Record }\n\t);\n};\n\nexport type ExtractSnippetParams = T extends Snippet<[infer P]> ? P : never;\n\nexport type TooltipPayload = Tooltip.TooltipSeries;\n\n// Helper to extract item config from a payload.\nexport function getPayloadConfigFromPayload(\n\tconfig: ChartConfig,\n\tpayload: TooltipPayload,\n\tkey: string,\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tdata?: Record | null\n) {\n\tif (typeof payload !== \"object\" || payload === null) return undefined;\n\n\tconst payloadConfig =\n\t\t\"config\" in payload && typeof payload.config === \"object\" && payload.config !== null\n\t\t\t? payload.config\n\t\t\t: undefined;\n\n\tlet configLabelKey: string = key;\n\n\tif (payload.key === key) {\n\t\tconfigLabelKey = payload.key;\n\t} else if (payload.label === key) {\n\t\tconfigLabelKey = payload.label;\n\t} else if (key in payload && typeof payload[key as keyof typeof payload] === \"string\") {\n\t\tconfigLabelKey = payload[key as keyof typeof payload] as string;\n\t} else if (\n\t\tpayloadConfig !== undefined &&\n\t\tkey in payloadConfig &&\n\t\ttypeof payloadConfig[key as keyof typeof payloadConfig] === \"string\"\n\t) {\n\t\tconfigLabelKey = payloadConfig[key as keyof typeof payloadConfig] as string;\n\t} else if (data != null && key in data && typeof data[key] === \"string\") {\n\t\tconfigLabelKey = data[key] as string;\n\t}\n\n\treturn configLabelKey in config ? config[configLabelKey] : config[key as keyof typeof config];\n}\n\ntype ChartContextValue = {\n\tconfig: ChartConfig;\n};\n\nconst chartContextKey = Symbol(\"chart-context\");\n\nexport function setChartContext(value: ChartContextValue) {\n\treturn setContext(chartContextKey, value);\n}\n\nexport function useChart() {\n\treturn getContext(chartContextKey);\n}\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-utils.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/index.json b/public/r/svelte/index.json index 242dd5be..0a80ffbd 100644 --- a/public/r/svelte/index.json +++ b/public/r/svelte/index.json @@ -53,6 +53,11 @@ "type": "registry:ui", "registryUrl": "https://boldkit.dev/r/svelte/calendar.json" }, + { + "name": "canvas-effects", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/canvas-effects.json" + }, { "name": "card", "type": "registry:ui", @@ -258,6 +263,11 @@ "type": "registry:ui", "registryUrl": "https://boldkit.dev/r/svelte/separator.json" }, + { + "name": "shapes", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/shapes.json" + }, { "name": "sheet", "type": "registry:ui", @@ -328,6 +338,16 @@ "type": "registry:ui", "registryUrl": "https://boldkit.dev/r/svelte/textarea.json" }, + { + "name": "theme", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/theme.json" + }, + { + "name": "time-picker", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/time-picker.json" + }, { "name": "timeline", "type": "registry:ui", @@ -347,6 +367,121 @@ "name": "tooltip", "type": "registry:ui", "registryUrl": "https://boldkit.dev/r/svelte/tooltip.json" + }, + { + "name": "tour", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/tour.json" + }, + { + "name": "tree-view", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/tree-view.json" + }, + { + "name": "aurora", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/aurora.json" + }, + { + "name": "dot-blob", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/dot-blob.json" + }, + { + "name": "dot-wave", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/dot-wave.json" + }, + { + "name": "flow-field", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/flow-field.json" + }, + { + "name": "lissajous-grid", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/lissajous-grid.json" + }, + { + "name": "matrix-rain", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/matrix-rain.json" + }, + { + "name": "metaballs", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/metaballs.json" + }, + { + "name": "mouse-ripple", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/mouse-ripple.json" + }, + { + "name": "particle-web", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/particle-web.json" + }, + { + "name": "plasma", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/plasma.json" + }, + { + "name": "chart-utils", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/chart-utils.json" + }, + { + "name": "donut-chart", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/donut-chart.json" + }, + { + "name": "funnel-chart", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/funnel-chart.json" + }, + { + "name": "gauge-chart", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/gauge-chart.json" + }, + { + "name": "heatmap-chart", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/heatmap-chart.json" + }, + { + "name": "radar-chart", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/radar-chart.json" + }, + { + "name": "radial-bar-chart", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/radial-bar-chart.json" + }, + { + "name": "sankey-chart", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/sankey-chart.json" + }, + { + "name": "sparkline", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/sparkline.json" + }, + { + "name": "treemap-chart", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/treemap-chart.json" + }, + { + "name": "date-range-picker", + "type": "registry:ui", + "registryUrl": "https://boldkit.dev/r/svelte/date-range-picker.json" } ] } \ No newline at end of file diff --git a/public/r/svelte/lissajous-grid.json b/public/r/svelte/lissajous-grid.json new file mode 100644 index 00000000..20b73050 --- /dev/null +++ b/public/r/svelte/lissajous-grid.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "lissajous-grid", + "type": "registry:ui", + "description": "Animated Lissajous grid canvas effect", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/lissajous-grid.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/lissajous-grid.svelte" + }, + { + "path": "registry/default/ui/canvas-effect.svelte", + "content": "\n\n {\n\t\tconst rect = canvas.getBoundingClientRect();\n\t\tpointer = { x: (e.clientX - rect.left) / rect.width, y: (e.clientY - rect.top) / rect.height };\n\t}}\n>\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/canvas-effect.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/matrix-rain.json b/public/r/svelte/matrix-rain.json new file mode 100644 index 00000000..fcddd8e3 --- /dev/null +++ b/public/r/svelte/matrix-rain.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "matrix-rain", + "type": "registry:ui", + "description": "Animated matrix rain canvas effect", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/matrix-rain.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/matrix-rain.svelte" + }, + { + "path": "registry/default/ui/canvas-effect.svelte", + "content": "\n\n {\n\t\tconst rect = canvas.getBoundingClientRect();\n\t\tpointer = { x: (e.clientX - rect.left) / rect.width, y: (e.clientY - rect.top) / rect.height };\n\t}}\n>\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/canvas-effect.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/metaballs.json b/public/r/svelte/metaballs.json new file mode 100644 index 00000000..2a8e48b4 --- /dev/null +++ b/public/r/svelte/metaballs.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "metaballs", + "type": "registry:ui", + "description": "Animated metaballs canvas effect", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/metaballs.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/metaballs.svelte" + }, + { + "path": "registry/default/ui/canvas-effect.svelte", + "content": "\n\n {\n\t\tconst rect = canvas.getBoundingClientRect();\n\t\tpointer = { x: (e.clientX - rect.left) / rect.width, y: (e.clientY - rect.top) / rect.height };\n\t}}\n>\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/canvas-effect.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/mouse-ripple.json b/public/r/svelte/mouse-ripple.json new file mode 100644 index 00000000..aa920b82 --- /dev/null +++ b/public/r/svelte/mouse-ripple.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "mouse-ripple", + "type": "registry:ui", + "description": "Pointer-reactive ripple canvas effect", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/mouse-ripple.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/mouse-ripple.svelte" + }, + { + "path": "registry/default/ui/canvas-effect.svelte", + "content": "\n\n {\n\t\tconst rect = canvas.getBoundingClientRect();\n\t\tpointer = { x: (e.clientX - rect.left) / rect.width, y: (e.clientY - rect.top) / rect.height };\n\t}}\n>\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/canvas-effect.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/particle-web.json b/public/r/svelte/particle-web.json new file mode 100644 index 00000000..0ec350dd --- /dev/null +++ b/public/r/svelte/particle-web.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "particle-web", + "type": "registry:ui", + "description": "Animated particle web canvas effect", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/particle-web.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/particle-web.svelte" + }, + { + "path": "registry/default/ui/canvas-effect.svelte", + "content": "\n\n {\n\t\tconst rect = canvas.getBoundingClientRect();\n\t\tpointer = { x: (e.clientX - rect.left) / rect.width, y: (e.clientY - rect.top) / rect.height };\n\t}}\n>\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/canvas-effect.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/plasma.json b/public/r/svelte/plasma.json new file mode 100644 index 00000000..03c56e56 --- /dev/null +++ b/public/r/svelte/plasma.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "plasma", + "type": "registry:ui", + "description": "Animated plasma canvas effect", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/plasma.svelte", + "content": "\n\n\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/plasma.svelte" + }, + { + "path": "registry/default/ui/canvas-effect.svelte", + "content": "\n\n {\n\t\tconst rect = canvas.getBoundingClientRect();\n\t\tpointer = { x: (e.clientX - rect.left) / rect.width, y: (e.clientY - rect.top) / rect.height };\n\t}}\n>\n", + "type": "registry:ui", + "target": "lib/components/ui/canvas-effects/canvas-effect.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/radar-chart.json b/public/r/svelte/radar-chart.json new file mode 100644 index 00000000..2ceb5777 --- /dev/null +++ b/public/r/svelte/radar-chart.json @@ -0,0 +1,38 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "radar-chart", + "type": "registry:ui", + "description": "Radar chart components and utilities", + "dependencies": [ + "layerchart" + ], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/chart-container.svelte", + "content": "\n\n\n\t\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-container.svelte" + }, + { + "path": "registry/default/ui/chart-tooltip.svelte", + "content": "\n\n{#snippet TooltipLabel()}\n\t{#if formattedLabel}\n\t\t
    \n\t\t\t{#if typeof formattedLabel === \"function\"}\n\t\t\t\t{@render formattedLabel()}\n\t\t\t{:else}\n\t\t\t\t{formattedLabel}\n\t\t\t{/if}\n\t\t
    \n\t{/if}\n{/snippet}\n\n\n\t\n\t\t{#if !nestLabel}\n\t\t\t{@render TooltipLabel()}\n\t\t{/if}\n\t\t
    \n\t\t\t{#each visibleSeries as item, i (item.key + i)}\n\t\t\t\t{@const key = `${nameKey || item.key || item.label || \"value\"}`}\n\t\t\t\t{@const itemConfig = getPayloadConfigFromPayload(\n\t\t\t\t\tchart.config,\n\t\t\t\t\titem,\n\t\t\t\t\tkey,\n\t\t\t\t\tchartCtx.tooltip.data\n\t\t\t\t)}\n\t\t\t\t{@const indicatorColor = color || item.config?.color || item.color}\n\t\t\t\tsvg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:size-2.5\",\n\t\t\t\t\t\tindicator === \"dot\" && \"items-center\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{#if formatter && item.value !== undefined && item.label}\n\t\t\t\t\t\t{@render formatter({\n\t\t\t\t\t\t\tvalue: item.value,\n\t\t\t\t\t\t\tname: item.label,\n\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tpayload: visibleSeries,\n\t\t\t\t\t\t})}\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t{#if itemConfig?.icon}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t{:else if !hideIndicator}\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t{#if nestLabel}\n\t\t\t\t\t\t\t\t\t{@render TooltipLabel()}\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{itemConfig?.label || item.label}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t{#if item.value !== undefined}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{item.value.toLocaleString()}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\n\t\t\t\t\t{/if}\n\t\t\t\t\n\t\t\t{/each}\n\t\t\n\t\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-tooltip.svelte" + }, + { + "path": "registry/default/ui/chart-style.svelte", + "content": "\n\n{#if themeContents}\n\t{#key id}\n\t\t\n\t\t\t{themeContents}\n\t\t\n\t{/key}\n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-style.svelte" + }, + { + "path": "registry/default/ui/chart-utils.ts", + "content": "import type { Tooltip } from \"layerchart\";\nimport { getContext, setContext, type Component, type Snippet } from \"svelte\";\n\nexport const THEMES = { light: \"\", dark: \".dark\" } as const;\n\nexport type ChartConfig = {\n\t[k in string]: {\n\t\tlabel?: string;\n\t\ticon?: Component;\n\t} & (\n\t\t| { color?: string; theme?: never }\n\t\t| { color?: never; theme: Record }\n\t);\n};\n\nexport type ExtractSnippetParams = T extends Snippet<[infer P]> ? P : never;\n\nexport type TooltipPayload = Tooltip.TooltipSeries;\n\n// Helper to extract item config from a payload.\nexport function getPayloadConfigFromPayload(\n\tconfig: ChartConfig,\n\tpayload: TooltipPayload,\n\tkey: string,\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tdata?: Record | null\n) {\n\tif (typeof payload !== \"object\" || payload === null) return undefined;\n\n\tconst payloadConfig =\n\t\t\"config\" in payload && typeof payload.config === \"object\" && payload.config !== null\n\t\t\t? payload.config\n\t\t\t: undefined;\n\n\tlet configLabelKey: string = key;\n\n\tif (payload.key === key) {\n\t\tconfigLabelKey = payload.key;\n\t} else if (payload.label === key) {\n\t\tconfigLabelKey = payload.label;\n\t} else if (key in payload && typeof payload[key as keyof typeof payload] === \"string\") {\n\t\tconfigLabelKey = payload[key as keyof typeof payload] as string;\n\t} else if (\n\t\tpayloadConfig !== undefined &&\n\t\tkey in payloadConfig &&\n\t\ttypeof payloadConfig[key as keyof typeof payloadConfig] === \"string\"\n\t) {\n\t\tconfigLabelKey = payloadConfig[key as keyof typeof payloadConfig] as string;\n\t} else if (data != null && key in data && typeof data[key] === \"string\") {\n\t\tconfigLabelKey = data[key] as string;\n\t}\n\n\treturn configLabelKey in config ? config[configLabelKey] : config[key as keyof typeof config];\n}\n\ntype ChartContextValue = {\n\tconfig: ChartConfig;\n};\n\nconst chartContextKey = Symbol(\"chart-context\");\n\nexport function setChartContext(value: ChartContextValue) {\n\treturn setContext(chartContextKey, value);\n}\n\nexport function useChart() {\n\treturn getContext(chartContextKey);\n}\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-utils.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/radial-bar-chart.json b/public/r/svelte/radial-bar-chart.json new file mode 100644 index 00000000..b98ccbb7 --- /dev/null +++ b/public/r/svelte/radial-bar-chart.json @@ -0,0 +1,38 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "radial-bar-chart", + "type": "registry:ui", + "description": "Radial bar chart components and utilities", + "dependencies": [ + "layerchart" + ], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/chart-container.svelte", + "content": "\n\n\n\t\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-container.svelte" + }, + { + "path": "registry/default/ui/chart-tooltip.svelte", + "content": "\n\n{#snippet TooltipLabel()}\n\t{#if formattedLabel}\n\t\t
    \n\t\t\t{#if typeof formattedLabel === \"function\"}\n\t\t\t\t{@render formattedLabel()}\n\t\t\t{:else}\n\t\t\t\t{formattedLabel}\n\t\t\t{/if}\n\t\t
    \n\t{/if}\n{/snippet}\n\n\n\t\n\t\t{#if !nestLabel}\n\t\t\t{@render TooltipLabel()}\n\t\t{/if}\n\t\t
    \n\t\t\t{#each visibleSeries as item, i (item.key + i)}\n\t\t\t\t{@const key = `${nameKey || item.key || item.label || \"value\"}`}\n\t\t\t\t{@const itemConfig = getPayloadConfigFromPayload(\n\t\t\t\t\tchart.config,\n\t\t\t\t\titem,\n\t\t\t\t\tkey,\n\t\t\t\t\tchartCtx.tooltip.data\n\t\t\t\t)}\n\t\t\t\t{@const indicatorColor = color || item.config?.color || item.color}\n\t\t\t\tsvg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:size-2.5\",\n\t\t\t\t\t\tindicator === \"dot\" && \"items-center\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{#if formatter && item.value !== undefined && item.label}\n\t\t\t\t\t\t{@render formatter({\n\t\t\t\t\t\t\tvalue: item.value,\n\t\t\t\t\t\t\tname: item.label,\n\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tpayload: visibleSeries,\n\t\t\t\t\t\t})}\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t{#if itemConfig?.icon}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t{:else if !hideIndicator}\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t{#if nestLabel}\n\t\t\t\t\t\t\t\t\t{@render TooltipLabel()}\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{itemConfig?.label || item.label}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t{#if item.value !== undefined}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{item.value.toLocaleString()}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\n\t\t\t\t\t{/if}\n\t\t\t\t\n\t\t\t{/each}\n\t\t\n\t\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-tooltip.svelte" + }, + { + "path": "registry/default/ui/chart-style.svelte", + "content": "\n\n{#if themeContents}\n\t{#key id}\n\t\t\n\t\t\t{themeContents}\n\t\t\n\t{/key}\n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-style.svelte" + }, + { + "path": "registry/default/ui/chart-utils.ts", + "content": "import type { Tooltip } from \"layerchart\";\nimport { getContext, setContext, type Component, type Snippet } from \"svelte\";\n\nexport const THEMES = { light: \"\", dark: \".dark\" } as const;\n\nexport type ChartConfig = {\n\t[k in string]: {\n\t\tlabel?: string;\n\t\ticon?: Component;\n\t} & (\n\t\t| { color?: string; theme?: never }\n\t\t| { color?: never; theme: Record }\n\t);\n};\n\nexport type ExtractSnippetParams = T extends Snippet<[infer P]> ? P : never;\n\nexport type TooltipPayload = Tooltip.TooltipSeries;\n\n// Helper to extract item config from a payload.\nexport function getPayloadConfigFromPayload(\n\tconfig: ChartConfig,\n\tpayload: TooltipPayload,\n\tkey: string,\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tdata?: Record | null\n) {\n\tif (typeof payload !== \"object\" || payload === null) return undefined;\n\n\tconst payloadConfig =\n\t\t\"config\" in payload && typeof payload.config === \"object\" && payload.config !== null\n\t\t\t? payload.config\n\t\t\t: undefined;\n\n\tlet configLabelKey: string = key;\n\n\tif (payload.key === key) {\n\t\tconfigLabelKey = payload.key;\n\t} else if (payload.label === key) {\n\t\tconfigLabelKey = payload.label;\n\t} else if (key in payload && typeof payload[key as keyof typeof payload] === \"string\") {\n\t\tconfigLabelKey = payload[key as keyof typeof payload] as string;\n\t} else if (\n\t\tpayloadConfig !== undefined &&\n\t\tkey in payloadConfig &&\n\t\ttypeof payloadConfig[key as keyof typeof payloadConfig] === \"string\"\n\t) {\n\t\tconfigLabelKey = payloadConfig[key as keyof typeof payloadConfig] as string;\n\t} else if (data != null && key in data && typeof data[key] === \"string\") {\n\t\tconfigLabelKey = data[key] as string;\n\t}\n\n\treturn configLabelKey in config ? config[configLabelKey] : config[key as keyof typeof config];\n}\n\ntype ChartContextValue = {\n\tconfig: ChartConfig;\n};\n\nconst chartContextKey = Symbol(\"chart-context\");\n\nexport function setChartContext(value: ChartContextValue) {\n\treturn setContext(chartContextKey, value);\n}\n\nexport function useChart() {\n\treturn getContext(chartContextKey);\n}\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-utils.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/sankey-chart.json b/public/r/svelte/sankey-chart.json new file mode 100644 index 00000000..884b3119 --- /dev/null +++ b/public/r/svelte/sankey-chart.json @@ -0,0 +1,38 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "sankey-chart", + "type": "registry:ui", + "description": "Sankey chart components and utilities", + "dependencies": [ + "layerchart" + ], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/chart-container.svelte", + "content": "\n\n\n\t\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-container.svelte" + }, + { + "path": "registry/default/ui/chart-tooltip.svelte", + "content": "\n\n{#snippet TooltipLabel()}\n\t{#if formattedLabel}\n\t\t
    \n\t\t\t{#if typeof formattedLabel === \"function\"}\n\t\t\t\t{@render formattedLabel()}\n\t\t\t{:else}\n\t\t\t\t{formattedLabel}\n\t\t\t{/if}\n\t\t
    \n\t{/if}\n{/snippet}\n\n\n\t\n\t\t{#if !nestLabel}\n\t\t\t{@render TooltipLabel()}\n\t\t{/if}\n\t\t
    \n\t\t\t{#each visibleSeries as item, i (item.key + i)}\n\t\t\t\t{@const key = `${nameKey || item.key || item.label || \"value\"}`}\n\t\t\t\t{@const itemConfig = getPayloadConfigFromPayload(\n\t\t\t\t\tchart.config,\n\t\t\t\t\titem,\n\t\t\t\t\tkey,\n\t\t\t\t\tchartCtx.tooltip.data\n\t\t\t\t)}\n\t\t\t\t{@const indicatorColor = color || item.config?.color || item.color}\n\t\t\t\tsvg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:size-2.5\",\n\t\t\t\t\t\tindicator === \"dot\" && \"items-center\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{#if formatter && item.value !== undefined && item.label}\n\t\t\t\t\t\t{@render formatter({\n\t\t\t\t\t\t\tvalue: item.value,\n\t\t\t\t\t\t\tname: item.label,\n\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tpayload: visibleSeries,\n\t\t\t\t\t\t})}\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t{#if itemConfig?.icon}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t{:else if !hideIndicator}\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t{#if nestLabel}\n\t\t\t\t\t\t\t\t\t{@render TooltipLabel()}\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{itemConfig?.label || item.label}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t{#if item.value !== undefined}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{item.value.toLocaleString()}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\n\t\t\t\t\t{/if}\n\t\t\t\t\n\t\t\t{/each}\n\t\t\n\t\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-tooltip.svelte" + }, + { + "path": "registry/default/ui/chart-style.svelte", + "content": "\n\n{#if themeContents}\n\t{#key id}\n\t\t\n\t\t\t{themeContents}\n\t\t\n\t{/key}\n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-style.svelte" + }, + { + "path": "registry/default/ui/chart-utils.ts", + "content": "import type { Tooltip } from \"layerchart\";\nimport { getContext, setContext, type Component, type Snippet } from \"svelte\";\n\nexport const THEMES = { light: \"\", dark: \".dark\" } as const;\n\nexport type ChartConfig = {\n\t[k in string]: {\n\t\tlabel?: string;\n\t\ticon?: Component;\n\t} & (\n\t\t| { color?: string; theme?: never }\n\t\t| { color?: never; theme: Record }\n\t);\n};\n\nexport type ExtractSnippetParams = T extends Snippet<[infer P]> ? P : never;\n\nexport type TooltipPayload = Tooltip.TooltipSeries;\n\n// Helper to extract item config from a payload.\nexport function getPayloadConfigFromPayload(\n\tconfig: ChartConfig,\n\tpayload: TooltipPayload,\n\tkey: string,\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tdata?: Record | null\n) {\n\tif (typeof payload !== \"object\" || payload === null) return undefined;\n\n\tconst payloadConfig =\n\t\t\"config\" in payload && typeof payload.config === \"object\" && payload.config !== null\n\t\t\t? payload.config\n\t\t\t: undefined;\n\n\tlet configLabelKey: string = key;\n\n\tif (payload.key === key) {\n\t\tconfigLabelKey = payload.key;\n\t} else if (payload.label === key) {\n\t\tconfigLabelKey = payload.label;\n\t} else if (key in payload && typeof payload[key as keyof typeof payload] === \"string\") {\n\t\tconfigLabelKey = payload[key as keyof typeof payload] as string;\n\t} else if (\n\t\tpayloadConfig !== undefined &&\n\t\tkey in payloadConfig &&\n\t\ttypeof payloadConfig[key as keyof typeof payloadConfig] === \"string\"\n\t) {\n\t\tconfigLabelKey = payloadConfig[key as keyof typeof payloadConfig] as string;\n\t} else if (data != null && key in data && typeof data[key] === \"string\") {\n\t\tconfigLabelKey = data[key] as string;\n\t}\n\n\treturn configLabelKey in config ? config[configLabelKey] : config[key as keyof typeof config];\n}\n\ntype ChartContextValue = {\n\tconfig: ChartConfig;\n};\n\nconst chartContextKey = Symbol(\"chart-context\");\n\nexport function setChartContext(value: ChartContextValue) {\n\treturn setContext(chartContextKey, value);\n}\n\nexport function useChart() {\n\treturn getContext(chartContextKey);\n}\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-utils.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/shapes.json b/public/r/svelte/shapes.json new file mode 100644 index 00000000..a41e3cc2 --- /dev/null +++ b/public/r/svelte/shapes.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "shapes", + "type": "registry:ui", + "description": "SVG shape components", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/shape.svelte", + "content": "\n\n\n\t\n\n", + "type": "registry:ui", + "target": "lib/components/ui/shapes/shape.svelte" + }, + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/sparkline.json b/public/r/svelte/sparkline.json new file mode 100644 index 00000000..203afae2 --- /dev/null +++ b/public/r/svelte/sparkline.json @@ -0,0 +1,38 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "sparkline", + "type": "registry:ui", + "description": "Sparkline chart components and utilities", + "dependencies": [ + "layerchart" + ], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/chart-container.svelte", + "content": "\n\n\n\t\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-container.svelte" + }, + { + "path": "registry/default/ui/chart-tooltip.svelte", + "content": "\n\n{#snippet TooltipLabel()}\n\t{#if formattedLabel}\n\t\t
    \n\t\t\t{#if typeof formattedLabel === \"function\"}\n\t\t\t\t{@render formattedLabel()}\n\t\t\t{:else}\n\t\t\t\t{formattedLabel}\n\t\t\t{/if}\n\t\t
    \n\t{/if}\n{/snippet}\n\n\n\t\n\t\t{#if !nestLabel}\n\t\t\t{@render TooltipLabel()}\n\t\t{/if}\n\t\t
    \n\t\t\t{#each visibleSeries as item, i (item.key + i)}\n\t\t\t\t{@const key = `${nameKey || item.key || item.label || \"value\"}`}\n\t\t\t\t{@const itemConfig = getPayloadConfigFromPayload(\n\t\t\t\t\tchart.config,\n\t\t\t\t\titem,\n\t\t\t\t\tkey,\n\t\t\t\t\tchartCtx.tooltip.data\n\t\t\t\t)}\n\t\t\t\t{@const indicatorColor = color || item.config?.color || item.color}\n\t\t\t\tsvg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:size-2.5\",\n\t\t\t\t\t\tindicator === \"dot\" && \"items-center\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{#if formatter && item.value !== undefined && item.label}\n\t\t\t\t\t\t{@render formatter({\n\t\t\t\t\t\t\tvalue: item.value,\n\t\t\t\t\t\t\tname: item.label,\n\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tpayload: visibleSeries,\n\t\t\t\t\t\t})}\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t{#if itemConfig?.icon}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t{:else if !hideIndicator}\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t{#if nestLabel}\n\t\t\t\t\t\t\t\t\t{@render TooltipLabel()}\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{itemConfig?.label || item.label}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t{#if item.value !== undefined}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{item.value.toLocaleString()}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\n\t\t\t\t\t{/if}\n\t\t\t\t\n\t\t\t{/each}\n\t\t\n\t\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-tooltip.svelte" + }, + { + "path": "registry/default/ui/chart-style.svelte", + "content": "\n\n{#if themeContents}\n\t{#key id}\n\t\t\n\t\t\t{themeContents}\n\t\t\n\t{/key}\n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-style.svelte" + }, + { + "path": "registry/default/ui/chart-utils.ts", + "content": "import type { Tooltip } from \"layerchart\";\nimport { getContext, setContext, type Component, type Snippet } from \"svelte\";\n\nexport const THEMES = { light: \"\", dark: \".dark\" } as const;\n\nexport type ChartConfig = {\n\t[k in string]: {\n\t\tlabel?: string;\n\t\ticon?: Component;\n\t} & (\n\t\t| { color?: string; theme?: never }\n\t\t| { color?: never; theme: Record }\n\t);\n};\n\nexport type ExtractSnippetParams = T extends Snippet<[infer P]> ? P : never;\n\nexport type TooltipPayload = Tooltip.TooltipSeries;\n\n// Helper to extract item config from a payload.\nexport function getPayloadConfigFromPayload(\n\tconfig: ChartConfig,\n\tpayload: TooltipPayload,\n\tkey: string,\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tdata?: Record | null\n) {\n\tif (typeof payload !== \"object\" || payload === null) return undefined;\n\n\tconst payloadConfig =\n\t\t\"config\" in payload && typeof payload.config === \"object\" && payload.config !== null\n\t\t\t? payload.config\n\t\t\t: undefined;\n\n\tlet configLabelKey: string = key;\n\n\tif (payload.key === key) {\n\t\tconfigLabelKey = payload.key;\n\t} else if (payload.label === key) {\n\t\tconfigLabelKey = payload.label;\n\t} else if (key in payload && typeof payload[key as keyof typeof payload] === \"string\") {\n\t\tconfigLabelKey = payload[key as keyof typeof payload] as string;\n\t} else if (\n\t\tpayloadConfig !== undefined &&\n\t\tkey in payloadConfig &&\n\t\ttypeof payloadConfig[key as keyof typeof payloadConfig] === \"string\"\n\t) {\n\t\tconfigLabelKey = payloadConfig[key as keyof typeof payloadConfig] as string;\n\t} else if (data != null && key in data && typeof data[key] === \"string\") {\n\t\tconfigLabelKey = data[key] as string;\n\t}\n\n\treturn configLabelKey in config ? config[configLabelKey] : config[key as keyof typeof config];\n}\n\ntype ChartContextValue = {\n\tconfig: ChartConfig;\n};\n\nconst chartContextKey = Symbol(\"chart-context\");\n\nexport function setChartContext(value: ChartContextValue) {\n\treturn setContext(chartContextKey, value);\n}\n\nexport function useChart() {\n\treturn getContext(chartContextKey);\n}\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-utils.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/theme.json b/public/r/svelte/theme.json new file mode 100644 index 00000000..30d3ad41 --- /dev/null +++ b/public/r/svelte/theme.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "theme", + "type": "registry:ui", + "description": "BoldKit theme tokens", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/theme.ts", + "content": "export const boldkitTheme = {\n\tname: 'boldkit',\n\tcssVars: {\n\t\tradius: '0rem',\n\t\tshadow: '4px 4px 0px hsl(var(--shadow-color))',\n\t},\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/theme/theme.ts" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/time-picker.json b/public/r/svelte/time-picker.json new file mode 100644 index 00000000..8e15ee04 --- /dev/null +++ b/public/r/svelte/time-picker.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "time-picker", + "type": "registry:ui", + "description": "Time Picker component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, + { + "path": "registry/default/ui/time-picker.svelte", + "content": "\n\n
    \n\t\n\t\t\n\t\t{selectedTime ? formatDisplayTime(selectedTime) : placeholder}\n\t\n\t
    \n\t\t
    \n\t\t\t
    Hour
    \n\t\t\t{#each hours as hour (hour)}\n\t\t\t\t\n\t\t\t{/each}\n\t\t
    \n\t\t
    \n\t\t\t
    Min
    \n\t\t\t{#each minutes as minute (minute)}\n\t\t\t\t\n\t\t\t{/each}\n\t\t
    \n\t\t{#if showSeconds}\n\t\t\t
    \n\t\t\t\t
    Sec
    \n\t\t\t\t{#each Array.from({ length: 60 }, (_, i) => i) as second (second)}\n\t\t\t\t\t\n\t\t\t\t{/each}\n\t\t\t
    \n\t\t{/if}\n\t\t{#if format === '12h'}\n\t\t\t
    \n\t\t\t\t
    AM/PM
    \n\t\t\t\t{#each periods as period (period)}\n\t\t\t\t\t\n\t\t\t\t{/each}\n\t\t\t
    \n\t\t{/if}\n\t
    \n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/time-picker/time-picker.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/tour.json b/public/r/svelte/tour.json new file mode 100644 index 00000000..be797617 --- /dev/null +++ b/public/r/svelte/tour.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "tour", + "type": "registry:ui", + "description": "Tour component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, + { + "path": "registry/default/ui/tour.svelte", + "content": "\n\n{#if open && step}\n\t
    \n\t\n\t\t
    \n\t\t\t
    \n\t\t\t\t{#if showProgress}\n\t\t\t\t\t

    Step {currentStep + 1} of {steps.length}

    \n\t\t\t\t{/if}\n\t\t\t\t

    {step.title}

    \n\t\t\t
    \n\t\t\t\n\t\t
    \n\t\t

    {step.description}

    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t{#if showSkipButton}\n\t\t\t\t\t\n\t\t\t\t{/if}\n\t\t\t
    \n\t\t\t\n\t\t
    \n\t\n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/tour/tour.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/tree-view.json b/public/r/svelte/tree-view.json new file mode 100644 index 00000000..245b6ac0 --- /dev/null +++ b/public/r/svelte/tree-view.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "tree-view", + "type": "registry:ui", + "description": "Tree View component for BoldKit Svelte", + "dependencies": [], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/index.ts", + "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n", + "type": "registry:ui", + "target": "lib/components/ui/accordion/index.ts" + }, + { + "path": "registry/default/ui/tree-view.svelte", + "content": "\n\n{#snippet NodeItem(node: TreeNode, level: number)}\n\t{@const hasChildren = Boolean(node.children?.length)}\n\t{@const isExpanded = currentExpandedIds.has(node.id)}\n\t{@const isSelected = currentSelectedIds.has(node.id)}\n\t
    \n\t\t hasChildren ? toggleExpanded(node.id) : toggleSelected(node.id)}\n\t\t\tondblclick={() => toggleSelected(node.id)}\n\t\t>\n\t\t\t{#if hasChildren}\n\t\t\t\t\n\t\t\t{:else}\n\t\t\t\t\n\t\t\t{/if}\n\t\t\t{#if showIcons}\n\t\t\t\t{#if hasChildren}\n\t\t\t\t\t\n\t\t\t\t{:else}\n\t\t\t\t\t\n\t\t\t\t{/if}\n\t\t\t{/if}\n\t\t\t{node.label}\n\t\t\n\t\t{#if hasChildren && isExpanded}\n\t\t\t{#each node.children ?? [] as child (child.id)}\n\t\t\t\t{@render NodeItem(child, level + 1)}\n\t\t\t{/each}\n\t\t{/if}\n\t
    \n{/snippet}\n\n
    \n\t{#each data as node (node.id)}\n\t\t{@render NodeItem(node, 0)}\n\t{/each}\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/tree-view/tree-view.svelte" + } + ] +} \ No newline at end of file diff --git a/public/r/svelte/treemap-chart.json b/public/r/svelte/treemap-chart.json new file mode 100644 index 00000000..ba9418f5 --- /dev/null +++ b/public/r/svelte/treemap-chart.json @@ -0,0 +1,38 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "treemap-chart", + "type": "registry:ui", + "description": "Treemap chart components and utilities", + "dependencies": [ + "layerchart" + ], + "registryDependencies": [ + "utils" + ], + "files": [ + { + "path": "registry/default/ui/chart-container.svelte", + "content": "\n\n\n\t\n\t{@render children?.()}\n\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-container.svelte" + }, + { + "path": "registry/default/ui/chart-tooltip.svelte", + "content": "\n\n{#snippet TooltipLabel()}\n\t{#if formattedLabel}\n\t\t
    \n\t\t\t{#if typeof formattedLabel === \"function\"}\n\t\t\t\t{@render formattedLabel()}\n\t\t\t{:else}\n\t\t\t\t{formattedLabel}\n\t\t\t{/if}\n\t\t
    \n\t{/if}\n{/snippet}\n\n\n\t\n\t\t{#if !nestLabel}\n\t\t\t{@render TooltipLabel()}\n\t\t{/if}\n\t\t
    \n\t\t\t{#each visibleSeries as item, i (item.key + i)}\n\t\t\t\t{@const key = `${nameKey || item.key || item.label || \"value\"}`}\n\t\t\t\t{@const itemConfig = getPayloadConfigFromPayload(\n\t\t\t\t\tchart.config,\n\t\t\t\t\titem,\n\t\t\t\t\tkey,\n\t\t\t\t\tchartCtx.tooltip.data\n\t\t\t\t)}\n\t\t\t\t{@const indicatorColor = color || item.config?.color || item.color}\n\t\t\t\tsvg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:size-2.5\",\n\t\t\t\t\t\tindicator === \"dot\" && \"items-center\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{#if formatter && item.value !== undefined && item.label}\n\t\t\t\t\t\t{@render formatter({\n\t\t\t\t\t\t\tvalue: item.value,\n\t\t\t\t\t\t\tname: item.label,\n\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tpayload: visibleSeries,\n\t\t\t\t\t\t})}\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t{#if itemConfig?.icon}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t{:else if !hideIndicator}\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t{#if nestLabel}\n\t\t\t\t\t\t\t\t\t{@render TooltipLabel()}\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{itemConfig?.label || item.label}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t{#if item.value !== undefined}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{item.value.toLocaleString()}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\n\t\t\t\t\t{/if}\n\t\t\t\t\n\t\t\t{/each}\n\t\t\n\t\n
    \n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-tooltip.svelte" + }, + { + "path": "registry/default/ui/chart-style.svelte", + "content": "\n\n{#if themeContents}\n\t{#key id}\n\t\t\n\t\t\t{themeContents}\n\t\t\n\t{/key}\n{/if}\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-style.svelte" + }, + { + "path": "registry/default/ui/chart-utils.ts", + "content": "import type { Tooltip } from \"layerchart\";\nimport { getContext, setContext, type Component, type Snippet } from \"svelte\";\n\nexport const THEMES = { light: \"\", dark: \".dark\" } as const;\n\nexport type ChartConfig = {\n\t[k in string]: {\n\t\tlabel?: string;\n\t\ticon?: Component;\n\t} & (\n\t\t| { color?: string; theme?: never }\n\t\t| { color?: never; theme: Record }\n\t);\n};\n\nexport type ExtractSnippetParams = T extends Snippet<[infer P]> ? P : never;\n\nexport type TooltipPayload = Tooltip.TooltipSeries;\n\n// Helper to extract item config from a payload.\nexport function getPayloadConfigFromPayload(\n\tconfig: ChartConfig,\n\tpayload: TooltipPayload,\n\tkey: string,\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tdata?: Record | null\n) {\n\tif (typeof payload !== \"object\" || payload === null) return undefined;\n\n\tconst payloadConfig =\n\t\t\"config\" in payload && typeof payload.config === \"object\" && payload.config !== null\n\t\t\t? payload.config\n\t\t\t: undefined;\n\n\tlet configLabelKey: string = key;\n\n\tif (payload.key === key) {\n\t\tconfigLabelKey = payload.key;\n\t} else if (payload.label === key) {\n\t\tconfigLabelKey = payload.label;\n\t} else if (key in payload && typeof payload[key as keyof typeof payload] === \"string\") {\n\t\tconfigLabelKey = payload[key as keyof typeof payload] as string;\n\t} else if (\n\t\tpayloadConfig !== undefined &&\n\t\tkey in payloadConfig &&\n\t\ttypeof payloadConfig[key as keyof typeof payloadConfig] === \"string\"\n\t) {\n\t\tconfigLabelKey = payloadConfig[key as keyof typeof payloadConfig] as string;\n\t} else if (data != null && key in data && typeof data[key] === \"string\") {\n\t\tconfigLabelKey = data[key] as string;\n\t}\n\n\treturn configLabelKey in config ? config[configLabelKey] : config[key as keyof typeof config];\n}\n\ntype ChartContextValue = {\n\tconfig: ChartConfig;\n};\n\nconst chartContextKey = Symbol(\"chart-context\");\n\nexport function setChartContext(value: ChartContextValue) {\n\treturn setContext(chartContextKey, value);\n}\n\nexport function useChart() {\n\treturn getContext(chartContextKey);\n}\n", + "type": "registry:ui", + "target": "lib/components/ui/chart/chart-utils.ts" + } + ] +} \ No newline at end of file