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

Listbox

Mantén las opciones visibles con navegación por teclado, búsqueda y selección múltiple.

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

Uso

Elige Listbox cuando las opciones deben permanecer visibles en lugar de abrir un panel. Los modos simple y múltiple utilizan el mismo contrato de valor que Select.

En el modo múltiple, los indicadores de checkbox hacen explícita la selección. Seleccionar todo afecta a las opciones visibles habilitadas. El scroll virtual limita el área renderizada en colecciones grandes.

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
Madrid
Lisboa
París
Roma

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
Madrid
Lisboa
París
Roma

Eventos: 0 ·

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

template.html
<neu-listbox
  (optionActivated)="record('optionActivated', $event)"
  (filterChange)="onFilterChange($event)"
  (dataRequest)="record('dataRequest', $event)"
  (rangeChange)="record('rangeChange', $event)"
  (focusEntered)="record('focusEntered', $event)"
  (focusLeft)="record('focusLeft', $event)"
  (touch)="record('touch', $event)"
  (drop)="record('drop', $event)"
  (valueChange)="record('valueChange', $event)"
  [options]="destinations"
  [(value)]="destination"
  [searchable]="true"
  [ariaFilterLabel]="'Buscar destinos'"
  [checkbox]="true"
  [emptyLabel]="'No hay destinos'"
  [fluid]="true"
  [label]="'Destino'"
  [noResultsMessage]="'Sin coincidencias'"
  [searchPlaceholder]="'Buscar'"
  [toggleAllLabel]="'Seleccionar todas las opciones visibles'"
/>

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.

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'Options'[ariaLabel]Nombre accesible cuando no hay una etiqueta visible.
ariaLabelledBystring | nullnull[ariaLabelledBy]ID del elemento que proporciona el nombre accesible.
autoOptionFocusbooleantrue[autoOptionFocus]Activa una opción disponible al abrir la lista.
checkboxbooleanfalse[checkbox]Muestra indicadores de checkbox en la selección múltiple.
checkmarkbooleanfalse[checkmark]Muestra una marca junto a las opciones seleccionadas.
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.
dragdropbooleanfalse[dragdrop]Permite arrastrar y soltar entre listboxes compatibles.
emptyLabelstring'No options found'[emptyLabel]Mensaje que se muestra cuando no hay opciones disponibles.
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.
filterValuestring | nullnull[filterValue]Consulta de búsqueda aplicada. Escucha filterChange si la controla la aplicación.
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.
highlightOnSelectbooleantrue[highlightOnSelect]Resalta las filas de opciones seleccionadas.
hintstring''[hint]Texto de ayuda asociado al campo.
idstring | nullnull[id]Identificador del contenedor del control.
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.
listStyleRecord<string, string | number> | nullnull[listStyle]Estilos en línea para el área visible de la lista.
listStyleClassstring | nullnull[listStyleClass]Clase CSS adicional para el área visible de la lista.
loadingbooleanfalse[loading]Muestra el estado de carga mientras la aplicación proporciona datos.
metaKeySelectionbooleanfalse[metaKeySelection]Controla si la selección utiliza la tecla modificadora de la plataforma.
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 found'[noResultsMessage]Mensaje que se muestra cuando el filtro no encuentra coincidencias.
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.
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'18rem'[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.
selectOnFocusbooleanfalse[selectOnFocus]Selecciona la opción al mover el foco, sin esperar a su activación.
showToggleAllbooleantrue[showToggleAll]Muestra la acción de seleccionar todo en el modo múltiple con checkbox.
stripedbooleanfalse[striped]Alterna el fondo de las filas de opciones.
tabindexnumber0[tabindex]Orden de tabulación del punto de entrada por teclado.
toggleAllLabelstring'Select all visible options'[toggleAllLabel]Nombre accesible y visible de la acción de seleccionar todo.
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.
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.
virtualScrollItemSizenumber40[virtualScrollItemSize]Altura de cada fila de opción en píxeles para el scroll virtual.
virtualScrollViewportItemsnumber8[virtualScrollViewportItems]Número de filas del área visible virtual.

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
dataRequestNeuOptionDataRequest(dataRequest)="onDataRequest($event)"Solicita una ventana de opciones. La aplicación proporciona options, dataFirst y totalItems.
dropNeuListboxDropEvent<T>(drop)="onDrop($event)"Resultado de arrastrar y soltar. Aplica las opciones reordenadas desde la aplicación.
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.
optionActivatedNeuOptionActivatedEvent<T, V>(optionActivated)="onOptionActivated($event)"Opción activada, su valor y el evento que la ha activado.
rangeChangeNeuViewportRange(rangeChange)="onRangeChange($event)"Rango visible actual del área virtual.
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
NeuListboxEmptyDirectiveVer ejemplo Directiva pública de templateng-template[neuListboxEmpty]
NeuListboxEmptyFilterDirectiveVer ejemplo Directiva pública de templateng-template[neuListboxEmptyFilter]
NeuListboxFilterDirectiveVer ejemplo Directiva pública de templateng-template[neuListboxFilter]
NeuListboxFooterDirectiveVer ejemplo Directiva pública de templateng-template[neuListboxFooter]
NeuListboxGroupDirectiveVer ejemplo Directiva pública de templateng-template[neuListboxGroup]
NeuListboxHeaderDirectiveVer ejemplo Directiva pública de templateng-template[neuListboxHeader]
NeuListboxIndicatorDirectiveVer ejemplo Directiva pública de templateng-template[neuListboxIndicator]
NeuListboxItemDirectiveVer ejemplo Directiva pública de templateng-template[neuListboxItem]
NeuListboxLoaderDirectiveVer ejemplo Directiva pública de templateng-template[neuListboxLoader]

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

Template Empty

NeuListboxEmptyDirective

Template Empty

Abre el control para ver el estado vacío.

Todavía no hay destinos disponibles.

Template EmptyFilter

NeuListboxEmptyFilterDirective

Template EmptyFilter

El template sustituye únicamente la región indicada.

Sin coincidencias. Prueba otra búsqueda.

Template Filter

NeuListboxFilterDirective

Template Filter

El template sustituye únicamente la región indicada.

Madrid
Lisboa
París
Roma

Template Group

NeuListboxGroupDirective

Template Group

El template sustituye únicamente la región indicada.

Madrid
Lisboa
París
Roma

Template Header

NeuListboxHeaderDirective

Template Header

El template sustituye únicamente la región indicada.

Elige tu próximo destino

Madrid
Lisboa
París
Roma

Template Indicator

NeuListboxIndicatorDirective

Template Indicator

El template sustituye únicamente la región indicada.

Madrid
Lisboa
París
Roma

Template Item

NeuListboxItemDirective

Template Item

El template sustituye únicamente la región indicada.

Madrid
Lisboa
París
Roma

Template Loader

NeuListboxLoaderDirective

Template Loader

El template sustituye únicamente la región indicada.

Métodos públicos

Nombre
Contrato
resetFilterresetFilter(): void;
setFiltersetFilter(value: string, originalEvent?: Event | null): void;
toggleAlltoggleAll(event: Event): 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

Este componente utiliza tokens compartidos del tema en lugar de tokens específicos.

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-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-primary Color de marca en controles activos y énfasis Compartido con otros consumidores de Core; limita el cambio a un ámbito. #007aff
--neu-surface Superficie principal del campo, cabecera o control Compartido con otros consumidores de Core; limita el cambio a un ámbito. #ffffff
--neu-text Color del texto principal y de los iconos que lo heredan Compartido con otros consumidores de Core; limita el cambio a un ámbito. #0f172a
--neu-text-muted Etiquetas secundarias y contenido de ayuda Compartido con otros consumidores de Core; limita el cambio a un ámbito. #475569