import { DataSource } from '@angular/cdk/collections';
import { FlatTreeControl } from '@angular/cdk/tree';
import { BehaviorSubject, Observable } from 'rxjs';
import { TreeNode } from '../models/tree-node.interface';
import { TreeResponse } from '../models/tree-response.interface';
import * as i0 from "@angular/core";
export declare abstract class TreeService<T extends TreeNode> extends DataSource<T> {
    readonly treeControl: FlatTreeControl<T>;
    treeNodesSource: BehaviorSubject<T[]>;
    get treeNodes(): T[];
    set treeNodes(nodes: T[]);
    constructor();
    abstract getSubNodes(parentNodeId: string, skipCount?: number, maxItems?: number, searchTerm?: string): Observable<TreeResponse<T>>;
    /**
     * Expands node applying subnodes to it.
     *
     * @param nodeToExpand Node to be expanded
     * @param subNodes List of nodes that will be added as children of expanded node
     */
    expandNode(nodeToExpand: T, subNodes: T[]): void;
    /**
     * Collapses a node removing all children from it.
     *
     * @param nodeToCollapse Node to be collapsed
     */
    collapseNode(nodeToCollapse: T): void;
    /**
     * Append more child nodes to already expanded parent node
     *
     * @param nodeToAppend Expanded parent node
     * @param subNodes List of nodes that will be added as children of expanded node
     */
    appendNodes(nodeToAppend: T, subNodes: T[]): void;
    /**
     * Removes provided node from the tree
     *
     * @param node Node to be removed
     */
    removeNode(node: T): void;
    /**
     * Gets children of the node
     *
     * @param parentNode Parent node
     * @returns children of parent node
     */
    getChildren(parentNode: T): T[];
    /**
     * Checks if tree is empty
     *
     * @returns boolean
     */
    isEmpty(): boolean;
    /**
     * Gets parent node of given node. If node with parentNodeId is not found it returns undefined.
     *
     * @param parentNodeId Id of a parent node to be found
     * @returns parent node or undefined when not found
     */
    getParentNode(parentNodeId: string): T | undefined;
    connect(): Observable<T[]>;
    disconnect(): void;
    private collapseInnerNode;
    static ɵfac: i0.ɵɵFactoryDeclaration<TreeService<any>, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<TreeService<any>>;
}
