import { ChangeValueOptions, Filter, FilterEvents, FilterStateBaseParams } from '../../model';
export interface ArrayFilterStateParams<T> extends FilterStateBaseParams<T[]> {
    /**
     * The value to set the value to, when clearing the filter (Optional)
     * @external
     */
    defaultValue?: T[];
    /**
     * Convert a unknown object to a T.<br>
     * If the function returns null, the item will be skipped when we try to deserializate it from an array.
     * @param value
     * @external
     */
    readonly parse: (value: Record<string, unknown> | string | null | undefined) => T | null;
    /**
     * Return a simplified form of an item for serialization.
     * @param value
     * @external
     */
    readonly simplify?: (value: T) => Partial<T>;
    /**
     * Indicates whether an item matches the current value of the filter
     * @external
     */
    readonly matches?: (item: T, value: T[]) => boolean;
    readonly equals?: (item1: T, item2: T) => boolean;
}
export declare class ArrayFilterState<T> implements Filter<T[]> {
    _value: T[];
    name: string;
    persistent: boolean | undefined;
    defaultValue: T[];
    readonly parse: ArrayFilterStateParams<T>['parse'];
    readonly simplify: (value: T) => Partial<T>;
    readonly itemKey: (item: T) => string;
    readonly itemName: (item: T) => string;
    readonly equals?: (item1: T, item2: T) => boolean;
    readonly isCustomField?: boolean;
    readonly events: FilterEvents;
    readonly matches: (item: T, value: T[]) => boolean;
    constructor(params: Readonly<ArrayFilterStateParams<T>>);
    get value(): T[];
    _toArray: (value: T[]) => T[];
    get toArray(): T[];
    get isEmpty(): boolean;
    get size(): number;
    get toQueryString(): string;
    applyFromQueryString(str: string): void;
    encode(value: T[]): Partial<T>[];
    decode(raw: unknown): T[];
    setValue(value: T[], { emitEvents, ...options }?: ChangeValueOptions): void;
    changeValue(value: T[], { emitEvents, ...options }?: ChangeValueOptions): void;
    refresh(value: T[], options?: ChangeValueOptions): void;
    scheduleRefresh(value: T[]): void;
    reset(options?: ChangeValueOptions): void;
    hasDiff(items: T[]): boolean;
    remove(items: T[], options?: ChangeValueOptions): void;
    clone(params: Partial<ArrayFilterStateParams<T>>): ArrayFilterState<T>;
}
export declare const stringsArrayFilter: <T extends string>(params?: Partial<ArrayFilterStateParams<T>> | undefined) => ArrayFilterState<T>;
export declare const arrayFilter: <T>(params: ArrayFilterStateParams<T>) => ArrayFilterState<T>;
export declare const idNameArrayFilter: <T extends {
    id: string;
    name: string;
}>(params?: Partial<ArrayFilterStateParams<T>> | undefined) => ArrayFilterState<T>;
export declare const idArrayFilter: <T extends {
    id: string;
}>(params?: Partial<ArrayFilterStateParams<T>> | undefined) => ArrayFilterState<T>;
export declare const idNameArrayFilterNum: <T extends {
    id: number;
    name: string;
}>(params?: Partial<ArrayFilterStateParams<T>> | undefined) => ArrayFilterState<T>;
//# sourceMappingURL=ArrayFilterState.d.ts.map