import type { TYPES } from '@visactor/vtable';
export interface FilterOptions {
    id?: string;
    filterIcon?: TYPES.ColumnIconOption;
    filteringIcon?: TYPES.ColumnIconOption;
    enableFilter?: (field: number | string, column: TYPES.ColumnDefine) => boolean;
    defaultEnabled?: boolean;
    filterModes?: FilterMode[];
    styles?: FilterStyles;
    conditionCategories?: FilterOperatorCategoryOption[];
    checkboxItemFormat?: (rawValue: any, formatValue: any) => any;
    syncFilterItemsState?: boolean;
    onFilterRecordsEnd?: (records: any[]) => void;
}
export interface FilterOperatorCategoryOption {
    value: FilterOperatorCategory;
    label: string;
}
export type FilterMode = 'byValue' | 'byCondition';
export interface FilterState {
    filters: Map<string | number, FilterConfig>;
}
export interface FilterStateSnapshot {
    filters: FilterConfig[];
}
export interface FilterConfig {
    enable: boolean;
    field: string | number;
    type: 'byValue' | 'byCondition';
    values?: any[];
    operator?: FilterOperator;
    condition?: any;
}
export declare enum FilterActionType {
    ADD_FILTER = 0,
    REMOVE_FILTER = 1,
    UPDATE_FILTER = 2,
    ENABLE_FILTER = 3,
    DISABLE_FILTER = 4,
    CLEAR_ALL_FILTERS = 5,
    APPLY_FILTERS = 6
}
export interface FilterAction {
    type: FilterActionType;
    payload: any;
}
export interface ValueFilterOptionDom {
    id: string;
    originalValue: any[];
    itemContainer: HTMLDivElement;
    checkbox: HTMLInputElement;
    countSpan: HTMLSpanElement;
}
export type FilterOperator = 'equals' | 'notEquals' | 'greaterThan' | 'lessThan' | 'greaterThanOrEqual' | 'lessThanOrEqual' | 'between' | 'notBetween' | 'contains' | 'notContains' | 'startsWith' | 'notStartsWith' | 'endsWith' | 'notEndsWith' | 'isChecked' | 'isUnchecked';
export interface OperatorOption {
    value: FilterOperator;
    label: string;
    category: FilterOperatorCategory;
}
export declare enum FilterOperatorCategory {
    ALL = "all",
    TEXT = "text",
    NUMBER = "number",
    COLOR = "color",
    CHECKBOX = "checkbox",
    RADIO = "radio"
}
export type FilterListener = (state: FilterState, action?: FilterAction) => void;
interface StaticStyles {
    filterMenu?: Record<string, string>;
    filterPanel?: Record<string, string>;
    searchContainer?: Record<string, string>;
    searchInput?: Record<string, string>;
    optionsContainer?: Record<string, string>;
    optionItem?: Record<string, string>;
    optionLabel?: Record<string, string>;
    checkbox?: Record<string, string>;
    countSpan?: Record<string, string>;
    tabsContainer?: Record<string, string>;
    footerContainer?: Record<string, string>;
    clearLink?: Record<string, string>;
    conditionContainer?: Record<string, string>;
    formLabel?: Record<string, string>;
    operatorSelect?: Record<string, string>;
    rangeInputContainer?: Record<string, string>;
    addLabel?: Record<string, string>;
}
interface FunctionStyles {
    tabStyle?: (isActive: boolean) => Record<string, string>;
    footerButton?: (isPrimary: boolean) => Record<string, string>;
    buttonStyle?: (isPrimary?: boolean) => Record<string, string>;
}
export type FilterStyles = StaticStyles & FunctionStyles;
export {};
