{ "$schema": "https://ui.shadcn.com/schema/registry.json", "name": "relay-ui", "homepage": "https://github.com/andreukuznec/ui-kit-starter", "items": [ { "name": "accordion", "type": "registry:ui", "title": "Accordion", "description": "Vertically stacked sections that expand and collapse one panel at a time.", "dependencies": ["radix-ui", "clsx", "tailwind-merge", "lucide-react"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/accordion.tsx", "type": "registry:ui" } ] }, { "name": "alert", "type": "registry:ui", "title": "Alert", "description": "Inline status message with default, destructive, success, warning, and info variants.", "dependencies": ["class-variance-authority", "clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/alert.tsx", "type": "registry:ui" } ] }, { "name": "alert-dialog", "type": "registry:ui", "title": "Alert dialog", "description": "Modal confirmation dialog built on the radix-ui AlertDialog primitive.", "dependencies": ["radix-ui", "clsx", "tailwind-merge"], "registryDependencies": ["button"], "files": [ { "path": "src/components/ui/alert-dialog.tsx", "type": "registry:ui" } ] }, { "name": "avatar", "type": "registry:ui", "title": "Avatar", "description": "User or entity image with a fallback for missing sources.", "dependencies": ["radix-ui", "clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/avatar.tsx", "type": "registry:ui" } ] }, { "name": "badge", "type": "registry:ui", "title": "Badge", "description": "Compact label for status, category, or count.", "dependencies": ["class-variance-authority", "clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/badge.tsx", "type": "registry:ui" } ] }, { "name": "breadcrumb", "type": "registry:ui", "title": "Breadcrumb", "description": "Hierarchical navigation trail with separators and an ellipsis.", "dependencies": ["radix-ui", "lucide-react", "clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/breadcrumb.tsx", "type": "registry:ui" } ] }, { "name": "button", "type": "registry:ui", "title": "Button", "description": "Button with size and variant styles, including asChild composition.", "dependencies": ["radix-ui", "class-variance-authority", "clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/button.tsx", "type": "registry:ui" } ] }, { "name": "calendar", "type": "registry:ui", "title": "Calendar", "description": "Month calendar built on react-day-picker.", "dependencies": ["react-day-picker", "date-fns", "lucide-react", "clsx", "tailwind-merge"], "registryDependencies": ["button", "utils"], "files": [ { "path": "src/components/ui/calendar.tsx", "type": "registry:ui" } ] }, { "name": "card", "type": "registry:ui", "title": "Card", "description": "Content container with header, body, and footer slots.", "dependencies": ["clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/card.tsx", "type": "registry:ui" } ] }, { "name": "chart", "type": "registry:ui", "title": "Chart", "description": "Recharts wrapper with kit theming and tooltip helpers.", "dependencies": ["recharts", "clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/chart.tsx", "type": "registry:ui" } ] }, { "name": "checkbox", "type": "registry:ui", "title": "Checkbox", "description": "Checkbox control with checked, unchecked, and indeterminate states.", "dependencies": ["radix-ui", "lucide-react", "clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/checkbox.tsx", "type": "registry:ui" } ] }, { "name": "collapsible", "type": "registry:ui", "title": "Collapsible", "description": "Show and hide a section of content.", "dependencies": ["radix-ui"], "files": [ { "path": "src/components/ui/collapsible.tsx", "type": "registry:ui" } ] }, { "name": "combobox", "type": "registry:ui", "title": "Combobox", "description": "Single-select searchable combobox composed from Popover and Command.", "dependencies": ["lucide-react", "clsx", "tailwind-merge"], "registryDependencies": ["button", "command", "popover", "utils"], "files": [ { "path": "src/components/ui/combobox.tsx", "type": "registry:ui" } ] }, { "name": "command", "type": "registry:ui", "title": "Command", "description": "Command palette and searchable list built on cmdk.", "dependencies": ["cmdk", "lucide-react", "clsx", "tailwind-merge"], "registryDependencies": ["dialog", "utils"], "files": [ { "path": "src/components/ui/command.tsx", "type": "registry:ui" } ] }, { "name": "data-table", "type": "registry:ui", "title": "Data table", "description": "Generic sortable, paginated table built on Table primitives and TanStack Table.", "dependencies": ["@tanstack/react-table", "lucide-react", "clsx", "tailwind-merge"], "registryDependencies": ["table", "button", "utils"], "files": [ { "path": "src/components/ui/data-table.tsx", "type": "registry:ui" } ] }, { "name": "date-range-picker", "type": "registry:ui", "title": "Date range picker", "description": "Popover calendar for selecting a date range.", "dependencies": ["date-fns", "lucide-react", "react-day-picker", "clsx", "tailwind-merge"], "registryDependencies": ["calendar", "popover", "button", "utils"], "files": [ { "path": "src/components/ui/date-range-picker.tsx", "type": "registry:ui" } ] }, { "name": "dialog", "type": "registry:ui", "title": "Dialog", "description": "Modal dialog with overlay, focus trap, and close control.", "dependencies": ["radix-ui", "lucide-react", "clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/dialog.tsx", "type": "registry:ui" } ] }, { "name": "dropdown-menu", "type": "registry:ui", "title": "Dropdown menu", "description": "Contextual menu of actions, checkboxes, and nested items.", "dependencies": ["radix-ui", "lucide-react", "clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/dropdown-menu.tsx", "type": "registry:ui" } ] }, { "name": "empty", "type": "registry:ui", "title": "Empty", "description": "Placeholder for empty lists, search results, or states.", "dependencies": ["class-variance-authority", "clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/empty.tsx", "type": "registry:ui" } ] }, { "name": "form", "type": "registry:ui", "title": "Form", "description": "Form primitives wired to react-hook-form and zod.", "dependencies": [ "react-hook-form", "@hookform/resolvers", "zod", "radix-ui", "clsx", "tailwind-merge" ], "registryDependencies": ["label", "utils"], "files": [ { "path": "src/components/ui/form.tsx", "type": "registry:ui" } ] }, { "name": "hover-card", "type": "registry:ui", "title": "Hover card", "description": "Preview card shown on hover or focus.", "dependencies": ["radix-ui", "clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/hover-card.tsx", "type": "registry:ui" } ] }, { "name": "input", "type": "registry:ui", "title": "Input", "description": "Single-line text input field.", "dependencies": ["clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/input.tsx", "type": "registry:ui" } ] }, { "name": "kbd", "type": "registry:ui", "title": "Kbd", "description": "Keyboard shortcut glyph.", "dependencies": ["clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/kbd.tsx", "type": "registry:ui" } ] }, { "name": "label", "type": "registry:ui", "title": "Label", "description": "Accessible form label.", "dependencies": ["radix-ui", "class-variance-authority", "clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/label.tsx", "type": "registry:ui" } ] }, { "name": "multi-select", "type": "registry:ui", "title": "Multi-select", "description": "Multi-select combobox with badge chips, composed from Popover, Command, and Badge.", "dependencies": ["lucide-react", "clsx", "tailwind-merge"], "registryDependencies": ["badge", "button", "command", "popover", "utils"], "files": [ { "path": "src/components/ui/multi-select.tsx", "type": "registry:ui" } ] }, { "name": "pagination", "type": "registry:ui", "title": "Pagination", "description": "Page navigation with previous, next, and page items.", "dependencies": ["lucide-react", "clsx", "tailwind-merge"], "registryDependencies": ["button", "utils"], "files": [ { "path": "src/components/ui/pagination.tsx", "type": "registry:ui" } ] }, { "name": "popover", "type": "registry:ui", "title": "Popover", "description": "Floating panel anchored to a trigger.", "dependencies": ["radix-ui", "clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/popover.tsx", "type": "registry:ui" } ] }, { "name": "progress", "type": "registry:ui", "title": "Progress", "description": "Determinate progress bar.", "dependencies": ["radix-ui", "clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/progress.tsx", "type": "registry:ui" } ] }, { "name": "radio-group", "type": "registry:ui", "title": "Radio group", "description": "Set of mutually exclusive radio options.", "dependencies": ["radix-ui", "lucide-react", "clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/radio-group.tsx", "type": "registry:ui" } ] }, { "name": "scroll-area", "type": "registry:ui", "title": "Scroll area", "description": "Scrollable region with styled scrollbars.", "dependencies": ["radix-ui", "clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/scroll-area.tsx", "type": "registry:ui" } ] }, { "name": "select", "type": "registry:ui", "title": "Select", "description": "Dropdown select with keyboard navigation.", "dependencies": ["radix-ui", "lucide-react", "clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/select.tsx", "type": "registry:ui" } ] }, { "name": "separator", "type": "registry:ui", "title": "Separator", "description": "Horizontal or vertical divider.", "dependencies": ["radix-ui", "clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/separator.tsx", "type": "registry:ui" } ] }, { "name": "sheet", "type": "registry:ui", "title": "Sheet", "description": "Slide-in panel from a screen edge.", "dependencies": [ "radix-ui", "class-variance-authority", "lucide-react", "clsx", "tailwind-merge" ], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/sheet.tsx", "type": "registry:ui" } ] }, { "name": "sidebar", "type": "registry:ui", "title": "Sidebar", "description": "Application sidebar with collapse, mobile sheet, and menu primitives.", "dependencies": [ "radix-ui", "class-variance-authority", "lucide-react", "clsx", "tailwind-merge" ], "registryDependencies": [ "button", "input", "separator", "sheet", "skeleton", "tooltip", "use-mobile", "utils" ], "files": [ { "path": "src/components/ui/sidebar.tsx", "type": "registry:ui" } ] }, { "name": "skeleton", "type": "registry:ui", "title": "Skeleton", "description": "Placeholder pulse for loading content.", "dependencies": ["clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/skeleton.tsx", "type": "registry:ui" } ] }, { "name": "slider", "type": "registry:ui", "title": "Slider", "description": "Range or single-value slider.", "dependencies": ["radix-ui", "clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/slider.tsx", "type": "registry:ui" } ] }, { "name": "sonner", "type": "registry:ui", "title": "Sonner", "description": "Toast notifications themed to the kit.", "dependencies": ["sonner", "clsx", "tailwind-merge"], "registryDependencies": ["theme-provider", "utils"], "files": [ { "path": "src/components/ui/sonner.tsx", "type": "registry:ui" } ] }, { "name": "spinner", "type": "registry:ui", "title": "Spinner", "description": "Loading spinner icon.", "dependencies": ["lucide-react", "clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/spinner.tsx", "type": "registry:ui" } ] }, { "name": "switch", "type": "registry:ui", "title": "Switch", "description": "On/off toggle switch.", "dependencies": ["radix-ui", "clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/switch.tsx", "type": "registry:ui" } ] }, { "name": "table", "type": "registry:ui", "title": "Table", "description": "Semantic table primitives for custom tables.", "dependencies": ["clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/table.tsx", "type": "registry:ui" } ] }, { "name": "tabs", "type": "registry:ui", "title": "Tabs", "description": "Tabbed panels.", "dependencies": ["radix-ui", "class-variance-authority", "clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/tabs.tsx", "type": "registry:ui" } ] }, { "name": "textarea", "type": "registry:ui", "title": "Textarea", "description": "Multi-line text input.", "dependencies": ["clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/textarea.tsx", "type": "registry:ui" } ] }, { "name": "theme-provider", "type": "registry:component", "title": "Theme provider", "description": "Dark, light, and system theme context with localStorage persistence, cross-tab sync, and no-FOUC script.", "files": [ { "path": "src/components/theme-provider.tsx", "type": "registry:component" } ] }, { "name": "toggle", "type": "registry:ui", "title": "Toggle", "description": "Pressable toggle button.", "dependencies": ["radix-ui", "class-variance-authority", "clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/toggle.tsx", "type": "registry:ui" } ] }, { "name": "toggle-group", "type": "registry:ui", "title": "Toggle group", "description": "Group of related toggle buttons.", "dependencies": ["radix-ui", "class-variance-authority", "clsx", "tailwind-merge"], "registryDependencies": ["toggle", "utils"], "files": [ { "path": "src/components/ui/toggle-group.tsx", "type": "registry:ui" } ] }, { "name": "tooltip", "type": "registry:ui", "title": "Tooltip", "description": "Short label shown on hover or focus.", "dependencies": ["radix-ui", "clsx", "tailwind-merge"], "registryDependencies": ["utils"], "files": [ { "path": "src/components/ui/tooltip.tsx", "type": "registry:ui" } ] }, { "name": "use-mobile", "type": "registry:hook", "title": "useIsMobile hook", "description": "Viewport hook that reports whether the layout is below 768px.", "files": [ { "path": "src/hooks/use-mobile.ts", "type": "registry:hook" } ] }, { "name": "utils", "type": "registry:lib", "title": "cn() utility", "description": "cn() helper that merges class names with clsx and tailwind-merge.", "dependencies": ["clsx", "tailwind-merge"], "files": [ { "path": "src/lib/utils.ts", "type": "registry:lib" } ] } ] }