Examples
Default
Hug (sizes to content — does not stretch)
With Disabled Tab
Scrollable - Narrow Container
All States (Matrix)
Props
Tabs
Root container for a tabbed interface. Manages the active tab state and coordinatesTabsList, TabsTrigger, and TabsContent.
Built on Radix UI Tabs.
A direct re-export of the Radix TabsPrimitive.Root primitive. It accepts all of that primitive’s props, unchanged.
TabsContent
Renders the content panel for a given tabvalue. Only visible when its value matches the active tab.
boolean
TabsList
Container forTabsTrigger elements. Renders a sliding active-tab indicator that animates between tabs.
boolean | Breakpoint
Controls tab alignment within a full-width container.
false(default): tabs spread evenlytrue: tabs left-aligned, sized to content"md"(breakpoint): spread on mobile, left-aligned at breakpoint and up
boolean
boolean
default:"false"
Drops the leading padding on the first tab so its label sits flush with the list’s left edge, lining it up with page content above or below the bar (a heading, for instance) rather than being indented by the tab’s own padding. Spacing between tabs is unaffected. Pair with
alignLeft or variant="hug".boolean
default:"true"
When
true (the default), the tab list spans the full width of its container and each tab grows equally. Set to false for inline sizing.boolean
default:"false"
Scrolls the row horizontally when the tabs don’t fit, instead of letting them compress. By default a tab may shrink until its label ellipsises, which on a narrow viewport can truncate every label at once; here each tab keeps its natural width and the overflow scrolls. The scrollbar itself is hidden — the clipped tab at the edge is the affordance.Because the tabs are content-sized, they no longer spread to fill the row: a set that does fit sits left-aligned, as with
alignLeft.Horizontal orientation only: a vertical list already grows downwards."fill" | "hug"
Explicit layout variant.
"hug" sizes the list to its content; "fill" stretches it full-width with equal-width tabs. Takes precedence over fullWidth/alignLeft.TabsTrigger
An interactive tab that activates its associatedTabsContent panel.
Renders a <button> by default. Pass asChild to render the tab as another element — e.g. a router link for navigation tabs (<TabsTrigger asChild><Link href="…">…</Link></TabsTrigger>). With asChild the child element becomes the tab itself (receiving role="tab" and focus management), so the tab stays a single interactive control rather than nesting one inside the other.
boolean
Exported types
Also exported from@fanvue/ui: TabsContentProps, TabsListProps, TabsProps, TabsTriggerProps.
Setup: Installation · Theming