A single tappable segment inside a Segmented Control. 6 variants across State (Default / Pressed / Disabled) × Active (true / false). Active segments fill brand-blue; inactive segments carry a brand-blue outline. (Assessed in the 2026 Working File.)
State × Active matrix — including the pressed-active state — with token-bound fills (active #005CE5, pressed-active #2340A9, disabled #9BC5FD) and a token-bound outline for inactive segments. Booleans are lowercase true/false. Active is retained as the property name (intentional for this component rather than isSelected). Only Code Connect registration remains.Not used standalone — the Segmented Control row composes N of these buttons, and the Segmented Control - Group wraps that row with a header and optional subtext.
State (Default / Pressed / Disabled) × Active (true/false), lowercase booleans. Active segments fill brand-blue, inactive carry the brand-blue outline; pressed and disabled shift the shade predictably.| State | iOS | Android | Figma Property | Notes |
|---|---|---|---|---|
| Active | Yes | Yes | Active=true | Fills brand-blue #005CE5 with a white label. The currently-selected segment. |
| Inactive | Yes | Yes | Active=false | White fill with a 1.5px brand-blue outline and a brand-blue label. |
| Pressed | Yes | Yes | State=Pressed | Touch-down feedback — active darkens to #2340A9; inactive shows a light #F6F9FD (72%) fill under the outline. |
| Disabled | Yes | Yes | State=Disabled | Muted #9BC5FD for both active fill and inactive outline; tap blocked. |
- Code Connect mappings not registered. The schema and state coverage are settled, so registration is unblocked — but the SwiftUI / Compose mappings are not yet wired and the native component does not exist. Snippets remain a Planned API. C7 · Code Connect Linkability
- v1.0:
Activeboolean moved to lowercasetrue/false(fromYes/No), matching the DS boolean standard. (C2) - v1.0:
State=Pressed, Active=truevariant added — the matrix is now the complete 3 × 2 = 6, so an already-active segment has a pressed treatment too (#2340A9). (C5) - v1.0: Segment label node renamed from
#valuetolabel. (C2)
- Register Code Connect mapping to
EBSegment. WireStateandActive1:1 to the SwiftUI / Compose segment API, forwarding from the parentEBSegmentedControl. Docs
- Normalize the
Activeboolean totrue/false. v1.0: Applied — lowercase, matching the DS standard. Rename - Complete the State × Active matrix. v1.0: Applied — added the missing pressed-active variant; the atom now ships all six combinations. State
A single ~91 × 40 segment. Active fills brand-blue with a white label; inactive carries a 1.5px brand-blue outline. Pressed and Disabled shift the shade.
The segment is composed by the parent Segmented Control; its two properties forward down from the control's selection + enabled state.
| Figma Property | SwiftUI | Compose |
|---|---|---|
| Active=true / false | isSelected: Bool | selected: Boolean |
| State=Default / Pressed / Disabled | derived (isPressed / isEnabled) | derived (InteractionSource / enabled) |
| label | Segment.label: String | Segment.label: String |
| Requirement | iOS | Android |
|---|---|---|
| Role | Each segment is a .button with the .isSelected trait set on the active one. | Apply Role.RadioButton per segment inside the row's Modifier.selectableGroup. |
| Tap target | ≥ 44 × 44 hit area. Extend vertically via .contentShape when the segment is below 44 tall. | ≥ 48 dp — Modifier.minimumInteractiveComponentSize(). |
| Disabled | Not focusable; .disabled(true) from the parent control. | enabled = false; not focusable. |
| ID | Criterion | Status | Notes |
|---|---|---|---|
| C1 | Layer Structure & Naming | Ready | Semantic names — container / label. The #value node was renamed to label. |
| C2 | Variant & Property Naming | Ready | State × Active, lowercase booleans. Active retained as the property name by design. |
| C3 | Token Coverage | Needs Refinement | Hex values are consistent, but a segmented-control/* token namespace still needs registering. |
| C4 | Native Mappability | Ready | Maps to a native segment; State derives at runtime, Active forwards from the parent. |
| C5 | Interaction State Coverage | Ready | Complete 3 × 2 matrix — Default / Pressed / Disabled × active / inactive. |
| C6 | Asset & Icon Quality | Not Applicable | Text-only segment, no assets. |
| C7 | Code Connect Linkability | Not Mapped | Unblocked; not yet registered, and the native component does not exist. |
State (Default / Pressed / Disabled) × Active (true / false) = 6. Complete matrix, no gaps.
| # | State | Active | Node |
|---|---|---|---|
| 1 | Default | true | 4111:10769 |
| 2 | Pressed | true | 4715:18624 |
| 3 | Disabled | true | 4111:10758 |
| 4 | Default | false | 4111:10757 |
| 5 | Pressed | false | 4111:10756 |
| 6 | Disabled | false | 4111:10755 |
State × Active. DocumentedYes/No → true/false, matching the DS standard. Resolved#2340A9). Resolved#value → label. Resolved