import { NumberInput } from '@angular/cdk/coercion';
import { Destroy } from '@deja-js/component/core';
import { BehaviorSubject, Observable, ReplaySubject } from 'rxjs';
import * as i0 from "@angular/core";
/** Service de gestion du viewport d'une liste.
 * Ce service permet la gestion du viewport verticalement ou horizontalement.
 */
export declare class ViewPortService extends Destroy {
    static itemDefaultSize: number;
    viewPort$: Observable<IViewPort>;
    emptyViewPort: IViewPort;
    mode$: BehaviorSubject<string>;
    items$: BehaviorSubject<IViewPortItem[]>;
    maxSize$: BehaviorSubject<NumberInput>;
    ensureItem$: BehaviorSubject<number | IViewPortItem>;
    scrollPosition$: BehaviorSubject<number>;
    element$: ReplaySubject<HTMLElement>;
    itemsSize$: BehaviorSubject<number>;
    direction$: BehaviorSubject<string>;
    ensureParams$: Observable<IEnsureParams>;
    viewPortResult$: BehaviorSubject<IViewPort>;
    private refresh$;
    private deleteSizeCache$;
    private lastCalculatedSize;
    private measureViewPort;
    private _mode;
    private _itemsSize;
    private _direction;
    private _scrollPosition;
    private viewPort;
    private ignoreScrollCount;
    get mode(): string;
    get itemsSize(): number;
    get direction(): string;
    constructor();
    deleteSizeCache(): void;
    clear(): void;
    refresh(params?: IViewPortRefreshParams): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<ViewPortService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<ViewPortService>;
}
export interface IEnsureParams {
    index: number;
    atEnd: boolean;
}
export interface IViewPort {
    beforeSize: number;
    afterSize: number;
    visibleItems: IViewPortItem[];
    startIndex: number;
    endIndex: number;
    viewPortSize: number;
    listSize: number;
    scrollPos: number;
    items: IViewPortItem[];
}
export interface IViewPortItem {
    size?: number;
}
export interface IViewPortRefreshParams {
    items: IViewPortItem[];
    clearMeasuredSize: boolean;
}
