{ "$schema": "https://ui.shadcn.com/schema/registry.json", "name": "tlb-design-system", "homepage": "https://the-launch-box.github.io/tlb-design-system/", "items": [ { "name": "button", "type": "registry:ui", "description": "Primary action element. TLB orange default, charcoal secondary, dark-orange destructive.", "files": [ { "path": "components/ui/button.tsx", "type": "registry:ui", "target": "components/ui/button.tsx" } ] }, { "name": "input", "type": "registry:ui", "description": "Single-line text input. Always paired with a Label.", "files": [ { "path": "components/ui/input.tsx", "type": "registry:ui", "target": "components/ui/input.tsx" } ] }, { "name": "textarea", "type": "registry:ui", "description": "Multi-line text input. Minimum 3 rows.", "files": [ { "path": "components/ui/textarea.tsx", "type": "registry:ui", "target": "components/ui/textarea.tsx" } ] }, { "name": "label", "type": "registry:ui", "description": "Form label. Required on every form field per TLB a11y rule.", "files": [ { "path": "components/ui/label.tsx", "type": "registry:ui", "target": "components/ui/label.tsx" } ] }, { "name": "select", "type": "registry:ui", "description": "Single-choice selector for short option lists (under 12 items).", "files": [ { "path": "components/ui/select.tsx", "type": "registry:ui", "target": "components/ui/select.tsx" } ] }, { "name": "checkbox", "type": "registry:ui", "description": "Boolean or multi-select checkbox. Checked state uses TLB orange.", "files": [ { "path": "components/ui/checkbox.tsx", "type": "registry:ui", "target": "components/ui/checkbox.tsx" } ] }, { "name": "radio-group", "type": "registry:ui", "description": "Single choice from 2 to 5 visible options.", "files": [ { "path": "components/ui/radio-group.tsx", "type": "registry:ui", "target": "components/ui/radio-group.tsx" } ] }, { "name": "switch", "type": "registry:ui", "description": "Boolean toggle with immediate effect. Prefer over checkbox when state changes instantly.", "files": [ { "path": "components/ui/switch.tsx", "type": "registry:ui", "target": "components/ui/switch.tsx" } ] }, { "name": "card", "type": "registry:ui", "description": "Default container block. CardTitle uses font-display uppercase per TLB convention.", "files": [ { "path": "components/ui/card.tsx", "type": "registry:ui", "target": "components/ui/card.tsx" } ] }, { "name": "dialog", "type": "registry:ui", "description": "Non-destructive modal. Title is font-display uppercase.", "files": [ { "path": "components/ui/dialog.tsx", "type": "registry:ui", "target": "components/ui/dialog.tsx" } ], "registryDependencies": ["button"] }, { "name": "alert-dialog", "type": "registry:ui", "description": "Destructive confirmations. Confirm action defaults to destructive variant.", "files": [ { "path": "components/ui/alert-dialog.tsx", "type": "registry:ui", "target": "components/ui/alert-dialog.tsx" } ], "registryDependencies": ["button"] }, { "name": "sheet", "type": "registry:ui", "description": "Side panel for secondary detail or quick edit. Defaults to right side.", "files": [ { "path": "components/ui/sheet.tsx", "type": "registry:ui", "target": "components/ui/sheet.tsx" } ] }, { "name": "tooltip", "type": "registry:ui", "description": "Short hover/focus label. Inverted: foreground bg, background text. Never for required info.", "files": [ { "path": "components/ui/tooltip.tsx", "type": "registry:ui", "target": "components/ui/tooltip.tsx" } ] }, { "name": "popover", "type": "registry:ui", "description": "Interactive floating panel: filter pickers, inline edit, date pickers.", "files": [ { "path": "components/ui/popover.tsx", "type": "registry:ui", "target": "components/ui/popover.tsx" } ] }, { "name": "dropdown-menu", "type": "registry:ui", "description": "Action menu attached to a button or row. Destructive items use text-destructive.", "files": [ { "path": "components/ui/dropdown-menu.tsx", "type": "registry:ui", "target": "components/ui/dropdown-menu.tsx" } ] }, { "name": "table", "type": "registry:ui", "description": "Basic table. Headers are font-display uppercase. For sort/paginate use the DataTable composite.", "files": [ { "path": "components/ui/table.tsx", "type": "registry:ui", "target": "components/ui/table.tsx" } ] }, { "name": "tabs", "type": "registry:ui", "description": "Top-level switching inside a page. Never nested inside a card.", "files": [ { "path": "components/ui/tabs.tsx", "type": "registry:ui", "target": "components/ui/tabs.tsx" } ] }, { "name": "separator", "type": "registry:ui", "description": "Visual divider. Replaces native hr element.", "files": [ { "path": "components/ui/separator.tsx", "type": "registry:ui", "target": "components/ui/separator.tsx" } ] }, { "name": "badge", "type": "registry:ui", "description": "Status pill. Default uses orange-tint accent. rounded-sm not full.", "files": [ { "path": "components/ui/badge.tsx", "type": "registry:ui", "target": "components/ui/badge.tsx" } ] }, { "name": "skeleton", "type": "registry:ui", "description": "Loading placeholder. Use one per visible block.", "files": [ { "path": "components/ui/skeleton.tsx", "type": "registry:ui", "target": "components/ui/skeleton.tsx" } ] }, { "name": "sonner", "type": "registry:ui", "description": "Toast notifications. Mount Toaster at app root. One toast per user action.", "files": [ { "path": "components/ui/sonner.tsx", "type": "registry:ui", "target": "components/ui/sonner.tsx" } ], "dependencies": ["next-themes"] }, { "name": "form", "type": "registry:ui", "description": "react-hook-form integration. Pairs with zod schema in src/schemas/.", "files": [ { "path": "components/ui/form.tsx", "type": "registry:ui", "target": "components/ui/form.tsx" } ], "registryDependencies": ["label"] }, { "name": "app-shell", "type": "registry:ui", "description": "Top-level layout: sidebar slot + topbar slot + scrollable main. Used at the root of every TLB internal app.", "files": [ { "path": "components/composites/app-shell.tsx", "type": "registry:ui", "target": "components/composites/app-shell.tsx" } ] }, { "name": "page-header", "type": "registry:ui", "description": "Standardized page header: uppercase TLB-orange title, subtitle, right-aligned actions.", "files": [ { "path": "components/composites/page-header.tsx", "type": "registry:ui", "target": "components/composites/page-header.tsx" } ] }, { "name": "data-table", "type": "registry:ui", "description": "Generic table with @tanstack/react-table headless + shadcn Table primitives. Sort + paginate built in.", "files": [ { "path": "components/composites/data-table.tsx", "type": "registry:ui", "target": "components/composites/data-table.tsx" } ], "registryDependencies": ["table", "button"] }, { "name": "kpi-card", "type": "registry:ui", "description": "Headline dashboard metric: label, value, optional delta, optional lucide icon.", "files": [ { "path": "components/composites/kpi-card.tsx", "type": "registry:ui", "target": "components/composites/kpi-card.tsx" } ], "registryDependencies": ["card"] }, { "name": "empty-state", "type": "registry:ui", "description": "Standardized empty placeholder: icon, headline, description, primary action.", "files": [ { "path": "components/composites/empty-state.tsx", "type": "registry:ui", "target": "components/composites/empty-state.tsx" } ] }, { "name": "status-badge", "type": "registry:ui", "description": "Status pill with paired lucide icon. Statuses: draft, pending, approved, rejected.", "files": [ { "path": "components/composites/status-badge.tsx", "type": "registry:ui", "target": "components/composites/status-badge.tsx" } ], "registryDependencies": ["badge"] }, { "name": "chart-tooltip", "type": "registry:ui", "description": "Themed recharts tooltip content: monospace card with one line per series. Accepts a format function for currency/percent rendering.", "files": [ { "path": "components/composites/chart-tooltip.tsx", "type": "registry:ui", "target": "components/composites/chart-tooltip.tsx" } ] }, { "name": "file-upload", "type": "registry:ui", "description": "Drag-and-drop file dropzone with click-to-browse fallback. Reads selected file as text and forwards via onFile. Suits CSV imports.", "files": [ { "path": "components/composites/file-upload.tsx", "type": "registry:ui", "target": "components/composites/file-upload.tsx" } ] }, { "name": "sparkline", "type": "registry:ui", "description": "Inline bar-chart sparkline for KPI cards and dense rows. Values normalized 0..1; trailing bar colored by trend direction.", "files": [ { "path": "components/composites/sparkline.tsx", "type": "registry:ui", "target": "components/composites/sparkline.tsx" } ] }, { "name": "delta", "type": "registry:ui", "description": "Formatted change indicator with directional marker, mono numerals, and pos/neg tokens. Derives sign from the numeric value.", "files": [ { "path": "components/composites/delta.tsx", "type": "registry:ui", "target": "components/composites/delta.tsx" } ] }, { "name": "signal-badge", "type": "registry:ui", "description": "Data-signal pill for financial transaction state (settled/pending/failed/draft) with a dot prefix. Distinct from workflow StatusBadge.", "files": [ { "path": "components/composites/signal-badge.tsx", "type": "registry:ui", "target": "components/composites/signal-badge.tsx" } ] }, { "name": "live-sync", "type": "registry:ui", "description": "Pulsing-dot status chip for live data freshness: ok (green), stale (amber), down (red), paired with a status label.", "files": [ { "path": "components/composites/live-sync.tsx", "type": "registry:ui", "target": "components/composites/live-sync.tsx" } ] }, { "name": "brand-mark", "type": "registry:ui", "description": "Official TLB wordmark inside a black lozenge. Three pre-sized variants for sidebar tile, header chip, and large branded surface.", "files": [ { "path": "components/composites/brand-mark.tsx", "type": "registry:ui", "target": "components/composites/brand-mark.tsx" } ] }, { "name": "tool-launcher", "type": "registry:ui", "description": "Card-style launcher tile for a dashboard tools grid: icon chip, title, description, meta line, arrow indicator on hover.", "files": [ { "path": "components/composites/tool-launcher.tsx", "type": "registry:ui", "target": "components/composites/tool-launcher.tsx" } ] }, { "name": "hero", "type": "registry:ui", "description": "Token-driven marketing hero. Eyebrow, headline, optional highlight clause, body, actions.", "files": [ { "path": "components/marketing/hero.tsx", "type": "registry:ui", "target": "components/marketing/hero.tsx" } ] }, { "name": "section-header", "type": "registry:ui", "description": "Section opener: eyebrow, heading, optional intro.", "files": [ { "path": "components/marketing/section-header.tsx", "type": "registry:ui", "target": "components/marketing/section-header.tsx" } ] }, { "name": "stat-callout", "type": "registry:ui", "description": "Display figure plus label on a card surface.", "files": [ { "path": "components/marketing/stat-callout.tsx", "type": "registry:ui", "target": "components/marketing/stat-callout.tsx" } ] }, { "name": "quote-card", "type": "registry:ui", "description": "Testimonial card: quote, author, role.", "files": [ { "path": "components/marketing/quote-card.tsx", "type": "registry:ui", "target": "components/marketing/quote-card.tsx" } ] }, { "name": "process-step", "type": "registry:ui", "description": "Numbered or phase-labeled step: index, icon, title, description.", "files": [ { "path": "components/marketing/process-step.tsx", "type": "registry:ui", "target": "components/marketing/process-step.tsx" } ] }, { "name": "feature-card", "type": "registry:ui", "description": "Icon, title, description card for capability grids.", "files": [ { "path": "components/marketing/feature-card.tsx", "type": "registry:ui", "target": "components/marketing/feature-card.tsx" } ] }, { "name": "cta-banner", "type": "registry:ui", "description": "Closing call to action on an accent surface.", "files": [ { "path": "components/marketing/cta-banner.tsx", "type": "registry:ui", "target": "components/marketing/cta-banner.tsx" } ] }, { "name": "logo-cloud", "type": "registry:ui", "description": "Row of partner or client marks.", "files": [ { "path": "components/marketing/logo-cloud.tsx", "type": "registry:ui", "target": "components/marketing/logo-cloud.tsx" } ] }, { "name": "primitives-strip", "type": "registry:ui", "description": "Buttons plus badges row proving token cascade.", "registryDependencies": ["button", "badge"], "files": [ { "path": "components/marketing/primitives-strip.tsx", "type": "registry:ui", "target": "components/marketing/primitives-strip.tsx" } ] } ] }