Radio
A group of options where only one can be selected.
Usage
A Radio never stands alone — it only works inside a RadioGroup, which owns the selected value and the roving focus that lets arrow keys move between options. Each radio is identified by its value; that's what selection reports back. Wrap each radio and its text in a <label> so the text is clickable and announced together. The fill/squish animation is skipped when the user prefers reduced motion.
Examples
Default
Set the initial selection with defaultValue (uncontrolled) on the group, or drive it yourself with value + onValueChange. The group lays its options out in a column by default.
Horizontal
Pass orientation="horizontal" to lay the options out in a row. This also switches the arrow keys that move selection from ↑/↓ to ←/→.
Sizing
Radio is sized in em, so it scales with the surrounding font size — set a text-* class on the wrapping <label> and the control and text grow together. It won't shrink below a 16px floor.
Disabled
Disable the whole set with disabled on the RadioGroup, or a single option with disabled on its Radio. A disabled option is skipped by arrow-key navigation.
With descriptions
Pair each option's label with supporting text, aligning the radio to the first line. Keeping it all inside the <label> makes the whole row one target.
RTL
Every Appica UI component supports right-to-left layouts out of the box. Set the dir attribute on a container (commonly your <html> element) so CSS logical properties resolve correctly, and wrap your tree in DirectionProvider so direction-aware behavior — roving focus, popup placement, and the like — follows the same direction.
For setup details and caveats, see the RTL guide.
API reference
RadioGroup and Radio wrap Base UI's Radio. The group renders a <div role="radiogroup"> and each Radio a role="radio"; both forward ref, aria-*, and their native attributes, and expose data-* state attributes (data-checked, data-unchecked, data-disabled, data-readonly, …) for styling. See the Base UI docs for the complete API.
RadioGroup
The container that owns the selected value and keyboard navigation.
Radio
One option inside a RadioGroup.
Accessibility
RadioGrouprenders a<div role="radiogroup">and eachRadioarole="radio". Name the group witharia-labeloraria-labelledby.- The group is a single tab stop: Tab moves focus into the selected option (or the first one), and the arrow keys move the selection between options — ↑/↓ when vertical, ←/→ when horizontal — wrapping around the ends.
- Each radio needs an accessible name — wrap it in a
<label>together with its text, or give it anaria-label. disabledon a radio or the group removes the affected options from the tab order and exposesdata-disabledfor styling; disabled options are skipped during arrow navigation.- The fill/squish animation honours
prefers-reduced-motion.