Hopp til hovedinnhold
Meny

lmfaole.party / designsystem / komponenter / Trevisning

  • Forside
  • Turer
  • Økonomi
  • Slides
  • <lm-tree-view> – Trevisning / Tree view

    Om komponenten

    Formål

    Viser en hierarkisk liste - f.eks. en kategori- eller mappestruktur - med noder som kan utvides/kollapses. Implementerer ARIA APG sitt Tree View-mønster fullt ut: role="tree"/"treeitem"/"group", aria-expanded/aria-level/aria-setsize/aria-posinset, og full piltast-navigasjon (venstre/høyre utvider/kollapser eller flytter til forelder/barn, opp/ned flytter mellom synlige noder).

    Egner seg for

    • Kategori- eller mappe-/undermappestrukturer med flere nivåer, der brukeren trenger å utforske og navigere hierarkiet med tastatur.
    • Datastrukturer som naturlig er nøstet (f.eks. hovedkategori → underkategori → element).

    Egner seg ikke for

    • Flate lister uten reell hierarkisk nøsting - bruk <lm-listbox> i stedet.
    • Tabelldata med rader/kolonner - bruk <lm-data-table>.

    Bruk

    document.querySelector("lm-tree-view").data = [
        {
            tekst: "Faste utgifter",
            utvidet: true,
            barn: [
                {tekst: "Husleie", verdi: "husleie"},
                {tekst: "Strøm", verdi: "strom"},
            ],
        },
        {tekst: "Mat", verdi: "mat"},
    ];
    <script type="module" src="/designsystem/komponenter/innhold/tree-view/tree-view.js"></script>
    
    <lm-tree-view etikett="Utgiftskategorier"></lm-tree-view>

    Prøv selv

    Rediger koden under - resultatet oppdateres live.

    Attributter

    Attributt Type Standard Beskrivelse
    etikettstring"Tre"Attributt/property. aria-label for hele treet (f.eks. "Kategorier").

    Events

    Event Type Beskrivelse
    tree-view:valgtCustomEventDispatches når en node velges (klikk eller Enter/mellomrom). detail.verdi er nodens verdi (eller tekst hvis verdi mangler).

    Parts

    Part Beskrivelse
    treRot-elementet med role="tree".

    Styling med ::part()

    Hver part over kan restyles direkte fra et vanlig, ytre stilark - uten å måtte endre selve komponenten eller duplisere den:

    lm-tree-view::part(tre) {
        /* egne stiler for "Rot-elementet med `role="tree"`." */
    }

    Tilgjengelighet

    Rot-elementet har role="tree". Hver node er role="treeitem" med aria-level/aria-setsize/aria-posinset, og noder med barn får aria-expanded. Kun én node er i tab-rekkefølgen om gangen (roving tabindex) - venstre/høyre pil utvider/kollapser eller flytter til forelder/første barn, opp/ned flytter mellom synlige noder, Home/End hopper til første/siste synlige node, Enter/mellomrom velger.

    • role="tree" på rot-elementet, role="treeitem" på hver node, role="group" på hver undernode-liste.
    • aria-expanded="true"/"false" settes kun på noder med barn; noder uten barn har ikke attributtet i det hele tatt (per APG).
    • aria-level/aria-setsize/aria-posinset beregnes automatisk fra data-strukturen, uten at forbrukeren må sette dem selv.
    • Piltaster styrer både navigasjon og utvid/kollaps: høyre utvider en kollapset node (eller flytter inn i første barn hvis allerede utvidet), venstre kollapser en utvidet node (eller flytter til forelder).

    Detaljer

    • Data gis som en JS-property (element.data = [...]), ikke et attributt - samme mønster som <lm-chart-bar>/<lm-data-table>, siden strukturerte/nøstede data ikke egner seg som attributt-strenger. Formen er {tekst, verdi?, barn?, utvidet?}, der barn er en nøstet array av samme form.
    • Sett utvidet: true på en node i data for at den skal starte utvidet - alle andre starter kollapset.

    Referanser

    Se også:

    Avhengigheter: Ingen