Bridge UI

Radio

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.

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, and dark.

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.

Checkbox, Label, Switch

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
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.
default-checked boolean false Initial selection for uncontrolled usage (without v-model). For interactive groups, prefer v-model.
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
name string The name attribute shared by radios in the same group.
endLabel string Label text after the control (LTR: right).
startLabel string Label text before the control (LTR: left).
description string Helper text below the control row.
error boolean false Applies invalid styling and sets aria-invalid.
errorMessage string Error message shown below the control row.
required boolean false Sets the native required attribute on the input.
disabled boolean false Whether the radio is disabled.
color RadioColor "primary" Semantic color of the radio.
size RadioSize "md" Size of the control and label typography.
rounded RadioRounded "full" Border radius of the radio control.
classes RadioClasses Classes for form control chrome and radio parts.
customProps RadioCustomProps Extra props for FormControl chrome and control parts. startLabel / endLabel accept Label props (no children).
slots RadioSlots React slots for chrome and the control.