TreeSelect muestra la jerarquía dentro de su panel. El modo simple guarda el valor de un nodo; el modo múltiple guarda un array. La selección independent afecta al nodo elegido; propagated sigue las relaciones entre padres e hijos.
La expansión es controlada: enlaza expandedKeys y aplica expandedKeysChange. Para nodos lazy, childrenRequest solicita los hijos a la aplicación; no los descarga por sí mismo.
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.
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.
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.
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.
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
clearable
boolean
false
[clearable]
Muestra la acción de limpiar cuando hay un valor seleccionado.
clearLabel
string
'Clear selection'
[clearLabel]
Etiqueta de la acción que limpia la selección.
disabled
boolean
false
[disabled]
Deshabilita la interacción del usuario; las opciones deshabilitadas no se pueden seleccionar.
emptyLabel
string
'No options found'
[emptyLabel]
Mensaje que se muestra cuando no hay opciones disponibles.
expandedKeys
readonly V[]
[]
[expandedKeys]
Claves de nodos expandidos aplicadas. Actualiza este input para aceptar expandedKeysChange.
label
string
''
[label]
Etiqueta visible del campo o de la opción.
mode
M
'single' as MValor derivado
[mode]
Modo de selección. El tipo del valor depende del modo elegido.
nodes
readonly T[]
[]
[nodes]
Nodos raíz. Las relaciones de hijos se leen mediante optionChildren.
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.
import type { NeuOptionPath } from '@neural-ui/core/option-api';
import type { NeuOptionAccessor } from '@neural-ui/core/option-api';
// Declaración pública (solo referencia)
export type NeuOptionAccessor<T, R = unknown> = Exclude<keyof T, string> | NeuOptionPath<T> | ((option: T) => R);
NeuOptionDisabledAccessor.d.ts
import type { NeuOptionAccessor } from '@neural-ui/core/option-api';
import type { NeuOptionDisabledAccessor } from '@neural-ui/core/option-api';
// Declaración pública (solo referencia)
export type NeuOptionDisabledAccessor<T> = NeuOptionAccessor<T, boolean>;
NeuOptionLabelAccessor.d.ts
import type { NeuOptionAccessor } from '@neural-ui/core/option-api';
import type { NeuOptionLabelAccessor } from '@neural-ui/core/option-api';
// Declaración pública (solo referencia)
export type NeuOptionLabelAccessor<T> = NeuOptionAccessor<T, string>;
NeuOptionPath.d.ts
import type { NeuOptionPath } from '@neural-ui/core/option-api';
// Declaración pública (solo referencia)
export type NeuOptionPath<T> = Extract<keyof T, string> | `${Extract<keyof T, string>}.${string}`;
NeuOptionValueAccessor.d.ts
import type { NeuOptionAccessor } from '@neural-ui/core/option-api';
import type { NeuOptionValueAccessor } from '@neural-ui/core/option-api';
// Declaración pública (solo referencia)
export type NeuOptionValueAccessor<T, V> = NeuOptionAccessor<T, V>;
NeuSelectionMode.d.ts
import type { NeuSelectionMode } from '@neural-ui/core/option-api';
// Declaración pública (solo referencia)
export type NeuSelectionMode = 'single' | 'multiple';
NeuSelectionValue.d.ts
import type { NeuSelectionMode } from '@neural-ui/core/option-api';
import type { NeuSelectionValue } from '@neural-ui/core/option-api';
// Declaración pública (solo referencia)
export type NeuSelectionValue<V, M extends NeuSelectionMode> = M extends 'multiple' ? readonly V[] : V | null;
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-focus-ring
Anillo normal del foco de teclado
Compartido con otros consumidores de Core; limita el cambio a un ámbito.