import { AbstractPaginationDataSource, AbstractPaginationDataSourceMetadata, PageEvent, PaginatorLike } from '@rxap/data-source/pagination';
import type { HttpDataSource } from '@rxap/data-source/http';
import { HttpDataSourceOptions, HttpDataSourceViewer } from '@rxap/data-source/http';
import { BaseDataSourceViewer } from '@rxap/data-source';
import { Observable, TeardownLogic } from 'rxjs';
import { Constructor } from '@rxap/utilities';
import * as i0 from "@angular/core";
export interface PaginationData<Data = any> {
    /**
     * The paged data
     */
    data: Data[];
    /**
     * The page item count
     */
    size?: number;
    /**
     * The page index
     */
    page?: number;
    /**
     * The total number of items
     */
    total: number;
}
export interface HttpPaginationDataSourceViewer extends BaseDataSourceViewer {
    readonly viewChange: Observable<PageEvent>;
}
export type HttpPaginationDataSourceMetadata = AbstractPaginationDataSourceMetadata;
export type PageEventToHttpOptionsFunction = (event: PageEvent) => HttpDataSourceOptions;
export declare class HttpPaginationDataSource<Data> extends AbstractPaginationDataSource<Data> {
    private readonly dataSource;
    constructor(dataSource: HttpDataSource<PaginationData<Data>>, paginator?: PaginatorLike | null, pageEventToHttpOptions?: any | null, metadata?: HttpPaginationDataSourceMetadata);
    pageEventToHttpOptions(event: PageEvent): HttpDataSourceOptions;
    protected _connect(viewer: HttpDataSourceViewer): [Observable<Data[]>, TeardownLogic];
    static ɵfac: i0.ɵɵFactoryDeclaration<HttpPaginationDataSource<any>, [null, { optional: true; }, { optional: true; }, { optional: true; }]>;
    static ɵprov: i0.ɵɵInjectableDeclaration<HttpPaginationDataSource<any>>;
}
export declare function RxapHttpPaginationDataSource<Data>(metadata: HttpPaginationDataSourceMetadata, className?: string, packageName?: string): (target: Constructor<HttpPaginationDataSource<Data>>) => void;
