component-docs
Rendered component examples, next to their real source.
Browse the components below, or jump straight to the doc generator.
button
Show codeHide code
import type { ButtonHTMLAttributes, ReactNode } from 'react'; export type ButtonVariant = 'primary' | 'secondary' | 'ghost'; export type ButtonSize = 'sm' | 'md' | 'lg'; export interface ButtonProps extends Omit< ButtonHTMLAttributes<HTMLButtonElement>, 'className' > { children: ReactNode; variant?: ButtonVariant; size?: ButtonSize; disabled?: boolean; loading?: boolean; } const VARIANT_CLASSES: Record<ButtonVariant, string> = { primary: 'bg-primary text-bg border-primary', secondary: 'bg-transparent text-primary border-primary', ghost: 'bg-transparent text-primary border-transparent', }; const SIZE_CLASSES: Record<ButtonSize, string> = { sm: 'text-xs px-2 py-1', md: 'text-sm px-3 py-1.5', lg: 'text-base px-4 py-2', }; export function Button({ children, variant = 'primary', size = 'md', disabled = false, loading = false, ...rest }: ButtonProps) { return ( <button type="button" disabled={disabled || loading} aria-busy={loading} className={[ 'inline-flex items-center justify-center gap-2 rounded-sm border font-mono transition-opacity', 'disabled:opacity-50 disabled:cursor-not-allowed', VARIANT_CLASSES[variant], SIZE_CLASSES[size], ].join(' ')} {...rest}> {loading ? <span aria-hidden="true">⏳</span> : null} {children} </button> ); } export function ButtonDemo() { return ( <> <Button>Save changes</Button> <Button variant="secondary">Cancel</Button> <Button variant="ghost" loading> Saving </Button> </> ); }badge
NewPassingFailedBetaShow codeHide code
import type { ReactNode } from 'react'; export type BadgeTone = 'neutral' | 'success' | 'error' | 'info'; export interface BadgeProps { children: ReactNode; tone?: BadgeTone; filled?: boolean; } const TONE_TEXT_CLASSES: Record<BadgeTone, string> = { neutral: 'text-muted border-muted', success: 'text-accent-green border-accent-green', error: 'text-error border-error', info: 'text-accent-blue border-accent-blue', }; const TONE_FILLED_CLASSES: Record<BadgeTone, string> = { neutral: 'bg-muted text-bg border-muted', success: 'bg-accent-green text-bg border-accent-green', error: 'bg-error text-bg border-error', info: 'bg-accent-blue text-bg border-accent-blue', }; export function Badge({ children, tone = 'neutral', filled = false, }: BadgeProps) { return ( <span className={[ 'inline-flex items-center rounded-sm border px-1.5 py-0.5 text-xs font-mono leading-none', filled ? TONE_FILLED_CLASSES[tone] : TONE_TEXT_CLASSES[tone], ].join(' ')}> {children} </span> ); } export function BadgeDemo() { return ( <> <Badge>New</Badge> <Badge tone="success" filled> Passing </Badge> <Badge tone="error">Failed</Badge> <Badge tone="info">Beta</Badge> </> ); }toggle
Show codeHide code
'use client'; import { useId, useState } from 'react'; export interface ToggleProps { label: string; defaultChecked?: boolean; checked?: boolean; onCheckedChange?: (checked: boolean) => void; disabled?: boolean; } export function Toggle({ label, defaultChecked = false, checked, onCheckedChange, disabled = false, }: ToggleProps) { const [internalChecked, setInternalChecked] = useState(defaultChecked); const isControlled = checked !== undefined; const isChecked = isControlled ? checked : internalChecked; const id = useId(); function handleClick() { if (disabled) return; const next = !isChecked; if (!isControlled) setInternalChecked(next); onCheckedChange?.(next); } return ( <label htmlFor={id} className="inline-flex items-center gap-2 font-mono text-sm text-primary select-none"> <button id={id} type="button" role="switch" aria-checked={isChecked} disabled={disabled} onClick={handleClick} className={[ 'relative h-5 w-9 shrink-0 rounded-full border transition-colors', 'disabled:opacity-50 disabled:cursor-not-allowed', isChecked ? 'bg-accent-blue border-accent-blue' : 'bg-muted/25 border-muted', ].join(' ')}> <span aria-hidden="true" className={[ 'absolute left-px top-px h-4 w-4 rounded-full bg-bg transition-transform', isChecked ? 'translate-x-[16px]' : 'translate-x-0', ].join(' ')} /> </button> <span className="leading-none">{label}</span> </label> ); } export function ToggleDemo() { return ( <> <Toggle label="Enable notifications" defaultChecked /> <Toggle label="Auto-save drafts" /> <Toggle label="Legacy sync" defaultChecked disabled /> </> ); }
Playground
Pick one of the three examples below, or paste your own source.
Configure
sourceexampleLive Preview
Generated Docs
Pick a source on the left, then generate docs.