import { AbstractPaginationDataSource, AbstractPaginationDataSourceMetadata, PaginatorLike } from '@rxap/data-source/pagination';
import { ToggleSubject } from '@rxap/rxjs';
import { Constructor } from '@rxap/utilities';
import { Observable } from 'rxjs';
import * as i0 from "@angular/core";
export type SortDirection = 'asc' | 'desc' | '';
export interface Sort {
    /** The id of the column being sorted. */
    active: string;
    /** The sort direction. */
    direction: SortDirection;
}
export interface SortLike {
    disabled?: boolean;
    sortChange?: Observable<Sort>;
    /** The id of the most recently sorted MatSortable. */
    active: string;
    /**
     * The direction to set when an MatSortable is initially sorted.
     * May be overriden by the MatSortable's sort start.
     */
    start: SortDirection;
    /** The sort direction of the currently active MatSortable. */
    direction: SortDirection;
}
export interface FilterLike {
    change: Observable<Record<string, any> | string>;
    current: Record<string, any> | string;
}
export type AbstractTableDataSourceMetadata = AbstractPaginationDataSourceMetadata;
export declare abstract class AbstractTableDataSource<Data extends Record<string, any> = any, Parameters = any> extends AbstractPaginationDataSource<Data> {
    readonly loading$: ToggleSubject;
    sort?: SortLike;
    filter?: FilterLike;
    parameters?: Observable<Parameters>;
    constructor(paginator?: PaginatorLike | null, sort?: SortLike | null, filter?: FilterLike | null, parameters?: Observable<Parameters> | null, metadata?: AbstractTableDataSourceMetadata | null);
    get sortByColumn(): string | undefined;
    get sortDirection(): 'asc' | 'desc' | '' | undefined;
    get totalRowCount(): number;
    get filterValue(): Record<string, any> | string | undefined;
    applySortBy(data: ReadonlyArray<Data>, column: string, direction: SortDirection): Data[];
    applyFilterBy(data: ReadonlyArray<Data>, filter: Record<string, any> | string): Data[];
    static ɵfac: i0.ɵɵFactoryDeclaration<AbstractTableDataSource<any, any>, [{ optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AbstractTableDataSource<any, any>>;
}
export declare function RxapAbstractTableDataSource(metadataOrId: string | AbstractTableDataSourceMetadata, className?: string, packageName?: string): (target: Constructor<AbstractTableDataSource<any>>) => void;
