Native select
El select propio del navegador, con el estilo de Input, un marcador discreto, compatibilidad con Field y el selector del sistema operativo en cada dispositivo.
pnpm dlx shadcn@latest add https://hextaui.com/r/native-select.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 @tabler/icons-react class-variance-authority cnCopia y pega el siguiente código en tu proyecto.
components/ui/native-select.tsx components/ui/input.tsx components/ui/number-flow.tsx lib/motion.ts Actualiza las rutas de importación para que coincidan con la configuración de tu proyecto.
Una opción con un value vacío actúa como placeholder: se muestra en texto atenuado hasta que se elija algo. Pon className en el select para dimensionar su contenedor, por ejemplo w-full.
Grupos
<NativeSelectOptGroup /> organiza las opciones bajo encabezados en el selector del sistema operativo.
Tamaños
Los tamaños, bordes, anillos de foco y estilos de no válido coinciden exactamente con Input, así que ambos se alinean en una fila.
Field
Dentro de un <Field />, la etiqueta y la descripción se conectan solas y los errores se muestran a medida que cambia el valor. Envía sin elegir un plan y el select se pone rojo, vibra una vez y el navegador te lleva hasta él.
Inválido
Define aria-invalid y enlaza el mensaje con aria-describedby.
Deshabilitado
Deshabilita todo el select, o las opciones sueltas que no estén disponibles.
Controlado
Pasa value y onChange como en un select normal.
Contenido largo
Las etiquetas seleccionadas largas terminan con puntos suspensivos en lugar de pasar por debajo del chevron.
De derecha a izquierda
El chevron y el relleno pasan al otro lado.
- Usa Native select para listas sencillas, sobre todo en móviles, donde el selector del sistema operativo es la forma más rápida y familiar de elegir.
- Usa Combobox cuando haya que buscar, o cuando las opciones necesiten iconos, descripciones o diseños personalizados.
| Key | Acción |
|---|---|
| Tab | Enfoca el select. |
| SpaceEnter | Abre el selector del sistema operativo. |
| ↑↓ | Cambia la selección, o se mueve por el selector abierto. |
| A–Z | Salta a la opción que empieza por el texto escrito. |
<NativeSelect /> acepta todos los atributos de select. Las partes de opción aceptan los atributos de su elemento.
| Prop | Tipo | Predeterminado |
|---|---|---|
size | "sm" | "default" | "lg" | "default" |
htmlSizeEl atributo size nativo, renombrado porque size es la variante. | number | – |
shakeVibra una vez cuando el envío de un formulario lo encuentra no válido. | boolean | true |
classNameSe aplica al contenedor, así que dimensiona todo el control. | string | – |
value | string | – |
defaultValue | string | – |
disabled | boolean | false |
required | boolean | false |
| Atributo | Descripción |
|---|---|
data-slot="native-select-wrapper" | El contenedor, con data-size. |
data-slot="native-select" | El elemento select. |
data-slot="native-select-icon" | El chevron. Se oscurece al pasar el cursor y al enfocar. |
data-invalid | Presente cuando un Field circundante no es válido. |
| Atributo | Descripción |
|---|---|
data-slot="native-select-option" | Una opción. |
data-slot="native-select-optgroup" | Un grupo de opciones con etiqueta. |
- InputUn campo de texto con tres tamaños, estados inválido y de solo lectura, estilos de validación nativos y una fuente táctil de 16px para que los móviles nunca hagan zoom.
- useComposedRefMantiene una ref a tu propio elemento y sigue reenviándola a la ref que haya pasado el padre.
- useInvalidShakeSacude un control de formulario cuando un intento de envío lo encuentra inválido, y nunca mientras alguien aún está escribiendo.
- 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.
Usado en bloques
Bloques que se construyen sobre Native select.