vaiperui

componentes / radio

Radio

RadioGroup renderiza un conjunto de opciones desde un array; Radio es el radio nativo suelto.

Cómo usar

Usa `RadioGroup` con un array `options` (como `Select`): comparte un `name`, funciona controlado (`value`) o no (`defaultValue`) y las flechas se mueven entre opciones de forma nativa. Usa `Radio` solo cuando necesites control total de cada fila.

preview
Plan
Radio.tsx
import { RadioGroup } from "vaiperui";
<RadioGroup
label="Plan"
defaultValue="free"
onValueChange={(plan) => console.log(plan)}
options={[
{ value: "free", label: "Free", description: "Para proyectos personales" },
{ value: "pro", label: "Pro", description: "Para equipos pequeños" },
{ value: "team", label: "Team", disabled: true },
]}
/>

Colores

preview
primary
success
warning
danger
colores.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" />

Orientación

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

Tamaños

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

Estados

preview
Puedes cambiarlo después
ayuda
Elige una
error
deshabilitado
estados.tsx
<RadioGroup helperText="..." options={options} />
<RadioGroup errorMessage="..." options={options} />
<RadioGroup disabled options={options} />

Color personalizado

preview
Naranja
Radio
color-personalizado.tsx
<RadioGroup customColor="#ff6600" options={options} />
<Radio name="single" label="Un radio suelto" />

Props

PropValoresPredeterminadoDescripción
options{ value, label, description?, disabled? }[]ningunoLas opciones del RadioGroup
value / defaultValuestringningunoSelección controlada / no controlada
onValueChange(value: string) => voidningunoSe llama con el valor seleccionado
namestringgeneradoNombre compartido de los radios, para enviarse con un <form>
labelstringningunoTítulo del grupo (un <legend>)
orientationvertical | horizontalverticalDirección de las opciones
helperText / errorMessagestringningunoTexto bajo el grupo; un error colorea todos los radios
disabledbooleanfalseDeshabilita todas las opciones
variantColorprimary | success | warning | dangerprimaryColor del estado marcado y del anillo de foco
customColorstring | { light, dark }ningunoCualquier color CSS (o un par por tema). Reemplaza a variantColor
sizesm | md | lgmdTamaño del control y del texto
animationnone | smooth | fast | bouncesmoothTransición al alternar
RadioInputHTMLAttributes<HTMLInputElement>ningunoRadio suelto: label, helperText, errorMessage, las props de estilo anteriores y todas las props nativas de input

Accesibilidad

  • `RadioGroup` renderiza un `<fieldset>` con `<legend>` (de `label`) y un `role="radiogroup"` interno nombrado con el mismo `label`.
  • Cada opción es un `<input type="radio">` nativo con el mismo `name`, así que el navegador aporta la navegación con flechas y una única parada de Tab.
  • El `label` de cada opción nombra a su radio y su `description` pasa a ser el texto de `aria-describedby`.
  • `errorMessage` define `aria-invalid` en el fieldset y en cada radio; el `aria-describedby` del fieldset apunta al error o al texto de ayuda.
  • `disabled` en el grupo deshabilita el fieldset; una opción también puede deshabilitarse por separado.

Teclado

TeclaAcción
TabMueve el foco hacia dentro y fuera del grupo (una parada, en la opción seleccionada).
Arrow keysVan a la opción siguiente o anterior y la seleccionan (comportamiento nativo de radio).
SpaceSelecciona la opción enfocada cuando aún no hay ninguna seleccionada.

Ten en cuenta

  • Pasa siempre `label` a `RadioGroup`; sin él el grupo no tiene nombre accesible.
  • Un `Radio` suelto no tiene semántica de grupo: dale el mismo `name` a los radios relacionados y envuélvelos tú.