Capítulo 27 de 108
Conjunto de botões marcáveis onde no máximo um pode estar selecionado por vez. Use para escolha única entre opções mutuamente exclusivas (plano, densidade de layout, preferência de notificação).
RadioGroup: container que controla o valor selecionado (defaultValue ou value/onValueChange).RadioGroupItem: cada opção individual; requer value único e id para associar ao Label/FieldLabel.disabled: no RadioGroup desabilita todos os itens; no RadioGroupItem desabilita só um item.aria-invalid: em cada RadioGroupItem para indicar erro de validação (usar com data-invalid no Field).@base-ui/react (Base UI Radio Group).import { Label } from "@/components/ui/label"
import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"
<RadioGroup defaultValue="option-one">
<div className="flex items-center gap-3">
<RadioGroupItem value="option-one" id="option-one" />
<Label htmlFor="option-one">Option One</Label>
</div>
<div className="flex items-center gap-3">
<RadioGroupItem value="option-two" id="option-two" />
<Label htmlFor="option-two">Option Two</Label>
</div>
</RadioGroup>
defaultValue.<RadioGroup defaultValue="plus" className="max-w-sm">
<FieldLabel htmlFor="plus-plan">
<Field orientation="horizontal">
<FieldContent>
<FieldTitle>Plus</FieldTitle>
<FieldDescription>For individuals and small teams.</FieldDescription>
</FieldContent>
<RadioGroupItem value="plus" id="plus-plan" />
</Field>
</FieldLabel>
{/* ... demais planos */}
</RadioGroup>
FieldLabel envolve o Field inteiro, tornando o card inteiro clicável.Composição:
RadioGroup
├── RadioGroupItem
└── RadioGroupItem
RadioGroupItem sem id único: quebra a associação com Label/FieldLabel e a acessibilidade de clique no texto.RadioGroup para seleção múltipla: nesse caso o componente correto é um grupo de Checkbox.RadioGroup é o container de estado; RadioGroupItem só define o value de cada opção.Field inteiro em FieldLabel, não apenas o texto.FieldSet + FieldLegend agrupam o RadioGroup com um título e descrição comuns, útil para grupos formais (ex: "Subscription Plan").aria-invalid em cada RadioGroupItem + data-invalid no Field.disabled no nível do RadioGroup desabilita tudo; no nível do item, desabilita seletivamente.