Data

Tree

Visualizzazione gerarchica interattiva con supporto per selezione (single, multiple, checkbox), filtro testuale e espansione/collasso dei nodi.

Import

import { Tree } from '@pzeta/vue-components'
import type {
  TreeProps,
  TreeEmits,
  TreeNode,
  TreeSlots,
  TreeSelectionMode,
} from '@pzeta/vue-components'

Esempio Base

TreeNode

interface TreeNode {
  key?: string | number      // Chiave univoca del nodo (richiesta per selezione/espansione)
  label?: string             // Testo visualizzato
  icon?: string              // Classe icona (es. 'pi pi-folder')
  data?: unknown             // Dati custom associati al nodo
  type?: string              // Tipo nodo (per slot template personalizzati)
  children?: TreeNode[]      // Nodi figli
  style?: Record<string, string | number>
  class?: string
  selectable?: boolean       // false = nodo non selezionabile
  leaf?: boolean             // Nodo foglia (nasconde il toggle)
  expanded?: boolean         // Stato espansione iniziale
}

Props

PropTipoDefaultDescrizione
valueTreeNode[][]Array radice dei nodi
selectionMode'single' | 'multiple' | 'checkbox'undefinedModalità selezione nodi
selectionKeysRecord<string | number, boolean> | nullnullChiavi nodi selezionati (v-model:selectionKeys)
expandedKeysRecord<string | number, boolean>{}Chiavi nodi espansi (v-model:expandedKeys)
filterbooleanfalseAbilita casella di filtro testuale
filterPlaceholderstring'Search...'Placeholder per il campo di ricerca
filterMode'lenient' | 'strict''lenient'Modalità filtro: lenient mostra il nodo se uno dei figli corrisponde, strict richiede corrispondenza esatta
filterBystring'label'Campo del nodo su cui applicare il filtro
loadingbooleanfalseMostra indicatore di caricamento
loadingMode'mask' | 'icon''mask'Modalità visualizzazione loading
classstring''Classe CSS aggiuntiva

Emits

EventoPayloadDescrizione
update:selectionKeysRecord<string | number, boolean> | nullSelezione cambiata
update:expandedKeysRecord<string | number, boolean>Chiavi espanse cambiate
nodeSelectTreeNodeNodo selezionato
nodeUnselectTreeNodeNodo deselezionato
nodeExpandTreeNodeNodo espanso
nodeCollapseTreeNodeNodo collassato

Slot

SlotScopeDescrizione
default{ node: TreeNode }Template personalizzato per il contenuto del nodo
toggleicon{ expanded: boolean }Icona toggle espansione custom
checkboxicon{ checked: boolean; partialChecked: boolean }Icona checkbox custom
loadingiconIcona di caricamento custom

Esempi

Selezione singola

Selezione multipla

Selezione con checkbox

Con filtro

Template nodo personalizzato

Controllo espansione programmatico

Metodi esposti (defineExpose)

MetodoDescrizione
expandAll()Espande tutti i nodi che hanno figli
collapseAll()Collassa tutti i nodi

Note sulla selezione

  • La prop selectionKeys è una mappa { [key]: true }.
  • In modalità single, un click deseleziona il nodo precedente.
  • In modalità multiple, il click aggiunge/rimuove dalla selezione senza richiedere Ctrl.
  • In modalità checkbox, ogni nodo ha una propria checkbox. I nodi con selectable: false non possono essere selezionati.

Accessibilità

Il contenitore usa role="tree". Ogni nodo è un elemento <li> dentro <ul>. I pulsanti di toggle sono elementi <button> accessibili da tastiera.

TypeScript

import type {
  TreeProps,
  TreeEmits,
  TreeNode,
  TreeSlots,
  TreeSelectionMode,
  TreeNodeProps,
} from '@pzeta/vue-components'