/** 
 | 
 * Caution: If the mechanism should be changed some day, these cases 
 | 
 * should be considered: 
 | 
 * 
 | 
 * (1) In `merge option` mode, if using the same option to call `setOption` 
 | 
 * many times, the result should be the same (try our best to ensure that). 
 | 
 * (2) In `merge option` mode, if a component has no id/name specified, it 
 | 
 * will be merged by index, and the result sequence of the components is 
 | 
 * consistent to the original sequence. 
 | 
 * (3) In `replaceMerge` mode, keep the result sequence of the components is 
 | 
 * consistent to the original sequence, even though there might result in "hole". 
 | 
 * (4) `reset` feature (in toolbox). Find detailed info in comments about 
 | 
 * `mergeOption` in module:echarts/model/OptionManager. 
 | 
 */ 
 | 
import { HashMap } from 'zrender/lib/core/util.js'; 
 | 
import Model from './Model.js'; 
 | 
import ComponentModel from './Component.js'; 
 | 
import SeriesModel from './Series.js'; 
 | 
import { Payload, OptionPreprocessor, ECBasicOption, ECUnitOption, ComponentMainType, ComponentSubType, OptionId, OptionName } from '../util/types.js'; 
 | 
import OptionManager from './OptionManager.js'; 
 | 
import Scheduler from '../core/Scheduler.js'; 
 | 
import { LocaleOption } from '../core/locale.js'; 
 | 
import { PaletteMixin } from './mixin/palette.js'; 
 | 
export interface GlobalModelSetOptionOpts { 
 | 
    replaceMerge: ComponentMainType | ComponentMainType[]; 
 | 
} 
 | 
export interface InnerSetOptionOpts { 
 | 
    replaceMergeMainTypeMap: HashMap<boolean, string>; 
 | 
} 
 | 
declare class GlobalModel extends Model<ECUnitOption> { 
 | 
    option: ECUnitOption; 
 | 
    private _theme; 
 | 
    private _locale; 
 | 
    private _optionManager; 
 | 
    private _componentsMap; 
 | 
    /** 
 | 
     * `_componentsMap` might have "hole" becuase of remove. 
 | 
     * So save components count for a certain mainType here. 
 | 
     */ 
 | 
    private _componentsCount; 
 | 
    /** 
 | 
     * Mapping between filtered series list and raw series list. 
 | 
     * key: filtered series indices, value: raw series indices. 
 | 
     * Items of `_seriesIndices` never be null/empty/-1. 
 | 
     * If series has been removed by `replaceMerge`, those series 
 | 
     * also won't be in `_seriesIndices`, just like be filtered. 
 | 
     */ 
 | 
    private _seriesIndices; 
 | 
    /** 
 | 
     * Key: seriesIndex. 
 | 
     * Keep consistent with `_seriesIndices`. 
 | 
     */ 
 | 
    private _seriesIndicesMap; 
 | 
    /** 
 | 
     * Model for store update payload 
 | 
     */ 
 | 
    private _payload; 
 | 
    scheduler: Scheduler; 
 | 
    ssr: boolean; 
 | 
    init(option: ECBasicOption, parentModel: Model, ecModel: GlobalModel, theme: object, locale: object, optionManager: OptionManager): void; 
 | 
    setOption(option: ECBasicOption, opts: GlobalModelSetOptionOpts, optionPreprocessorFuncs: OptionPreprocessor[]): void; 
 | 
    /** 
 | 
     * @param type null/undefined: reset all. 
 | 
     *        'recreate': force recreate all. 
 | 
     *        'timeline': only reset timeline option 
 | 
     *        'media': only reset media query option 
 | 
     * @return Whether option changed. 
 | 
     */ 
 | 
    resetOption(type: 'recreate' | 'timeline' | 'media', opt?: Pick<GlobalModelSetOptionOpts, 'replaceMerge'>): boolean; 
 | 
    private _resetOption; 
 | 
    mergeOption(option: ECUnitOption): void; 
 | 
    private _mergeOption; 
 | 
    /** 
 | 
     * Get option for output (cloned option and inner info removed) 
 | 
     */ 
 | 
    getOption(): ECUnitOption; 
 | 
    getTheme(): Model; 
 | 
    getLocaleModel(): Model<LocaleOption>; 
 | 
    setUpdatePayload(payload: Payload): void; 
 | 
    getUpdatePayload(): Payload; 
 | 
    /** 
 | 
     * @param idx If not specified, return the first one. 
 | 
     */ 
 | 
    getComponent(mainType: ComponentMainType, idx?: number): ComponentModel; 
 | 
    /** 
 | 
     * @return Never be null/undefined. 
 | 
     */ 
 | 
    queryComponents(condition: QueryConditionKindB): ComponentModel[]; 
 | 
    /** 
 | 
     * The interface is different from queryComponents, 
 | 
     * which is convenient for inner usage. 
 | 
     * 
 | 
     * @usage 
 | 
     * let result = findComponents( 
 | 
     *     {mainType: 'dataZoom', query: {dataZoomId: 'abc'}} 
 | 
     * ); 
 | 
     * let result = findComponents( 
 | 
     *     {mainType: 'series', subType: 'pie', query: {seriesName: 'uio'}} 
 | 
     * ); 
 | 
     * let result = findComponents( 
 | 
     *     {mainType: 'series', 
 | 
     *     filter: function (model, index) {...}} 
 | 
     * ); 
 | 
     * // result like [component0, componnet1, ...] 
 | 
     */ 
 | 
    findComponents(condition: QueryConditionKindA): ComponentModel[]; 
 | 
    /** 
 | 
     * Travel components (before filtered). 
 | 
     * 
 | 
     * @usage 
 | 
     * eachComponent('legend', function (legendModel, index) { 
 | 
     *     ... 
 | 
     * }); 
 | 
     * eachComponent(function (componentType, model, index) { 
 | 
     *     // componentType does not include subType 
 | 
     *     // (componentType is 'a' but not 'a.b') 
 | 
     * }); 
 | 
     * eachComponent( 
 | 
     *     {mainType: 'dataZoom', query: {dataZoomId: 'abc'}}, 
 | 
     *     function (model, index) {...} 
 | 
     * ); 
 | 
     * eachComponent( 
 | 
     *     {mainType: 'series', subType: 'pie', query: {seriesName: 'uio'}}, 
 | 
     *     function (model, index) {...} 
 | 
     * ); 
 | 
     */ 
 | 
    eachComponent<T>(cb: EachComponentAllCallback, context?: T): void; 
 | 
    eachComponent<T>(mainType: string, cb: EachComponentInMainTypeCallback, context?: T): void; 
 | 
    eachComponent<T>(mainType: QueryConditionKindA, cb: EachComponentInMainTypeCallback, context?: T): void; 
 | 
    /** 
 | 
     * Get series list before filtered by name. 
 | 
     */ 
 | 
    getSeriesByName(name: OptionName): SeriesModel[]; 
 | 
    /** 
 | 
     * Get series list before filtered by index. 
 | 
     */ 
 | 
    getSeriesByIndex(seriesIndex: number): SeriesModel; 
 | 
    /** 
 | 
     * Get series list before filtered by type. 
 | 
     * FIXME: rename to getRawSeriesByType? 
 | 
     */ 
 | 
    getSeriesByType(subType: ComponentSubType): SeriesModel[]; 
 | 
    /** 
 | 
     * Get all series before filtered. 
 | 
     */ 
 | 
    getSeries(): SeriesModel[]; 
 | 
    /** 
 | 
     * Count series before filtered. 
 | 
     */ 
 | 
    getSeriesCount(): number; 
 | 
    /** 
 | 
     * After filtering, series may be different 
 | 
     * frome raw series. 
 | 
     */ 
 | 
    eachSeries<T>(cb: (this: T, series: SeriesModel, rawSeriesIndex: number) => void, context?: T): void; 
 | 
    /** 
 | 
     * Iterate raw series before filtered. 
 | 
     * 
 | 
     * @param {Function} cb 
 | 
     * @param {*} context 
 | 
     */ 
 | 
    eachRawSeries<T>(cb: (this: T, series: SeriesModel, rawSeriesIndex: number) => void, context?: T): void; 
 | 
    /** 
 | 
     * After filtering, series may be different. 
 | 
     * frome raw series. 
 | 
     */ 
 | 
    eachSeriesByType<T>(subType: ComponentSubType, cb: (this: T, series: SeriesModel, rawSeriesIndex: number) => void, context?: T): void; 
 | 
    /** 
 | 
     * Iterate raw series before filtered of given type. 
 | 
     */ 
 | 
    eachRawSeriesByType<T>(subType: ComponentSubType, cb: (this: T, series: SeriesModel, rawSeriesIndex: number) => void, context?: T): void; 
 | 
    isSeriesFiltered(seriesModel: SeriesModel): boolean; 
 | 
    getCurrentSeriesIndices(): number[]; 
 | 
    filterSeries<T>(cb: (this: T, series: SeriesModel, rawSeriesIndex: number) => boolean, context?: T): void; 
 | 
    restoreData(payload?: Payload): void; 
 | 
    private static internalField; 
 | 
} 
 | 
/** 
 | 
 * @param condition.mainType Mandatory. 
 | 
 * @param condition.subType Optional. 
 | 
 * @param condition.query like {xxxIndex, xxxId, xxxName}, 
 | 
 *        where xxx is mainType. 
 | 
 *        If query attribute is null/undefined or has no index/id/name, 
 | 
 *        do not filtering by query conditions, which is convenient for 
 | 
 *        no-payload situations or when target of action is global. 
 | 
 * @param condition.filter parameter: component, return boolean. 
 | 
 */ 
 | 
export interface QueryConditionKindA { 
 | 
    mainType: ComponentMainType; 
 | 
    subType?: ComponentSubType; 
 | 
    query?: { 
 | 
        [k: string]: number | number[] | string | string[]; 
 | 
    }; 
 | 
    filter?: (cmpt: ComponentModel) => boolean; 
 | 
} 
 | 
/** 
 | 
 * If none of index and id and name used, return all components with mainType. 
 | 
 * @param condition.mainType 
 | 
 * @param condition.subType If ignore, only query by mainType 
 | 
 * @param condition.index Either input index or id or name. 
 | 
 * @param condition.id Either input index or id or name. 
 | 
 * @param condition.name Either input index or id or name. 
 | 
 */ 
 | 
export interface QueryConditionKindB { 
 | 
    mainType: ComponentMainType; 
 | 
    subType?: ComponentSubType; 
 | 
    index?: number | number[]; 
 | 
    id?: OptionId | OptionId[]; 
 | 
    name?: OptionName | OptionName[]; 
 | 
} 
 | 
export interface EachComponentAllCallback { 
 | 
    (mainType: string, model: ComponentModel, componentIndex: number): void; 
 | 
} 
 | 
interface EachComponentInMainTypeCallback { 
 | 
    (model: ComponentModel, componentIndex: number): void; 
 | 
} 
 | 
interface GlobalModel extends PaletteMixin<ECUnitOption> { 
 | 
} 
 | 
export default GlobalModel; 
 |