Getting Started
Components52
- Accordion
- Alert
- Alert Dialog
- Attachment
- Badge
- Breadcrumb
- Bubble
- Button
- Button Group
- Calendar
- Card
- Checkbox
- Collapsible
- Command
- Context Menu
- Data Table
- Dialog
- Drawer
- Dropdown Menu
- Empty
- Field
- Hover Card
- Input
- Input Group
- Item
- Kbd
- Label
- Marker
- Menubar
- Message
- Message Scroller
- Pagination
- Popover
- Progress
- Questionnaire
- Radio Group
- Scroll Area
- Select
- Separator
- Sheet
- Sidebar
- Skeleton
- Slider
- Sonner
- Spinner
- Switch
- Table
- Tabs
- Textarea
- Toggle
- Toggle Group
- Tooltip
Account
Change your name. Click save when you're done.
import { Button } from "@/components/ui/button"
import {
Card,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from "@/components/ui/card"
import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label"
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
export function TabsDemo() {
return (
<Tabs defaultValue="account" className="w-full max-w-sm">
<TabsList>
<TabsTrigger value="account">Account</TabsTrigger>
<TabsTrigger value="password">Password</TabsTrigger>
<TabsTrigger value="billing">Billing</TabsTrigger>
</TabsList>
<TabsContent value="account">
<Card>
<CardHeader>
<CardTitle>Account</CardTitle>
<CardDescription>
Change your name. Click save when you're done.
</CardDescription>
</CardHeader>
<CardContent className="flex flex-col gap-1.5">
<Label htmlFor="tabs-name">Name</Label>
<Input id="tabs-name" defaultValue="Ada Lovelace" />
</CardContent>
<CardFooter>
<Button>Save changes</Button>
</CardFooter>
</Card>
</TabsContent>
<TabsContent value="password">
<Card>
<CardHeader>
<CardTitle>Password</CardTitle>
<CardDescription>
You'll be signed out on other devices.
</CardDescription>
</CardHeader>
<CardContent className="flex flex-col gap-1.5">
<Label htmlFor="tabs-password">New password</Label>
<Input id="tabs-password" type="password" />
</CardContent>
<CardFooter>
<Button>Update password</Button>
</CardFooter>
</Card>
</TabsContent>
<TabsContent value="billing">
<Card>
<CardHeader>
<CardTitle>Billing</CardTitle>
<CardDescription>You're on the free plan.</CardDescription>
</CardHeader>
</Card>
</TabsContent>
</Tabs>
)
}Installation#
pnpm dlx shadcn@latest add https://ui.ikramhasan.com/r/tabs.json
Usage#
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"<Tabs defaultValue="account" className="w-[400px]">
<TabsList>
<TabsTrigger value="account">Account</TabsTrigger>
<TabsTrigger value="password">Password</TabsTrigger>
</TabsList>
<TabsContent value="account">Make changes to your account here.</TabsContent>
<TabsContent value="password">Change your password here.</TabsContent>
</Tabs>Examples#
Icons and a disabled tab#
import { CodeIcon, LayoutGridIcon, ListIcon } from "lucide-react"
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"
export function TabsIcons() {
return (
<div className="flex flex-wrap items-center gap-2">
<Tabs defaultValue="grid">
<TabsList>
<TabsTrigger value="grid">
<LayoutGridIcon data-icon="inline-start" />
Grid
</TabsTrigger>
<TabsTrigger value="list">
<ListIcon data-icon="inline-start" />
List
</TabsTrigger>
<TabsTrigger value="code" disabled>
<CodeIcon data-icon="inline-start" />
Code
</TabsTrigger>
</TabsList>
</Tabs>
<Tabs defaultValue="grid">
<TabsList>
<TabsTrigger value="grid" aria-label="Grid">
<LayoutGridIcon />
</TabsTrigger>
<TabsTrigger value="list" aria-label="List">
<ListIcon />
</TabsTrigger>
</TabsList>
</Tabs>
</div>
)
}Line#
import { Badge } from "@/components/ui/badge"
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"
export function TabsLine() {
return (
<Tabs defaultValue="overview" className="w-full max-w-sm">
<TabsList variant="line">
<TabsTrigger value="overview">Overview</TabsTrigger>
<TabsTrigger value="activity">
Activity
<Badge variant="secondary">3</Badge>
</TabsTrigger>
<TabsTrigger value="settings">Settings</TabsTrigger>
</TabsList>
</Tabs>
)
}Vertical#
import { AppWindowIcon, SettingsIcon, UserIcon } from "lucide-react"
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"
export function TabsVertical() {
return (
<div className="flex flex-wrap items-center gap-2">
<Tabs defaultValue="profile" orientation="vertical">
<TabsList>
<TabsTrigger value="profile">
<UserIcon data-icon="inline-start" />
Profile
</TabsTrigger>
<TabsTrigger value="apps">
<AppWindowIcon data-icon="inline-start" />
Apps
</TabsTrigger>
<TabsTrigger value="settings">
<SettingsIcon data-icon="inline-start" />
Settings
</TabsTrigger>
</TabsList>
</Tabs>
<Tabs defaultValue="profile" orientation="vertical">
<TabsList variant="line">
<TabsTrigger value="profile">Profile</TabsTrigger>
<TabsTrigger value="apps">Apps</TabsTrigger>
<TabsTrigger value="settings">Settings</TabsTrigger>
</TabsList>
</Tabs>
</div>
)
}API Reference#
Tabs is built on the Base UI Tabs primitive. See the Base UI documentation for every prop.