@visactor/vchart 2.1.0-alpha.0 → 2.1.0-alpha.2

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 (262) hide show
  1. package/build/es5/index.js +3 -3
  2. package/build/index.es.js +2290 -473
  3. package/build/index.js +2290 -473
  4. package/build/index.min.js +2 -2
  5. package/build/tsconfig.tsbuildinfo +1 -1
  6. package/cjs/chart/base/base-chart-transformer.d.ts +3 -0
  7. package/cjs/chart/base/base-chart-transformer.js +21 -1
  8. package/cjs/chart/base/base-chart-transformer.js.map +1 -1
  9. package/cjs/chart/base/base-chart.d.ts +15 -9
  10. package/cjs/chart/base/base-chart.js +115 -24
  11. package/cjs/chart/base/base-chart.js.map +1 -1
  12. package/cjs/chart/interface/chart.d.ts +1 -0
  13. package/cjs/chart/interface/chart.js.map +1 -1
  14. package/cjs/chart/pie/base/pie-transformer.js +2 -2
  15. package/cjs/chart/pie/base/pie-transformer.js.map +1 -1
  16. package/cjs/chart/progress/circular/circular-progress-transformer.js +2 -2
  17. package/cjs/chart/progress/circular/circular-progress-transformer.js.map +1 -1
  18. package/cjs/chart/util.d.ts +4 -1
  19. package/cjs/chart/util.js +40 -4
  20. package/cjs/chart/util.js.map +1 -1
  21. package/cjs/chart/waterfall/waterfall-transformer.js +2 -1
  22. package/cjs/chart/waterfall/waterfall-transformer.js.map +1 -1
  23. package/cjs/compile/compiler.js +2 -2
  24. package/cjs/compile/compiler.js.map +1 -1
  25. package/cjs/compile/data/compilable-data.d.ts +1 -1
  26. package/cjs/compile/data/compilable-data.js +1 -1
  27. package/cjs/compile/data/compilable-data.js.map +1 -1
  28. package/cjs/compile/grammar-item.d.ts +1 -1
  29. package/cjs/compile/grammar-item.js.map +1 -1
  30. package/cjs/compile/interface/compilable-item.d.ts +1 -1
  31. package/cjs/compile/interface/compilable-item.js.map +1 -1
  32. package/cjs/component/axis/base-axis.d.ts +2 -7
  33. package/cjs/component/axis/base-axis.js +25 -3
  34. package/cjs/component/axis/base-axis.js.map +1 -1
  35. package/cjs/component/axis/cartesian/band-axis.d.ts +1 -7
  36. package/cjs/component/base/base-component.d.ts +7 -7
  37. package/cjs/component/base/base-component.js +41 -6
  38. package/cjs/component/base/base-component.js.map +1 -1
  39. package/cjs/component/base/release-vrender-component.d.ts +10 -0
  40. package/cjs/component/base/release-vrender-component.js +37 -0
  41. package/cjs/component/base/release-vrender-component.js.map +1 -0
  42. package/cjs/component/brush/brush.d.ts +2 -7
  43. package/cjs/component/brush/brush.js +3 -0
  44. package/cjs/component/brush/brush.js.map +1 -1
  45. package/cjs/component/crosshair/base.d.ts +1 -7
  46. package/cjs/component/custom-mark/custom-mark.d.ts +1 -7
  47. package/cjs/component/data-zoom/data-filter-base-component.d.ts +1 -7
  48. package/cjs/component/geo/geo-coordinate.d.ts +1 -7
  49. package/cjs/component/index.js +1 -2
  50. package/cjs/component/label/base-label.d.ts +1 -7
  51. package/cjs/component/label/label.js +1 -1
  52. package/cjs/component/label/label.js.map +1 -1
  53. package/cjs/component/legend/base-legend.d.ts +2 -7
  54. package/cjs/component/legend/base-legend.js +20 -3
  55. package/cjs/component/legend/base-legend.js.map +1 -1
  56. package/cjs/component/marker/base-marker.d.ts +7 -7
  57. package/cjs/component/marker/base-marker.js +23 -6
  58. package/cjs/component/marker/base-marker.js.map +1 -1
  59. package/cjs/component/marker/mark-line/base-mark-line.js +2 -4
  60. package/cjs/component/marker/mark-line/base-mark-line.js.map +1 -1
  61. package/cjs/component/title/title.d.ts +1 -7
  62. package/cjs/component/title/title.js +6 -2
  63. package/cjs/component/title/title.js.map +1 -1
  64. package/cjs/constant/attribute.js +2 -1
  65. package/cjs/constant/scatter.js +1 -2
  66. package/cjs/constant/waterfall.js +2 -1
  67. package/cjs/core/factory.js +1 -1
  68. package/cjs/core/index.js +1 -1
  69. package/cjs/core/vchart.d.ts +5 -1
  70. package/cjs/core/vchart.js +28 -12
  71. package/cjs/core/vchart.js.map +1 -1
  72. package/cjs/data/data-view-utils.d.ts +5 -0
  73. package/cjs/data/data-view-utils.js +58 -0
  74. package/cjs/data/data-view-utils.js.map +1 -0
  75. package/cjs/env/env.js +1 -1
  76. package/cjs/env/index.js +1 -1
  77. package/cjs/mark/base/base-mark.d.ts +12 -2
  78. package/cjs/mark/base/base-mark.js +85 -21
  79. package/cjs/mark/base/base-mark.js.map +1 -1
  80. package/cjs/mark/component.d.ts +9 -0
  81. package/cjs/mark/component.js +51 -3
  82. package/cjs/mark/component.js.map +1 -1
  83. package/cjs/mark/group.js +1 -1
  84. package/cjs/mark/group.js.map +1 -1
  85. package/cjs/mark/interface/mark.d.ts +2 -0
  86. package/cjs/mark/interface/mark.js.map +1 -1
  87. package/cjs/model/base-model.d.ts +3 -15
  88. package/cjs/model/base-model.js.map +1 -1
  89. package/cjs/model/interface.d.ts +13 -0
  90. package/cjs/model/interface.js.map +1 -1
  91. package/cjs/region/region.d.ts +1 -7
  92. package/cjs/series/area/area.d.ts +2 -0
  93. package/cjs/series/area/area.js +6 -0
  94. package/cjs/series/area/area.js.map +1 -1
  95. package/cjs/series/bar/bar.d.ts +3 -0
  96. package/cjs/series/bar/bar.js +30 -4
  97. package/cjs/series/bar/bar.js.map +1 -1
  98. package/cjs/series/base/base-series.d.ts +8 -7
  99. package/cjs/series/base/base-series.js +54 -13
  100. package/cjs/series/base/base-series.js.map +1 -1
  101. package/cjs/series/base/constant.d.ts +3 -0
  102. package/cjs/series/base/constant.js +9 -1
  103. package/cjs/series/base/constant.js.map +1 -1
  104. package/cjs/series/box-plot/box-plot.d.ts +2 -0
  105. package/cjs/series/box-plot/box-plot.js +14 -2
  106. package/cjs/series/box-plot/box-plot.js.map +1 -1
  107. package/cjs/series/heatmap/heatmap.d.ts +2 -0
  108. package/cjs/series/heatmap/heatmap.js +10 -0
  109. package/cjs/series/heatmap/heatmap.js.map +1 -1
  110. package/cjs/series/line/line.d.ts +2 -0
  111. package/cjs/series/line/line.js +6 -0
  112. package/cjs/series/line/line.js.map +1 -1
  113. package/cjs/series/mixin/line-mixin.d.ts +1 -0
  114. package/cjs/series/mixin/line-mixin.js +6 -1
  115. package/cjs/series/mixin/line-mixin.js.map +1 -1
  116. package/cjs/series/pie/pie.d.ts +3 -7
  117. package/cjs/series/pie/pie.js +16 -1
  118. package/cjs/series/pie/pie.js.map +1 -1
  119. package/cjs/series/progress/circular/circular.d.ts +2 -0
  120. package/cjs/series/progress/circular/circular.js +9 -1
  121. package/cjs/series/progress/circular/circular.js.map +1 -1
  122. package/cjs/series/progress/linear/linear.d.ts +2 -0
  123. package/cjs/series/progress/linear/linear.js +17 -1
  124. package/cjs/series/progress/linear/linear.js.map +1 -1
  125. package/cjs/series/scatter/scatter.d.ts +2 -0
  126. package/cjs/series/scatter/scatter.js +9 -1
  127. package/cjs/series/scatter/scatter.js.map +1 -1
  128. package/cjs/series/waterfall/waterfall.d.ts +2 -0
  129. package/cjs/series/waterfall/waterfall.js +10 -0
  130. package/cjs/series/waterfall/waterfall.js.map +1 -1
  131. package/cjs/util/graphic-state.d.ts +1 -0
  132. package/cjs/util/graphic-state.js +19 -4
  133. package/cjs/util/graphic-state.js.map +1 -1
  134. package/esm/chart/base/base-chart-transformer.d.ts +3 -0
  135. package/esm/chart/base/base-chart-transformer.js +22 -0
  136. package/esm/chart/base/base-chart-transformer.js.map +1 -1
  137. package/esm/chart/base/base-chart.d.ts +15 -9
  138. package/esm/chart/base/base-chart.js +111 -23
  139. package/esm/chart/base/base-chart.js.map +1 -1
  140. package/esm/chart/interface/chart.d.ts +1 -0
  141. package/esm/chart/interface/chart.js.map +1 -1
  142. package/esm/chart/pie/base/pie-transformer.js +2 -2
  143. package/esm/chart/pie/base/pie-transformer.js.map +1 -1
  144. package/esm/chart/progress/circular/circular-progress-transformer.js +2 -2
  145. package/esm/chart/progress/circular/circular-progress-transformer.js.map +1 -1
  146. package/esm/chart/util.d.ts +4 -1
  147. package/esm/chart/util.js +34 -1
  148. package/esm/chart/util.js.map +1 -1
  149. package/esm/chart/waterfall/waterfall-transformer.js +2 -1
  150. package/esm/chart/waterfall/waterfall-transformer.js.map +1 -1
  151. package/esm/compile/compiler.js +2 -2
  152. package/esm/compile/compiler.js.map +1 -1
  153. package/esm/compile/data/compilable-data.d.ts +1 -1
  154. package/esm/compile/data/compilable-data.js +1 -1
  155. package/esm/compile/data/compilable-data.js.map +1 -1
  156. package/esm/compile/grammar-item.d.ts +1 -1
  157. package/esm/compile/grammar-item.js.map +1 -1
  158. package/esm/compile/interface/compilable-item.d.ts +1 -1
  159. package/esm/compile/interface/compilable-item.js.map +1 -1
  160. package/esm/component/axis/base-axis.d.ts +2 -7
  161. package/esm/component/axis/base-axis.js +25 -2
  162. package/esm/component/axis/base-axis.js.map +1 -1
  163. package/esm/component/axis/cartesian/band-axis.d.ts +1 -7
  164. package/esm/component/base/base-component.d.ts +7 -7
  165. package/esm/component/base/base-component.js +41 -5
  166. package/esm/component/base/base-component.js.map +1 -1
  167. package/esm/component/base/release-vrender-component.d.ts +10 -0
  168. package/esm/component/base/release-vrender-component.js +24 -0
  169. package/esm/component/base/release-vrender-component.js.map +1 -0
  170. package/esm/component/brush/brush.d.ts +2 -7
  171. package/esm/component/brush/brush.js +3 -0
  172. package/esm/component/brush/brush.js.map +1 -1
  173. package/esm/component/crosshair/base.d.ts +1 -7
  174. package/esm/component/custom-mark/custom-mark.d.ts +1 -7
  175. package/esm/component/data-zoom/data-filter-base-component.d.ts +1 -7
  176. package/esm/component/geo/geo-coordinate.d.ts +1 -7
  177. package/esm/component/index.js +1 -2
  178. package/esm/component/label/base-label.d.ts +1 -7
  179. package/esm/component/label/label.js +1 -1
  180. package/esm/component/label/label.js.map +1 -1
  181. package/esm/component/legend/base-legend.d.ts +2 -7
  182. package/esm/component/legend/base-legend.js +20 -2
  183. package/esm/component/legend/base-legend.js.map +1 -1
  184. package/esm/component/marker/base-marker.d.ts +7 -7
  185. package/esm/component/marker/base-marker.js +24 -5
  186. package/esm/component/marker/base-marker.js.map +1 -1
  187. package/esm/component/marker/mark-line/base-mark-line.js +2 -4
  188. package/esm/component/marker/mark-line/base-mark-line.js.map +1 -1
  189. package/esm/component/title/title.d.ts +1 -7
  190. package/esm/component/title/title.js +6 -2
  191. package/esm/component/title/title.js.map +1 -1
  192. package/esm/constant/attribute.js +2 -1
  193. package/esm/constant/scatter.js +1 -2
  194. package/esm/constant/waterfall.js +2 -1
  195. package/esm/core/factory.js +1 -1
  196. package/esm/core/index.js +1 -1
  197. package/esm/core/vchart.d.ts +5 -1
  198. package/esm/core/vchart.js +29 -12
  199. package/esm/core/vchart.js.map +1 -1
  200. package/esm/data/data-view-utils.d.ts +5 -0
  201. package/esm/data/data-view-utils.js +46 -0
  202. package/esm/data/data-view-utils.js.map +1 -0
  203. package/esm/env/env.js +1 -1
  204. package/esm/env/index.js +1 -1
  205. package/esm/mark/base/base-mark.d.ts +12 -2
  206. package/esm/mark/base/base-mark.js +85 -20
  207. package/esm/mark/base/base-mark.js.map +1 -1
  208. package/esm/mark/component.d.ts +9 -0
  209. package/esm/mark/component.js +51 -2
  210. package/esm/mark/component.js.map +1 -1
  211. package/esm/mark/group.js +1 -1
  212. package/esm/mark/group.js.map +1 -1
  213. package/esm/mark/interface/mark.d.ts +2 -0
  214. package/esm/mark/interface/mark.js.map +1 -1
  215. package/esm/model/base-model.d.ts +3 -15
  216. package/esm/model/base-model.js.map +1 -1
  217. package/esm/model/interface.d.ts +13 -0
  218. package/esm/model/interface.js.map +1 -1
  219. package/esm/region/region.d.ts +1 -7
  220. package/esm/series/area/area.d.ts +2 -0
  221. package/esm/series/area/area.js +7 -1
  222. package/esm/series/area/area.js.map +1 -1
  223. package/esm/series/bar/bar.d.ts +3 -0
  224. package/esm/series/bar/bar.js +30 -4
  225. package/esm/series/bar/bar.js.map +1 -1
  226. package/esm/series/base/base-series.d.ts +8 -7
  227. package/esm/series/base/base-series.js +50 -11
  228. package/esm/series/base/base-series.js.map +1 -1
  229. package/esm/series/base/constant.d.ts +3 -0
  230. package/esm/series/base/constant.js +10 -0
  231. package/esm/series/base/constant.js.map +1 -1
  232. package/esm/series/box-plot/box-plot.d.ts +2 -0
  233. package/esm/series/box-plot/box-plot.js +13 -2
  234. package/esm/series/box-plot/box-plot.js.map +1 -1
  235. package/esm/series/heatmap/heatmap.d.ts +2 -0
  236. package/esm/series/heatmap/heatmap.js +10 -0
  237. package/esm/series/heatmap/heatmap.js.map +1 -1
  238. package/esm/series/line/line.d.ts +2 -0
  239. package/esm/series/line/line.js +7 -1
  240. package/esm/series/line/line.js.map +1 -1
  241. package/esm/series/mixin/line-mixin.d.ts +1 -0
  242. package/esm/series/mixin/line-mixin.js +5 -0
  243. package/esm/series/mixin/line-mixin.js.map +1 -1
  244. package/esm/series/pie/pie.d.ts +3 -7
  245. package/esm/series/pie/pie.js +17 -0
  246. package/esm/series/pie/pie.js.map +1 -1
  247. package/esm/series/progress/circular/circular.d.ts +2 -0
  248. package/esm/series/progress/circular/circular.js +10 -0
  249. package/esm/series/progress/circular/circular.js.map +1 -1
  250. package/esm/series/progress/linear/linear.d.ts +2 -0
  251. package/esm/series/progress/linear/linear.js +18 -0
  252. package/esm/series/progress/linear/linear.js.map +1 -1
  253. package/esm/series/scatter/scatter.d.ts +2 -0
  254. package/esm/series/scatter/scatter.js +10 -0
  255. package/esm/series/scatter/scatter.js.map +1 -1
  256. package/esm/series/waterfall/waterfall.d.ts +2 -0
  257. package/esm/series/waterfall/waterfall.js +10 -0
  258. package/esm/series/waterfall/waterfall.js.map +1 -1
  259. package/esm/util/graphic-state.d.ts +1 -0
  260. package/esm/util/graphic-state.js +16 -3
  261. package/esm/util/graphic-state.js.map +1 -1
  262. package/package.json +11 -10
@@ -38,7 +38,7 @@ import { ChartEvent, HOOK_EVENT } from "../../constant/event";
38
38
 
39
39
  import { DimensionEventEnum } from "../../event/events/dimension/interface";
40
40
 
41
- import { calculateChartSize, mergeUpdateResult } from "../util";
41
+ import { calculateChartSize, isUpdateSpecResultComponentOnly, isUpdateSpecResultLocalOnly, mergeUpdateResult } from "../util";
42
42
 
43
43
  import { isDiscrete } from "@visactor/vscale";
44
44
 
@@ -50,6 +50,12 @@ import { Interaction } from "../../interaction/interaction";
50
50
 
51
51
  import { animationConfig, userAnimationConfig } from "../../animation/utils";
52
52
 
53
+ const MARKER_COMPONENT_SPEC_KEYS = {
54
+ [ComponentTypeEnum.markPoint]: !0,
55
+ [ComponentTypeEnum.markLine]: !0,
56
+ [ComponentTypeEnum.markArea]: !0
57
+ };
58
+
53
59
  export class BaseChart extends CompilableBase {
54
60
  getSpec() {
55
61
  return this._spec;
@@ -94,7 +100,7 @@ export class BaseChart extends CompilableBase {
94
100
  constructor(spec, option) {
95
101
  var _a, _b, _c, _d;
96
102
  super(option), this.type = "chart", this.id = createID(), this._regions = [], this._series = [],
97
- this._components = [], this._layoutRect = {
103
+ this._components = [], this._specTransformer = null, this._layoutRect = {
98
104
  x: 0,
99
105
  y: 0,
100
106
  width: DEFAULT_CHART_WIDTH,
@@ -153,8 +159,8 @@ export class BaseChart extends CompilableBase {
153
159
  }), this._setModelOption && this._setModelOption(), this._spec = spec;
154
160
  }
155
161
  created(transformer) {
156
- this._chartData.parseData(this._spec.data), this._createGlobalScale(), this._createBackground(),
157
- this._createLayout(), transformer.forEachRegionInSpec(this._spec, this._createRegion.bind(this)),
162
+ this._specTransformer = transformer, this._chartData.parseData(this._spec.data),
163
+ this._createGlobalScale(), this._createBackground(), this._createLayout(), transformer.forEachRegionInSpec(this._spec, this._createRegion.bind(this)),
158
164
  transformer.forEachSeriesInSpec(this._spec, this._createSeries.bind(this)), transformer.forEachComponentInSpec(this._spec, this._createComponent.bind(this), this._option.getSpecInfo());
159
165
  }
160
166
  _initInteractions() {
@@ -446,11 +452,14 @@ export class BaseChart extends CompilableBase {
446
452
  _getSpecKeys(spec) {
447
453
  const ignoreKeys = {
448
454
  width: !0,
449
- height: !0
455
+ height: !0,
456
+ xField: !0,
457
+ yField: !0
450
458
  };
451
459
  return Object.keys(spec).filter((key => !ignoreKeys[key])).sort();
452
460
  }
453
461
  updateSpec(spec) {
462
+ var _a;
454
463
  const result = {
455
464
  change: !1,
456
465
  reMake: !1,
@@ -458,20 +467,32 @@ export class BaseChart extends CompilableBase {
458
467
  reSize: !1,
459
468
  reCompile: !1
460
469
  };
461
- if (this.setLayoutTag(!0, null, !1), spec.type !== this.type) return result.reMake = !0,
470
+ if (spec.type !== this.type) return result.reMake = !0, this.setLayoutTag(!0, null, !1),
462
471
  result;
463
472
  const currentKeys = this._getSpecKeys(this._spec), nextKeys = this._getSpecKeys(spec);
464
- if (!isEqual(currentKeys, nextKeys)) return result.reMake = !0, result;
473
+ if (!isEqual(currentKeys, nextKeys)) return result.reMake = !0, this.setLayoutTag(!0, null, !1),
474
+ result;
465
475
  for (let i = 0; i < currentKeys.length; i++) {
466
- const key = currentKeys[i];
467
- if (isArray(this._spec[key]) && this._spec[key].length !== array(spec[key]).length) return result.reMake = !0,
468
- result;
476
+ const key = currentKeys[i], currentSpec = this._spec[key], nextSpec = spec[key];
477
+ if (isArray(currentSpec) && currentSpec.length !== array(nextSpec).length && !this._canRemoveMarkerComponentsWithoutRemake(key, currentSpec, nextSpec)) return result.reMake = !0,
478
+ this.setLayoutTag(!0, null, !1), result;
469
479
  }
470
- const oldSpec = this._spec;
471
- return this._spec = spec, this.updateChartConfig(result, oldSpec), result.reMake ? result : (this.updateGlobalScale(result),
472
- result.reMake ? result : (this.updateRegionSpec(result), result.reMake ? result : (this.updateComponentSpec(result),
473
- result.reMake ? result : (this.updateSeriesSpec(result), result.reMake || (this.reInit(),
474
- this.updateDataSpec(), this.updateGlobalScaleDomain()), result))));
480
+ const oldSpec = this._spec, onlyMarkerComponentsRemoved = this._isOnlyMarkerComponentsRemoved(this._spec, spec, currentKeys), onlyComponentSpecsChanged = this._isOnlyComponentSpecsChanged(this._spec, spec, currentKeys), onlySeriesSpecsChanged = this._isOnlySeriesSpecsChanged(this._spec, spec, currentKeys);
481
+ if (this._spec = spec, onlyMarkerComponentsRemoved) return this._removeMarkerComponentsForEmptySpecs(result),
482
+ result;
483
+ if (this.updateChartConfig(result, oldSpec), result.reMake) return this.setLayoutTag(!0, null, !1),
484
+ result;
485
+ if (this.updateGlobalScale(result), result.reMake) return this.setLayoutTag(!0, null, !1),
486
+ result;
487
+ if (this.updateRegionSpec(result), result.reMake) return this.setLayoutTag(!0, null, !1),
488
+ result;
489
+ const componentUpdateResult = this.updateComponentSpec(result);
490
+ return result.reMake ? (this.setLayoutTag(!0, null, !1), result) : isUpdateSpecResultLocalOnly(result) ? result : onlyComponentSpecsChanged && !componentUpdateResult.hasNonComponentOnlyUpdate && isUpdateSpecResultComponentOnly(result) ? (componentUpdateResult.componentOnlyUpdatedComponents.forEach((component => {
491
+ component.reInit(component.getSpec());
492
+ })), (null === (_a = result.effects) || void 0 === _a ? void 0 : _a.layout) && this.setLayoutTag(!0, null, !1),
493
+ result) : (this.setLayoutTag(!0, null, !1), this.updateSeriesSpec(result), result.reMake || (this.reInit(),
494
+ onlySeriesSpecsChanged && this._canSkipChartDataStages(result) || (this.updateDataSpec(),
495
+ this.updateGlobalScaleDomain())), result);
475
496
  }
476
497
  updateChartConfig(result, oldSpec) {
477
498
  var _a, _b;
@@ -488,32 +509,99 @@ export class BaseChart extends CompilableBase {
488
509
  })) : result.reMake = !0);
489
510
  }
490
511
  updateComponentSpec(result) {
512
+ const componentOnlyUpdatedComponents = [];
513
+ let hasNonComponentOnlyUpdate = !1;
491
514
  const componentCache = {}, checkVisibleComponents = {
492
515
  [ComponentTypeEnum.title]: !0,
493
516
  [ComponentTypeEnum.brush]: !0,
494
517
  [ComponentTypeEnum.indicator]: !0
495
- };
518
+ }, removedComponents = [];
496
519
  this._components.forEach((c => {
497
520
  var _a, _b;
498
521
  if (c.type === ComponentTypeEnum.label || c.type === ComponentTypeEnum.totalLabel) return;
499
522
  checkVisibleComponents[c.type] && (checkVisibleComponents[c.type] = !1);
500
523
  const compSpecKey = c.specKey || c.type, cmpSpec = null !== (_a = this._spec[compSpecKey]) && void 0 !== _a ? _a : {};
501
- isArray(cmpSpec) ? (componentCache[compSpecKey] = componentCache[compSpecKey] || {
502
- specCount: cmpSpec.length,
503
- componentCount: 0
504
- }, componentCache[compSpecKey].componentCount++, mergeUpdateResult(result, c.updateSpec(null !== (_b = cmpSpec[c.getSpecIndex()]) && void 0 !== _b ? _b : {}, cmpSpec))) : mergeUpdateResult(result, c.updateSpec(cmpSpec));
524
+ if (isArray(cmpSpec)) {
525
+ if (componentCache[compSpecKey] = componentCache[compSpecKey] || {
526
+ specCount: cmpSpec.length,
527
+ componentCount: 0
528
+ }, this._canRemoveMarkerComponentsWithoutRemake(compSpecKey, [ c.getSpec() ], cmpSpec)) return void removedComponents.push(c);
529
+ componentCache[compSpecKey].componentCount++;
530
+ const componentSpec = null !== (_b = cmpSpec[c.getSpecIndex()]) && void 0 !== _b ? _b : {}, previousComponentSpec = c.getSpec(), componentResult = c.updateSpec(componentSpec, cmpSpec);
531
+ isUpdateSpecResultComponentOnly(componentResult) ? componentOnlyUpdatedComponents.push(c) : isEqual(previousComponentSpec, componentSpec) || (hasNonComponentOnlyUpdate = !0),
532
+ mergeUpdateResult(result, componentResult);
533
+ } else {
534
+ const previousComponentSpec = c.getSpec(), componentResult = c.updateSpec(cmpSpec);
535
+ isUpdateSpecResultComponentOnly(componentResult) ? componentOnlyUpdatedComponents.push(c) : isEqual(previousComponentSpec, cmpSpec) || (hasNonComponentOnlyUpdate = !0),
536
+ mergeUpdateResult(result, componentResult);
537
+ }
505
538
  }));
506
539
  for (const key in componentCache) if (Object.prototype.hasOwnProperty.call(componentCache, key)) {
507
540
  const element = componentCache[key];
508
541
  element.componentCount !== element.specCount && (result.reMake = !0);
509
542
  }
543
+ removedComponents.length && (removedComponents.forEach((component => {
544
+ this._removeComponent(component);
545
+ })), result.change = !0, result.effects = Object.assign(Object.assign({}, result.effects), {
546
+ component: !0,
547
+ localOnly: !0
548
+ }));
510
549
  const isVisible = compSpec => compSpec && !1 !== compSpec.visible;
511
- Object.keys(checkVisibleComponents).forEach((type => {
550
+ return Object.keys(checkVisibleComponents).forEach((type => {
512
551
  if (checkVisibleComponents[type]) {
513
552
  const compSpec = this._spec[type];
514
553
  (isArray(compSpec) ? compSpec.some(isVisible) : isVisible(compSpec)) && (result.reMake = !0);
515
554
  }
555
+ })), {
556
+ componentOnlyUpdatedComponents: componentOnlyUpdatedComponents,
557
+ hasNonComponentOnlyUpdate: hasNonComponentOnlyUpdate
558
+ };
559
+ }
560
+ _canRemoveMarkerComponentsWithoutRemake(key, currentSpec, nextSpec) {
561
+ return MARKER_COMPONENT_SPEC_KEYS[key] && isArray(currentSpec) && currentSpec.length > 0 && isArray(nextSpec) && 0 === nextSpec.length;
562
+ }
563
+ _isOnlyMarkerComponentsRemoved(currentSpec, nextSpec, specKeys) {
564
+ let hasMarkerRemoval = !1;
565
+ const onlyMarkerRemoval = specKeys.every((key => this._canRemoveMarkerComponentsWithoutRemake(key, currentSpec[key], nextSpec[key]) ? (hasMarkerRemoval = !0,
566
+ !0) : isEqual(currentSpec[key], nextSpec[key])));
567
+ return hasMarkerRemoval && onlyMarkerRemoval;
568
+ }
569
+ _isComponentSpecKey(key) {
570
+ return this._components.some((component => (component.specKey || component.type) === key));
571
+ }
572
+ _isOnlyComponentSpecsChanged(currentSpec, nextSpec, specKeys) {
573
+ let hasComponentSpecChange = !1;
574
+ const currentSpecRecord = currentSpec, nextSpecRecord = nextSpec, onlyComponentSpecChange = specKeys.every((key => !!isEqual(currentSpecRecord[key], nextSpecRecord[key]) || !!this._isComponentSpecKey(key) && (hasComponentSpecChange = !0,
575
+ !0)));
576
+ return hasComponentSpecChange && onlyComponentSpecChange;
577
+ }
578
+ _isOnlySeriesSpecsChanged(currentSpec, nextSpec, specKeys) {
579
+ var _a, _b;
580
+ let hasSeriesSpecChange = !1;
581
+ const currentSpecRecord = currentSpec, nextSpecRecord = nextSpec, seriesRelatedSpecKeys = null !== (_b = null === (_a = this._specTransformer) || void 0 === _a ? void 0 : _a.getSeriesRelatedSpecKeys()) && void 0 !== _b ? _b : {}, onlySeriesSpecChange = specKeys.every((key => !!isEqual(currentSpecRecord[key], nextSpecRecord[key]) || !!seriesRelatedSpecKeys[key] && (hasSeriesSpecChange = !0,
582
+ !0)));
583
+ return hasSeriesSpecChange && onlySeriesSpecChange;
584
+ }
585
+ _canSkipChartDataStages(result) {
586
+ const effects = result.effects;
587
+ return !(!(null == effects ? void 0 : effects.series) || effects.remake || effects.data || effects.scaleDomain || result.reMake);
588
+ }
589
+ _removeMarkerComponentsForEmptySpecs(result) {
590
+ const removedComponents = this._components.filter((component => {
591
+ var _a;
592
+ const compSpecKey = component.specKey || component.type, cmpSpec = null !== (_a = this._spec[compSpecKey]) && void 0 !== _a ? _a : {};
593
+ return this._canRemoveMarkerComponentsWithoutRemake(compSpecKey, [ component.getSpec() ], cmpSpec);
516
594
  }));
595
+ removedComponents.length && (removedComponents.forEach((component => {
596
+ this._removeComponent(component);
597
+ })), result.change = !0, result.effects = Object.assign(Object.assign({}, result.effects), {
598
+ component: !0,
599
+ localOnly: !0
600
+ }));
601
+ }
602
+ _removeComponent(component) {
603
+ this._components = this._components.filter((c => c !== component)), this._idMap.delete(component.id),
604
+ component.release();
517
605
  }
518
606
  updateSeriesSpec(result) {
519
607
  this._spec.series.length === this._series.length ? this._series.forEach((s => {
@@ -610,8 +698,8 @@ export class BaseChart extends CompilableBase {
610
698
  c.compile();
611
699
  })), null === (_d = null === (_c = this._option.performanceHook) || void 0 === _c ? void 0 : _c.afterComponentCompile) || void 0 === _d || _d.call(_c, this._option.globalInstance);
612
700
  }
613
- release() {
614
- [ ...this._components, ...this._regions, ...this._series ].forEach((m => {
701
+ release(forceReleaseVRenderComponents = !0) {
702
+ forceReleaseVRenderComponents && [ ...this._components, ...this._regions, ...this._series ].forEach((m => {
615
703
  m.beforeRelease();
616
704
  })), super.release(), this.clear(), [ ...this._components, ...this._regions, ...this._series ].forEach((m => {
617
705
  m.release();