import { ChangeDetectorRef } from '@angular/core';
import { ControlValueAccessor, FormControl } from '@angular/forms';
import { AbstractControlValueAccessor } from '../abstract-control-value-accesor';
import { Observable } from 'rxjs';
import { SelectionModel } from '@angular/cdk/collections';
import { FlatTreeControl } from '@angular/cdk/tree';
import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree';
import { TranslateService } from '@ngx-translate/core';
import { MatDialog } from '@angular/material';
/**
 * Node for to-do item
 */
export declare class ItemNode {
    id: number;
    name: string;
    children: ItemNode[];
    parent: number;
    checked: boolean;
}
/** Flat to-do item node with expandable and level information */
export declare class ItemFlatNode {
    id: number;
    name: string;
    parent: number;
    level: number;
    expandable: boolean;
    checked: boolean;
    children: ItemFlatNode[];
}
export declare const INPUT_INPUT_CONTROL_VALUE_ACCESSOR: any;
export declare class TreeSelectorComponent extends AbstractControlValueAccessor implements ControlValueAccessor {
    private translator;
    dialog: MatDialog;
    private changeDetector;
    control: FormControl;
    /** Map from flat node to nested node. This helps us finding the nested node to be modified */
    flatNodeMap: Map<ItemFlatNode, ItemNode>;
    /** Map from nested node to flattened node. This helps us to keep the same object for selection */
    nestedNodeMap: Map<ItemNode, ItemFlatNode>;
    /** A selected parent node to be inserted */
    selectedParent: ItemFlatNode | null;
    treeControl: FlatTreeControl<ItemFlatNode>;
    treeFlattener: MatTreeFlattener<ItemNode, ItemFlatNode>;
    dataSource: MatTreeFlatDataSource<ItemNode, ItemFlatNode>;
    /** The selection for checklist */
    checklistSelection: SelectionModel<ItemFlatNode>;
    selectMultiple: boolean;
    /** Component Attributes */
    label: string;
    required: boolean;
    searchable: boolean;
    flattenedItems: any[];
    treeItems: any;
    masterNode: number;
    outputItems: number[];
    outputPreview: any[];
    constructor(translator: TranslateService, dialog: MatDialog, changeDetector: ChangeDetectorRef);
    ngOnInit(): void;
    private flattenItems(items);
    selectItems: any;
    private loadSearchData();
    generateTree(input: any, parent: any): ItemFlatNode[];
    refrescaPadre(node: any, status: any): void;
    checkNode(event: any, node: ItemFlatNode): void;
    changeAllDescendants(node: any, status: any): void;
    getSelectedItems(node: any): void;
    getOutputNodes(node: any): void;
    loadData(): void;
    getLevel: (node: ItemFlatNode) => number;
    isExpandable: (node: ItemFlatNode) => boolean;
    getChildren: (node: ItemFlatNode) => Observable<ItemFlatNode[]>;
    hasChild: (_: number, _nodeData: ItemFlatNode) => boolean;
    hasNoContent: (_: number, _nodeData: ItemFlatNode) => boolean;
    /**
     * Transformer to convert nested node to flat node. Record the nodes in maps for later use.
     */
    transformer: (node: ItemFlatNode, level: number) => ItemFlatNode;
    toggleTree(): void;
}
