Skip to content

Tree Nuevo

El componente hp-tree implementa el patrón WAI-ARIA TreeView para visualizar datos jerárquicos con nodos expandibles, selección simple o múltiple y navegación completa por teclado.

Demostración

Sin estilos (solo base.css)

Así se ve hp-tree usando únicamente @headless-primitives/utils/base.css. La expansión de nodos, navegación por teclado y selección funcionan completamente.

Item 1 Hijo 1.1Item 2

Con estilos personalizados

📁 src 📁 components 📄 button.ts📄 dialog.ts📄 utils.ts📄 README.md📄 package.json
html
<hp-tree>
  <hp-tree-item value="src">
    📁 src
    <hp-tree-group>
      <hp-tree-item value="index">📄 index.ts</hp-tree-item>
      <hp-tree-item value="utils">📄 utils.ts</hp-tree-item>
    </hp-tree-group>
  </hp-tree-item>
  <hp-tree-item value="readme">📄 README.md</hp-tree-item>
</hp-tree>
css
hp-tree-group {
  display: block;
  padding-left: 1.25rem;
}
hp-tree-group[aria-hidden="true"] {
  display: none;
}
hp-tree-item {
  display: block;
  padding: 4px 8px;
  cursor: pointer;
}
hp-tree-item[aria-selected="true"] {
  background: #eff6ff;
  color: #3b82f6;
}
hp-tree-item:focus-visible {
  outline: 2px solid #3b82f6;
  outline-offset: -2px;
}

Instalación

bash
pnpm add @headless-primitives/tree
bash
npm install @headless-primitives/tree
bash
yarn add @headless-primitives/tree
bash
bun add @headless-primitives/tree

Features

  • ⌨️ Flechas para navegar y expandir/colapsar, Home, End, Enter/Space.
  • ♿️ role="tree", role="treeitem", aria-expanded, aria-selected automáticos.
  • 🎨 Sin estilos visuales (Headless).
  • 🔀 Selección simple o múltiple (multi-select).
  • 🌳 Anidamiento ilimitado con hp-tree-group.

Anatomía

html
<hp-tree>
  <hp-tree-item value="parent">
    Parent
    <hp-tree-group>
      <hp-tree-item value="child-1">Child 1</hp-tree-item>
      <hp-tree-item value="child-2">Child 2</hp-tree-item>
    </hp-tree-group>
  </hp-tree-item>
  <hp-tree-item value="leaf">Leaf Item</hp-tree-item>
</hp-tree>

API Reference

hp-tree

Contenedor raíz del árbol.

Atributos / Propiedades

Atributo / PropiedadTipoPor DefectoDescripción
selectedstring""Valor(es) seleccionado(s). En multi-select, separados por coma.
multi-selectbooleanfalseHabilita selección múltiple.

Métodos

MétodoDescripción
getSelectedValues()Retorna un Set<string> con los valores seleccionados.

Eventos

EventoDetalleDescripción
hp-select{ value, item, selectedValues? }Cuando se selecciona un item.

Atributos ARIA gestionados automáticamente

  • role="tree" — Asignado si no se especifica.
  • aria-multiselectable — Presente cuando multi-select es true.

hp-tree-item

Nodo del árbol (hoja o padre expandible).

Atributos / Propiedades

Atributo / PropiedadTipoPor DefectoDescripción
valuestring""Identificador único del nodo.
disabledbooleanfalseDeshabilita el nodo.
selectedbooleanfalseEstado de selección.
expandedbooleanfalseEstado de expansión (solo si tiene hp-tree-group).

Métodos

MétodoDescripción
isExpandable()true si tiene un hp-tree-group hijo.
getGroup()Retorna el hp-tree-group hijo.
getParentItem()Retorna el hp-tree-item padre.

Eventos

EventoDetalleDescripción
hp-expand{ value, item }Cuando el nodo se expande.
hp-collapse{ value, item }Cuando el nodo se colapsa.

Atributos ARIA gestionados automáticamente

  • role="treeitem" — Asignado si no se especifica.
  • aria-expanded — Presente solo en nodos expandibles.
  • aria-selected"true" | "false".
  • aria-disabled — Sincronizado con disabled.
  • data-state"open" | "closed" | "leaf".
  • tabindex — Roving: 0 para seleccionado, -1 para los demás.

hp-tree-group

Contenedor de nodos hijos (sub-tree). Renderizado por el nodo padre.

Atributos ARIA gestionados automáticamente

  • role="group" — Siempre presente.

Accesibilidad

Adhiere al patrón WAI-ARIA APG para TreeView.

TeclaAcción
ArrowDownMueve al siguiente nodo visible.
ArrowUpMueve al nodo visible anterior.
ArrowRightExpande (cerrado) o mueve al primer hijo (abierto).
ArrowLeftColapsa (abierto) o mueve al nodo padre (cerrado/hoja).
HomeMueve al primer nodo.
EndMueve al último nodo visible.
Enter / SpaceSelecciona y/o expande/colapsa.

Lanzado bajo la MIT License.