Radio input for mutually exclusive choices.
Introduction
Use radios when users must pick exactly one option from a short list. Group options by sharing the same name. For yes/no toggles that take effect immediately, Switch may be clearer; for multiple selections, use Checkbox. For a compact segmented track of labeled options, use Toggle Group.
Each Radio includes built-in label chrome. Arrow keys move selection within a native radio group in the browser.
Import
import { Radio } from "@bridge-ui/vue/Components/Radio";import { Radio } from "@bridge-ui/react/Components/Radio";Basic usage
Render multiple Radio components with the same name and distinct value props. In React, use checked and onChange for controlled state; in Vue, bind the same v-model to each radio in the group. For an initial selection without binding, use defaultChecked in React or default-checked in Vue.
Colors
Use the color prop to change the radio color. Available colors: primary, secondary, success, info, warning, error, dark, and black.
Sizes
Control the radio size with the size prop. Available sizes: 2xs, xs, sm, md (default), lg, xl, and 2xl.
Rounded
Use the rounded prop to control border radius. Available values: none, xs, sm, md, lg, xl, 2xl, 3xl, 4xl, and full (defaults vary by component).
Validation
Use required to mark the field as required, error with errorMessage for invalid state, and disabled to prevent interaction.
Related components
Checkbox, Label, Switch, Toggle Group
Accessibility
- Arrow keys move selection within a group that shares the same name
- Space selects the focused radio
- A visually hidden native <input type="radio"> holds state; the styled control has aria-hidden
- endLabel is associated with the input through matching id and htmlFor
- error sets aria-invalid on the input and data-invalid on the FormControl root
- disabled sets aria-disabled on the FormControl root
Anatomy
<div data-invalid>
<div>
<!-- row -->
<label>
<input type="radio" class="sr-only" name="group" value="a" />
<span aria-hidden="true">
<span />
<!-- dot when checked -->
</span>
</label>
<label for="...">Option A</label>
</div>
<!-- repeat for each option -->
<p>Description</p>
<p aria-hidden>Error message</p>
</div>API
| Prop | Type | Default | Description |
|---|---|---|---|
| default-checked | boolean | false | Initial selection for uncontrolled usage (without v-model). For interactive groups, prefer v-model. |
| v-model | string | number | — | Shared binding for the selected value. Each Radio has a value; use the same name on all radios in the group. |
| Prop | Type | Default | Description |
|---|---|---|---|
| checked | boolean | — | Whether this radio is selected. Use onChange on each Radio in the group. |
| defaultChecked | boolean | — | Initial selection for uncontrolled usage. |
| onChange | ChangeEventHandler<HTMLInputElement> | — | Native input change handler. Each Radio has a value; use the same name on all radios in the group. |
| Prop | Type | Default | Description |
|---|---|---|---|
| classes | RadioClasses | — | Classes for form control chrome and radio parts. |
| color | RadioColor | "primary" | Semantic color of the radio. |
| customProps | RadioCustomProps | — | Extra props for FormControl chrome and control parts. startLabel / endLabel accept Label props (no children). |
| description | string | — | Helper text below the control row. |
| disabled | boolean | false | Whether the radio is disabled. |
| endLabel | string | — | Label text after the control (LTR: right). |
| error | boolean | false | Applies invalid styling and sets aria-invalid. |
| errorMessage | string | — | Error message shown below the control row. |
| name | string | — | The name attribute shared by radios in the same group. |
| required | boolean | false | Sets the native required attribute on the input. |
| rounded | RadioRounded | "full" | Border radius of the radio control. |
| size | RadioSize | "md" | Size of the control and label typography. |
| slots | RadioSlots | — | React slots for chrome and the control. |
| startLabel | string | — | Label text before the control (LTR: left). |