NAVIGATION
Tabs
Inline tab strip + matching content panels. Built on Radix Tabs — full keyboard wiring, ARIA semantics, and roving tabindex come from the primitive. Active tab is marked with a primary-colored 3px underline.
Import
Basic usage
Overview panel. Place primary metrics, hero copy or a dashboard header here.
Props (Tabs root)
Tabs props
| Prop | Type | Default | Description |
|---|---|---|---|
| value | string | — | Controlled active tab value. |
| defaultValue | string | — | Uncontrolled initial active tab value. |
| onValueChange | (value: string) => void | — | Fires when the active tab changes. |
| orientation | 'horizontal' | 'vertical' | 'horizontal' | Layout direction for keyboard navigation (arrow key axis). |
| activationMode | 'automatic' | 'manual' | 'automatic' | automatic activates a tab on focus; manual requires Enter/Space — useful when switching tabs is expensive. |
Accessibility
- Radix wires the ARIA Tabs pattern:
role="tablist",role="tab", androle="tabpanel"witharia-controls/aria-labelledbylinking them. - Keyboard: Tab moves into the tab strip; arrow keys cycle tabs; Home/End jump to the first/last tab. With
activationMode="manual"the focused tab is activated only on Enter/Space.
Tabs vs SegmentedControl
Reach for SegmentedControl when the user is filtering or toggling visibility within the same panel; reach for Tabs when each value owns a meaningfully distinct content region with its own ARIA tab panel.