import { SelectionModel } from '@angular/cdk/collections';
import { EventEmitter, OnChanges, OnInit, SimpleChanges, TemplateRef } from '@angular/core';
import { MatTreeFlatDataSource } from '@angular/material';
import { ToggleIconPosition, TreeviewNode } from './treeview.model';
interface FlatTreeNode<T> {
    id: string;
    text: string;
    iconPosition: ToggleIconPosition;
    expandable: boolean;
    enabled: boolean;
    selectable: boolean;
    selected: boolean;
    level: number;
    data: T;
}
export declare class TreeviewComponent implements OnInit, OnChanges {
    private flatNodeTransformer;
    nodes: TreeviewNode[];
    indent: number;
    indentUnit: string;
    defaultExpanded: boolean;
    nodeTemplate: TemplateRef<any>;
    expandedIcon: string;
    collapsedIcon: string;
    toggleOnNodeClick: boolean;
    readonly nodeClick: EventEmitter<TreeviewNode<any>>;
    readonly nodeSelected: EventEmitter<TreeviewNode<any>>;
    readonly nodesCollapsed: EventEmitter<TreeviewNode<any>[]>;
    readonly nodesExpanded: EventEmitter<TreeviewNode<any>[]>;
    private readonly matTreeInstance;
    private treeControl;
    private treeFlattener;
    /** @internal */
    readonly _dataSource: MatTreeFlatDataSource<TreeviewNode<any>, FlatTreeNode<TreeviewNode<any>>>;
    /**
     * Track selection of nodes with single selection mode.
     *
     * @internal
     */
    private _selectionModel;
    readonly selectionModel: SelectionModel<FlatTreeNode<TreeviewNode<any>>>;
    readonly selectedNode: TreeviewNode;
    constructor();
    ngOnInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    /**
     * Whether the tree should indent root level (level 0). If no node at root level has
     * `prefix` icon position, the root level indentation will be omitted.
     *
     * This also affects the tree's indentation.
     *
     * @internal
     */
    _shouldIndentRootLevel: () => boolean;
    /**
     * Calculate the necessary indent size based on current node's level.
     *
     * @returns The calculated indentation with current unit. E.g.: `40px`, `1.5em`.
     * @internal
     */
    _getIndentSize: (node: FlatTreeNode<TreeviewNode<any>>) => string;
    /** @internal */
    _onNodeClick(event: Event, dataNode: FlatTreeNode<TreeviewNode>): void;
    private setInitialSelectedNodes;
    private isValidNodeRef;
    private getDataNode;
    private findDataNodes;
    private getAncestors;
    private getAllDescendants;
    private expandAncestorsInternal;
    private getParent;
    isExpanded(node: TreeviewNode): boolean;
    isSelected(node: TreeviewNode): boolean;
    select(node: TreeviewNode, expandToNode?: boolean): void;
    deselect(node: TreeviewNode): void;
    expand(nodes: TreeviewNode[], recursive?: boolean): void;
    expandAll(): void;
    expandAncestors(node: TreeviewNode, recursive?: boolean): void;
    collapse(nodes: TreeviewNode[], recursive?: boolean): void;
    collapseAll(): void;
    toggle(node: TreeviewNode, recursive?: boolean): void;
    find(predicate: (node: TreeviewNode) => boolean): TreeviewNode[];
}
export {};
