import * as i0 from '@angular/core';
import { ElementRef, OnDestroy, OnChanges, AfterViewInit, EventEmitter, NgZone, SimpleChanges } from '@angular/core';

type ContainerRef = Window | ElementRef | any;
interface IInfiniteScrollEvent {
    currentScrollPosition: number;
}
interface IPositionElements {
    windowElement: ContainerRef;
    axis: any;
}
interface IPositionStats {
    height: number;
    scrolled: number;
    totalToScroll: number;
    isWindow?: boolean;
}
interface IResolver {
    container: ContainerRef;
    isWindow: boolean;
    axis: any;
}

declare class InfiniteScrollDirective implements OnDestroy, OnChanges, AfterViewInit {
    private element;
    private zone;
    scrolled: EventEmitter<IInfiniteScrollEvent>;
    scrolledUp: EventEmitter<IInfiniteScrollEvent>;
    infiniteScrollDistance: number;
    infiniteScrollUpDistance: number;
    infiniteScrollThrottle: number;
    infiniteScrollDisabled: boolean;
    infiniteScrollContainer: any;
    scrollWindow: boolean;
    immediateCheck: boolean;
    horizontal: boolean;
    alwaysCallback: boolean;
    fromRoot: boolean;
    private disposeScroller?;
    constructor(element: ElementRef, zone: NgZone);
    ngAfterViewInit(): void;
    ngOnChanges({ infiniteScrollContainer, infiniteScrollDisabled, infiniteScrollDistance, }: SimpleChanges): void;
    ngOnDestroy(): void;
    private setup;
    private handleOnScroll;
    private destroyScroller;
    static ɵfac: i0.ɵɵFactoryDeclaration<InfiniteScrollDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<InfiniteScrollDirective, "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", never, { "infiniteScrollDistance": { "alias": "infiniteScrollDistance"; "required": false; }; "infiniteScrollUpDistance": { "alias": "infiniteScrollUpDistance"; "required": false; }; "infiniteScrollThrottle": { "alias": "infiniteScrollThrottle"; "required": false; }; "infiniteScrollDisabled": { "alias": "infiniteScrollDisabled"; "required": false; }; "infiniteScrollContainer": { "alias": "infiniteScrollContainer"; "required": false; }; "scrollWindow": { "alias": "scrollWindow"; "required": false; }; "immediateCheck": { "alias": "immediateCheck"; "required": false; }; "horizontal": { "alias": "horizontal"; "required": false; }; "alwaysCallback": { "alias": "alwaysCallback"; "required": false; }; "fromRoot": { "alias": "fromRoot"; "required": false; }; }, { "scrolled": "scrolled"; "scrolledUp": "scrolledUp"; }, never, never, true, never>;
}

/**
 * @deprecated Import InfiniteScrollDirective instead
 */
declare class InfiniteScrollModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<InfiniteScrollModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<InfiniteScrollModule, never, [typeof InfiniteScrollDirective], [typeof InfiniteScrollDirective]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<InfiniteScrollModule>;
}

export { InfiniteScrollDirective, InfiniteScrollModule };
export type { ContainerRef, IInfiniteScrollEvent, IPositionElements, IPositionStats, IResolver };
