Radio Group
A set of checkable buttons where only one can be checked at a time.
Playground
Installation
Install in any React + Tailwind project:
$npx shadcn@latest add https://twigs.globirdenergy.com.au/r/radio-group.json
Source
The exact file the registry serves to consumers.
'use client';
import * as React from 'react';
import { RadioGroup as BaseRadioGroup } from '@base-ui/react/radio-group';
import { Radio } from '@base-ui/react/radio';
import { cn } from '@/lib/utils';
function RadioGroup({ className, ...props }: React.ComponentProps<typeof BaseRadioGroup>) {
return (
<BaseRadioGroup
data-slot="radio-group"
className={cn('grid gap-2.5', className)}
{...props}
/>
);
}
function RadioGroupItem({ className, ...props }: React.ComponentProps<typeof Radio.Root>) {
return (
<Radio.Root
data-slot="radio-group-item"
className={cn(
// Spec source: Figma "APP Re-design Phase 1" → page "Radio Group ✅" (16x16 pill, pink ring even unselected)
'inline-flex aspect-square size-4 shrink-0 items-center justify-center rounded-full border border-primary bg-background text-primary shadow-xs transition-shadow outline-none',
'focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50',
'disabled:cursor-not-allowed disabled:opacity-50',
'aria-invalid:border-destructive aria-invalid:ring-destructive/20',
className,
)}
{...props}
>
<Radio.Indicator
data-slot="radio-group-indicator"
className="flex items-center justify-center"
>
<span className="size-2 rounded-full bg-primary" />
</Radio.Indicator>
</Radio.Root>
);
}
export { RadioGroup, RadioGroupItem };