adn-ui
Components

Tabs

A high-quality, styled React tabs component built with @base-ui/react for switching views.

The Tabs component manages views organized into tabbed panels with smooth indicator animations and variant styling.

Usage

import { Tabs } from "@/components/ui/tabs";

export function ExampleTabs() {
  return (
    <Tabs defaultValue="overview" variant="pills">
      <Tabs.List>
        <Tabs.Tab value="overview">Overview</Tabs.Tab>
        <Tabs.Tab value="settings">Settings</Tabs.Tab>
        <Tabs.Indicator />
      </Tabs.List>
      <Tabs.Panel value="overview">Overview content goes here.</Tabs.Panel>
      <Tabs.Panel value="settings">Settings content goes here.</Tabs.Panel>
    </Tabs>
  );
}

Preview

Manage your profile information and account preferences here.

Variants

Visual Variants

The variant prop controls the visual appearance of the tab list, tab triggers, and active indicators.

Default

Manage your account details.
<Tabs defaultValue="account" variant="default">
  <Tabs.List>
    <Tabs.Tab value="account">Account</Tabs.Tab>
    <Tabs.Tab value="password">Password</Tabs.Tab>
    <Tabs.Indicator />
  </Tabs.List>
  <Tabs.Panel value="account">Account Content</Tabs.Panel>
</Tabs>

Pills

System performance overview.
<Tabs defaultValue="overview" variant="pills">
  <Tabs.List>
    <Tabs.Tab value="overview">Overview</Tabs.Tab>
    <Tabs.Tab value="analytics">Analytics</Tabs.Tab>
    <Tabs.Indicator />
  </Tabs.List>
</Tabs>

Underline

Active organization projects.
<Tabs defaultValue="projects" variant="underline">
  <Tabs.List>
    <Tabs.Tab value="projects">Projects</Tabs.Tab>
    <Tabs.Tab value="tasks">Tasks</Tabs.Tab>
  </Tabs.List>
</Tabs>

Segmented

Daily metrics snapshot.
<Tabs defaultValue="daily" variant="segmented">
  <Tabs.List>
    <Tabs.Tab value="daily">Daily</Tabs.Tab>
    <Tabs.Tab value="weekly">Weekly</Tabs.Tab>
    <Tabs.Indicator />
  </Tabs.List>
</Tabs>

Outline

General application options.
<Tabs defaultValue="general" variant="outline">
  <Tabs.List>
    <Tabs.Tab value="general">General</Tabs.Tab>
    <Tabs.Tab value="security">Security</Tabs.Tab>
    <Tabs.Indicator />
  </Tabs.List>
</Tabs>

Line

Main activity feed.
<Tabs defaultValue="feed" variant="line">
  <Tabs.List>
    <Tabs.Tab value="feed">Feed</Tabs.Tab>
    <Tabs.Tab value="activity">Activity</Tabs.Tab>
    <Tabs.Indicator />
  </Tabs.List>
</Tabs>

Sizes

The size prop adjusts padding and font size (sm, md, lg).

<Tabs size="sm" variant="pills">...</Tabs>
<Tabs size="md" variant="pills">...</Tabs>
<Tabs size="lg" variant="pills">...</Tabs>

Fitted Tabs

Set isFitted to true to expand tab triggers equally across full width.

<Tabs isFitted variant="segmented" defaultValue="1">
  <Tabs.List>
    <Tabs.Tab value="1">First</Tabs.Tab>
    <Tabs.Tab value="2">Second</Tabs.Tab>
    <Tabs.Tab value="3">Third</Tabs.Tab>
  </Tabs.List>
</Tabs>

Styling & Class Names

Target internal tabs CSS slots for custom overrides:

Class NameElement / SlotDescription
.tabsRoot containerTabs root wrapper container.
.tabs__listTab list rowHorizontal or vertical tab list row.
.tabs__tabTab buttonIndividual tab trigger element.
.tabs__indicatorSliding indicatorAnimated active tab indicator bar or pill background.
.tabs__panelContent panelContent panel container corresponding to active tab.

Anatomy

import { Tabs } from "@base-ui/react/tabs";

<Tabs.Root>
  <Tabs.List>
    <Tabs.Tab />
    <Tabs.Indicator />
  </Tabs.List>
  <Tabs.Panel />
</Tabs.Root>;

API Reference

Tabs.Root Props

PropTypeDefaultDescription
valuestringundefinedControlled value of the active tab.
defaultValuestringundefinedInitial uncontrolled active tab.
variant'default' | 'pills' | 'underline' | 'segmented' | 'outline' | 'line''default'Visual style of the tab list and active indicators.
size'sm' | 'md' | 'lg''md'Size scale for tabs and padding.
isFittedbooleanfalseExpand tabs equally to fill the extended container area.

On this page