import { IChartField, EChartFieldType } from '@qn-pandora/app-sdk';
import { ChartType } from '../../../../constants/chart-style';
export interface IChartStyleOption {
    chartType: ChartType;
    displayColors?: IColor[];
}
export interface IColor {
    name: string | number | boolean;
    color: string;
    fieldType?: EChartFieldType;
    isOverlap?: boolean;
    isCustomColor?: boolean;
}
export interface IChartStyleContextOption {
    buckets: string[];
    metrics: string[];
}
export interface IChartStyleInitOption extends IChartStyleContextOption {
    fields: IChartField[];
}
/**
 * style option 装饰器
 * @param extraDesc 额外附加的装饰器，默认为observable.ref，设置为非函数值的时候不附加装饰器
 */
export declare function styleOption(extraDesc?: any): any;
export default abstract class ChartStyleService<T extends IChartStyleOption = IChartStyleOption> {
    abstract readonly chartType: ChartType | string;
    abstract option: T;
    /**
     * 当切换图表时使用这个值作为下一个图表的参数
     */
    abstract contextOption: IChartStyleContextOption;
    displayColors: IColor[];
    /**
     * 获取style option装饰器存储下来的内容
     */
    private getStyleOptionNames;
    /**
     * 获取style option装饰器装饰的所有属性值
     */
    protected getStyleOptions(): T;
    /**
     * 批量修改styleOption装饰过的值
     * WARNING: 在父级类中使用请注意，此赋值方法也会识别到子类中styleOption装饰的
     * @param obj 赋值操作的map映射
     * @param allowNil 对obj中的nil值是否进行赋值操作
     */
    set(obj: Partial<T>, allowNil?: boolean): void;
    /**
     * 单独修改某个styleOption装饰过的值
     * @param key 被装饰过的值的名称，如果名称不存在，或者未被装饰则函数调用无效
     * @param value 值
     */
    set<K extends keyof T>(key: K, value: T[K]): void;
    /**
     * 提供属性自定义set的批量处理函数
     * @param obj
     * @param fieldHandlers
     * @param allowNil
     */
    executeFieldHandlers(obj: IKeyValues, fieldHandlers: Array<{
        field: string;
        handler: (fieldValue: any) => void;
    }>, allowNil?: boolean): void;
    setDisplayColors(colors: IColor[]): void;
    constructor(_: T);
}
export declare type TChartStyleServiceClass = {
    new (option: any): ChartStyleService;
    /**
       * @param option 上下文中的option
  。   *    图表初始化时为配置文件中的option，图表切换时为上一个图表提供的contextOption
       * @param initFirst 是否为初始化优先。
       *    true: 尽量按照option的值来初始化图表样式；
       *    false: 根据按照当前图表的类型结合option来初始化。
       */
    getChartInitStyle(option: IChartStyleInitOption, initFirst: boolean): any;
};
