import type { Mutable, Event, CancellationToken } from '@difizen/mana-common';
import { DisposableCollection } from '@difizen/mana-common';
import { Emitter, WaitUntilEvent } from '@difizen/mana-common';
import type { TreeNode } from './tree';
import { Tree, CompositeTreeNode } from './tree';
/**
 * A default implementation of the tree.
 */
export declare class TreeImpl implements Tree {
    protected _root: TreeNode | undefined;
    protected readonly onChangedEmitter: Emitter<void>;
    protected readonly onNodeRefreshedEmitter: Emitter<{
        children: readonly TreeNode[];
    } & TreeNode & WaitUntilEvent>;
    protected readonly toDispose: DisposableCollection;
    protected readonly onDidChangeBusyEmitter: Emitter<TreeNode>;
    readonly onDidChangeBusy: Event<TreeNode>;
    protected nodes: Record<string, Mutable<TreeNode> | undefined>;
    constructor();
    dispose(): void;
    get root(): TreeNode | undefined;
    set root(root: TreeNode | undefined);
    get onChanged(): Event<void>;
    protected fireChanged(): void;
    get onNodeRefreshed(): Event<CompositeTreeNode & WaitUntilEvent>;
    protected fireNodeRefreshed(parent: CompositeTreeNode): Promise<void>;
    getNode: (id: string | undefined) => TreeNode | undefined;
    validateNode: (node: TreeNode | undefined) => TreeNode | undefined;
    refresh(raw?: CompositeTreeNode): Promise<CompositeTreeNode | undefined>;
    protected resolveChildren(parent: CompositeTreeNode): Promise<TreeNode[]>;
    protected setChildren: (parent: CompositeTreeNode, children: TreeNode[]) => Promise<CompositeTreeNode | undefined>;
    protected removeNode: (node: TreeNode | undefined) => void;
    protected getRootNode(node: TreeNode): TreeNode;
    protected addNode(node: TreeNode | undefined): void;
    markAsBusy(raw: TreeNode, ms: number, token: CancellationToken): Promise<void>;
    protected doMarkAsBusy(node: Mutable<TreeNode>, ms: number, token: CancellationToken): Promise<void>;
    protected doSetBusy(node: Mutable<TreeNode>): void;
    protected doResetBusy(node: Mutable<TreeNode>): void;
}
//# sourceMappingURL=tree-impl.d.ts.map