import { BooleanInput, NumberInput } from '@angular/cdk/coercion';
import { AfterContentInit, AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, TemplateRef } from '@angular/core';
import { ControlValueAccessor, NgControl } from '@angular/forms';
import { DejaChildValidatorDirective, DejaClipboardService } from '@deja-js/component/core';
import { DejaItemComponent, DejaItemEvent, DejaItemsEvent, GroupingService, IItemBase, IItemTree, ItemListBase, ItemListService, IViewListResult, IViewPort, SortingService, ViewPortService } from '@deja-js/component/core/item-list';
import { IDejaDragContext, IDejaDragEvent, IDejaDropContext } from '@deja-js/component/dragdrop';
import { Observable, Subject } from 'rxjs';
import { DejaTreeListScrollEvent } from './tree-list-scroll-event';
import * as i0 from "@angular/core";
/** Composant de liste évoluée avec gestion de viewport et templating */
export declare class DejaTreeListComponent extends ItemListBase<unknown> implements AfterViewInit, AfterContentInit, ControlValueAccessor {
    viewPort: ViewPortService;
    elementRef: ElementRef;
    control: NgControl;
    private clipboardService;
    options: DejaItemComponent[];
    /** Exécuté lorsque la scrollbar change de position. */
    readonly scroll: EventEmitter<DejaTreeListScrollEvent>;
    /** Texte à afficher par default dans la zone de recherche */
    placeholder: string;
    /** Texte affiché si aucune donnée n'est présente dans le tableau */
    nodataholder: string;
    /** Correspond au ngModel du champ de filtrage ou recherche */
    query: string;
    /** Permet de définir un template de ligne par binding */
    itemTemplateExternal: TemplateRef<unknown>;
    /** Permet de définir un template de ligne parente par binding. */
    parentItemTemplateExternal: TemplateRef<unknown>;
    /** Permet de définir un template pour le loader par binding. */
    loaderTemplateExternal: TemplateRef<unknown>;
    /** Permet de définir un template d'entête de colonne par binding. */
    headerTemplateExternal: TemplateRef<unknown>;
    /** Permet de définir un template comme prefixe de la zone de recherche par binding. */
    searchPrefixTemplateExternal: TemplateRef<unknown>;
    /** Permet de définir un template comme suffixe de la zone de recherche par binding. */
    searchSuffixTemplateExternal: TemplateRef<unknown>;
    /** Largeur des éléments par defaut si différent de 100% */
    itemsWidth: number;
    /** Exécuté lorsque le déplacement d'une ligne est terminée. */
    readonly itemDragEnd: EventEmitter<IDejaDragEvent>;
    /** Exécuté lorsque le déplacement d'une ligne commence. */
    readonly itemDragStart: EventEmitter<IDejaDragEvent>;
    /** Exécuté lorsque l'utilisateur sélectionne ou désélectionne une ligne. */
    readonly selectedChange: EventEmitter<DejaItemsEvent<unknown> | DejaItemEvent<unknown>>;
    /** Exécuté lorsque le calcul du viewPort est executé. */
    readonly viewPortChanged: EventEmitter<IViewPort>;
    /** Internal use */
    input: ElementRef<HTMLInputElement>;
    _disabled: boolean;
    private itemTemplateInternal;
    private parentItemTemplateInternal;
    private loaderTemplateInternal;
    private headerTemplateInternal;
    private searchPrefixTemplateInternal;
    private searchSuffixTemplateInternal;
    setQuery$: Subject<string>;
    private _keyboardNavigation;
    private clickedItem;
    private rangeStartIndex;
    private filterExpression;
    private _searchArea;
    private _sortable;
    private _itemsDraggable;
    private hasCustomService;
    private hasLoadingEvent;
    private _modelIsValue;
    private keyboardNavigation$;
    private mouseUp$sub;
    private clearFilterExpression$;
    private writeValue$;
    private selectItems$;
    private contentInitialized$;
    /** Définit la longueur minimale de caractères dans le champ de recherche avant que la recherche ou le filtrage soient effectués */
    set minSearchlength(value: NumberInput);
    get minSearchlength(): NumberInput;
    constructor(changeDetectorRef: ChangeDetectorRef, viewPort: ViewPortService, elementRef: ElementRef, control: NgControl, clipboardService: DejaClipboardService);
    set listElememtRef(elem: ElementRef<HTMLElement>);
    keyboardNavigation(): boolean;
    /** Affiche un barre de recherche au dessus de la liste. */
    set searchArea(value: BooleanInput);
    get searchArea(): BooleanInput;
    /** Définit une valeur indiquant si en reactive form le model renvoyé doit être un obeject oue une valeur */
    set modelIsValue(value: BooleanInput);
    get modelIsValue(): BooleanInput;
    /** Retourne ou définit une valeur indiquant si les lignes de la liste peuvent être déplacées manuelement par l'utilisateur */
    set sortable(value: BooleanInput);
    get sortable(): BooleanInput;
    /** Retourne ou définit une valeur indiquant si les lignes peuvent être déplacées vers un autre composant */
    set itemsDraggable(value: BooleanInput);
    get itemsDraggable(): BooleanInput;
    set pageSize(value: NumberInput);
    /** Retourne le nombre de lignes à sauter en cas de pression sur les touches PageUp ou PageDown */
    get pageSize(): NumberInput;
    /** Définit un texte de conseil en cas d'erreur de validation ou autre */
    set hintLabel(value: string);
    /** Retourne un texte de conseil en cas d'erreur de validation ou autre */
    get hintLabel(): string;
    /** Définit la hauteur d'une ligne pour le calcul du viewport en pixels (la valeur par défaut sera utilisée si aucune valeur n'est setté). */
    set viewPortRowHeight(value: NumberInput);
    /**
     * Les valeurs acceptées en paramètre se trouvent dans l'enum ViewportMode (disabled, constant, variable ou auto)
     * Attention, une désactivation du viewport dégrade considérablement les performances de la liste et ne doit pas être activée si la liste
     * est suceptible de contenir beaucoup d'éléments.
     */
    set viewportMode(mode: string);
    /** Retourne le champ utilisé pour la liste des enfants d'un parent */
    set childrenField(value: string);
    /** Définit le champ utilisé pour la liste des enfants d'un parent */
    get childrenField(): string;
    /** Définit le champ à utiliser comme valeur d'affichage. */
    set textField(value: string);
    /** Définit le champ à utiliser comme valeur de comparaison. */
    set valueField(value: string);
    /** Définit le champ à utiliser comme champ de recherche.
     * Ce champ peut indiquer, un champ contenant une valeur, un texte indexé, ou une fonction.
     */
    set searchField(value: string);
    /** Retourne le champ à utiliser comme champ de recherche.
     * Ce champ peut indiquer, un champ contenant une valeur, un texte indexé, ou une fonction.
     */
    get searchField(): string;
    /** Définit la hauteur maximum avant que le composant affiche une scrollbar
     * spécifier une grande valeur pour ne jamais afficher de scrollbar
     * Spécifier 0 pour que le composant determine sa hauteur à partir du container
     */
    set maxHeight(value: NumberInput);
    /** Retourne la hauteur maximum avant que le composant affiche une scrollbar
     * spécifier une grande valeur pour ne jamais afficher de scrollbar
     * Spécifier 0 pour que le composant determine sa hauteur à partir du container
     */
    get maxHeight(): NumberInput;
    /** Définit la ligne courant ou ligne active */
    set currentItem(item: IItemBase<unknown>);
    /** Retourne la ligne courant ou ligne active */
    get currentItem(): IItemBase<unknown>;
    /** Retourne le nombre de niveau pour une liste hierarchique */
    get depthMax(): number;
    /** Définit une valeur indiquant si plusieurs lignes peuvent être sélectionées. */
    set multiSelect(value: BooleanInput);
    /** Retourne une valeur indiquant si plusieurs lignes peuvent être sélectionées. */
    get multiSelect(): BooleanInput;
    /** Définit la liste des éléments selectionés en mode multiselect */
    set selectedItems(value: IItemBase<unknown>[]);
    /** Retourne la liste des éléments selectionés en mode multiselect */
    get selectedItems(): IItemBase<unknown>[];
    /** Définit l'élément selectioné en mode single select */
    set selectedItem(value: unknown);
    /** Retourne l'éléments selectioné en mode single select */
    get selectedItem(): unknown;
    /** Définit le model selectioné en mode single select */
    set selectedModel(value: unknown);
    /** Retourne le model selectioné en mode single select */
    get selectedModel(): unknown;
    /** Définit la liste des models selectionés en mode multiselect */
    set selectedModels(value: unknown[]);
    /** Retourne la liste des models selectionés en mode multiselect */
    get selectedModels(): unknown[];
    /** Definit le service de liste utilisé par ce composant. Ce srevice permet de controller dynamiquement la liste, ou de faire du lazyloading. */
    set itemListService(itemListService: ItemListService<unknown>);
    /** Retourne le service de liste utilisé par ce composant. Ce srevice permet de controller dynamiquement la liste, ou de faire du lazyloading. */
    get itemListService(): ItemListService<unknown>;
    /** Definit le service utilisé pour le tri de la liste */
    set sortingService(value: SortingService);
    /** Definit le service utilisé pour le regroupement de la liste */
    set groupingService(value: GroupingService);
    /** Définit la liste des éléments */
    set items(items: IItemBase<unknown>[] | Promise<IItemBase<unknown>[]> | Observable<IItemBase<unknown>[]>);
    /**
     * Set a observable called before the list will be displayed
     */
    set loadingItems(fn: (query: string | RegExp, selectedItems: IItemBase<unknown>[]) => Observable<IItemBase<unknown>[]>);
    /**
     * Set a promise or an observable called before an item selection
     */
    set selectingItem(fn: (item: IItemBase<unknown>) => Promise<IItemBase<unknown>> | Observable<IItemBase<unknown>>);
    /**
     * Set a promise or an observable called before an item deselection
     */
    set unselectingItem(fn: (item: IItemBase<unknown>) => Promise<IItemBase<unknown>> | Observable<IItemBase<unknown>>);
    /**
     * Set a promise or an observable called before an item expand
     */
    set expandingItem(fn: (item: IItemTree<unknown>) => Promise<IItemTree<unknown>> | Observable<IItemTree<unknown>>);
    /**
     * Set a promise or an observable called before an item collapse
     */
    set collapsingItem(fn: (item: IItemTree<unknown>) => Promise<IItemTree<unknown>> | Observable<IItemTree<unknown>>);
    /** Définit la liste des éléments (tout type d'objet métier) */
    set models(items: unknown[] | Observable<unknown[]>);
    /** Permet de désactiver la liste */
    set disabled(value: BooleanInput);
    get disabled(): BooleanInput;
    /** Definit si le waiter doit être affiché dans la liste. */
    set waiter(value: BooleanInput);
    /** Retourne si le waiter doit être affiché dans la liste. */
    get waiter(): BooleanInput;
    set inputValidatorDirective(value: DejaChildValidatorDirective);
    set currentItemIndex(value: number);
    get currentItemIndex(): number;
    get itemTemplate(): TemplateRef<unknown>;
    get parentItemTemplate(): TemplateRef<unknown>;
    get loaderTemplate(): TemplateRef<unknown>;
    get headerTemplate(): TemplateRef<unknown>;
    get searchPrefixTemplate(): TemplateRef<unknown>;
    get searchSuffixTemplate(): TemplateRef<unknown>;
    get value(): unknown;
    set value(val: unknown);
    writeValue(value: IItemBase<unknown>[] | IItemBase<unknown>): void;
    registerOnChange(fn: (_a: unknown) => void): void;
    registerOnTouched(fn: () => void): void;
    setDisabledState(isDisabled: boolean): void;
    /** Change l'état d'expansion de toute les lignes parentes */
    toggleAll$(collapsed?: boolean): Observable<IItemTree<unknown>[]>;
    /** Change l'état d'expansion de toute les lignes parentes */
    toggleAll(collapsed?: boolean): void;
    /** Positionne a scrollbar pour assurer que l'élément spécifié soit visible */
    ensureItemVisible(item: IItemBase<unknown> | number): void;
    /** Efface le contenu de la liste */
    clearViewPort(): void;
    ngAfterContentInit(): void;
    ngAfterViewInit(): void;
    mousedown(e: MouseEvent): boolean;
    getDragContext(index: number): IDejaDragContext;
    getDropContext(): IDejaDropContext;
    dragLeave(event: DragEvent): void;
    onSelectionChange(): void;
    selectRange$(indexFrom: number, indexTo?: number): Observable<number>;
    toggleSelect$(items: IItemBase<unknown>[], state: boolean): Observable<IItemBase<unknown>[]>;
    calcViewList$(): Observable<IViewListResult<unknown>>;
    getItemClass(item: IItemTree<unknown>): string;
    onTouchedCallback: () => void;
    onChangeCallback: (_a?: unknown) => void;
    static ɵfac: i0.ɵɵFactoryDeclaration<DejaTreeListComponent, [null, null, null, { optional: true; self: true; }, { optional: true; }]>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DejaTreeListComponent, "deja-tree-list", never, { "placeholder": "placeholder"; "nodataholder": "nodataholder"; "query": "query"; "itemTemplateExternal": "itemTemplateExternal"; "parentItemTemplateExternal": "parentItemTemplateExternal"; "loaderTemplateExternal": "loaderTemplateExternal"; "headerTemplateExternal": "headerTemplateExternal"; "searchPrefixTemplateExternal": "searchPrefixTemplateExternal"; "searchSuffixTemplateExternal": "searchSuffixTemplateExternal"; "itemsWidth": "itemsWidth"; "minSearchlength": "min-search-length"; "searchArea": "searchArea"; "modelIsValue": "modelIsValue"; "sortable": "sortable"; "itemsDraggable": "itemsDraggable"; "pageSize": "pageSize"; "hintLabel": "hintLabel"; "viewPortRowHeight": "viewPortRowHeight"; "viewportMode": "viewportMode"; "childrenField": "childrenField"; "textField": "textField"; "valueField": "valueField"; "searchField": "searchField"; "maxHeight": "maxHeight"; "currentItem": "currentItem"; "multiSelect": "multiSelect"; "selectedItems": "selectedItems"; "selectedItem": "selectedItem"; "selectedModel": "selectedModel"; "selectedModels": "selectedModels"; "itemListService": "itemListService"; "sortingService": "sortingService"; "groupingService": "groupingService"; "items": "items"; "loadingItems": "loadingItems"; "selectingItem": "selectingItem"; "unselectingItem": "unselectingItem"; "expandingItem": "expandingItem"; "collapsingItem": "collapsingItem"; "models": "models"; "disabled": "disabled"; "waiter": "waiter"; }, { "scroll": "scroll"; "itemDragEnd": "itemDragEnd"; "itemDragStart": "itemDragStart"; "selectedChange": "selectedChange"; "viewPortChanged": "viewPortChanged"; }, ["itemTemplateInternal", "parentItemTemplateInternal", "loaderTemplateInternal", "headerTemplateInternal", "searchPrefixTemplateInternal", "searchSuffixTemplateInternal", "options"], never, false>;
}
