Independent yes-or-no decisions, including the indeterminate middle.
| Prop / event | Type | Notes |
|---|---|---|
| checked | boolean | Controlled on/off |
| indeterminate | boolean | Visual only; aria-checked="mixed" |
| onChange | (next) => void | Click or Space toggles |
| size / disabled | l·m·s / boolean | 22/18/15px; opacity .42 disabled |
| role="checkbox" | a11y | Label row is the click target |
Independent choices. For one-of-many use Radio; for a single instant setting use Toggle.
Use for independent yes/no choices the user can combine freely.
Don't use two checkboxes for a single either/or. That is a Radio.
Show indeterminate on a parent when its children are mixed.
Don't phrase a checkbox as an instant action. That is a Toggle.
A description sits under the label when the choice needs context.
Stacked, left-aligned, one row each. Filters and facets live here.
A table header checkbox drives every row and reflects their mix.
| Token | Value | Role |
|---|---|---|
| --chk-size-l/m/s | 22 / 18 / 15px | Box dimension |
| --chk-radius | 5 / 4 / 3px | Per size |
| --chk-border | #33333A | Unchecked border |
| --chk-on | #FF7A00 | Checked / indeterminate fill |
| --chk-mark | #FFFFFF | Tick & dash |
| --chk-error | #EB4A4F | Required-but-empty border |
| --chk-focus | rgba(255,122,0,.35) | 3px focus ring |
<label class="o-check-row"> <button class="o-check o-check--m is-on" role="checkbox" aria-checked="true"></button> <span>Remember me</span> </label>