Selection controls
Pick the control by what the user is deciding:
| Deciding… | Use |
|---|---|
| On or off, applies immediately | Switch |
| One of a few short values | Select |
| An option attached to a nearby action ("Only monitor the checked-out branch") | CheckboxRow |
| One of 2–4 options that each need a sentence of explanation | RadioGroup + RadioCard |
Switch
The iOS-style toggle used throughout settings. Off = recessed bg-active track with a hairline border; on = accent fill.
<Switch
checked={formatOnSave}
onChange={setFormatOnSave}
aria-label="Format on save"
/>| Prop | Type |
|---|---|
checked / onChange | boolean / (checked: boolean) => void |
disabled | boolean? |
aria-label | string — required unless wrapped by a labeled SettingRow |
| Color | Token |
|---|---|
| Track (off) / border | --silo-color-bg-active / --silo-color-border-strong |
| Track (on) | --silo-color-accent |
| Thumb | white (deliberate constant, both themes) |
Select
A native <select> wearing the Input treatment — keep it for short enumerable values ("Block / Bar / Underline").
<Select value={cursorStyle} onChange={(e) => setCursorStyle(e.target.value)}>
<option value="block">Block</option>
<option value="bar">Bar</option>
</Select>CheckboxRow
A labeled checkbox row (15px box, accent check). The whole label is the click target.
<CheckboxRow
label="Only monitor the checked-out branch"
checked={onlyCheckedOut}
onChange={setOnlyCheckedOut}
/>RadioGroup / RadioCard
Stacked option cards — each a full-width click target with a radio dot, a bold title, and a dim description. The selected card gets an accent border and a faint accent tint; unselected cards are borderless.
<RadioGroup value={mode} onChange={setMode}>
<RadioCard
value="clear"
title="Clear the finished indicator"
description="Viewing the terminal acknowledges the run — the green check disappears."
/>
<RadioCard
value="keep"
title="Keep it until the next run"
description="Viewing changes nothing."
/>
</RadioGroup>Use it when options need explaining; for more than ~4 options or one-word options, use Select instead.
Keyboard: every control here is a plain tab stop — no arrow-key roving. Space/Enter activates the focused control.