Saltar al contenido principal
Neural UIv2.0.0Documentación
Ver v1 GitHub

Autocomplete

Sugiere destinos mientras el usuario escribe, con selección estricta o texto libre.

Categoría
Formularios y selección
Import
@neural-ui/core/autocomplete
Selector
neu-autocomplete
import { NeuAutocompleteComponent } from '@neural-ui/core/autocomplete';

Uso

Autocomplete separa el texto de búsqueda del valor seleccionado. En el modo strict el usuario selecciona una sugerencia disponible; free-text también acepta texto que no está en la colección.

El ejemplo responde a queryChange de forma síncrona y proporciona las sugerencias coincidentes. Con datos remotos, atiende suggestionsRequest y entrega la respuesta mediante suggestions; el texto buscado no equivale a una selección confirmada.

Signal Forms

Enlaza FormField al control que gestiona el valor y añade required al esquema del formulario. Selecciona un destino, sal del campo para marcarlo como visitado y restablécelo para comprobar el valor y la validación. La marca de obligatorio no valida por sí sola el formulario.

Guía de Signal Forms

Signal Forms

Valor: — · Válido: false

Prueba y configura

Cambia las opciones e interactúa con el control. La vista previa, el valor de la aplicación y el template generado permanecen juntos. Un destino deshabilitado permite comprobar que no se pueden seleccionar opciones no disponibles.

Prueba y configura
Vista previa

Template generado: refleja las opciones anteriores. Los imports y el estado están en la pestaña Código.

template.html
<neu-autocomplete
  [options]="destinations"
  [suggestions]="suggestions()"
  (queryChange)="query.set($event)"
  (suggestionsRequest)="refreshSuggestions($event.query)"
  [(value)]="destination"
  [dropdown]="true"
  [clearAriaLabel]="'Limpiar selección'"
  [delay]="0"
  [dropdownAriaLabel]="'Mostrar destinos'"
  [emptyLabel]="'Sin coincidencias'"
  [floatingLabel]="true"
  [fluid]="true"
  [label]="'Destino'"
  [listAriaLabel]="'Destino'"
  [loadingLabel]="'Cargando destinos'"
  [placeholder]="'Elige un destino'"
/>

Valor y eventos

Usa una sola fuente de verdad: [(value)]="destination" o [value]="destination()" junto con (valueChange)="destination.set($event)". No combines las dos formas de enlace.

Los Inputs configuran el control. valueChange sincroniza su modelo; los demás Outputs comunican las acciones o fases documentadas. Las solicitudes de sugerencias, hijos o ventanas remotas requieren que la aplicación proporcione los datos.

Accesibilidad y teclado

Utiliza una etiqueta visible o un nombre accesible. Prueba la navegación por teclado, las opciones deshabilitadas, la selección y el cierre del panel. Los templates de opción deben conservar texto descriptivo y no introducir botones ni otro checkbox enfocable dentro de la opción.

Tecla
Acción
Tab Mueve el foco hacia dentro o fuera del control.
ArrowDown / ArrowUp Mueve la opción activa entre las opciones disponibles.
Enter Activa la opción enfocada.
Escape Cierra el panel sin seleccionar otra opción.

API

La referencia muestra los Inputs, modelos, Outputs y Templates públicos del paquete de Core fijado. Pulsa un tipo con nombre para abrir su definición. Cada Template aplicable tiene un ejemplo ejecutable y su código real.

Inputs

Configura el componente con [propiedad]="valor". Tu aplicación proporciona estos valores; el componente no debe reemplazar el estado que le pasas.

Nombre
Tipo
Por defecto
Uso en el template
Descripción
ariaDescribedBystring | nullnull[ariaDescribedBy]IDs de los elementos que describen el control, separados por espacios.
ariaLabelstring | nullnull[ariaLabel]Nombre accesible cuando no hay una etiqueta visible.
ariaLabelledBystring | nullnull[ariaLabelledBy]ID del elemento que proporciona el nombre accesible.
autocompletestring'off'[autocomplete]Atributo autocomplete del navegador para el input.
autofocusbooleanfalse[autofocus]Solicita el foco cuando se inicializa el control.
autoHighlightbooleanfalse[autoHighlight]Resalta automáticamente la primera sugerencia disponible.
autoOptionFocusbooleanfalse[autoOptionFocus]Activa una opción disponible al abrir la lista.
clearablebooleantrue[clearable]Muestra la acción de limpiar cuando hay un valor seleccionado.
clearAriaLabelstring'Clear value'[clearAriaLabel]Nombre accesible del botón para limpiar la selección.
compareWith(left: V, right: V) => booleanObject.isValor derivado[compareWith]Función para comparar valores seleccionados; utiliza una identidad de dominio estable.
completeOnFocusbooleanfalse[completeOnFocus]Solicita sugerencias cuando el input recibe el foco.
dataFirstnumber0[dataFirst]Índice lógico de la primera opción cargada en una ventana remota.
delaynumber300[delay]Espera en milisegundos antes de solicitar sugerencias.
dirtybooleanfalse[dirty]Estado del formulario que indica que el usuario ha cambiado el valor.
disabledbooleanfalse[disabled]Deshabilita la interacción del usuario; las opciones deshabilitadas no se pueden seleccionar.
dropdownbooleanfalse[dropdown]Muestra un botón que abre o solicita sugerencias.
dropdownAriaLabelstring'Show suggestions'[dropdownAriaLabel]Nombre accesible del botón de sugerencias.
dropdownModeNeuAutocompleteDropdownMode'blank'[dropdownMode]Usa la consulta actual o una consulta vacía al pulsar el desplegable.
emptyLabelstring'No results'[emptyLabel]Mensaje que se muestra cuando no hay opciones disponibles.
emptySelectionMessagestring'No selected item'[emptySelectionMessage]Anuncio cuando no hay ninguna opción seleccionada.
errorMessagestring''[errorMessage]Mensaje de error visible asociado al campo.
errorsreadonly ValidationError.WithOptionalFieldTree[][][errors]Errores de validación proporcionados por el formulario o la aplicación.
filterConfigReadonly<NeuOptionFilterConfig<T>>{}[filterConfig]Campos, modo de comparación, idioma y estrategia de filtrado local o remoto.
floatingLabelbooleanfalse[floatingLabel]Muestra la etiqueta con el estilo de campo float label.
fluidbooleanfalse[fluid]Hace que el control ocupe el ancho de su contenedor.
focusOnHoverbooleantrue[focusOnHover]Cambia la opción activa cuando el puntero entra en una opción.
groupConfigNeuOptionGroupConfig<T, G> | nullnull[groupConfig]Accessors que leen las etiquetas, hijos y estado deshabilitado de los grupos.
groupsreadonly G[][][groups]Opciones agrupadas, con sus elementos hijos definidos mediante groupConfig.
groupSuggestionsreadonly G[] | nullnull[groupSuggestions]Activa la presentación de sugerencias agrupadas.
hiddenbooleanfalse[hidden]Oculta el control según el estado del formulario.
hintstring''[hint]Texto de ayuda asociado al campo.
idstring | nullnull[id]Identificador del contenedor del control.
inputIdstring | nullnull[inputId]Identificador del input nativo para asociar etiquetas y accesibilidad.
inputSizenumber | nullnull[inputSize]Atributo size del input nativo, independiente del tamaño visual.
invalidbooleanfalse[invalid]Muestra el estado inválido; no añade una regla de validación.
labelstring''[label]Etiqueta visible del campo o de la opción.
lazybooleanfalse[lazy]Usa ventanas cargadas y emite solicitudes de los datos de opciones que faltan.
listAriaLabelstring'Suggestions'[listAriaLabel]Nombre accesible de la lista de sugerencias.
loadingbooleanfalse[loading]Muestra el estado de carga mientras la aplicación proporciona datos.
loadingLabelstring'Loading...'[loadingLabel]Mensaje o anuncio durante la carga de opciones.
maxLengthnumber | undefinedundefined[maxLength]Longitud máxima del texto del input nativo.
minLengthnumber | undefinedundefined[minLength]Longitud mínima del texto del input nativo.
minQueryLengthnumber0[minQueryLength]Longitud mínima de la consulta para solicitar sugerencias.
modeF'strict' as FValor derivado[mode]strict selecciona una sugerencia disponible; free-text también acepta texto libre.
namestring''[name]Nombre asociado al control nativo del formulario.
optionDisabledNeuOptionDisabledAccessor<T> | nullnull[optionDisabled]Nombre de campo o función que indica si una opción está deshabilitada.
optionLabelNeuOptionLabelAccessor<T> | nullnull[optionLabel]Nombre de campo o función que obtiene la etiqueta visible de la opción.
optionsreadonly T[][][options]Registros de opciones cargados. Los accessors permiten usar tus propios objetos de dominio.
optionValueNeuOptionValueAccessor<T, V> | nullnull[optionValue]Nombre de campo o función que obtiene el valor guardado de la opción.
patternreadonly RegExp[][][pattern]Atributo pattern del input de texto nativo.
pendingbooleanfalse[pending]Estado del formulario que indica que hay una validación asíncrona pendiente.
placeholderstring''[placeholder]Texto que se muestra cuando el campo no tiene un valor seleccionado.
readonlybooleanfalse[readonly]Mantiene el valor visible sin permitir que el usuario lo cambie.
requiredbooleanfalse[required]Marca el campo como obligatorio; utiliza un validador del formulario para exigirlo.
scrollHeightstring'240px'[scrollHeight]Altura máxima del área visible de opciones.
searchMessagestring | nullnull[searchMessage]Anuncio accesible que describe el número de resultados.
selectionMessagestring'{0} item selected'[selectionMessage]Anuncio accesible que describe la opción seleccionada.
selectOnFocusbooleanfalse[selectOnFocus]Selecciona la opción al mover el foco, sin esperar a su activación.
showEmptyMessagebooleantrue[showEmptyMessage]Muestra el mensaje de sugerencias vacías.
sizeNeuAutocompleteSize'md'[size]Tamaño visual del campo: sm, md o lg.
suggestionsreadonly T[] | nullnull[suggestions]Registros de sugerencias proporcionados para la consulta actual.
tabindexnumber0[tabindex]Orden de tabulación del punto de entrada por teclado.
totalItemsnumber | nullnull[totalItems]Número total lógico de opciones en las ventanas remotas.
touchedbooleanfalse[touched]Estado del formulario que indica que el control ha sido visitado.
typestring'text'[type]Tipo del input de texto nativo.
variantNeuAutocompleteVariant'outline'[variant]Variante visual del campo: outline o solid.
virtualScrollbooleanfalse[virtualScroll]Renderiza una ventana de opciones en lugar de todas las opciones.
virtualScrollBuffernumber3[virtualScrollBuffer]Opciones adicionales renderizadas antes y después de la ventana virtual visible.
virtualScrollItemSizenumber | nullnull[virtualScrollItemSize]Altura de cada fila de opción en píxeles para el scroll virtual.
virtualScrollVisibleItemsnumber8[virtualScrollVisibleItems]Número de filas virtuales visibles.

Models

Un modelo admite [(propiedad)]="signal" o la pareja [propiedad] y (propiedadChange). Elige una de las dos formas, no ambas.

Nombre
Tipo
Por defecto
Uso en el template
Descripción
valueNeuAutocompleteValue<V, F>null as NeuAutocompleteValue<V, F>Valor derivado[(value)]Valor confirmado o null; free-text también acepta un string. queryChange comunica el texto buscado.

Outputs

Escucha un evento con (evento)="handler($event)". La tabla indica qué datos recibe tu función y cómo utilizarlos.

Nombre
Valor emitido
Uso en el template
Descripción
clearedNeuAutocompleteClearEvent<V, F>(cleared)="onCleared($event)"Se emite con la acción explícita de limpiar; valueChange comunica el valor resultante.
closedvoid(closed)="onClosed($event)"Se emite después de cerrar el panel en el navegador.
dropdownClickNeuAutocompleteDropdownClickEvent(dropdownClick)="onDropdownClick($event)"Describe la consulta y el origen de la acción del botón de sugerencias.
focusEnteredFocusEvent(focusEntered)="onFocusEntered($event)"Se emite cuando el foco entra en el control.
focusLeftFocusEvent(focusLeft)="onFocusLeft($event)"Se emite cuando el foco sale del control.
inputKeydownKeyboardEvent(inputKeydown)="onInputKeydown($event)"Evento keydown nativo del input de texto.
keyUpKeyboardEvent(keyUp)="onKeyUp($event)"Evento keyup nativo del input de texto.
openedvoid(opened)="onOpened($event)"Se emite después de abrir el panel en el navegador.
optionActivatedNeuOptionActivatedEvent<T, V>(optionActivated)="onOptionActivated($event)"Opción activada, su valor y el evento que la ha activado.
queryChangestring(queryChange)="onQueryChange($event)"Consulta de texto actual, distinta del valor seleccionado.
suggestionsRequestNeuAutocompleteSuggestionsRequest(suggestionsRequest)="onSuggestionsRequest($event)"Solicita sugerencias con consulta e identidad de solicitud; la aplicación proporciona suggestions.
touchvoid(touch)="onTouch($event)"Notifica al formulario que el control ha sido visitado; no es un cambio de valor.

Templates

ng-content proyecta contenido dentro del componente. Los inputs TemplateRef reciben un template; las directivas ng-template identifican templates con un contexto tipado. Una directiva compartida en el entrypoint no es necesariamente un slot de este componente.

Nombre
Mecanismo
Contrato
NeuAutocompleteClearIconDirectiveVer ejemplo Directiva pública de templateng-template[neuAutocompleteClearIcon]
NeuAutocompleteDropdownIconDirectiveVer ejemplo Directiva pública de templateng-template[neuAutocompleteDropdownIcon]
NeuAutocompleteEmptyDirectiveVer ejemplo Directiva pública de templateng-template[neuAutocompleteEmpty]
NeuAutocompleteFooterDirectiveVer ejemplo Directiva pública de templateng-template[neuAutocompleteFooter]
NeuAutocompleteGroupDirectiveVer ejemplo Directiva pública de templateng-template[neuAutocompleteGroup]
NeuAutocompleteHeaderDirectiveVer ejemplo Directiva pública de templateng-template[neuAutocompleteHeader]
NeuAutocompleteItemDirectiveVer ejemplo Directiva pública de templateng-template[neuAutocompleteItem]
NeuAutocompleteLoaderDirectiveVer ejemplo Directiva pública de templateng-template[neuAutocompleteLoader]
NeuAutocompleteLoadingIconDirectiveVer ejemplo Directiva pública de templateng-template[neuAutocompleteLoadingIcon]

Cada ejemplo muestra un template diferente. Alterna entre Demo y Código para consultar su implementación, imports y estado.

Template ClearIcon

NeuAutocompleteClearIconDirective

Template ClearIcon

Usa el botón desplegable o escribe para abrir las sugerencias.

Template DropdownIcon

NeuAutocompleteDropdownIconDirective

Template DropdownIcon

Usa el botón desplegable o escribe para abrir las sugerencias.

Template Empty

NeuAutocompleteEmptyDirective

Template Empty

Abre el control para ver el estado vacío.

Template Group

NeuAutocompleteGroupDirective

Template Group

Usa el botón desplegable o escribe para abrir las sugerencias.

Template Header

NeuAutocompleteHeaderDirective

Template Header

Usa el botón desplegable o escribe para abrir las sugerencias.

Template Item

NeuAutocompleteItemDirective

Template Item

Usa el botón desplegable o escribe para abrir las sugerencias.

Template Loader

NeuAutocompleteLoaderDirective

Template Loader

Usa el botón desplegable o escribe para abrir las sugerencias.

Template LoadingIcon

NeuAutocompleteLoadingIconDirective

Template LoadingIcon

Usa el botón desplegable o escribe para abrir las sugerencias.

Métodos públicos

Nombre
Contrato
clearclear(originalEvent?: Event | null, reason?: 'button' | 'force-selection' | 'programmatic'): void;
closeclose(originalEvent?: Event | null, reason?: OverlayReason, restoreFocus?: boolean): void;
focusfocus(): void;
openopen(originalEvent?: Event | null, reason?: OverlayReason): void;
openAllopenAll(event?: Event | null): void;
resetreset(): void;
selectOptionselectOption(option: T, originalEvent?: Event | null): void;

Public Types

Abre un tipo para consultar su definición y los campos de sus interfaces.

Estilos y tokens

Carga los estilos de Core una sola vez. Utiliza los tokens públicos para personalizaciones locales o un preset para cambios de toda la aplicación. Conserva la legibilidad de etiquetas, foco, opciones seleccionadas y estados deshabilitados en modo claro y oscuro.

Tokens específicos

Token
Efecto
Estado / variante
Valor / origen
Alternativa
--neu-autocomplete-option-height Valor del tema heredado que utiliza este componente Superficie del campo 40pxDeclaración raízSin alias de token

Tokens compartidos utilizados

Sobrescríbelos en un contenedor local para afectar a este ejemplo. Una modificación en :root afecta a los demás componentes que utilizan el mismo token.

Token
Efecto aquí
Otros efectos
Valor / alternativa
--neu-border Bordes normales de controles y celdas Compartido con otros consumidores de Core; limita el cambio a un ámbito. rgba(15, 23, 42, 0.08)
--neu-border-hover Bordes de controles al pasar el puntero Compartido con otros consumidores de Core; limita el cambio a un ámbito. rgba(15, 23, 42, 0.16)
--neu-error Color del campo no válido o de la acción de peligro Compartido con otros consumidores de Core; limita el cambio a un ámbito. #dc2626
--neu-focus-ring Anillo normal del foco de teclado Compartido con otros consumidores de Core; limita el cambio a un ámbito. 0 0 0 var(--neu-focus-ring-width) rgba(0, 122, 255, 0.15)
--neu-primary Color de marca en controles activos y énfasis Compartido con otros consumidores de Core; limita el cambio a un ámbito. #007aff
--neu-primary-50 Superficie tenue de marca para estados de puntero y foco Compartido con otros consumidores de Core; limita el cambio a un ámbito. #eff6ff
--neu-primary-dark Tono oscuro de marca; texto de Button outline y ghost en el tema claro Compartido con otros consumidores de Core; limita el cambio a un ámbito. #005fcc
--neu-radius Radio de las esquinas del control Compartido con otros consumidores de Core; limita el cambio a un ámbito. 8px