import { Injector } from '@angular/core';
import { Any, Nullable } from '@angular-ru/cdk/typings';
import { Subject } from 'rxjs';
import { FilterDescriptor } from './filter-descriptor';
import { FilterEvent } from './filter-event';
import { FilterStateEvent } from './filter-state-event';
import { FilterWorkerEvent } from './filter-worker-event';
import { Filterable } from './filterable';
import { TableFilterType } from './table-filter-type';
import * as i0 from "@angular/core";
export declare class FilterableService<T> implements Filterable {
    types: ReadonlyMap<unknown, unknown>;
    definition: ReadonlyMap<unknown, unknown>;
    filterTypeDefinition: ReadonlyMap<unknown, TableFilterType>;
    readonly filterOpenEvents$: Subject<void>;
    readonly events$: Subject<FilterEvent>;
    readonly resetEvents$: Subject<void>;
    state: FilterStateEvent;
    filterValue: Nullable<string>;
    filterType: Nullable<string | TableFilterType>;
    filtering: boolean;
    private previousFiltering;
    private readonly thread;
    constructor(injector: Injector);
    get globalFilterValue(): Nullable<string>;
    get filterValueExist(): boolean;
    setDefinition(descriptors: FilterDescriptor[]): void;
    updateFilterTypeBy(type: TableFilterType, key?: Nullable<string>): void;
    updateFilterValueBy(value: Any, key?: Nullable<string>): void;
    reset(): void;
    changeFilteringStatus(): void;
    openFilter(key: string, event: MouseEvent): void;
    closeFilter(): void;
    filter(source: T[]): Promise<FilterWorkerEvent<T>>;
    private clearDefinitions;
    static ɵfac: i0.ɵɵFactoryDeclaration<FilterableService<any>, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<FilterableService<any>>;
}
//# sourceMappingURL=filterable.service.d.ts.map