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

Select

Selecciona una o varias opciones con búsqueda, chips y un modelo de valor tipado.

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

Uso

Usa Select para un conjunto limitado de opciones. El modo simple guarda un valor o null; el modo múltiple guarda un array. Una opción deshabilitada sigue visible, pero no puede activarse.

Utiliza optionLabel, optionValue y optionDisabled con objetos de dominio. Guarda identificadores estables como valores, en lugar de copiar la etiqueta visible al estado de la aplicación.

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-select
  [options]="destinations"
  (openChange)="onOpenChange($event)"
  (filterChange)="onFilterChange($event)"
  [(value)]="destination"
  [searchable]="true"
  [clearable]="true"
  [ariaFilterLabel]="'Buscar destinos'"
  [clearAllLabel]="'Limpiar selección'"
  [clearAriaLabel]="'Limpiar selección'"
  [emptyMessage]="'No hay destinos'"
  [floatingLabel]="true"
  [fluid]="true"
  [label]="'Destino'"
  [loadingLabel]="'Cargando destinos'"
  [noResultsMessage]="'Sin coincidencias'"
  [placeholder]="'Elige un destino'"
  [searchPlaceholder]="'Buscar'"
  [selectAllLabel]="'Seleccionar todo'"
/>

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.
ariaFilterLabelstring'Filter options'[ariaFilterLabel]Nombre accesible del campo de búsqueda de opciones.
ariaLabelstring | nullnull[ariaLabel]Nombre accesible cuando no hay una etiqueta visible.
ariaLabelledBystring | nullnull[ariaLabelledBy]ID del elemento que proporciona el nombre accesible.
autocompletestring | nullnull[autocomplete]Atributo autocomplete del navegador para el input.
autofocusbooleanfalse[autofocus]Solicita el foco cuando se inicializa el control.
autofocusFilterbooleanfalse[autofocusFilter]Enfoca el campo de búsqueda al abrir el panel.
autoOptionFocusbooleantrue[autoOptionFocus]Activa una opción disponible al abrir la lista.
checkmarkbooleanfalse[checkmark]Muestra una marca junto a las opciones seleccionadas.
clearablebooleanfalse[clearable]Muestra la acción de limpiar cuando hay un valor seleccionado.
clearAllLabelstring'Clear all'[clearAllLabel]Texto para limpiar las opciones seleccionadas en el ámbito de seleccionar todo.
clearAriaLabelstring'Clear selection'[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.
dataFirstnumber0[dataFirst]Índice lógico de la primera opción cargada en una ventana remota.
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.
emptyMessagestring'No options available'[emptyMessage]Mensaje que se muestra cuando la colección de opciones está vacía.
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.
filterOptionsReadonly<NeuSelectFilterOptions>{}[filterOptions]Opciones de búsqueda: activación, espera, idioma y limpieza al cerrar.
filterValuestring | nullnull[filterValue]Consulta de búsqueda aplicada. Escucha filterChange si la controla la aplicación.
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.
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.
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.
loadingbooleanfalse[loading]Muestra el estado de carga mientras la aplicación proporciona datos.
loadingLabelstring'Loading...'[loadingLabel]Mensaje o anuncio durante la carga de opciones.
modeM'single' as MValor derivado[mode]Modo de selección. El tipo del valor depende del modo elegido.
namestring''[name]Nombre asociado al control nativo del formulario.
noResultsMessagestring'No results'[noResultsMessage]Mensaje que se muestra cuando el filtro no encuentra coincidencias.
openboolean | undefinedundefined[open]Visibilidad aplicada del panel; actualízala en respuesta a openChange para controlar la apertura.
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.
optionValue(option: T) => V(option) => resolveNeuOptionValue<T, V>(option)Valor derivado[optionValue]Nombre de campo o función que obtiene el valor guardado de la opción.
pendingbooleanfalse[pending]Estado del formulario que indica que hay una validación asíncrona pendiente.
placeholderstring'Select...'[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.
resetFilterOnHidebooleanfalse[resetFilterOnHide]Restablece la consulta de búsqueda al cerrar el panel.
scrollHeightstring'240px'[scrollHeight]Altura máxima del área visible de opciones.
searchablebooleanfalse[searchable]Muestra el campo de búsqueda de opciones integrado.
searchPlaceholderstring'Search...'[searchPlaceholder]Placeholder del campo de búsqueda de opciones.
selectAllLabelstring'Select all'[selectAllLabel]Texto para seleccionar las opciones habilitadas en el ámbito de seleccionar todo.
selectionOptionsReadonly<NeuSelectSelectionOptions>{}[selectionOptions]Opciones de selección múltiple: chips, límite de selección, número de etiquetas y ámbito de seleccionar todo.
selectOnFocusbooleanfalse[selectOnFocus]Selecciona la opción al mover el foco, sin esperar a su activación.
sizeNeuSelectSize'md'[size]Tamaño visual del campo: sm, md o lg.
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.
variantNeuSelectVariant'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
valueNeuSelectionValue<V, M>null as NeuSelectionValue<V, M>Valor derivado[(value)]Modo simple: un valor o null. Modo múltiple: un array. La aplicación es propietaria del modelo enlazado.

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
clearedNeuSelectClearedEvent(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.
dataRequestNeuOptionDataRequest(dataRequest)="onDataRequest($event)"Solicita una ventana de opciones. La aplicación proporciona options, dataFirst y totalItems.
filterChangestring(filterChange)="onFilterChange($event)"Consulta de búsqueda del usuario. Úsala para actualizar un filtro controlado o pedir resultados remotos.
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.
openChangeboolean(openChange)="onOpenChange($event)"Visibilidad solicitada del panel; actualiza open si la aplicación controla su visibilidad.
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.
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
NeuSelectClearIconDirectiveVer ejemplo Directiva pública de templateng-template[neuSelectClearIcon]
NeuSelectDropdownIconDirectiveVer ejemplo Directiva pública de templateng-template[neuSelectDropdownIcon]
NeuSelectEmptyDirectiveVer ejemplo Directiva pública de templateng-template[neuSelectEmpty]
NeuSelectEmptyFilterDirectiveVer ejemplo Directiva pública de templateng-template[neuSelectEmptyFilter]
NeuSelectFilterDirectiveVer ejemplo Directiva pública de templateng-template[neuSelectFilter]
NeuSelectFilterIconDirectiveVer ejemplo Directiva pública de templateng-template[neuSelectFilterIcon]
NeuSelectFooterDirectiveVer ejemplo Directiva pública de templateng-template[neuSelectFooter]
NeuSelectGroupDirectiveVer ejemplo Directiva pública de templateng-template[neuSelectGroup]
NeuSelectHeaderDirectiveVer ejemplo Directiva pública de templateng-template[neuSelectHeader]
NeuSelectItemDirectiveVer ejemplo Directiva pública de templateng-template[neuSelectItem]
NeuSelectLoaderDirectiveVer ejemplo Directiva pública de templateng-template[neuSelectLoader]
NeuSelectLoadingIconDirectiveVer ejemplo Directiva pública de templateng-template[neuSelectLoadingIcon]
NeuSelectSelectedDirectiveVer ejemplo Directiva pública de templateng-template[neuSelectSelected]

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

Template ClearIcon

NeuSelectClearIconDirective

Template ClearIcon

Abre el control para ver el template personalizado.

Template DropdownIcon

NeuSelectDropdownIconDirective

Template DropdownIcon

Abre el control para ver el template personalizado.

Template Empty

NeuSelectEmptyDirective

Template Empty

Abre el control para ver el estado vacío.

Template EmptyFilter

NeuSelectEmptyFilterDirective

Template EmptyFilter

Abre el control para ver el template personalizado.

Template Filter

NeuSelectFilterDirective

Template Filter

Abre el control para ver el template personalizado.

Template FilterIcon

NeuSelectFilterIconDirective

Template FilterIcon

Abre el control para ver el template personalizado.

Template Group

NeuSelectGroupDirective

Template Group

Abre el control para ver el template personalizado.

Template Header

NeuSelectHeaderDirective

Template Header

Abre el control para ver el template personalizado.

Template Item

NeuSelectItemDirective

Template Item

Abre el control para ver el template personalizado.

Template Loader

NeuSelectLoaderDirective

Template Loader

Abre el control para ver el template personalizado.

Template LoadingIcon

NeuSelectLoadingIconDirective

Template LoadingIcon

Abre el control para ver el template personalizado.

Template Selected

NeuSelectSelectedDirective

Template Selected

Abre el control para ver el template personalizado.

Métodos públicos

Nombre
Contrato
clearclear(event?: Event): void;
focusfocus(): void;
resetFilterresetFilter(emit?: boolean): void;
selectOptionselectOption(option: T): 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-select-option-height Valor del tema heredado que utiliza este componente Superficie del campo 44pxDeclaració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-error-text Texto de error y de Button danger outline/ghost en ambos temas Compartido con otros consumidores de Core; limita el cambio a un ámbito. #991b1b
--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-focus-ring-alpha Opacidad del anillo de foco semántico Compartido con otros consumidores de Core; limita el cambio a un ámbito. 25%
--neu-focus-ring-width Grosor del anillo, incluido el foco con error Compartido con otros consumidores de Core; limita el cambio a un ámbito. 3px
--neu-primary Color de marca en controles activos y énfasis Compartido con otros consumidores de Core; limita el cambio a un ámbito. #007aff