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.