Radio group
Elige una opción de un conjunto, con un punto que pasa de una opción a otra y tarjetas cuyo anillo de selección se desliza hasta la nueva elección.
pnpm dlx shadcn@latest add https://hextaui.com/r/radio-group.jsonAñade el componente, los tokens del tema de HextaUI y los componentes de HextaUI de los que depende.
Añade los tokens del tema a tu CSS global, si aún no lo has hecho.
Instala las dependencias.
pnpm add @base-ui/react cnCopia y pega el siguiente código en tu proyecto.
components/ui/radio-group.tsx lib/motion.ts Actualiza las rutas de importación para que coincidan con la configuración de tu proyecto.
Cuando cambia la elección, el punto anterior se encoge mientras el nuevo aparece con un spring, de modo que la vista sigue la elección en lugar de ver dos cosas parpadear a la vez. Envuelve cada elemento en un <label> para que toda la fila sea clicable.
Tarjetas
Con variant="card", usa RadioGroupCard para opciones con más que decir. El anillo de selección se desliza hasta la nueva tarjeta mientras su superficie aparece con un fundido.
Horizontal
Las tarjetas pueden ir en una fila o en cualquier cuadrícula. El anillo las sigue estén donde estén.
Form
Dentro de Field y FieldSet, el grupo recibe una leyenda, validación de obligatorio y un mensaje de error.
Deshabilitado y de solo lectura
Deshabilita una sola opción, o pon todo el grupo en readOnly para mostrar un valor que no puede cambiar.
Controlado
Pasa value y onValueChange. Los cambios externos se animan igual que los clics.
De derecha a izquierda
Los radios y las tarjetas siguen la dirección de lectura.
| Key | Acción |
|---|---|
| Tab | Mueve el foco al grupo, sobre la opción elegida o la primera. |
| ↑↓←→ | Pasa a la opción anterior o siguiente y la elige, dando la vuelta en los extremos. |
| Space | Elige la opción enfocada. |
- Da nombre al grupo con
aria-label,aria-labelledbyo unFieldLegend. - Cada radio tiene un área de toque de 36px, y de 44px en pantallas táctiles, aunque se ve de 16px.
- El punto y el anillo de la tarjeta no se mueven con movimiento reducido.
| Prop | Tipo | Predeterminado |
|---|---|---|
variantcard añade el anillo de selección 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 | Descripción |
|---|---|
data-slot="radio-group" | El grupo, con data-variant. |
data-slot="radio-group-highlight" | El anillo que se desliza entre tarjetas. |
data-disabled | El grupo está deshabilitado. |
| Prop | Tipo | Predeterminado |
|---|---|---|
value | Value | – |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | <span> |
| Atributo | Descripción |
|---|---|
data-slot="radio-group-item" | El radio. |
data-checked / data-unchecked | Si es la opción elegida. |
data-disabled / data-readonly | Presente cuando no se puede cambiar. |
| Prop | Tipo | Predeterminado |
|---|---|---|
value | Value | – |
disabled | boolean | false |
radioClassNameClases para el radio dentro de la tarjeta. | string | – |
Un <label> con el radio integrado. Pon dentro RadioGroupCardTitle y RadioGroupCardDescription, o cualquier otra cosa.
- MotionLas curvas de easing, duraciones y la comprobación de movimiento reducido con las que se anima cada componente, además de hooks para transformaciones de tamaño y resaltados deslizantes.
- CalendarUna cuadrícula de fechas para selección única, de rango y múltiple, con meses deslizantes, vistas previas de rango y días de tamaño táctil.
- CheckboxUna casilla de verificación cuya marca se dibuja, con padres indeterminados, grupos y etiquetas que comparten su hover.
- ComboboxUn select filtrable con chips, grupos y resultados asíncronos, en un popup que cambia de tamaño mientras escribes.
- Date pickerUn botón que abre un calendario en un popover, o en una hoja inferior en móviles, para fechas únicas y rangos.
- FieldEtiquetas, descripciones y errores conectados a su control, con estados de validación y diseños para formularios.