# List
_This is the list class. It provides a scrollable list of selectable items with support for 
custom item rendering, separators, and selection handling._

Extends: `VisualElement`

## Properties

|Property|Type|Default|Description|
|---|---|---|---|
|items|table|{}|List of items to display. Items can be tables with properties including selected state|
|selectable|boolean|true|Whether items in the list can be selected|
|multiSelection|boolean|false|Whether multiple items can be selected at once|
|offset|number|0|Current scroll offset for viewing long lists|
|selectedBackground|color|blue|Background color for selected items|
|selectedForeground|color|white|Text color for selected items|

## Events

|Event|Parameters|Description|
|---|---|---|
|onSelect|`index number, item table`|Fired when an item is selected|

## Functions

|Method|Returns|Description|
|---|---|---|
|[List.new](#list-new)|List|Creates a new List instance|
|[List:init](#list-init-props-basalt)|List|Initializes the List instance|
|[List:addItem](#list-additem-text)|List|Adds an item to the list|
|[List:removeItem](#list-removeitem-index)|List|Removes an item from the list|
|[List:clear](#list-clear)|List|Clears all items from the list|
|[List:getSelectedItems](#list-getselecteditems)|table|Gets the currently selected items|
|[List:getSelectedItem](#list-getselecteditem)|selected|Gets first selected item|
|[List:mouse_click](#list-mouse-click-button-x-y)|boolean|Handles mouse click events|
|[List:mouse_scroll](#list-mouse-scroll-direction-x-y)|boolean|Handles mouse scroll events|
|[List:onSelect](#list-onselect-callback)|List|Registers a callback for the select event|
|[List:scrollToBottom](#list-scrolltobottom)|List|Scrolls the list to the bottom|
|[List:scrollToTop](#list-scrolltotop)|List|Scrolls the list to the top|
|[List:render](#list-render)|-|Renders the list|

## List.new()

Creates a new List instance

### Returns
* `List` `self` The newly created List instance

## List:init(props, basalt)
### Parameters
* `props` `table` The properties to initialize the element with
* `basalt` `table` The basalt instance

### Returns
* `List` `self` The initialized instance

## List:addItem(text)

Adds an item to the list

### Parameters
* `text` `string|table` The item to add (string or item table)

### Returns
* `List` `self` The List instance

### Usage
```lua
list:addItem("New Item")
list:addItem({text="Item", callback=function() end})
```

## List:removeItem(index)

Removes an item from the list

### Parameters
* `index` `number` The index of the item to remove

### Returns
* `List` `self` The List instance

### Usage
```lua
list:removeItem(1)
```

## List:clear()

Clears all items from the list

### Returns
* `List` `self` The List instance

### Usage
```lua
list:clear()
```

## List:getSelectedItems()

Gets the currently selected items

### Returns
* `table` `selected` List of selected items

### Usage
```lua
local selected = list:getSelectedItems()
```

## List:getSelectedItem()

Gets first selected item

### Returns
* `selected` `The` first item

## List:mouse_click(button, x, y)
### Parameters
* `button` `number` The mouse button that was clicked
* `x` `number` The x-coordinate of the click
* `y` `number` The y-coordinate of the click

### Returns
* `boolean` `Whether` the event was handled

## List:mouse_scroll(direction, x, y)
### Parameters
* `direction` `number` The direction of the scroll (1 for down, -1 for up)
* `x` `number` The x-coordinate of the scroll
* `y` `number` The y-coordinate of the scroll

### Returns
* `boolean` `Whether` the event was handled

## List:onSelect(callback)

Registers a callback for the select event

### Parameters
* `callback` `function` The callback function to register

### Returns
* `List` `self` The List instance

### Usage
```lua
list:onSelect(function(index, item) print("Selected item:", index, item) end)
```

## List:scrollToBottom()

Scrolls the list to the bottom

### Returns
* `List` `self` The List instance

## List:scrollToTop()

Scrolls the list to the top

### Returns
* `List` `self` The List instance

## List:render()