Tree View

Tree View

Hierarchical list with expandable/collapsible nodes.

Based on APG Tree View Pattern.

Demo

  • Documents
    • report.pdf
    • notes.txt
  • readme.md

Usage

let expanded = @resource.signal(@immut/hashmap.new())
let selected = @resource.signal("")

@styled_treeview.treeview(
  [
    @styled_treeview.tree_node("docs", "Documents", children=[
      @styled_treeview.tree_node("report", "report.pdf"),
      @styled_treeview.tree_node("notes", "notes.txt"),
    ]),
    @styled_treeview.tree_node("images", "Images", children=[
      @styled_treeview.tree_node("photo", "photo.jpg"),
    ]),
    @styled_treeview.tree_node("readme", "readme.md"),
  ],
  expanded,
  selected,
  aria_label="File browser",
)

Props

PropTypeDefaultDescription
nodesArray[TreeNode]-Tree data
expandedSignal[Map[String, Bool]]-Expansion state
selectedSignal[String]-Selected node ID
aria_labelString?NoneAccessible label
classString?NoneAdditional CSS class

BEM Classes

ClassDescription
.treeviewRoot container
.treeview__itemTree item (li)
.treeview__rowClickable row
.treeview__iconExpand/collapse icon
.treeview__labelItem label
.treeview__groupChild container

States

StateDescription
data-expanded="true"Node expanded
data-expanded="false"Node collapsed
data-selected="true"Node selected
data-depth="N"Nesting level

Keyboard

KeyAction
Arrow DownNext visible item
Arrow UpPrevious visible item
Arrow RightExpand or first child
Arrow LeftCollapse or parent
HomeFirst item
EndLast visible item
Enter/SpaceSelect item