Orbit
Tabs
Source
A compound, Radix-based component for switching between related views. Compose Tabs with TabsList, TabsTrigger and TabsContent.
Overview
Each TabsTrigger is linked to a TabsContent by a shared value. Tabs can be uncontrolled with defaultValue or controlled with value and onValueChange.
Tabs is built on Radix primitives, so keyboard navigation, focus management and ARIA roles are handled for you. Wrap content in Box and Text to lay out each panel.
Basic
An uncontrolled set of tabs using defaultValue. The first trigger is active on mount.
A summary of recent revenue and customers.
<Tabs defaultValue="overview">
<TabsList>
<TabsTrigger value="overview">Overview</TabsTrigger>
<TabsTrigger value="activity">Activity</TabsTrigger>
<TabsTrigger value="settings">Settings</TabsTrigger>
</TabsList>
<TabsContent value="overview">Overview content</TabsContent>
<TabsContent value="activity">Activity content</TabsContent>
<TabsContent value="settings">Settings content</TabsContent>
</Tabs>Controlled
Drive the active tab from state with value and onValueChange to keep selection in sync with the rest of your UI.
Billed every month, cancel anytime.
Selected value: monthly
const [tab, setTab] = useState('monthly')
<Tabs value={tab} onValueChange={setTab}>
<TabsList>
<TabsTrigger value="monthly">Monthly</TabsTrigger>
<TabsTrigger value="yearly">Yearly</TabsTrigger>
</TabsList>
<TabsContent value="monthly">Billed every month</TabsContent>
<TabsContent value="yearly">Billed once a year</TabsContent>
</Tabs>Tabs props
value
stringThe active tab value when used as a controlled component.
defaultValue
stringThe initial active tab when used uncontrolled.
onValueChange
(value: string) => voidCalled when the active tab changes.
orientation
'horizontal' | 'vertical'default: 'horizontal'Orientation of the tab list for keyboard navigation.
TabsList props
vertical
booleandefault: falseStacks the triggers in a column instead of a row.
className
stringClasses merged onto the list container.
TabsTrigger props
value
stringrequired
Identifies which TabsContent this trigger activates.
size
'default' | 'small'default: 'default'Controls the trigger text size.
disabled
booleandefault: falsePrevents the trigger from being selected.
TabsContent props
value
stringrequired
Matches the value of the TabsTrigger that reveals it.