@visactor/vchart 1.5.1-alpha.6 → 1.5.1

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 (607) hide show
  1. package/build/es5/index.js +1 -1
  2. package/build/index.js +1349 -417
  3. package/build/index.min.js +1 -1
  4. package/build/tsconfig.tsbuildinfo +1 -1
  5. package/cjs/chart/base-chart.js +4 -1
  6. package/cjs/chart/base-chart.js.map +1 -1
  7. package/cjs/chart/common/interface.d.ts +2 -1
  8. package/cjs/chart/common/interface.js.map +1 -1
  9. package/cjs/chart/correlation/correlation.d.ts +11 -0
  10. package/cjs/chart/correlation/correlation.js +53 -0
  11. package/cjs/chart/correlation/correlation.js.map +1 -0
  12. package/cjs/chart/correlation/index.d.ts +2 -0
  13. package/cjs/chart/correlation/index.js +21 -0
  14. package/cjs/chart/correlation/index.js.map +1 -0
  15. package/cjs/chart/correlation/interface.d.ts +6 -0
  16. package/cjs/chart/correlation/interface.js +6 -0
  17. package/cjs/chart/correlation/interface.js.map +1 -0
  18. package/cjs/chart/index.d.ts +5 -3
  19. package/cjs/chart/index.js +16 -2
  20. package/cjs/chart/index.js.map +1 -1
  21. package/cjs/chart/interface/type.d.ts +2 -1
  22. package/cjs/chart/interface/type.js +2 -1
  23. package/cjs/chart/interface/type.js.map +1 -1
  24. package/cjs/chart/sequence/sequence.js +0 -1
  25. package/cjs/chart/sequence/sequence.js.map +1 -1
  26. package/cjs/chart/waterfall/waterfall.js.map +1 -1
  27. package/cjs/component/axis/base-axis.d.ts +2 -2
  28. package/cjs/component/axis/base-axis.js.map +1 -1
  29. package/cjs/component/axis/cartesian/axis.d.ts +4 -0
  30. package/cjs/component/axis/cartesian/axis.js +51 -9
  31. package/cjs/component/axis/cartesian/axis.js.map +1 -1
  32. package/cjs/component/axis/cartesian/interface/common.d.ts +6 -1
  33. package/cjs/component/axis/cartesian/interface/common.js.map +1 -1
  34. package/cjs/component/axis/cartesian/interface/spec.d.ts +2 -1
  35. package/cjs/component/axis/cartesian/interface/spec.js.map +1 -1
  36. package/cjs/component/axis/cartesian/interface/theme.d.ts +2 -1
  37. package/cjs/component/axis/cartesian/interface/theme.js.map +1 -1
  38. package/cjs/component/base/base-component.d.ts +1 -1
  39. package/cjs/component/base/base-component.js.map +1 -1
  40. package/cjs/component/brush/brush.d.ts +2 -2
  41. package/cjs/component/brush/brush.js.map +1 -1
  42. package/cjs/component/brush/interface.d.ts +1 -1
  43. package/cjs/component/brush/interface.js.map +1 -1
  44. package/cjs/component/common/trigger/desktop.d.ts +1 -0
  45. package/cjs/component/common/trigger/desktop.js +1 -0
  46. package/cjs/component/common/trigger/desktop.js.map +1 -1
  47. package/cjs/component/common/trigger/mobile.d.ts +1 -0
  48. package/cjs/component/common/trigger/mobile.js +1 -0
  49. package/cjs/component/common/trigger/mobile.js.map +1 -1
  50. package/cjs/component/crosshair/cartesian.d.ts +2 -2
  51. package/cjs/component/crosshair/cartesian.js.map +1 -1
  52. package/cjs/component/crosshair/polar.d.ts +2 -2
  53. package/cjs/component/crosshair/polar.js.map +1 -1
  54. package/cjs/component/custom-mark/custom-mark.d.ts +2 -2
  55. package/cjs/component/custom-mark/custom-mark.js.map +1 -1
  56. package/cjs/component/data-zoom/data-filter-base-component.d.ts +26 -9
  57. package/cjs/component/data-zoom/data-filter-base-component.js +92 -20
  58. package/cjs/component/data-zoom/data-filter-base-component.js.map +1 -1
  59. package/cjs/component/data-zoom/data-zoom/data-zoom.d.ts +2 -3
  60. package/cjs/component/data-zoom/data-zoom/data-zoom.js +16 -8
  61. package/cjs/component/data-zoom/data-zoom/data-zoom.js.map +1 -1
  62. package/cjs/component/data-zoom/interface.d.ts +36 -2
  63. package/cjs/component/data-zoom/interface.js.map +1 -1
  64. package/cjs/component/data-zoom/scroll-bar/scroll-bar.d.ts +3 -3
  65. package/cjs/component/data-zoom/scroll-bar/scroll-bar.js +17 -9
  66. package/cjs/component/data-zoom/scroll-bar/scroll-bar.js.map +1 -1
  67. package/cjs/component/geo/geo-coordinate.d.ts +2 -2
  68. package/cjs/component/geo/geo-coordinate.js.map +1 -1
  69. package/cjs/component/indicator/indicator.d.ts +2 -2
  70. package/cjs/component/indicator/indicator.js.map +1 -1
  71. package/cjs/component/interface/common.d.ts +2 -2
  72. package/cjs/component/interface/common.js.map +1 -1
  73. package/cjs/component/label/base-label.d.ts +2 -2
  74. package/cjs/component/label/base-label.js.map +1 -1
  75. package/cjs/component/legend/base-legend.d.ts +2 -2
  76. package/cjs/component/legend/base-legend.js.map +1 -1
  77. package/cjs/component/legend/continuous/legend.d.ts +1 -1
  78. package/cjs/component/legend/discrete/legend.d.ts +1 -1
  79. package/cjs/component/legend/interface.d.ts +3 -0
  80. package/cjs/component/legend/interface.js.map +1 -1
  81. package/cjs/component/map-label/component.d.ts +3 -3
  82. package/cjs/component/map-label/component.js.map +1 -1
  83. package/cjs/component/marker/base-marker.d.ts +2 -2
  84. package/cjs/component/marker/base-marker.js.map +1 -1
  85. package/cjs/component/marker/mark-line/mark-line.js.map +1 -1
  86. package/cjs/component/marker/mark-point/mark-point.js.map +1 -1
  87. package/cjs/component/player/player.d.ts +2 -2
  88. package/cjs/component/player/player.js.map +1 -1
  89. package/cjs/component/title/title.d.ts +2 -2
  90. package/cjs/component/title/title.js.map +1 -1
  91. package/cjs/component/tooltip/handler/base.d.ts +1 -1
  92. package/cjs/component/tooltip/handler/dom/util.js.map +1 -1
  93. package/cjs/component/tooltip/handler/utils/common.js.map +1 -1
  94. package/cjs/component/tooltip/handler/utils/compose.js +2 -1
  95. package/cjs/component/tooltip/handler/utils/compose.js.map +1 -1
  96. package/cjs/component/tooltip/tooltip.d.ts +2 -2
  97. package/cjs/component/tooltip/tooltip.js.map +1 -1
  98. package/cjs/constant/correlation.d.ts +3 -0
  99. package/cjs/constant/correlation.js +11 -0
  100. package/cjs/constant/correlation.js.map +1 -0
  101. package/cjs/constant/index.d.ts +1 -0
  102. package/cjs/constant/index.js +2 -1
  103. package/cjs/constant/index.js.map +1 -1
  104. package/cjs/constant/word-cloud.js +1 -2
  105. package/cjs/core/factory.js +2 -1
  106. package/cjs/core/index.d.ts +1 -1
  107. package/cjs/core/index.js +1 -1
  108. package/cjs/core/index.js.map +1 -1
  109. package/cjs/data/transforms/correlation-center.d.ts +4 -0
  110. package/cjs/data/transforms/correlation-center.js +18 -0
  111. package/cjs/data/transforms/correlation-center.js.map +1 -0
  112. package/cjs/data/transforms/correlation.d.ts +17 -0
  113. package/cjs/data/transforms/correlation.js +58 -0
  114. package/cjs/data/transforms/correlation.js.map +1 -0
  115. package/cjs/interaction/dimension-trigger.js +1 -2
  116. package/cjs/interaction/interaction.js +2 -1
  117. package/cjs/interaction/zoom/zoomable.d.ts +20 -12
  118. package/cjs/interaction/zoom/zoomable.js +94 -74
  119. package/cjs/interaction/zoom/zoomable.js.map +1 -1
  120. package/cjs/layout/base-layout.d.ts +7 -1
  121. package/cjs/layout/base-layout.js +24 -10
  122. package/cjs/layout/base-layout.js.map +1 -1
  123. package/cjs/layout/layout3d/index.d.ts +6 -0
  124. package/cjs/layout/layout3d/index.js +14 -0
  125. package/cjs/layout/layout3d/index.js.map +1 -1
  126. package/cjs/mark/arc-3d.js +1 -1
  127. package/cjs/mark/index.d.ts +3 -2
  128. package/cjs/mark/index.js +10 -1
  129. package/cjs/mark/index.js.map +1 -1
  130. package/cjs/mark/interface/type.d.ts +1 -0
  131. package/cjs/mark/interface/type.js +1 -1
  132. package/cjs/mark/interface/type.js.map +1 -1
  133. package/cjs/mark/ripple.d.ts +12 -0
  134. package/cjs/mark/ripple.js +29 -0
  135. package/cjs/mark/ripple.js.map +1 -0
  136. package/cjs/model/base-model.d.ts +0 -3
  137. package/cjs/model/base-model.js +0 -3
  138. package/cjs/model/base-model.js.map +1 -1
  139. package/cjs/model/interface.d.ts +0 -2
  140. package/cjs/model/interface.js.map +1 -1
  141. package/cjs/series/area/area.js +4 -2
  142. package/cjs/series/area/area.js.map +1 -1
  143. package/cjs/series/bar/bar.d.ts +1 -0
  144. package/cjs/series/bar/bar.js +4 -3
  145. package/cjs/series/bar/bar.js.map +1 -1
  146. package/cjs/series/base/base-series.js +6 -9
  147. package/cjs/series/base/base-series.js.map +1 -1
  148. package/cjs/series/box-plot/box-plot.js +9 -9
  149. package/cjs/series/box-plot/box-plot.js.map +1 -1
  150. package/cjs/series/circle-packing/circle-packing.js +7 -6
  151. package/cjs/series/circle-packing/circle-packing.js.map +1 -1
  152. package/cjs/series/correlation/animation.d.ts +8 -0
  153. package/cjs/series/correlation/animation.js +22 -0
  154. package/cjs/series/correlation/animation.js.map +1 -0
  155. package/cjs/series/correlation/constant.d.ts +2 -0
  156. package/cjs/series/correlation/constant.js +27 -0
  157. package/cjs/series/correlation/constant.js.map +1 -0
  158. package/cjs/series/correlation/correlation.d.ts +57 -0
  159. package/cjs/series/correlation/correlation.js +215 -0
  160. package/cjs/series/correlation/correlation.js.map +1 -0
  161. package/cjs/series/correlation/interface.d.ts +37 -0
  162. package/cjs/series/correlation/interface.js +6 -0
  163. package/cjs/series/correlation/interface.js.map +1 -0
  164. package/cjs/series/dot/dot.js +2 -4
  165. package/cjs/series/dot/dot.js.map +1 -1
  166. package/cjs/series/funnel/funnel.js +4 -6
  167. package/cjs/series/funnel/funnel.js.map +1 -1
  168. package/cjs/series/gauge/gauge-pointer.d.ts +1 -0
  169. package/cjs/series/gauge/gauge-pointer.js +4 -2
  170. package/cjs/series/gauge/gauge-pointer.js.map +1 -1
  171. package/cjs/series/gauge/gauge.d.ts +1 -0
  172. package/cjs/series/gauge/gauge.js +5 -3
  173. package/cjs/series/gauge/gauge.js.map +1 -1
  174. package/cjs/series/heatmap/heatmap.js +2 -4
  175. package/cjs/series/heatmap/heatmap.js.map +1 -1
  176. package/cjs/series/index.d.ts +4 -2
  177. package/cjs/series/index.js +11 -2
  178. package/cjs/series/index.js.map +1 -1
  179. package/cjs/series/interface/series.d.ts +1 -1
  180. package/cjs/series/interface/series.js.map +1 -1
  181. package/cjs/series/interface/theme.d.ts +2 -0
  182. package/cjs/series/interface/theme.js +3 -2
  183. package/cjs/series/interface/theme.js.map +1 -1
  184. package/cjs/series/interface/type.d.ts +7 -2
  185. package/cjs/series/interface/type.js +4 -2
  186. package/cjs/series/interface/type.js.map +1 -1
  187. package/cjs/series/line/line.d.ts +1 -0
  188. package/cjs/series/line/line.js +4 -0
  189. package/cjs/series/line/line.js.map +1 -1
  190. package/cjs/series/link/link.js +6 -7
  191. package/cjs/series/link/link.js.map +1 -1
  192. package/cjs/series/map/map.js +2 -4
  193. package/cjs/series/map/map.js.map +1 -1
  194. package/cjs/series/mixin/line-mixin.js +2 -5
  195. package/cjs/series/mixin/line-mixin.js.map +1 -1
  196. package/cjs/series/pie/interface.d.ts +2 -0
  197. package/cjs/series/pie/interface.js.map +1 -1
  198. package/cjs/series/pie/pie-3d.js +6 -6
  199. package/cjs/series/pie/pie-3d.js.map +1 -1
  200. package/cjs/series/pie/pie.d.ts +2 -0
  201. package/cjs/series/pie/pie.js +18 -3
  202. package/cjs/series/pie/pie.js.map +1 -1
  203. package/cjs/series/progress/circular/circular.d.ts +1 -0
  204. package/cjs/series/progress/circular/circular.js +5 -3
  205. package/cjs/series/progress/circular/circular.js.map +1 -1
  206. package/cjs/series/progress/linear/linear.js +6 -6
  207. package/cjs/series/progress/linear/linear.js.map +1 -1
  208. package/cjs/series/radar/animation.js.map +1 -1
  209. package/cjs/series/radar/radar.d.ts +1 -0
  210. package/cjs/series/radar/radar.js +6 -2
  211. package/cjs/series/radar/radar.js.map +1 -1
  212. package/cjs/series/range-area/range-area.js +2 -3
  213. package/cjs/series/range-area/range-area.js.map +1 -1
  214. package/cjs/series/range-column/range-column.d.ts +1 -0
  215. package/cjs/series/range-column/range-column.js +11 -11
  216. package/cjs/series/range-column/range-column.js.map +1 -1
  217. package/cjs/series/rose/rose.d.ts +1 -0
  218. package/cjs/series/rose/rose.js +4 -2
  219. package/cjs/series/rose/rose.js.map +1 -1
  220. package/cjs/series/sankey/sankey.js +7 -9
  221. package/cjs/series/sankey/sankey.js.map +1 -1
  222. package/cjs/series/scatter/scatter.d.ts +1 -0
  223. package/cjs/series/scatter/scatter.js +4 -3
  224. package/cjs/series/scatter/scatter.js.map +1 -1
  225. package/cjs/series/sunburst/sunburst.js +4 -6
  226. package/cjs/series/sunburst/sunburst.js.map +1 -1
  227. package/cjs/series/treemap/treemap.js +10 -9
  228. package/cjs/series/treemap/treemap.js.map +1 -1
  229. package/cjs/series/word-cloud/base.d.ts +1 -0
  230. package/cjs/series/word-cloud/base.js +6 -3
  231. package/cjs/series/word-cloud/base.js.map +1 -1
  232. package/cjs/series/word-cloud/word-cloud-3d.js +2 -3
  233. package/cjs/series/word-cloud/word-cloud-3d.js.map +1 -1
  234. package/cjs/theme/builtin/common/component/axis/cartesian-axis.js +31 -3
  235. package/cjs/theme/builtin/common/component/axis/cartesian-axis.js.map +1 -1
  236. package/cjs/theme/builtin/common/component/indicator.js +1 -1
  237. package/cjs/theme/builtin/common/component/indicator.js.map +1 -1
  238. package/cjs/theme/builtin/common/component/legend/continuous.js +1 -1
  239. package/cjs/theme/builtin/common/component/legend/continuous.js.map +1 -1
  240. package/cjs/theme/builtin/common/component/legend/discrete-legend.js +1 -1
  241. package/cjs/theme/builtin/common/component/legend/discrete-legend.js.map +1 -1
  242. package/cjs/theme/builtin/common/component/mark-area.js +12 -10
  243. package/cjs/theme/builtin/common/component/mark-area.js.map +1 -1
  244. package/cjs/theme/builtin/common/component/mark-line.js +19 -12
  245. package/cjs/theme/builtin/common/component/mark-line.js.map +1 -1
  246. package/cjs/theme/builtin/common/component/mark-point.js +8 -2
  247. package/cjs/theme/builtin/common/component/mark-point.js.map +1 -1
  248. package/cjs/theme/builtin/common/component/poptip.js +1 -1
  249. package/cjs/theme/builtin/common/component/poptip.js.map +1 -1
  250. package/cjs/theme/builtin/common/component/title.js +1 -1
  251. package/cjs/theme/builtin/common/component/title.js.map +1 -1
  252. package/cjs/theme/builtin/common/component/tooltip.js +2 -2
  253. package/cjs/theme/builtin/common/component/tooltip.js.map +1 -1
  254. package/cjs/theme/builtin/common/component/total-label.js +1 -1
  255. package/cjs/theme/builtin/common/component/total-label.js.map +1 -1
  256. package/cjs/theme/builtin/common/series/area.js +4 -1
  257. package/cjs/theme/builtin/common/series/area.js.map +1 -1
  258. package/cjs/theme/builtin/common/series/bar.js +4 -1
  259. package/cjs/theme/builtin/common/series/bar.js.map +1 -1
  260. package/cjs/theme/builtin/common/series/circle-packing.js +4 -1
  261. package/cjs/theme/builtin/common/series/circle-packing.js.map +1 -1
  262. package/cjs/theme/builtin/common/series/correlation.d.ts +2 -0
  263. package/cjs/theme/builtin/common/series/correlation.js +22 -0
  264. package/cjs/theme/builtin/common/series/correlation.js.map +1 -0
  265. package/cjs/theme/builtin/common/series/funnel.js +12 -3
  266. package/cjs/theme/builtin/common/series/funnel.js.map +1 -1
  267. package/cjs/theme/builtin/common/series/index.js +3 -2
  268. package/cjs/theme/builtin/common/series/index.js.map +1 -1
  269. package/cjs/theme/builtin/common/series/line.js +4 -1
  270. package/cjs/theme/builtin/common/series/line.js.map +1 -1
  271. package/cjs/theme/builtin/common/series/map.js +4 -1
  272. package/cjs/theme/builtin/common/series/map.js.map +1 -1
  273. package/cjs/theme/builtin/common/series/pie.js +9 -1
  274. package/cjs/theme/builtin/common/series/pie.js.map +1 -1
  275. package/cjs/theme/builtin/common/series/radar.js +4 -1
  276. package/cjs/theme/builtin/common/series/radar.js.map +1 -1
  277. package/cjs/theme/builtin/common/series/rose.js +5 -1
  278. package/cjs/theme/builtin/common/series/rose.js.map +1 -1
  279. package/cjs/theme/builtin/common/series/scatter.js +4 -1
  280. package/cjs/theme/builtin/common/series/scatter.js.map +1 -1
  281. package/cjs/theme/builtin/common/series/treemap.js +4 -1
  282. package/cjs/theme/builtin/common/series/treemap.js.map +1 -1
  283. package/cjs/theme/builtin/dark/color-scheme.js +1 -1
  284. package/cjs/theme/builtin/dark/color-scheme.js.map +1 -1
  285. package/cjs/theme/builtin/light/color-scheme.js +3 -3
  286. package/cjs/theme/builtin/light/color-scheme.js.map +1 -1
  287. package/cjs/theme/color-scheme/builtin/interface.d.ts +1 -1
  288. package/cjs/theme/color-scheme/builtin/interface.js.map +1 -1
  289. package/cjs/theme/color-scheme/interface.d.ts +1 -1
  290. package/cjs/theme/color-scheme/interface.js.map +1 -1
  291. package/cjs/theme/color-scheme/util.js +3 -7
  292. package/cjs/theme/color-scheme/util.js.map +1 -1
  293. package/cjs/typings/event.d.ts +1 -0
  294. package/cjs/typings/event.js +6 -0
  295. package/cjs/typings/event.js.map +1 -0
  296. package/cjs/typings/spec/chart.d.ts +2 -0
  297. package/cjs/typings/spec/chart.js.map +1 -1
  298. package/cjs/typings/spec/common.d.ts +8 -6
  299. package/cjs/typings/spec/common.js.map +1 -1
  300. package/cjs/typings/tooltip/line.d.ts +1 -0
  301. package/cjs/typings/tooltip/line.js.map +1 -1
  302. package/cjs/typings/visual.d.ts +4 -0
  303. package/cjs/typings/visual.js.map +1 -1
  304. package/cjs/vchart-all.js +2 -2
  305. package/cjs/vchart-all.js.map +1 -1
  306. package/esm/chart/base-chart.js +4 -1
  307. package/esm/chart/base-chart.js.map +1 -1
  308. package/esm/chart/common/interface.d.ts +2 -1
  309. package/esm/chart/common/interface.js.map +1 -1
  310. package/esm/chart/correlation/correlation.d.ts +11 -0
  311. package/esm/chart/correlation/correlation.js +52 -0
  312. package/esm/chart/correlation/correlation.js.map +1 -0
  313. package/esm/chart/correlation/index.d.ts +2 -0
  314. package/esm/chart/correlation/index.js +4 -0
  315. package/esm/chart/correlation/index.js.map +1 -0
  316. package/esm/chart/correlation/interface.d.ts +6 -0
  317. package/esm/chart/correlation/interface.js +2 -0
  318. package/esm/chart/correlation/interface.js.map +1 -0
  319. package/esm/chart/index.d.ts +5 -3
  320. package/esm/chart/index.js +4 -2
  321. package/esm/chart/index.js.map +1 -1
  322. package/esm/chart/interface/type.d.ts +2 -1
  323. package/esm/chart/interface/type.js +2 -1
  324. package/esm/chart/interface/type.js.map +1 -1
  325. package/esm/chart/sequence/sequence.js +0 -1
  326. package/esm/chart/sequence/sequence.js.map +1 -1
  327. package/esm/chart/waterfall/waterfall.js.map +1 -1
  328. package/esm/component/axis/base-axis.d.ts +2 -2
  329. package/esm/component/axis/base-axis.js.map +1 -1
  330. package/esm/component/axis/cartesian/axis.d.ts +4 -0
  331. package/esm/component/axis/cartesian/axis.js +52 -8
  332. package/esm/component/axis/cartesian/axis.js.map +1 -1
  333. package/esm/component/axis/cartesian/interface/common.d.ts +6 -1
  334. package/esm/component/axis/cartesian/interface/common.js.map +1 -1
  335. package/esm/component/axis/cartesian/interface/spec.d.ts +2 -1
  336. package/esm/component/axis/cartesian/interface/spec.js.map +1 -1
  337. package/esm/component/axis/cartesian/interface/theme.d.ts +2 -1
  338. package/esm/component/axis/cartesian/interface/theme.js.map +1 -1
  339. package/esm/component/base/base-component.d.ts +1 -1
  340. package/esm/component/base/base-component.js.map +1 -1
  341. package/esm/component/brush/brush.d.ts +2 -2
  342. package/esm/component/brush/brush.js.map +1 -1
  343. package/esm/component/brush/interface.d.ts +1 -1
  344. package/esm/component/brush/interface.js.map +1 -1
  345. package/esm/component/common/trigger/desktop.d.ts +1 -0
  346. package/esm/component/common/trigger/desktop.js +1 -0
  347. package/esm/component/common/trigger/desktop.js.map +1 -1
  348. package/esm/component/common/trigger/mobile.d.ts +1 -0
  349. package/esm/component/common/trigger/mobile.js +1 -0
  350. package/esm/component/common/trigger/mobile.js.map +1 -1
  351. package/esm/component/crosshair/cartesian.d.ts +2 -2
  352. package/esm/component/crosshair/cartesian.js.map +1 -1
  353. package/esm/component/crosshair/polar.d.ts +2 -2
  354. package/esm/component/crosshair/polar.js.map +1 -1
  355. package/esm/component/custom-mark/custom-mark.d.ts +2 -2
  356. package/esm/component/custom-mark/custom-mark.js.map +1 -1
  357. package/esm/component/data-zoom/data-filter-base-component.d.ts +26 -9
  358. package/esm/component/data-zoom/data-filter-base-component.js +91 -20
  359. package/esm/component/data-zoom/data-filter-base-component.js.map +1 -1
  360. package/esm/component/data-zoom/data-zoom/data-zoom.d.ts +2 -3
  361. package/esm/component/data-zoom/data-zoom/data-zoom.js +17 -9
  362. package/esm/component/data-zoom/data-zoom/data-zoom.js.map +1 -1
  363. package/esm/component/data-zoom/interface.d.ts +36 -2
  364. package/esm/component/data-zoom/interface.js.map +1 -1
  365. package/esm/component/data-zoom/scroll-bar/scroll-bar.d.ts +3 -3
  366. package/esm/component/data-zoom/scroll-bar/scroll-bar.js +18 -10
  367. package/esm/component/data-zoom/scroll-bar/scroll-bar.js.map +1 -1
  368. package/esm/component/geo/geo-coordinate.d.ts +2 -2
  369. package/esm/component/geo/geo-coordinate.js.map +1 -1
  370. package/esm/component/indicator/indicator.d.ts +2 -2
  371. package/esm/component/indicator/indicator.js.map +1 -1
  372. package/esm/component/interface/common.d.ts +2 -2
  373. package/esm/component/interface/common.js.map +1 -1
  374. package/esm/component/label/base-label.d.ts +2 -2
  375. package/esm/component/label/base-label.js.map +1 -1
  376. package/esm/component/legend/base-legend.d.ts +2 -2
  377. package/esm/component/legend/base-legend.js.map +1 -1
  378. package/esm/component/legend/continuous/legend.d.ts +1 -1
  379. package/esm/component/legend/discrete/legend.d.ts +1 -1
  380. package/esm/component/legend/interface.d.ts +3 -0
  381. package/esm/component/legend/interface.js.map +1 -1
  382. package/esm/component/map-label/component.d.ts +3 -3
  383. package/esm/component/map-label/component.js.map +1 -1
  384. package/esm/component/marker/base-marker.d.ts +2 -2
  385. package/esm/component/marker/base-marker.js.map +1 -1
  386. package/esm/component/marker/mark-line/mark-line.js.map +1 -1
  387. package/esm/component/marker/mark-point/mark-point.js.map +1 -1
  388. package/esm/component/player/player.d.ts +2 -2
  389. package/esm/component/player/player.js.map +1 -1
  390. package/esm/component/title/title.d.ts +2 -2
  391. package/esm/component/title/title.js.map +1 -1
  392. package/esm/component/tooltip/handler/base.d.ts +1 -1
  393. package/esm/component/tooltip/handler/dom/util.js.map +1 -1
  394. package/esm/component/tooltip/handler/utils/common.js.map +1 -1
  395. package/esm/component/tooltip/handler/utils/compose.js +2 -1
  396. package/esm/component/tooltip/handler/utils/compose.js.map +1 -1
  397. package/esm/component/tooltip/tooltip.d.ts +2 -2
  398. package/esm/component/tooltip/tooltip.js.map +1 -1
  399. package/esm/constant/correlation.d.ts +3 -0
  400. package/esm/constant/correlation.js +8 -0
  401. package/esm/constant/correlation.js.map +1 -0
  402. package/esm/constant/index.d.ts +1 -0
  403. package/esm/constant/index.js +2 -0
  404. package/esm/constant/index.js.map +1 -1
  405. package/esm/constant/word-cloud.js +1 -2
  406. package/esm/core/factory.js +2 -1
  407. package/esm/core/index.d.ts +1 -1
  408. package/esm/core/index.js +1 -1
  409. package/esm/core/index.js.map +1 -1
  410. package/esm/data/transforms/correlation-center.d.ts +4 -0
  411. package/esm/data/transforms/correlation-center.js +14 -0
  412. package/esm/data/transforms/correlation-center.js.map +1 -0
  413. package/esm/data/transforms/correlation.d.ts +17 -0
  414. package/esm/data/transforms/correlation.js +49 -0
  415. package/esm/data/transforms/correlation.js.map +1 -0
  416. package/esm/interaction/dimension-trigger.js +1 -2
  417. package/esm/interaction/interaction.js +2 -1
  418. package/esm/interaction/zoom/zoomable.d.ts +20 -12
  419. package/esm/interaction/zoom/zoomable.js +96 -74
  420. package/esm/interaction/zoom/zoomable.js.map +1 -1
  421. package/esm/layout/base-layout.d.ts +7 -1
  422. package/esm/layout/base-layout.js +24 -10
  423. package/esm/layout/base-layout.js.map +1 -1
  424. package/esm/layout/layout3d/index.d.ts +6 -0
  425. package/esm/layout/layout3d/index.js +14 -0
  426. package/esm/layout/layout3d/index.js.map +1 -1
  427. package/esm/mark/arc-3d.js +1 -1
  428. package/esm/mark/index.d.ts +3 -2
  429. package/esm/mark/index.js +3 -1
  430. package/esm/mark/index.js.map +1 -1
  431. package/esm/mark/interface/type.d.ts +1 -0
  432. package/esm/mark/interface/type.js +1 -1
  433. package/esm/mark/interface/type.js.map +1 -1
  434. package/esm/mark/ripple.d.ts +12 -0
  435. package/esm/mark/ripple.js +27 -0
  436. package/esm/mark/ripple.js.map +1 -0
  437. package/esm/model/base-model.d.ts +0 -3
  438. package/esm/model/base-model.js +0 -3
  439. package/esm/model/base-model.js.map +1 -1
  440. package/esm/model/interface.d.ts +0 -2
  441. package/esm/model/interface.js.map +1 -1
  442. package/esm/series/area/area.js +4 -3
  443. package/esm/series/area/area.js.map +1 -1
  444. package/esm/series/bar/bar.d.ts +1 -0
  445. package/esm/series/bar/bar.js +4 -2
  446. package/esm/series/bar/bar.js.map +1 -1
  447. package/esm/series/base/base-series.js +5 -7
  448. package/esm/series/base/base-series.js.map +1 -1
  449. package/esm/series/box-plot/box-plot.js +10 -8
  450. package/esm/series/box-plot/box-plot.js.map +1 -1
  451. package/esm/series/circle-packing/circle-packing.js +7 -6
  452. package/esm/series/circle-packing/circle-packing.js.map +1 -1
  453. package/esm/series/correlation/animation.d.ts +8 -0
  454. package/esm/series/correlation/animation.js +16 -0
  455. package/esm/series/correlation/animation.js.map +1 -0
  456. package/esm/series/correlation/constant.d.ts +2 -0
  457. package/esm/series/correlation/constant.js +25 -0
  458. package/esm/series/correlation/constant.js.map +1 -0
  459. package/esm/series/correlation/correlation.d.ts +57 -0
  460. package/esm/series/correlation/correlation.js +237 -0
  461. package/esm/series/correlation/correlation.js.map +1 -0
  462. package/esm/series/correlation/interface.d.ts +37 -0
  463. package/esm/series/correlation/interface.js +2 -0
  464. package/esm/series/correlation/interface.js.map +1 -0
  465. package/esm/series/dot/dot.js +2 -3
  466. package/esm/series/dot/dot.js.map +1 -1
  467. package/esm/series/funnel/funnel.js +4 -5
  468. package/esm/series/funnel/funnel.js.map +1 -1
  469. package/esm/series/gauge/gauge-pointer.d.ts +1 -0
  470. package/esm/series/gauge/gauge-pointer.js +4 -2
  471. package/esm/series/gauge/gauge-pointer.js.map +1 -1
  472. package/esm/series/gauge/gauge.d.ts +1 -0
  473. package/esm/series/gauge/gauge.js +5 -3
  474. package/esm/series/gauge/gauge.js.map +1 -1
  475. package/esm/series/heatmap/heatmap.js +2 -4
  476. package/esm/series/heatmap/heatmap.js.map +1 -1
  477. package/esm/series/index.d.ts +4 -2
  478. package/esm/series/index.js +3 -1
  479. package/esm/series/index.js.map +1 -1
  480. package/esm/series/interface/series.d.ts +1 -1
  481. package/esm/series/interface/series.js.map +1 -1
  482. package/esm/series/interface/theme.d.ts +2 -0
  483. package/esm/series/interface/theme.js +4 -1
  484. package/esm/series/interface/theme.js.map +1 -1
  485. package/esm/series/interface/type.d.ts +7 -2
  486. package/esm/series/interface/type.js +4 -2
  487. package/esm/series/interface/type.js.map +1 -1
  488. package/esm/series/line/line.d.ts +1 -0
  489. package/esm/series/line/line.js +4 -0
  490. package/esm/series/line/line.js.map +1 -1
  491. package/esm/series/link/link.js +6 -5
  492. package/esm/series/link/link.js.map +1 -1
  493. package/esm/series/map/map.js +2 -3
  494. package/esm/series/map/map.js.map +1 -1
  495. package/esm/series/mixin/line-mixin.js +3 -5
  496. package/esm/series/mixin/line-mixin.js.map +1 -1
  497. package/esm/series/pie/interface.d.ts +2 -0
  498. package/esm/series/pie/interface.js.map +1 -1
  499. package/esm/series/pie/pie-3d.js +6 -6
  500. package/esm/series/pie/pie-3d.js.map +1 -1
  501. package/esm/series/pie/pie.d.ts +2 -0
  502. package/esm/series/pie/pie.js +16 -2
  503. package/esm/series/pie/pie.js.map +1 -1
  504. package/esm/series/progress/circular/circular.d.ts +1 -0
  505. package/esm/series/progress/circular/circular.js +5 -2
  506. package/esm/series/progress/circular/circular.js.map +1 -1
  507. package/esm/series/progress/linear/linear.js +5 -5
  508. package/esm/series/progress/linear/linear.js.map +1 -1
  509. package/esm/series/radar/animation.js.map +1 -1
  510. package/esm/series/radar/radar.d.ts +1 -0
  511. package/esm/series/radar/radar.js +6 -2
  512. package/esm/series/radar/radar.js.map +1 -1
  513. package/esm/series/range-area/range-area.js +2 -2
  514. package/esm/series/range-area/range-area.js.map +1 -1
  515. package/esm/series/range-column/range-column.d.ts +1 -0
  516. package/esm/series/range-column/range-column.js +10 -11
  517. package/esm/series/range-column/range-column.js.map +1 -1
  518. package/esm/series/rose/rose.d.ts +1 -0
  519. package/esm/series/rose/rose.js +4 -2
  520. package/esm/series/rose/rose.js.map +1 -1
  521. package/esm/series/sankey/sankey.js +7 -9
  522. package/esm/series/sankey/sankey.js.map +1 -1
  523. package/esm/series/scatter/scatter.d.ts +1 -0
  524. package/esm/series/scatter/scatter.js +4 -3
  525. package/esm/series/scatter/scatter.js.map +1 -1
  526. package/esm/series/sunburst/sunburst.js +4 -6
  527. package/esm/series/sunburst/sunburst.js.map +1 -1
  528. package/esm/series/treemap/treemap.js +10 -9
  529. package/esm/series/treemap/treemap.js.map +1 -1
  530. package/esm/series/word-cloud/base.d.ts +1 -0
  531. package/esm/series/word-cloud/base.js +6 -3
  532. package/esm/series/word-cloud/base.js.map +1 -1
  533. package/esm/series/word-cloud/word-cloud-3d.js +2 -3
  534. package/esm/series/word-cloud/word-cloud-3d.js.map +1 -1
  535. package/esm/theme/builtin/common/component/axis/cartesian-axis.js +28 -2
  536. package/esm/theme/builtin/common/component/axis/cartesian-axis.js.map +1 -1
  537. package/esm/theme/builtin/common/component/indicator.js +1 -1
  538. package/esm/theme/builtin/common/component/indicator.js.map +1 -1
  539. package/esm/theme/builtin/common/component/legend/continuous.js +1 -1
  540. package/esm/theme/builtin/common/component/legend/continuous.js.map +1 -1
  541. package/esm/theme/builtin/common/component/legend/discrete-legend.js +1 -1
  542. package/esm/theme/builtin/common/component/legend/discrete-legend.js.map +1 -1
  543. package/esm/theme/builtin/common/component/mark-area.js +12 -10
  544. package/esm/theme/builtin/common/component/mark-area.js.map +1 -1
  545. package/esm/theme/builtin/common/component/mark-line.js +19 -12
  546. package/esm/theme/builtin/common/component/mark-line.js.map +1 -1
  547. package/esm/theme/builtin/common/component/mark-point.js +8 -2
  548. package/esm/theme/builtin/common/component/mark-point.js.map +1 -1
  549. package/esm/theme/builtin/common/component/poptip.js +1 -1
  550. package/esm/theme/builtin/common/component/poptip.js.map +1 -1
  551. package/esm/theme/builtin/common/component/title.js +1 -1
  552. package/esm/theme/builtin/common/component/title.js.map +1 -1
  553. package/esm/theme/builtin/common/component/tooltip.js +2 -2
  554. package/esm/theme/builtin/common/component/tooltip.js.map +1 -1
  555. package/esm/theme/builtin/common/component/total-label.js +1 -1
  556. package/esm/theme/builtin/common/component/total-label.js.map +1 -1
  557. package/esm/theme/builtin/common/series/area.js +4 -1
  558. package/esm/theme/builtin/common/series/area.js.map +1 -1
  559. package/esm/theme/builtin/common/series/bar.js +4 -1
  560. package/esm/theme/builtin/common/series/bar.js.map +1 -1
  561. package/esm/theme/builtin/common/series/circle-packing.js +4 -1
  562. package/esm/theme/builtin/common/series/circle-packing.js.map +1 -1
  563. package/esm/theme/builtin/common/series/correlation.d.ts +2 -0
  564. package/esm/theme/builtin/common/series/correlation.js +18 -0
  565. package/esm/theme/builtin/common/series/correlation.js.map +1 -0
  566. package/esm/theme/builtin/common/series/funnel.js +12 -3
  567. package/esm/theme/builtin/common/series/funnel.js.map +1 -1
  568. package/esm/theme/builtin/common/series/index.js +4 -1
  569. package/esm/theme/builtin/common/series/index.js.map +1 -1
  570. package/esm/theme/builtin/common/series/line.js +4 -1
  571. package/esm/theme/builtin/common/series/line.js.map +1 -1
  572. package/esm/theme/builtin/common/series/map.js +4 -1
  573. package/esm/theme/builtin/common/series/map.js.map +1 -1
  574. package/esm/theme/builtin/common/series/pie.js +9 -1
  575. package/esm/theme/builtin/common/series/pie.js.map +1 -1
  576. package/esm/theme/builtin/common/series/radar.js +4 -1
  577. package/esm/theme/builtin/common/series/radar.js.map +1 -1
  578. package/esm/theme/builtin/common/series/rose.js +5 -1
  579. package/esm/theme/builtin/common/series/rose.js.map +1 -1
  580. package/esm/theme/builtin/common/series/scatter.js +4 -1
  581. package/esm/theme/builtin/common/series/scatter.js.map +1 -1
  582. package/esm/theme/builtin/common/series/treemap.js +4 -1
  583. package/esm/theme/builtin/common/series/treemap.js.map +1 -1
  584. package/esm/theme/builtin/dark/color-scheme.js +1 -1
  585. package/esm/theme/builtin/dark/color-scheme.js.map +1 -1
  586. package/esm/theme/builtin/light/color-scheme.js +3 -3
  587. package/esm/theme/builtin/light/color-scheme.js.map +1 -1
  588. package/esm/theme/color-scheme/builtin/interface.d.ts +1 -1
  589. package/esm/theme/color-scheme/builtin/interface.js.map +1 -1
  590. package/esm/theme/color-scheme/interface.d.ts +1 -1
  591. package/esm/theme/color-scheme/interface.js.map +1 -1
  592. package/esm/theme/color-scheme/util.js +4 -7
  593. package/esm/theme/color-scheme/util.js.map +1 -1
  594. package/esm/typings/event.d.ts +1 -0
  595. package/esm/typings/event.js +2 -0
  596. package/esm/typings/event.js.map +1 -0
  597. package/esm/typings/spec/chart.d.ts +2 -0
  598. package/esm/typings/spec/chart.js.map +1 -1
  599. package/esm/typings/spec/common.d.ts +8 -6
  600. package/esm/typings/spec/common.js.map +1 -1
  601. package/esm/typings/tooltip/line.d.ts +1 -0
  602. package/esm/typings/tooltip/line.js.map +1 -1
  603. package/esm/typings/visual.d.ts +4 -0
  604. package/esm/typings/visual.js.map +1 -1
  605. package/esm/vchart-all.js +4 -2
  606. package/esm/vchart-all.js.map +1 -1
  607. package/package.json +11 -8
@@ -0,0 +1,49 @@
1
+ import { isArray } from "@visactor/vutils";
2
+
3
+ import { isNil, isNumber, degreeToRadian } from "@visactor/vutils";
4
+
5
+ import { field as getFieldAccessor, extent, toPercent } from "@visactor/vgrammar-util";
6
+
7
+ import { CORRELATION_X, CORRELATION_Y, CORRELATION_SIZE } from "../../constant";
8
+
9
+ export const correlation = (data, options) => {
10
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
11
+ if (!data || !(null == options ? void 0 : options.view) || !isArray(data)) return data;
12
+ const viewBox = options.view();
13
+ if (viewBox.x1 - viewBox.x0 == 0 || viewBox.y1 - viewBox.y0 == 0 || viewBox.x1 - viewBox.x0 == -1 / 0 || viewBox.x1 - viewBox.x0 == 1 / 0 || viewBox.y1 - viewBox.y0 == -1 / 0 || viewBox.y1 - viewBox.y0 == 1 / 0) return data;
14
+ const startAngle = degreeToRadian(null !== (_a = options.startAngle) && void 0 !== _a ? _a : -90), endAngle = degreeToRadian(null !== (_b = options.endAngle) && void 0 !== _b ? _b : 270), maxRadius = Math.max((viewBox.x1 - viewBox.x0) / 2, (viewBox.y1 - viewBox.y0) / 2), innerRadius = toPercent(null !== (_c = options.innerRadius) && void 0 !== _c ? _c : 0, maxRadius), outerRadius = toPercent(options.outerRadius, maxRadius), center = [ isNumber(null === (_d = options.center) || void 0 === _d ? void 0 : _d[0]) ? options.center[0] : viewBox.x0 + toPercent(null !== (_f = null === (_e = options.center) || void 0 === _e ? void 0 : _e[0]) && void 0 !== _f ? _f : "50%", viewBox.x1 - viewBox.x0), isNumber(null === (_g = options.center) || void 0 === _g ? void 0 : _g[1]) ? options.center[1] : viewBox.y0 + toPercent(null !== (_j = null === (_h = options.center) || void 0 === _h ? void 0 : _h[1]) && void 0 !== _j ? _j : "50%", viewBox.y1 - viewBox.y0) ], fieldAccessor = getFieldAccessor(options.field), values = data.map(fieldAccessor), [min, max] = extent(values), radiusScale = min === max ? val => (innerRadius + outerRadius) / 2 : val => innerRadius + (outerRadius - innerRadius) * (val - min) / (max - min), sizeAccessor = isNil(options.radiusField) ? fieldAccessor : getFieldAccessor(options.radiusField), defaultSize = null !== (_l = null === (_k = null == options ? void 0 : options.radiusRange) || void 0 === _k ? void 0 : _k[1]) && void 0 !== _l ? _l : 5;
15
+ let sizeScale = datum => defaultSize;
16
+ if (sizeAccessor) {
17
+ const [minSize, maxSize] = sizeAccessor !== fieldAccessor ? extent(data.map(sizeAccessor)) : [ min, max ], minR = null !== (_o = null === (_m = options.radiusRange) || void 0 === _m ? void 0 : _m[0]) && void 0 !== _o ? _o : 5, maxR = null !== (_q = null === (_p = options.radiusRange) || void 0 === _p ? void 0 : _p[1]) && void 0 !== _q ? _q : 5;
18
+ minSize !== maxSize && (sizeScale = datum => minR + (maxR - minR) * (sizeAccessor(datum) - minSize) / (maxSize - minSize));
19
+ }
20
+ const minAngle = Math.min(startAngle, endAngle), maxAngle = Math.max(startAngle, endAngle), angles = getPartialAngles(minAngle, maxAngle, data.length), res = [], searchAngle = (maxAngle - minAngle) / 60;
21
+ return data.forEach(((datum, index) => {
22
+ const radius = radiusScale(values[index]), size = sizeScale(datum);
23
+ let x, y, angle = angles[index];
24
+ for (let i = 0; i < 60 && (x = center[0] + radius * Math.cos(angle), y = center[1] + radius * Math.sin(angle),
25
+ hasOverlap({
26
+ x: x,
27
+ y: y,
28
+ size: size
29
+ }, res) || x - size < viewBox.x0 || x + size > viewBox.x1 || y - size < viewBox.y0 || y + size > viewBox.y1); i++) i < 59 && (angle += searchAngle,
30
+ angle > maxAngle ? angle = minAngle : angle < minAngle && (angle = maxAngle));
31
+ res.push(Object.assign({
32
+ [CORRELATION_X]: x,
33
+ [CORRELATION_Y]: y,
34
+ [CORRELATION_SIZE]: size
35
+ }, datum));
36
+ })), res;
37
+ };
38
+
39
+ const getPartialAngles = (minAngle, maxAngle, count) => {
40
+ let offsetAngle = 0, stepCount = Math.max(Math.ceil(2 * (maxAngle - minAngle) / Math.PI), 2), stepAngle = (maxAngle - minAngle) / stepCount, stepIndex = 0, stepSign = 1, i = 0, j = 0;
41
+ const res = [];
42
+ let startAngle = minAngle;
43
+ for (;i < count; ) j < stepCount && (res.push(startAngle + (j % 2 ? Math.floor(j / 2) + Math.floor(stepCount / 2) : j / 2) * stepAngle * stepSign),
44
+ j++), i++, j === stepCount && (j = 0, stepIndex += 1, stepSign *= -1, 0 === offsetAngle ? offsetAngle = stepAngle / 2 : offsetAngle /= 2,
45
+ startAngle = -1 === stepSign ? maxAngle - offsetAngle : minAngle + offsetAngle,
46
+ stepIndex >= 2 && (stepAngle /= 2, stepCount *= 2));
47
+ return res;
48
+ }, hasOverlap = (item, arr) => !(!arr || !arr.length) && arr.some((entry => Math.pow(item.x - entry.x, 2) + Math.pow(item.y - entry.y, 2) < Math.pow(item.size + entry.size, 2)));
49
+ //# sourceMappingURL=correlation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/data/transforms/correlation.ts"],"names":[],"mappings":"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","file":"correlation.js","sourcesContent":["import { isArray } from '@visactor/vutils';\nimport { isNil, isNumber, degreeToRadian } from '@visactor/vutils';\nimport { field as getFieldAccessor, extent, toPercent } from '@visactor/vgrammar-util';\nimport { CORRELATION_X, CORRELATION_Y, CORRELATION_SIZE } from '../../constant';\n\nexport interface ICorrelationOpt {\n field: string;\n radiusField?: string;\n radiusRange?: [number, number];\n center?: [string | number, string | number];\n startAngle?: number;\n endAngle?: number;\n innerRadius?: string | number;\n outerRadius?: string | number;\n}\n\nexport interface CircularRelationItem {\n x: number;\n y: number;\n size: number;\n datum: any;\n}\n\nexport const correlation = (data: any, options: any) => {\n if (!data || !options?.view || !isArray(data)) {\n return data;\n }\n\n const viewBox = options.view();\n\n if (\n viewBox.x1 - viewBox.x0 === 0 ||\n viewBox.y1 - viewBox.y0 === 0 ||\n viewBox.x1 - viewBox.x0 === -Infinity ||\n viewBox.x1 - viewBox.x0 === Infinity ||\n viewBox.y1 - viewBox.y0 === -Infinity ||\n viewBox.y1 - viewBox.y0 === Infinity\n ) {\n return data;\n }\n\n const startAngle = degreeToRadian(options.startAngle ?? -90);\n const endAngle = degreeToRadian(options.endAngle ?? 270);\n const maxRadius = Math.max((viewBox.x1 - viewBox.x0) / 2, (viewBox.y1 - viewBox.y0) / 2);\n const innerRadius = toPercent(options.innerRadius ?? 0, maxRadius);\n const outerRadius = toPercent(options.outerRadius, maxRadius);\n\n const center = [\n isNumber(options.center?.[0])\n ? options.center[0]\n : viewBox.x0 + toPercent(options.center?.[0] ?? '50%', viewBox.x1 - viewBox.x0),\n isNumber(options.center?.[1])\n ? options.center[1]\n : viewBox.y0 + toPercent(options.center?.[1] ?? '50%', viewBox.y1 - viewBox.y0)\n ] as [number, number];\n const fieldAccessor = getFieldAccessor(options.field);\n const values = data.map(fieldAccessor);\n const [min, max] = extent(values);\n const radiusScale =\n min === max\n ? (val: number) => (innerRadius + outerRadius) / 2\n : (val: number) => innerRadius + ((outerRadius - innerRadius) * (val - min)) / (max - min);\n\n const sizeAccessor = !isNil(options.radiusField) ? getFieldAccessor(options.radiusField) : fieldAccessor;\n const defaultSize = options?.radiusRange?.[1] ?? 5;\n let sizeScale = (datum: any) => defaultSize;\n\n if (sizeAccessor) {\n const [minSize, maxSize] = sizeAccessor !== fieldAccessor ? extent(data.map(sizeAccessor)) : [min, max];\n const minR = options.radiusRange?.[0] ?? 5;\n const maxR = options.radiusRange?.[1] ?? 5;\n\n if (minSize !== maxSize) {\n sizeScale = (datum: any) => minR + ((maxR - minR) * (sizeAccessor(datum) - minSize)) / (maxSize - minSize);\n }\n }\n\n const minAngle = Math.min(startAngle, endAngle);\n const maxAngle = Math.max(startAngle, endAngle);\n const angles = getPartialAngles(minAngle, maxAngle, data.length);\n\n const res: CircularRelationItem[] = [];\n const searchStep = 60;\n const searchAngle = (maxAngle - minAngle) / searchStep;\n\n data.forEach((datum, index) => {\n const radius = radiusScale(values[index] as number);\n const size = sizeScale(datum);\n let x: number;\n let y: number;\n let angle = angles[index];\n\n for (let i = 0; i < searchStep; i++) {\n x = center[0] + radius * Math.cos(angle);\n y = center[1] + radius * Math.sin(angle);\n\n if (\n hasOverlap({ x, y, size }, res) ||\n x - size < viewBox.x0 ||\n x + size > viewBox.x1 ||\n y - size < viewBox.y0 ||\n y + size > viewBox.y1\n ) {\n if (i < searchStep - 1) {\n angle += searchAngle;\n\n if (angle > maxAngle) {\n angle = minAngle;\n } else if (angle < minAngle) {\n angle = maxAngle;\n }\n }\n continue;\n } else {\n break;\n }\n }\n\n res.push({ [CORRELATION_X]: x, [CORRELATION_Y]: y, [CORRELATION_SIZE]: size, ...datum });\n });\n return res;\n};\n\nconst getPartialAngles = (minAngle: number, maxAngle: number, count: number) => {\n let offsetAngle = 0;\n let stepCount = Math.max(Math.ceil((2 * (maxAngle - minAngle)) / Math.PI), 2);\n let stepAngle = (maxAngle - minAngle) / stepCount;\n let stepIndex = 0;\n let stepSign = 1;\n let i = 0;\n let j = 0;\n const res: number[] = [];\n let startAngle = minAngle;\n\n while (i < count) {\n if (j < stepCount) {\n res.push(startAngle + (j % 2 ? Math.floor(j / 2) + Math.floor(stepCount / 2) : j / 2) * stepAngle * stepSign);\n j++;\n }\n\n i++;\n\n if (j === stepCount) {\n j = 0;\n stepIndex += 1;\n stepSign *= -1;\n\n if (offsetAngle === 0) {\n offsetAngle = stepAngle / 2;\n } else {\n offsetAngle /= 2;\n }\n startAngle = stepSign === -1 ? maxAngle - offsetAngle : minAngle + offsetAngle;\n\n if (stepIndex >= 2) {\n stepAngle /= 2;\n stepCount *= 2;\n }\n }\n }\n\n return res;\n};\n\nconst hasOverlap = (item: Omit<CircularRelationItem, 'datum'>, arr: CircularRelationItem[]) => {\n if (!arr || !arr.length) {\n return false;\n }\n\n return arr.some(entry => {\n return Math.pow(item.x - entry.x, 2) + Math.pow(item.y - entry.y, 2) < Math.pow(item.size + entry.size, 2);\n });\n};\n"]}
@@ -90,5 +90,4 @@ export class DimensionTrigger {
90
90
  }
91
91
  return !0;
92
92
  }
93
- }
94
- //# sourceMappingURL=dimension-trigger.js.map
93
+ }
@@ -75,4 +75,5 @@ export class Interaction {
75
75
  }));
76
76
  })));
77
77
  }
78
- }
78
+ }
79
+ //# sourceMappingURL=interaction.js.map
@@ -2,6 +2,12 @@ import type { BaseEventParams, ExtendEventParam, IEvent } from '../../event/inte
2
2
  import type { IRegion } from '../../region/interface';
3
3
  import type { RenderMode } from '../../typings/spec';
4
4
  import type { ISeries } from '../../series/interface';
5
+ import type { IDelayType } from '../../typings/event';
6
+ export interface ITriggerOption {
7
+ delayType: IDelayType;
8
+ delayTime: number;
9
+ realTime: boolean;
10
+ }
5
11
  export interface IZoomEventOptions {
6
12
  shouldZoom?: boolean;
7
13
  zoomCallback?: (params: {
@@ -26,7 +32,7 @@ export interface IZoomable {
26
32
  zoomDelta: number;
27
33
  zoomX: number;
28
34
  zoomY: number;
29
- }, e: BaseEventParams['event']) => void) => void;
35
+ }, e: BaseEventParams['event']) => void, option?: ITriggerOption) => void;
30
36
  initScrollEventOfSeries: (s: ISeries, callback?: (params: {
31
37
  scrollX: number;
32
38
  scrollY: number;
@@ -34,9 +40,9 @@ export interface IZoomable {
34
40
  initScrollEventOfRegions: (regions: IRegion[], filter?: (s: ISeries) => boolean, callback?: (params: {
35
41
  scrollX: number;
36
42
  scrollY: number;
37
- }, e: BaseEventParams['event']) => void) => void;
38
- initDragEventOfSeries: (s: ISeries, callback?: (delta: [number, number], e: BaseEventParams['event']) => void) => any;
39
- initDragEventOfRegions: (regions: IRegion[], filter?: (s: ISeries) => boolean, callback?: (delta: [number, number], e: BaseEventParams['event']) => void) => void;
43
+ }, e: BaseEventParams['event']) => void, option?: ITriggerOption) => void;
44
+ initDragEventOfSeries: (s: ISeries, callback?: (delta: [number, number], e: BaseEventParams['event']) => void, option?: ITriggerOption) => any;
45
+ initDragEventOfRegions: (regions: IRegion[], filter?: (s: ISeries) => boolean, callback?: (delta: [number, number], e: BaseEventParams['event']) => void, option?: ITriggerOption) => void;
40
46
  }
41
47
  export declare class Zoomable implements IZoomable {
42
48
  private _clickEnable;
@@ -45,28 +51,30 @@ export declare class Zoomable implements IZoomable {
45
51
  private _renderMode;
46
52
  initZoomable(evt: IEvent, mode?: RenderMode): void;
47
53
  private _getTriggerEvent;
54
+ private _zoomEventDispatch;
48
55
  private _bindZoomEventAsRegion;
49
56
  initZoomEventOfSeries(s: ISeries, callback?: (params: {
50
57
  zoomDelta: number;
51
58
  zoomX: number;
52
59
  zoomY: number;
53
- }, e: BaseEventParams['event']) => void): void;
60
+ }, e: BaseEventParams['event']) => void, option?: ITriggerOption): void;
54
61
  initZoomEventOfRegions(regions: IRegion[], filter?: (s: ISeries) => boolean, callback?: (params: {
55
62
  zoomDelta: number;
56
63
  zoomX: number;
57
64
  zoomY: number;
58
- }, e: BaseEventParams['event']) => void): void;
65
+ }, e: BaseEventParams['event']) => void, option?: ITriggerOption): void;
66
+ private _scrollEventDispatch;
67
+ private _bindScrollEventAsRegion;
59
68
  initScrollEventOfSeries(s: ISeries, callback?: (params: {
60
69
  scrollX: number;
61
70
  scrollY: number;
62
- }, e: BaseEventParams['event']) => void): void;
71
+ }, e: BaseEventParams['event']) => void, option?: ITriggerOption): void;
63
72
  initScrollEventOfRegions(regions: IRegion[], filter?: (s: ISeries) => boolean, callback?: (params: {
64
73
  scrollX: number;
65
74
  scrollY: number;
66
- }, e: BaseEventParams['event']) => void): void;
67
- private _bindScrollEventAsRegion;
75
+ }, e: BaseEventParams['event']) => void, option?: ITriggerOption): void;
68
76
  private _bindDragEventAsRegion;
69
- initDragEventOfSeries(s: ISeries, callback?: (delta: [number, number], e: BaseEventParams['event']) => void): void;
70
- initDragEventOfRegions(regions: IRegion[], filter?: (s: ISeries) => boolean, callback?: (delta: [number, number], e: BaseEventParams['event']) => void): void;
71
- protected _handleDrag(params: ExtendEventParam, callback?: (delta: [number, number], e: BaseEventParams['event']) => void): void;
77
+ initDragEventOfSeries(s: ISeries, callback?: (delta: [number, number], e: BaseEventParams['event']) => void, option?: ITriggerOption): void;
78
+ initDragEventOfRegions(regions: IRegion[], filter?: (s: ISeries) => boolean, callback?: (delta: [number, number], e: BaseEventParams['event']) => void, option?: ITriggerOption): void;
79
+ protected _handleDrag(params: ExtendEventParam, callback?: (delta: [number, number], e: BaseEventParams['event']) => void, option?: ITriggerOption): void;
72
80
  }
@@ -1,4 +1,4 @@
1
- import { isNil } from "@visactor/vutils";
1
+ import { debounce, isNil, throttle } from "@visactor/vutils";
2
2
 
3
3
  import { RenderModeEnum } from "../../typings/spec";
4
4
 
@@ -8,6 +8,11 @@ import { isPointInRect } from "../../util";
8
8
 
9
9
  import { Event_Bubble_Level, Event_Source_Type } from "../../constant";
10
10
 
11
+ const delayMap = {
12
+ debounce: debounce,
13
+ throttle: throttle
14
+ };
15
+
11
16
  export class Zoomable {
12
17
  initZoomable(evt, mode = RenderModeEnum["desktop-browser"]) {
13
18
  this._eventObj = evt, this._renderMode = mode, defaultTriggerEvent[this._renderMode] && (this._clickEnable = !0,
@@ -16,87 +21,97 @@ export class Zoomable {
16
21
  _getTriggerEvent(type) {
17
22
  return defaultTriggerEvent[this._renderMode][type];
18
23
  }
19
- _bindZoomEventAsRegion(eventObj, regionOrSeries, callback) {
24
+ _zoomEventDispatch(params, regionOrSeries, callback) {
25
+ if (!params.event) return;
26
+ const event = params.event.clone();
27
+ this._zoomableTrigger.parserZoomEvent(event);
28
+ const {zoomDelta: zoomDelta, zoomX: zoomX, zoomY: zoomY} = event;
29
+ isNil(zoomDelta) || isPointInRect({
30
+ x: zoomX,
31
+ y: zoomY
32
+ }, Object.assign(Object.assign({}, regionOrSeries.getLayoutRect()), regionOrSeries.getLayoutStartPoint())) && (this._clickEnable = !1,
33
+ callback && callback({
34
+ zoomDelta: zoomDelta,
35
+ zoomX: zoomX,
36
+ zoomY: zoomY
37
+ }, event), this._eventObj.emit("zoom", {
38
+ scale: event.zoomDelta,
39
+ scaleCenter: {
40
+ x: event.zoomX,
41
+ y: event.zoomY
42
+ },
43
+ model: this
44
+ }));
45
+ }
46
+ _bindZoomEventAsRegion(eventObj, regionOrSeries, callback, option) {
47
+ var _a, _b;
48
+ const delayType = null !== (_a = null == option ? void 0 : option.delayType) && void 0 !== _a ? _a : "throttle", delayTime = null !== (_b = null == option ? void 0 : option.delayTime) && void 0 !== _b ? _b : 0;
20
49
  eventObj.on(this._getTriggerEvent("scrollEnd"), {
21
50
  level: Event_Bubble_Level.chart,
22
51
  consume: !1
23
- }, (params => {
52
+ }, delayMap[delayType]((params => {
24
53
  this._zoomableTrigger.clearZoom();
25
- })), eventObj.on(this._getTriggerEvent("scroll"), {
54
+ }), delayTime)), eventObj.on(this._getTriggerEvent("scroll"), {
26
55
  level: Event_Bubble_Level.chart,
27
56
  consume: !0
28
- }, (params => {
29
- if (!params.event) return;
30
- const event = params.event.clone();
31
- this._zoomableTrigger.parserZoomEvent(event);
32
- const {zoomDelta: zoomDelta, zoomX: zoomX, zoomY: zoomY} = event;
33
- isNil(zoomDelta) || isPointInRect({
34
- x: zoomX,
35
- y: zoomY
36
- }, Object.assign(Object.assign({}, regionOrSeries.getLayoutRect()), regionOrSeries.getLayoutStartPoint())) && (this._clickEnable = !1,
37
- callback && callback({
38
- zoomDelta: zoomDelta,
39
- zoomX: zoomX,
40
- zoomY: zoomY
41
- }, event), this._eventObj.emit("zoom", {
42
- scale: event.zoomDelta,
43
- scaleCenter: {
44
- x: event.zoomX,
45
- y: event.zoomY
46
- },
47
- model: this
48
- }));
49
- }));
57
+ }, delayMap[delayType]((params => {
58
+ this._zoomEventDispatch(params, regionOrSeries, callback);
59
+ }), delayTime));
50
60
  }
51
- initZoomEventOfSeries(s, callback) {
52
- defaultTriggerEvent[this._renderMode] && this._bindZoomEventAsRegion(s.event, s, callback);
61
+ initZoomEventOfSeries(s, callback, option) {
62
+ defaultTriggerEvent[this._renderMode] && this._bindZoomEventAsRegion(s.event, s, callback, option);
53
63
  }
54
- initZoomEventOfRegions(regions, filter, callback) {
64
+ initZoomEventOfRegions(regions, filter, callback, option) {
55
65
  defaultTriggerEvent[this._renderMode] && regions.forEach((r => {
56
66
  filter ? r.getSeries().forEach((s => {
57
- filter(s) && this._bindZoomEventAsRegion(s.event, s, callback);
58
- })) : this._bindZoomEventAsRegion(this._eventObj, r, callback);
67
+ filter(s) && this._bindZoomEventAsRegion(s.event, s, callback, option);
68
+ })) : this._bindZoomEventAsRegion(this._eventObj, r, callback, option);
59
69
  }));
60
70
  }
61
- initScrollEventOfSeries(s, callback) {
62
- defaultTriggerEvent[this._renderMode] && this._bindScrollEventAsRegion(s.event, s, callback);
63
- }
64
- initScrollEventOfRegions(regions, filter, callback) {
65
- defaultTriggerEvent[this._renderMode] && regions.forEach((r => {
66
- filter ? r.getSeries().forEach((s => {
67
- filter(s) && this._bindScrollEventAsRegion(s.event, s, callback);
68
- })) : this._bindScrollEventAsRegion(this._eventObj, r, callback);
71
+ _scrollEventDispatch(params, regionOrSeries, callback) {
72
+ if (!params.event) return;
73
+ const {event: event} = params;
74
+ this._zoomableTrigger.parserScrollEvent(event);
75
+ const {scrollX: scrollX, scrollY: scrollY} = event;
76
+ isNil(scrollX) && isNil(scrollY) || isPointInRect({
77
+ x: event.canvasX,
78
+ y: event.canvasY
79
+ }, Object.assign(Object.assign({}, regionOrSeries.getLayoutRect()), regionOrSeries.getLayoutStartPoint())) && (this._clickEnable = !1,
80
+ callback && callback({
81
+ scrollX: scrollX,
82
+ scrollY: scrollY
83
+ }, event), this._eventObj.emit("scroll", {
84
+ scrollX: scrollX,
85
+ scrollY: scrollY,
86
+ model: this
69
87
  }));
70
88
  }
71
- _bindScrollEventAsRegion(eventObj, regionOrSeries, callback) {
89
+ _bindScrollEventAsRegion(eventObj, regionOrSeries, callback, option) {
90
+ var _a, _b;
91
+ const delayType = null !== (_a = null == option ? void 0 : option.delayType) && void 0 !== _a ? _a : "throttle", delayTime = null !== (_b = null == option ? void 0 : option.delayTime) && void 0 !== _b ? _b : 0;
72
92
  eventObj.on(this._getTriggerEvent("scrollEnd"), {
73
93
  level: Event_Bubble_Level.chart,
74
94
  consume: !1
75
- }, (params => {
95
+ }, delayMap[delayType]((params => {
76
96
  this._zoomableTrigger.clearScroll();
77
- })), eventObj.on(this._getTriggerEvent("scroll"), {
97
+ }), delayTime)), eventObj.on(this._getTriggerEvent("scroll"), {
78
98
  level: Event_Bubble_Level.chart,
79
99
  consume: !0
80
- }, (params => {
81
- if (!params.event) return;
82
- const {event: event} = params;
83
- this._zoomableTrigger.parserScrollEvent(event);
84
- const {scrollX: scrollX, scrollY: scrollY} = event;
85
- isNil(scrollX) && isNil(scrollY) || isPointInRect({
86
- x: event.canvasX,
87
- y: event.canvasY
88
- }, Object.assign(Object.assign({}, regionOrSeries.getLayoutRect()), regionOrSeries.getLayoutStartPoint())) && (this._clickEnable = !1,
89
- callback && callback({
90
- scrollX: scrollX,
91
- scrollY: scrollY
92
- }, event), this._eventObj.emit("scroll", {
93
- scrollX: scrollX,
94
- scrollY: scrollY,
95
- model: this
96
- }));
100
+ }, delayMap[delayType]((params => {
101
+ this._scrollEventDispatch(params, regionOrSeries, callback);
102
+ }), delayTime));
103
+ }
104
+ initScrollEventOfSeries(s, callback, option) {
105
+ defaultTriggerEvent[this._renderMode] && this._bindScrollEventAsRegion(s.event, s, callback, option);
106
+ }
107
+ initScrollEventOfRegions(regions, filter, callback, option) {
108
+ defaultTriggerEvent[this._renderMode] && regions.forEach((r => {
109
+ filter ? r.getSeries().forEach((s => {
110
+ filter(s) && this._bindScrollEventAsRegion(s.event, s, callback, option);
111
+ })) : this._bindScrollEventAsRegion(this._eventObj, r, callback, option);
97
112
  }));
98
113
  }
99
- _bindDragEventAsRegion(eventObj, regionOrSeries, callback) {
114
+ _bindDragEventAsRegion(eventObj, regionOrSeries, callback, option) {
100
115
  eventObj.on(this._getTriggerEvent("start"), {
101
116
  level: Event_Bubble_Level.chart
102
117
  }, (params => {
@@ -105,20 +120,20 @@ export class Zoomable {
105
120
  isPointInRect({
106
121
  x: event.canvasX,
107
122
  y: event.canvasY
108
- }, Object.assign(Object.assign({}, regionOrSeries.getLayoutRect()), regionOrSeries.getLayoutStartPoint())) && this._handleDrag(params, callback);
123
+ }, Object.assign(Object.assign({}, regionOrSeries.getLayoutRect()), regionOrSeries.getLayoutStartPoint())) && this._handleDrag(params, callback, option);
109
124
  })), eventObj.on("click", {
110
125
  level: Event_Bubble_Level.chart
111
126
  }, (() => !this._clickEnable));
112
127
  }
113
- initDragEventOfSeries(s, callback) {
128
+ initDragEventOfSeries(s, callback, option) {
114
129
  defaultTriggerEvent[this._renderMode] && s.event.on(this._getTriggerEvent("start"), {
115
130
  level: Event_Bubble_Level.model,
116
131
  filter: ({model: model}) => (null == model ? void 0 : model.id) === s.id
117
132
  }, (params => {
118
- this._handleDrag(params, callback);
133
+ this._handleDrag(params, callback, option);
119
134
  }));
120
135
  }
121
- initDragEventOfRegions(regions, filter, callback) {
136
+ initDragEventOfRegions(regions, filter, callback, option) {
122
137
  defaultTriggerEvent[this._renderMode] && regions.forEach((r => {
123
138
  filter ? r.getSeries().forEach((s => {
124
139
  filter(s) && (s.event.on(this._getTriggerEvent("start"), {
@@ -130,31 +145,38 @@ export class Zoomable {
130
145
  level: Event_Bubble_Level.model,
131
146
  filter: ({model: model}) => (null == model ? void 0 : model.id) === s.id
132
147
  }, (() => !this._clickEnable)));
133
- })) : this._bindDragEventAsRegion(this._eventObj, r, callback);
148
+ })) : this._bindDragEventAsRegion(this._eventObj, r, callback, option);
134
149
  }));
135
150
  }
136
- _handleDrag(params, callback) {
151
+ _handleDrag(params, callback, option) {
152
+ var _a, _b, _c;
137
153
  if (this._clickEnable = !0, !this._zoomableTrigger.parserDragEvent(params.event)) return;
138
- const move = this._getTriggerEvent("move"), end = this._getTriggerEvent("end"), event = params.event;
139
- let x = event.canvasX, y = event.canvasY;
140
- const mouseup = () => {
141
- this._zoomableTrigger.pointerId = null, this._eventObj.off(move, {
154
+ const delayType = null !== (_a = null == option ? void 0 : option.delayType) && void 0 !== _a ? _a : "throttle", delayTime = null !== (_b = null == option ? void 0 : option.delayTime) && void 0 !== _b ? _b : 0, realTime = null === (_c = null == option ? void 0 : option.realTime) || void 0 === _c || _c, move = this._getTriggerEvent("move"), end = this._getTriggerEvent("end"), event = params.event;
155
+ let moveX = event.canvasX, moveY = event.canvasY, upX = event.canvasX, upY = event.canvasY;
156
+ const mouseup = delayMap[delayType]((params => {
157
+ this._clickEnable = !1;
158
+ const event = params.event, delta = [ event.canvasX - upX, event.canvasY - upY ];
159
+ upX = event.canvasX, upY = event.canvasY, !realTime && callback && callback(delta, params.event),
160
+ this._eventObj.emit("panend", {
161
+ delta: delta,
162
+ model: this
163
+ }), this._zoomableTrigger.pointerId = null, this._eventObj.off(move, {
142
164
  level: Event_Bubble_Level.chart,
143
165
  source: Event_Source_Type.chart
144
166
  }, mousemove), this._eventObj.off(end, {
145
167
  level: Event_Bubble_Level.chart,
146
168
  source: Event_Source_Type.window
147
169
  }, mouseup);
148
- }, mousemove = params => {
170
+ }), delayTime), mousemove = delayMap[delayType]((params => {
149
171
  if (!this._zoomableTrigger.parserDragEvent(params.event)) return;
150
172
  this._clickEnable = !1;
151
- const event = params.event, delta = [ event.canvasX - x, event.canvasY - y ];
152
- x = event.canvasX, y = event.canvasY, callback && callback(delta, params.event),
173
+ const event = params.event, delta = [ event.canvasX - moveX, event.canvasY - moveY ];
174
+ moveX = event.canvasX, moveY = event.canvasY, realTime && callback && callback(delta, params.event),
153
175
  this._eventObj.emit("panmove", {
154
176
  delta: delta,
155
177
  model: this
156
178
  });
157
- };
179
+ }), delayTime);
158
180
  this._eventObj.on(move, {
159
181
  level: Event_Bubble_Level.chart,
160
182
  source: Event_Source_Type.chart
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/interaction/zoom/zoomable.ts"],"names":[],"mappings":"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","file":"zoomable.js","sourcesContent":["/* eslint-disable no-duplicate-imports */\nimport { isNil } from '@visactor/vutils';\nimport type { BaseEventParams, EventType, ExtendEventParam, IEvent } from '../../event/interface';\nimport type { IRegion } from '../../region/interface';\nimport type { RenderMode } from '../../typings/spec';\nimport { RenderModeEnum } from '../../typings/spec';\nimport { defaultTriggerEvent } from '../../component/common/trigger/config';\nimport type { IZoomTrigger } from '../../component/common/trigger/interface';\nimport { isPointInRect } from '../../util';\nimport type { ISeries } from '../../series/interface';\nimport { Event_Bubble_Level, Event_Source_Type } from '../../constant';\n\nexport interface IZoomEventOptions {\n shouldZoom?: boolean;\n zoomCallback?: (params: { zoomDelta: number; zoomX: number; zoomY: number }, e: BaseEventParams['event']) => void;\n shouldScroll?: boolean;\n scrollCallback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void;\n}\nexport interface IZoomable {\n initZoomable: (evt: IEvent, mode?: RenderMode) => void;\n initZoomEventOfSeries: (\n s: ISeries,\n callback?: (params: { zoomDelta: number; zoomX: number; zoomY: number }, e: BaseEventParams['event']) => void\n ) => any;\n initZoomEventOfRegions: (\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (params: { zoomDelta: number; zoomX: number; zoomY: number }, e: BaseEventParams['event']) => void\n ) => void;\n\n initScrollEventOfSeries: (\n s: ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void\n ) => any;\n initScrollEventOfRegions: (\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void\n ) => void;\n\n initDragEventOfSeries: (s: ISeries, callback?: (delta: [number, number], e: BaseEventParams['event']) => void) => any;\n initDragEventOfRegions: (\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void\n ) => void;\n}\n\nexport class Zoomable implements IZoomable {\n private _clickEnable: boolean;\n\n private _zoomableTrigger: IZoomTrigger;\n\n private _eventObj: IEvent;\n\n private _renderMode: RenderMode;\n\n initZoomable(evt: IEvent, mode: RenderMode = RenderModeEnum['desktop-browser']) {\n this._eventObj = evt;\n this._renderMode = mode;\n if (defaultTriggerEvent[this._renderMode]) {\n // hack 应该由事件系统做?或者事件系统有更好的方式处理这种交互冲突场景\n this._clickEnable = true;\n this._zoomableTrigger = new (this._getTriggerEvent('trigger') as any)();\n }\n }\n\n // event\n private _getTriggerEvent(type: string): EventType {\n return defaultTriggerEvent[this._renderMode][type];\n }\n\n private _bindZoomEventAsRegion(\n eventObj: IEvent,\n regionOrSeries: IRegion | ISeries,\n callback?: (params: { zoomDelta: number; zoomX: number; zoomY: number }, e: BaseEventParams['event']) => void\n ) {\n eventObj.on(this._getTriggerEvent('scrollEnd'), { level: Event_Bubble_Level.chart, consume: false }, params => {\n this._zoomableTrigger.clearZoom();\n });\n eventObj.on(this._getTriggerEvent('scroll'), { level: Event_Bubble_Level.chart, consume: true }, params => {\n if (!(params as BaseEventParams).event) {\n return;\n }\n const event = (params as BaseEventParams).event.clone();\n this._zoomableTrigger.parserZoomEvent(event);\n // FIXME: event类型目前不全\n const { zoomDelta, zoomX, zoomY } = event as any;\n if (isNil(zoomDelta)) {\n return;\n }\n if (\n !isPointInRect(\n {\n x: zoomX,\n y: zoomY\n },\n {\n ...regionOrSeries.getLayoutRect(),\n ...regionOrSeries.getLayoutStartPoint()\n }\n )\n ) {\n return;\n }\n this._clickEnable = false;\n\n if (callback) {\n // zoomDelta, zoomX, zoomY can be changed in the callback\n callback({ zoomDelta, zoomX, zoomY }, event);\n }\n\n this._eventObj.emit('zoom', {\n scale: event.zoomDelta,\n scaleCenter: { x: event.zoomX, y: event.zoomY },\n model: this\n } as unknown as ExtendEventParam);\n\n // this._eventObj.emit('scroll', {\n // scrollX: event.scrollX,\n // scrollY: event.scrollY,\n // model: this\n // } as unknown as ExtendEventParam);\n });\n }\n\n initZoomEventOfSeries(\n s: ISeries,\n callback?: (params: { zoomDelta: number; zoomX: number; zoomY: number }, e: BaseEventParams['event']) => void\n ) {\n if (defaultTriggerEvent[this._renderMode]) {\n this._bindZoomEventAsRegion(s.event, s, callback);\n }\n }\n\n initZoomEventOfRegions(\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (params: { zoomDelta: number; zoomX: number; zoomY: number }, e: BaseEventParams['event']) => void\n ) {\n if (defaultTriggerEvent[this._renderMode]) {\n regions.forEach(r => {\n if (filter) {\n r.getSeries().forEach(s => {\n if (filter(s)) {\n this._bindZoomEventAsRegion(s.event, s, callback);\n }\n });\n } else {\n this._bindZoomEventAsRegion(this._eventObj, r, callback);\n }\n });\n }\n }\n\n initScrollEventOfSeries(\n s: ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void\n ) {\n if (defaultTriggerEvent[this._renderMode]) {\n this._bindScrollEventAsRegion(s.event, s, callback);\n }\n }\n\n initScrollEventOfRegions(\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void\n ) {\n if (defaultTriggerEvent[this._renderMode]) {\n regions.forEach(r => {\n if (filter) {\n r.getSeries().forEach(s => {\n if (filter(s)) {\n this._bindScrollEventAsRegion(s.event, s, callback);\n }\n });\n } else {\n this._bindScrollEventAsRegion(this._eventObj, r, callback);\n }\n });\n }\n }\n\n private _bindScrollEventAsRegion(\n eventObj: IEvent,\n regionOrSeries: IRegion | ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void\n ) {\n eventObj.on(this._getTriggerEvent('scrollEnd'), { level: Event_Bubble_Level.chart, consume: false }, params => {\n this._zoomableTrigger.clearScroll();\n });\n eventObj.on(this._getTriggerEvent('scroll'), { level: Event_Bubble_Level.chart, consume: true }, params => {\n if (!(params as BaseEventParams).event) {\n return;\n }\n const { event } = params as BaseEventParams;\n this._zoomableTrigger.parserScrollEvent(event);\n // FIXME: event类型目前不全\n const { scrollX, scrollY } = event as any;\n if (isNil(scrollX) && isNil(scrollY)) {\n return;\n }\n if (\n !isPointInRect(\n {\n x: event.canvasX,\n y: event.canvasY\n },\n {\n ...regionOrSeries.getLayoutRect(),\n ...regionOrSeries.getLayoutStartPoint()\n }\n )\n ) {\n return;\n }\n this._clickEnable = false;\n\n if (callback) {\n callback({ scrollX, scrollY }, event);\n }\n\n this._eventObj.emit('scroll', {\n scrollX,\n scrollY,\n model: this\n } as unknown as ExtendEventParam);\n });\n }\n\n private _bindDragEventAsRegion(\n eventObj: IEvent,\n regionOrSeries: IRegion | ISeries,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void\n ) {\n eventObj.on(this._getTriggerEvent('start'), { level: Event_Bubble_Level.chart }, params => {\n if (!(params as BaseEventParams).event) {\n return;\n }\n\n const { event } = params as BaseEventParams;\n const shouldTrigger = isPointInRect(\n {\n x: event.canvasX,\n y: event.canvasY\n },\n {\n ...regionOrSeries.getLayoutRect(),\n ...regionOrSeries.getLayoutStartPoint()\n }\n );\n if (shouldTrigger) {\n this._handleDrag(params, callback);\n }\n });\n // click 事件需要在drag和zoom时被屏蔽\n // hack 应该由事件系统做?或者事件系统有更好的方式处理这种交互冲突场景\n eventObj.on('click', { level: Event_Bubble_Level.chart }, () => {\n return !this._clickEnable;\n });\n }\n\n initDragEventOfSeries(s: ISeries, callback?: (delta: [number, number], e: BaseEventParams['event']) => void) {\n if (defaultTriggerEvent[this._renderMode]) {\n s.event.on(\n this._getTriggerEvent('start'),\n { level: Event_Bubble_Level.model, filter: ({ model }) => model?.id === s.id },\n params => {\n this._handleDrag(params, callback);\n }\n );\n }\n }\n\n initDragEventOfRegions(\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void\n ) {\n if (defaultTriggerEvent[this._renderMode]) {\n regions.forEach(r => {\n if (filter) {\n r.getSeries().forEach(s => {\n if (filter(s)) {\n s.event.on(\n this._getTriggerEvent('start'),\n { level: Event_Bubble_Level.model, filter: ({ model }) => model?.id === s.id },\n params => {\n this._handleDrag(params, callback);\n }\n );\n\n // click 事件需要在drag和zoom时被屏蔽\n // hack 应该由事件系统做?或者事件系统有更好的方式处理这种交互冲突场景\n s.event.on(\n 'click',\n { level: Event_Bubble_Level.model, filter: ({ model }) => model?.id === s.id },\n () => {\n return !this._clickEnable;\n }\n );\n }\n });\n } else {\n this._bindDragEventAsRegion(this._eventObj, r, callback);\n }\n });\n }\n }\n\n protected _handleDrag(\n params: ExtendEventParam,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void\n ) {\n this._clickEnable = true;\n if (!this._zoomableTrigger.parserDragEvent(params.event)) {\n return;\n }\n const move = this._getTriggerEvent('move');\n const end = this._getTriggerEvent('end');\n const event = params.event as any;\n let x = event.canvasX;\n let y = event.canvasY;\n\n const mouseup = () => {\n this._zoomableTrigger.pointerId = null;\n this._eventObj.off(\n move,\n { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart },\n mousemove as unknown as any\n );\n this._eventObj.off(end, { level: Event_Bubble_Level.chart, source: Event_Source_Type.window }, mouseup);\n };\n const mousemove = (params: BaseEventParams) => {\n if (!this._zoomableTrigger.parserDragEvent(params.event)) {\n return;\n }\n this._clickEnable = false;\n const event = params.event as any;\n const dx = event.canvasX - x;\n const dy = event.canvasY - y;\n const delta: [number, number] = [dx, dy];\n\n x = event.canvasX;\n y = event.canvasY;\n\n if (callback) {\n callback(delta, params.event);\n }\n this._eventObj.emit('panmove', {\n delta,\n model: this\n } as unknown as ExtendEventParam);\n };\n this._eventObj.on(\n move,\n { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart },\n mousemove as unknown as any\n );\n this._eventObj.on(end, { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart }, mouseup);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/interaction/zoom/zoomable.ts"],"names":[],"mappings":"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","file":"zoomable.js","sourcesContent":["/* eslint-disable no-duplicate-imports */\nimport { debounce, isNil, throttle } from '@visactor/vutils';\nimport type { BaseEventParams, EventType, ExtendEventParam, IEvent } from '../../event/interface';\nimport type { IRegion } from '../../region/interface';\nimport type { RenderMode } from '../../typings/spec';\nimport { RenderModeEnum } from '../../typings/spec';\nimport { defaultTriggerEvent } from '../../component/common/trigger/config';\nimport type { IZoomTrigger } from '../../component/common/trigger/interface';\nimport { isPointInRect } from '../../util';\nimport type { ISeries } from '../../series/interface';\nimport { Event_Bubble_Level, Event_Source_Type } from '../../constant';\nimport type { IDelayType } from '../../typings/event';\n\nconst delayMap = {\n debounce: debounce,\n throttle: throttle\n};\n\nexport interface ITriggerOption {\n delayType: IDelayType;\n delayTime: number;\n realTime: boolean;\n}\nexport interface IZoomEventOptions {\n shouldZoom?: boolean;\n zoomCallback?: (params: { zoomDelta: number; zoomX: number; zoomY: number }, e: BaseEventParams['event']) => void;\n shouldScroll?: boolean;\n scrollCallback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void;\n}\nexport interface IZoomable {\n initZoomable: (evt: IEvent, mode?: RenderMode) => void;\n initZoomEventOfSeries: (\n s: ISeries,\n callback?: (params: { zoomDelta: number; zoomX: number; zoomY: number }, e: BaseEventParams['event']) => void\n ) => any;\n initZoomEventOfRegions: (\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (params: { zoomDelta: number; zoomX: number; zoomY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) => void;\n\n initScrollEventOfSeries: (\n s: ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void\n ) => any;\n initScrollEventOfRegions: (\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) => void;\n\n initDragEventOfSeries: (\n s: ISeries,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) => any;\n\n initDragEventOfRegions: (\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) => void;\n}\n\nexport class Zoomable implements IZoomable {\n private _clickEnable: boolean;\n\n private _zoomableTrigger: IZoomTrigger;\n\n private _eventObj: IEvent;\n\n private _renderMode: RenderMode;\n\n initZoomable(evt: IEvent, mode: RenderMode = RenderModeEnum['desktop-browser']) {\n this._eventObj = evt;\n this._renderMode = mode;\n if (defaultTriggerEvent[this._renderMode]) {\n // hack 应该由事件系统做?或者事件系统有更好的方式处理这种交互冲突场景\n this._clickEnable = true;\n this._zoomableTrigger = new (this._getTriggerEvent('trigger') as any)();\n }\n }\n\n // event\n private _getTriggerEvent(type: string): EventType {\n return defaultTriggerEvent[this._renderMode][type];\n }\n\n private _zoomEventDispatch(\n params: BaseEventParams,\n regionOrSeries: IRegion | ISeries,\n callback?: (params: { zoomDelta: number; zoomX: number; zoomY: number }, e: BaseEventParams['event']) => void\n ) {\n if (!params.event) {\n return;\n }\n const event = params.event.clone();\n this._zoomableTrigger.parserZoomEvent(event);\n // FIXME: event类型目前不全\n const { zoomDelta, zoomX, zoomY } = event as any;\n if (isNil(zoomDelta)) {\n return;\n }\n if (\n !isPointInRect(\n {\n x: zoomX,\n y: zoomY\n },\n {\n ...regionOrSeries.getLayoutRect(),\n ...regionOrSeries.getLayoutStartPoint()\n }\n )\n ) {\n return;\n }\n this._clickEnable = false;\n\n if (callback) {\n // zoomDelta, zoomX, zoomY can be changed in the callback\n callback({ zoomDelta, zoomX, zoomY }, event);\n }\n this._eventObj.emit('zoom', {\n scale: event.zoomDelta,\n scaleCenter: { x: event.zoomX, y: event.zoomY },\n model: this\n } as unknown as ExtendEventParam);\n }\n\n private _bindZoomEventAsRegion(\n eventObj: IEvent,\n regionOrSeries: IRegion | ISeries,\n callback?: (params: { zoomDelta: number; zoomX: number; zoomY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n const delayType = option?.delayType ?? 'throttle';\n const delayTime = option?.delayTime ?? 0;\n\n // pc端没有scrollEnd事件,所以漫游模式下scroll仅支持realTime\n eventObj.on(\n this._getTriggerEvent('scrollEnd'),\n { level: Event_Bubble_Level.chart, consume: false },\n delayMap[delayType]((params: BaseEventParams) => {\n this._zoomableTrigger.clearZoom();\n }, delayTime) as any\n );\n\n eventObj.on(\n this._getTriggerEvent('scroll'),\n { level: Event_Bubble_Level.chart, consume: true },\n delayMap[delayType]((params: BaseEventParams) => {\n // if (realTime) {\n this._zoomEventDispatch(params, regionOrSeries, callback);\n // }\n }, delayTime) as any\n );\n }\n\n initZoomEventOfSeries(\n s: ISeries,\n callback?: (params: { zoomDelta: number; zoomX: number; zoomY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (defaultTriggerEvent[this._renderMode]) {\n this._bindZoomEventAsRegion(s.event, s, callback, option);\n }\n }\n\n initZoomEventOfRegions(\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (params: { zoomDelta: number; zoomX: number; zoomY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (defaultTriggerEvent[this._renderMode]) {\n regions.forEach(r => {\n if (filter) {\n r.getSeries().forEach(s => {\n if (filter(s)) {\n this._bindZoomEventAsRegion(s.event, s, callback, option);\n }\n });\n } else {\n this._bindZoomEventAsRegion(this._eventObj, r, callback, option);\n }\n });\n }\n }\n\n private _scrollEventDispatch(\n params: BaseEventParams,\n regionOrSeries: IRegion | ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void\n ) {\n if (!params.event) {\n return;\n }\n const { event } = params;\n this._zoomableTrigger.parserScrollEvent(event);\n // FIXME: event类型目前不全\n const { scrollX, scrollY } = event as any;\n if (isNil(scrollX) && isNil(scrollY)) {\n return;\n }\n if (\n !isPointInRect(\n {\n x: event.canvasX,\n y: event.canvasY\n },\n {\n ...regionOrSeries.getLayoutRect(),\n ...regionOrSeries.getLayoutStartPoint()\n }\n )\n ) {\n return;\n }\n this._clickEnable = false;\n\n if (callback) {\n callback({ scrollX, scrollY }, event);\n }\n this._eventObj.emit('scroll', {\n scrollX,\n scrollY,\n model: this\n } as unknown as ExtendEventParam);\n }\n\n private _bindScrollEventAsRegion(\n eventObj: IEvent,\n regionOrSeries: IRegion | ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n const delayType = option?.delayType ?? 'throttle';\n const delayTime = option?.delayTime ?? 0;\n\n // pc端没有scrollEnd事件,所以漫游模式下scroll仅支持realTime\n eventObj.on(\n this._getTriggerEvent('scrollEnd'),\n { level: Event_Bubble_Level.chart, consume: false },\n delayMap[delayType]((params: any) => {\n this._zoomableTrigger.clearScroll();\n }, delayTime)\n );\n\n eventObj.on(\n this._getTriggerEvent('scroll'),\n { level: Event_Bubble_Level.chart, consume: true },\n delayMap[delayType]((params: any) => {\n // if (realTime) {\n this._scrollEventDispatch(params, regionOrSeries, callback);\n // }\n }, delayTime)\n );\n }\n\n initScrollEventOfSeries(\n s: ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (defaultTriggerEvent[this._renderMode]) {\n this._bindScrollEventAsRegion(s.event, s, callback, option);\n }\n }\n\n initScrollEventOfRegions(\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (defaultTriggerEvent[this._renderMode]) {\n regions.forEach(r => {\n if (filter) {\n r.getSeries().forEach(s => {\n if (filter(s)) {\n this._bindScrollEventAsRegion(s.event, s, callback, option);\n }\n });\n } else {\n this._bindScrollEventAsRegion(this._eventObj, r, callback, option);\n }\n });\n }\n }\n\n private _bindDragEventAsRegion(\n eventObj: IEvent,\n regionOrSeries: IRegion | ISeries,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n eventObj.on(this._getTriggerEvent('start'), { level: Event_Bubble_Level.chart }, (params: any) => {\n if (!params.event) {\n return;\n }\n\n const { event } = params;\n const shouldTrigger = isPointInRect(\n {\n x: event.canvasX,\n y: event.canvasY\n },\n {\n ...regionOrSeries.getLayoutRect(),\n ...regionOrSeries.getLayoutStartPoint()\n }\n );\n if (shouldTrigger) {\n this._handleDrag(params, callback, option);\n }\n });\n // click 事件需要在drag和zoom时被屏蔽\n // hack 应该由事件系统做?或者事件系统有更好的方式处理这种交互冲突场景\n eventObj.on('click', { level: Event_Bubble_Level.chart }, () => {\n return !this._clickEnable;\n });\n }\n\n initDragEventOfSeries(\n s: ISeries,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (defaultTriggerEvent[this._renderMode]) {\n s.event.on(\n this._getTriggerEvent('start'),\n { level: Event_Bubble_Level.model, filter: ({ model }) => model?.id === s.id },\n params => {\n this._handleDrag(params, callback, option);\n }\n );\n }\n }\n\n initDragEventOfRegions(\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (defaultTriggerEvent[this._renderMode]) {\n regions.forEach(r => {\n if (filter) {\n r.getSeries().forEach(s => {\n if (filter(s)) {\n s.event.on(\n this._getTriggerEvent('start'),\n { level: Event_Bubble_Level.model, filter: ({ model }) => model?.id === s.id },\n params => {\n this._handleDrag(params, callback);\n }\n );\n\n // click 事件需要在drag和zoom时被屏蔽\n // hack 应该由事件系统做?或者事件系统有更好的方式处理这种交互冲突场景\n s.event.on(\n 'click',\n { level: Event_Bubble_Level.model, filter: ({ model }) => model?.id === s.id },\n () => {\n return !this._clickEnable;\n }\n );\n }\n });\n } else {\n this._bindDragEventAsRegion(this._eventObj, r, callback, option);\n }\n });\n }\n }\n\n protected _handleDrag(\n params: ExtendEventParam,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n this._clickEnable = true;\n if (!this._zoomableTrigger.parserDragEvent(params.event)) {\n return;\n }\n const delayType = option?.delayType ?? 'throttle';\n const delayTime = option?.delayTime ?? 0;\n const realTime = option?.realTime ?? true;\n const move = this._getTriggerEvent('move');\n const end = this._getTriggerEvent('end');\n const event = params.event;\n let moveX = event.canvasX;\n let moveY = event.canvasY;\n let upX = event.canvasX;\n let upY = event.canvasY;\n\n const mouseup = delayMap[delayType]((params: BaseEventParams) => {\n this._clickEnable = false;\n const event = params.event as any;\n const dx = event.canvasX - upX;\n const dy = event.canvasY - upY;\n const delta: [number, number] = [dx, dy];\n\n upX = event.canvasX;\n upY = event.canvasY;\n\n if (!realTime && callback) {\n callback(delta, params.event);\n }\n\n this._eventObj.emit('panend', {\n delta,\n model: this\n } as unknown as BaseEventParams);\n this._zoomableTrigger.pointerId = null;\n this._eventObj.off(move, { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart }, mousemove as any);\n this._eventObj.off(end, { level: Event_Bubble_Level.chart, source: Event_Source_Type.window }, mouseup as any);\n }, delayTime);\n const mousemove = delayMap[delayType]((params: BaseEventParams) => {\n if (!this._zoomableTrigger.parserDragEvent(params.event)) {\n return;\n }\n this._clickEnable = false;\n const event = params.event;\n const dx = event.canvasX - moveX;\n const dy = event.canvasY - moveY;\n const delta: [number, number] = [dx, dy];\n\n moveX = event.canvasX;\n moveY = event.canvasY;\n\n if (realTime && callback) {\n callback(delta, params.event);\n }\n this._eventObj.emit('panmove', {\n delta,\n model: this\n } as unknown as ExtendEventParam);\n }, delayTime);\n\n this._eventObj.on(move, { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart }, mousemove as any);\n this._eventObj.on(end, { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart }, mouseup as any);\n }\n}\n"]}
@@ -25,5 +25,11 @@ export declare class Layout implements IBaseLayout {
25
25
  width: number;
26
26
  height: number;
27
27
  };
28
- protected _checkAutoIndent(items: ILayoutItem[]): IPadding;
28
+ protected _checkAutoIndent(items: ILayoutItem[], layoutTemp: {
29
+ top: number;
30
+ left: number;
31
+ bottom: number;
32
+ right: number;
33
+ }): IPadding;
34
+ private _getOutInLayout;
29
35
  }
@@ -13,12 +13,17 @@ export class Layout {
13
13
  this.bottomCurrent = chartLayoutRect.height + chartLayoutRect.y, items.sort(((a, b) => b.layoutLevel - a.layoutLevel)),
14
14
  this.layoutNormalInlineItems(items.filter((x => "normal-inline" === x.layoutType))),
15
15
  this.layoutNormalItems(items.filter((x => "normal" === x.layoutType)));
16
- const layoutTemp_leftCurrent = this.leftCurrent, layoutTemp_topCurrent = this.topCurrent, layoutTemp_rightCurrent = this.rightCurrent, layoutTemp_bottomCurrent = this.bottomCurrent, regionItems = items.filter((x => "region" === x.layoutType)), relativeItems = items.filter((x => "region-relative" === x.layoutType));
16
+ const layoutTemp = {
17
+ left: this.leftCurrent,
18
+ top: this.topCurrent,
19
+ right: this.rightCurrent,
20
+ bottom: this.bottomCurrent
21
+ }, regionItems = items.filter((x => "region" === x.layoutType)), relativeItems = items.filter((x => "region-relative" === x.layoutType));
17
22
  if (this.layoutRegionItems(regionItems, relativeItems), relativeItems.some((i => i.getAutoIndent()))) {
18
- const {top: top, bottom: bottom, left: left, right: right} = this._checkAutoIndent(relativeItems);
19
- (top || bottom || left || right) && (this.topCurrent = layoutTemp_topCurrent + top,
20
- this.bottomCurrent = layoutTemp_bottomCurrent - bottom, this.leftCurrent = layoutTemp_leftCurrent + left,
21
- this.rightCurrent = layoutTemp_rightCurrent - right, this.layoutRegionItems(regionItems, relativeItems));
23
+ const {top: top, bottom: bottom, left: left, right: right} = this._checkAutoIndent(relativeItems, layoutTemp);
24
+ (top || bottom || left || right) && (this.topCurrent = layoutTemp.top + top, this.bottomCurrent = layoutTemp.bottom - bottom,
25
+ this.leftCurrent = layoutTemp.left + left, this.rightCurrent = layoutTemp.right - right,
26
+ this.layoutRegionItems(regionItems, relativeItems));
22
27
  }
23
28
  this.layoutAbsoluteItems(items.filter((x => "absolute" === x.layoutType)));
24
29
  }
@@ -122,20 +127,29 @@ export class Layout {
122
127
  height: this.bottomCurrent - this.topCurrent - item.layoutPaddingTop - item.layoutPaddingBottom
123
128
  };
124
129
  }
125
- _checkAutoIndent(items) {
130
+ _checkAutoIndent(items, layoutTemp) {
126
131
  const result = {
127
132
  top: 0,
128
133
  left: 0,
129
134
  bottom: 0,
130
135
  right: 0
131
- }, rightCurrent = this._chartViewBox.x2 - this._chartViewBox.x1 - this.rightCurrent, bottomCurrent = this._chartViewBox.y2 - this._chartViewBox.y1 - this.bottomCurrent;
136
+ };
132
137
  return items.forEach((i => {
133
138
  if (!i.getVisible() || !i.getAutoIndent()) return;
134
- const vOrH = "left" === i.layoutOrient || "right" === i.layoutOrient, outer = i.getLastComputeOutBounds();
135
- vOrH ? (result.top = Math.max(result.top, outer.y1 - this.topCurrent), result.bottom = Math.max(result.bottom, outer.y2 - bottomCurrent)) : (result.left = Math.max(result.left, outer.x1 - this.leftCurrent),
136
- result.right = Math.max(result.right, outer.x2 - rightCurrent));
139
+ const vOrH = "left" === i.layoutOrient || "right" === i.layoutOrient, itemOuter = i.getLastComputeOutBounds(), outer = this._getOutInLayout(itemOuter, i, layoutTemp);
140
+ vOrH ? (result.top = Math.max(result.top, outer.top), result.bottom = Math.max(result.bottom, outer.bottom)) : (result.left = Math.max(result.left, outer.left),
141
+ result.right = Math.max(result.right, outer.right));
137
142
  })), result;
138
143
  }
144
+ _getOutInLayout(itemOuter, i, tempBorder) {
145
+ const {x: x, y: y} = i.getLayoutStartPoint(), {width: width, height: height} = i.getLayoutRect();
146
+ return {
147
+ left: tempBorder.left - (x - itemOuter.x1),
148
+ right: x + width + itemOuter.x2 - tempBorder.right,
149
+ top: tempBorder.top - (y - itemOuter.y1),
150
+ bottom: y + height + itemOuter.y2 - tempBorder.bottom
151
+ };
152
+ }
139
153
  }
140
154
 
141
155
  Layout.type = "base";