Skip to contents

Tabs

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

Workspace stats and activity.

Anatomy

Import the component and assemble its parts:

Anatomy

Examples

Animated panels

Animate panels as they activate using the data-starting-style and data-ending-style attributes. The data-activation-direction attribute indicates which direction the newly active tab is relative to the previously active one, letting panels slide in from the correct side.

Workspace stats and activity.

Use the render prop and set nativeButton={false} on <Tabs.Tab> to render tabs as anchor elements.

Tabs as links

API reference

Root

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

defaultValueTabs.Tab.Value0
Description

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

Type
Default
0
valueTabs.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
onValueChangefunction
Description

Callback invoked when new value is being set.

The event reason is 'none' for user-initiated changes, such as a click or keyboard navigation; 'initial' for the first automatic selection or fallback in uncontrolled roots when defaultValue is omitted or undefined, including when the implicit initial value is disabled or missing; 'disabled' for automatic fallback when the selected tab becomes disabled in uncontrolled roots; or 'missing' for automatic fallback when the selected tab is removed, or when an explicit defaultValue never matches a mounted tab in uncontrolled roots.

For automatic changes, the selected value can be null when no enabled Tab is available as a fallback.

Automatic changes cannot be canceled; calling eventDetails.cancel() for 'initial', 'disabled', or 'missing' has no effect.

Type
orientationTabs.Root.Orientation'horizontal'
Description

The component orientation (layout flow direction).

Type
Default
'horizontal'
classNamestring | function
Description

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

Type
styleReact.CSSProperties | function
Name
Description

Style applied to the element, or a function that returns a style object based on the component’s state.

Type
renderReactElement | 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

Tabs.Root.PropsHide

Re-Export of Root props as TabsRootProps

Tabs.Root.StateHide

Tabs.Root.ChangeEventReasonHide

Tabs.Root.ChangeEventDetailsHide

Tabs.Root.OrientationHide

List

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

activateOnFocusbooleanfalse
Description

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

Type
Default
false
loopFocusbooleantrue
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
Default
true
classNamestring | function
Description

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

Type
styleReact.CSSProperties | function
Name
Description

Style applied to the element, or a function that returns a style object based on the component’s state.

Type
renderReactElement | 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

Tabs.List.PropsHide

Re-Export of List props as TabsListProps

Tabs.List.StateHide

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.

nativeButtonbooleantrue
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
Default
true
disabledboolean
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
classNamestring | function
Description

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

Type
styleReact.CSSProperties | function
Name
Description

Style applied to the element, or a function that returns a style object based on the component’s state.

Type
renderReactElement | 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

Tabs.Tab.PropsHide

Re-Export of Tab props as TabsTabProps

Tabs.Tab.StateHide

Tabs.Tab.ValueHide

Tabs.Tab.ActivationDirectionHide

Tabs.Tab.MetadataHide

Tabs.Tab.PositionHide

Tabs.Tab.SizeHide

Indicator

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

renderBeforeHydrationbooleanfalse
Description

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

Type
Default
false
classNamestring | function
Description

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

Type
styleReact.CSSProperties | function
Name
Description

Style applied to the element, or a function that returns a style object based on the component’s state.

Type
renderReactElement | 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

Tabs.Indicator.PropsHide

Re-Export of Indicator props as TabsIndicatorProps

Tabs.Indicator.StateHide

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.

classNamestring | function
Description

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

Type
styleReact.CSSProperties | function
Name
Description

Style applied to the element, or a function that returns a style object based on the component’s state.

Type
keepMountedbooleanfalse
Description

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

Type
Default
false
renderReactElement | 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

Tabs.Panel.PropsHide

Re-Export of Panel props as TabsPanelProps

Tabs.Panel.StateHide

Tabs.Panel.MetadataHide