components
Tabs
Switch between related views, built on Radix Tabs. The active tab carries the primary underline. On narrow screens the tab row scrolls horizontally instead of wrapping, and each tab is a 44px touch target.
Basic
Today's story and illustration.
Many tabs
The row scrolls horizontally on small screens.
Content for section 1.
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| items | TabItem[] | none | { value, label, icon?, content } per tab. |
| defaultValue | string | none | Initial active tab. Defaults to the first. |
| value | string | none | Controlled active tab. |
| onValueChange | (v: string) => void | none | Change handler. |