Tabs
Tabs organize content into separate views with multiple style variants and orientations.
Build with an agent
Copy component guidance grounded in this release of Citrionus.
Loading component guidance…
Import
import { Tabs, Tab } from "@raydenui/ui";Usage
Basic
Preview
<Tabs defaultValue="overview">
<Tab value="overview">Overview</Tab>
<Tab value="settings">Settings</Tab>
<Tab value="billing">Billing</Tab>
</Tabs>Variants
Preview
// 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
Preview
<Tabs size="sm" defaultValue="tab1">...</Tabs>
<Tabs size="md" defaultValue="tab1">...</Tabs>
<Tabs size="lg" defaultValue="tab1">...</Tabs>With Icons
Preview
<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
Preview
<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
Preview
<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