This document provides a comprehensive guide to implementing a tree component with Marko JS. The component leverages @zag-js/tree-view
for creating interactive and accessible tree structures, and is structured into a main Tree
component, with Branch
, Item
, and Action
sub-components for flexibility and reusability.
The root component that orchestrates the display and functionality of the tree structure.
- id (string, required): Unique identifier for the tree instance.
- class (string, optional): Custom class for styling purposes.
- renderBody (Marko.Body, optional): Custom content that can be rendered inside the tree structure.
- branch (
BranchInput
[], optional): Array of branches to be rendered within the tree. - item (
ItemInput
[], optional): Array of items to be rendered within the tree. - action (
ActionInput
[], optional): Array of actions applicable to the tree.
<Tree id="myTree" class="custom-tree" branch=[...] item=[...] action=[...] />
Represents a branch within the tree, capable of holding items, nested branches, and actions.
- branchProps (object, required): Contains id, depth, and optionally disabled.
- class (string, optional): CSS class for the branch.
- name (string, optional): Name or label of the branch.
- renderBody (Marko.Body, optional): Slot for custom content.
- branch (
Input
[], optional): Nested branches. - item (
ItemInput
[], optional): Items within the branch. - action (
ActionInput
[], optional): Actions linked to the branch.
<Branch branchProps={ id: "branch1", depth: 1 } name="Branch 1" item=[...] />
Defines an item within a branch, containing properties for identification and customization.
- branchProps (object, required): Includes depth, id, and optionally disabled.
- class (string, optional): Custom styling class.
- name (string, optional): Label of the item.
- renderBody (Marko.Body, optional): Custom content rendering slot.
- action (
ActionInput
[], optional): Actions applicable to the item.
<Item branchProps={ id: "item1", depth: 2} name="Item 1" />
Allows adding interactive elements or actions to branches or items for enhanced user interaction.
- renderBody (Marko.Body, optional): Custom content or interaction elements.
- class (string, optional): Styling class.
- onClick ((target: PointerEvent) => void, optional): Click event handler.
<Action class="action-button" onClick=(event) => { /* Handle click */ } />