import { IPublicCascaderItem, ICascaderItem, CascaderValue } from './types';
export declare function clone<T extends IPublicCascaderItem>(from: IPublicCascaderItem[], cloneNode: (node: IPublicCascaderItem, parent: T) => T): T[];
export declare function insertPath<T extends IPublicCascaderItem>(trees: T[], path: IPublicCascaderItem[], createNode: (node: IPublicCascaderItem, parent: T | null) => T): T[];
export declare class Forest {
    private trees;
    constructor(from: IPublicCascaderItem[]);
    private build;
    reducePath<T>(callback: (accumulator: T, path: ICascaderItem[], terminate: () => void) => T, initialValue: T): T;
    reduceNode<T>(callback: (accumulator: T, node: ICascaderItem, terminate: () => void) => T, initialValue: T): T;
    reduceNodeDfs<T>(callback: (accumulator: T, node: ICascaderItem, terminate: () => void) => T, initialValue: T): T;
    sort(paths: Array<ICascaderItem[]>): Array<ICascaderItem[]>;
    clone(): Forest;
    insertPath(path: IPublicCascaderItem[]): this;
    getTrees(): ICascaderItem[];
    getPathByValue(values: CascaderValue[]): ICascaderItem[];
    getPaths(startNode: ICascaderItem, predicate?: (path: ICascaderItem[]) => boolean): any[];
}
