Skip to content
Harness Design System Harness Design System Harness Design System

Radio

The Radio.Item component provides a customizable, accessible radio button input.
It must always be used inside a Radio.Root to function correctly.
The Radio.Root component provides the necessary context for managing grouped selections.

Usage

import { Radio } from "@harnessio/ui/components";
function Example() {
const [group1Value, setGroup1Value] = React.useState("option1");
const [group2Value, setGroup2Value] = React.useState("option1");
const [group2Value, setGroup2Value] = React.useState("option3");
const [group3Value, setGroup3Value] = React.useState("option1");
return (
<div className="flex flex-col space-y-8">
{/* Standard usage */}
<Radio.Root
value={group1Value}
onValueChange={setGroup1Value}
>
<Radio.Item name="group1" value="option1" label="Option 1" caption="This is option 1" />
<Radio.Item name="group1" value="option2" label="Option 2" caption="This is option 2" />
</Radio.Root>
{/* RadioGroup Example */}
<Radio.Root
value={group2Value}
onValueChange={setGroup2Value}
>
<Radio.Item name="group2" value="option1" label="Option 1" caption="This is option 1" />
<Radio.Item name="group2" value="option2" label="Option 2" caption="This is option 2" />
<Radio.Item name="group2" value="option3" label="Option 3" caption="This is option 3" />
</Radio.Root>
{/* Optional */}
<Radio.Root
value={group2Value}
onValueChange={setGroup2Value}
>
<Radio.Item name="group3" value="option3" label="Option 3" caption="This field is optional" optional />
</Radio.Root>
{/* Disabled */}
<Radio.Root
value={group3Value}
onValueChange={setGroup3Value}
>
<Radio.Item name="group4" value="option1" label="Option 1" caption="This option is disabled" disabled />
<Radio.Item name="group4" value="option2" label="Option 2" />
</Radio.Root>
</div>
);
}

API Reference

The Radio.Item component must always be used inside a Radio.Root to function correctly.
The Radio.Root provides the necessary context for managing grouped selections.

<Radio.Root
value="option1" // [OPTIONAL] The currently selected value
onValueChange={handleChange} // [OPTIONAL] Callback called when the selected value changes
className="custom-class" // [OPTIONAL] Additional class names for the group
>
<Radio.Item
name="group1" // [OPTIONAL] Name of the radio button group
value="option1" // [REQUIRED] The value of the radio button
label="Option 1" // [OPTIONAL] Label displayed next to the radio button
caption="This is option 1" // [OPTIONAL] Caption displayed under the label
optional // [OPTIONAL] Indicates if the field is optional
disabled // [OPTIONAL] Whether the radio button is disabled
className="custom-class" // [OPTIONAL] Additional class names for the radio button
/>
</Radio.Root>
PropRequiredDefaultType
namefalsestring
valuetruestring
labelfalsestring
captionfalsestring
optionalfalsefalseboolean
disabledfalseboolean
classNamefalsestring
value (Radio.Root)falsestring
onValueChangefalse(value: string) => void
className (Radio.Root)falsestring