Skip to content

Select

Selector desplegable accesible con búsqueda, teclado y ARIA completo.


Import

jsx
import {
  Select,
  SelectTrigger,
  SelectValue,
  SelectContent,
  SelectItem,
  SelectGroup,
  SelectLabel,
  SelectSeparator,
} from '@imansi/ui';

Uso básico

jsx
<Select>
  <SelectTrigger>
    <SelectValue placeholder="Elegí una opción" />
  </SelectTrigger>
  <SelectContent>
    <SelectItem value="1">Opción 1</SelectItem>
    <SelectItem value="2">Opción 2</SelectItem>
    <SelectItem value="3">Opción 3</SelectItem>
  </SelectContent>
</Select>

Con label

jsx
<div className="space-y-2">
  <Label>País</Label>
  <Select>
    <SelectTrigger>
      <SelectValue placeholder="Seleccioná tu país" />
    </SelectTrigger>
    <SelectContent>
      <SelectItem value="ar">Argentina</SelectItem>
      <SelectItem value="br">Brasil</SelectItem>
      <SelectItem value="cl">Chile</SelectItem>
      <SelectItem value="uy">Uruguay</SelectItem>
    </SelectContent>
  </Select>
</div>

Con grupos

jsx
<Select>
  <SelectTrigger>
    <SelectValue placeholder="Elegí una ciudad" />
  </SelectTrigger>
  <SelectContent>
    <SelectGroup>
      <SelectLabel>Argentina</SelectLabel>
      <SelectItem value="ba">Buenos Aires</SelectItem>
      <SelectItem value="cor">Córdoba</SelectItem>
      <SelectItem value="ros">Rosario</SelectItem>
    </SelectGroup>
    <SelectSeparator />
    <SelectGroup>
      <SelectLabel>Uruguay</SelectLabel>
      <SelectItem value="mvd">Montevideo</SelectItem>
      <SelectItem value="pde">Punta del Este</SelectItem>
    </SelectGroup>
  </SelectContent>
</Select>

Controlado

jsx
import { useState } from 'react';
import {
  Select,
  SelectTrigger,
  SelectValue,
  SelectContent,
  SelectItem,
} from '@imansi/ui';

export function SelectorRol() {
  const [rol, setRol] = useState('user');

  return (
    <Select value={rol} onValueChange={setRol}>
      <SelectTrigger>
        <SelectValue />
      </SelectTrigger>
      <SelectContent>
        <SelectItem value="admin">Administrador</SelectItem>
        <SelectItem value="user">Usuario</SelectItem>
        <SelectItem value="guest">Invitado</SelectItem>
      </SelectContent>
    </Select>
  );
}

Deshabilitado

jsx
<Select disabled>
  <SelectTrigger>
    <SelectValue placeholder="No disponible" />
  </SelectTrigger>
  <SelectContent>
    <SelectItem value="1">Opción 1</SelectItem>
  </SelectContent>
</Select>

Props

Select

PropTipoDefaultDescripción
valuestringValor seleccionado (controlado)
defaultValuestringValor inicial
onValueChange(value: string) => voidCallback al cambiar
disabledbooleanfalseDeshabilita el select
openbooleanEstado del dropdown (controlado)
onOpenChange(open: boolean) => voidCallback al abrir/cerrar

SelectTrigger

PropTipoDefaultDescripción
size'sm' | 'md' | 'lg''md'Tamaño del trigger
classNamestringClases adicionales

SelectItem

PropTipoDefaultDescripción
valuestringValor del item (obligatorio)
disabledbooleanfalseDeshabilita este item
classNamestringClases adicionales

Accesibilidad

  • Navegable con Tab
  • Enter / Space para abrir
  • Flechas ↑↓ para moverse entre items
  • Escape para cerrar
  • Escribir para búsqueda rápida
  • role="combobox" + role="listbox" + role="option" aplicados automáticamente

Hecho con ❤️ en Argentina