@visactor/vgrammar-core 0.13.12 → 0.14.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) 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/core/factory.d.ts +8 -1
  11. package/cjs/core/factory.js +8 -1
  12. package/cjs/core/factory.js.map +1 -1
  13. package/cjs/glyph/boxplot.js +5 -5
  14. package/cjs/glyph/boxplot.js.map +1 -1
  15. package/cjs/glyph/link-path.js +2 -2
  16. package/cjs/glyph/link-path.js.map +1 -1
  17. package/cjs/glyph/ripple.js +3 -2
  18. package/cjs/glyph/ripple.js.map +1 -1
  19. package/cjs/glyph/tree-path.js +2 -2
  20. package/cjs/glyph/tree-path.js.map +1 -1
  21. package/cjs/glyph/violin.js +4 -4
  22. package/cjs/glyph/violin.js.map +1 -1
  23. package/cjs/glyph/wave.js +3 -2
  24. package/cjs/glyph/wave.js.map +1 -1
  25. package/cjs/graph/animation/animation/fade.js +4 -4
  26. package/cjs/graph/animation/animation/fade.js.map +1 -1
  27. package/cjs/graph/animation/animation/grow-cartesian.js +14 -14
  28. package/cjs/graph/animation/animation/grow-cartesian.js.map +1 -1
  29. package/cjs/graph/animation/animation/grow-interval.js +9 -9
  30. package/cjs/graph/animation/animation/grow-interval.js.map +1 -1
  31. package/cjs/graph/animation/animation/grow-points.js +9 -9
  32. package/cjs/graph/animation/animation/grow-points.js.map +1 -1
  33. package/cjs/graph/animation/animation/grow-polar.js +24 -24
  34. package/cjs/graph/animation/animation/grow-polar.js.map +1 -1
  35. package/cjs/graph/animation/animation/move.js +6 -6
  36. package/cjs/graph/animation/animation/move.js.map +1 -1
  37. package/cjs/graph/animation/animation/rotate.js +5 -5
  38. package/cjs/graph/animation/animation/rotate.js.map +1 -1
  39. package/cjs/graph/animation/animation/scale.js +5 -5
  40. package/cjs/graph/animation/animation/scale.js.map +1 -1
  41. package/cjs/graph/animation/animation/update.js +2 -2
  42. package/cjs/graph/animation/animation/update.js.map +1 -1
  43. package/cjs/graph/animation/animator.js +1 -1
  44. package/cjs/graph/animation/animator.js.map +1 -1
  45. package/cjs/graph/animation/morph.d.ts +2 -12
  46. package/cjs/graph/animation/morph.js +76 -163
  47. package/cjs/graph/animation/morph.js.map +1 -1
  48. package/cjs/graph/attributes/line.js.map +1 -1
  49. package/cjs/graph/canvas-renderer.d.ts +1 -1
  50. package/cjs/graph/canvas-renderer.js +4 -4
  51. package/cjs/graph/canvas-renderer.js.map +1 -1
  52. package/cjs/graph/element.d.ts +1 -2
  53. package/cjs/graph/element.js +19 -20
  54. package/cjs/graph/element.js.map +1 -1
  55. package/cjs/graph/glyph-element.js +4 -3
  56. package/cjs/graph/glyph-element.js.map +1 -1
  57. package/cjs/graph/layout/layout.d.ts +1 -0
  58. package/cjs/graph/layout/layout.js +8 -2
  59. package/cjs/graph/layout/layout.js.map +1 -1
  60. package/cjs/graph/mark/graphic.js +14 -8
  61. package/cjs/graph/mark/graphic.js.map +1 -1
  62. package/cjs/graph/util/point.js +10 -26
  63. package/cjs/graph/util/point.js.map +1 -1
  64. package/cjs/graph/view-diff.d.ts +8 -0
  65. package/cjs/graph/view-diff.js +93 -0
  66. package/cjs/graph/view-diff.js.map +1 -0
  67. package/cjs/index.d.ts +8 -1
  68. package/cjs/index.js +66 -2
  69. package/cjs/index.js.map +1 -1
  70. package/cjs/interactions/brush-base.js +1 -2
  71. package/cjs/interactions/brush-filter.js +2 -1
  72. package/cjs/interactions/fish-eye.js +1 -2
  73. package/cjs/interactions/index.js +2 -1
  74. package/cjs/interactions/tooltip.js +1 -1
  75. package/cjs/parse/event.d.ts +0 -2
  76. package/cjs/parse/event.js +4 -10
  77. package/cjs/parse/event.js.map +1 -1
  78. package/cjs/parse/util.js.map +1 -1
  79. package/cjs/types/animate.d.ts +0 -1
  80. package/cjs/types/animate.js.map +1 -1
  81. package/cjs/types/element.d.ts +1 -5
  82. package/cjs/types/element.js.map +1 -1
  83. package/cjs/types/morph.d.ts +1 -2
  84. package/cjs/types/morph.js.map +1 -1
  85. package/cjs/types/renderer.d.ts +6 -1
  86. package/cjs/types/renderer.js.map +1 -1
  87. package/cjs/view/View.d.ts +3 -6
  88. package/cjs/view/View.js +52 -105
  89. package/cjs/view/View.js.map +1 -1
  90. package/cjs/view/animate.js +2 -1
  91. package/cjs/view/animate.js.map +1 -1
  92. package/cjs/view/constants.d.ts +2 -0
  93. package/cjs/view/constants.js +3 -2
  94. package/cjs/view/constants.js.map +1 -1
  95. package/cjs/view/events.d.ts +0 -1
  96. package/cjs/view/events.js +3 -17
  97. package/cjs/view/events.js.map +1 -1
  98. package/cjs/view/glyph.d.ts +4 -0
  99. package/cjs/view/glyph.js +12 -3
  100. package/cjs/view/glyph.js.map +1 -1
  101. package/cjs/view/group.js +3 -3
  102. package/cjs/view/group.js.map +1 -1
  103. package/cjs/view/mark-animate-mixin.d.ts +1 -0
  104. package/cjs/view/mark-animate-mixin.js +29 -0
  105. package/cjs/view/mark-animate-mixin.js.map +1 -0
  106. package/cjs/view/mark.d.ts +2 -0
  107. package/cjs/view/mark.js +31 -28
  108. package/cjs/view/mark.js.map +1 -1
  109. package/cjs/view/view-animate-mixin.d.ts +1 -0
  110. package/cjs/view/view-animate-mixin.js +26 -0
  111. package/cjs/view/view-animate-mixin.js.map +1 -0
  112. package/cjs/view/view-event-mixin.d.ts +1 -0
  113. package/cjs/view/view-event-mixin.js +92 -0
  114. package/cjs/view/view-event-mixin.js.map +1 -0
  115. package/cjs/view/view-morph-mixin.d.ts +1 -0
  116. package/cjs/view/view-morph-mixin.js +32 -0
  117. package/cjs/view/view-morph-mixin.js.map +1 -0
  118. package/es/component/axis.d.ts +2 -0
  119. package/es/component/axis.js +10 -0
  120. package/es/component/axis.js.map +1 -1
  121. package/es/component/grid.d.ts +2 -0
  122. package/es/component/grid.js +10 -0
  123. package/es/component/grid.js.map +1 -1
  124. package/es/component/index.d.ts +2 -2
  125. package/es/component/index.js +2 -2
  126. package/es/component/index.js.map +1 -1
  127. package/es/core/factory.d.ts +8 -1
  128. package/es/core/factory.js +8 -1
  129. package/es/core/factory.js.map +1 -1
  130. package/es/glyph/boxplot.js +4 -2
  131. package/es/glyph/boxplot.js.map +1 -1
  132. package/es/glyph/link-path.js +4 -2
  133. package/es/glyph/link-path.js.map +1 -1
  134. package/es/glyph/ripple.js +3 -1
  135. package/es/glyph/ripple.js.map +1 -1
  136. package/es/glyph/tree-path.js +4 -2
  137. package/es/glyph/tree-path.js.map +1 -1
  138. package/es/glyph/violin.js +4 -2
  139. package/es/glyph/violin.js.map +1 -1
  140. package/es/glyph/wave.js +3 -1
  141. package/es/glyph/wave.js.map +1 -1
  142. package/es/graph/animation/animation/fade.js +4 -4
  143. package/es/graph/animation/animation/fade.js.map +1 -1
  144. package/es/graph/animation/animation/grow-cartesian.js +14 -14
  145. package/es/graph/animation/animation/grow-cartesian.js.map +1 -1
  146. package/es/graph/animation/animation/grow-interval.js +9 -9
  147. package/es/graph/animation/animation/grow-interval.js.map +1 -1
  148. package/es/graph/animation/animation/grow-points.js +9 -9
  149. package/es/graph/animation/animation/grow-points.js.map +1 -1
  150. package/es/graph/animation/animation/grow-polar.js +24 -24
  151. package/es/graph/animation/animation/grow-polar.js.map +1 -1
  152. package/es/graph/animation/animation/move.js +6 -6
  153. package/es/graph/animation/animation/move.js.map +1 -1
  154. package/es/graph/animation/animation/rotate.js +4 -4
  155. package/es/graph/animation/animation/rotate.js.map +1 -1
  156. package/es/graph/animation/animation/scale.js +5 -5
  157. package/es/graph/animation/animation/scale.js.map +1 -1
  158. package/es/graph/animation/animation/update.js +1 -3
  159. package/es/graph/animation/animation/update.js.map +1 -1
  160. package/es/graph/animation/animator.js +1 -1
  161. package/es/graph/animation/animator.js.map +1 -1
  162. package/es/graph/animation/morph.d.ts +2 -12
  163. package/es/graph/animation/morph.js +72 -159
  164. package/es/graph/animation/morph.js.map +1 -1
  165. package/es/graph/attributes/line.js.map +1 -1
  166. package/es/graph/canvas-renderer.d.ts +1 -1
  167. package/es/graph/canvas-renderer.js +5 -5
  168. package/es/graph/canvas-renderer.js.map +1 -1
  169. package/es/graph/element.d.ts +1 -2
  170. package/es/graph/element.js +17 -20
  171. package/es/graph/element.js.map +1 -1
  172. package/es/graph/glyph-element.js +3 -5
  173. package/es/graph/glyph-element.js.map +1 -1
  174. package/es/graph/layout/layout.d.ts +1 -0
  175. package/es/graph/layout/layout.js +6 -0
  176. package/es/graph/layout/layout.js.map +1 -1
  177. package/es/graph/mark/graphic.js +13 -7
  178. package/es/graph/mark/graphic.js.map +1 -1
  179. package/es/graph/util/point.js +10 -26
  180. package/es/graph/util/point.js.map +1 -1
  181. package/es/graph/view-diff.d.ts +8 -0
  182. package/es/graph/view-diff.js +89 -0
  183. package/es/graph/view-diff.js.map +1 -0
  184. package/es/index.d.ts +8 -1
  185. package/es/index.js +29 -1
  186. package/es/index.js.map +1 -1
  187. package/es/interactions/brush-filter.js +2 -1
  188. package/es/interactions/element-active.js +1 -2
  189. package/es/interactions/fish-eye.js +1 -1
  190. package/es/interactions/index.js +2 -1
  191. package/es/interactions/legend-filter.js +1 -1
  192. package/es/interactions/player-filter.js +1 -1
  193. package/es/interactions/roll-up.js +1 -1
  194. package/es/interactions/scrollbar-filter.js +1 -1
  195. package/es/interactions/slider-filter.js +1 -1
  196. package/es/interactions/toggle-state-mixin.js +1 -1
  197. package/es/interactions/tooltip.js +1 -1
  198. package/es/parse/coordinate.js +1 -1
  199. package/es/parse/event.d.ts +0 -2
  200. package/es/parse/event.js +4 -8
  201. package/es/parse/event.js.map +1 -1
  202. package/es/parse/mark.js +1 -1
  203. package/es/parse/option.js +1 -2
  204. package/es/parse/scale.js +1 -1
  205. package/es/parse/transform.js +1 -1
  206. package/es/parse/util.js +1 -1
  207. package/es/parse/util.js.map +1 -1
  208. package/es/parse/view.js +1 -1
  209. package/es/types/animate.d.ts +0 -1
  210. package/es/types/animate.js.map +1 -1
  211. package/es/types/element.d.ts +1 -5
  212. package/es/types/element.js.map +1 -1
  213. package/es/types/morph.d.ts +1 -2
  214. package/es/types/morph.js.map +1 -1
  215. package/es/types/renderer.d.ts +6 -1
  216. package/es/types/renderer.js.map +1 -1
  217. package/es/view/View.d.ts +3 -6
  218. package/es/view/View.js +53 -114
  219. package/es/view/View.js.map +1 -1
  220. package/es/view/animate.js +2 -1
  221. package/es/view/animate.js.map +1 -1
  222. package/es/view/constants.d.ts +2 -0
  223. package/es/view/constants.js +4 -0
  224. package/es/view/constants.js.map +1 -1
  225. package/es/view/events.d.ts +0 -1
  226. package/es/view/events.js +1 -15
  227. package/es/view/events.js.map +1 -1
  228. package/es/view/glyph.d.ts +4 -0
  229. package/es/view/glyph.js +11 -0
  230. package/es/view/glyph.js.map +1 -1
  231. package/es/view/group.js +2 -4
  232. package/es/view/group.js.map +1 -1
  233. package/es/view/mark-animate-mixin.d.ts +1 -0
  234. package/es/view/mark-animate-mixin.js +25 -0
  235. package/es/view/mark-animate-mixin.js.map +1 -0
  236. package/es/view/mark.d.ts +2 -0
  237. package/es/view/mark.js +32 -30
  238. package/es/view/mark.js.map +1 -1
  239. package/es/view/view-animate-mixin.d.ts +1 -0
  240. package/es/view/view-animate-mixin.js +16 -0
  241. package/es/view/view-animate-mixin.js.map +1 -0
  242. package/es/view/view-event-mixin.d.ts +1 -0
  243. package/es/view/view-event-mixin.js +90 -0
  244. package/es/view/view-event-mixin.js.map +1 -0
  245. package/es/view/view-morph-mixin.d.ts +1 -0
  246. package/es/view/view-morph-mixin.js +22 -0
  247. package/es/view/view-morph-mixin.js.map +1 -0
  248. package/package.json +12 -12
  249. package/cjs/graph/util/element.d.ts +0 -2
  250. package/cjs/graph/util/element.js +0 -10
  251. package/cjs/graph/util/element.js.map +0 -1
  252. package/es/graph/util/element.d.ts +0 -2
  253. package/es/graph/util/element.js +0 -8
  254. package/es/graph/util/element.js.map +0 -1
@@ -2,173 +2,86 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
- }), exports.Morph = void 0;
5
+ }), exports.morph = void 0;
6
6
 
7
- const vrender_core_1 = require("@visactor/vrender-core"), vutils_1 = require("@visactor/vutils"), util_1 = require("../../parse/util"), differ_1 = require("../mark/differ"), enums_1 = require("../enums"), EmptyKey = Symbol.for("key");
8
-
9
- class Morph {
10
- diffGrammar(prevGrammars, nextGrammars) {
11
- return (0, differ_1.diffSingle)(prevGrammars, nextGrammars, (grammar => {
12
- var _a;
13
- return null !== (_a = grammar.id()) && void 0 !== _a ? _a : Symbol();
7
+ const vrender_core_1 = require("@visactor/vrender-core"), vutils_1 = require("@visactor/vutils"), util_1 = require("../../parse/util"), differ_1 = require("../mark/differ"), doMorph = (prev, next, runningConfig, onEnd, parameters) => {
8
+ var _a, _b;
9
+ const morphData = {
10
+ prev: prev.map((element => element.getDatum())),
11
+ next: next.map((element => element.getDatum()))
12
+ }, morphElements = {
13
+ prev: prev.slice(),
14
+ next: next.slice()
15
+ }, easing = runningConfig.animation.easing, delay = (0, util_1.invokeFunctionType)(runningConfig.animation.delay, parameters, morphData, morphElements), duration = (0,
16
+ util_1.invokeFunctionType)(runningConfig.animation.duration, parameters, morphData, morphElements), oneByOne = (0,
17
+ util_1.invokeFunctionType)(runningConfig.animation.oneByOne, parameters, morphData, morphElements), splitPath = (0,
18
+ util_1.invokeFunctionType)(runningConfig.animation.splitPath, parameters, morphData, morphElements), individualDelay = (0,
19
+ vutils_1.isValidNumber)(oneByOne) && oneByOne > 0 ? index => (0, vutils_1.isNumber)(oneByOne) ? index * oneByOne : !0 === oneByOne ? index * duration : 0 : void 0;
20
+ 1 !== prev.length && 0 !== prev.length || 1 !== next.length ? 1 === prev.length && next.length > 1 ? (0,
21
+ vrender_core_1.oneToMultiMorph)(prev[0].getGraphicItem(), next.map((element => element.getGraphicItem())), {
22
+ delay: delay,
23
+ duration: duration,
24
+ easing: easing,
25
+ onEnd: onEnd,
26
+ individualDelay: individualDelay,
27
+ splitPath: splitPath
28
+ }) : prev.length > 1 && 1 === next.length && (0, vrender_core_1.multiToOneMorph)(prev.map((element => element.getGraphicItem())), next[0].getGraphicItem(), {
29
+ delay: delay,
30
+ duration: duration,
31
+ easing: easing,
32
+ onEnd: onEnd,
33
+ individualDelay: individualDelay,
34
+ splitPath: splitPath
35
+ }) : (0, vrender_core_1.morphPath)(null === (_b = null === (_a = prev[0]) || void 0 === _a ? void 0 : _a.getGraphicItem) || void 0 === _b ? void 0 : _b.call(_a), next[0].getGraphicItem(), {
36
+ delay: delay,
37
+ duration: duration,
38
+ easing: easing,
39
+ onEnd: onEnd
40
+ });
41
+ }, divideElements = (elements, count) => {
42
+ const divideLength = Math.floor(elements.length / count);
43
+ return new Array(count).fill(0).map(((i, index) => elements.slice(divideLength * index, index === count - 1 ? elements.length : divideLength * (index + 1))));
44
+ }, appendMorphKeyToElements = mark => {
45
+ const config = mark.getMorphConfig();
46
+ if (!(0, vutils_1.isNil)(config.morphElementKey)) {
47
+ const getter = (0, util_1.parseField)(config.morphElementKey);
48
+ mark.elements && mark.elements.forEach((el => {
49
+ el.morphKey = getter(el.getDatum());
14
50
  }));
15
51
  }
16
- diffMark(prevMarks, nextMarks, runningConfig) {
17
- const diffResult = {
18
- enter: [],
19
- exit: [],
20
- update: []
21
- };
22
- let prevDiffMarks = [], nextDiffMarks = [];
23
- prevMarks.forEach((mark => {
24
- mark.markType !== enums_1.GrammarMarkType.group && (runningConfig.morph && mark.getMorphConfig().morph || runningConfig.morphAll || runningConfig.reuse) ? prevDiffMarks.push(mark) : diffResult.exit.push({
25
- prev: [ mark ]
26
- });
27
- })), nextMarks.forEach((mark => {
28
- mark.markType !== enums_1.GrammarMarkType.group && (runningConfig.morph && mark.getMorphConfig().morph || runningConfig.morphAll || runningConfig.reuse) ? nextDiffMarks.push(mark) : diffResult.enter.push({
29
- next: [ mark ]
30
- });
31
- }));
32
- const keyDiffResult = this.diffUpdateByGroup(prevDiffMarks, nextDiffMarks, (mark => mark.getMorphConfig().morphKey), (mark => mark.getMorphConfig().morphKey));
33
- prevDiffMarks = keyDiffResult.prev, nextDiffMarks = keyDiffResult.next, diffResult.update = diffResult.update.concat(keyDiffResult.update);
34
- const nameDiffResult = this.diffUpdateByGroup(prevDiffMarks, nextDiffMarks, (mark => mark.id()), (mark => mark.id()));
35
- prevDiffMarks = nameDiffResult.prev, nextDiffMarks = nameDiffResult.next, diffResult.update = diffResult.update.concat(nameDiffResult.update);
36
- const prevParentGroup = (0, differ_1.groupData)(prevDiffMarks, (mark => {
37
- var _a, _b;
38
- return null === (_b = null === (_a = mark.group) || void 0 === _a ? void 0 : _a.id) || void 0 === _b ? void 0 : _b.call(_a);
39
- })), nextParentGroup = (0, differ_1.groupData)(nextDiffMarks, (mark => {
40
- var _a, _b;
41
- return null === (_b = null === (_a = mark.group) || void 0 === _a ? void 0 : _a.id) || void 0 === _b ? void 0 : _b.call(_a);
42
- }));
43
- return Object.keys(nextParentGroup).forEach((groupName => {
44
- const prevChildren = prevParentGroup.data.get(groupName), nextChildren = nextParentGroup.data.get(groupName);
45
- if (prevChildren && nextChildren) {
46
- for (let i = 0; i < Math.max(prevChildren.length, nextChildren.length); i += 1) {
47
- const prevChild = prevChildren[i], nextChild = nextChildren[i];
48
- prevChild && nextChild ? diffResult.update.push({
49
- prev: [ prevChild ],
50
- next: [ nextChild ]
51
- }) : prevChild ? diffResult.exit.push({
52
- prev: [ prevChild ]
53
- }) : nextChild && diffResult.enter.push({
54
- next: [ nextChild ]
55
- });
56
- }
57
- prevDiffMarks = prevDiffMarks.filter((mark => !prevChildren.includes(mark))), nextDiffMarks = nextDiffMarks.filter((mark => !nextChildren.includes(mark)));
58
- }
59
- })), prevDiffMarks.forEach((mark => diffResult.exit.push({
60
- prev: [ mark ]
61
- }))), nextDiffMarks.forEach((mark => diffResult.enter.push({
62
- next: [ mark ]
63
- }))), diffResult;
64
- }
65
- _appendMorphKeyToElements(mark) {
66
- const config = mark.getMorphConfig();
67
- if (!(0, vutils_1.isNil)(config.morphElementKey)) {
68
- const getter = (0, util_1.parseField)(config.morphElementKey);
69
- mark.elements && mark.elements.forEach((el => {
70
- el.morphKey = getter(el.getDatum());
71
- }));
72
- }
73
- }
74
- morph(prevMarks, nextMarks, runningConfig) {
75
- const prevElements = prevMarks.reduce(((elements, mark) => (this._appendMorphKeyToElements(mark),
76
- elements.concat(mark.elements))), []), nextElements = nextMarks.reduce(((elements, mark) => (this._appendMorphKeyToElements(mark),
77
- elements.concat(mark.elements))), []), diffResult = (0, differ_1.diffMultiple)(prevElements, nextElements, (element => {
78
- var _a;
79
- return null !== (_a = element.morphKey) && void 0 !== _a ? _a : element.key;
80
- }));
81
- prevMarks.forEach((mark => {
82
- var _a, _b;
83
- return null === (_b = null === (_a = mark.animate) || void 0 === _a ? void 0 : _a.disable) || void 0 === _b ? void 0 : _b.call(_a);
84
- })), nextMarks.forEach((mark => {
52
+ }, morph = (prevMarks, nextMarks, runningConfig) => {
53
+ const prevElements = prevMarks.reduce(((elements, mark) => (appendMorphKeyToElements(mark),
54
+ elements.concat(mark.elements))), []), nextElements = nextMarks.reduce(((elements, mark) => (appendMorphKeyToElements(mark),
55
+ elements.concat(mark.elements))), []), diffResult = (0, differ_1.diffMultiple)(prevElements, nextElements, (element => {
56
+ var _a;
57
+ return null !== (_a = element.morphKey) && void 0 !== _a ? _a : element.key;
58
+ }));
59
+ prevMarks.forEach((mark => {
60
+ var _a, _b;
61
+ return null === (_b = null === (_a = mark.animate) || void 0 === _a ? void 0 : _a.disable) || void 0 === _b ? void 0 : _b.call(_a);
62
+ })), nextMarks.forEach((mark => {
63
+ var _a, _b;
64
+ return null === (_b = null === (_a = mark.animate) || void 0 === _a ? void 0 : _a.disable) || void 0 === _b ? void 0 : _b.call(_a);
65
+ }));
66
+ const parameters = prevMarks.concat(nextMarks).reduce(((parameters, mark) => (Object.assign(parameters, mark.parameters()),
67
+ parameters)), {});
68
+ let morphCount = 0;
69
+ const onMorphEnd = () => {
70
+ morphCount -= 1, 0 === morphCount && nextMarks.forEach((mark => {
85
71
  var _a, _b;
86
- return null === (_b = null === (_a = mark.animate) || void 0 === _a ? void 0 : _a.disable) || void 0 === _b ? void 0 : _b.call(_a);
87
- }));
88
- const parameters = prevMarks.concat(nextMarks).reduce(((parameters, mark) => (Object.assign(parameters, mark.parameters()),
89
- parameters)), {});
90
- let morphCount = 0;
91
- const onMorphEnd = () => {
92
- morphCount -= 1, 0 === morphCount && nextMarks.forEach((mark => {
93
- var _a, _b;
94
- null === (_b = null === (_a = mark.animate) || void 0 === _a ? void 0 : _a.enable) || void 0 === _b || _b.call(_a);
95
- }));
96
- };
97
- diffResult.enter.forEach((diff => {
98
- diff.next.forEach((element => {
99
- this.doMorph([], [ element ], runningConfig, onMorphEnd, parameters);
100
- })), morphCount += 1;
101
- })), diffResult.update.forEach((diff => {
102
- const divideCount = Math.min(diff.prev.length, diff.next.length), prevDivide = this.divideElements(diff.prev, divideCount), nextDivide = this.divideElements(diff.next, divideCount);
103
- for (let i = 0; i < divideCount; i++) this.doMorph(prevDivide[i], nextDivide[i], runningConfig, onMorphEnd, parameters),
104
- morphCount += 1;
105
- }));
106
- }
107
- diffUpdateByGroup(prev, next, prevKey, nextKey) {
108
- const prevGroup = (0, differ_1.groupData)(prev, (datum => {
109
- var _a;
110
- return null !== (_a = prevKey(datum)) && void 0 !== _a ? _a : EmptyKey;
111
- })), nextGroup = (0, differ_1.groupData)(next, (datum => {
112
- var _a;
113
- return null !== (_a = nextKey(datum)) && void 0 !== _a ? _a : EmptyKey;
72
+ null === (_b = null === (_a = mark.animate) || void 0 === _a ? void 0 : _a.enable) || void 0 === _b || _b.call(_a);
114
73
  }));
115
- let prevAfterDiff = prev, nextAfterDiff = next;
116
- const update = [];
117
- return nextGroup.keys.forEach((key => {
118
- if (key !== EmptyKey) {
119
- const prevKeyData = prevGroup.data.get(key), nextKeyData = nextGroup.data.get(key);
120
- prevKeyData && nextKeyData && (update.push({
121
- prev: prevKeyData,
122
- next: nextKeyData
123
- }), prevAfterDiff = prevAfterDiff.filter((datum => !prevKeyData.includes(datum))),
124
- nextAfterDiff = nextAfterDiff.filter((datum => !nextKeyData.includes(datum))));
125
- }
126
- })), {
127
- prev: prevAfterDiff,
128
- next: nextAfterDiff,
129
- update: update
130
- };
131
- }
132
- doMorph(prev, next, runningConfig, onEnd, parameters) {
133
- var _a, _b;
134
- const morphData = {
135
- prev: prev.map((element => element.getDatum())),
136
- next: next.map((element => element.getDatum()))
137
- }, morphElements = {
138
- prev: prev.slice(),
139
- next: next.slice()
140
- }, easing = runningConfig.animation.easing, delay = (0, util_1.invokeFunctionType)(runningConfig.animation.delay, parameters, morphData, morphElements), duration = (0,
141
- util_1.invokeFunctionType)(runningConfig.animation.duration, parameters, morphData, morphElements), oneByOne = (0,
142
- util_1.invokeFunctionType)(runningConfig.animation.oneByOne, parameters, morphData, morphElements), splitPath = (0,
143
- util_1.invokeFunctionType)(runningConfig.animation.splitPath, parameters, morphData, morphElements), individualDelay = (0,
144
- vutils_1.isValidNumber)(oneByOne) && oneByOne > 0 ? index => (0, vutils_1.isNumber)(oneByOne) ? index * oneByOne : !0 === oneByOne ? index * duration : 0 : void 0;
145
- 1 !== prev.length && 0 !== prev.length || 1 !== next.length ? 1 === prev.length && next.length > 1 ? (0,
146
- vrender_core_1.oneToMultiMorph)(prev[0].getGraphicItem(), next.map((element => element.getGraphicItem())), {
147
- delay: delay,
148
- duration: duration,
149
- easing: easing,
150
- onEnd: onEnd,
151
- individualDelay: individualDelay,
152
- splitPath: splitPath
153
- }) : prev.length > 1 && 1 === next.length && (0, vrender_core_1.multiToOneMorph)(prev.map((element => element.getGraphicItem())), next[0].getGraphicItem(), {
154
- delay: delay,
155
- duration: duration,
156
- easing: easing,
157
- onEnd: onEnd,
158
- individualDelay: individualDelay,
159
- splitPath: splitPath
160
- }) : (0, vrender_core_1.morphPath)(null === (_b = null === (_a = prev[0]) || void 0 === _a ? void 0 : _a.getGraphicItem) || void 0 === _b ? void 0 : _b.call(_a), next[0].getGraphicItem(), {
161
- delay: delay,
162
- duration: duration,
163
- easing: easing,
164
- onEnd: onEnd
165
- });
166
- }
167
- divideElements(elements, count) {
168
- const divideLength = Math.floor(elements.length / count);
169
- return new Array(count).fill(0).map(((i, index) => elements.slice(divideLength * index, index === count - 1 ? elements.length : divideLength * (index + 1))));
170
- }
171
- }
74
+ };
75
+ diffResult.enter.forEach((diff => {
76
+ diff.next.forEach((element => {
77
+ doMorph([], [ element ], runningConfig, onMorphEnd, parameters);
78
+ })), morphCount += 1;
79
+ })), diffResult.update.forEach((diff => {
80
+ const divideCount = Math.min(diff.prev.length, diff.next.length), prevDivide = divideElements(diff.prev, divideCount), nextDivide = divideElements(diff.next, divideCount);
81
+ for (let i = 0; i < divideCount; i++) doMorph(prevDivide[i], nextDivide[i], runningConfig, onMorphEnd, parameters),
82
+ morphCount += 1;
83
+ }));
84
+ };
172
85
 
173
- exports.Morph = Morph;
86
+ exports.morph = morph;
174
87
  //# sourceMappingURL=morph.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graph/animation/morph.ts"],"names":[],"mappings":";;;AAAA,yDAAqF;AACrF,6CAAkE;AAIlE,2CAAkE;AAClE,2CAAqE;AACrE,oCAA2C;AAE3C,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAEnC,MAAa,KAAK;IAChB,WAAW,CAAyB,YAAiB,EAAE,YAAiB;QACtE,MAAM,GAAG,GAAG,CAAC,OAAU,EAAE,EAAE,WAAC,OAAA,MAAA,OAAO,CAAC,EAAE,EAAE,mCAAI,MAAM,EAAE,CAAA,EAAA,CAAC;QACrD,OAAO,IAAA,mBAAU,EAAC,YAAY,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;IACrD,CAAC;IAED,QAAQ,CAAC,SAAkB,EAAE,SAAkB,EAAE,aAA6B;QAC5E,MAAM,UAAU,GAAiC;YAC/C,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,EAAE;SACX,CAAC;QAEF,IAAI,aAAa,GAAY,EAAE,CAAC;QAChC,IAAI,aAAa,GAAY,EAAE,CAAC;QAGhC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,IAEE,IAAI,CAAC,QAAQ,KAAK,uBAAe,CAAC,KAAK;gBACvC,CAAC,CAAC,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,QAAQ,IAAI,aAAa,CAAC,KAAK,CAAC,EACvG;gBACA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC1B;iBAAM;gBACL,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACxC;QACH,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,IACE,IAAI,CAAC,QAAQ,KAAK,uBAAe,CAAC,KAAK;gBACvC,CAAC,CAAC,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,QAAQ,IAAI,aAAa,CAAC,KAAK,CAAC,EACvG;gBACA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC1B;iBAAM;gBACL,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACzC;QACH,CAAC,CAAC,CAAC;QAGH,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAC1C,aAAa,EACb,aAAa,EACb,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,QAAQ,EACtC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,QAAQ,CACvC,CAAC;QACF,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC;QACnC,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC;QACnC,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAGnE,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAC3C,aAAa,EACb,aAAa,EACb,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EACjB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAClB,CAAC;QACF,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC;QACpC,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC;QACpC,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAKpE,MAAM,eAAe,GAAG,IAAA,kBAAS,EAAC,aAAa,EAAE,IAAI,CAAC,EAAE,eAAC,OAAA,MAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,EAAE,kDAAI,CAAA,EAAA,CAAC,CAAC;QAC7E,MAAM,eAAe,GAAG,IAAA,kBAAS,EAAC,aAAa,EAAE,IAAI,CAAC,EAAE,eAAC,OAAA,MAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,EAAE,kDAAI,CAAA,EAAA,CAAC,CAAC;QAE7E,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YAC/C,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACzD,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACzD,IAAI,YAAY,IAAI,YAAY,EAAE;gBAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;oBAC9E,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;oBAClC,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;oBAClC,IAAI,SAAS,IAAI,SAAS,EAAE;wBAC1B,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;qBAClE;yBAAM,IAAI,SAAS,EAAE;wBACpB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;qBAC7C;yBAAM,IAAI,SAAS,EAAE;wBACpB,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;qBAC9C;iBACF;gBAED,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC3E,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;aAC5E;QACH,CAAC,CAAC,CAAC;QAGH,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACtE,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAEvE,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,yBAAyB,CAAC,IAAW;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAErC,IAAI,CAAC,IAAA,cAAK,EAAC,MAAM,CAAC,eAAe,CAAC,EAAE;YAClC,MAAM,MAAM,GAAG,IAAA,iBAAU,EAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YAElD,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;oBACxB,EAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC/C,CAAC,CAAC,CAAC;aACJ;SACF;IACH,CAAC;IAED,KAAK,CAAC,SAAkB,EAAE,SAAkB,EAAE,aAA6B;QACzE,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;YACvD,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;YAErC,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC,EAAE,EAAgB,CAAC,CAAC;QACrB,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;YACvD,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;YAErC,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC,EAAE,EAAgB,CAAC,CAAC;QAErB,MAAM,GAAG,GAAG,CAAC,OAAiB,EAAE,EAAE,WAAC,OAAA,MAAC,OAAe,CAAC,QAAQ,mCAAI,OAAO,CAAC,GAAG,CAAA,EAAA,CAAC;QAC5E,MAAM,UAAU,GAAG,IAAA,qBAAY,EAAC,YAAY,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;QAGjE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,eAAC,OAAA,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,OAAO,kDAAI,CAAA,EAAA,CAAC,CAAC;QACrD,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,eAAC,OAAA,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,OAAO,kDAAI,CAAA,EAAA,CAAC,CAAC;QAErD,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE;YACzE,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YAC7C,OAAO,UAAU,CAAC;QACpB,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,UAAU,GAAG,GAAG,EAAE;YACtB,UAAU,IAAI,CAAC,CAAC;YAChB,IAAI,UAAU,KAAK,CAAC,EAAE;gBACpB,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;;oBACvB,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,kDAAI,CAAC;gBAC3B,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC;QAEF,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC9B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC1B,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YACrE,CAAC,CAAC,CAAC;YACH,UAAU,IAAI,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjE,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;gBACpC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;gBAClF,UAAU,IAAI,CAAC,CAAC;aACjB;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,iBAAiB,CACvB,IAAS,EACT,IAAS,EACT,OAAsC,EACtC,OAAsC;QAEtC,MAAM,SAAS,GAAG,IAAA,kBAAS,EAAC,IAAI,EAAE,KAAK,CAAC,EAAE,WAAC,OAAA,MAAA,OAAO,CAAC,KAAK,CAAC,mCAAI,QAAQ,CAAA,EAAA,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,IAAA,kBAAS,EAAC,IAAI,EAAE,KAAK,CAAC,EAAE,WAAC,OAAA,MAAA,OAAO,CAAC,KAAK,CAAC,mCAAI,QAAQ,CAAA,EAAA,CAAC,CAAC;QAEvE,IAAI,aAAa,GAAG,IAAI,CAAC;QACzB,IAAI,aAAa,GAAG,IAAI,CAAC;QACzB,MAAM,MAAM,GAA+B,EAAE,CAAC;QAC9C,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC3B,IAAI,GAAG,KAAK,QAAQ,EAAE;gBACpB,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5C,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5C,IAAI,WAAW,IAAI,WAAW,EAAE;oBAC9B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;oBACtD,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC5E,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;iBAC7E;aACF;QACH,CAAC,CAAC,CAAC;QACH,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,aAAa;YACnB,MAAM;SACP,CAAC;IACJ,CAAC;IAEO,OAAO,CACb,IAAgB,EAChB,IAAgB,EAChB,aAA6B,EAC7B,KAAiB,EACjB,UAAe;;QAEf,MAAM,SAAS,GAAc;YAC3B,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC7C,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;SAC9C,CAAC;QACF,MAAM,aAAa,GAAkB;YACnC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE;YAClB,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE;SACnB,CAAC;QACF,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAA,yBAAkB,EAAC,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QACtG,MAAM,QAAQ,GAAG,IAAA,yBAAkB,EAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QAC5G,MAAM,QAAQ,GAAG,IAAA,yBAAkB,EAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QAC5G,MAAM,SAAS,GAAG,IAAA,yBAAkB,EAAC,aAAa,CAAC,SAAS,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QAC9G,MAAM,eAAe,GACnB,IAAA,sBAAa,EAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC;YACrC,CAAC,CAAC,CAAC,KAAa,EAAE,EAAE;gBAChB,IAAI,IAAA,iBAAQ,EAAC,QAAQ,CAAC,EAAE;oBACtB,OAAO,KAAK,GAAG,QAAQ,CAAC;iBACzB;qBAAM,IAAI,QAAQ,KAAK,IAAI,EAAE;oBAC5B,OAAO,KAAK,GAAG,QAAQ,CAAC;iBACzB;gBACD,OAAO,CAAC,CAAC;YACX,CAAC;YACH,CAAC,CAAC,SAAS,CAAC;QAGhB,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACjE,IAAA,wBAAS,EAAC,MAAA,MAAA,IAAI,CAAC,CAAC,CAAC,0CAAE,cAAc,kDAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;SACtG;aAAM,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/C,IAAA,8BAAe,EACb,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EACxB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,EAC7C,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,CAC/D,CAAC;SACH;aAAM,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/C,IAAA,8BAAe,EACb,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,EAC7C,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EACxB,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,CAC/D,CAAC;SACH;IACH,CAAC;IAEO,cAAc,CAAC,QAAoB,EAAE,KAAa;QACxD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;QACzD,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;YAC/C,OAAO,QAAQ,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,EAAE,KAAK,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QAClH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAtPD,sBAsPC","file":"morph.js","sourcesContent":["import { morphPath, multiToOneMorph, oneToMultiMorph } from '@visactor/vrender-core';\nimport { isNil, isNumber, isValidNumber } from '@visactor/vutils';\nimport type { IElement, IGrammarBase, IMark, IRunningConfig, MarkSpec } from '../../types';\nimport type { DiffResult } from '../../types/base';\nimport type { IMorph, MorphData, MorphElements } from '../../types/morph';\nimport { invokeFunctionType, parseField } from '../../parse/util';\nimport { diffMultiple, diffSingle, groupData } from '../mark/differ';\nimport { GrammarMarkType } from '../enums';\n\nconst EmptyKey = Symbol.for('key');\n\nexport class Morph implements IMorph {\n diffGrammar<U extends IGrammarBase>(prevGrammars: U[], nextGrammars: U[]): DiffResult<U, U> {\n const key = (grammar: U) => grammar.id() ?? Symbol();\n return diffSingle(prevGrammars, nextGrammars, key);\n }\n\n diffMark(prevMarks: IMark[], nextMarks: IMark[], runningConfig: IRunningConfig): DiffResult<IMark[], IMark[]> {\n const diffResult: DiffResult<IMark[], IMark[]> = {\n enter: [],\n exit: [],\n update: []\n };\n\n let prevDiffMarks: IMark[] = [];\n let nextDiffMarks: IMark[] = [];\n\n // filter out marks & specs which will not morph\n prevMarks.forEach(mark => {\n if (\n // group mark does not support reusing or morphing\n mark.markType !== GrammarMarkType.group &&\n ((runningConfig.morph && mark.getMorphConfig().morph) || runningConfig.morphAll || runningConfig.reuse)\n ) {\n prevDiffMarks.push(mark);\n } else {\n diffResult.exit.push({ prev: [mark] });\n }\n });\n nextMarks.forEach(mark => {\n if (\n mark.markType !== GrammarMarkType.group &&\n ((runningConfig.morph && mark.getMorphConfig().morph) || runningConfig.morphAll || runningConfig.reuse)\n ) {\n nextDiffMarks.push(mark);\n } else {\n diffResult.enter.push({ next: [mark] });\n }\n });\n\n // 1. match by custom key\n const keyDiffResult = this.diffUpdateByGroup(\n prevDiffMarks,\n nextDiffMarks,\n mark => mark.getMorphConfig().morphKey,\n mark => mark.getMorphConfig().morphKey\n );\n prevDiffMarks = keyDiffResult.prev;\n nextDiffMarks = keyDiffResult.next;\n diffResult.update = diffResult.update.concat(keyDiffResult.update);\n\n // 2. match by name\n const nameDiffResult = this.diffUpdateByGroup(\n prevDiffMarks,\n nextDiffMarks,\n mark => mark.id(),\n mark => mark.id()\n );\n prevDiffMarks = nameDiffResult.prev;\n nextDiffMarks = nameDiffResult.next;\n diffResult.update = diffResult.update.concat(nameDiffResult.update);\n\n // 3. match by index\n\n // FIXME: mark index cannot be get before executing, index is decided by remove/order for now\n const prevParentGroup = groupData(prevDiffMarks, mark => mark.group?.id?.());\n const nextParentGroup = groupData(nextDiffMarks, mark => mark.group?.id?.());\n\n Object.keys(nextParentGroup).forEach(groupName => {\n const prevChildren = prevParentGroup.data.get(groupName);\n const nextChildren = nextParentGroup.data.get(groupName);\n if (prevChildren && nextChildren) {\n for (let i = 0; i < Math.max(prevChildren.length, nextChildren.length); i += 1) {\n const prevChild = prevChildren[i];\n const nextChild = nextChildren[i];\n if (prevChild && nextChild) {\n diffResult.update.push({ prev: [prevChild], next: [nextChild] });\n } else if (prevChild) {\n diffResult.exit.push({ prev: [prevChild] });\n } else if (nextChild) {\n diffResult.enter.push({ next: [nextChild] });\n }\n }\n\n prevDiffMarks = prevDiffMarks.filter(mark => !prevChildren.includes(mark));\n nextDiffMarks = nextDiffMarks.filter(mark => !nextChildren.includes(mark));\n }\n });\n\n // 4. handle unmatched marks\n prevDiffMarks.forEach(mark => diffResult.exit.push({ prev: [mark] }));\n nextDiffMarks.forEach(mark => diffResult.enter.push({ next: [mark] }));\n\n return diffResult;\n }\n\n private _appendMorphKeyToElements(mark: IMark) {\n const config = mark.getMorphConfig();\n\n if (!isNil(config.morphElementKey)) {\n const getter = parseField(config.morphElementKey);\n\n if (mark.elements) {\n mark.elements.forEach(el => {\n (el as any).morphKey = getter(el.getDatum());\n });\n }\n }\n }\n\n morph(prevMarks: IMark[], nextMarks: IMark[], runningConfig: IRunningConfig) {\n const prevElements = prevMarks.reduce((elements, mark) => {\n this._appendMorphKeyToElements(mark);\n\n return elements.concat(mark.elements);\n }, [] as IElement[]);\n const nextElements = nextMarks.reduce((elements, mark) => {\n this._appendMorphKeyToElements(mark);\n\n return elements.concat(mark.elements);\n }, [] as IElement[]);\n\n const key = (element: IElement) => (element as any).morphKey ?? element.key;\n const diffResult = diffMultiple(prevElements, nextElements, key);\n\n // disable normal animations of previous marks\n prevMarks.forEach(mark => mark.animate?.disable?.());\n nextMarks.forEach(mark => mark.animate?.disable?.());\n\n const parameters = prevMarks.concat(nextMarks).reduce((parameters, mark) => {\n Object.assign(parameters, mark.parameters());\n return parameters;\n }, {});\n\n let morphCount = 0;\n const onMorphEnd = () => {\n morphCount -= 1;\n if (morphCount === 0) {\n nextMarks.forEach(mark => {\n mark.animate?.enable?.();\n });\n }\n };\n // no animation for exit result\n diffResult.enter.forEach(diff => {\n diff.next.forEach(element => {\n this.doMorph([], [element], runningConfig, onMorphEnd, parameters);\n });\n morphCount += 1;\n });\n diffResult.update.forEach(diff => {\n const divideCount = Math.min(diff.prev.length, diff.next.length);\n const prevDivide = this.divideElements(diff.prev, divideCount);\n const nextDivide = this.divideElements(diff.next, divideCount);\n for (let i = 0; i < divideCount; i++) {\n this.doMorph(prevDivide[i], nextDivide[i], runningConfig, onMorphEnd, parameters);\n morphCount += 1;\n }\n });\n }\n\n private diffUpdateByGroup<U extends IMark | MarkSpec, V extends IMark | MarkSpec>(\n prev: U[],\n next: V[],\n prevKey: (datum: U) => symbol | string,\n nextKey: (datum: V) => symbol | string\n ) {\n const prevGroup = groupData(prev, datum => prevKey(datum) ?? EmptyKey);\n const nextGroup = groupData(next, datum => nextKey(datum) ?? EmptyKey);\n\n let prevAfterDiff = prev;\n let nextAfterDiff = next;\n const update: { prev: U[]; next: V[] }[] = [];\n nextGroup.keys.forEach(key => {\n if (key !== EmptyKey) {\n const prevKeyData = prevGroup.data.get(key);\n const nextKeyData = nextGroup.data.get(key);\n if (prevKeyData && nextKeyData) {\n update.push({ prev: prevKeyData, next: nextKeyData });\n prevAfterDiff = prevAfterDiff.filter(datum => !prevKeyData.includes(datum));\n nextAfterDiff = nextAfterDiff.filter(datum => !nextKeyData.includes(datum));\n }\n }\n });\n return {\n prev: prevAfterDiff,\n next: nextAfterDiff,\n update\n };\n }\n\n private doMorph(\n prev: IElement[],\n next: IElement[],\n runningConfig: IRunningConfig,\n onEnd: () => void,\n parameters: any\n ) {\n const morphData: MorphData = {\n prev: prev.map(element => element.getDatum()),\n next: next.map(element => element.getDatum())\n };\n const morphElements: MorphElements = {\n prev: prev.slice(),\n next: next.slice()\n };\n const easing = runningConfig.animation.easing;\n const delay = invokeFunctionType(runningConfig.animation.delay, parameters, morphData, morphElements);\n const duration = invokeFunctionType(runningConfig.animation.duration, parameters, morphData, morphElements);\n const oneByOne = invokeFunctionType(runningConfig.animation.oneByOne, parameters, morphData, morphElements);\n const splitPath = invokeFunctionType(runningConfig.animation.splitPath, parameters, morphData, morphElements);\n const individualDelay =\n isValidNumber(oneByOne) && oneByOne > 0\n ? (index: number) => {\n if (isNumber(oneByOne)) {\n return index * oneByOne;\n } else if (oneByOne === true) {\n return index * duration;\n }\n return 0;\n }\n : undefined;\n\n // if no previous item, still execute morph animation\n if ((prev.length === 1 || prev.length === 0) && next.length === 1) {\n morphPath(prev[0]?.getGraphicItem?.(), next[0].getGraphicItem(), { delay, duration, easing, onEnd });\n } else if (prev.length === 1 && next.length > 1) {\n oneToMultiMorph(\n prev[0].getGraphicItem(),\n next.map(element => element.getGraphicItem()),\n { delay, duration, easing, onEnd, individualDelay, splitPath }\n );\n } else if (prev.length > 1 && next.length === 1) {\n multiToOneMorph(\n prev.map(element => element.getGraphicItem()),\n next[0].getGraphicItem(),\n { delay, duration, easing, onEnd, individualDelay, splitPath }\n );\n }\n }\n\n private divideElements(elements: IElement[], count: number) {\n const divideLength = Math.floor(elements.length / count);\n return new Array(count).fill(0).map((i, index) => {\n return elements.slice(divideLength * index, index === count - 1 ? elements.length : divideLength * (index + 1));\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/graph/animation/morph.ts"],"names":[],"mappings":";;;AAAA,yDAAqF;AACrF,6CAAkE;AAGlE,2CAAkE;AAClE,2CAA8C;AAE9C,MAAM,OAAO,GAAG,CACd,IAAgB,EAChB,IAAgB,EAChB,aAA6B,EAC7B,KAAiB,EACjB,UAAe,EACf,EAAE;;IACF,MAAM,SAAS,GAAc;QAC3B,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC7C,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;KAC9C,CAAC;IACF,MAAM,aAAa,GAAkB;QACnC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE;QAClB,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE;KACnB,CAAC;IACF,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC;IAC9C,MAAM,KAAK,GAAG,IAAA,yBAAkB,EAAC,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IACtG,MAAM,QAAQ,GAAG,IAAA,yBAAkB,EAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IAC5G,MAAM,QAAQ,GAAG,IAAA,yBAAkB,EAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IAC5G,MAAM,SAAS,GAAG,IAAA,yBAAkB,EAAC,aAAa,CAAC,SAAS,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IAC9G,MAAM,eAAe,GACnB,IAAA,sBAAa,EAAC,QAAQ,CAAC,IAAK,QAAmB,GAAG,CAAC;QACjD,CAAC,CAAC,CAAC,KAAa,EAAE,EAAE;YAChB,IAAI,IAAA,iBAAQ,EAAC,QAAQ,CAAC,EAAE;gBACtB,OAAO,KAAK,GAAI,QAAmB,CAAC;aACrC;iBAAM,IAAI,QAAQ,KAAK,IAAI,EAAE;gBAC5B,OAAO,KAAK,GAAG,QAAQ,CAAC;aACzB;YACD,OAAO,CAAC,CAAC;QACX,CAAC;QACH,CAAC,CAAC,SAAS,CAAC;IAGhB,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACjE,IAAA,wBAAS,EAAC,MAAA,MAAA,IAAI,CAAC,CAAC,CAAC,0CAAE,cAAc,kDAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;KACtG;SAAM,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QAC/C,IAAA,8BAAe,EACb,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EACxB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,EAC7C,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,CAC/D,CAAC;KACH;SAAM,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QAC/C,IAAA,8BAAe,EACb,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,EAC7C,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EACxB,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,CAC/D,CAAC;KACH;AACH,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,QAAoB,EAAE,KAAa,EAAE,EAAE;IAC7D,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;IACzD,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;QAC/C,OAAO,QAAQ,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,EAAE,KAAK,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAClH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,IAAW,EAAE,EAAE;IAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IAErC,IAAI,CAAC,IAAA,cAAK,EAAC,MAAM,CAAC,eAAe,CAAC,EAAE;QAClC,MAAM,MAAM,GAAG,IAAA,iBAAU,EAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAElD,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;gBACxB,EAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;SACJ;KACF;AACH,CAAC,CAAC;AAEK,MAAM,KAAK,GAAG,CAAC,SAAkB,EAAE,SAAkB,EAAE,aAA6B,EAAE,EAAE;IAC7F,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;QACvD,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAE/B,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC,EAAE,EAAgB,CAAC,CAAC;IACrB,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;QACvD,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAE/B,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC,EAAE,EAAgB,CAAC,CAAC;IAErB,MAAM,GAAG,GAAG,CAAC,OAAiB,EAAE,EAAE,WAAC,OAAA,MAAC,OAAe,CAAC,QAAQ,mCAAI,OAAO,CAAC,GAAG,CAAA,EAAA,CAAC;IAC5E,MAAM,UAAU,GAAG,IAAA,qBAAY,EAAC,YAAY,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;IAGjE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,eAAC,OAAA,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,OAAO,kDAAI,CAAA,EAAA,CAAC,CAAC;IACrD,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,eAAC,OAAA,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,OAAO,kDAAI,CAAA,EAAA,CAAC,CAAC;IAErD,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE;QACzE,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC7C,OAAO,UAAU,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,UAAU,IAAI,CAAC,CAAC;QAChB,IAAI,UAAU,KAAK,CAAC,EAAE;YACpB,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;;gBACvB,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,kDAAI,CAAC;YAC3B,CAAC,CAAC,CAAC;SACJ;IACH,CAAC,CAAC;IAEF,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC9B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC1B,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QACH,UAAU,IAAI,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;YACpC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YAC7E,UAAU,IAAI,CAAC,CAAC;SACjB;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAjDW,QAAA,KAAK,SAiDhB","file":"morph.js","sourcesContent":["import { morphPath, multiToOneMorph, oneToMultiMorph } from '@visactor/vrender-core';\nimport { isNil, isNumber, isValidNumber } from '@visactor/vutils';\nimport type { IElement, IMark, IRunningConfig } from '../../types';\nimport type { MorphData, MorphElements } from '../../types/morph';\nimport { invokeFunctionType, parseField } from '../../parse/util';\nimport { diffMultiple } from '../mark/differ';\n\nconst doMorph = (\n prev: IElement[],\n next: IElement[],\n runningConfig: IRunningConfig,\n onEnd: () => void,\n parameters: any\n) => {\n const morphData: MorphData = {\n prev: prev.map(element => element.getDatum()),\n next: next.map(element => element.getDatum())\n };\n const morphElements: MorphElements = {\n prev: prev.slice(),\n next: next.slice()\n };\n const easing = runningConfig.animation.easing;\n const delay = invokeFunctionType(runningConfig.animation.delay, parameters, morphData, morphElements);\n const duration = invokeFunctionType(runningConfig.animation.duration, parameters, morphData, morphElements);\n const oneByOne = invokeFunctionType(runningConfig.animation.oneByOne, parameters, morphData, morphElements);\n const splitPath = invokeFunctionType(runningConfig.animation.splitPath, parameters, morphData, morphElements);\n const individualDelay =\n isValidNumber(oneByOne) && (oneByOne as number) > 0\n ? (index: number) => {\n if (isNumber(oneByOne)) {\n return index * (oneByOne as number);\n } else if (oneByOne === true) {\n return index * duration;\n }\n return 0;\n }\n : undefined;\n\n // if no previous item, still execute morph animation\n if ((prev.length === 1 || prev.length === 0) && next.length === 1) {\n morphPath(prev[0]?.getGraphicItem?.(), next[0].getGraphicItem(), { delay, duration, easing, onEnd });\n } else if (prev.length === 1 && next.length > 1) {\n oneToMultiMorph(\n prev[0].getGraphicItem(),\n next.map(element => element.getGraphicItem()),\n { delay, duration, easing, onEnd, individualDelay, splitPath }\n );\n } else if (prev.length > 1 && next.length === 1) {\n multiToOneMorph(\n prev.map(element => element.getGraphicItem()),\n next[0].getGraphicItem(),\n { delay, duration, easing, onEnd, individualDelay, splitPath }\n );\n }\n};\n\nconst divideElements = (elements: IElement[], count: number) => {\n const divideLength = Math.floor(elements.length / count);\n return new Array(count).fill(0).map((i, index) => {\n return elements.slice(divideLength * index, index === count - 1 ? elements.length : divideLength * (index + 1));\n });\n};\n\nconst appendMorphKeyToElements = (mark: IMark) => {\n const config = mark.getMorphConfig();\n\n if (!isNil(config.morphElementKey)) {\n const getter = parseField(config.morphElementKey);\n\n if (mark.elements) {\n mark.elements.forEach(el => {\n (el as any).morphKey = getter(el.getDatum());\n });\n }\n }\n};\n\nexport const morph = (prevMarks: IMark[], nextMarks: IMark[], runningConfig: IRunningConfig) => {\n const prevElements = prevMarks.reduce((elements, mark) => {\n appendMorphKeyToElements(mark);\n\n return elements.concat(mark.elements);\n }, [] as IElement[]);\n const nextElements = nextMarks.reduce((elements, mark) => {\n appendMorphKeyToElements(mark);\n\n return elements.concat(mark.elements);\n }, [] as IElement[]);\n\n const key = (element: IElement) => (element as any).morphKey ?? element.key;\n const diffResult = diffMultiple(prevElements, nextElements, key);\n\n // disable normal animations of previous marks\n prevMarks.forEach(mark => mark.animate?.disable?.());\n nextMarks.forEach(mark => mark.animate?.disable?.());\n\n const parameters = prevMarks.concat(nextMarks).reduce((parameters, mark) => {\n Object.assign(parameters, mark.parameters());\n return parameters;\n }, {});\n\n let morphCount = 0;\n const onMorphEnd = () => {\n morphCount -= 1;\n if (morphCount === 0) {\n nextMarks.forEach(mark => {\n mark.animate?.enable?.();\n });\n }\n };\n // no animation for exit result\n diffResult.enter.forEach(diff => {\n diff.next.forEach(element => {\n doMorph([], [element], runningConfig, onMorphEnd, parameters);\n });\n morphCount += 1;\n });\n diffResult.update.forEach(diff => {\n const divideCount = Math.min(diff.prev.length, diff.next.length);\n const prevDivide = divideElements(diff.prev, divideCount);\n const nextDivide = divideElements(diff.next, divideCount);\n for (let i = 0; i < divideCount; i++) {\n doMorph(prevDivide[i], nextDivide[i], runningConfig, onMorphEnd, parameters);\n morphCount += 1;\n }\n });\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graph/attributes/line.ts"],"names":[],"mappings":"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","file":"line.js","sourcesContent":["import type { IColor, IColorStop, ISegment } from '@visactor/vrender-core';\nimport type { IPointLike } from '@visactor/vutils';\nimport { isNil, isString } from '@visactor/vutils';\nimport { transformAttributes } from './transform';\nimport { GrammarMarkType } from '../enums';\nimport type { IElement } from '../../types';\n\nconst isStopsEqual = (prev: IColorStop[], next: IColorStop[]) => {\n if (prev === next) {\n return true;\n }\n const prevLength = (prev && prev.length) ?? 0;\n const nextLength = (next && next.length) ?? 0;\n\n if (prevLength !== nextLength || prevLength === 0) {\n return false;\n }\n\n return prev.every((prevEntry, prevIndex) => {\n return (\n (!prevEntry && !next[prevIndex]) ||\n (prevEntry &&\n next[prevIndex] &&\n prevEntry.color === next[prevIndex].color &&\n prevEntry.offset === next[prevIndex].offset)\n );\n });\n};\n\nconst isColorAttrEqual = (prev: IColor, next: IColor) => {\n if (prev === next) {\n return true;\n }\n\n if (typeof prev !== typeof next) {\n return false;\n }\n\n if (isString(prev)) {\n return false;\n }\n\n if (prev.gradient !== (next as any).gradient) {\n return false;\n }\n\n const prevKeys = Object.keys(prev);\n const nextKeys = Object.keys(next);\n\n if (prevKeys.length !== nextKeys.length) {\n return false;\n }\n\n return prevKeys.every(key => {\n if (key === 'stops') {\n return isStopsEqual(prev[key], next[key]);\n }\n\n return prev[key] === next[key];\n });\n};\n\nconst isLineDashEqual = (prev: number[], next: number[]) => {\n if (prev.length !== next.length) {\n return false;\n }\n\n if (prev.join('-') === next.join('-')) {\n return true;\n }\n\n return false;\n};\n\nconst isSegmentAttrEqual = (prev: any, next: any, key: string) => {\n if (isNil(prev) && isNil(next)) {\n return true;\n }\n\n if (isNil(prev)) {\n return false;\n }\n\n if (isNil(next)) {\n return false;\n }\n\n if (key === 'lineDash') {\n return isLineDashEqual(prev, next);\n }\n\n if (key === 'stroke' || key === 'fill') {\n return isColorAttrEqual(prev, next);\n }\n\n return prev === next;\n};\n\nconst fillAttrs = ['fill', 'fillOpacity', 'background', 'texture', 'texturePadding', 'textureSize', 'textureColor'];\nconst strokeAttrs = [\n 'stroke',\n 'strokeOpacity',\n 'lineDash',\n 'lineDashOffset',\n 'lineCap',\n 'lineJoin',\n 'lineWidth',\n 'miterLimit'\n];\nconst areaAttrs = fillAttrs.concat(strokeAttrs);\n\n/**\n * 生成用于渲染的点数组\n * @param {*} item\n * @returns {IPointLike[]}\n */\nexport function getLineSegmentConfigs(items: any[], points: any[], element?: IElement) {\n if (!items || items.length <= 1) {\n return null;\n }\n\n const checkAttributes = element?.mark?.markType === 'area' ? areaAttrs : strokeAttrs;\n\n const segments: any[] = [];\n let prevSegmentAttrs: any = null;\n\n items.forEach((item, index) => {\n if (\n !prevSegmentAttrs ||\n !checkAttributes.every(key => {\n return isSegmentAttrEqual(prevSegmentAttrs[key], item[key], key);\n })\n ) {\n if (segments.length) {\n segments[segments.length - 1].endIndex = index;\n }\n\n prevSegmentAttrs = item;\n segments.push({\n attrs: prevSegmentAttrs,\n startIndex: index\n });\n }\n });\n\n if (segments.length >= 2) {\n return segments.map(entry => {\n const res = parseCollectionMarkAttributes(entry.attrs) as any;\n\n res.points = points.slice(entry.startIndex, isNil(entry.endIndex) ? points.length : entry.endIndex);\n return res;\n });\n }\n\n return null;\n}\n\n/**\n * get the segments for connectNulls\n * @param {*} item\n * @returns {IPointLike[]}\n */\nexport function getConnectLineSegmentConfigs(items: any[], points: IPointLike[], element?: IElement) {\n if (!items || items.length <= 1) {\n return null;\n }\n const enableSegments = element ? element.mark.getSpec().enableSegments : false;\n let segments: { isConnect?: boolean; points: any[]; items: any[] }[] = [];\n let point: IPointLike = null;\n let isPrevDefined: boolean;\n let curSegment: { isConnect?: boolean; points: any[]; items: any[] };\n\n items.forEach((item, index) => {\n point = points[index];\n\n if (point && point.defined !== false) {\n if (!isPrevDefined) {\n // start a segment\n curSegment = {\n items: [],\n points: []\n };\n segments.push(curSegment);\n }\n\n curSegment.points.push(point);\n curSegment.items.push(item);\n\n if (isPrevDefined === false) {\n curSegment.isConnect = true;\n\n curSegment = {\n items: [],\n points: []\n };\n segments.push(curSegment);\n }\n\n isPrevDefined = true;\n } else {\n isPrevDefined = false;\n }\n });\n\n segments = segments.filter(seg => seg.points.length > 0);\n\n if (segments.length >= 2) {\n const res: ISegment[] = [];\n\n segments.forEach(entry => {\n if (entry.isConnect) {\n res.push({\n points: entry.points,\n isConnect: true\n } as ISegment);\n return;\n } else if (enableSegments) {\n const subSegments = getLineSegmentConfigs(entry.items, entry.points, element);\n\n if (subSegments) {\n subSegments.forEach(subSeg => {\n res.push(subSeg);\n });\n\n return;\n }\n }\n\n const seg = parseCollectionMarkAttributes(entry.items[0]) as any;\n seg.points = entry.points;\n\n res.push(seg);\n });\n\n return res;\n } else if (enableSegments) {\n return getLineSegmentConfigs(items, points, element);\n }\n\n return null;\n}\n\nexport function getLinePointsFromSegments(segments: any[]) {\n if (!segments) {\n return null;\n }\n return segments.reduce((points, segment) => {\n return points.concat(segment.points);\n }, []);\n}\n\nexport function parseCollectionMarkAttributes(itemNextAttrs: any) {\n const result = {};\n\n if (!itemNextAttrs) {\n return result;\n }\n\n Object.keys(itemNextAttrs).forEach(key => {\n if (\n key === 'x' ||\n key === 'y' ||\n key === 'x1' ||\n key === 'y1' ||\n key === 'defined' ||\n key === 'size' ||\n key === 'width' ||\n key === 'height' ||\n key === 'context'\n ) {\n return;\n }\n result[key] = itemNextAttrs[key];\n });\n\n return result;\n}\n"]}
1
+ {"version":3,"sources":["../src/graph/attributes/line.ts"],"names":[],"mappings":"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","file":"line.js","sourcesContent":["import type { IColor, IColorStop, ISegment } from '@visactor/vrender-core';\nimport type { IPointLike } from '@visactor/vutils';\nimport { isNil, isString } from '@visactor/vutils';\nimport type { IElement } from '../../types';\n\nconst isStopsEqual = (prev: IColorStop[], next: IColorStop[]) => {\n if (prev === next) {\n return true;\n }\n const prevLength = (prev && prev.length) ?? 0;\n const nextLength = (next && next.length) ?? 0;\n\n if (prevLength !== nextLength || prevLength === 0) {\n return false;\n }\n\n return prev.every((prevEntry, prevIndex) => {\n return (\n (!prevEntry && !next[prevIndex]) ||\n (prevEntry &&\n next[prevIndex] &&\n prevEntry.color === next[prevIndex].color &&\n prevEntry.offset === next[prevIndex].offset)\n );\n });\n};\n\nconst isColorAttrEqual = (prev: IColor, next: IColor) => {\n if (prev === next) {\n return true;\n }\n\n if (typeof prev !== typeof next) {\n return false;\n }\n\n if (isString(prev)) {\n return false;\n }\n\n if (prev.gradient !== (next as any).gradient) {\n return false;\n }\n\n const prevKeys = Object.keys(prev);\n const nextKeys = Object.keys(next);\n\n if (prevKeys.length !== nextKeys.length) {\n return false;\n }\n\n return prevKeys.every(key => {\n if (key === 'stops') {\n return isStopsEqual(prev[key], next[key]);\n }\n\n return prev[key] === next[key];\n });\n};\n\nconst isLineDashEqual = (prev: number[], next: number[]) => {\n if (prev.length !== next.length) {\n return false;\n }\n\n if (prev.join('-') === next.join('-')) {\n return true;\n }\n\n return false;\n};\n\nconst isSegmentAttrEqual = (prev: any, next: any, key: string) => {\n if (isNil(prev) && isNil(next)) {\n return true;\n }\n\n if (isNil(prev)) {\n return false;\n }\n\n if (isNil(next)) {\n return false;\n }\n\n if (key === 'lineDash') {\n return isLineDashEqual(prev, next);\n }\n\n if (key === 'stroke' || key === 'fill') {\n return isColorAttrEqual(prev, next);\n }\n\n return prev === next;\n};\n\nconst fillAttrs = ['fill', 'fillOpacity', 'background', 'texture', 'texturePadding', 'textureSize', 'textureColor'];\nconst strokeAttrs = [\n 'stroke',\n 'strokeOpacity',\n 'lineDash',\n 'lineDashOffset',\n 'lineCap',\n 'lineJoin',\n 'lineWidth',\n 'miterLimit'\n];\nconst areaAttrs = fillAttrs.concat(strokeAttrs);\n\n/**\n * 生成用于渲染的点数组\n * @param {*} item\n * @returns {IPointLike[]}\n */\nexport function getLineSegmentConfigs(items: any[], points: any[], element?: IElement) {\n if (!items || items.length <= 1) {\n return null;\n }\n\n const checkAttributes = element?.mark?.markType === 'area' ? areaAttrs : strokeAttrs;\n\n const segments: any[] = [];\n let prevSegmentAttrs: any = null;\n\n items.forEach((item, index) => {\n if (\n !prevSegmentAttrs ||\n !checkAttributes.every(key => {\n return isSegmentAttrEqual(prevSegmentAttrs[key], item[key], key);\n })\n ) {\n if (segments.length) {\n segments[segments.length - 1].endIndex = index;\n }\n\n prevSegmentAttrs = item;\n segments.push({\n attrs: prevSegmentAttrs,\n startIndex: index\n });\n }\n });\n\n if (segments.length >= 2) {\n return segments.map(entry => {\n const res = parseCollectionMarkAttributes(entry.attrs) as any;\n\n res.points = points.slice(entry.startIndex, isNil(entry.endIndex) ? points.length : entry.endIndex);\n return res;\n });\n }\n\n return null;\n}\n\n/**\n * get the segments for connectNulls\n * @param {*} item\n * @returns {IPointLike[]}\n */\nexport function getConnectLineSegmentConfigs(items: any[], points: IPointLike[], element?: IElement) {\n if (!items || items.length <= 1) {\n return null;\n }\n const enableSegments = element ? element.mark.getSpec().enableSegments : false;\n let segments: { isConnect?: boolean; points: any[]; items: any[] }[] = [];\n let point: IPointLike = null;\n let isPrevDefined: boolean;\n let curSegment: { isConnect?: boolean; points: any[]; items: any[] };\n\n items.forEach((item, index) => {\n point = points[index];\n\n if (point && point.defined !== false) {\n if (!isPrevDefined) {\n // start a segment\n curSegment = {\n items: [],\n points: []\n };\n segments.push(curSegment);\n }\n\n curSegment.points.push(point);\n curSegment.items.push(item);\n\n if (isPrevDefined === false) {\n curSegment.isConnect = true;\n\n curSegment = {\n items: [],\n points: []\n };\n segments.push(curSegment);\n }\n\n isPrevDefined = true;\n } else {\n isPrevDefined = false;\n }\n });\n\n segments = segments.filter(seg => seg.points.length > 0);\n\n if (segments.length >= 2) {\n const res: ISegment[] = [];\n\n segments.forEach(entry => {\n if (entry.isConnect) {\n res.push({\n points: entry.points,\n isConnect: true\n } as ISegment);\n return;\n } else if (enableSegments) {\n const subSegments = getLineSegmentConfigs(entry.items, entry.points, element);\n\n if (subSegments) {\n subSegments.forEach(subSeg => {\n res.push(subSeg);\n });\n\n return;\n }\n }\n\n const seg = parseCollectionMarkAttributes(entry.items[0]) as any;\n seg.points = entry.points;\n\n res.push(seg);\n });\n\n return res;\n } else if (enableSegments) {\n return getLineSegmentConfigs(items, points, element);\n }\n\n return null;\n}\n\nexport function getLinePointsFromSegments(segments: any[]) {\n if (!segments) {\n return null;\n }\n return segments.reduce((points, segment) => {\n return points.concat(segment.points);\n }, []);\n}\n\nexport function parseCollectionMarkAttributes(itemNextAttrs: any) {\n const result = {};\n\n if (!itemNextAttrs) {\n return result;\n }\n\n Object.keys(itemNextAttrs).forEach(key => {\n if (\n key === 'x' ||\n key === 'y' ||\n key === 'x1' ||\n key === 'y1' ||\n key === 'defined' ||\n key === 'size' ||\n key === 'width' ||\n key === 'height' ||\n key === 'context'\n ) {\n return;\n }\n result[key] = itemNextAttrs[key];\n });\n\n return result;\n}\n"]}
@@ -1,8 +1,8 @@
1
1
  import type { IBoundsLike } from '@visactor/vutils';
2
2
  import type { IColor, Stage } from '@visactor/vrender-core';
3
- import { Gesture } from '@visactor/vrender-kits';
4
3
  import type { IViewOptions, IView, IViewEventConfig } from '../types';
5
4
  import type { IRenderer } from '../types/renderer';
5
+ import type { Gesture } from '@visactor/vrender-kits';
6
6
  export default class CanvasRenderer implements IRenderer {
7
7
  private _width;
8
8
  private _height;
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  });
6
6
 
7
- const vutils_1 = require("@visactor/vutils"), vrender_core_1 = require("@visactor/vrender-core"), vrender_kits_1 = require("@visactor/vrender-kits"), enums_1 = require("./enums");
7
+ const vutils_1 = require("@visactor/vutils"), vrender_core_1 = require("@visactor/vrender-core"), enums_1 = require("./enums"), factory_1 = require("../core/factory");
8
8
 
9
9
  class CanvasRenderer {
10
10
  constructor(view) {
@@ -110,10 +110,10 @@ class CanvasRenderer {
110
110
  stage.enableIncrementalAutoRender(), this._viewBox = viewOptions.viewBox, this._view.emit(enums_1.HOOK_EVENT.AFTER_CREATE_VRENDER_STAGE),
111
111
  this._view.emit(enums_1.HOOK_EVENT.BEFORE_CREATE_VRENDER_LAYER);
112
112
  const layer = null !== (_c = viewOptions.layer) && void 0 !== _c ? _c : stage.defaultLayer;
113
- if (this._view.emit(enums_1.HOOK_EVENT.AFTER_CREATE_VRENDER_LAYER), (null === (_d = this._eventConfig) || void 0 === _d ? void 0 : _d.drag) && (this._dragController = new vrender_kits_1.DragNDrop(stage)),
114
- null === (_e = this._eventConfig) || void 0 === _e ? void 0 : _e.gesture) {
113
+ if (this._view.emit(enums_1.HOOK_EVENT.AFTER_CREATE_VRENDER_LAYER), (null === (_d = this._eventConfig) || void 0 === _d ? void 0 : _d.drag) && factory_1.Factory.getStageEventPlugin("drag") && (this._dragController = new (factory_1.Factory.getStageEventPlugin("drag"))(stage)),
114
+ (null === (_e = this._eventConfig) || void 0 === _e ? void 0 : _e.gesture) && factory_1.Factory.getStageEventPlugin("gesture")) {
115
115
  const gestureConfig = (0, vutils_1.isObject)(this._eventConfig.gesture) ? this._eventConfig.gesture : {};
116
- this._gestureController = new vrender_kits_1.Gesture(stage, gestureConfig);
116
+ this._gestureController = new (factory_1.Factory.getStageEventPlugin("gesture"))(stage, gestureConfig);
117
117
  }
118
118
  return {
119
119
  stage: stage,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graph/canvas-renderer.ts"],"names":[],"mappings":"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","file":"canvas-renderer.js","sourcesContent":["import type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isObject } from '@visactor/vutils';\nimport type { IEventTarget, IColor, ILayer, Stage } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { createStage, waitForAllSubLayers } from '@visactor/vrender-core';\nimport { DragNDrop, Gesture } from '@visactor/vrender-kits';\nimport type { IViewOptions, IView, IMark, IViewEventConfig } from '../types';\nimport type { IRenderer } from '../types/renderer';\nimport { HOOK_EVENT } from './enums';\n\nexport default class CanvasRenderer implements IRenderer {\n private _width: number;\n private _height: number;\n\n private _view: IView;\n private _viewOptions: IViewOptions;\n private _eventConfig: IViewEventConfig;\n private _stage: Stage;\n private _layer: ILayer;\n private _dragController: DragNDrop;\n private _gestureController: Gesture;\n private _viewBox: IBoundsLike;\n\n constructor(view: IView) {\n this._view = view;\n }\n\n initialize(width: number, height: number, options: IViewOptions, eventConfig: IViewEventConfig) {\n this._width = width;\n this._height = height;\n this._viewOptions = options;\n this._eventConfig = eventConfig;\n\n this.initStage();\n\n // this method will invoke resize to size the canvas appropriately\n return this;\n }\n\n stage() {\n return this._stage ?? null;\n }\n\n gestureController() {\n return this._gestureController ?? null;\n }\n\n canvas() {\n if (this._stage) {\n return this._stage.window.getNativeHandler().nativeCanvas;\n }\n return null;\n }\n\n context() {\n if (this._stage) {\n return this._stage.window.getContext().nativeContext;\n }\n return null;\n }\n\n combineIncrementalLayers() {\n if (this._stage) {\n waitForAllSubLayers(this._stage as any).then(() => {\n // stage might be null in current tick\n if (this._stage) {\n this._stage.defaultLayer.combineSubLayer();\n }\n });\n }\n return this;\n }\n\n background(color: IColor) {\n if (this._stage) {\n this._stage.background = color;\n return this;\n }\n }\n\n setDpr(resolution: number, redraw: boolean) {\n this._stage?.setDpr?.(resolution);\n if (redraw) {\n this.renderNextFrame();\n }\n return this;\n }\n\n shouldResize(width: number, height: number) {\n return width !== this._width || height !== this._height;\n }\n\n resize(width: number, height: number) {\n this._view.emit(HOOK_EVENT.BEFORE_STAGE_RESIZE);\n if (this.shouldResize(width, height)) {\n this._width = width;\n this._height = height;\n this._stage && this._stage.resize(width, height);\n }\n\n this._view.emit(HOOK_EVENT.AFTER_STAGE_RESIZE);\n\n return this;\n }\n\n setViewBox(viewBox: IBoundsLike, rerender: boolean = true) {\n if (!this._stage) {\n return this;\n }\n if (\n viewBox &&\n (!this._viewBox ||\n viewBox.x1 !== this._viewBox.x1 ||\n viewBox.x2 !== this._viewBox.x2 ||\n viewBox.y1 !== this._viewBox.y1 ||\n viewBox.y2 !== this._viewBox.y2)\n ) {\n this._viewBox = viewBox;\n\n // FIXME: vRender\n this._stage.setViewBox(viewBox.x1, viewBox.y1, viewBox.x2 - viewBox.x1, viewBox.y2 - viewBox.y1, rerender);\n }\n return this;\n }\n\n render(immediately: boolean = false) {\n this._view.emit(HOOK_EVENT.BEFORE_VRENDER_DRAW);\n\n this.initStage();\n\n // disable dirty bounds when render is called\n this._stage.disableDirtyBounds();\n this._stage.afterNextRender(this.handleAfterNextRender);\n\n // render immediately and skip render in next frame\n if (immediately) {\n this._stage.render();\n\n this._view.emit(HOOK_EVENT.AFTER_VRENDER_DRAW);\n }\n return this;\n }\n\n renderNextFrame() {\n this.initStage();\n\n this._stage.renderNextFrame();\n\n return this;\n }\n\n toCanvas() {\n if (this._stage) {\n return this._stage.toCanvas();\n }\n return null;\n }\n\n preventRender(tag: boolean) {\n if (this._stage) {\n this._stage.preventRender(tag);\n }\n }\n\n // toImageData() {\n // if (this._stage) {\n // return this._stage.toImageData();\n // }\n // return null;\n // }\n\n release() {\n this._view.traverseMarkTree((mark: IMark) => {\n mark.release();\n });\n\n if (this._dragController) {\n this._dragController.release();\n }\n if (this._gestureController) {\n this._gestureController.release();\n }\n\n if (this._stage !== (this._viewOptions?.stage as unknown as Stage)) {\n // don't release the stage created by outside\n this._stage.release();\n }\n\n this._stage = null;\n this._layer = null;\n this._dragController = null;\n this._gestureController = null;\n }\n\n private createStage() {\n this._view.emit(HOOK_EVENT.BEFORE_CREATE_VRENDER_STAGE);\n\n const viewOptions = this._viewOptions;\n\n const stage =\n (viewOptions.stage as unknown as Stage) ??\n createStage({\n width: this._width,\n height: this._height,\n renderStyle: viewOptions.renderStyle,\n viewBox: viewOptions.viewBox,\n dpr: viewOptions.dpr,\n canvas: viewOptions.renderCanvas,\n canvasControled: viewOptions.canvasControled,\n container: viewOptions.container,\n title: viewOptions.rendererTitle,\n beforeRender: viewOptions.beforeRender,\n afterRender: viewOptions.afterRender,\n disableDirtyBounds: true,\n autoRender: true,\n pluginList: viewOptions.pluginList,\n enableHtmlAttribute: viewOptions.enableHtmlAttribute,\n optimize: viewOptions.optimize,\n ticker: viewOptions.ticker,\n supportsTouchEvents: viewOptions.supportsTouchEvents,\n supportsPointerEvents: viewOptions.supportsPointerEvents,\n ReactDOM: viewOptions.ReactDOM\n });\n\n if (viewOptions.options3d?.enable) {\n stage.set3dOptions(viewOptions.options3d);\n }\n\n stage.enableIncrementalAutoRender();\n\n this._viewBox = viewOptions.viewBox;\n this._view.emit(HOOK_EVENT.AFTER_CREATE_VRENDER_STAGE);\n\n this._view.emit(HOOK_EVENT.BEFORE_CREATE_VRENDER_LAYER);\n const layer = viewOptions.layer ?? (stage.defaultLayer as ILayer);\n this._view.emit(HOOK_EVENT.AFTER_CREATE_VRENDER_LAYER);\n\n if (this._eventConfig?.drag) {\n // 允许 drag 事件\n this._dragController = new DragNDrop(stage as unknown as IEventTarget);\n }\n if (this._eventConfig?.gesture) {\n const gestureConfig = isObject(this._eventConfig.gesture) ? this._eventConfig.gesture : {};\n // 允许手势\n this._gestureController = new Gesture(stage as unknown as IEventTarget, gestureConfig);\n }\n\n return {\n stage,\n layer\n };\n }\n\n private initStage() {\n if (!this._stage) {\n const { stage, layer } = this.createStage();\n\n this._stage = stage;\n this._layer = layer;\n\n const background = this._view.background();\n this.background(background);\n }\n }\n\n private handleAfterNextRender = () => {\n if (this._stage && !this._viewOptions.disableDirtyBounds) {\n this._stage.enableDirtyBounds();\n }\n\n this._view.emit(HOOK_EVENT.AFTER_VRENDER_DRAW);\n this._view.emit(HOOK_EVENT.AFTER_VRENDER_NEXT_RENDER);\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/graph/canvas-renderer.ts"],"names":[],"mappings":"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","file":"canvas-renderer.js","sourcesContent":["import type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isObject } from '@visactor/vutils';\nimport type { IEventTarget, IColor, ILayer, Stage } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { createStage, waitForAllSubLayers } from '@visactor/vrender-core';\nimport type { IViewOptions, IView, IMark, IViewEventConfig } from '../types';\nimport type { IRenderer } from '../types/renderer';\nimport { HOOK_EVENT } from './enums';\nimport type { DragNDrop } from '@visactor/vrender-kits';\nimport type { Gesture } from '@visactor/vrender-kits';\nimport { Factory } from '../core/factory';\n\nexport default class CanvasRenderer implements IRenderer {\n private _width: number;\n private _height: number;\n\n private _view: IView;\n private _viewOptions: IViewOptions;\n private _eventConfig: IViewEventConfig;\n private _stage: Stage;\n private _layer: ILayer;\n private _dragController: DragNDrop;\n private _gestureController: Gesture;\n private _viewBox: IBoundsLike;\n\n constructor(view: IView) {\n this._view = view;\n }\n\n initialize(width: number, height: number, options: IViewOptions, eventConfig: IViewEventConfig) {\n this._width = width;\n this._height = height;\n this._viewOptions = options;\n this._eventConfig = eventConfig;\n\n this.initStage();\n\n // this method will invoke resize to size the canvas appropriately\n return this;\n }\n\n stage() {\n return this._stage ?? null;\n }\n\n gestureController() {\n return this._gestureController ?? null;\n }\n\n canvas() {\n if (this._stage) {\n return this._stage.window.getNativeHandler().nativeCanvas;\n }\n return null;\n }\n\n context() {\n if (this._stage) {\n return this._stage.window.getContext().nativeContext;\n }\n return null;\n }\n\n combineIncrementalLayers() {\n if (this._stage) {\n waitForAllSubLayers(this._stage as any).then(() => {\n // stage might be null in current tick\n if (this._stage) {\n this._stage.defaultLayer.combineSubLayer();\n }\n });\n }\n return this;\n }\n\n background(color: IColor) {\n if (this._stage) {\n this._stage.background = color;\n return this;\n }\n }\n\n setDpr(resolution: number, redraw: boolean) {\n this._stage?.setDpr?.(resolution);\n if (redraw) {\n this.renderNextFrame();\n }\n return this;\n }\n\n shouldResize(width: number, height: number) {\n return width !== this._width || height !== this._height;\n }\n\n resize(width: number, height: number) {\n this._view.emit(HOOK_EVENT.BEFORE_STAGE_RESIZE);\n if (this.shouldResize(width, height)) {\n this._width = width;\n this._height = height;\n this._stage && this._stage.resize(width, height);\n }\n\n this._view.emit(HOOK_EVENT.AFTER_STAGE_RESIZE);\n\n return this;\n }\n\n setViewBox(viewBox: IBoundsLike, rerender: boolean = true) {\n if (!this._stage) {\n return this;\n }\n if (\n viewBox &&\n (!this._viewBox ||\n viewBox.x1 !== this._viewBox.x1 ||\n viewBox.x2 !== this._viewBox.x2 ||\n viewBox.y1 !== this._viewBox.y1 ||\n viewBox.y2 !== this._viewBox.y2)\n ) {\n this._viewBox = viewBox;\n\n // FIXME: vRender\n this._stage.setViewBox(viewBox.x1, viewBox.y1, viewBox.x2 - viewBox.x1, viewBox.y2 - viewBox.y1, rerender);\n }\n return this;\n }\n\n render(immediately: boolean = false) {\n this._view.emit(HOOK_EVENT.BEFORE_VRENDER_DRAW);\n\n this.initStage();\n\n // disable dirty bounds when render is called\n this._stage.disableDirtyBounds();\n this._stage.afterNextRender(this.handleAfterNextRender);\n\n // render immediately and skip render in next frame\n if (immediately) {\n this._stage.render();\n\n this._view.emit(HOOK_EVENT.AFTER_VRENDER_DRAW);\n }\n return this;\n }\n\n renderNextFrame() {\n this.initStage();\n\n this._stage.renderNextFrame();\n\n return this;\n }\n\n toCanvas() {\n if (this._stage) {\n return this._stage.toCanvas();\n }\n return null;\n }\n\n preventRender(tag: boolean) {\n if (this._stage) {\n this._stage.preventRender(tag);\n }\n }\n\n // toImageData() {\n // if (this._stage) {\n // return this._stage.toImageData();\n // }\n // return null;\n // }\n\n release() {\n this._view.traverseMarkTree((mark: IMark) => {\n mark.release();\n });\n\n if (this._dragController) {\n this._dragController.release();\n }\n if (this._gestureController) {\n this._gestureController.release();\n }\n\n if (this._stage !== (this._viewOptions?.stage as unknown as Stage)) {\n // don't release the stage created by outside\n this._stage.release();\n }\n\n this._stage = null;\n this._layer = null;\n this._dragController = null;\n this._gestureController = null;\n }\n\n private createStage() {\n this._view.emit(HOOK_EVENT.BEFORE_CREATE_VRENDER_STAGE);\n\n const viewOptions = this._viewOptions;\n\n const stage =\n (viewOptions.stage as unknown as Stage) ??\n createStage({\n width: this._width,\n height: this._height,\n renderStyle: viewOptions.renderStyle,\n viewBox: viewOptions.viewBox,\n dpr: viewOptions.dpr,\n canvas: viewOptions.renderCanvas,\n canvasControled: viewOptions.canvasControled,\n container: viewOptions.container,\n title: viewOptions.rendererTitle,\n beforeRender: viewOptions.beforeRender,\n afterRender: viewOptions.afterRender,\n disableDirtyBounds: true,\n autoRender: true,\n pluginList: viewOptions.pluginList,\n enableHtmlAttribute: viewOptions.enableHtmlAttribute,\n optimize: viewOptions.optimize,\n ticker: viewOptions.ticker,\n supportsTouchEvents: viewOptions.supportsTouchEvents,\n supportsPointerEvents: viewOptions.supportsPointerEvents,\n ReactDOM: viewOptions.ReactDOM\n });\n\n if (viewOptions.options3d?.enable) {\n stage.set3dOptions(viewOptions.options3d);\n }\n\n stage.enableIncrementalAutoRender();\n\n this._viewBox = viewOptions.viewBox;\n this._view.emit(HOOK_EVENT.AFTER_CREATE_VRENDER_STAGE);\n\n this._view.emit(HOOK_EVENT.BEFORE_CREATE_VRENDER_LAYER);\n const layer = viewOptions.layer ?? (stage.defaultLayer as ILayer);\n this._view.emit(HOOK_EVENT.AFTER_CREATE_VRENDER_LAYER);\n\n if (this._eventConfig?.drag && Factory.getStageEventPlugin('drag')) {\n // 允许 drag 事件\n this._dragController = new (Factory.getStageEventPlugin('drag'))(stage as unknown as IEventTarget) as DragNDrop;\n }\n if (this._eventConfig?.gesture && Factory.getStageEventPlugin('gesture')) {\n const gestureConfig = isObject(this._eventConfig.gesture) ? this._eventConfig.gesture : {};\n // 允许手势\n this._gestureController = new (Factory.getStageEventPlugin('gesture'))(\n stage as unknown as IEventTarget,\n gestureConfig\n ) as Gesture;\n }\n\n return {\n stage,\n layer\n };\n }\n\n private initStage() {\n if (!this._stage) {\n const { stage, layer } = this.createStage();\n\n this._stage = stage;\n this._layer = layer;\n\n const background = this._view.background();\n this.background(background);\n }\n }\n\n private handleAfterNextRender = () => {\n if (this._stage && !this._viewOptions.disableDirtyBounds) {\n this._stage.enableDirtyBounds();\n }\n\n this._view.emit(HOOK_EVENT.AFTER_VRENDER_DRAW);\n this._view.emit(HOOK_EVENT.AFTER_VRENDER_NEXT_RENDER);\n };\n}\n"]}
@@ -27,6 +27,7 @@ export declare class Element implements IElement {
27
27
  private _setCustomizedShape;
28
28
  encodeItems(items: MarkElementItem[], encoders: BaseEncodeSpec, isReentered?: boolean, parameters?: any): void;
29
29
  protected coordinateTransformEncode(items: MarkElementItem[]): void;
30
+ hasStateAnimation(): boolean;
30
31
  clearStates(hasAnimation?: boolean): void;
31
32
  private _updateRuntimeStates;
32
33
  hasState(state: string): boolean;
@@ -54,8 +55,6 @@ export declare class Element implements IElement {
54
55
  [channel: string]: any;
55
56
  }): void;
56
57
  getNextGraphicAttributes(): any;
57
- getFinalAnimationAttribute(channel: string): any;
58
- getFinalAnimationAttributes(): any;
59
58
  protected setNextGraphicAttributes(attributes: {
60
59
  [channel: string]: any;
61
60
  }): void;
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  }), exports.Element = void 0;
6
6
 
7
- const vutils_1 = require("@visactor/vutils"), vgrammar_util_1 = require("@visactor/vgrammar-util"), constants_1 = require("./constants"), enums_1 = require("./enums"), encode_1 = require("./mark/encode"), graphic_1 = require("./util/graphic"), transform_1 = require("./attributes/transform"), helpers_1 = require("./attributes/helpers"), line_1 = require("./attributes/line"), vrender_core_1 = require("@visactor/vrender-core"), util_1 = require("../parse/util");
7
+ const vutils_1 = require("@visactor/vutils"), constants_1 = require("./constants"), enums_1 = require("./enums"), encode_1 = require("./mark/encode"), graphic_1 = require("./util/graphic"), transform_1 = require("./attributes/transform"), helpers_1 = require("./attributes/helpers"), line_1 = require("./attributes/line"), vrender_core_1 = require("@visactor/vrender-core"), util_1 = require("../parse/util");
8
8
 
9
9
  class Element {
10
10
  constructor(mark) {
@@ -33,13 +33,14 @@ class Element {
33
33
  if (!this.mark) return attributes;
34
34
  return (0, transform_1.transformAttributes)(attrTransforms, attributes, this);
35
35
  }), this.clearGraphicAttributes(), this.mark.needAnimate() && (this.setPrevGraphicAttributes(null),
36
- this.setNextGraphicAttributes(Object.assign({}, attributes)), this.setFinalGraphicAttributes(Object.assign({}, attributes))));
36
+ this.setNextGraphicAttributes(attributes), this.setFinalGraphicAttributes(attributes)));
37
37
  }
38
38
  updateGraphicItem() {
39
+ var _a;
39
40
  if (!this.graphicItem) return;
40
41
  this.diffState === enums_1.DiffState.exit ? this.graphicItem.releaseStatus = "willRelease" : this.graphicItem.releaseStatus = void 0;
41
- const stateAnimation = this.mark.animate.getAnimationConfigs("state");
42
- 0 !== stateAnimation.length && (this.graphicItem.stateAnimateConfig = stateAnimation[0].originConfig);
42
+ const stateAnimation = null === (_a = this.mark.animate) || void 0 === _a ? void 0 : _a.getAnimationConfigs("state");
43
+ stateAnimation && 0 !== stateAnimation.length && (this.graphicItem.stateAnimateConfig = stateAnimation[0].originConfig);
43
44
  }
44
45
  getGraphicItem() {
45
46
  return this.graphicItem;
@@ -91,8 +92,9 @@ class Element {
91
92
  encodeGraphic(attrs) {
92
93
  this.coordinateTransformEncode(this.items);
93
94
  const graphicAttributes = this.transformElementItems(this.items, this.mark.markType);
94
- attrs && Object.assign(graphicAttributes, attrs), this.graphicItem ? (this.graphicItem.clearStates(),
95
- this.graphicItem.states = {}, this.graphicItem.stateProxy = null, this.applyGraphicAttributes(graphicAttributes)) : this.initGraphicItem(graphicAttributes),
95
+ attrs && (this.mark.isCollectionMark() && delete attrs.defined, Object.assign(graphicAttributes, attrs)),
96
+ this.graphicItem ? (this.graphicItem.clearStates(), this.graphicItem.states = {},
97
+ this.graphicItem.stateProxy = null, this.applyGraphicAttributes(graphicAttributes)) : this.initGraphicItem(graphicAttributes),
96
98
  this.diffState !== enums_1.DiffState.enter && this.diffState !== enums_1.DiffState.update || !this.states.length || this.useStates(this.states),
97
99
  this.mark.markType === enums_1.GrammarMarkType.shape && (this.graphicItem.datum = this.items[0].datum),
98
100
  this.items.forEach((item => {
@@ -122,8 +124,13 @@ class Element {
122
124
  Object.assign(nextAttrs, convertedPoint);
123
125
  }));
124
126
  }
127
+ hasStateAnimation() {
128
+ var _a;
129
+ const stateAnimation = null === (_a = this.mark.animate) || void 0 === _a ? void 0 : _a.getAnimationConfigs("state");
130
+ return stateAnimation && stateAnimation.length > 0;
131
+ }
125
132
  clearStates(hasAnimation) {
126
- const stateAnimationEnable = (0, vutils_1.isBoolean)(hasAnimation) ? hasAnimation : 0 !== this.mark.animate.getAnimationConfigs("state").length;
133
+ const stateAnimationEnable = (0, vutils_1.isBoolean)(hasAnimation) ? hasAnimation : this.hasStateAnimation();
127
134
  this.states = [], this.graphicItem && this.graphicItem.clearStates(stateAnimationEnable),
128
135
  this.runtimeStatesEncoder && (this.runtimeStatesEncoder = {});
129
136
  }
@@ -182,7 +189,7 @@ class Element {
182
189
  }, this);
183
190
  const stateSort = null === (_a = this.mark.getSpec()) || void 0 === _a ? void 0 : _a.stateSort;
184
191
  stateSort && states.sort(stateSort), this.states = states;
185
- const stateAnimationEnable = (0, vutils_1.isBoolean)(hasAnimation) ? hasAnimation : 0 !== this.mark.animate.getAnimationConfigs("state").length;
192
+ const stateAnimationEnable = (0, vutils_1.isBoolean)(hasAnimation) ? hasAnimation : this.hasStateAnimation();
186
193
  return this.graphicItem.stateProxy = this.getStateAttrs, this.graphicItem.useStates(this.states, stateAnimationEnable),
187
194
  this.mark.emit(enums_1.HOOK_EVENT.AFTER_ELEMENT_STATE, {
188
195
  states: states
@@ -190,8 +197,8 @@ class Element {
190
197
  }
191
198
  diffAttributes(graphicAttributes) {
192
199
  const diffResult = {}, finalGraphicAttributes = this.getFinalGraphicAttributes();
193
- for (const key in graphicAttributes) (0, vgrammar_util_1.isEqual)(key, finalGraphicAttributes, graphicAttributes) && (0,
194
- vutils_1.has)(finalGraphicAttributes, key) || (diffResult[key] = graphicAttributes[key]);
200
+ for (const key in graphicAttributes) (0, vutils_1.has)(finalGraphicAttributes, key) && (0,
201
+ vutils_1.isEqual)(finalGraphicAttributes[key], graphicAttributes[key]) || (diffResult[key] = graphicAttributes[key]);
195
202
  return diffResult;
196
203
  }
197
204
  transformElementItems(items, markType, computePoints) {
@@ -228,14 +235,14 @@ class Element {
228
235
  return nextAttrs;
229
236
  }
230
237
  applyGraphicAttributes(graphicAttributes) {
231
- var _a, _b;
238
+ var _a, _b, _c;
232
239
  if (!(0, vutils_1.isEmpty)(graphicAttributes)) if (this.mark.needAnimate()) {
233
240
  const nextGraphicAttributes = this.diffAttributes(graphicAttributes), prevGraphicAttributes = null !== (_a = this.getPrevGraphicAttributes()) && void 0 !== _a ? _a : {}, finalGraphicAttributes = null !== (_b = this.getFinalGraphicAttributes()) && void 0 !== _b ? _b : {};
234
241
  Object.keys(nextGraphicAttributes).forEach((channel => {
235
242
  prevGraphicAttributes[channel] = this.getGraphicAttribute(channel), finalGraphicAttributes[channel] = nextGraphicAttributes[channel];
236
243
  })), this.setNextGraphicAttributes(nextGraphicAttributes), this.setPrevGraphicAttributes(prevGraphicAttributes),
237
244
  this.setFinalGraphicAttributes(finalGraphicAttributes);
238
- const animateGraphicAttributes = this.mark.animate.getElementAnimators(this).reduce(((attributes, animator) => Object.assign(attributes, animator.getEndAttributes())), {}), currentGraphicAttributes = Object.assign({}, animateGraphicAttributes, finalGraphicAttributes);
245
+ const animateGraphicAttributes = ((null === (_c = this.mark.animate) || void 0 === _c ? void 0 : _c.getElementAnimators(this)) || []).reduce(((attributes, animator) => Object.assign(attributes, animator.getEndAttributes())), {}), currentGraphicAttributes = Object.assign({}, animateGraphicAttributes, finalGraphicAttributes);
239
246
  this.graphicItem.setAttributes(currentGraphicAttributes);
240
247
  } else this.graphicItem.setAttributes(graphicAttributes);
241
248
  }
@@ -285,14 +292,6 @@ class Element {
285
292
  getNextGraphicAttributes() {
286
293
  return this.graphicItem.nextAttrs;
287
294
  }
288
- getFinalAnimationAttribute(channel) {
289
- var _a, _b;
290
- return null !== (_b = null === (_a = this.getFinalGraphicAttributes()) || void 0 === _a ? void 0 : _a[channel]) && void 0 !== _b ? _b : this.getGraphicAttribute(channel);
291
- }
292
- getFinalAnimationAttributes() {
293
- var _a;
294
- return null !== (_a = this.getFinalGraphicAttributes()) && void 0 !== _a ? _a : this.graphicItem.attribute;
295
- }
296
295
  setNextGraphicAttributes(attributes) {
297
296
  this.graphicItem.nextAttrs = attributes;
298
297
  }