Interactive Lab
shadcn-svelte, Bits UI & CVA Component Architecture
Explore the copy-paste component model combining headless unstyled primitives with class-variance-authority and Tailwind CSS v4.
ButtonAndDialog.svelte
<!-- Headless Bits UI + Tailwind v4 Merge (shadcn-svelte pattern) -->
<script lang="ts">
import { Dialog } from 'bits-ui';
import { cva } from 'class-variance-authority';
import { clsx, type ClassValue } from 'clsx';
import { twMerge } from 'tailwind-merge';
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
}
const buttonVariants = cva(
'inline-flex items-center justify-center rounded-xl font-medium transition text-xs',
{
variants: {
variant: {
default: 'bg-indigo-600 text-white hover:bg-indigo-500',
outline: 'border border-slate-300 dark:border-slate-700 hover:bg-slate-100',
destructive: 'bg-rose-600 text-white hover:bg-rose-500'
},
size: {
default: 'h-9 px-4 py-2',
sm: 'h-8 px-3'
}
},
defaultVariants: { variant: 'default', size: 'default' }
}
);
</script>
<!-- Fully Accessible Headless Dialog Primitive -->
<Dialog.Root>
<Dialog.Trigger class={cn(buttonVariants({ variant: 'default' }))}>
Open Headless Dialog
</Dialog.Trigger>
<Dialog.Portal>
<Dialog.Overlay class="fixed inset-0 bg-slate-950/60 backdrop-blur-sm z-50" />
<Dialog.Content class="fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 bg-white dark:bg-slate-900 border rounded-2xl p-6 shadow-2xl z-50">
<Dialog.Title class="text-base font-bold">shadcn-svelte Architecture</Dialog.Title>
<Dialog.Description class="text-xs text-slate-500 mt-2">
Unstyled accessibility primitives from Bits UI styled with atomic Tailwind v4 tokens.
</Dialog.Description>
<Dialog.Close class={cn(buttonVariants({ variant: 'outline' }), 'mt-4')}>
Close
</Dialog.Close>
</Dialog.Content>
</Dialog.Portal>
</Dialog.Root>Architectural Principles
- Zero-Package Component Ownership: Instead of importing compiled monolithic component libraries, code is generated directly into your codebase.
- Bits UI Primitive Layer: Headless runes primitives handle keyboard navigation, ARIA focus traps, and modal portaling natively.
clsx+tailwind-merge: Dynamic class conflict resolution ensures clean overrides without!importantrules.
Component Variance Authority (CVA) Atomic Variants
Select CVA Button Variant:
Headless Switch Primitive Accessible ARIA Checked State: true