@furystack/shades-common-components
Version:
Common UI components for FuryStack Shades
61 lines • 1.99 kB
TypeScript
import { ObservableValue } from '@furystack/utils';
import type { ListServiceOptions } from './list-service.js';
import { ListService } from './list-service.js';
export type TreeServiceOptions<T> = ListServiceOptions<T> & {
/**
* Returns the children of a given node
* @param item The parent node
* @returns The child nodes, or an empty array if the node has no children
*/
getChildren: (item: T) => T[];
};
export type FlattenedTreeNode<T> = {
item: T;
level: number;
hasChildren: boolean;
isExpanded: boolean;
};
/**
* Service for managing tree state including expand/collapse, hierarchy navigation,
* and flattening the tree into a visible items list for rendering
*/
export declare class TreeService<T> extends ListService<T> {
private treeOptions;
expandedNodes: ObservableValue<Set<T>>;
rootItems: ObservableValue<T[]>;
flattenedNodes: ObservableValue<FlattenedTreeNode<T>[]>;
[Symbol.dispose](): void;
/**
* Checks whether a node is currently expanded
*/
isExpanded: (item: T) => boolean;
/**
* Expands a node, making its children visible
*/
expand: (item: T) => void;
/**
* Collapses a node, hiding its children
*/
collapse: (item: T) => void;
/**
* Toggles the expanded state of a node
*/
toggleExpanded: (item: T) => void;
/**
* Finds the parent of a given item in the tree
*/
getParent(item: T): T | undefined;
/**
* Flattens the tree based on which nodes are expanded, and syncs the result
* to both flattenedNodes and the inherited ListService items
*/
updateFlattenedNodes(): void;
/**
* Gets the FlattenedTreeNode for a given item
*/
getNodeInfo(item: T): FlattenedTreeNode<T> | undefined;
handleKeyDown(ev: KeyboardEvent): void;
handleItemDoubleClick(item: T): void;
constructor(treeOptions: TreeServiceOptions<T>);
}
//# sourceMappingURL=tree-service.d.ts.map