import { EventEmitter, OnChanges, DoCheck, SimpleChanges } from "@angular/core";
import { ReplaySubject } from "rxjs";
import * as i0 from "@angular/core";
export type SortOrder = "asc" | "desc";
export type SortByFunction<T = any> = (data: T) => any;
export type SortBy<T = any> = string | SortByFunction<T> | (string | SortByFunction<T>)[];
export interface SortEvent {
    sortBy: SortBy;
    sortOrder: string;
}
export interface PageEvent {
    activePage: number;
    rowsOnPage: number;
    dataLength: number;
}
export interface DataEvent {
    length: number;
}
export declare class DataTable<T = any> implements OnChanges, DoCheck {
    private diff;
    inputData: T[];
    sortBy: SortBy<T>;
    sortOrder: SortOrder;
    sortByChange: EventEmitter<SortBy<T>>;
    sortOrderChange: EventEmitter<SortOrder>;
    rowsOnPage: number;
    activePage: number;
    private mustRecalculateData;
    data: T[];
    onSortChange: ReplaySubject<SortEvent>;
    onPageChange: EventEmitter<PageEvent>;
    constructor();
    getSort(): SortEvent;
    setSort(sortBy: SortBy<T>, sortOrder: SortOrder): void;
    getPage(): PageEvent;
    setPage(activePage: number, rowsOnPage: number): void;
    private calculateNewActivePage;
    private recalculatePage;
    ngOnChanges(changes: SimpleChanges): any;
    ngDoCheck(): any;
    private fillData;
    private caseInsensitiveIteratee;
    private compare;
    private sorter;
    static ɵfac: i0.ɵɵFactoryDeclaration<DataTable<any>, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<DataTable<any>, "table[mfData]", ["mfDataTable"], { "inputData": { "alias": "mfData"; "required": false; }; "sortBy": { "alias": "mfSortBy"; "required": false; }; "sortOrder": { "alias": "mfSortOrder"; "required": false; }; "rowsOnPage": { "alias": "mfRowsOnPage"; "required": false; }; "activePage": { "alias": "mfActivePage"; "required": false; }; }, { "sortByChange": "mfSortByChange"; "sortOrderChange": "mfSortOrderChange"; }, never, never, true, never>;
}
