interface FilterBase<T extends Record<string, unknown>> {
    type: FilterType;
    label: string;
    accessorKey: keyof T;
    value?: string | boolean;
    placeholder?: string;
    errorMessage?: string;
}
interface DateFilter<T extends Record<string, unknown>> extends FilterBase<T> {
    type: FilterType.DATE;
}
interface EnumFilterValue {
    label: string;
    value: string | string[];
}
interface EnumFilter<T extends Record<string, unknown>> extends FilterBase<T> {
    type: FilterType.ENUM;
    enumValues: EnumFilterValue[];
    queryVariable: string;
    /**
     * Whether the filter can have multiple applied values.
     */
    isMulti?: boolean;
}
interface StringFilter<T extends Record<string, unknown>> extends FilterBase<T> {
    type: FilterType.STRING;
    queryVariable: string;
    /**
     * Whether the filter can have multiple applied values.
     */
    isMulti?: boolean;
}
interface IdFilter<T extends Record<string, unknown>> extends FilterBase<T> {
    type: FilterType.ID;
    allowedEntities?: string[];
    queryVariable: string;
    /**
     * Whether the filter can have multiple applied values.
     */
    isMulti?: boolean;
}
interface BooleanFilter<T extends Record<string, unknown>> extends FilterBase<T> {
    type: FilterType.BOOLEAN;
    queryVariable: string;
}
interface CurrencyFilter<T extends Record<string, unknown>> extends FilterBase<T> {
    type: FilterType.CURRENCY;
}
type Filter<T extends Record<string, unknown>> = DateFilter<T> | EnumFilter<T> | StringFilter<T> | IdFilter<T> | BooleanFilter<T> | CurrencyFilter<T>;
declare enum FilterType {
    DATE = "date",
    ENUM = "enum",
    STRING = "string",
    ID = "id",
    NUMBER = "number",
    CURRENCY = "currency",
    BOOLEAN = "boolean"
}

export { type BooleanFilter, type CurrencyFilter, type DateFilter, type EnumFilter, type EnumFilterValue, type Filter, FilterType, type IdFilter, type StringFilter };
