@visactor/vgrammar-core 0.13.5 → 0.13.7-alpha.0

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 (399) hide show
  1. package/cjs/component/axis.d.ts +2 -0
  2. package/cjs/component/axis.js +15 -1
  3. package/cjs/component/axis.js.map +1 -1
  4. package/cjs/component/grid.d.ts +2 -0
  5. package/cjs/component/grid.js +15 -1
  6. package/cjs/component/grid.js.map +1 -1
  7. package/cjs/component/index.d.ts +2 -2
  8. package/cjs/component/index.js +21 -1
  9. package/cjs/component/index.js.map +1 -1
  10. package/cjs/component/label.js +36 -20
  11. package/cjs/component/label.js.map +1 -1
  12. package/cjs/component/player.js.map +1 -1
  13. package/cjs/core/factory.d.ts +8 -1
  14. package/cjs/core/factory.js +9 -2
  15. package/cjs/core/factory.js.map +1 -1
  16. package/cjs/glyph/boxplot.js +5 -5
  17. package/cjs/glyph/boxplot.js.map +1 -1
  18. package/cjs/glyph/link-path.js +2 -2
  19. package/cjs/glyph/link-path.js.map +1 -1
  20. package/cjs/glyph/ripple.js +3 -2
  21. package/cjs/glyph/ripple.js.map +1 -1
  22. package/cjs/glyph/tree-path.js +2 -2
  23. package/cjs/glyph/tree-path.js.map +1 -1
  24. package/cjs/glyph/violin.js +4 -4
  25. package/cjs/glyph/violin.js.map +1 -1
  26. package/cjs/glyph/wave.js +3 -2
  27. package/cjs/glyph/wave.js.map +1 -1
  28. package/cjs/graph/animation/animate.js +9 -4
  29. package/cjs/graph/animation/animate.js.map +1 -1
  30. package/cjs/graph/animation/animation/fade.js +5 -4
  31. package/cjs/graph/animation/animation/fade.js.map +1 -1
  32. package/cjs/graph/animation/animation/grow-cartesian.js +14 -14
  33. package/cjs/graph/animation/animation/grow-cartesian.js.map +1 -1
  34. package/cjs/graph/animation/animation/grow-interval.js +9 -6
  35. package/cjs/graph/animation/animation/grow-interval.js.map +1 -1
  36. package/cjs/graph/animation/animation/grow-points.js +9 -9
  37. package/cjs/graph/animation/animation/grow-points.js.map +1 -1
  38. package/cjs/graph/animation/animation/grow-polar.js +76 -63
  39. package/cjs/graph/animation/animation/grow-polar.js.map +1 -1
  40. package/cjs/graph/animation/animation/move.js +6 -6
  41. package/cjs/graph/animation/animation/move.js.map +1 -1
  42. package/cjs/graph/animation/animation/rotate.js +4 -4
  43. package/cjs/graph/animation/animation/rotate.js.map +1 -1
  44. package/cjs/graph/animation/animation/scale.js +5 -4
  45. package/cjs/graph/animation/animation/scale.js.map +1 -1
  46. package/cjs/graph/animation/animation/update.js +2 -2
  47. package/cjs/graph/animation/animation/update.js.map +1 -1
  48. package/cjs/graph/animation/animator.d.ts +1 -1
  49. package/cjs/graph/animation/animator.js +6 -1
  50. package/cjs/graph/animation/animator.js.map +1 -1
  51. package/cjs/graph/animation/morph.d.ts +2 -12
  52. package/cjs/graph/animation/morph.js +76 -163
  53. package/cjs/graph/animation/morph.js.map +1 -1
  54. package/cjs/graph/attributes/line.d.ts +1 -0
  55. package/cjs/graph/attributes/line.js +17 -5
  56. package/cjs/graph/attributes/line.js.map +1 -1
  57. package/cjs/graph/attributes/transform.js +7 -3
  58. package/cjs/graph/attributes/transform.js.map +1 -1
  59. package/cjs/graph/canvas-renderer.d.ts +1 -1
  60. package/cjs/graph/canvas-renderer.js +10 -5
  61. package/cjs/graph/canvas-renderer.js.map +1 -1
  62. package/cjs/graph/constants.d.ts +1 -0
  63. package/cjs/graph/constants.js +2 -2
  64. package/cjs/graph/constants.js.map +1 -1
  65. package/cjs/graph/element.d.ts +4 -0
  66. package/cjs/graph/element.js +59 -19
  67. package/cjs/graph/element.js.map +1 -1
  68. package/cjs/graph/glyph-element.js +11 -9
  69. package/cjs/graph/glyph-element.js.map +1 -1
  70. package/cjs/graph/layout/layout.d.ts +1 -0
  71. package/cjs/graph/layout/layout.js +8 -2
  72. package/cjs/graph/layout/layout.js.map +1 -1
  73. package/cjs/graph/mark/graphic.js +14 -8
  74. package/cjs/graph/mark/graphic.js.map +1 -1
  75. package/cjs/graph/util/events-extend.d.ts +1 -2
  76. package/cjs/graph/util/events-extend.js +14 -3
  77. package/cjs/graph/util/events-extend.js.map +1 -1
  78. package/cjs/graph/util/point.js +10 -26
  79. package/cjs/graph/util/point.js.map +1 -1
  80. package/cjs/graph/view-diff.d.ts +8 -0
  81. package/cjs/graph/view-diff.js +93 -0
  82. package/cjs/graph/view-diff.js.map +1 -0
  83. package/cjs/index.d.ts +8 -1
  84. package/cjs/index.js +66 -2
  85. package/cjs/index.js.map +1 -1
  86. package/cjs/interactions/base.js.map +1 -1
  87. package/cjs/interactions/brush-base.js +1 -2
  88. package/cjs/interactions/brush-filter.js +2 -1
  89. package/cjs/interactions/brush-highlight.js +16 -7
  90. package/cjs/interactions/brush-highlight.js.map +1 -1
  91. package/cjs/interactions/element-active-by-legend.d.ts +2 -1
  92. package/cjs/interactions/element-active-by-legend.js +5 -2
  93. package/cjs/interactions/element-active-by-legend.js.map +1 -1
  94. package/cjs/interactions/element-active.d.ts +3 -2
  95. package/cjs/interactions/element-active.js +4 -2
  96. package/cjs/interactions/element-active.js.map +1 -1
  97. package/cjs/interactions/element-highlight-by-graphic-name.d.ts +14 -0
  98. package/cjs/interactions/element-highlight-by-graphic-name.js +55 -0
  99. package/cjs/interactions/element-highlight-by-graphic-name.js.map +1 -0
  100. package/cjs/interactions/element-highlight-by-group.d.ts +2 -2
  101. package/cjs/interactions/element-highlight-by-group.js +13 -6
  102. package/cjs/interactions/element-highlight-by-group.js.map +1 -1
  103. package/cjs/interactions/element-highlight-by-key.d.ts +2 -2
  104. package/cjs/interactions/element-highlight-by-key.js +12 -15
  105. package/cjs/interactions/element-highlight-by-key.js.map +1 -1
  106. package/cjs/interactions/element-highlight-by-legend.d.ts +2 -1
  107. package/cjs/interactions/element-highlight-by-legend.js +14 -5
  108. package/cjs/interactions/element-highlight-by-legend.js.map +1 -1
  109. package/cjs/interactions/element-highlight-by-name.d.ts +2 -1
  110. package/cjs/interactions/element-highlight-by-name.js +14 -5
  111. package/cjs/interactions/element-highlight-by-name.js.map +1 -1
  112. package/cjs/interactions/element-highlight.d.ts +1 -1
  113. package/cjs/interactions/element-highlight.js +9 -6
  114. package/cjs/interactions/element-highlight.js.map +1 -1
  115. package/cjs/interactions/element-select-by-graphic-name.d.ts +7 -0
  116. package/cjs/interactions/element-select-by-graphic-name.js +26 -0
  117. package/cjs/interactions/element-select-by-graphic-name.js.map +1 -0
  118. package/cjs/interactions/element-select.d.ts +1 -1
  119. package/cjs/interactions/element-select.js +9 -10
  120. package/cjs/interactions/element-select.js.map +1 -1
  121. package/cjs/interactions/index.d.ts +2 -0
  122. package/cjs/interactions/index.js +17 -3
  123. package/cjs/interactions/index.js.map +1 -1
  124. package/cjs/interactions/slider-filter.js +1 -1
  125. package/cjs/interactions/toggle-state-mixin.js +9 -7
  126. package/cjs/interactions/toggle-state-mixin.js.map +1 -1
  127. package/cjs/interactions/tooltip.js +1 -1
  128. package/cjs/parse/event.d.ts +0 -2
  129. package/cjs/parse/event.js +4 -10
  130. package/cjs/parse/event.js.map +1 -1
  131. package/cjs/parse/util.js.map +1 -1
  132. package/cjs/semantic-marks/text.js.map +1 -1
  133. package/cjs/transforms/data/pie.js +2 -2
  134. package/cjs/transforms/data/pie.js.map +1 -1
  135. package/cjs/transforms/mark/mark-overlap.js +6 -6
  136. package/cjs/transforms/mark/mark-overlap.js.map +1 -1
  137. package/cjs/transforms/util/util.d.ts +0 -2
  138. package/cjs/transforms/util/util.js +3 -13
  139. package/cjs/transforms/util/util.js.map +1 -1
  140. package/cjs/types/animate.d.ts +3 -1
  141. package/cjs/types/animate.js.map +1 -1
  142. package/cjs/types/element.d.ts +7 -2
  143. package/cjs/types/element.js.map +1 -1
  144. package/cjs/types/grammar.d.ts +1 -0
  145. package/cjs/types/grammar.js.map +1 -1
  146. package/cjs/types/interaction.d.ts +4 -1
  147. package/cjs/types/interaction.js.map +1 -1
  148. package/cjs/types/mark.d.ts +2 -0
  149. package/cjs/types/mark.js.map +1 -1
  150. package/cjs/types/morph.d.ts +1 -2
  151. package/cjs/types/morph.js.map +1 -1
  152. package/cjs/types/renderer.d.ts +6 -1
  153. package/cjs/types/renderer.js.map +1 -1
  154. package/cjs/types/transform.d.ts +1 -0
  155. package/cjs/types/transform.js.map +1 -1
  156. package/cjs/types/view.d.ts +4 -1
  157. package/cjs/types/view.js.map +1 -1
  158. package/cjs/view/View.d.ts +3 -6
  159. package/cjs/view/View.js +73 -125
  160. package/cjs/view/View.js.map +1 -1
  161. package/cjs/view/animate.js +2 -1
  162. package/cjs/view/animate.js.map +1 -1
  163. package/cjs/view/constants.d.ts +2 -0
  164. package/cjs/view/constants.js +3 -2
  165. package/cjs/view/constants.js.map +1 -1
  166. package/cjs/view/events.d.ts +0 -1
  167. package/cjs/view/events.js +3 -17
  168. package/cjs/view/events.js.map +1 -1
  169. package/cjs/view/glyph.d.ts +4 -0
  170. package/cjs/view/glyph.js +12 -3
  171. package/cjs/view/glyph.js.map +1 -1
  172. package/cjs/view/grammar-record.js +2 -3
  173. package/cjs/view/grammar-record.js.map +1 -1
  174. package/cjs/view/group.js +9 -6
  175. package/cjs/view/group.js.map +1 -1
  176. package/cjs/view/mark-animate-mixin.d.ts +1 -0
  177. package/cjs/view/mark-animate-mixin.js +29 -0
  178. package/cjs/view/mark-animate-mixin.js.map +1 -0
  179. package/cjs/view/mark.d.ts +4 -1
  180. package/cjs/view/mark.js +104 -68
  181. package/cjs/view/mark.js.map +1 -1
  182. package/cjs/view/view-animate-mixin.d.ts +1 -0
  183. package/cjs/view/view-animate-mixin.js +26 -0
  184. package/cjs/view/view-animate-mixin.js.map +1 -0
  185. package/cjs/view/view-event-mixin.d.ts +1 -0
  186. package/cjs/view/view-event-mixin.js +92 -0
  187. package/cjs/view/view-event-mixin.js.map +1 -0
  188. package/cjs/view/view-morph-mixin.d.ts +1 -0
  189. package/cjs/view/view-morph-mixin.js +32 -0
  190. package/cjs/view/view-morph-mixin.js.map +1 -0
  191. package/es/component/axis.d.ts +2 -0
  192. package/es/component/axis.js +10 -0
  193. package/es/component/axis.js.map +1 -1
  194. package/es/component/grid.d.ts +2 -0
  195. package/es/component/grid.js +10 -0
  196. package/es/component/grid.js.map +1 -1
  197. package/es/component/index.d.ts +2 -2
  198. package/es/component/index.js +2 -2
  199. package/es/component/index.js.map +1 -1
  200. package/es/component/label.js +35 -19
  201. package/es/component/label.js.map +1 -1
  202. package/es/component/player.js.map +1 -1
  203. package/es/core/factory.d.ts +8 -1
  204. package/es/core/factory.js +10 -2
  205. package/es/core/factory.js.map +1 -1
  206. package/es/glyph/boxplot.js +4 -2
  207. package/es/glyph/boxplot.js.map +1 -1
  208. package/es/glyph/link-path.js +4 -2
  209. package/es/glyph/link-path.js.map +1 -1
  210. package/es/glyph/ripple.js +3 -1
  211. package/es/glyph/ripple.js.map +1 -1
  212. package/es/glyph/tree-path.js +4 -2
  213. package/es/glyph/tree-path.js.map +1 -1
  214. package/es/glyph/violin.js +4 -2
  215. package/es/glyph/violin.js.map +1 -1
  216. package/es/glyph/wave.js +3 -1
  217. package/es/glyph/wave.js.map +1 -1
  218. package/es/graph/animation/animate.js +9 -4
  219. package/es/graph/animation/animate.js.map +1 -1
  220. package/es/graph/animation/animation/fade.js +5 -4
  221. package/es/graph/animation/animation/fade.js.map +1 -1
  222. package/es/graph/animation/animation/grow-cartesian.js +14 -14
  223. package/es/graph/animation/animation/grow-cartesian.js.map +1 -1
  224. package/es/graph/animation/animation/grow-interval.js +9 -6
  225. package/es/graph/animation/animation/grow-interval.js.map +1 -1
  226. package/es/graph/animation/animation/grow-points.js +9 -9
  227. package/es/graph/animation/animation/grow-points.js.map +1 -1
  228. package/es/graph/animation/animation/grow-polar.js +76 -63
  229. package/es/graph/animation/animation/grow-polar.js.map +1 -1
  230. package/es/graph/animation/animation/move.js +6 -6
  231. package/es/graph/animation/animation/move.js.map +1 -1
  232. package/es/graph/animation/animation/rotate.js +3 -3
  233. package/es/graph/animation/animation/rotate.js.map +1 -1
  234. package/es/graph/animation/animation/scale.js +5 -4
  235. package/es/graph/animation/animation/scale.js.map +1 -1
  236. package/es/graph/animation/animation/update.js +1 -3
  237. package/es/graph/animation/animation/update.js.map +1 -1
  238. package/es/graph/animation/animator.d.ts +1 -1
  239. package/es/graph/animation/animator.js +6 -1
  240. package/es/graph/animation/animator.js.map +1 -1
  241. package/es/graph/animation/morph.d.ts +2 -12
  242. package/es/graph/animation/morph.js +72 -159
  243. package/es/graph/animation/morph.js.map +1 -1
  244. package/es/graph/attributes/line.d.ts +1 -0
  245. package/es/graph/attributes/line.js +14 -3
  246. package/es/graph/attributes/line.js.map +1 -1
  247. package/es/graph/attributes/transform.js +7 -3
  248. package/es/graph/attributes/transform.js.map +1 -1
  249. package/es/graph/canvas-renderer.d.ts +1 -1
  250. package/es/graph/canvas-renderer.js +11 -6
  251. package/es/graph/canvas-renderer.js.map +1 -1
  252. package/es/graph/constants.d.ts +1 -0
  253. package/es/graph/constants.js +2 -0
  254. package/es/graph/constants.js.map +1 -1
  255. package/es/graph/element.d.ts +4 -0
  256. package/es/graph/element.js +59 -22
  257. package/es/graph/element.js.map +1 -1
  258. package/es/graph/glyph-element.js +10 -11
  259. package/es/graph/glyph-element.js.map +1 -1
  260. package/es/graph/layout/layout.d.ts +1 -0
  261. package/es/graph/layout/layout.js +6 -0
  262. package/es/graph/layout/layout.js.map +1 -1
  263. package/es/graph/mark/graphic.js +13 -7
  264. package/es/graph/mark/graphic.js.map +1 -1
  265. package/es/graph/util/events-extend.d.ts +1 -2
  266. package/es/graph/util/events-extend.js +16 -3
  267. package/es/graph/util/events-extend.js.map +1 -1
  268. package/es/graph/util/point.js +10 -26
  269. package/es/graph/util/point.js.map +1 -1
  270. package/es/graph/view-diff.d.ts +8 -0
  271. package/es/graph/view-diff.js +89 -0
  272. package/es/graph/view-diff.js.map +1 -0
  273. package/es/index.d.ts +8 -1
  274. package/es/index.js +29 -1
  275. package/es/index.js.map +1 -1
  276. package/es/interactions/base.js.map +1 -1
  277. package/es/interactions/brush-filter.js +2 -1
  278. package/es/interactions/brush-highlight.js +16 -7
  279. package/es/interactions/brush-highlight.js.map +1 -1
  280. package/es/interactions/element-active-by-legend.d.ts +2 -1
  281. package/es/interactions/element-active-by-legend.js +5 -2
  282. package/es/interactions/element-active-by-legend.js.map +1 -1
  283. package/es/interactions/element-active.d.ts +3 -2
  284. package/es/interactions/element-active.js +5 -4
  285. package/es/interactions/element-active.js.map +1 -1
  286. package/es/interactions/element-highlight-by-graphic-name.d.ts +14 -0
  287. package/es/interactions/element-highlight-by-graphic-name.js +51 -0
  288. package/es/interactions/element-highlight-by-graphic-name.js.map +1 -0
  289. package/es/interactions/element-highlight-by-group.d.ts +2 -2
  290. package/es/interactions/element-highlight-by-group.js +13 -6
  291. package/es/interactions/element-highlight-by-group.js.map +1 -1
  292. package/es/interactions/element-highlight-by-key.d.ts +2 -2
  293. package/es/interactions/element-highlight-by-key.js +12 -15
  294. package/es/interactions/element-highlight-by-key.js.map +1 -1
  295. package/es/interactions/element-highlight-by-legend.d.ts +2 -1
  296. package/es/interactions/element-highlight-by-legend.js +14 -5
  297. package/es/interactions/element-highlight-by-legend.js.map +1 -1
  298. package/es/interactions/element-highlight-by-name.d.ts +2 -1
  299. package/es/interactions/element-highlight-by-name.js +14 -5
  300. package/es/interactions/element-highlight-by-name.js.map +1 -1
  301. package/es/interactions/element-highlight.d.ts +1 -1
  302. package/es/interactions/element-highlight.js +9 -6
  303. package/es/interactions/element-highlight.js.map +1 -1
  304. package/es/interactions/element-select-by-graphic-name.d.ts +7 -0
  305. package/es/interactions/element-select-by-graphic-name.js +20 -0
  306. package/es/interactions/element-select-by-graphic-name.js.map +1 -0
  307. package/es/interactions/element-select.d.ts +1 -1
  308. package/es/interactions/element-select.js +9 -9
  309. package/es/interactions/element-select.js.map +1 -1
  310. package/es/interactions/filter.js +1 -1
  311. package/es/interactions/fish-eye.js +1 -1
  312. package/es/interactions/index.d.ts +2 -0
  313. package/es/interactions/index.js +14 -1
  314. package/es/interactions/index.js.map +1 -1
  315. package/es/interactions/legend-filter.js +1 -1
  316. package/es/interactions/player-filter.js +1 -1
  317. package/es/interactions/roll-up.js +1 -1
  318. package/es/interactions/scrollbar-filter.js +1 -1
  319. package/es/interactions/slider-filter.js +1 -1
  320. package/es/interactions/toggle-state-mixin.js +9 -7
  321. package/es/interactions/toggle-state-mixin.js.map +1 -1
  322. package/es/interactions/tooltip.js +1 -1
  323. package/es/parse/coordinate.js +1 -1
  324. package/es/parse/event.d.ts +0 -2
  325. package/es/parse/event.js +4 -8
  326. package/es/parse/event.js.map +1 -1
  327. package/es/parse/mark.js +1 -1
  328. package/es/parse/option.js +1 -2
  329. package/es/parse/scale.js +1 -1
  330. package/es/parse/transform.js +1 -1
  331. package/es/parse/util.js +1 -1
  332. package/es/parse/util.js.map +1 -1
  333. package/es/parse/view.js +1 -1
  334. package/es/semantic-marks/text.js.map +1 -1
  335. package/es/transforms/data/pie.js +1 -1
  336. package/es/transforms/data/pie.js.map +1 -1
  337. package/es/transforms/mark/mark-overlap.js +6 -6
  338. package/es/transforms/mark/mark-overlap.js.map +1 -1
  339. package/es/transforms/util/util.d.ts +0 -2
  340. package/es/transforms/util/util.js +0 -10
  341. package/es/transforms/util/util.js.map +1 -1
  342. package/es/types/animate.d.ts +3 -1
  343. package/es/types/animate.js.map +1 -1
  344. package/es/types/element.d.ts +7 -2
  345. package/es/types/element.js.map +1 -1
  346. package/es/types/grammar.d.ts +1 -0
  347. package/es/types/grammar.js.map +1 -1
  348. package/es/types/interaction.d.ts +4 -1
  349. package/es/types/interaction.js.map +1 -1
  350. package/es/types/mark.d.ts +2 -0
  351. package/es/types/mark.js.map +1 -1
  352. package/es/types/morph.d.ts +1 -2
  353. package/es/types/morph.js.map +1 -1
  354. package/es/types/renderer.d.ts +6 -1
  355. package/es/types/renderer.js.map +1 -1
  356. package/es/types/transform.d.ts +1 -0
  357. package/es/types/transform.js.map +1 -1
  358. package/es/types/view.d.ts +4 -1
  359. package/es/types/view.js.map +1 -1
  360. package/es/view/View.d.ts +3 -6
  361. package/es/view/View.js +63 -124
  362. package/es/view/View.js.map +1 -1
  363. package/es/view/animate.js +2 -1
  364. package/es/view/animate.js.map +1 -1
  365. package/es/view/constants.d.ts +2 -0
  366. package/es/view/constants.js +4 -0
  367. package/es/view/constants.js.map +1 -1
  368. package/es/view/events.d.ts +0 -1
  369. package/es/view/events.js +1 -15
  370. package/es/view/events.js.map +1 -1
  371. package/es/view/glyph.d.ts +4 -0
  372. package/es/view/glyph.js +11 -0
  373. package/es/view/glyph.js.map +1 -1
  374. package/es/view/grammar-record.js +2 -3
  375. package/es/view/grammar-record.js.map +1 -1
  376. package/es/view/group.js +8 -7
  377. package/es/view/group.js.map +1 -1
  378. package/es/view/mark-animate-mixin.d.ts +1 -0
  379. package/es/view/mark-animate-mixin.js +25 -0
  380. package/es/view/mark-animate-mixin.js.map +1 -0
  381. package/es/view/mark.d.ts +4 -1
  382. package/es/view/mark.js +102 -70
  383. package/es/view/mark.js.map +1 -1
  384. package/es/view/view-animate-mixin.d.ts +1 -0
  385. package/es/view/view-animate-mixin.js +16 -0
  386. package/es/view/view-animate-mixin.js.map +1 -0
  387. package/es/view/view-event-mixin.d.ts +1 -0
  388. package/es/view/view-event-mixin.js +90 -0
  389. package/es/view/view-event-mixin.js.map +1 -0
  390. package/es/view/view-morph-mixin.d.ts +1 -0
  391. package/es/view/view-morph-mixin.js +22 -0
  392. package/es/view/view-morph-mixin.js.map +1 -0
  393. package/package.json +10 -10
  394. package/cjs/graph/util/element.d.ts +0 -2
  395. package/cjs/graph/util/element.js +0 -10
  396. package/cjs/graph/util/element.js.map +0 -1
  397. package/es/graph/util/element.d.ts +0 -2
  398. package/es/graph/util/element.js +0 -8
  399. package/es/graph/util/element.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/interactions/toggle-state-mixin.ts"],"names":[],"mappings":"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","file":"toggle-state-mixin.js","sourcesContent":["import type { IElement, IGlyphElement, IMark, IToggleStateMixin } from '../types';\n\nexport class ToggleStateMixin implements IToggleStateMixin {\n protected _statedElements?: (IElement | IGlyphElement)[];\n protected _marks?: IMark[];\n protected _stateMarks: Record<string, IMark[]>;\n\n updateStates(\n newStatedElements: (IElement | IGlyphElement)[],\n prevStatedElements?: (IElement | IGlyphElement)[],\n state?: string,\n reverseState?: string\n ) {\n if (!newStatedElements || !newStatedElements.length) {\n return null;\n }\n if (state && reverseState) {\n if (prevStatedElements && prevStatedElements.length) {\n // toggle\n this.toggleReverseStateOfElements(newStatedElements, prevStatedElements, reverseState);\n this.toggleStateOfElements(newStatedElements, prevStatedElements, state);\n } else {\n // update all the elements\n this.addBothStateOfElements(newStatedElements, state, reverseState);\n }\n } else if (state) {\n if (prevStatedElements && prevStatedElements.length) {\n this.toggleStateOfElements(newStatedElements, prevStatedElements, state);\n } else {\n this.addStateOfElements(newStatedElements, state);\n }\n }\n\n return newStatedElements;\n }\n\n protected toggleReverseStateOfElements(\n newStatedElements: (IElement | IGlyphElement)[],\n prevStatedElements: (IElement | IGlyphElement)[],\n reverseState: string\n ) {\n prevStatedElements.forEach(element => {\n const hasReverse =\n reverseState && this._stateMarks[reverseState] && this._stateMarks[reverseState].includes(element.mark);\n\n if (hasReverse) {\n element.addState(reverseState);\n }\n });\n\n newStatedElements.forEach(element => {\n const hasReverse =\n reverseState && this._stateMarks[reverseState] && this._stateMarks[reverseState].includes(element.mark);\n\n if (hasReverse) {\n element.removeState(reverseState);\n }\n });\n }\n\n protected toggleStateOfElements(\n newStatedElements: (IElement | IGlyphElement)[],\n prevStatedElements: (IElement | IGlyphElement)[],\n state: string\n ) {\n prevStatedElements.forEach(element => {\n const hasState = state && this._stateMarks[state] && this._stateMarks[state].includes(element.mark);\n\n if (hasState) {\n element.removeState(state);\n }\n });\n\n newStatedElements.forEach(element => {\n const hasState = state && this._stateMarks[state] && this._stateMarks[state].includes(element.mark);\n\n if (hasState) {\n element.addState(state);\n }\n });\n }\n\n protected addBothStateOfElements(statedElements: (IElement | IGlyphElement)[], state: string, reverseState: string) {\n this._marks.forEach(mark => {\n const hasReverse =\n reverseState && this._stateMarks[reverseState] && this._stateMarks[reverseState].includes(mark);\n const hasState = state && this._stateMarks[state] && this._stateMarks[state].includes(mark);\n\n if (!hasReverse && !hasState) {\n return;\n }\n\n mark.elements.forEach(el => {\n const isStated = statedElements && statedElements.includes(el);\n\n if (isStated) {\n if (hasState) {\n el.addState(state);\n }\n } else {\n if (hasReverse) {\n el.addState(reverseState);\n }\n }\n });\n });\n }\n\n protected addStateOfElements(statedElements: (IElement | IGlyphElement)[], state: string) {\n this._marks.forEach(mark => {\n const hasState = state && this._stateMarks[state] && this._stateMarks[state].includes(mark);\n\n if (!hasState) {\n return;\n }\n\n mark.elements.forEach(el => {\n const isStated = statedElements && statedElements.includes(el);\n\n if (isStated) {\n if (hasState) {\n el.addState(state);\n }\n }\n });\n });\n }\n\n clearAllStates(state?: string, reverseState?: string) {\n if (!this._statedElements || !this._statedElements.length) {\n return;\n }\n\n this._marks.forEach(mark => {\n if (reverseState && this._stateMarks[reverseState] && this._stateMarks[reverseState].includes(mark)) {\n mark.elements.forEach(el => {\n el.removeState(reverseState);\n });\n }\n\n if (state && this._stateMarks[state] && this._stateMarks[state].includes(mark)) {\n mark.elements.forEach(el => {\n if (this._statedElements.includes(el)) {\n el.removeState(state);\n }\n });\n }\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/interactions/toggle-state-mixin.ts"],"names":[],"mappings":"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","file":"toggle-state-mixin.js","sourcesContent":["import type { IElement, IGlyphElement, IMark, IToggleStateMixin } from '../types';\n\nexport class ToggleStateMixin implements IToggleStateMixin {\n protected _statedElements?: (IElement | IGlyphElement)[];\n protected _marks?: IMark[];\n protected _stateMarks: Record<string, IMark[]>;\n\n updateStates(\n newStatedElements: (IElement | IGlyphElement)[],\n prevStatedElements?: (IElement | IGlyphElement)[],\n state?: string,\n reverseState?: string\n ) {\n if (!newStatedElements || !newStatedElements.length) {\n return null;\n }\n if (state && reverseState) {\n if (prevStatedElements && prevStatedElements.length) {\n // toggle\n this.toggleReverseStateOfElements(newStatedElements, prevStatedElements, reverseState);\n this.toggleStateOfElements(newStatedElements, prevStatedElements, state);\n } else {\n // update all the elements\n this.addBothStateOfElements(newStatedElements, state, reverseState);\n }\n } else if (state) {\n if (prevStatedElements && prevStatedElements.length) {\n this.toggleStateOfElements(newStatedElements, prevStatedElements, state);\n } else {\n this.addStateOfElements(newStatedElements, state);\n }\n }\n\n return newStatedElements;\n }\n\n protected toggleReverseStateOfElements(\n newStatedElements: (IElement | IGlyphElement)[],\n prevStatedElements: (IElement | IGlyphElement)[],\n reverseState: string\n ) {\n prevStatedElements.forEach(element => {\n const hasReverse =\n reverseState && this._stateMarks[reverseState] && this._stateMarks[reverseState].includes(element.mark);\n\n if (hasReverse) {\n element.addState(reverseState);\n }\n });\n\n newStatedElements.forEach(element => {\n const hasReverse =\n reverseState && this._stateMarks[reverseState] && this._stateMarks[reverseState].includes(element.mark);\n\n if (hasReverse) {\n element.removeState(reverseState);\n }\n });\n }\n\n protected toggleStateOfElements(\n newStatedElements: (IElement | IGlyphElement)[],\n prevStatedElements: (IElement | IGlyphElement)[],\n state: string\n ) {\n prevStatedElements.forEach(element => {\n const hasState = state && this._stateMarks[state] && this._stateMarks[state].includes(element.mark);\n\n if (hasState) {\n element.removeState(state);\n }\n });\n\n newStatedElements.forEach(element => {\n const hasState = state && this._stateMarks[state] && this._stateMarks[state].includes(element.mark);\n\n if (hasState) {\n element.addState(state);\n }\n });\n }\n\n protected addBothStateOfElements(statedElements: (IElement | IGlyphElement)[], state: string, reverseState: string) {\n this._marks.forEach(mark => {\n const hasReverse =\n reverseState && this._stateMarks[reverseState] && this._stateMarks[reverseState].includes(mark);\n const hasState = state && this._stateMarks[state] && this._stateMarks[state].includes(mark);\n\n if (!hasReverse && !hasState) {\n return;\n }\n\n mark.elements?.forEach(el => {\n const isStated = statedElements && statedElements.includes(el);\n\n if (isStated) {\n if (hasState) {\n el.addState(state);\n }\n } else {\n if (hasReverse) {\n el.addState(reverseState);\n }\n }\n });\n });\n }\n\n protected addStateOfElements(statedElements: (IElement | IGlyphElement)[], state: string) {\n this._marks.forEach(mark => {\n const hasState = state && this._stateMarks[state] && this._stateMarks[state].includes(mark);\n\n if (!hasState) {\n return;\n }\n\n mark.elements?.forEach(el => {\n const isStated = statedElements && statedElements.includes(el);\n\n if (isStated) {\n if (hasState) {\n el.addState(state);\n }\n }\n });\n });\n }\n\n clearAllStates(state?: string, reverseState?: string) {\n if (!this._statedElements || !this._statedElements.length) {\n return;\n }\n\n this._marks.forEach(mark => {\n if (mark && mark.elements) {\n if (reverseState && this._stateMarks[reverseState] && this._stateMarks[reverseState].includes(mark)) {\n mark.elements.forEach(el => {\n el.removeState(reverseState);\n });\n }\n\n if (state && this._stateMarks[state] && this._stateMarks[state].includes(mark)) {\n mark.elements.forEach(el => {\n if (this._statedElements.includes(el)) {\n el.removeState(state);\n }\n });\n }\n }\n });\n }\n}\n"]}
@@ -60,4 +60,4 @@ exports.Tooltip = Tooltip, Tooltip.type = "tooltip", Tooltip.defaultOptions = {
60
60
  trigger: "pointermove",
61
61
  triggerOff: "pointerleave"
62
62
  };
63
- //# sourceMappingURL=tooltip.js.map
63
+ //# sourceMappingURL=tooltip.js.map
@@ -5,6 +5,4 @@ export declare const parseHandler: (callback: EventCallback, config: {
5
5
  debounce?: number;
6
6
  throttle?: number;
7
7
  }) => (...args: any[]) => any;
8
- export declare const NAME_PREFIX = "@";
9
- export declare const ID_PREFIX = "#";
10
8
  export declare const parseEventSelector: (selector: string, source?: EventSourceType) => Partial<ParsedViewEventSpec | ParsedWindowEventSpec>;
@@ -2,12 +2,10 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
- }), exports.parseEventSelector = exports.ID_PREFIX = exports.NAME_PREFIX = exports.parseHandler = exports.generateFilterByMark = void 0;
5
+ }), exports.parseEventSelector = exports.parseHandler = exports.generateFilterByMark = void 0;
6
6
 
7
7
  const vutils_1 = require("@visactor/vutils"), graphic_1 = require("../graph/util/graphic"), constants_1 = require("../view/constants"), generateFilterByMark = evtSpec => (0,
8
- vutils_1.isNil)(evtSpec.markId) ? el => el && el.mark.id() === evtSpec.markId : (0,
9
- vutils_1.isNil)(evtSpec.markName) ? el => el && el.mark.name() === evtSpec.markName : (0,
10
- vutils_1.isNil)(evtSpec.type) ? el => el && el.mark.markType === evtSpec.type : () => !0;
8
+ vutils_1.isNil)(evtSpec.markId) ? (0, vutils_1.isNil)(evtSpec.markName) ? (0, vutils_1.isNil)(evtSpec.markType) ? () => !0 : el => el && el.mark.markType === evtSpec.markType : el => el && el.mark.name() === evtSpec.markName : el => el && el.mark.id() === evtSpec.markId;
11
9
 
12
10
  exports.generateFilterByMark = generateFilterByMark;
13
11
 
@@ -16,15 +14,11 @@ vutils_1.throttle)(callback, config.throttle) : callback;
16
14
 
17
15
  exports.parseHandler = parseHandler;
18
16
 
19
- const JOIN_SYMBOL = ":";
20
-
21
- exports.NAME_PREFIX = "@", exports.ID_PREFIX = "#";
22
-
23
- const parseEventSelector = (selector, source = constants_1.EVENT_SOURCE_VIEW) => {
17
+ const JOIN_SYMBOL = ":", parseEventSelector = (selector, source = constants_1.EVENT_SOURCE_VIEW) => {
24
18
  const spec = {}, splitArr = selector.split(":");
25
19
  if (2 === splitArr.length) {
26
20
  const [space, eventType] = splitArr;
27
- space[0] === exports.ID_PREFIX ? (spec.markId = space.slice(1), spec.source = source) : space[0] === exports.NAME_PREFIX ? (spec.markName = space.slice(1),
21
+ space[0] === constants_1.ID_PREFIX ? (spec.markId = space.slice(1), spec.source = source) : space[0] === constants_1.NAME_PREFIX ? (spec.markName = space.slice(1),
28
22
  spec.source = source) : (0, graphic_1.isMarkType)(space) ? (spec.markType = space,
29
23
  spec.source = source) : space === constants_1.EVENT_SOURCE_WINDOW ? spec.source = constants_1.EVENT_SOURCE_WINDOW : spec.source = source,
30
24
  spec.type = eventType;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/parse/event.ts"],"names":[],"mappings":"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","file":"event.js","sourcesContent":["import { debounce, isNil, throttle } from '@visactor/vutils';\nimport type {\n EventSourceType,\n ParsedViewEventSpec,\n ParsedWindowEventSpec,\n EventCallback,\n MarkType,\n IElement\n} from '../types';\nimport { isMarkType } from '../graph/util/graphic';\nimport { EVENT_SOURCE_VIEW, EVENT_SOURCE_WINDOW } from '../view/constants';\n\nexport const generateFilterByMark = (evtSpec: Partial<ParsedViewEventSpec | ParsedWindowEventSpec>) => {\n if (isNil(evtSpec.markId)) {\n return (el: IElement) => {\n return el && el.mark.id() === evtSpec.markId;\n };\n }\n\n if (isNil(evtSpec.markName)) {\n return (el: IElement) => {\n return el && el.mark.name() === evtSpec.markName;\n };\n }\n\n if (isNil(evtSpec.type)) {\n return (el: IElement) => {\n return el && el.mark.markType === evtSpec.type;\n };\n }\n\n return () => true;\n};\n\nexport const parseHandler = (callback: EventCallback, config: { debounce?: number; throttle?: number }) => {\n if (config && config.debounce) {\n return debounce(callback, config.debounce);\n }\n\n if (config && config.throttle) {\n return throttle(callback, config.throttle);\n }\n\n return callback;\n};\n\nconst JOIN_SYMBOL = ':';\nexport const NAME_PREFIX = '@';\nexport const ID_PREFIX = '#';\n\n/**\n * Parse an event selector string.\n * Supported rules:\n * 1. mousedown\n * 2. rect:mousedown\n * 3. window:mousemove\n * 4. @foo:mousedown\n * Returns an event stream definitions.\n */\nexport const parseEventSelector = (\n selector: string,\n source: EventSourceType = EVENT_SOURCE_VIEW\n): Partial<ParsedViewEventSpec | ParsedWindowEventSpec> => {\n const spec: Partial<ParsedViewEventSpec | ParsedWindowEventSpec> = {};\n\n const splitArr = selector.split(JOIN_SYMBOL);\n\n if (splitArr.length === 2) {\n const [space, eventType] = splitArr;\n\n if (space[0] === ID_PREFIX) {\n // events on marks id\n spec.markId = space.slice(1);\n spec.source = source;\n } else if (space[0] === NAME_PREFIX) {\n // events on marks name\n spec.markName = space.slice(1);\n spec.source = source;\n } else if (isMarkType(space)) {\n spec.markType = space as MarkType;\n spec.source = source;\n } else if (space === EVENT_SOURCE_WINDOW) {\n spec.source = EVENT_SOURCE_WINDOW;\n } else {\n spec.source = source;\n }\n\n spec.type = eventType;\n } else if (splitArr.length === 1) {\n spec.type = selector;\n spec.source = source;\n }\n\n return spec;\n};\n"]}
1
+ {"version":3,"sources":["../src/parse/event.ts"],"names":[],"mappings":";;;AAAA,6CAA6D;AAS7D,mDAAmD;AACnD,iDAAmG;AAE5F,MAAM,oBAAoB,GAAG,CAAC,OAA6D,EAAE,EAAE;IACpG,IAAI,CAAC,IAAA,cAAK,EAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAC1B,OAAO,CAAC,EAAY,EAAE,EAAE;YACtB,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC;QAC/C,CAAC,CAAC;KACH;IAED,IAAI,CAAC,IAAA,cAAK,EAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC5B,OAAO,CAAC,EAAY,EAAE,EAAE;YACtB,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO,CAAC,QAAQ,CAAC;QACnD,CAAC,CAAC;KACH;IAED,IAAI,CAAC,IAAA,cAAK,EAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC5B,OAAO,CAAC,EAAY,EAAE,EAAE;YACtB,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC;QACrD,CAAC,CAAC;KACH;IAED,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC;AACpB,CAAC,CAAC;AApBW,QAAA,oBAAoB,wBAoB/B;AAEK,MAAM,YAAY,GAAG,CAAC,QAAuB,EAAE,MAAgD,EAAE,EAAE;IACxG,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE;QAC7B,OAAO,IAAA,iBAAQ,EAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;KAC5C;IAED,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE;QAC7B,OAAO,IAAA,iBAAQ,EAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;KAC5C;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAVW,QAAA,YAAY,gBAUvB;AAEF,MAAM,WAAW,GAAG,GAAG,CAAC;AAWjB,MAAM,kBAAkB,GAAG,CAChC,QAAgB,EAChB,SAA0B,6BAAiB,EACW,EAAE;IACxD,MAAM,IAAI,GAAyD,EAAE,CAAC;IAEtE,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAE7C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;QACzB,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC;QAEpC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,qBAAS,EAAE;YAE1B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;SACtB;aAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,uBAAW,EAAE;YAEnC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;SACtB;aAAM,IAAI,IAAA,oBAAU,EAAC,KAAK,CAAC,EAAE;YAC5B,IAAI,CAAC,QAAQ,GAAG,KAAiB,CAAC;YAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;SACtB;aAAM,IAAI,KAAK,KAAK,+BAAmB,EAAE;YACxC,IAAI,CAAC,MAAM,GAAG,+BAAmB,CAAC;SACnC;aAAM;YACL,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;SACtB;QAED,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;KACvB;SAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;QAChC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;KACtB;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAnCW,QAAA,kBAAkB,sBAmC7B","file":"event.js","sourcesContent":["import { debounce, isNil, throttle } from '@visactor/vutils';\nimport type {\n EventSourceType,\n ParsedViewEventSpec,\n ParsedWindowEventSpec,\n EventCallback,\n MarkType,\n IElement\n} from '../types';\nimport { isMarkType } from '../graph/util/graphic';\nimport { EVENT_SOURCE_VIEW, EVENT_SOURCE_WINDOW, ID_PREFIX, NAME_PREFIX } from '../view/constants';\n\nexport const generateFilterByMark = (evtSpec: Partial<ParsedViewEventSpec | ParsedWindowEventSpec>) => {\n if (!isNil(evtSpec.markId)) {\n return (el: IElement) => {\n return el && el.mark.id() === evtSpec.markId;\n };\n }\n\n if (!isNil(evtSpec.markName)) {\n return (el: IElement) => {\n return el && el.mark.name() === evtSpec.markName;\n };\n }\n\n if (!isNil(evtSpec.markType)) {\n return (el: IElement) => {\n return el && el.mark.markType === evtSpec.markType;\n };\n }\n\n return () => true;\n};\n\nexport const parseHandler = (callback: EventCallback, config: { debounce?: number; throttle?: number }) => {\n if (config && config.debounce) {\n return debounce(callback, config.debounce);\n }\n\n if (config && config.throttle) {\n return throttle(callback, config.throttle);\n }\n\n return callback;\n};\n\nconst JOIN_SYMBOL = ':';\n\n/**\n * Parse an event selector string.\n * Supported rules:\n * 1. mousedown\n * 2. rect:mousedown\n * 3. window:mousemove\n * 4. @foo:mousedown\n * Returns an event stream definitions.\n */\nexport const parseEventSelector = (\n selector: string,\n source: EventSourceType = EVENT_SOURCE_VIEW\n): Partial<ParsedViewEventSpec | ParsedWindowEventSpec> => {\n const spec: Partial<ParsedViewEventSpec | ParsedWindowEventSpec> = {};\n\n const splitArr = selector.split(JOIN_SYMBOL);\n\n if (splitArr.length === 2) {\n const [space, eventType] = splitArr;\n\n if (space[0] === ID_PREFIX) {\n // events on marks id\n spec.markId = space.slice(1);\n spec.source = source;\n } else if (space[0] === NAME_PREFIX) {\n // events on marks name\n spec.markName = space.slice(1);\n spec.source = source;\n } else if (isMarkType(space)) {\n spec.markType = space as MarkType;\n spec.source = source;\n } else if (space === EVENT_SOURCE_WINDOW) {\n spec.source = EVENT_SOURCE_WINDOW;\n } else {\n spec.source = source;\n }\n\n spec.type = eventType;\n } else if (splitArr.length === 1) {\n spec.type = selector;\n spec.source = source;\n }\n\n return spec;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/parse/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["import { isString, isFunction, isNil, array, Color } from '@visactor/vutils';\nimport type { IElement } from '../types/element';\nimport type {\n FunctionCallback,\n SignalDependency,\n SignalReference,\n IView,\n GenericFunctionType,\n SignalFunction,\n ParameterFunctionType,\n ParameterCallback,\n Nil\n} from '../types';\nimport type { IGrammarBase } from '../types/grammar';\n\nexport function parseReference(dependency: SignalDependency | SignalDependency[], view: IView): IGrammarBase[] {\n const dependencies: SignalDependency[] = array(dependency);\n return dependencies.reduce((refs: IGrammarBase[], dep: string | IGrammarBase) => {\n const ref = (isString(dep) ? view.getGrammarById(dep as string) : dep) as IGrammarBase;\n\n if (ref) {\n refs.push(ref);\n }\n return refs;\n }, []);\n}\n\nfunction isSignalReferenceType(signal: any): signal is SignalReference {\n return !isFunction(signal) && !!(signal as SignalReference)?.signal;\n}\n\nfunction isSignalFunctionType<Callback extends FunctionCallback<T>, T>(\n signal: any\n): signal is SignalFunction<Callback, T> {\n return !isFunction(signal) && !!(signal as SignalFunction<Callback, T>)?.callback;\n}\n\nexport function parseFunctionType<Callback extends FunctionCallback<T>, T>(\n spec: GenericFunctionType<Callback, T> | Nil,\n view: IView\n): IGrammarBase[] {\n if (isNil(spec)) {\n return [];\n }\n if (isSignalReferenceType(spec)) {\n const signal = spec.signal;\n if (isString(signal)) {\n return array<IGrammarBase>(view.getGrammarById(signal as string) as IGrammarBase);\n } else if ((signal as IGrammarBase)?.grammarType === 'signal') {\n return [signal as IGrammarBase];\n }\n } else if (isSignalFunctionType(spec)) {\n return parseReference((spec as SignalFunction<Callback, T>).dependency, view);\n }\n return [];\n}\n\nexport function isFunctionType<Callback extends FunctionCallback<T>, T>(\n spec: any\n): spec is Callback | SignalReference | SignalFunction<Callback, T> {\n return isFunction(spec) || spec?.signal || !!(spec as SignalFunction<Callback, T>)?.callback;\n}\n\nexport function invokeFunctionType<Callback extends FunctionCallback<T>, T>(\n spec: GenericFunctionType<Callback, T> | Nil,\n parameters: any,\n datumOrGrammarInstance?: any | IGrammarBase,\n element?: IElement | any\n): T {\n if (isNil(spec)) {\n return spec as T;\n }\n\n if (isFunction(spec)) {\n if (element) {\n return (spec as Callback).call(null, datumOrGrammarInstance, element, parameters);\n }\n return (spec as Callback).call(null, datumOrGrammarInstance, parameters);\n } else if ((spec as SignalReference).signal) {\n const signal = (spec as SignalReference).signal;\n if (isString(signal)) {\n return parameters?.[signal as string];\n }\n return (signal as IGrammarBase).output();\n } else if ((spec as SignalFunction<Callback, T>).callback) {\n if (element) {\n return (spec as SignalFunction<Callback, T>).callback.call(null, datumOrGrammarInstance, element, parameters);\n }\n return (spec as SignalFunction<Callback, T>).callback.call(null, datumOrGrammarInstance, parameters);\n }\n return spec as T;\n}\n\nexport function invokeParameterFunctionType<T>(spec: ParameterFunctionType<T>, parameters: any): T {\n if (isNil(spec)) {\n return spec as T;\n }\n\n if (isFunction(spec)) {\n return spec.call(null, parameters);\n } else if ((spec as SignalReference).signal) {\n const signal = (spec as SignalReference).signal;\n if (isString(signal)) {\n return parameters?.[signal as string];\n }\n return (signal as IGrammarBase).output();\n } else if ((spec as SignalFunction<ParameterCallback<T>, T>).callback) {\n return (spec as SignalFunction<ParameterCallback<T>, T>).callback.call(null, parameters);\n }\n return spec as T;\n}\n\nexport function getGrammarOutput(grammar: IGrammarBase | string, parameters: any) {\n return isGrammar(grammar) ? grammar.output() : parameters[grammar];\n}\n\n/**\n * 判断是否是依赖signal\n */\nexport function isSignal(obj: any) {\n return obj && (obj.signal || obj.callback);\n}\n\nexport const isGrammar = (el: any): el is IGrammarBase => {\n return el && !isNil(el.grammarType);\n};\n\nexport const parseField = <T>(field: ((datum: T) => symbol | string) | string | symbol) => {\n if (isFunction(field)) {\n return field;\n }\n return (datum: T) => datum[field];\n};\n\nexport const parseColor = (color: any): string | null => {\n if (isString(color) && Color.parseColorString(color)) {\n return color;\n }\n return null;\n};\n"]}
1
+ {"version":3,"sources":["../src/parse/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["import { isString, isFunction, isNil, array, Color } from '@visactor/vutils';\nimport type { IElement } from '../types/element';\nimport type {\n FunctionCallback,\n SignalDependency,\n SignalReference,\n IView,\n GenericFunctionType,\n SignalFunction,\n ParameterFunctionType,\n ParameterCallback,\n Nil\n} from '../types';\nimport type { IGrammarBase } from '../types/grammar';\n\nexport function parseReference(dependency: SignalDependency | SignalDependency[], view: IView): IGrammarBase[] {\n const dependencies: SignalDependency[] = array(dependency);\n return dependencies.reduce((refs: IGrammarBase[], dep: string | IGrammarBase) => {\n const ref = (isString(dep) ? view.getGrammarById(dep as string) : dep) as IGrammarBase;\n\n if (ref) {\n refs.push(ref);\n }\n return refs;\n }, []);\n}\n\nfunction isSignalReferenceType(signal: any): signal is SignalReference {\n return !isFunction(signal) && !!(signal as SignalReference)?.signal;\n}\n\nfunction isSignalFunctionType<Callback extends FunctionCallback<T>, T>(\n signal: any\n): signal is SignalFunction<Callback, T> {\n return !isFunction(signal) && !!(signal as SignalFunction<Callback, T>)?.callback;\n}\n\nexport function parseFunctionType<Callback extends FunctionCallback<T>, T>(\n spec: GenericFunctionType<Callback, T> | Nil,\n view: IView\n): IGrammarBase[] {\n if (isNil(spec)) {\n return [];\n }\n if (isSignalReferenceType(spec)) {\n const signal = spec.signal;\n if (isString(signal)) {\n return array<IGrammarBase>(view.getGrammarById(signal as string) as IGrammarBase);\n } else if ((signal as IGrammarBase)?.grammarType === 'signal') {\n return [signal as IGrammarBase];\n }\n } else if (isSignalFunctionType(spec)) {\n return parseReference((spec as SignalFunction<Callback, T>).dependency, view);\n }\n return [];\n}\n\nexport function isFunctionType<Callback extends FunctionCallback<T>, T>(\n spec: any\n): spec is Callback | SignalReference | SignalFunction<Callback, T> {\n return isFunction(spec) || spec?.signal || !!(spec as SignalFunction<Callback, T>)?.callback;\n}\n\nexport function invokeFunctionType<Callback extends FunctionCallback<T>, T>(\n spec: GenericFunctionType<Callback, T> | Nil,\n parameters: any,\n datumOrGrammarInstance?: any | IGrammarBase,\n element?: IElement | any\n): T {\n if (isNil(spec)) {\n return spec as T;\n }\n\n if (isFunction(spec)) {\n if (element) {\n return (spec as Callback).call(null, datumOrGrammarInstance, element, parameters);\n }\n return (spec as Callback).call(null, datumOrGrammarInstance, parameters);\n } else if ((spec as SignalReference).signal) {\n const signal = (spec as SignalReference).signal;\n if (isString(signal)) {\n return parameters?.[signal as string];\n }\n return (signal as IGrammarBase).output();\n } else if ((spec as SignalFunction<Callback, T>).callback) {\n if (element) {\n return (spec as SignalFunction<Callback, T>).callback.call(null, datumOrGrammarInstance, element, parameters);\n }\n return (spec as SignalFunction<Callback, T>).callback.call(null, datumOrGrammarInstance, parameters);\n }\n return spec as T;\n}\n\nexport function invokeParameterFunctionType<T>(spec: ParameterFunctionType<T>, parameters: any): T {\n if (isNil(spec)) {\n return spec as T;\n }\n\n if (isFunction(spec)) {\n return spec.call(null, parameters);\n } else if ((spec as SignalReference).signal) {\n const signal = (spec as SignalReference).signal;\n if (isString(signal)) {\n return parameters?.[signal as string];\n }\n return (signal as IGrammarBase).output();\n } else if ((spec as SignalFunction<ParameterCallback<T>, T>).callback) {\n return (spec as SignalFunction<ParameterCallback<T>, T>).callback.call(null, parameters);\n }\n return spec as T;\n}\n\nexport function getGrammarOutput(grammar: IGrammarBase | string, parameters: any) {\n return isGrammar(grammar) ? grammar.output() : parameters[grammar];\n}\n\n/**\n * 判断是否是依赖signal\n */\nexport function isSignal(obj: any) {\n return obj && (obj.signal || obj.callback);\n}\n\nexport const isGrammar = (el: any): el is IGrammarBase => {\n return el && !isNil(el.grammarType);\n};\n\nexport const parseField = <T>(field: ((datum: T) => symbol | string) | string | symbol) => {\n if (isFunction(field)) {\n return field as (datum: T) => symbol | string;\n }\n return (datum: T) => datum[field as string | symbol];\n};\n\nexport const parseColor = (color: any): string | null => {\n if (isString(color) && Color.parseColorString(color)) {\n return color;\n }\n return null;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/semantic-marks/text.ts"],"names":[],"mappings":";;;AAAA,0CAAiD;AAEjD,uCAAoC;AACpC,mDAA0D;AAG1D,MAAa,IAAK,SAAQ,WAAI;IAK5B,cAAc,CAAC,SAAc,EAAE,QAAiB;QAC9C,MAAM,aAAa,GAAG,SAAS,IAAI,SAAS,CAAC,UAAU,CAAC;QAExD,MAAM,MAAM,GACV,aAAa;YACb,CAAC,aAAa,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC;QAEpG,MAAM,WAAW,GAAG,IAAA,2BAAiB,EACnC,IAAa,EACb,MAAM,CAAC,CAAC,CAAC,uBAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,uBAAe,CAAC,IAAI,EACxD,SAAS,CACV,CAAC;QAEF,OAAO,KAAK,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAChE,CAAC;IAED,OAAO;QACL,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;;AAvBH,oBAwBC;AAvBQ,aAAQ,GAAG,uBAAe,CAAC,IAAI,CAAC","file":"text.js","sourcesContent":["import { GrammarMarkType } from '../graph/enums';\nimport type { IMark, MarkSpec } from '../types';\nimport { Mark } from '../view/mark';\nimport { createGraphicItem } from '../graph/util/graphic';\nimport { transformsByType } from '../graph/attributes/transform';\n\nexport class Text extends Mark {\n static markType = GrammarMarkType.text;\n declare markType: GrammarMarkType.text;\n protected declare spec: MarkSpec;\n\n addGraphicItem(initAttrs: any, groupKey?: string) {\n const originalAttrs = initAttrs && initAttrs.limitAttrs;\n\n const isRich =\n originalAttrs &&\n (originalAttrs.textType === 'rich' || (originalAttrs.text && originalAttrs.text.type === 'rich'));\n\n const graphicItem = createGraphicItem(\n this as IMark,\n isRich ? GrammarMarkType.richtext : GrammarMarkType.text,\n initAttrs\n );\n\n return super.addGraphicItem(initAttrs, groupKey, graphicItem);\n }\n\n release(): void {\n super.release();\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/semantic-marks/text.ts"],"names":[],"mappings":";;;AAAA,0CAAiD;AAEjD,uCAAoC;AACpC,mDAA0D;AAE1D,MAAa,IAAK,SAAQ,WAAI;IAK5B,cAAc,CAAC,SAAc,EAAE,QAAiB;QAC9C,MAAM,aAAa,GAAG,SAAS,IAAI,SAAS,CAAC,UAAU,CAAC;QAExD,MAAM,MAAM,GACV,aAAa;YACb,CAAC,aAAa,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC;QAEpG,MAAM,WAAW,GAAG,IAAA,2BAAiB,EACnC,IAAa,EACb,MAAM,CAAC,CAAC,CAAC,uBAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,uBAAe,CAAC,IAAI,EACxD,SAAS,CACV,CAAC;QAEF,OAAO,KAAK,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAChE,CAAC;IAED,OAAO;QACL,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;;AAvBH,oBAwBC;AAvBQ,aAAQ,GAAG,uBAAe,CAAC,IAAI,CAAC","file":"text.js","sourcesContent":["import { GrammarMarkType } from '../graph/enums';\nimport type { IMark, MarkSpec } from '../types';\nimport { Mark } from '../view/mark';\nimport { createGraphicItem } from '../graph/util/graphic';\n\nexport class Text extends Mark {\n static markType = GrammarMarkType.text;\n declare markType: GrammarMarkType.text;\n protected declare spec: MarkSpec;\n\n addGraphicItem(initAttrs: any, groupKey?: string) {\n const originalAttrs = initAttrs && initAttrs.limitAttrs;\n\n const isRich =\n originalAttrs &&\n (originalAttrs.textType === 'rich' || (originalAttrs.text && originalAttrs.text.type === 'rich'));\n\n const graphicItem = createGraphicItem(\n this as IMark,\n isRich ? GrammarMarkType.richtext : GrammarMarkType.text,\n initAttrs\n );\n\n return super.addGraphicItem(initAttrs, groupKey, graphicItem);\n }\n\n release(): void {\n super.release();\n }\n}\n"]}
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  }), exports.transform = void 0;
6
6
 
7
- const util_1 = require("../util/util"), transform = (options, upstreamData) => {
7
+ const vutils_1 = require("@visactor/vutils"), transform = (options, upstreamData) => {
8
8
  var _a, _b;
9
9
  if (!upstreamData || 0 === upstreamData.length) return upstreamData;
10
10
  const field = options.field, startAngle = null !== (_a = options.startAngle) && void 0 !== _a ? _a : 0, endAngle = null !== (_b = options.endAngle) && void 0 !== _b ? _b : 2 * Math.PI, {asStartAngle: asStartAngle, asEndAngle: asEndAngle, asMiddleAngle: asMiddleAngle, asRadian: asRadian, asRatio: asRatio, asQuadrant: asQuadrant, asK: asK} = options, total = upstreamData.reduce(((sum, d) => Number.parseFloat(d[field]) + sum), 0), max = upstreamData.reduce(((m, d) => Math.max(m, Number.parseFloat(d[field]))), -1 / 0), intervalAngle = endAngle - startAngle;
@@ -13,7 +13,7 @@ const util_1 = require("../util/util"), transform = (options, upstreamData) => {
13
13
  const datum = Object.assign({}, originDatum), ratio = Number.parseFloat(datum[field]) / total, radian = ratio * intervalAngle;
14
14
  return asRatio && (datum[asRatio] = ratio), asStartAngle && (datum[asStartAngle] = lastAngle),
15
15
  asEndAngle && (datum[asEndAngle] = lastAngle + radian), asMiddleAngle && (datum[asMiddleAngle] = lastAngle + radian / 2),
16
- asRadian && (datum[asRadian] = radian), asQuadrant && (datum[asQuadrant] = (0, util_1.computeQuadrant)(lastAngle + radian / 2)),
16
+ asRadian && (datum[asRadian] = radian), asQuadrant && (datum[asQuadrant] = (0, vutils_1.computeQuadrant)(lastAngle + radian / 2)),
17
17
  asK && (datum[asK] = Number.parseFloat(datum[field]) / max), lastAngle = datum[asEndAngle],
18
18
  datum;
19
19
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/transforms/data/pie.ts"],"names":[],"mappings":";;;AACA,uCAA+C;AAExC,MAAM,SAAS,GAAG,CAAC,OAA2B,EAAE,YAAmB,EAAE,EAAE;;IAC5E,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;QAC9C,OAAO,YAAY,CAAC;KACrB;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,MAAM,UAAU,GAAG,MAAA,OAAO,CAAC,UAAU,mCAAI,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,MAAA,OAAO,CAAC,QAAQ,mCAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IAEjD,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IAEhG,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;IACpF,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IAE/F,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC5C,IAAI,SAAS,GAAG,UAAU,CAAC;IAC3B,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;QAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC;QACtD,MAAM,MAAM,GAAG,KAAK,GAAG,aAAa,CAAC;QAErC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;QACpC,YAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,CAAC;QAClD,UAAU,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,CAAC;QACvD,aAAa,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;QACjE,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC;QACvC,UAAU,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,IAAA,sBAAe,EAAC,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5E,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAE5D,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,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;AAjCW,QAAA,SAAS,aAiCpB","file":"pie.js","sourcesContent":["import type { PieTransformOption } from '../../types';\nimport { computeQuadrant } from '../util/util';\n\nexport const transform = (options: PieTransformOption, upstreamData: any[]) => {\n if (!upstreamData || upstreamData.length === 0) {\n return upstreamData;\n }\n const field = options.field;\n const startAngle = options.startAngle ?? 0;\n const endAngle = options.endAngle ?? Math.PI * 2;\n\n const { asStartAngle, asEndAngle, asMiddleAngle, asRadian, asRatio, asQuadrant, asK } = options;\n\n const total = upstreamData.reduce((sum, d) => Number.parseFloat(d[field]) + sum, 0);\n const max = upstreamData.reduce((m, d) => Math.max(m, Number.parseFloat(d[field])), -Infinity);\n\n const intervalAngle = endAngle - startAngle;\n let lastAngle = startAngle;\n const data = upstreamData.map(originDatum => {\n const datum = Object.assign({}, originDatum);\n const ratio = Number.parseFloat(datum[field]) / total;\n const radian = ratio * intervalAngle;\n\n asRatio && (datum[asRatio] = ratio);\n asStartAngle && (datum[asStartAngle] = lastAngle);\n asEndAngle && (datum[asEndAngle] = lastAngle + radian);\n asMiddleAngle && (datum[asMiddleAngle] = lastAngle + radian / 2);\n asRadian && (datum[asRadian] = radian);\n asQuadrant && (datum[asQuadrant] = computeQuadrant(lastAngle + radian / 2));\n asK && (datum[asK] = Number.parseFloat(datum[field]) / max);\n\n lastAngle = datum[asEndAngle];\n return datum;\n });\n data[data.length - 1][asEndAngle] = endAngle;\n return data;\n};\n"]}
1
+ {"version":3,"sources":["../src/transforms/data/pie.ts"],"names":[],"mappings":";;;AAAA,6CAAmD;AAG5C,MAAM,SAAS,GAAG,CAAC,OAA2B,EAAE,YAAmB,EAAE,EAAE;;IAC5E,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;QAC9C,OAAO,YAAY,CAAC;KACrB;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,MAAM,UAAU,GAAG,MAAA,OAAO,CAAC,UAAU,mCAAI,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,MAAA,OAAO,CAAC,QAAQ,mCAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IAEjD,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IAEhG,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;IACpF,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IAE/F,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC5C,IAAI,SAAS,GAAG,UAAU,CAAC;IAC3B,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;QAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC;QACtD,MAAM,MAAM,GAAG,KAAK,GAAG,aAAa,CAAC;QAErC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;QACpC,YAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,CAAC;QAClD,UAAU,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,CAAC;QACvD,aAAa,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;QACjE,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC;QACvC,UAAU,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,IAAA,wBAAe,EAAC,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5E,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAE5D,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,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;AAjCW,QAAA,SAAS,aAiCpB","file":"pie.js","sourcesContent":["import { computeQuadrant } from '@visactor/vutils';\nimport type { PieTransformOption } from '../../types';\n\nexport const transform = (options: PieTransformOption, upstreamData: any[]) => {\n if (!upstreamData || upstreamData.length === 0) {\n return upstreamData;\n }\n const field = options.field;\n const startAngle = options.startAngle ?? 0;\n const endAngle = options.endAngle ?? Math.PI * 2;\n\n const { asStartAngle, asEndAngle, asMiddleAngle, asRadian, asRatio, asQuadrant, asK } = options;\n\n const total = upstreamData.reduce((sum, d) => Number.parseFloat(d[field]) + sum, 0);\n const max = upstreamData.reduce((m, d) => Math.max(m, Number.parseFloat(d[field])), -Infinity);\n\n const intervalAngle = endAngle - startAngle;\n let lastAngle = startAngle;\n const data = upstreamData.map(originDatum => {\n const datum = Object.assign({}, originDatum);\n const ratio = Number.parseFloat(datum[field]) / total;\n const radian = ratio * intervalAngle;\n\n asRatio && (datum[asRatio] = ratio);\n asStartAngle && (datum[asStartAngle] = lastAngle);\n asEndAngle && (datum[asEndAngle] = lastAngle + radian);\n asMiddleAngle && (datum[asMiddleAngle] = lastAngle + radian / 2);\n asRadian && (datum[asRadian] = radian);\n asQuadrant && (datum[asQuadrant] = computeQuadrant(lastAngle + radian / 2));\n asK && (datum[asK] = Number.parseFloat(datum[field]) / max);\n\n lastAngle = datum[asEndAngle];\n return datum;\n });\n data[data.length - 1][asEndAngle] = endAngle;\n return data;\n};\n"]}
@@ -4,12 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  }), exports.transform = void 0;
6
6
 
7
- const vutils_1 = require("@visactor/vutils"), HIDE_KEY = "_mo_hide_";
7
+ const vutils_1 = require("@visactor/vutils"), constants_1 = require("../../graph/constants");
8
8
 
9
9
  function reset(elements) {
10
10
  return elements.forEach((element => {
11
- element.getGraphicAttribute(HIDE_KEY) && (element.setGraphicAttribute("visible", !0),
12
- element.setGraphicAttribute(HIDE_KEY, !1));
11
+ element.getGraphicAttribute(constants_1.MARK_OVERLAP_HIDE_KEY) && (element.setGraphicAttribute("visible", !0),
12
+ element.setGraphicAttribute(constants_1.MARK_OVERLAP_HIDE_KEY, !1));
13
13
  })), elements;
14
14
  }
15
15
 
@@ -21,7 +21,7 @@ function overlapX(elements, delta, deltaMul, useRadius) {
21
21
  elements.forEach((element => {
22
22
  if (!1 === element.getGraphicAttribute("visible")) return;
23
23
  const r = element.getGraphicAttribute("size") / 2, currentX = element.getGraphicAttribute("x");
24
- useDeltaMul && (itemDelta = (r + lastR) * deltaMul), Math.abs(currentX - lastX) < itemDelta + lastR + r ? element.getGraphicAttribute("forceShow") || (element.setGraphicAttribute(HIDE_KEY, !0),
24
+ useDeltaMul && (itemDelta = (r + lastR) * deltaMul), Math.abs(currentX - lastX) < itemDelta + lastR + r ? element.getGraphicAttribute("forceShow") || (element.setGraphicAttribute(constants_1.MARK_OVERLAP_HIDE_KEY, !0),
25
25
  element.setGraphicAttribute("visible", !1)) : lastX = currentX, lastR = r;
26
26
  }));
27
27
  }
@@ -35,7 +35,7 @@ function overlapY(elements, delta, deltaMul, useRadius) {
35
35
  elements.forEach((element => {
36
36
  if (!1 === element.getGraphicAttribute("visible")) return;
37
37
  const r = element.getGraphicAttribute("size") / 2, currentY = element.getGraphicAttribute("y");
38
- useDeltaMul && (itemDelta = (r + lastR) * deltaMul), Math.abs(currentY - lastY) < itemDelta + lastR + r ? element.getGraphicAttribute("forceShow") || (element.setGraphicAttribute(HIDE_KEY, !0),
38
+ useDeltaMul && (itemDelta = (r + lastR) * deltaMul), Math.abs(currentY - lastY) < itemDelta + lastR + r ? element.getGraphicAttribute("forceShow") || (element.setGraphicAttribute(constants_1.MARK_OVERLAP_HIDE_KEY, !0),
39
39
  element.setGraphicAttribute("visible", !1)) : lastY = currentY, lastR = r;
40
40
  }));
41
41
  }
@@ -51,7 +51,7 @@ function overlapXY(elements, delta, deltaMul, useRadius) {
51
51
  if (!1 === element.getGraphicAttribute("visible")) return;
52
52
  const r = element.getGraphicAttribute("size") / 2, currentX = element.getGraphicAttribute("x"), currentY = element.getGraphicAttribute("y");
53
53
  useDeltaMul && (itemDelta = (r + lastR) * deltaMul), dis = (lastX - currentX) ** 2 + (lastY - currentY) ** 2,
54
- dis < (itemDelta + lastR + r) ** 2 ? element.getGraphicAttribute("forceShow") || (element.setGraphicAttribute(HIDE_KEY, !0),
54
+ dis < (itemDelta + lastR + r) ** 2 ? element.getGraphicAttribute("forceShow") || (element.setGraphicAttribute(constants_1.MARK_OVERLAP_HIDE_KEY, !0),
55
55
  element.setGraphicAttribute("visible", !1)) : lastY = currentY, lastR = r;
56
56
  }));
57
57
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/transforms/mark/mark-overlap.ts"],"names":[],"mappings":"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","file":"mark-overlap.js","sourcesContent":["import { isNil } from '@visactor/vutils';\nimport type { IElement, MarkOverlapTransformOptions } from '../../types';\n\nconst HIDE_KEY = '_mo_hide_';\n\nfunction reset(elements: IElement[]) {\n elements.forEach(element => {\n const hide = element.getGraphicAttribute(HIDE_KEY);\n\n if (hide) {\n element.setGraphicAttribute('visible', true);\n element.setGraphicAttribute(HIDE_KEY, false);\n }\n });\n return elements;\n}\n\nfunction overlapX(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n let lastX = -Infinity;\n let lastR = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentX = element.getGraphicAttribute('x');\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n if (Math.abs(currentX - lastX) < itemDelta + lastR + r) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastX = currentX;\n }\n\n lastR = r;\n });\n }\n}\n\nfunction overlapY(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n let lastY = -Infinity;\n let lastR = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentY = element.getGraphicAttribute('y');\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n if (Math.abs(currentY - lastY) < itemDelta + lastR + r) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastY = currentY;\n }\n\n lastR = r;\n });\n }\n}\n\nfunction overlapXY(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n const lastX = -Infinity;\n let lastY = -Infinity;\n let lastR = 0;\n let dis = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentX = element.getGraphicAttribute('x');\n const currentY = element.getGraphicAttribute('y');\n\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n dis = (lastX - currentX) ** 2 + (lastY - currentY) ** 2;\n if (dis < (itemDelta + lastR + r) ** 2) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastY = currentY;\n }\n\n lastR = r;\n });\n }\n}\n\n/**\n * 针对mark的防重叠\n * @param {object} options - The parameters for this operator.\n * @param {data} [options.followMark]\n * @constructor\n */\nexport const transform = (options: MarkOverlapTransformOptions, upstreamData: IElement[]) => {\n if (!upstreamData || upstreamData.length === 0) {\n return;\n }\n let { radius } = options;\n if (isNil(radius)) {\n if (upstreamData[0].mark.markType === 'symbol') {\n radius = true;\n }\n }\n\n const { direction, delta, deltaMul = 1, groupBy } = options;\n\n const handleOverlap = (elements: IElement[]) => {\n reset(elements);\n\n const sortedElements = options.sort\n ? elements.slice().sort((a, b) => {\n return a.getGraphicAttribute('x') - b.getGraphicAttribute('x');\n })\n : elements;\n\n if (direction === 0) {\n overlapXY(sortedElements, delta, deltaMul, radius);\n } else if (direction === 1) {\n overlapX(sortedElements, delta, deltaMul, radius);\n } else {\n overlapY(sortedElements, delta, deltaMul, radius);\n }\n };\n\n if (!groupBy) {\n handleOverlap(upstreamData);\n } else {\n // 分组\n const map = upstreamData.reduce((res: { [key: string]: IElement[] }, element: IElement) => {\n const groupName = element.getDatum()[groupBy];\n\n if (res[groupName]) {\n res[groupName].push(element);\n } else {\n res[groupName] = [element];\n }\n\n return res;\n }, {});\n\n Object.keys(map).forEach(key => {\n handleOverlap(map[key]);\n });\n }\n\n return upstreamData;\n};\n"]}
1
+ {"version":3,"sources":["../src/transforms/mark/mark-overlap.ts"],"names":[],"mappings":"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","file":"mark-overlap.js","sourcesContent":["import { isNil } from '@visactor/vutils';\nimport type { IElement, MarkOverlapTransformOptions } from '../../types';\nimport { MARK_OVERLAP_HIDE_KEY } from '../../graph/constants';\n\nfunction reset(elements: IElement[]) {\n elements.forEach(element => {\n const hide = element.getGraphicAttribute(MARK_OVERLAP_HIDE_KEY);\n\n if (hide) {\n element.setGraphicAttribute('visible', true);\n element.setGraphicAttribute(MARK_OVERLAP_HIDE_KEY, false);\n }\n });\n return elements;\n}\n\nfunction overlapX(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n let lastX = -Infinity;\n let lastR = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentX = element.getGraphicAttribute('x');\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n if (Math.abs(currentX - lastX) < itemDelta + lastR + r) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(MARK_OVERLAP_HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastX = currentX;\n }\n\n lastR = r;\n });\n }\n}\n\nfunction overlapY(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n let lastY = -Infinity;\n let lastR = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentY = element.getGraphicAttribute('y');\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n if (Math.abs(currentY - lastY) < itemDelta + lastR + r) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(MARK_OVERLAP_HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastY = currentY;\n }\n\n lastR = r;\n });\n }\n}\n\nfunction overlapXY(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n const lastX = -Infinity;\n let lastY = -Infinity;\n let lastR = 0;\n let dis = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentX = element.getGraphicAttribute('x');\n const currentY = element.getGraphicAttribute('y');\n\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n dis = (lastX - currentX) ** 2 + (lastY - currentY) ** 2;\n if (dis < (itemDelta + lastR + r) ** 2) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(MARK_OVERLAP_HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastY = currentY;\n }\n\n lastR = r;\n });\n }\n}\n\n/**\n * 针对mark的防重叠\n * @param {object} options - The parameters for this operator.\n * @param {data} [options.followMark]\n * @constructor\n */\nexport const transform = (options: MarkOverlapTransformOptions, upstreamData: IElement[]) => {\n if (!upstreamData || upstreamData.length === 0) {\n return;\n }\n let { radius } = options;\n if (isNil(radius)) {\n if (upstreamData[0].mark.markType === 'symbol') {\n radius = true;\n }\n }\n\n const { direction, delta, deltaMul = 1, groupBy } = options;\n\n const handleOverlap = (elements: IElement[]) => {\n reset(elements);\n\n const sortedElements = options.sort\n ? elements.slice().sort((a, b) => {\n return a.getGraphicAttribute('x') - b.getGraphicAttribute('x');\n })\n : elements;\n\n if (direction === 0) {\n overlapXY(sortedElements, delta, deltaMul, radius);\n } else if (direction === 1) {\n overlapX(sortedElements, delta, deltaMul, radius);\n } else {\n overlapY(sortedElements, delta, deltaMul, radius);\n }\n };\n\n if (!groupBy) {\n handleOverlap(upstreamData);\n } else {\n // 分组\n const map = upstreamData.reduce((res: { [key: string]: IElement[] }, element: IElement) => {\n const groupName = element.getDatum()[groupBy];\n\n if (res[groupName]) {\n res[groupName].push(element);\n } else {\n res[groupName] = [element];\n }\n\n return res;\n }, {});\n\n Object.keys(map).forEach(key => {\n handleOverlap(map[key]);\n });\n }\n\n return upstreamData;\n};\n"]}
@@ -1,7 +1,5 @@
1
1
  import type { FieldGetterFunction } from '@visactor/vgrammar-util';
2
2
  export declare function fieldNames(fields: string[] | FieldGetterFunction[], as?: string[]): string[];
3
3
  export declare function partition(data?: any[], groupBy?: FieldGetterFunction[], field?: FieldGetterFunction): any[];
4
- export declare function normalizeAngle(angle: number): number;
5
- export declare function computeQuadrant(angle: number): 1 | 2 | 3 | 4;
6
4
  export declare function sum(arr: any[]): any;
7
5
  export declare function average(arr: any[]): number;
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
- }), exports.average = exports.sum = exports.computeQuadrant = exports.normalizeAngle = exports.partition = exports.fieldNames = void 0;
5
+ }), exports.average = exports.sum = exports.partition = exports.fieldNames = void 0;
6
6
 
7
7
  const vutils_1 = require("@visactor/vutils"), vgrammar_util_1 = require("@visactor/vgrammar-util");
8
8
 
@@ -26,16 +26,6 @@ function partition(data, groupBy, field) {
26
26
  })), groups;
27
27
  }
28
28
 
29
- function normalizeAngle(angle) {
30
- for (;angle < 0; ) angle += 2 * Math.PI;
31
- for (;angle >= 2 * Math.PI; ) angle -= 2 * Math.PI;
32
- return angle;
33
- }
34
-
35
- function computeQuadrant(angle) {
36
- return (angle = normalizeAngle(angle)) > 0 && angle <= Math.PI / 2 ? 2 : angle > Math.PI / 2 && angle <= Math.PI ? 3 : angle > Math.PI && angle <= 3 * Math.PI / 2 ? 4 : 1;
37
- }
38
-
39
29
  function sum(arr) {
40
30
  return arr.reduce(((accumulator, currentValue) => accumulator + currentValue), 0);
41
31
  }
@@ -45,6 +35,6 @@ function average(arr) {
45
35
  return sum(arr) / arr.length;
46
36
  }
47
37
 
48
- exports.fieldNames = fieldNames, exports.partition = partition, exports.normalizeAngle = normalizeAngle,
49
- exports.computeQuadrant = computeQuadrant, exports.sum = sum, exports.average = average;
38
+ exports.fieldNames = fieldNames, exports.partition = partition, exports.sum = sum,
39
+ exports.average = average;
50
40
  //# sourceMappingURL=util.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/transforms/util/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-transforms/src/util/util.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport { isNil, isString } from '@visactor/vutils';\nimport type { FieldGetterFunction } from '@visactor/vgrammar-util';\nimport { accessorName } from '@visactor/vgrammar-util';\n\n// use either provided alias or accessor field name\nexport function fieldNames(fields: string[] | FieldGetterFunction[], as?: string[]) {\n if (!fields) {\n return null;\n }\n return fields.map((f, i) => {\n return as[i] ?? (isString(f) ? f : accessorName(f));\n });\n}\n\nexport function partition(data?: any[], groupBy?: FieldGetterFunction[], field?: FieldGetterFunction) {\n // partition data points into groups\n if (isNil(groupBy)) {\n return [data.map(field)];\n }\n\n const groups: any[] = [];\n const map: Record<string, any> = {};\n data.forEach((entry: any) => {\n const groupKey = groupBy.map((groupFunc: (arg: any) => any) => groupFunc(entry)).toString();\n\n if (!map[groupKey]) {\n const groupItem: any[] = [];\n (groupItem as any).dims = groupKey;\n groups.push(groupItem);\n map[groupKey] = groupItem;\n } else {\n map[groupKey].push(field(entry));\n }\n });\n\n return groups;\n}\n\nexport function normalizeAngle(angle: number): number {\n while (angle < 0) {\n angle += Math.PI * 2;\n }\n while (angle >= Math.PI * 2) {\n angle -= Math.PI * 2;\n }\n return angle;\n}\n\nexport function computeQuadrant(angle: number): 1 | 2 | 3 | 4 {\n angle = normalizeAngle(angle);\n if (angle > 0 && angle <= Math.PI / 2) {\n return 2;\n } else if (angle > Math.PI / 2 && angle <= Math.PI) {\n return 3;\n } else if (angle > Math.PI && angle <= (3 * Math.PI) / 2) {\n return 4;\n }\n return 1;\n}\n\nexport function sum(arr: any[]) {\n return arr.reduce((accumulator, currentValue) => accumulator + currentValue, 0);\n}\n\nexport function average(arr: any[]) {\n if (arr.length === 0) {\n return 0;\n }\n const total = sum(arr);\n return total / arr.length;\n}\n"]}
1
+ {"version":3,"sources":["../src/transforms/util/util.ts"],"names":[],"mappings":";;;AASA,6CAAmD;AAEnD,2DAAuD;AAGvD,SAAgB,UAAU,CAAC,MAAwC,EAAE,EAAa;IAChF,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,IAAI,CAAC;KACb;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;;QACzB,OAAO,MAAA,EAAE,CAAC,CAAC,CAAC,mCAAI,CAAC,IAAA,iBAAQ,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAA,4BAAY,EAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC;AAPD,gCAOC;AAED,SAAgB,SAAS,CAAC,IAAY,EAAE,OAA+B,EAAE,KAA2B;IAElG,IAAI,IAAA,cAAK,EAAC,OAAO,CAAC,EAAE;QAClB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;KAC1B;IAED,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,EAAE;QAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,SAA4B,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAE5F,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAClB,MAAM,SAAS,GAAU,EAAE,CAAC;YAC3B,SAAiB,CAAC,IAAI,GAAG,QAAQ,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvB,GAAG,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;SAC3B;aAAM;YACL,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;SAClC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAtBD,8BAsBC;AAED,SAAgB,GAAG,CAAC,GAAU;IAC5B,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,EAAE,CAAC,WAAW,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC;AAClF,CAAC;AAFD,kBAEC;AAED,SAAgB,OAAO,CAAC,GAAU;IAChC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;QACpB,OAAO,CAAC,CAAC;KACV;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC;AAC5B,CAAC;AAND,0BAMC","file":"util.js","sourcesContent":["/* Adapted from vega by University of Washington Interactive Data Lab\n * https://vega.github.io/vega/\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/vega/vega/blob/main/packages/vega-transforms/src/util/util.js\n * License: https://github.com/vega/vega/blob/main/LICENSE\n * @license\n */\n\nimport { isNil, isString } from '@visactor/vutils';\nimport type { FieldGetterFunction } from '@visactor/vgrammar-util';\nimport { accessorName } from '@visactor/vgrammar-util';\n\n// use either provided alias or accessor field name\nexport function fieldNames(fields: string[] | FieldGetterFunction[], as?: string[]) {\n if (!fields) {\n return null;\n }\n return fields.map((f, i) => {\n return as[i] ?? (isString(f) ? f : accessorName(f));\n });\n}\n\nexport function partition(data?: any[], groupBy?: FieldGetterFunction[], field?: FieldGetterFunction) {\n // partition data points into groups\n if (isNil(groupBy)) {\n return [data.map(field)];\n }\n\n const groups: any[] = [];\n const map: Record<string, any> = {};\n data.forEach((entry: any) => {\n const groupKey = groupBy.map((groupFunc: (arg: any) => any) => groupFunc(entry)).toString();\n\n if (!map[groupKey]) {\n const groupItem: any[] = [];\n (groupItem as any).dims = groupKey;\n groups.push(groupItem);\n map[groupKey] = groupItem;\n } else {\n map[groupKey].push(field(entry));\n }\n });\n\n return groups;\n}\n\nexport function sum(arr: any[]) {\n return arr.reduce((accumulator, currentValue) => accumulator + currentValue, 0);\n}\n\nexport function average(arr: any[]) {\n if (arr.length === 0) {\n return 0;\n }\n const total = sum(arr);\n return total / arr.length;\n}\n"]}
@@ -48,6 +48,7 @@ export interface IMoveAnimationOptions {
48
48
  x?: number;
49
49
  y?: number;
50
50
  }>;
51
+ excludeChannels?: string[];
51
52
  }
52
53
  export interface IRotateAnimationOptions {
53
54
  orient?: 'clockwise' | 'anticlockwise';
@@ -128,6 +129,7 @@ export interface IAnimationEffect {
128
129
  export interface IAnimationControlOptions {
129
130
  stopWhenStateChange?: boolean;
130
131
  immediatelyApply?: boolean;
132
+ ignoreLoopFinalAttributes?: boolean;
131
133
  }
132
134
  export interface IAnimationUnit {
133
135
  initialDelay: number;
@@ -177,7 +179,7 @@ export interface IAnimator {
177
179
  isAnimating: boolean;
178
180
  animate: (animationParameters: IAnimationParameters, parameters: any) => this;
179
181
  callback: (callbackFunction: (...args: any[]) => void) => this;
180
- stop: (stopState?: 'start' | 'end', invokeCallback?: boolean) => this;
182
+ stop: (stopState: 'start' | 'end' | null, invokeCallback?: boolean) => this;
181
183
  pause: () => this;
182
184
  resume: () => this;
183
185
  startAt: (startTime: number) => this;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/animate.ts"],"names":[],"mappings":"","file":"animate.js","sourcesContent":["import type { IGraphic, ACustomAnimate, EasingType } from '@visactor/vrender-core';\nimport type { IPointLike } from '@visactor/vutils';\nimport type { MarkFunctionCallback, MarkFunctionType } from './mark';\nimport type { IMark } from './grammar';\nimport type { IElement } from './element';\nimport type { FunctionCallback } from './signal';\n\nexport type TypeAnimation<T extends IElement> = (\n element: T,\n options: any,\n animationParameters: IAnimationParameters\n) => { from?: { [channel: string]: any }; to?: { [channel: string]: any } };\n\nexport interface IClipAnimationOptions {\n clipDimension?: 'x' | 'y' | 'auto' | 'default';\n}\n\nexport interface IGrowCartesianAnimationOptions {\n orient?: 'positive' | 'negative';\n overall?: boolean | number;\n direction?: 'x' | 'y' | 'xy';\n}\n\nexport interface IGrowAngleAnimationOptions {\n orient?: 'clockwise' | 'anticlockwise';\n overall?: boolean | number;\n}\n\nexport interface IGrowRadiusAnimationOptions {\n orient?: 'inside' | 'outside';\n overall?: boolean | number;\n}\n\nexport interface IGrowPointsAnimationOptions {\n orient?: 'positive' | 'negative';\n}\n\nexport interface IGrowPointsOverallAnimationOptions extends IGrowPointsAnimationOptions {\n center?: IPointLike;\n}\n\nexport interface IScaleAnimationOptions {\n direction?: 'x' | 'y' | 'xy';\n}\n\nexport interface IMoveAnimationOptions {\n direction?: 'x' | 'y' | 'xy';\n orient?: 'positive' | 'negative';\n offset?: number;\n point?: { x?: number; y?: number } | FunctionCallback<{ x?: number; y?: number }>;\n}\n\nexport interface IRotateAnimationOptions {\n orient?: 'clockwise' | 'anticlockwise';\n angle?: number;\n}\n\n/** VGrammar 层提供的图元text上的图形属性,现在暂时会和VRender不一致 */\nexport interface TextItemAttributes {\n fontSize?: number;\n lineHeight?: number;\n font?: string;\n fontStyle?: string;\n fontVariant?: string;\n fontWeight?: string | number;\n lineBreak?: string;\n text?: string | string[];\n limit?: number;\n align?: string;\n baseline?: string;\n ellipsis?: string | boolean;\n dir?: string;\n}\n\n/** animation */\nexport type MarkFunctionValueType<T> = MarkFunctionCallback<T> | T;\n\nexport type IAnimationConfig = IAnimationTimeline | IAnimationTypeConfig;\n\n/**\n * state动画,暂时只支持简单配置\n */\nexport interface IStateAnimationConfig {\n duration?: number;\n easing?: EasingType;\n}\n\n/**\n * 动画 config 简化配置\n */\nexport interface IAnimationTypeConfig {\n type?: string;\n channel?: IAnimationChannelAttrs | IAnimationChannelAttributes;\n custom?: IAnimationChannelInterpolator | IAnimationCustomConstructor;\n customParameters?: MarkFunctionValueType<any>;\n easing?: EasingType;\n delay?: MarkFunctionValueType<number>;\n delayAfter?: MarkFunctionValueType<number>;\n duration?: MarkFunctionValueType<number>;\n oneByOne?: MarkFunctionValueType<boolean | number>;\n startTime?: MarkFunctionValueType<number>;\n totalTime?: MarkFunctionValueType<number>;\n /** loop: true 无限循环; loop: 正整数,表示循环的次数 */\n loop?: boolean | number;\n /** 动画 effect 配置项 */\n options?: MarkFunctionValueType<any>;\n /** 动画执行相关控制配置项 */\n controlOptions?: IAnimationControlOptions;\n}\n\n/**\n * 动画 timeline 完整配置,一条时间线内的动画单元只能串行\n * 多个timeline是可以并行的\n * 考虑到同一图元不能在多个timeline上,所以timeline不应该提供数组配置的能力\n */\nexport interface IAnimationTimeline {\n /** 为了方便动画编排,用户可以设置 id 用于识别时间线 */\n id?: string;\n /** 时间切片 */\n timeSlices: IAnimationTimeSlice | IAnimationTimeSlice[];\n /** 动画开始的相对时间,可以为负数 */\n startTime?: MarkFunctionValueType<number>;\n /** 动画时长 */\n totalTime?: MarkFunctionValueType<number>;\n /** 动画依次执行的延迟 */\n oneByOne?: MarkFunctionValueType<number | boolean>;\n /** loop: true 无限循环; loop: 正整数,表示循环的次数 */\n loop?: MarkFunctionValueType<number | boolean>;\n /** 对图元元素进行划分,和过滤类似,但是不同时间线不能同时作用在相同的元素上 */\n partitioner?: MarkFunctionCallback<boolean>;\n /** 对同一时间线上的元素进行排序 */\n sort?: (datumA: any, datumB: any, elementA: IElement, elementB: IElement, parameters: any) => number;\n /** 动画执行相关控制配置项 */\n controlOptions?: IAnimationControlOptions;\n}\n\nexport interface IAnimationTimeSlice {\n effects: IAnimationEffect | IAnimationEffect[];\n duration?: MarkFunctionValueType<number>;\n delay?: MarkFunctionValueType<number>;\n delayAfter?: MarkFunctionValueType<number>;\n}\n\nexport type IAnimationChannelFunction = (datum: any, element: IElement, parameters: IAnimationParameters) => any;\nexport type IAnimationChannelAttrs = Record<\n string,\n {\n from?: any | IAnimationChannelFunction;\n to?: any | IAnimationChannelFunction;\n }\n>;\nexport type IAnimationChannelAttributes = string[];\nexport type IAnimationChannelInterpolator = (\n ratio: number,\n from: any,\n to: any,\n nextAttributes: any,\n datum: any,\n element: IElement,\n parameters: IAnimationParameters\n) => boolean | void;\n\n// TODO: fix ACustomAnimate<any>\nexport interface IAnimationCustomConstructor {\n new (from: any, to: any, duration: number, ease: EasingType, parameters?: any): ACustomAnimate<any>;\n}\n\nexport interface IAnimationEffect {\n type?: string;\n channel?: IAnimationChannelAttrs | IAnimationChannelAttributes;\n custom?: IAnimationChannelInterpolator | IAnimationCustomConstructor;\n customParameters?: MarkFunctionValueType<any>;\n easing?: EasingType;\n /** options暂时没有处理 */\n options?: MarkFunctionValueType<any>;\n}\n\nexport interface IAnimationControlOptions {\n /** 当动画状态变更时清空动画 */\n stopWhenStateChange?: boolean;\n /** 是否立即应用动画初始状态 */\n immediatelyApply?: boolean;\n}\n\n/**\n * Animation timeline should be parsed into animation units,\n * which record all necessary configs for animator to execute animation.\n *\n * animation unit time:\n * |<--initialDelay-->| |<--loopDelay--><--Slices--><--looDelayAfter-->| |<--loopDuration-->|\n * |<-----------------loopDuration--------------->|\n */\nexport interface IAnimationUnit {\n /**\n * initial delay time before any animation loop\n */\n initialDelay: number;\n /**\n * total time for one animation loop\n */\n loopDuration: number;\n /**\n * delay time before time slices\n */\n loopDelay: number;\n /**\n * delay time after time slices\n */\n loopDelayAfter: number;\n /**\n * animating time in one animation loop\n */\n loopAnimateDuration: number;\n loopCount: number;\n totalTime: number;\n timeSlices: IAnimationTimeSlice[];\n}\n\nexport interface IAnimationRecord {\n start: IGraphic;\n end: IGraphic;\n changes: any[];\n}\n\nexport interface IAnimationParameters {\n width: number;\n height: number;\n mark: IMark;\n group: IMark | null;\n elementIndex: number;\n elementCount: number;\n view: any;\n}\n\nexport interface IParsedAnimationConfig {\n state: string;\n timeline: IAnimationTimeline;\n originConfig: IAnimationConfig;\n id: string;\n}\n\nexport interface IParsedAnimationAttrs {\n from?: any;\n to?: any;\n custom?: IAnimationChannelInterpolator | IAnimationCustomConstructor;\n customParameters?: any;\n}\n\n// animate structure\n\nexport interface IAnimatorOptions {\n state: string;\n timeline: IAnimationTimeline;\n id: string;\n}\n\nexport interface IAnimator {\n id: number;\n element: IElement;\n animationOptions: IAnimatorOptions;\n isAnimating: boolean;\n\n /** execute animation */\n animate: (animationParameters: IAnimationParameters, parameters: any) => this;\n /** set animation callback */\n callback: (callbackFunction: (...args: any[]) => void) => this;\n\n // animation control\n stop: (stopState?: 'start' | 'end', invokeCallback?: boolean) => this;\n pause: () => this;\n resume: () => this;\n\n /** set additional initial animation delay */\n startAt: (startTime: number) => this;\n /** get total animation execution time */\n getTotalAnimationTime: () => number;\n\n getEndAttributes: () => Record<string, any>;\n}\n\nexport interface IAnimateArranger {\n // animation control api\n parallel: (arranger: IAnimateArranger) => this;\n after: (arranger: IAnimateArranger) => this;\n\n // internal properties\n afterArranger: IAnimateArranger;\n parallelArrangers: IAnimateArranger[];\n animators: IAnimator[];\n totalTime: number;\n startTime: number;\n endTime: number;\n arrangeTime: () => void;\n}\n\nexport interface IBaseAnimate {\n // animation control\n stop: () => this;\n pause: () => this;\n resume: () => this;\n\n // internal animation process api\n animate: () => this;\n enable: () => this;\n disable: () => this;\n enableAnimationState: (state: string | string[]) => this;\n disableAnimationState: (state: string | string[]) => this;\n isAnimating: () => boolean;\n\n release: () => void;\n}\n\nexport interface IViewAnimate extends IBaseAnimate {\n animateAddition: (mark: IMark) => this;\n}\n\nexport interface IAnimate extends IBaseAnimate {\n mark: IMark;\n\n // additional animation control\n run: (config: IAnimationConfig | IAnimationConfig[]) => IAnimateArranger;\n runAnimationByState: (animationState: string) => IAnimateArranger;\n stopAnimationByState: (animationState: string) => this;\n pauseAnimationByState: (animationState: string) => this;\n resumeAnimationByState: (animationState: string) => this;\n reverse: () => this;\n restart: () => this;\n record: () => this;\n recordEnd: () => this;\n\n // internal animation process api\n getAnimationConfigs: (animationState: string) => IParsedAnimationConfig[];\n updateConfig: (config: Record<string, IAnimationConfig | IAnimationConfig[]>) => void;\n updateState: (state: MarkFunctionType<string> | null) => void;\n isElementAnimating: (element: IElement) => boolean;\n getAnimatorCount: () => number;\n getElementAnimators: (element: IElement | IElement[], animationState?: string) => IAnimator[];\n release: () => void;\n}\n"]}
1
+ {"version":3,"sources":["../src/types/animate.ts"],"names":[],"mappings":"","file":"animate.js","sourcesContent":["import type { IGraphic, ACustomAnimate, EasingType } from '@visactor/vrender-core';\nimport type { IPointLike } from '@visactor/vutils';\nimport type { MarkFunctionCallback, MarkFunctionType } from './mark';\nimport type { IMark } from './grammar';\nimport type { IElement } from './element';\nimport type { FunctionCallback } from './signal';\n\nexport type TypeAnimation<T extends IElement> = (\n element: T,\n options: any,\n animationParameters: IAnimationParameters\n) => { from?: { [channel: string]: any }; to?: { [channel: string]: any } };\n\nexport interface IClipAnimationOptions {\n clipDimension?: 'x' | 'y' | 'auto' | 'default';\n}\n\nexport interface IGrowCartesianAnimationOptions {\n orient?: 'positive' | 'negative';\n overall?: boolean | number;\n direction?: 'x' | 'y' | 'xy';\n}\n\nexport interface IGrowAngleAnimationOptions {\n orient?: 'clockwise' | 'anticlockwise';\n overall?: boolean | number;\n}\n\nexport interface IGrowRadiusAnimationOptions {\n orient?: 'inside' | 'outside';\n overall?: boolean | number;\n}\n\nexport interface IGrowPointsAnimationOptions {\n orient?: 'positive' | 'negative';\n}\n\nexport interface IGrowPointsOverallAnimationOptions extends IGrowPointsAnimationOptions {\n center?: IPointLike;\n}\n\nexport interface IScaleAnimationOptions {\n direction?: 'x' | 'y' | 'xy';\n}\n\nexport interface IMoveAnimationOptions {\n direction?: 'x' | 'y' | 'xy';\n orient?: 'positive' | 'negative';\n offset?: number;\n point?: { x?: number; y?: number } | FunctionCallback<{ x?: number; y?: number }>;\n excludeChannels?: string[];\n}\n\nexport interface IRotateAnimationOptions {\n orient?: 'clockwise' | 'anticlockwise';\n angle?: number;\n}\n\n/** VGrammar 层提供的图元text上的图形属性,现在暂时会和VRender不一致 */\nexport interface TextItemAttributes {\n fontSize?: number;\n lineHeight?: number;\n font?: string;\n fontStyle?: string;\n fontVariant?: string;\n fontWeight?: string | number;\n lineBreak?: string;\n text?: string | string[];\n limit?: number;\n align?: string;\n baseline?: string;\n ellipsis?: string | boolean;\n dir?: string;\n}\n\n/** animation */\nexport type MarkFunctionValueType<T> = MarkFunctionCallback<T> | T;\n\nexport type IAnimationConfig = IAnimationTimeline | IAnimationTypeConfig;\n\n/**\n * state动画,暂时只支持简单配置\n */\nexport interface IStateAnimationConfig {\n /**\n * 状态动画的动画时长\n */\n duration?: number;\n /**\n * 状态动画的缓动函数类型\n */\n easing?: EasingType;\n}\n\n/**\n * 动画 config 简化配置\n */\nexport interface IAnimationTypeConfig {\n type?: string;\n channel?: IAnimationChannelAttrs | IAnimationChannelAttributes;\n custom?: IAnimationChannelInterpolator | IAnimationCustomConstructor;\n customParameters?: MarkFunctionValueType<any>;\n easing?: EasingType;\n delay?: MarkFunctionValueType<number>;\n delayAfter?: MarkFunctionValueType<number>;\n duration?: MarkFunctionValueType<number>;\n oneByOne?: MarkFunctionValueType<boolean | number>;\n startTime?: MarkFunctionValueType<number>;\n totalTime?: MarkFunctionValueType<number>;\n /** loop: true 无限循环; loop: 正整数,表示循环的次数 */\n loop?: boolean | number;\n /** 动画 effect 配置项 */\n options?: MarkFunctionValueType<any>;\n /** 动画执行相关控制配置项 */\n controlOptions?: IAnimationControlOptions;\n}\n\n/**\n * 动画 timeline 完整配置,一条时间线内的动画单元只能串行\n * 多个timeline是可以并行的\n * 考虑到同一图元不能在多个timeline上,所以timeline不应该提供数组配置的能力\n */\nexport interface IAnimationTimeline {\n /** 为了方便动画编排,用户可以设置 id 用于识别时间线 */\n id?: string;\n /** 时间切片 */\n timeSlices: IAnimationTimeSlice | IAnimationTimeSlice[];\n /** 动画开始的相对时间,可以为负数 */\n startTime?: MarkFunctionValueType<number>;\n /** 动画时长 */\n totalTime?: MarkFunctionValueType<number>;\n /** 动画依次执行的延迟 */\n oneByOne?: MarkFunctionValueType<number | boolean>;\n /** loop: true 无限循环; loop: 正整数,表示循环的次数 */\n loop?: MarkFunctionValueType<number | boolean>;\n /** 对图元元素进行划分,和过滤类似,但是不同时间线不能同时作用在相同的元素上 */\n partitioner?: MarkFunctionCallback<boolean>;\n /** 对同一时间线上的元素进行排序 */\n sort?: (datumA: any, datumB: any, elementA: IElement, elementB: IElement, parameters: any) => number;\n /** 动画执行相关控制配置项 */\n controlOptions?: IAnimationControlOptions;\n}\n\nexport interface IAnimationTimeSlice {\n effects: IAnimationEffect | IAnimationEffect[];\n duration?: MarkFunctionValueType<number>;\n delay?: MarkFunctionValueType<number>;\n delayAfter?: MarkFunctionValueType<number>;\n}\n\nexport type IAnimationChannelFunction = (datum: any, element: IElement, parameters: IAnimationParameters) => any;\nexport type IAnimationChannelAttrs = Record<\n string,\n {\n from?: any | IAnimationChannelFunction;\n to?: any | IAnimationChannelFunction;\n }\n>;\nexport type IAnimationChannelAttributes = string[];\nexport type IAnimationChannelInterpolator = (\n ratio: number,\n from: any,\n to: any,\n nextAttributes: any,\n datum: any,\n element: IElement,\n parameters: IAnimationParameters\n) => boolean | void;\n\n// TODO: fix ACustomAnimate<any>\nexport interface IAnimationCustomConstructor {\n new (from: any, to: any, duration: number, ease: EasingType, parameters?: any): ACustomAnimate<any>;\n}\n\nexport interface IAnimationEffect {\n type?: string;\n channel?: IAnimationChannelAttrs | IAnimationChannelAttributes;\n custom?: IAnimationChannelInterpolator | IAnimationCustomConstructor;\n customParameters?: MarkFunctionValueType<any>;\n easing?: EasingType;\n /** options暂时没有处理 */\n options?: MarkFunctionValueType<any>;\n}\n\nexport interface IAnimationControlOptions {\n /** 当动画状态变更时清空动画 */\n stopWhenStateChange?: boolean;\n /** 是否立即应用动画初始状态 */\n immediatelyApply?: boolean;\n /** encode 计算图元最终状态时是否忽略循环动画 */\n ignoreLoopFinalAttributes?: boolean;\n}\n\n/**\n * Animation timeline should be parsed into animation units,\n * which record all necessary configs for animator to execute animation.\n *\n * animation unit time:\n * |<--initialDelay-->| |<--loopDelay--><--Slices--><--looDelayAfter-->| |<--loopDuration-->|\n * |<-----------------loopDuration--------------->|\n */\nexport interface IAnimationUnit {\n /**\n * initial delay time before any animation loop\n */\n initialDelay: number;\n /**\n * total time for one animation loop\n */\n loopDuration: number;\n /**\n * delay time before time slices\n */\n loopDelay: number;\n /**\n * delay time after time slices\n */\n loopDelayAfter: number;\n /**\n * animating time in one animation loop\n */\n loopAnimateDuration: number;\n loopCount: number;\n totalTime: number;\n timeSlices: IAnimationTimeSlice[];\n}\n\nexport interface IAnimationRecord {\n start: IGraphic;\n end: IGraphic;\n changes: any[];\n}\n\nexport interface IAnimationParameters {\n width: number;\n height: number;\n mark: IMark;\n group: IMark | null;\n elementIndex: number;\n elementCount: number;\n view: any;\n}\n\nexport interface IParsedAnimationConfig {\n state: string;\n timeline: IAnimationTimeline;\n originConfig: IAnimationConfig;\n id: string;\n}\n\nexport interface IParsedAnimationAttrs {\n from?: any;\n to?: any;\n custom?: IAnimationChannelInterpolator | IAnimationCustomConstructor;\n customParameters?: any;\n}\n\n// animate structure\n\nexport interface IAnimatorOptions {\n state: string;\n timeline: IAnimationTimeline;\n id: string;\n}\n\nexport interface IAnimator {\n id: number;\n element: IElement;\n animationOptions: IAnimatorOptions;\n isAnimating: boolean;\n\n /** execute animation */\n animate: (animationParameters: IAnimationParameters, parameters: any) => this;\n /** set animation callback */\n callback: (callbackFunction: (...args: any[]) => void) => this;\n\n // animation control\n stop: (stopState: 'start' | 'end' | null, invokeCallback?: boolean) => this;\n pause: () => this;\n resume: () => this;\n\n /** set additional initial animation delay */\n startAt: (startTime: number) => this;\n /** get total animation execution time */\n getTotalAnimationTime: () => number;\n\n getEndAttributes: () => Record<string, any>;\n}\n\nexport interface IAnimateArranger {\n // animation control api\n parallel: (arranger: IAnimateArranger) => this;\n after: (arranger: IAnimateArranger) => this;\n\n // internal properties\n afterArranger: IAnimateArranger;\n parallelArrangers: IAnimateArranger[];\n animators: IAnimator[];\n totalTime: number;\n startTime: number;\n endTime: number;\n arrangeTime: () => void;\n}\n\nexport interface IBaseAnimate {\n // animation control\n stop: () => this;\n pause: () => this;\n resume: () => this;\n\n // internal animation process api\n animate: () => this;\n enable: () => this;\n disable: () => this;\n enableAnimationState: (state: string | string[]) => this;\n disableAnimationState: (state: string | string[]) => this;\n isAnimating: () => boolean;\n\n release: () => void;\n}\n\nexport interface IViewAnimate extends IBaseAnimate {\n animateAddition: (mark: IMark) => this;\n}\n\nexport interface IAnimate extends IBaseAnimate {\n mark: IMark;\n\n // additional animation control\n run: (config: IAnimationConfig | IAnimationConfig[]) => IAnimateArranger;\n runAnimationByState: (animationState: string) => IAnimateArranger;\n stopAnimationByState: (animationState: string) => this;\n pauseAnimationByState: (animationState: string) => this;\n resumeAnimationByState: (animationState: string) => this;\n reverse: () => this;\n restart: () => this;\n record: () => this;\n recordEnd: () => this;\n\n // internal animation process api\n getAnimationConfigs: (animationState: string) => IParsedAnimationConfig[];\n updateConfig: (config: Record<string, IAnimationConfig | IAnimationConfig[]>) => void;\n updateState: (state: MarkFunctionType<string> | null) => void;\n isElementAnimating: (element: IElement) => boolean;\n getAnimatorCount: () => number;\n getElementAnimators: (element: IElement | IElement[], animationState?: string) => IAnimator[];\n release: () => void;\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import type { IArc, IArc3d, IArea, ICircle, IGlyph, IGraphic, IGroup, IImage, ILine, IPath, IPolygon, IPyramid3d, IRect, IRect3d, IRichText, ISymbol, IText } from '@visactor/vrender-core';
2
2
  import type { DiffState } from '../graph/enums';
3
3
  import type { IMark, IGlyphMark } from './grammar';
4
- import type { BaseEncodeSpec, MarkFunctionType, MarkKeySpec, MarkType } from './mark';
4
+ import type { BaseEncodeSpec, BaseSingleEncodeSpec, MarkFunctionType, MarkKeySpec, MarkType } from './mark';
5
5
  export interface ElementGraphicMap {
6
6
  circle: ICircle;
7
7
  arc: IArc;
@@ -69,7 +69,7 @@ export interface IElement {
69
69
  setItemAttributes: (attributes: {
70
70
  [channel: string]: any;
71
71
  } | any[]) => void;
72
- updateData: (groupKey: string, data: any[], keyGenerator: MarkKeySpec, view: any) => void;
72
+ updateData: (groupKey: string, data: any[], keyGenerator: MarkKeySpec) => void;
73
73
  state: (markState: MarkFunctionType<string | string[]>, parameters?: any) => void;
74
74
  encodeItems: (items: MarkElementItem[], encoders: BaseEncodeSpec, isReentered?: boolean, parameters?: any) => void;
75
75
  encodeGraphic: (attributes?: any) => void;
@@ -85,6 +85,10 @@ export interface IElement {
85
85
  getNextGraphicAttributes: () => {
86
86
  [key: string]: any;
87
87
  };
88
+ getFinalAnimationAttribute: (channel: string) => any;
89
+ getFinalAnimationAttributes: () => {
90
+ [key: string]: any;
91
+ };
88
92
  clearChangedGraphicAttributes: () => void;
89
93
  clearGraphicAttributes: () => void;
90
94
  getStates: () => string[];
@@ -93,6 +97,7 @@ export interface IElement {
93
97
  addState: (state: string | string[], attrs?: any) => boolean;
94
98
  removeState: (state: string | string[]) => boolean;
95
99
  useStates: (states: string[], noAnimation?: boolean) => boolean;
100
+ updateStates: (states: Record<string, boolean | BaseSingleEncodeSpec>) => any;
96
101
  }
97
102
  export interface IGlyphElement<P = any> extends IElement {
98
103
  mark: IGlyphMark;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/element.ts"],"names":[],"mappings":"","file":"element.js","sourcesContent":["import type {\n IArc,\n IArc3d,\n IArea,\n ICircle,\n IGlyph,\n IGraphic,\n IGroup,\n IImage,\n ILine,\n IPath,\n IPolygon,\n IPyramid3d,\n IRect,\n IRect3d,\n IRichText,\n ISymbol,\n IText\n} from '@visactor/vrender-core';\nimport type { DiffState } from '../graph/enums';\nimport type { IMark, IGlyphMark } from './grammar';\nimport type { BaseEncodeSpec, IMarkConfig, MarkFunctionType, MarkKeySpec, MarkType } from './mark';\n\nexport interface ElementGraphicMap {\n circle: ICircle;\n arc: IArc;\n area: IArea;\n image: IImage;\n line: ILine;\n path: IPath;\n rule: ILine;\n shape: IPath;\n symbol: ISymbol;\n text: IText;\n richtext: IRichText;\n polygon: IPolygon;\n cell: ISymbol;\n interval: IGraphic;\n rect: IRect;\n rect3d: IRect3d;\n arc3d: IArc3d;\n pyramid3d: IPyramid3d;\n group: IGroup;\n glyph: IGlyph;\n linkPath: IGlyph;\n treePath: IGlyph;\n wave: IGlyph;\n ripplePoint: IGlyph;\n barBoxplot: IGlyph;\n boxPlot: IGlyph;\n component: IGroup;\n axis: IGroup;\n legend: IGroup;\n corsshair: IGroup;\n slider: IGroup;\n datazoom: IGroup;\n label: IGroup;\n player: IGroup;\n}\n\nexport type GetGraphicByType<T> = T extends keyof ElementGraphicMap ? ElementGraphicMap[T] : IGraphic;\n\n/**\n * 保存graphicItem状态\n */\nexport interface MarkElementItem {\n /** 唯一key */\n key: string;\n /** 原始数据 */\n datum: any;\n /** VGrammar view */\n view: any;\n /** 当前渲染帧下graphicItem对应的最新属性 */\n nextAttrs?: any;\n /** 是否初始化过,用于解决collection mark对应的item,可能跳过enter状态的问题 */\n // hasEntered: boolean;\n}\nexport interface IElement {\n mark: IMark;\n isReserved: boolean;\n diffState: DiffState;\n key: string;\n groupKey?: string;\n data?: any[];\n /**\n * 不推荐使用,但是collection图元暂时可能回涉及到相关修改\n */\n items: MarkElementItem[];\n\n initGraphicItem: (attrs?: any) => void;\n updateGraphicItem: () => void;\n\n getDatum: () => any;\n getBounds: () => any;\n getGraphicItem: () => IGraphic;\n removeGraphicItem: () => void;\n resetGraphicItem: () => void;\n\n /**\n * 获取 graphic 视觉通道属性\n * @param channel 视觉通道\n * @param prev 是否从之前的 graphic 属性上获取,默认为 false\n * @returns 视觉通道值\n */\n getGraphicAttribute: (channel: string, prev?: boolean) => any;\n /**\n * 设置 graphic 视觉通道属性\n * @param channel 视觉通道\n * @param value 视觉通道属性\n * @param final 是否更新 graphic 最终变更的视觉通道结果,默认为 false\n */\n setGraphicAttribute: (channel: string, value: any, final?: boolean) => void;\n /**\n * 设置一系列 graphic 视觉通道属性\n * @param attributes 视觉通道键值对\n * @param final 是否更新 graphic 最终变更的视觉通道结果,默认为 false\n */\n setGraphicAttributes: (attributes: { [channel: string]: any }, final?: boolean) => void;\n\n /**\n * 【慎重使用】获取 VGrammar 自身的视觉通道属性\n * 只有在 'afterEncodeItems' 时机的mark transform中才能调用\n */\n getItemAttribute: (channel?: string) => any;\n /**\n * 【慎重使用】设置 VGrammar 自身的视觉通道\n * 只有在 'afterEncodeItems' 时机的mark transform中才能调用\n * @param attributes\n * @returns\n */\n setItemAttributes: (attributes: { [channel: string]: any } | any[]) => void;\n\n // element 执行流程相关接口\n updateData: (groupKey: string, data: any[], keyGenerator: MarkKeySpec, view: any) => void;\n state: (markState: MarkFunctionType<string | string[]>, parameters?: any) => void;\n encodeItems: (items: MarkElementItem[], encoders: BaseEncodeSpec, isReentered?: boolean, parameters?: any) => void;\n encodeGraphic: (attributes?: any) => void;\n transformElementItems: (items: MarkElementItem[], markType: MarkType, computePoints?: boolean) => Record<string, any>;\n remove: () => void;\n release: () => void;\n\n // 动画相关接口\n\n getFinalGraphicAttributes: () => { [key: string]: any };\n getPrevGraphicAttributes: () => { [key: string]: any };\n getNextGraphicAttributes: () => { [key: string]: any };\n clearChangedGraphicAttributes: () => void;\n clearGraphicAttributes: () => void;\n\n // state相关接口\n getStates: () => string[];\n hasState: (state: string) => boolean;\n clearStates: (noAnimation?: boolean) => void;\n addState: (state: string | string[], attrs?: any) => boolean;\n removeState: (state: string | string[]) => boolean;\n useStates: (states: string[], noAnimation?: boolean) => boolean;\n}\n\nexport interface IGlyphElement<P = any> extends IElement {\n mark: IGlyphMark;\n\n getGlyphGraphicItems: () => { [markName: string]: any };\n\n getGraphicAttribute: (channel: string, prev?: boolean, markName?: any) => any;\n setGraphicAttribute: (channel: string, value: any, final?: boolean, markName?: any) => void;\n setGraphicAttributes: (attributes: { [channel: string]: any }, final?: boolean, markName?: any) => void;\n\n getFinalGraphicAttributes: (markName?: string) => { [key: string]: any };\n getPrevGraphicAttributes: (markName?: string) => { [key: string]: any };\n getNextGraphicAttributes: (markName?: string) => { [key: string]: any };\n\n encodeCustom: (nextAttrs?: any) => { [markName: string]: any };\n}\n"]}
1
+ {"version":3,"sources":["../src/types/element.ts"],"names":[],"mappings":"","file":"element.js","sourcesContent":["import type {\n IArc,\n IArc3d,\n IArea,\n ICircle,\n IGlyph,\n IGraphic,\n IGroup,\n IImage,\n ILine,\n IPath,\n IPolygon,\n IPyramid3d,\n IRect,\n IRect3d,\n IRichText,\n ISymbol,\n IText\n} from '@visactor/vrender-core';\nimport type { DiffState } from '../graph/enums';\nimport type { IMark, IGlyphMark } from './grammar';\nimport type {\n BaseEncodeSpec,\n BaseSingleEncodeSpec,\n IMarkConfig,\n MarkFunctionType,\n MarkKeySpec,\n MarkType\n} from './mark';\n\nexport interface ElementGraphicMap {\n circle: ICircle;\n arc: IArc;\n area: IArea;\n image: IImage;\n line: ILine;\n path: IPath;\n rule: ILine;\n shape: IPath;\n symbol: ISymbol;\n text: IText;\n richtext: IRichText;\n polygon: IPolygon;\n cell: ISymbol;\n interval: IGraphic;\n rect: IRect;\n rect3d: IRect3d;\n arc3d: IArc3d;\n pyramid3d: IPyramid3d;\n group: IGroup;\n glyph: IGlyph;\n linkPath: IGlyph;\n treePath: IGlyph;\n wave: IGlyph;\n ripplePoint: IGlyph;\n barBoxplot: IGlyph;\n boxPlot: IGlyph;\n component: IGroup;\n axis: IGroup;\n legend: IGroup;\n corsshair: IGroup;\n slider: IGroup;\n datazoom: IGroup;\n label: IGroup;\n player: IGroup;\n}\n\nexport type GetGraphicByType<T> = T extends keyof ElementGraphicMap ? ElementGraphicMap[T] : IGraphic;\n\n/**\n * 保存graphicItem状态\n */\nexport interface MarkElementItem {\n /** 唯一key */\n key: string;\n /** 原始数据 */\n datum: any;\n /** VGrammar view */\n view: any;\n /** 当前渲染帧下graphicItem对应的最新属性 */\n nextAttrs?: any;\n /** 是否初始化过,用于解决collection mark对应的item,可能跳过enter状态的问题 */\n // hasEntered: boolean;\n}\nexport interface IElement {\n mark: IMark;\n isReserved: boolean;\n diffState: DiffState;\n key: string;\n groupKey?: string;\n data?: any[];\n /**\n * 不推荐使用,但是collection图元暂时可能回涉及到相关修改\n */\n items: MarkElementItem[];\n\n initGraphicItem: (attrs?: any) => void;\n updateGraphicItem: () => void;\n\n getDatum: () => any;\n getBounds: () => any;\n getGraphicItem: () => IGraphic;\n removeGraphicItem: () => void;\n resetGraphicItem: () => void;\n\n /**\n * 获取 graphic 视觉通道属性\n * @param channel 视觉通道\n * @param prev 是否从之前的 graphic 属性上获取,默认为 false\n * @returns 视觉通道值\n */\n getGraphicAttribute: (channel: string, prev?: boolean) => any;\n /**\n * 设置 graphic 视觉通道属性\n * @param channel 视觉通道\n * @param value 视觉通道属性\n * @param final 是否更新 graphic 最终变更的视觉通道结果,默认为 false\n */\n setGraphicAttribute: (channel: string, value: any, final?: boolean) => void;\n /**\n * 设置一系列 graphic 视觉通道属性\n * @param attributes 视觉通道键值对\n * @param final 是否更新 graphic 最终变更的视觉通道结果,默认为 false\n */\n setGraphicAttributes: (attributes: { [channel: string]: any }, final?: boolean) => void;\n\n /**\n * 【慎重使用】获取 VGrammar 自身的视觉通道属性\n * 只有在 'afterEncodeItems' 时机的mark transform中才能调用\n */\n getItemAttribute: (channel?: string) => any;\n /**\n * 【慎重使用】设置 VGrammar 自身的视觉通道\n * 只有在 'afterEncodeItems' 时机的mark transform中才能调用\n * @param attributes\n * @returns\n */\n setItemAttributes: (attributes: { [channel: string]: any } | any[]) => void;\n\n // element 执行流程相关接口\n updateData: (groupKey: string, data: any[], keyGenerator: MarkKeySpec) => void;\n state: (markState: MarkFunctionType<string | string[]>, parameters?: any) => void;\n encodeItems: (items: MarkElementItem[], encoders: BaseEncodeSpec, isReentered?: boolean, parameters?: any) => void;\n encodeGraphic: (attributes?: any) => void;\n transformElementItems: (items: MarkElementItem[], markType: MarkType, computePoints?: boolean) => Record<string, any>;\n remove: () => void;\n release: () => void;\n\n // 动画相关接口\n\n getFinalGraphicAttributes: () => { [key: string]: any };\n getPrevGraphicAttributes: () => { [key: string]: any };\n getNextGraphicAttributes: () => { [key: string]: any };\n getFinalAnimationAttribute: (channel: string) => any;\n getFinalAnimationAttributes: () => { [key: string]: any };\n clearChangedGraphicAttributes: () => void;\n clearGraphicAttributes: () => void;\n\n // state相关接口\n getStates: () => string[];\n hasState: (state: string) => boolean;\n clearStates: (noAnimation?: boolean) => void;\n addState: (state: string | string[], attrs?: any) => boolean;\n removeState: (state: string | string[]) => boolean;\n useStates: (states: string[], noAnimation?: boolean) => boolean;\n updateStates: (states: Record<string, boolean | BaseSingleEncodeSpec>) => any;\n}\n\nexport interface IGlyphElement<P = any> extends IElement {\n mark: IGlyphMark;\n\n getGlyphGraphicItems: () => { [markName: string]: any };\n\n getGraphicAttribute: (channel: string, prev?: boolean, markName?: any) => any;\n setGraphicAttribute: (channel: string, value: any, final?: boolean, markName?: any) => void;\n setGraphicAttributes: (attributes: { [channel: string]: any }, final?: boolean, markName?: any) => void;\n\n getFinalGraphicAttributes: (markName?: string) => { [key: string]: any };\n getPrevGraphicAttributes: (markName?: string) => { [key: string]: any };\n getNextGraphicAttributes: (markName?: string) => { [key: string]: any };\n\n encodeCustom: (nextAttrs?: any) => { [markName: string]: any };\n}\n"]}
@@ -124,6 +124,7 @@ export interface IProgressiveGrammar {
124
124
  clearProgressive: () => void;
125
125
  restartProgressive: () => void;
126
126
  evaluateProgressive: () => void;
127
+ canAnimateAfterProgressive: () => boolean;
127
128
  }
128
129
  export interface IMark extends IGrammarBase, IProgressiveGrammar {
129
130
  group?: IGroupMark;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/grammar.ts"],"names":[],"mappings":"","file":"grammar.js","sourcesContent":["import type { EventEmitter, IBounds, IPointLike } from '@visactor/vutils';\nimport type { IGraphic, IGroup } from '@visactor/vrender-core';\nimport type { IBaseScale, ScaleFishEyeOptions, TickData } from '@visactor/vscale';\nimport type { ITransform, TransformSpec } from './transform';\nimport type { DataFormatSpec, IDataFilter } from './data';\nimport type { ParameterFunctionType, SignalFunctionType } from './signal';\nimport type { IAnimate } from './animate';\nimport type { IGlyphMeta } from './glyph';\nimport type { GrammarTypeEnum } from '../graph/enums';\nimport type { Nil } from './base';\nimport type { CoordinateFunctionType } from './coordinate';\nimport type { IElement } from './element';\nimport type {\n MarkFunctionType,\n MarkAnimationSpec,\n MarkType,\n MarkLayoutSpec,\n MarkLayoutCallback,\n MarkSortSpec,\n MarkKeySpec,\n IMarkConfig,\n ChannelEncodeType,\n AttributeTransform,\n BaseSingleEncodeSpec,\n MarkStateSortSpec\n} from './mark';\nimport type { ScaleConfigureSpec, ScaleData, ScaleFunctionType, GrammarScaleType, MultiScaleData } from './scale';\nimport type { IView } from './view';\nimport type { BaseEventHandler } from './event';\nimport type { ICartesianCoordinate, IPolarCoordinate } from '@visactor/vgrammar-coordinate';\n\nexport type BuiltInGrammarType = keyof typeof GrammarTypeEnum;\nexport type GrammarType = BuiltInGrammarType | string;\n\n/** 语法元素内置运行的任务 */\nexport interface IGrammarTask extends ITransform {\n /**\n * 参数依赖\n * 只做一级解析\n */\n options?: Record<string, any | IGrammarBase> | (IGrammarBase | any)[];\n /**\n * 依赖的语法元素\n */\n references?: IGrammarBase[];\n /**\n * 是否只支持简单的options配置,不支持在options引用语法元素\n */\n isRawOptions?: boolean;\n}\n\nexport interface GrammarSpec {\n id?: string;\n dependency?: IGrammarBase[] | IGrammarBase | string[] | string;\n}\n\nexport interface IGrammarBase {\n readonly grammarType: GrammarType;\n readonly view: IView;\n readonly uid: number;\n /**\n * 执行的上游节点\n */\n grammarSource: IGrammarBase;\n /**\n * 影响的下游节点\n */\n targets: IGrammarBase[];\n /**\n * 依赖的上游节点,由于不同 spec 配置项中可能引用同一个节点,需要进行计数\n */\n references: Map<IGrammarBase, number>;\n\n depend: (grammar: IGrammarBase[] | IGrammarBase | string[] | string) => this;\n\n addEventListener: (type: string, handler: BaseEventHandler, options?: any) => this;\n removeEventListener: (type: string, handler: BaseEventHandler) => this;\n\n // extended from EventEmitter\n emit: <T extends EventEmitter.EventNames<string | symbol>>(\n event: T,\n ...args: EventEmitter.EventArgs<string | symbol, T>\n ) => boolean;\n emitGrammarEvent: <T extends EventEmitter.EventNames<string | symbol>>(\n event: T,\n ...args: EventEmitter.EventArgs<string | symbol, T>\n ) => boolean;\n\n tasks?: IGrammarTask[];\n // value?: any;\n /** FIXME: operator执行顺序,改造后,dataflow执行元素,应该抽象出来 */\n rank?: number;\n // todo\n set: (value: any) => boolean;\n id: (() => string) & ((id: string) => this);\n name: (() => string) & ((name: string) => this);\n attach: (reference: IGrammarBase | IGrammarBase[], count?: number) => this;\n detach: (reference: IGrammarBase | IGrammarBase[], count?: number) => this;\n detachAll: () => void;\n commit: () => void;\n output: () => any;\n parse: (spec: any) => this;\n parameters: () => { [key: string]: any };\n getSpec: () => any;\n reuse: (grammar: IGrammarBase) => this;\n /** clear references */\n clear: () => void;\n /** release all memory storage */\n release: () => void;\n evaluate: (upstream: any, parameters: any) => this;\n}\n\nexport interface IData extends IGrammarBase {\n values: (values: any | Nil, format?: ParameterFunctionType<DataFormatSpec>, load?: boolean) => this;\n url: (\n url: ParameterFunctionType<string> | Nil,\n format?: ParameterFunctionType<DataFormatSpec>,\n load?: boolean\n ) => this;\n source: (\n source: string | string[] | IData | IData[],\n format?: ParameterFunctionType<DataFormatSpec>,\n load?: boolean\n ) => this;\n transform: (transform: TransformSpec[] | Nil) => this;\n\n // only used in VGrammar\n addDataFilter: (filter: IDataFilter | IDataFilter[]) => this;\n removeDataFilter: (filter: IDataFilter | IDataFilter[]) => this;\n\n // data util methods\n field: (field: string) => any[];\n getValue: () => any[];\n getInput: () => any[];\n getDataIDKey: () => string;\n}\n\n/** 语法元素,TODO */\nexport interface ISignal<T> extends IGrammarBase {\n value: (value: T | Nil) => this;\n update: (update: SignalFunctionType<T> | Nil) => this;\n\n getValue: () => T;\n}\n\n/** 语法元素,TODO */\nexport interface IScale extends IGrammarBase {\n domain: (domain: ScaleFunctionType<any[]> | ScaleData | MultiScaleData | Nil) => this;\n range: (range: ScaleFunctionType<any[]> | ScaleData | MultiScaleData | Nil) => this;\n configure: (config: ScaleConfigureSpec | Nil) => this;\n tickCount: (tickCount: ScaleFunctionType<number> | Nil) => this;\n\n // only used in VGrammar\n getRangeFactor: () => [number, number] | Nil;\n setRangeFactor: (range?: [number, number]) => this;\n getFishEye: () => ScaleFishEyeOptions | Nil;\n setFishEye: (option?: ScaleFishEyeOptions) => this;\n\n // scale util methods\n getScaleType: () => GrammarScaleType;\n getScale: () => IBaseScale;\n ticks: (count?: number) => TickData[];\n getCoordinateAxisPoints: (baseValue?: number) => [IPointLike, IPointLike];\n getCoordinate: () => IPolarCoordinate | ICartesianCoordinate;\n getCoordinateAxisPosition: () => 'top' | 'bottom' | 'left' | 'right' | 'inside' | 'outside' | 'start' | 'end';\n}\n\nexport interface ICoordinate extends IGrammarBase {\n start: (start: CoordinateFunctionType<[number, number]> | Nil) => this;\n end: (end: CoordinateFunctionType<[number, number]> | Nil) => this;\n origin: (origin: CoordinateFunctionType<[number, number]> | Nil) => this;\n\n translate: (offset: CoordinateFunctionType<[number, number]> | Nil) => this;\n rotate: (angle: CoordinateFunctionType<number> | Nil) => this;\n scale: (ratio: CoordinateFunctionType<[number, number]> | Nil) => this;\n transpose: (isTransposed: CoordinateFunctionType<boolean> | Nil) => this;\n\n // coordinate util methods\n}\n\n/** 语法元素,TODO */\n\n/** group mark */\nexport interface IGroupMark extends IMark {\n children: (IMark | IGroupMark | IGlyphMark)[];\n\n layoutChildren?: (IMark | IGroupMark | IGlyphMark)[];\n\n appendChild: (mark: IMark | IGroupMark | IGlyphMark) => this;\n removeChild: (mark: IMark | IGroupMark | IGlyphMark) => this;\n includesChild: (mark: IMark, descendant?: boolean) => boolean;\n\n updateLayoutChildren: () => this;\n}\n\nexport interface IGlyphMark extends IMark {\n glyphType: string;\n getGlyphMeta: () => IGlyphMeta;\n configureGlyph: (config: any) => this;\n getGlyphConfig: () => any;\n}\n\nexport interface IComponent extends IMark {\n componentType: string;\n configureComponent: (config: any) => this;\n}\n\nexport interface IProgressiveGrammar {\n /** 是否启动了增量渲染模式 */\n isProgressive: () => boolean;\n /** 是否正在执行增量渲染 */\n isDoingProgressive: () => boolean;\n /** 清除增量渲染相关状态 */\n clearProgressive: () => void;\n /** 从第一帧开始增量计算 */\n restartProgressive: () => void;\n /** 分片执行 */\n evaluateProgressive: () => void;\n}\n\nexport interface IMark extends IGrammarBase, IProgressiveGrammar {\n group?: IGroupMark;\n\n markType: MarkType;\n coord: ICoordinate;\n /**\n * disable coordinate transform when need\n */\n disableCoordinateTransform?: boolean;\n elements: IElement[];\n elementMap: Map<string, IElement>;\n graphicIndex: number;\n graphicItem?: IGroup;\n animate?: IAnimate;\n\n join: (\n data: IData | string | Nil,\n key?: MarkKeySpec,\n sort?: MarkSortSpec,\n groupBy?: MarkKeySpec,\n groupSort?: MarkSortSpec\n ) => this;\n coordinate: (coordinate: ICoordinate | string | Nil) => this;\n state: (state: MarkFunctionType<string | string[]> | Nil, stateSort?: MarkStateSortSpec) => this;\n encode: ((encoders: BaseSingleEncodeSpec, clear?: boolean) => this) &\n ((channel: string, value: ChannelEncodeType, clear?: boolean) => this);\n encodeState: ((state: string, channel: string, value: ChannelEncodeType, clear?: boolean) => this) &\n ((state: string, encoders: BaseSingleEncodeSpec, clear?: boolean) => this);\n animation: (animationConfig: MarkAnimationSpec | Nil) => this;\n animationState: (animationState: MarkFunctionType<string> | Nil) => this;\n layout: (layout: MarkLayoutSpec | MarkLayoutCallback | Nil) => this;\n configure: (config: IMarkConfig | Nil) => this;\n context: (context: any) => this;\n transform: (transform: TransformSpec[] | Nil) => this;\n\n needAnimate: () => boolean;\n getBounds: () => IBounds;\n isCollectionMark: () => boolean;\n getAllElements: () => IElement[];\n getContext: () => any;\n\n // position: () => this;\n // color: () => this;\n // shape: () => this;\n\n // mark 执行流程相关接口\n\n isUpdated: boolean;\n getGroupGraphicItem: () => any;\n cleanExitElements: () => void;\n addGraphicItem: (attrs: any, groupKey?: string) => IGraphic;\n getMorphConfig: () => { morph: boolean; morphKey: string | undefined; morphElementKey: string | undefined };\n prepareRelease: () => void;\n\n layoutBounds?: IBounds;\n relativePosition?: { top?: number; bottom?: number; left?: number; right?: number };\n needLayout: () => boolean;\n handleLayoutEnd: () => void;\n handleRenderEnd: () => void;\n isLargeMode: () => boolean;\n getAttributeTransforms: () => AttributeTransform[];\n\n getScalesByChannel: () => Record<string, IBaseScale> | undefined;\n getFieldsByChannel: () => Record<string, string> | undefined;\n getScales: () => Record<string, IBaseScale> | undefined;\n}\n\nexport interface IGrammarBaseConstructor<T extends string = any> {\n new (view: IView, grammarType: T): IGrammarBase;\n}\n\nexport interface ProgressiveContext {\n currentIndex: number;\n totalStep: number;\n step: number;\n data: any[];\n groupKeys?: string[];\n groupedData?: Map<string, any[]>;\n}\n"]}
1
+ {"version":3,"sources":["../src/types/grammar.ts"],"names":[],"mappings":"","file":"grammar.js","sourcesContent":["import type { EventEmitter, IBounds, IPointLike } from '@visactor/vutils';\nimport type { IGraphic, IGroup } from '@visactor/vrender-core';\nimport type { IBaseScale, ScaleFishEyeOptions, TickData } from '@visactor/vscale';\nimport type { ITransform, TransformSpec } from './transform';\nimport type { DataFormatSpec, IDataFilter } from './data';\nimport type { ParameterFunctionType, SignalFunctionType } from './signal';\nimport type { IAnimate } from './animate';\nimport type { IGlyphMeta } from './glyph';\nimport type { GrammarTypeEnum } from '../graph/enums';\nimport type { Nil } from './base';\nimport type { CoordinateFunctionType } from './coordinate';\nimport type { IElement } from './element';\nimport type {\n MarkFunctionType,\n MarkAnimationSpec,\n MarkType,\n MarkLayoutSpec,\n MarkLayoutCallback,\n MarkSortSpec,\n MarkKeySpec,\n IMarkConfig,\n ChannelEncodeType,\n AttributeTransform,\n BaseSingleEncodeSpec,\n MarkStateSortSpec\n} from './mark';\nimport type { ScaleConfigureSpec, ScaleData, ScaleFunctionType, GrammarScaleType, MultiScaleData } from './scale';\nimport type { IView } from './view';\nimport type { BaseEventHandler } from './event';\nimport type { ICartesianCoordinate, IPolarCoordinate } from '@visactor/vgrammar-coordinate';\n\nexport type BuiltInGrammarType = keyof typeof GrammarTypeEnum;\nexport type GrammarType = BuiltInGrammarType | string;\n\n/** 语法元素内置运行的任务 */\nexport interface IGrammarTask extends ITransform {\n /**\n * 参数依赖\n * 只做一级解析\n */\n options?: Record<string, any | IGrammarBase> | (IGrammarBase | any)[];\n /**\n * 依赖的语法元素\n */\n references?: IGrammarBase[];\n /**\n * 是否只支持简单的options配置,不支持在options引用语法元素\n */\n isRawOptions?: boolean;\n}\n\nexport interface GrammarSpec {\n id?: string;\n dependency?: IGrammarBase[] | IGrammarBase | string[] | string;\n}\n\nexport interface IGrammarBase {\n readonly grammarType: GrammarType;\n readonly view: IView;\n readonly uid: number;\n /**\n * 执行的上游节点\n */\n grammarSource: IGrammarBase;\n /**\n * 影响的下游节点\n */\n targets: IGrammarBase[];\n /**\n * 依赖的上游节点,由于不同 spec 配置项中可能引用同一个节点,需要进行计数\n */\n references: Map<IGrammarBase, number>;\n\n depend: (grammar: IGrammarBase[] | IGrammarBase | string[] | string) => this;\n\n addEventListener: (type: string, handler: BaseEventHandler, options?: any) => this;\n removeEventListener: (type: string, handler: BaseEventHandler) => this;\n\n // extended from EventEmitter\n emit: <T extends EventEmitter.EventNames<string | symbol>>(\n event: T,\n ...args: EventEmitter.EventArgs<string | symbol, T>\n ) => boolean;\n emitGrammarEvent: <T extends EventEmitter.EventNames<string | symbol>>(\n event: T,\n ...args: EventEmitter.EventArgs<string | symbol, T>\n ) => boolean;\n\n tasks?: IGrammarTask[];\n // value?: any;\n /** FIXME: operator执行顺序,改造后,dataflow执行元素,应该抽象出来 */\n rank?: number;\n // todo\n set: (value: any) => boolean;\n id: (() => string) & ((id: string) => this);\n name: (() => string) & ((name: string) => this);\n attach: (reference: IGrammarBase | IGrammarBase[], count?: number) => this;\n detach: (reference: IGrammarBase | IGrammarBase[], count?: number) => this;\n detachAll: () => void;\n commit: () => void;\n output: () => any;\n parse: (spec: any) => this;\n parameters: () => { [key: string]: any };\n getSpec: () => any;\n reuse: (grammar: IGrammarBase) => this;\n /** clear references */\n clear: () => void;\n /** release all memory storage */\n release: () => void;\n evaluate: (upstream: any, parameters: any) => this;\n}\n\nexport interface IData extends IGrammarBase {\n values: (values: any | Nil, format?: ParameterFunctionType<DataFormatSpec>, load?: boolean) => this;\n url: (\n url: ParameterFunctionType<string> | Nil,\n format?: ParameterFunctionType<DataFormatSpec>,\n load?: boolean\n ) => this;\n source: (\n source: string | string[] | IData | IData[],\n format?: ParameterFunctionType<DataFormatSpec>,\n load?: boolean\n ) => this;\n transform: (transform: TransformSpec[] | Nil) => this;\n\n // only used in VGrammar\n addDataFilter: (filter: IDataFilter | IDataFilter[]) => this;\n removeDataFilter: (filter: IDataFilter | IDataFilter[]) => this;\n\n // data util methods\n field: (field: string) => any[];\n getValue: () => any[];\n getInput: () => any[];\n getDataIDKey: () => string;\n}\n\n/** 语法元素,TODO */\nexport interface ISignal<T> extends IGrammarBase {\n value: (value: T | Nil) => this;\n update: (update: SignalFunctionType<T> | Nil) => this;\n\n getValue: () => T;\n}\n\n/** 语法元素,TODO */\nexport interface IScale extends IGrammarBase {\n domain: (domain: ScaleFunctionType<any[]> | ScaleData | MultiScaleData | Nil) => this;\n range: (range: ScaleFunctionType<any[]> | ScaleData | MultiScaleData | Nil) => this;\n configure: (config: ScaleConfigureSpec | Nil) => this;\n tickCount: (tickCount: ScaleFunctionType<number> | Nil) => this;\n\n // only used in VGrammar\n getRangeFactor: () => [number, number] | Nil;\n setRangeFactor: (range?: [number, number]) => this;\n getFishEye: () => ScaleFishEyeOptions | Nil;\n setFishEye: (option?: ScaleFishEyeOptions) => this;\n\n // scale util methods\n getScaleType: () => GrammarScaleType;\n getScale: () => IBaseScale;\n ticks: (count?: number) => TickData[];\n getCoordinateAxisPoints: (baseValue?: number) => [IPointLike, IPointLike];\n getCoordinate: () => IPolarCoordinate | ICartesianCoordinate;\n getCoordinateAxisPosition: () => 'top' | 'bottom' | 'left' | 'right' | 'inside' | 'outside' | 'start' | 'end';\n}\n\nexport interface ICoordinate extends IGrammarBase {\n start: (start: CoordinateFunctionType<[number, number]> | Nil) => this;\n end: (end: CoordinateFunctionType<[number, number]> | Nil) => this;\n origin: (origin: CoordinateFunctionType<[number, number]> | Nil) => this;\n\n translate: (offset: CoordinateFunctionType<[number, number]> | Nil) => this;\n rotate: (angle: CoordinateFunctionType<number> | Nil) => this;\n scale: (ratio: CoordinateFunctionType<[number, number]> | Nil) => this;\n transpose: (isTransposed: CoordinateFunctionType<boolean> | Nil) => this;\n\n // coordinate util methods\n}\n\n/** 语法元素,TODO */\n\n/** group mark */\nexport interface IGroupMark extends IMark {\n children: (IMark | IGroupMark | IGlyphMark)[];\n\n layoutChildren?: (IMark | IGroupMark | IGlyphMark)[];\n\n appendChild: (mark: IMark | IGroupMark | IGlyphMark) => this;\n removeChild: (mark: IMark | IGroupMark | IGlyphMark) => this;\n includesChild: (mark: IMark, descendant?: boolean) => boolean;\n\n updateLayoutChildren: () => this;\n}\n\nexport interface IGlyphMark extends IMark {\n glyphType: string;\n getGlyphMeta: () => IGlyphMeta;\n configureGlyph: (config: any) => this;\n getGlyphConfig: () => any;\n}\n\nexport interface IComponent extends IMark {\n componentType: string;\n configureComponent: (config: any) => this;\n}\n\nexport interface IProgressiveGrammar {\n /** 是否启动了增量渲染模式 */\n isProgressive: () => boolean;\n /** 是否正在执行增量渲染 */\n isDoingProgressive: () => boolean;\n /** 清除增量渲染相关状态 */\n clearProgressive: () => void;\n /** 从第一帧开始增量计算 */\n restartProgressive: () => void;\n /** 分片执行 */\n evaluateProgressive: () => void;\n /** 增量流程后,是否执行动画 */\n canAnimateAfterProgressive: () => boolean;\n}\n\nexport interface IMark extends IGrammarBase, IProgressiveGrammar {\n group?: IGroupMark;\n\n markType: MarkType;\n coord: ICoordinate;\n /**\n * disable coordinate transform when need\n */\n disableCoordinateTransform?: boolean;\n elements: IElement[];\n elementMap: Map<string, IElement>;\n graphicIndex: number;\n graphicItem?: IGroup;\n animate?: IAnimate;\n\n join: (\n data: IData | string | Nil,\n key?: MarkKeySpec,\n sort?: MarkSortSpec,\n groupBy?: MarkKeySpec,\n groupSort?: MarkSortSpec\n ) => this;\n coordinate: (coordinate: ICoordinate | string | Nil) => this;\n state: (state: MarkFunctionType<string | string[]> | Nil, stateSort?: MarkStateSortSpec) => this;\n encode: ((encoders: BaseSingleEncodeSpec, clear?: boolean) => this) &\n ((channel: string, value: ChannelEncodeType, clear?: boolean) => this);\n encodeState: ((state: string, channel: string, value: ChannelEncodeType, clear?: boolean) => this) &\n ((state: string, encoders: BaseSingleEncodeSpec, clear?: boolean) => this);\n animation: (animationConfig: MarkAnimationSpec | Nil) => this;\n animationState: (animationState: MarkFunctionType<string> | Nil) => this;\n layout: (layout: MarkLayoutSpec | MarkLayoutCallback | Nil) => this;\n configure: (config: IMarkConfig | Nil) => this;\n context: (context: any) => this;\n transform: (transform: TransformSpec[] | Nil) => this;\n\n needAnimate: () => boolean;\n getBounds: () => IBounds;\n isCollectionMark: () => boolean;\n getAllElements: () => IElement[];\n getContext: () => any;\n\n // position: () => this;\n // color: () => this;\n // shape: () => this;\n\n // mark 执行流程相关接口\n\n isUpdated: boolean;\n getGroupGraphicItem: () => any;\n cleanExitElements: () => void;\n addGraphicItem: (attrs: any, groupKey?: string) => IGraphic;\n getMorphConfig: () => { morph: boolean; morphKey: string | undefined; morphElementKey: string | undefined };\n prepareRelease: () => void;\n\n layoutBounds?: IBounds;\n relativePosition?: { top?: number; bottom?: number; left?: number; right?: number };\n needLayout: () => boolean;\n handleLayoutEnd: () => void;\n handleRenderEnd: () => void;\n isLargeMode: () => boolean;\n getAttributeTransforms: () => AttributeTransform[];\n\n getScalesByChannel: () => Record<string, IBaseScale> | undefined;\n getFieldsByChannel: () => Record<string, string> | undefined;\n getScales: () => Record<string, IBaseScale> | undefined;\n}\n\nexport interface IGrammarBaseConstructor<T extends string = any> {\n new (view: IView, grammarType: T): IGrammarBase;\n}\n\nexport interface ProgressiveContext {\n currentIndex: number;\n totalStep: number;\n step: number;\n data: any[];\n groupKeys?: string[];\n groupedData?: Map<string, any[]>;\n}\n"]}