Skip to Content
ComponentsSegmented Control

Segmented Control

The SegmentedControl component provides a group of related buttons for selecting one option from several.

Anatomy

Import all parts and piece them together.

import { SegmentedControl } from '@xsolla-zk/react' export default () => ( <SegmentedControl> <SegmentedControl.Item> <SegmentedControl.Item.Icon /> <SegmentedControl.Item.Text /> </SegmentedControl.Item> </SegmentedControl> )

Examples

Basic example

import { SegmentedControl } from '@xsolla-zk/react' function App() { return ( <SegmentedControl defaultValue="option1"> <SegmentedControl.Item value="option1"> <SegmentedControl.Item.Text>Option 1</SegmentedControl.Item.Text> </SegmentedControl.Item> <SegmentedControl.Item value="option2"> <SegmentedControl.Item.Text>Option 2</SegmentedControl.Item.Text> </SegmentedControl.Item> <SegmentedControl.Item value="option3"> <SegmentedControl.Item.Text>Option 3</SegmentedControl.Item.Text> </SegmentedControl.Item> </SegmentedControl> ) }

With controlled state

import { SegmentedControl } from '@xsolla-zk/react' import { useState } from 'react' function App() { const [value, setValue] = useState('list') return ( <SegmentedControl value={value} onValueChange={setValue}> <SegmentedControl.Item value="list"> <SegmentedControl.Item.Text>List</SegmentedControl.Item.Text> </SegmentedControl.Item> <SegmentedControl.Item value="grid"> <SegmentedControl.Item.Text>Grid</SegmentedControl.Item.Text> </SegmentedControl.Item> <SegmentedControl.Item value="card"> <SegmentedControl.Item.Text>Cards</SegmentedControl.Item.Text> </SegmentedControl.Item> </SegmentedControl> ) }

With icons

import { SegmentedControl } from '@xsolla-zk/react' import { List, Grid, Card } from '@xsolla-zk/icons' function App() { return ( <SegmentedControl defaultValue="list"> <SegmentedControl.Item value="list"> <SegmentedControl.Item.Icon> <List /> </SegmentedControl.Item.Icon> <SegmentedControl.Item.Text>List</SegmentedControl.Item.Text> </SegmentedControl.Item> <SegmentedControl.Item value="grid"> <SegmentedControl.Item.Icon> <Grid /> </SegmentedControl.Item.Icon> <SegmentedControl.Item.Text>Grid</SegmentedControl.Item.Text> </SegmentedControl.Item> <SegmentedControl.Item value="card"> <SegmentedControl.Item.Icon> <Card /> </SegmentedControl.Item.Icon> <SegmentedControl.Item.Text>Cards</SegmentedControl.Item.Text> </SegmentedControl.Item> </SegmentedControl> ) }

Icons only

import { SegmentedControl } from '@xsolla-zk/react' import { Bold, Italic, Underline } from '@xsolla-zk/icons' function App() { return ( <SegmentedControl defaultValue="bold"> <SegmentedControl.Item value="bold"> <SegmentedControl.Item.Icon> <Bold /> </SegmentedControl.Item.Icon> </SegmentedControl.Item> <SegmentedControl.Item value="italic"> <SegmentedControl.Item.Icon> <Italic /> </SegmentedControl.Item.Icon> </SegmentedControl.Item> <SegmentedControl.Item value="underline"> <SegmentedControl.Item.Icon> <Underline /> </SegmentedControl.Item.Icon> </SegmentedControl.Item> </SegmentedControl> ) }

All Sizes

<SegmentedControl size="$200" defaultValue="option1"> <SegmentedControl.Item value="option1"> <SegmentedControl.Item.Text>Small</SegmentedControl.Item.Text> </SegmentedControl.Item> <SegmentedControl.Item value="option2"> <SegmentedControl.Item.Text>Size</SegmentedControl.Item.Text> </SegmentedControl.Item> </SegmentedControl> <SegmentedControl size="$500" defaultValue="option1"> <SegmentedControl.Item value="option1"> <SegmentedControl.Item.Text>Large</SegmentedControl.Item.Text> </SegmentedControl.Item> <SegmentedControl.Item value="option2"> <SegmentedControl.Item.Text>Size</SegmentedControl.Item.Text> </SegmentedControl.Item> </SegmentedControl>

States

Disabled item

<SegmentedControl defaultValue="option1"> <SegmentedControl.Item value="option1"> <SegmentedControl.Item.Text>Active</SegmentedControl.Item.Text> </SegmentedControl.Item> <SegmentedControl.Item value="option2" disabled> <SegmentedControl.Item.Text>Disabled</SegmentedControl.Item.Text> </SegmentedControl.Item> <SegmentedControl.Item value="option3"> <SegmentedControl.Item.Text>Active</SegmentedControl.Item.Text> </SegmentedControl.Item> </SegmentedControl>

API

SegmentedControl Props

SegmentedControl extends Tamagui radio group inheriting all standard props, plus:

PropTypeDefaultDescription
valuestring-Current selected value
defaultValuestring-Default value
onValueChange(value: string) => void-Value change handler
sizeSegmentedControlSizes'$300'Control size
orientation'horizontal' | 'vertical''horizontal'Orientation

SegmentedControl.Item Props

PropTypeDefaultDescription
valuestring-Item value
disabledbooleanfalseDisables the item

SegmentedControl.Item.Text Props

Component for displaying item text.

SegmentedControl.Item.Icon Props

Component for displaying item icon.

Accessibility

  • Supports keyboard navigation (Arrow keys)
  • Works correctly with screen readers
  • Implements ARIA pattern for radio groups
  • Automatically manages focus between items