TrademarkTrademark
Docs
Ctrl k
Search docs...
Components

SegmentedControl

Updated: October 18, 2026
View on GitHub
Soon
Not released yet. This is on main and is not in any published version yet. It will not install today.

SegmentedControl picks one value out of a few, shown as a row of buttons in a frame. Each button takes a label and optional icons. It fills the width by default. See the web SegmentedControl for the same component in the browser.

Uncontrolled

Without value, the control keeps its own state. It starts on defaultValue, or on the first button. onChange is required.

Controlled

Pass value with onChange when the screen owns the selection.

Compact

compact draws outlined buttons without the frame around them. fillWidth={false} sizes the control to its buttons.

Differences from the web

  • There is no keyboard navigation. Buttons take taps from at least 44pt around them.
  • Buttons take value, label, prefixIcon, suffixIcon and disabled only.

API reference

Prop
Type
Default
Description
buttonsSegmentedControlButton[]The buttons. Required.
onChange(value: string) => voidCalled with the pressed button's value. Required.
valuestringThe selected value, when the screen owns the state.
defaultValuestringfirst buttonThe value selected first when the control keeps its own state.
fillWidthbooleantrueStretches the control and its buttons to the available width.
compactbooleanfalseOutlined buttons without the frame.
styleViewStyleStyle for the row.

SegmentedControlButton

Prop
Type
Default
Description
valuestringWhat onChange reports. Required.
labelReactNodeThe button's text.
prefixIconIconSlotAn icon name, or any element, before the label.
suffixIconIconSlotAn icon name, or any element, after the label.
disabledbooleanThe button cannot be pressed.
Edit this page on GitHub
TrademarkTrademark
Built with curiosity by Lorant One and the Design Engineers Club