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

Tree

Explora datos jerárquicos con expansión, selección y reordenación opcionales y controladas.

Categoría
Datos y jerarquía
Import
@neural-ui/core/tree
Selector
neu-tree
import { NeuTreeComponent } from '@neural-ui/core/tree';

Uso

nodes aporta registros planos con claves estables y data; hierarchy describe raíces y relaciones de hijos cargados o pendientes. Aplica expandedKeysChange.keys a expandedKeys y selectionChange.selection a selection. childrenRequest identifica el padre pendiente y la petición; la aplicación carga los hijos y sustituye nodes/hierarchy. nodeMove es una propuesta: actualiza hierarchy para aceptarla. El Template recibe data, no el nodo envolvente.

Ejemplos

Prueba esta interacción gestionada por la aplicación. Código incluye los eventos y los datos iniciales.

Ejemplos
Área de trabajo
Diseño
Ingeniería
Archivo

Eventos: 0

Prueba y configura

Cambia las opciones públicas, prueba el resultado y consulta el template actualizado. Código contiene la implementación ejecutable completa.

Prueba y configura
Área de trabajo
Diseño
Ingeniería
Archivo

Eventos: 0

template.html
<neu-tree
  [nodes]="nodes()"
  [hierarchy]="hierarchy()"
  [expandedKeys]="expanded()"
  (expandedKeysChange)="
    expanded.set($event.keys); record('expandedKeysChange', $event)
  "
  [selectionMode]="'checkbox'"
  [selection]="selection()"
  (selectionChange)="acceptSelection($event.selection)"
  [searchable]="true"
  [reorderable]="false"
  (nodeAction)="record('nodeAction', $event)"
  (childrenRequest)="requestChildren($event)"
  (nodeMove)="acceptMove($event)"
  [ariaLabel]="'Carpetas de proyectos'"
  [collapseLabel]="'Contraer carpeta'"
  [emptyLabel]="'Sin carpetas'"
  [expandLabel]="'Expandir carpeta'"
  [invalidTreeLabel]="'Datos del árbol no válidos'"
  [retryLabel]="'Reintentar carga'"
  [searchLabel]="'Buscar carpetas'"
></neu-tree>

Estado y eventos

nodes aporta registros planos con claves estables y data; hierarchy describe raíces y relaciones de hijos cargados o pendientes. Aplica expandedKeysChange.keys a expandedKeys y selectionChange.selection a selection. childrenRequest identifica el padre pendiente y la petición; la aplicación carga los hijos y sustituye nodes/hierarchy. nodeMove es una propuesta: actualiza hierarchy para aceptarla. El Template recibe data, no el nodo envolvente.

Accesibilidad y teclado

Las flechas recorren y expanden/contraen nodos; Inicio/Fin alcanza el primer/último nodo visible. Espacio cambia la selección. La reordenación incluye alternativas de teclado cuando está habilitada.

Tecla
Acción
Tab Accede al árbol y a sus controles habilitados.
ArrowDown / ArrowUp Enfoca el siguiente o anterior nodo visible.
ArrowRight / ArrowLeft Expande, entra, contrae o sale de una rama; la dirección horizontal respeta RTL.
Home Enfoca el primer nodo visible.
End Enfoca el último nodo visible.
Enter Activa la selección del nodo enfocado cuando está habilitada.
Space Activa la selección del nodo enfocado cuando está habilitada.

API

Inputs, modelos y Outputs se extraen del paquete Core instalado. Los tipos públicos enlazan a sus definiciones. Los Templates incluyen ejemplos ejecutables.

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
ariaLabelstring'Tree'[ariaLabel]Nombre accesible del árbol.
collapseLabelstring'Collapse node'[collapseLabel]Etiqueta accesible del botón en modo expandido.
emptyLabelstring'No nodes available'[emptyLabel]Etiqueta de colección vacía. Tradúcela para tu aplicación.
expandedKeysreadonly K[][][expandedKeys]Claves aplicadas de ramas expandidas. Los cambios de expansión se proponen a la aplicación.
expandLabelstring'Expand node'[expandLabel]Etiqueta accesible del botón en modo contraído.
hierarchyNeuTreeHierarchy<K>Obligatorio[hierarchy]Raíces y relaciones de hijos, con estado loaded/loading/error/unloaded e identidades de revisión.
indentSizenumber18[indentSize]Sangría horizontal por nivel del árbol en píxeles.
invalidTreeLabelstring'Tree data is invalid'[invalidTreeLabel]Texto accesible de diagnóstico si la jerarquía es incoherente.
nodesreadonly NeuTreeNode<T, K>[]Obligatorio[nodes]Registros planos de nodos con clave. hierarchy define por separado las relaciones entre padres e hijos.
reorderablebooleanfalse[reorderable]Permite propuestas de movimiento de nodos; la aplicación sigue gestionando la jerarquía.
retryLabelstring'Retry loading'[retryLabel]Etiqueta visible o accesible para reintentar una carga o subida fallida.
searchablebooleanfalse[searchable]Muestra el campo de búsqueda integrado.
searchLabelstring'Search nodes'[searchLabel]Etiqueta accesible o texto de ayuda del campo de búsqueda.
selectionNeuTreeSelection<K>{ mode: 'none' }[selection]Estado de selección aplicado según su modo: none, single, multiple o checkbox.
virtualizationNeuTreeVirtualization | nullnull[virtualization]Configuración de la ventana virtual del árbol, o null para renderizado normal.

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
childrenRequestNeuTreeChildrenRequest<K>(childrenRequest)="onChildrenRequest($event)"Solicita hijos mediante parentKey, requestId y hierarchyRevision. Carga registros y actualiza nodes/hierarchy.
expandedKeysChangeNeuTreeExpandedKeysChange<K>(expandedKeysChange)="onExpandedKeysChange($event)"Propone las próximas claves de ramas. Actualiza expandedKeys para aceptar un cambio controlado.
nodeActionNeuTreeNodeAction<K>(nodeAction)="onNodeAction($event)"Emite la clave estable del nodo activado.
nodeMoveNeuTreeNodeMove<K>(nodeMove)="onNodeMove($event)"Propone un movimiento con claves de origen/destino y posición. Sustituye hierarchy para aceptarlo.
selectionChangeNeuTreeSelectionChange<K>(selectionChange)="onSelectionChange($event)"Propone la selección, la clave afectada y el origen de la interacción. Aplica payload.selection a selection.

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
NeuTreeNodeDirectiveVer ejemplo Directiva pública de templateng-template[neuTreeNode]

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

NeuTreeNodeDirective

NeuTreeNodeDirective

NeuTreeNodeDirective
Área de trabajoNivel 1 · —
DiseñoNivel 2 · —
IngenieríaNivel 2 · —
ArchivoNivel 1 · —

Eventos: 0

Public Types

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

Estilos y tokens

Usa los tokens públicos de la referencia. El diseño del contenedor pertenece a tu aplicación; comprueba el resultado en modo claro y oscuro y en espacios estrechos.

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. 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-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-primary-light Tono claro de marca; texto de Button outline y ghost en el tema oscuro Compartido con otros consumidores de Core; limita el cambio a un ámbito. #339dff
--neu-surface Superficie principal del campo, cabecera o control Compartido con otros consumidores de Core; limita el cambio a un ámbito. #ffffff
--neu-surface-2 Superficies secundarias y filas alternas Compartido con otros consumidores de Core; limita el cambio a un ámbito. #f1f5f9
--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