Skip to content

feat: add Svelte 5 support via @boldkit/svelte#4

Draft
maxffarrell wants to merge 6 commits into
ANIBIT14:mainfrom
maxffarrell:feat/svelte-support
Draft

feat: add Svelte 5 support via @boldkit/svelte#4
maxffarrell wants to merge 6 commits into
ANIBIT14:mainfrom
maxffarrell:feat/svelte-support

Conversation

@maxffarrell
Copy link
Copy Markdown

Summary

  • Adds packages/svelte — a new Bun workspace with 50+ Svelte 5 components ported from the existing Vue package
  • Uses bits-ui as the headless primitive layer (the Svelte equivalent of reka-ui) and Svelte 5 runes syntax throughout ($props(), $bindable(), $state(), snippets)
  • Publishes a shadcn-svelte-compatible registry under public/r/svelte/*.json (installable via npx shadcn add https://boldkit.dev/r/svelte/button.json)

Components included

Group Components
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)

Key design decisions

  • bits-ui v1.8 — Svelte 5 runes-native, API mirrors reka-ui's namespace pattern (Accordion.Root, Dialog.Content, etc.)
  • CSS variables reusedglobals.css is adapted from the Vue package (only --reka-accordion-content-height--bits-accordion-content-height)
  • Registry format — follows shadcn-svelte's registry-item.json schema, deployed to public/r/svelte/
  • svelte-check passes with 0 errors (Svelte 5 strict mode)

What's NOT included yet (follow-up PRs)

  • Charts (no Svelte equivalent of vue-echarts yet identified)
  • Shapes / ASCII shapes (canvas, pure SVG — straightforward to port)
  • Blocks (require full page layouts)
  • Carousel, Drawer, Combobox, Command, Sidebar, DatePicker, etc.

Test plan

  • svelte-check --tsconfig ./tsconfig.json → 0 errors, 0 warnings
  • Registry build script generates all 20+ JSON files correctly
  • Root registry:build:svelte script wired into registry:build
  • packages/svelte added to Bun workspaces in root package.json
  • Verify components render correctly in a fresh SvelteKit project (manual)

🤖 Generated with Claude Code

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 <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented May 13, 2026

@maxffarrell is attempting to deploy a commit to the aniruddhaagarwal18's projects Team on Vercel.

A member of the Team first needs to authorize it.

…tyling

- 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 <noreply@anthropic.com>
@ANIBIT14
Copy link
Copy Markdown
Owner

ANIBIT14 commented May 13, 2026

@maxffarrell thanks for submitting this PR! I'll be reviewing it in a few days, currently have a busy schedule. Will leave detailed feedback once I get to it.

@maxffarrell
Copy link
Copy Markdown
Author

@ANIBIT14 no rush! Opening for visibility, I still have plenty of work left to do

maxffarrell and others added 4 commits May 13, 2026 22:10
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 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants