Skip to contents

Tabs

A component for toggling between related panels on the same page.

View as Markdown

Anatomy

Import the component and assemble its parts:

Anatomy

API reference

Root

Groups the tabs and the corresponding panels. Renders a <div> element.

defaultValue
Tabs.Tab.Value
0
Description

The default value. Use when the component is not controlled. When the value is null, no Tab will be active.

Type
Tabs.Tab.Value | undefined
Default
0
value
Tabs.Tab.Value
Name
Description

The value of the currently active Tab. Use when the component is controlled. When the value is null, no Tab will be active.

Type
Tabs.Tab.Value | undefined
onValueChange
function
Description

Callback invoked when new value is being set.

Type
orientation
Tabs.Root.Orientation
'horizontal'
Description

The component orientation (layout flow direction).

Type
Default
'horizontal'
className
string | function
Description

CSS class applied to the element, or a function that returns a class based on the component’s state.

Type
style
React.CSSProperties | function
Name
Type
render
ReactElement | function
Name
Description

Allows you to replace the component’s HTML element with a different tag, or compose it with another component.

Accepts a ReactElement or a function that returns the element to render.

Type
data-orientation
Indicates the orientation of the tabs.
data-activation-direction
Indicates the direction of the activation (based on the previous active tab).

Additional Types

Tabs.Root.Props

Re-Export of Root props as TabsRootProps

Tabs.Root.State
Tabs.Root.ChangeEventReason
Tabs.Root.ChangeEventDetails
Tabs.Root.Orientation

List

Groups the individual tab buttons. Renders a <div> element.

activateOnFocus
boolean
false
Description

Whether to automatically change the active tab on arrow key focus. Otherwise, tabs will be activated using Enter or Space key press.

Type
boolean | undefined
Default
false
loopFocus
boolean
true
Description

Whether to loop keyboard focus back to the first item when the end of the list is reached while using the arrow keys.

Type
boolean | undefined
Default
true
className
string | function
Description

CSS class applied to the element, or a function that returns a class based on the component’s state.

Type
style
React.CSSProperties | function
Name
Type
render
ReactElement | function
Name
Description

Allows you to replace the component’s HTML element with a different tag, or compose it with another component.

Accepts a ReactElement or a function that returns the element to render.

Type
data-orientation
Indicates the orientation of the tabs.
data-activation-direction
Indicates the direction of the activation (based on the previous active tab).

Additional Types

Tabs.List.Props

Re-Export of List props as TabsListProps

Tabs.List.State

Tab

An individual interactive tab button that toggles the corresponding panel. Renders a <button> element.

value*
Tabs.Tab.Value
Name
Description

The value of the Tab.

nativeButton
boolean
true
Description

Whether the component renders a native <button> element when replacing it via the render prop. Set to false if the rendered element is not a button (for example, <div>).

Type
boolean | undefined
Default
true
disabled
boolean
Description

Whether the Tab is disabled.

If a first Tab on a <Tabs.List> is disabled, it won’t initially be selected. Instead, the next enabled Tab will be selected. However, it does not work like this during server-side rendering, as it is not known during pre-rendering which Tabs are disabled. To work around it, ensure that defaultValue or value on <Tabs.Root> is set to an enabled Tab’s value.

Type
boolean | undefined
className
string | function
Description

CSS class applied to the element, or a function that returns a class based on the component’s state.

Type
style
React.CSSProperties | function
Name
Type
render
ReactElement | function
Name
Description

Allows you to replace the component’s HTML element with a different tag, or compose it with another component.

Accepts a ReactElement or a function that returns the element to render.

Type
data-orientation
Indicates the orientation of the tabs.
data-disabled
Present when the tab is disabled.
data-activation-direction
Indicates the direction of the activation (based on the previous active tab).
data-active
Present when the tab is active.

Additional Types

Tabs.Tab.Props

Re-Export of Tab props as TabsTabProps

Tabs.Tab.State
Tabs.Tab.Value
Tabs.Tab.ActivationDirection
Tabs.Tab.Metadata
Tabs.Tab.Position
Tabs.Tab.Size

Indicator

A visual indicator that can be styled to match the position of the currently active tab. Renders a <span> element.

renderBeforeHydration
boolean
false
Description

Whether to render itself before React hydrates. This minimizes the time that the indicator isn’t visible after server-side rendering.

Type
boolean | undefined
Default
false
className
string | function
Description

CSS class applied to the element, or a function that returns a class based on the component’s state.

Type
style
React.CSSProperties | function
Name
Type
render
ReactElement | function
Name
Description

Allows you to replace the component’s HTML element with a different tag, or compose it with another component.

Accepts a ReactElement or a function that returns the element to render.

Type
data-orientation
Indicates the orientation of the tabs.
data-activation-direction
Indicates the direction of the activation (based on the previous active tab).
--active-tab-bottom

Indicates the distance on the bottom side from the parent’s container if the tab is active.

--active-tab-height

Indicates the width of the tab if it is active.

--active-tab-left

Indicates the distance on the left side from the parent’s container if the tab is active.

--active-tab-right

Indicates the distance on the right side from the parent’s container if the tab is active.

--active-tab-top

Indicates the distance on the top side from the parent’s container if the tab is active.

--active-tab-width

Indicates the width of the tab if it is active.

Additional Types

Tabs.Indicator.Props

Re-Export of Indicator props as TabsIndicatorProps

Tabs.Indicator.State

Panel

A panel displayed when the corresponding tab is active. Renders a <div> element.

value*
Tabs.Tab.Value
Name
Description

The value of the TabPanel. It will be shown when the Tab with the corresponding value is active.

className
string | function
Description

CSS class applied to the element, or a function that returns a class based on the component’s state.

Type
style
React.CSSProperties | function
Name
Type
keepMounted
boolean
false
Description

Whether to keep the HTML element in the DOM while the panel is hidden.

Type
boolean | undefined
Default
false
render
ReactElement | function
Name
Description

Allows you to replace the component’s HTML element with a different tag, or compose it with another component.

Accepts a ReactElement or a function that returns the element to render.

Type
data-orientation
Indicates the orientation of the tabs.
data-activation-direction
Indicates the direction of the activation (based on the previous active tab).
data-hidden
Present when the panel is hidden.
data-index
Indicates the index of the tab panel.

Additional Types

Tabs.Panel.Props

Re-Export of Panel props as TabsPanelProps

Tabs.Panel.State
Tabs.Panel.Metadata