Skip to content

RadioGroup

Grupo de radios para seleccionar una sola opción entre varias.


Import

jsx
import { RadioGroup, RadioGroupItem } from '@imansi/ui';

Uso básico

jsx
<RadioGroup defaultValue="opcion-1">
  <div className="flex items-center gap-2">
    <RadioGroupItem value="opcion-1" id="opcion-1" />
    <Label htmlFor="opcion-1">Opción 1</Label>
  </div>
  <div className="flex items-center gap-2">
    <RadioGroupItem value="opcion-2" id="opcion-2" />
    <Label htmlFor="opcion-2">Opción 2</Label>
  </div>
</RadioGroup>

Con label y hint

jsx
<RadioGroup defaultValue="mensual" className="space-y-3">
  <div className="flex items-start gap-3">
    <RadioGroupItem value="mensual" id="mensual" className="mt-1" />
    <div>
      <Label htmlFor="mensual">Plan mensual</Label>
      <p className="text-sm text-muted-foreground">$29/mes</p>
    </div>
  </div>
  <div className="flex items-start gap-3">
    <RadioGroupItem value="anual" id="anual" className="mt-1" />
    <div>
      <Label htmlFor="anual">Plan anual</Label>
      <p className="text-sm text-muted-foreground">$290/año · 2 meses gratis</p>
    </div>
  </div>
</RadioGroup>

Controlado

jsx
import { useState } from 'react';
import { RadioGroup, RadioGroupItem, Label } from '@imansi/ui';

export function SelectorPlan() {
  const [plan, setPlan] = useState('pro');

  return (
    <RadioGroup value={plan} onValueChange={setPlan}>
      <div className="flex items-center gap-2">
        <RadioGroupItem value="free" id="free" />
        <Label htmlFor="free">Free</Label>
      </div>
      <div className="flex items-center gap-2">
        <RadioGroupItem value="pro" id="pro" />
        <Label htmlFor="pro">Pro</Label>
      </div>
      <div className="flex items-center gap-2">
        <RadioGroupItem value="team" id="team" />
        <Label htmlFor="team">Team</Label>
      </div>
    </RadioGroup>
  );
}

Horizontal

jsx
<RadioGroup defaultValue="a" className="flex gap-6">
  <div className="flex items-center gap-2">
    <RadioGroupItem value="a" id="a" />
    <Label htmlFor="a">A</Label>
  </div>
  <div className="flex items-center gap-2">
    <RadioGroupItem value="b" id="b" />
    <Label htmlFor="b">B</Label>
  </div>
  <div className="flex items-center gap-2">
    <RadioGroupItem value="c" id="c" />
    <Label htmlFor="c">C</Label>
  </div>
</RadioGroup>

Props

RadioGroup

PropTipoDefaultDescripción
valuestringValor seleccionado (controlado)
defaultValuestringValor inicial
onValueChange(value: string) => voidCallback al cambiar
disabledbooleanfalseDeshabilita todo el grupo
classNamestringClases adicionales

RadioGroupItem

PropTipoDefaultDescripción
valuestringValor de esta opción (obligatorio)
disabledbooleanfalseDeshabilita solo esta opción
classNamestringClases adicionales

Accesibilidad

  • Navegable con Tab para entrar al grupo
  • Flechas ↑↓ para moverse entre opciones
  • Space para seleccionar
  • role="radiogroup" + role="radio" aplicados automáticamente

Hecho con ❤️ en Argentina