import type { Datum } from '../types';
import type { ChartDynamicFilter, PartialDatumRes, DimensionSelector, FieldSelector, MeasureSelector, PartialDatumSelector, Selector, Selectors, RowWithFieldRes, TableDynamicFilter, ValueSelector, ValueDynamicFilter } from '../types/dataSelector';
export type DynamicFilter = TableDynamicFilter | ChartDynamicFilter | ValueDynamicFilter;
export type DynamicFilterResult = RowWithFieldRes[] | PartialDatumRes[] | number | string;
export declare const selector: (vchartDatum: Datum, selector: Selector | Selectors | undefined | null, selectorMode?: "And" | "Or") => boolean;
export declare const isValueSelector: (selector: Selector) => selector is ValueSelector;
export declare const isPartialDatumSelector: (selector: Selector) => selector is PartialDatumSelector;
/**
 * 判断是否为字段选择器
 * @description 字段选择器只有 field 属性，没有 operator/op/value
 */
export declare const isFieldSelector: (selector: Selector) => selector is FieldSelector;
export declare const isMeasureSelector: (selector: Selector) => selector is MeasureSelector;
export declare const isDimensionSelector: (selector: Selector) => selector is DimensionSelector;
export declare const selectByMeasure: (selector: MeasureSelector, datum: Datum) => boolean;
export declare const selectByDmension: (selector: DimensionSelector, datum: Datum) => boolean;
/**
 * 通过字段名选择
 * @description 检查 datum 是否包含指定字段（用于列级选择）
 */
export declare const selectByField: (selector: FieldSelector, datum: Datum) => boolean;
/**
 * 检查给定的字段是否与 FieldSelector 匹配
 */
export declare const matchesFieldSelector: (field: string, fieldSelector: FieldSelector) => boolean;
export declare const selectByPartial: (selector: PartialDatumSelector, datum: Datum) => boolean;
export declare const selectByValue: (selector: ValueSelector, datum: Datum) => boolean;
/**
 * 识别是否为row-with-field动态过滤器
 */
export declare const isRowWithFieldDynamicFilter: (selector: any) => selector is TableDynamicFilter;
/**
 * 识别是否为数值动态过滤器（用于标注线等场景）
 */
export declare const isValueDynamicFilter: (selector: any) => selector is ValueDynamicFilter;
/**
 * 识别是否为动态过滤器（通用判断，包含所有类型的动态过滤器）
 */
export declare const isDynamicFilter: (selector: any) => selector is DynamicFilter;
/**
 * 执行动态过滤器代码，获取匹配结果
 * @description
 * 阶段1：执行阶段 - 一次性执行 dynamicFilter.code，获取所有匹配结果
 * - TableDynamicFilter → CellSelector[]
 * - ChartDynamicFilter → PartialDatumSelector[]
 * - ValueDynamicFilter → number | string
 *
 * @param filter 动态过滤器配置
 * @param allData 完整数据集
 * @returns 执行结果数组或标量值
 */
export declare const executeDynamicFilter: (filter: DynamicFilter, allData: Datum[]) => Promise<{
    success: boolean;
    data: DynamicFilterResult;
    error?: string;
}>;
/**
 * 匹配动态过滤器结果
 * @description
 * 阶段2：匹配阶段 - 判断当前 datum/cell 是否在执行结果中
 * - 使用 OR 策略：结果数组中任一项匹配即返回 true
 * - 表格场景：检查 { row, field } 是否在 CellSelector[] 中
 * - 图表场景：检查 datum 的维度值是否匹配 PartialDatumSelector[] 中任一项
 * - 数值场景：不适用（ValueDynamicFilter返回标量值，不用于匹配）
 *
 * @param result 动态过滤器执行结果（CellSelector[] 或 PartialDatumSelector[]，不包括 ValueDynamicFilter）
 * @param datum 当前数据项
 * @param selectorType 选择器类型（用于区分表格和图表动态过滤器）
 * @returns 是否匹配（OR 策略）
 */
export declare const matchDynamicFilterResult: (result: DynamicFilterResult, datum: Datum, selectorType?: "table" | "chart") => boolean;
/**
 * 带有动态过滤器支持的选择器
 * @description
 * 处理流程（两阶段设计）：
 *
 * 阶段1 - 执行（Execute）：
 *   - 在 prepare() 阶段执行，结果写入 dynamicFilter.result
 *   - TableDynamicFilter → CellSelector[]
 *   - ChartDynamicFilter → PartialDatumSelector[]
 *   - ValueDynamicFilter → number | string（用于读取，不用于匹配）
 *
 * 阶段2 - 匹配（Match）：
 *   - 读取 dynamicFilter.result
 *   - 使用 OR 策略：结果数组中任一项匹配即返回 true
 *   - 表格：判断 { row, field } 是否在 CellSelector[] 中
 *   - 图表：判断 datum 是否匹配 PartialDatumSelector[] 中任一项
 *   - 数值：不用于匹配，直接返回 false（数值过滤器在主要用于标注线值，不用于行列选择）
 *
 * @param vchartDatum 单个数据项
 * @param selectorConfig 选择器配置（可包含 DynamicFilter）
 * @param defaultSelector 传统选择器（仅在 DynamicFilter 无结果且有 fallback 时使用）
 * @returns 该数据项是否符合选择条件
 */
export declare const selectorWithDynamicFilter: (vchartDatum: Datum, selectorConfig: DynamicFilter, defaultSelector?: Selector | Selector[] | null) => boolean;
