import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, OnDestroy, QueryList } from '@angular/core';
import { Observable } from 'rxjs';
import { CommonFormControl } from '../form';
import { InputComponent } from '../input/input.component';
import { Bem } from '../internal/utils';
import { TrackFn } from '../select/select.types';
import { TooltipDirective } from '../tooltip/tooltip.directive';
import { TreeNode } from './tree-select.types';
import * as i0 from "@angular/core";
export declare class TreeSelectComponent<T = unknown> extends CommonFormControl<T> {
    get nodesData(): TreeNode<T>[];
    set nodesData(val: TreeNode<T>[]);
    loading: boolean;
    placeholder: string;
    filterable: boolean;
    clearable: boolean;
    leafOnly: boolean;
    filterFn: (filterString: string, node: TreeNode<T>) => boolean;
    trackFn: TrackFn<T>;
    labelFn?: (value: T) => string;
    filterChange: EventEmitter<string>;
    show: EventEmitter<void>;
    hide: EventEmitter<void>;
    protected selectRef: ElementRef<HTMLElement>;
    protected tooltipRef: TooltipDirective;
    nodeListRef: ElementRef<HTMLElement>;
    inputRef: InputComponent;
    private _nodesData;
    private _filterString;
    private readonly filterString$$;
    filterString$: Observable<string>;
    containerWidth: string;
    displayText: string;
    flattedNodes: Array<TreeNode<T>>;
    get isClearable(): string;
    get opened(): boolean;
    get inputReadonly(): boolean;
    get filterString(): string;
    set filterString(val: string);
    updatePosition(): void;
    onVisibleNodes(visible: boolean): void;
    onInput(event: Event): void;
    onNodeClick(node: TreeNodeComponent<T>): void;
    getVisibleNodeCount(): number;
    selectNode(node: TreeNodeComponent<T>): void;
    onKeyDown(event: KeyboardEvent): void;
    openOption(): void;
    closeOption(): void;
    updateSelectDisplay(value: any): void;
    clearValue(event: Event): void;
    protected valueIn(v: T): T;
    getPlaceholder(): string;
    getInputValue(): string;
    trackByLabel: (_: number, node: TreeNode<T>) => string;
    private flatNodesData;
    private getLabelFromNode;
    private _filterFn;
    private _trackFn;
    static ɵfac: i0.ɵɵFactoryDeclaration<TreeSelectComponent<any>, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<TreeSelectComponent<any>, "aui-tree-select", never, { "nodesData": { "alias": "nodesData"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "filterable": { "alias": "filterable"; "required": false; }; "clearable": { "alias": "clearable"; "required": false; }; "leafOnly": { "alias": "leafOnly"; "required": false; }; "filterFn": { "alias": "filterFn"; "required": false; }; "trackFn": { "alias": "trackFn"; "required": false; }; "labelFn": { "alias": "labelFn"; "required": false; }; }, { "filterChange": "filterChange"; "show": "show"; "hide": "hide"; }, never, ["aui-tree-node-placeholder"], true, never>;
    static ngAcceptInputType_filterable: unknown;
    static ngAcceptInputType_clearable: unknown;
    static ngAcceptInputType_leafOnly: unknown;
}
export declare class TreeNodeComponent<T> implements AfterViewInit, OnDestroy {
    private readonly cdr;
    bem: Bem;
    private _nodeData;
    private readonly nodeData$$;
    private readonly destroy$$;
    get nodeData(): TreeNode<T>;
    set nodeData(val: TreeNode<T>);
    leafOnly: boolean;
    titleRef: ElementRef<HTMLElement>;
    childNodes: QueryList<TreeNodeComponent<T>>;
    selected: boolean;
    visible: boolean;
    isLeaf: boolean;
    private readonly select;
    selected$: Observable<boolean>;
    selfVisible$: Observable<boolean>;
    visible$: Observable<boolean>;
    constructor(select: TreeSelectComponent<T>, cdr: ChangeDetectorRef);
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    onClick(): void;
    switchExpanded(): void;
    getIcon(): string;
    trackByLabel(_: number, data: TreeNode<T>): string;
    scrollToNode(node: TreeNodeComponent<T>): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<TreeNodeComponent<any>, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<TreeNodeComponent<any>, "aui-tree-node", never, { "nodeData": { "alias": "nodeData"; "required": false; }; "leafOnly": { "alias": "leafOnly"; "required": false; }; }, {}, never, never, true, never>;
    static ngAcceptInputType_leafOnly: unknown;
}
