shadcn/ui — Complete Setup and Component Guide
Advertisement
shadcn/ui — Complete Setup and Component Guide
shadcn/ui provides beautifully designed, copy-paste React components built with Tailwind CSS.
- shadcn/ui — Complete Setup and Component Guide
- Installation
- Using Components
- Button Component
- Form Components
- Dialog Component
- Dropdown Menu
- Card Component
- FAQ
Installation
npx shadcn-ui@latest init
Choose your settings for styling and component library.
Using Components
npx shadcn-ui@latest add button
npx shadcn-ui@latest add card
npx shadcn-ui@latest add input
Button Component
import { Button } from '@/components/ui/button'
export default function Page() {
return (
<div className="space-y-2">
<Button>Default</Button>
<Button variant="secondary">Secondary</Button>
<Button variant="destructive">Destructive</Button>
<Button size="lg">Large</Button>
<Button disabled>Disabled</Button>
</div>
)
}
Form Components
import { Input } from '@/components/ui/input'
import { Label } from '@/components/ui/label'
import { Button } from '@/components/ui/button'
export function LoginForm() {
return (
<form className="space-y-4 max-w-md">
<div>
<Label htmlFor="email">Email</Label>
<Input id="email" type="email" placeholder="your@email.com" />
</div>
<div>
<Label htmlFor="password">Password</Label>
<Input id="password" type="password" />
</div>
<Button type="submit" className="w-full">
Sign In
</Button>
</form>
)
}
Dialog Component
import {
Dialog,
DialogContent,
DialogDescription,
DialogHeader,
DialogTitle,
DialogTrigger,
} from '@/components/ui/dialog'
import { Button } from '@/components/ui/button'
export function ConfirmDialog() {
return (
<Dialog>
<DialogTrigger asChild>
<Button>Delete Item</Button>
</DialogTrigger>
<DialogContent>
<DialogHeader>
<DialogTitle>Are you sure?</DialogTitle>
<DialogDescription>
This action cannot be undone.
</DialogDescription>
</DialogHeader>
<div className="flex gap-4">
<Button variant="destructive">Delete</Button>
<Button variant="outline">Cancel</Button>
</div>
</DialogContent>
</Dialog>
)
}
Dropdown Menu
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuTrigger,
DropdownMenuItem,
} from '@/components/ui/dropdown-menu'
import { Button } from '@/components/ui/button'
export function UserMenu() {
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="outline">Menu</Button>
</DropdownMenuTrigger>
<DropdownMenuContent>
<DropdownMenuItem>Profile</DropdownMenuItem>
<DropdownMenuItem>Settings</DropdownMenuItem>
<DropdownMenuItem>Sign Out</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
)
}
Card Component
import {
Card,
CardContent,
CardDescription,
CardHeader,
CardTitle,
} from '@/components/ui/card'
export function StatsCard() {
return (
<Card>
<CardHeader>
<CardTitle>Revenue</CardTitle>
<CardDescription>Last 30 days</CardDescription>
</CardHeader>
<CardContent>
<div className="text-3xl font-bold">$45,231</div>
</CardContent>
</Card>
)
}
FAQ
Q: Are shadcn/ui components free? A: Yes, fully open source.
Q: Can I customize components? A: Yes, they're copied into your project.
Q: Does shadcn/ui work with TypeScript? A: Yes, TypeScript supported by default.
shadcn/ui accelerates UI development with production-ready components.
Advertisement