vaiperui

componentes / radio

Radio

RadioGroup renderiza um conjunto de opções a partir de um array; Radio é o radio nativo avulso.

Como usar

Use `RadioGroup` com um array `options` (como o `Select`): ele compartilha um `name`, funciona controlado (`value`) ou não (`defaultValue`) e as setas movem entre as opções nativamente. Use `Radio` sozinho quando precisar de controle total de cada linha.

preview
Plano
Radio.tsx
import { RadioGroup } from "vaiperui";
<RadioGroup
label="Plano"
defaultValue="free"
onValueChange={(plan) => console.log(plan)}
options={[
{ value: "free", label: "Free", description: "Para projetos pessoais" },
{ value: "pro", label: "Pro", description: "Para times pequenos" },
{ value: "team", label: "Team", disabled: true },
]}
/>

Cores

preview
primary
success
warning
danger
cores.tsx
<RadioGroup variantColor="primary" options={options} defaultValue="free" />
<RadioGroup variantColor="success" options={options} defaultValue="free" />
<RadioGroup variantColor="warning" options={options} defaultValue="free" />
<RadioGroup variantColor="danger" options={options} defaultValue="free" />

Orientação

preview
vertical
horizontal
orientacao.tsx
<RadioGroup orientation="vertical" options={options} />
<RadioGroup orientation="horizontal" options={options} />

Tamanhos

preview
sm
md
lg
tamanhos.tsx
<RadioGroup size="sm" options={options} />
<RadioGroup size="md" options={options} />
<RadioGroup size="lg" options={options} />

Estados

preview
Você pode mudar depois
ajuda
Escolha uma
erro
desabilitado
estados.tsx
<RadioGroup helperText="..." options={options} />
<RadioGroup errorMessage="..." options={options} />
<RadioGroup disabled options={options} />

Cor personalizada

preview
Laranja
Radio
cor-personalizada.tsx
<RadioGroup customColor="#ff6600" options={options} />
<Radio name="single" label="Um radio avulso" />

Props

PropValoresPadrãoDescrição
options{ value, label, description?, disabled? }[]nenhumAs opções do RadioGroup
value / defaultValuestringnenhumSeleção controlada / não controlada
onValueChange(value: string) => voidnenhumChamado com o valor selecionado
namestringgeradoNome compartilhado dos radios, para enviarem com um <form>
labelstringnenhumTítulo do grupo (um <legend>)
orientationvertical | horizontalverticalDireção das opções
helperText / errorMessagestringnenhumTexto abaixo do grupo; um erro colore todos os radios
disabledbooleanfalseDesabilita todas as opções
variantColorprimary | success | warning | dangerprimaryCor do estado marcado e do anel de foco
customColorstring | { light, dark }nenhumQualquer cor CSS (ou um par por tema). Substitui o variantColor
sizesm | md | lgmdTamanho do controle e do texto
animationnone | smooth | fast | bouncesmoothTransição ao alternar
RadioInputHTMLAttributes<HTMLInputElement>nenhumRadio avulso: label, helperText, errorMessage, as props de estilo acima e todas as props nativas de input

Acessibilidade

  • `RadioGroup` renderiza um `<fieldset>` com `<legend>` (vindo de `label`) e um `role="radiogroup"` interno nomeado pelo mesmo `label`.
  • Cada opção é um `<input type="radio">` nativo com o mesmo `name`, então o navegador entrega a navegação por setas e uma única parada de Tab.
  • O `label` de cada opção dá o nome ao radio e a `description` vira o texto de `aria-describedby` dele.
  • `errorMessage` define `aria-invalid` no fieldset e em cada radio; o `aria-describedby` do fieldset aponta para o erro ou o texto de ajuda.
  • `disabled` no grupo desabilita o fieldset; uma opção também pode ser desabilitada individualmente.

Teclado

TeclaAção
TabMove o foco para dentro e para fora do grupo (uma parada, na opção selecionada).
Arrow keysVão para a opção seguinte ou anterior e a selecionam (comportamento nativo de radio).
SpaceSeleciona a opção focada quando nenhuma está selecionada ainda.

Tenha em mente

  • Sempre passe `label` ao `RadioGroup`; sem ele o grupo não tem nome acessível.
  • Um `Radio` avulso não tem semântica de grupo: dê o mesmo `name` aos radios relacionados e envolva-os você mesmo.