Skip to main content

Overview

Overview
Analytics
Reports
Settings
Underline variant
All
Active
Archived
Pill variant
Tabs allow users to switch between related views without navigating away from the page. They support two visual styles, optional icons, and disabled states.

Installation


Usage


Variants

Underline (Default)

The minimal style with a bottom border indicator. Best for page-level navigation.
Overview
Analytics
Reports
Settings

Pill Style

A filled, pill-shaped active indicator. Best for filtering or segmented control contexts.
All
Active
Archived

With Icons

Profile
Security
Billing

API Reference

Tabs (Root)

string
Controlled active tab value.
(value: string) => void
Callback fired when the active tab changes.
string
Uncontrolled default active tab.
string
default:"underline"
Visual style. Values: underline · pill
string
default:"horizontal"
Layout direction. Values: horizontal · vertical

TabsTrigger

string
Tab identifier (required). Must match the corresponding TabsContent value.
boolean
default:"false"
Disables this tab.
ReactNode
Optional leading icon element.

TabsContent

string
Matches the corresponding TabsTrigger value (required).

Accessibility

  • Tabs follow the ARIA Tabs pattern with role="tablist", role="tab", and role="tabpanel"
  • Arrow keys move focus between tabs within the TabsList
  • Enter/Space activates the focused tab
  • Active tab has aria-selected="true"
  • Disabled tabs have aria-disabled="true" and are skipped by keyboard navigation
  • Each TabsContent is linked to its trigger via aria-labelledby

Do’s & Don’ts

Do

  • Use Tabs to organize related views on the same page
  • Limit to 2–7 tabs — more becomes hard to scan
  • Use underline for page-level navigation, pill for local filtering
  • Add icons to improve scannability for settings or profile tabs

Don't

  • Don’t use Tabs for navigation between separate pages — use links
  • Don’t use Tabs for sequential workflows — use a Stepper instead
  • Don’t mix underline and pill styles on the same page
  • Don’t put too much content inside a single tab panel — consider separate pages