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. 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.

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).