Product workspace
Keep the main summary visible while switching between planning, delivery, and support details without leaving the current surface.
Installation
npx shadcn@latest add @iconiq/tabsProps
Tabs
5 props
Root wrapper for a clean tab interface with controlled or uncontrolled value handling from Base UI.
children
ReactNodeRequired
Compose TabsList, TabsTrigger, and TabsContent inside the root, following the familiar shadcn-style structure.
defaultValue
stringInitial active tab value for uncontrolled usage.
value
stringControlled active tab value.
onValueChange
(value: string, details: object) => voidCalled when a trigger changes the active tab through click or keyboard navigation.
className
stringMerged onto the root wrapper around the list and content panels.
Notes
The implementation stays intentionally small: it relies on Base UI for selection state, keyboard behavior, and panel wiring.
Use local className overrides on TabsList or TabsTrigger when a specific screen needs a more opinionated visual treatment.
TabsList
2 props
Inline trigger rail that provides the muted segmented background behind a set of tab triggers.
children
ReactNodeUsually a row of TabsTrigger elements.
className
stringMerged onto the inline-flex rail around the triggers.
Notes
The default styles keep the list compact so it works well for docs toggles, install blocks, and simple settings surfaces.
TabsTrigger
4 props
Interactive tab button with a clean active surface, quieter inactive state, and built-in accessibility wiring from Base UI.
value
stringRequired
Unique tab identifier used for active state and content matching.
children
ReactNodeRequired
Label content rendered inside the trigger button.
className
stringMerged onto the trigger button for local spacing, typography, or active-state overrides.
disabled
booleanPrevents the trigger from receiving focus or changing the active tab.
Notes
Active styling uses the presence of Base UI's data-active attribute rather than a custom indicator layer.
Focus, arrow-key navigation, and ARIA relationships come from the underlying tabs primitive.
TabsContent
3 props
Single panel tied to a matching trigger value.
value
stringRequired
Matches the corresponding TabsTrigger value.
children
ReactNodeRequired
Panel body shown when the content value is active.
className
stringMerged onto the rendered panel element.
Notes
Hidden panels are managed by the underlying tabs primitive, so you keep the usual DOM and accessibility behavior without extra wrapper logic.
Standard div attributes such as data-*, aria-*, id, style, and event handlers are forwarded to the panel element.