import { GenericInstanceFilter, HierarchyNode } from "@itwin/presentation-hierarchies";
import { SelectionChangeType } from "../UseSelectionHandler.js";
/** @internal */
export interface TreeModelRootNode {
    id: undefined;
    nodeData: undefined;
    hierarchyLimit?: number | "unbounded";
    instanceFilter?: GenericInstanceFilter;
    isLoading?: boolean;
}
/** @internal */
export interface TreeModelHierarchyNode {
    id: string;
    nodeData: HierarchyNode;
    label: string;
    children: boolean;
    isLoading?: boolean;
    isExpanded?: boolean;
    isSelected?: boolean;
    hierarchyLimit?: number | "unbounded";
    instanceFilter?: GenericInstanceFilter;
}
/** @internal */
export interface TreeModelGenericInfoNode {
    id: string;
    parentId: string | undefined;
    type: "Unknown";
    message: string;
}
/** @internal */
export interface TreeModelNoFilterMatchesInfoNode {
    id: string;
    parentId: string | undefined;
    type: "NoFilterMatches";
}
/** @internal */
export interface TreeModelResultSetTooLargeInfoNode {
    id: string;
    parentId: string | undefined;
    type: "ResultSetTooLarge";
    resultSetSizeLimit: number;
}
/** @internal */
export type TreeModelInfoNode = TreeModelGenericInfoNode | TreeModelResultSetTooLargeInfoNode | TreeModelNoFilterMatchesInfoNode;
/** @internal */
export type TreeModelNode = TreeModelHierarchyNode | TreeModelInfoNode;
/** @internal */
export declare function isTreeModelHierarchyNode(node: TreeModelHierarchyNode | TreeModelInfoNode | TreeModelRootNode): node is TreeModelHierarchyNode;
/** @internal */
export declare function isTreeModelInfoNode(node: TreeModelHierarchyNode | TreeModelInfoNode | TreeModelRootNode): node is TreeModelInfoNode;
/** @internal */
export interface TreeModel {
    parentChildMap: Map<string | undefined, string[]>;
    idToNode: Map<string, TreeModelNode>;
    rootNode: TreeModelRootNode;
}
/** @internal */
export declare namespace TreeModel {
    function expandNode(model: TreeModel, nodeId: string, isExpanded: boolean): "none" | "loadChildren" | "reloadChildren";
    /** @internal */
    function addHierarchyPart(model: TreeModel, rootId: string | undefined, hierarchyPart: TreeModel): void;
    function removeSubTree(model: TreeModel, parentId: string | undefined): void;
    function setHierarchyLimit(model: TreeModel, nodeId: string | undefined, limit?: number | "unbounded"): boolean;
    function setInstanceFilter(model: TreeModel, nodeId: string | undefined, filter?: GenericInstanceFilter): boolean;
    function selectNodes(model: TreeModel, nodeIds: Array<string>, changeType: SelectionChangeType): void;
    function isNodeSelected(model: TreeModel, nodeId: string): boolean;
    function getNode(model: TreeModel, nodeId: string | undefined): TreeModelNode | TreeModelRootNode | undefined;
    function setIsLoading(model: TreeModel, nodeId: string | undefined, isLoading: boolean): void;
}
//# sourceMappingURL=TreeModel.d.ts.map