import { BooleanInput, NumberInput } from '@angular/cdk/coercion';
import { ElementRef, EventEmitter, QueryList, TemplateRef } from '@angular/core';
import { Destroy } from '@deja-js/component/core';
import { Observable, Subject } from 'rxjs';
import { ViewPort, ViewPortDirection, ViewPortItem, ViewPortMode, ViewPortService } from './viewport.service';
import * as i0 from "@angular/core";
export declare type ViewPortScrollStyleType = 'scrollbar' | 'buttons';
export declare class ViewPortItemClassEvent<T> {
    item: ViewPortItem<T>;
    classes: Array<string>;
}
export declare class ViewPortComponent<T> extends Destroy {
    viewPortService: ViewPortService<T>;
    hasButtons: boolean;
    isHorizontal: boolean;
    /** Permet de définir un template d'élément par binding */
    viewPortItemTemplateExternal: TemplateRef<T>;
    readonly itemClass: EventEmitter<ViewPortItemClassEvent<T>>;
    private viewPortItemTemplateInternal;
    hasUpButton: boolean;
    hasDownButton: boolean;
    buttons$: Subject<QueryList<ElementRef<HTMLElement>>>;
    viewPort$: Observable<ViewPort<T>>;
    viewPortElementSize$: Subject<{
        size: number;
    }>;
    private _buttonsStep;
    private reloadViewPort$;
    set buttonsStep(value: NumberInput);
    get buttonsStep(): NumberInput;
    /** Set the list of models to render inside the viewport control */
    set models(models: ReadonlyArray<T>);
    /** Set the list of items to render inside the viewport control */
    set items(items: ReadonlyArray<ViewPortItem<T>>);
    /** Set the scrolling style
      * scrollbar: Classic scrollbars
      * buttons: A button before is placed at the top or at the left of the list, and a button after is placed at the right or the bottom of the list.
      */
    set scrollingStyle(value: ViewPortScrollStyleType);
    /** Set the direction of the items rendering
     * vertical: The item are displayed vertically
     * horizontal: The item are displayed horizontally
     */
    set direction(value: ViewPortDirection);
    /** Set the item size in fixed mode or the default item size before rendering in auto mode */
    set itemSize(value: NumberInput);
    protected set wrapperElement(element: ElementRef<HTMLElement>);
    protected set buttons(buttons: QueryList<ElementRef<HTMLElement>>);
    get viewPortItemTemplate(): TemplateRef<T>;
    set scrollPos(value: number);
    /**
     * Définit la méthode de calcul de la taille des éléments. Les valuers acceptées sont
     * disabled: Tous les éléments sont rendus. (< 100 éléments)
     * fixed: Seul les éléments visibles sont rendus. La taille des éléments est constante et définie par itemsSize. (performances ++)
     * variable: Seul les éléments visibles sont rendus. La taille des éléments est variable et définie par item.size. (performances +-)
     * auto: Seul les éléments visibles sont rendus. La taille des éléments est calculée automatiquement (performances --)
    */
    set viewPortMode(mode: ViewPortMode);
    set debugMode(value: BooleanInput);
    constructor(viewPortService: ViewPortService<T>);
    /** Recalcule le viewport. */
    refreshViewPort(clearMeasuredSize?: boolean): void;
    /** Rebind le viewport */
    reloadViewPort(): void;
    /** Efface le viewport */
    clearViewPort(): void;
    ensureVisible(item: number | ViewPortItem<T>): void;
    getCssSize(item: ViewPortItem<T>, defaultItemSize: number, mode: ViewPortMode): string;
    getItemSize(item: ViewPortItem<T>, defaultItemSize: number, mode: ViewPortMode): NumberInput;
    getItemClassName(item: ViewPortItem<T>): string;
    trackBy(_index: number, item: ViewPortItem<T>): unknown;
    static ɵfac: i0.ɵɵFactoryDeclaration<ViewPortComponent<any>, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<ViewPortComponent<any>, "viewport", never, { "viewPortItemTemplateExternal": "viewPortItemTemplateExternal"; "buttonsStep": "buttonsStep"; "models": "models"; "items": "items"; "scrollingStyle": "scrollingStyle"; "direction": "direction"; "itemSize": "itemSize"; "viewPortMode": "viewPortMode"; "debugMode": "debugMode"; }, { "itemClass": "itemClass"; }, ["viewPortItemTemplateInternal"], never, false>;
}
