import TreeModel from 'tree-model';
import { DataTree } from './DataTree';
import { NodeRenderView } from './NodeRenderView';
import { RenderTree } from './RenderTree';
export type TreeNode = TreeModel.Node<NodeData>;
export type SearchPredicate = (node: TreeNode) => boolean;
export type AsyncSearchPredicate = (node: TreeNode) => Promise<boolean>;
export interface NodeData {
    raw: {
        [prop: string]: any;
    };
    children: TreeNode[];
    nestedNodes: TreeNode[];
    atomic: boolean;
    renderView?: NodeRenderView;
}
export declare class WorldTree {
    private renderTreeInstances;
    private readonly supressWarnings;
    static readonly ROOT_ID = "ROOT";
    constructor();
    getRenderTree(subtreeId?: string): RenderTree;
    getDataTree(): DataTree;
    private tree;
    _root: TreeNode;
    get root(): TreeNode;
    isRoot(node: TreeNode): boolean;
    parse(model: any): TreeModel.Node<any>;
    addSubtree(node: TreeNode): void;
    addNode(node: TreeNode, parent: TreeNode): void;
    removeNode(node: TreeNode): void;
    findAll(predicate: SearchPredicate, node?: TreeNode): Array<TreeNode>;
    findId(id: string, node?: TreeNode): TreeModel.Node<NodeData>;
    getAncestors(node: TreeNode): Array<TreeNode>;
    walk(predicate: SearchPredicate, node?: TreeNode): void;
    walkAsync(predicate: SearchPredicate, node?: TreeNode, priority?: number): Promise<boolean>;
    purge(subtreeId?: string): void;
}
