import { DataSource } from '@angular/cdk/collections';
import { MatPaginator } from '@angular/material/paginator';
import { BehaviorSubject, Subscription } from 'rxjs';
import { MdtMultiSort } from './multi-sort.directive';
import { TableFilter } from './table-filter';
export declare class MdtTableDataSource<T> extends DataSource<T> {
    private readonly _data;
    /** Stream emitting render data to the table (depends on ordered data changes). */
    private readonly _renderData;
    /** Stream that emits when a new filter string is set on the data source. */
    private readonly _filter;
    private readonly _filters;
    /** Used to react to internal changes of the paginator that are made by the data source itself. */
    private readonly _internalPageChanges;
    _renderChangesSubscription: Subscription | null;
    filteredData: T[];
    constructor(initialData?: T[]);
    /** Array of data that should be rendered by the table, where each object represents one row. */
    get data(): T[];
    set data(data: T[]);
    get filter(): string;
    set filter(filter: string);
    get filters(): TableFilter[];
    set filters(filters: TableFilter[]);
    get sort(): MdtMultiSort | null;
    set sort(sort: MdtMultiSort | null);
    private _multiSort;
    get paginator(): MatPaginator | null;
    set paginator(paginator: MatPaginator | null);
    private _paginator;
    sortingDataAccessor: (data: T, sortHeaderId: string) => string | number;
    connect(): BehaviorSubject<T[]>;
    disconnect(): void;
    _updateChangeSubscription(): void;
    _filterData(data: T[]): T[];
    filterPredicate: (data: T, filter: string) => boolean;
    _pageData(data: T[]): T[];
    _orderData(data: T[]): T[];
    sortData: ((data: T[], sort: MdtMultiSort) => T[]);
    compareValues(valueA: string | number, valueB: string | number, direction: string): number;
    _updatePaginator(filteredDataLength: number): void;
}
