@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.
- package/cjs/animation/animate-component.d.ts +22 -0
- package/cjs/animation/animate-component.js +29 -0
- package/cjs/animation/animate-component.js.map +1 -0
- package/cjs/animation/axis-animate.d.ts +10 -0
- package/cjs/animation/axis-animate.js +71 -0
- package/cjs/animation/axis-animate.js.map +1 -0
- package/cjs/animation/label-animate.d.ts +10 -0
- package/cjs/animation/label-animate.js +81 -0
- package/cjs/animation/label-animate.js.map +1 -0
- package/cjs/axis/animate/config.d.ts +6 -0
- package/cjs/axis/animate/config.js +10 -0
- package/cjs/axis/animate/config.js.map +1 -0
- package/cjs/axis/util.js +2 -1
- package/cjs/brush/index.js +1 -2
- package/cjs/checkbox/type.js +1 -2
- package/cjs/crosshair/type.js +2 -1
- package/cjs/data-zoom/interaction.d.ts +65 -0
- package/cjs/data-zoom/interaction.js +179 -0
- package/cjs/data-zoom/interaction.js.map +1 -0
- package/cjs/data-zoom/renderer.d.ts +91 -0
- package/cjs/data-zoom/renderer.js +467 -0
- package/cjs/data-zoom/renderer.js.map +1 -0
- package/cjs/data-zoom/utils.d.ts +2 -0
- package/cjs/data-zoom/utils.js +20 -0
- package/cjs/data-zoom/utils.js.map +1 -0
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/label/base.js +1 -1
- package/cjs/label/data-label-register.js +1 -1
- package/cjs/label/dataLabel.js +1 -1
- package/cjs/label/index.js +1 -1
- package/cjs/label/line.js +1 -1
- package/cjs/label/polygon.js +1 -1
- package/cjs/label-item/index.d.ts +2 -0
- package/cjs/label-item/index.js +21 -0
- package/cjs/label-item/index.js.map +1 -0
- package/cjs/label-item/label-item.d.ts +18 -0
- package/cjs/label-item/label-item.js +163 -0
- package/cjs/label-item/label-item.js.map +1 -0
- package/cjs/label-item/register.d.ts +1 -0
- package/cjs/label-item/register.js +15 -0
- package/cjs/label-item/register.js.map +1 -0
- package/cjs/label-item/type.d.ts +31 -0
- package/cjs/label-item/type.js +6 -0
- package/cjs/label-item/type.js.map +1 -0
- package/cjs/legend/base.js +1 -1
- package/cjs/legend/constant.js +1 -1
- package/cjs/legend/index.js +1 -1
- package/cjs/legend/register.js +1 -1
- package/cjs/legend/type.js +1 -1
- package/cjs/legend/util.js +1 -1
- package/cjs/marker/mixin/label.d.ts +16 -0
- package/cjs/marker/mixin/label.js +57 -0
- package/cjs/marker/mixin/label.js.map +1 -0
- package/cjs/table-series-number/event-manager.d.ts +16 -0
- package/cjs/table-series-number/event-manager.js +167 -0
- package/cjs/table-series-number/event-manager.js.map +1 -0
- package/cjs/table-series-number/index.d.ts +2 -0
- package/cjs/table-series-number/index.js +21 -0
- package/cjs/table-series-number/index.js.map +1 -0
- package/cjs/table-series-number/register.d.ts +1 -0
- package/cjs/table-series-number/register.js +14 -0
- package/cjs/table-series-number/register.js.map +1 -0
- package/cjs/table-series-number/table-series-number.d.ts +76 -0
- package/cjs/table-series-number/table-series-number.js +536 -0
- package/cjs/table-series-number/table-series-number.js.map +1 -0
- package/cjs/table-series-number/tools.d.ts +1 -0
- package/cjs/table-series-number/tools.js +14 -0
- package/cjs/table-series-number/tools.js.map +1 -0
- package/cjs/table-series-number/type.d.ts +84 -0
- package/cjs/table-series-number/type.js +18 -0
- package/cjs/table-series-number/type.js.map +1 -0
- package/cjs/util/event.d.ts +1 -0
- package/cjs/util/event.js +14 -0
- package/cjs/util/event.js.map +1 -0
- package/cjs/weather/index.d.ts +1 -0
- package/cjs/weather/index.js +21 -0
- package/cjs/weather/index.js.map +1 -0
- package/cjs/weather/register.d.ts +1 -0
- package/cjs/weather/register.js +14 -0
- package/cjs/weather/register.js.map +1 -0
- package/cjs/weather/type.d.ts +24 -0
- package/cjs/weather/type.js +6 -0
- package/cjs/weather/type.js.map +1 -0
- package/cjs/weather/weather-box.d.ts +13 -0
- package/cjs/weather/weather-box.js +129 -0
- package/cjs/weather/weather-box.js.map +1 -0
- package/dist/index.es.js +1 -1
- package/es/animation/animate-component.d.ts +22 -0
- package/es/animation/animate-component.js +21 -0
- package/es/animation/animate-component.js.map +1 -0
- package/es/animation/axis-animate.d.ts +10 -0
- package/es/animation/axis-animate.js +60 -0
- package/es/animation/axis-animate.js.map +1 -0
- package/es/animation/label-animate.d.ts +10 -0
- package/es/animation/label-animate.js +70 -0
- package/es/animation/label-animate.js.map +1 -0
- package/es/axis/animate/config.d.ts +6 -0
- package/es/axis/animate/config.js +6 -0
- package/es/axis/animate/config.js.map +1 -0
- package/es/axis/util.js +2 -1
- package/es/brush/index.js +1 -2
- package/es/checkbox/type.js +1 -2
- package/es/crosshair/type.js +2 -1
- package/es/data-zoom/interaction.d.ts +65 -0
- package/es/data-zoom/interaction.js +177 -0
- package/es/data-zoom/interaction.js.map +1 -0
- package/es/data-zoom/renderer.d.ts +91 -0
- package/es/data-zoom/renderer.js +464 -0
- package/es/data-zoom/renderer.js.map +1 -0
- package/es/data-zoom/utils.d.ts +2 -0
- package/es/data-zoom/utils.js +12 -0
- package/es/data-zoom/utils.js.map +1 -0
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/label/base.js +1 -1
- package/es/label/data-label-register.js +1 -1
- package/es/label/dataLabel.js +1 -1
- package/es/label/index.js +1 -1
- package/es/label/line.js +1 -1
- package/es/label/polygon.js +1 -1
- package/es/label-item/index.d.ts +2 -0
- package/es/label-item/index.js +4 -0
- package/es/label-item/index.js.map +1 -0
- package/es/label-item/label-item.d.ts +18 -0
- package/es/label-item/label-item.js +159 -0
- package/es/label-item/label-item.js.map +1 -0
- package/es/label-item/register.d.ts +1 -0
- package/es/label-item/register.js +6 -0
- package/es/label-item/register.js.map +1 -0
- package/es/label-item/type.d.ts +31 -0
- package/es/label-item/type.js +2 -0
- package/es/label-item/type.js.map +1 -0
- package/es/legend/base.js +1 -1
- package/es/legend/constant.js +1 -1
- package/es/legend/index.js +1 -1
- package/es/legend/register.js +1 -1
- package/es/legend/type.js +1 -1
- package/es/legend/util.js +1 -1
- package/es/marker/mixin/label.d.ts +16 -0
- package/es/marker/mixin/label.js +45 -0
- package/es/marker/mixin/label.js.map +1 -0
- package/es/table-series-number/event-manager.d.ts +16 -0
- package/es/table-series-number/event-manager.js +161 -0
- package/es/table-series-number/event-manager.js.map +1 -0
- package/es/table-series-number/index.d.ts +2 -0
- package/es/table-series-number/index.js +4 -0
- package/es/table-series-number/index.js.map +1 -0
- package/es/table-series-number/register.d.ts +1 -0
- package/es/table-series-number/register.js +6 -0
- package/es/table-series-number/register.js.map +1 -0
- package/es/table-series-number/table-series-number.d.ts +76 -0
- package/es/table-series-number/table-series-number.js +544 -0
- package/es/table-series-number/table-series-number.js.map +1 -0
- package/es/table-series-number/tools.d.ts +1 -0
- package/es/table-series-number/tools.js +8 -0
- package/es/table-series-number/tools.js.map +1 -0
- package/es/table-series-number/type.d.ts +84 -0
- package/es/table-series-number/type.js +17 -0
- package/es/table-series-number/type.js.map +1 -0
- package/es/util/event.d.ts +1 -0
- package/es/util/event.js +6 -0
- package/es/util/event.js.map +1 -0
- package/es/weather/index.d.ts +1 -0
- package/es/weather/index.js +2 -0
- package/es/weather/index.js.map +1 -0
- package/es/weather/register.d.ts +1 -0
- package/es/weather/register.js +6 -0
- package/es/weather/register.js.map +1 -0
- package/es/weather/type.d.ts +24 -0
- package/es/weather/type.js +2 -0
- package/es/weather/type.js.map +1 -0
- package/es/weather/weather-box.d.ts +13 -0
- package/es/weather/weather-box.js +127 -0
- package/es/weather/weather-box.js.map +1 -0
- 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":"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","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 @@
|
|
|
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
|
package/cjs/brush/index.js
CHANGED
|
@@ -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);
|
package/cjs/checkbox/type.js
CHANGED
package/cjs/crosshair/type.js
CHANGED
|
@@ -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"]}
|