@visactor/vgrammar-core 0.14.0-alpha.2 → 0.14.0-alpha.4

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 (215) 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.d.ts +1 -0
  31. package/cjs/graph/attributes/line.js +17 -5
  32. package/cjs/graph/attributes/line.js.map +1 -1
  33. package/cjs/graph/canvas-renderer.d.ts +1 -1
  34. package/cjs/graph/canvas-renderer.js +4 -4
  35. package/cjs/graph/canvas-renderer.js.map +1 -1
  36. package/cjs/graph/constants.d.ts +1 -0
  37. package/cjs/graph/constants.js +2 -2
  38. package/cjs/graph/constants.js.map +1 -1
  39. package/cjs/graph/element.d.ts +1 -0
  40. package/cjs/graph/element.js +18 -11
  41. package/cjs/graph/element.js.map +1 -1
  42. package/cjs/graph/glyph-element.js +7 -6
  43. package/cjs/graph/glyph-element.js.map +1 -1
  44. package/cjs/graph/layout/layout.d.ts +1 -0
  45. package/cjs/graph/layout/layout.js +8 -2
  46. package/cjs/graph/layout/layout.js.map +1 -1
  47. package/cjs/graph/mark/graphic.js +14 -8
  48. package/cjs/graph/mark/graphic.js.map +1 -1
  49. package/cjs/graph/util/point.js +10 -26
  50. package/cjs/graph/util/point.js.map +1 -1
  51. package/cjs/graph/view-diff.d.ts +8 -0
  52. package/cjs/graph/view-diff.js +93 -0
  53. package/cjs/graph/view-diff.js.map +1 -0
  54. package/cjs/index.d.ts +8 -1
  55. package/cjs/index.js +66 -2
  56. package/cjs/index.js.map +1 -1
  57. package/cjs/interactions/brush-base.js +1 -2
  58. package/cjs/interactions/brush-filter.js +2 -1
  59. package/cjs/interactions/fish-eye.js +1 -2
  60. package/cjs/interactions/index.js +2 -1
  61. package/cjs/interactions/tooltip.js +1 -1
  62. package/cjs/parse/event.d.ts +0 -2
  63. package/cjs/parse/event.js +4 -10
  64. package/cjs/parse/event.js.map +1 -1
  65. package/cjs/parse/util.js.map +1 -1
  66. package/cjs/transforms/mark/mark-overlap.js +6 -6
  67. package/cjs/transforms/mark/mark-overlap.js.map +1 -1
  68. package/cjs/types/element.d.ts +1 -1
  69. package/cjs/types/element.js.map +1 -1
  70. package/cjs/types/morph.d.ts +1 -2
  71. package/cjs/types/morph.js.map +1 -1
  72. package/cjs/types/renderer.d.ts +6 -1
  73. package/cjs/types/renderer.js.map +1 -1
  74. package/cjs/view/View.d.ts +3 -6
  75. package/cjs/view/View.js +52 -105
  76. package/cjs/view/View.js.map +1 -1
  77. package/cjs/view/animate.js +2 -1
  78. package/cjs/view/animate.js.map +1 -1
  79. package/cjs/view/constants.d.ts +2 -0
  80. package/cjs/view/constants.js +3 -2
  81. package/cjs/view/constants.js.map +1 -1
  82. package/cjs/view/events.d.ts +0 -1
  83. package/cjs/view/events.js +3 -17
  84. package/cjs/view/events.js.map +1 -1
  85. package/cjs/view/glyph.d.ts +4 -0
  86. package/cjs/view/glyph.js +12 -3
  87. package/cjs/view/glyph.js.map +1 -1
  88. package/cjs/view/group.js +3 -3
  89. package/cjs/view/group.js.map +1 -1
  90. package/cjs/view/mark-animate-mixin.d.ts +1 -0
  91. package/cjs/view/mark-animate-mixin.js +29 -0
  92. package/cjs/view/mark-animate-mixin.js.map +1 -0
  93. package/cjs/view/mark.d.ts +2 -0
  94. package/cjs/view/mark.js +30 -23
  95. package/cjs/view/mark.js.map +1 -1
  96. package/cjs/view/view-animate-mixin.d.ts +1 -0
  97. package/cjs/view/view-animate-mixin.js +26 -0
  98. package/cjs/view/view-animate-mixin.js.map +1 -0
  99. package/cjs/view/view-event-mixin.d.ts +1 -0
  100. package/cjs/view/view-event-mixin.js +92 -0
  101. package/cjs/view/view-event-mixin.js.map +1 -0
  102. package/cjs/view/view-morph-mixin.d.ts +1 -0
  103. package/cjs/view/view-morph-mixin.js +32 -0
  104. package/cjs/view/view-morph-mixin.js.map +1 -0
  105. package/es/component/axis.d.ts +2 -0
  106. package/es/component/axis.js +10 -0
  107. package/es/component/axis.js.map +1 -1
  108. package/es/component/grid.d.ts +2 -0
  109. package/es/component/grid.js +10 -0
  110. package/es/component/grid.js.map +1 -1
  111. package/es/component/index.d.ts +2 -2
  112. package/es/component/index.js +2 -2
  113. package/es/component/index.js.map +1 -1
  114. package/es/core/factory.d.ts +8 -1
  115. package/es/core/factory.js +8 -1
  116. package/es/core/factory.js.map +1 -1
  117. package/es/glyph/boxplot.js +4 -2
  118. package/es/glyph/boxplot.js.map +1 -1
  119. package/es/glyph/link-path.js +4 -2
  120. package/es/glyph/link-path.js.map +1 -1
  121. package/es/glyph/ripple.js +3 -1
  122. package/es/glyph/ripple.js.map +1 -1
  123. package/es/glyph/tree-path.js +4 -2
  124. package/es/glyph/tree-path.js.map +1 -1
  125. package/es/glyph/violin.js +4 -2
  126. package/es/glyph/violin.js.map +1 -1
  127. package/es/glyph/wave.js +3 -1
  128. package/es/glyph/wave.js.map +1 -1
  129. package/es/graph/animation/animation/update.js +1 -3
  130. package/es/graph/animation/animation/update.js.map +1 -1
  131. package/es/graph/animation/morph.d.ts +2 -12
  132. package/es/graph/animation/morph.js +72 -159
  133. package/es/graph/animation/morph.js.map +1 -1
  134. package/es/graph/attributes/line.d.ts +1 -0
  135. package/es/graph/attributes/line.js +14 -3
  136. package/es/graph/attributes/line.js.map +1 -1
  137. package/es/graph/canvas-renderer.d.ts +1 -1
  138. package/es/graph/canvas-renderer.js +5 -5
  139. package/es/graph/canvas-renderer.js.map +1 -1
  140. package/es/graph/constants.d.ts +1 -0
  141. package/es/graph/constants.js +2 -0
  142. package/es/graph/constants.js.map +1 -1
  143. package/es/graph/element.d.ts +1 -0
  144. package/es/graph/element.js +18 -13
  145. package/es/graph/element.js.map +1 -1
  146. package/es/graph/glyph-element.js +6 -8
  147. package/es/graph/glyph-element.js.map +1 -1
  148. package/es/graph/layout/layout.d.ts +1 -0
  149. package/es/graph/layout/layout.js +6 -0
  150. package/es/graph/layout/layout.js.map +1 -1
  151. package/es/graph/mark/graphic.js +13 -7
  152. package/es/graph/mark/graphic.js.map +1 -1
  153. package/es/graph/util/point.js +10 -26
  154. package/es/graph/util/point.js.map +1 -1
  155. package/es/graph/view-diff.d.ts +8 -0
  156. package/es/graph/view-diff.js +89 -0
  157. package/es/graph/view-diff.js.map +1 -0
  158. package/es/index.d.ts +8 -1
  159. package/es/index.js +29 -1
  160. package/es/index.js.map +1 -1
  161. package/es/interactions/element-active.js +1 -2
  162. package/es/interactions/element-highlight-by-group.js +2 -1
  163. package/es/interactions/fish-eye.js +1 -1
  164. package/es/parse/event.d.ts +0 -2
  165. package/es/parse/event.js +3 -7
  166. package/es/parse/event.js.map +1 -1
  167. package/es/parse/option.js +1 -2
  168. package/es/parse/scale.js +2 -1
  169. package/es/parse/util.js.map +1 -1
  170. package/es/transforms/mark/mark-overlap.js +6 -6
  171. package/es/transforms/mark/mark-overlap.js.map +1 -1
  172. package/es/types/element.d.ts +1 -1
  173. package/es/types/element.js.map +1 -1
  174. package/es/types/morph.d.ts +1 -2
  175. package/es/types/morph.js.map +1 -1
  176. package/es/types/renderer.d.ts +6 -1
  177. package/es/types/renderer.js.map +1 -1
  178. package/es/view/View.d.ts +3 -6
  179. package/es/view/View.js +53 -114
  180. package/es/view/View.js.map +1 -1
  181. package/es/view/animate.js +2 -1
  182. package/es/view/animate.js.map +1 -1
  183. package/es/view/constants.d.ts +2 -0
  184. package/es/view/constants.js +4 -0
  185. package/es/view/constants.js.map +1 -1
  186. package/es/view/events.d.ts +0 -1
  187. package/es/view/events.js +1 -15
  188. package/es/view/events.js.map +1 -1
  189. package/es/view/glyph.d.ts +4 -0
  190. package/es/view/glyph.js +11 -0
  191. package/es/view/glyph.js.map +1 -1
  192. package/es/view/group.js +2 -4
  193. package/es/view/group.js.map +1 -1
  194. package/es/view/mark-animate-mixin.d.ts +1 -0
  195. package/es/view/mark-animate-mixin.js +25 -0
  196. package/es/view/mark-animate-mixin.js.map +1 -0
  197. package/es/view/mark.d.ts +2 -0
  198. package/es/view/mark.js +30 -25
  199. package/es/view/mark.js.map +1 -1
  200. package/es/view/view-animate-mixin.d.ts +1 -0
  201. package/es/view/view-animate-mixin.js +16 -0
  202. package/es/view/view-animate-mixin.js.map +1 -0
  203. package/es/view/view-event-mixin.d.ts +1 -0
  204. package/es/view/view-event-mixin.js +90 -0
  205. package/es/view/view-event-mixin.js.map +1 -0
  206. package/es/view/view-morph-mixin.d.ts +1 -0
  207. package/es/view/view-morph-mixin.js +22 -0
  208. package/es/view/view-morph-mixin.js.map +1 -0
  209. package/package.json +12 -12
  210. package/cjs/graph/util/element.d.ts +0 -2
  211. package/cjs/graph/util/element.js +0 -10
  212. package/cjs/graph/util/element.js.map +0 -1
  213. package/es/graph/util/element.d.ts +0 -2
  214. package/es/graph/util/element.js +0 -8
  215. package/es/graph/util/element.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/transforms/mark/mark-overlap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGzC,MAAM,QAAQ,GAAG,WAAW,CAAC;AAE7B,SAAS,KAAK,CAAC,QAAoB;IACjC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QACzB,MAAM,IAAI,GAAG,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAEnD,IAAI,IAAI,EAAE;YACR,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC7C,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;SAC9C;IACH,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,QAAQ,CAAC,QAAoB,EAAE,KAAa,EAAE,QAAgB,EAAE,SAAkB;IACzF,IAAI,SAAS,EAAE;QACb,IAAI,KAAK,GAAG,CAAC,QAAQ,CAAC;QACtB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,IAAI,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,KAAK,KAAK,EAAE;gBAEpD,OAAO;aACR;YAED,MAAM,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAClD,IAAI,WAAW,EAAE;gBACf,SAAS,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,QAAQ,CAAC;aACpC;YACD,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,SAAS,GAAG,KAAK,GAAG,CAAC,EAAE;gBACtD,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE;oBAC7C,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;oBAC5C,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;iBAC/C;aACF;iBAAM;gBACL,KAAK,GAAG,QAAQ,CAAC;aAClB;YAED,KAAK,GAAG,CAAC,CAAC;QACZ,CAAC,CAAC,CAAC;KACJ;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,QAAoB,EAAE,KAAa,EAAE,QAAgB,EAAE,SAAkB;IACzF,IAAI,SAAS,EAAE;QACb,IAAI,KAAK,GAAG,CAAC,QAAQ,CAAC;QACtB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,IAAI,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,KAAK,KAAK,EAAE;gBAEpD,OAAO;aACR;YAED,MAAM,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAClD,IAAI,WAAW,EAAE;gBACf,SAAS,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,QAAQ,CAAC;aACpC;YACD,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,SAAS,GAAG,KAAK,GAAG,CAAC,EAAE;gBACtD,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE;oBAC7C,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;oBAC5C,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;iBAC/C;aACF;iBAAM;gBACL,KAAK,GAAG,QAAQ,CAAC;aAClB;YAED,KAAK,GAAG,CAAC,CAAC;QACZ,CAAC,CAAC,CAAC;KACJ;AACH,CAAC;AAED,SAAS,SAAS,CAAC,QAAoB,EAAE,KAAa,EAAE,QAAgB,EAAE,SAAkB;IAC1F,IAAI,SAAS,EAAE;QACb,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC;QACxB,IAAI,KAAK,GAAG,CAAC,QAAQ,CAAC;QACtB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,IAAI,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,KAAK,KAAK,EAAE;gBAEpD,OAAO;aACR;YAED,MAAM,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAElD,IAAI,WAAW,EAAE;gBACf,SAAS,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,QAAQ,CAAC;aACpC;YACD,GAAG,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;YACxD,IAAI,GAAG,GAAG,CAAC,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE;gBACtC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE;oBAC7C,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;oBAC5C,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;iBAC/C;aACF;iBAAM;gBACL,KAAK,GAAG,QAAQ,CAAC;aAClB;YAED,KAAK,GAAG,CAAC,CAAC;QACZ,CAAC,CAAC,CAAC;KACJ;AACH,CAAC;AAQD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,OAAoC,EAAE,YAAwB,EAAE,EAAE;IAC1F,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;QAC9C,OAAO;KACR;IACD,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACzB,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;QACjB,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAC9C,MAAM,GAAG,IAAI,CAAC;SACf;KACF;IAED,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAE5D,MAAM,aAAa,GAAG,CAAC,QAAoB,EAAE,EAAE;QAC7C,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEhB,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI;YACjC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC7B,OAAO,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YACjE,CAAC,CAAC;YACJ,CAAC,CAAC,QAAQ,CAAC;QAEb,IAAI,SAAS,KAAK,CAAC,EAAE;YACnB,SAAS,CAAC,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;SACpD;aAAM,IAAI,SAAS,KAAK,CAAC,EAAE;YAC1B,QAAQ,CAAC,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;SACnD;aAAM;YACL,QAAQ,CAAC,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;SACnD;IACH,CAAC,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE;QACZ,aAAa,CAAC,YAAY,CAAC,CAAC;KAC7B;SAAM;QAEL,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAkC,EAAE,OAAiB,EAAE,EAAE;YACxF,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC;YAE9C,IAAI,GAAG,CAAC,SAAS,CAAC,EAAE;gBAClB,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAC9B;iBAAM;gBACL,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;aAC5B;YAED,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC7B,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;KACJ;IAED,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC","file":"mark-overlap.js","sourcesContent":["import { isNil } from '@visactor/vutils';\nimport type { IElement, MarkOverlapTransformOptions } from '../../types';\n\nconst HIDE_KEY = '_mo_hide_';\n\nfunction reset(elements: IElement[]) {\n elements.forEach(element => {\n const hide = element.getGraphicAttribute(HIDE_KEY);\n\n if (hide) {\n element.setGraphicAttribute('visible', true);\n element.setGraphicAttribute(HIDE_KEY, false);\n }\n });\n return elements;\n}\n\nfunction overlapX(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n let lastX = -Infinity;\n let lastR = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentX = element.getGraphicAttribute('x');\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n if (Math.abs(currentX - lastX) < itemDelta + lastR + r) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastX = currentX;\n }\n\n lastR = r;\n });\n }\n}\n\nfunction overlapY(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n let lastY = -Infinity;\n let lastR = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentY = element.getGraphicAttribute('y');\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n if (Math.abs(currentY - lastY) < itemDelta + lastR + r) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastY = currentY;\n }\n\n lastR = r;\n });\n }\n}\n\nfunction overlapXY(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n const lastX = -Infinity;\n let lastY = -Infinity;\n let lastR = 0;\n let dis = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentX = element.getGraphicAttribute('x');\n const currentY = element.getGraphicAttribute('y');\n\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n dis = (lastX - currentX) ** 2 + (lastY - currentY) ** 2;\n if (dis < (itemDelta + lastR + r) ** 2) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastY = currentY;\n }\n\n lastR = r;\n });\n }\n}\n\n/**\n * 针对mark的防重叠\n * @param {object} options - The parameters for this operator.\n * @param {data} [options.followMark]\n * @constructor\n */\nexport const transform = (options: MarkOverlapTransformOptions, upstreamData: IElement[]) => {\n if (!upstreamData || upstreamData.length === 0) {\n return;\n }\n let { radius } = options;\n if (isNil(radius)) {\n if (upstreamData[0].mark.markType === 'symbol') {\n radius = true;\n }\n }\n\n const { direction, delta, deltaMul = 1, groupBy } = options;\n\n const handleOverlap = (elements: IElement[]) => {\n reset(elements);\n\n const sortedElements = options.sort\n ? elements.slice().sort((a, b) => {\n return a.getGraphicAttribute('x') - b.getGraphicAttribute('x');\n })\n : elements;\n\n if (direction === 0) {\n overlapXY(sortedElements, delta, deltaMul, radius);\n } else if (direction === 1) {\n overlapX(sortedElements, delta, deltaMul, radius);\n } else {\n overlapY(sortedElements, delta, deltaMul, radius);\n }\n };\n\n if (!groupBy) {\n handleOverlap(upstreamData);\n } else {\n // 分组\n const map = upstreamData.reduce((res: { [key: string]: IElement[] }, element: IElement) => {\n const groupName = element.getDatum()[groupBy];\n\n if (res[groupName]) {\n res[groupName].push(element);\n } else {\n res[groupName] = [element];\n }\n\n return res;\n }, {});\n\n Object.keys(map).forEach(key => {\n handleOverlap(map[key]);\n });\n }\n\n return upstreamData;\n};\n"]}
1
+ {"version":3,"sources":["../src/transforms/mark/mark-overlap.ts"],"names":[],"mappings":"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","file":"mark-overlap.js","sourcesContent":["import { isNil } from '@visactor/vutils';\nimport type { IElement, MarkOverlapTransformOptions } from '../../types';\nimport { MARK_OVERLAP_HIDE_KEY } from '../../graph/constants';\n\nfunction reset(elements: IElement[]) {\n elements.forEach(element => {\n const hide = element.getGraphicAttribute(MARK_OVERLAP_HIDE_KEY);\n\n if (hide) {\n element.setGraphicAttribute('visible', true);\n element.setGraphicAttribute(MARK_OVERLAP_HIDE_KEY, false);\n }\n });\n return elements;\n}\n\nfunction overlapX(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n let lastX = -Infinity;\n let lastR = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentX = element.getGraphicAttribute('x');\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n if (Math.abs(currentX - lastX) < itemDelta + lastR + r) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(MARK_OVERLAP_HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastX = currentX;\n }\n\n lastR = r;\n });\n }\n}\n\nfunction overlapY(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n let lastY = -Infinity;\n let lastR = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentY = element.getGraphicAttribute('y');\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n if (Math.abs(currentY - lastY) < itemDelta + lastR + r) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(MARK_OVERLAP_HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastY = currentY;\n }\n\n lastR = r;\n });\n }\n}\n\nfunction overlapXY(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n const lastX = -Infinity;\n let lastY = -Infinity;\n let lastR = 0;\n let dis = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentX = element.getGraphicAttribute('x');\n const currentY = element.getGraphicAttribute('y');\n\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n dis = (lastX - currentX) ** 2 + (lastY - currentY) ** 2;\n if (dis < (itemDelta + lastR + r) ** 2) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(MARK_OVERLAP_HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastY = currentY;\n }\n\n lastR = r;\n });\n }\n}\n\n/**\n * 针对mark的防重叠\n * @param {object} options - The parameters for this operator.\n * @param {data} [options.followMark]\n * @constructor\n */\nexport const transform = (options: MarkOverlapTransformOptions, upstreamData: IElement[]) => {\n if (!upstreamData || upstreamData.length === 0) {\n return;\n }\n let { radius } = options;\n if (isNil(radius)) {\n if (upstreamData[0].mark.markType === 'symbol') {\n radius = true;\n }\n }\n\n const { direction, delta, deltaMul = 1, groupBy } = options;\n\n const handleOverlap = (elements: IElement[]) => {\n reset(elements);\n\n const sortedElements = options.sort\n ? elements.slice().sort((a, b) => {\n return a.getGraphicAttribute('x') - b.getGraphicAttribute('x');\n })\n : elements;\n\n if (direction === 0) {\n overlapXY(sortedElements, delta, deltaMul, radius);\n } else if (direction === 1) {\n overlapX(sortedElements, delta, deltaMul, radius);\n } else {\n overlapY(sortedElements, delta, deltaMul, radius);\n }\n };\n\n if (!groupBy) {\n handleOverlap(upstreamData);\n } else {\n // 分组\n const map = upstreamData.reduce((res: { [key: string]: IElement[] }, element: IElement) => {\n const groupName = element.getDatum()[groupBy];\n\n if (res[groupName]) {\n res[groupName].push(element);\n } else {\n res[groupName] = [element];\n }\n\n return res;\n }, {});\n\n Object.keys(map).forEach(key => {\n handleOverlap(map[key]);\n });\n }\n\n return upstreamData;\n};\n"]}
@@ -69,7 +69,7 @@ export interface IElement {
69
69
  setItemAttributes: (attributes: {
70
70
  [channel: string]: any;
71
71
  } | any[]) => void;
72
- updateData: (groupKey: string, data: any[], keyGenerator: MarkKeySpec, view: any) => void;
72
+ updateData: (groupKey: string, data: any[], keyGenerator: MarkKeySpec) => void;
73
73
  state: (markState: MarkFunctionType<string | string[]>, parameters?: any) => void;
74
74
  encodeItems: (items: MarkElementItem[], encoders: BaseEncodeSpec, isReentered?: boolean, parameters?: any) => void;
75
75
  encodeGraphic: (attributes?: any) => void;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/element.ts"],"names":[],"mappings":"","file":"element.js","sourcesContent":["import type {\n IArc,\n IArc3d,\n IArea,\n ICircle,\n IGlyph,\n IGraphic,\n IGroup,\n IImage,\n ILine,\n IPath,\n IPolygon,\n IPyramid3d,\n IRect,\n IRect3d,\n IRichText,\n ISymbol,\n IText\n} from '@visactor/vrender-core';\nimport type { DiffState } from '../graph/enums';\nimport type { IMark, IGlyphMark } from './grammar';\nimport type {\n BaseEncodeSpec,\n BaseSingleEncodeSpec,\n IMarkConfig,\n MarkFunctionType,\n MarkKeySpec,\n MarkType\n} from './mark';\n\nexport interface ElementGraphicMap {\n circle: ICircle;\n arc: IArc;\n area: IArea;\n image: IImage;\n line: ILine;\n path: IPath;\n rule: ILine;\n shape: IPath;\n symbol: ISymbol;\n text: IText;\n richtext: IRichText;\n polygon: IPolygon;\n cell: ISymbol;\n interval: IGraphic;\n rect: IRect;\n rect3d: IRect3d;\n arc3d: IArc3d;\n pyramid3d: IPyramid3d;\n group: IGroup;\n glyph: IGlyph;\n linkPath: IGlyph;\n treePath: IGlyph;\n wave: IGlyph;\n ripplePoint: IGlyph;\n barBoxplot: IGlyph;\n boxPlot: IGlyph;\n component: IGroup;\n axis: IGroup;\n legend: IGroup;\n corsshair: IGroup;\n slider: IGroup;\n datazoom: IGroup;\n label: IGroup;\n player: IGroup;\n}\n\nexport type GetGraphicByType<T> = T extends keyof ElementGraphicMap ? ElementGraphicMap[T] : IGraphic;\n\n/**\n * 保存graphicItem状态\n */\nexport interface MarkElementItem {\n /** 唯一key */\n key: string;\n /** 原始数据 */\n datum: any;\n /** VGrammar view */\n view: any;\n /** 当前渲染帧下graphicItem对应的最新属性 */\n nextAttrs?: any;\n /** 是否初始化过,用于解决collection mark对应的item,可能跳过enter状态的问题 */\n // hasEntered: boolean;\n}\nexport interface IElement {\n mark: IMark;\n isReserved: boolean;\n diffState: DiffState;\n key: string;\n groupKey?: string;\n data?: any[];\n /**\n * 不推荐使用,但是collection图元暂时可能回涉及到相关修改\n */\n items: MarkElementItem[];\n\n initGraphicItem: (attrs?: any) => void;\n updateGraphicItem: () => void;\n\n getDatum: () => any;\n getBounds: () => any;\n getGraphicItem: () => IGraphic;\n removeGraphicItem: () => void;\n resetGraphicItem: () => void;\n\n /**\n * 获取 graphic 视觉通道属性\n * @param channel 视觉通道\n * @param prev 是否从之前的 graphic 属性上获取,默认为 false\n * @returns 视觉通道值\n */\n getGraphicAttribute: (channel: string, prev?: boolean) => any;\n /**\n * 设置 graphic 视觉通道属性\n * @param channel 视觉通道\n * @param value 视觉通道属性\n * @param final 是否更新 graphic 最终变更的视觉通道结果,默认为 false\n */\n setGraphicAttribute: (channel: string, value: any, final?: boolean) => void;\n /**\n * 设置一系列 graphic 视觉通道属性\n * @param attributes 视觉通道键值对\n * @param final 是否更新 graphic 最终变更的视觉通道结果,默认为 false\n */\n setGraphicAttributes: (attributes: { [channel: string]: any }, final?: boolean) => void;\n\n /**\n * 【慎重使用】获取 VGrammar 自身的视觉通道属性\n * 只有在 'afterEncodeItems' 时机的mark transform中才能调用\n */\n getItemAttribute: (channel?: string) => any;\n /**\n * 【慎重使用】设置 VGrammar 自身的视觉通道\n * 只有在 'afterEncodeItems' 时机的mark transform中才能调用\n * @param attributes\n * @returns\n */\n setItemAttributes: (attributes: { [channel: string]: any } | any[]) => void;\n\n // element 执行流程相关接口\n updateData: (groupKey: string, data: any[], keyGenerator: MarkKeySpec, view: any) => void;\n state: (markState: MarkFunctionType<string | string[]>, parameters?: any) => void;\n encodeItems: (items: MarkElementItem[], encoders: BaseEncodeSpec, isReentered?: boolean, parameters?: any) => void;\n encodeGraphic: (attributes?: any) => void;\n transformElementItems: (items: MarkElementItem[], markType: MarkType, computePoints?: boolean) => Record<string, any>;\n remove: () => void;\n release: () => void;\n\n // 动画相关接口\n\n getFinalGraphicAttributes: () => { [key: string]: any };\n getPrevGraphicAttributes: () => { [key: string]: any };\n getNextGraphicAttributes: () => { [key: string]: any };\n getFinalAnimationAttribute: (channel: string) => any;\n getFinalAnimationAttributes: () => { [key: string]: any };\n clearChangedGraphicAttributes: () => void;\n clearGraphicAttributes: () => void;\n\n // state相关接口\n getStates: () => string[];\n hasState: (state: string) => boolean;\n clearStates: (noAnimation?: boolean) => void;\n addState: (state: string | string[], attrs?: any) => boolean;\n removeState: (state: string | string[]) => boolean;\n useStates: (states: string[], noAnimation?: boolean) => boolean;\n updateStates: (states: Record<string, boolean | BaseSingleEncodeSpec>) => any;\n}\n\nexport interface IGlyphElement<P = any> extends IElement {\n mark: IGlyphMark;\n\n getGlyphGraphicItems: () => { [markName: string]: any };\n\n getGraphicAttribute: (channel: string, prev?: boolean, markName?: any) => any;\n setGraphicAttribute: (channel: string, value: any, final?: boolean, markName?: any) => void;\n setGraphicAttributes: (attributes: { [channel: string]: any }, final?: boolean, markName?: any) => void;\n\n getFinalGraphicAttributes: (markName?: string) => { [key: string]: any };\n getPrevGraphicAttributes: (markName?: string) => { [key: string]: any };\n getNextGraphicAttributes: (markName?: string) => { [key: string]: any };\n\n encodeCustom: (nextAttrs?: any) => { [markName: string]: any };\n}\n"]}
1
+ {"version":3,"sources":["../src/types/element.ts"],"names":[],"mappings":"","file":"element.js","sourcesContent":["import type {\n IArc,\n IArc3d,\n IArea,\n ICircle,\n IGlyph,\n IGraphic,\n IGroup,\n IImage,\n ILine,\n IPath,\n IPolygon,\n IPyramid3d,\n IRect,\n IRect3d,\n IRichText,\n ISymbol,\n IText\n} from '@visactor/vrender-core';\nimport type { DiffState } from '../graph/enums';\nimport type { IMark, IGlyphMark } from './grammar';\nimport type {\n BaseEncodeSpec,\n BaseSingleEncodeSpec,\n IMarkConfig,\n MarkFunctionType,\n MarkKeySpec,\n MarkType\n} from './mark';\n\nexport interface ElementGraphicMap {\n circle: ICircle;\n arc: IArc;\n area: IArea;\n image: IImage;\n line: ILine;\n path: IPath;\n rule: ILine;\n shape: IPath;\n symbol: ISymbol;\n text: IText;\n richtext: IRichText;\n polygon: IPolygon;\n cell: ISymbol;\n interval: IGraphic;\n rect: IRect;\n rect3d: IRect3d;\n arc3d: IArc3d;\n pyramid3d: IPyramid3d;\n group: IGroup;\n glyph: IGlyph;\n linkPath: IGlyph;\n treePath: IGlyph;\n wave: IGlyph;\n ripplePoint: IGlyph;\n barBoxplot: IGlyph;\n boxPlot: IGlyph;\n component: IGroup;\n axis: IGroup;\n legend: IGroup;\n corsshair: IGroup;\n slider: IGroup;\n datazoom: IGroup;\n label: IGroup;\n player: IGroup;\n}\n\nexport type GetGraphicByType<T> = T extends keyof ElementGraphicMap ? ElementGraphicMap[T] : IGraphic;\n\n/**\n * 保存graphicItem状态\n */\nexport interface MarkElementItem {\n /** 唯一key */\n key: string;\n /** 原始数据 */\n datum: any;\n /** VGrammar view */\n view: any;\n /** 当前渲染帧下graphicItem对应的最新属性 */\n nextAttrs?: any;\n /** 是否初始化过,用于解决collection mark对应的item,可能跳过enter状态的问题 */\n // hasEntered: boolean;\n}\nexport interface IElement {\n mark: IMark;\n isReserved: boolean;\n diffState: DiffState;\n key: string;\n groupKey?: string;\n data?: any[];\n /**\n * 不推荐使用,但是collection图元暂时可能回涉及到相关修改\n */\n items: MarkElementItem[];\n\n initGraphicItem: (attrs?: any) => void;\n updateGraphicItem: () => void;\n\n getDatum: () => any;\n getBounds: () => any;\n getGraphicItem: () => IGraphic;\n removeGraphicItem: () => void;\n resetGraphicItem: () => void;\n\n /**\n * 获取 graphic 视觉通道属性\n * @param channel 视觉通道\n * @param prev 是否从之前的 graphic 属性上获取,默认为 false\n * @returns 视觉通道值\n */\n getGraphicAttribute: (channel: string, prev?: boolean) => any;\n /**\n * 设置 graphic 视觉通道属性\n * @param channel 视觉通道\n * @param value 视觉通道属性\n * @param final 是否更新 graphic 最终变更的视觉通道结果,默认为 false\n */\n setGraphicAttribute: (channel: string, value: any, final?: boolean) => void;\n /**\n * 设置一系列 graphic 视觉通道属性\n * @param attributes 视觉通道键值对\n * @param final 是否更新 graphic 最终变更的视觉通道结果,默认为 false\n */\n setGraphicAttributes: (attributes: { [channel: string]: any }, final?: boolean) => void;\n\n /**\n * 【慎重使用】获取 VGrammar 自身的视觉通道属性\n * 只有在 'afterEncodeItems' 时机的mark transform中才能调用\n */\n getItemAttribute: (channel?: string) => any;\n /**\n * 【慎重使用】设置 VGrammar 自身的视觉通道\n * 只有在 'afterEncodeItems' 时机的mark transform中才能调用\n * @param attributes\n * @returns\n */\n setItemAttributes: (attributes: { [channel: string]: any } | any[]) => void;\n\n // element 执行流程相关接口\n updateData: (groupKey: string, data: any[], keyGenerator: MarkKeySpec) => void;\n state: (markState: MarkFunctionType<string | string[]>, parameters?: any) => void;\n encodeItems: (items: MarkElementItem[], encoders: BaseEncodeSpec, isReentered?: boolean, parameters?: any) => void;\n encodeGraphic: (attributes?: any) => void;\n transformElementItems: (items: MarkElementItem[], markType: MarkType, computePoints?: boolean) => Record<string, any>;\n remove: () => void;\n release: () => void;\n\n // 动画相关接口\n\n getFinalGraphicAttributes: () => { [key: string]: any };\n getPrevGraphicAttributes: () => { [key: string]: any };\n getNextGraphicAttributes: () => { [key: string]: any };\n getFinalAnimationAttribute: (channel: string) => any;\n getFinalAnimationAttributes: () => { [key: string]: any };\n clearChangedGraphicAttributes: () => void;\n clearGraphicAttributes: () => void;\n\n // state相关接口\n getStates: () => string[];\n hasState: (state: string) => boolean;\n clearStates: (noAnimation?: boolean) => void;\n addState: (state: string | string[], attrs?: any) => boolean;\n removeState: (state: string | string[]) => boolean;\n useStates: (states: string[], noAnimation?: boolean) => boolean;\n updateStates: (states: Record<string, boolean | BaseSingleEncodeSpec>) => any;\n}\n\nexport interface IGlyphElement<P = any> extends IElement {\n mark: IGlyphMark;\n\n getGlyphGraphicItems: () => { [markName: string]: any };\n\n getGraphicAttribute: (channel: string, prev?: boolean, markName?: any) => any;\n setGraphicAttribute: (channel: string, value: any, final?: boolean, markName?: any) => void;\n setGraphicAttributes: (attributes: { [channel: string]: any }, final?: boolean, markName?: any) => void;\n\n getFinalGraphicAttributes: (markName?: string) => { [key: string]: any };\n getPrevGraphicAttributes: (markName?: string) => { [key: string]: any };\n getNextGraphicAttributes: (markName?: string) => { [key: string]: any };\n\n encodeCustom: (nextAttrs?: any) => { [markName: string]: any };\n}\n"]}
@@ -22,8 +22,7 @@ export interface IMorphAnimationConfig {
22
22
  oneByOne?: MorphFunctionValueType<boolean | number>;
23
23
  splitPath?: MorphFunctionValueType<'clone' | Nil>;
24
24
  }
25
- export interface IMorph {
25
+ export interface IViewDiff {
26
26
  diffGrammar: <U extends IGrammarBase>(prevGrammars: U[], nextGrammars: U[]) => DiffResult<U, U>;
27
27
  diffMark: (prevMarks: IMark[], nextMarks: IMark[], runningConfig: IRunningConfig) => DiffResult<IMark[], IMark[]>;
28
- morph: (prevMarks: IMark[], nextMarks: IMark[], runningConfig: IRunningConfig) => void;
29
28
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/morph.ts"],"names":[],"mappings":"","file":"morph.js","sourcesContent":["import type { EasingType } from '@visactor/vrender-core';\nimport type { DiffResult, Nil } from './base';\nimport type { IElement } from './element';\nimport type { IGrammarBase, IMark } from './grammar';\nimport type { GenericFunctionType } from './signal';\nimport type { IRunningConfig } from './view';\n\nexport type MorphData = { prev: any[]; next: any[] };\nexport type MorphElements = { prev: IElement[]; next: IElement[] };\n\nexport type MorphFunctionCallback<T> = (datum: MorphData, element: MorphElements, parameters: any) => T;\n\nexport type MorphFunctionType<T> = GenericFunctionType<MorphFunctionCallback<T>, T>;\n\nexport type MorphFunctionValueType<T> = MorphFunctionType<T> | T;\n\nexport interface IMorphAnimationConfig {\n easing?: EasingType;\n delay?: MorphFunctionValueType<number>;\n duration?: MorphFunctionValueType<number>;\n oneByOne?: MorphFunctionValueType<boolean | number>;\n splitPath?: MorphFunctionValueType<'clone' | Nil>;\n}\n\nexport interface IMorph {\n diffGrammar: <U extends IGrammarBase>(prevGrammars: U[], nextGrammars: U[]) => DiffResult<U, U>;\n diffMark: (prevMarks: IMark[], nextMarks: IMark[], runningConfig: IRunningConfig) => DiffResult<IMark[], IMark[]>;\n\n morph: (prevMarks: IMark[], nextMarks: IMark[], runningConfig: IRunningConfig) => void;\n}\n"]}
1
+ {"version":3,"sources":["../src/types/morph.ts"],"names":[],"mappings":"","file":"morph.js","sourcesContent":["import type { EasingType } from '@visactor/vrender-core';\nimport type { DiffResult, Nil } from './base';\nimport type { IElement } from './element';\nimport type { IGrammarBase, IMark } from './grammar';\nimport type { GenericFunctionType } from './signal';\nimport type { IRunningConfig } from './view';\n\nexport type MorphData = { prev: any[]; next: any[] };\nexport type MorphElements = { prev: IElement[]; next: IElement[] };\n\nexport type MorphFunctionCallback<T> = (datum: MorphData, element: MorphElements, parameters: any) => T;\n\nexport type MorphFunctionType<T> = GenericFunctionType<MorphFunctionCallback<T>, T>;\n\nexport type MorphFunctionValueType<T> = MorphFunctionType<T> | T;\n\nexport interface IMorphAnimationConfig {\n easing?: EasingType;\n delay?: MorphFunctionValueType<number>;\n duration?: MorphFunctionValueType<number>;\n oneByOne?: MorphFunctionValueType<boolean | number>;\n splitPath?: MorphFunctionValueType<'clone' | Nil>;\n}\n\nexport interface IViewDiff {\n diffGrammar: <U extends IGrammarBase>(prevGrammars: U[], nextGrammars: U[]) => DiffResult<U, U>;\n diffMark: (prevMarks: IMark[], nextMarks: IMark[], runningConfig: IRunningConfig) => DiffResult<IMark[], IMark[]>;\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { IBoundsLike } from '@visactor/vutils';
2
- import type { IColor, Stage } from '@visactor/vrender-core';
2
+ import type { IColor, IEventTarget, Stage } from '@visactor/vrender-core';
3
3
  import type { IViewEventConfig, IViewOptions } from './view';
4
4
  export interface IRenderer {
5
5
  initialize: (width: number, height: number, options: IViewOptions, eventConfig: IViewEventConfig) => this;
@@ -18,3 +18,8 @@ export interface IRenderer {
18
18
  toCanvas: () => HTMLCanvasElement;
19
19
  release: () => void;
20
20
  }
21
+ export interface IStageEventPlugin<T> {
22
+ new (taget: IEventTarget, cfg?: T): {
23
+ release: () => void;
24
+ };
25
+ }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/renderer.ts"],"names":[],"mappings":"","file":"renderer.js","sourcesContent":["import type { IBoundsLike } from '@visactor/vutils';\nimport type { IColor, Stage } from '@visactor/vrender-core';\nimport type { IViewEventConfig, IViewOptions } from './view';\n\nexport interface IRenderer {\n initialize: (width: number, height: number, options: IViewOptions, eventConfig: IViewEventConfig) => this;\n\n render: (immediately?: boolean) => this;\n renderNextFrame: () => this;\n resize: (width: number, height: number) => this;\n shouldResize: (width: number, height: number) => boolean;\n combineIncrementalLayers: () => this;\n preventRender: (tag: boolean) => void;\n\n setDpr: (resolution: number, redraw: boolean) => this;\n background: (color: IColor) => this;\n setViewBox: (viewBox: IBoundsLike, rerender: boolean) => this;\n\n stage: () => Stage;\n canvas: () => HTMLCanvasElement;\n context: () => CanvasRenderingContext2D;\n\n toCanvas: () => HTMLCanvasElement;\n // toImageData: () => Promise<ImageData | undefined>;\n\n release: () => void;\n}\n"]}
1
+ {"version":3,"sources":["../src/types/renderer.ts"],"names":[],"mappings":"","file":"renderer.js","sourcesContent":["import type { IBoundsLike } from '@visactor/vutils';\nimport type { IColor, IEventTarget, Stage } from '@visactor/vrender-core';\nimport type { IViewEventConfig, IViewOptions } from './view';\n\nexport interface IRenderer {\n initialize: (width: number, height: number, options: IViewOptions, eventConfig: IViewEventConfig) => this;\n\n render: (immediately?: boolean) => this;\n renderNextFrame: () => this;\n resize: (width: number, height: number) => this;\n shouldResize: (width: number, height: number) => boolean;\n combineIncrementalLayers: () => this;\n preventRender: (tag: boolean) => void;\n\n setDpr: (resolution: number, redraw: boolean) => this;\n background: (color: IColor) => this;\n setViewBox: (viewBox: IBoundsLike, rerender: boolean) => this;\n\n stage: () => Stage;\n canvas: () => HTMLCanvasElement;\n context: () => CanvasRenderingContext2D;\n\n toCanvas: () => HTMLCanvasElement;\n // toImageData: () => Promise<ImageData | undefined>;\n\n release: () => void;\n}\n\nexport interface IStageEventPlugin<T> {\n new (taget: IEventTarget, cfg?: T): {\n release: () => void;\n };\n}\n"]}
package/es/view/View.d.ts CHANGED
@@ -2,7 +2,7 @@ import type { IBounds, ILogger } from '@visactor/vutils';
2
2
  import { EventEmitter } from '@visactor/vutils';
3
3
  import type { IColor } from '@visactor/vrender-core';
4
4
  import type { CoordinateType } from '@visactor/vgrammar-coordinate';
5
- import type { IData, ISignal, ViewSpec, IView, IViewOptions, IViewThemeConfig, Hooks, IMark, EventSpec, MarkType, GrammarScaleType, SignalFunctionType, IScale, IGrammarBase, IGroupMark, IGlyphMark, ICoordinate, BaseEventHandler, IRecordedGrammars, IComponent, IRunningConfig, IViewAnimate, ITheme, InteractionSpec, IInteraction } from '../types/';
5
+ import type { IData, ISignal, ViewSpec, IView, IViewOptions, IViewThemeConfig, Hooks, IMark, MarkType, GrammarScaleType, SignalFunctionType, IScale, IGrammarBase, IGroupMark, IGlyphMark, ICoordinate, BaseEventHandler, IRecordedGrammars, IComponent, IRunningConfig, IViewAnimate, ITheme, InteractionSpec, IInteraction } from '../types/';
6
6
  import type { IRenderer } from '../types/renderer';
7
7
  import { LayoutState } from '../graph/enums';
8
8
  import type { IAxis, IDatazoom, IGrid, ILabel, ILegend, IPlayer, IScrollbar, ISlider, ITitle } from '../types/component';
@@ -18,8 +18,7 @@ export default class View extends EventEmitter implements IView {
18
18
  private _config;
19
19
  private _options;
20
20
  private _cachedGrammars;
21
- private _willMorphMarks;
22
- private _morph;
21
+ private _differ;
23
22
  private _eventConfig;
24
23
  private _eventListeners;
25
24
  private _theme;
@@ -28,7 +27,6 @@ export default class View extends EventEmitter implements IView {
28
27
  private _layoutState?;
29
28
  private _layoutMarks?;
30
29
  private _background?;
31
- private _eventCache;
32
30
  private _progressiveMarks?;
33
31
  private _progressiveRafId?;
34
32
  private _observer;
@@ -122,11 +120,10 @@ export default class View extends EventEmitter implements IView {
122
120
  private _onResize;
123
121
  resize(width: number, height: number, render?: boolean): this;
124
122
  private _resizeRenderer;
125
- private bindEvents;
126
- event(eventSpec: EventSpec): void;
127
123
  interaction(type: string, spec: Partial<InteractionSpec>): IInteraction<any>;
128
124
  removeInteraction(type: string | IInteraction, id?: string): this;
129
125
  removeAllInteractions(): this;
126
+ initializeEventConfig(config: any): any;
130
127
  private initEvent;
131
128
  private releaseStageEvent;
132
129
  private delegateEvent;
package/es/view/View.js CHANGED
@@ -1,11 +1,9 @@
1
- import { EventEmitter, debounce, isObject, isString, getContainerSize, Logger, array, isNil } from "@visactor/vutils";
1
+ import { EventEmitter, debounce, isString, getContainerSize, Logger, array, isNil, isArray } from "@visactor/vutils";
2
2
 
3
3
  import { vglobal } from "@visactor/vrender-core";
4
4
 
5
5
  import { Data } from "./data";
6
6
 
7
- import { initializeEventConfig, permit, prevent } from "./events";
8
-
9
7
  import Dataflow from "./dataflow";
10
8
 
11
9
  import { traverseMarkTree } from "../graph/mark-tree";
@@ -16,15 +14,13 @@ import CanvasRenderer from "../graph/canvas-renderer";
16
14
 
17
15
  import getExtendedEvents from "../graph/util/events-extend";
18
16
 
19
- import { BROWSER, NO_TRAP, SIGNAL_WIDTH, SIGNAL_HEIGHT, SIGNAL_PADDING, SIGNAL_AUTOFIT, SIGNAL_VIEW_WIDTH, SIGNAL_VIEW_HEIGHT, EVENT_SOURCE_VIEW, EVENT_SOURCE_WINDOW, SIGNAL_VIEW_BOX } from "./constants";
17
+ import { BROWSER, SIGNAL_WIDTH, SIGNAL_HEIGHT, SIGNAL_PADDING, SIGNAL_AUTOFIT, SIGNAL_VIEW_WIDTH, SIGNAL_VIEW_HEIGHT, EVENT_SOURCE_VIEW, SIGNAL_VIEW_BOX, ID_PREFIX, NAME_PREFIX, EVENT_SOURCE_WINDOW } from "./constants";
20
18
 
21
19
  import { Signal } from "./signal";
22
20
 
23
21
  import { BuiltInSignalID, builtInSignals, normalizeMarkTree, normalizeRunningConfig, normalizePadding } from "../parse/view";
24
22
 
25
- import { parseHandler, parseEventSelector, generateFilterByMark, ID_PREFIX, NAME_PREFIX } from "../parse/event";
26
-
27
- import { isGrammar, parseReference } from "../parse/util";
23
+ import { isGrammar } from "../parse/util";
28
24
 
29
25
  import { configureEnvironment } from "../graph/util/env";
30
26
 
@@ -32,16 +28,8 @@ import { GroupMark } from "./group";
32
28
 
33
29
  import { Mark } from "./mark";
34
30
 
35
- import { defaultDoLayout } from "../graph/layout/layout";
36
-
37
- import { GlyphMark } from "./glyph";
38
-
39
- import { Morph } from "../graph/animation/morph";
40
-
41
31
  import { RecordedGrammars, RecordedTreeGrammars } from "./grammar-record";
42
32
 
43
- import { ViewAnimate } from "./animate";
44
-
45
33
  import { ComponentEnum, HOOK_EVENT, LayoutState, GrammarMarkType } from "../graph/enums";
46
34
 
47
35
  import { Text } from "../semantic-marks/text";
@@ -54,6 +42,8 @@ import { Component } from "./component";
54
42
 
55
43
  import { isMarkType, removeGraphicItem } from "../graph/util/graphic";
56
44
 
45
+ import { ViewDiff } from "../graph/view-diff";
46
+
57
47
  export default class View extends EventEmitter {
58
48
  static useRegisters(comps) {
59
49
  comps.forEach((fn => {
@@ -154,7 +144,8 @@ export default class View extends EventEmitter {
154
144
  break;
155
145
 
156
146
  case GrammarMarkType.glyph:
157
- mark = new GlyphMark(this, null == markOptions ? void 0 : markOptions.glyphType, groupMark);
147
+ const GlyphMark = Factory.getMark(GrammarMarkType.glyph);
148
+ GlyphMark && (mark = new GlyphMark(this, null == markOptions ? void 0 : markOptions.glyphType, groupMark));
158
149
  break;
159
150
 
160
151
  case GrammarMarkType.component:
@@ -260,7 +251,7 @@ export default class View extends EventEmitter {
260
251
  })), this;
261
252
  }
262
253
  parseSpec(spec) {
263
- var _a, _b, _c, _d, _e, _f;
254
+ var _a, _b, _c, _d, _e, _f, _g, _h;
264
255
  if (this.emit(HOOK_EVENT.BEFORE_PARSE_VIEW), this._spec = spec, normalizeMarkTree(spec),
265
256
  spec.theme ? this.theme(spec.theme) : this.theme(ThemeManager.getDefaultTheme()),
266
257
  spec.width && this.width(spec.width), spec.height && this.height(spec.height), this.padding(null !== (_b = null !== (_a = spec.padding) && void 0 !== _a ? _a : this._options.padding) && void 0 !== _b ? _b : this._theme.padding),
@@ -288,11 +279,13 @@ export default class View extends EventEmitter {
288
279
  })), spec.marks && spec.marks.length && spec.marks.forEach((mark => {
289
280
  this.parseMarkSpec(mark);
290
281
  })), spec.events && spec.events.length && spec.events.forEach((eventConfig => {
291
- this.event(eventConfig);
282
+ var _b;
283
+ null === (_b = this.event) || void 0 === _b || _b.call(this, eventConfig);
292
284
  })), spec.interactions && spec.interactions.length && spec.interactions.forEach((interaction => {
293
285
  this.interaction(interaction.type, interaction);
294
- })), !1 === spec.animation ? this.animate.disable() : this.animate.enable(), this.emit(HOOK_EVENT.AFTER_PARSE_VIEW),
295
- this._needBuildLayoutTree = !0, this._layoutState = LayoutState.before, this;
286
+ })), !1 === spec.animation ? null === (_g = this.animate) || void 0 === _g || _g.disable() : null === (_h = this.animate) || void 0 === _h || _h.enable(),
287
+ this.emit(HOOK_EVENT.AFTER_PARSE_VIEW), this._needBuildLayoutTree = !0, this._layoutState = LayoutState.before,
288
+ this;
296
289
  }
297
290
  updateSpec(spec) {
298
291
  return this.removeAllInteractions(), this.removeAllGrammars(), this.parseSpec(spec);
@@ -412,7 +405,7 @@ export default class View extends EventEmitter {
412
405
  }
413
406
  doLayout() {
414
407
  var _a;
415
- const doLayout = this._options.doLayout || defaultDoLayout;
408
+ const doLayout = this._options.doLayout || Factory.getDefaultLayout();
416
409
  doLayout && (null === (_a = this._layoutMarks) || void 0 === _a ? void 0 : _a.length) && (this.emit(HOOK_EVENT.BEFORE_DO_LAYOUT),
417
410
  doLayout(this._layoutMarks, this._options, this), this.emit(HOOK_EVENT.AFTER_DO_LAYOUT));
418
411
  }
@@ -435,11 +428,11 @@ export default class View extends EventEmitter {
435
428
  return this.evaluate(runningConfig), this;
436
429
  }
437
430
  doRender(immediately) {
438
- this.emit(HOOK_EVENT.BEFORE_DO_RENDER), this.renderer && (this._progressiveMarks || this.animate.animate(),
431
+ this.emit(HOOK_EVENT.BEFORE_DO_RENDER), this.renderer && (!this._progressiveMarks && this.animate && this.animate.animate(),
439
432
  this.renderer.render(immediately), this.handleRenderEnd()), this.emit(HOOK_EVENT.AFTER_DO_RENDER);
440
433
  }
441
434
  evaluate(runningConfig) {
442
- var _a, _b;
435
+ var _a, _c;
443
436
  const normalizedRunningConfig = normalizeRunningConfig(runningConfig), grammarWillDetach = this._cachedGrammars.size() > 0;
444
437
  grammarWillDetach && (this.reuseCachedGrammars(normalizedRunningConfig), this.detachCachedGrammar());
445
438
  const hasResize = this._resizeRenderer(), hasUpdate = this._dataflow.hasCommitted();
@@ -448,28 +441,28 @@ export default class View extends EventEmitter {
448
441
  this._needBuildLayoutTree = !1), this._layoutState && (this._layoutState = LayoutState.layouting,
449
442
  this.doLayout(), this._dataflow.hasCommitted() && (this._layoutState = LayoutState.reevaluate,
450
443
  this._dataflow.evaluate()), this._layoutState = LayoutState.after, (null === (_a = this._layoutMarks) || void 0 === _a ? void 0 : _a.length) && this.handleLayoutEnd()),
451
- this._layoutState = null, this.findProgressiveMarks(), this._resizeRenderer(), null === (_b = this._willMorphMarks) || void 0 === _b || _b.forEach((morphMarks => {
452
- this._morph.morph(morphMarks.prev, morphMarks.next, normalizedRunningConfig);
453
- })), this._willMorphMarks = null, this.releaseCachedGrammars(normalizedRunningConfig),
454
- this.doRender(!0), this.doPreProgressive(), this) : this;
444
+ this._layoutState = null, this.findProgressiveMarks(), this._resizeRenderer(), null === (_c = this.morph) || void 0 === _c || _c.call(this, normalizedRunningConfig),
445
+ this.releaseCachedGrammars(normalizedRunningConfig), this.doRender(!0), this.doPreProgressive(),
446
+ this) : this;
455
447
  }
456
448
  reuseCachedGrammars(runningConfig) {
457
- if (this._willMorphMarks || (this._willMorphMarks = []), runningConfig.reuse) {
449
+ if (runningConfig.reuse) {
458
450
  const reuseDiffUpdate = diff => {
459
451
  diff.next.reuse(diff.prev), diff.prev.detachAll(), diff.prev.clear(), this._cachedGrammars.unrecord(diff.prev);
460
452
  };
461
- this._morph.diffGrammar(this._cachedGrammars.getAllSignals(), this.grammars.getAllSignals().filter((signal => !BuiltInSignalID.includes(signal.id())))).update.forEach(reuseDiffUpdate);
462
- this._morph.diffGrammar(this._cachedGrammars.getAllData(), this.grammars.getAllData()).update.forEach(reuseDiffUpdate);
463
- this._morph.diffGrammar(this._cachedGrammars.getAllScales(), this.grammars.getAllScales()).update.forEach(reuseDiffUpdate);
464
- this._morph.diffGrammar(this._cachedGrammars.getAllCoordinates(), this.grammars.getAllCoordinates()).update.forEach(reuseDiffUpdate);
453
+ this._differ.diffGrammar(this._cachedGrammars.getAllSignals(), this.grammars.getAllSignals().filter((signal => !BuiltInSignalID.includes(signal.id())))).update.forEach(reuseDiffUpdate);
454
+ this._differ.diffGrammar(this._cachedGrammars.getAllData(), this.grammars.getAllData()).update.forEach(reuseDiffUpdate);
455
+ this._differ.diffGrammar(this._cachedGrammars.getAllScales(), this.grammars.getAllScales()).update.forEach(reuseDiffUpdate);
456
+ this._differ.diffGrammar(this._cachedGrammars.getAllCoordinates(), this.grammars.getAllCoordinates()).update.forEach(reuseDiffUpdate);
465
457
  }
466
- this._morph.diffMark(this._cachedGrammars.getAllMarks(), this.grammars.getAllMarks().filter((mark => "root" !== mark.id())), runningConfig).update.forEach((diff => {
458
+ this._differ.diffMark(this._cachedGrammars.getAllMarks(), this.grammars.getAllMarks().filter((mark => "root" !== mark.id())), runningConfig).update.forEach((diff => {
459
+ var _b;
467
460
  const matched = 1 === diff.prev.length && 1 === diff.next.length && diff.prev[0].markType === diff.next[0].markType, enableMarkMorphConfig = diff.prev.every((mark => mark.getMorphConfig().morph)) && diff.next.every((mark => mark.getMorphConfig().morph));
468
461
  matched && runningConfig.reuse ? (diff.next[0].reuse(diff.prev[0]), diff.prev[0].detachAll(),
469
- diff.prev[0].clear(), this._cachedGrammars.unrecord(diff.prev[0])) : (runningConfig.morph && enableMarkMorphConfig || runningConfig.morphAll) && this._willMorphMarks.push({
462
+ diff.prev[0].clear(), this._cachedGrammars.unrecord(diff.prev[0])) : (runningConfig.morph && enableMarkMorphConfig || runningConfig.morphAll) && (null === (_b = this.addMorphMarks) || void 0 === _b || _b.call(this, {
470
463
  prev: diff.prev,
471
464
  next: diff.next
472
- });
465
+ }));
473
466
  }));
474
467
  }
475
468
  detachCachedGrammar() {
@@ -487,10 +480,11 @@ export default class View extends EventEmitter {
487
480
  }));
488
481
  const markNodes = this._cachedGrammars.getAllMarkNodes();
489
482
  markNodes.forEach((node => {
490
- node.mark.animate.stop(), runningConfig.enableExitAnimation && this.animate.animateAddition(node.mark);
483
+ var _a;
484
+ null === (_a = node.mark.animate) || void 0 === _a || _a.stop(), runningConfig.enableExitAnimation && this.animate && this.animate.animateAddition(node.mark);
491
485
  }));
492
486
  const releaseUp = node => {
493
- if (node.mark.view && 0 === node.mark.animate.getAnimatorCount() && (!node.children || 0 === node.children.length)) {
487
+ if (node.mark.view && (!node.mark.animate || 0 === node.mark.animate.getAnimatorCount()) && (!node.children || 0 === node.children.length)) {
494
488
  node.mark.release();
495
489
  const parent = node.parent;
496
490
  parent && (node.parent.children = node.parent.children.filter((n => n !== node)),
@@ -499,8 +493,8 @@ export default class View extends EventEmitter {
499
493
  };
500
494
  markNodes.forEach((node => {
501
495
  const mark = node.mark;
502
- 0 === mark.animate.getAnimatorCount() ? releaseUp(node) : mark.addEventListener("animationEnd", (() => {
503
- 0 === mark.animate.getAnimatorCount() && releaseUp(node);
496
+ mark.animate && 0 === mark.animate.getAnimatorCount() ? releaseUp(node) : mark.addEventListener("animationEnd", (() => {
497
+ mark.animate && 0 === mark.animate.getAnimatorCount() && releaseUp(node);
504
498
  }));
505
499
  })), this._cachedGrammars.clear();
506
500
  }
@@ -568,73 +562,6 @@ export default class View extends EventEmitter {
568
562
  height: height
569
563
  }), !0);
570
564
  }
571
- bindEvents(eventSpec) {
572
- if (this._eventConfig.disable) return;
573
- const {type: evtType, filter: filter, callback: callback, throttle: throttle, debounce: debounce, consume: consume, target: target, dependency: dependency} = eventSpec, eventSelector = parseEventSelector(evtType);
574
- if (!eventSelector) return;
575
- const {source: source, type: type} = eventSelector, markFilter = generateFilterByMark(eventSelector), validateSignals = (Array.isArray(target) && target.length ? target.map((entry => ({
576
- signal: this.getSignalById(entry.target),
577
- callback: entry.callback
578
- }))) : [ {
579
- signal: isString(target) ? this.getSignalById(target) : null,
580
- callback: callback
581
- } ]).filter((entry => entry.signal || entry.callback)), refs = parseReference(dependency, this), send = parseHandler(((evt, element) => {
582
- const needPreventDefault = source === EVENT_SOURCE_VIEW && prevent(this._eventConfig, type) || consume && (void 0 === evt.cancelable || evt.cancelable);
583
- source === EVENT_SOURCE_WINDOW && (evt = getExtendedEvents(this, evt, element, type, EVENT_SOURCE_WINDOW));
584
- let hasCommitted = !1;
585
- if ((!filter || filter(evt)) && (!markFilter || markFilter(element)) && validateSignals.length) {
586
- const params = refs.reduce(((params, ref) => (params[ref.id()] = ref.output(), params)), {});
587
- validateSignals.forEach((entry => {
588
- if (entry.callback && entry.signal) {
589
- entry.signal.set(entry.callback(evt, params)) && (this.commit(entry.signal), hasCommitted = !0);
590
- } else entry.callback ? entry.callback(evt, params) : (this.commit(entry.signal),
591
- hasCommitted = !0);
592
- }));
593
- }
594
- needPreventDefault && evt.preventDefault(), consume && evt.stopPropagation(), hasCommitted && this.run();
595
- }), {
596
- throttle: throttle,
597
- debounce: debounce
598
- });
599
- if (source === EVENT_SOURCE_VIEW) {
600
- if (permit(this._eventConfig, EVENT_SOURCE_VIEW, type)) return this.addEventListener(type, send, NO_TRAP),
601
- () => {
602
- this.removeEventListener(type, send);
603
- };
604
- } else if (source === EVENT_SOURCE_WINDOW) return vglobal.addEventListener(type, send),
605
- this._eventListeners.push({
606
- type: type,
607
- source: vglobal,
608
- handler: send
609
- }), () => {
610
- vglobal.removeEventListener(type, send);
611
- const index = this._eventListeners.findIndex((entry => entry.type === type && entry.source === vglobal && entry.handler === send));
612
- index >= 0 && this._eventListeners.splice(index, 1);
613
- };
614
- }
615
- event(eventSpec) {
616
- if ("between" in eventSpec) {
617
- const [starEvent, endEvent] = eventSpec.between, id = `${starEvent.type}-${eventSpec.type}-${endEvent.type}`;
618
- let unbindEndEvent;
619
- this.bindEvents(Object.assign({}, starEvent, {
620
- callback: () => {
621
- if (this._eventCache || (this._eventCache = {}), !this._eventCache[id]) {
622
- const unbindEvent = this.bindEvents(eventSpec);
623
- this._eventCache[id] = unbindEvent;
624
- }
625
- unbindEndEvent || (unbindEndEvent = this.bindEvents(Object.assign({}, endEvent, {
626
- callback: () => {
627
- this._eventCache[id] && (this._eventCache[id](), this._eventCache[id] = null);
628
- }
629
- })));
630
- }
631
- }));
632
- } else "merge" in eventSpec ? eventSpec.merge.forEach((entry => {
633
- const singleEvent = Object.assign({}, eventSpec);
634
- isString(entry) ? singleEvent.type = entry : isObject(entry) && Object.assign(singleEvent, entry),
635
- singleEvent.debounce = 50, this.bindEvents(singleEvent);
636
- })) : this.bindEvents(eventSpec);
637
- }
638
565
  interaction(type, spec) {
639
566
  const interaction = Factory.createInteraction(type, this, spec);
640
567
  return interaction && (interaction.bind(), this._boundInteractions || (this._boundInteractions = []),
@@ -657,6 +584,17 @@ export default class View extends EventEmitter {
657
584
  instance.unbind();
658
585
  })), this._boundInteractions = null), this;
659
586
  }
587
+ initializeEventConfig(config) {
588
+ const eventsConfig = Object.assign({
589
+ defaults: {}
590
+ }, config), unpack = (obj, keys) => {
591
+ keys.forEach((k => {
592
+ isArray(obj[k]) && (obj[k] = obj[k].reduce(((set, key) => (set[key] = !0, set)), {}));
593
+ }));
594
+ };
595
+ return unpack(eventsConfig.defaults, [ "prevent", "allow" ]), unpack(eventsConfig, [ EVENT_SOURCE_VIEW, EVENT_SOURCE_WINDOW ]),
596
+ eventsConfig;
597
+ }
660
598
  initEvent() {
661
599
  const stage = this.renderer.stage();
662
600
  stage && stage.on("*", this.delegateEvent);
@@ -679,15 +617,15 @@ export default class View extends EventEmitter {
679
617
  this.renderer = new CanvasRenderer(this), this.renderer.initialize(width, height, this._options, this._eventConfig).background(this._background);
680
618
  }
681
619
  initialize() {
682
- var _a;
620
+ var _a, _c;
683
621
  this.grammars = new RecordedGrammars((grammar => grammar.id()), ((key, grammar) => this.logger.warn(`Grammar id '${key}' has been occupied`, grammar))),
684
622
  this._cachedGrammars = new RecordedTreeGrammars((grammar => grammar.id())), this._options.logger && Logger.setInstance(this._options.logger),
685
623
  this.logger = Logger.getInstance(null !== (_a = this._options.logLevel) && void 0 !== _a ? _a : 0),
686
- this._dataflow = new Dataflow, this.animate = new ViewAnimate(this), this._morph = new Morph,
687
- this._options.hooks && (Object.keys(this._options.hooks).forEach((key => {
624
+ this._dataflow = new Dataflow, this.animate = null === (_c = this.initAnimate) || void 0 === _c ? void 0 : _c.call(this, this),
625
+ this._differ = new ViewDiff, this._options.hooks && (Object.keys(this._options.hooks).forEach((key => {
688
626
  this.on(key, this._options.hooks[key]);
689
627
  })), this.hooks = this._options.hooks), this.container = null, this.renderer = null,
690
- this._eventListeners = [], this._eventConfig = initializeEventConfig(this._options.eventConfig),
628
+ this._eventListeners = [], this._eventConfig = this.initializeEventConfig(this._options.eventConfig),
691
629
  this._theme = this._options.disableTheme ? null : ThemeManager.getDefaultTheme(),
692
630
  this.parseBuiltIn(), configureEnvironment(this._options), this.initializeRenderer(),
693
631
  this._eventConfig.disable || this.initEvent(), this._bindResizeEvent(), this._needBuildLayoutTree = !0,
@@ -725,13 +663,14 @@ export default class View extends EventEmitter {
725
663
  })), this._progressiveMarks = null);
726
664
  }
727
665
  release() {
728
- var _a, _b, _c;
666
+ var _a, _b, _c, _d;
729
667
  this.removeAllInteractions(), this.releaseStageEvent(), this._unBindResizeEvent(),
730
668
  this.clearProgressive(), Factory.unregisterRuntimeTransforms(), Logger.setInstance(null),
731
- this.animate.stop(), this.grammars.release(), this._cachedGrammars.release(), this._dataflow.release(),
732
- this._dataflow = null, null === (_b = null === (_a = this.renderer) || void 0 === _a ? void 0 : _a.release) || void 0 === _b || _b.call(_a),
669
+ null === (_a = this.animate) || void 0 === _a || _a.stop(), this.grammars.release(),
670
+ this._cachedGrammars.release(), this._dataflow.release(), this._dataflow = null,
671
+ null === (_c = null === (_b = this.renderer) || void 0 === _b ? void 0 : _b.release) || void 0 === _c || _c.call(_b),
733
672
  this.renderer = null, this._boundInteractions = null, this.removeAllListeners(),
734
- null === (_c = this._eventListeners) || void 0 === _c || _c.forEach((listener => {
673
+ null === (_d = this._eventListeners) || void 0 === _d || _d.forEach((listener => {
735
674
  listener.source.removeEventListener(listener.type, listener.handler);
736
675
  })), this._eventListeners = null;
737
676
  }