import { CollectionViewer, DataSource } from "@angular/cdk/collections";
import { BehaviorSubject, Observable, Subject } from "rxjs";
import { IDataFieldsConfig, IFilter, IFilteringOutputs, IFilteringParticipants, IFilters } from "./public-api";
import * as i0 from "@angular/core";
export declare abstract class DataSourceService<T, F extends IFilters = IFilters, D = any> extends DataSource<T> {
    dataSubject: BehaviorSubject<T[]>;
    outputsSubject: Subject<IFilteringOutputs>;
    dataFieldsConfig: IDataFieldsConfig;
    protected _previousFilters: F;
    protected _components: IFilteringParticipants;
    constructor();
    set componentTree(components: IFilteringParticipants);
    registerComponent(components: IFilteringParticipants): void;
    deregisterComponent(componentKey: string): void;
    abstract getFilteredData(filters: F): Promise<IFilteringOutputs>;
    connect(collectionViewer: CollectionViewer): Observable<T[] | ReadonlyArray<T>>;
    disconnect(collectionViewer: CollectionViewer): void;
    applyFilters(): Promise<void>;
    getFilter(componentName: keyof IFilteringParticipants): F | undefined;
    getFilters(): F;
    get monitoredFilters(): string[];
    filterChanged(filterName: keyof IFilteringParticipants, currentFilterValue?: IFilter<any>): boolean;
    filtersChanged(filters: F, ...filterNames: (keyof IFilteringParticipants)[]): boolean;
    computeFiltersChange(filters: F): boolean;
    protected beforeApplyFilters(filters: F): void;
    protected afterApplyFilters(filters: F): Promise<void>;
    protected shouldResetFilters(filters: F): boolean;
    protected resetFilters(filters: F): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<DataSourceService<any, any, any>, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<DataSourceService<any, any, any>>;
}
