import { BehaviorSubject, Observable, ReplaySubject, Subject } from 'rxjs';
import * as i0 from "@angular/core";
export declare type ViewPortMode = 'disabled' | 'fixed' | 'variable' | 'auto';
export declare type ViewPortDirection = 'horizontal' | 'vertical';
export declare type ViewPortMaxSize = number | 'auto';
/** Service de gestion du viewport d'une liste.
 * Ce service permet la gestion du viewport verticalement ou horizontalement.
 */
export declare class ViewPortService<T> {
    viewPort$: Observable<ViewPort<T>>;
    emptyViewPort: ViewPort<T>;
    mode$: BehaviorSubject<ViewPortMode>;
    items$: BehaviorSubject<readonly ViewPortItem<T>[]>;
    maxSize$: BehaviorSubject<ViewPortMaxSize>;
    ensureItem$: Subject<number | ViewPortItem<T>>;
    scrollPosition$: BehaviorSubject<number>;
    element$: ReplaySubject<HTMLElement>;
    itemsSize$: BehaviorSubject<number>;
    direction$: BehaviorSubject<ViewPortDirection>;
    debug: boolean;
    private refresh$;
    private deleteSizeCache$;
    private clear$;
    private lastCalculatedSize;
    private measureViewPort;
    constructor();
    deleteSizeCache(): void;
    clear(): void;
    refresh(clearMeasuredSize?: boolean): void;
    private log;
    static ɵfac: i0.ɵɵFactoryDeclaration<ViewPortService<any>, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<ViewPortService<any>>;
}
interface ViewPortParams {
    element: HTMLElement;
    maxSize: ViewPortMaxSize;
    mode: ViewPortMode;
    direction: ViewPortDirection;
    itemsSize: number;
    ensureParams: EnsureParams;
}
export interface EnsureParams {
    index: number;
    atEnd: boolean;
}
export interface ViewPort<T> extends ViewPortParams {
    beforeSize: number;
    afterSize: number;
    visibleItems: ReadonlyArray<ViewPortItem<T>>;
    startIndex: number;
    endIndex: number;
    viewPortSize: number;
    listSize: number;
    targetScrollPos: number;
    scrollPosition: number;
    items: ReadonlyArray<ViewPortItem<T>>;
}
export interface ViewPortItem<T> {
    size?: number;
    model?: T;
    trackBy?: unknown;
}
export {};
