Formularios@unozero-ai/ui

Combobox

Selector con búsqueda, para listas largas o con descripción por opción.

Usar

import { Combobox } from "@unozero-ai/ui/react";

<Combobox></Combobox>

Selector de hotel

Úsalo cuando la lista es larga o cuando cada opción necesita una segunda línea para distinguirse: aquí la ciudad y el tamaño del hotel. Para cinco o seis opciones cortas y sin búsqueda, usa Select. El campo es a la vez el valor elegido y el buscador: escribir filtra por label, value, description y keywords, sin distinguir tildes ni mayúsculas.

Sigue el patrón combobox de la APG: el foco se queda en el campo, las flechas abren y recorren la lista, Inicio y Fin saltan a los extremos, Enter elige y Escape cierra sin cerrar el modal que lo contenga. La lista flota en la top layer, así que ningún overflow la corta.

Ahora tiene label propio: ya no hace falta envolverlo en un <label>. options es un array de opciones.

Moneda con bandera

leading acepta texto corto, como un emoji, o un nodo del DOM (un <svg>), que el kit clona en el campo y en la lista. Ya no es un elemento de React como en el kit 0.1. Aquí la bandera es contenido y no adorno: ayuda a encontrar la moneda de un vistazo. La búsqueda ya ignora las tildes, así que «dolar» encuentra «Dólar» sin ayuda; usa keywords para lo que no se ve, como el país.

Textos propios y lista vacía

placeholder dice qué significa no haber elegido («Sin asignar», no «Selecciona…»), y emptyMessage explica la búsqueda sin resultados con las palabras del producto. Escribe un nombre que no esté para verlo.

En el kit 0.1, onChange recibía el valor; ahora recibe el evento: lee value del elemento (e.target.value). Si le pasas value, el envoltorio lo vuelve a escribir en cada render: contrólalo con estado, como aquí, o no lo pases y deja que el elemento lo guarde.

La conversación sigue en la bandeja común.

Estados

Lo que el kit 0.1 no tenía: error pinta el borde, escribe el mensaje debajo y deja el control inválido para el formulario; state="success" confirma un valor validado contra otro dato; deshabilitado, helperText explica dónde se cambia. size acepta los mismos tamaños que Input: sm, md y lg.

En un formulario

Es un control de formulario nativo: con name, el value de la opción entra en el FormData, y required frena el envío y lo dice debajo del campo, con el mensaje del navegador. form.reset() lo vacía, o lo devuelve a su atributo value si lo tenía. Pulsa «Crear reserva» sin elegir hotel.

Crear reservaLimpiar

Envía sin elegir hotel para ver el error.

Alineado al final

Con align="end" la lista crece hacia la izquierda desde el borde derecho del campo. Úsalo en barras de herramientas y cabeceras de tarjeta, donde el selector vive pegado al margen derecho: aquí va en el slot header de Card. La lista mide 224 px o el ancho del campo, lo que sea mayor, y si no cabe abajo se abre arriba.

Las horas de llegada se muestran en la zona elegida.

API

Generada del custom-elements.json que publica @unozero-ai/ui. Las partes se estilan desde tu CSS con el nombre del elemento: uz-button::part(base).

Combobox · <uz-combobox>

PropTipoDefectoDescripción
optionsComboboxOption[][]Las opciones, como propiedad de JS (un array): no hay atributo que las acepte.
valuestring""El value de la opción elegida; "" si no hay ninguna.
namestring""Nombre con el que el value elegido entra en el FormData.
labelstring""Etiqueta visible encima del campo; también nombra la lista.
placeholderstring""Qué significa no haber elegido. Por defecto, el label select.
searchPlaceholderstring""Texto del buscador con la lista abierta. Por defecto, el label search.
emptyMessagestring""Búsqueda sin resultados. Por defecto, el label noResults.
helperTextstring""Ayuda bajo el campo; un error la sustituye.
errorstring""Mensaje de error: marca el campo, lo escribe debajo y deja el control inválido.
state"default" | "error" | "success""default"Color del borde sin mensaje (success confirma el valor); error manda sobre él.
size"sm" | "md" | "lg""md"Alto del campo, los mismos tamaños que uz-input.
align"start" | "end""start"end: la lista crece hacia la izquierda desde el borde derecho.
requiredbooleanfalseSin una opción elegida, el formulario no se envía y se dice debajo.
disabledbooleanfalseBloquea el campo; también lo pone un <fieldset disabled>.
accessibleLabelstring""Nombre accesible (aria-label del host) cuando no hay etiqueta visible.
EventoDescripción
onInputAl elegir una opción.
onChangeAl elegir una opción.
Parte CSSDescripción
uz-combobox::part(field)El contenedor con borde.
uz-combobox::part(input)El <input role="combobox">.
uz-combobox::part(listbox)La lista flotante.
MétodoDescripción
checkValidity()—
reportValidity()—