import { IIdentityProvider } from "../list/list.js"; import { ICollapseStateChangeEvent, ITreeElement, ITreeFilter, ITreeFilterDataResult, ITreeListSpliceData, ITreeModel, ITreeModelSpliceEvent, ITreeNode, TreeVisibility } from "./tree.js"; import { Event } from "../../../common/event.js"; export interface IIndexTreeNode extends ITreeNode { readonly parent: IIndexTreeNode | undefined; readonly children: IIndexTreeNode[]; visibleChildrenCount: number; visibleChildIndex: number; collapsible: boolean; collapsed: boolean; renderNodeCount: number; visibility: TreeVisibility; visible: boolean; filterData: TFilterData | undefined; lastDiffIds?: string[]; } export declare function isFilterResult(obj: unknown): obj is ITreeFilterDataResult; export declare function getVisibleState(visibility: boolean | TreeVisibility): TreeVisibility; export interface IIndexTreeModelOptions { readonly collapseByDefault?: boolean; readonly allowNonCollapsibleParents?: boolean; readonly filter?: ITreeFilter; readonly autoExpandSingleChildren?: boolean; } export interface IIndexTreeModelSpliceOptions { /** * If set, child updates will recurse the given number of levels even if * items in the splice operation are unchanged. `Infinity` is a valid value. */ readonly diffDepth?: number; /** * Identity provider used to optimize splice() calls in the IndexTree. If * this is not present, optimized splicing is not enabled. * * Warning: if this is present, calls to `setChildren()` will not replace * or update nodes if their identity is the same, even if the elements are * different. For this, you should call `rerender()`. */ readonly diffIdentityProvider?: IIdentityProvider; /** * Callback for when a node is created. */ onDidCreateNode?: (node: ITreeNode) => void; /** * Callback for when a node is deleted. */ onDidDeleteNode?: (node: ITreeNode) => void; } export declare class IndexTreeModel, TFilterData = void> implements ITreeModel { private user; readonly rootRef: never[]; private root; private eventBufferer; private readonly _onDidSpliceModel; readonly onDidSpliceModel: Event>; private readonly _onDidSpliceRenderedNodes; readonly onDidSpliceRenderedNodes: Event>; private readonly _onDidChangeCollapseState; readonly onDidChangeCollapseState: Event>; private readonly _onDidChangeRenderNodeCount; readonly onDidChangeRenderNodeCount: Event>; private collapseByDefault; private allowNonCollapsibleParents; private filter?; private autoExpandSingleChildren; private readonly refilterDelayer; constructor(user: string, rootElement: T, options?: IIndexTreeModelOptions); splice(location: number[], deleteCount: number, toInsert?: Iterable>, options?: IIndexTreeModelSpliceOptions): void; private spliceSmart; private spliceSimple; rerender(location: number[]): void; has(location: number[]): boolean; getListIndex(location: number[]): number; getListRenderCount(location: number[]): number; isCollapsible(location: number[]): boolean; setCollapsible(location: number[], collapsible?: boolean): boolean; isCollapsed(location: number[]): boolean; setCollapsed(location: number[], collapsed?: boolean, recursive?: boolean): boolean; private _setCollapseState; private _setListNodeCollapseState; private _setNodeCollapseState; expandTo(location: number[]): void; refilter(): void; private createTreeNode; private updateNodeAfterCollapseChange; private _updateNodeAfterCollapseChange; private updateNodeAfterFilterChange; private _updateNodeAfterFilterChange; private _updateAncestorsRenderNodeCount; private _filterNode; private hasTreeNode; private getTreeNode; private getTreeNodeWithListIndex; private getParentNodeWithListIndex; getNode(location?: number[]): ITreeNode; getNodeLocation(node: ITreeNode): number[]; getParentNodeLocation(location: number[]): number[] | undefined; getFirstElementChild(location: number[]): T | undefined; getLastElementAncestor(location?: number[]): T | undefined; private _getLastElementAncestor; }