Skip to main content
The Tabs component organizes content into multiple panels, allowing users to switch between them using tab labels. Built on Base UI’s Tabs primitive with support for keyboard navigation and focus management.

Installation

npx shadcn@latest add @eo-n/tabs

Usage

Import the Tabs components and compose them together:
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
<Tabs defaultValue="account">
  <TabsList>
    <TabsTrigger value="account">Account</TabsTrigger>
    <TabsTrigger value="password">Password</TabsTrigger>
  </TabsList>
  <TabsContent value="account">Account content</TabsContent>
  <TabsContent value="password">Password content</TabsContent>
</Tabs>

Component API

Tabs

The root container component that manages tab state.
defaultValue
string
The value of the tab that should be active by default.
value
string
The controlled value of the active tab.
onValueChange
(value: string) => void
Callback fired when the active tab changes.
variant
'default' | 'underline'
default:"default"
The visual style variant of the tabs.
orientation
'horizontal' | 'vertical'
default:"horizontal"
The orientation of the tabs.
className
string
Additional CSS classes to apply.

TabsList

Container for the tab triggers.
className
string
Additional CSS classes to apply to the tabs list.

TabsTrigger

Individual tab button that activates a panel.
value
string
required
The unique value that identifies this tab.
disabled
boolean
Whether the tab is disabled.
className
string
Additional CSS classes to apply to the trigger.

TabsContent

Content panel associated with a tab.
value
string
required
The value that identifies which tab activates this content.
className
string
Additional CSS classes to apply to the content.

Examples

Default Tabs

<Tabs defaultValue="overview">
  <TabsList>
    <TabsTrigger value="overview">Overview</TabsTrigger>
    <TabsTrigger value="analytics">Analytics</TabsTrigger>
    <TabsTrigger value="reports">Reports</TabsTrigger>
  </TabsList>
  <TabsContent value="overview">
    <p>Overview content here</p>
  </TabsContent>
  <TabsContent value="analytics">
    <p>Analytics content here</p>
  </TabsContent>
  <TabsContent value="reports">
    <p>Reports content here</p>
  </TabsContent>
</Tabs>

Underline Variant

<Tabs defaultValue="home" variant="underline">
  <TabsList>
    <TabsTrigger value="home">Home</TabsTrigger>
    <TabsTrigger value="profile">Profile</TabsTrigger>
    <TabsTrigger value="settings">Settings</TabsTrigger>
  </TabsList>
  <TabsContent value="home">Home content</TabsContent>
  <TabsContent value="profile">Profile content</TabsContent>
  <TabsContent value="settings">Settings content</TabsContent>
</Tabs>

Vertical Orientation

<Tabs defaultValue="general" orientation="vertical">
  <TabsList>
    <TabsTrigger value="general">General</TabsTrigger>
    <TabsTrigger value="security">Security</TabsTrigger>
    <TabsTrigger value="notifications">Notifications</TabsTrigger>
  </TabsList>
  <TabsContent value="general">General settings</TabsContent>
  <TabsContent value="security">Security settings</TabsContent>
  <TabsContent value="notifications">Notification settings</TabsContent>
</Tabs>

Controlled Tabs

function ControlledTabs() {
  const [activeTab, setActiveTab] = React.useState("tab1");

  return (
    <Tabs value={activeTab} onValueChange={setActiveTab}>
      <TabsList>
        <TabsTrigger value="tab1">Tab 1</TabsTrigger>
        <TabsTrigger value="tab2">Tab 2</TabsTrigger>
      </TabsList>
      <TabsContent value="tab1">Content 1</TabsContent>
      <TabsContent value="tab2">Content 2</TabsContent>
    </Tabs>
  );
}

Accessibility

The Tabs component is built on Base UI’s accessible Tabs primitive, which:
  • Implements the ARIA tabs design pattern
  • Supports full keyboard navigation (Arrow keys, Home, End)
  • Manages focus correctly when switching tabs
  • Properly associates tab triggers with their content panels
  • Supports disabled states
For more details, see the Base UI Tabs documentation.

Build docs developers (and LLMs) love