/**
 * @module viw-webgl-react
 */
import * as Core from '../../core-viewers';
import { TreeItem } from 'react-complex-tree';
import { MapTree } from '../helpers/data';
import { AugmentedElement } from '../helpers/element';
/**
 * Custom visibility CSS classes to avoid clashes with tailwind
 */
export type NodeVisibility = 'vim-visible' | 'vim-undefined' | 'vim-hidden';
export type Grouping = 'Family' | 'Level' | 'Workset';
/**
 * Extension of TreeItem
 */
export type VimTreeNode = TreeItem<AugmentedElement> & {
    title: string;
    parent: number;
    visible: NodeVisibility;
};
/**
 * Returns map-based tree with elements organized hierarchically.
 * @param viewer current viewer.
 * @param elements elements to include in the treeview.
 * @returns
 */
export declare function toTreeData(vim: Core.Webgl.Vim, elements: AugmentedElement[], grouping: Grouping): BimTreeData;
export declare class BimTreeData {
    vim: Core.Webgl.Vim;
    nodes: Record<number, VimTreeNode>;
    elementToNode: Map<number, number>;
    constructor(vim: Core.Webgl.Vim, map: MapTree<string, AugmentedElement>);
    updateVisibility(): void;
    getRange(start: number, end: number): number[];
    getNodeFromElement(element: number): number;
    getLeafs(node: number, result?: number[]): number[];
    getSelection(elements: number[]): number[];
    countPredicate(node: any, predicate: (c: number) => boolean): "all" | "none" | "some";
    getChildren(node: number, includeSelf?: boolean, recursive?: boolean, result?: number[]): number[];
    getParent(node: number): number;
    getSiblings(node: number): number[];
    getAncestors(node: number): number[];
    private flatten;
}
