Skip to content

Tabs

Tabs

A tabs component for organizing content into separate views.

Import

import { Tabs } from '@primitivekit/react';

Basic Usage

<Tabs defaultValue="tab1">
  <Tabs.List>
    <Tabs.Tab value="tab1">Tab 1</Tabs.Tab>
    <Tabs.Tab value="tab2">Tab 2</Tabs.Tab>
    <Tabs.Tab value="tab3">Tab 3</Tabs.Tab>
  </Tabs.List>
  
  <Tabs.Panel value="tab1">
    <p>Content for Tab 1</p>
  </Tabs.Panel>
  
  <Tabs.Panel value="tab2">
    <p>Content for Tab 2</p>
  </Tabs.Panel>
  
  <Tabs.Panel value="tab3">
    <p>Content for Tab 3</p>
  </Tabs.Panel>
</Tabs>

Variants

<Tabs variant="line">
  {/* Line variant (default) */}
</Tabs>

<Tabs variant="enclosed">
  {/* Enclosed variant */}
</Tabs>

<Tabs variant="pills">
  {/* Pills variant */}
</Tabs>

Controlled Tabs

import { useState } from 'react';

function ControlledTabs() {
  const [activeTab, setActiveTab] = useState('tab1');

  return (
    <Tabs value={activeTab} onChange={setActiveTab}>
      <Tabs.List>
        <Tabs.Tab value="tab1">Tab 1</Tabs.Tab>
        <Tabs.Tab value="tab2">Tab 2</Tabs.Tab>
      </Tabs.List>
      
      <Tabs.Panel value="tab1">Content 1</Tabs.Panel>
      <Tabs.Panel value="tab2">Content 2</Tabs.Panel>
    </Tabs>
  );
}

With Icons

import { HomeIcon, SettingsIcon } from 'your-icon-library';

<Tabs>
  <Tabs.List>
    <Tabs.Tab value="home">
      <HomeIcon /> Home
    </Tabs.Tab>
    <Tabs.Tab value="settings">
      <SettingsIcon /> Settings
    </Tabs.Tab>
  </Tabs.List>
  
  <Tabs.Panel value="home">Home Content</Tabs.Panel>
  <Tabs.Panel value="settings">Settings Content</Tabs.Panel>
</Tabs>

Props

Tabs Props

PropTypeDefaultDescription
variant'line' | 'enclosed' | 'pills''line'Tab style variant
valuestring-Controlled active tab
defaultValuestring-Default active tab
onChangefunction-Change handler
childrenReactNoderequiredTabs content

Tabs.Tab Props

PropTypeDefaultDescription
valuestringrequiredTab value
disabledbooleanfalseDisable tab
childrenReactNoderequiredTab label

Customization

<Tabs
  style={{
    '--tabs-border-color': 'rgba(200, 200, 200, 1)',
    '--tabs-active-color': 'rgba(0, 100, 255, 1)',
    '--tabs-active-border-width': '3px',
  }}
>
  {/* Tabs content */}
</Tabs>

Accessibility

  • ✅ ARIA tablist role
  • ✅ Keyboard navigation (Arrow keys)
  • ✅ Focus management
  • ✅ Screen reader support

Related Components