# Tree : VisualElement
This is the tree class. It provides a hierarchical view of nodes that can be expanded and collapsed,
with support for selection and scrolling.

## Properties

|Property|Type|Default|Description|
|---|---|---|---|
|nodes|table|{}|The tree structure containing node objects with {text, children} properties
|selectedNode|table?|nil|Currently selected node
|expandedNodes|table|{}|Table of nodes that are currently expanded
|scrollOffset|number|0|Current vertical scroll position
|horizontalOffset|number|0|Current horizontal scroll position
|nodeColor|color|white|Color of unselected nodes
|selectedColor|color|lightBlue|Background color of selected node

## Functions

|Method|Returns|Description|
|---|---|---|
|[Tree:collapseNode](#tree-collapsenode)|Tree|Collapses a node to hide its children
|[Tree:expandNode](#tree-expandnode)|Tree|Expands a node to show its children
|[Tree:getNodeSize](#tree-getnodesize)|number|Gets the size of the tree
|[Tree:onSelect](#tree-onselect)|Tree|Registers a callback for when a node is selected
|[Tree:toggleNode](#tree-togglenode)|Tree|Toggles between expanded and collapsed state


## Protected Functions

|Method|Returns|Description|
|---|---|---|
|Tree:init|Tree|Initializes the Tree instance
|Tree:mouse_click|boolean|Handles mouse click events for node selection and expansion
|Tree:mouse_scroll|boolean|Handles mouse scroll events for vertical scrolling
|Tree:render|-|Renders the tree with nodes, selection and scrolling

## Tree:collapseNode(node)
Collapses a node

### Parameters
* `node` `table` The node to collapse

### Returns
* `Tree` `self` The Tree instance

## Tree:expandNode(node)
Expands a node

### Parameters
* `node` `table` The node to expand

### Returns
* `Tree` `self` The Tree instance

## Tree:getNodeSize()
Gets the size of the tree

### Returns
* `number` `width` The width of the tree
* `number` `height` The height of the tree

## Tree:onSelect(callback)
Registers a callback for when a node is selected

### Parameters
* `callback` `function` The callback function

### Returns
* `Tree` `self` The Tree instance

## Tree:toggleNode(node)
Toggles a node's expanded state

### Parameters
* `node` `table` The node to toggle

### Returns
* `Tree` `self` The Tree instance


