@visactor/vchart 1.3.1-test.6 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/build/es5/index.js +15 -0
  2. package/build/index.js +2441 -3399
  3. package/build/index.min.js +2 -2
  4. package/build/tsconfig.tsbuildinfo +1 -0
  5. package/cjs/chart/base-chart.js +29 -24
  6. package/cjs/chart/base-chart.js.map +1 -1
  7. package/cjs/chart/common/common.d.ts +2 -0
  8. package/cjs/chart/common/common.js +15 -1
  9. package/cjs/chart/common/common.js.map +1 -1
  10. package/cjs/chart/polar/polar.js +2 -2
  11. package/cjs/chart/polar/polar.js.map +1 -1
  12. package/cjs/compile/mark/compilable-mark.d.ts +5 -0
  13. package/cjs/compile/mark/compilable-mark.js +18 -4
  14. package/cjs/compile/mark/compilable-mark.js.map +1 -1
  15. package/cjs/compile/mark/interface.d.ts +1 -0
  16. package/cjs/compile/mark/interface.js.map +1 -1
  17. package/cjs/component/axis/base-axis.js +5 -5
  18. package/cjs/component/axis/base-axis.js.map +1 -1
  19. package/cjs/component/axis/cartesian/interface/spec.js.map +1 -1
  20. package/cjs/component/axis/mixin/linear-axis-mixin.js +1 -1
  21. package/cjs/component/axis/mixin/linear-axis-mixin.js.map +1 -1
  22. package/cjs/component/base/base-component.d.ts +0 -1
  23. package/cjs/component/base/base-component.js +2 -6
  24. package/cjs/component/base/base-component.js.map +1 -1
  25. package/cjs/component/crosshair/base.d.ts +1 -1
  26. package/cjs/component/crosshair/base.js +1 -1
  27. package/cjs/component/crosshair/base.js.map +1 -1
  28. package/cjs/component/crosshair/cartesian.d.ts +1 -1
  29. package/cjs/component/crosshair/cartesian.js +2 -2
  30. package/cjs/component/crosshair/cartesian.js.map +1 -1
  31. package/cjs/component/crosshair/interface/spec.d.ts +1 -0
  32. package/cjs/component/crosshair/interface/spec.js.map +1 -1
  33. package/cjs/component/crosshair/polar.d.ts +1 -1
  34. package/cjs/component/crosshair/polar.js +2 -2
  35. package/cjs/component/crosshair/polar.js.map +1 -1
  36. package/cjs/component/data-zoom/constant.d.ts +4 -0
  37. package/cjs/component/data-zoom/constant.js +10 -0
  38. package/cjs/component/data-zoom/constant.js.map +1 -0
  39. package/cjs/component/data-zoom/data-filter-base-component.d.ts +2 -0
  40. package/cjs/component/data-zoom/data-filter-base-component.js +9 -7
  41. package/cjs/component/data-zoom/data-filter-base-component.js.map +1 -1
  42. package/cjs/component/data-zoom/data-zoom/data-zoom.d.ts +1 -0
  43. package/cjs/component/data-zoom/data-zoom/data-zoom.js +19 -3
  44. package/cjs/component/data-zoom/data-zoom/data-zoom.js.map +1 -1
  45. package/cjs/component/data-zoom/data-zoom/interface.d.ts +2 -0
  46. package/cjs/component/data-zoom/data-zoom/interface.js.map +1 -1
  47. package/cjs/component/data-zoom/interface.d.ts +0 -1
  48. package/cjs/component/data-zoom/interface.js.map +1 -1
  49. package/cjs/component/data-zoom/scroll-bar/interface.d.ts +2 -0
  50. package/cjs/component/data-zoom/scroll-bar/interface.js.map +1 -1
  51. package/cjs/component/data-zoom/scroll-bar/scroll-bar.d.ts +2 -0
  52. package/cjs/component/data-zoom/scroll-bar/scroll-bar.js +15 -7
  53. package/cjs/component/data-zoom/scroll-bar/scroll-bar.js.map +1 -1
  54. package/cjs/component/legend/base-legend.d.ts +3 -0
  55. package/cjs/component/legend/base-legend.js +25 -4
  56. package/cjs/component/legend/base-legend.js.map +1 -1
  57. package/cjs/component/legend/discrete/legend.js +4 -3
  58. package/cjs/component/legend/discrete/legend.js.map +1 -1
  59. package/cjs/component/tooltip/handler/utils/common.js +1 -1
  60. package/cjs/component/tooltip/handler/utils/common.js.map +1 -1
  61. package/cjs/component/tooltip/handler/utils/style.js.map +1 -1
  62. package/cjs/component/tooltip/interface/theme.d.ts +1 -1
  63. package/cjs/component/tooltip/interface/theme.js.map +1 -1
  64. package/cjs/component/tooltip/tooltip.js +2 -1
  65. package/cjs/component/tooltip/tooltip.js.map +1 -1
  66. package/cjs/core/index.d.ts +1 -1
  67. package/cjs/core/index.js +1 -1
  68. package/cjs/core/index.js.map +1 -1
  69. package/cjs/core/vchart.d.ts +1 -0
  70. package/cjs/core/vchart.js +18 -10
  71. package/cjs/core/vchart.js.map +1 -1
  72. package/cjs/data/transforms/dimension-data.js +6 -4
  73. package/cjs/data/transforms/dimension-data.js.map +1 -1
  74. package/cjs/data/transforms/dimension-statistics.d.ts +0 -29
  75. package/cjs/data/transforms/dimension-statistics.js +31 -73
  76. package/cjs/data/transforms/dimension-statistics.js.map +1 -1
  77. package/cjs/data/transforms/pie.js +17 -5
  78. package/cjs/data/transforms/pie.js.map +1 -1
  79. package/cjs/data/transforms/waterfall.js +4 -3
  80. package/cjs/data/transforms/waterfall.js.map +1 -1
  81. package/cjs/model/base-model.d.ts +3 -1
  82. package/cjs/model/base-model.js +14 -4
  83. package/cjs/model/base-model.js.map +1 -1
  84. package/cjs/model/interface.d.ts +1 -1
  85. package/cjs/model/interface.js.map +1 -1
  86. package/cjs/region/region.js +8 -2
  87. package/cjs/region/region.js.map +1 -1
  88. package/cjs/series/area/area.js +1 -1
  89. package/cjs/series/area/area.js.map +1 -1
  90. package/cjs/series/base/base-series.d.ts +5 -6
  91. package/cjs/series/base/base-series.js +13 -9
  92. package/cjs/series/base/base-series.js.map +1 -1
  93. package/cjs/series/base/group.d.ts +2 -1
  94. package/cjs/series/base/group.js.map +1 -1
  95. package/cjs/series/cartesian/cartesian.d.ts +2 -1
  96. package/cjs/series/cartesian/cartesian.js +2 -2
  97. package/cjs/series/cartesian/cartesian.js.map +1 -1
  98. package/cjs/series/interface/series.d.ts +2 -3
  99. package/cjs/series/interface/series.js.map +1 -1
  100. package/cjs/series/interface/type.d.ts +1 -0
  101. package/cjs/series/interface/type.js +4 -2
  102. package/cjs/series/interface/type.js.map +1 -1
  103. package/cjs/series/line/line.js +1 -1
  104. package/cjs/series/line/line.js.map +1 -1
  105. package/cjs/series/radar/radar.js +1 -1
  106. package/cjs/series/radar/radar.js.map +1 -1
  107. package/cjs/series/waterfall/waterfall.d.ts +1 -0
  108. package/cjs/series/waterfall/waterfall.js +8 -2
  109. package/cjs/series/waterfall/waterfall.js.map +1 -1
  110. package/cjs/theme/builtin/common/component/data-zoom.js +36 -36
  111. package/cjs/theme/builtin/common/component/data-zoom.js.map +1 -1
  112. package/cjs/theme/builtin/common/component/legend/size-legend.js +4 -4
  113. package/cjs/theme/builtin/common/component/legend/size-legend.js.map +1 -1
  114. package/cjs/theme/builtin/common/component/poptip.js +0 -2
  115. package/cjs/theme/builtin/common/component/poptip.js.map +1 -1
  116. package/cjs/theme/builtin/common/component/title.js.map +1 -1
  117. package/cjs/theme/builtin/common/constants.js +6 -6
  118. package/cjs/theme/builtin/common/constants.js.map +1 -1
  119. package/cjs/theme/builtin/common/legacy/index.d.ts +1 -0
  120. package/cjs/theme/builtin/common/legacy/index.js +21 -0
  121. package/cjs/theme/builtin/common/legacy/index.js.map +1 -0
  122. package/cjs/theme/builtin/common/legacy/legend/color-legend.d.ts +2 -0
  123. package/cjs/theme/builtin/common/legacy/legend/color-legend.js +43 -0
  124. package/cjs/theme/builtin/common/legacy/legend/color-legend.js.map +1 -0
  125. package/cjs/theme/builtin/common/legacy/legend/continuous.d.ts +2 -0
  126. package/cjs/theme/builtin/common/legacy/legend/continuous.js +60 -0
  127. package/cjs/theme/builtin/common/legacy/legend/continuous.js.map +1 -0
  128. package/cjs/theme/builtin/common/legacy/legend/index.d.ts +2 -0
  129. package/cjs/theme/builtin/common/legacy/legend/index.js +24 -0
  130. package/cjs/theme/builtin/common/legacy/legend/index.js.map +1 -0
  131. package/cjs/theme/builtin/common/legacy/legend/size-legend.d.ts +2 -0
  132. package/cjs/theme/builtin/common/legacy/legend/size-legend.js +56 -0
  133. package/cjs/theme/builtin/common/legacy/legend/size-legend.js.map +1 -0
  134. package/cjs/theme/builtin/common/series/treemap.js +1 -1
  135. package/cjs/theme/builtin/common/series/treemap.js.map +1 -1
  136. package/cjs/theme/builtin/dark/index.js +13 -1
  137. package/cjs/theme/builtin/dark/index.js.map +1 -1
  138. package/cjs/theme/builtin/index.d.ts +3 -0
  139. package/cjs/theme/builtin/index.js +10 -3
  140. package/cjs/theme/builtin/index.js.map +1 -1
  141. package/cjs/theme/interface.d.ts +6 -6
  142. package/cjs/theme/interface.js.map +1 -1
  143. package/cjs/theme/theme-manager.d.ts +1 -1
  144. package/cjs/theme/theme-manager.js +3 -7
  145. package/cjs/theme/theme-manager.js.map +1 -1
  146. package/cjs/typings/group.d.ts +8 -0
  147. package/cjs/typings/group.js +6 -0
  148. package/cjs/typings/group.js.map +1 -0
  149. package/cjs/typings/index.d.ts +1 -0
  150. package/cjs/typings/index.js +1 -1
  151. package/cjs/typings/index.js.map +1 -1
  152. package/cjs/typings/visual.d.ts +1 -1
  153. package/cjs/typings/visual.js.map +1 -1
  154. package/cjs/util/spec/preprocess.d.ts +2 -2
  155. package/cjs/util/spec/preprocess.js +11 -6
  156. package/cjs/util/spec/preprocess.js.map +1 -1
  157. package/cjs/util/style.js +1 -1
  158. package/cjs/util/style.js.map +1 -1
  159. package/cjs/util/text.d.ts +2 -2
  160. package/cjs/util/text.js.map +1 -1
  161. package/esm/chart/base-chart.js +30 -24
  162. package/esm/chart/base-chart.js.map +1 -1
  163. package/esm/chart/common/common.d.ts +2 -0
  164. package/esm/chart/common/common.js +16 -0
  165. package/esm/chart/common/common.js.map +1 -1
  166. package/esm/chart/polar/polar.js +3 -1
  167. package/esm/chart/polar/polar.js.map +1 -1
  168. package/esm/compile/mark/compilable-mark.d.ts +5 -0
  169. package/esm/compile/mark/compilable-mark.js +18 -4
  170. package/esm/compile/mark/compilable-mark.js.map +1 -1
  171. package/esm/compile/mark/interface.d.ts +1 -0
  172. package/esm/compile/mark/interface.js.map +1 -1
  173. package/esm/component/axis/base-axis.js +5 -5
  174. package/esm/component/axis/base-axis.js.map +1 -1
  175. package/esm/component/axis/cartesian/interface/spec.js.map +1 -1
  176. package/esm/component/axis/mixin/linear-axis-mixin.js +1 -1
  177. package/esm/component/axis/mixin/linear-axis-mixin.js.map +1 -1
  178. package/esm/component/base/base-component.d.ts +0 -1
  179. package/esm/component/base/base-component.js +1 -7
  180. package/esm/component/base/base-component.js.map +1 -1
  181. package/esm/component/crosshair/base.d.ts +1 -1
  182. package/esm/component/crosshair/base.js +1 -1
  183. package/esm/component/crosshair/base.js.map +1 -1
  184. package/esm/component/crosshair/cartesian.d.ts +1 -1
  185. package/esm/component/crosshair/cartesian.js +2 -2
  186. package/esm/component/crosshair/cartesian.js.map +1 -1
  187. package/esm/component/crosshair/interface/spec.d.ts +1 -0
  188. package/esm/component/crosshair/interface/spec.js.map +1 -1
  189. package/esm/component/crosshair/polar.d.ts +1 -1
  190. package/esm/component/crosshair/polar.js +2 -2
  191. package/esm/component/crosshair/polar.js.map +1 -1
  192. package/esm/component/data-zoom/constant.d.ts +4 -0
  193. package/esm/component/data-zoom/constant.js +6 -0
  194. package/esm/component/data-zoom/constant.js.map +1 -0
  195. package/esm/component/data-zoom/data-filter-base-component.d.ts +2 -0
  196. package/esm/component/data-zoom/data-filter-base-component.js +9 -6
  197. package/esm/component/data-zoom/data-filter-base-component.js.map +1 -1
  198. package/esm/component/data-zoom/data-zoom/data-zoom.d.ts +1 -0
  199. package/esm/component/data-zoom/data-zoom/data-zoom.js +20 -2
  200. package/esm/component/data-zoom/data-zoom/data-zoom.js.map +1 -1
  201. package/esm/component/data-zoom/data-zoom/interface.d.ts +2 -0
  202. package/esm/component/data-zoom/data-zoom/interface.js.map +1 -1
  203. package/esm/component/data-zoom/interface.d.ts +0 -1
  204. package/esm/component/data-zoom/interface.js.map +1 -1
  205. package/esm/component/data-zoom/scroll-bar/interface.d.ts +2 -0
  206. package/esm/component/data-zoom/scroll-bar/interface.js.map +1 -1
  207. package/esm/component/data-zoom/scroll-bar/scroll-bar.d.ts +2 -0
  208. package/esm/component/data-zoom/scroll-bar/scroll-bar.js +16 -6
  209. package/esm/component/data-zoom/scroll-bar/scroll-bar.js.map +1 -1
  210. package/esm/component/legend/base-legend.d.ts +3 -0
  211. package/esm/component/legend/base-legend.js +24 -4
  212. package/esm/component/legend/base-legend.js.map +1 -1
  213. package/esm/component/legend/discrete/legend.js +4 -3
  214. package/esm/component/legend/discrete/legend.js.map +1 -1
  215. package/esm/component/tooltip/handler/utils/common.js +1 -1
  216. package/esm/component/tooltip/handler/utils/common.js.map +1 -1
  217. package/esm/component/tooltip/handler/utils/style.js.map +1 -1
  218. package/esm/component/tooltip/interface/theme.d.ts +1 -1
  219. package/esm/component/tooltip/interface/theme.js.map +1 -1
  220. package/esm/component/tooltip/tooltip.js +1 -1
  221. package/esm/component/tooltip/tooltip.js.map +1 -1
  222. package/esm/core/index.d.ts +1 -1
  223. package/esm/core/index.js +1 -1
  224. package/esm/core/index.js.map +1 -1
  225. package/esm/core/vchart.d.ts +1 -0
  226. package/esm/core/vchart.js +17 -10
  227. package/esm/core/vchart.js.map +1 -1
  228. package/esm/data/transforms/dimension-data.js +6 -4
  229. package/esm/data/transforms/dimension-data.js.map +1 -1
  230. package/esm/data/transforms/dimension-statistics.d.ts +0 -29
  231. package/esm/data/transforms/dimension-statistics.js +28 -69
  232. package/esm/data/transforms/dimension-statistics.js.map +1 -1
  233. package/esm/data/transforms/pie.js +15 -5
  234. package/esm/data/transforms/pie.js.map +1 -1
  235. package/esm/data/transforms/waterfall.js +4 -4
  236. package/esm/data/transforms/waterfall.js.map +1 -1
  237. package/esm/model/base-model.d.ts +3 -1
  238. package/esm/model/base-model.js +14 -5
  239. package/esm/model/base-model.js.map +1 -1
  240. package/esm/model/interface.d.ts +1 -1
  241. package/esm/model/interface.js.map +1 -1
  242. package/esm/region/region.js +9 -1
  243. package/esm/region/region.js.map +1 -1
  244. package/esm/series/area/area.js +1 -1
  245. package/esm/series/area/area.js.map +1 -1
  246. package/esm/series/base/base-series.d.ts +5 -6
  247. package/esm/series/base/base-series.js +13 -10
  248. package/esm/series/base/base-series.js.map +1 -1
  249. package/esm/series/base/group.d.ts +2 -1
  250. package/esm/series/base/group.js.map +1 -1
  251. package/esm/series/cartesian/cartesian.d.ts +2 -1
  252. package/esm/series/cartesian/cartesian.js +2 -2
  253. package/esm/series/cartesian/cartesian.js.map +1 -1
  254. package/esm/series/interface/series.d.ts +2 -3
  255. package/esm/series/interface/series.js.map +1 -1
  256. package/esm/series/interface/type.d.ts +1 -0
  257. package/esm/series/interface/type.js +2 -0
  258. package/esm/series/interface/type.js.map +1 -1
  259. package/esm/series/line/line.js +1 -1
  260. package/esm/series/line/line.js.map +1 -1
  261. package/esm/series/radar/radar.js +1 -1
  262. package/esm/series/radar/radar.js.map +1 -1
  263. package/esm/series/waterfall/waterfall.d.ts +1 -0
  264. package/esm/series/waterfall/waterfall.js +8 -2
  265. package/esm/series/waterfall/waterfall.js.map +1 -1
  266. package/esm/theme/builtin/common/component/data-zoom.js +36 -36
  267. package/esm/theme/builtin/common/component/data-zoom.js.map +1 -1
  268. package/esm/theme/builtin/common/component/legend/size-legend.js +4 -4
  269. package/esm/theme/builtin/common/component/legend/size-legend.js.map +1 -1
  270. package/esm/theme/builtin/common/component/poptip.js +0 -2
  271. package/esm/theme/builtin/common/component/poptip.js.map +1 -1
  272. package/esm/theme/builtin/common/component/title.js.map +1 -1
  273. package/esm/theme/builtin/common/constants.js +6 -6
  274. package/esm/theme/builtin/common/constants.js.map +1 -1
  275. package/esm/theme/builtin/common/legacy/index.d.ts +1 -0
  276. package/esm/theme/builtin/common/legacy/index.js +2 -0
  277. package/esm/theme/builtin/common/legacy/index.js.map +1 -0
  278. package/esm/theme/builtin/common/legacy/legend/color-legend.d.ts +2 -0
  279. package/esm/theme/builtin/common/legacy/legend/color-legend.js +39 -0
  280. package/esm/theme/builtin/common/legacy/legend/color-legend.js.map +1 -0
  281. package/esm/theme/builtin/common/legacy/legend/continuous.d.ts +2 -0
  282. package/esm/theme/builtin/common/legacy/legend/continuous.js +54 -0
  283. package/esm/theme/builtin/common/legacy/legend/continuous.js.map +1 -0
  284. package/esm/theme/builtin/common/legacy/legend/index.d.ts +2 -0
  285. package/esm/theme/builtin/common/legacy/legend/index.js +4 -0
  286. package/esm/theme/builtin/common/legacy/legend/index.js.map +1 -0
  287. package/esm/theme/builtin/common/legacy/legend/size-legend.d.ts +2 -0
  288. package/esm/theme/builtin/common/legacy/legend/size-legend.js +54 -0
  289. package/esm/theme/builtin/common/legacy/legend/size-legend.js.map +1 -0
  290. package/esm/theme/builtin/common/series/treemap.js +1 -1
  291. package/esm/theme/builtin/common/series/treemap.js.map +1 -1
  292. package/esm/theme/builtin/dark/index.js +13 -1
  293. package/esm/theme/builtin/dark/index.js.map +1 -1
  294. package/esm/theme/builtin/index.d.ts +3 -0
  295. package/esm/theme/builtin/index.js +12 -0
  296. package/esm/theme/builtin/index.js.map +1 -1
  297. package/esm/theme/interface.d.ts +6 -6
  298. package/esm/theme/interface.js.map +1 -1
  299. package/esm/theme/theme-manager.d.ts +1 -1
  300. package/esm/theme/theme-manager.js +3 -9
  301. package/esm/theme/theme-manager.js.map +1 -1
  302. package/esm/typings/group.d.ts +8 -0
  303. package/esm/typings/group.js +2 -0
  304. package/esm/typings/group.js.map +1 -0
  305. package/esm/typings/index.d.ts +1 -0
  306. package/esm/typings/index.js +2 -0
  307. package/esm/typings/index.js.map +1 -1
  308. package/esm/typings/visual.d.ts +1 -1
  309. package/esm/typings/visual.js.map +1 -1
  310. package/esm/util/spec/preprocess.d.ts +2 -2
  311. package/esm/util/spec/preprocess.js +12 -5
  312. package/esm/util/spec/preprocess.js.map +1 -1
  313. package/esm/util/style.js +1 -1
  314. package/esm/util/style.js.map +1 -1
  315. package/esm/util/text.d.ts +2 -2
  316. package/esm/util/text.js.map +1 -1
  317. package/package.json +37 -37
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/data/transforms/dimension-statistics.ts"],"names":[],"mappings":"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","file":"dimension-statistics.js","sourcesContent":["import { isNil } from '@visactor/vutils';\nimport type { IFieldsMeta } from '../../typings/spec';\nimport { couldBeValidNumber, isFunction, mergeFields } from '../../util';\nimport type { DataView } from '@visactor/vdataset';\nimport type { Datum } from '../../typings';\n\nexport const StatisticsDefault = {\n allValid: () => true,\n min: () => Number.MAX_VALUE,\n max: () => Number.MIN_VALUE,\n values: () => new Set(),\n //计算数组形式的data中的最大最小值\n 'array-min': () => Number.MAX_VALUE,\n 'array-max': () => Number.MIN_VALUE\n};\nexport const StatisticsValueTransform = {\n allValid: (v: any) => v,\n min: (v: any) => (v === StatisticsDefault.min() ? 0 : v),\n max: (v: any) => (v === StatisticsDefault.max() ? 0 : v),\n values: (v: Set<string>) => Array.from(v),\n //计算数组形式的data中的最大最小值\n 'array-min': (v: any) => (v === StatisticsDefault.min() ? 0 : v),\n 'array-max': (v: any) => (v === StatisticsDefault.max() ? 0 : v)\n};\n\nfunction StatisticsArrayMin(last: any, valueArr: any) {\n const filteredValueArr = (valueArr ?? []).filter((v: any) => couldBeValidNumber(v));\n if (filteredValueArr.length === 0) {\n return last;\n }\n return Math.min(last, ...filteredValueArr);\n}\n\nfunction StatisticsArrayMax(last: any, valueArr: any) {\n const filteredValueArr = (valueArr ?? []).filter((v: any) => couldBeValidNumber(v));\n if (filteredValueArr.length === 0) {\n return last;\n }\n return Math.max(last, ...filteredValueArr);\n}\n\nfunction StatisticsValues(last: Set<string>, value: any) {\n if (value === undefined) {\n return last;\n }\n if (last.has(value)) {\n return last;\n }\n last.add(value);\n return last;\n}\n\nexport const StatisticsMethod = {\n allValid: couldBeValidNumber,\n min: Math.min,\n max: Math.max,\n values: StatisticsValues,\n //计算数组形式的data中的最大最小值\n 'array-min': StatisticsArrayMin,\n 'array-max': StatisticsArrayMax\n};\n\nexport type StatisticOperations = Array<'max' | 'min' | 'values' | 'array-max' | 'array-min' | 'allValid'>;\n\nexport interface IStatisticsOption {\n fields: {\n key: string;\n operations: StatisticOperations;\n customize?: { max: number; min: number } | any[];\n }[];\n // operations: Array<'max' | 'min' | 'values'>;\n target?: 'parser' | 'latest';\n fieldFollowSource?: (key: string) => boolean;\n sourceStatistics?: () => { [key: string]: unknown };\n}\n\n/**\n * 聚合统计主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果\n * @param data\n * @param options\n * @returns\n */\nexport const dimensionStatistics = (data: Array<DataView>, op: IStatisticsOption) => {\n const result = {};\n // const operations = op.operations;\n let fields = op.fields;\n if (isFunction(fields)) {\n fields = fields();\n }\n if (!fields?.length || !data?.length) {\n return result;\n }\n\n const sourceStatistics = op.sourceStatistics?.();\n const fieldFollowSource = op.fieldFollowSource;\n\n // merge same key\n fields = mergeFields([], fields);\n\n const dataKey = op.target === 'parser' ? 'parserData' : 'latestData';\n const latestData = data[0][dataKey] ? data[0][dataKey] : data || [];\n const dataFields = data[0].getFields?.() as Record<\n /** 字段key */\n string,\n IFieldsMeta\n >;\n fields.forEach(f => {\n // NOTE: the same key in fields has been merge already\n result[f.key] = {};\n const dataFiledInKey = dataFields?.[f.key];\n if (sourceStatistics && fieldFollowSource && fieldFollowSource(f.key) && sourceStatistics[f.key]) {\n result[f.key] = sourceStatistics[f.key];\n return;\n }\n let willMin: boolean = false;\n let willMax: boolean = false;\n let willValid: boolean = false;\n const operations: StatisticOperations = [];\n f.operations.forEach(o => {\n if (o === 'max') {\n willMax = true;\n } else if (o === 'min') {\n willMin = true;\n } else if (o === 'allValid') {\n willValid = true;\n } else {\n operations.push(o);\n }\n });\n\n operations.forEach(op => {\n // @chensij 如果指定了计算的domain结果,则忽略计算(目前该逻辑仅在dot series中维护,因为dot series期望在filter data之后x轴改变domain,y轴不改变domain)\n if (f.customize) {\n result[f.key][op] = f.customize;\n } else {\n if (dataFiledInKey && dataFiledInKey.lockStatisticsByDomain && !isNil(dataFiledInKey.domain)) {\n if (op === 'values') {\n result[f.key][op] = [...dataFiledInKey.domain];\n return;\n }\n }\n result[f.key][op] = StatisticsDefault[op]();\n const isValues = op === 'values';\n latestData.forEach((d: Datum) => {\n if (!d) {\n return;\n }\n const value = d[f.key];\n if (isValues) {\n StatisticsMethod[op](result[f.key][op], value);\n } else {\n result[f.key][op] = StatisticsMethod[op](result[f.key][op], value);\n }\n });\n result[f.key][op] = StatisticsValueTransform[op](result[f.key][op]);\n if (op === 'array-max') {\n result[f.key].max = result[f.key][op];\n }\n if (op === 'array-min') {\n result[f.key].min = result[f.key][op];\n }\n }\n });\n\n // min max valid\n if (willMin || willMax || willValid) {\n if (f.customize) {\n if (willMin) {\n result[f.key].min = f.customize;\n }\n if (willMax) {\n result[f.key].max = f.customize;\n }\n } else {\n if (dataFiledInKey && dataFiledInKey.lockStatisticsByDomain && !isNil(dataFiledInKey.domain)) {\n if (willMin) {\n result[f.key][op] = Math.min(...(dataFiledInKey.domain as number[]));\n }\n if (willMax) {\n result[f.key][op] = Math.max(...(dataFiledInKey.domain as number[]));\n }\n }\n if (willMin) {\n result[f.key].min = StatisticsDefault.min();\n }\n if (willMax) {\n result[f.key].max = StatisticsDefault.max();\n }\n result[f.key].allValid = StatisticsDefault.allValid();\n latestData.forEach((d: Datum) => {\n if (!d) {\n return;\n }\n\n let value = d[f.key];\n if (!couldBeValidNumber(value)) {\n if (result[f.key].allValid) {\n result[f.key].allValid = false;\n }\n } else {\n value = +value;\n if (willMin && result[f.key].min > value) {\n result[f.key].min = value;\n }\n if (willMax && result[f.key].max < value) {\n result[f.key].max = value;\n }\n }\n });\n if (willMin) {\n result[f.key].min = StatisticsValueTransform.min(result[f.key].min);\n }\n if (willMax) {\n result[f.key].max = StatisticsValueTransform.max(result[f.key].max);\n }\n result[f.key].allValid = StatisticsValueTransform.allValid(result[f.key].allValid);\n }\n }\n });\n return result;\n};\n"]}
1
+ {"version":3,"sources":["../src/data/transforms/dimension-statistics.ts"],"names":[],"mappings":"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","file":"dimension-statistics.js","sourcesContent":["import { isNil } from '@visactor/vutils';\nimport type { IFieldsMeta } from '../../typings/spec';\nimport { couldBeValidNumber, isFunction, mergeFields } from '../../util';\nimport type { DataView } from '@visactor/vdataset';\nimport type { Datum } from '../../typings';\n\nconst methods = {\n min: (arr: any[]) => {\n return arr.length ? Math.min.apply(null, arr) : 0;\n },\n max: (arr: any[]) => {\n return arr.length ? Math.max.apply(null, arr) : 0;\n },\n 'array-min': (arr: any[]) => {\n return arr.length ? Math.min.apply(null, arr) : 0;\n },\n 'array-max': (arr: any[]) => {\n return arr.length ? Math.max.apply(null, arr) : 0;\n },\n values: (arr: any[]) => {\n const map = {};\n const res: any[] = [];\n\n for (const entry of arr) {\n if (!map[entry]) {\n res.push(entry);\n map[entry] = 1;\n }\n }\n\n return res;\n }\n};\n\nexport type StatisticOperations = Array<'max' | 'min' | 'values' | 'array-max' | 'array-min' | 'allValid'>;\n\nexport interface IStatisticsOption {\n fields: {\n key: string;\n operations: StatisticOperations;\n customize?: { max: number; min: number } | any[];\n }[];\n // operations: Array<'max' | 'min' | 'values'>;\n target?: 'parser' | 'latest';\n fieldFollowSource?: (key: string) => boolean;\n sourceStatistics?: () => { [key: string]: unknown };\n}\n\n/**\n * 聚合统计主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果\n * @param data\n * @param options\n * @returns\n */\nexport const dimensionStatistics = (data: Array<DataView>, op: IStatisticsOption) => {\n const result = {};\n // const operations = op.operations;\n let fields = op.fields;\n if (isFunction(fields)) {\n fields = fields();\n }\n if (!fields?.length || !data?.length) {\n return result;\n }\n\n const sourceStatistics = op.sourceStatistics?.();\n const fieldFollowSource = op.fieldFollowSource;\n\n // merge same key\n fields = mergeFields([], fields);\n\n const dataKey = op.target === 'parser' ? 'parserData' : 'latestData';\n const latestData = data[0][dataKey] ? data[0][dataKey] : data || [];\n const dataFields = data[0].getFields?.() as Record<\n /** 字段key */\n string,\n IFieldsMeta\n >;\n fields.forEach(f => {\n const key = f.key;\n // NOTE: the same key in fields has been merge already\n result[key] = {};\n const dataFiledInKey = dataFields?.[key];\n if (sourceStatistics && fieldFollowSource && fieldFollowSource(key) && sourceStatistics[key]) {\n result[key] = sourceStatistics[key];\n return;\n }\n const operations: StatisticOperations = f.operations;\n const isNumberField = operations.some(op => op === 'min' || op === 'max' || op === 'allValid');\n let allValid = true;\n let fValues: any[] = latestData.reduce((res: any[], d: Datum) => {\n if (d) {\n res.push(d[key]);\n }\n return res;\n }, []);\n const len = fValues.length;\n\n if (isNumberField) {\n fValues = fValues.filter(couldBeValidNumber);\n allValid = fValues.length === len;\n } else if (operations.some(op => op === 'array-min' || op === 'array-max')) {\n fValues = fValues.reduce((res, entry) => {\n if (entry) {\n entry.forEach((d: any) => {\n if (couldBeValidNumber(d)) {\n res.push(d);\n }\n });\n }\n\n return res;\n }, []);\n } else {\n fValues = fValues.filter((entry: any) => entry !== undefined);\n }\n\n operations.forEach(op => {\n // @chensij 如果指定了计算的domain结果,则忽略计算(目前该逻辑仅在dot series中维护,因为dot series期望在filter data之后x轴改变domain,y轴不改变domain)\n if (f.customize) {\n result[key][op] = f.customize;\n } else {\n if (dataFiledInKey && dataFiledInKey.lockStatisticsByDomain && !isNil(dataFiledInKey.domain)) {\n if (op === 'values') {\n result[key][op] = [...dataFiledInKey.domain];\n return;\n }\n } else if (op === 'allValid') {\n return;\n }\n\n result[key][op] = methods[op](fValues);\n\n if (op === 'array-max') {\n result[key].max = result[key][op];\n }\n if (op === 'array-min') {\n result[key].min = result[key][op];\n }\n }\n });\n\n if (isNumberField) {\n result[key].allValid = allValid;\n }\n });\n\n return result;\n};\n"]}
@@ -4,18 +4,30 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  }), exports.pie = void 0;
6
6
 
7
- const util_1 = require("../../util"), pie = (originData, op) => {
7
+ const util_1 = require("../../util");
8
+
9
+ function transformInvalidValue(value) {
10
+ return (0, util_1.couldBeValidNumber)(value) ? Number.parseFloat(value) : 0;
11
+ }
12
+
13
+ const pie = (originData, op) => {
8
14
  const data = originData.map((datum => Object.assign({}, datum)));
9
15
  if (!data || 0 === data.length) return data;
10
- const {angleField: angleField, startAngle: startAngle, endAngle: endAngle, asStartAngle: asStartAngle, asEndAngle: asEndAngle, asMiddleAngle: asMiddleAngle, asRadian: asRadian, asRatio: asRatio, asQuadrant: asQuadrant, asK: asK} = op, total = data.reduce(((sum, d) => Number.parseFloat(d[angleField]) + sum), 0), max = data.reduce(((m, d) => Math.max(m, Number.parseFloat(d[angleField]))), -1 / 0), intervalAngle = endAngle - startAngle;
16
+ const {angleField: angleField, startAngle: startAngle, endAngle: endAngle, asStartAngle: asStartAngle, asEndAngle: asEndAngle, asMiddleAngle: asMiddleAngle, asRadian: asRadian, asRatio: asRatio, asQuadrant: asQuadrant, asK: asK} = op;
17
+ let total = 0, max = -1 / 0;
18
+ for (let index = 0; index < data.length; index++) {
19
+ const angleFieldValue = transformInvalidValue(data[index][angleField]);
20
+ total += angleFieldValue, max = Math.max(angleFieldValue, max);
21
+ }
22
+ const intervalAngle = endAngle - startAngle;
11
23
  let lastAngle = startAngle;
12
24
  return data.forEach((d => {
13
- const ratio = Number.parseFloat(d[angleField]) / total, radian = ratio * intervalAngle;
25
+ const angleFieldValue = transformInvalidValue(d[angleField]), ratio = total ? angleFieldValue / total : 0, radian = ratio * intervalAngle;
14
26
  asRatio && (d[asRatio] = ratio), asStartAngle && (d[asStartAngle] = lastAngle),
15
27
  asEndAngle && (d[asEndAngle] = lastAngle + radian), asMiddleAngle && (d[asMiddleAngle] = lastAngle + radian / 2),
16
28
  asRadian && (d[asRadian] = radian), asQuadrant && (d[asQuadrant] = (0, util_1.computeQuadrant)(lastAngle + radian / 2)),
17
- asK && (d[asK] = Number.parseFloat(d[angleField]) / max), lastAngle = d[asEndAngle];
18
- })), data[data.length - 1][asEndAngle] = endAngle, data;
29
+ asK && (d[asK] = max ? angleFieldValue / max : 0), lastAngle = d[asEndAngle];
30
+ })), 0 !== total && (data[data.length - 1][asEndAngle] = endAngle), data;
19
31
  };
20
32
 
21
33
  exports.pie = pie;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/data/transforms/pie.ts"],"names":[],"mappings":";;;AAEA,qCAA6C;AAiBtC,MAAM,GAAG,GAAG,CAAC,UAA2B,EAAE,EAAW,EAAE,EAAE;IAC9D,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,KAAY,EAAE,EAAE,CAAC,mBAAM,KAAK,EAAG,CAAC,CAAC;IAC9D,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QAC9B,OAAO,IAAI,CAAC;KACb;IACD,MAAM,EACJ,UAAU,EACV,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,aAAa,EACb,QAAQ,EACR,OAAO,EACP,UAAU,EACV,GAAG,EACJ,GAAG,EAAE,CAAC;IAEP,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;IACjF,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IAE5F,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC5C,IAAI,SAAS,GAAG,UAAU,CAAC;IAC3B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACf,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,KAAK,CAAC;QACvD,MAAM,MAAM,GAAG,KAAK,GAAG,aAAa,CAAC;QAErC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;QAChC,YAAY,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,CAAC;QAC9C,UAAU,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,CAAC;QACnD,aAAa,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7D,QAAQ,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC;QACnC,UAAU,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,IAAA,sBAAe,EAAC,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACxE,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAEzD,SAAS,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;IAC7C,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAvCW,QAAA,GAAG,OAuCd","file":"pie.js","sourcesContent":["import type { DataView } from '@visactor/vdataset';\nimport type { Datum } from '../../typings';\nimport { computeQuadrant } from '../../util';\n\nexport interface IPieOpt {\n angleField: string;\n\n startAngle: number;\n endAngle: number;\n\n asStartAngle: string;\n asEndAngle: string;\n asMiddleAngle: string;\n asRadian: string;\n asRatio: string;\n asQuadrant: string;\n asK: string;\n}\n\nexport const pie = (originData: Array<DataView>, op: IPieOpt) => {\n const data = originData.map((datum: Datum) => ({ ...datum }));\n if (!data || data.length === 0) {\n return data;\n }\n const {\n angleField,\n startAngle,\n endAngle,\n asStartAngle,\n asEndAngle,\n asMiddleAngle,\n asRadian,\n asRatio,\n asQuadrant,\n asK\n } = op;\n\n const total = data.reduce((sum, d) => Number.parseFloat(d[angleField]) + sum, 0);\n const max = data.reduce((m, d) => Math.max(m, Number.parseFloat(d[angleField])), -Infinity);\n\n const intervalAngle = endAngle - startAngle;\n let lastAngle = startAngle;\n data.forEach(d => {\n const ratio = Number.parseFloat(d[angleField]) / total;\n const radian = ratio * intervalAngle;\n\n asRatio && (d[asRatio] = ratio);\n asStartAngle && (d[asStartAngle] = lastAngle);\n asEndAngle && (d[asEndAngle] = lastAngle + radian);\n asMiddleAngle && (d[asMiddleAngle] = lastAngle + radian / 2);\n asRadian && (d[asRadian] = radian);\n asQuadrant && (d[asQuadrant] = computeQuadrant(lastAngle + radian / 2));\n asK && (d[asK] = Number.parseFloat(d[angleField]) / max);\n\n lastAngle = d[asEndAngle];\n });\n data[data.length - 1][asEndAngle] = endAngle;\n return data;\n};\n"]}
1
+ {"version":3,"sources":["../src/data/transforms/pie.ts"],"names":[],"mappings":";;;AAEA,qCAAiE;AAiBjE,SAAS,qBAAqB,CAAC,KAAU;IACvC,IAAI,CAAC,IAAA,yBAAkB,EAAC,KAAK,CAAC,EAAE;QAC9B,OAAO,CAAC,CAAC;KACV;IACD,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAEM,MAAM,GAAG,GAAG,CAAC,UAA2B,EAAE,EAAW,EAAE,EAAE;IAC9D,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,KAAY,EAAE,EAAE,CAAC,mBAAM,KAAK,EAAG,CAAC,CAAC;IAC9D,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QAC9B,OAAO,IAAI,CAAC;KACb;IACD,MAAM,EACJ,UAAU,EACV,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,aAAa,EACb,QAAQ,EACR,OAAO,EACP,UAAU,EACV,GAAG,EACJ,GAAG,EAAE,CAAC;IAEP,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;IACpB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAChD,MAAM,eAAe,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QACvE,KAAK,IAAI,eAAe,CAAC;QACzB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;KACtC;IAED,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC5C,IAAI,SAAS,GAAG,UAAU,CAAC;IAC3B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACf,MAAM,eAAe,GAAG,qBAAqB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,KAAK,GAAG,aAAa,CAAC;QAErC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;QAChC,YAAY,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,CAAC;QAC9C,UAAU,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,CAAC;QACnD,aAAa,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7D,QAAQ,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC;QACnC,UAAU,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,IAAA,sBAAe,EAAC,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACxE,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAElD,SAAS,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IACH,IAAI,KAAK,KAAK,CAAC,EAAE;QAGf,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;KAC9C;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAjDW,QAAA,GAAG,OAiDd","file":"pie.js","sourcesContent":["import type { DataView } from '@visactor/vdataset';\nimport type { Datum } from '../../typings';\nimport { computeQuadrant, couldBeValidNumber } from '../../util';\n\nexport interface IPieOpt {\n angleField: string;\n\n startAngle: number;\n endAngle: number;\n\n asStartAngle: string;\n asEndAngle: string;\n asMiddleAngle: string;\n asRadian: string;\n asRatio: string;\n asQuadrant: string;\n asK: string;\n}\n\nfunction transformInvalidValue(value: any) {\n if (!couldBeValidNumber(value)) {\n return 0;\n }\n return Number.parseFloat(value);\n}\n\nexport const pie = (originData: Array<DataView>, op: IPieOpt) => {\n const data = originData.map((datum: Datum) => ({ ...datum }));\n if (!data || data.length === 0) {\n return data;\n }\n const {\n angleField,\n startAngle,\n endAngle,\n asStartAngle,\n asEndAngle,\n asMiddleAngle,\n asRadian,\n asRatio,\n asQuadrant,\n asK\n } = op;\n\n let total = 0;\n let max = -Infinity;\n for (let index = 0; index < data.length; index++) {\n const angleFieldValue = transformInvalidValue(data[index][angleField]);\n total += angleFieldValue;\n max = Math.max(angleFieldValue, max);\n }\n\n const intervalAngle = endAngle - startAngle;\n let lastAngle = startAngle;\n data.forEach(d => {\n const angleFieldValue = transformInvalidValue(d[angleField]);\n const ratio = total ? angleFieldValue / total : 0;\n const radian = ratio * intervalAngle;\n\n asRatio && (d[asRatio] = ratio);\n asStartAngle && (d[asStartAngle] = lastAngle);\n asEndAngle && (d[asEndAngle] = lastAngle + radian);\n asMiddleAngle && (d[asMiddleAngle] = lastAngle + radian / 2);\n asRadian && (d[asRadian] = radian);\n asQuadrant && (d[asQuadrant] = computeQuadrant(lastAngle + radian / 2));\n asK && (d[asK] = max ? angleFieldValue / max : 0);\n\n lastAngle = d[asEndAngle];\n });\n if (total !== 0) {\n // 数据都为 0 时,起始角和结束角相同,不应该强制赋值\n // 防止一个扇区的角度会因为浮点数精度问题和传入的 endAngle 不相等\n data[data.length - 1][asEndAngle] = endAngle;\n }\n return data;\n};\n"]}
@@ -35,14 +35,15 @@ const vutils_1 = require("@visactor/vutils"), waterfall_1 = require("../../const
35
35
  startIndex < 0 ? console.warn("total.collectCountField error") : start = totalData[startIndex].start,
36
36
  endIndex < 0 ? console.warn("total.collectCountField error") : end = totalData[endIndex].end;
37
37
  } else totalSpec.startField && !(0, vutils_1.isNil)(d[totalSpec.startField]) && (start = +d[totalSpec.startField]),
38
- totalSpec.valueField && !(0, vutils_1.isNil)(d[totalSpec.valueField]) && (end = start + +d[totalSpec.valueField]);
38
+ totalSpec.valueField && !(0, vutils_1.isNil)(d[totalSpec.valueField]) && (end = (0,
39
+ vutils_1.precisionAdd)(start, +d[totalSpec.valueField]));
39
40
  d[startAs] = start, d[endAs] = end, d[valueField] = end - start, total.start = start,
40
41
  total.end = end;
41
42
  }
42
43
  }
43
44
  } else index === indexValues.length - 1 && (total.start = 0, d[startAs] = total.start,
44
45
  d[endAs] = total.end, isTotalTag = !0);
45
- isTotalTag || (d[startAs] = +total.end, d[endAs] = d[startAs] + +d[valueField],
46
+ isTotalTag || (d[startAs] = +total.end, d[endAs] = (0, vutils_1.precisionAdd)(d[startAs], +d[valueField]),
46
47
  total.end = d[endAs]), total.isTotal = isTotalTag, ((0, vutils_1.isNil)(seriesField) || seriesField === waterfall_1.WaterfallDefaultSeriesField) && (d[waterfall_1.WaterfallDefaultSeriesField] = isTotalTag ? seriesFieldName.total : +d[valueField] >= 0 ? seriesFieldName.increase : seriesFieldName.decrease);
47
48
  })), temp = Object.assign(Object.assign({}, total), {
48
49
  lastIndex: key
@@ -56,7 +57,7 @@ const waterfallFillTotal = (data, op) => {
56
57
  if (!data) return data;
57
58
  const {indexField: indexField, valueField: valueField, total: total, seriesField: seriesField} = op, totalData = {
58
59
  [indexField]: (null == total ? void 0 : total.text) || "total",
59
- [valueField]: data.reduce(((pre, cur) => pre + +cur[valueField]), 0)
60
+ [valueField]: data.reduce(((pre, cur) => (0, vutils_1.precisionAdd)(pre, +cur[valueField])), 0)
60
61
  };
61
62
  return seriesField && (totalData[seriesField] = "total"), data.push(totalData),
62
63
  data;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/data/transforms/waterfall.ts"],"names":[],"mappings":"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","file":"waterfall.js","sourcesContent":["import { isNil } from '@visactor/vutils';\nimport type { DataView } from '@visactor/vdataset';\nimport type { IWaterfallSeriesSpec } from '../../series/waterfall/interface';\nimport type { Datum } from '../../typings';\nimport { WaterfallDefaultSeriesField } from '../../constant/waterfall';\n\nexport interface IWaterfallOpt {\n indexField: string;\n valueField: string;\n seriesField?: string;\n startAs: string;\n endAs: string;\n total: IWaterfallSeriesSpec['total'];\n seriesFieldName: {\n total: string;\n increase: string;\n decrease: string;\n };\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, valueField, startAs, endAs, total: totalSpec, seriesField, seriesFieldName, groupData } = op;\n const totalData: {\n start: number;\n end: number;\n lastIndex: string;\n lastEnd: number;\n index: string;\n isTotal: boolean;\n }[] = [];\n const { dimensionValues, dimensionData } = groupData().latestData as {\n dimensionValues: { [key in string]: Set<string> };\n dimensionData: { [key in string]: Datum[] };\n };\n const indexValues = Array.from(dimensionValues[indexField]);\n let temp: { start: number; end: number; lastIndex: string } = { start: 0, end: 0, lastIndex: null };\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 };\n\n const indexData = dimensionData[key];\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 if (totalSpec.type === 'custom') {\n const { start, end } = totalSpec.product(d, temp);\n d[startAs] = start;\n d[endAs] = end;\n total.end = end;\n total.start = start;\n } else {\n let start = 0;\n let end = total.end;\n // 如果有设置count, valueField 和 startField 无效\n if (totalSpec.collectCountField && !isNil(d[totalSpec.collectCountField])) {\n const startIndex = totalData.length - +d[totalSpec.collectCountField];\n const endIndex = totalData.length - 1;\n if (startIndex < 0) {\n console.warn('total.collectCountField error');\n } else {\n start = totalData[startIndex].start;\n }\n if (endIndex < 0) {\n console.warn('total.collectCountField error');\n } else {\n end = totalData[endIndex].end;\n }\n } else {\n if (totalSpec.startField && !isNil(d[totalSpec.startField])) {\n start = +d[totalSpec.startField];\n }\n if (totalSpec.valueField && !isNil(d[totalSpec.valueField])) {\n end = start + +d[totalSpec.valueField];\n }\n }\n d[startAs] = start;\n d[endAs] = end;\n d[valueField] = end - start;\n total.start = start;\n total.end = end;\n }\n }\n }\n if (!isTotalTag) {\n d[startAs] = +total.end;\n d[endAs] = d[startAs] + +d[valueField];\n total.end = d[endAs];\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 temp = { ...total, lastIndex: key };\n totalData.push(total);\n });\n return totalData;\n};\n\nexport interface IWaterfallFillEndOpt {\n indexField: string;\n valueField: string;\n seriesField?: string;\n total: IWaterfallSeriesSpec['total'];\n}\n\nexport const waterfallFillTotal = (data: Array<Datum>, op: IWaterfallFillEndOpt) => {\n if (!data) {\n return data;\n }\n const { indexField, valueField, total, seriesField } = op;\n const totalData = {\n [indexField]: total?.text || 'total',\n [valueField]: data.reduce((pre, cur) => pre + +cur[valueField], 0)\n };\n if (seriesField) {\n totalData[seriesField] = 'total';\n }\n data.push(totalData);\n return data;\n};\n"]}
1
+ {"version":3,"sources":["../src/data/transforms/waterfall.ts"],"names":[],"mappings":"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","file":"waterfall.js","sourcesContent":["import { isNil, precisionAdd } from '@visactor/vutils';\nimport type { DataView } from '@visactor/vdataset';\nimport type { IWaterfallSeriesSpec } from '../../series/waterfall/interface';\nimport type { Datum } from '../../typings';\nimport { WaterfallDefaultSeriesField } from '../../constant/waterfall';\n\nexport interface IWaterfallOpt {\n indexField: string;\n valueField: string;\n seriesField?: string;\n startAs: string;\n endAs: string;\n total: IWaterfallSeriesSpec['total'];\n seriesFieldName: {\n total: string;\n increase: string;\n decrease: string;\n };\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, valueField, startAs, endAs, total: totalSpec, seriesField, seriesFieldName, groupData } = op;\n const totalData: {\n start: number;\n end: number;\n lastIndex: string;\n lastEnd: number;\n index: string;\n isTotal: boolean;\n }[] = [];\n const { dimensionValues, dimensionData } = groupData().latestData as {\n dimensionValues: { [key in string]: Set<string> };\n dimensionData: { [key in string]: Datum[] };\n };\n const indexValues = Array.from(dimensionValues[indexField]);\n let temp: { start: number; end: number; lastIndex: string } = { start: 0, end: 0, lastIndex: null };\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 };\n\n const indexData = dimensionData[key];\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 if (totalSpec.type === 'custom') {\n const { start, end } = totalSpec.product(d, temp);\n d[startAs] = start;\n d[endAs] = end;\n total.end = end;\n total.start = start;\n } else {\n let start = 0;\n let end = total.end;\n // 如果有设置count, valueField 和 startField 无效\n if (totalSpec.collectCountField && !isNil(d[totalSpec.collectCountField])) {\n const startIndex = totalData.length - +d[totalSpec.collectCountField];\n const endIndex = totalData.length - 1;\n if (startIndex < 0) {\n console.warn('total.collectCountField error');\n } else {\n start = totalData[startIndex].start;\n }\n if (endIndex < 0) {\n console.warn('total.collectCountField error');\n } else {\n end = totalData[endIndex].end;\n }\n } else {\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 }\n d[startAs] = start;\n d[endAs] = end;\n d[valueField] = end - start;\n total.start = start;\n total.end = end;\n }\n }\n }\n if (!isTotalTag) {\n d[startAs] = +total.end;\n d[endAs] = precisionAdd(d[startAs], +d[valueField]);\n total.end = d[endAs];\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 temp = { ...total, lastIndex: key };\n totalData.push(total);\n });\n return totalData;\n};\n\nexport interface IWaterfallFillEndOpt {\n indexField: string;\n valueField: string;\n seriesField?: string;\n total: IWaterfallSeriesSpec['total'];\n}\n\nexport const waterfallFillTotal = (data: Array<Datum>, op: IWaterfallFillEndOpt) => {\n if (!data) {\n return data;\n }\n const { indexField, valueField, total, seriesField } = 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 data.push(totalData);\n return data;\n};\n"]}
@@ -68,7 +68,9 @@ export declare abstract class BaseModel<T extends IModelSpec> extends LayoutItem
68
68
  protected _mergeMarkTheme(): void;
69
69
  protected _mergeThemeToSpec(): void;
70
70
  protected _getDefaultSpecFromChart(chartSpec: any): Partial<T>;
71
- protected _preprocessSpec(obj?: any): any;
71
+ protected _shouldMergeThemeToSpec(): boolean;
72
+ protected _prepareSpecBeforeMergingTheme(obj?: any): any;
73
+ protected _prepareSpecAfterMergingTheme(obj?: any): any;
72
74
  setCurrentTheme(theme: any, noRender?: boolean): void;
73
75
  updateLayoutAttribute(): void;
74
76
  setAttrFromSpec(): void;
@@ -116,16 +116,26 @@ class BaseModel extends layout_item_1.LayoutItem {
116
116
  }));
117
117
  }
118
118
  _mergeThemeToSpec() {
119
- const chartSpec = this.getChart().getSpec();
120
- this._spec = (0, util_1.mergeSpec)({}, this._theme, this._getDefaultSpecFromChart(chartSpec), this._originalSpec);
119
+ if (this._shouldMergeThemeToSpec()) {
120
+ const specFromChart = this._getDefaultSpecFromChart(this.getChart().getSpec()), merge = originalSpec => (0,
121
+ util_1.mergeSpec)({}, this._theme, this._prepareSpecBeforeMergingTheme(specFromChart), this._prepareSpecBeforeMergingTheme(originalSpec));
122
+ (0, vutils_1.isArray)(this._originalSpec) ? this._spec = this._originalSpec.map((spec => merge(spec))) : this._spec = merge(this._originalSpec);
123
+ }
124
+ this._prepareSpecAfterMergingTheme();
121
125
  }
122
126
  _getDefaultSpecFromChart(chartSpec) {
123
127
  return {};
124
128
  }
125
- _preprocessSpec(obj) {
129
+ _shouldMergeThemeToSpec() {
130
+ return !0;
131
+ }
132
+ _prepareSpecBeforeMergingTheme(obj) {
133
+ return obj;
134
+ }
135
+ _prepareSpecAfterMergingTheme(obj) {
126
136
  var _a, _b, _c;
127
137
  arguments.length || (obj = this._spec);
128
- const newObj = (0, util_1.preprocessSpecOrTheme)(obj, null === (_c = null === (_b = (_a = this._option).getTheme) || void 0 === _b ? void 0 : _b.call(_a)) || void 0 === _c ? void 0 : _c.colorScheme, "series" === this.modelType ? this.type : void 0);
138
+ const newObj = (0, util_1.preprocessSpecOrTheme)("spec", obj, null === (_c = null === (_b = (_a = this._option).getTheme) || void 0 === _b ? void 0 : _b.call(_a)) || void 0 === _c ? void 0 : _c.colorScheme, "series" === this.modelType ? this.type : void 0);
129
139
  return arguments.length || (this._spec = newObj), newObj;
130
140
  }
131
141
  setCurrentTheme(theme, noRender) {}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/model/base-model.ts"],"names":[],"mappings":";;;AAAA,kCAA6F;AAC7F,0CAAuC;AAEvC,+CAA2C;AAiB3C,+DAA0D;AAC1D,0CAAqC;AAErC,6CAAyD;AACzD,6CAA0C;AAE1C,+CAA2C;AAE3C,MAAsB,SAAgC,SAAQ,wBAAa;IAgBzE,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAGD,YAAY;QACV,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAOD,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAKD,QAAQ;;QACN,OAAO,MAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,QAAQ,EAAE,mCAAI,EAAE,CAAC;IACvC,CAAC;IACD,cAAc;;QACZ,OAAO,MAAA,IAAI,CAAC,MAAM,0CAAE,cAAc,EAAE,CAAC;IACvC,CAAC;IACD,UAAU;QACR,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,eAAe;QACb,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClC,IAAI,EAAE,IAAI,CAAC,IAAoB;YAC/B,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC,CAAC,CAAC;IACN,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC;IAID,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;IAC9B,CAAC;IAQD,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAKD,YAAY,IAAO,EAAE,MAAoB;;QACvC,KAAK,CAAC,MAAM,CAAC,CAAC;QA5EP,SAAI,GAAW,MAAM,CAAC;QACtB,cAAS,GAAW,MAAM,CAAC;QAIpC,WAAM,GAA+B,SAAS,CAAC;QASrC,UAAK,GAAmB,IAAI,CAAC;QAK7B,eAAU,GAAW,CAAC,CAAC;QAKxB,YAAO,GAAW,EAAE,CAAC;QAWpB,WAAM,GAAY,IAAI,kBAAO,EAAE,CAAC;QA8BhC,oBAAe,GAAgB,IAAI,CAAC;QAQpC,cAAS,GAAY,IAAI,CAAC;QAIlC,IAAI,CAAC,EAAE,GAAG,IAAA,eAAQ,GAAE,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAA,oBAAa,EAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,MAAA,MAAM,CAAC,SAAS,mCAAI,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,MAAA,MAAM,CAAC,OAAO,mCAAI,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,IAAI,aAAK,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAA,MAAM,CAAC,GAAG,0CAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,IAAI,uCAAiB,iCAC7B,MAAM,KACT,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,IAC1D,CAAC;IACL,CAAC;IAGS,aAAa;QACrB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,WAAW,CAAC,QAAiC;QAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC,MAAwB;IAE7B,CAAC;IAED,SAAS;IAET,CAAC;IAED,aAAa,CAAC,UAAiB,EAAE,QAAqB,EAAE,GAAQ;QAC9D,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACxB,CAAC;IACD,WAAW,CAAC,GAAQ;QAElB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,IAAA,gBAAO,EAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,EAAE;YACtE,IAAI,CAAC,qBAAqB,EAAE,CAAC;SAC9B;QACD,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAES,YAAY;;QACpB,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,OAAO;SACR;QACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,MAAA,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,0CAAE,YAAY,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED,aAAa,CAAC,GAAyB;IAEvC,CAAC;IAGD,YAAY;IAEZ,CAAC;IAED,OAAO;;QACL,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACrB,MAAA,IAAI,CAAC,KAAK,0CAAE,OAAO,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;IAED,UAAU,CAAC,IAAS;QAClB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAA,oBAAa,EAAC,IAAI,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG;YACb,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,KAAK;SACjB,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,KAAW;QAChB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvB,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAES,UAAU,CAAC,KAAW;QAC9B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAGS,eAAe;;QACvB,MAAM,WAAW,GAAG,MAAA,MAAA,IAAI,CAAC,OAAO,EAAC,QAAQ,kDAAI,CAAC;QAC9C,IAAI,IAAA,cAAK,EAAC,WAAW,CAAC,IAAI,IAAA,cAAK,EAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YAC5C,OAAO;SACR;QAED,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,WAAW,CAAC;QAC3E,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;;YAChD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAA,gBAAS,EAC3B,EAAE,EACF,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAG,IAAA,cAAK,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,mCAAI,EAAE,EACvC,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAG,IAAI,CAAC,mCAAI,EAAE,EAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAClB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAGS,iBAAiB;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK,GAAG,IAAA,gBAAS,EAAC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACxG,CAAC;IAGS,wBAAwB,CAAC,SAAc;QAC/C,OAAO,EAAE,CAAC;IACZ,CAAC;IAGS,eAAe,CAAC,GAAS;;QACjC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YACrB,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;SAClB;QAED,MAAM,MAAM,GAAG,IAAA,4BAAqB,EAClC,GAAG,EACH,MAAA,MAAA,MAAA,IAAI,CAAC,OAAO,EAAC,QAAQ,kDAAI,0CAAE,WAAW,EACtC,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAI,CAAC,IAAuB,CAAC,CAAC,CAAC,SAAS,CACxE,CAAC;QAEF,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YACrB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;SACrB;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,eAAe,CAAC,KAAU,EAAE,QAAkB;IAE9C,CAAC;IAED,qBAAqB;IAErB,CAAC;IAED,eAAe;QACb,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACrE,CAAC;IAGS,iBAAiB,CACzB,KAAyD;QAEzD,MAAM,QAAQ,qBAAa,KAAK,CAAE,CAAC;QACnC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,YAAY,CACV,IAAiB,EACjB,KAA0D,EAC1D,KAAsB,EACtB,KAAc;QAEd,IAAI,CAAC,IAAA,cAAO,EAAC,IAAI,CAAC,IAAI,CAAC,IAAA,cAAO,EAAC,KAAK,CAAC,EAAE;YACrC,OAAO;SACR;QACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;IAED,qBAAqB,CAAC,IAAY,EAAE,IAAU,EAAE,GAAY;QAC1D,IAAI,CAAC,IAAA,cAAO,EAAC,IAAI,CAAC,IAAI,CAAC,IAAA,cAAO,EAAC,IAAI,CAAC,EAAE;YACpC,OAAO;SACR;QACD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAC9B,MAAM,OAAO,qBAAQ,IAAI,CAAE,CAAC;QAE5B,IAAI,KAAK,EAAE;YACT,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;SAC/C;QACD,IAAI,KAAK,EAAE;YACT,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBAC/B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1D,CAAC,CAAC,CAAC;SACJ;QACD,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IAES,oBAAoB,CAAC,GAAW,EAAE,GAAY;QACtD,IAAI,IAAI,GAAG,GAAG,iBAAM,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC;QACxE,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW;;QACT,MAAA,IAAI,CAAC,KAAK,0CAAE,OAAO,EAAE,CAAC;IACxB,CAAC;IAED,YAAY,CAAC,KAA2B;QACtC,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAC1B,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,aAAa;;QACX,MAAA,IAAI,CAAC,KAAK,0CAAE,OAAO,EAAE,CAAC;IACxB,CAAC;IAED,aAAa,CAAC,IAAc;QAC1B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAgB,CAAC,CAAC;IAC3D,CAAC;IAED,aAAa;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAqB,CAAC,CAAC;IACtE,CAAC;IAES,WAAW,CAAkB,QAAwB,EAAE,SAA+B,EAAE;QAChG,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;QAChC,MAAM,CAAC,GAAG,iBAAO,CAAC,UAAU,CAAC,IAAW,EAAE,IAAI,kBAC5C,KAAK,EAAE,IAAI,EACX,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EACrB,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,IAClC,MAAM,EACJ,CAAC;QACR,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,CAAC;IACX,CAAC;IAOS,aAAa;QACrB,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAhVD,8BAgVC","file":"base-model.js","sourcesContent":["import { createID, isValid, cloneDeepSpec, preprocessSpecOrTheme, mergeSpec } from '../util';\nimport { Event } from '../event/event';\nimport type { IEvent } from '../event/interface';\nimport { LayoutItem } from './layout-item';\nimport type {\n IEffect,\n IModel,\n IModelInitOption,\n IModelOption,\n IModelRenderOption,\n IModelEvaluateOption,\n IModelSpec,\n ILayoutRect,\n IModelMarkInfo\n} from './interface';\nimport type { CoordinateType } from '../typings/coordinate';\nimport type { IMark, IMarkOption, IMarkRaw, IMarkStyle, MarkTypeEnum } from '../mark/interface';\nimport type { Datum, StateValueType, ConvertToMarkStyleSpec, ICommonSpec, StringOrNumber, IRect } from '../typings';\nimport type { ITooltipHelper } from './tooltip-helper';\nimport type { CompilableData } from '../compile/data/compilable-data';\nimport { ModelStateManager } from './model-state-manager';\nimport { PREFIX } from '../constant';\nimport type { IElement, IGroupMark, IMark as IVGrammarMark } from '@visactor/vgrammar';\nimport { array, isEqual, isNil } from '@visactor/vutils';\nimport { Factory } from '../core/factory';\nimport type { SeriesTypeEnum } from '../series/interface';\nimport { MarkSet } from '../mark/mark-set';\n\nexport abstract class BaseModel<T extends IModelSpec> extends LayoutItem<T> implements IModel {\n readonly type: string = 'null';\n readonly modelType: string = 'null';\n\n readonly id;\n\n userId: StringOrNumber | undefined = undefined;\n\n // 事件\n readonly event: IEvent;\n\n // 副作用\n readonly effect: IEffect;\n\n // 数据\n protected _data: CompilableData = null;\n getData() {\n return this._data;\n }\n\n protected _specIndex: number = 0;\n getSpecIndex() {\n return this._specIndex;\n }\n\n readonly specKey: string = '';\n\n protected _originalSpec: any;\n\n protected declare _option: IModelOption;\n getOption() {\n return this._option;\n }\n\n protected _sceneNodeMap: Map<string, IElement>;\n\n protected _marks: MarkSet = new MarkSet();\n getMarks(): IMark[] {\n return this._marks?.getMarks() ?? [];\n }\n getMarkNameMap() {\n return this._marks?.getMarkNameMap();\n }\n getMarkSet() {\n return this._marks;\n }\n getMarkInfoList(): IModelMarkInfo[] {\n return this.getMarks().map(mark => ({\n type: mark.type as MarkTypeEnum,\n name: mark.name\n }));\n }\n\n getChart() {\n return this._option.getChart();\n }\n\n /** 状态管理器 */\n state: ModelStateManager;\n getState() {\n return this.state._stateMap;\n }\n\n protected _theme?: any; // 非全局 theme,是对应于具体 model 的 theme 对象\n\n /** for layout diff */\n protected _lastLayoutRect: ILayoutRect = null;\n\n protected _tooltipHelper: ITooltipHelper | undefined;\n get tooltipHelper() {\n return this._tooltipHelper;\n }\n\n // TODO: 有些hack,这个tag是为了避免布局逻辑中,轴的数据变化,又由数据变化触发重新布局\n protected _isLayout: boolean = true;\n\n constructor(spec: T, option: IModelOption) {\n super(option);\n this.id = createID();\n this._originalSpec = spec;\n this._spec = cloneDeepSpec(spec);\n this.userId = spec.id;\n this._specIndex = option.specIndex ?? 0;\n this.specKey = option.specKey ?? '';\n this.effect = {};\n this.event = new Event(option.eventDispatcher, option.mode);\n option.map?.set(this.id, this);\n this._sceneNodeMap = new Map();\n this.state = new ModelStateManager({\n ...option,\n stateKeyToSignalName: this.stateKeyToSignalName.bind(this)\n });\n }\n coordinate?: CoordinateType;\n\n protected _releaseEvent() {\n this.event.release();\n }\n\n created() {\n this._initTheme();\n this.setAttrFromSpec();\n }\n\n updateState(newState: Record<string, unknown>) {\n return this.state.updateState(newState);\n }\n\n init(option: IModelInitOption) {\n // do nothing\n }\n\n afterInit() {\n // do nothing\n }\n\n onLayoutStart(layoutRect: IRect, viewRect: ILayoutRect, ctx: any): void {\n super.onLayoutStart(layoutRect, viewRect, ctx);\n this._isLayout = true;\n }\n onLayoutEnd(ctx: any): void {\n // diff layoutRect\n const layoutRect = this.getLayoutRect();\n if (this._forceLayoutTag || !isEqual(this._lastLayoutRect, layoutRect)) {\n this.updateLayoutAttribute();\n }\n this._forceLayoutTag = false;\n this.getMarks().forEach(m => m.updateLayoutState(true, true));\n this._isLayout = false;\n }\n\n protected _forceLayout() {\n if (this._isLayout) {\n return;\n }\n this._forceLayoutTag = true;\n this._option.globalInstance.getChart()?.setLayoutTag(true);\n }\n\n onEvaluateEnd(ctx: IModelEvaluateOption) {\n // do nothing\n }\n abstract onRender(ctx: IModelRenderOption): void;\n\n onDataUpdate() {\n // do nothing\n }\n\n release() {\n this._releaseEvent();\n this._originalSpec = {};\n this._spec = undefined;\n this.getMarks().forEach(m => m.release());\n this.state.release();\n this._data?.release();\n this._data = this._specIndex = this._sceneNodeMap = null;\n this._marks.clear();\n super.release();\n }\n\n updateSpec(spec: any) {\n this._originalSpec = spec;\n this._spec = cloneDeepSpec(spec);\n const result = {\n change: false,\n reMake: false,\n reMakeData: false,\n reRender: false,\n reSize: false,\n reCompile: false\n };\n return result;\n }\n\n reInit(theme?: any) {\n this._initTheme(theme);\n this.setAttrFromSpec();\n }\n\n protected _initTheme(theme?: any) {\n this._theme = theme;\n\n this._mergeMarkTheme();\n }\n\n /** 将全局的 mark theme 合并进 model theme */\n protected _mergeMarkTheme() {\n const globalTheme = this._option.getTheme?.();\n if (isNil(globalTheme) || isNil(this._theme)) {\n return;\n }\n\n const { mark: markThemeByType, markByName: markThemeByName } = globalTheme;\n this.getMarkInfoList().forEach(({ type, name }) => {\n this._theme[name] = mergeSpec(\n {},\n markThemeByType?.[array(type)[0]] ?? {},\n markThemeByName?.[name] ?? {},\n this._theme[name]\n );\n });\n }\n\n /** 将 theme merge 到 spec 中 */\n protected _mergeThemeToSpec() {\n const chartSpec = this.getChart().getSpec();\n this._spec = mergeSpec({}, this._theme, this._getDefaultSpecFromChart(chartSpec), this._originalSpec);\n }\n\n /** 从 chart spec 提取配置作为 model 的默认 spec 配置 */\n protected _getDefaultSpecFromChart(chartSpec: any): Partial<T> {\n return {};\n }\n\n /** 对 spec 进行遍历和转换 */\n protected _preprocessSpec(obj?: any): any {\n if (!arguments.length) {\n obj = this._spec;\n }\n\n const newObj = preprocessSpecOrTheme(\n obj,\n this._option.getTheme?.()?.colorScheme,\n this.modelType === 'series' ? (this.type as SeriesTypeEnum) : undefined\n );\n\n if (!arguments.length) {\n this._spec = newObj;\n }\n return newObj;\n }\n\n setCurrentTheme(theme: any, noRender?: boolean) {\n // do nothing\n }\n\n updateLayoutAttribute() {\n // do nothing\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec(this._spec, this._option.getChartViewRect());\n }\n\n /** mark style 内部转换逻辑,override 使用 */\n protected _convertMarkStyle<T extends ICommonSpec = ICommonSpec>(\n style: Partial<IMarkStyle<T> | ConvertToMarkStyleSpec<T>>\n ): Partial<IMarkStyle<T> | ConvertToMarkStyleSpec<T>> {\n const newStyle: any = { ...style };\n return newStyle;\n }\n\n setMarkStyle<T extends ICommonSpec>(\n mark: IMarkRaw<T>,\n style?: Partial<IMarkStyle<T> | ConvertToMarkStyleSpec<T>>,\n state?: StateValueType,\n level?: number\n ) {\n if (!isValid(mark) || !isValid(style)) {\n return;\n }\n mark.setStyle(this._convertMarkStyle(style), state, level);\n }\n\n initMarkStyleWithSpec(mark?: IMark, spec?: any, key?: string) {\n if (!isValid(mark) || !isValid(spec)) {\n return;\n }\n const { style, state } = spec;\n const newSpec = { ...spec };\n\n if (style) {\n newSpec.style = this._convertMarkStyle(style);\n }\n if (state) {\n newSpec.state = {};\n Object.keys(state).forEach(key => {\n newSpec.state[key] = this._convertMarkStyle(state[key]);\n });\n }\n mark.initStyleWithSpec(newSpec, key);\n }\n\n protected stateKeyToSignalName(key: string, opt?: string) {\n let name = `${PREFIX}_${this.modelType}_${this.type}_${this.id}_${key}`;\n opt && (name += `_${opt}`);\n return name;\n }\n\n compileData() {\n this._data?.compile();\n }\n\n compileMarks(group?: string | IGroupMark) {\n this.getMarks().forEach(m => {\n m.compile({ group });\n });\n }\n\n compileSignal() {\n this.state?.compile();\n }\n\n bindSceneNode(node: IElement) {\n this._sceneNodeMap.set(node.mark.id(), node as IElement);\n }\n\n getSceneNodes() {\n return Array.from(this._sceneNodeMap.values());\n }\n\n getSceneNodeMarks() {\n return this.getSceneNodes().map(node => node.mark as IVGrammarMark);\n }\n\n protected _createMark<T extends IMark>(markInfo: IModelMarkInfo, option: Partial<IMarkOption> = {}): T {\n const { type, name } = markInfo;\n const m = Factory.createMark(type as any, name, {\n model: this,\n map: this._option.map,\n getCompiler: this.getCompiler,\n globalScale: this._option.globalScale,\n ...option\n }) as T;\n m?.created();\n return m;\n }\n\n /**\n * 数据唯一ID\n * 根据自身动画数据匹配需求设置返回值。\n * 默认返回 undefined 时,根据 VGrammar 默认数据 ID 进行索引和匹配。\n */\n protected _getDataIdKey(): string | ((datum: Datum) => string) | undefined {\n return undefined;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/model/base-model.ts"],"names":[],"mappings":"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","file":"base-model.js","sourcesContent":["import { createID, isValid, cloneDeepSpec, preprocessSpecOrTheme, mergeSpec } from '../util';\nimport { Event } from '../event/event';\nimport type { IEvent } from '../event/interface';\nimport { LayoutItem } from './layout-item';\nimport type {\n IEffect,\n IModel,\n IModelInitOption,\n IModelOption,\n IModelRenderOption,\n IModelEvaluateOption,\n IModelSpec,\n ILayoutRect,\n IModelMarkInfo\n} from './interface';\nimport type { CoordinateType } from '../typings/coordinate';\nimport type { IMark, IMarkOption, IMarkRaw, IMarkStyle, MarkTypeEnum } from '../mark/interface';\nimport type { Datum, StateValueType, ConvertToMarkStyleSpec, ICommonSpec, StringOrNumber, IRect } from '../typings';\nimport type { ITooltipHelper } from './tooltip-helper';\nimport type { CompilableData } from '../compile/data/compilable-data';\nimport { ModelStateManager } from './model-state-manager';\nimport { PREFIX } from '../constant';\nimport type { IElement, IGroupMark, IMark as IVGrammarMark } from '@visactor/vgrammar';\nimport { array, isArray, isEqual, isNil } from '@visactor/vutils';\nimport { Factory } from '../core/factory';\nimport type { SeriesTypeEnum } from '../series/interface';\nimport { MarkSet } from '../mark/mark-set';\n\nexport abstract class BaseModel<T extends IModelSpec> extends LayoutItem<T> implements IModel {\n readonly type: string = 'null';\n readonly modelType: string = 'null';\n\n readonly id;\n\n userId: StringOrNumber | undefined = undefined;\n\n // 事件\n readonly event: IEvent;\n\n // 副作用\n readonly effect: IEffect;\n\n // 数据\n protected _data: CompilableData = null;\n getData() {\n return this._data;\n }\n\n protected _specIndex: number = 0;\n getSpecIndex() {\n return this._specIndex;\n }\n\n readonly specKey: string = '';\n\n protected _originalSpec: any;\n\n protected declare _option: IModelOption;\n getOption() {\n return this._option;\n }\n\n protected _sceneNodeMap: Map<string, IElement>;\n\n protected _marks: MarkSet = new MarkSet();\n getMarks(): IMark[] {\n return this._marks?.getMarks() ?? [];\n }\n getMarkNameMap() {\n return this._marks?.getMarkNameMap();\n }\n getMarkSet() {\n return this._marks;\n }\n getMarkInfoList(): IModelMarkInfo[] {\n return this.getMarks().map(mark => ({\n type: mark.type as MarkTypeEnum,\n name: mark.name\n }));\n }\n\n getChart() {\n return this._option.getChart();\n }\n\n /** 状态管理器 */\n state: ModelStateManager;\n getState() {\n return this.state._stateMap;\n }\n\n protected _theme?: any; // 非全局 theme,是对应于具体 model 的 theme 对象\n\n /** for layout diff */\n protected _lastLayoutRect: ILayoutRect = null;\n\n protected _tooltipHelper: ITooltipHelper | undefined;\n get tooltipHelper() {\n return this._tooltipHelper;\n }\n\n // TODO: 有些hack,这个tag是为了避免布局逻辑中,轴的数据变化,又由数据变化触发重新布局\n protected _isLayout: boolean = true;\n\n constructor(spec: T, option: IModelOption) {\n super(option);\n this.id = createID();\n this._originalSpec = spec;\n this._spec = cloneDeepSpec(spec);\n this.userId = spec.id;\n this._specIndex = option.specIndex ?? 0;\n this.specKey = option.specKey ?? '';\n this.effect = {};\n this.event = new Event(option.eventDispatcher, option.mode);\n option.map?.set(this.id, this);\n this._sceneNodeMap = new Map();\n this.state = new ModelStateManager({\n ...option,\n stateKeyToSignalName: this.stateKeyToSignalName.bind(this)\n });\n }\n coordinate?: CoordinateType;\n\n protected _releaseEvent() {\n this.event.release();\n }\n\n created() {\n this._initTheme();\n this.setAttrFromSpec();\n }\n\n updateState(newState: Record<string, unknown>) {\n return this.state.updateState(newState);\n }\n\n init(option: IModelInitOption) {\n // do nothing\n }\n\n afterInit() {\n // do nothing\n }\n\n onLayoutStart(layoutRect: IRect, viewRect: ILayoutRect, ctx: any): void {\n super.onLayoutStart(layoutRect, viewRect, ctx);\n this._isLayout = true;\n }\n onLayoutEnd(ctx: any): void {\n // diff layoutRect\n const layoutRect = this.getLayoutRect();\n if (this._forceLayoutTag || !isEqual(this._lastLayoutRect, layoutRect)) {\n this.updateLayoutAttribute();\n }\n this._forceLayoutTag = false;\n this.getMarks().forEach(m => m.updateLayoutState(true, true));\n this._isLayout = false;\n }\n\n protected _forceLayout() {\n if (this._isLayout) {\n return;\n }\n this._forceLayoutTag = true;\n this._option.globalInstance.getChart()?.setLayoutTag(true);\n }\n\n onEvaluateEnd(ctx: IModelEvaluateOption) {\n // do nothing\n }\n abstract onRender(ctx: IModelRenderOption): void;\n\n onDataUpdate() {\n // do nothing\n }\n\n release() {\n this._releaseEvent();\n this._originalSpec = {};\n this._spec = undefined;\n this.getMarks().forEach(m => m.release());\n this.state.release();\n this._data?.release();\n this._data = this._specIndex = this._sceneNodeMap = null;\n this._marks.clear();\n super.release();\n }\n\n updateSpec(spec: any) {\n this._originalSpec = spec;\n this._spec = cloneDeepSpec(spec);\n const result = {\n change: false,\n reMake: false,\n reMakeData: false,\n reRender: false,\n reSize: false,\n reCompile: false\n };\n return result;\n }\n\n reInit(theme?: any) {\n this._initTheme(theme);\n this.setAttrFromSpec();\n }\n\n protected _initTheme(theme?: any) {\n this._theme = theme;\n\n this._mergeMarkTheme();\n }\n\n /** 将全局的 mark theme 合并进 model theme */\n protected _mergeMarkTheme() {\n const globalTheme = this._option.getTheme?.();\n if (isNil(globalTheme) || isNil(this._theme)) {\n return;\n }\n\n const { mark: markThemeByType, markByName: markThemeByName } = globalTheme;\n this.getMarkInfoList().forEach(({ type, name }) => {\n this._theme[name] = mergeSpec(\n {},\n markThemeByType?.[array(type)[0]] ?? {},\n markThemeByName?.[name] ?? {},\n this._theme[name]\n );\n });\n }\n\n /** 将 theme merge 到 spec 中 */\n protected _mergeThemeToSpec() {\n if (this._shouldMergeThemeToSpec()) {\n const specFromChart = this._getDefaultSpecFromChart(this.getChart().getSpec());\n\n // this._originalSpec + specFromChart + this._theme = this._spec\n const merge = (originalSpec: any) =>\n mergeSpec(\n {},\n this._theme,\n this._prepareSpecBeforeMergingTheme(specFromChart),\n this._prepareSpecBeforeMergingTheme(originalSpec)\n );\n\n if (isArray(this._originalSpec)) {\n this._spec = this._originalSpec.map(spec => merge(spec)) as unknown as T;\n } else {\n this._spec = merge(this._originalSpec);\n }\n }\n this._prepareSpecAfterMergingTheme();\n }\n\n /** 从 chart spec 提取配置作为 model 的默认 spec 配置 */\n protected _getDefaultSpecFromChart(chartSpec: any): Partial<T> {\n return {};\n }\n\n /** 是否在初始化时将 theme 自动 merge 到 spec */\n protected _shouldMergeThemeToSpec(): boolean {\n return true;\n }\n\n /** 在 merge 主题前对 spec 进行预处理 */\n protected _prepareSpecBeforeMergingTheme(obj?: any): any {\n // do nothing\n return obj;\n }\n\n /** 在 merge 主题后对 spec 进行遍历和转换 */\n protected _prepareSpecAfterMergingTheme(obj?: any): any {\n if (!arguments.length) {\n obj = this._spec;\n }\n\n const newObj = preprocessSpecOrTheme(\n 'spec',\n obj,\n this._option.getTheme?.()?.colorScheme,\n this.modelType === 'series' ? (this.type as SeriesTypeEnum) : undefined\n );\n\n if (!arguments.length) {\n this._spec = newObj;\n }\n return newObj;\n }\n\n setCurrentTheme(theme: any, noRender?: boolean) {\n // do nothing\n }\n\n updateLayoutAttribute() {\n // do nothing\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec(this._spec, this._option.getChartViewRect());\n }\n\n /** mark style 内部转换逻辑,override 使用 */\n protected _convertMarkStyle<T extends ICommonSpec = ICommonSpec>(\n style: Partial<IMarkStyle<T> | ConvertToMarkStyleSpec<T>>\n ): Partial<IMarkStyle<T> | ConvertToMarkStyleSpec<T>> {\n const newStyle: any = { ...style };\n return newStyle;\n }\n\n setMarkStyle<T extends ICommonSpec>(\n mark: IMarkRaw<T>,\n style?: Partial<IMarkStyle<T> | ConvertToMarkStyleSpec<T>>,\n state?: StateValueType,\n level?: number\n ) {\n if (!isValid(mark) || !isValid(style)) {\n return;\n }\n mark.setStyle(this._convertMarkStyle(style), state, level);\n }\n\n initMarkStyleWithSpec(mark?: IMark, spec?: any, key?: string) {\n if (!isValid(mark) || !isValid(spec)) {\n return;\n }\n const { style, state } = spec;\n const newSpec = { ...spec };\n\n if (style) {\n newSpec.style = this._convertMarkStyle(style);\n }\n if (state) {\n newSpec.state = {};\n Object.keys(state).forEach(key => {\n newSpec.state[key] = this._convertMarkStyle(state[key]);\n });\n }\n mark.initStyleWithSpec(newSpec, key);\n }\n\n protected stateKeyToSignalName(key: string, opt?: string) {\n let name = `${PREFIX}_${this.modelType}_${this.type}_${this.id}_${key}`;\n opt && (name += `_${opt}`);\n return name;\n }\n\n compileData() {\n this._data?.compile();\n }\n\n compileMarks(group?: string | IGroupMark) {\n this.getMarks().forEach(m => {\n m.compile({ group });\n });\n }\n\n compileSignal() {\n this.state?.compile();\n }\n\n bindSceneNode(node: IElement) {\n this._sceneNodeMap.set(node.mark.id(), node as IElement);\n }\n\n getSceneNodes() {\n return Array.from(this._sceneNodeMap.values());\n }\n\n getSceneNodeMarks() {\n return this.getSceneNodes().map(node => node.mark as IVGrammarMark);\n }\n\n protected _createMark<T extends IMark>(markInfo: IModelMarkInfo, option: Partial<IMarkOption> = {}): T {\n const { type, name } = markInfo;\n const m = Factory.createMark(type as any, name, {\n model: this,\n map: this._option.map,\n getCompiler: this.getCompiler,\n globalScale: this._option.globalScale,\n ...option\n }) as T;\n m?.created();\n return m;\n }\n\n /**\n * 数据唯一ID\n * 根据自身动画数据匹配需求设置返回值。\n * 默认返回 undefined 时,根据 VGrammar 默认数据 ID 进行索引和匹配。\n */\n protected _getDataIdKey(): string | ((datum: Datum) => string) | undefined {\n return undefined;\n }\n}\n"]}
@@ -136,7 +136,7 @@ export interface IModel extends ICompilable, ILayoutItem {
136
136
  getChart: () => IChart;
137
137
  created: () => void;
138
138
  init: (option: IModelInitOption) => void;
139
- reInit: (theme?: any) => void;
139
+ reInit: (theme?: any, lastSpec?: any) => void;
140
140
  onLayoutStart: (layoutRect: IRect, viewRect: ILayoutRect, ctx: IModelLayoutOption) => void;
141
141
  onLayoutEnd: (ctx: IModelLayoutOption) => void;
142
142
  onEvaluateEnd: (ctx: IModelEvaluateOption) => void;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/model/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { IBoundsLike } from '@visactor/vutils';\nimport type { DataSet } from '@visactor/vdataset';\nimport type { IEvent, IEventDispatcher } from '../event/interface';\nimport type { IMark, IMarkRaw, IMarkStyle, MarkTypeEnum } from '../mark/interface';\nimport type { RenderMode } from '../typings/spec/common';\nimport type { VChart } from '../vchart-all';\nimport type { IData, IElement, IMark as IVGrammarMark } from '@visactor/vgrammar';\nimport type {\n IOrientType,\n IPoint,\n IGroupMarkSpec,\n ConvertToMarkStyleSpec,\n CoordinateType,\n ICommonSpec,\n IRect,\n StringOrNumber\n} from '../typings';\nimport type { ITheme } from '../theme';\nimport type { StateValueType } from '../typings/spec';\nimport type { ITooltipHelper } from './tooltip-helper';\nimport type { ModelStateManager } from './model-state-manager';\nimport type { ICompilable, ICompilableInitOption } from '../compile/interface';\nimport type { ICompilableData } from '../compile/data';\nimport type { IGlobalScale } from '../scale/interface';\nimport type { IChart } from '../chart/interface';\n\nexport type ILayoutNumber = number | IPercent | ((layoutRect: ILayoutRect) => number) | IPercentOffset;\n\nexport interface ILayoutPoint {\n x: number;\n y: number;\n}\n\nexport interface ILayoutRectLevel {\n width: number;\n height: number;\n}\nexport interface ILayoutRect {\n width: number;\n height: number;\n}\n\nexport type IPercent = `${number}%`;\n\nexport type IPercentOffset = { percent?: number; offset?: number };\n\nexport type ILayoutPercent = IPercent | number;\n\n/**\n * 相对布局和绝对布局\n * 在相对布局结束后进行二次的绝对布局\n * 绝对布局会只根据 chart 进行相对处理\n */\n\ntype ILayoutType = 'region-relative' | 'region' | 'normal' | 'absolute' | 'normal-inline';\n\nexport type ILayoutOrientPadding = {\n left?: ILayoutNumber;\n right?: ILayoutNumber;\n top?: ILayoutNumber;\n bottom?: ILayoutNumber;\n};\n\n/** 布局 padding的配置 */\nexport type ILayoutPaddingSpec = ILayoutOrientPadding | ILayoutNumber | ILayoutNumber[];\n\n/**\n * 因为这些元素都会继承到各个模块,所以这里统一有前缀避免语意冲突\n */\nexport interface ILayoutItem {\n /**\n * 标记这个布局Item的方向(left->right, right->left, top->bottom, bottom->top)\n */\n directionStr?: 'l2r' | 'r2l' | 't2b' | 'b2t';\n layoutClip: boolean;\n layoutType: ILayoutType;\n layoutBindRegionID: number | number[];\n layoutOrient: IOrientType;\n\n layoutPaddingLeft: number;\n layoutPaddingTop: number;\n layoutPaddingRight: number;\n layoutPaddingBottom: number;\n\n layoutOffsetX: number;\n layoutOffsetY: number;\n\n // 越大越先处理\n layoutLevel: number;\n\n layoutZIndex: number;\n chartLayoutRect: ILayoutRect;\n\n /** 是否可见 */\n getVisible: () => boolean;\n\n /** 是否自动缩进 */\n getAutoIndent: () => boolean;\n getLayoutStartPoint: () => ILayoutPoint;\n getLayoutRect: () => ILayoutRect;\n getLastComputeOutBounds: () => IBoundsLike;\n\n /**\n * 更新元素布局的 layoutRect 大小,用来更新指定布局空间\n */\n setLayoutRect: (rect: Partial<ILayoutRect>, levelMap?: Partial<ILayoutRectLevel>) => void;\n /**\n * 基于元素内部逻辑计算占位空间,rect表示可用空间\n */\n computeBoundsInRect: (rect: ILayoutRect) => ILayoutRect;\n /**\n * 更新元素布局的起始点位置\n */\n setLayoutStartPosition: (pos: Partial<IPoint>) => void;\n /**\n * 更新绝对布局元素的位置信息\n */\n absoluteLayoutInRect: (rect: IRect) => void;\n /**\n * 元素内部布局信息更新\n */\n updateLayoutAttribute: () => void;\n}\n\nexport interface ILayoutItemSpec {\n /** 当前模块的布局类型,配置为 absolute 的话,当前元素会以图表左上角为原点进行绝对布局 */\n layoutType?: ILayoutType;\n /**\n * 布局顺序等级,等级越大的,越优先布局\n * 比如顶部同时有标题和图例的场景,期望标题先放在顶部,然后放置图例。\n */\n layoutLevel?: number;\n\n // 基础的布局配置\n /** 模块布局位置 */\n orient?: IOrientType;\n /** 模块的布局间距 */\n padding?: ILayoutPaddingSpec;\n /** 是否按照 orient 自动修改 padding,隐藏位于外侧的 padding。目前只在组件上生效 */\n noOuterPadding?: boolean;\n /** 模块的布局大小:宽度 */\n width?: ILayoutNumber;\n /** 模块的布局最大宽度 */\n maxWidth?: ILayoutNumber;\n /** 模块的布局最小宽度 */\n minWidth?: ILayoutNumber;\n /** 模块的布局大小:高度 */\n height?: ILayoutNumber;\n /** 模块的布局最大高度 */\n maxHeight?: ILayoutNumber;\n /** 模块的布局最小高度 */\n minHeight?: ILayoutNumber;\n /** 模块的布局位置偏移:X */\n offsetX?: ILayoutNumber;\n /** 模块的布局位置偏移:Y */\n offsetY?: ILayoutNumber;\n\n /** 模块的展示层级,当2个模块重叠时,层级较大的展示在上方 */\n zIndex?: number;\n /** 模块是否裁剪超出布局区域外的绘图内容 */\n clip?: boolean;\n\n // 绝对布局下的对齐设置\n\n /** 模块绝对布局下,与图表左侧的距离。注意仅在 layoutType === 'absolute' 时生效 */\n left?: ILayoutNumber;\n /** 模块绝对布局下,与图表右侧的距离。注意仅在 layoutType === 'absolute' 时生效 */\n right?: ILayoutNumber;\n /** 模块绝对布局下,与图表顶部的距离。注意仅在 layoutType === 'absolute' 时生效 */\n top?: ILayoutNumber;\n /** 模块绝对布局下,与图表底部的距离。注意仅在 layoutType === 'absolute' 时生效 */\n bottom?: ILayoutNumber;\n /** 模块绝对布局下,元素将放置在图表的正中间。注意仅在 layoutType === 'absolute' 时生效,同时将忽略 padding 属性 */\n center?: boolean;\n}\n\n// TODO:\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelInitOption {}\n// TODO:\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelLayoutOption {}\n// TODO:\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelEvaluateOption {}\n// TODO:\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelRenderOption {}\n\nexport interface IEffect {\n [key: string]: (e?: any) => any;\n}\n\nexport interface IMarkTreeGroup extends Partial<IMarkStyle<IGroupMarkSpec>> {\n // 必须要有名字\n type: 'group';\n name: string;\n marks: (IMarkTreeGroup | IMark)[];\n // TODO: 这里要不要支持复杂场景,有图形组合的场景,用自定义mark?\n // from?: IData;\n}\n\nexport type IMarkTree = IMarkTreeGroup | IMark | (IMarkTreeGroup | IMark)[];\n\nexport interface IUpdateSpecResult {\n change: boolean;\n reMake: boolean;\n reMakeData?: boolean;\n reRender?: boolean;\n reSize?: boolean;\n // TODO: compile 的判断应不应该出现在这里?\n reCompile?: boolean;\n}\n\nexport interface IModelProduct {\n srData: IData;\n}\n\nexport interface IModel extends ICompilable, ILayoutItem {\n readonly modelType: string;\n readonly type: string;\n readonly specKey: string;\n\n readonly id: number;\n\n readonly userId?: StringOrNumber;\n\n // 事件\n readonly event: IEvent;\n\n // 副作用\n readonly effect: IEffect;\n\n // state如果绑定到mark的更新?\n // 组件的 mark 要怎么样描述,才能正确的基于组件状态进行样式更新?\n // 方案1: 组件的 state 关联到 mark 的状态。\n // 方案2: 组件设置 mark 属性,mark自身属性变化时,自己去更新。\n // react state\n readonly state: ModelStateManager;\n getState: () => ModelStateManager['_stateMap'];\n\n coordinate?: CoordinateType;\n\n // 初始化参数\n getOption: () => IModelOption;\n\n getMarks: () => IMark[];\n getMarkNameMap: () => Record<string, IMark>;\n getMarkInfoList: () => IModelMarkInfo[];\n\n getData: () => ICompilableData;\n\n getChart: () => IChart;\n\n //生命周期\n // 创建模块自身内容,设置自身属性\n created: () => void;\n // 用来处理与其他图表模块的联系\n init: (option: IModelInitOption) => void;\n // updateSpec 或者切换主题后,根据新 spec 执行的初始化过程\n reInit: (theme?: any) => void;\n\n onLayoutStart: (layoutRect: IRect, viewRect: ILayoutRect, ctx: IModelLayoutOption) => void;\n onLayoutEnd: (ctx: IModelLayoutOption) => void;\n onEvaluateEnd: (ctx: IModelEvaluateOption) => void;\n onRender: (ctx: IModelRenderOption) => void;\n onDataUpdate: () => void;\n\n updateSpec: (spec: any, totalSpec?: any) => IUpdateSpecResult;\n getSpec?: () => any;\n getSpecIndex: () => number;\n\n setCurrentTheme: (theme: any, noRender?: boolean) => void;\n\n setMarkStyle: <T extends ICommonSpec>(\n mark?: IMarkRaw<T>,\n style?: Partial<IMarkStyle<T> | ConvertToMarkStyleSpec<T>>,\n state?: StateValueType,\n level?: number\n ) => void;\n\n initMarkStyleWithSpec: (mark?: IMark, spec?: any, key?: string) => void;\n\n // tooltip\n tooltipHelper: ITooltipHelper;\n\n /** 绑定场景结点 */\n bindSceneNode: (node: IElement) => void;\n /** 获取场景结点 */\n getSceneNodes: () => IElement[];\n /** 获取场景结点对应 mark */\n getSceneNodeMarks: () => IVGrammarMark[];\n}\n\nexport interface IModelOption extends ICompilableInitOption {\n eventDispatcher: IEventDispatcher;\n dataSet: DataSet;\n map: Map<StringOrNumber, IModel | IMark>;\n mode: RenderMode;\n globalInstance: VChart;\n specIndex?: number;\n specKey?: string;\n\n getTheme?: () => ITheme;\n\n getChartLayoutRect: () => IRect;\n getChartViewRect: () => ILayoutRect;\n\n getChart: () => IChart;\n\n globalScale: IGlobalScale;\n animation: boolean;\n /**\n * 错误消息回调函数\n */\n onError: (...args: any[]) => void;\n}\n\nexport interface IModelConstructor {\n new (ctx: IModelOption): IModel;\n}\n\nexport type ILayoutModelState = ModelStateManager['_stateMap'];\n\n// TODO: 补充model共有配置\nexport type IModelSpec = ILayoutItemSpec & { id?: StringOrNumber };\n\nexport interface IModelMarkInfo {\n /** mark 类型 */\n type: MarkTypeEnum | string | (MarkTypeEnum | string)[];\n /** mark 名称 */\n name: string;\n}\n"]}
1
+ {"version":3,"sources":["../src/model/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { IBoundsLike } from '@visactor/vutils';\nimport type { DataSet } from '@visactor/vdataset';\nimport type { IEvent, IEventDispatcher } from '../event/interface';\nimport type { IMark, IMarkRaw, IMarkStyle, MarkTypeEnum } from '../mark/interface';\nimport type { RenderMode } from '../typings/spec/common';\nimport type { VChart } from '../vchart-all';\nimport type { IData, IElement, IMark as IVGrammarMark } from '@visactor/vgrammar';\nimport type {\n IOrientType,\n IPoint,\n IGroupMarkSpec,\n ConvertToMarkStyleSpec,\n CoordinateType,\n ICommonSpec,\n IRect,\n StringOrNumber\n} from '../typings';\nimport type { ITheme } from '../theme';\nimport type { StateValueType } from '../typings/spec';\nimport type { ITooltipHelper } from './tooltip-helper';\nimport type { ModelStateManager } from './model-state-manager';\nimport type { ICompilable, ICompilableInitOption } from '../compile/interface';\nimport type { ICompilableData } from '../compile/data';\nimport type { IGlobalScale } from '../scale/interface';\nimport type { IChart } from '../chart/interface';\n\nexport type ILayoutNumber = number | IPercent | ((layoutRect: ILayoutRect) => number) | IPercentOffset;\n\nexport interface ILayoutPoint {\n x: number;\n y: number;\n}\n\nexport interface ILayoutRectLevel {\n width: number;\n height: number;\n}\nexport interface ILayoutRect {\n width: number;\n height: number;\n}\n\nexport type IPercent = `${number}%`;\n\nexport type IPercentOffset = { percent?: number; offset?: number };\n\nexport type ILayoutPercent = IPercent | number;\n\n/**\n * 相对布局和绝对布局\n * 在相对布局结束后进行二次的绝对布局\n * 绝对布局会只根据 chart 进行相对处理\n */\n\ntype ILayoutType = 'region-relative' | 'region' | 'normal' | 'absolute' | 'normal-inline';\n\nexport type ILayoutOrientPadding = {\n left?: ILayoutNumber;\n right?: ILayoutNumber;\n top?: ILayoutNumber;\n bottom?: ILayoutNumber;\n};\n\n/** 布局 padding的配置 */\nexport type ILayoutPaddingSpec = ILayoutOrientPadding | ILayoutNumber | ILayoutNumber[];\n\n/**\n * 因为这些元素都会继承到各个模块,所以这里统一有前缀避免语意冲突\n */\nexport interface ILayoutItem {\n /**\n * 标记这个布局Item的方向(left->right, right->left, top->bottom, bottom->top)\n */\n directionStr?: 'l2r' | 'r2l' | 't2b' | 'b2t';\n layoutClip: boolean;\n layoutType: ILayoutType;\n layoutBindRegionID: number | number[];\n layoutOrient: IOrientType;\n\n layoutPaddingLeft: number;\n layoutPaddingTop: number;\n layoutPaddingRight: number;\n layoutPaddingBottom: number;\n\n layoutOffsetX: number;\n layoutOffsetY: number;\n\n // 越大越先处理\n layoutLevel: number;\n\n layoutZIndex: number;\n chartLayoutRect: ILayoutRect;\n\n /** 是否可见 */\n getVisible: () => boolean;\n\n /** 是否自动缩进 */\n getAutoIndent: () => boolean;\n getLayoutStartPoint: () => ILayoutPoint;\n getLayoutRect: () => ILayoutRect;\n getLastComputeOutBounds: () => IBoundsLike;\n\n /**\n * 更新元素布局的 layoutRect 大小,用来更新指定布局空间\n */\n setLayoutRect: (rect: Partial<ILayoutRect>, levelMap?: Partial<ILayoutRectLevel>) => void;\n /**\n * 基于元素内部逻辑计算占位空间,rect表示可用空间\n */\n computeBoundsInRect: (rect: ILayoutRect) => ILayoutRect;\n /**\n * 更新元素布局的起始点位置\n */\n setLayoutStartPosition: (pos: Partial<IPoint>) => void;\n /**\n * 更新绝对布局元素的位置信息\n */\n absoluteLayoutInRect: (rect: IRect) => void;\n /**\n * 元素内部布局信息更新\n */\n updateLayoutAttribute: () => void;\n}\n\nexport interface ILayoutItemSpec {\n /** 当前模块的布局类型,配置为 absolute 的话,当前元素会以图表左上角为原点进行绝对布局 */\n layoutType?: ILayoutType;\n /**\n * 布局顺序等级,等级越大的,越优先布局\n * 比如顶部同时有标题和图例的场景,期望标题先放在顶部,然后放置图例。\n */\n layoutLevel?: number;\n\n // 基础的布局配置\n /** 模块布局位置 */\n orient?: IOrientType;\n /** 模块的布局间距 */\n padding?: ILayoutPaddingSpec;\n /** 是否按照 orient 自动修改 padding,隐藏位于外侧的 padding。目前只在组件上生效 */\n noOuterPadding?: boolean;\n /** 模块的布局大小:宽度 */\n width?: ILayoutNumber;\n /** 模块的布局最大宽度 */\n maxWidth?: ILayoutNumber;\n /** 模块的布局最小宽度 */\n minWidth?: ILayoutNumber;\n /** 模块的布局大小:高度 */\n height?: ILayoutNumber;\n /** 模块的布局最大高度 */\n maxHeight?: ILayoutNumber;\n /** 模块的布局最小高度 */\n minHeight?: ILayoutNumber;\n /** 模块的布局位置偏移:X */\n offsetX?: ILayoutNumber;\n /** 模块的布局位置偏移:Y */\n offsetY?: ILayoutNumber;\n\n /** 模块的展示层级,当2个模块重叠时,层级较大的展示在上方 */\n zIndex?: number;\n /** 模块是否裁剪超出布局区域外的绘图内容 */\n clip?: boolean;\n\n // 绝对布局下的对齐设置\n\n /** 模块绝对布局下,与图表左侧的距离。注意仅在 layoutType === 'absolute' 时生效 */\n left?: ILayoutNumber;\n /** 模块绝对布局下,与图表右侧的距离。注意仅在 layoutType === 'absolute' 时生效 */\n right?: ILayoutNumber;\n /** 模块绝对布局下,与图表顶部的距离。注意仅在 layoutType === 'absolute' 时生效 */\n top?: ILayoutNumber;\n /** 模块绝对布局下,与图表底部的距离。注意仅在 layoutType === 'absolute' 时生效 */\n bottom?: ILayoutNumber;\n /** 模块绝对布局下,元素将放置在图表的正中间。注意仅在 layoutType === 'absolute' 时生效,同时将忽略 padding 属性 */\n center?: boolean;\n}\n\n// TODO:\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelInitOption {}\n// TODO:\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelLayoutOption {}\n// TODO:\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelEvaluateOption {}\n// TODO:\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelRenderOption {}\n\nexport interface IEffect {\n [key: string]: (e?: any) => any;\n}\n\nexport interface IMarkTreeGroup extends Partial<IMarkStyle<IGroupMarkSpec>> {\n // 必须要有名字\n type: 'group';\n name: string;\n marks: (IMarkTreeGroup | IMark)[];\n // TODO: 这里要不要支持复杂场景,有图形组合的场景,用自定义mark?\n // from?: IData;\n}\n\nexport type IMarkTree = IMarkTreeGroup | IMark | (IMarkTreeGroup | IMark)[];\n\nexport interface IUpdateSpecResult {\n change: boolean;\n reMake: boolean;\n reMakeData?: boolean;\n reRender?: boolean;\n reSize?: boolean;\n // TODO: compile 的判断应不应该出现在这里?\n reCompile?: boolean;\n}\n\nexport interface IModelProduct {\n srData: IData;\n}\n\nexport interface IModel extends ICompilable, ILayoutItem {\n readonly modelType: string;\n readonly type: string;\n readonly specKey: string;\n\n readonly id: number;\n\n readonly userId?: StringOrNumber;\n\n // 事件\n readonly event: IEvent;\n\n // 副作用\n readonly effect: IEffect;\n\n // state如果绑定到mark的更新?\n // 组件的 mark 要怎么样描述,才能正确的基于组件状态进行样式更新?\n // 方案1: 组件的 state 关联到 mark 的状态。\n // 方案2: 组件设置 mark 属性,mark自身属性变化时,自己去更新。\n // react state\n readonly state: ModelStateManager;\n getState: () => ModelStateManager['_stateMap'];\n\n coordinate?: CoordinateType;\n\n // 初始化参数\n getOption: () => IModelOption;\n\n getMarks: () => IMark[];\n getMarkNameMap: () => Record<string, IMark>;\n getMarkInfoList: () => IModelMarkInfo[];\n\n getData: () => ICompilableData;\n\n getChart: () => IChart;\n\n //生命周期\n // 创建模块自身内容,设置自身属性\n created: () => void;\n // 用来处理与其他图表模块的联系\n init: (option: IModelInitOption) => void;\n // updateSpec 或者切换主题后,根据新 spec 执行的初始化过程\n reInit: (theme?: any, lastSpec?: any) => void;\n\n onLayoutStart: (layoutRect: IRect, viewRect: ILayoutRect, ctx: IModelLayoutOption) => void;\n onLayoutEnd: (ctx: IModelLayoutOption) => void;\n onEvaluateEnd: (ctx: IModelEvaluateOption) => void;\n onRender: (ctx: IModelRenderOption) => void;\n onDataUpdate: () => void;\n\n updateSpec: (spec: any, totalSpec?: any) => IUpdateSpecResult;\n getSpec?: () => any;\n getSpecIndex: () => number;\n\n setCurrentTheme: (theme: any, noRender?: boolean) => void;\n\n setMarkStyle: <T extends ICommonSpec>(\n mark?: IMarkRaw<T>,\n style?: Partial<IMarkStyle<T> | ConvertToMarkStyleSpec<T>>,\n state?: StateValueType,\n level?: number\n ) => void;\n\n initMarkStyleWithSpec: (mark?: IMark, spec?: any, key?: string) => void;\n\n // tooltip\n tooltipHelper: ITooltipHelper;\n\n /** 绑定场景结点 */\n bindSceneNode: (node: IElement) => void;\n /** 获取场景结点 */\n getSceneNodes: () => IElement[];\n /** 获取场景结点对应 mark */\n getSceneNodeMarks: () => IVGrammarMark[];\n}\n\nexport interface IModelOption extends ICompilableInitOption {\n eventDispatcher: IEventDispatcher;\n dataSet: DataSet;\n map: Map<StringOrNumber, IModel | IMark>;\n mode: RenderMode;\n globalInstance: VChart;\n specIndex?: number;\n specKey?: string;\n\n getTheme?: () => ITheme;\n\n getChartLayoutRect: () => IRect;\n getChartViewRect: () => ILayoutRect;\n\n getChart: () => IChart;\n\n globalScale: IGlobalScale;\n animation: boolean;\n /**\n * 错误消息回调函数\n */\n onError: (...args: any[]) => void;\n}\n\nexport interface IModelConstructor {\n new (ctx: IModelOption): IModel;\n}\n\nexport type ILayoutModelState = ModelStateManager['_stateMap'];\n\n// TODO: 补充model共有配置\nexport type IModelSpec = ILayoutItemSpec & { id?: StringOrNumber };\n\nexport interface IModelMarkInfo {\n /** mark 类型 */\n type: MarkTypeEnum | string | (MarkTypeEnum | string)[];\n /** mark 名称 */\n name: string;\n}\n"]}
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  }), exports.Region = void 0;
6
6
 
7
- const vutils_1 = require("@visactor/vutils"), interface_1 = require("../compile/mark/interface"), dimension_trigger_1 = require("../interaction/dimension-trigger"), interface_2 = require("../mark/interface"), base_model_1 = require("../model/base-model"), interaction_1 = require("../interaction/interaction"), constant_1 = require("../constant"), util_1 = require("../util"), animate_manager_1 = require("../animation/animate-manager");
7
+ const vutils_1 = require("@visactor/vutils"), interface_1 = require("../compile/mark/interface"), dimension_trigger_1 = require("../interaction/dimension-trigger"), interface_2 = require("../mark/interface"), base_model_1 = require("../model/base-model"), interaction_1 = require("../interaction/interaction"), constant_1 = require("../constant"), util_1 = require("../util"), animate_manager_1 = require("../animation/animate-manager"), constant_2 = require("../component/data-zoom/constant");
8
8
 
9
9
  class Region extends base_model_1.BaseModel {
10
10
  getGroupMark() {
@@ -25,7 +25,13 @@ class Region extends base_model_1.BaseModel {
25
25
  }
26
26
  _getClipDefaultValue() {
27
27
  var _a, _b, _c, _d;
28
- const chartSpec = this._option.getChart().getSpec(), hasDataZoom = null === (_b = null === (_a = chartSpec.dataZoom) || void 0 === _a ? void 0 : _a.some) || void 0 === _b ? void 0 : _b.call(_a, (entry => "axis" === entry.filterMode)), hasScrollBar = null === (_d = null === (_c = chartSpec.scrollBar) || void 0 === _c ? void 0 : _c.some) || void 0 === _d ? void 0 : _d.call(_c, (entry => "axis" === entry.filterMode));
28
+ const chartSpec = this._option.getChart().getSpec(), hasDataZoom = null === (_b = null === (_a = chartSpec.dataZoom) || void 0 === _a ? void 0 : _a.some) || void 0 === _b ? void 0 : _b.call(_a, (entry => {
29
+ var _a;
30
+ return (null !== (_a = entry.filterMode) && void 0 !== _a ? _a : constant_2.IFilterMode.filter) === constant_2.IFilterMode.axis;
31
+ })), hasScrollBar = null === (_d = null === (_c = chartSpec.scrollBar) || void 0 === _c ? void 0 : _c.some) || void 0 === _d ? void 0 : _d.call(_c, (entry => {
32
+ var _a;
33
+ return (null !== (_a = entry.filterMode) && void 0 !== _a ? _a : constant_2.IFilterMode.axis) === constant_2.IFilterMode.axis;
34
+ }));
29
35
  return !(!hasDataZoom && !hasScrollBar) || this.layoutClip;
30
36
  }
31
37
  created() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/region/region.ts"],"names":[],"mappings":";;;AAEA,6CAA2C;AAE3C,yDAAqE;AACrE,wEAAoE;AACpE,iDAAiD;AACjD,oDAAgD;AAOhD,4DAAyD;AACzD,0CAAuE;AACvE,kCAAyC;AAEzC,kEAA8D;AAK9D,MAAa,MAA4C,SAAQ,sBAAY;IAc3E,YAAY;QACV,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAOD,YAAY,IAAO,EAAE,GAAiB;;QACpC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAtBV,cAAS,GAAW,QAAQ,CAAC;QAEtC,SAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACT,YAAO,GAAc,EAAE,CAAC;QAClC,eAAU,GAA8B,QAAQ,CAAC;QACjD,iBAAY,GAAW,uBAAY,CAAC,MAAM,CAAC;QAI3C,gBAAW,GAAiB,IAAI,yBAAW,EAAE,CAAC;QAkO9C,yBAAoB,GAAG,GAAG,EAAE;YAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAU,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACxE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAC,CAAC;QACrD,CAAC,CAAC;QAvNA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,MAAA,IAAI,CAAC,UAAU,mCAAI,WAAW,CAAC;QACjD,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,gCAAc,CAAC;gBAChC,WAAW,EAAE,GAAG,CAAC,WAAW;aAC7B,CAAC,CAAC;SACJ;QAED,IAAI,IAAA,cAAO,EAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YACxB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;SACjC;IACH,CAAC;IAES,oBAAoB;;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC;QACpD,MAAM,WAAW,GAAG,MAAA,MAAC,SAAiB,CAAC,QAAQ,0CAAE,IAAI,mDAAG,CAAC,KAAoB,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC;QAC/G,MAAM,YAAY,GAAG,MAAA,MAAC,SAAiB,CAAC,SAAS,0CAAE,IAAI,mDAAG,CAAC,KAAqB,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC;QAElH,OAAO,WAAW,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;IAC9D,CAAC;IAED,OAAO;;QACL,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,wBAAY,CAAC,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,CAAe,CAAC;QACpG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAA,IAAI,CAAC,KAAK,CAAC,IAAI,mCAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5D,IAAI,CAAC,YAAY,CACf,IAAI,CAAC,UAAU,EACf;YACE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;YACrC,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;YACrC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK;YACvC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM;YACzC,IAAI;SACL,EACD,QAAQ,EACR,yBAAc,CAAC,QAAQ,CACxB,CAAC;QACF,IAAI,CAAC,YAAY,CACf,IAAI,CAAC,UAAU,EACf;YACE,YAAY,EAAE,MAAA,IAAI,CAAC,KAAK,CAAC,KAAK,0CAAE,YAAY;SAC7C,EACD,QAAQ,EACR,yBAAc,CAAC,SAAS,CACzB,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAErC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;YACpB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,wBAAY,CAAC,IAAI,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAc,CAAC;YAC5G,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,wBAAY,CAAC,IAAI,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAc,CAAC;aAC7G;YACD,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAC1D,IAAI,IAAI,EAAE;oBACR,IAAI,CAAC,OAAO,EAAE,CAAC;oBACf,IAAI,CAAC,YAAY,CACf,IAAI,EACJ;wBACE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK;wBACvC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM;qBAC1C,EACD,QAAQ,EACR,yBAAc,CAAC,QAAQ,CACxB,CAAC;oBACF,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBAC/B;YACH,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1D,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,uBAAY,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;SAC/E;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,MAAW;QACd,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IACD,QAAQ;QACN,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAClC,CAAC;IAES,wBAAwB;;QAChC,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,YAAY,CACf,IAAI,CAAC,eAAe,kBAElB,WAAW,EAAE,CAAA,MAAA,IAAI,CAAC,KAAK,CAAC,KAAK,0CAAE,IAAI,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IACxC,IAAI,CAAC,KAAK,CAAC,KAAK,GAErB,QAAQ,EACR,yBAAc,CAAC,SAAS,CACzB,CAAC;YACF,IAAI,MAAA,IAAI,CAAC,KAAK,CAAC,IAAI,mCAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;gBAClD,IAAI,CAAC,YAAY,CACf,IAAI,CAAC,eAAe,EACpB;oBACE,aAAa,EAAE,CAAC;iBACjB,EACD,QAAQ,EACR,yBAAc,CAAC,QAAQ,CACxB,CAAC;aACH;SACF;IACH,CAAC;IAES,wBAAwB;QAChC,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,YAAY,CACf,IAAI,CAAC,eAAe,kCAEf,IAAI,CAAC,KAAK,CAAC,KAAK,KACnB,WAAW,EAAE,CAAC,KAEhB,QAAQ,EACR,yBAAc,CAAC,SAAS,CACzB,CAAC;SACH;IACH,CAAC;IAED,UAAU,CAAC,IAAS;QAClB,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;QACxC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,CAAA,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,KAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,CAAA,CAAC,EAAE;YAChF,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;YACrB,OAAO,MAAM,CAAC;SACf;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,KAAW;QAChB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAClC,CAAC;IAED,SAAS,CAAC,CAAU;QAClB,IAAI,CAAC,CAAC,EAAE;YACN,OAAO;SACR;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACtB;IACH,CAAC;IAED,YAAY,CAAC,CAAU;QACrB,IAAI,CAAC,CAAC,EAAE;YACN,OAAO;SACR;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QACrD,IAAI,KAAK,IAAI,CAAC,EAAE;YACd,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;SAC/B;IACH,CAAC;IAED,SAAS,CACP,MAQI,EAAE;QAEN,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CACxB,CAAC,CAAC,EAAE;;YACF,OAAA,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,IAAI,MAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;gBACxC,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAA,YAAK,EAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtE,CAAC,IAAA,cAAO,EAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAA,YAAK,EAAC,GAAG,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACnG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACjC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;gBACvC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;gBACjE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA,MAAA,MAAA,CAAC,CAAC,UAAU,iDAAI,0CAAE,IAAI,MAAK,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;SAAA,CAClE,CAAC;IACJ,CAAC;IAED,eAAe,CAAC,IAAY;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IACD,iBAAiB,CAAC,MAAc;QAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,aAAa,CAAC,EAAU;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IACD,eAAe,CAAC,IAAY;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC;IACD,yBAAyB,CAAC,cAA8B;QACtD,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,mBAAmB,CAAC,QAAgB;QAClC,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,QAAQ,CAAC,GAAQ;IAEjB,CAAC;IAED,kBAAkB;QAChB,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtF,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC,eAAe,EAAE,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACzG,CAAC;IAOD,OAAO;QACL,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;IAED,aAAa;QACX,MAAM,cAAc,mCACf,IAAI,CAAC,OAAO,KACf,KAAK,EAAE,IAAI,EACX,WAAW,EAAE,IAAI,CAAC,WAAW,GAC9B,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,IAAI,oCAAgB,CAAC,cAAc,CAAC,CAAC;IACvD,CAAC;IAED,WAAW;QAGT,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACvB,CAAC,CAAC,mBAAmB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBAClC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAED,eAAe;QAEb,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACvB,CAAC,CAAC,mBAAmB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBAClC,KAAK,MAAM,GAAG,IAAI,oCAAwB,EAAE;oBAC1C,IAAI,CAAC,IAAA,gBAAO,EAAC,CAAC,CAAC,UAAU,CAAC,oCAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;wBACzD,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,oCAAwB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;qBACjE;iBACF;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,YAAY,CAAC,KAAmC;QAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;;YAC1B,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YACrB,MAAA,CAAC,CAAC,UAAU,EAAE,0CACV,SAAS,CAAC;gBACV,OAAO,EAAE;oBACP,KAAK,EAAE,IAAI;iBACZ;aACF,EACA,MAAM,CACL,CAAC,KAAyB,EAAE,QAAiB,EAAE,kBAA+B,EAAE,OAAwB,EAAE,EAAE;YAE5G,CAAC,CACF,CAAC;QACN,CAAC,CAAC,CAAC;IACL,CAAC;IAED,aAAa;;QACX,KAAK,CAAC,aAAa,EAAE,CAAC;QACtB,MAAA,IAAI,CAAC,OAAO,0CAAE,OAAO,EAAE,CAAC;IAC1B,CAAC;IAED,OAAO;QACL,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,aAAa,CAAC,IAAc;QAC1B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,IAAe,CAAC,CAAC;IACrD,CAAC;;AArTH,wBAsTC;AArTQ,WAAI,GAAG,QAAQ,CAAC","file":"region.js","sourcesContent":["import type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEmpty } from '@visactor/vutils';\nimport type { Element, IElement, IGroupMark as IVGrammarGroupMark, ILayoutOptions, IMark } from '@visactor/vgrammar';\nimport { STATE_VALUE_ENUM_REVERSE } from '../compile/mark/interface';\nimport { DimensionTrigger } from '../interaction/dimension-trigger';\nimport { MarkTypeEnum } from '../mark/interface';\nimport { BaseModel } from '../model/base-model';\nimport type { ISeries } from '../series/interface';\nimport type { IModelOption, ILayoutItem } from '../model/interface';\nimport type { CoordinateType } from '../typings/coordinate';\nimport type { IRegion, IRegionSpec } from './interface';\nimport type { IGroupMark } from '../mark/group';\nimport type { IInteraction, ITrigger } from '../interaction/interface';\nimport { Interaction } from '../interaction/interaction';\nimport { AttributeLevel, ChartEvent, LayoutZIndex } from '../constant';\nimport { array, isValid } from '../util';\nimport type { IRectMark } from '../mark/rect';\nimport { AnimateManager } from '../animation/animate-manager';\nimport type { IAnimate } from '../animation/interface';\nimport type { StringOrNumber } from '../typings';\nimport type { IDataZoomSpec, IScrollBarSpec } from '../component/data-zoom';\n\nexport class Region<T extends IRegionSpec = IRegionSpec> extends BaseModel<T> implements IRegion {\n static type = 'region';\n readonly modelType: string = 'region';\n\n type = Region.type;\n protected _series: ISeries[] = [];\n layoutType: ILayoutItem['layoutType'] = 'region';\n layoutZIndex: number = LayoutZIndex.Region;\n\n animate?: IAnimate;\n\n interaction: IInteraction = new Interaction();\n\n protected _groupMark!: IGroupMark;\n getGroupMark() {\n return this._groupMark;\n }\n\n protected _backgroundMark?: IRectMark;\n protected _foregroundMark?: IRectMark;\n\n protected _trigger: ITrigger;\n\n constructor(spec: T, ctx: IModelOption) {\n super(spec, ctx);\n this.userId = spec.id;\n this.coordinate = spec.coordinate ?? 'cartesian';\n if (this._option.animation) {\n this.animate = new AnimateManager({\n getCompiler: ctx.getCompiler\n });\n }\n // 层级应当支持配置\n if (isValid(spec.zIndex)) {\n this.layoutZIndex = spec.zIndex;\n }\n }\n\n protected _getClipDefaultValue() {\n const chartSpec = this._option.getChart().getSpec();\n const hasDataZoom = (chartSpec as any).dataZoom?.some?.((entry: IDataZoomSpec) => entry.filterMode === 'axis');\n const hasScrollBar = (chartSpec as any).scrollBar?.some?.((entry: IScrollBarSpec) => entry.filterMode === 'axis');\n\n return hasDataZoom || hasScrollBar ? true : this.layoutClip;\n }\n\n created(): void {\n super.created();\n this._groupMark = this._createMark({ type: MarkTypeEnum.group, name: 'regionGroup' }) as IGroupMark;\n this._groupMark.setUserId(this.userId);\n this._groupMark.setZIndex(this.layoutZIndex);\n const clip = this._spec.clip ?? this._getClipDefaultValue();\n this.setMarkStyle(\n this._groupMark,\n {\n x: () => this.getLayoutStartPoint().x,\n y: () => this.getLayoutStartPoint().y,\n width: () => this.getLayoutRect().width,\n height: () => this.getLayoutRect().height,\n clip\n },\n 'normal',\n AttributeLevel.Built_In\n );\n this.setMarkStyle(\n this._groupMark,\n {\n cornerRadius: this._spec.style?.cornerRadius\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n this._marks.addMark(this._groupMark);\n // hack: region 的样式不能设置在groupMark上,因为groupMark目前没有计算dirtyBound,会导致拖影问题\n if (this._spec.style) {\n this._backgroundMark = this._createMark({ type: MarkTypeEnum.rect, name: 'regionBackground' }) as IRectMark;\n if (clip) {\n this._foregroundMark = this._createMark({ type: MarkTypeEnum.rect, name: 'regionForeground' }) as IRectMark;\n }\n [this._backgroundMark, this._foregroundMark].forEach(mark => {\n if (mark) {\n mark.created();\n this.setMarkStyle(\n mark,\n {\n width: () => this.getLayoutRect().width,\n height: () => this.getLayoutRect().height\n },\n 'normal',\n AttributeLevel.Built_In\n );\n this._groupMark.addMark(mark);\n }\n });\n this._backgroundMark && this._backgroundMark.setZIndex(0);\n this._foregroundMark && this._foregroundMark.setZIndex(LayoutZIndex.Mark + 1);\n }\n this.createTrigger();\n }\n\n init(option: any) {\n super.init(option);\n this.initMark();\n this.initSeriesDataflow();\n this.initInteraction();\n this.initTrigger();\n }\n initMark() {\n this._initBackgroundMarkStyle();\n this._initForegroundMarkStyle();\n }\n\n protected _initBackgroundMarkStyle() {\n if (this._backgroundMark) {\n this.setMarkStyle(\n this._backgroundMark,\n {\n fillOpacity: this._spec.style?.fill ? 1 : 0,\n ...this._spec.style\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n if (this._spec.clip ?? this._getClipDefaultValue()) {\n this.setMarkStyle(\n this._backgroundMark,\n {\n strokeOpacity: 0\n },\n 'normal',\n AttributeLevel.Built_In\n );\n }\n }\n }\n\n protected _initForegroundMarkStyle() {\n if (this._foregroundMark) {\n this.setMarkStyle(\n this._foregroundMark,\n {\n ...this._spec.style,\n fillOpacity: 0\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n }\n }\n\n updateSpec(spec: any) {\n const originalSpec = this._originalSpec;\n const result = super.updateSpec(spec);\n if ((originalSpec.style && !spec?.style) || (!originalSpec.style && spec?.style)) {\n result.reMake = true;\n return result;\n }\n\n return result;\n }\n\n reInit(theme?: any) {\n super.reInit(theme);\n this._initBackgroundMarkStyle();\n this._initForegroundMarkStyle();\n }\n\n addSeries(s: ISeries) {\n if (!s) {\n return;\n }\n if (!this._series.includes(s)) {\n this._series.push(s);\n }\n }\n\n removeSeries(s: ISeries) {\n if (!s) {\n return;\n }\n const index = this._series.findIndex(s_ => s_ === s);\n if (index >= 0) {\n this._series.splice(index, 1);\n }\n }\n\n getSeries(\n opt: {\n name?: string;\n userId?: StringOrNumber | StringOrNumber[];\n specIndex?: number | number[];\n id?: StringOrNumber;\n type?: string;\n coordinateType?: CoordinateType;\n dataName?: string;\n } = {}\n ): ISeries[] {\n return this._series.filter(\n s =>\n (opt.name ? s?.name === opt.name : true) &&\n (opt.userId && s.userId ? array(opt.userId).includes(s.userId) : true) &&\n (isValid(opt.specIndex) && s.getSpecIndex ? array(opt.specIndex).includes(s.getSpecIndex()) : true) &&\n (opt.id ? s.id === opt.id : true) &&\n (opt.type ? s.type === opt.type : true) &&\n (opt.coordinateType ? s.coordinate === opt.coordinateType : true) &&\n (opt.dataName ? s.getRawData?.()?.name === opt.dataName : true)\n );\n }\n\n getSeriesInName(name: string): ISeries {\n return this.getSeries({ name })[0];\n }\n getSeriesInUserId(userId: string): ISeries {\n return this.getSeries({ userId })[0];\n }\n getSeriesInId(id: number): ISeries {\n return this.getSeries({ id })[0];\n }\n getSeriesInType(type: string): ISeries[] {\n return this.getSeries({ type });\n }\n getSeriesInCoordinateType(coordinateType: CoordinateType): ISeries[] {\n return this.getSeries({ coordinateType });\n }\n getSeriesInDataName(dataName: string): ISeries[] {\n return this.getSeries({ dataName });\n }\n\n onRender(ctx: any): void {\n // do nothing\n }\n\n initSeriesDataflow() {\n const viewDataFilters = this._series.map(s => s.getViewDataFilter()).filter(v => !!v);\n this._option.dataSet.multipleDataViewAddListener(viewDataFilters, 'change', this.seriesDataFilterOver);\n }\n\n seriesDataFilterOver = () => {\n this.event.emit(ChartEvent.regionSeriesDataFilterOver, { model: this });\n this._series.forEach(s => s.reTransformViewData());\n };\n\n release() {\n super.release();\n this._series = [];\n }\n /** dimension */\n createTrigger() {\n const triggerOptions = {\n ...this._option,\n model: this,\n interaction: this.interaction\n };\n this._trigger = new DimensionTrigger(triggerOptions);\n }\n\n initTrigger() {\n // register all mark\n // trigger check mark enable\n this._series.forEach(s => {\n s.getMarksWithoutRoot().forEach(m => {\n this._trigger.registerMark(m);\n });\n });\n this._trigger.init();\n }\n\n initInteraction() {\n // 注册所有支持反选状态mark\n this._series.forEach(s => {\n s.getMarksWithoutRoot().forEach(m => {\n for (const key in STATE_VALUE_ENUM_REVERSE) {\n if (!isEmpty(m.stateStyle[STATE_VALUE_ENUM_REVERSE[key]])) {\n this.interaction.registerMark(STATE_VALUE_ENUM_REVERSE[key], m);\n }\n }\n });\n });\n }\n\n compileMarks(group?: string | IVGrammarGroupMark) {\n this.getMarks().forEach(m => {\n m.compile({ group });\n m.getProduct()\n ?.configure({\n context: {\n model: this\n }\n })\n .layout(\n (group: IVGrammarGroupMark, children: IMark[], parentLayoutBounds: IBoundsLike, options?: ILayoutOptions) => {\n // console.log('region mark layout');\n }\n );\n });\n }\n\n compileSignal() {\n super.compileSignal();\n this.animate?.compile();\n }\n\n compile() {\n this.compileSignal();\n this.compileMarks();\n }\n\n bindSceneNode(node: IElement) {\n this._sceneNodeMap.set('default', node as Element);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/region/region.ts"],"names":[],"mappings":"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","file":"region.js","sourcesContent":["import type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isEmpty } from '@visactor/vutils';\nimport type { Element, IElement, IGroupMark as IVGrammarGroupMark, ILayoutOptions, IMark } from '@visactor/vgrammar';\nimport { STATE_VALUE_ENUM_REVERSE } from '../compile/mark/interface';\nimport { DimensionTrigger } from '../interaction/dimension-trigger';\nimport { MarkTypeEnum } from '../mark/interface';\nimport { BaseModel } from '../model/base-model';\nimport type { ISeries } from '../series/interface';\nimport type { IModelOption, ILayoutItem } from '../model/interface';\nimport type { CoordinateType } from '../typings/coordinate';\nimport type { IRegion, IRegionSpec } from './interface';\nimport type { IGroupMark } from '../mark/group';\nimport type { IInteraction, ITrigger } from '../interaction/interface';\nimport { Interaction } from '../interaction/interaction';\nimport { AttributeLevel, ChartEvent, LayoutZIndex } from '../constant';\nimport { array, isValid } from '../util';\nimport type { IRectMark } from '../mark/rect';\nimport { AnimateManager } from '../animation/animate-manager';\nimport type { IAnimate } from '../animation/interface';\nimport type { StringOrNumber } from '../typings';\nimport { IFilterMode } from '../component/data-zoom/constant';\n\nexport class Region<T extends IRegionSpec = IRegionSpec> extends BaseModel<T> implements IRegion {\n static type = 'region';\n readonly modelType: string = 'region';\n\n type = Region.type;\n protected _series: ISeries[] = [];\n layoutType: ILayoutItem['layoutType'] = 'region';\n layoutZIndex: number = LayoutZIndex.Region;\n\n animate?: IAnimate;\n\n interaction: IInteraction = new Interaction();\n\n protected _groupMark!: IGroupMark;\n getGroupMark() {\n return this._groupMark;\n }\n\n protected _backgroundMark?: IRectMark;\n protected _foregroundMark?: IRectMark;\n\n protected _trigger: ITrigger;\n\n constructor(spec: T, ctx: IModelOption) {\n super(spec, ctx);\n this.userId = spec.id;\n this.coordinate = spec.coordinate ?? 'cartesian';\n if (this._option.animation) {\n this.animate = new AnimateManager({\n getCompiler: ctx.getCompiler\n });\n }\n // 层级应当支持配置\n if (isValid(spec.zIndex)) {\n this.layoutZIndex = spec.zIndex;\n }\n }\n\n protected _getClipDefaultValue() {\n const chartSpec = this._option.getChart().getSpec();\n const hasDataZoom = (chartSpec as any).dataZoom?.some?.((entry: any) => {\n const filterMode = entry.filterMode ?? IFilterMode.filter;\n return filterMode === IFilterMode.axis;\n });\n const hasScrollBar = (chartSpec as any).scrollBar?.some?.((entry: any) => {\n const filterMode = entry.filterMode ?? IFilterMode.axis;\n return filterMode === IFilterMode.axis;\n });\n\n return hasDataZoom || hasScrollBar ? true : this.layoutClip;\n }\n\n created(): void {\n super.created();\n this._groupMark = this._createMark({ type: MarkTypeEnum.group, name: 'regionGroup' }) as IGroupMark;\n this._groupMark.setUserId(this.userId);\n this._groupMark.setZIndex(this.layoutZIndex);\n const clip = this._spec.clip ?? this._getClipDefaultValue();\n this.setMarkStyle(\n this._groupMark,\n {\n x: () => this.getLayoutStartPoint().x,\n y: () => this.getLayoutStartPoint().y,\n width: () => this.getLayoutRect().width,\n height: () => this.getLayoutRect().height,\n clip\n },\n 'normal',\n AttributeLevel.Built_In\n );\n this.setMarkStyle(\n this._groupMark,\n {\n cornerRadius: this._spec.style?.cornerRadius\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n this._marks.addMark(this._groupMark);\n // hack: region 的样式不能设置在groupMark上,因为groupMark目前没有计算dirtyBound,会导致拖影问题\n if (this._spec.style) {\n this._backgroundMark = this._createMark({ type: MarkTypeEnum.rect, name: 'regionBackground' }) as IRectMark;\n if (clip) {\n this._foregroundMark = this._createMark({ type: MarkTypeEnum.rect, name: 'regionForeground' }) as IRectMark;\n }\n [this._backgroundMark, this._foregroundMark].forEach(mark => {\n if (mark) {\n mark.created();\n this.setMarkStyle(\n mark,\n {\n width: () => this.getLayoutRect().width,\n height: () => this.getLayoutRect().height\n },\n 'normal',\n AttributeLevel.Built_In\n );\n this._groupMark.addMark(mark);\n }\n });\n this._backgroundMark && this._backgroundMark.setZIndex(0);\n this._foregroundMark && this._foregroundMark.setZIndex(LayoutZIndex.Mark + 1);\n }\n this.createTrigger();\n }\n\n init(option: any) {\n super.init(option);\n this.initMark();\n this.initSeriesDataflow();\n this.initInteraction();\n this.initTrigger();\n }\n initMark() {\n this._initBackgroundMarkStyle();\n this._initForegroundMarkStyle();\n }\n\n protected _initBackgroundMarkStyle() {\n if (this._backgroundMark) {\n this.setMarkStyle(\n this._backgroundMark,\n {\n fillOpacity: this._spec.style?.fill ? 1 : 0,\n ...this._spec.style\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n if (this._spec.clip ?? this._getClipDefaultValue()) {\n this.setMarkStyle(\n this._backgroundMark,\n {\n strokeOpacity: 0\n },\n 'normal',\n AttributeLevel.Built_In\n );\n }\n }\n }\n\n protected _initForegroundMarkStyle() {\n if (this._foregroundMark) {\n this.setMarkStyle(\n this._foregroundMark,\n {\n ...this._spec.style,\n fillOpacity: 0\n },\n 'normal',\n AttributeLevel.User_Mark\n );\n }\n }\n\n updateSpec(spec: any) {\n const originalSpec = this._originalSpec;\n const result = super.updateSpec(spec);\n if ((originalSpec.style && !spec?.style) || (!originalSpec.style && spec?.style)) {\n result.reMake = true;\n return result;\n }\n\n return result;\n }\n\n reInit(theme?: any) {\n super.reInit(theme);\n this._initBackgroundMarkStyle();\n this._initForegroundMarkStyle();\n }\n\n addSeries(s: ISeries) {\n if (!s) {\n return;\n }\n if (!this._series.includes(s)) {\n this._series.push(s);\n }\n }\n\n removeSeries(s: ISeries) {\n if (!s) {\n return;\n }\n const index = this._series.findIndex(s_ => s_ === s);\n if (index >= 0) {\n this._series.splice(index, 1);\n }\n }\n\n getSeries(\n opt: {\n name?: string;\n userId?: StringOrNumber | StringOrNumber[];\n specIndex?: number | number[];\n id?: StringOrNumber;\n type?: string;\n coordinateType?: CoordinateType;\n dataName?: string;\n } = {}\n ): ISeries[] {\n return this._series.filter(\n s =>\n (opt.name ? s?.name === opt.name : true) &&\n (opt.userId && s.userId ? array(opt.userId).includes(s.userId) : true) &&\n (isValid(opt.specIndex) && s.getSpecIndex ? array(opt.specIndex).includes(s.getSpecIndex()) : true) &&\n (opt.id ? s.id === opt.id : true) &&\n (opt.type ? s.type === opt.type : true) &&\n (opt.coordinateType ? s.coordinate === opt.coordinateType : true) &&\n (opt.dataName ? s.getRawData?.()?.name === opt.dataName : true)\n );\n }\n\n getSeriesInName(name: string): ISeries {\n return this.getSeries({ name })[0];\n }\n getSeriesInUserId(userId: string): ISeries {\n return this.getSeries({ userId })[0];\n }\n getSeriesInId(id: number): ISeries {\n return this.getSeries({ id })[0];\n }\n getSeriesInType(type: string): ISeries[] {\n return this.getSeries({ type });\n }\n getSeriesInCoordinateType(coordinateType: CoordinateType): ISeries[] {\n return this.getSeries({ coordinateType });\n }\n getSeriesInDataName(dataName: string): ISeries[] {\n return this.getSeries({ dataName });\n }\n\n onRender(ctx: any): void {\n // do nothing\n }\n\n initSeriesDataflow() {\n const viewDataFilters = this._series.map(s => s.getViewDataFilter()).filter(v => !!v);\n this._option.dataSet.multipleDataViewAddListener(viewDataFilters, 'change', this.seriesDataFilterOver);\n }\n\n seriesDataFilterOver = () => {\n this.event.emit(ChartEvent.regionSeriesDataFilterOver, { model: this });\n this._series.forEach(s => s.reTransformViewData());\n };\n\n release() {\n super.release();\n this._series = [];\n }\n /** dimension */\n createTrigger() {\n const triggerOptions = {\n ...this._option,\n model: this,\n interaction: this.interaction\n };\n this._trigger = new DimensionTrigger(triggerOptions);\n }\n\n initTrigger() {\n // register all mark\n // trigger check mark enable\n this._series.forEach(s => {\n s.getMarksWithoutRoot().forEach(m => {\n this._trigger.registerMark(m);\n });\n });\n this._trigger.init();\n }\n\n initInteraction() {\n // 注册所有支持反选状态mark\n this._series.forEach(s => {\n s.getMarksWithoutRoot().forEach(m => {\n for (const key in STATE_VALUE_ENUM_REVERSE) {\n if (!isEmpty(m.stateStyle[STATE_VALUE_ENUM_REVERSE[key]])) {\n this.interaction.registerMark(STATE_VALUE_ENUM_REVERSE[key], m);\n }\n }\n });\n });\n }\n\n compileMarks(group?: string | IVGrammarGroupMark) {\n this.getMarks().forEach(m => {\n m.compile({ group });\n m\n .getProduct()\n ?.configure({\n context: {\n model: this\n }\n })\n .layout(\n (group: IVGrammarGroupMark, children: IMark[], parentLayoutBounds: IBoundsLike, options?: ILayoutOptions) => {\n // console.log('region mark layout');\n }\n );\n });\n }\n\n compileSignal() {\n super.compileSignal();\n this.animate?.compile();\n }\n\n compile() {\n this.compileSignal();\n this.compileMarks();\n }\n\n bindSceneNode(node: IElement) {\n this._sceneNodeMap.set('default', node as Element);\n }\n}\n"]}
@@ -11,7 +11,7 @@ vchart_1.VChart.useMark([ line_1.LineMark, area_1.AreaMark, text_1.TextMark, sym
11
11
  class AreaSeries extends cartesian_1.CartesianSeries {
12
12
  constructor() {
13
13
  super(...arguments), this.type = interface_1.SeriesTypeEnum.area, this._stack = !0,
14
- this._sortDataByAxis = !0;
14
+ this._sortDataByAxis = !1;
15
15
  }
16
16
  setAttrFromSpec() {
17
17
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;