import { z } from 'zod';
import type { Datum } from '../properties';
export type ValueSelector = string | number;
export type PartialDatumSelector = Datum;
/**
 * @description 指标选择器, 用于选择数据项中指标字段的值
 */
export type MeasureSelector = {
    /**
     * @description 指标字段, measures 某一项的 id
     */
    field: string;
    /**
     * @description 操作符
     * - =: 选择数据项中指标字段的值等于 value 的数据项
     * - ==: 选择数据项中指标字段的值等于 value 的数据项
     * - !=: 选择数据项中指标字段的值不等于 value 的数据项
     * - >: 选择数据项中指标字段的值大于 value 的数据项
     * - <: 选择数据项中指标字段的值小于 value 的数据项
     * - >=: 选择数据项中指标字段的值大于等于 value 的数据项
     * - <=: 选择数据项中指标字段的值小于等于 value 的数据项
     * - between: 选择数据项中指标字段的值在 value 之间的 data item
     */
    operator?: '=' | '==' | '!=' | '>' | '<' | '>=' | '<=' | 'between';
    /**
     * @description 操作符
     * - =: 选择数据项中指标字段的值等于 value 的数据项, 会将值转换为字符串后进行比较, 因此 1 == "1" 为 true
     * - ==: 选择数据项中指标字段的值精准等于 value 的数据项, 不会做任何特殊处理, 因此 1 == "1" 为 false
     * - !=: 选择数据项中指标字段的值不等于 value 的数据项
     * - >: 选择数据项中指标字段的值大于 value 的数据项
     * - <: 选择数据项中指标字段的值小于 value 的数据项
     * - >=: 选择数据项中指标字段的值大于等于 value 的数据项
     * - <=: 选择数据项中指标字段的值小于等于 value 的数据项
     * - between: 选择数据项中指标字段的值在 value 之间的 data item
     * same as operator
     */
    op?: '=' | '==' | '!=' | '>' | '<' | '>=' | '<=' | 'between';
    /**
     * @description 选择数据项中指标字段的值
     * - 仅 op 为 between 时, value 为长度为2的数组, 数组中的元素为指标字段的最小值和最大值
     * - 其他情况, value 为指标字段的单个值
     */
    value: string | number | Array<string | number>;
};
/**
 * @description 维度选择器, 用于选择数据项中维度字段的值
 */
export type DimensionSelector = {
    /**
     * @description 维度字段, dimensions 某一项的 id
     */
    field: string;
    /**
     * @description 操作符
     * - in: 选择数据项中维度字段的值在 value 中的数据项
     * - not in: 选择数据项中维度字段的值不在 value 中的数据项
     */
    operator?: 'in' | 'not in';
    /**
     * @description 操作符
     * - in: 选择数据项中维度字段的值在 value 中的数据项
     * - not in: 选择数据项中维度字段的值不在 value 中的数据项
     * same as operator
     */
    op?: 'in' | 'not in';
    /**
     * @description 选择数据项中维度字段的值, 支持数组
     */
    value: string | number | Array<string | number>;
};
export type Selector = ValueSelector | PartialDatumSelector | MeasureSelector | DimensionSelector;
export type AreaSelector = MeasureSelector | DimensionSelector;
export type AreaSelectors = Array<AreaSelector>;
export type Selectors = Array<Selector>;
export declare const zMeasureSelector: z.ZodObject<{
    field: z.ZodString;
    operator: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
        "=": "=";
        "==": "==";
        "!=": "!=";
        ">": ">";
        "<": "<";
        ">=": ">=";
        "<=": "<=";
        between: "between";
    }>>>;
    op: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
        "=": "=";
        "==": "==";
        "!=": "!=";
        ">": ">";
        "<": "<";
        ">=": ">=";
        "<=": "<=";
        between: "between";
    }>>>;
    value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
}, z.core.$strip>;
export declare const zDimensionSelector: z.ZodObject<{
    field: z.ZodString;
    operator: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
        in: "in";
        "not in": "not in";
    }>>>;
    op: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
        in: "in";
        "not in": "not in";
    }>>>;
    value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
}, z.core.$strip>;
export declare const zSelector: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodObject<{
    field: z.ZodString;
    operator: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
        "=": "=";
        "==": "==";
        "!=": "!=";
        ">": ">";
        "<": "<";
        ">=": ">=";
        "<=": "<=";
        between: "between";
    }>>>;
    op: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
        "=": "=";
        "==": "==";
        "!=": "!=";
        ">": ">";
        "<": "<";
        ">=": ">=";
        "<=": "<=";
        between: "between";
    }>>>;
    value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
}, z.core.$strip>, z.ZodObject<{
    field: z.ZodString;
    operator: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
        in: "in";
        "not in": "not in";
    }>>>;
    op: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
        in: "in";
        "not in": "not in";
    }>>>;
    value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
}, z.core.$strip>]>;
export declare const zSelectors: z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodObject<{
    field: z.ZodString;
    operator: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
        "=": "=";
        "==": "==";
        "!=": "!=";
        ">": ">";
        "<": "<";
        ">=": ">=";
        "<=": "<=";
        between: "between";
    }>>>;
    op: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
        "=": "=";
        "==": "==";
        "!=": "!=";
        ">": ">";
        "<": "<";
        ">=": ">=";
        "<=": "<=";
        between: "between";
    }>>>;
    value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
}, z.core.$strip>, z.ZodObject<{
    field: z.ZodString;
    operator: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
        in: "in";
        "not in": "not in";
    }>>>;
    op: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
        in: "in";
        "not in": "not in";
    }>>>;
    value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
}, z.core.$strip>]>>;
export declare const zAreaSelector: z.ZodUnion<readonly [z.ZodObject<{
    field: z.ZodString;
    operator: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
        "=": "=";
        "==": "==";
        "!=": "!=";
        ">": ">";
        "<": "<";
        ">=": ">=";
        "<=": "<=";
        between: "between";
    }>>>;
    op: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
        "=": "=";
        "==": "==";
        "!=": "!=";
        ">": ">";
        "<": "<";
        ">=": ">=";
        "<=": "<=";
        between: "between";
    }>>>;
    value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
}, z.core.$strip>, z.ZodObject<{
    field: z.ZodString;
    operator: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
        in: "in";
        "not in": "not in";
    }>>>;
    op: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
        in: "in";
        "not in": "not in";
    }>>>;
    value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
}, z.core.$strip>]>;
export declare const zAreaSelectors: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
    field: z.ZodString;
    operator: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
        "=": "=";
        "==": "==";
        "!=": "!=";
        ">": ">";
        "<": "<";
        ">=": ">=";
        "<=": "<=";
        between: "between";
    }>>>;
    op: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
        "=": "=";
        "==": "==";
        "!=": "!=";
        ">": ">";
        "<": "<";
        ">=": ">=";
        "<=": "<=";
        between: "between";
    }>>>;
    value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
}, z.core.$strip>, z.ZodObject<{
    field: z.ZodString;
    operator: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
        in: "in";
        "not in": "not in";
    }>>>;
    op: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
        in: "in";
        "not in": "not in";
    }>>>;
    value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
}, z.core.$strip>]>>;
