Skip to main content

Documentation Index

Fetch the complete documentation index at: https://copylabs.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

SegmentedControl

SegmentedControl is a navigation component for selecting between mutually exclusive options, similar to a radio group but with a horizontal button-like appearance.

Import

import { SegmentedControl } from 'radix-native-ui';

Usage

import { SegmentedControl } from 'radix-native-ui';

<SegmentedControl.Root defaultValue="day">
  <SegmentedControl.Item value="day">Day</SegmentedControl.Item>
  <SegmentedControl.Item value="week">Week</SegmentedControl.Item>
  <SegmentedControl.Item value="month">Month</SegmentedControl.Item>
</SegmentedControl.Root>

Components

SegmentedControl.Root

The root container component that manages selection state.

SegmentedControl.Item

Individual option item.

SegmentedControl.Value

Text content for an item with automatic color handling based on selection state. Use this for proper text styling within items.

SegmentedControl.Icon

Icon element for an item with automatic color and size handling based on selection state. Use this to ensure icons match the text color.

Props

SegmentedControl.Root

SegmentedControl.Item

SegmentedControl.Value

SegmentedControl.Icon

Examples

Basic Segmented Control

<SegmentedControl.Root defaultValue="list">
  <SegmentedControl.Item value="list">List</SegmentedControl.Item>
  <SegmentedControl.Item value="grid">Grid</SegmentedControl.Item>
</SegmentedControl.Root>

Sizes

<SegmentedControl.Root size={1} defaultValue="option1">
  <SegmentedControl.Item value="option1">Small</SegmentedControl.Item>
  <SegmentedControl.Item value="option2">Small</SegmentedControl.Item>
</SegmentedControl.Root>

<SegmentedControl.Root size={2} defaultValue="option1">
  <SegmentedControl.Item value="option1">Medium</SegmentedControl.Item>
  <SegmentedControl.Item value="option2">Medium</SegmentedControl.Item>
</SegmentedControl.Root>

<SegmentedControl.Root size={3} defaultValue="option1">
  <SegmentedControl.Item value="option1">Large</SegmentedControl.Item>
  <SegmentedControl.Item value="option2">Large</SegmentedControl.Item>
</SegmentedControl.Root>

<SegmentedControl.Root size={4} defaultValue="option1">
  <SegmentedControl.Item value="option1">Extra Large</SegmentedControl.Item>
  <SegmentedControl.Item value="option2">Extra Large</SegmentedControl.Item>
</SegmentedControl.Root>

Colors

<SegmentedControl.Root color="blue" defaultValue="option1">
  <SegmentedControl.Item value="option1">Blue</SegmentedControl.Item>
  <SegmentedControl.Item value="option2">Blue</SegmentedControl.Item>
</SegmentedControl.Root>

<SegmentedControl.Root color="green" defaultValue="option1">
  <SegmentedControl.Item value="option1">Green</SegmentedControl.Item>
  <SegmentedControl.Item value="option2">Green</SegmentedControl.Item>
</SegmentedControl.Root>

With Radius

<SegmentedControl.Root radius="small" defaultValue="option1">
  <SegmentedControl.Item value="option1">Small Radius</SegmentedControl.Item>
  <SegmentedControl.Item value="option2">Small Radius</SegmentedControl.Item>
</SegmentedControl.Root>

<SegmentedControl.Root radius="large" defaultValue="option1">
  <SegmentedControl.Item value="option1">Large Radius</SegmentedControl.Item>
  <SegmentedControl.Item value="option2">Large Radius</SegmentedControl.Item>
</SegmentedControl.Root>

<SegmentedControl.Root radius="full" defaultValue="option1">
  <SegmentedControl.Item value="option1">Full</SegmentedControl.Item>
  <SegmentedControl.Item value="option2">Full</SegmentedControl.Item>
</SegmentedControl.Root>

Controlled

function ControlledSegmentedControl() {
  const [view, setView] = useState('list');

  return (
    <Flex direction="column" gap={3}>
      <SegmentedControl.Root value={view} onValueChange={setView}>
        <SegmentedControl.Item value="list">List</SegmentedControl.Item>
        <SegmentedControl.Item value="grid">Grid</SegmentedControl.Item>
        <SegmentedControl.Item value="table">Table</SegmentedControl.Item>
      </SegmentedControl.Root>

      {view === 'list' && <ListView />}
      {view === 'grid' && <GridView />}
      {view === 'table' && <TableView />}
    </Flex>
  );
}

With Disabled Item

<SegmentedControl.Root defaultValue="enabled">
  <SegmentedControl.Item value="enabled">Enabled</SegmentedControl.Item>
  <SegmentedControl.Item value="disabled" disabled>
    Disabled
  </SegmentedControl.Item>
  <SegmentedControl.Item value="another">Another</SegmentedControl.Item>
</SegmentedControl.Root>

Disabled Control

<SegmentedControl.Root defaultValue="option1" disabled>
  <SegmentedControl.Item value="option1">Disabled</SegmentedControl.Item>
  <SegmentedControl.Item value="option2">Disabled</SegmentedControl.Item>
</SegmentedControl.Root>

With Value Component

Use SegmentedControl.Value for proper text styling with automatic color handling:
<SegmentedControl.Root defaultValue="day">
  <SegmentedControl.Item value="day">
    <SegmentedControl.Value>Day</SegmentedControl.Value>
  </SegmentedControl.Item>
  <SegmentedControl.Item value="week">
    <SegmentedControl.Value>Week</SegmentedControl.Value>
  </SegmentedControl.Item>
  <SegmentedControl.Item value="month">
    <SegmentedControl.Value>Month</SegmentedControl.Value>
  </SegmentedControl.Item>
</SegmentedControl.Root>

With Icon

Use SegmentedControl.Icon to display icons that automatically match the text color:
import { List, Grid, Table } from 'lucide-react-native';

<SegmentedControl.Root defaultValue="grid">
  <SegmentedControl.Item value="list">
    <SegmentedControl.Icon>
      <List />
    </SegmentedControl.Icon>
  </SegmentedControl.Item>
  <SegmentedControl.Item value="grid">
    <SegmentedControl.Icon>
      <Grid />
    </SegmentedControl.Icon>
  </SegmentedControl.Item>
  <SegmentedControl.Item value="table">
    <SegmentedControl.Icon>
      <Table />
    </SegmentedControl.Icon>
  </SegmentedControl.Item>
</SegmentedControl.Root>

Time Range Selector

<Card>
  <Flex direction="column" gap={3}>
    <Heading size={3}>Analytics</Heading>
    <SegmentedControl.Root defaultValue="7d">
      <SegmentedControl.Item value="24h">24h</SegmentedControl.Item>
      <SegmentedControl.Item value="7d">7d</SegmentedControl.Item>
      <SegmentedControl.Item value="30d">30d</SegmentedControl.Item>
      <SegmentedControl.Item value="90d">90d</SegmentedControl.Item>
    </SegmentedControl.Root>
    <Text>Showing data for the last 7 days</Text>
  </Flex>
</Card>

View Toggle

<Flex direction="row" justify="between" align="center">
  <Heading size={3}>Products</Heading>
  <SegmentedControl.Root defaultValue="grid">
    <SegmentedControl.Item value="list">
      <SegmentedControl.Icon>
        <List />
      </SegmentedControl.Icon>
    </SegmentedControl.Item>
    <SegmentedControl.Item value="grid">
      <SegmentedControl.Icon>
        <Grid />
      </SegmentedControl.Icon>
    </SegmentedControl.Item>
  </SegmentedControl.Root>
</Flex>

Haptic Feedback

Segmented control items provide haptic feedback by default when selected. You can disable this on the Root component with the hapticFeedback prop:
<SegmentedControl.Root defaultValue="option1" hapticFeedback={false}>
  <SegmentedControl.Item value="option1">No haptic</SegmentedControl.Item>
  <SegmentedControl.Item value="option2">No haptic</SegmentedControl.Item>
</SegmentedControl.Root>

High Contrast

<SegmentedControl.Root defaultValue="option1" highContrast>
  <SegmentedControl.Item value="option1">High Contrast</SegmentedControl.Item>
  <SegmentedControl.Item value="option2">High Contrast</SegmentedControl.Item>
</SegmentedControl.Root>