Tabs
Tabs organize content into separate views with multiple style variants and orientations.
Import
import { Tabs, Tab } from "@raydenui/ui";Usage
Basic
<Tabs defaultValue="overview">
<Tab value="overview">Overview</Tab>
<Tab value="settings">Settings</Tab>
<Tab value="billing">Billing</Tab>
</Tabs>Variants
// Line variant (default)
<Tabs variant="line" defaultValue="tab1">
<Tab value="tab1">Tab 1</Tab>
<Tab value="tab2">Tab 2</Tab>
</Tabs>
// Pill variant
<Tabs variant="pill" defaultValue="tab1">
<Tab value="tab1">Tab 1</Tab>
<Tab value="tab2">Tab 2</Tab>
</Tabs>
// Segmented variant
<Tabs variant="segmented" defaultValue="tab1">
<Tab value="tab1">Tab 1</Tab>
<Tab value="tab2">Tab 2</Tab>
</Tabs>Sizes
<Tabs size="sm" defaultValue="tab1">...</Tabs>
<Tabs size="md" defaultValue="tab1">...</Tabs>
<Tabs size="lg" defaultValue="tab1">...</Tabs>With Icons
<Tabs defaultValue="home">
<Tab value="home" icon="home">Home</Tab>
<Tab value="settings" icon="settings">Settings</Tab>
<Tab value="users" icon="users">Users</Tab>
</Tabs>With Badges
<Tabs defaultValue="inbox">
<Tab value="inbox" badge={12}>Inbox</Tab>
<Tab value="drafts" badge={3}>Drafts</Tab>
<Tab value="sent">Sent</Tab>
</Tabs>Disabled Tab
<Tabs defaultValue="active">
<Tab value="active">Active</Tab>
<Tab value="disabled" disabled>Disabled</Tab>
<Tab value="another">Another</Tab>
</Tabs>Controlled
const [activeTab, setActiveTab] = useState("first");
<Tabs value={activeTab} onValueChange={setActiveTab}>
<Tab value="first">First</Tab>
<Tab value="second">Second</Tab>
<Tab value="third">Third</Tab>
</Tabs>Props
Tabs
| Prop | Type | Default | Description |
|---|---|---|---|
variant | "line" | "pill" | "segmented" | "line" | Visual style |
size | "sm" | "md" | "lg" | "sm" | Tab size |
orientation | "horizontal" | "vertical" | "horizontal" | Layout direction |
value | string | — | Controlled active tab value |
defaultValue | string | "" | Default active tab (uncontrolled) |
onValueChange | (value: string) => void | — | Tab change handler |
className | string | — | Additional CSS classes |
Tab
| Prop | Type | Default | Description |
|---|---|---|---|
value | string | — | Unique tab identifier (required) |
children | ReactNode | — | Tab label content (required) |
icon | ReactNode | IconName | — | Leading icon |
badge | number | string | — | Badge content |
disabled | boolean | false | Disables the tab |
className | string | — | Additional CSS classes |
Keyboard Navigation
- Arrow Right/Down: Move to next tab
- Arrow Left/Up: Move to previous tab
- Home: Move to first tab
- End: Move to last tab
Accessibility
- Uses proper ARIA tabs pattern (
role="tablist") - Keyboard navigation with arrow keys
- Focus management between tabs
- Disabled tabs are skipped in navigation
aria-orientationset based on orientation prop
Last updated on