@visactor/vchart 2.1.0-alpha.1 → 2.1.0-alpha.10

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 (524) hide show
  1. package/build/es5/index.js +3 -3
  2. package/build/index.es.js +5950 -3342
  3. package/build/index.js +5950 -3342
  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 +23 -3
  8. package/cjs/chart/base/base-chart-transformer.js.map +1 -1
  9. package/cjs/chart/base/base-chart.d.ts +25 -9
  10. package/cjs/chart/base/base-chart.js +199 -27
  11. package/cjs/chart/base/base-chart.js.map +1 -1
  12. package/cjs/chart/gauge/gauge-transformer.js +3 -2
  13. package/cjs/chart/gauge/gauge-transformer.js.map +1 -1
  14. package/cjs/chart/index.js +1 -1
  15. package/cjs/chart/interface/chart.d.ts +1 -0
  16. package/cjs/chart/interface/chart.js.map +1 -1
  17. package/cjs/chart/pie/base/pie-transformer.js +2 -2
  18. package/cjs/chart/pie/base/pie-transformer.js.map +1 -1
  19. package/cjs/chart/polar/polar-transformer.js +1 -1
  20. package/cjs/chart/polar/polar-transformer.js.map +1 -1
  21. package/cjs/chart/polar/progress-like/progress-like-transformer.js +1 -1
  22. package/cjs/chart/polar/progress-like/progress-like-transformer.js.map +1 -1
  23. package/cjs/chart/progress/circular/circular-progress-transformer.js +2 -1
  24. package/cjs/chart/progress/circular/circular-progress-transformer.js.map +1 -1
  25. package/cjs/chart/progress/linear/linear-progress-transformer.js +1 -1
  26. package/cjs/chart/progress/linear/linear-progress-transformer.js.map +1 -1
  27. package/cjs/chart/radar/radar-transformer.js +3 -2
  28. package/cjs/chart/radar/radar-transformer.js.map +1 -1
  29. package/cjs/chart/range-area/range-area-transformer.js +2 -2
  30. package/cjs/chart/range-area/range-area-transformer.js.map +1 -1
  31. package/cjs/chart/rose/rose-transformer.js +2 -1
  32. package/cjs/chart/rose/rose-transformer.js.map +1 -1
  33. package/cjs/chart/stack.js +1 -1
  34. package/cjs/chart/util.d.ts +4 -1
  35. package/cjs/chart/util.js +41 -5
  36. package/cjs/chart/util.js.map +1 -1
  37. package/cjs/chart/waterfall/waterfall-transformer.js +2 -1
  38. package/cjs/chart/waterfall/waterfall-transformer.js.map +1 -1
  39. package/cjs/compile/compiler.js +11 -9
  40. package/cjs/compile/compiler.js.map +1 -1
  41. package/cjs/compile/data/compilable-data.d.ts +1 -1
  42. package/cjs/compile/data/compilable-data.js +1 -1
  43. package/cjs/compile/data/compilable-data.js.map +1 -1
  44. package/cjs/compile/grammar-item.d.ts +1 -1
  45. package/cjs/compile/grammar-item.js.map +1 -1
  46. package/cjs/compile/interface/compilable-item.d.ts +1 -1
  47. package/cjs/compile/interface/compilable-item.js.map +1 -1
  48. package/cjs/component/axis/base-axis.d.ts +2 -7
  49. package/cjs/component/axis/base-axis.js +26 -6
  50. package/cjs/component/axis/base-axis.js.map +1 -1
  51. package/cjs/component/axis/cartesian/band-axis.d.ts +1 -7
  52. package/cjs/component/axis/mixin/linear-axis-mixin.js +7 -10
  53. package/cjs/component/axis/mixin/linear-axis-mixin.js.map +1 -1
  54. package/cjs/component/axis/polar/band-axis.d.ts +2 -0
  55. package/cjs/component/axis/polar/band-axis.js +3 -0
  56. package/cjs/component/axis/polar/band-axis.js.map +1 -1
  57. package/cjs/component/axis/polar/linear-axis.js +3 -0
  58. package/cjs/component/axis/polar/linear-axis.js.map +1 -1
  59. package/cjs/component/base/base-component.d.ts +7 -7
  60. package/cjs/component/base/base-component.js +41 -6
  61. package/cjs/component/base/base-component.js.map +1 -1
  62. package/cjs/component/base/release-vrender-component.d.ts +10 -0
  63. package/cjs/component/base/release-vrender-component.js +37 -0
  64. package/cjs/component/base/release-vrender-component.js.map +1 -0
  65. package/cjs/component/brush/brush.d.ts +3 -7
  66. package/cjs/component/brush/brush.js +22 -5
  67. package/cjs/component/brush/brush.js.map +1 -1
  68. package/cjs/component/crosshair/base.d.ts +4 -7
  69. package/cjs/component/crosshair/base.js +30 -2
  70. package/cjs/component/crosshair/base.js.map +1 -1
  71. package/cjs/component/custom-mark/custom-mark.d.ts +4 -7
  72. package/cjs/component/custom-mark/custom-mark.js +27 -3
  73. package/cjs/component/custom-mark/custom-mark.js.map +1 -1
  74. package/cjs/component/data-zoom/data-filter-base-component.d.ts +3 -7
  75. package/cjs/component/data-zoom/data-filter-base-component.js +15 -2
  76. package/cjs/component/data-zoom/data-filter-base-component.js.map +1 -1
  77. package/cjs/component/data-zoom/data-zoom/data-zoom.d.ts +1 -0
  78. package/cjs/component/data-zoom/data-zoom/data-zoom.js +19 -1
  79. package/cjs/component/data-zoom/data-zoom/data-zoom.js.map +1 -1
  80. package/cjs/component/data-zoom/scroll-bar/scroll-bar.d.ts +1 -0
  81. package/cjs/component/data-zoom/scroll-bar/scroll-bar.js +12 -1
  82. package/cjs/component/data-zoom/scroll-bar/scroll-bar.js.map +1 -1
  83. package/cjs/component/geo/geo-coordinate.d.ts +1 -7
  84. package/cjs/component/index.js +1 -2
  85. package/cjs/component/indicator/indicator.d.ts +1 -0
  86. package/cjs/component/indicator/indicator.js +11 -2
  87. package/cjs/component/indicator/indicator.js.map +1 -1
  88. package/cjs/component/indicator/util.d.ts +4 -3
  89. package/cjs/component/indicator/util.js +1 -1
  90. package/cjs/component/indicator/util.js.map +1 -1
  91. package/cjs/component/label/base-label.d.ts +1 -7
  92. package/cjs/component/label/base-label.js +6 -2
  93. package/cjs/component/label/base-label.js.map +1 -1
  94. package/cjs/component/label/label.js +1 -1
  95. package/cjs/component/label/label.js.map +1 -1
  96. package/cjs/component/legend/base-legend.d.ts +2 -7
  97. package/cjs/component/legend/base-legend.js +20 -3
  98. package/cjs/component/legend/base-legend.js.map +1 -1
  99. package/cjs/component/marker/base-marker.d.ts +14 -7
  100. package/cjs/component/marker/base-marker.js +108 -12
  101. package/cjs/component/marker/base-marker.js.map +1 -1
  102. package/cjs/component/marker/mark-area/cartesian-mark-area.js +3 -3
  103. package/cjs/component/marker/mark-area/cartesian-mark-area.js.map +1 -1
  104. package/cjs/component/marker/mark-area/polar-mark-area.js +2 -2
  105. package/cjs/component/marker/mark-area/polar-mark-area.js.map +1 -1
  106. package/cjs/component/marker/mark-line/base-mark-line.js +2 -4
  107. package/cjs/component/marker/mark-line/base-mark-line.js.map +1 -1
  108. package/cjs/component/marker/mark-line/cartesian-mark-line.js +2 -2
  109. package/cjs/component/marker/mark-line/cartesian-mark-line.js.map +1 -1
  110. package/cjs/component/marker/mark-line/polar-mark-line.js +2 -2
  111. package/cjs/component/marker/mark-line/polar-mark-line.js.map +1 -1
  112. package/cjs/component/marker/mark-point/base-mark-point.js +20 -6
  113. package/cjs/component/marker/mark-point/base-mark-point.js.map +1 -1
  114. package/cjs/component/marker/mark-point/cartesian-mark-point.js +2 -2
  115. package/cjs/component/marker/mark-point/cartesian-mark-point.js.map +1 -1
  116. package/cjs/component/marker/mark-point/polar-mark-point.js +1 -1
  117. package/cjs/component/marker/mark-point/polar-mark-point.js.map +1 -1
  118. package/cjs/component/marker/utils.d.ts +4 -4
  119. package/cjs/component/marker/utils.js +27 -23
  120. package/cjs/component/marker/utils.js.map +1 -1
  121. package/cjs/component/player/player.d.ts +1 -0
  122. package/cjs/component/player/player.js +10 -0
  123. package/cjs/component/player/player.js.map +1 -1
  124. package/cjs/component/title/title.d.ts +1 -7
  125. package/cjs/component/title/title.js +6 -2
  126. package/cjs/component/title/title.js.map +1 -1
  127. package/cjs/component/tooltip/tooltip.d.ts +1 -0
  128. package/cjs/component/tooltip/tooltip.js +8 -0
  129. package/cjs/component/tooltip/tooltip.js.map +1 -1
  130. package/cjs/component/util.js +1 -1
  131. package/cjs/constant/box-plot.js +2 -1
  132. package/cjs/constant/scatter.js +1 -2
  133. package/cjs/core/expression-function.js +2 -1
  134. package/cjs/core/factory.js +1 -1
  135. package/cjs/core/index.js +1 -1
  136. package/cjs/core/instance-manager.js +1 -1
  137. package/cjs/core/interface.js +1 -1
  138. package/cjs/core/util.js +1 -1
  139. package/cjs/core/vchart.d.ts +5 -1
  140. package/cjs/core/vchart.js +30 -18
  141. package/cjs/core/vchart.js.map +1 -1
  142. package/cjs/data/data-view-utils.d.ts +5 -0
  143. package/cjs/data/data-view-utils.js +58 -0
  144. package/cjs/data/data-view-utils.js.map +1 -0
  145. package/cjs/data/register.js +1 -1
  146. package/cjs/data/transforms/box-plot.d.ts +4 -1
  147. package/cjs/data/transforms/box-plot.js +3 -3
  148. package/cjs/data/transforms/box-plot.js.map +1 -1
  149. package/cjs/data/transforms/correlation-center.d.ts +11 -4
  150. package/cjs/data/transforms/correlation-center.js +3 -2
  151. package/cjs/data/transforms/correlation-center.js.map +1 -1
  152. package/cjs/data/transforms/correlation.d.ts +18 -15
  153. package/cjs/data/transforms/correlation.js +22 -17
  154. package/cjs/data/transforms/correlation.js.map +1 -1
  155. package/cjs/data/transforms/funnel.d.ts +10 -8
  156. package/cjs/data/transforms/funnel.js +4 -3
  157. package/cjs/data/transforms/funnel.js.map +1 -1
  158. package/cjs/data/transforms/lookup.d.ts +3 -3
  159. package/cjs/data/transforms/lookup.js +12 -7
  160. package/cjs/data/transforms/lookup.js.map +1 -1
  161. package/cjs/data/transforms/map.d.ts +8 -2
  162. package/cjs/data/transforms/map.js +9 -6
  163. package/cjs/data/transforms/map.js.map +1 -1
  164. package/cjs/data/transforms/sankey.d.ts +12 -4
  165. package/cjs/data/transforms/sankey.js +18 -13
  166. package/cjs/data/transforms/sankey.js.map +1 -1
  167. package/cjs/data/transforms/stack-split.d.ts +2 -1
  168. package/cjs/data/transforms/stack-split.js +1 -1
  169. package/cjs/data/transforms/stack-split.js.map +1 -1
  170. package/cjs/data/transforms/treemap.d.ts +5 -3
  171. package/cjs/data/transforms/treemap.js +7 -6
  172. package/cjs/data/transforms/treemap.js.map +1 -1
  173. package/cjs/data/transforms/venn.d.ts +4 -2
  174. package/cjs/data/transforms/venn.js +4 -4
  175. package/cjs/data/transforms/venn.js.map +1 -1
  176. package/cjs/data/transforms/waterfall.d.ts +4 -2
  177. package/cjs/data/transforms/waterfall.js +7 -7
  178. package/cjs/data/transforms/waterfall.js.map +1 -1
  179. package/cjs/event/event.d.ts +4 -0
  180. package/cjs/event/event.js +26 -7
  181. package/cjs/event/event.js.map +1 -1
  182. package/cjs/mark/base/base-mark.d.ts +12 -2
  183. package/cjs/mark/base/base-mark.js +86 -23
  184. package/cjs/mark/base/base-mark.js.map +1 -1
  185. package/cjs/mark/component.d.ts +9 -0
  186. package/cjs/mark/component.js +51 -3
  187. package/cjs/mark/component.js.map +1 -1
  188. package/cjs/mark/group.js +1 -1
  189. package/cjs/mark/group.js.map +1 -1
  190. package/cjs/mark/interface/mark.d.ts +2 -0
  191. package/cjs/mark/interface/mark.js.map +1 -1
  192. package/cjs/model/base-model.d.ts +3 -15
  193. package/cjs/model/base-model.js.map +1 -1
  194. package/cjs/model/interface.d.ts +13 -0
  195. package/cjs/model/interface.js.map +1 -1
  196. package/cjs/region/region.d.ts +1 -7
  197. package/cjs/scale/color-ordinal-scale.d.ts +1 -0
  198. package/cjs/scale/color-ordinal-scale.js +3 -0
  199. package/cjs/scale/color-ordinal-scale.js.map +1 -1
  200. package/cjs/scale/global-scale.js +9 -2
  201. package/cjs/scale/global-scale.js.map +1 -1
  202. package/cjs/series/area/area.d.ts +2 -0
  203. package/cjs/series/area/area.js +6 -0
  204. package/cjs/series/area/area.js.map +1 -1
  205. package/cjs/series/bar/bar.d.ts +3 -0
  206. package/cjs/series/bar/bar.js +30 -4
  207. package/cjs/series/bar/bar.js.map +1 -1
  208. package/cjs/series/base/base-series.d.ts +10 -7
  209. package/cjs/series/base/base-series.js +78 -18
  210. package/cjs/series/base/base-series.js.map +1 -1
  211. package/cjs/series/base/constant.d.ts +3 -0
  212. package/cjs/series/base/constant.js +9 -1
  213. package/cjs/series/base/constant.js.map +1 -1
  214. package/cjs/series/box-plot/box-plot.d.ts +2 -0
  215. package/cjs/series/box-plot/box-plot.js +16 -4
  216. package/cjs/series/box-plot/box-plot.js.map +1 -1
  217. package/cjs/series/correlation/correlation.js +13 -11
  218. package/cjs/series/correlation/correlation.js.map +1 -1
  219. package/cjs/series/dot/dot.d.ts +12 -0
  220. package/cjs/series/dot/dot.js +16 -1
  221. package/cjs/series/dot/dot.js.map +1 -1
  222. package/cjs/series/funnel/funnel.js +5 -8
  223. package/cjs/series/funnel/funnel.js.map +1 -1
  224. package/cjs/series/heatmap/heatmap.d.ts +2 -0
  225. package/cjs/series/heatmap/heatmap.js +10 -0
  226. package/cjs/series/heatmap/heatmap.js.map +1 -1
  227. package/cjs/series/line/line.d.ts +2 -0
  228. package/cjs/series/line/line.js +6 -0
  229. package/cjs/series/line/line.js.map +1 -1
  230. package/cjs/series/map/map.js +3 -3
  231. package/cjs/series/map/map.js.map +1 -1
  232. package/cjs/series/mixin/line-mixin.d.ts +1 -0
  233. package/cjs/series/mixin/line-mixin.js +6 -1
  234. package/cjs/series/mixin/line-mixin.js.map +1 -1
  235. package/cjs/series/pie/pie.d.ts +3 -7
  236. package/cjs/series/pie/pie.js +16 -1
  237. package/cjs/series/pie/pie.js.map +1 -1
  238. package/cjs/series/polar/progress-like/progress-like.d.ts +2 -0
  239. package/cjs/series/polar/progress-like/progress-like.js +16 -1
  240. package/cjs/series/polar/progress-like/progress-like.js.map +1 -1
  241. package/cjs/series/polar/rose-like/rose-like.d.ts +2 -0
  242. package/cjs/series/polar/rose-like/rose-like.js +15 -1
  243. package/cjs/series/polar/rose-like/rose-like.js.map +1 -1
  244. package/cjs/series/progress/circular/circular.d.ts +2 -0
  245. package/cjs/series/progress/circular/circular.js +10 -1
  246. package/cjs/series/progress/circular/circular.js.map +1 -1
  247. package/cjs/series/progress/linear/linear.d.ts +2 -0
  248. package/cjs/series/progress/linear/linear.js +19 -1
  249. package/cjs/series/progress/linear/linear.js.map +1 -1
  250. package/cjs/series/sankey/sankey.js +35 -33
  251. package/cjs/series/sankey/sankey.js.map +1 -1
  252. package/cjs/series/scatter/scatter.d.ts +2 -0
  253. package/cjs/series/scatter/scatter.js +9 -1
  254. package/cjs/series/scatter/scatter.js.map +1 -1
  255. package/cjs/series/treemap/treemap.js +23 -20
  256. package/cjs/series/treemap/treemap.js.map +1 -1
  257. package/cjs/series/venn/venn.js +2 -2
  258. package/cjs/series/venn/venn.js.map +1 -1
  259. package/cjs/series/waterfall/waterfall.d.ts +2 -0
  260. package/cjs/series/waterfall/waterfall.js +36 -20
  261. package/cjs/series/waterfall/waterfall.js.map +1 -1
  262. package/cjs/util/graphic-state.d.ts +1 -0
  263. package/cjs/util/graphic-state.js +19 -4
  264. package/cjs/util/graphic-state.js.map +1 -1
  265. package/esm/chart/base/base-chart-transformer.d.ts +3 -0
  266. package/esm/chart/base/base-chart-transformer.js +24 -2
  267. package/esm/chart/base/base-chart-transformer.js.map +1 -1
  268. package/esm/chart/base/base-chart.d.ts +25 -9
  269. package/esm/chart/base/base-chart.js +192 -26
  270. package/esm/chart/base/base-chart.js.map +1 -1
  271. package/esm/chart/gauge/gauge-transformer.js +3 -2
  272. package/esm/chart/gauge/gauge-transformer.js.map +1 -1
  273. package/esm/chart/index.js +1 -1
  274. package/esm/chart/interface/chart.d.ts +1 -0
  275. package/esm/chart/interface/chart.js.map +1 -1
  276. package/esm/chart/pie/base/pie-transformer.js +2 -2
  277. package/esm/chart/pie/base/pie-transformer.js.map +1 -1
  278. package/esm/chart/polar/polar-transformer.js +1 -1
  279. package/esm/chart/polar/polar-transformer.js.map +1 -1
  280. package/esm/chart/polar/progress-like/progress-like-transformer.js +1 -1
  281. package/esm/chart/polar/progress-like/progress-like-transformer.js.map +1 -1
  282. package/esm/chart/progress/circular/circular-progress-transformer.js +2 -1
  283. package/esm/chart/progress/circular/circular-progress-transformer.js.map +1 -1
  284. package/esm/chart/progress/linear/linear-progress-transformer.js +1 -1
  285. package/esm/chart/progress/linear/linear-progress-transformer.js.map +1 -1
  286. package/esm/chart/radar/radar-transformer.js +3 -2
  287. package/esm/chart/radar/radar-transformer.js.map +1 -1
  288. package/esm/chart/range-area/range-area-transformer.js +2 -2
  289. package/esm/chart/range-area/range-area-transformer.js.map +1 -1
  290. package/esm/chart/rose/rose-transformer.js +2 -1
  291. package/esm/chart/rose/rose-transformer.js.map +1 -1
  292. package/esm/chart/stack.js +1 -1
  293. package/esm/chart/util.d.ts +4 -1
  294. package/esm/chart/util.js +35 -2
  295. package/esm/chart/util.js.map +1 -1
  296. package/esm/chart/waterfall/waterfall-transformer.js +2 -1
  297. package/esm/chart/waterfall/waterfall-transformer.js.map +1 -1
  298. package/esm/compile/compiler.js +11 -9
  299. package/esm/compile/compiler.js.map +1 -1
  300. package/esm/compile/data/compilable-data.d.ts +1 -1
  301. package/esm/compile/data/compilable-data.js +1 -1
  302. package/esm/compile/data/compilable-data.js.map +1 -1
  303. package/esm/compile/grammar-item.d.ts +1 -1
  304. package/esm/compile/grammar-item.js.map +1 -1
  305. package/esm/compile/interface/compilable-item.d.ts +1 -1
  306. package/esm/compile/interface/compilable-item.js.map +1 -1
  307. package/esm/component/axis/base-axis.d.ts +2 -7
  308. package/esm/component/axis/base-axis.js +26 -5
  309. package/esm/component/axis/base-axis.js.map +1 -1
  310. package/esm/component/axis/cartesian/band-axis.d.ts +1 -7
  311. package/esm/component/axis/mixin/linear-axis-mixin.js +7 -10
  312. package/esm/component/axis/mixin/linear-axis-mixin.js.map +1 -1
  313. package/esm/component/axis/polar/band-axis.d.ts +2 -0
  314. package/esm/component/axis/polar/band-axis.js +3 -0
  315. package/esm/component/axis/polar/band-axis.js.map +1 -1
  316. package/esm/component/axis/polar/linear-axis.js +3 -0
  317. package/esm/component/axis/polar/linear-axis.js.map +1 -1
  318. package/esm/component/base/base-component.d.ts +7 -7
  319. package/esm/component/base/base-component.js +41 -5
  320. package/esm/component/base/base-component.js.map +1 -1
  321. package/esm/component/base/release-vrender-component.d.ts +10 -0
  322. package/esm/component/base/release-vrender-component.js +24 -0
  323. package/esm/component/base/release-vrender-component.js.map +1 -0
  324. package/esm/component/brush/brush.d.ts +3 -7
  325. package/esm/component/brush/brush.js +20 -4
  326. package/esm/component/brush/brush.js.map +1 -1
  327. package/esm/component/crosshair/base.d.ts +4 -7
  328. package/esm/component/crosshair/base.js +26 -2
  329. package/esm/component/crosshair/base.js.map +1 -1
  330. package/esm/component/custom-mark/custom-mark.d.ts +4 -7
  331. package/esm/component/custom-mark/custom-mark.js +27 -2
  332. package/esm/component/custom-mark/custom-mark.js.map +1 -1
  333. package/esm/component/data-zoom/data-filter-base-component.d.ts +3 -7
  334. package/esm/component/data-zoom/data-filter-base-component.js +14 -2
  335. package/esm/component/data-zoom/data-filter-base-component.js.map +1 -1
  336. package/esm/component/data-zoom/data-zoom/data-zoom.d.ts +1 -0
  337. package/esm/component/data-zoom/data-zoom/data-zoom.js +20 -0
  338. package/esm/component/data-zoom/data-zoom/data-zoom.js.map +1 -1
  339. package/esm/component/data-zoom/scroll-bar/scroll-bar.d.ts +1 -0
  340. package/esm/component/data-zoom/scroll-bar/scroll-bar.js +12 -1
  341. package/esm/component/data-zoom/scroll-bar/scroll-bar.js.map +1 -1
  342. package/esm/component/geo/geo-coordinate.d.ts +1 -7
  343. package/esm/component/index.js +1 -2
  344. package/esm/component/indicator/indicator.d.ts +1 -0
  345. package/esm/component/indicator/indicator.js +11 -2
  346. package/esm/component/indicator/indicator.js.map +1 -1
  347. package/esm/component/indicator/util.d.ts +4 -3
  348. package/esm/component/indicator/util.js +2 -2
  349. package/esm/component/indicator/util.js.map +1 -1
  350. package/esm/component/label/base-label.d.ts +1 -7
  351. package/esm/component/label/base-label.js +5 -1
  352. package/esm/component/label/base-label.js.map +1 -1
  353. package/esm/component/label/label.js +1 -1
  354. package/esm/component/label/label.js.map +1 -1
  355. package/esm/component/legend/base-legend.d.ts +2 -7
  356. package/esm/component/legend/base-legend.js +20 -2
  357. package/esm/component/legend/base-legend.js.map +1 -1
  358. package/esm/component/marker/base-marker.d.ts +14 -7
  359. package/esm/component/marker/base-marker.js +109 -11
  360. package/esm/component/marker/base-marker.js.map +1 -1
  361. package/esm/component/marker/mark-area/cartesian-mark-area.js +3 -3
  362. package/esm/component/marker/mark-area/cartesian-mark-area.js.map +1 -1
  363. package/esm/component/marker/mark-area/polar-mark-area.js +2 -2
  364. package/esm/component/marker/mark-area/polar-mark-area.js.map +1 -1
  365. package/esm/component/marker/mark-line/base-mark-line.js +2 -4
  366. package/esm/component/marker/mark-line/base-mark-line.js.map +1 -1
  367. package/esm/component/marker/mark-line/cartesian-mark-line.js +2 -2
  368. package/esm/component/marker/mark-line/cartesian-mark-line.js.map +1 -1
  369. package/esm/component/marker/mark-line/polar-mark-line.js +2 -2
  370. package/esm/component/marker/mark-line/polar-mark-line.js.map +1 -1
  371. package/esm/component/marker/mark-point/base-mark-point.js +19 -6
  372. package/esm/component/marker/mark-point/base-mark-point.js.map +1 -1
  373. package/esm/component/marker/mark-point/cartesian-mark-point.js +1 -1
  374. package/esm/component/marker/mark-point/cartesian-mark-point.js.map +1 -1
  375. package/esm/component/marker/mark-point/polar-mark-point.js +1 -1
  376. package/esm/component/marker/mark-point/polar-mark-point.js.map +1 -1
  377. package/esm/component/marker/utils.d.ts +4 -4
  378. package/esm/component/marker/utils.js +27 -23
  379. package/esm/component/marker/utils.js.map +1 -1
  380. package/esm/component/player/player.d.ts +1 -0
  381. package/esm/component/player/player.js +10 -0
  382. package/esm/component/player/player.js.map +1 -1
  383. package/esm/component/title/title.d.ts +1 -7
  384. package/esm/component/title/title.js +6 -2
  385. package/esm/component/title/title.js.map +1 -1
  386. package/esm/component/tooltip/tooltip.d.ts +1 -0
  387. package/esm/component/tooltip/tooltip.js +9 -1
  388. package/esm/component/tooltip/tooltip.js.map +1 -1
  389. package/esm/component/util.js +1 -1
  390. package/esm/constant/box-plot.js +2 -1
  391. package/esm/constant/scatter.js +1 -2
  392. package/esm/core/expression-function.js +2 -1
  393. package/esm/core/factory.js +1 -1
  394. package/esm/core/index.js +1 -1
  395. package/esm/core/instance-manager.js +1 -1
  396. package/esm/core/interface.js +1 -1
  397. package/esm/core/util.js +1 -1
  398. package/esm/core/vchart.d.ts +5 -1
  399. package/esm/core/vchart.js +31 -18
  400. package/esm/core/vchart.js.map +1 -1
  401. package/esm/data/data-view-utils.d.ts +5 -0
  402. package/esm/data/data-view-utils.js +46 -0
  403. package/esm/data/data-view-utils.js.map +1 -0
  404. package/esm/data/register.js +1 -1
  405. package/esm/data/transforms/box-plot.d.ts +4 -1
  406. package/esm/data/transforms/box-plot.js +4 -4
  407. package/esm/data/transforms/box-plot.js.map +1 -1
  408. package/esm/data/transforms/correlation-center.d.ts +11 -4
  409. package/esm/data/transforms/correlation-center.js +4 -2
  410. package/esm/data/transforms/correlation-center.js.map +1 -1
  411. package/esm/data/transforms/correlation.d.ts +18 -15
  412. package/esm/data/transforms/correlation.js +13 -8
  413. package/esm/data/transforms/correlation.js.map +1 -1
  414. package/esm/data/transforms/funnel.d.ts +10 -8
  415. package/esm/data/transforms/funnel.js +5 -3
  416. package/esm/data/transforms/funnel.js.map +1 -1
  417. package/esm/data/transforms/lookup.d.ts +3 -3
  418. package/esm/data/transforms/lookup.js +12 -6
  419. package/esm/data/transforms/lookup.js.map +1 -1
  420. package/esm/data/transforms/map.d.ts +8 -2
  421. package/esm/data/transforms/map.js +11 -6
  422. package/esm/data/transforms/map.js.map +1 -1
  423. package/esm/data/transforms/sankey.d.ts +12 -4
  424. package/esm/data/transforms/sankey.js +19 -14
  425. package/esm/data/transforms/sankey.js.map +1 -1
  426. package/esm/data/transforms/stack-split.d.ts +2 -1
  427. package/esm/data/transforms/stack-split.js +2 -2
  428. package/esm/data/transforms/stack-split.js.map +1 -1
  429. package/esm/data/transforms/treemap.d.ts +5 -3
  430. package/esm/data/transforms/treemap.js +8 -5
  431. package/esm/data/transforms/treemap.js.map +1 -1
  432. package/esm/data/transforms/venn.d.ts +4 -2
  433. package/esm/data/transforms/venn.js +5 -3
  434. package/esm/data/transforms/venn.js.map +1 -1
  435. package/esm/data/transforms/waterfall.d.ts +4 -2
  436. package/esm/data/transforms/waterfall.js +7 -8
  437. package/esm/data/transforms/waterfall.js.map +1 -1
  438. package/esm/event/event.d.ts +4 -0
  439. package/esm/event/event.js +26 -7
  440. package/esm/event/event.js.map +1 -1
  441. package/esm/mark/base/base-mark.d.ts +12 -2
  442. package/esm/mark/base/base-mark.js +86 -22
  443. package/esm/mark/base/base-mark.js.map +1 -1
  444. package/esm/mark/component.d.ts +9 -0
  445. package/esm/mark/component.js +51 -2
  446. package/esm/mark/component.js.map +1 -1
  447. package/esm/mark/group.js +1 -1
  448. package/esm/mark/group.js.map +1 -1
  449. package/esm/mark/interface/mark.d.ts +2 -0
  450. package/esm/mark/interface/mark.js.map +1 -1
  451. package/esm/model/base-model.d.ts +3 -15
  452. package/esm/model/base-model.js.map +1 -1
  453. package/esm/model/interface.d.ts +13 -0
  454. package/esm/model/interface.js.map +1 -1
  455. package/esm/region/region.d.ts +1 -7
  456. package/esm/scale/color-ordinal-scale.d.ts +1 -0
  457. package/esm/scale/color-ordinal-scale.js +3 -0
  458. package/esm/scale/color-ordinal-scale.js.map +1 -1
  459. package/esm/scale/global-scale.js +9 -1
  460. package/esm/scale/global-scale.js.map +1 -1
  461. package/esm/series/area/area.d.ts +2 -0
  462. package/esm/series/area/area.js +7 -1
  463. package/esm/series/area/area.js.map +1 -1
  464. package/esm/series/bar/bar.d.ts +3 -0
  465. package/esm/series/bar/bar.js +30 -4
  466. package/esm/series/bar/bar.js.map +1 -1
  467. package/esm/series/base/base-series.d.ts +10 -7
  468. package/esm/series/base/base-series.js +73 -16
  469. package/esm/series/base/base-series.js.map +1 -1
  470. package/esm/series/base/constant.d.ts +3 -0
  471. package/esm/series/base/constant.js +10 -0
  472. package/esm/series/base/constant.js.map +1 -1
  473. package/esm/series/box-plot/box-plot.d.ts +2 -0
  474. package/esm/series/box-plot/box-plot.js +15 -4
  475. package/esm/series/box-plot/box-plot.js.map +1 -1
  476. package/esm/series/correlation/correlation.js +13 -11
  477. package/esm/series/correlation/correlation.js.map +1 -1
  478. package/esm/series/dot/dot.d.ts +12 -0
  479. package/esm/series/dot/dot.js +17 -0
  480. package/esm/series/dot/dot.js.map +1 -1
  481. package/esm/series/funnel/funnel.js +5 -8
  482. package/esm/series/funnel/funnel.js.map +1 -1
  483. package/esm/series/heatmap/heatmap.d.ts +2 -0
  484. package/esm/series/heatmap/heatmap.js +10 -0
  485. package/esm/series/heatmap/heatmap.js.map +1 -1
  486. package/esm/series/line/line.d.ts +2 -0
  487. package/esm/series/line/line.js +7 -1
  488. package/esm/series/line/line.js.map +1 -1
  489. package/esm/series/map/map.js +3 -3
  490. package/esm/series/map/map.js.map +1 -1
  491. package/esm/series/mixin/line-mixin.d.ts +1 -0
  492. package/esm/series/mixin/line-mixin.js +5 -0
  493. package/esm/series/mixin/line-mixin.js.map +1 -1
  494. package/esm/series/pie/pie.d.ts +3 -7
  495. package/esm/series/pie/pie.js +17 -0
  496. package/esm/series/pie/pie.js.map +1 -1
  497. package/esm/series/polar/progress-like/progress-like.d.ts +2 -0
  498. package/esm/series/polar/progress-like/progress-like.js +17 -0
  499. package/esm/series/polar/progress-like/progress-like.js.map +1 -1
  500. package/esm/series/polar/rose-like/rose-like.d.ts +2 -0
  501. package/esm/series/polar/rose-like/rose-like.js +16 -0
  502. package/esm/series/polar/rose-like/rose-like.js.map +1 -1
  503. package/esm/series/progress/circular/circular.d.ts +2 -0
  504. package/esm/series/progress/circular/circular.js +11 -0
  505. package/esm/series/progress/circular/circular.js.map +1 -1
  506. package/esm/series/progress/linear/linear.d.ts +2 -0
  507. package/esm/series/progress/linear/linear.js +20 -0
  508. package/esm/series/progress/linear/linear.js.map +1 -1
  509. package/esm/series/sankey/sankey.js +35 -33
  510. package/esm/series/sankey/sankey.js.map +1 -1
  511. package/esm/series/scatter/scatter.d.ts +2 -0
  512. package/esm/series/scatter/scatter.js +10 -0
  513. package/esm/series/scatter/scatter.js.map +1 -1
  514. package/esm/series/treemap/treemap.js +23 -20
  515. package/esm/series/treemap/treemap.js.map +1 -1
  516. package/esm/series/venn/venn.js +2 -2
  517. package/esm/series/venn/venn.js.map +1 -1
  518. package/esm/series/waterfall/waterfall.d.ts +2 -0
  519. package/esm/series/waterfall/waterfall.js +36 -20
  520. package/esm/series/waterfall/waterfall.js.map +1 -1
  521. package/esm/util/graphic-state.d.ts +1 -0
  522. package/esm/util/graphic-state.js +16 -3
  523. package/esm/util/graphic-state.js.map +1 -1
  524. package/package.json +10 -9
@@ -31,21 +31,26 @@ const sankeyFormat = data => {
31
31
  exports.sankeyFormat = sankeyFormat;
32
32
 
33
33
  const sankeyLayout = (data, op) => {
34
- if (!data || !(null == op ? void 0 : op.view) || !data.length) return [];
35
- const view = op.view();
34
+ const options = (0, vutils_1.isFunction)(op) ? op() : op;
35
+ if (!data || !(null == options ? void 0 : options.view) || !data.length) return [];
36
+ const view = options.view();
36
37
  if (view.x1 - view.x0 == 0 || view.y1 - view.y0 == 0 || view.x1 - view.x0 == -1 / 0 || view.x1 - view.x0 == 1 / 0 || view.y1 - view.y0 == -1 / 0 || view.y1 - view.y0 == 1 / 0) return [];
37
- const originalData = data[0];
38
- if (("source" !== op.sourceField || "target" !== op.targetField || "value" !== op.valueField) && originalData.links) {
39
- const updatedData = [];
40
- originalData.links.forEach((datum => {
41
- const updatedDatum = {};
42
- for (const key in datum) key === op.sourceField ? updatedDatum.source = datum[op.sourceField] : key === op.targetField ? updatedDatum.target = datum[op.targetField] : key === op.valueField ? updatedDatum.value = datum[op.valueField] : updatedDatum[key] = datum[key];
43
- updatedData.push(updatedDatum);
44
- })), originalData.links = updatedData;
45
- }
46
- const layout = new vlayouts_1.SankeyLayout(op), result = [];
47
- return result.push(layout.layout(originalData, view)), result;
38
+ const originalData = data[0], layoutData = normalizeSankeyData(originalData, options), layout = new vlayouts_1.SankeyLayout(options), result = [];
39
+ return result.push(layout.layout(layoutData, view)), result;
48
40
  };
49
41
 
50
42
  exports.sankeyLayout = sankeyLayout;
43
+
44
+ const normalizeSankeyData = (data, options) => {
45
+ if ("source" === options.sourceField && "target" === options.targetField && "value" === options.valueField) return data;
46
+ const links = data.links;
47
+ return links ? Object.assign(Object.assign({}, data), {
48
+ links: links.map((link => {
49
+ const updatedLink = {};
50
+ return Object.keys(link).forEach((key => {
51
+ key === options.sourceField ? updatedLink.source = link[options.sourceField] : key === options.targetField ? updatedLink.target = link[options.targetField] : key === options.valueField ? updatedLink.value = link[options.valueField] : updatedLink[key] = link[key];
52
+ })), updatedLink;
53
+ }))
54
+ }) : data;
55
+ };
51
56
  //# sourceMappingURL=sankey.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/data/transforms/sankey.ts"],"names":[],"mappings":"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","file":"sankey.js","sourcesContent":["import type { SankeyOptions, SankeyData } from '@visactor/vlayouts';\nimport { SankeyLayout } from '@visactor/vlayouts';\nimport { isArray, isNil } from '@visactor/vutils';\n\nexport interface ISankeyOpt extends SankeyOptions {\n targetField: string;\n sourceField: string;\n valueField: string;\n view: () => { x0: number; x1: number; y0: number; y1: number };\n}\n\nexport const collectHierarchyField = (set: Set<any>, data: any[], field: string) => {\n data.forEach((obj: any) => {\n if (!isNil(obj[field])) {\n set.add(obj[field]);\n }\n\n if (obj.children && obj.children.length > 0) {\n collectHierarchyField(set, obj.children, field); // 递归处理子节点\n }\n });\n};\n\nexport const sankeyFormat = (data: any[]): SankeyData[] => {\n if (!data || !isArray(data)) {\n return [] as SankeyData[];\n }\n\n if (data.length > 1) {\n /**\n * data structure for Fengshen:\n * [{id:’nodes’, values:[xxx]},{id:’links’, values:[xxx]}]\n */\n const updateData: SankeyData = {\n links: [],\n nodes: []\n };\n data.forEach((datum: any) => {\n if (datum.id === 'links' || datum.id === 'nodes') {\n updateData[datum.id] = datum.values;\n }\n });\n return [updateData];\n }\n /**\n * data structure:\n * [{nodes: [xxx], links: [xxx]}]\n */\n if (data[0]?.latestData) {\n return data[0].latestData;\n }\n return data;\n};\n\nexport const sankeyLayout = (data: SankeyData[], op: ISankeyOpt) => {\n if (!data || !op?.view || !data.length) {\n return [];\n }\n\n const view = op.view();\n\n if (\n view.x1 - view.x0 === 0 ||\n view.y1 - view.y0 === 0 ||\n view.x1 - view.x0 === -Infinity ||\n view.x1 - view.x0 === Infinity ||\n view.y1 - view.y0 === -Infinity ||\n view.y1 - view.y0 === Infinity\n ) {\n return [];\n }\n\n const originalData = data[0];\n\n if (op.sourceField !== 'source' || op.targetField !== 'target' || op.valueField !== 'value') {\n if ((originalData as any).links) {\n const updatedData: {}[] = [];\n\n (originalData as any).links.forEach((datum: any) => {\n const updatedDatum: any = {};\n for (const key in datum) {\n if (key === op.sourceField) {\n updatedDatum.source = datum[op.sourceField];\n } else if (key === op.targetField) {\n updatedDatum.target = datum[op.targetField];\n } else if (key === op.valueField) {\n updatedDatum.value = datum[op.valueField];\n } else {\n updatedDatum[key] = datum[key];\n }\n }\n updatedData.push(updatedDatum);\n });\n (originalData as any).links = updatedData;\n }\n }\n\n const layout = new SankeyLayout(op);\n\n const result = [];\n\n result.push(layout.layout(originalData, view));\n\n return result;\n};\n"]}
1
+ {"version":3,"sources":["../src/data/transforms/sankey.ts"],"names":[],"mappings":"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","file":"sankey.js","sourcesContent":["import { SankeyLayout, type SankeyOptions, type SankeyData } from '@visactor/vlayouts';\nimport { isArray, isFunction, isNil } from '@visactor/vutils';\n\nexport interface ISankeyOpt extends SankeyOptions {\n targetField: string;\n sourceField: string;\n valueField: string;\n view: () => { x0: number; x1: number; y0: number; y1: number };\n}\n\ntype SankeyLayoutOption = ISankeyOpt | (() => ISankeyOpt);\ntype SankeyFormatDatum = Record<string, unknown> & {\n id?: 'links' | 'nodes';\n values?: unknown;\n latestData?: SankeyData[];\n children?: SankeyFormatDatum[];\n};\n\nexport const collectHierarchyField = <T>(set: Set<T>, data: SankeyFormatDatum[], field: string) => {\n data.forEach(obj => {\n if (!isNil(obj[field])) {\n set.add(obj[field] as T);\n }\n\n if (obj.children && obj.children.length > 0) {\n collectHierarchyField(set, obj.children, field); // 递归处理子节点\n }\n });\n};\n\nexport const sankeyFormat = (data: SankeyFormatDatum[]): SankeyData[] => {\n if (!data || !isArray(data)) {\n return [] as SankeyData[];\n }\n\n if (data.length > 1) {\n /**\n * data structure for Fengshen:\n * [{id:’nodes’, values:[xxx]},{id:’links’, values:[xxx]}]\n */\n const updateData: SankeyData = {\n links: [],\n nodes: []\n };\n data.forEach(datum => {\n if (datum.id === 'links' || datum.id === 'nodes') {\n (updateData as Record<string, unknown>)[datum.id] = datum.values;\n }\n });\n return [updateData];\n }\n /**\n * data structure:\n * [{nodes: [xxx], links: [xxx]}]\n */\n if (data[0]?.latestData) {\n return data[0].latestData;\n }\n return data as unknown as SankeyData[];\n};\n\nexport const sankeyLayout = (data: SankeyData[], op: SankeyLayoutOption) => {\n const options = isFunction(op) ? op() : op;\n if (!data || !options?.view || !data.length) {\n return [];\n }\n\n const view = options.view();\n\n if (\n view.x1 - view.x0 === 0 ||\n view.y1 - view.y0 === 0 ||\n view.x1 - view.x0 === -Infinity ||\n view.x1 - view.x0 === Infinity ||\n view.y1 - view.y0 === -Infinity ||\n view.y1 - view.y0 === Infinity\n ) {\n return [];\n }\n\n const originalData = data[0];\n const layoutData = normalizeSankeyData(originalData, options);\n\n const layout = new SankeyLayout(options);\n\n const result = [];\n\n result.push(layout.layout(layoutData, view));\n\n return result;\n};\n\nconst normalizeSankeyData = (data: SankeyData, options: ISankeyOpt): SankeyData => {\n if (\n options.sourceField === 'source' &&\n options.targetField === 'target' &&\n options.valueField === 'value'\n ) {\n return data;\n }\n\n const links = (data as { links?: Array<Record<string, unknown>> }).links;\n if (!links) {\n return data;\n }\n\n return {\n ...data,\n links: links.map(link => {\n const updatedLink: Record<string, unknown> = {};\n Object.keys(link).forEach(key => {\n if (key === options.sourceField) {\n updatedLink.source = link[options.sourceField];\n } else if (key === options.targetField) {\n updatedLink.target = link[options.targetField];\n } else if (key === options.valueField) {\n updatedLink.value = link[options.valueField];\n } else {\n updatedLink[key] = link[key];\n }\n });\n return updatedLink;\n })\n } as unknown as SankeyData;\n};\n"]}
@@ -3,4 +3,5 @@ import type { DataView } from '@visactor/vdataset';
3
3
  export interface IStackOption {
4
4
  fields: string[];
5
5
  }
6
- export declare const stackSplit: (data: Array<DataView>, op: IStackOption) => ISeriesStackDataNode;
6
+ export type StackOption = IStackOption | (() => IStackOption);
7
+ export declare const stackSplit: (data: Array<DataView>, op: StackOption) => ISeriesStackDataNode;
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  const vutils_1 = require("@visactor/vutils"), stackSplit = (data, op) => {
8
8
  const result = {
9
9
  nodes: {}
10
- }, {fields: fields} = op;
10
+ }, {fields: fields} = (0, vutils_1.isFunction)(op) ? op() : op;
11
11
  if (!(null == fields ? void 0 : fields.length)) return result;
12
12
  const lastFieldIndex = fields.length - 1;
13
13
  let nextNode, leaf, temp = result;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/data/transforms/stack-split.ts"],"names":[],"mappings":";;;AACA,6CAAyC;AAQlC,MAAM,UAAU,GAAG,CAAC,IAAqB,EAAE,EAAgB,EAAE,EAAE;IACpE,MAAM,MAAM,GAAqB;QAC/B,KAAK,EAAE,EAAE;KACV,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACtB,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAA,EAAE;QACnB,OAAO,MAAM,CAAC;KACf;IACD,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IACzC,IAAI,IAAI,GAAyB,MAAM,CAAC;IACxC,IAAI,QAA8B,CAAC;IACnC,IAAI,IAA0B,CAAC;IAC/B,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;QAChB,EAAE,CAAC,UAAU;YACX,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAQ,EAAE,EAAE;gBACjC,IAAI,GAAG,MAAM,CAAC;gBACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACtC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBACpB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAChB,IAAI,IAAA,cAAK,EAAC,EAAE,CAAC,EAAE;wBACb,MAAM;qBACP;oBACD,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;oBACpB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;wBACnB,IAAI,CAAC,KAAK,cAAc,EAAE;4BACxB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;yBACjC;6BAAM;4BACL,QAAQ,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;4BACzB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;yBAC3B;qBACF;oBACD,IAAI,CAAC,KAAK,cAAc,EAAE;wBACxB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAyB,CAAC;wBAC9C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACrB;yBAAM;wBACL,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAyB,CAAC;qBAC/C;iBACF;YACH,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAzCW,QAAA,UAAU,cAyCrB","file":"stack-split.js","sourcesContent":["import type { ISeriesStackData, ISeriesStackDataLeaf, ISeriesStackDataNode } from '../../series/interface';\nimport { isNil } from '@visactor/vutils';\nimport type { DataView } from '@visactor/vdataset';\nimport type { Datum } from '../../typings';\n\nexport interface IStackOption {\n fields: string[];\n}\n\nexport const stackSplit = (data: Array<DataView>, op: IStackOption) => {\n const result: ISeriesStackData = {\n nodes: {}\n };\n const { fields } = op;\n if (!fields?.length) {\n return result;\n }\n const lastFieldIndex = fields.length - 1;\n let temp: ISeriesStackDataNode = result;\n let nextNode: ISeriesStackDataNode;\n let leaf: ISeriesStackDataLeaf;\n data.forEach(dv => {\n dv.latestData &&\n dv.latestData.forEach((d: Datum) => {\n temp = result;\n for (let i = 0; i < fields.length; i++) {\n const f = fields[i];\n const fV = d[f];\n if (isNil(fV)) {\n break;\n }\n temp.groupField = f;\n if (!temp.nodes[fV]) {\n if (i === lastFieldIndex) {\n temp.nodes[fV] = { values: [] };\n } else {\n nextNode = { nodes: {} };\n temp.nodes[fV] = nextNode;\n }\n }\n if (i === lastFieldIndex) {\n leaf = temp.nodes[fV] as ISeriesStackDataLeaf;\n leaf.values.push(d);\n } else {\n temp = temp.nodes[fV] as ISeriesStackDataNode;\n }\n }\n });\n });\n return result;\n};\n"]}
1
+ {"version":3,"sources":["../src/data/transforms/stack-split.ts"],"names":[],"mappings":";;;AACA,6CAAqD;AAU9C,MAAM,UAAU,GAAG,CAAC,IAAqB,EAAE,EAAe,EAAE,EAAE;IACnE,MAAM,MAAM,GAAqB;QAC/B,KAAK,EAAE,EAAE;KACV,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,mBAAU,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAA,EAAE;QACnB,OAAO,MAAM,CAAC;KACf;IACD,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IACzC,IAAI,IAAI,GAAyB,MAAM,CAAC;IACxC,IAAI,QAA8B,CAAC;IACnC,IAAI,IAA0B,CAAC;IAC/B,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;QAChB,EAAE,CAAC,UAAU;YACX,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAQ,EAAE,EAAE;gBACjC,IAAI,GAAG,MAAM,CAAC;gBACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACtC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBACpB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAChB,IAAI,IAAA,cAAK,EAAC,EAAE,CAAC,EAAE;wBACb,MAAM;qBACP;oBACD,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;oBACpB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;wBACnB,IAAI,CAAC,KAAK,cAAc,EAAE;4BACxB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;yBACjC;6BAAM;4BACL,QAAQ,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;4BACzB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;yBAC3B;qBACF;oBACD,IAAI,CAAC,KAAK,cAAc,EAAE;wBACxB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAyB,CAAC;wBAC9C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACrB;yBAAM;wBACL,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAyB,CAAC;qBAC/C;iBACF;YACH,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAzCW,QAAA,UAAU,cAyCrB","file":"stack-split.js","sourcesContent":["import type { ISeriesStackData, ISeriesStackDataLeaf, ISeriesStackDataNode } from '../../series/interface';\nimport { isFunction, isNil } from '@visactor/vutils';\nimport type { DataView } from '@visactor/vdataset';\nimport type { Datum } from '../../typings';\n\nexport interface IStackOption {\n fields: string[];\n}\n\nexport type StackOption = IStackOption | (() => IStackOption);\n\nexport const stackSplit = (data: Array<DataView>, op: StackOption) => {\n const result: ISeriesStackData = {\n nodes: {}\n };\n const { fields } = isFunction(op) ? op() : op;\n if (!fields?.length) {\n return result;\n }\n const lastFieldIndex = fields.length - 1;\n let temp: ISeriesStackDataNode = result;\n let nextNode: ISeriesStackDataNode;\n let leaf: ISeriesStackDataLeaf;\n data.forEach(dv => {\n dv.latestData &&\n dv.latestData.forEach((d: Datum) => {\n temp = result;\n for (let i = 0; i < fields.length; i++) {\n const f = fields[i];\n const fV = d[f];\n if (isNil(fV)) {\n break;\n }\n temp.groupField = f;\n if (!temp.nodes[fV]) {\n if (i === lastFieldIndex) {\n temp.nodes[fV] = { values: [] };\n } else {\n nextNode = { nodes: {} };\n temp.nodes[fV] = nextNode;\n }\n }\n if (i === lastFieldIndex) {\n leaf = temp.nodes[fV] as ISeriesStackDataLeaf;\n leaf.values.push(d);\n } else {\n temp = temp.nodes[fV] as ISeriesStackDataNode;\n }\n }\n });\n });\n return result;\n};\n"]}
@@ -1,5 +1,5 @@
1
- import type { TreemapNodeElement, TreemapOptions } from '@visactor/vlayouts';
2
- export declare const treemapLayout: (data: Array<any>, op: TreemapOptions & {
1
+ import { type TreemapNodeElement, type TreemapOptions } from '@visactor/vlayouts';
2
+ interface ITreemapLayoutOptions extends TreemapOptions {
3
3
  getViewBox: () => {
4
4
  x0: number;
5
5
  x1: number;
@@ -7,4 +7,6 @@ export declare const treemapLayout: (data: Array<any>, op: TreemapOptions & {
7
7
  y1: number;
8
8
  };
9
9
  nameField: string;
10
- }) => TreemapNodeElement[];
10
+ }
11
+ export declare const treemapLayout: (data: Array<Record<string, unknown>>, op: ITreemapLayoutOptions | (() => ITreemapLayoutOptions)) => TreemapNodeElement[];
12
+ export {};
@@ -4,14 +4,15 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  }), exports.treemapLayout = void 0;
6
6
 
7
- const vlayouts_1 = require("@visactor/vlayouts"), hierarchy_1 = require("../../constant/hierarchy"), treemapLayout = (data, op) => {
8
- if (op.getViewBox()) {
9
- const res = new vlayouts_1.TreemapLayout(op).layout(data, op.getViewBox()), nodes = [];
7
+ const vlayouts_1 = require("@visactor/vlayouts"), vutils_1 = require("@visactor/vutils"), hierarchy_1 = require("../../constant/hierarchy"), treemapLayout = (data, op) => {
8
+ const options = (0, vutils_1.isFunction)(op) ? op() : op, viewBox = options.getViewBox();
9
+ if (viewBox) {
10
+ const res = new vlayouts_1.TreemapLayout(options).layout(data, viewBox), nodes = [];
10
11
  return (0, vlayouts_1.flattenNodes)(res, nodes, {
11
- maxDepth: null == op ? void 0 : op.maxDepth
12
- }), nodes.forEach(((datum, i) => {
12
+ maxDepth: null == options ? void 0 : options.maxDepth
13
+ }), nodes.forEach((datum => {
13
14
  datum && [ hierarchy_1.DEFAULT_HIERARCHY_ROOT, "name" ].forEach((key => {
14
- datum[key] = datum.datum[datum.depth][op.nameField];
15
+ datum[key] = datum.datum[datum.depth][options.nameField];
15
16
  }));
16
17
  })), nodes;
17
18
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/data/transforms/treemap.ts"],"names":[],"mappings":";;;AACA,iDAAiE;AACjE,wDAAkE;AAE3D,MAAM,aAAa,GAAG,CAC3B,IAAgB,EAChB,EAQC,EACD,EAAE;IACF,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAEhC,IAAI,OAAO,EAAE;QACX,MAAM,MAAM,GAAG,IAAI,wBAAa,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;QAEjD,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,IAAA,uBAAY,EAAC,GAAG,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,QAAQ,EAAE,CAAC,CAAC;QAErD,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACzB,IAAI,KAAK,EAAE;gBACT,CAAC,kCAAsB,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBAC5C,KAAa,CAAC,GAAG,CAAC,GAAI,KAAa,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;gBACxE,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;KACd;IAED,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAjCW,QAAA,aAAa,iBAiCxB","file":"treemap.js","sourcesContent":["import type { TreemapNodeElement, TreemapOptions } from '@visactor/vlayouts';\nimport { flattenNodes, TreemapLayout } from '@visactor/vlayouts';\nimport { DEFAULT_HIERARCHY_ROOT } from '../../constant/hierarchy';\n\nexport const treemapLayout = (\n data: Array<any>,\n op: TreemapOptions & {\n getViewBox: () => {\n x0: number;\n x1: number;\n y0: number;\n y1: number;\n };\n nameField: string;\n }\n) => {\n const viewBox = op.getViewBox();\n\n if (viewBox) {\n const layout = new TreemapLayout(op);\n const res = layout.layout(data, op.getViewBox());\n\n const nodes: TreemapNodeElement[] = [];\n flattenNodes(res, nodes, { maxDepth: op?.maxDepth });\n\n nodes.forEach((datum, i) => {\n if (datum) {\n [DEFAULT_HIERARCHY_ROOT, 'name'].forEach(key => {\n (datum as any)[key] = (datum as any).datum[datum.depth][op.nameField];\n });\n }\n });\n\n return nodes;\n }\n\n return [];\n};\n"]}
1
+ {"version":3,"sources":["../src/data/transforms/treemap.ts"],"names":[],"mappings":";;;AAAA,iDAA+G;AAC/G,6CAA8C;AAC9C,wDAAkE;AAY3D,MAAM,aAAa,GAAG,CAC3B,IAAoC,EACpC,EAAyD,EACzD,EAAE;IACF,MAAM,OAAO,GAAG,IAAA,mBAAU,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAErC,IAAI,OAAO,EAAE;QACX,MAAM,MAAM,GAAG,IAAI,wBAAa,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEzC,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,IAAA,uBAAY,EAAC,GAAG,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,EAAE,CAAC,CAAC;QAE1D,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACpB,IAAI,KAAK,EAAE;gBACT,CAAC,kCAAsB,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBAC5C,KAA4C,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACnG,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;KACd;IAED,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AA1BW,QAAA,aAAa,iBA0BxB","file":"treemap.js","sourcesContent":["import { flattenNodes, TreemapLayout, type TreemapNodeElement, type TreemapOptions } from '@visactor/vlayouts';\nimport { isFunction } from '@visactor/vutils';\nimport { DEFAULT_HIERARCHY_ROOT } from '../../constant/hierarchy';\n\ninterface ITreemapLayoutOptions extends TreemapOptions {\n getViewBox: () => {\n x0: number;\n x1: number;\n y0: number;\n y1: number;\n };\n nameField: string;\n}\n\nexport const treemapLayout = (\n data: Array<Record<string, unknown>>,\n op: ITreemapLayoutOptions | (() => ITreemapLayoutOptions)\n) => {\n const options = isFunction(op) ? op() : op;\n const viewBox = options.getViewBox();\n\n if (viewBox) {\n const layout = new TreemapLayout(options);\n const res = layout.layout(data, viewBox);\n\n const nodes: TreemapNodeElement[] = [];\n flattenNodes(res, nodes, { maxDepth: options?.maxDepth });\n\n nodes.forEach(datum => {\n if (datum) {\n [DEFAULT_HIERARCHY_ROOT, 'name'].forEach(key => {\n (datum as unknown as Record<string, unknown>)[key] = datum.datum[datum.depth][options.nameField];\n });\n }\n });\n\n return nodes;\n }\n\n return [];\n};\n"]}
@@ -1,4 +1,4 @@
1
- export declare const vennLayout: (data: Array<any>, op: {
1
+ interface IVennLayoutOptions {
2
2
  setField: string;
3
3
  valueField: string;
4
4
  getViewBox: () => {
@@ -7,4 +7,6 @@ export declare const vennLayout: (data: Array<any>, op: {
7
7
  y0: number;
8
8
  y1: number;
9
9
  };
10
- }) => (import("@visactor/vlayouts").IVennCircleDatum<any> | import("@visactor/vlayouts").IVennOverlapDatum<any>)[];
10
+ }
11
+ export declare const vennLayout: (data: Array<Record<string, unknown>>, op: IVennLayoutOptions | (() => IVennLayoutOptions)) => (import("@visactor/vlayouts").IVennCircleDatum<any> | import("@visactor/vlayouts").IVennOverlapDatum<any>)[];
12
+ export {};
@@ -4,11 +4,11 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  }), exports.vennLayout = void 0;
6
6
 
7
- const vlayouts_1 = require("@visactor/vlayouts"), vennLayout = (data, op) => {
8
- const viewBox = op.getViewBox();
7
+ const vlayouts_1 = require("@visactor/vlayouts"), vutils_1 = require("@visactor/vutils"), vennLayout = (data, op) => {
8
+ const options = (0, vutils_1.isFunction)(op) ? op() : op, viewBox = options.getViewBox();
9
9
  return viewBox && (null == data ? void 0 : data.length) ? (0, vlayouts_1.vennTransform)(Object.assign({
10
- setField: op.setField,
11
- valueField: op.valueField
10
+ setField: options.setField,
11
+ valueField: options.valueField
12
12
  }, viewBox), data) : [];
13
13
  };
14
14
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/data/transforms/venn.ts"],"names":[],"mappings":";;;AAAA,iDAAmD;AAE5C,MAAM,UAAU,GAAG,CACxB,IAAgB,EAChB,EASC,EACD,EAAE;IACF,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAEhC,IAAI,OAAO,KAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAA,EAAE;QAC3B,OAAO,IAAA,wBAAa,kBAEhB,QAAQ,EAAE,EAAE,CAAC,QAAQ,EACrB,UAAU,EAAE,EAAE,CAAC,UAAU,IACtB,OAAO,GAEZ,IAAI,CACL,CAAC;KACH;IAED,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AA3BW,QAAA,UAAU,cA2BrB","file":"venn.js","sourcesContent":["import { vennTransform } from '@visactor/vlayouts';\n\nexport const vennLayout = (\n data: Array<any>,\n op: {\n setField: string;\n valueField: string;\n getViewBox: () => {\n x0: number;\n x1: number;\n y0: number;\n y1: number;\n };\n }\n) => {\n const viewBox = op.getViewBox();\n\n if (viewBox && data?.length) {\n return vennTransform(\n {\n setField: op.setField,\n valueField: op.valueField,\n ...viewBox\n },\n data\n );\n }\n\n return [];\n};\n"]}
1
+ {"version":3,"sources":["../src/data/transforms/venn.ts"],"names":[],"mappings":";;;AAAA,iDAAmD;AACnD,6CAA8C;AAavC,MAAM,UAAU,GAAG,CACxB,IAAoC,EACpC,EAAmD,EACnD,EAAE;IACF,MAAM,OAAO,GAAG,IAAA,mBAAU,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAErC,IAAI,OAAO,KAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAA,EAAE;QAC3B,OAAO,IAAA,wBAAa,kBAEhB,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAC1B,UAAU,EAAE,OAAO,CAAC,UAAU,IAC3B,OAAO,GAEZ,IAAI,CACL,CAAC;KACH;IAED,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAnBW,QAAA,UAAU,cAmBrB","file":"venn.js","sourcesContent":["import { vennTransform } from '@visactor/vlayouts';\nimport { isFunction } from '@visactor/vutils';\n\ninterface IVennLayoutOptions {\n setField: string;\n valueField: string;\n getViewBox: () => {\n x0: number;\n x1: number;\n y0: number;\n y1: number;\n };\n}\n\nexport const vennLayout = (\n data: Array<Record<string, unknown>>,\n op: IVennLayoutOptions | (() => IVennLayoutOptions)\n) => {\n const options = isFunction(op) ? op() : op;\n const viewBox = options.getViewBox();\n\n if (viewBox && data?.length) {\n return vennTransform(\n {\n setField: options.setField,\n valueField: options.valueField,\n ...viewBox\n },\n data\n );\n }\n\n return [];\n};\n"]}
@@ -17,7 +17,8 @@ export interface IWaterfallOpt {
17
17
  stackInverse: boolean;
18
18
  groupData: () => DataView;
19
19
  }
20
- export declare const waterfall: (lastData: Array<Datum>, op: IWaterfallOpt) => Datum[];
20
+ export type WaterfallOption = IWaterfallOpt | (() => IWaterfallOpt);
21
+ export declare const waterfall: (lastData: Array<Datum>, op: WaterfallOption) => Datum[];
21
22
  export interface IWaterfallFillEndOpt {
22
23
  indexField: string;
23
24
  valueField: string;
@@ -25,4 +26,5 @@ export interface IWaterfallFillEndOpt {
25
26
  total: IWaterfallSeriesSpec['total'];
26
27
  calculationMode: IWaterfallSeriesSpec['calculationMode'];
27
28
  }
28
- export declare const waterfallFillTotal: (data: Array<Datum>, op: IWaterfallFillEndOpt) => Datum[];
29
+ export type WaterfallFillEndOption = IWaterfallFillEndOpt | (() => IWaterfallFillEndOpt);
30
+ export declare const waterfallFillTotal: (data: Array<Datum>, op: WaterfallFillEndOption) => Datum[];
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
 
7
7
  const vutils_1 = require("@visactor/vutils"), waterfall_1 = require("../../constant/waterfall"), debug_1 = require("../../util/debug"), data_1 = require("../../constant/data"), waterfall = (lastData, op) => {
8
8
  if (!lastData || 0 === lastData.length) return lastData;
9
- const {indexField: indexField, total: totalSpec, groupData: groupData, calculationMode: calculationMode} = op, totalData = [], {dimensionValues: dimensionValues, dimensionData: dimensionData} = groupData().latestData;
9
+ const options = (0, vutils_1.isFunction)(op) ? op() : op, {indexField: indexField, total: totalSpec, groupData: groupData, calculationMode: calculationMode} = options, totalData = [], {dimensionValues: dimensionValues, dimensionData: dimensionData} = groupData().latestData;
10
10
  let indexValues = Array.from(dimensionValues[indexField]);
11
11
  "decrease" === calculationMode && (indexValues = indexValues.reverse());
12
12
  let temp = {
@@ -26,7 +26,7 @@ const vutils_1 = require("@visactor/vutils"), waterfall_1 = require("../../const
26
26
  isTotal: !1,
27
27
  positive: temp.end,
28
28
  negative: temp.end
29
- }, indexData = !0 === op.stackInverse ? dimensionData[key].reverse() : dimensionData[key];
29
+ }, indexData = !0 === options.stackInverse ? dimensionData[key].reverse() : dimensionData[key];
30
30
  if (null == indexData || indexData.forEach(((d, i) => {
31
31
  i === indexData.length - 1 ? d[data_1.STACK_FIELD_TOTAL_TOP] = !0 : delete d[data_1.STACK_FIELD_TOTAL_TOP];
32
32
  })), indexData.length > 1) {
@@ -38,10 +38,10 @@ const vutils_1 = require("@visactor/vutils"), waterfall_1 = require("../../const
38
38
  } else if (index === indexValues.length - 1) return !0;
39
39
  return !1;
40
40
  };
41
- if (indexData.some((d => isTotalCheck(d)))) return temp = computeTotalWithMultipleData(indexData, key, total, totalData, temp, indexValues, index, op, isTotalCheck),
41
+ if (indexData.some((d => isTotalCheck(d)))) return temp = computeTotalWithMultipleData(indexData, key, total, totalData, temp, indexValues, index, options, isTotalCheck),
42
42
  void totalData.push(total);
43
43
  }
44
- temp = computeNormalData(indexData, key, total, totalData, temp, indexValues, index, op),
44
+ temp = computeNormalData(indexData, key, total, totalData, temp, indexValues, index, options),
45
45
  totalData.push(total);
46
46
  })), totalData;
47
47
  };
@@ -157,12 +157,12 @@ exports.waterfall = waterfall;
157
157
 
158
158
  const waterfallFillTotal = (data, op) => {
159
159
  if (!data) return data;
160
- const {indexField: indexField, valueField: valueField, total: total, seriesField: seriesField, calculationMode: calculationMode} = op, totalData = {
160
+ const {indexField: indexField, valueField: valueField, total: total, seriesField: seriesField, calculationMode: calculationMode} = (0,
161
+ vutils_1.isFunction)(op) ? op() : op, totalData = {
161
162
  [indexField]: (null == total ? void 0 : total.text) || "total",
162
163
  [valueField]: data.reduce(((pre, cur) => (0, vutils_1.precisionAdd)(pre, +cur[valueField])), 0)
163
164
  };
164
- return seriesField && (totalData[seriesField] = "total"), "decrease" === calculationMode ? data.unshift(totalData) : data.push(totalData),
165
- data;
165
+ return seriesField && (totalData[seriesField] = "total"), "decrease" === calculationMode ? [ totalData, ...data ] : [ ...data, totalData ];
166
166
  };
167
167
 
168
168
  exports.waterfallFillTotal = waterfallFillTotal;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/data/transforms/waterfall.ts"],"names":[],"mappings":"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","file":"waterfall.js","sourcesContent":["import { isNil, precisionAdd, precisionSub } from '@visactor/vutils';\n\nimport type { DataView } from '@visactor/vdataset';\nimport type {\n IWaterfallSeriesSpec,\n IWaterfallTotalCustom,\n IWaterfallTotalField\n} from '../../series/waterfall/interface';\nimport type { Datum } from '../../typings';\nimport { WaterfallDefaultSeriesField } from '../../constant/waterfall';\nimport { warn } from '../../util/debug';\nimport { STACK_FIELD_TOTAL_TOP } from '../../constant/data';\n\ntype TotalInfo = {\n start: number;\n end: number;\n lastIndex: string;\n lastEnd: number;\n index: string;\n isTotal: boolean;\n positive: number;\n negative: number;\n};\n\nexport interface IWaterfallOpt {\n indexField: string;\n valueField: string;\n seriesField?: string;\n startAs: string;\n endAs: string;\n total: IWaterfallSeriesSpec['total'];\n calculationMode: 'increase' | 'decrease';\n\n seriesFieldName: {\n total: string;\n increase: string;\n decrease: string;\n };\n stackInverse: boolean;\n groupData: () => DataView;\n}\n\nexport const waterfall = (lastData: Array<Datum>, op: IWaterfallOpt) => {\n if (!lastData || lastData.length === 0) {\n return lastData;\n }\n const { indexField, total: totalSpec, groupData, calculationMode } = op;\n const totalData: {\n start: number;\n end: number;\n lastIndex: string;\n lastEnd: number;\n index: string;\n isTotal: boolean;\n positive: number;\n negative: number;\n }[] = [];\n const { dimensionValues, dimensionData } = groupData().latestData as {\n dimensionValues: { [key in string]: Set<string> };\n dimensionData: { [key in string]: Datum[] };\n };\n let indexValues = Array.from(dimensionValues[indexField]);\n if (calculationMode === 'decrease') {\n indexValues = indexValues.reverse();\n }\n // 上一次的计算结果\n let temp: { start: number; end: number; lastIndex: string; positive: number; negative: number } = {\n start: 0,\n end: 0,\n positive: 0,\n negative: 0,\n lastIndex: null\n };\n indexValues.forEach((key, index) => {\n const total = {\n start: temp.end,\n end: temp.end,\n lastIndex: temp.lastIndex,\n lastEnd: temp.end,\n index: key,\n isTotal: false,\n positive: temp.end,\n negative: temp.end\n };\n\n const indexData = op.stackInverse === true ? dimensionData[key].reverse() : dimensionData[key];\n indexData?.forEach((d, i) => {\n if (i === indexData.length - 1) {\n d[STACK_FIELD_TOTAL_TOP] = true;\n } else {\n delete d[STACK_FIELD_TOTAL_TOP];\n }\n });\n // 1.9.5 新增能力\n // 当前 key 对应的数据中有一个总计数据,并且还有其他的分组数据时。总计的计算逻辑需要将总计值拆分\n if (indexData.length > 1) {\n const isTotalCheck = (d: Datum) => {\n if (!totalSpec || totalSpec.type === 'end') {\n if (index === indexValues.length - 1) {\n return true;\n }\n } else if (totalSpec.type === 'field' || totalSpec.type === 'custom') {\n const tag = d[totalSpec.tagField];\n return !!tag;\n }\n return false;\n };\n const isTotalTag = indexData.some(d => isTotalCheck(d));\n if (isTotalTag) {\n temp = computeTotalWithMultipleData(\n indexData,\n key,\n total,\n totalData,\n temp,\n indexValues,\n index,\n op,\n isTotalCheck\n );\n totalData.push(total);\n return;\n }\n }\n temp = computeNormalData(indexData, key, total, totalData, temp, indexValues, index, op);\n totalData.push(total);\n });\n return totalData;\n};\n\nfunction computeTotalWithMultipleData(\n indexData: Datum[],\n key: string,\n total: TotalInfo,\n totalData: TotalInfo[],\n temp: { start: number; end: number; lastIndex: string; positive: number; negative: number },\n indexValues: string[],\n index: number,\n op: IWaterfallOpt,\n isTotalCheck: (d: Datum) => boolean\n) {\n total.isTotal = true;\n const { valueField, startAs, endAs, total: totalSpec } = op;\n // 先将数据分为总计数据与常规数据\n const _normalTemp: Datum[] = [];\n const _totalTemp: Datum[] = [];\n // 将总计数据与常规数据进行分离\n indexData.forEach((d, index) => {\n if (isTotalCheck(d)) {\n // 总计数据后续要重新按照顺序计算 start end 信息,所以需要记录下当前的 index\n _totalTemp.push({ ...d, [`_vchart_waterfall_waterfall_temp`]: index });\n } else {\n _normalTemp.push(d);\n }\n });\n // 1. 不可能全都不是总计数据\n // 2. 如果全都是总计数据,让它们都是同一个值\n if (_totalTemp.length === indexData.length) {\n const result = computeNormalData([indexData[0]], key, total, totalData, temp, indexValues, index, op);\n _totalTemp.forEach(d => {\n d[startAs] = indexData[0][startAs];\n d[endAs] = indexData[0][endAs];\n d[valueField] = indexData[0][valueField];\n });\n return result;\n }\n\n // 3. 其他常规情况\n // 先获取当前的起始值/结束值应当是多少\n // 按照第一个总计数据的配置来决定\n const totalConfigData = _totalTemp[0];\n // 获取配置中的总计结果\n // eslint-disable-next-line prefer-const\n let { start, end } = getTotalStartEnd(totalConfigData, total, totalData, temp, totalSpec);\n total.start = start;\n total.end = end;\n let positive = start;\n let navigate = start;\n // 当前剩余的总计值\n let valueTemp = end - start;\n const tempTotalValue = _normalTemp.reduce((pre, cur) => precisionSub(pre, +cur[valueField]), valueTemp);\n // 模拟一组临时总计数据,用来堆叠\n _totalTemp.forEach(d => {\n const tempTotalData = {\n [startAs]: start,\n [endAs]: end,\n [valueField]: tempTotalValue\n };\n // 将临时总计插入 `_vchart_waterfall_waterfall_temp_${index}` 中\n _normalTemp.splice(d._vchart_waterfall_waterfall_temp, 0, tempTotalData);\n });\n // 将全部数据进行堆叠\n _normalTemp.forEach(d => {\n const value = +d[valueField];\n if (value >= 0) {\n d[startAs] = +positive;\n positive = precisionAdd(positive, value);\n } else {\n d[startAs] = +navigate;\n navigate = precisionAdd(navigate, value);\n }\n d[endAs] = precisionAdd(d[startAs], value);\n start = precisionAdd(start, value);\n valueTemp = precisionSub(valueTemp, value);\n });\n // 设置数据中的总计数据\n _totalTemp.forEach(_d => {\n const index = _d._vchart_waterfall_waterfall_temp;\n // 数据的堆积计算结果\n _d = _normalTemp[index];\n // 原始数据\n const d = indexData[index];\n d[startAs] = _d[startAs];\n d[endAs] = _d[endAs];\n d[valueField] = _d[valueField];\n });\n return { ...total, lastIndex: key };\n}\n\nfunction computeNormalData(\n indexData: Datum[],\n key: string,\n total: TotalInfo,\n totalData: TotalInfo[],\n temp: { start: number; end: number; lastIndex: string; positive: number; negative: number },\n indexValues: string[],\n index: number,\n op: IWaterfallOpt\n) {\n const { valueField, startAs, endAs, total: totalSpec, seriesField, seriesFieldName } = op;\n indexData.forEach(d => {\n let isTotalTag = false;\n if (!totalSpec || totalSpec.type === 'end') {\n if (index === indexValues.length - 1) {\n total.start = 0;\n d[startAs] = total.start;\n d[endAs] = total.end;\n isTotalTag = true;\n }\n } else if (totalSpec.type === 'field' || totalSpec.type === 'custom') {\n const tag = d[totalSpec.tagField];\n if (tag) {\n isTotalTag = true;\n const { start, end } = getTotalStartEnd(d, total, totalData, temp, totalSpec);\n d[startAs] = start;\n d[endAs] = end;\n d[valueField] = end - start;\n total.start = start;\n total.end = end;\n }\n }\n if (!isTotalTag) {\n const value = +d[valueField];\n // 区分正负值\n if (value >= 0) {\n d[startAs] = +total.positive;\n total.positive = precisionAdd(total.positive, value);\n } else {\n d[startAs] = +total.negative;\n total.negative = precisionAdd(total.negative, value);\n }\n d[endAs] = precisionAdd(d[startAs], value);\n total.end = precisionAdd(total.end, value);\n }\n total.isTotal = isTotalTag;\n\n if (isNil(seriesField) || seriesField === WaterfallDefaultSeriesField) {\n if (isTotalTag) {\n d[WaterfallDefaultSeriesField] = seriesFieldName.total;\n } else {\n d[WaterfallDefaultSeriesField] = +d[valueField] >= 0 ? seriesFieldName.increase : seriesFieldName.decrease;\n }\n }\n });\n return { ...total, lastIndex: key };\n}\n\nfunction getTotalStartEnd(\n d: Datum,\n total: TotalInfo,\n totalData: TotalInfo[],\n temp: { start: number; end: number; lastIndex: string; positive: number; negative: number },\n totalSpec: IWaterfallOpt['total']\n) {\n if (!totalSpec || totalSpec.type === 'end') {\n return getTotalInEndType(total);\n } else if (totalSpec.type === 'field' || totalSpec.type === 'custom') {\n if (totalSpec.type === 'custom') {\n return getTotalInCustomType(d, temp, totalSpec);\n }\n // 如果有设置count, valueField 和 startField 无效\n if (totalSpec.collectCountField && !isNil(d[totalSpec.collectCountField])) {\n return getTotalInCollectField(d, totalData, total, totalSpec);\n }\n return getTotalInField(d, total, totalSpec);\n }\n return { start: 0, end: 0 };\n}\n\nfunction getTotalInEndType(total: TotalInfo) {\n return { start: 0, end: total.end };\n}\n\nfunction getTotalInCustomType(\n d: Datum,\n temp: { start: number; end: number; lastIndex: string; positive: number; negative: number },\n totalSpec: IWaterfallOpt['total']\n) {\n return (<IWaterfallTotalCustom>totalSpec).product(d, temp);\n}\n\nfunction getTotalInCollectField(d: Datum, totalData: TotalInfo[], total: TotalInfo, totalSpec: IWaterfallTotalField) {\n let start = 0;\n let end = total.end;\n const startIndex = totalData.length - +d[totalSpec.collectCountField];\n const endIndex = totalData.length - 1;\n if (startIndex < 0) {\n warn('total.collectCountField error');\n } else {\n start = totalData[startIndex].start;\n }\n if (endIndex < 0) {\n warn('total.collectCountField error');\n } else {\n end = totalData[endIndex].end;\n }\n return { start, end };\n}\n\nfunction getTotalInField(d: Datum, total: TotalInfo, totalSpec: IWaterfallTotalField) {\n let start = 0;\n let end = total.end;\n if (totalSpec.startField && !isNil(d[totalSpec.startField])) {\n start = +d[totalSpec.startField];\n }\n if (totalSpec.valueField && !isNil(d[totalSpec.valueField])) {\n end = precisionAdd(start, +d[totalSpec.valueField]);\n }\n return { start, end };\n}\n\nexport interface IWaterfallFillEndOpt {\n indexField: string;\n valueField: string;\n seriesField?: string;\n total: IWaterfallSeriesSpec['total'];\n calculationMode: IWaterfallSeriesSpec['calculationMode'];\n}\n\nexport const waterfallFillTotal = (data: Array<Datum>, op: IWaterfallFillEndOpt) => {\n if (!data) {\n return data;\n }\n const { indexField, valueField, total, seriesField, calculationMode } = op;\n const totalData = {\n [indexField]: total?.text || 'total',\n [valueField]: data.reduce((pre, cur) => precisionAdd(pre, +cur[valueField]), 0)\n };\n if (seriesField) {\n totalData[seriesField] = 'total';\n }\n if (calculationMode === 'decrease') {\n data.unshift(totalData);\n } else {\n data.push(totalData);\n }\n return data;\n};\n"]}
1
+ {"version":3,"sources":["../src/data/transforms/waterfall.ts"],"names":[],"mappings":";;;AAAA,6CAAiF;AASjF,wDAAuE;AACvE,4CAAwC;AACxC,8CAA4D;AAiCrD,MAAM,SAAS,GAAG,CAAC,QAAsB,EAAE,EAAmB,EAAE,EAAE;IACvE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;QACtC,OAAO,QAAQ,CAAC;KACjB;IACD,MAAM,OAAO,GAAG,IAAA,mBAAU,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3C,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IAC7E,MAAM,SAAS,GAST,EAAE,CAAC;IACT,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,GAAG,SAAS,EAAE,CAAC,UAGtD,CAAC;IACF,IAAI,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1D,IAAI,eAAe,KAAK,UAAU,EAAE;QAClC,WAAW,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;KACrC;IAED,IAAI,IAAI,GAA0F;QAChG,KAAK,EAAE,CAAC;QACR,GAAG,EAAE,CAAC;QACN,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,CAAC;QACX,SAAS,EAAE,IAAI;KAChB,CAAC;IACF,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QACjC,MAAM,KAAK,GAAG;YACZ,KAAK,EAAE,IAAI,CAAC,GAAG;YACf,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,GAAG;YACjB,KAAK,EAAE,GAAG;YACV,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,IAAI,CAAC,GAAG;YAClB,QAAQ,EAAE,IAAI,CAAC,GAAG;SACnB,CAAC;QAEF,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACpG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAI,CAAC,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC9B,CAAC,CAAC,4BAAqB,CAAC,GAAG,IAAI,CAAC;aACjC;iBAAM;gBACL,OAAO,CAAC,CAAC,4BAAqB,CAAC,CAAC;aACjC;QACH,CAAC,CAAC,CAAC;QAGH,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YACxB,MAAM,YAAY,GAAG,CAAC,CAAQ,EAAE,EAAE;gBAChC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK,EAAE;oBAC1C,IAAI,KAAK,KAAK,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;wBACpC,OAAO,IAAI,CAAC;qBACb;iBACF;qBAAM,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE;oBACpE,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;oBAClC,OAAO,CAAC,CAAC,GAAG,CAAC;iBACd;gBACD,OAAO,KAAK,CAAC;YACf,CAAC,CAAC;YACF,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,UAAU,EAAE;gBACd,IAAI,GAAG,4BAA4B,CACjC,SAAS,EACT,GAAG,EACH,KAAK,EACL,SAAS,EACT,IAAI,EACJ,WAAW,EACX,KAAK,EACL,OAAO,EACP,YAAY,CACb,CAAC;gBACF,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtB,OAAO;aACR;SACF;QACD,IAAI,GAAG,iBAAiB,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9F,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IACH,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAvFW,QAAA,SAAS,aAuFpB;AAEF,SAAS,4BAA4B,CACnC,SAAkB,EAClB,GAAW,EACX,KAAgB,EAChB,SAAsB,EACtB,IAA2F,EAC3F,WAAqB,EACrB,KAAa,EACb,EAAiB,EACjB,YAAmC;IAEnC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IAE5D,MAAM,WAAW,GAAY,EAAE,CAAC;IAChC,MAAM,UAAU,GAAY,EAAE,CAAC;IAE/B,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;QAC7B,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE;YAEnB,UAAU,CAAC,IAAI,iCAAM,CAAC,KAAE,CAAC,kCAAkC,CAAC,EAAE,KAAK,IAAG,CAAC;SACxE;aAAM;YACL,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACrB;IACH,CAAC,CAAC,CAAC;IAGH,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE;QAC1C,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACtG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACrB,CAAC,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;KACf;IAKD,MAAM,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAGtC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,gBAAgB,CAAC,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC1F,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;IAChB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,IAAI,SAAS,GAAG,GAAG,GAAG,KAAK,CAAC;IAC5B,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAA,qBAAY,EAAC,GAAG,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAExG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACrB,MAAM,aAAa,GAAG;YACpB,CAAC,OAAO,CAAC,EAAE,KAAK;YAChB,CAAC,KAAK,CAAC,EAAE,GAAG;YACZ,CAAC,UAAU,CAAC,EAAE,cAAc;SAC7B,CAAC;QAEF,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,gCAAgC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACtB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAC7B,IAAI,KAAK,IAAI,CAAC,EAAE;YACd,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;YACvB,QAAQ,GAAG,IAAA,qBAAY,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;SAC1C;aAAM;YACL,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;YACvB,QAAQ,GAAG,IAAA,qBAAY,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;SAC1C;QACD,CAAC,CAAC,KAAK,CAAC,GAAG,IAAA,qBAAY,EAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3C,KAAK,GAAG,IAAA,qBAAY,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACnC,SAAS,GAAG,IAAA,qBAAY,EAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;QACtB,MAAM,KAAK,GAAG,EAAE,CAAC,gCAAgC,CAAC;QAElD,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QAExB,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IACH,uCAAY,KAAK,KAAE,SAAS,EAAE,GAAG,IAAG;AACtC,CAAC;AAED,SAAS,iBAAiB,CACxB,SAAkB,EAClB,GAAW,EACX,KAAgB,EAChB,SAAsB,EACtB,IAA2F,EAC3F,WAAqB,EACrB,KAAa,EACb,EAAiB;IAEjB,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC;IAC1F,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACpB,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK,EAAE;YAC1C,IAAI,KAAK,KAAK,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;gBACpC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;gBAChB,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;gBACzB,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;gBACrB,UAAU,GAAG,IAAI,CAAC;aACnB;SACF;aAAM,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE;YACpE,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAClC,IAAI,GAAG,EAAE;gBACP,UAAU,GAAG,IAAI,CAAC;gBAClB,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;gBAC9E,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;gBACnB,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;gBACf,CAAC,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC;gBAC5B,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;gBACpB,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;aACjB;SACF;QACD,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YAE7B,IAAI,KAAK,IAAI,CAAC,EAAE;gBACd,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAC7B,KAAK,CAAC,QAAQ,GAAG,IAAA,qBAAY,EAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;aACtD;iBAAM;gBACL,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAC7B,KAAK,CAAC,QAAQ,GAAG,IAAA,qBAAY,EAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;aACtD;YACD,CAAC,CAAC,KAAK,CAAC,GAAG,IAAA,qBAAY,EAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;YAC3C,KAAK,CAAC,GAAG,GAAG,IAAA,qBAAY,EAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAC5C;QACD,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC;QAE3B,IAAI,IAAA,cAAK,EAAC,WAAW,CAAC,IAAI,WAAW,KAAK,uCAA2B,EAAE;YACrE,IAAI,UAAU,EAAE;gBACd,CAAC,CAAC,uCAA2B,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC;aACxD;iBAAM;gBACL,CAAC,CAAC,uCAA2B,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC;aAC5G;SACF;IACH,CAAC,CAAC,CAAC;IACH,uCAAY,KAAK,KAAE,SAAS,EAAE,GAAG,IAAG;AACtC,CAAC;AAED,SAAS,gBAAgB,CACvB,CAAQ,EACR,KAAgB,EAChB,SAAsB,EACtB,IAA2F,EAC3F,SAAiC;IAEjC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK,EAAE;QAC1C,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;KACjC;SAAM,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE;QACpE,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC/B,OAAO,oBAAoB,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;SACjD;QAED,IAAI,SAAS,CAAC,iBAAiB,IAAI,CAAC,IAAA,cAAK,EAAC,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAAE;YACzE,OAAO,sBAAsB,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;SAC/D;QACD,OAAO,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;KAC7C;IACD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAgB;IACzC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,oBAAoB,CAC3B,CAAQ,EACR,IAA2F,EAC3F,SAAiC;IAEjC,OAA+B,SAAU,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,sBAAsB,CAAC,CAAQ,EAAE,SAAsB,EAAE,KAAgB,EAAE,SAA+B;IACjH,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACpB,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACtC,IAAI,UAAU,GAAG,CAAC,EAAE;QAClB,IAAA,YAAI,EAAC,+BAA+B,CAAC,CAAC;KACvC;SAAM;QACL,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC;KACrC;IACD,IAAI,QAAQ,GAAG,CAAC,EAAE;QAChB,IAAA,YAAI,EAAC,+BAA+B,CAAC,CAAC;KACvC;SAAM;QACL,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC;KAC/B;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,eAAe,CAAC,CAAQ,EAAE,KAAgB,EAAE,SAA+B;IAClF,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACpB,IAAI,SAAS,CAAC,UAAU,IAAI,CAAC,IAAA,cAAK,EAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE;QAC3D,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;KAClC;IACD,IAAI,SAAS,CAAC,UAAU,IAAI,CAAC,IAAA,cAAK,EAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE;QAC3D,GAAG,GAAG,IAAA,qBAAY,EAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;KACrD;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACxB,CAAC;AAYM,MAAM,kBAAkB,GAAG,CAAC,IAAkB,EAAE,EAA0B,EAAE,EAAE;IACnF,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,IAAI,CAAC;KACb;IACD,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,IAAA,mBAAU,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACnG,MAAM,SAAS,GAAG;QAChB,CAAC,UAAU,CAAC,EAAE,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,KAAI,OAAO;QACpC,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAA,qBAAY,EAAC,GAAG,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;KAChF,CAAC;IACF,IAAI,WAAW,EAAE;QACf,SAAS,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC;KAClC;IACD,IAAI,eAAe,KAAK,UAAU,EAAE;QAClC,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;KAC7B;IACD,OAAO,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC;AAC9B,CAAC,CAAC;AAhBW,QAAA,kBAAkB,sBAgB7B","file":"waterfall.js","sourcesContent":["import { isFunction, isNil, precisionAdd, precisionSub } from '@visactor/vutils';\n\nimport type { DataView } from '@visactor/vdataset';\nimport type {\n IWaterfallSeriesSpec,\n IWaterfallTotalCustom,\n IWaterfallTotalField\n} from '../../series/waterfall/interface';\nimport type { Datum } from '../../typings';\nimport { WaterfallDefaultSeriesField } from '../../constant/waterfall';\nimport { warn } from '../../util/debug';\nimport { STACK_FIELD_TOTAL_TOP } from '../../constant/data';\n\ntype TotalInfo = {\n start: number;\n end: number;\n lastIndex: string;\n lastEnd: number;\n index: string;\n isTotal: boolean;\n positive: number;\n negative: number;\n};\n\nexport interface IWaterfallOpt {\n indexField: string;\n valueField: string;\n seriesField?: string;\n startAs: string;\n endAs: string;\n total: IWaterfallSeriesSpec['total'];\n calculationMode: 'increase' | 'decrease';\n\n seriesFieldName: {\n total: string;\n increase: string;\n decrease: string;\n };\n stackInverse: boolean;\n groupData: () => DataView;\n}\n\nexport type WaterfallOption = IWaterfallOpt | (() => IWaterfallOpt);\n\nexport const waterfall = (lastData: Array<Datum>, op: WaterfallOption) => {\n if (!lastData || lastData.length === 0) {\n return lastData;\n }\n const options = isFunction(op) ? op() : op;\n const { indexField, total: totalSpec, groupData, calculationMode } = options;\n const totalData: {\n start: number;\n end: number;\n lastIndex: string;\n lastEnd: number;\n index: string;\n isTotal: boolean;\n positive: number;\n negative: number;\n }[] = [];\n const { dimensionValues, dimensionData } = groupData().latestData as {\n dimensionValues: { [key in string]: Set<string> };\n dimensionData: { [key in string]: Datum[] };\n };\n let indexValues = Array.from(dimensionValues[indexField]);\n if (calculationMode === 'decrease') {\n indexValues = indexValues.reverse();\n }\n // 上一次的计算结果\n let temp: { start: number; end: number; lastIndex: string; positive: number; negative: number } = {\n start: 0,\n end: 0,\n positive: 0,\n negative: 0,\n lastIndex: null\n };\n indexValues.forEach((key, index) => {\n const total = {\n start: temp.end,\n end: temp.end,\n lastIndex: temp.lastIndex,\n lastEnd: temp.end,\n index: key,\n isTotal: false,\n positive: temp.end,\n negative: temp.end\n };\n\n const indexData = options.stackInverse === true ? dimensionData[key].reverse() : dimensionData[key];\n indexData?.forEach((d, i) => {\n if (i === indexData.length - 1) {\n d[STACK_FIELD_TOTAL_TOP] = true;\n } else {\n delete d[STACK_FIELD_TOTAL_TOP];\n }\n });\n // 1.9.5 新增能力\n // 当前 key 对应的数据中有一个总计数据,并且还有其他的分组数据时。总计的计算逻辑需要将总计值拆分\n if (indexData.length > 1) {\n const isTotalCheck = (d: Datum) => {\n if (!totalSpec || totalSpec.type === 'end') {\n if (index === indexValues.length - 1) {\n return true;\n }\n } else if (totalSpec.type === 'field' || totalSpec.type === 'custom') {\n const tag = d[totalSpec.tagField];\n return !!tag;\n }\n return false;\n };\n const isTotalTag = indexData.some(d => isTotalCheck(d));\n if (isTotalTag) {\n temp = computeTotalWithMultipleData(\n indexData,\n key,\n total,\n totalData,\n temp,\n indexValues,\n index,\n options,\n isTotalCheck\n );\n totalData.push(total);\n return;\n }\n }\n temp = computeNormalData(indexData, key, total, totalData, temp, indexValues, index, options);\n totalData.push(total);\n });\n return totalData;\n};\n\nfunction computeTotalWithMultipleData(\n indexData: Datum[],\n key: string,\n total: TotalInfo,\n totalData: TotalInfo[],\n temp: { start: number; end: number; lastIndex: string; positive: number; negative: number },\n indexValues: string[],\n index: number,\n op: IWaterfallOpt,\n isTotalCheck: (d: Datum) => boolean\n) {\n total.isTotal = true;\n const { valueField, startAs, endAs, total: totalSpec } = op;\n // 先将数据分为总计数据与常规数据\n const _normalTemp: Datum[] = [];\n const _totalTemp: Datum[] = [];\n // 将总计数据与常规数据进行分离\n indexData.forEach((d, index) => {\n if (isTotalCheck(d)) {\n // 总计数据后续要重新按照顺序计算 start end 信息,所以需要记录下当前的 index\n _totalTemp.push({ ...d, [`_vchart_waterfall_waterfall_temp`]: index });\n } else {\n _normalTemp.push(d);\n }\n });\n // 1. 不可能全都不是总计数据\n // 2. 如果全都是总计数据,让它们都是同一个值\n if (_totalTemp.length === indexData.length) {\n const result = computeNormalData([indexData[0]], key, total, totalData, temp, indexValues, index, op);\n _totalTemp.forEach(d => {\n d[startAs] = indexData[0][startAs];\n d[endAs] = indexData[0][endAs];\n d[valueField] = indexData[0][valueField];\n });\n return result;\n }\n\n // 3. 其他常规情况\n // 先获取当前的起始值/结束值应当是多少\n // 按照第一个总计数据的配置来决定\n const totalConfigData = _totalTemp[0];\n // 获取配置中的总计结果\n // eslint-disable-next-line prefer-const\n let { start, end } = getTotalStartEnd(totalConfigData, total, totalData, temp, totalSpec);\n total.start = start;\n total.end = end;\n let positive = start;\n let navigate = start;\n // 当前剩余的总计值\n let valueTemp = end - start;\n const tempTotalValue = _normalTemp.reduce((pre, cur) => precisionSub(pre, +cur[valueField]), valueTemp);\n // 模拟一组临时总计数据,用来堆叠\n _totalTemp.forEach(d => {\n const tempTotalData = {\n [startAs]: start,\n [endAs]: end,\n [valueField]: tempTotalValue\n };\n // 将临时总计插入 `_vchart_waterfall_waterfall_temp_${index}` 中\n _normalTemp.splice(d._vchart_waterfall_waterfall_temp, 0, tempTotalData);\n });\n // 将全部数据进行堆叠\n _normalTemp.forEach(d => {\n const value = +d[valueField];\n if (value >= 0) {\n d[startAs] = +positive;\n positive = precisionAdd(positive, value);\n } else {\n d[startAs] = +navigate;\n navigate = precisionAdd(navigate, value);\n }\n d[endAs] = precisionAdd(d[startAs], value);\n start = precisionAdd(start, value);\n valueTemp = precisionSub(valueTemp, value);\n });\n // 设置数据中的总计数据\n _totalTemp.forEach(_d => {\n const index = _d._vchart_waterfall_waterfall_temp;\n // 数据的堆积计算结果\n _d = _normalTemp[index];\n // 原始数据\n const d = indexData[index];\n d[startAs] = _d[startAs];\n d[endAs] = _d[endAs];\n d[valueField] = _d[valueField];\n });\n return { ...total, lastIndex: key };\n}\n\nfunction computeNormalData(\n indexData: Datum[],\n key: string,\n total: TotalInfo,\n totalData: TotalInfo[],\n temp: { start: number; end: number; lastIndex: string; positive: number; negative: number },\n indexValues: string[],\n index: number,\n op: IWaterfallOpt\n) {\n const { valueField, startAs, endAs, total: totalSpec, seriesField, seriesFieldName } = op;\n indexData.forEach(d => {\n let isTotalTag = false;\n if (!totalSpec || totalSpec.type === 'end') {\n if (index === indexValues.length - 1) {\n total.start = 0;\n d[startAs] = total.start;\n d[endAs] = total.end;\n isTotalTag = true;\n }\n } else if (totalSpec.type === 'field' || totalSpec.type === 'custom') {\n const tag = d[totalSpec.tagField];\n if (tag) {\n isTotalTag = true;\n const { start, end } = getTotalStartEnd(d, total, totalData, temp, totalSpec);\n d[startAs] = start;\n d[endAs] = end;\n d[valueField] = end - start;\n total.start = start;\n total.end = end;\n }\n }\n if (!isTotalTag) {\n const value = +d[valueField];\n // 区分正负值\n if (value >= 0) {\n d[startAs] = +total.positive;\n total.positive = precisionAdd(total.positive, value);\n } else {\n d[startAs] = +total.negative;\n total.negative = precisionAdd(total.negative, value);\n }\n d[endAs] = precisionAdd(d[startAs], value);\n total.end = precisionAdd(total.end, value);\n }\n total.isTotal = isTotalTag;\n\n if (isNil(seriesField) || seriesField === WaterfallDefaultSeriesField) {\n if (isTotalTag) {\n d[WaterfallDefaultSeriesField] = seriesFieldName.total;\n } else {\n d[WaterfallDefaultSeriesField] = +d[valueField] >= 0 ? seriesFieldName.increase : seriesFieldName.decrease;\n }\n }\n });\n return { ...total, lastIndex: key };\n}\n\nfunction getTotalStartEnd(\n d: Datum,\n total: TotalInfo,\n totalData: TotalInfo[],\n temp: { start: number; end: number; lastIndex: string; positive: number; negative: number },\n totalSpec: IWaterfallOpt['total']\n) {\n if (!totalSpec || totalSpec.type === 'end') {\n return getTotalInEndType(total);\n } else if (totalSpec.type === 'field' || totalSpec.type === 'custom') {\n if (totalSpec.type === 'custom') {\n return getTotalInCustomType(d, temp, totalSpec);\n }\n // 如果有设置count, valueField 和 startField 无效\n if (totalSpec.collectCountField && !isNil(d[totalSpec.collectCountField])) {\n return getTotalInCollectField(d, totalData, total, totalSpec);\n }\n return getTotalInField(d, total, totalSpec);\n }\n return { start: 0, end: 0 };\n}\n\nfunction getTotalInEndType(total: TotalInfo) {\n return { start: 0, end: total.end };\n}\n\nfunction getTotalInCustomType(\n d: Datum,\n temp: { start: number; end: number; lastIndex: string; positive: number; negative: number },\n totalSpec: IWaterfallOpt['total']\n) {\n return (<IWaterfallTotalCustom>totalSpec).product(d, temp);\n}\n\nfunction getTotalInCollectField(d: Datum, totalData: TotalInfo[], total: TotalInfo, totalSpec: IWaterfallTotalField) {\n let start = 0;\n let end = total.end;\n const startIndex = totalData.length - +d[totalSpec.collectCountField];\n const endIndex = totalData.length - 1;\n if (startIndex < 0) {\n warn('total.collectCountField error');\n } else {\n start = totalData[startIndex].start;\n }\n if (endIndex < 0) {\n warn('total.collectCountField error');\n } else {\n end = totalData[endIndex].end;\n }\n return { start, end };\n}\n\nfunction getTotalInField(d: Datum, total: TotalInfo, totalSpec: IWaterfallTotalField) {\n let start = 0;\n let end = total.end;\n if (totalSpec.startField && !isNil(d[totalSpec.startField])) {\n start = +d[totalSpec.startField];\n }\n if (totalSpec.valueField && !isNil(d[totalSpec.valueField])) {\n end = precisionAdd(start, +d[totalSpec.valueField]);\n }\n return { start, end };\n}\n\nexport interface IWaterfallFillEndOpt {\n indexField: string;\n valueField: string;\n seriesField?: string;\n total: IWaterfallSeriesSpec['total'];\n calculationMode: IWaterfallSeriesSpec['calculationMode'];\n}\n\nexport type WaterfallFillEndOption = IWaterfallFillEndOpt | (() => IWaterfallFillEndOpt);\n\nexport const waterfallFillTotal = (data: Array<Datum>, op: WaterfallFillEndOption) => {\n if (!data) {\n return data;\n }\n const { indexField, valueField, total, seriesField, calculationMode } = isFunction(op) ? op() : op;\n const totalData = {\n [indexField]: total?.text || 'total',\n [valueField]: data.reduce((pre, cur) => precisionAdd(pre, +cur[valueField]), 0)\n };\n if (seriesField) {\n totalData[seriesField] = 'total';\n }\n if (calculationMode === 'decrease') {\n return [totalData, ...data];\n }\n return [...data, totalData];\n};\n"]}
@@ -4,6 +4,7 @@ export declare class Event implements IEvent {
4
4
  private _eventDispatcher;
5
5
  private _mode;
6
6
  private _composedEventMap;
7
+ private _eventHandlerMap;
7
8
  getComposedEventMap(): Map<EventCallback<EventParams>, {
8
9
  eventType: string;
9
10
  event: IComposedEvent;
@@ -20,4 +21,7 @@ export declare class Event implements IEvent {
20
21
  }): this;
21
22
  allow<Evt extends EventType>(eType: Evt): this;
22
23
  release(): void;
24
+ private _addEventHandler;
25
+ private _getEventHandler;
26
+ private _removeEventHandler;
23
27
  }
@@ -11,7 +11,8 @@ class Event {
11
11
  return this._composedEventMap;
12
12
  }
13
13
  constructor(eventDispatcher, mode) {
14
- this._composedEventMap = new Map, this._eventDispatcher = eventDispatcher, this._mode = mode;
14
+ this._composedEventMap = new Map, this._eventHandlerMap = new Map, this._eventDispatcher = eventDispatcher,
15
+ this._mode = mode;
15
16
  }
16
17
  on(eType, query, callback) {
17
18
  const handler = "function" == typeof query ? {
@@ -27,16 +28,16 @@ class Event {
27
28
  eventType: eType,
28
29
  event: composedEvent
29
30
  });
30
- } else this._eventDispatcher.register(eType, handler);
31
+ } else this._eventDispatcher.register(eType, handler), this._addEventHandler(eType, handler);
31
32
  return this;
32
33
  }
33
34
  off(eType, query, cb) {
34
- var _a, _b;
35
+ var _a, _b, _c;
35
36
  const callback = null != cb ? cb : query;
36
37
  if (factory_1.Factory.getComposedEvent(eType)) if (callback) null === (_a = this._composedEventMap.get(callback)) || void 0 === _a || _a.event.unregister(),
37
38
  this._composedEventMap.delete(callback); else for (const entry of this._composedEventMap.entries()) entry[1].eventType === eType && (null === (_b = this._composedEventMap.get(entry[0])) || void 0 === _b || _b.event.unregister(),
38
39
  this._composedEventMap.delete(entry[0])); else if (callback) {
39
- const handler = {
40
+ const handler = null !== (_c = this._getEventHandler(eType, callback)) && void 0 !== _c ? _c : {
40
41
  callback: callback,
41
42
  query: null,
42
43
  filter: {
@@ -49,8 +50,8 @@ class Event {
49
50
  userId: null
50
51
  }
51
52
  };
52
- this._eventDispatcher.unregister(eType, handler);
53
- } else this._eventDispatcher.unregister(eType);
53
+ this._eventDispatcher.unregister(eType, handler), this._removeEventHandler(eType, callback);
54
+ } else this._eventDispatcher.unregister(eType), this._eventHandlerMap.delete(eType);
54
55
  return this;
55
56
  }
56
57
  emit(eType, params, level) {
@@ -63,7 +64,25 @@ class Event {
63
64
  return this._eventDispatcher.allow(eType), this;
64
65
  }
65
66
  release() {
66
- this._eventDispatcher.clear(), this._composedEventMap.clear();
67
+ this._eventHandlerMap.forEach(((handlers, eventType) => {
68
+ handlers.forEach((handler => {
69
+ this._eventDispatcher.unregister(eventType, handler);
70
+ }));
71
+ })), this._eventHandlerMap.clear(), this._composedEventMap.forEach((entry => {
72
+ entry.event.unregister();
73
+ })), this._composedEventMap.clear();
74
+ }
75
+ _addEventHandler(eventType, handler) {
76
+ handler.callback && (this._eventHandlerMap.has(eventType) || this._eventHandlerMap.set(eventType, new Map),
77
+ this._eventHandlerMap.get(eventType).set(handler.callback, handler));
78
+ }
79
+ _getEventHandler(eventType, callback) {
80
+ var _a;
81
+ return null === (_a = this._eventHandlerMap.get(eventType)) || void 0 === _a ? void 0 : _a.get(callback);
82
+ }
83
+ _removeEventHandler(eventType, callback) {
84
+ const handlerMap = this._eventHandlerMap.get(eventType);
85
+ handlerMap && (handlerMap.delete(callback), handlerMap.size || this._eventHandlerMap.delete(eventType));
67
86
  }
68
87
  }
69
88
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/event/event.ts"],"names":[],"mappings":"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","file":"event.js","sourcesContent":["/*eslint no-dupe-class-members: \"off\"*/\n\nimport { Factory } from '../core/factory';\nimport type { RenderMode } from '../typings/spec/common';\nimport type {\n EventType,\n EventQuery,\n EventCallback,\n EventParamsDefinition,\n IEvent,\n IEventDispatcher,\n IComposedEvent,\n EventParams,\n EventHandler,\n EventBubbleLevel\n} from './interface';\n\nexport class Event implements IEvent {\n private _eventDispatcher: IEventDispatcher;\n private _mode: RenderMode;\n\n private _composedEventMap: Map<EventCallback<EventParams>, { eventType: EventType; event: IComposedEvent }> =\n new Map();\n getComposedEventMap() {\n return this._composedEventMap;\n }\n\n constructor(eventDispatcher: IEventDispatcher, mode: RenderMode) {\n this._eventDispatcher = eventDispatcher;\n this._mode = mode;\n }\n\n on<Evt extends EventType>(eType: Evt, callback: EventCallback<EventParamsDefinition[Evt]>): this;\n on<Evt extends EventType>(eType: Evt, query: EventQuery, callback: EventCallback<EventParamsDefinition[Evt]>): this;\n on<Evt extends EventType>(\n eType: Evt,\n query: EventQuery | EventCallback<EventParamsDefinition[Evt]>,\n callback?: EventCallback<EventParamsDefinition[Evt]>\n ): this {\n const handler =\n typeof query === 'function'\n ? { query: null, callback: query }\n : {\n query,\n callback: callback as EventCallback<EventParamsDefinition[Evt]>\n };\n\n const ComposedEventCtor = Factory.getComposedEvent(eType);\n if (ComposedEventCtor) {\n const composedEvent = new ComposedEventCtor(this._eventDispatcher, this._mode) as IComposedEvent;\n composedEvent.register(eType, handler);\n this._composedEventMap.set(handler.callback as EventCallback<EventParamsDefinition[Evt]>, {\n eventType: eType,\n event: composedEvent\n });\n } else {\n this._eventDispatcher.register(eType, handler);\n }\n\n return this;\n }\n\n off<Evt extends EventType>(eType: Evt, callback?: EventCallback<EventParamsDefinition[Evt]>): this;\n off<Evt extends EventType>(eType: Evt, query: EventQuery, callback: EventCallback<EventParamsDefinition[Evt]>): this;\n off<Evt extends EventType>(\n eType: Evt,\n query?: EventQuery | EventCallback<EventParamsDefinition[Evt]>,\n cb?: EventCallback<EventParamsDefinition[Evt]>\n ): this {\n const callback = (cb ?? query) as EventCallback<EventParamsDefinition[Evt]>;\n const ComposedEventCtor = Factory.getComposedEvent(eType);\n\n if (!!ComposedEventCtor) {\n if (callback) {\n this._composedEventMap.get(callback)?.event.unregister();\n this._composedEventMap.delete(callback);\n } else {\n for (const entry of this._composedEventMap.entries()) {\n if (entry[1].eventType === eType) {\n this._composedEventMap.get(entry[0])?.event.unregister();\n this._composedEventMap.delete(entry[0]);\n }\n }\n }\n } else {\n if (callback) {\n const handler: EventHandler<EventParamsDefinition[Evt]> = {\n callback,\n query: null,\n // 卸载事件时无需处理 source 以外的参数\n filter: {\n nodeName: null,\n type: eType,\n level: null,\n source: (query as EventQuery).source,\n markName: null,\n filter: null,\n userId: null\n }\n };\n this._eventDispatcher.unregister(eType, handler);\n } else {\n this._eventDispatcher.unregister(eType);\n }\n }\n return this;\n }\n\n emit<Evt extends EventType>(eType: Evt, params: EventParamsDefinition[Evt], level?: EventBubbleLevel): this {\n this._eventDispatcher.dispatch(eType, params, level);\n return this;\n }\n\n prevent<Evt extends EventType>(\n eType: Evt,\n except?: {\n handler: EventCallback<EventParamsDefinition[Evt]>;\n level: EventBubbleLevel;\n }\n ): this {\n this._eventDispatcher.prevent(eType, except);\n return this;\n }\n\n allow<Evt extends EventType>(eType: Evt) {\n this._eventDispatcher.allow(eType);\n return this;\n }\n\n release(): void {\n this._eventDispatcher.clear();\n this._composedEventMap.clear();\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/event/event.ts"],"names":[],"mappings":";;;AAEA,6CAA0C;AAe1C,MAAa,KAAK;IAOhB,mBAAmB;QACjB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED,YAAY,eAAiC,EAAE,IAAgB;QAPvD,sBAAiB,GACvB,IAAI,GAAG,EAAE,CAAC;QACJ,qBAAgB,GAA+E,IAAI,GAAG,EAAE,CAAC;QAM/G,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAID,EAAE,CACA,KAAU,EACV,KAA6D,EAC7D,QAAoD;QAEpD,MAAM,OAAO,GACX,OAAO,KAAK,KAAK,UAAU;YACzB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;YAClC,CAAC,CAAC;gBACE,KAAK;gBACL,QAAQ,EAAE,QAAqD;aAChE,CAAC;QAER,MAAM,iBAAiB,GAAG,iBAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,iBAAiB,EAAE;YACrB,MAAM,aAAa,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAmB,CAAC;YACjG,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACvC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,QAAqD,EAAE;gBACxF,SAAS,EAAE,KAAK;gBAChB,KAAK,EAAE,aAAa;aACrB,CAAC,CAAC;SACJ;aAAM;YACL,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC/C,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAA+C,CAAC,CAAC;SAC/E;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAID,GAAG,CACD,KAAU,EACV,KAA8D,EAC9D,EAA8C;;QAE9C,MAAM,QAAQ,GAAG,CAAC,EAAE,aAAF,EAAE,cAAF,EAAE,GAAI,KAAK,CAA8C,CAAC;QAC5E,MAAM,iBAAiB,GAAG,iBAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAE1D,IAAI,CAAC,CAAC,iBAAiB,EAAE;YACvB,IAAI,QAAQ,EAAE;gBACZ,MAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,0CAAE,KAAK,CAAC,UAAU,EAAE,CAAC;gBACzD,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;aACzC;iBAAM;gBACL,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE;oBACpD,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,EAAE;wBAChC,MAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,0CAAE,KAAK,CAAC,UAAU,EAAE,CAAC;wBACzD,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;qBACzC;iBACF;aACF;SACF;aAAM;YACL,IAAI,QAAQ,EAAE;gBACZ,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAsC,CAAC,CAAC;gBAC3F,MAAM,OAAO,GAA6C,MAAC,aAEzD,mCAAI;oBACJ,QAAQ;oBACR,KAAK,EAAE,IAAI;oBAEX,MAAM,EAAE;wBACN,QAAQ,EAAE,IAAI;wBACd,IAAI,EAAE,KAAK;wBACX,KAAK,EAAE,IAAI;wBACX,MAAM,EAAG,KAAoB,CAAC,MAAM;wBACpC,QAAQ,EAAE,IAAI;wBACd,MAAM,EAAE,IAAI;wBACZ,MAAM,EAAE,IAAI;qBACb;iBACF,CAAC;gBACF,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACjD,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAsC,CAAC,CAAC;aACzE;iBAAM;gBACL,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBACxC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACrC;SACF;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAwB,KAAU,EAAE,MAAkC,EAAE,KAAwB;QAClG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,KAAU,EACV,MAGC;QAED,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAwB,KAAU;QACrC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE;YACpD,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBACzB,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACrC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;IAEO,gBAAgB,CAAC,SAAoB,EAAE,OAAkC;QAC/E,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;YACrB,OAAO;SACR;QACD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YACzC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;SACjD;QACD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IAEO,gBAAgB,CAAC,SAAoB,EAAE,QAAoC;;QACjF,OAAO,MAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,0CAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC;IAEO,mBAAmB,CAAC,SAAoB,EAAE,QAAoC;QACpF,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,CAAC,UAAU,EAAE;YACf,OAAO;SACR;QACD,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YACpB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;SACzC;IACH,CAAC;CACF;AA5JD,sBA4JC","file":"event.js","sourcesContent":["/*eslint no-dupe-class-members: \"off\"*/\n\nimport { Factory } from '../core/factory';\nimport type { RenderMode } from '../typings/spec/common';\nimport type {\n EventType,\n EventQuery,\n EventCallback,\n EventParamsDefinition,\n IEvent,\n IEventDispatcher,\n IComposedEvent,\n EventParams,\n EventHandler,\n EventBubbleLevel\n} from './interface';\n\nexport class Event implements IEvent {\n private _eventDispatcher: IEventDispatcher;\n private _mode: RenderMode;\n\n private _composedEventMap: Map<EventCallback<EventParams>, { eventType: EventType; event: IComposedEvent }> =\n new Map();\n private _eventHandlerMap: Map<EventType, Map<EventCallback<EventParams>, EventHandler<EventParams>>> = new Map();\n getComposedEventMap() {\n return this._composedEventMap;\n }\n\n constructor(eventDispatcher: IEventDispatcher, mode: RenderMode) {\n this._eventDispatcher = eventDispatcher;\n this._mode = mode;\n }\n\n on<Evt extends EventType>(eType: Evt, callback: EventCallback<EventParamsDefinition[Evt]>): this;\n on<Evt extends EventType>(eType: Evt, query: EventQuery, callback: EventCallback<EventParamsDefinition[Evt]>): this;\n on<Evt extends EventType>(\n eType: Evt,\n query: EventQuery | EventCallback<EventParamsDefinition[Evt]>,\n callback?: EventCallback<EventParamsDefinition[Evt]>\n ): this {\n const handler: EventHandler<EventParamsDefinition[Evt]> =\n typeof query === 'function'\n ? { query: null, callback: query }\n : {\n query,\n callback: callback as EventCallback<EventParamsDefinition[Evt]>\n };\n\n const ComposedEventCtor = Factory.getComposedEvent(eType);\n if (ComposedEventCtor) {\n const composedEvent = new ComposedEventCtor(this._eventDispatcher, this._mode) as IComposedEvent;\n composedEvent.register(eType, handler);\n this._composedEventMap.set(handler.callback as EventCallback<EventParamsDefinition[Evt]>, {\n eventType: eType,\n event: composedEvent\n });\n } else {\n this._eventDispatcher.register(eType, handler);\n this._addEventHandler(eType, handler as unknown as EventHandler<EventParams>);\n }\n\n return this;\n }\n\n off<Evt extends EventType>(eType: Evt, callback?: EventCallback<EventParamsDefinition[Evt]>): this;\n off<Evt extends EventType>(eType: Evt, query: EventQuery, callback: EventCallback<EventParamsDefinition[Evt]>): this;\n off<Evt extends EventType>(\n eType: Evt,\n query?: EventQuery | EventCallback<EventParamsDefinition[Evt]>,\n cb?: EventCallback<EventParamsDefinition[Evt]>\n ): this {\n const callback = (cb ?? query) as EventCallback<EventParamsDefinition[Evt]>;\n const ComposedEventCtor = Factory.getComposedEvent(eType);\n\n if (!!ComposedEventCtor) {\n if (callback) {\n this._composedEventMap.get(callback)?.event.unregister();\n this._composedEventMap.delete(callback);\n } else {\n for (const entry of this._composedEventMap.entries()) {\n if (entry[1].eventType === eType) {\n this._composedEventMap.get(entry[0])?.event.unregister();\n this._composedEventMap.delete(entry[0]);\n }\n }\n }\n } else {\n if (callback) {\n const storedHandler = this._getEventHandler(eType, callback as EventCallback<EventParams>);\n const handler: EventHandler<EventParamsDefinition[Evt]> = (storedHandler as unknown as EventHandler<\n EventParamsDefinition[Evt]\n >) ?? {\n callback,\n query: null,\n // 卸载事件时无需处理 source 以外的参数\n filter: {\n nodeName: null,\n type: eType,\n level: null,\n source: (query as EventQuery).source,\n markName: null,\n filter: null,\n userId: null\n }\n };\n this._eventDispatcher.unregister(eType, handler);\n this._removeEventHandler(eType, callback as EventCallback<EventParams>);\n } else {\n this._eventDispatcher.unregister(eType);\n this._eventHandlerMap.delete(eType);\n }\n }\n return this;\n }\n\n emit<Evt extends EventType>(eType: Evt, params: EventParamsDefinition[Evt], level?: EventBubbleLevel): this {\n this._eventDispatcher.dispatch(eType, params, level);\n return this;\n }\n\n prevent<Evt extends EventType>(\n eType: Evt,\n except?: {\n handler: EventCallback<EventParamsDefinition[Evt]>;\n level: EventBubbleLevel;\n }\n ): this {\n this._eventDispatcher.prevent(eType, except);\n return this;\n }\n\n allow<Evt extends EventType>(eType: Evt) {\n this._eventDispatcher.allow(eType);\n return this;\n }\n\n release(): void {\n this._eventHandlerMap.forEach((handlers, eventType) => {\n handlers.forEach(handler => {\n this._eventDispatcher.unregister(eventType, handler);\n });\n });\n this._eventHandlerMap.clear();\n this._composedEventMap.forEach(entry => {\n entry.event.unregister();\n });\n this._composedEventMap.clear();\n }\n\n private _addEventHandler(eventType: EventType, handler: EventHandler<EventParams>) {\n if (!handler.callback) {\n return;\n }\n if (!this._eventHandlerMap.has(eventType)) {\n this._eventHandlerMap.set(eventType, new Map());\n }\n this._eventHandlerMap.get(eventType).set(handler.callback, handler);\n }\n\n private _getEventHandler(eventType: EventType, callback: EventCallback<EventParams>) {\n return this._eventHandlerMap.get(eventType)?.get(callback);\n }\n\n private _removeEventHandler(eventType: EventType, callback: EventCallback<EventParams>) {\n const handlerMap = this._eventHandlerMap.get(eventType);\n if (!handlerMap) {\n return;\n }\n handlerMap.delete(callback);\n if (!handlerMap.size) {\n this._eventHandlerMap.delete(eventType);\n }\n }\n}\n"]}
@@ -5,7 +5,7 @@ import { MarkTypeEnum } from '../interface';
5
5
  import type { IMarkRaw, IMarkStateStyle, IMarkStyle, IMark, IMarkOption, StyleConvert, MarkInputStyle, GroupedData, IAttrs, IMarkGraphic, ProgressiveContext, IProgressiveTransformResult, MarkType, AnimationStateValues } from '../interface';
6
6
  import type { ICompilableMark, IMarkCompileOption, IMarkConfig, IMarkStateManager, StateValueType } from '../../compile/mark/interface';
7
7
  import type { ICompilableInitOption } from '../../compile/interface';
8
- import type { IGroupGraphicAttribute, IGroup, IGraphic } from '@visactor/vrender-core';
8
+ import type { IGroupGraphicAttribute, IGroup, IGraphic, StateDefinitionsInput } from '@visactor/vrender-core';
9
9
  import { GrammarItem } from '../../compile/grammar-item';
10
10
  import type { IModel } from '../../model/interface';
11
11
  import type { ICompilableData } from '../../compile/data/interface';
@@ -74,7 +74,7 @@ export declare class BaseMark<T extends ICommonSpec> extends GrammarItem impleme
74
74
  stopAnimationByState(state?: string): void;
75
75
  pauseAnimationByState(state?: string): void;
76
76
  resumeAnimationByState(state?: string): void;
77
- removeProduct(): void;
77
+ removeProduct(releaseDetach?: boolean): void;
78
78
  release(): void;
79
79
  protected _simpleStyle: T;
80
80
  setSimpleStyle(s: T): void;
@@ -82,6 +82,11 @@ export declare class BaseMark<T extends ICommonSpec> extends GrammarItem impleme
82
82
  protected _option: IMarkOption;
83
83
  protected _attributeContext: IModelMarkAttributeContext;
84
84
  protected _encoderOfState: Record<string, Record<string, (datum: Datum) => any>>;
85
+ protected _sharedStateDefinitionsCacheKey?: string;
86
+ protected _sharedStateDefinitionsCache?: StateDefinitionsInput<Record<string, unknown>>;
87
+ protected _sharedStateDefinitionRefIds: WeakMap<object, number>;
88
+ protected _sharedStateDefinitionRefId: number;
89
+ protected _dynamicSharedStateNames: Set<string>;
85
90
  _extensionChannel: {
86
91
  [key: string | number | symbol]: string[];
87
92
  };
@@ -155,9 +160,14 @@ export declare class BaseMark<T extends ICommonSpec> extends GrammarItem impleme
155
160
  protected _getEncoderOfStyle: (stateName: string, style: Partial<IAttrs<T>>) => Record<string, (datum: Datum) => any>;
156
161
  protected _setGraphicFromMarkConfig: (g: IMarkGraphic) => void;
157
162
  protected _setStateOfGraphic: (g: IMarkGraphic, hasAnimation?: boolean) => void;
163
+ protected _getSharedStateDefinitionRefId(value: unknown): string;
164
+ protected _getSharedStateDefinitionValueKey(value: unknown): string;
165
+ protected _isStaticSharedStateAttribute(stateName: string, key: string): boolean;
158
166
  protected _applySharedStateDefinitions(): void;
159
167
  protected _addProgressiveGraphic(parent: IGroup, g: IMarkGraphic): void;
160
168
  protected _runEncoder(graphics: IMarkGraphic[], noGroupEncode?: boolean): void;
169
+ protected _excludeStateControlledDiffAttrs(g: IMarkGraphic, diffAttrs: Record<string, any>): Record<string, any>;
170
+ protected _hasDiffAttrs(g: IMarkGraphic): boolean;
161
171
  protected _runApplyGraphic(graphics: IMarkGraphic[]): void;
162
172
  protected _updateEncoderByState(): void;
163
173
  protected _runState(graphics: IMarkGraphic[]): void;