Components / Navigation

Segmented nativelite

ONE row of segments selecting one or many values: the pill-track segmented control, bare toggles, joined outline buttons or a bottom bar of destinations.

Replaces
ButtonGroupTabBarToggleGroup
A2UI basic
ChoicePicker (chips)
Children
none
Loading the renderer…
Segmented rendered by the React renderer on Web
Web React
Segmented rendered by the SwiftUI renderer on iOS
iOS SwiftUI
Segmented rendered by the Compose renderer on Android
Android Compose
Segmented rendered by the gpui renderer on Desktop
Desktop gpui

View exponential-ui-segmented, painted by each native renderer.

type · single
type · multiple
variant · segmented
variant · toggles
variant · outline
variant · bar
size · sm
size · default
size · lg
fill
PropTypeDefaultDescription
itemsrequired[option]–The segments in order.
typesingle | multiple"single"One active value or several.
valuebindstring–The selected value (comma-joined when multiple); bind it.
variantsegmented | toggles | outline | bar"segmented"The segmented track, bare toggles, joined outline buttons, or a full-width bar with icons over labels.
sizesm | default | lg"default"Control height class.
fillbooleanfalseStretches the segments across the width (a bar always does).
NameKind
on.changeevent: runs an action
Role
radiogroup
Semantics
radiogroup (single) or toolbar of toggle buttons (multiple); bar = navigation of buttons, the selected one aria-current=page
KeysAction
–Roving tab stop
ArrowLeftArrowRight (ArrowUpArrowDown)move focus (wraps)
HomeEndfirst/last
SpaceEntertoggle the focused item
Recipe parts
Segmented/rootSegmented/itemSegmented/iconSegmented/label
Keyed by
typevariantsizefill:hover:pressed:focus:disabled:checked:open:selected:invalid:dragover

Themes · Write a theme

Embedded tabs row

The segmented control as the FIRST row of a group: padding 8, full width, no fill and no stroke of its own.

Segmented control

The standalone capsule: 36 tall, padding 3, the section fill under a section stroke.

More

Segments share the embedded row's geometry — EXP-941 made that second form a prop rather than a second component, so the settings strips and the free-floating ones are one control. Eight strips wired their own Tabs + TabsList + N triggers by hand before, and drifted in padding and in whether a segment carried a glyph; the class recipe still lives in tabs.tsx, which other surfaces read directly.

Webok
SegmentedControlpackages/ui/src/segmented-control.tsx

the SEGMENTED_* class constants stay in tabs.tsx byte-identical; this renders the strip from an option array