| import { HashMap } from 'zrender/lib/core/util.js'; | 
| import GlobalModel from '../model/Global.js'; | 
| import ComponentModel, { ComponentModelConstructor } from '../model/Component.js'; | 
| import SeriesData from '../data/SeriesData.js'; | 
| import { ComponentOption, ComponentMainType, ComponentSubType, DisplayStateHostOption, OptionDataItem, OptionDataValue, TooltipRenderMode, Payload, OptionId, InterpolatableValue } from './types.js'; | 
| import SeriesModel from '../model/Series.js'; | 
| import CartesianAxisModel from '../coord/cartesian/AxisModel.js'; | 
| import GridModel from '../coord/cartesian/GridModel.js'; | 
| /** | 
|  * If value is not array, then translate it to array. | 
|  * @param  {*} value | 
|  * @return {Array} [value] or value | 
|  */ | 
| export declare function normalizeToArray<T>(value?: T | T[]): T[]; | 
| /** | 
|  * Sync default option between normal and emphasis like `position` and `show` | 
|  * In case some one will write code like | 
|  *     label: { | 
|  *          show: false, | 
|  *          position: 'outside', | 
|  *          fontSize: 18 | 
|  *     }, | 
|  *     emphasis: { | 
|  *          label: { show: true } | 
|  *     } | 
|  */ | 
| export declare function defaultEmphasis(opt: DisplayStateHostOption, key: string, subOpts: string[]): void; | 
| export declare const TEXT_STYLE_OPTIONS: readonly ["fontStyle", "fontWeight", "fontSize", "fontFamily", "rich", "tag", "color", "textBorderColor", "textBorderWidth", "width", "height", "lineHeight", "align", "verticalAlign", "baseline", "shadowColor", "shadowBlur", "shadowOffsetX", "shadowOffsetY", "textShadowColor", "textShadowBlur", "textShadowOffsetX", "textShadowOffsetY", "backgroundColor", "borderColor", "borderWidth", "borderRadius", "padding"]; | 
| /** | 
|  * The method do not ensure performance. | 
|  * data could be [12, 2323, {value: 223}, [1221, 23], {value: [2, 23]}] | 
|  * This helper method retieves value from data. | 
|  */ | 
| export declare function getDataItemValue(dataItem: OptionDataItem): OptionDataValue | OptionDataValue[]; | 
| /** | 
|  * data could be [12, 2323, {value: 223}, [1221, 23], {value: [2, 23]}] | 
|  * This helper method determine if dataItem has extra option besides value | 
|  */ | 
| export declare function isDataItemOption(dataItem: OptionDataItem): boolean; | 
| export interface MappingExistingItem { | 
|     id?: OptionId; | 
|     name?: string; | 
| } | 
| /** | 
|  * The array `MappingResult<T>[]` exactly represents the content of the result | 
|  * components array after merge. | 
|  * The indices are the same as the `existings`. | 
|  * Items will not be `null`/`undefined` even if the corresponding `existings` will be removed. | 
|  */ | 
| declare type MappingResult<T> = MappingResultItem<T>[]; | 
| interface MappingResultItem<T extends MappingExistingItem = MappingExistingItem> { | 
|     existing: T; | 
|     newOption: ComponentOption; | 
|     brandNew: boolean; | 
|     keyInfo: { | 
|         name: string; | 
|         id: string; | 
|         mainType: ComponentMainType; | 
|         subType: ComponentSubType; | 
|     }; | 
| } | 
| declare type MappingToExistsMode = 'normalMerge' | 'replaceMerge' | 'replaceAll'; | 
| /** | 
|  * Mapping to existings for merge. | 
|  * | 
|  * Mode "normalMege": | 
|  *     The mapping result (merge result) will keep the order of the existing | 
|  *     component, rather than the order of new option. Because we should ensure | 
|  *     some specified index reference (like xAxisIndex) keep work. | 
|  *     And in most cases, "merge option" is used to update partial option but not | 
|  *     be expected to change the order. | 
|  * | 
|  * Mode "replaceMege": | 
|  *     (1) Only the id mapped components will be merged. | 
|  *     (2) Other existing components (except internal compoonets) will be removed. | 
|  *     (3) Other new options will be used to create new component. | 
|  *     (4) The index of the existing compoents will not be modified. | 
|  *     That means their might be "hole" after the removal. | 
|  *     The new components are created first at those available index. | 
|  * | 
|  * Mode "replaceAll": | 
|  *     This mode try to support that reproduce an echarts instance from another | 
|  *     echarts instance (via `getOption`) in some simple cases. | 
|  *     In this senario, the `result` index are exactly the consistent with the `newCmptOptions`, | 
|  *     which ensures the compoennt index referring (like `xAxisIndex: ?`) corrent. That is, | 
|  *     the "hole" in `newCmptOptions` will also be kept. | 
|  *     On the contrary, other modes try best to eliminate holes. | 
|  *     PENDING: This is an experimental mode yet. | 
|  * | 
|  * @return See the comment of <MappingResult>. | 
|  */ | 
| export declare function mappingToExists<T extends MappingExistingItem>(existings: T[], newCmptOptions: ComponentOption[], mode: MappingToExistsMode): MappingResult<T>; | 
| export declare function convertOptionIdName(idOrName: unknown, defaultValue: string): string; | 
| export declare function isNameSpecified(componentModel: ComponentModel): boolean; | 
| /** | 
|  * @public | 
|  * @param {Object} cmptOption | 
|  * @return {boolean} | 
|  */ | 
| export declare function isComponentIdInternal(cmptOption: { | 
|     id?: MappingExistingItem['id']; | 
| }): boolean; | 
| export declare function makeInternalComponentId(idSuffix: string): string; | 
| export declare function setComponentTypeToKeyInfo(mappingResult: MappingResult<MappingExistingItem & { | 
|     subType?: ComponentSubType; | 
| }>, mainType: ComponentMainType, componentModelCtor: ComponentModelConstructor): void; | 
| declare type BatchItem = { | 
|     seriesId: OptionId; | 
|     dataIndex: number | number[]; | 
| }; | 
| /** | 
|  * A helper for removing duplicate items between batchA and batchB, | 
|  * and in themselves, and categorize by series. | 
|  * | 
|  * @param batchA Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...] | 
|  * @param batchB Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...] | 
|  * @return result: [resultBatchA, resultBatchB] | 
|  */ | 
| export declare function compressBatches(batchA: BatchItem[], batchB: BatchItem[]): [BatchItem[], BatchItem[]]; | 
| /** | 
|  * @param payload Contains dataIndex (means rawIndex) / dataIndexInside / name | 
|  *                         each of which can be Array or primary type. | 
|  * @return dataIndex If not found, return undefined/null. | 
|  */ | 
| export declare function queryDataIndex(data: SeriesData, payload: Payload & { | 
|     dataIndexInside?: number | number[]; | 
|     dataIndex?: number | number[]; | 
|     name?: string | string[]; | 
| }): number | number[]; | 
| /** | 
|  * Enable property storage to any host object. | 
|  * Notice: Serialization is not supported. | 
|  * | 
|  * For example: | 
|  * let inner = zrUitl.makeInner(); | 
|  * | 
|  * function some1(hostObj) { | 
|  *      inner(hostObj).someProperty = 1212; | 
|  *      ... | 
|  * } | 
|  * function some2() { | 
|  *      let fields = inner(this); | 
|  *      fields.someProperty1 = 1212; | 
|  *      fields.someProperty2 = 'xx'; | 
|  *      ... | 
|  * } | 
|  * | 
|  * @return {Function} | 
|  */ | 
| export declare function makeInner<T, Host extends object>(): (hostObj: Host) => T; | 
| /** | 
|  * If string, e.g., 'geo', means {geoIndex: 0}. | 
|  * If Object, could contain some of these properties below: | 
|  * { | 
|  *     seriesIndex, seriesId, seriesName, | 
|  *     geoIndex, geoId, geoName, | 
|  *     bmapIndex, bmapId, bmapName, | 
|  *     xAxisIndex, xAxisId, xAxisName, | 
|  *     yAxisIndex, yAxisId, yAxisName, | 
|  *     gridIndex, gridId, gridName, | 
|  *     ... (can be extended) | 
|  * } | 
|  * Each properties can be number|string|Array.<number>|Array.<string> | 
|  * For example, a finder could be | 
|  * { | 
|  *     seriesIndex: 3, | 
|  *     geoId: ['aa', 'cc'], | 
|  *     gridName: ['xx', 'rr'] | 
|  * } | 
|  * xxxIndex can be set as 'all' (means all xxx) or 'none' (means not specify) | 
|  * If nothing or null/undefined specified, return nothing. | 
|  * If both `abcIndex`, `abcId`, `abcName` specified, only one work. | 
|  * The priority is: index > id > name, the same with `ecModel.queryComponents`. | 
|  */ | 
| export declare type ModelFinderIndexQuery = number | number[] | 'all' | 'none' | false; | 
| export declare type ModelFinderIdQuery = OptionId | OptionId[]; | 
| export declare type ModelFinderNameQuery = OptionId | OptionId[]; | 
| export declare type ModelFinder = string | ModelFinderObject; | 
| export declare type ModelFinderObject = { | 
|     seriesIndex?: ModelFinderIndexQuery; | 
|     seriesId?: ModelFinderIdQuery; | 
|     seriesName?: ModelFinderNameQuery; | 
|     geoIndex?: ModelFinderIndexQuery; | 
|     geoId?: ModelFinderIdQuery; | 
|     geoName?: ModelFinderNameQuery; | 
|     bmapIndex?: ModelFinderIndexQuery; | 
|     bmapId?: ModelFinderIdQuery; | 
|     bmapName?: ModelFinderNameQuery; | 
|     xAxisIndex?: ModelFinderIndexQuery; | 
|     xAxisId?: ModelFinderIdQuery; | 
|     xAxisName?: ModelFinderNameQuery; | 
|     yAxisIndex?: ModelFinderIndexQuery; | 
|     yAxisId?: ModelFinderIdQuery; | 
|     yAxisName?: ModelFinderNameQuery; | 
|     gridIndex?: ModelFinderIndexQuery; | 
|     gridId?: ModelFinderIdQuery; | 
|     gridName?: ModelFinderNameQuery; | 
|     dataIndex?: number; | 
|     dataIndexInside?: number; | 
| }; | 
| /** | 
|  * { | 
|  *     seriesModels: [seriesModel1, seriesModel2], | 
|  *     seriesModel: seriesModel1, // The first model | 
|  *     geoModels: [geoModel1, geoModel2], | 
|  *     geoModel: geoModel1, // The first model | 
|  *     ... | 
|  * } | 
|  */ | 
| export declare type ParsedModelFinder = { | 
|     [key: string]: ComponentModel | ComponentModel[] | undefined; | 
| }; | 
| export declare type ParsedModelFinderKnown = ParsedModelFinder & { | 
|     seriesModels?: SeriesModel[]; | 
|     seriesModel?: SeriesModel; | 
|     xAxisModels?: CartesianAxisModel[]; | 
|     xAxisModel?: CartesianAxisModel; | 
|     yAxisModels?: CartesianAxisModel[]; | 
|     yAxisModel?: CartesianAxisModel; | 
|     gridModels?: GridModel[]; | 
|     gridModel?: GridModel; | 
|     dataIndex?: number; | 
|     dataIndexInside?: number; | 
| }; | 
| /** | 
|  * The same behavior as `component.getReferringComponents`. | 
|  */ | 
| export declare function parseFinder(ecModel: GlobalModel, finderInput: ModelFinder, opt?: { | 
|     defaultMainType?: ComponentMainType; | 
|     includeMainTypes?: ComponentMainType[]; | 
|     enableAll?: boolean; | 
|     enableNone?: boolean; | 
| }): ParsedModelFinder; | 
| export declare function preParseFinder(finderInput: ModelFinder, opt?: { | 
|     includeMainTypes?: ComponentMainType[]; | 
| }): { | 
|     mainTypeSpecified: boolean; | 
|     queryOptionMap: HashMap<QueryReferringUserOption, ComponentMainType>; | 
|     others: Partial<Pick<ParsedModelFinderKnown, 'dataIndex' | 'dataIndexInside'>>; | 
| }; | 
| export declare type QueryReferringUserOption = { | 
|     index?: ModelFinderIndexQuery; | 
|     id?: ModelFinderIdQuery; | 
|     name?: ModelFinderNameQuery; | 
| }; | 
| export declare const SINGLE_REFERRING: QueryReferringOpt; | 
| export declare const MULTIPLE_REFERRING: QueryReferringOpt; | 
| export declare type QueryReferringOpt = { | 
|     useDefault?: boolean; | 
|     enableAll?: boolean; | 
|     enableNone?: boolean; | 
| }; | 
| export declare function queryReferringComponents(ecModel: GlobalModel, mainType: ComponentMainType, userOption: QueryReferringUserOption, opt?: QueryReferringOpt): { | 
|     models: ComponentModel[]; | 
|     specified: boolean; | 
| }; | 
| export declare function setAttribute(dom: HTMLElement, key: string, value: any): void; | 
| export declare function getAttribute(dom: HTMLElement, key: string): any; | 
| export declare function getTooltipRenderMode(renderModeOption: TooltipRenderMode | 'auto'): TooltipRenderMode; | 
| /** | 
|  * Group a list by key. | 
|  */ | 
| export declare function groupData<T, R extends string | number>(array: T[], getKey: (item: T) => R): { | 
|     keys: R[]; | 
|     buckets: HashMap<T[], R>; | 
| }; | 
| /** | 
|  * Interpolate raw values of a series with percent | 
|  * | 
|  * @param data         data | 
|  * @param labelModel   label model of the text element | 
|  * @param sourceValue  start value. May be null/undefined when init. | 
|  * @param targetValue  end value | 
|  * @param percent      0~1 percentage; 0 uses start value while 1 uses end value | 
|  * @return             interpolated values | 
|  *                     If `sourceValue` and `targetValue` are `number`, return `number`. | 
|  *                     If `sourceValue` and `targetValue` are `string`, return `string`. | 
|  *                     If `sourceValue` and `targetValue` are `(string | number)[]`, return `(string | number)[]`. | 
|  *                     Other cases do not supported. | 
|  */ | 
| export declare function interpolateRawValues(data: SeriesData, precision: number | 'auto', sourceValue: InterpolatableValue, targetValue: InterpolatableValue, percent: number): InterpolatableValue; | 
| export {}; |