@visactor/vgrammar-core 0.14.0-alpha.3 → 0.14.0-alpha.5

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 (217) 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/update.js +2 -2
  26. package/cjs/graph/animation/animation/update.js.map +1 -1
  27. package/cjs/graph/animation/morph.d.ts +2 -12
  28. package/cjs/graph/animation/morph.js +76 -163
  29. package/cjs/graph/animation/morph.js.map +1 -1
  30. package/cjs/graph/attributes/line.js.map +1 -1
  31. package/cjs/graph/canvas-renderer.d.ts +1 -1
  32. package/cjs/graph/canvas-renderer.js +4 -4
  33. package/cjs/graph/canvas-renderer.js.map +1 -1
  34. package/cjs/graph/element.d.ts +1 -0
  35. package/cjs/graph/element.js +15 -9
  36. package/cjs/graph/element.js.map +1 -1
  37. package/cjs/graph/glyph-element.js +4 -3
  38. package/cjs/graph/glyph-element.js.map +1 -1
  39. package/cjs/graph/layout/layout.d.ts +1 -0
  40. package/cjs/graph/layout/layout.js +8 -2
  41. package/cjs/graph/layout/layout.js.map +1 -1
  42. package/cjs/graph/mark/graphic.js +14 -8
  43. package/cjs/graph/mark/graphic.js.map +1 -1
  44. package/cjs/graph/util/point.js +10 -26
  45. package/cjs/graph/util/point.js.map +1 -1
  46. package/cjs/graph/view-diff.d.ts +8 -0
  47. package/cjs/graph/view-diff.js +93 -0
  48. package/cjs/graph/view-diff.js.map +1 -0
  49. package/cjs/index.d.ts +8 -1
  50. package/cjs/index.js +66 -2
  51. package/cjs/index.js.map +1 -1
  52. package/cjs/interactions/brush-base.js +1 -2
  53. package/cjs/interactions/brush-filter.js +2 -1
  54. package/cjs/interactions/fish-eye.js +1 -2
  55. package/cjs/interactions/index.js +2 -1
  56. package/cjs/interactions/tooltip.js +1 -1
  57. package/cjs/parse/event.d.ts +0 -2
  58. package/cjs/parse/event.js +4 -10
  59. package/cjs/parse/event.js.map +1 -1
  60. package/cjs/parse/util.js.map +1 -1
  61. package/cjs/transforms/data/pie.js +2 -2
  62. package/cjs/transforms/data/pie.js.map +1 -1
  63. package/cjs/transforms/util/util.d.ts +0 -2
  64. package/cjs/transforms/util/util.js +3 -13
  65. package/cjs/transforms/util/util.js.map +1 -1
  66. package/cjs/types/element.d.ts +1 -1
  67. package/cjs/types/element.js.map +1 -1
  68. package/cjs/types/morph.d.ts +1 -2
  69. package/cjs/types/morph.js.map +1 -1
  70. package/cjs/types/renderer.d.ts +6 -1
  71. package/cjs/types/renderer.js.map +1 -1
  72. package/cjs/view/View.d.ts +3 -6
  73. package/cjs/view/View.js +52 -105
  74. package/cjs/view/View.js.map +1 -1
  75. package/cjs/view/animate.js +2 -1
  76. package/cjs/view/animate.js.map +1 -1
  77. package/cjs/view/constants.d.ts +2 -0
  78. package/cjs/view/constants.js +3 -2
  79. package/cjs/view/constants.js.map +1 -1
  80. package/cjs/view/events.d.ts +0 -1
  81. package/cjs/view/events.js +3 -17
  82. package/cjs/view/events.js.map +1 -1
  83. package/cjs/view/glyph.d.ts +4 -0
  84. package/cjs/view/glyph.js +12 -3
  85. package/cjs/view/glyph.js.map +1 -1
  86. package/cjs/view/group.js +3 -3
  87. package/cjs/view/group.js.map +1 -1
  88. package/cjs/view/mark-animate-mixin.d.ts +1 -0
  89. package/cjs/view/mark-animate-mixin.js +29 -0
  90. package/cjs/view/mark-animate-mixin.js.map +1 -0
  91. package/cjs/view/mark.d.ts +2 -0
  92. package/cjs/view/mark.js +30 -23
  93. package/cjs/view/mark.js.map +1 -1
  94. package/cjs/view/view-animate-mixin.d.ts +1 -0
  95. package/cjs/view/view-animate-mixin.js +26 -0
  96. package/cjs/view/view-animate-mixin.js.map +1 -0
  97. package/cjs/view/view-event-mixin.d.ts +1 -0
  98. package/cjs/view/view-event-mixin.js +92 -0
  99. package/cjs/view/view-event-mixin.js.map +1 -0
  100. package/cjs/view/view-morph-mixin.d.ts +1 -0
  101. package/cjs/view/view-morph-mixin.js +32 -0
  102. package/cjs/view/view-morph-mixin.js.map +1 -0
  103. package/es/component/axis.d.ts +2 -0
  104. package/es/component/axis.js +10 -0
  105. package/es/component/axis.js.map +1 -1
  106. package/es/component/grid.d.ts +2 -0
  107. package/es/component/grid.js +10 -0
  108. package/es/component/grid.js.map +1 -1
  109. package/es/component/index.d.ts +2 -2
  110. package/es/component/index.js +2 -2
  111. package/es/component/index.js.map +1 -1
  112. package/es/core/factory.d.ts +8 -1
  113. package/es/core/factory.js +8 -1
  114. package/es/core/factory.js.map +1 -1
  115. package/es/glyph/boxplot.js +4 -2
  116. package/es/glyph/boxplot.js.map +1 -1
  117. package/es/glyph/link-path.js +4 -2
  118. package/es/glyph/link-path.js.map +1 -1
  119. package/es/glyph/ripple.js +3 -1
  120. package/es/glyph/ripple.js.map +1 -1
  121. package/es/glyph/tree-path.js +4 -2
  122. package/es/glyph/tree-path.js.map +1 -1
  123. package/es/glyph/violin.js +4 -2
  124. package/es/glyph/violin.js.map +1 -1
  125. package/es/glyph/wave.js +3 -1
  126. package/es/glyph/wave.js.map +1 -1
  127. package/es/graph/animation/animation/update.js +1 -3
  128. package/es/graph/animation/animation/update.js.map +1 -1
  129. package/es/graph/animation/morph.d.ts +2 -12
  130. package/es/graph/animation/morph.js +72 -159
  131. package/es/graph/animation/morph.js.map +1 -1
  132. package/es/graph/attributes/line.js.map +1 -1
  133. package/es/graph/canvas-renderer.d.ts +1 -1
  134. package/es/graph/canvas-renderer.js +5 -5
  135. package/es/graph/canvas-renderer.js.map +1 -1
  136. package/es/graph/element.d.ts +1 -0
  137. package/es/graph/element.js +13 -9
  138. package/es/graph/element.js.map +1 -1
  139. package/es/graph/glyph-element.js +3 -5
  140. package/es/graph/glyph-element.js.map +1 -1
  141. package/es/graph/layout/layout.d.ts +1 -0
  142. package/es/graph/layout/layout.js +6 -0
  143. package/es/graph/layout/layout.js.map +1 -1
  144. package/es/graph/mark/graphic.js +13 -7
  145. package/es/graph/mark/graphic.js.map +1 -1
  146. package/es/graph/util/point.js +10 -26
  147. package/es/graph/util/point.js.map +1 -1
  148. package/es/graph/view-diff.d.ts +8 -0
  149. package/es/graph/view-diff.js +89 -0
  150. package/es/graph/view-diff.js.map +1 -0
  151. package/es/index.d.ts +8 -1
  152. package/es/index.js +29 -1
  153. package/es/index.js.map +1 -1
  154. package/es/interactions/dimension-tooltip.js +1 -2
  155. package/es/interactions/element-highlight-by-group.js +2 -1
  156. package/es/interactions/element-highlight.js +1 -1
  157. package/es/interactions/element-select.js +1 -1
  158. package/es/interactions/filter.js +1 -1
  159. package/es/interactions/fish-eye.js +1 -1
  160. package/es/parse/event.d.ts +0 -2
  161. package/es/parse/event.js +3 -7
  162. package/es/parse/event.js.map +1 -1
  163. package/es/parse/option.js +1 -2
  164. package/es/parse/scale.js +2 -1
  165. package/es/parse/util.js.map +1 -1
  166. package/es/semantic-marks/cell.js +1 -1
  167. package/es/semantic-marks/interval.js +1 -1
  168. package/es/semantic-marks/text.js +1 -1
  169. package/es/transforms/data/pie.js +1 -1
  170. package/es/transforms/data/pie.js.map +1 -1
  171. package/es/transforms/util/util.d.ts +0 -2
  172. package/es/transforms/util/util.js +0 -10
  173. package/es/transforms/util/util.js.map +1 -1
  174. package/es/types/element.d.ts +1 -1
  175. package/es/types/element.js.map +1 -1
  176. package/es/types/morph.d.ts +1 -2
  177. package/es/types/morph.js.map +1 -1
  178. package/es/types/renderer.d.ts +6 -1
  179. package/es/types/renderer.js.map +1 -1
  180. package/es/view/View.d.ts +3 -6
  181. package/es/view/View.js +53 -114
  182. package/es/view/View.js.map +1 -1
  183. package/es/view/animate.js +2 -1
  184. package/es/view/animate.js.map +1 -1
  185. package/es/view/constants.d.ts +2 -0
  186. package/es/view/constants.js +4 -0
  187. package/es/view/constants.js.map +1 -1
  188. package/es/view/events.d.ts +0 -1
  189. package/es/view/events.js +1 -15
  190. package/es/view/events.js.map +1 -1
  191. package/es/view/glyph.d.ts +4 -0
  192. package/es/view/glyph.js +11 -0
  193. package/es/view/glyph.js.map +1 -1
  194. package/es/view/group.js +2 -4
  195. package/es/view/group.js.map +1 -1
  196. package/es/view/mark-animate-mixin.d.ts +1 -0
  197. package/es/view/mark-animate-mixin.js +25 -0
  198. package/es/view/mark-animate-mixin.js.map +1 -0
  199. package/es/view/mark.d.ts +2 -0
  200. package/es/view/mark.js +30 -25
  201. package/es/view/mark.js.map +1 -1
  202. package/es/view/view-animate-mixin.d.ts +1 -0
  203. package/es/view/view-animate-mixin.js +16 -0
  204. package/es/view/view-animate-mixin.js.map +1 -0
  205. package/es/view/view-event-mixin.d.ts +1 -0
  206. package/es/view/view-event-mixin.js +90 -0
  207. package/es/view/view-event-mixin.js.map +1 -0
  208. package/es/view/view-morph-mixin.d.ts +1 -0
  209. package/es/view/view-morph-mixin.js +22 -0
  210. package/es/view/view-morph-mixin.js.map +1 -0
  211. package/package.json +11 -11
  212. package/cjs/graph/util/element.d.ts +0 -2
  213. package/cjs/graph/util/element.js +0 -10
  214. package/cjs/graph/util/element.js.map +0 -1
  215. package/es/graph/util/element.d.ts +0 -2
  216. package/es/graph/util/element.js +0 -8
  217. package/es/graph/util/element.js.map +0 -1
package/cjs/glyph/wave.js CHANGED
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  }), exports.registerWaveGlyph = void 0;
6
6
 
7
- const factory_1 = require("../core/factory"), graphic_1 = require("../graph/mark/graphic"), registerWaveGlyph = () => {
7
+ const factory_1 = require("../core/factory"), graphic_1 = require("../graph/mark/graphic"), glyph_1 = require("../view/glyph"), registerWaveGlyph = () => {
8
8
  factory_1.Factory.registerGlyph("wave", {
9
9
  wave0: "area",
10
10
  wave1: "area",
@@ -60,7 +60,8 @@ const factory_1 = require("../core/factory"), graphic_1 = require("../graph/mark
60
60
  curveType: "monotoneX",
61
61
  fillOpacity: .33
62
62
  }
63
- }))), (0, graphic_1.registerGlyphGraphic)(), (0, graphic_1.registerAreaGraphic)();
63
+ }))), (0, glyph_1.registerGlyphMark)(), (0, graphic_1.registerGlyphGraphic)(), (0,
64
+ graphic_1.registerAreaGraphic)();
64
65
  };
65
66
 
66
67
  exports.registerWaveGlyph = registerWaveGlyph;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/glyph/wave.ts"],"names":[],"mappings":";;;AACA,6CAA0C;AAE1C,mDAAkF;AAE3E,MAAM,iBAAiB,GAAG,GAAG,EAAE;IACpC,iBAAO,CAAC,aAAa,CAAkB,MAAM,EAAE;QAC7C,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,MAAM;KACd,CAAC;SACC,sBAAsB,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACrF,MAAM,YAAY,GAAiB,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;YACxE,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,UAAU,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;QAC5G,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACvC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,WAAW,GAAG,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QACtE,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACvC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,WAAW,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QAC3E,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACvC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,WAAW,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QAC3E,CAAC,CAAC,CAAC;QACH,OAAO;YACL,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YACtC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YACtC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;SACvC,CAAC;IACJ,CAAC,CAAC;SACD,sBAAsB,CAAC,GAAG,EAAE;QAC3B,OAAO;YACL,KAAK,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,EAAE;YACjD,KAAK,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE;YACpD,KAAK,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE;SACrD,CAAC;IACJ,CAAC,CAAC,CAAC;IACL,IAAA,8BAAoB,GAAE,CAAC;IACvB,IAAA,6BAAmB,GAAE,CAAC;AACxB,CAAC,CAAC;AAnCW,QAAA,iBAAiB,qBAmC5B","file":"wave.js","sourcesContent":["import type { IPointLike } from '@visactor/vutils';\nimport { Factory } from '../core/factory';\nimport type { WaveEncoderSpec } from '../types';\nimport { registerAreaGraphic, registerGlyphGraphic } from '../graph/mark/graphic';\n\nexport const registerWaveGlyph = () => {\n Factory.registerGlyph<WaveEncoderSpec>('wave', {\n wave0: 'area',\n wave1: 'area',\n wave2: 'area'\n })\n .registerChannelEncoder('wave', (channel, encodeValue, encodeValues, datum, element) => {\n const originPoints: IPointLike[] = new Array(21).fill(0).map((v, index) => {\n const waveHeight = index % 2 === 0 ? 20 : 0;\n return { x: -500 + 50 * index, y: encodeValues.y + waveHeight, y1: encodeValues.y + encodeValues.height };\n });\n const points0 = originPoints.map(point => {\n return { x: point.x + encodeValue * 100, y: point.y, y1: point.y1 };\n });\n const points1 = originPoints.map(point => {\n return { x: point.x + encodeValue * 200 - 40, y: point.y, y1: point.y1 };\n });\n const points2 = originPoints.map(point => {\n return { x: point.x + encodeValue * 300 - 20, y: point.y, y1: point.y1 };\n });\n return {\n wave0: { points: points0, x: 0, y: 0 },\n wave1: { points: points1, x: 0, y: 0 },\n wave2: { points: points2, x: 0, y: 0 }\n };\n })\n .registerDefaultEncoder(() => {\n return {\n wave0: { curveType: 'monotoneX', fillOpacity: 1 },\n wave1: { curveType: 'monotoneX', fillOpacity: 0.66 },\n wave2: { curveType: 'monotoneX', fillOpacity: 0.33 }\n };\n });\n registerGlyphGraphic();\n registerAreaGraphic();\n};\n"]}
1
+ {"version":3,"sources":["../src/glyph/wave.ts"],"names":[],"mappings":";;;AACA,6CAA0C;AAE1C,mDAAkF;AAClF,yCAAkD;AAE3C,MAAM,iBAAiB,GAAG,GAAG,EAAE;IACpC,iBAAO,CAAC,aAAa,CAAkB,MAAM,EAAE;QAC7C,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,MAAM;KACd,CAAC;SACC,sBAAsB,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACrF,MAAM,YAAY,GAAiB,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;YACxE,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,UAAU,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;QAC5G,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACvC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,WAAW,GAAG,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QACtE,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACvC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,WAAW,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QAC3E,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACvC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,WAAW,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QAC3E,CAAC,CAAC,CAAC;QACH,OAAO;YACL,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YACtC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YACtC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;SACvC,CAAC;IACJ,CAAC,CAAC;SACD,sBAAsB,CAAC,GAAG,EAAE;QAC3B,OAAO;YACL,KAAK,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,EAAE;YACjD,KAAK,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE;YACpD,KAAK,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE;SACrD,CAAC;IACJ,CAAC,CAAC,CAAC;IACL,IAAA,yBAAiB,GAAE,CAAC;IACpB,IAAA,8BAAoB,GAAE,CAAC;IACvB,IAAA,6BAAmB,GAAE,CAAC;AACxB,CAAC,CAAC;AApCW,QAAA,iBAAiB,qBAoC5B","file":"wave.js","sourcesContent":["import type { IPointLike } from '@visactor/vutils';\nimport { Factory } from '../core/factory';\nimport type { WaveEncoderSpec } from '../types';\nimport { registerAreaGraphic, registerGlyphGraphic } from '../graph/mark/graphic';\nimport { registerGlyphMark } from '../view/glyph';\n\nexport const registerWaveGlyph = () => {\n Factory.registerGlyph<WaveEncoderSpec>('wave', {\n wave0: 'area',\n wave1: 'area',\n wave2: 'area'\n })\n .registerChannelEncoder('wave', (channel, encodeValue, encodeValues, datum, element) => {\n const originPoints: IPointLike[] = new Array(21).fill(0).map((v, index) => {\n const waveHeight = index % 2 === 0 ? 20 : 0;\n return { x: -500 + 50 * index, y: encodeValues.y + waveHeight, y1: encodeValues.y + encodeValues.height };\n });\n const points0 = originPoints.map(point => {\n return { x: point.x + encodeValue * 100, y: point.y, y1: point.y1 };\n });\n const points1 = originPoints.map(point => {\n return { x: point.x + encodeValue * 200 - 40, y: point.y, y1: point.y1 };\n });\n const points2 = originPoints.map(point => {\n return { x: point.x + encodeValue * 300 - 20, y: point.y, y1: point.y1 };\n });\n return {\n wave0: { points: points0, x: 0, y: 0 },\n wave1: { points: points1, x: 0, y: 0 },\n wave2: { points: points2, x: 0, y: 0 }\n };\n })\n .registerDefaultEncoder(() => {\n return {\n wave0: { curveType: 'monotoneX', fillOpacity: 1 },\n wave1: { curveType: 'monotoneX', fillOpacity: 0.66 },\n wave2: { curveType: 'monotoneX', fillOpacity: 0.33 }\n };\n });\n registerGlyphMark();\n registerGlyphGraphic();\n registerAreaGraphic();\n};\n"]}
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  }), exports.update = void 0;
6
6
 
7
- const vutils_1 = require("@visactor/vutils"), vgrammar_util_1 = require("@visactor/vgrammar-util"), BUILT_IN_EXCLUDE_CHANNELS = {
7
+ const vutils_1 = require("@visactor/vutils"), BUILT_IN_EXCLUDE_CHANNELS = {
8
8
  symbol: [ "_mo_hide_", "visible" ]
9
9
  }, update = (element, options, animationParameters) => {
10
10
  const from = Object.assign({}, element.getPrevGraphicAttributes()), to = Object.assign({}, element.getNextGraphicAttributes());
@@ -14,7 +14,7 @@ const vutils_1 = require("@visactor/vutils"), vgrammar_util_1 = require("@visact
14
14
  })), element.mark && element.mark.markType && (excludeChannels = BUILT_IN_EXCLUDE_CHANNELS[element.mark.markType]) && excludeChannels.forEach((key => {
15
15
  delete from[key], delete to[key];
16
16
  })), Object.keys(to).forEach((key => {
17
- (0, vgrammar_util_1.isEqual)(key, from, to) && (delete from[key], delete to[key]);
17
+ (0, vutils_1.isEqual)(from[key], to[key]) && (delete from[key], delete to[key]);
18
18
  }));
19
19
  const final = element.getFinalGraphicAttributes();
20
20
  return Object.keys(from).forEach((key => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graph/animation/animation/update.ts"],"names":[],"mappings":";;;AAAA,6CAAyD;AACzD,2DAAkE;AAQlE,MAAM,yBAAyB,GAAG;IAChC,MAAM,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC;CACjC,CAAC;AAEK,MAAM,MAAM,GAA4B,CAC7C,OAAiB,EACjB,OAAgC,EAChC,mBAAyC,EACzC,EAAE;IACF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC;IACnE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC;IACjE,IAAI,OAAO,EAAE;QACX,IAAA,cAAK,EAAC,OAAO,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;KACJ;IACD,IAAI,eAAyB,CAAC;IAC9B,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,eAAe,GAAG,yBAAyB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE;QACjH,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;KACJ;IAED,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC5B,IAAI,IAAA,uBAAY,EAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE;YAC/B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;SAChB;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,OAAO,CAAC,yBAAyB,EAAE,CAAC;IAElD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC9B,IAAI,IAAA,cAAK,EAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;YAClB,IAAI,IAAA,cAAK,EAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,IAAA,gBAAO,EAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE;gBACvD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;aAClB;iBAAM;gBACL,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;aACtB;SACF;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACtB,CAAC,CAAC;AAzCW,QAAA,MAAM,UAyCjB","file":"update.js","sourcesContent":["import { array, isNil, isEqual } from '@visactor/vutils';\nimport { isEqual as isEmptyByKey } from '@visactor/vgrammar-util';\nimport type { IElement } from '../../../types';\nimport type { IAnimationParameters, TypeAnimation } from '../../../types/animate';\n\nexport interface IUpdateAnimationOptions {\n excludeChannels: string[];\n}\n\nconst BUILT_IN_EXCLUDE_CHANNELS = {\n symbol: ['_mo_hide_', 'visible']\n};\n\nexport const update: TypeAnimation<IElement> = (\n element: IElement,\n options: IUpdateAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const from = Object.assign({}, element.getPrevGraphicAttributes());\n const to = Object.assign({}, element.getNextGraphicAttributes());\n if (options) {\n array(options.excludeChannels).forEach(key => {\n delete from[key];\n delete to[key];\n });\n }\n let excludeChannels: string[];\n if (element.mark && element.mark.markType && (excludeChannels = BUILT_IN_EXCLUDE_CHANNELS[element.mark.markType])) {\n excludeChannels.forEach(key => {\n delete from[key];\n delete to[key];\n });\n }\n\n Object.keys(to).forEach(key => {\n if (isEmptyByKey(key, from, to)) {\n delete from[key];\n delete to[key];\n }\n });\n\n const final = element.getFinalGraphicAttributes();\n\n Object.keys(from).forEach(key => {\n if (isNil(to[key])) {\n if (isNil(final[key]) || isEqual(from[key], final[key])) {\n delete from[key];\n } else {\n to[key] = final[key];\n }\n }\n });\n\n return { from, to };\n};\n"]}
1
+ {"version":3,"sources":["../src/graph/animation/animation/update.ts"],"names":[],"mappings":";;;AAAA,6CAAyD;AAQzD,MAAM,yBAAyB,GAAG;IAChC,MAAM,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC;CACjC,CAAC;AAEK,MAAM,MAAM,GAA4B,CAC7C,OAAiB,EACjB,OAAgC,EAChC,mBAAyC,EACzC,EAAE;IACF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC;IACnE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC;IACjE,IAAI,OAAO,EAAE;QACX,IAAA,cAAK,EAAC,OAAO,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;KACJ;IACD,IAAI,eAAyB,CAAC;IAC9B,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,eAAe,GAAG,yBAAyB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE;QACjH,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;KACJ;IAED,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC5B,IAAI,IAAA,gBAAO,EAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;YAC/B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;SAChB;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,OAAO,CAAC,yBAAyB,EAAE,CAAC;IAElD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC9B,IAAI,IAAA,cAAK,EAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;YAClB,IAAI,IAAA,cAAK,EAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,IAAA,gBAAO,EAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE;gBACvD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;aAClB;iBAAM;gBACL,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;aACtB;SACF;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACtB,CAAC,CAAC;AAzCW,QAAA,MAAM,UAyCjB","file":"update.js","sourcesContent":["import { array, isNil, isEqual } from '@visactor/vutils';\nimport type { IElement } from '../../../types';\nimport type { IAnimationParameters, TypeAnimation } from '../../../types/animate';\n\nexport interface IUpdateAnimationOptions {\n excludeChannels: string[];\n}\n\nconst BUILT_IN_EXCLUDE_CHANNELS = {\n symbol: ['_mo_hide_', 'visible']\n};\n\nexport const update: TypeAnimation<IElement> = (\n element: IElement,\n options: IUpdateAnimationOptions,\n animationParameters: IAnimationParameters\n) => {\n const from = Object.assign({}, element.getPrevGraphicAttributes());\n const to = Object.assign({}, element.getNextGraphicAttributes());\n if (options) {\n array(options.excludeChannels).forEach(key => {\n delete from[key];\n delete to[key];\n });\n }\n let excludeChannels: string[];\n if (element.mark && element.mark.markType && (excludeChannels = BUILT_IN_EXCLUDE_CHANNELS[element.mark.markType])) {\n excludeChannels.forEach(key => {\n delete from[key];\n delete to[key];\n });\n }\n\n Object.keys(to).forEach(key => {\n if (isEqual(from[key], to[key])) {\n delete from[key];\n delete to[key];\n }\n });\n\n const final = element.getFinalGraphicAttributes();\n\n Object.keys(from).forEach(key => {\n if (isNil(to[key])) {\n if (isNil(final[key]) || isEqual(from[key], final[key])) {\n delete from[key];\n } else {\n to[key] = final[key];\n }\n }\n });\n\n return { from, to };\n};\n"]}
@@ -1,12 +1,2 @@
1
- import type { IGrammarBase, IMark, IRunningConfig } from '../../types';
2
- import type { DiffResult } from '../../types/base';
3
- import type { IMorph } from '../../types/morph';
4
- export declare class Morph implements IMorph {
5
- diffGrammar<U extends IGrammarBase>(prevGrammars: U[], nextGrammars: U[]): DiffResult<U, U>;
6
- diffMark(prevMarks: IMark[], nextMarks: IMark[], runningConfig: IRunningConfig): DiffResult<IMark[], IMark[]>;
7
- private _appendMorphKeyToElements;
8
- morph(prevMarks: IMark[], nextMarks: IMark[], runningConfig: IRunningConfig): void;
9
- private diffUpdateByGroup;
10
- private doMorph;
11
- private divideElements;
12
- }
1
+ import type { IMark, IRunningConfig } from '../../types';
2
+ export declare const morph: (prevMarks: IMark[], nextMarks: IMark[], runningConfig: IRunningConfig) => void;
@@ -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":"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","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 const skipKeys = ['x', 'y', 'x1', 'y1', 'defined', 'size', 'width', 'height', 'context'];\n\n Object.keys(itemNextAttrs).forEach(key => {\n if (skipKeys.includes(key)) {\n return;\n }\n result[key] = itemNextAttrs[key];\n });\n\n return result;\n}\n\nexport function removeSegmentAttrs(itemNextAttrs: any, element?: IElement) {\n if (!itemNextAttrs || !itemNextAttrs.segments || !itemNextAttrs.segments.length) {\n return itemNextAttrs;\n }\n\n // TODO 现在非常hack\n const segmentKeys = element?.mark?.markType === 'area' ? ['fillOpacity', 'strokeOpacity'] : ['strokeOpacity'];\n const result = {};\n Object.keys(itemNextAttrs).forEach(key => {\n if (segmentKeys.includes(key)) {\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 const skipKeys = ['x', 'y', 'x1', 'y1', 'defined', 'size', 'width', 'height', 'context'];\n\n Object.keys(itemNextAttrs).forEach(key => {\n if (skipKeys.includes(key)) {\n return;\n }\n result[key] = itemNextAttrs[key];\n });\n\n return result;\n}\n\nexport function removeSegmentAttrs(itemNextAttrs: any, element?: IElement) {\n if (!itemNextAttrs || !itemNextAttrs.segments || !itemNextAttrs.segments.length) {\n return itemNextAttrs;\n }\n\n // TODO 现在非常hack\n const segmentKeys = element?.mark?.markType === 'area' ? ['fillOpacity', 'strokeOpacity'] : ['strokeOpacity'];\n const result = {};\n Object.keys(itemNextAttrs).forEach(key => {\n if (segmentKeys.includes(key)) {\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;