Skip to main content
Tabs allow users to switch between different views or sections without leaving the page. Use them to organize related content.

Basic Usage

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

function Example() {
  return (
    <Tabs defaultValue="tab-1">
      <Tabs.List>
        <Tabs.Trigger value="tab-1">Tab 1</Tabs.Trigger>
        <Tabs.Trigger value="tab-2">Tab 2</Tabs.Trigger>
        <Tabs.Trigger value="tab-3">Tab 3</Tabs.Trigger>
        <Tabs.Indicator />
      </Tabs.List>
      <Tabs.Content value="tab-1">Content for tab 1</Tabs.Content>
      <Tabs.Content value="tab-2">Content for tab 2</Tabs.Content>
      <Tabs.Content value="tab-3">Content for tab 3</Tabs.Content>
    </Tabs>
  )
}

Variants

Tabs supports three visual styles:
  • stroke - Underlined tabs with border (default)
  • pill - Rounded pill-shaped tabs
  • pill-emphasized - Pill tabs with accent background
import { Tabs } from "@soft-ui/react/tabs"

function Example() {
  return (
    <>
      <Tabs variant="stroke" defaultValue="tab-1">
        <Tabs.List>
          <Tabs.Trigger value="tab-1">Stroke</Tabs.Trigger>
          <Tabs.Indicator />
        </Tabs.List>
      </Tabs>

      <Tabs variant="pill" defaultValue="tab-1">
        <Tabs.List>
          <Tabs.Trigger value="tab-1">Pill</Tabs.Trigger>
          <Tabs.Indicator />
        </Tabs.List>
      </Tabs>

      <Tabs variant="pill-emphasized" defaultValue="tab-1">
        <Tabs.List>
          <Tabs.Trigger value="tab-1">Emphasized</Tabs.Trigger>
          <Tabs.Indicator />
        </Tabs.List>
      </Tabs>
    </>
  )
}

Sizes

Two sizes are available: s and m (default).
import { Tabs } from "@soft-ui/react/tabs"

function Example() {
  return (
    <>
      <Tabs size="s" defaultValue="tab-1">
        <Tabs.List>
          <Tabs.Trigger value="tab-1">Small</Tabs.Trigger>
          <Tabs.Indicator />
        </Tabs.List>
      </Tabs>

      <Tabs size="m" defaultValue="tab-1">
        <Tabs.List>
          <Tabs.Trigger value="tab-1">Medium</Tabs.Trigger>
          <Tabs.Indicator />
        </Tabs.List>
      </Tabs>
    </>
  )
}

Tabs with Icons

import { Tabs } from "@soft-ui/react/tabs"
import { RiHome5Fill, RiUserFill, RiSettings4Fill } from "@soft-ui/icons"

function Example() {
  return (
    <Tabs defaultValue="home">
      <Tabs.List>
        <Tabs.Trigger value="home" leadingIcon={<RiHome5Fill />}>
          Home
        </Tabs.Trigger>
        <Tabs.Trigger value="profile" leadingIcon={<RiUserFill />}>
          Profile
        </Tabs.Trigger>
        <Tabs.Trigger value="settings" leadingIcon={<RiSettings4Fill />}>
          Settings
        </Tabs.Trigger>
        <Tabs.Indicator />
      </Tabs.List>
    </Tabs>
  )
}
The indicator animates smoothly between tabs using spring physics. Animation respects user’s reduced motion preferences.

API Reference

For complete prop documentation, see the Tabs API reference.

Build docs developers (and LLMs) love