@visactor/vchart 2.0.5-alpha.5 → 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/build/es5/index.js +1 -1
  2. package/build/index.es.js +90 -24
  3. package/build/index.js +91 -23
  4. package/build/index.min.js +2 -2
  5. package/build/tsconfig.tsbuildinfo +1 -1
  6. package/cjs/animation/utils.js +1 -1
  7. package/cjs/animation/utils.js.map +1 -1
  8. package/cjs/component/geo/geo-coordinate.js +12 -7
  9. package/cjs/component/geo/geo-coordinate.js.map +1 -1
  10. package/cjs/component/marker/interface.d.ts +1 -0
  11. package/cjs/component/marker/interface.js.map +1 -1
  12. package/cjs/component/marker/mark-area/cartesian-mark-area.js +4 -4
  13. package/cjs/component/marker/mark-area/cartesian-mark-area.js.map +1 -1
  14. package/cjs/component/marker/utils.d.ts +1 -1
  15. package/cjs/component/marker/utils.js +45 -14
  16. package/cjs/component/marker/utils.js.map +1 -1
  17. package/cjs/core/index.d.ts +1 -1
  18. package/cjs/core/index.js +1 -1
  19. package/cjs/core/index.js.map +1 -1
  20. package/cjs/index.d.ts +1 -0
  21. package/cjs/index.js +11 -11
  22. package/cjs/index.js.map +1 -1
  23. package/cjs/layout/grid-layout/grid-layout.js +2 -0
  24. package/cjs/layout/grid-layout/grid-layout.js.map +1 -1
  25. package/cjs/plugin/components/tooltip-handler/utils/svg.js +8 -5
  26. package/cjs/plugin/components/tooltip-handler/utils/svg.js.map +1 -1
  27. package/cjs/region/interface.d.ts +2 -0
  28. package/cjs/region/interface.js.map +1 -1
  29. package/esm/animation/utils.js +1 -1
  30. package/esm/animation/utils.js.map +1 -1
  31. package/esm/component/geo/geo-coordinate.js +12 -7
  32. package/esm/component/geo/geo-coordinate.js.map +1 -1
  33. package/esm/component/marker/interface.d.ts +1 -0
  34. package/esm/component/marker/interface.js.map +1 -1
  35. package/esm/component/marker/mark-area/cartesian-mark-area.js +4 -4
  36. package/esm/component/marker/mark-area/cartesian-mark-area.js.map +1 -1
  37. package/esm/component/marker/utils.d.ts +1 -1
  38. package/esm/component/marker/utils.js +45 -14
  39. package/esm/component/marker/utils.js.map +1 -1
  40. package/esm/core/index.d.ts +1 -1
  41. package/esm/core/index.js +1 -1
  42. package/esm/core/index.js.map +1 -1
  43. package/esm/index.d.ts +1 -0
  44. package/esm/index.js +2 -0
  45. package/esm/index.js.map +1 -1
  46. package/esm/layout/grid-layout/grid-layout.js +2 -0
  47. package/esm/layout/grid-layout/grid-layout.js.map +1 -1
  48. package/esm/plugin/components/tooltip-handler/utils/svg.js +8 -6
  49. package/esm/plugin/components/tooltip-handler/utils/svg.js.map +1 -1
  50. package/esm/region/interface.d.ts +2 -0
  51. package/esm/region/interface.js.map +1 -1
  52. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/animation/utils.ts"],"names":[],"mappings":"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","file":"utils.js","sourcesContent":["import type {\n MarkAnimationSpec,\n IAnimationState,\n IAnimationConfig,\n ChannelAnimationConfig,\n IAnimationTypeConfig,\n IAnimationTimeline,\n TypeAnimationConfig\n} from './interface';\nimport type { IStateAnimateSpec, IAnimationSpec } from './spec';\nimport { isFunction, isValidNumber } from '../util/type';\nimport { DEFAULT_DATA_INDEX } from '../constant/data';\nimport { DEFAULT_ANIMATION_CONFIG } from './config';\nimport { cloneDeep, isArray, isObject, isValid } from '@visactor/vutils';\nimport type { SeriesMarkNameEnum } from '../series/interface/type';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport type { ISeries } from '../series';\nimport type { ISeriesSpec } from '../typings';\nimport type { IModelMarkAttributeContext } from '../compile/mark';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport type { IMarkGraphic } from '../core';\n\nexport const AnimationStates = [...Object.keys(DEFAULT_ANIMATION_CONFIG), 'normal'];\n\nexport function animationConfig<Preset extends string>(\n defaultConfig: MarkAnimationSpec = {},\n userConfig?: Partial<\n Record<IAnimationState, boolean | IStateAnimateSpec<Preset> | IAnimationConfig | IAnimationConfig[]>\n >,\n params?: {\n dataIndex: (datum: any, params: any) => number;\n dataCount: () => number;\n }\n) {\n const config = {} as MarkAnimationSpec;\n for (let i = 0; i < AnimationStates.length; i++) {\n const state = AnimationStates[i];\n const userStateConfig = userConfig ? (userConfig as any)[state] : undefined;\n\n if (userStateConfig === false) {\n continue;\n }\n\n if (state === 'normal') {\n userStateConfig && (config.normal = userStateConfig as IAnimationTypeConfig);\n continue;\n } else if (state === 'state') {\n if (userStateConfig !== false) {\n config.state = (userStateConfig ?? DEFAULT_ANIMATION_CONFIG.state) as any;\n }\n continue;\n }\n\n if (state !== 'update' && !userStateConfig && !(defaultConfig as any)[state]) {\n // no user config and default config\n continue;\n }\n\n // 开始处理默认动画逻辑\n let defaultStateConfig: IAnimationConfig[];\n if (isArray((defaultConfig as any)[state])) {\n defaultStateConfig = (defaultConfig as any)[state] as IAnimationConfig[];\n } else {\n defaultStateConfig = [{ ...(DEFAULT_ANIMATION_CONFIG as any)[state], ...(defaultConfig as any)[state] } as any];\n }\n // FIXME: 用来控制当动画状态发生变更时是否清除正在执行的动画。\n // 现在 vrender 对于同一个视觉通道的 tween 不会做覆盖的处理。若不做动画清空同时 exit 动画比 update 动画时间长的情况下,效果会不正确\n if (state === 'exit') {\n defaultStateConfig.forEach(exitConfig => {\n exitConfig.controlOptions = { stopWhenStateChange: true };\n });\n }\n\n if (!userStateConfig) {\n (config as any)[state] = defaultStateConfig;\n continue;\n }\n\n // 开始处理用户配置的动画逻辑\n let stateConfig: IAnimationConfig[];\n if (isArray(userStateConfig)) {\n stateConfig = userStateConfig.map((userConfig, i) => {\n let singleConfig: IAnimationConfig = userConfig;\n // not merge default config when user animation config is array\n if (isChannelAnimation(singleConfig)) {\n // `type` and `channel` is conflict, and `type` has a higher priority.\n // here if user configured `channel`, we should remove `type` which will come from default animation config\n delete (singleConfig as TypeAnimationConfig).type;\n }\n if (singleConfig.oneByOne) {\n singleConfig = produceOneByOne(\n singleConfig as IAnimationTypeConfig,\n params?.dataIndex ?? defaultDataIndex,\n params?.dataCount\n );\n }\n return singleConfig;\n });\n } else {\n stateConfig = defaultStateConfig.map((stateConfig, i) => {\n let singleConfig: IAnimationConfig = mergeSpec({}, defaultStateConfig[i], userStateConfig) as IAnimationConfig;\n if (isChannelAnimation(singleConfig)) {\n // `type` and `channel` is conflict, and `type` has a higher priority.\n // here if user configured `channel`, we should remove `type` which will come from default animation config\n delete (singleConfig as TypeAnimationConfig).type;\n }\n\n if (singleConfig.oneByOne) {\n singleConfig = produceOneByOne(\n singleConfig as IAnimationTypeConfig,\n params?.dataIndex ?? defaultDataIndex,\n params?.dataCount\n );\n }\n return singleConfig;\n });\n }\n\n (config as any)[state] = stateConfig;\n }\n return config;\n}\n\nexport function userAnimationConfig<M extends string, Preset extends string>(\n markName: SeriesMarkNameEnum | string,\n spec: IAnimationSpec<M, Preset>,\n ctx: IModelMarkAttributeContext\n) {\n const userConfig: Partial<\n Record<IAnimationState, boolean | IStateAnimateSpec<Preset> | IAnimationConfig | IAnimationConfig[]>\n > = {};\n\n if (isValid(spec.animationAppear)) {\n userConfig.appear = spec.animationAppear[markName] ?? spec.animationAppear;\n }\n if (isValid(spec.animationDisappear)) {\n userConfig.disappear = spec.animationDisappear[markName] ?? spec.animationDisappear;\n }\n if (isValid(spec.animationEnter)) {\n userConfig.enter = spec.animationEnter[markName] ?? spec.animationEnter;\n }\n if (isValid(spec.animationExit)) {\n userConfig.exit = spec.animationExit[markName] ?? spec.animationExit;\n }\n if (isValid(spec.animationUpdate)) {\n userConfig.update = spec.animationUpdate[markName] ?? spec.animationUpdate;\n }\n if (isValid(spec.animationState)) {\n userConfig.state = spec.animationState[markName] ?? spec.animationState;\n }\n if (spec.animationNormal && spec.animationNormal[markName]) {\n userConfig.normal = spec.animationNormal[markName];\n }\n\n return uniformAnimationConfig(userConfig, ctx);\n}\n\n/**\n * oneByOne\n */\nfunction produceOneByOne(\n stateConfig: IAnimationTypeConfig,\n dataIndex: (datum: any, params: any) => number,\n dataCount?: () => number\n) {\n const { oneByOne, duration, delay, delayAfter } = stateConfig;\n stateConfig.delay = (datum: any, g: IGraphic, params: any) => {\n const index = dataIndex(datum, params);\n const durationTime = isFunction(duration) ? duration(datum, g, params) : isValidNumber(duration) ? duration : 0;\n const userDelay = isFunction(delay) ? delay(datum, g, params) : isValidNumber(delay) ? delay : 0;\n let oneByOneTime = isFunction(oneByOne) ? oneByOne(datum, g, params) : oneByOne;\n if (oneByOneTime === false) {\n return userDelay;\n }\n oneByOneTime = oneByOneTime === true ? 0 : oneByOneTime;\n return userDelay + index * (durationTime + oneByOneTime);\n };\n stateConfig.delayAfter = (datum: any, g: IGraphic, params: any) => {\n const index = dataIndex(datum, params);\n const durationTime = isFunction(duration) ? duration(datum, g, params) : isValidNumber(duration) ? duration : 0;\n const userDelayAfter = isFunction(delayAfter)\n ? delayAfter(datum, g, params)\n : isValidNumber(delayAfter)\n ? delayAfter\n : 0;\n let oneByOneTime = isFunction(oneByOne) ? oneByOne(datum, g, params) : oneByOne;\n if (oneByOneTime === false) {\n return userDelayAfter;\n }\n const indexCount = dataCount ? dataCount() : g.parent.count - 1;\n oneByOneTime = oneByOneTime === true ? 0 : oneByOneTime;\n return userDelayAfter + (indexCount - index) * (durationTime + oneByOneTime);\n };\n delete stateConfig.oneByOne;\n return stateConfig;\n}\n\nfunction defaultDataIndex(datum: any, graphic: IMarkGraphic) {\n return datum?.[DEFAULT_DATA_INDEX] ?? graphic.context.graphicIndex;\n}\n\nexport function shouldMarkDoMorph(spec: ISeriesSpec & IAnimationSpec<string, string>, markName: string) {\n if (spec.animation === false) {\n return false;\n }\n\n if (spec.morph?.enable === false) {\n return false;\n }\n\n const appearAnimationEnabled = (spec.animationAppear?.[markName] ?? spec.animationAppear) !== false;\n const updateAnimationEnabled = (spec.animationUpdate?.[markName] ?? spec.animationUpdate) !== false;\n\n if (!appearAnimationEnabled || !updateAnimationEnabled) {\n return false;\n }\n\n return true;\n}\n\nexport function isTimeLineAnimation(animationConfig: IAnimationConfig) {\n return isValid((animationConfig as IAnimationTimeline).timeSlices);\n}\n\nexport function isChannelAnimation(animationConfig: IAnimationConfig) {\n return !isTimeLineAnimation(animationConfig) && isValid((animationConfig as ChannelAnimationConfig).channel);\n}\n\nexport function uniformAnimationConfig<Preset extends string>(\n config: Partial<Record<IAnimationState, boolean | IStateAnimateSpec<Preset> | IAnimationConfig | IAnimationConfig[]>>,\n ctx: IModelMarkAttributeContext\n) {\n if (!config) {\n return config;\n }\n const excludeKeys = ['custom', 'customParameters'];\n config = cloneDeep(config, null, excludeKeys);\n traverseSpec(\n config,\n (node: any) => {\n // 将函数转换为 vchart 代理的函数\n // 这里可能会传自定义动画的构造函数,不能被代理\n if (isFunction(node) && node.prototype?.constructor !== node) {\n const name = (...args: any) => {\n return node(...args, ctx);\n };\n return name;\n }\n return node;\n },\n excludeKeys\n );\n\n return config;\n}\n\nfunction traverseSpec(spec: any, transform: (node: any, key: string | number) => any, excludeKeys: string[] = []) {\n if (isArray(spec)) {\n spec.forEach((i: any, index: number) => {\n spec[index] = transform(spec[index], index);\n traverseSpec(spec[index], transform, excludeKeys);\n });\n } else if (isObject(spec)) {\n for (const key in spec) {\n if (!excludeKeys.includes(key)) {\n spec[key] = transform(spec[key], key);\n traverseSpec(spec[key], transform, excludeKeys);\n }\n }\n }\n}\n\nexport function isAnimationEnabledForSeries(series: ISeries) {\n const seriesSpec = series.getSpec();\n\n if (seriesSpec.animation === false) {\n return false;\n }\n\n if (series.getOption()?.globalInstance?.isAnimationEnable() === false) {\n return false;\n }\n\n // if (!isValid(series.getRegion().animate)) {\n // return false;\n // }\n\n let animationThreshold = seriesSpec.animationThreshold ?? Number.MAX_SAFE_INTEGER;\n\n // set mark stroke color follow series color\n // only set normal state in the level lower than level Series\n series.getMarks()?.forEach(m => {\n const config = m.getMarkConfig();\n if (config) {\n if (config.large && config.largeThreshold) {\n animationThreshold = Math.min(animationThreshold, config.largeThreshold);\n }\n if (config.progressiveThreshold) {\n animationThreshold = Math.min(animationThreshold, config.progressiveThreshold);\n }\n }\n });\n // auto close animation\n if (series.getRawData()?.latestData?.length >= animationThreshold) {\n return false;\n }\n\n return true;\n}\n"]}
1
+ {"version":3,"sources":["../src/animation/utils.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEzE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAOvD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,EAAE,QAAQ,CAAC,CAAC;AAEpF,MAAM,UAAU,eAAe,CAC7B,gBAAmC,EAAE,EACrC,UAEC,EACD,MAGC;IAED,MAAM,MAAM,GAAG,EAAuB,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC/C,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,eAAe,GAAG,UAAU,CAAC,CAAC,CAAE,UAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE5E,IAAI,eAAe,KAAK,KAAK,EAAE;YAC7B,SAAS;SACV;QAED,IAAI,KAAK,KAAK,QAAQ,EAAE;YACtB,eAAe,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,eAAuC,CAAC,CAAC;YAC7E,SAAS;SACV;aAAM,IAAI,KAAK,KAAK,OAAO,EAAE;YAC5B,IAAI,eAAe,KAAK,KAAK,EAAE;gBAC7B,MAAM,CAAC,KAAK,GAAG,CAAC,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,wBAAwB,CAAC,KAAK,CAAQ,CAAC;aAC3E;YACD,SAAS;SACV;QAED,IAAI,KAAK,KAAK,QAAQ,IAAI,CAAC,eAAe,IAAI,CAAE,aAAqB,CAAC,KAAK,CAAC,EAAE;YAE5E,SAAS;SACV;QAGD,IAAI,kBAAsC,CAAC;QAC3C,IAAI,OAAO,CAAE,aAAqB,CAAC,KAAK,CAAC,CAAC,EAAE;YAC1C,kBAAkB,GAAI,aAAqB,CAAC,KAAK,CAAuB,CAAC;SAC1E;aAAM;YACL,kBAAkB,GAAG,CAAC,gCAAM,wBAAgC,CAAC,KAAK,CAAC,GAAM,aAAqB,CAAC,KAAK,CAAC,CAAS,CAAC,CAAC;SACjH;QAGD,IAAI,KAAK,KAAK,MAAM,EAAE;YACpB,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;gBACtC,UAAU,CAAC,cAAc,GAAG,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC;YAC5D,CAAC,CAAC,CAAC;SACJ;QAED,IAAI,CAAC,eAAe,EAAE;YACnB,MAAc,CAAC,KAAK,CAAC,GAAG,kBAAkB,CAAC;YAC5C,SAAS;SACV;QAGD,IAAI,WAA+B,CAAC;QACpC,IAAI,OAAO,CAAC,eAAe,CAAC,EAAE;YAC5B,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE;;gBAClD,IAAI,YAAY,GAAqB,UAAU,CAAC;gBAEhD,IAAI,kBAAkB,CAAC,YAAY,CAAC,EAAE;oBAGpC,OAAQ,YAAoC,CAAC,IAAI,CAAC;iBACnD;gBACD,IAAI,YAAY,CAAC,QAAQ,EAAE;oBACzB,YAAY,GAAG,eAAe,CAC5B,YAAoC,EACpC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,mCAAI,gBAAgB,EACrC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,CAClB,CAAC;iBACH;gBACD,OAAO,YAAY,CAAC;YACtB,CAAC,CAAC,CAAC;SACJ;aAAM;YACL,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE;;gBACtD,IAAI,YAAY,GAAqB,SAAS,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,eAAe,CAAqB,CAAC;gBAC/G,IAAI,kBAAkB,CAAC,YAAY,CAAC,EAAE;oBAGpC,OAAQ,YAAoC,CAAC,IAAI,CAAC;iBACnD;gBAED,IAAI,YAAY,CAAC,QAAQ,EAAE;oBACzB,YAAY,GAAG,eAAe,CAC5B,YAAoC,EACpC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,mCAAI,gBAAgB,EACrC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,CAClB,CAAC;iBACH;gBACD,OAAO,YAAY,CAAC;YACtB,CAAC,CAAC,CAAC;SACJ;QAEA,MAAc,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;KACtC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,QAAqC,EACrC,IAA+B,EAC/B,GAA+B;;IAE/B,MAAM,UAAU,GAEZ,EAAE,CAAC;IAEP,IAAI,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;QACjC,UAAU,CAAC,MAAM,GAAG,MAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,mCAAI,IAAI,CAAC,eAAe,CAAC;KAC5E;IACD,IAAI,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE;QACpC,UAAU,CAAC,SAAS,GAAG,MAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,mCAAI,IAAI,CAAC,kBAAkB,CAAC;KACrF;IACD,IAAI,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;QAChC,UAAU,CAAC,KAAK,GAAG,MAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,mCAAI,IAAI,CAAC,cAAc,CAAC;KACzE;IACD,IAAI,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;QAC/B,UAAU,CAAC,IAAI,GAAG,MAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,mCAAI,IAAI,CAAC,aAAa,CAAC;KACtE;IACD,IAAI,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;QACjC,UAAU,CAAC,MAAM,GAAG,MAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,mCAAI,IAAI,CAAC,eAAe,CAAC;KAC5E;IACD,IAAI,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;QAChC,UAAU,CAAC,KAAK,GAAG,MAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,mCAAI,IAAI,CAAC,cAAc,CAAC;KACzE;IACD,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;QAC1D,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;KACpD;IAED,OAAO,sBAAsB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AACjD,CAAC;AAKD,SAAS,eAAe,CACtB,WAAiC,EACjC,SAA8C,EAC9C,SAAwB;IAExB,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC;IAC9D,WAAW,CAAC,KAAK,GAAG,CAAC,KAAU,EAAE,CAAW,EAAE,MAAW,EAAE,EAAE;QAC3D,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACvC,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAChH,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACjG,IAAI,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAChF,IAAI,YAAY,KAAK,KAAK,EAAE;YAC1B,OAAO,SAAS,CAAC;SAClB;QACD,YAAY,GAAG,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QACxD,OAAO,SAAS,GAAG,KAAK,GAAG,CAAC,YAAY,GAAG,YAAY,CAAC,CAAC;IAC3D,CAAC,CAAC;IACF,WAAW,CAAC,UAAU,GAAG,CAAC,KAAU,EAAE,CAAW,EAAE,MAAW,EAAE,EAAE;QAChE,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACvC,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAChH,MAAM,cAAc,GAAG,UAAU,CAAC,UAAU,CAAC;YAC3C,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC;YAC9B,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC;gBACzB,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,CAAC,CAAC;QACR,IAAI,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAChF,IAAI,YAAY,KAAK,KAAK,EAAE;YAC1B,OAAO,cAAc,CAAC;SACvB;QACD,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;QAChE,YAAY,GAAG,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QACxD,OAAO,cAAc,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,GAAG,YAAY,CAAC,CAAC;IAC/E,CAAC,CAAC;IACF,OAAO,WAAW,CAAC,QAAQ,CAAC;IAC5B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAU,EAAE,OAAqB;;IACzD,OAAO,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAG,kBAAkB,CAAC,mCAAI,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAkD,EAAE,QAAgB;;IACpG,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;QAC5B,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,MAAM,MAAK,KAAK,EAAE;QAChC,OAAO,KAAK,CAAC;KACd;IAED,MAAM,sBAAsB,GAAG,CAAC,MAAA,MAAA,IAAI,CAAC,eAAe,0CAAG,QAAQ,CAAC,mCAAI,IAAI,CAAC,eAAe,CAAC,KAAK,KAAK,CAAC;IACpG,MAAM,sBAAsB,GAAG,CAAC,MAAA,MAAA,IAAI,CAAC,eAAe,0CAAG,QAAQ,CAAC,mCAAI,IAAI,CAAC,eAAe,CAAC,KAAK,KAAK,CAAC;IAEpG,IAAI,CAAC,sBAAsB,IAAI,CAAC,sBAAsB,EAAE;QACtD,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,eAAiC;IACnE,OAAO,OAAO,CAAE,eAAsC,CAAC,UAAU,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,eAAiC;IAClE,OAAO,CAAC,mBAAmB,CAAC,eAAe,CAAC,IAAI,OAAO,CAAE,eAA0C,CAAC,OAAO,CAAC,CAAC;AAC/G,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,MAAqH,EACrH,GAA+B;IAE/B,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,MAAM,CAAC;KACf;IACD,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;IACnD,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAC9C,YAAY,CACV,MAAM,EACN,CAAC,IAAS,EAAE,EAAE;;QAGZ,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,WAAW,MAAK,IAAI,EAAE;YAC5D,MAAM,IAAI,GAAG,CAAC,GAAG,IAAS,EAAE,EAAE;gBAC5B,OAAO,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;YAC5B,CAAC,CAAC;YACF,OAAO,IAAI,CAAC;SACb;QACD,OAAO,IAAI,CAAC;IACd,CAAC,EACD,WAAW,CACZ,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,IAAS,EAAE,SAAmD,EAAE,cAAwB,EAAE;IAC9G,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;QACjB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,KAAa,EAAE,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;YAC5C,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;KACJ;SAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;QAEvD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBAC9B,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;gBACtC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;aACjD;SACF;KACF;AACH,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAAe;;IACzD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IAEpC,IAAI,UAAU,CAAC,SAAS,KAAK,KAAK,EAAE;QAClC,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAA,MAAA,MAAA,MAAM,CAAC,SAAS,EAAE,0CAAE,cAAc,0CAAE,iBAAiB,EAAE,MAAK,KAAK,EAAE;QACrE,OAAO,KAAK,CAAC;KACd;IAMD,IAAI,kBAAkB,GAAG,MAAA,UAAU,CAAC,kBAAkB,mCAAI,MAAM,CAAC,gBAAgB,CAAC;IAIlF,MAAA,MAAM,CAAC,QAAQ,EAAE,0CAAE,OAAO,CAAC,CAAC,CAAC,EAAE;QAC7B,MAAM,MAAM,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC;QACjC,IAAI,MAAM,EAAE;YACV,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,cAAc,EAAE;gBACzC,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;aAC1E;YACD,IAAI,MAAM,CAAC,oBAAoB,EAAE;gBAC/B,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAC;aAChF;SACF;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAA,MAAA,MAAA,MAAM,CAAC,UAAU,EAAE,0CAAE,UAAU,0CAAE,MAAM,KAAI,kBAAkB,EAAE;QACjE,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC","file":"utils.js","sourcesContent":["import type {\n MarkAnimationSpec,\n IAnimationState,\n IAnimationConfig,\n ChannelAnimationConfig,\n IAnimationTypeConfig,\n IAnimationTimeline,\n TypeAnimationConfig\n} from './interface';\nimport type { IStateAnimateSpec, IAnimationSpec } from './spec';\nimport { isFunction, isValidNumber } from '../util/type';\nimport { DEFAULT_DATA_INDEX } from '../constant/data';\nimport { DEFAULT_ANIMATION_CONFIG } from './config';\nimport { cloneDeep, isArray, isObject, isValid } from '@visactor/vutils';\nimport type { SeriesMarkNameEnum } from '../series/interface/type';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport type { ISeries } from '../series';\nimport type { ISeriesSpec } from '../typings';\nimport type { IModelMarkAttributeContext } from '../compile/mark';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport type { IMarkGraphic } from '../core';\n\nexport const AnimationStates = [...Object.keys(DEFAULT_ANIMATION_CONFIG), 'normal'];\n\nexport function animationConfig<Preset extends string>(\n defaultConfig: MarkAnimationSpec = {},\n userConfig?: Partial<\n Record<IAnimationState, boolean | IStateAnimateSpec<Preset> | IAnimationConfig | IAnimationConfig[]>\n >,\n params?: {\n dataIndex: (datum: any, params: any) => number;\n dataCount: () => number;\n }\n) {\n const config = {} as MarkAnimationSpec;\n for (let i = 0; i < AnimationStates.length; i++) {\n const state = AnimationStates[i];\n const userStateConfig = userConfig ? (userConfig as any)[state] : undefined;\n\n if (userStateConfig === false) {\n continue;\n }\n\n if (state === 'normal') {\n userStateConfig && (config.normal = userStateConfig as IAnimationTypeConfig);\n continue;\n } else if (state === 'state') {\n if (userStateConfig !== false) {\n config.state = (userStateConfig ?? DEFAULT_ANIMATION_CONFIG.state) as any;\n }\n continue;\n }\n\n if (state !== 'update' && !userStateConfig && !(defaultConfig as any)[state]) {\n // no user config and default config\n continue;\n }\n\n // 开始处理默认动画逻辑\n let defaultStateConfig: IAnimationConfig[];\n if (isArray((defaultConfig as any)[state])) {\n defaultStateConfig = (defaultConfig as any)[state] as IAnimationConfig[];\n } else {\n defaultStateConfig = [{ ...(DEFAULT_ANIMATION_CONFIG as any)[state], ...(defaultConfig as any)[state] } as any];\n }\n // FIXME: 用来控制当动画状态发生变更时是否清除正在执行的动画。\n // 现在 vrender 对于同一个视觉通道的 tween 不会做覆盖的处理。若不做动画清空同时 exit 动画比 update 动画时间长的情况下,效果会不正确\n if (state === 'exit') {\n defaultStateConfig.forEach(exitConfig => {\n exitConfig.controlOptions = { stopWhenStateChange: true };\n });\n }\n\n if (!userStateConfig) {\n (config as any)[state] = defaultStateConfig;\n continue;\n }\n\n // 开始处理用户配置的动画逻辑\n let stateConfig: IAnimationConfig[];\n if (isArray(userStateConfig)) {\n stateConfig = userStateConfig.map((userConfig, i) => {\n let singleConfig: IAnimationConfig = userConfig;\n // not merge default config when user animation config is array\n if (isChannelAnimation(singleConfig)) {\n // `type` and `channel` is conflict, and `type` has a higher priority.\n // here if user configured `channel`, we should remove `type` which will come from default animation config\n delete (singleConfig as TypeAnimationConfig).type;\n }\n if (singleConfig.oneByOne) {\n singleConfig = produceOneByOne(\n singleConfig as IAnimationTypeConfig,\n params?.dataIndex ?? defaultDataIndex,\n params?.dataCount\n );\n }\n return singleConfig;\n });\n } else {\n stateConfig = defaultStateConfig.map((stateConfig, i) => {\n let singleConfig: IAnimationConfig = mergeSpec({}, defaultStateConfig[i], userStateConfig) as IAnimationConfig;\n if (isChannelAnimation(singleConfig)) {\n // `type` and `channel` is conflict, and `type` has a higher priority.\n // here if user configured `channel`, we should remove `type` which will come from default animation config\n delete (singleConfig as TypeAnimationConfig).type;\n }\n\n if (singleConfig.oneByOne) {\n singleConfig = produceOneByOne(\n singleConfig as IAnimationTypeConfig,\n params?.dataIndex ?? defaultDataIndex,\n params?.dataCount\n );\n }\n return singleConfig;\n });\n }\n\n (config as any)[state] = stateConfig;\n }\n return config;\n}\n\nexport function userAnimationConfig<M extends string, Preset extends string>(\n markName: SeriesMarkNameEnum | string,\n spec: IAnimationSpec<M, Preset>,\n ctx: IModelMarkAttributeContext\n) {\n const userConfig: Partial<\n Record<IAnimationState, boolean | IStateAnimateSpec<Preset> | IAnimationConfig | IAnimationConfig[]>\n > = {};\n\n if (isValid(spec.animationAppear)) {\n userConfig.appear = spec.animationAppear[markName] ?? spec.animationAppear;\n }\n if (isValid(spec.animationDisappear)) {\n userConfig.disappear = spec.animationDisappear[markName] ?? spec.animationDisappear;\n }\n if (isValid(spec.animationEnter)) {\n userConfig.enter = spec.animationEnter[markName] ?? spec.animationEnter;\n }\n if (isValid(spec.animationExit)) {\n userConfig.exit = spec.animationExit[markName] ?? spec.animationExit;\n }\n if (isValid(spec.animationUpdate)) {\n userConfig.update = spec.animationUpdate[markName] ?? spec.animationUpdate;\n }\n if (isValid(spec.animationState)) {\n userConfig.state = spec.animationState[markName] ?? spec.animationState;\n }\n if (spec.animationNormal && spec.animationNormal[markName]) {\n userConfig.normal = spec.animationNormal[markName];\n }\n\n return uniformAnimationConfig(userConfig, ctx);\n}\n\n/**\n * oneByOne\n */\nfunction produceOneByOne(\n stateConfig: IAnimationTypeConfig,\n dataIndex: (datum: any, params: any) => number,\n dataCount?: () => number\n) {\n const { oneByOne, duration, delay, delayAfter } = stateConfig;\n stateConfig.delay = (datum: any, g: IGraphic, params: any) => {\n const index = dataIndex(datum, params);\n const durationTime = isFunction(duration) ? duration(datum, g, params) : isValidNumber(duration) ? duration : 0;\n const userDelay = isFunction(delay) ? delay(datum, g, params) : isValidNumber(delay) ? delay : 0;\n let oneByOneTime = isFunction(oneByOne) ? oneByOne(datum, g, params) : oneByOne;\n if (oneByOneTime === false) {\n return userDelay;\n }\n oneByOneTime = oneByOneTime === true ? 0 : oneByOneTime;\n return userDelay + index * (durationTime + oneByOneTime);\n };\n stateConfig.delayAfter = (datum: any, g: IGraphic, params: any) => {\n const index = dataIndex(datum, params);\n const durationTime = isFunction(duration) ? duration(datum, g, params) : isValidNumber(duration) ? duration : 0;\n const userDelayAfter = isFunction(delayAfter)\n ? delayAfter(datum, g, params)\n : isValidNumber(delayAfter)\n ? delayAfter\n : 0;\n let oneByOneTime = isFunction(oneByOne) ? oneByOne(datum, g, params) : oneByOne;\n if (oneByOneTime === false) {\n return userDelayAfter;\n }\n const indexCount = dataCount ? dataCount() : g.parent.count - 1;\n oneByOneTime = oneByOneTime === true ? 0 : oneByOneTime;\n return userDelayAfter + (indexCount - index) * (durationTime + oneByOneTime);\n };\n delete stateConfig.oneByOne;\n return stateConfig;\n}\n\nfunction defaultDataIndex(datum: any, graphic: IMarkGraphic) {\n return datum?.[DEFAULT_DATA_INDEX] ?? graphic.context.graphicIndex;\n}\n\nexport function shouldMarkDoMorph(spec: ISeriesSpec & IAnimationSpec<string, string>, markName: string) {\n if (spec.animation === false) {\n return false;\n }\n\n if (spec.morph?.enable === false) {\n return false;\n }\n\n const appearAnimationEnabled = (spec.animationAppear?.[markName] ?? spec.animationAppear) !== false;\n const updateAnimationEnabled = (spec.animationUpdate?.[markName] ?? spec.animationUpdate) !== false;\n\n if (!appearAnimationEnabled || !updateAnimationEnabled) {\n return false;\n }\n\n return true;\n}\n\nexport function isTimeLineAnimation(animationConfig: IAnimationConfig) {\n return isValid((animationConfig as IAnimationTimeline).timeSlices);\n}\n\nexport function isChannelAnimation(animationConfig: IAnimationConfig) {\n return !isTimeLineAnimation(animationConfig) && isValid((animationConfig as ChannelAnimationConfig).channel);\n}\n\nexport function uniformAnimationConfig<Preset extends string>(\n config: Partial<Record<IAnimationState, boolean | IStateAnimateSpec<Preset> | IAnimationConfig | IAnimationConfig[]>>,\n ctx: IModelMarkAttributeContext\n) {\n if (!config) {\n return config;\n }\n const excludeKeys = ['custom', 'customParameters'];\n config = cloneDeep(config, null, excludeKeys);\n traverseSpec(\n config,\n (node: any) => {\n // 将函数转换为 vchart 代理的函数\n // 这里可能会传自定义动画的构造函数,不能被代理\n if (isFunction(node) && node.prototype?.constructor !== node) {\n const name = (...args: any) => {\n return node(...args, ctx);\n };\n return name;\n }\n return node;\n },\n excludeKeys\n );\n\n return config;\n}\n\nfunction traverseSpec(spec: any, transform: (node: any, key: string | number) => any, excludeKeys: string[] = []) {\n if (isArray(spec)) {\n spec.forEach((i: any, index: number) => {\n spec[index] = transform(spec[index], index);\n traverseSpec(spec[index], transform, excludeKeys);\n });\n } else if (isObject(spec) && typeof spec !== 'function') {\n // spec如果是函数, 无需遍历; 一个bad case: 线上环境在function的prototype上挂载了某个属性导致这里遍历的时候出现了死循环\n for (const key in spec) {\n if (!excludeKeys.includes(key)) {\n spec[key] = transform(spec[key], key);\n traverseSpec(spec[key], transform, excludeKeys);\n }\n }\n }\n}\n\nexport function isAnimationEnabledForSeries(series: ISeries) {\n const seriesSpec = series.getSpec();\n\n if (seriesSpec.animation === false) {\n return false;\n }\n\n if (series.getOption()?.globalInstance?.isAnimationEnable() === false) {\n return false;\n }\n\n // if (!isValid(series.getRegion().animate)) {\n // return false;\n // }\n\n let animationThreshold = seriesSpec.animationThreshold ?? Number.MAX_SAFE_INTEGER;\n\n // set mark stroke color follow series color\n // only set normal state in the level lower than level Series\n series.getMarks()?.forEach(m => {\n const config = m.getMarkConfig();\n if (config) {\n if (config.large && config.largeThreshold) {\n animationThreshold = Math.min(animationThreshold, config.largeThreshold);\n }\n if (config.progressiveThreshold) {\n animationThreshold = Math.min(animationThreshold, config.progressiveThreshold);\n }\n }\n });\n // auto close animation\n if (series.getRawData()?.latestData?.length >= animationThreshold) {\n return false;\n }\n\n return true;\n}\n"]}
@@ -120,18 +120,23 @@ export class GeoCoordinate extends BaseComponent {
120
120
  });
121
121
  }
122
122
  initEvent() {
123
+ var _a, _b, _c;
123
124
  this.event.on(ChartEvent.scaleUpdate, {
124
125
  filter: ({model: model}) => (null == model ? void 0 : model.id) === this.id
125
126
  }, this.effect.scaleUpdate.bind(this));
126
127
  const {roam: roam} = this._spec;
127
- roam && (this.initZoomEventOfRegions(this._regions, null, this._handleChartZoom),
128
- this.initDragEventOfRegions(this._regions, roam.blank ? null : () => !0, this.pan),
129
- this._regions.forEach((r => {
130
- r.getSeries().forEach((s => {
131
- s.event.on("zoom", (e => (s.handleZoom(e), !0))), s.event.on("panmove", (e => (s.handlePan(e),
132
- !0)));
128
+ if (roam) {
129
+ let zoom = !0, drag = !0, blank = !1;
130
+ !0 !== roam && (zoom = null === (_a = roam.zoom) || void 0 === _a || _a, drag = null === (_b = roam.drag) || void 0 === _b || _b,
131
+ blank = null !== (_c = roam.blank) && void 0 !== _c && _c), zoom && this.initZoomEventOfRegions(this._regions, null, this._handleChartZoom),
132
+ drag && this.initDragEventOfRegions(this._regions, blank ? null : () => !0, this.pan),
133
+ this._regions.forEach((r => {
134
+ r.getSeries().forEach((s => {
135
+ s.event.on("zoom", (e => (s.handleZoom(e), !0))), s.event.on("panmove", (e => (s.handlePan(e),
136
+ !0)));
137
+ }));
133
138
  }));
134
- })));
139
+ }
135
140
  }
136
141
  initProjection() {
137
142
  var _a;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/component/geo/geo-coordinate.ts"],"names":[],"mappings":"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","file":"geo-coordinate.js","sourcesContent":["import { LayoutZIndex } from './../../constant/layout';\n/* eslint-disable no-duplicate-imports */\nimport type { IPoint } from '../../typings/coordinate';\nimport { Projection } from './projection';\nimport type { IEffect, IModelRenderOption, IModelSpecInfo } from '../../model/interface';\nimport { ComponentTypeEnum } from '../interface/type';\nimport { BaseComponent } from '../base/base-component';\nimport type { IGeoRegionSpec, IRegion, RegionSpec } from '../../region/interface';\nimport { eachSeries } from '../../util/model';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { ChartEvent } from '../../constant/event';\nimport { PREFIX } from '../../constant/base';\nimport type { ICartesianSeries, IGeoSeries } from '../../series/interface';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport type { IGeoCoordinate, IGeoCoordinateHelper, IGeoCoordinateSpec, IProjectionSpec } from './interface';\nimport type { BaseEventParams, ExtendEventParam, PanEventParam, ZoomEventParam } from '../../event/interface';\nimport type { StringOrNumber } from '../../typings';\nimport type { IZoomable, ZoomEventParams } from '../../interaction/zoom/zoomable';\nimport { Zoomable } from '../../interaction/zoom/zoomable';\nimport { isValid, mixin, isNil, Matrix, isEqual } from '@visactor/vutils';\nimport type { Maybe } from '@visactor/vutils';\nimport { DEFAULT_MAP_LOOK_UP_KEY } from '../../data/transforms/map';\nimport { Factory } from '../../core/factory';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport type { MapSeries } from '../../series';\n\nexport function projectionName(key: string, id: number) {\n return `${PREFIX}_${id}_${key}`;\n}\nexport class GeoCoordinate extends BaseComponent<IGeoRegionSpec> implements IGeoCoordinate {\n static type = ComponentTypeEnum.geoCoordinate;\n type = ComponentTypeEnum.geoCoordinate;\n name: string = ComponentTypeEnum.geoCoordinate;\n\n layoutType: 'none' = 'none';\n protected layoutZIndex: number = LayoutZIndex.Mark;\n\n _longitudeField?: string;\n get longitudeField() {\n return this._longitudeField;\n }\n\n _latitudeField?: string;\n get latitudeField() {\n return this._latitudeField;\n }\n\n protected _projectionSpec: IProjectionSpec = {\n name: projectionName(this.type, this.id),\n type: 'mercator'\n };\n get projectionSpec() {\n return this._projectionSpec;\n }\n setProjection(projectionSpec: IGeoCoordinateSpec['projection']) {\n this._projectionSpec = {\n ...projectionSpec,\n name: this._projectionSpec.name\n };\n }\n\n protected _projection!: Projection;\n\n protected _centerCache: Map<StringOrNumber, { x: number; y: number }>;\n\n private _actualScale = 1;\n\n getZoom() {\n return this._actualScale;\n }\n\n private _initialScale = 1;\n\n static getSpecInfo(chartSpec: any): Maybe<IModelSpecInfo[]> {\n if (isNil(chartSpec)) {\n return null;\n }\n const specInfos: IModelSpecInfo[] = [];\n chartSpec.region.forEach((r: RegionSpec, i: number) => {\n if (r.coordinate === 'geo') {\n // 去除 padding 配置,避免重复计算\n const spec = { ...r, padding: 0 };\n specInfos.push({\n spec,\n regionIndex: i,\n type: ComponentTypeEnum.geoCoordinate,\n specInfoPath: ['component', 'geoCoordinate', i]\n } as any);\n }\n });\n return specInfos;\n }\n\n effect: IEffect = {\n scaleUpdate: () => {\n this.coordinateHelper();\n }\n };\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n if (this._spec.roam) {\n (this as unknown as IZoomable).initZoomable(this.event, this._option.mode);\n }\n\n this._projectionSpec = mergeSpec(this._projectionSpec, this._spec.projection);\n if (this._projectionSpec.zoom > this._spec.zoomLimit?.max) {\n this._projectionSpec.zoom = this._spec.zoomLimit.max;\n }\n if (this._projectionSpec.zoom < this._spec.zoomLimit?.min) {\n this._projectionSpec.zoom = this._spec.zoomLimit.min;\n }\n\n this._actualScale = this._projectionSpec.zoom ?? 1;\n this._initialScale = this._actualScale;\n this._longitudeField = this._spec.longitudeField;\n this._latitudeField = this._spec.latitudeField;\n }\n\n // life cycle\n created() {\n super.created();\n this._regions = this._option.getRegionsInIndex([(this._option as any).regionIndex]);\n this.initProjection();\n this.coordinateHelper();\n this.initEvent();\n this._initCenterCache();\n // FIXME: 这里是在开启缩放时,处理关联的symbol等mark,在地图缩放时应该同步缩放\n // this.rescaleMark();\n }\n\n private _handleChartZoom = (params: ZoomEventParams, event?: BaseEventParams['event']) => {\n let scale = params.zoomDelta;\n // check if the next scale will outrange\n const _lastActualScale = this._actualScale;\n this._actualScale *= scale;\n if (this._actualScale < this._spec.zoomLimit?.min) {\n this._actualScale = this._spec.zoomLimit?.min;\n scale = this._spec.zoomLimit?.min / _lastActualScale;\n } else if (this._actualScale > this._spec.zoomLimit?.max) {\n this._actualScale = this._spec.zoomLimit?.max;\n scale = this._spec.zoomLimit?.max / _lastActualScale;\n }\n this.zoom(scale, [params.zoomX, params.zoomY]);\n return { scale, totalScale: this._actualScale };\n };\n\n dispatchZoom(zoomDelta: number, center?: { x: number; y: number }) {\n const scaleCenter = center || {\n x: this.getLayoutStartPoint().x + this.getLayoutRect().width / 2,\n y: this.getLayoutStartPoint().y + this.getLayoutRect().height / 2\n };\n const { scale, totalScale } = this._handleChartZoom({ zoomDelta, zoomX: scaleCenter.x, zoomY: scaleCenter.y });\n if (scale !== 1) {\n this.event.emit('zoom', {\n scale,\n scaleCenter,\n totalScale,\n model: this\n } as unknown as ExtendEventParam);\n }\n }\n\n initEvent() {\n this.event.on(\n ChartEvent.scaleUpdate,\n { filter: ({ model }) => model?.id === this.id },\n this.effect.scaleUpdate.bind(this)\n );\n\n const { roam } = this._spec;\n if (roam) {\n (this as unknown as IZoomable).initZoomEventOfRegions(this._regions, null, this._handleChartZoom);\n (this as unknown as IZoomable).initDragEventOfRegions(\n this._regions,\n (roam as any).blank ? null : () => true,\n this.pan\n );\n\n this._regions.forEach(r => {\n r.getSeries().forEach(s => {\n s.event.on('zoom', e => {\n s.handleZoom(e as ZoomEventParam);\n return true;\n });\n\n s.event.on('panmove', e => {\n s.handlePan(e as PanEventParam);\n return true;\n });\n });\n });\n }\n }\n\n initProjection() {\n this._projection = new Projection(this._projectionSpec);\n if (this._projection.projection === null) {\n this._option?.onError('unsupported projection type!');\n return;\n }\n }\n\n coordinateHelper() {\n const helper: IGeoCoordinateHelper = {\n longitudeField: this._longitudeField,\n latitudeField: this._latitudeField,\n dataToPosition: this.dataToPosition.bind(this),\n dataToLongitude: this.dataToLongitude.bind(this),\n dataToLatitude: this.dataToLatitude.bind(this),\n shape: this.shape.bind(this),\n getCoordinateId: () => this.id\n };\n\n this._regions.forEach(r => {\n r.getSeries().forEach(s => {\n if (s.type === SeriesTypeEnum.map || s.type === SeriesTypeEnum.pictogram) {\n (s as IGeoSeries).setCoordinateHelper(helper);\n } else {\n // 散点地图\n (s as ICartesianSeries).setXAxisHelper({\n ...helper,\n isContinuous: true,\n dataToPosition: (values: any[], option) => {\n let value = values[0];\n if (isNil(value) && option?.datum) {\n const nameFieldValue = option.datum[(s as ICartesianSeries).getDimensionField()[0]];\n value = this._centerCache.get(nameFieldValue)?.x;\n }\n return this.dataToLongitude(value);\n },\n valueToPosition: (value: any, option) => {\n if (isNil(value) && option?.datum) {\n const nameFieldValue = option.datum[(s as ICartesianSeries).getDimensionField()[0]];\n value = this._centerCache.get(nameFieldValue)?.x;\n }\n return this.dataToLongitude(value);\n },\n getFields: () => [this._longitudeField],\n getAxisType: () => this.type,\n getAxisId: () => this.id,\n isInverse: () => false\n });\n (s as unknown as ICartesianSeries).setYAxisHelper({\n ...helper,\n isContinuous: true,\n dataToPosition: (values: any[], option) => {\n let value = values[0];\n if (isNil(value) && option?.datum) {\n const nameFieldValue = option.datum[(s as ICartesianSeries).getDimensionField()[0]];\n value = this._centerCache.get(nameFieldValue)?.y;\n }\n return this.dataToLatitude(value);\n },\n valueToPosition: (value: any, option) => {\n if (isNil(value) && option?.datum) {\n const nameFieldValue = option.datum[(s as ICartesianSeries).getDimensionField()[0]];\n value = this._centerCache.get(nameFieldValue)?.y;\n }\n return this.dataToLatitude(value);\n },\n getFields: () => [this._latitudeField],\n getAxisType: () => this.type,\n getAxisId: () => this.id,\n isInverse: () => false\n });\n }\n });\n });\n }\n\n onLayoutEnd() {\n this.setLayoutRect(this._regions[0].getLayoutRect());\n this.setLayoutStartPosition(this._regions[0].getLayoutStartPoint());\n const { width, height } = this.getLayoutRect();\n const { translate, scale, center } = this.evaluateProjection([0, 0], [width, height]);\n translate && this._projection.translate(translate);\n scale && this._projection.scale(scale);\n center && this._projection.center(center);\n eachSeries(this._regions, s => {\n if (s.type === SeriesTypeEnum.map || s.type === SeriesTypeEnum.pictogram) {\n (s as MapSeries).areaPath?.clear();\n const pathGroup = s.getRootMark().getProduct();\n if (pathGroup) {\n if (pathGroup.attribute.postMatrix) {\n pathGroup.setAttributes({\n postMatrix: new Matrix()\n });\n }\n }\n }\n });\n this._actualScale = this._initialScale;\n\n super.onLayoutEnd();\n }\n\n // util\n protected collectFeatures() {\n const features: any[] = [];\n this._regions.forEach(r => {\n r.getSeries().forEach(s => {\n if (s.type === SeriesTypeEnum.map || s.type === SeriesTypeEnum.pictogram) {\n features.push(...((s as unknown as IGeoSeries).getMapViewData()?.latestData ?? []));\n }\n });\n });\n return features;\n }\n\n // API\n dataToPosition(values: number[] = []): IPoint {\n const point = this._projection?.project([values[0], values[1]]);\n return {\n x: point?.[0],\n y: point?.[1]\n };\n }\n\n dataToLatitude(lat: number): number {\n const point = this._projection?.project([0, lat]);\n return point?.[1];\n }\n\n dataToLongitude(lon: number): number {\n const point = this._projection?.project([lon, 0]);\n return point?.[0];\n }\n\n // interaction\n zoom(p: number, anchor: [number, number] = [0, 0]) {\n let s = this._projection?.scale() ?? 0;\n const t = this._projection?.translate() ?? [0, 0];\n let t_x = t[0];\n let t_y = t[1];\n s = s * p;\n t_x -= (anchor[0] - t_x) * (p - 1);\n t_y -= (anchor[1] - t_y) * (p - 1);\n\n this._projection?.scale(s);\n this._projection?.translate([t_x, t_y]);\n }\n\n pan = (delta: [number, number] = [0, 0]) => {\n const t = this._projection?.translate() ?? [0, 0];\n let t_x = t[0];\n let t_y = t[1];\n t_x += delta[0];\n t_y += delta[1];\n this._projection?.translate([t_x, t_y]);\n };\n\n shape(datum?: any) {\n return this._projection.shape(datum);\n }\n\n /**\n * 根据像素坐标获取经纬度位置\n */\n invert(point: [number, number]) {\n return this._projection.invert(point);\n }\n\n private evaluateProjection(start: [number, number], size: [number, number]) {\n const evaluated = this._projection.evaluate(start, size, this.collectFeatures());\n let translate = evaluated.translate();\n const scale = evaluated.scale() * this._initialScale;\n const center = this._projectionSpec.center ?? evaluated.invert([size[0] / 2, size[1] / 2]);\n center && (translate = [size[0] / 2, size[1] / 2]);\n return { translate, scale, center };\n }\n\n protected _initCenterCache() {\n if (!this._centerCache) {\n this._centerCache = new Map();\n }\n this._regions.forEach(r => {\n r.getSeries().forEach(s => {\n if (s.type === 'map') {\n const mapData = (s as IGeoSeries).getMapViewData()?.latestData ?? [];\n mapData.forEach((feature: any = {}) => {\n const key = feature[s.getDimensionField()[0]] || feature[DEFAULT_MAP_LOOK_UP_KEY];\n const center = (s as IGeoSeries).getDatumCenter(feature);\n if (key && isValid(center)) {\n this._centerCache.set(key, { x: center[0], y: center[1] });\n }\n });\n }\n });\n });\n }\n\n _compareSpec(spec: IGeoRegionSpec, prevSpec: IGeoRegionSpec) {\n const result = super._compareSpec(spec, prevSpec);\n if (!result.reMake) {\n result.reMake = ['roam', 'longitudeField', 'latitudeField', 'projection', 'zoomLimit'].some(k => {\n return !isEqual(prevSpec?.[k], spec[k]);\n });\n }\n\n return result;\n }\n\n release(): void {\n super.release();\n this._centerCache && this._centerCache.clear();\n this._centerCache = null;\n }\n}\n\nmixin(GeoCoordinate, Zoomable);\n\nexport const registerGeoCoordinate = () => {\n Factory.registerComponent(GeoCoordinate.type, GeoCoordinate);\n};\n"]}
1
+ {"version":3,"sources":["../src/component/geo/geo-coordinate.ts"],"names":[],"mappings":"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","file":"geo-coordinate.js","sourcesContent":["import { LayoutZIndex } from './../../constant/layout';\n/* eslint-disable no-duplicate-imports */\nimport type { IPoint } from '../../typings/coordinate';\nimport { Projection } from './projection';\nimport type { IEffect, IModelRenderOption, IModelSpecInfo } from '../../model/interface';\nimport { ComponentTypeEnum } from '../interface/type';\nimport { BaseComponent } from '../base/base-component';\nimport type { IGeoRegionSpec, IRegion, RegionSpec } from '../../region/interface';\nimport { eachSeries } from '../../util/model';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { ChartEvent } from '../../constant/event';\nimport { PREFIX } from '../../constant/base';\nimport type { ICartesianSeries, IGeoSeries } from '../../series/interface';\nimport { SeriesTypeEnum } from '../../series/interface/type';\nimport type { IGeoCoordinate, IGeoCoordinateHelper, IGeoCoordinateSpec, IProjectionSpec } from './interface';\nimport type { BaseEventParams, ExtendEventParam, PanEventParam, ZoomEventParam } from '../../event/interface';\nimport type { StringOrNumber } from '../../typings';\nimport type { IZoomable, ZoomEventParams } from '../../interaction/zoom/zoomable';\nimport { Zoomable } from '../../interaction/zoom/zoomable';\nimport { isValid, mixin, isNil, Matrix, isEqual, isBoolean } from '@visactor/vutils';\nimport type { Maybe } from '@visactor/vutils';\nimport { DEFAULT_MAP_LOOK_UP_KEY } from '../../data/transforms/map';\nimport { Factory } from '../../core/factory';\nimport type { IGraphic } from '@visactor/vrender-core';\nimport type { MapSeries } from '../../series';\n\nexport function projectionName(key: string, id: number) {\n return `${PREFIX}_${id}_${key}`;\n}\nexport class GeoCoordinate extends BaseComponent<IGeoRegionSpec> implements IGeoCoordinate {\n static type = ComponentTypeEnum.geoCoordinate;\n type = ComponentTypeEnum.geoCoordinate;\n name: string = ComponentTypeEnum.geoCoordinate;\n\n layoutType: 'none' = 'none';\n protected layoutZIndex: number = LayoutZIndex.Mark;\n\n _longitudeField?: string;\n get longitudeField() {\n return this._longitudeField;\n }\n\n _latitudeField?: string;\n get latitudeField() {\n return this._latitudeField;\n }\n\n protected _projectionSpec: IProjectionSpec = {\n name: projectionName(this.type, this.id),\n type: 'mercator'\n };\n get projectionSpec() {\n return this._projectionSpec;\n }\n setProjection(projectionSpec: IGeoCoordinateSpec['projection']) {\n this._projectionSpec = {\n ...projectionSpec,\n name: this._projectionSpec.name\n };\n }\n\n protected _projection!: Projection;\n\n protected _centerCache: Map<StringOrNumber, { x: number; y: number }>;\n\n private _actualScale = 1;\n\n getZoom() {\n return this._actualScale;\n }\n\n private _initialScale = 1;\n\n static getSpecInfo(chartSpec: any): Maybe<IModelSpecInfo[]> {\n if (isNil(chartSpec)) {\n return null;\n }\n const specInfos: IModelSpecInfo[] = [];\n chartSpec.region.forEach((r: RegionSpec, i: number) => {\n if (r.coordinate === 'geo') {\n // 去除 padding 配置,避免重复计算\n const spec = { ...r, padding: 0 };\n specInfos.push({\n spec,\n regionIndex: i,\n type: ComponentTypeEnum.geoCoordinate,\n specInfoPath: ['component', 'geoCoordinate', i]\n } as any);\n }\n });\n return specInfos;\n }\n\n effect: IEffect = {\n scaleUpdate: () => {\n this.coordinateHelper();\n }\n };\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n\n if (this._spec.roam) {\n (this as unknown as IZoomable).initZoomable(this.event, this._option.mode);\n }\n\n this._projectionSpec = mergeSpec(this._projectionSpec, this._spec.projection);\n if (this._projectionSpec.zoom > this._spec.zoomLimit?.max) {\n this._projectionSpec.zoom = this._spec.zoomLimit.max;\n }\n if (this._projectionSpec.zoom < this._spec.zoomLimit?.min) {\n this._projectionSpec.zoom = this._spec.zoomLimit.min;\n }\n\n this._actualScale = this._projectionSpec.zoom ?? 1;\n this._initialScale = this._actualScale;\n this._longitudeField = this._spec.longitudeField;\n this._latitudeField = this._spec.latitudeField;\n }\n\n // life cycle\n created() {\n super.created();\n this._regions = this._option.getRegionsInIndex([(this._option as any).regionIndex]);\n this.initProjection();\n this.coordinateHelper();\n this.initEvent();\n this._initCenterCache();\n // FIXME: 这里是在开启缩放时,处理关联的symbol等mark,在地图缩放时应该同步缩放\n // this.rescaleMark();\n }\n\n private _handleChartZoom = (params: ZoomEventParams, event?: BaseEventParams['event']) => {\n let scale = params.zoomDelta;\n // check if the next scale will outrange\n const _lastActualScale = this._actualScale;\n this._actualScale *= scale;\n if (this._actualScale < this._spec.zoomLimit?.min) {\n this._actualScale = this._spec.zoomLimit?.min;\n scale = this._spec.zoomLimit?.min / _lastActualScale;\n } else if (this._actualScale > this._spec.zoomLimit?.max) {\n this._actualScale = this._spec.zoomLimit?.max;\n scale = this._spec.zoomLimit?.max / _lastActualScale;\n }\n this.zoom(scale, [params.zoomX, params.zoomY]);\n return { scale, totalScale: this._actualScale };\n };\n\n dispatchZoom(zoomDelta: number, center?: { x: number; y: number }) {\n const scaleCenter = center || {\n x: this.getLayoutStartPoint().x + this.getLayoutRect().width / 2,\n y: this.getLayoutStartPoint().y + this.getLayoutRect().height / 2\n };\n const { scale, totalScale } = this._handleChartZoom({ zoomDelta, zoomX: scaleCenter.x, zoomY: scaleCenter.y });\n if (scale !== 1) {\n this.event.emit('zoom', {\n scale,\n scaleCenter,\n totalScale,\n model: this\n } as unknown as ExtendEventParam);\n }\n }\n\n initEvent() {\n this.event.on(\n ChartEvent.scaleUpdate,\n { filter: ({ model }) => model?.id === this.id },\n this.effect.scaleUpdate.bind(this)\n );\n\n const { roam } = this._spec;\n if (roam) {\n let zoom = true;\n let drag = true;\n let blank = false;\n if (roam !== true) {\n zoom = roam.zoom ?? true;\n drag = roam.drag ?? true;\n blank = roam.blank ?? false;\n }\n zoom && (this as unknown as IZoomable).initZoomEventOfRegions(this._regions, null, this._handleChartZoom);\n drag && (this as unknown as IZoomable).initDragEventOfRegions(this._regions, blank ? null : () => true, this.pan);\n\n this._regions.forEach(r => {\n r.getSeries().forEach(s => {\n s.event.on('zoom', e => {\n s.handleZoom(e as ZoomEventParam);\n return true;\n });\n\n s.event.on('panmove', e => {\n s.handlePan(e as PanEventParam);\n return true;\n });\n });\n });\n }\n }\n\n initProjection() {\n this._projection = new Projection(this._projectionSpec);\n if (this._projection.projection === null) {\n this._option?.onError('unsupported projection type!');\n return;\n }\n }\n\n coordinateHelper() {\n const helper: IGeoCoordinateHelper = {\n longitudeField: this._longitudeField,\n latitudeField: this._latitudeField,\n dataToPosition: this.dataToPosition.bind(this),\n dataToLongitude: this.dataToLongitude.bind(this),\n dataToLatitude: this.dataToLatitude.bind(this),\n shape: this.shape.bind(this),\n getCoordinateId: () => this.id\n };\n\n this._regions.forEach(r => {\n r.getSeries().forEach(s => {\n if (s.type === SeriesTypeEnum.map || s.type === SeriesTypeEnum.pictogram) {\n (s as IGeoSeries).setCoordinateHelper(helper);\n } else {\n // 散点地图\n (s as ICartesianSeries).setXAxisHelper({\n ...helper,\n isContinuous: true,\n dataToPosition: (values: any[], option) => {\n let value = values[0];\n if (isNil(value) && option?.datum) {\n const nameFieldValue = option.datum[(s as ICartesianSeries).getDimensionField()[0]];\n value = this._centerCache.get(nameFieldValue)?.x;\n }\n return this.dataToLongitude(value);\n },\n valueToPosition: (value: any, option) => {\n if (isNil(value) && option?.datum) {\n const nameFieldValue = option.datum[(s as ICartesianSeries).getDimensionField()[0]];\n value = this._centerCache.get(nameFieldValue)?.x;\n }\n return this.dataToLongitude(value);\n },\n getFields: () => [this._longitudeField],\n getAxisType: () => this.type,\n getAxisId: () => this.id,\n isInverse: () => false\n });\n (s as unknown as ICartesianSeries).setYAxisHelper({\n ...helper,\n isContinuous: true,\n dataToPosition: (values: any[], option) => {\n let value = values[0];\n if (isNil(value) && option?.datum) {\n const nameFieldValue = option.datum[(s as ICartesianSeries).getDimensionField()[0]];\n value = this._centerCache.get(nameFieldValue)?.y;\n }\n return this.dataToLatitude(value);\n },\n valueToPosition: (value: any, option) => {\n if (isNil(value) && option?.datum) {\n const nameFieldValue = option.datum[(s as ICartesianSeries).getDimensionField()[0]];\n value = this._centerCache.get(nameFieldValue)?.y;\n }\n return this.dataToLatitude(value);\n },\n getFields: () => [this._latitudeField],\n getAxisType: () => this.type,\n getAxisId: () => this.id,\n isInverse: () => false\n });\n }\n });\n });\n }\n\n onLayoutEnd() {\n this.setLayoutRect(this._regions[0].getLayoutRect());\n this.setLayoutStartPosition(this._regions[0].getLayoutStartPoint());\n const { width, height } = this.getLayoutRect();\n const { translate, scale, center } = this.evaluateProjection([0, 0], [width, height]);\n translate && this._projection.translate(translate);\n scale && this._projection.scale(scale);\n center && this._projection.center(center);\n eachSeries(this._regions, s => {\n if (s.type === SeriesTypeEnum.map || s.type === SeriesTypeEnum.pictogram) {\n (s as MapSeries).areaPath?.clear();\n const pathGroup = s.getRootMark().getProduct();\n if (pathGroup) {\n if (pathGroup.attribute.postMatrix) {\n pathGroup.setAttributes({\n postMatrix: new Matrix()\n });\n }\n }\n }\n });\n this._actualScale = this._initialScale;\n\n super.onLayoutEnd();\n }\n\n // util\n protected collectFeatures() {\n const features: any[] = [];\n this._regions.forEach(r => {\n r.getSeries().forEach(s => {\n if (s.type === SeriesTypeEnum.map || s.type === SeriesTypeEnum.pictogram) {\n features.push(...((s as unknown as IGeoSeries).getMapViewData()?.latestData ?? []));\n }\n });\n });\n return features;\n }\n\n // API\n dataToPosition(values: number[] = []): IPoint {\n const point = this._projection?.project([values[0], values[1]]);\n return {\n x: point?.[0],\n y: point?.[1]\n };\n }\n\n dataToLatitude(lat: number): number {\n const point = this._projection?.project([0, lat]);\n return point?.[1];\n }\n\n dataToLongitude(lon: number): number {\n const point = this._projection?.project([lon, 0]);\n return point?.[0];\n }\n\n // interaction\n zoom(p: number, anchor: [number, number] = [0, 0]) {\n let s = this._projection?.scale() ?? 0;\n const t = this._projection?.translate() ?? [0, 0];\n let t_x = t[0];\n let t_y = t[1];\n s = s * p;\n t_x -= (anchor[0] - t_x) * (p - 1);\n t_y -= (anchor[1] - t_y) * (p - 1);\n\n this._projection?.scale(s);\n this._projection?.translate([t_x, t_y]);\n }\n\n pan = (delta: [number, number] = [0, 0]) => {\n const t = this._projection?.translate() ?? [0, 0];\n let t_x = t[0];\n let t_y = t[1];\n t_x += delta[0];\n t_y += delta[1];\n this._projection?.translate([t_x, t_y]);\n };\n\n shape(datum?: any) {\n return this._projection.shape(datum);\n }\n\n /**\n * 根据像素坐标获取经纬度位置\n */\n invert(point: [number, number]) {\n return this._projection.invert(point);\n }\n\n private evaluateProjection(start: [number, number], size: [number, number]) {\n const evaluated = this._projection.evaluate(start, size, this.collectFeatures());\n let translate = evaluated.translate();\n const scale = evaluated.scale() * this._initialScale;\n const center = this._projectionSpec.center ?? evaluated.invert([size[0] / 2, size[1] / 2]);\n center && (translate = [size[0] / 2, size[1] / 2]);\n return { translate, scale, center };\n }\n\n protected _initCenterCache() {\n if (!this._centerCache) {\n this._centerCache = new Map();\n }\n this._regions.forEach(r => {\n r.getSeries().forEach(s => {\n if (s.type === 'map') {\n const mapData = (s as IGeoSeries).getMapViewData()?.latestData ?? [];\n mapData.forEach((feature: any = {}) => {\n const key = feature[s.getDimensionField()[0]] || feature[DEFAULT_MAP_LOOK_UP_KEY];\n const center = (s as IGeoSeries).getDatumCenter(feature);\n if (key && isValid(center)) {\n this._centerCache.set(key, { x: center[0], y: center[1] });\n }\n });\n }\n });\n });\n }\n\n _compareSpec(spec: IGeoRegionSpec, prevSpec: IGeoRegionSpec) {\n const result = super._compareSpec(spec, prevSpec);\n if (!result.reMake) {\n result.reMake = ['roam', 'longitudeField', 'latitudeField', 'projection', 'zoomLimit'].some(k => {\n return !isEqual(prevSpec?.[k], spec[k]);\n });\n }\n\n return result;\n }\n\n release(): void {\n super.release();\n this._centerCache && this._centerCache.clear();\n this._centerCache = null;\n }\n}\n\nmixin(GeoCoordinate, Zoomable);\n\nexport const registerGeoCoordinate = () => {\n Factory.registerComponent(GeoCoordinate.type, GeoCoordinate);\n};\n"]}
@@ -92,6 +92,7 @@ export type IMarkerSpec = IComponentSpec & {
92
92
  clip?: boolean;
93
93
  name?: string;
94
94
  coordinateType?: string;
95
+ includeFullBand?: boolean;
95
96
  };
96
97
  export type IMarkerSymbol = IMarkerRef & {
97
98
  visible: boolean;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/component/marker/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { DataView } from '@visactor/vdataset';\nimport type { IPadding } from '@visactor/vutils';\nimport type {\n SymbolType,\n IGraphicAttribute,\n ICustomPath2D,\n ITextGraphicAttribute,\n IRichTextGraphicAttribute\n} from '@visactor/vrender-core';\nimport type {\n IComposedTextMarkSpec,\n IFormatMethod,\n IRectMarkSpec,\n IRichTextFormatMethod,\n ISymbolMarkSpec,\n StringOrNumber\n} from '../../typings';\nimport type { IComponentSpec } from '../base/interface';\nimport type { Datum } from '@visactor/vrender-components';\nimport type { ICartesianSeries, IGeoSeries, IPolarSeries } from '../../series/interface';\nimport type {\n IOptionAggr,\n IOptionAggrField,\n IOptionRegr,\n IOptionSeries,\n IOptionWithCoordinates\n} from '../../data/transforms/interface';\nimport type { IVChart } from '../../core/interface';\n\nexport type IMarkerSupportSeries = ICartesianSeries | IPolarSeries | IGeoSeries;\n\nexport type IPolarPoint = {\n angle: number;\n radius: number;\n};\nexport type OffsetPoint = {\n /**\n * x 方向的偏移\n * 1. number 类型表示像素值,如 12\n * 2. string 类型表示百分比,如 '10%' 表示相对于所在 region 宽度的占比\n */\n x?: number | string;\n /**\n * y 方向的偏移\n * 1. number 类型表示像素值,如 12\n * 2. string 类型表示百分比,如 '10%' 表示相对于所在 region 高度的占比\n */\n y?: number | string;\n};\n\nexport type IAggrType = 'sum' | 'average' | 'min' | 'max' | 'variance' | 'standardDeviation' | 'median';\nexport type IDataPos = StringOrNumber | IAggrType;\nexport type IDataPosCallback = (\n relativeSeriesData: Datum[],\n startRelativeSeriesData: Datum[],\n endRelativeSeriesData: Datum[],\n relativeSeries: IMarkerSupportSeries,\n startRelativeSeries: IMarkerSupportSeries,\n endRelativeSeries: IMarkerSupportSeries\n) => StringOrNumber;\n\nexport type IDataPointSpec = {\n /**\n * 数据字段配置\n */\n [key: string]: IDataPos | IDataPosCallback;\n /**\n * 具体某个数据元素关联的series序号(仅在标注目标:数据元素下有效)\n */\n refRelativeSeriesIndex?: number;\n /**\n * 具体某个数据元素关联的series 的id(仅在标注目标:数据元素下有效)\n */\n refRelativeSeriesId?: StringOrNumber;\n /**\n * 指定使用 xField 上的那个维度索引,因为 xField 字段有可能会包含多个维度,比如分组场景\n * @default 0\n * @since 1.7.0\n */\n xFieldIndex?: number;\n /**\n * 指定使用 xField 上的维度名称,因为 xField 字段有可能会包含多个维度,比如分组场景。\n * `xFieldIndex` 和 `xFieldDim` 声明一个即可,同时声明则 `xFieldDim` 优先级更高。\n * @since 1.7.0\n */\n xFieldDim?: string;\n /**\n * 指定使用 yField 上的那个维度索引,因为 yField 字段有可能会包含多个维度,比如分组场景。\n * @default 0\n * @since 1.7.0\n */\n yFieldIndex?: number;\n /**\n * 指定使用 yField 上的维度名称,因为 yField 字段有可能会包含多个维度,比如分组场景。\n * `yFieldIndex` 和 `yFieldDim` 声明一个即可,同时声明则 `yFieldDim` 优先级更高。\n * @since 1.7.0\n */\n yFieldDim?: string;\n /**\n * 指定使用 angleField 上的那个维度索引,因为 angleField 字段有可能会包含多个维度,比如分组场景\n * @default 0\n * @since 1.11.0\n */\n angleFieldIndex?: number;\n /**\n * 指定使用 angleField 上的维度名称,因为 angleField 字段有可能会包含多个维度,比如分组场景。\n * `angleFieldIndex` 和 `angleFieldDim` 声明一个即可,同时声明则 `angleFieldDim` 优先级更高。\n * @since 1.11.0\n */\n angleFieldDim?: string;\n /**\n * 指定使用 radiusField 上的那个维度索引,因为 radiusField 字段有可能会包含多个维度,比如分组场景\n * @default 0\n * @since 1.11.0\n */\n radiusFieldIndex?: number;\n /**\n * 指定使用 radiusField 上的维度名称,因为 radiusField 字段有可能会包含多个维度,比如分组场景。\n * `radiusFieldIndex` 和 `radiusFieldDim` 声明一个即可,同时声明则 `radiusFieldDim` 优先级更高。\n * @since 1.11.0\n */\n radiusFieldDim?: string;\n};\n\nexport type MarkerPositionPoint = {\n /**\n * x 坐标位置,number 类型表示像素值,string 类型表示相对画布宽度或者 region 宽度的占比(从左往右)\n */\n x: StringOrNumber;\n /**\n * y 坐标位置,number 类型表示像素值,string 类型表示相对画布高度或者 region 高度的占比(从上至下)\n */\n y: StringOrNumber;\n};\n\nexport type ICoordinateOption = {\n x?: IOptionAggrField | (IDataPosCallback | StringOrNumber)[];\n y?: IOptionAggrField | (IDataPosCallback | StringOrNumber)[];\n angle?: IOptionAggrField | (IDataPosCallback | StringOrNumber)[];\n radius?: IOptionAggrField | (IDataPosCallback | StringOrNumber)[];\n getRefRelativeSeries?: () => IMarkerSupportSeries;\n} & IOptionSeries;\n\nexport type IMarkerPositionsSpec = {\n /**\n * 画布坐标\n * `positions` 自 1.12.0 版本开始支持回调函数\n */\n positions:\n | MarkerPositionPoint[]\n | ((seriesData: Datum[], relativeSeries: IMarkerSupportSeries) => MarkerPositionPoint[]);\n /**\n * 是否为相对 region 的坐标,默认为 false,即相对画布的坐标\n * @default false\n * @since 1.7.0\n */\n regionRelative?: boolean;\n};\n\nexport type IMarkerLabelWithoutRefSpec = {\n /**\n * 是否展示标注标签\n */\n visible?: boolean;\n /**\n * label整体 - 是否自动旋转\n */\n autoRotate?: boolean;\n /**\n * label整体 - 最小宽度,像素值\n * @default 30\n */\n minWidth?: number;\n /**\n * label整体 - 最大宽度,像素值。当文字超过最大宽度时,会自动省略。\n */\n maxWidth?: number;\n /**\n * label整体 - 背景面板配置\n */\n labelBackground?: {\n /**\n * 标签背景是否显示,是否可见\n */\n visible?: boolean;\n /**\n * 标签背景支持自定义path\n * @since 1.11.10\n */\n customShape?: (\n text: ITextGraphicAttribute | IRichTextGraphicAttribute,\n attrs: Partial<IGraphicAttribute>,\n path: ICustomPath2D\n ) => ICustomPath2D;\n /**\n * 内部边距\n */\n padding?: IPadding | number[] | number;\n } & Partial<IMarkerState<Omit<IRectMarkSpec, 'visible'>>>;\n\n /**\n * @deprecated\n * 设置文本类型为富文本或者普通文本,已废弃\n **/\n type?: 'rich' | 'text';\n /**\n * 文本内容,如果需要进行换行,则使用数组形式,如 ['abc', '123']\n * 支持富文本内容 textConfig,设置富文本时要配置 textType 类型为 'rich'\n */\n text?: string | string[] | number | number[] | ReturnType<IRichTextFormatMethod<[]>>;\n /**\n * label文本 - 文本格式化\n * @param markData 组成标注的数据\n * @param seriesData 标注关联的数据\n * @returns 格式化后的文本\n */\n formatMethod?: IFormatMethod<[markData: Datum[], seriesData: Datum[]]>;\n\n /**\n * label文本 - 文本前 mark 图元\n */\n shape?: {\n /**\n * 是否显示标签文本前的图形\n */\n visible?: boolean;\n /**\n * 标签文本前的图形对应的样式设置\n */\n style: Omit<ISymbolMarkSpec, 'visible'>;\n };\n /**\n * label文本 - shape 同文本之间的间距\n */\n space?: number;\n\n /**\n * 是否自动调整 label 使其展示在 marker 可见区域内。\n * @default false\n * @since 1.4.0\n */\n confine?: boolean;\n /**\n * 水平方向的偏移\n */\n dx?: number;\n /**\n * 垂直方向的偏移\n */\n dy?: number;\n} & Partial<IMarkerState<Omit<IComposedTextMarkSpec, 'visible'>>>; // label文本 - 文本样式\n\nexport type IMarkerLabelSpec = IMarkerLabelWithoutRefSpec & IMarkerRef;\n\nexport interface IMarkerRef {\n /**\n * label or symbol 相对line平行方向上的偏移\n */\n refX?: number;\n /**\n * label or symbol 相对line正交方向上的偏移\n */\n refY?: number;\n /**\n * label or symbol 相对默认角度的偏移 (label跟随line的角度做自动旋转时,默认按照line的平行向量作为初始角度)\n */\n refAngle?: number;\n}\n\n// 跨越系列的配置\nexport interface IMarkerCrossSeriesSpec {\n /**\n * 设置起点关联的系列,设置该系列的序号(仅在标注目标:坐标空间下有效)\n */\n startRelativeSeriesIndex?: number;\n /**\n * 设置终点关联的系列,设置该序列的序号(仅在标注目标:坐标空间下有效)\n */\n endRelativeSeriesIndex?: number;\n /**\n * 设置起点关联的系列,设置该系列的id(仅在标注目标:坐标空间下有效)\n */\n startRelativeSeriesId?: string;\n /**\n * 设置终点关联的系列,设置该序列的id(仅在标注目标:坐标空间下有效)\n */\n endRelativeSeriesId?: string;\n /**\n * 数据处理需要单独关联系列, 设置序列的序号来进行关联,当配置为'all'时代表关联当前region下所有系列\n * @since 1.11.0\n */\n specifiedDataSeriesIndex?: 'all' | number | number[];\n /**\n * 数据处理需要单独关联系列, 设置序列的id来进行关联,当配置为'all'时代表关联当前region下所有系列\n * @since 1.11.0\n */\n specifiedDataSeriesId?: 'all' | string | string[];\n}\n\nexport type IMarkerSpec = IComponentSpec & {\n /**\n * 标注数据关联的series序号\n */\n relativeSeriesIndex?: number;\n /**\n * 标注数据关联系列对应的id\n */\n relativeSeriesId?: number | string;\n /**\n * marker组件是否可见\n * @default true\n */\n visible?: boolean;\n /**\n * marker组件是否可交互\n * @default true\n */\n interactive?: boolean;\n /**\n * marker组件是否自动拓展轴范围\n * @default false\n * @since 1.1.0\n */\n autoRange?: boolean;\n /**\n * marker组件超出图表区域是否被裁剪\n * @default false\n * @since 1.3.0\n */\n clip?: boolean;\n\n /**\n * 标注组件的名称标识\n * @since 1.7.0\n */\n name?: string;\n /**\n * 标注所在的坐标系类型\n * @description 一般情况下内部逻辑会根据配置自动推导类型,但如果是coordinates的配置方式,则无法推导,需要用户自行配置\n * @since 1.11.0\n */\n coordinateType?: string;\n};\n\nexport type IMarkerSymbol = IMarkerRef & {\n /** 是否展示 symbol */\n visible: boolean;\n /**\n * symbol 形状,默认为带左右方向的箭头\n */\n symbolType?: SymbolType;\n /**\n * symbol 大小\n */\n size?: number;\n} & Partial<IMarkerState<Omit<ISymbolMarkSpec, 'visible'>>>;\n\nexport type MarkerStyleCallback<T> = (\n /**\n * markerData 标注组件聚合后的数据\n */\n markerData: DataView,\n /**\n * @since 1.13.0\n * context 组件上下文, 包括相对系列,起始相对系列,结束相对系列和图表实例\n */\n context: IMarkerAttributeContext\n) => T;\nexport type MarkerStateCallback<T> = (\n /**\n * markerData 标注组件聚合后的数据\n */\n markerData: DataView,\n /**\n * @since 1.13.0\n * context 组件上下文, 包括相对系列,起始相对系列,结束相对系列和图表实例\n */\n context: IMarkerAttributeContext\n) => T;\nexport type MarkerStateValue = 'hover' | 'hover_reverse' | 'selected' | 'selected_reverse';\nexport type IMarkerState<T> = {\n /** 默认样式设置 */\n style?: T | MarkerStyleCallback<T>;\n /** 不同状态下的样式配置 */\n state?: Record<MarkerStateValue, T | MarkerStateCallback<T>>;\n};\n\nexport type MarkCoordinateType = 'cartesian' | 'polar' | 'geo';\n\nexport type IMarkProcessOptions = {\n options: IOptionAggr[] | IOptionRegr | IOptionWithCoordinates;\n needAggr?: boolean;\n needRegr?: boolean;\n processData?: DataView;\n};\n\nexport type IMarkerAttributeContext = {\n vchart: IVChart;\n relativeSeries: IMarkerSupportSeries;\n startRelativeSeries: IMarkerSupportSeries;\n endRelativeSeries: IMarkerSupportSeries;\n};\n"]}
1
+ {"version":3,"sources":["../src/component/marker/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { DataView } from '@visactor/vdataset';\nimport type { IPadding } from '@visactor/vutils';\nimport type {\n SymbolType,\n IGraphicAttribute,\n ICustomPath2D,\n ITextGraphicAttribute,\n IRichTextGraphicAttribute\n} from '@visactor/vrender-core';\nimport type {\n IComposedTextMarkSpec,\n IFormatMethod,\n IRectMarkSpec,\n IRichTextFormatMethod,\n ISymbolMarkSpec,\n StringOrNumber\n} from '../../typings';\nimport type { IComponentSpec } from '../base/interface';\nimport type { Datum } from '@visactor/vrender-components';\nimport type { ICartesianSeries, IGeoSeries, IPolarSeries } from '../../series/interface';\nimport type {\n IOptionAggr,\n IOptionAggrField,\n IOptionRegr,\n IOptionSeries,\n IOptionWithCoordinates\n} from '../../data/transforms/interface';\nimport type { IVChart } from '../../core/interface';\n\nexport type IMarkerSupportSeries = ICartesianSeries | IPolarSeries | IGeoSeries;\n\nexport type IPolarPoint = {\n angle: number;\n radius: number;\n};\nexport type OffsetPoint = {\n /**\n * x 方向的偏移\n * 1. number 类型表示像素值,如 12\n * 2. string 类型表示百分比,如 '10%' 表示相对于所在 region 宽度的占比\n */\n x?: number | string;\n /**\n * y 方向的偏移\n * 1. number 类型表示像素值,如 12\n * 2. string 类型表示百分比,如 '10%' 表示相对于所在 region 高度的占比\n */\n y?: number | string;\n};\n\nexport type IAggrType = 'sum' | 'average' | 'min' | 'max' | 'variance' | 'standardDeviation' | 'median';\nexport type IDataPos = StringOrNumber | IAggrType;\nexport type IDataPosCallback = (\n relativeSeriesData: Datum[],\n startRelativeSeriesData: Datum[],\n endRelativeSeriesData: Datum[],\n relativeSeries: IMarkerSupportSeries,\n startRelativeSeries: IMarkerSupportSeries,\n endRelativeSeries: IMarkerSupportSeries\n) => StringOrNumber;\n\nexport type IDataPointSpec = {\n /**\n * 数据字段配置\n */\n [key: string]: IDataPos | IDataPosCallback;\n /**\n * 具体某个数据元素关联的series序号(仅在标注目标:数据元素下有效)\n */\n refRelativeSeriesIndex?: number;\n /**\n * 具体某个数据元素关联的series 的id(仅在标注目标:数据元素下有效)\n */\n refRelativeSeriesId?: StringOrNumber;\n /**\n * 指定使用 xField 上的那个维度索引,因为 xField 字段有可能会包含多个维度,比如分组场景\n * @default 0\n * @since 1.7.0\n */\n xFieldIndex?: number;\n /**\n * 指定使用 xField 上的维度名称,因为 xField 字段有可能会包含多个维度,比如分组场景。\n * `xFieldIndex` 和 `xFieldDim` 声明一个即可,同时声明则 `xFieldDim` 优先级更高。\n * @since 1.7.0\n */\n xFieldDim?: string;\n /**\n * 指定使用 yField 上的那个维度索引,因为 yField 字段有可能会包含多个维度,比如分组场景。\n * @default 0\n * @since 1.7.0\n */\n yFieldIndex?: number;\n /**\n * 指定使用 yField 上的维度名称,因为 yField 字段有可能会包含多个维度,比如分组场景。\n * `yFieldIndex` 和 `yFieldDim` 声明一个即可,同时声明则 `yFieldDim` 优先级更高。\n * @since 1.7.0\n */\n yFieldDim?: string;\n /**\n * 指定使用 angleField 上的那个维度索引,因为 angleField 字段有可能会包含多个维度,比如分组场景\n * @default 0\n * @since 1.11.0\n */\n angleFieldIndex?: number;\n /**\n * 指定使用 angleField 上的维度名称,因为 angleField 字段有可能会包含多个维度,比如分组场景。\n * `angleFieldIndex` 和 `angleFieldDim` 声明一个即可,同时声明则 `angleFieldDim` 优先级更高。\n * @since 1.11.0\n */\n angleFieldDim?: string;\n /**\n * 指定使用 radiusField 上的那个维度索引,因为 radiusField 字段有可能会包含多个维度,比如分组场景\n * @default 0\n * @since 1.11.0\n */\n radiusFieldIndex?: number;\n /**\n * 指定使用 radiusField 上的维度名称,因为 radiusField 字段有可能会包含多个维度,比如分组场景。\n * `radiusFieldIndex` 和 `radiusFieldDim` 声明一个即可,同时声明则 `radiusFieldDim` 优先级更高。\n * @since 1.11.0\n */\n radiusFieldDim?: string;\n};\n\nexport type MarkerPositionPoint = {\n /**\n * x 坐标位置,number 类型表示像素值,string 类型表示相对画布宽度或者 region 宽度的占比(从左往右)\n */\n x: StringOrNumber;\n /**\n * y 坐标位置,number 类型表示像素值,string 类型表示相对画布高度或者 region 高度的占比(从上至下)\n */\n y: StringOrNumber;\n};\n\nexport type ICoordinateOption = {\n x?: IOptionAggrField | (IDataPosCallback | StringOrNumber)[];\n y?: IOptionAggrField | (IDataPosCallback | StringOrNumber)[];\n angle?: IOptionAggrField | (IDataPosCallback | StringOrNumber)[];\n radius?: IOptionAggrField | (IDataPosCallback | StringOrNumber)[];\n getRefRelativeSeries?: () => IMarkerSupportSeries;\n} & IOptionSeries;\n\nexport type IMarkerPositionsSpec = {\n /**\n * 画布坐标\n * `positions` 自 1.12.0 版本开始支持回调函数\n */\n positions:\n | MarkerPositionPoint[]\n | ((seriesData: Datum[], relativeSeries: IMarkerSupportSeries) => MarkerPositionPoint[]);\n /**\n * 是否为相对 region 的坐标,默认为 false,即相对画布的坐标\n * @default false\n * @since 1.7.0\n */\n regionRelative?: boolean;\n};\n\nexport type IMarkerLabelWithoutRefSpec = {\n /**\n * 是否展示标注标签\n */\n visible?: boolean;\n /**\n * label整体 - 是否自动旋转\n */\n autoRotate?: boolean;\n /**\n * label整体 - 最小宽度,像素值\n * @default 30\n */\n minWidth?: number;\n /**\n * label整体 - 最大宽度,像素值。当文字超过最大宽度时,会自动省略。\n */\n maxWidth?: number;\n /**\n * label整体 - 背景面板配置\n */\n labelBackground?: {\n /**\n * 标签背景是否显示,是否可见\n */\n visible?: boolean;\n /**\n * 标签背景支持自定义path\n * @since 1.11.10\n */\n customShape?: (\n text: ITextGraphicAttribute | IRichTextGraphicAttribute,\n attrs: Partial<IGraphicAttribute>,\n path: ICustomPath2D\n ) => ICustomPath2D;\n /**\n * 内部边距\n */\n padding?: IPadding | number[] | number;\n } & Partial<IMarkerState<Omit<IRectMarkSpec, 'visible'>>>;\n\n /**\n * @deprecated\n * 设置文本类型为富文本或者普通文本,已废弃\n **/\n type?: 'rich' | 'text';\n /**\n * 文本内容,如果需要进行换行,则使用数组形式,如 ['abc', '123']\n * 支持富文本内容 textConfig,设置富文本时要配置 textType 类型为 'rich'\n */\n text?: string | string[] | number | number[] | ReturnType<IRichTextFormatMethod<[]>>;\n /**\n * label文本 - 文本格式化\n * @param markData 组成标注的数据\n * @param seriesData 标注关联的数据\n * @returns 格式化后的文本\n */\n formatMethod?: IFormatMethod<[markData: Datum[], seriesData: Datum[]]>;\n\n /**\n * label文本 - 文本前 mark 图元\n */\n shape?: {\n /**\n * 是否显示标签文本前的图形\n */\n visible?: boolean;\n /**\n * 标签文本前的图形对应的样式设置\n */\n style: Omit<ISymbolMarkSpec, 'visible'>;\n };\n /**\n * label文本 - shape 同文本之间的间距\n */\n space?: number;\n\n /**\n * 是否自动调整 label 使其展示在 marker 可见区域内。\n * @default false\n * @since 1.4.0\n */\n confine?: boolean;\n /**\n * 水平方向的偏移\n */\n dx?: number;\n /**\n * 垂直方向的偏移\n */\n dy?: number;\n} & Partial<IMarkerState<Omit<IComposedTextMarkSpec, 'visible'>>>; // label文本 - 文本样式\n\nexport type IMarkerLabelSpec = IMarkerLabelWithoutRefSpec & IMarkerRef;\n\nexport interface IMarkerRef {\n /**\n * label or symbol 相对line平行方向上的偏移\n */\n refX?: number;\n /**\n * label or symbol 相对line正交方向上的偏移\n */\n refY?: number;\n /**\n * label or symbol 相对默认角度的偏移 (label跟随line的角度做自动旋转时,默认按照line的平行向量作为初始角度)\n */\n refAngle?: number;\n}\n\n// 跨越系列的配置\nexport interface IMarkerCrossSeriesSpec {\n /**\n * 设置起点关联的系列,设置该系列的序号(仅在标注目标:坐标空间下有效)\n */\n startRelativeSeriesIndex?: number;\n /**\n * 设置终点关联的系列,设置该序列的序号(仅在标注目标:坐标空间下有效)\n */\n endRelativeSeriesIndex?: number;\n /**\n * 设置起点关联的系列,设置该系列的id(仅在标注目标:坐标空间下有效)\n */\n startRelativeSeriesId?: string;\n /**\n * 设置终点关联的系列,设置该序列的id(仅在标注目标:坐标空间下有效)\n */\n endRelativeSeriesId?: string;\n /**\n * 数据处理需要单独关联系列, 设置序列的序号来进行关联,当配置为'all'时代表关联当前region下所有系列\n * @since 1.11.0\n */\n specifiedDataSeriesIndex?: 'all' | number | number[];\n /**\n * 数据处理需要单独关联系列, 设置序列的id来进行关联,当配置为'all'时代表关联当前region下所有系列\n * @since 1.11.0\n */\n specifiedDataSeriesId?: 'all' | string | string[];\n}\n\nexport type IMarkerSpec = IComponentSpec & {\n /**\n * 标注数据关联的series序号\n */\n relativeSeriesIndex?: number;\n /**\n * 标注数据关联系列对应的id\n */\n relativeSeriesId?: number | string;\n /**\n * marker组件是否可见\n * @default true\n */\n visible?: boolean;\n /**\n * marker组件是否可交互\n * @default true\n */\n interactive?: boolean;\n /**\n * marker组件是否自动拓展轴范围\n * @default false\n * @since 1.1.0\n */\n autoRange?: boolean;\n /**\n * marker组件超出图表区域是否被裁剪\n * @default false\n * @since 1.3.0\n */\n clip?: boolean;\n\n /**\n * 标注组件的名称标识\n * @since 1.7.0\n */\n name?: string;\n /**\n * 标注所在的坐标系类型\n * @description 一般情况下内部逻辑会根据配置自动推导类型,但如果是coordinates的配置方式,则无法推导,需要用户自行配置\n * @since 1.11.0\n */\n coordinateType?: string;\n\n /**\n * 在band轴下标注组件是否包含全band\n * @default false\n * @since 2.0.5\n */\n includeFullBand?: boolean;\n};\n\nexport type IMarkerSymbol = IMarkerRef & {\n /** 是否展示 symbol */\n visible: boolean;\n /**\n * symbol 形状,默认为带左右方向的箭头\n */\n symbolType?: SymbolType;\n /**\n * symbol 大小\n */\n size?: number;\n} & Partial<IMarkerState<Omit<ISymbolMarkSpec, 'visible'>>>;\n\nexport type MarkerStyleCallback<T> = (\n /**\n * markerData 标注组件聚合后的数据\n */\n markerData: DataView,\n /**\n * @since 1.13.0\n * context 组件上下文, 包括相对系列,起始相对系列,结束相对系列和图表实例\n */\n context: IMarkerAttributeContext\n) => T;\nexport type MarkerStateCallback<T> = (\n /**\n * markerData 标注组件聚合后的数据\n */\n markerData: DataView,\n /**\n * @since 1.13.0\n * context 组件上下文, 包括相对系列,起始相对系列,结束相对系列和图表实例\n */\n context: IMarkerAttributeContext\n) => T;\nexport type MarkerStateValue = 'hover' | 'hover_reverse' | 'selected' | 'selected_reverse';\nexport type IMarkerState<T> = {\n /** 默认样式设置 */\n style?: T | MarkerStyleCallback<T>;\n /** 不同状态下的样式配置 */\n state?: Record<MarkerStateValue, T | MarkerStateCallback<T>>;\n};\n\nexport type MarkCoordinateType = 'cartesian' | 'polar' | 'geo';\n\nexport type IMarkProcessOptions = {\n options: IOptionAggr[] | IOptionRegr | IOptionWithCoordinates;\n needAggr?: boolean;\n needRegr?: boolean;\n processData?: DataView;\n};\n\nexport type IMarkerAttributeContext = {\n vchart: IVChart;\n relativeSeries: IMarkerSupportSeries;\n startRelativeSeries: IMarkerSupportSeries;\n endRelativeSeries: IMarkerSupportSeries;\n};\n"]}
@@ -21,11 +21,11 @@ export class CartesianMarkArea extends BaseMarkArea {
21
21
  return new MarkAreaComponent(attr);
22
22
  }
23
23
  _computePointsAttr() {
24
- var _a;
25
- const spec = this._spec, data = this._markerData, startRelativeSeries = this._startRelativeSeries, endRelativeSeries = this._endRelativeSeries, relativeSeries = this._relativeSeries, {doXProcess: doXProcess, doYProcess: doYProcess, doXYProcess: doXYProcess, doCoordinatesProcess: doCoordinatesProcess} = getMarkAreaProcessInfo(spec), isPositionLayout = isValid(spec.positions), autoRange = null !== (_a = spec.autoRange) && void 0 !== _a && _a;
24
+ var _a, _b;
25
+ const spec = this._spec, data = this._markerData, startRelativeSeries = this._startRelativeSeries, endRelativeSeries = this._endRelativeSeries, relativeSeries = this._relativeSeries, {doXProcess: doXProcess, doYProcess: doYProcess, doXYProcess: doXYProcess, doCoordinatesProcess: doCoordinatesProcess} = getMarkAreaProcessInfo(spec), isPositionLayout = isValid(spec.positions), autoRange = null !== (_a = spec.autoRange) && void 0 !== _a && _a, includeFullBand = null !== (_b = spec.includeFullBand) && void 0 !== _b && _b;
26
26
  let points = [], lines = [];
27
27
  if (doXYProcess) {
28
- lines = xyLayout(data, startRelativeSeries, endRelativeSeries, relativeSeries, autoRange);
28
+ lines = xyLayout(data, startRelativeSeries, endRelativeSeries, relativeSeries, autoRange, includeFullBand);
29
29
  const [start, end] = lines;
30
30
  start && start.length && end && end.length && (points = [ {
31
31
  x: start[0].x,
@@ -35,7 +35,7 @@ export class CartesianMarkArea extends BaseMarkArea {
35
35
  y: start[0].y
36
36
  }, end[0] ]);
37
37
  } else if (doXProcess || doYProcess) {
38
- lines = xyLayout(data, startRelativeSeries, endRelativeSeries, relativeSeries, autoRange);
38
+ lines = xyLayout(data, startRelativeSeries, endRelativeSeries, relativeSeries, autoRange, includeFullBand);
39
39
  const [start, end] = lines;
40
40
  start && start.length && end && end.length && (points = [ ...start, end[1], end[0] ]);
41
41
  } else doCoordinatesProcess ? points = cartesianCoordinateLayout(data, relativeSeries, autoRange, spec.coordinatesOffset) : isPositionLayout && (points = positionLayout(spec.positions, relativeSeries, spec.regionRelative));
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/component/marker/mark-area/cartesian-mark-area.ts"],"names":[],"mappings":"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","file":"cartesian-mark-area.js","sourcesContent":["import { ComponentTypeEnum } from '../../interface/type';\nimport type { IOptionAggr, IOptionWithCoordinates } from '../../../data/transforms/interface';\nimport { cartesianCoordinateLayout, getMarkAreaProcessInfo, positionLayout, xyLayout } from '../utils';\nimport type { MarkAreaAttrs } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkArea as MarkAreaComponent, registerMarkAreaAnimate } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { isValid } from '@visactor/vutils';\nimport { Factory } from '../../../core/factory';\nimport type { CoordinateType, IPoint } from '../../../typings';\nimport type { IMarkProcessOptions } from '../interface';\nimport { BaseMarkArea } from './base-mark-area';\nimport { markArea } from '../../../theme/builtin/common/component/mark-area';\n\nexport class CartesianMarkArea extends BaseMarkArea {\n static type = ComponentTypeEnum.markArea;\n type = ComponentTypeEnum.markArea;\n name: string = ComponentTypeEnum.markArea;\n static coordinateType = 'cartesian';\n coordinateType = 'cartesian' as CoordinateType;\n\n static readonly builtInTheme = {\n markArea\n };\n\n protected _newMarkAreaComponent(attr: MarkAreaAttrs): MarkAreaComponent {\n return new MarkAreaComponent(attr);\n }\n\n protected _computePointsAttr() {\n const spec = this._spec as any;\n const data = this._markerData;\n const startRelativeSeries = this._startRelativeSeries;\n const endRelativeSeries = this._endRelativeSeries;\n const relativeSeries = this._relativeSeries;\n\n const { doXProcess, doYProcess, doXYProcess, doCoordinatesProcess } = getMarkAreaProcessInfo(spec);\n\n const isPositionLayout = isValid(spec.positions);\n const autoRange = spec.autoRange ?? false;\n\n let points: IPoint[] = [];\n let lines: IPoint[][] = [];\n if (doXYProcess) {\n lines = xyLayout(data, startRelativeSeries, endRelativeSeries, relativeSeries, autoRange);\n // 格式为 [[{x, y}], [{x, y}]]\n // 顺序为左下角开始逆时针绘制\n const [start, end] = lines;\n if (start && start.length && end && end.length) {\n points = [\n {\n x: start[0].x,\n y: end[0].y\n },\n start[0],\n {\n x: end[0].x,\n y: start[0].y\n },\n end[0]\n ];\n }\n } else if (doXProcess || doYProcess) {\n lines = xyLayout(data, startRelativeSeries, endRelativeSeries, relativeSeries, autoRange);\n const [start, end] = lines;\n if (start && start.length && end && end.length) {\n points = [...start, end[1], end[0]];\n }\n } else if (doCoordinatesProcess) {\n points = cartesianCoordinateLayout(data, relativeSeries, autoRange, spec.coordinatesOffset);\n } else if (isPositionLayout) {\n points = positionLayout(spec.positions, relativeSeries, spec.regionRelative);\n }\n\n return { points };\n }\n\n protected _computeOptions(): IMarkProcessOptions {\n const spec = this._spec as any;\n const { doXProcess, doYProcess, doXYProcess, doCoordinatesProcess } = getMarkAreaProcessInfo(spec);\n\n let options: IOptionAggr[] | IOptionWithCoordinates;\n if (doXYProcess) {\n options = [\n this._processSpecByDims([\n { dim: 'x', specValue: spec.x },\n { dim: 'y', specValue: spec.y }\n ]),\n this._processSpecByDims([\n { dim: 'x', specValue: spec.x1 },\n { dim: 'y', specValue: spec.y1 }\n ])\n ];\n } else if (doXProcess) {\n options = [\n this._processSpecByDims([{ dim: 'x', specValue: spec.x }]),\n this._processSpecByDims([{ dim: 'x', specValue: spec.x1 }])\n ];\n } else if (doYProcess) {\n options = [\n this._processSpecByDims([{ dim: 'y', specValue: spec.y }]),\n this._processSpecByDims([{ dim: 'y', specValue: spec.y1 }])\n ];\n } else if (doCoordinatesProcess) {\n options = this._processSpecCoo(spec);\n }\n return { options };\n }\n}\n\nexport const registerMarkArea = () => {\n Factory.registerComponent(CartesianMarkArea.type, CartesianMarkArea);\n registerMarkAreaAnimate();\n};\n"]}
1
+ {"version":3,"sources":["../src/component/marker/mark-area/cartesian-mark-area.ts"],"names":[],"mappings":"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","file":"cartesian-mark-area.js","sourcesContent":["import { ComponentTypeEnum } from '../../interface/type';\nimport type { IOptionAggr, IOptionWithCoordinates } from '../../../data/transforms/interface';\nimport { cartesianCoordinateLayout, getMarkAreaProcessInfo, positionLayout, xyLayout } from '../utils';\nimport type { MarkAreaAttrs } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkArea as MarkAreaComponent, registerMarkAreaAnimate } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { isValid } from '@visactor/vutils';\nimport { Factory } from '../../../core/factory';\nimport type { CoordinateType, IPoint } from '../../../typings';\nimport type { IMarkProcessOptions } from '../interface';\nimport { BaseMarkArea } from './base-mark-area';\nimport { markArea } from '../../../theme/builtin/common/component/mark-area';\n\nexport class CartesianMarkArea extends BaseMarkArea {\n static type = ComponentTypeEnum.markArea;\n type = ComponentTypeEnum.markArea;\n name: string = ComponentTypeEnum.markArea;\n static coordinateType = 'cartesian';\n coordinateType = 'cartesian' as CoordinateType;\n\n static readonly builtInTheme = {\n markArea\n };\n\n protected _newMarkAreaComponent(attr: MarkAreaAttrs): MarkAreaComponent {\n return new MarkAreaComponent(attr);\n }\n\n protected _computePointsAttr() {\n const spec = this._spec as any;\n const data = this._markerData;\n const startRelativeSeries = this._startRelativeSeries;\n const endRelativeSeries = this._endRelativeSeries;\n const relativeSeries = this._relativeSeries;\n\n const { doXProcess, doYProcess, doXYProcess, doCoordinatesProcess } = getMarkAreaProcessInfo(spec);\n\n const isPositionLayout = isValid(spec.positions);\n const autoRange = spec.autoRange ?? false;\n const includeFullBand = spec.includeFullBand ?? false;\n\n let points: IPoint[] = [];\n let lines: IPoint[][] = [];\n if (doXYProcess) {\n lines = xyLayout(data, startRelativeSeries, endRelativeSeries, relativeSeries, autoRange, includeFullBand);\n // 格式为 [[{x, y}], [{x, y}]]\n // 顺序为左下角开始逆时针绘制\n const [start, end] = lines;\n if (start && start.length && end && end.length) {\n points = [\n {\n x: start[0].x,\n y: end[0].y\n },\n start[0],\n {\n x: end[0].x,\n y: start[0].y\n },\n end[0]\n ];\n }\n } else if (doXProcess || doYProcess) {\n lines = xyLayout(data, startRelativeSeries, endRelativeSeries, relativeSeries, autoRange, includeFullBand);\n const [start, end] = lines;\n if (start && start.length && end && end.length) {\n points = [...start, end[1], end[0]];\n }\n } else if (doCoordinatesProcess) {\n points = cartesianCoordinateLayout(data, relativeSeries, autoRange, spec.coordinatesOffset);\n } else if (isPositionLayout) {\n points = positionLayout(spec.positions, relativeSeries, spec.regionRelative);\n }\n\n return { points };\n }\n\n protected _computeOptions(): IMarkProcessOptions {\n const spec = this._spec as any;\n const { doXProcess, doYProcess, doXYProcess, doCoordinatesProcess } = getMarkAreaProcessInfo(spec);\n\n let options: IOptionAggr[] | IOptionWithCoordinates;\n if (doXYProcess) {\n options = [\n this._processSpecByDims([\n { dim: 'x', specValue: spec.x },\n { dim: 'y', specValue: spec.y }\n ]),\n this._processSpecByDims([\n { dim: 'x', specValue: spec.x1 },\n { dim: 'y', specValue: spec.y1 }\n ])\n ];\n } else if (doXProcess) {\n options = [\n this._processSpecByDims([{ dim: 'x', specValue: spec.x }]),\n this._processSpecByDims([{ dim: 'x', specValue: spec.x1 }])\n ];\n } else if (doYProcess) {\n options = [\n this._processSpecByDims([{ dim: 'y', specValue: spec.y }]),\n this._processSpecByDims([{ dim: 'y', specValue: spec.y1 }])\n ];\n } else if (doCoordinatesProcess) {\n options = this._processSpecCoo(spec);\n }\n return { options };\n }\n}\n\nexport const registerMarkArea = () => {\n Factory.registerComponent(CartesianMarkArea.type, CartesianMarkArea);\n registerMarkAreaAnimate();\n};\n"]}
@@ -5,7 +5,7 @@ import type { IDataPos, IMarkerAttributeContext, IMarkerLabelSpec, IMarkerState,
5
5
  import type { IRegion } from '../../region/interface';
6
6
  import type { OffsetPoint } from './interface';
7
7
  export declare function isAggrSpec(spec: IDataPos): boolean;
8
- export declare function xyLayout(data: DataView, startRelativeSeries: IMarkerSupportSeries, endRelativeSeries: IMarkerSupportSeries, relativeSeries: IMarkerSupportSeries, autoRange: boolean): IPoint[][];
8
+ export declare function xyLayout(data: DataView, startRelativeSeries: IMarkerSupportSeries, endRelativeSeries: IMarkerSupportSeries, relativeSeries: IMarkerSupportSeries, autoRange: boolean, includeFullBand?: boolean): IPoint[][];
9
9
  export declare function polarLayout(data: DataView, startRelativeSeries: IMarkerSupportSeries, endRelativeSeries: IMarkerSupportSeries, relativeSeries: IMarkerSupportSeries, autoRange: boolean): IPolarPoint[][];
10
10
  export declare function geoLayout(data: DataView, relativeSeries: IMarkerSupportSeries): IPoint[][];
11
11
  export declare function cartesianCoordinateLayout(data: DataView, relativeSeries: IMarkerSupportSeries, autoRange: boolean, coordinatesOffset: OffsetPoint[] | OffsetPoint): IPoint[];
@@ -67,23 +67,32 @@ export function isAggrSpec(spec) {
67
67
  return AGGR_TYPE.includes(spec);
68
68
  }
69
69
 
70
- export function xyLayout(data, startRelativeSeries, endRelativeSeries, relativeSeries, autoRange) {
70
+ export function xyLayout(data, startRelativeSeries, endRelativeSeries, relativeSeries, autoRange, includeFullBand = !1) {
71
71
  const regionStart = startRelativeSeries.getRegion(), regionStartLayoutStartPoint = regionStart.getLayoutStartPoint(), regionEnd = endRelativeSeries.getRegion(), regionEndLayoutStartPoint = regionEnd.getLayoutStartPoint(), regionWidth = Math.abs(Math.min(regionStartLayoutStartPoint.x, regionEndLayoutStartPoint.x) - Math.max(regionStartLayoutStartPoint.x + regionStart.getLayoutRect().width, regionEndLayoutStartPoint.x + regionEnd.getLayoutRect().width)), regionHeight = Math.abs(Math.min(regionStartLayoutStartPoint.y, regionEndLayoutStartPoint.y) - Math.max(regionStartLayoutStartPoint.y + regionStart.getLayoutRect().height, regionEndLayoutStartPoint.y + regionEnd.getLayoutRect().height)), refSeries = {
72
72
  relativeSeries: relativeSeries,
73
73
  startRelativeSeries: startRelativeSeries,
74
74
  endRelativeSeries: endRelativeSeries
75
- }, lines = [], dataPoints = data.latestData[0] && data.latestData[0].latestData ? data.latestData[0].latestData : data.latestData, xDomain = relativeSeries.getXAxisHelper().getScale(0).domain(), yDomain = relativeSeries.getYAxisHelper().getScale(0).domain();
75
+ }, lines = [], dataPoints = data.latestData[0] && data.latestData[0].latestData ? data.latestData[0].latestData : data.latestData, xAxisHelper = relativeSeries.getXAxisHelper(), yAxisHelper = relativeSeries.getXAxisHelper(), xDomain = xAxisHelper.getScale(0).domain(), yDomain = yAxisHelper.getScale(0).domain(), isXExpand = includeFullBand && !xAxisHelper.isContinuous && !!xAxisHelper.getBandwidth, isyExpand = includeFullBand && !yAxisHelper.isContinuous && !!yAxisHelper.getBandwidth, xTemp = {
76
+ min: null,
77
+ max: null
78
+ }, yTemp = {
79
+ min: null,
80
+ max: null
81
+ };
76
82
  return dataPoints.forEach((datum => {
77
83
  const isValidX = isValid(datum.x), isValidY = isValid(datum.y);
78
- if (isValidX && isValidY) {
79
- const x = getXValue(datum, xDomain, autoRange, refSeries, regionWidth, regionStartLayoutStartPoint), y = getYValue(datum, yDomain, autoRange, refSeries, regionHeight, regionStartLayoutStartPoint);
80
- lines.push([ {
81
- x: x,
82
- y: y
83
- } ]);
84
- } else if (isValidX) {
85
- const x = getXValue(datum, xDomain, autoRange, refSeries, regionWidth, regionStartLayoutStartPoint), y = Math.max(regionStartLayoutStartPoint.y + regionStart.getLayoutRect().height, regionEndLayoutStartPoint.y + regionEnd.getLayoutRect().height), y1 = Math.min(regionStartLayoutStartPoint.y, regionEndLayoutStartPoint.y);
86
- lines.push([ {
84
+ let x, y;
85
+ if (isValidX && isValidY) x = getXValue(datum, xDomain, autoRange, refSeries, regionWidth, regionStartLayoutStartPoint),
86
+ y = getYValue(datum, yDomain, autoRange, refSeries, regionHeight, regionStartLayoutStartPoint),
87
+ setTempWithValid(x, isXExpand, xTemp, lines.length), setTempWithValid(y, isyExpand, yTemp, lines.length),
88
+ lines.push([ {
89
+ x: x,
90
+ y: y
91
+ } ]); else if (isValidX) {
92
+ x = getXValue(datum, xDomain, autoRange, refSeries, regionWidth, regionStartLayoutStartPoint),
93
+ y = Math.max(regionStartLayoutStartPoint.y + regionStart.getLayoutRect().height, regionEndLayoutStartPoint.y + regionEnd.getLayoutRect().height);
94
+ const y1 = Math.min(regionStartLayoutStartPoint.y, regionEndLayoutStartPoint.y);
95
+ setTempWithValid(x, isXExpand, xTemp, lines.length), lines.push([ {
87
96
  x: x,
88
97
  y: y
89
98
  }, {
@@ -91,8 +100,9 @@ export function xyLayout(data, startRelativeSeries, endRelativeSeries, relativeS
91
100
  y: y1
92
101
  } ]);
93
102
  } else if (isValidY) {
94
- const x = Math.min(regionStartLayoutStartPoint.x, regionEndLayoutStartPoint.x), y = getYValue(datum, yDomain, autoRange, refSeries, regionHeight, regionStartLayoutStartPoint), x1 = Math.max(regionStartLayoutStartPoint.x + regionStart.getLayoutRect().width, regionEndLayoutStartPoint.x + regionEnd.getLayoutRect().width);
95
- lines.push([ {
103
+ x = Math.min(regionStartLayoutStartPoint.x, regionEndLayoutStartPoint.x), y = getYValue(datum, yDomain, autoRange, refSeries, regionHeight, regionStartLayoutStartPoint);
104
+ const x1 = Math.max(regionStartLayoutStartPoint.x + regionStart.getLayoutRect().width, regionEndLayoutStartPoint.x + regionEnd.getLayoutRect().width);
105
+ setTempWithValid(y, isyExpand, yTemp, lines.length), lines.push([ {
96
106
  x: x,
97
107
  y: y
98
108
  }, {
@@ -100,7 +110,28 @@ export function xyLayout(data, startRelativeSeries, endRelativeSeries, relativeS
100
110
  y: y
101
111
  } ]);
102
112
  }
103
- })), lines;
113
+ })), setTempToLines(lines, xAxisHelper, yAxisHelper, xTemp, yTemp), lines;
114
+ }
115
+
116
+ function setTempToLines(lines, xAxisHelper, yAxisHelper, xTemp, yTemp) {
117
+ if (xTemp.min || xTemp.max) {
118
+ const xBandSize = xAxisHelper.getBandwidth(0) * (1 + xAxisHelper.getScale(0).paddingInner());
119
+ xTemp.min && lines[xTemp.min.index].forEach((p => p.x -= xBandSize / 2)), xTemp.max && lines[xTemp.max.index].forEach((p => p.x += xBandSize / 2));
120
+ }
121
+ if (yTemp.min || yTemp.max) {
122
+ const yBandSize = yAxisHelper.getBandwidth(0) * (1 + yAxisHelper.getScale(0).paddingInner());
123
+ yTemp.min && lines[yTemp.min.index].forEach((p => p.y -= yBandSize / 2)), yTemp.max && lines[yTemp.max.index].forEach((p => p.y += yBandSize / 2));
124
+ }
125
+ }
126
+
127
+ function setTempWithValid(v, isExpand, temp, index) {
128
+ return isExpand && ((null === temp.min || temp.min.value > v) && (temp.min = {
129
+ value: v,
130
+ index: index
131
+ }), (null === temp.max || temp.max.value < v) && (temp.max = {
132
+ value: v,
133
+ index: index
134
+ })), v;
104
135
  }
105
136
 
106
137
  export function polarLayout(data, startRelativeSeries, endRelativeSeries, relativeSeries, autoRange) {