import { BehaviorSubject } from 'rxjs';
import { DataFilterTypes, DataGetRequest, ItemRecords$ } from '../../core';
import type { FormBuilderInputType, TableColumnFilter, TableFilterOptions } from '../components';
export interface FilterValue {
    key?: string;
    value?: Date | string | number | boolean | string[] | number[];
    displayText?: string | string[];
    type: DataFilterTypes;
    controlType?: FormBuilderInputType;
}
export interface FilterOptions {
    prop: string;
    label: string;
    items?: ItemRecords$<any>;
    filterable?: TableColumnFilter;
    icon?: string;
}
export interface FilterItem {
    prop: string;
    values: FilterValue[] | undefined;
    key: string;
    label: string;
    strictKey?: boolean;
    formatted?: {
        full: string;
        prefix: string;
        text: string;
        suffix: string;
    };
    icon?: string;
}
export type FilterObject = {
    [p: string]: FilterItem | undefined;
};
export type TableFilterObject = {
    [p: string]: FilterValue[];
};
export declare class FilterModel {
    overrideEmpty?: FilterObject | undefined;
    protected _filters: import("@angular/core").WritableSignal<FilterObject>;
    private _changes$;
    filters: import("@angular/core").Signal<FilterObject | undefined>;
    filtersArray: import("@angular/core").Signal<FilterItem[]>;
    hasFilter: import("@angular/core").Signal<boolean>;
    changes$: import("rxjs").Observable<FilterObject | undefined>;
    constructor(init?: FilterObject, overrideEmpty?: FilterObject | undefined);
    set(data: FilterOptions, values: FilterValue[] | undefined, emit?: boolean): void;
    remove(prop: string): void;
    clear(): void;
    create(): DataGetRequest['filters'];
    emitChanges(): void;
    protected createFilterItem(opts: FilterOptions, value?: FilterValue[]): FilterItem;
    protected setValueForFilterItem(item: FilterItem, values?: FilterValue[], records?: ItemRecords$<any>): FilterItem;
    private mapValueToString;
    private mapValueToReadable;
    private getKey;
    private formatFilterItem;
}
export declare class TableFilterModel extends FilterModel {
    initValue?: FilterObject | undefined;
    overrideEmptyValue?: TableFilterObject | undefined;
    private _columns?;
    columnFilters: {
        [p: string]: TableFilterOptions[];
    };
    columnLabels: {
        [p: string]: string;
    };
    columnsChanged$: BehaviorSubject<void>;
    constructor(initValue?: FilterObject | undefined, overrideEmptyValue?: TableFilterObject | undefined);
    set(columnProp: FilterOptions | string, values: FilterValue[] | undefined, emit?: boolean): void;
    setColumns(columns: typeof this._columns): void;
    getColumnFilters(columnProp: string): TableFilterOptions[] | undefined;
    private setOverrideEmpty;
    private updateFilters;
}
