import { Observable } from 'rxjs';
import { IFilter, Filter } from '../filter';
export interface IFilterGroupSettings<TItemType> {
    label: string;
    type: string;
    options: IFilterOption<TItemType>[];
    serialize?: {
        (activeOption: IFilterOption<TItemType>): any;
    };
}
export interface IFilterOption<TItemType> {
    active?: boolean;
    label: string;
    type?: string;
    value?: any;
    predicate: {
        (item: TItemType): boolean;
    };
    serialize?: {
        (): any;
    };
}
export interface IFilterGroup<TItemType> extends IFilter<TItemType, any> {
    label: string;
    type: string;
    options: IFilterOption<TItemType>[];
    activeOption: IFilterOption<TItemType>;
    setActiveOption(index: number): void;
    setOptionCounts(counts: number[]): void;
}
export declare class FilterGroup<TItemType> extends Filter<TItemType, any> implements IFilterGroup<TItemType> {
    label: string;
    type: string;
    options: IFilterOption<TItemType>[];
    settings: IFilterGroupSettings<TItemType>;
    private _activeOption;
    constructor(settings: IFilterGroupSettings<TItemType>);
    initOptions(): void;
    activeOption: IFilterOption<TItemType>;
    private setDefaultOption();
    predicate: (item: any) => boolean;
    serialize(): Observable<any>;
    setActiveOption(index: number): void;
    setOptionCounts(counts: number[]): void;
    updateOptionCounts<TDataType>(filteredDataSet: TDataType[]): void;
}
