States
Uses a native hidden input[type="radio"] with a custom circle visual. The filled dot appears on the checked state; border and fill shift for error and disabled.
RadioGroup
The primary usage pattern. RadioGroup renders a fieldset with a legend and manages mutual exclusivity via the shared name attribute.
With descriptions
Pass a description per option to get the full-width layout — label bold above, description subdued below. Use when options need more than a one-word label.
Horizontal layout
Set layout="horizontal" for short option labels that fit inline. Wraps on narrow viewports.
Error state
Pass an error string to RadioGroup. All radios in the group shift to the error border; the error message appears below.
Sizes
sm16pxDense lists, compact forms.md18pxDefault. Most form contexts.lg20pxTouch-friendly, larger settings panels.Keyboard & accessibility
TabMove focus into/out of the radio group.↑ / ↓ or ← / →Move between options within the group and select the focused one.fieldset + legendGroups radios semantically. Screen readers announce the group label before each option.name attributeShared across all radios in a group — the browser enforces single-selection natively.aria-invalidSet on the fieldset when error prop is provided.Usage guidance
DoUse Radio for 2–5 mutually exclusive options. Show all options visibly — don't hide them in a Select.DoAlways use RadioGroup (not bare Radio) to ensure a single selection and correct ARIA grouping.DoPre-select a sensible default when one option is clearly the most common choice.Don'tUse Radio for yes/no — a single Checkbox or Toggle is clearer.Don'tUse Radio for 6+ options — use a Select dropdown instead.Don'tMix Radio and Checkbox in the same form group — they signal different interaction models.Tokens used
action/primaryChecked border and backgroundaction/on-primaryInner dot colorborder/baseUnchecked borderborder/disabledDisabled borderbg/baseUnchecked backgroundbg/disabledDisabled backgroundstatus/errorError state borderborder-width/boldCircle border weight (2px)radius/fullCircle and dot shapetext/baseLabel texttext/subtleDescription texttext/disabledDisabled label and descriptionspace/2Gap between control and labelspace/3Gap between options (vertical)space/5Gap between options (horizontal)