Form controls

Radio
v0.4.4
Ready for Production

A styled radio input with size variants and danger states, built on the native HTML radio element with CVA-based styling and Radix Slot composition.

Prefer AI-assisted development?

This documentation is available via the Catalyst MCP Server. Learn how to connect →

Deprecated Component

This component is deprecated and should not be used in new projects. Use RadioGroup instead — it provides built-in ARIA attributes, automatic label association, group context, and improved keyboard navigation.

Catalyst Radio wraps the native <input type="radio"> with CVA-based size and danger variants, design tokens, and Radix Slot composition — giving you a consistently styled radio input that fits the Catalyst design system with zero extra configuration.

Preview

Installation

npm install @pmi/catalyst-radio
import { Radio } from '@pmi/catalyst-radio';

Sizes

Radio provides four size variants — xs, sm, md (default), and lg.

Preview

Common Patterns

Danger State

Use the danger prop to signal a validation error.

Preview

Disabled State

Set disabled to prevent interaction.

Preview

With Label

Pair Radio with Label using matching id/htmlFor for accessible form inputs.

Preview

With Label and Description

Add a description below the label with SubText.

Preview
Sub-text goes here
Sub-text goes here
Sub-text goes here
Sub-text goes here

As Child

Use asChild to delegate rendering to a custom element via Radix Slot.

Preview

API Reference

Radio

Prop

Type

Accessibility

Radio is designed to meet WCAG 2.2 AA standards.

Keyboard Interactions

KeyAction
TabMoves focus to the radio input
Arrow KeysMoves selection between radios sharing the same name (native browser behavior)
SpaceSelects the focused radio

ARIA

  • The component renders a native <input type="radio"> so browsers provide role="radio", aria-checked, and group semantics automatically.
  • Always pair each Radio with a Label via matching id/htmlFor — the Radio element itself carries no visible label.
  • Group related radios with the same name attribute so arrow-key navigation works as expected.
  • Use aria-describedby to associate error messages when danger is set.

Choosing the Right Component

Use Radio only when maintaining a legacy codebase. For all new work, prefer a component that manages group semantics natively:

If you need…Use instead
A radio group with ARIA and label management built inRadioGroup
Card-style radio selectionRadioCards
A single on/off boolean toggleSwitch
Selecting multiple independent optionsCheckbox

On this page