Radio group
Escolha uma opção de um conjunto, com um ponto que passa de uma opção para outra e cards cujo anel de seleção desliza até a nova escolha.
pnpm dlx shadcn@latest add https://hextaui.com/r/radio-group.jsonAdiciona o componente, os tokens de tema do HextaUI e quaisquer componentes do HextaUI dos quais ele depende.
Adicione os tokens de tema ao seu CSS global, se ainda não o fez.
Instale as dependências.
pnpm add @base-ui/react cnCopie e cole o código a seguir no seu projeto.
components/ui/radio-group.tsx lib/motion.ts Atualize os caminhos de importação para corresponder à configuração do seu projeto.
Quando a escolha muda, o ponto antigo encolhe enquanto o novo entra com efeito de mola, para o olhar seguir a escolha em vez de duas coisas piscando ao mesmo tempo. Envolva cada item em um <label> para que a linha inteira seja clicável.
Cards
Com variant="card", use RadioGroupCard para opções com mais a dizer. O anel de seleção desliza até o novo card enquanto sua superfície aparece com fade.
Horizontal
Os cards podem ficar em uma linha ou em qualquer grid. O anel os acompanha onde estiverem.
Form
Dentro de Field e FieldSet, o grupo ganha uma legenda, validação de obrigatório e uma mensagem de erro.
Desabilitado e somente leitura
Desabilite uma única opção, ou deixe o grupo inteiro como readOnly para mostrar um valor que não pode mudar.
Controlado
Passe value e onValueChange. Mudanças externas animam do mesmo jeito que cliques.
Da direita para a esquerda
Radios e cards seguem a direção de leitura.
| Tecla | Ação |
|---|---|
| Tab | Move o foco para o grupo, na opção escolhida ou na primeira. |
| ↑↓←→ | Move para a opção anterior ou seguinte e a escolhe, voltando ao início nas extremidades. |
| Space | Escolhe a opção com foco. |
- Dê nome ao grupo com
aria-label,aria-labelledbyou umFieldLegend. - Cada radio tem uma área de toque de 36px, e 44px em telas touch, mantendo 16px na tela.
- O ponto e o anel do card não se movem com movimento reduzido.
| Prop | Tipo | Padrão |
|---|---|---|
variantcard adiciona o anel de seleção deslizante. | "default" | "card" | "default" |
value | Value | – |
defaultValue | Value | – |
onValueChange | (value, details) => void | – |
name | string | – |
required | boolean | false |
disabled | boolean | false |
readOnly | boolean | false |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descrição |
|---|---|
data-slot="radio-group" | O grupo, com data-variant. |
data-slot="radio-group-highlight" | O anel que desliza entre os cards. |
data-disabled | O grupo está desabilitado. |
| Prop | Tipo | Padrão |
|---|---|---|
value | Value | – |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | <span> |
| Atributo | Descrição |
|---|---|
data-slot="radio-group-item" | O radio. |
data-checked / data-unchecked | Se é a opção escolhida. |
data-disabled / data-readonly | Presente quando não pode ser alterado. |
| Prop | Tipo | Padrão |
|---|---|---|
value | Value | – |
disabled | boolean | false |
radioClassNameClasses para o radio dentro do card. | string | – |
Um <label> com o radio embutido. Coloque RadioGroupCardTitle e RadioGroupCardDescription, ou qualquer outra coisa, dentro.
- MotionAs curvas de easing, as durações e a verificação de movimento reduzido com que todo componente anima, além de hooks para transformações de tamanho e destaques deslizantes.
- CalendarUma grade de datas para seleção única, de intervalo e múltipla, com meses deslizantes, prévias de intervalo e dias com tamanho adequado ao toque.
- CheckboxUma caixa de seleção cujo check é desenhado na tela, com pais indeterminados, grupos e rótulos que compartilham seu hover.
- ComboboxUm select filtrável com chips, grupos e resultados assíncronos, em um popup que se redimensiona conforme você digita.
- Date pickerUm botão que abre um calendário em um popover, ou em um bottom sheet no celular, para datas únicas e intervalos.
- FieldRótulos, descrições e erros ligados ao seu controle, com estados de validação e layouts para formulários.