UI components are the building blocks of your interface. They’re designed to be composable, accessible, and customizable through props.
Components are organized into subcategories under src/components/ui/.
| Component | Purpose |
|---|
Button | Clickable actions with multiple variants |
Input | Text input with label, hint, and error states |
Textarea | Multi-line text input |
Select | Dropdown select menu |
Checkbox | Checkbox input with label |
Radio | Radio button for single selection |
Switch | Toggle switch input |
| Component | Purpose |
|---|
Card | Container with structured content |
Badge | Status labels and tags |
Avatar | User profile images |
AvatarGroup | Grouped avatar display |
Table | Data table with styling |
Pagination | Page navigation controls |
Progress | Progress bar indicator |
Skeleton | Loading placeholders |
| Component | Purpose |
|---|
Alert | Contextual feedback messages |
Toast | Temporary notification messages |
Tooltip | Hover tooltips |
| Component | Purpose |
|---|
Dialog | Modal dialogs |
Dropdown | Dropdown menus |
Tabs | Horizontal tab navigation |
VerticalTabs | Vertical tab navigation |
Accordion | Collapsible content sections |
| Component | Purpose |
|---|
Separator | Visual divider between sections |
| Component | Purpose |
|---|
Icon | SVG icon component |
| Component | Purpose |
|---|
CodeBlock | Syntax-highlighted code |
| Component | Purpose |
|---|
Logo | Brand logo with variants |
CTA | Call-to-action sections |
NpmCopyButton | NPM install command copier |
SocialProof | Testimonial cards |
TerminalDemo | Animated terminal demo |
Most UI components share these patterns:
Visual style options:
<Button variant="primary">Primary</Button>
<Button variant="secondary">Secondary</Button>
<Button variant="outline">Outline</Button>
<Button variant="ghost">Ghost</Button>
Size options (usually sm, md, lg):
<Button size="sm">Small</Button>
<Button size="md">Medium</Button>
<Button size="lg">Large</Button>
For dark backgrounds:
<Button colorScheme="invert">On Dark</Button>
import { Button, Input, Card } from '@/components/ui';
<Input label="Email" name="email" type="email" />