Headless Tree
An unopinionated and accessible Tree component for the web.
Example:
1export const SimpleExample = () => {2const tree = useTree<string>({3rootItemId: "folder",4getItemName: (item) => item.getItemData(),5isItemFolder: (item) => !item.getItemData().endsWith("item"),6dataLoader: {7getItem: (itemId) => itemId,8getChildren: (itemId) => [9`${itemId}-1`,10`${itemId}-2`,11`${itemId}-3`,12`${itemId}-1item`,13`${itemId}-2item`,14],15},16features: [17syncDataLoaderFeature,18selectionFeature,19hotkeysCoreFeature,20dragAndDropFeature,21],22});2324return (25<div ref={tree.registerElement} className="tree">26{tree.getItems().map((item) => (27<div28key={item.getId()}29className="treeitem-parent"30style={{ marginLeft: `${item.getItemMeta().level * 20}px` }}31>32<button33{...item.getProps()}34ref={item.registerElement}35className={cx("treeitem", {36focused: item.isFocused(),37expanded: item.isExpanded(),38selected: item.isSelected(),39folder: item.isFolder(),40})}41>42{item.getItemName()}43</button>44</div>45))}46</div>47);48};