Tabs

Switch between related panels of content within the same view.
Stable
Web
iOS
Android
@advui/core
Source

Pills

AccountMake changes to your account.

Installation

pnpm
pnpm add @advui/core
npm
npm install @advui/core

Usage

import { Tabs } from '@advui/core'

<Tabs defaultValue="account">
  <Tabs.List aria-label="Settings">
    <Tabs.Trigger value="account">Account</Tabs.Trigger>
    <Tabs.Trigger value="password">Password</Tabs.Trigger>
  </Tabs.List>
  <Tabs.Content value="account">…</Tabs.Content>
  <Tabs.Content value="password">…</Tabs.Content>
</Tabs>

Examples

Underline with icons

Public profile settings.

API reference

Tabs

PropTypeDefaultDescription
valuestring—Active tab.
defaultValuestring—Starting `value` when uncontrolled.
onValueChange(value: string) => void—Called when the tab changes.
variant'pills' | 'underline''pills'Visual style.
orientation'horizontal' | 'vertical''horizontal'Arrow-key direction.
activationMode'automatic' | 'manual''automatic'Select on focus, or on Enter/Space.

Tabs.List

PropTypeDefaultDescription
loopbooleantrueWrap focus at the ends.

Tabs.Trigger

PropTypeDefaultDescription
value requiredstring—Tab id.
iconReactNode—Leading icon.
disabledboolean—Skip this tab.

Tabs.Content

PropTypeDefaultDescription
value requiredstring—Matching tab id.

Accessibility

  • WAI-ARIA tabs: tablist, tab (with aria-selected / aria-controls) and tabpanel (aria-labelledby).
  • Roving focus: only the active tab is in the tab order.
Keyboard interactions
KeyAction
← → (↑ ↓ vertical)Moves between tabs.
Home / EndFirst / last tab.
TabMoves from the tab list into the active panel.

Responsive behavior

The list scrolls horizontally when tabs overflow on small screens.

Platform notes

Web
Keyboard navigation follows the WAI-ARIA Authoring Practices.
iOS
For app-level navigation prefer a native tab bar (expo-router Tabs).
Android
Same as iOS. With androidRipple (on in material()), presses show the native ripple.
Since v0.1.0Last updated Nov 2, 2026Edit this page on GitHub