@visactor/vrender-components 0.21.12-alpha.1 → 0.21.12-alpha.3

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 (178) hide show
  1. package/cjs/animation/animate-component.d.ts +22 -0
  2. package/cjs/animation/animate-component.js +29 -0
  3. package/cjs/animation/animate-component.js.map +1 -0
  4. package/cjs/animation/axis-animate.d.ts +10 -0
  5. package/cjs/animation/axis-animate.js +71 -0
  6. package/cjs/animation/axis-animate.js.map +1 -0
  7. package/cjs/animation/label-animate.d.ts +10 -0
  8. package/cjs/animation/label-animate.js +81 -0
  9. package/cjs/animation/label-animate.js.map +1 -0
  10. package/cjs/axis/animate/config.d.ts +6 -0
  11. package/cjs/axis/animate/config.js +10 -0
  12. package/cjs/axis/animate/config.js.map +1 -0
  13. package/cjs/axis/util.js +2 -1
  14. package/cjs/brush/index.js +1 -2
  15. package/cjs/checkbox/type.js +1 -2
  16. package/cjs/crosshair/type.js +2 -1
  17. package/cjs/data-zoom/interaction.d.ts +65 -0
  18. package/cjs/data-zoom/interaction.js +179 -0
  19. package/cjs/data-zoom/interaction.js.map +1 -0
  20. package/cjs/data-zoom/renderer.d.ts +91 -0
  21. package/cjs/data-zoom/renderer.js +467 -0
  22. package/cjs/data-zoom/renderer.js.map +1 -0
  23. package/cjs/data-zoom/utils.d.ts +2 -0
  24. package/cjs/data-zoom/utils.js +20 -0
  25. package/cjs/data-zoom/utils.js.map +1 -0
  26. package/cjs/index.d.ts +1 -1
  27. package/cjs/index.js +1 -1
  28. package/cjs/index.js.map +1 -1
  29. package/cjs/label/base.js +1 -1
  30. package/cjs/label/data-label-register.js +1 -1
  31. package/cjs/label/dataLabel.js +1 -1
  32. package/cjs/label/index.js +1 -1
  33. package/cjs/label/line.js +1 -1
  34. package/cjs/label/polygon.js +1 -1
  35. package/cjs/label-item/index.d.ts +2 -0
  36. package/cjs/label-item/index.js +21 -0
  37. package/cjs/label-item/index.js.map +1 -0
  38. package/cjs/label-item/label-item.d.ts +18 -0
  39. package/cjs/label-item/label-item.js +163 -0
  40. package/cjs/label-item/label-item.js.map +1 -0
  41. package/cjs/label-item/register.d.ts +1 -0
  42. package/cjs/label-item/register.js +15 -0
  43. package/cjs/label-item/register.js.map +1 -0
  44. package/cjs/label-item/type.d.ts +31 -0
  45. package/cjs/label-item/type.js +6 -0
  46. package/cjs/label-item/type.js.map +1 -0
  47. package/cjs/legend/base.js +1 -1
  48. package/cjs/legend/constant.js +1 -1
  49. package/cjs/legend/index.js +1 -1
  50. package/cjs/legend/register.js +1 -1
  51. package/cjs/legend/type.js +1 -1
  52. package/cjs/legend/util.js +1 -1
  53. package/cjs/marker/mixin/label.d.ts +16 -0
  54. package/cjs/marker/mixin/label.js +57 -0
  55. package/cjs/marker/mixin/label.js.map +1 -0
  56. package/cjs/table-series-number/event-manager.d.ts +16 -0
  57. package/cjs/table-series-number/event-manager.js +167 -0
  58. package/cjs/table-series-number/event-manager.js.map +1 -0
  59. package/cjs/table-series-number/index.d.ts +2 -0
  60. package/cjs/table-series-number/index.js +21 -0
  61. package/cjs/table-series-number/index.js.map +1 -0
  62. package/cjs/table-series-number/register.d.ts +1 -0
  63. package/cjs/table-series-number/register.js +14 -0
  64. package/cjs/table-series-number/register.js.map +1 -0
  65. package/cjs/table-series-number/table-series-number.d.ts +76 -0
  66. package/cjs/table-series-number/table-series-number.js +536 -0
  67. package/cjs/table-series-number/table-series-number.js.map +1 -0
  68. package/cjs/table-series-number/tools.d.ts +1 -0
  69. package/cjs/table-series-number/tools.js +14 -0
  70. package/cjs/table-series-number/tools.js.map +1 -0
  71. package/cjs/table-series-number/type.d.ts +84 -0
  72. package/cjs/table-series-number/type.js +18 -0
  73. package/cjs/table-series-number/type.js.map +1 -0
  74. package/cjs/util/event.d.ts +1 -0
  75. package/cjs/util/event.js +14 -0
  76. package/cjs/util/event.js.map +1 -0
  77. package/cjs/weather/index.d.ts +1 -0
  78. package/cjs/weather/index.js +21 -0
  79. package/cjs/weather/index.js.map +1 -0
  80. package/cjs/weather/register.d.ts +1 -0
  81. package/cjs/weather/register.js +14 -0
  82. package/cjs/weather/register.js.map +1 -0
  83. package/cjs/weather/type.d.ts +24 -0
  84. package/cjs/weather/type.js +6 -0
  85. package/cjs/weather/type.js.map +1 -0
  86. package/cjs/weather/weather-box.d.ts +13 -0
  87. package/cjs/weather/weather-box.js +129 -0
  88. package/cjs/weather/weather-box.js.map +1 -0
  89. package/dist/index.es.js +1 -1
  90. package/es/animation/animate-component.d.ts +22 -0
  91. package/es/animation/animate-component.js +21 -0
  92. package/es/animation/animate-component.js.map +1 -0
  93. package/es/animation/axis-animate.d.ts +10 -0
  94. package/es/animation/axis-animate.js +60 -0
  95. package/es/animation/axis-animate.js.map +1 -0
  96. package/es/animation/label-animate.d.ts +10 -0
  97. package/es/animation/label-animate.js +70 -0
  98. package/es/animation/label-animate.js.map +1 -0
  99. package/es/axis/animate/config.d.ts +6 -0
  100. package/es/axis/animate/config.js +6 -0
  101. package/es/axis/animate/config.js.map +1 -0
  102. package/es/axis/util.js +2 -1
  103. package/es/brush/index.js +1 -2
  104. package/es/checkbox/type.js +1 -2
  105. package/es/crosshair/type.js +2 -1
  106. package/es/data-zoom/interaction.d.ts +65 -0
  107. package/es/data-zoom/interaction.js +177 -0
  108. package/es/data-zoom/interaction.js.map +1 -0
  109. package/es/data-zoom/renderer.d.ts +91 -0
  110. package/es/data-zoom/renderer.js +464 -0
  111. package/es/data-zoom/renderer.js.map +1 -0
  112. package/es/data-zoom/utils.d.ts +2 -0
  113. package/es/data-zoom/utils.js +12 -0
  114. package/es/data-zoom/utils.js.map +1 -0
  115. package/es/index.d.ts +1 -1
  116. package/es/index.js +1 -1
  117. package/es/index.js.map +1 -1
  118. package/es/label/base.js +1 -1
  119. package/es/label/data-label-register.js +1 -1
  120. package/es/label/dataLabel.js +1 -1
  121. package/es/label/index.js +1 -1
  122. package/es/label/line.js +1 -1
  123. package/es/label/polygon.js +1 -1
  124. package/es/label-item/index.d.ts +2 -0
  125. package/es/label-item/index.js +4 -0
  126. package/es/label-item/index.js.map +1 -0
  127. package/es/label-item/label-item.d.ts +18 -0
  128. package/es/label-item/label-item.js +159 -0
  129. package/es/label-item/label-item.js.map +1 -0
  130. package/es/label-item/register.d.ts +1 -0
  131. package/es/label-item/register.js +6 -0
  132. package/es/label-item/register.js.map +1 -0
  133. package/es/label-item/type.d.ts +31 -0
  134. package/es/label-item/type.js +2 -0
  135. package/es/label-item/type.js.map +1 -0
  136. package/es/legend/base.js +1 -1
  137. package/es/legend/constant.js +1 -1
  138. package/es/legend/index.js +1 -1
  139. package/es/legend/register.js +1 -1
  140. package/es/legend/type.js +1 -1
  141. package/es/legend/util.js +1 -1
  142. package/es/marker/mixin/label.d.ts +16 -0
  143. package/es/marker/mixin/label.js +45 -0
  144. package/es/marker/mixin/label.js.map +1 -0
  145. package/es/table-series-number/event-manager.d.ts +16 -0
  146. package/es/table-series-number/event-manager.js +161 -0
  147. package/es/table-series-number/event-manager.js.map +1 -0
  148. package/es/table-series-number/index.d.ts +2 -0
  149. package/es/table-series-number/index.js +4 -0
  150. package/es/table-series-number/index.js.map +1 -0
  151. package/es/table-series-number/register.d.ts +1 -0
  152. package/es/table-series-number/register.js +6 -0
  153. package/es/table-series-number/register.js.map +1 -0
  154. package/es/table-series-number/table-series-number.d.ts +76 -0
  155. package/es/table-series-number/table-series-number.js +544 -0
  156. package/es/table-series-number/table-series-number.js.map +1 -0
  157. package/es/table-series-number/tools.d.ts +1 -0
  158. package/es/table-series-number/tools.js +8 -0
  159. package/es/table-series-number/tools.js.map +1 -0
  160. package/es/table-series-number/type.d.ts +84 -0
  161. package/es/table-series-number/type.js +17 -0
  162. package/es/table-series-number/type.js.map +1 -0
  163. package/es/util/event.d.ts +1 -0
  164. package/es/util/event.js +6 -0
  165. package/es/util/event.js.map +1 -0
  166. package/es/weather/index.d.ts +1 -0
  167. package/es/weather/index.js +2 -0
  168. package/es/weather/index.js.map +1 -0
  169. package/es/weather/register.d.ts +1 -0
  170. package/es/weather/register.js +6 -0
  171. package/es/weather/register.js.map +1 -0
  172. package/es/weather/type.d.ts +24 -0
  173. package/es/weather/type.js +2 -0
  174. package/es/weather/type.js.map +1 -0
  175. package/es/weather/weather-box.d.ts +13 -0
  176. package/es/weather/weather-box.js +127 -0
  177. package/es/weather/weather-box.js.map +1 -0
  178. package/package.json +21 -21
@@ -0,0 +1,22 @@
1
+ import type { EasingType } from '@visactor/vrender-core';
2
+ import { AbstractComponent } from '../core/base';
3
+ interface AnimateComponentAttribute {
4
+ animation?: boolean | any;
5
+ animationEnter?: boolean | any;
6
+ animationExit?: boolean | any;
7
+ animationUpdate?: boolean | any;
8
+ }
9
+ export interface ICommonAnimation {
10
+ duration?: number;
11
+ delay?: number;
12
+ easing?: EasingType;
13
+ }
14
+ export declare abstract class AnimateComponent<T extends AnimateComponentAttribute> extends AbstractComponent<T> {
15
+ protected _animationConfig?: {
16
+ enter: ICommonAnimation | false;
17
+ exit: ICommonAnimation | false;
18
+ update: ICommonAnimation | false;
19
+ };
20
+ _prepareAnimate(defaultAnimation: ICommonAnimation): void;
21
+ }
22
+ export {};
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.AnimateComponent = void 0;
6
+
7
+ const base_1 = require("../core/base"), vutils_1 = require("@visactor/vutils");
8
+
9
+ class AnimateComponent extends base_1.AbstractComponent {
10
+ _prepareAnimate(defaultAnimation) {
11
+ if (!1 !== this.attribute.animation) {
12
+ const {animation: animation, animationEnter: animationEnter, animationExit: animationExit, animationUpdate: animationUpdate} = this.attribute, animationCfg = (0,
13
+ vutils_1.isObject)(animation) ? animation : {};
14
+ this._animationConfig = {
15
+ enter: !1 !== animationEnter && (0, vutils_1.merge)({}, defaultAnimation, animationCfg, null != animationEnter ? animationEnter : {}),
16
+ exit: !1 !== animationExit && (0, vutils_1.merge)({}, defaultAnimation, animationCfg, null != animationExit ? animationExit : {}),
17
+ update: !1 !== animationUpdate && ((0, vutils_1.isArray)(animationUpdate) ? animationUpdate : (0,
18
+ vutils_1.merge)({}, defaultAnimation, animationCfg, null != animationUpdate ? animationUpdate : {}))
19
+ };
20
+ } else this._animationConfig = {
21
+ enter: !1,
22
+ exit: !1,
23
+ update: !1
24
+ };
25
+ }
26
+ }
27
+
28
+ exports.AnimateComponent = AnimateComponent;
29
+ //# sourceMappingURL=animate-component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/animation/animate-component.ts"],"names":[],"mappings":";;;AACA,uCAAiD;AACjD,6CAA4D;AA2B5D,MAAsB,gBAAsD,SAAQ,wBAAoB;IAQtG,eAAe,CAAC,gBAAkC;QAChD,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,KAAK,KAAK,EAAE;YACtC,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;YACrF,MAAM,YAAY,GAAG,IAAA,iBAAQ,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,gBAAgB,GAAG;gBACtB,KAAK,EAAE,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,IAAA,cAAK,EAAC,EAAE,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK;gBACzG,IAAI,EAAE,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,IAAA,cAAK,EAAC,EAAE,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK;gBACtG,MAAM,EACJ,eAAe,KAAK,KAAK;oBACvB,CAAC,CAAC,IAAA,gBAAO,EAAC,eAAe,CAAC;wBACxB,CAAC,CAAC,eAAe;wBACjB,CAAC,CAAC,IAAA,cAAK,EAAC,EAAE,EAAE,gBAAgB,EAAE,YAAY,EAAE,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,EAAE,CAAC;oBACpE,CAAC,CAAC,KAAK;aACZ,CAAC;SACH;aAAM;YACL,IAAI,CAAC,gBAAgB,GAAG;gBACtB,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,KAAK;aACd,CAAC;SACH;IACH,CAAC;CACF;AA9BD,4CA8BC","file":"animate-component.js","sourcesContent":["import type { EasingType } from '@visactor/vrender-core';\nimport { AbstractComponent } from '../core/base';\nimport { isArray, isObject, merge } from '@visactor/vutils';\n\ninterface AnimateComponentAttribute {\n animation?: boolean | any;\n animationEnter?: boolean | any;\n animationExit?: boolean | any;\n animationUpdate?: boolean | any;\n}\n\n/**\n * 标签的离场动画配置\n */\nexport interface ICommonAnimation {\n /**\n * 动画执行的时长\n */\n duration?: number;\n /**\n * 动画延迟的时长\n */\n delay?: number;\n /**\n * 动画的缓动函数\n */\n easing?: EasingType;\n}\n\nexport abstract class AnimateComponent<T extends AnimateComponentAttribute> extends AbstractComponent<T> {\n // parsed animation config\n protected _animationConfig?: {\n enter: ICommonAnimation | false;\n exit: ICommonAnimation | false;\n update: ICommonAnimation | false;\n };\n\n _prepareAnimate(defaultAnimation: ICommonAnimation) {\n if (this.attribute.animation !== false) {\n const { animation, animationEnter, animationExit, animationUpdate } = this.attribute;\n const animationCfg = isObject(animation) ? animation : {};\n this._animationConfig = {\n enter: animationEnter !== false ? merge({}, defaultAnimation, animationCfg, animationEnter ?? {}) : false,\n exit: animationExit !== false ? merge({}, defaultAnimation, animationCfg, animationExit ?? {}) : false,\n update:\n animationUpdate !== false\n ? isArray(animationUpdate)\n ? animationUpdate\n : merge({}, defaultAnimation, animationCfg, animationUpdate ?? {})\n : false\n };\n } else {\n this._animationConfig = {\n enter: false,\n exit: false,\n update: false\n };\n }\n }\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import { AComponentAnimate } from '@visactor/vrender-animate';
2
+ export declare class AxisEnter extends AComponentAnimate<any> {
3
+ onBind(): void;
4
+ }
5
+ export declare class AxisUpdate extends AComponentAnimate<any> {
6
+ onBind(): void;
7
+ deleteSelfAttr(key: string): void;
8
+ protected tryPreventConflict(): void;
9
+ }
10
+ export declare function registerAxisAnimate(): void;
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.registerAxisAnimate = exports.AxisUpdate = exports.AxisEnter = void 0;
6
+
7
+ const vrender_animate_1 = require("@visactor/vrender-animate");
8
+
9
+ class AxisEnter extends vrender_animate_1.AComponentAnimate {
10
+ onBind() {
11
+ var _a;
12
+ const animator = (0, vrender_animate_1.createComponentAnimator)(this.target);
13
+ this._animator = animator;
14
+ const duration = this.duration, easing = this.easing, {config: config, lastScale: lastScale, getTickCoord: getTickCoord} = this.params;
15
+ let ratio = 1;
16
+ const currData = this.target.data;
17
+ if (lastScale && getTickCoord && currData) {
18
+ ratio = .7;
19
+ const point = getTickCoord(lastScale.scale(currData.rawValue)), newX = this.target.attribute.x, newY = this.target.attribute.y;
20
+ this.target.setAttributes({
21
+ x: point.x,
22
+ y: point.y
23
+ }), animator.animate(this.target, {
24
+ type: "to",
25
+ to: {
26
+ x: newX,
27
+ y: newY
28
+ },
29
+ duration: duration,
30
+ easing: easing
31
+ });
32
+ }
33
+ animator.animate(this.target, {
34
+ type: null !== (_a = config.type) && void 0 !== _a ? _a : "fadeIn",
35
+ to: config.to,
36
+ duration: duration * ratio,
37
+ easing: easing
38
+ }), this.completeBind(animator);
39
+ }
40
+ }
41
+
42
+ exports.AxisEnter = AxisEnter;
43
+
44
+ class AxisUpdate extends vrender_animate_1.AComponentAnimate {
45
+ onBind() {
46
+ const animator = (0, vrender_animate_1.createComponentAnimator)(this.target);
47
+ this._animator = animator;
48
+ const duration = this.duration, easing = this.easing, {config: config, diffAttrs: diffAttrs} = this.params;
49
+ animator.animate(this.target, {
50
+ type: "to",
51
+ to: Object.assign({}, diffAttrs),
52
+ duration: duration,
53
+ easing: easing,
54
+ customParameters: {
55
+ diffAttrs: Object.assign({}, diffAttrs)
56
+ }
57
+ }), this.completeBind(animator);
58
+ }
59
+ deleteSelfAttr(key) {
60
+ super.deleteSelfAttr(key), this._animator.deleteSelfAttr(key);
61
+ }
62
+ tryPreventConflict() {}
63
+ }
64
+
65
+ function registerAxisAnimate() {
66
+ vrender_animate_1.AnimateExecutor.registerBuiltInAnimate("axisEnter", AxisEnter),
67
+ vrender_animate_1.AnimateExecutor.registerBuiltInAnimate("axisUpdate", AxisUpdate);
68
+ }
69
+
70
+ exports.AxisUpdate = AxisUpdate, exports.registerAxisAnimate = registerAxisAnimate;
71
+ //# sourceMappingURL=axis-animate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/animation/axis-animate.ts"],"names":[],"mappings":";;;AAAA,+DAAwG;AAKxG,MAAa,SAAU,SAAQ,mCAAsB;IACnD,MAAM;;QACJ,MAAM,QAAQ,GAAG,IAAA,yCAAuB,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QAExD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QAClC,IAAI,SAAS,IAAI,YAAY,IAAI,QAAQ,EAAE;YACzC,KAAK,GAAG,GAAG,CAAC;YAEZ,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACpD,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YAErC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YACtD,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE;gBAC5B,IAAI,EAAE,IAAI;gBACV,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE;gBACxB,QAAQ;gBACR,MAAM;aACP,CAAC,CAAC;SACJ;QAgCD,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE;YAC5B,IAAI,EAAE,MAAA,MAAM,CAAC,IAAI,mCAAI,QAAQ;YAC7B,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,QAAQ,EAAE,QAAQ,GAAG,KAAK;YAC1B,MAAM;SACP,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;CACF;AAjED,8BAiEC;AAKD,MAAa,UAAW,SAAQ,mCAAsB;IACpD,MAAM;QACJ,MAAM,QAAQ,GAAG,IAAA,yCAAuB,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QAmB1C,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE;YAC5B,IAAI,EAAE,IAAI;YACV,EAAE,oBAAO,SAAS,CAAE;YACpB,QAAQ;YACR,MAAM;YACN,gBAAgB,EAAE;gBAChB,SAAS,oBAAO,SAAS,CAAE;aAC5B;SACF,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAGD,cAAc,CAAC,GAAW;QACxB,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IAGS,kBAAkB;QAC1B,OAAO;IACT,CAAC;CACF;AA/CD,gCA+CC;AAED,SAAgB,mBAAmB;IAEjC,iCAAe,CAAC,sBAAsB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC/D,iCAAe,CAAC,sBAAsB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AACnE,CAAC;AAJD,kDAIC","file":"axis-animate.js","sourcesContent":["import { AComponentAnimate, AnimateExecutor, createComponentAnimator } from '@visactor/vrender-animate';\n\n/**\n * AxisEnter class handles the enter animation for Axis components\n */\nexport class AxisEnter extends AComponentAnimate<any> {\n onBind(): void {\n const animator = createComponentAnimator(this.target);\n this._animator = animator;\n const duration = this.duration;\n const easing = this.easing;\n const { config, lastScale, getTickCoord } = this.params;\n\n let ratio = 1;\n const currData = this.target.data;\n if (lastScale && getTickCoord && currData) {\n ratio = 0.7;\n\n const oldValue = lastScale.scale(currData.rawValue);\n const point = getTickCoord(oldValue);\n const newX = this.target.attribute.x;\n const newY = this.target.attribute.y;\n\n this.target.setAttributes({ x: point.x, y: point.y });\n animator.animate(this.target, {\n type: 'to',\n to: { x: newX, y: newY },\n duration,\n easing\n });\n }\n\n // if (updateEls && updateEls.length > 1) {\n // ratio = 0.5;\n // const oldData1 = updateEls[0].oldEl.data;\n // const { rawValue: oldRawValue1, value: oldValue1 } = oldData1;\n // const oldData2 = updateEls[1].oldEl.data;\n // const { rawValue: oldRawValue2, value: oldValue2 } = oldData2;\n // const data = this.target.data;\n // const { rawValue: newRawValue } = data;\n // // rawValue 是原始值,value是映射出来的值,假设是线性映射,计算一下newRawValue在old阶段的value是什么值\n // const oldValue =\n // oldValue1 + ((oldValue2 - oldValue1) * (newRawValue - oldRawValue1)) / (oldRawValue2 - oldRawValue1);\n // // 将 x 和 y 做映射\n // const oldX1 = updateEls[0].oldEl.attribute.x;\n // const oldY1 = updateEls[0].oldEl.attribute.y;\n // const oldX2 = updateEls[1].oldEl.attribute.x;\n // const oldY2 = updateEls[1].oldEl.attribute.y;\n // const oldX = oldX1 + ((oldX2 - oldX1) * (oldValue - oldValue1)) / (oldValue2 - oldValue1);\n // const oldY = oldY1 + ((oldY2 - oldY1) * (oldValue - oldValue1)) / (oldValue2 - oldValue1);\n // const newX = this.target.attribute.x;\n // const newY = this.target.attribute.y;\n\n // this.target.setAttributes({ x: oldX, y: oldY });\n // animator.animate(this.target, {\n // type: 'to',\n // to: { x: newX, y: newY },\n // duration,\n // easing\n // });\n // }\n\n animator.animate(this.target, {\n type: config.type ?? 'fadeIn',\n to: config.to,\n duration: duration * ratio,\n easing\n });\n this.completeBind(animator);\n }\n}\n\n/**\n * AxisUpdate class handles the update animation for Axis components\n */\nexport class AxisUpdate extends AComponentAnimate<any> {\n onBind(): void {\n const animator = createComponentAnimator(this.target);\n this._animator = animator;\n const duration = this.duration;\n const easing = this.easing;\n const { config, diffAttrs } = this.params;\n // this.target.applyAnimationState(\n // ['update'],\n // [\n // {\n // name: 'update',\n // animation: {\n // type: 'to',\n // to: { ...this.props },\n // duration,\n // easing,\n // customParameters: {\n // diffAttrs: { ...this.props }\n // }\n // }\n // }\n // ]\n // );\n // console.log('this.props', this.props, { ...this.target.attribute });\n animator.animate(this.target, {\n type: 'to',\n to: { ...diffAttrs },\n duration,\n easing,\n customParameters: {\n diffAttrs: { ...diffAttrs }\n }\n });\n this.completeBind(animator);\n }\n\n // 轴动画本身没有逻辑,具体通过animator中执行,所以当需要屏蔽自身属性时,需要通过animator中执行\n deleteSelfAttr(key: string): void {\n super.deleteSelfAttr(key);\n this._animator.deleteSelfAttr(key);\n }\n\n // 轴动画本身没有逻辑,具体通过animator中执行,所以本身不需要屏蔽冲突\n protected tryPreventConflict(): void {\n return;\n }\n}\n\nexport function registerAxisAnimate() {\n // Label update animation\n AnimateExecutor.registerBuiltInAnimate('axisEnter', AxisEnter);\n AnimateExecutor.registerBuiltInAnimate('axisUpdate', AxisUpdate);\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import { AComponentAnimate } from '@visactor/vrender-animate';
2
+ export declare class LabelUpdate extends AComponentAnimate<any> {
3
+ onBind(): void;
4
+ protected tryPreventConflict(): void;
5
+ }
6
+ export declare class LabelEnter extends AComponentAnimate<any> {
7
+ onBind(): void;
8
+ protected tryPreventConflict(): void;
9
+ }
10
+ export declare function registerLabelAnimate(): void;
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+
3
+ var __rest = this && this.__rest || function(s, e) {
4
+ var t = {};
5
+ for (var p in s) Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0 && (t[p] = s[p]);
6
+ if (null != s && "function" == typeof Object.getOwnPropertySymbols) {
7
+ var i = 0;
8
+ for (p = Object.getOwnPropertySymbols(s); i < p.length; i++) e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]) && (t[p[i]] = s[p[i]]);
9
+ }
10
+ return t;
11
+ };
12
+
13
+ Object.defineProperty(exports, "__esModule", {
14
+ value: !0
15
+ }), exports.registerLabelAnimate = exports.LabelEnter = exports.LabelUpdate = void 0;
16
+
17
+ const vrender_animate_1 = require("@visactor/vrender-animate");
18
+
19
+ class LabelUpdate extends vrender_animate_1.AComponentAnimate {
20
+ onBind() {
21
+ const animator = (0, vrender_animate_1.createComponentAnimator)(this.target);
22
+ this._animator = animator;
23
+ const duration = this.duration, easing = this.easing, {prevText: prevText, curText: curText, prevLabelLine: prevLabelLine, curLabelLine: curLabelLine, increaseEffect: increaseEffect = !0} = this.params, diff = {};
24
+ for (const key in curText.attribute) prevText.attribute[key] !== curText.attribute[key] && (diff[key] = curText.attribute[key]);
25
+ const {text: text} = diff, rest = __rest(diff, [ "text" ]);
26
+ animator.animate(prevText, {
27
+ type: "to",
28
+ to: rest,
29
+ duration: duration,
30
+ easing: easing
31
+ }), !1 !== increaseEffect && animator.animate(prevText, {
32
+ type: "increaseCount",
33
+ to: {
34
+ text: curText.attribute.text
35
+ },
36
+ duration: duration,
37
+ easing: easing
38
+ }), prevLabelLine && animator.animate(prevLabelLine, {
39
+ type: "to",
40
+ to: curLabelLine.attribute,
41
+ duration: duration,
42
+ easing: easing
43
+ }), this.completeBind(animator);
44
+ }
45
+ tryPreventConflict() {}
46
+ }
47
+
48
+ exports.LabelUpdate = LabelUpdate;
49
+
50
+ class LabelEnter extends vrender_animate_1.AComponentAnimate {
51
+ onBind() {
52
+ const animator = (0, vrender_animate_1.createComponentAnimator)(this.target);
53
+ this._animator = animator;
54
+ const duration = this.duration, easing = this.easing, {relatedGraphic: relatedGraphic, relatedGraphics: relatedGraphics, config: config} = this.params, {mode: mode, type: type = "fadeIn"} = config, target = this.target;
55
+ let startTime = 0;
56
+ "after" === mode ? relatedGraphic.animates && relatedGraphic.animates.forEach((animate => {
57
+ startTime = Math.max(startTime, animate.getStartTime() + animate.getTotalDuration());
58
+ })) : "after-all" === mode ? relatedGraphics && relatedGraphics.forEach((graphic => {
59
+ graphic.animates && graphic.animates.forEach((animate => {
60
+ startTime = Math.max(startTime, animate.getStartTime() + animate.getTotalDuration());
61
+ }));
62
+ })) : relatedGraphic.animates && relatedGraphic.animates.forEach((animate => {
63
+ startTime = Math.max(startTime, animate.getStartTime());
64
+ })), animator.animate(target, Object.assign(Object.assign({}, config), {
65
+ duration: duration,
66
+ easing: easing,
67
+ startTime: startTime,
68
+ type: type
69
+ })), this.completeBind(animator);
70
+ }
71
+ tryPreventConflict() {}
72
+ }
73
+
74
+ function registerLabelAnimate() {
75
+ vrender_animate_1.AnimateExecutor.registerBuiltInAnimate("increaseCount", vrender_animate_1.IncreaseCount),
76
+ vrender_animate_1.AnimateExecutor.registerBuiltInAnimate("labelUpdate", LabelUpdate),
77
+ vrender_animate_1.AnimateExecutor.registerBuiltInAnimate("labelEnter", LabelEnter);
78
+ }
79
+
80
+ exports.LabelEnter = LabelEnter, exports.registerLabelAnimate = registerLabelAnimate;
81
+ //# sourceMappingURL=label-animate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/animation/label-animate.ts"],"names":[],"mappings":"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","file":"label-animate.js","sourcesContent":["import { AComponentAnimate, AnimateExecutor, createComponentAnimator, IncreaseCount } from '@visactor/vrender-animate';\n\n/**\n * LabelUpdate class handles the update animation for Label components\n */\nexport class LabelUpdate extends AComponentAnimate<any> {\n onBind(): void {\n const animator = createComponentAnimator(this.target);\n this._animator = animator;\n const duration = this.duration;\n const easing = this.easing;\n\n const { prevText, curText, prevLabelLine, curLabelLine, increaseEffect = true } = this.params;\n const diff: Record<string, any> = {};\n\n for (const key in curText.attribute) {\n if (prevText.attribute[key] !== curText.attribute[key]) {\n diff[key] = curText.attribute[key];\n }\n }\n\n const { text, ...rest } = diff;\n\n animator.animate(prevText, {\n type: 'to',\n to: rest,\n duration,\n easing\n });\n\n if (increaseEffect !== false) {\n animator.animate(prevText, {\n type: 'increaseCount',\n to: {\n text: curText.attribute.text\n },\n duration,\n easing\n });\n }\n\n if (prevLabelLine) {\n animator.animate(prevLabelLine, {\n type: 'to',\n to: curLabelLine.attribute,\n duration,\n easing\n });\n }\n\n this.completeBind(animator);\n }\n\n // 标签动画本身没有逻辑,具体通过animator中执行,所以本身不需要屏蔽冲突\n protected tryPreventConflict(): void {\n return;\n }\n}\n\nexport class LabelEnter extends AComponentAnimate<any> {\n onBind(): void {\n const animator = createComponentAnimator(this.target);\n this._animator = animator;\n const duration = this.duration;\n const easing = this.easing;\n\n const { relatedGraphic, relatedGraphics, config } = this.params;\n const { mode, type = 'fadeIn' } = config;\n\n const target = this.target;\n\n let startTime = 0;\n\n if (mode === 'after') {\n relatedGraphic.animates &&\n relatedGraphic.animates.forEach((animate: any) => {\n startTime = Math.max(startTime, animate.getStartTime() + animate.getTotalDuration());\n });\n } else if (mode === 'after-all') {\n relatedGraphics &&\n relatedGraphics.forEach((graphic: any) => {\n graphic.animates &&\n graphic.animates.forEach((animate: any) => {\n startTime = Math.max(startTime, animate.getStartTime() + animate.getTotalDuration());\n });\n });\n } else {\n // 'same-time'\n relatedGraphic.animates &&\n relatedGraphic.animates.forEach((animate: any) => {\n startTime = Math.max(startTime, animate.getStartTime());\n });\n }\n\n animator.animate(target, {\n ...config,\n duration,\n easing,\n startTime,\n type\n });\n\n this.completeBind(animator);\n }\n\n // 标签动画本身没有逻辑,具体通过animator中执行,所以本身不需要屏蔽冲突\n protected tryPreventConflict(): void {\n return;\n }\n}\n\nexport function registerLabelAnimate() {\n AnimateExecutor.registerBuiltInAnimate('increaseCount', IncreaseCount);\n // Label update animation\n AnimateExecutor.registerBuiltInAnimate('labelUpdate', LabelUpdate);\n AnimateExecutor.registerBuiltInAnimate('labelEnter', LabelEnter);\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import type { EasingType } from '@visactor/vrender-core';
2
+ export declare const DefaultAxisAnimation: {
3
+ type: string;
4
+ duration: number;
5
+ easing: EasingType;
6
+ };
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.DefaultAxisAnimation = void 0, exports.DefaultAxisAnimation = {
6
+ type: "default",
7
+ duration: 300,
8
+ easing: "linear"
9
+ };
10
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/axis/animate/config.ts"],"names":[],"mappings":";;;AAEa,QAAA,oBAAoB,GAAG;IAClC,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,GAAG;IACb,MAAM,EAAE,QAAsB;CAC/B,CAAC","file":"config.js","sourcesContent":["import type { EasingType } from '@visactor/vrender-core';\n\nexport const DefaultAxisAnimation = {\n type: 'default',\n duration: 300,\n easing: 'linear' as EasingType\n};\n"]}
package/cjs/axis/util.js CHANGED
@@ -104,4 +104,5 @@ exports.getAxisBreakSymbolAttrs = getAxisBreakSymbolAttrs, exports.getElMap = ge
104
104
  exports.getVerticalCoord = getVerticalCoord, exports.getCircleVerticalVector = getCircleVerticalVector,
105
105
  exports.angleLabelOrientAttribute = angleLabelOrientAttribute, exports.getPolarAngleLabelPosition = getPolarAngleLabelPosition,
106
106
  exports.getCirclePoints = getCirclePoints, exports.getPolygonPath = getPolygonPath,
107
- exports.textIntersect = textIntersect, exports.hasOverlap = hasOverlap;
107
+ exports.textIntersect = textIntersect, exports.hasOverlap = hasOverlap;
108
+ //# sourceMappingURL=util.js.map
@@ -17,5 +17,4 @@ var __createBinding = this && this.__createBinding || (Object.create ? function(
17
17
 
18
18
  Object.defineProperty(exports, "__esModule", {
19
19
  value: !0
20
- }), __exportStar(require("./brush"), exports), __exportStar(require("./type"), exports);
21
- //# sourceMappingURL=index.js.map
20
+ }), __exportStar(require("./brush"), exports), __exportStar(require("./type"), exports);
@@ -2,5 +2,4 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
- });
6
- //# sourceMappingURL=type.js.map
5
+ });
@@ -2,4 +2,5 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
- });
5
+ });
6
+ //# sourceMappingURL=type.js.map
@@ -0,0 +1,65 @@
1
+ import { IDataZoomInteractiveEvent, type DataZoomAttributes } from './type';
2
+ import type { Dict, Matrix } from '@visactor/vutils';
3
+ import type { IGroup, IRect, ISymbol, IStage } from '@visactor/vrender-core';
4
+ import { EventEmitter } from '@visactor/vutils';
5
+ export interface InteractionAttributes {
6
+ stage: IStage;
7
+ attribute: Partial<Required<DataZoomAttributes>>;
8
+ startHandlerMask?: IRect;
9
+ endHandlerMask?: IRect;
10
+ middleHandlerSymbol?: ISymbol;
11
+ middleHandlerRect?: IRect;
12
+ selectedBackground?: IRect;
13
+ background?: IRect;
14
+ previewGroup?: IGroup;
15
+ selectedPreviewGroup?: IGroup;
16
+ getLayoutAttrFromConfig?: any;
17
+ getState: () => {
18
+ start: number;
19
+ end: number;
20
+ };
21
+ setState: (state: {
22
+ start: number;
23
+ end: number;
24
+ }) => void;
25
+ getGlobalTransMatrix: () => Matrix;
26
+ }
27
+ export declare class DataZoomInteraction extends EventEmitter {
28
+ stage: IStage;
29
+ attribute: Partial<Required<DataZoomAttributes>>;
30
+ private _getLayoutAttrFromConfig;
31
+ private _getState;
32
+ private _setState;
33
+ private _getGlobalTransMatrix;
34
+ private _startHandlerMask;
35
+ private _middleHandlerSymbol;
36
+ private _middleHandlerRect;
37
+ private _endHandlerMask;
38
+ private _background;
39
+ private _previewGroup;
40
+ private _selectedPreviewGroup;
41
+ private _selectedBackground;
42
+ private _activeTag;
43
+ private _activeItem;
44
+ private _activeState;
45
+ private _activeCache;
46
+ private _layoutCache;
47
+ private _spanCache;
48
+ private _onHandlerPointerMove;
49
+ constructor(props: InteractionAttributes);
50
+ setAttributes(props: InteractionAttributes): void;
51
+ private _initAttrs;
52
+ clearDragEvents(): void;
53
+ clearVGlobalEvents(): void;
54
+ bindEvents(): void;
55
+ private _handleTouchMove;
56
+ private _onHandlerPointerDown;
57
+ private _pointerMove;
58
+ private _setStateAttr;
59
+ private _moveZoomWithMiddle;
60
+ private _moveZoomWithHandler;
61
+ private _moveZoomWithBackground;
62
+ private _onHandlerPointerUp;
63
+ private _eventPosToStagePos;
64
+ protected _dispatchEvent(eventName: IDataZoomInteractiveEvent, details?: Dict<any>): void;
65
+ }
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.DataZoomInteraction = void 0;
6
+
7
+ const type_1 = require("./type"), event_1 = require("../util/event"), vrender_core_1 = require("@visactor/vrender-core"), vutils_1 = require("@visactor/vutils"), delayMap = {
8
+ debounce: vutils_1.debounce,
9
+ throttle: vutils_1.throttle
10
+ };
11
+
12
+ class DataZoomInteraction extends vutils_1.EventEmitter {
13
+ constructor(props) {
14
+ super(), this._activeState = !1, this._activeCache = {
15
+ startPos: {
16
+ x: 0,
17
+ y: 0
18
+ },
19
+ lastPos: {
20
+ x: 0,
21
+ y: 0
22
+ }
23
+ }, this._layoutCache = {
24
+ attPos: "x",
25
+ attSize: "width",
26
+ size: 0
27
+ }, this._handleTouchMove = e => {
28
+ this._activeState && e.preventDefault();
29
+ }, this._onHandlerPointerDown = (e, tag) => {
30
+ this.clearDragEvents(), "start" === tag ? (this._activeTag = type_1.DataZoomActiveTag.startHandler,
31
+ this._activeItem = this._startHandlerMask) : "end" === tag ? (this._activeTag = type_1.DataZoomActiveTag.endHandler,
32
+ this._activeItem = this._endHandlerMask) : "middleRect" === tag ? (this._activeTag = type_1.DataZoomActiveTag.middleHandler,
33
+ this._activeItem = this._middleHandlerRect) : "middleSymbol" === tag ? (this._activeTag = type_1.DataZoomActiveTag.middleHandler,
34
+ this._activeItem = this._middleHandlerSymbol) : "background" === tag && (this._activeTag = type_1.DataZoomActiveTag.background,
35
+ this._activeItem = this._background), this._activeState = !0, this._activeCache.startPos = this._eventPosToStagePos(e),
36
+ this._activeCache.lastPos = this._eventPosToStagePos(e);
37
+ const evtTarget = "browser" === vrender_core_1.vglobal.env ? vrender_core_1.vglobal : this.stage, triggers = (0,
38
+ event_1.getEndTriggersOfDrag)();
39
+ evtTarget.addEventListener("pointermove", this._onHandlerPointerMove, {
40
+ capture: !0
41
+ }), this.on("pointermove", this._onHandlerPointerMove, {
42
+ capture: !0
43
+ }), triggers.forEach((trigger => {
44
+ evtTarget.addEventListener(trigger, this._onHandlerPointerUp);
45
+ }));
46
+ }, this._pointerMove = e => {
47
+ const {brushSelect: brushSelect} = this.attribute, {position: position} = this._getLayoutAttrFromConfig(), pos = this._eventPosToStagePos(e), {attPos: attPos, size: size, attSize: attSize} = this._layoutCache, dis = (pos[attPos] - this._activeCache.lastPos[attPos]) / size, statePos = (pos[attPos] - position[attPos]) / this._getLayoutAttrFromConfig()[attSize];
48
+ let {start: start, end: end} = this._getState(), shouldRender = !0;
49
+ this._activeState && (this._activeTag === type_1.DataZoomActiveTag.middleHandler ? ({start: start, end: end} = this._moveZoomWithMiddle(dis)) : this._activeTag === type_1.DataZoomActiveTag.startHandler ? ({start: start, end: end} = this._moveZoomWithHandler(statePos, "start")) : this._activeTag === type_1.DataZoomActiveTag.endHandler ? ({start: start, end: end} = this._moveZoomWithHandler(statePos, "end")) : this._activeTag === type_1.DataZoomActiveTag.background && brushSelect && (({start: start, end: end} = this._moveZoomWithBackground(statePos)),
50
+ shouldRender = !1, this._dispatchEvent(type_1.IDataZoomInteractiveEvent.maskUpdate)),
51
+ this._activeCache.lastPos = pos), this._getState().start === start && this._getState().end === end || (this._setStateAttr(start, end),
52
+ this._dispatchEvent(type_1.IDataZoomInteractiveEvent.stateUpdate, {
53
+ start: this._getState().start,
54
+ end: this._getState().end,
55
+ shouldRender: shouldRender,
56
+ tag: this._activeTag
57
+ }), this.attribute.realTime && this._dispatchEvent(type_1.IDataZoomInteractiveEvent.dataZoomUpdate, {
58
+ start: this._getState().start,
59
+ end: this._getState().end,
60
+ shouldRender: !0,
61
+ tag: this._activeTag
62
+ }));
63
+ }, this._onHandlerPointerUp = e => {
64
+ this._activeState && this._activeTag === type_1.DataZoomActiveTag.background && (this._setStateAttr(this._getState().start, this._getState().end),
65
+ this._dispatchEvent(type_1.IDataZoomInteractiveEvent.stateUpdate, {
66
+ start: this._getState().start,
67
+ end: this._getState().end,
68
+ shouldRender: !0,
69
+ tag: this._activeTag
70
+ })), this._activeState = !1, this._dispatchEvent(type_1.IDataZoomInteractiveEvent.dataZoomUpdate, {
71
+ start: this._getState().start,
72
+ end: this._getState().end,
73
+ shouldRender: !0,
74
+ tag: this._activeTag
75
+ }), this.clearDragEvents();
76
+ }, this._initAttrs(props);
77
+ }
78
+ setAttributes(props) {
79
+ var _a, _b, _c, _d, _e, _f;
80
+ this._initAttrs(props), this._onHandlerPointerMove = 0 === (null !== (_b = null === (_a = this.attribute) || void 0 === _a ? void 0 : _a.delayTime) && void 0 !== _b ? _b : 0) ? this._pointerMove : delayMap[null !== (_d = null === (_c = this.attribute) || void 0 === _c ? void 0 : _c.delayType) && void 0 !== _d ? _d : "debounce"](this._pointerMove, null !== (_f = null === (_e = this.attribute) || void 0 === _e ? void 0 : _e.delayTime) && void 0 !== _f ? _f : 0);
81
+ }
82
+ _initAttrs(props) {
83
+ this.stage = props.stage, this.attribute = props.attribute, this._startHandlerMask = props.startHandlerMask,
84
+ this._endHandlerMask = props.endHandlerMask, this._middleHandlerSymbol = props.middleHandlerSymbol,
85
+ this._middleHandlerRect = props.middleHandlerRect, this._selectedBackground = props.selectedBackground,
86
+ this._background = props.background, this._previewGroup = props.previewGroup, this._selectedPreviewGroup = props.selectedPreviewGroup,
87
+ this._getLayoutAttrFromConfig = props.getLayoutAttrFromConfig, this._getState = props.getState,
88
+ this._setState = props.setState;
89
+ const {width: width, height: height} = this._getLayoutAttrFromConfig();
90
+ this._spanCache = this._getState().end - this._getState().start;
91
+ const isHorizontal = "top" === this.attribute.orient || "bottom" === this.attribute.orient;
92
+ this._layoutCache.size = isHorizontal ? width : height, this._layoutCache.attPos = isHorizontal ? "x" : "y",
93
+ this._layoutCache.attSize = isHorizontal ? "width" : "height", this._getGlobalTransMatrix = props.getGlobalTransMatrix;
94
+ }
95
+ clearDragEvents() {
96
+ const evtTarget = "browser" === vrender_core_1.vglobal.env ? vrender_core_1.vglobal : this.stage, triggers = (0,
97
+ event_1.getEndTriggersOfDrag)();
98
+ evtTarget.removeEventListener("pointermove", this._onHandlerPointerMove, {
99
+ capture: !0
100
+ }), triggers.forEach((trigger => {
101
+ evtTarget.removeEventListener(trigger, this._onHandlerPointerUp);
102
+ })), this.off("pointermove", this._onHandlerPointerMove, {
103
+ capture: !0
104
+ });
105
+ }
106
+ clearVGlobalEvents() {
107
+ ("browser" === vrender_core_1.vglobal.env ? vrender_core_1.vglobal : this.stage).addEventListener("touchmove", this._handleTouchMove, {
108
+ passive: !1
109
+ });
110
+ }
111
+ bindEvents() {
112
+ var _a, _b, _c, _d, _e, _f, _g, _h;
113
+ const {brushSelect: brushSelect} = this.attribute;
114
+ null === (_a = this._startHandlerMask) || void 0 === _a || _a.addEventListener("pointerdown", (e => this._onHandlerPointerDown(e, "start"))),
115
+ null === (_b = this._endHandlerMask) || void 0 === _b || _b.addEventListener("pointerdown", (e => this._onHandlerPointerDown(e, "end"))),
116
+ null === (_c = this._middleHandlerSymbol) || void 0 === _c || _c.addEventListener("pointerdown", (e => this._onHandlerPointerDown(e, "middleSymbol"))),
117
+ null === (_d = this._middleHandlerRect) || void 0 === _d || _d.addEventListener("pointerdown", (e => this._onHandlerPointerDown(e, "middleRect")));
118
+ const selectedTag = brushSelect ? "background" : "middleRect";
119
+ null === (_e = this._selectedBackground) || void 0 === _e || _e.addEventListener("pointerdown", (e => this._onHandlerPointerDown(e, selectedTag))),
120
+ brushSelect && (null === (_f = this._background) || void 0 === _f || _f.addEventListener("pointerdown", (e => this._onHandlerPointerDown(e, "background")))),
121
+ brushSelect && (null === (_g = this._previewGroup) || void 0 === _g || _g.addEventListener("pointerdown", (e => this._onHandlerPointerDown(e, "background")))),
122
+ null === (_h = this._selectedPreviewGroup) || void 0 === _h || _h.addEventListener("pointerdown", (e => this._onHandlerPointerDown(e, selectedTag))),
123
+ ("browser" === vrender_core_1.vglobal.env ? vrender_core_1.vglobal : this.stage).addEventListener("touchmove", this._handleTouchMove, {
124
+ passive: !1
125
+ });
126
+ }
127
+ _setStateAttr(start, end) {
128
+ const {zoomLock: zoomLock = !1, minSpan: minSpan = 0, maxSpan: maxSpan = 1} = this.attribute, span = end - start;
129
+ span !== this._spanCache && (zoomLock || span < minSpan || span > maxSpan) || (this._spanCache = span,
130
+ this._setState({
131
+ start: start,
132
+ end: end
133
+ }));
134
+ }
135
+ _moveZoomWithMiddle(dis) {
136
+ const {start: staetState, end: endState} = this._getState();
137
+ return dis > 0 && endState + dis > 1 ? dis = 1 - endState : dis < 0 && staetState + dis < 0 && (dis = -staetState),
138
+ {
139
+ start: (0, vutils_1.clamp)(staetState + dis, 0, 1),
140
+ end: (0, vutils_1.clamp)(endState + dis, 0, 1)
141
+ };
142
+ }
143
+ _moveZoomWithHandler(statePos, handler) {
144
+ const {start: start, end: end} = this._getState();
145
+ let newStart = start, newEnd = end;
146
+ return "start" === handler ? statePos > end ? (newStart = end, newEnd = statePos,
147
+ this._activeTag = type_1.DataZoomActiveTag.endHandler) : newStart = statePos : "end" === handler && (statePos < start ? (newEnd = start,
148
+ newStart = statePos, this._activeTag = type_1.DataZoomActiveTag.startHandler) : newEnd = statePos),
149
+ {
150
+ start: (0, vutils_1.clamp)(newStart, 0, 1),
151
+ end: (0, vutils_1.clamp)(newEnd, 0, 1)
152
+ };
153
+ }
154
+ _moveZoomWithBackground(statePos) {
155
+ const {position: position} = this._getLayoutAttrFromConfig(), {attSize: attSize} = this._layoutCache, startPos = (this._activeCache.startPos[this._layoutCache.attPos] - position[this._layoutCache.attPos]) / this._getLayoutAttrFromConfig()[attSize], endPos = statePos;
156
+ let start = (0, vutils_1.clamp)(startPos, 0, 1), end = (0, vutils_1.clamp)(endPos, 0, 1);
157
+ return start > end && ([start, end] = [ end, start ]), {
158
+ start: start,
159
+ end: end
160
+ };
161
+ }
162
+ _eventPosToStagePos(e) {
163
+ var _a, _b;
164
+ const result = {
165
+ x: 0,
166
+ y: 0
167
+ }, stagePoints = null !== (_b = null === (_a = this.stage) || void 0 === _a ? void 0 : _a.eventPointTransform(e)) && void 0 !== _b ? _b : {
168
+ x: 0,
169
+ y: 0
170
+ };
171
+ return this._getGlobalTransMatrix().transformPoint(stagePoints, result), result;
172
+ }
173
+ _dispatchEvent(eventName, details) {
174
+ this.emit(eventName, details);
175
+ }
176
+ }
177
+
178
+ exports.DataZoomInteraction = DataZoomInteraction;
179
+ //# sourceMappingURL=interaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/data-zoom/interaction.ts"],"names":[],"mappings":"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","file":"interaction.js","sourcesContent":["import { DataZoomActiveTag, IDataZoomInteractiveEvent, type DataZoomAttributes } from './type';\nimport { getEndTriggersOfDrag } from '../util/event';\nimport type { IPointLike, Dict, Matrix } from '@visactor/vutils';\nimport { vglobal } from '@visactor/vrender-core';\nimport type { FederatedPointerEvent, IGroup, IRect, ISymbol, IStage } from '@visactor/vrender-core';\nimport { clamp, debounce, EventEmitter, throttle } from '@visactor/vutils';\nconst delayMap = {\n debounce: debounce,\n throttle: throttle\n};\nexport interface InteractionAttributes {\n stage: IStage;\n attribute: Partial<Required<DataZoomAttributes>>;\n startHandlerMask?: IRect;\n endHandlerMask?: IRect;\n middleHandlerSymbol?: ISymbol;\n middleHandlerRect?: IRect;\n selectedBackground?: IRect;\n background?: IRect;\n previewGroup?: IGroup;\n selectedPreviewGroup?: IGroup;\n getLayoutAttrFromConfig?: any;\n getState: () => { start: number; end: number };\n setState: (state: { start: number; end: number }) => void;\n getGlobalTransMatrix: () => Matrix;\n}\nexport class DataZoomInteraction extends EventEmitter {\n /** 上层透传 */\n stage: IStage;\n attribute!: Partial<Required<DataZoomAttributes>>;\n private _getLayoutAttrFromConfig: any;\n private _getState: () => { start: number; end: number };\n private _setState: (state: { start: number; end: number }) => void;\n private _getGlobalTransMatrix: () => Matrix;\n\n /** 图元 */\n private _startHandlerMask: IRect | undefined;\n private _middleHandlerSymbol: ISymbol | undefined;\n private _middleHandlerRect: IRect | undefined;\n private _endHandlerMask: IRect | undefined;\n private _background: IRect | undefined;\n private _previewGroup: IGroup | undefined;\n private _selectedPreviewGroup: IGroup | undefined;\n private _selectedBackground: IRect | undefined;\n\n /** 交互 */\n private _activeTag!: DataZoomActiveTag;\n private _activeItem!: any;\n private _activeState = false;\n private _activeCache: {\n startPos: IPointLike;\n lastPos: IPointLike;\n } = {\n startPos: { x: 0, y: 0 },\n lastPos: { x: 0, y: 0 }\n };\n private _layoutCache: {\n attPos: 'x' | 'y';\n attSize: 'width' | 'height';\n size: number;\n } = {\n attPos: 'x',\n attSize: 'width',\n size: 0\n };\n private _spanCache: number;\n\n private _onHandlerPointerMove: (e: FederatedPointerEvent) => void;\n\n constructor(props: InteractionAttributes) {\n super();\n this._initAttrs(props);\n }\n\n setAttributes(props: InteractionAttributes): void {\n this._initAttrs(props);\n this._onHandlerPointerMove =\n (this.attribute?.delayTime ?? 0) === 0\n ? this._pointerMove\n : delayMap[this.attribute?.delayType ?? 'debounce'](this._pointerMove, this.attribute?.delayTime ?? 0);\n }\n\n private _initAttrs(props: InteractionAttributes) {\n this.stage = props.stage;\n this.attribute = props.attribute;\n this._startHandlerMask = props.startHandlerMask;\n this._endHandlerMask = props.endHandlerMask;\n this._middleHandlerSymbol = props.middleHandlerSymbol;\n this._middleHandlerRect = props.middleHandlerRect;\n this._selectedBackground = props.selectedBackground;\n this._background = props.background;\n this._previewGroup = props.previewGroup;\n this._selectedPreviewGroup = props.selectedPreviewGroup;\n this._getLayoutAttrFromConfig = props.getLayoutAttrFromConfig;\n this._getState = props.getState;\n this._setState = props.setState;\n\n const { width, height } = this._getLayoutAttrFromConfig();\n this._spanCache = this._getState().end - this._getState().start;\n const isHorizontal = this.attribute.orient === 'top' || this.attribute.orient === 'bottom';\n this._layoutCache.size = isHorizontal ? width : height;\n this._layoutCache.attPos = isHorizontal ? 'x' : 'y';\n this._layoutCache.attSize = isHorizontal ? 'width' : 'height';\n this._getGlobalTransMatrix = props.getGlobalTransMatrix;\n }\n\n clearDragEvents() {\n const evtTarget = vglobal.env === 'browser' ? vglobal : this.stage;\n const triggers = getEndTriggersOfDrag();\n\n evtTarget.removeEventListener('pointermove', this._onHandlerPointerMove, { capture: true });\n triggers.forEach((trigger: string) => {\n evtTarget.removeEventListener(trigger, this._onHandlerPointerUp);\n });\n\n (this as unknown as IGroup).off('pointermove', this._onHandlerPointerMove, {\n capture: true\n });\n }\n\n clearVGlobalEvents() {\n (vglobal.env === 'browser' ? vglobal : this.stage).addEventListener('touchmove', this._handleTouchMove, {\n passive: false\n });\n }\n\n bindEvents(): void {\n const { brushSelect } = this.attribute as DataZoomAttributes;\n // 拖拽开始\n this._startHandlerMask?.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'start') as unknown as EventListener\n );\n this._endHandlerMask?.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'end') as unknown as EventListener\n );\n this._middleHandlerSymbol?.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'middleSymbol') as unknown as EventListener\n );\n this._middleHandlerRect?.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'middleRect') as unknown as EventListener\n );\n const selectedTag = brushSelect ? 'background' : 'middleRect';\n this._selectedBackground?.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, selectedTag) as unknown as EventListener\n );\n brushSelect &&\n this._background?.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'background') as unknown as EventListener\n );\n brushSelect &&\n this._previewGroup?.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, 'background') as unknown as EventListener\n );\n this._selectedPreviewGroup?.addEventListener(\n 'pointerdown',\n (e: FederatedPointerEvent) => this._onHandlerPointerDown(e, selectedTag) as unknown as EventListener\n );\n\n (vglobal.env === 'browser' ? vglobal : this.stage).addEventListener('touchmove', this._handleTouchMove, {\n passive: false\n });\n }\n private _handleTouchMove = (e: TouchEvent) => {\n if (this._activeState) {\n /**\n * https://developer.mozilla.org/zh-CN/docs/Web/CSS/overscroll-behavior\n * 由于浏览器的overscroll-behavior属性,需要在move的时候阻止浏览器默认行为,否则会因为浏览器检测到scroll行为,阻止pointer事件,\n * 抛出pointercancel事件,导致拖拽行为中断。\n */\n e.preventDefault();\n }\n };\n\n /**\n * 拖拽开始事件\n * @description 开启activeState + 通过tag判断事件在哪个元素上触发 并 更新交互坐标\n */\n private _onHandlerPointerDown = (e: FederatedPointerEvent, tag: string) => {\n // 清除之前的事件,防止没有被清除掉\n this.clearDragEvents();\n if (tag === 'start') {\n this._activeTag = DataZoomActiveTag.startHandler;\n this._activeItem = this._startHandlerMask;\n } else if (tag === 'end') {\n this._activeTag = DataZoomActiveTag.endHandler;\n this._activeItem = this._endHandlerMask;\n } else if (tag === 'middleRect') {\n this._activeTag = DataZoomActiveTag.middleHandler;\n this._activeItem = this._middleHandlerRect;\n } else if (tag === 'middleSymbol') {\n this._activeTag = DataZoomActiveTag.middleHandler;\n this._activeItem = this._middleHandlerSymbol;\n } else if (tag === 'background') {\n this._activeTag = DataZoomActiveTag.background;\n this._activeItem = this._background;\n }\n this._activeState = true;\n this._activeCache.startPos = this._eventPosToStagePos(e);\n this._activeCache.lastPos = this._eventPosToStagePos(e);\n const evtTarget = vglobal.env === 'browser' ? vglobal : this.stage;\n const triggers = getEndTriggersOfDrag();\n\n /**\n * move的时候,需要通过 capture: true,能够在捕获截断被拦截,\n */\n evtTarget.addEventListener('pointermove', this._onHandlerPointerMove, { capture: true });\n (this as unknown as IGroup).on('pointermove', this._onHandlerPointerMove, {\n capture: true\n });\n\n triggers.forEach((trigger: string) => {\n evtTarget.addEventListener(trigger, this._onHandlerPointerUp);\n });\n };\n\n /**\n * 拖拽进行事件\n * @description 分为以下四种情况:\n * 1. 在背景 or 背景图表上拖拽 (activeTag === 'background'): 改变lastPos => only renderDragMask\n * 2. 在middleHandler上拖拽 (activeTag === 'middleHandler'): 改变lastPos、start & end + 边界处理: 防止拖拽结果超出背景 => render\n * 3. 在startHandler上拖拽 (activeTag === 'startHandler'): 改变lastPos、start & end + 边界处理: startHandler和endHandler交换 => render\n * 4. 在endHandler上拖拽,同上\n */\n private _pointerMove = (e: FederatedPointerEvent) => {\n const { brushSelect } = this.attribute as DataZoomAttributes;\n const { position } = this._getLayoutAttrFromConfig();\n const pos = this._eventPosToStagePos(e);\n\n const { attPos, size, attSize } = this._layoutCache;\n const dis = (pos[attPos] - this._activeCache.lastPos[attPos]) / size;\n const statePos = (pos[attPos] - position[attPos]) / this._getLayoutAttrFromConfig()[attSize];\n\n let { start, end } = this._getState();\n let shouldRender = true;\n if (this._activeState) {\n if (this._activeTag === DataZoomActiveTag.middleHandler) {\n ({ start, end } = this._moveZoomWithMiddle(dis));\n } else if (this._activeTag === DataZoomActiveTag.startHandler) {\n ({ start, end } = this._moveZoomWithHandler(statePos, 'start'));\n } else if (this._activeTag === DataZoomActiveTag.endHandler) {\n ({ start, end } = this._moveZoomWithHandler(statePos, 'end'));\n } else if (this._activeTag === DataZoomActiveTag.background && brushSelect) {\n ({ start, end } = this._moveZoomWithBackground(statePos));\n shouldRender = false;\n this._dispatchEvent(IDataZoomInteractiveEvent.maskUpdate);\n }\n this._activeCache.lastPos = pos;\n }\n\n // 避免attributes相同时, 重复渲染\n if (this._getState().start !== start || this._getState().end !== end) {\n this._setStateAttr(start, end);\n this._dispatchEvent(IDataZoomInteractiveEvent.stateUpdate, {\n start: this._getState().start,\n end: this._getState().end,\n shouldRender,\n tag: this._activeTag\n });\n if (this.attribute.realTime) {\n this._dispatchEvent(IDataZoomInteractiveEvent.dataZoomUpdate, {\n start: this._getState().start,\n end: this._getState().end,\n shouldRender: true,\n tag: this._activeTag\n });\n }\n }\n };\n\n /** state 边界处理 */\n private _setStateAttr(start: number, end: number) {\n const { zoomLock = false, minSpan = 0, maxSpan = 1 } = this.attribute as DataZoomAttributes;\n const span = end - start;\n if (span !== this._spanCache && (zoomLock || span < minSpan || span > maxSpan)) {\n return;\n }\n this._spanCache = span;\n this._setState({ start, end });\n }\n /**\n * @description 拖拽middleHandler, 改变start和end\n */\n private _moveZoomWithMiddle(dis: number) {\n const { start: staetState, end: endState } = this._getState();\n // 拖拽middleHandler时,限制在background范围内\n if (dis > 0 && endState + dis > 1) {\n dis = 1 - endState;\n } else if (dis < 0 && staetState + dis < 0) {\n dis = -staetState;\n }\n return {\n start: clamp(staetState + dis, 0, 1),\n end: clamp(endState + dis, 0, 1)\n };\n }\n\n /**\n * @description 拖拽startHandler/endHandler, 改变start和end\n */\n private _moveZoomWithHandler(statePos: number, handler: 'start' | 'end') {\n const { start, end } = this._getState();\n let newStart = start;\n let newEnd = end;\n if (handler === 'start') {\n if (statePos > end) {\n newStart = end;\n newEnd = statePos;\n this._activeTag = DataZoomActiveTag.endHandler;\n } else {\n newStart = statePos;\n }\n } else if (handler === 'end') {\n if (statePos < start) {\n newEnd = start;\n newStart = statePos;\n this._activeTag = DataZoomActiveTag.startHandler;\n } else {\n newEnd = statePos;\n }\n }\n return {\n start: clamp(newStart, 0, 1),\n end: clamp(newEnd, 0, 1)\n };\n }\n\n /**\n * @description 拖拽背景, 改变start和end\n */\n private _moveZoomWithBackground(statePos: number) {\n const { position } = this._getLayoutAttrFromConfig();\n const { attSize } = this._layoutCache;\n const startPos =\n (this._activeCache.startPos[this._layoutCache.attPos] - position[this._layoutCache.attPos]) /\n this._getLayoutAttrFromConfig()[attSize];\n const endPos = statePos;\n let start = clamp(startPos, 0, 1);\n let end = clamp(endPos, 0, 1);\n if (start > end) {\n [start, end] = [end, start];\n }\n return { start, end };\n }\n\n /**\n * 拖拽结束事件\n * @description 关闭activeState + 边界情况处理: 防止拖拽后start和end过近\n */\n private _onHandlerPointerUp = (e: FederatedPointerEvent) => {\n if (this._activeState) {\n // brush的时候, 只改变了state, 没有触发重新渲染, 在抬起鼠标时触发\n if (this._activeTag === DataZoomActiveTag.background) {\n this._setStateAttr(this._getState().start, this._getState().end);\n this._dispatchEvent(IDataZoomInteractiveEvent.stateUpdate, {\n start: this._getState().start,\n end: this._getState().end,\n shouldRender: true,\n tag: this._activeTag\n });\n }\n }\n this._activeState = false;\n // 此次dispatch不能被省略\n // 因为pointermove时, 已经将状态更新至最新, 所以在pointerup时, 必定start = state.start & end = state.end\n // 而realTime = false时, 需要依赖这次dispatch来更新图表图元\n this._dispatchEvent(IDataZoomInteractiveEvent.dataZoomUpdate, {\n start: this._getState().start,\n end: this._getState().end,\n shouldRender: true,\n tag: this._activeTag\n });\n\n this.clearDragEvents();\n };\n\n /** 事件系统坐标转换为stage坐标 */\n private _eventPosToStagePos(e: FederatedPointerEvent) {\n const result = { x: 0, y: 0 };\n // 1. 外部坐标 -> 内部坐标\n const stagePoints = this.stage?.eventPointTransform(e as any) ?? { x: 0, y: 0 }; // updateSpec过程中交互的话, stage可能为空\n // 2. 内部坐标 -> 组件坐标 (比如: 给layer设置 scale / x / y)\n this._getGlobalTransMatrix().transformPoint(stagePoints, result);\n return result;\n }\n\n protected _dispatchEvent(eventName: IDataZoomInteractiveEvent, details?: Dict<any>) {\n this.emit(eventName, details);\n }\n}\n"]}