UI Components
Base UI components built on Radix UI primitives.
Button
import { Button } from '@/components/ui/button'
// Variants
<Button variant="default">Primary</Button>
<Button variant="secondary">Secondary</Button>
<Button variant="outline">Outline</Button>
<Button variant="ghost">Ghost</Button>
<Button variant="destructive">Delete</Button>
// Sizes
<Button size="sm">Small</Button>
<Button size="default">Default</Button>
<Button size="lg">Large</Button>
// With icon
<Button>
<Plus className="mr-2 h-4 w-4" />
Add Item
</Button>Dialog
Modal dialogs for forms and confirmations.
import {
Dialog,
DialogContent,
DialogDescription,
DialogHeader,
DialogTitle,
DialogTrigger,
} from '@/components/ui/dialog'
<Dialog>
<DialogTrigger asChild>
<Button>Open Dialog</Button>
</DialogTrigger>
<DialogContent>
<DialogHeader>
<DialogTitle>Edit Task</DialogTitle>
<DialogDescription>
Make changes to the task.
</DialogDescription>
</DialogHeader>
{/* Form content */}
</DialogContent>
</Dialog>Input
import { Input } from '@/components/ui/input'
<Input placeholder="Enter text..." />
<Input type="email" placeholder="Email" />
<Input type="password" placeholder="Password" />
<Input disabled placeholder="Disabled" />Select
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from '@/components/ui/select'
<Select value={status} onValueChange={setStatus}>
<SelectTrigger>
<SelectValue placeholder="Select status" />
</SelectTrigger>
<SelectContent>
<SelectItem value="pending">Pending</SelectItem>
<SelectItem value="working">Working</SelectItem>
<SelectItem value="done">Done</SelectItem>
</SelectContent>
</Select>Popover
import {
Popover,
PopoverContent,
PopoverTrigger,
} from '@/components/ui/popover'
<Popover>
<PopoverTrigger asChild>
<Button variant="outline">Open</Button>
</PopoverTrigger>
<PopoverContent>
Popover content here
</PopoverContent>
</Popover>Dropdown Menu
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
} from '@/components/ui/dropdown-menu'
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="ghost" size="icon">
<MoreHorizontal className="h-4 w-4" />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent>
<DropdownMenuItem onClick={handleEdit}>
Edit
</DropdownMenuItem>
<DropdownMenuItem onClick={handleDelete}>
Delete
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>Checkbox
import { Checkbox } from '@/components/ui/checkbox'
<Checkbox
checked={checked}
onCheckedChange={setChecked}
/>
<div className="flex items-center gap-2">
<Checkbox id="terms" />
<label htmlFor="terms">Accept terms</label>
</div>Avatar
import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'
<Avatar>
<AvatarImage src={user.avatar} />
<AvatarFallback>JD</AvatarFallback>
</Avatar>Badge
import { Badge } from '@/components/ui/badge'
<Badge>Default</Badge>
<Badge variant="secondary">Secondary</Badge>
<Badge variant="destructive">Error</Badge>
<Badge variant="outline">Outline</Badge>Tabs
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'
<Tabs defaultValue="details">
<TabsList>
<TabsTrigger value="details">Details</TabsTrigger>
<TabsTrigger value="comments">Comments</TabsTrigger>
<TabsTrigger value="activity">Activity</TabsTrigger>
</TabsList>
<TabsContent value="details">
Detail content
</TabsContent>
<TabsContent value="comments">
Comments list
</TabsContent>
</Tabs>Calendar
Date picker component.
import { Calendar } from '@/components/ui/calendar'
<Calendar
mode="single"
selected={date}
onSelect={setDate}
/>Toast / Sonner
Notification toasts.
import { toast } from 'sonner'
// Success
toast.success('Task created!')
// Error
toast.error('Something went wrong')
// With description
toast('Event created', {
description: 'Your event has been scheduled'
})Tooltip
import {
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from '@/components/ui/tooltip'
<TooltipProvider>
<Tooltip>
<TooltipTrigger asChild>
<Button variant="ghost" size="icon">
<HelpCircle className="h-4 w-4" />
</Button>
</TooltipTrigger>
<TooltipContent>
<p>Help text here</p>
</TooltipContent>
</Tooltip>
</TooltipProvider>Scroll Area
import { ScrollArea } from '@/components/ui/scroll-area'
<ScrollArea className="h-72">
{/* Long content */}
</ScrollArea>