@visactor/vrender-components 0.17.0-alpha.2 → 0.17.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/cjs/data-zoom/config.d.ts +0 -6
  2. package/cjs/data-zoom/config.js +1 -7
  3. package/cjs/data-zoom/config.js.map +1 -1
  4. package/cjs/data-zoom/data-zoom.d.ts +3 -2
  5. package/cjs/data-zoom/data-zoom.js +19 -15
  6. package/cjs/data-zoom/data-zoom.js.map +1 -1
  7. package/cjs/data-zoom/type.d.ts +6 -0
  8. package/cjs/data-zoom/type.js +6 -1
  9. package/cjs/data-zoom/type.js.map +1 -1
  10. package/cjs/index.d.ts +1 -1
  11. package/cjs/index.js +1 -1
  12. package/cjs/index.js.map +1 -1
  13. package/cjs/label/animate/animate.d.ts +8 -2
  14. package/cjs/label/animate/animate.js +37 -3
  15. package/cjs/label/animate/animate.js.map +1 -1
  16. package/cjs/label/area.d.ts +15 -0
  17. package/cjs/label/area.js +41 -0
  18. package/cjs/label/area.js.map +1 -0
  19. package/cjs/label/base.d.ts +7 -4
  20. package/cjs/label/base.js +37 -42
  21. package/cjs/label/base.js.map +1 -1
  22. package/cjs/label/dataLabel.js +8 -5
  23. package/cjs/label/dataLabel.js.map +1 -1
  24. package/cjs/label/line.d.ts +1 -1
  25. package/cjs/label/line.js +2 -9
  26. package/cjs/label/line.js.map +1 -1
  27. package/cjs/label/type.d.ts +22 -2
  28. package/cjs/label/type.js +1 -2
  29. package/cjs/label/type.js.map +1 -1
  30. package/cjs/label/util.d.ts +4 -0
  31. package/cjs/label/util.js +14 -2
  32. package/cjs/label/util.js.map +1 -1
  33. package/cjs/legend/discrete/discrete.d.ts +3 -0
  34. package/cjs/legend/discrete/discrete.js +45 -38
  35. package/cjs/legend/discrete/discrete.js.map +1 -1
  36. package/cjs/legend/discrete/type.d.ts +1 -0
  37. package/cjs/legend/discrete/type.js.map +1 -1
  38. package/cjs/link-path/type.js +1 -1
  39. package/cjs/scrollbar/scrollbar.js.map +1 -1
  40. package/dist/index.js +699 -562
  41. package/dist/index.min.js +1 -1
  42. package/es/data-zoom/config.d.ts +0 -6
  43. package/es/data-zoom/config.js +0 -7
  44. package/es/data-zoom/config.js.map +1 -1
  45. package/es/data-zoom/data-zoom.d.ts +3 -2
  46. package/es/data-zoom/data-zoom.js +10 -4
  47. package/es/data-zoom/data-zoom.js.map +1 -1
  48. package/es/data-zoom/type.d.ts +6 -0
  49. package/es/data-zoom/type.js +6 -1
  50. package/es/data-zoom/type.js.map +1 -1
  51. package/es/index.d.ts +1 -1
  52. package/es/index.js +1 -1
  53. package/es/index.js.map +1 -1
  54. package/es/label/animate/animate.d.ts +8 -2
  55. package/es/label/animate/animate.js +35 -0
  56. package/es/label/animate/animate.js.map +1 -1
  57. package/es/label/area.d.ts +15 -0
  58. package/es/label/area.js +39 -0
  59. package/es/label/area.js.map +1 -0
  60. package/es/label/base.d.ts +7 -4
  61. package/es/label/base.js +39 -44
  62. package/es/label/base.js.map +1 -1
  63. package/es/label/dataLabel.js +11 -4
  64. package/es/label/dataLabel.js.map +1 -1
  65. package/es/label/line.d.ts +1 -1
  66. package/es/label/line.js +3 -8
  67. package/es/label/line.js.map +1 -1
  68. package/es/label/type.d.ts +22 -2
  69. package/es/label/type.js +1 -2
  70. package/es/label/type.js.map +1 -1
  71. package/es/label/util.d.ts +4 -0
  72. package/es/label/util.js +13 -1
  73. package/es/label/util.js.map +1 -1
  74. package/es/legend/discrete/discrete.d.ts +3 -0
  75. package/es/legend/discrete/discrete.js +44 -36
  76. package/es/legend/discrete/discrete.js.map +1 -1
  77. package/es/legend/discrete/type.d.ts +1 -0
  78. package/es/legend/discrete/type.js.map +1 -1
  79. package/es/link-path/type.js +1 -1
  80. package/es/scrollbar/scrollbar.js.map +1 -1
  81. package/package.json +8 -8
@@ -1,7 +1,13 @@
1
- import type { ITextGraphicAttribute } from '@visactor/vrender-core';
2
- import type { ILabelAnimation } from '../type';
1
+ import type { IText, ITextGraphicAttribute, EasingType } from '@visactor/vrender-core';
2
+ import type { BaseLabelAttrs, ILabelAnimation, ILabelUpdateChannelAnimation } from '../type';
3
3
  export declare function getAnimationAttributes(textAttribute: ITextGraphicAttribute, type: 'fadeIn' | 'fadeOut'): {
4
4
  from: any;
5
5
  to: any;
6
6
  };
7
+ export declare function updateAnimation(prev: IText, next: IText, animationConfig: BaseLabelAttrs['animationUpdate']): void;
8
+ export declare const update: (prev: IText, next: IText, channel?: string[], options?: ILabelUpdateChannelAnimation['options']) => {
9
+ from: Partial<ITextGraphicAttribute>;
10
+ to: Partial<ITextGraphicAttribute>;
11
+ };
12
+ export declare function playIncreaseCount(prev: IText, next: IText, duration: number, easing: EasingType): void;
7
13
  export declare const DefaultLabelAnimation: ILabelAnimation;
@@ -2,9 +2,9 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
- }), exports.DefaultLabelAnimation = exports.getAnimationAttributes = void 0;
5
+ }), exports.DefaultLabelAnimation = exports.playIncreaseCount = exports.update = exports.updateAnimation = exports.getAnimationAttributes = void 0;
6
6
 
7
- const fadeIn = (textAttribute = {}) => {
7
+ const vrender_core_1 = require("@visactor/vrender-core"), vutils_1 = require("@visactor/vutils"), fadeIn = (textAttribute = {}) => {
8
8
  var _a, _b, _c;
9
9
  return {
10
10
  from: {
@@ -45,7 +45,41 @@ function getAnimationAttributes(textAttribute, type) {
45
45
  };
46
46
  }
47
47
 
48
- exports.getAnimationAttributes = getAnimationAttributes, exports.DefaultLabelAnimation = {
48
+ function updateAnimation(prev, next, animationConfig) {
49
+ if (!(0, vutils_1.isArray)(animationConfig)) {
50
+ const {duration: duration, easing: easing, increaseEffect: increaseEffect = !0} = animationConfig;
51
+ return prev.animate().to(next.attribute, duration, easing), void (increaseEffect && playIncreaseCount(prev, next, duration, easing));
52
+ }
53
+ animationConfig.forEach(((cfg, i) => {
54
+ const {duration: duration, easing: easing, increaseEffect: increaseEffect = !0, channel: channel} = cfg, {from: from, to: to} = (0,
55
+ exports.update)(prev, next, channel, cfg.options);
56
+ (0, vutils_1.isEmpty)(to) || prev.animate().to(to, duration, easing), "text" in from && "text" in to && increaseEffect && playIncreaseCount(prev, next, duration, easing);
57
+ }));
58
+ }
59
+
60
+ exports.getAnimationAttributes = getAnimationAttributes, exports.updateAnimation = updateAnimation;
61
+
62
+ const update = (prev, next, channel, options) => {
63
+ const from = Object.assign({}, prev.attribute), to = Object.assign({}, next.attribute);
64
+ return (0, vutils_1.array)(null == options ? void 0 : options.excludeChannels).forEach((key => {
65
+ delete to[key];
66
+ })), Object.keys(to).forEach((key => {
67
+ channel && !channel.includes(key) && delete to[key];
68
+ })), {
69
+ from: from,
70
+ to: to
71
+ };
72
+ };
73
+
74
+ function playIncreaseCount(prev, next, duration, easing) {
75
+ prev.attribute.text !== next.attribute.text && (0, vutils_1.isValidNumber)(Number(prev.attribute.text) * Number(next.attribute.text)) && prev.animate().play(new vrender_core_1.IncreaseCount({
76
+ text: prev.attribute.text
77
+ }, {
78
+ text: next.attribute.text
79
+ }, duration, easing));
80
+ }
81
+
82
+ exports.update = update, exports.playIncreaseCount = playIncreaseCount, exports.DefaultLabelAnimation = {
49
83
  mode: "same-time",
50
84
  duration: 300,
51
85
  easing: "linear"
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/label/animate/animate.ts"],"names":[],"mappings":";;;AAGA,MAAM,MAAM,GAAG,CAAC,gBAAuC,EAAE,EAAE,EAAE;;IAC3D,OAAO;QACL,IAAI,EAAE;YACJ,OAAO,EAAE,CAAC;YACV,WAAW,EAAE,CAAC;YACd,aAAa,EAAE,CAAC;SACjB;QACD,EAAE,EAAE;YACF,OAAO,EAAE,MAAA,aAAa,CAAC,OAAO,mCAAI,CAAC;YACnC,WAAW,EAAE,MAAA,aAAa,CAAC,WAAW,mCAAI,CAAC;YAC3C,aAAa,EAAE,MAAA,aAAa,CAAC,aAAa,mCAAI,CAAC;SAChD;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,gBAAuC,EAAE,EAAE,EAAE;;IAC5D,OAAO;QACL,IAAI,EAAE;YACJ,OAAO,EAAE,MAAA,aAAa,CAAC,OAAO,mCAAI,CAAC;YACnC,WAAW,EAAE,MAAA,aAAa,CAAC,WAAW,mCAAI,CAAC;YAC3C,aAAa,EAAE,MAAA,aAAa,CAAC,aAAa,mCAAI,CAAC;SAChD;QACD,EAAE,EAAE;YACF,OAAO,EAAE,CAAC;YACV,WAAW,EAAE,CAAC;YACd,aAAa,EAAE,CAAC;SACjB;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAE7C,SAAgB,sBAAsB,CACpC,aAAoC,EACpC,IAA0B;;IAK1B,OAAO,MAAA,MAAA,gBAAgB,CAAC,IAAI,CAAC,iEAAG,aAAa,CAAC,mCAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACzE,CAAC;AARD,wDAQC;AAEY,QAAA,qBAAqB,GAAoB;IACpD,IAAI,EAAE,WAAW;IACjB,QAAQ,EAAE,GAAG;IACb,MAAM,EAAE,QAAsB;CAC/B,CAAC","file":"animate.js","sourcesContent":["import type { EasingType, ITextGraphicAttribute } from '@visactor/vrender-core';\nimport type { ILabelAnimation } from '../type';\n\nconst fadeIn = (textAttribute: ITextGraphicAttribute = {}) => {\n return {\n from: {\n opacity: 0,\n fillOpacity: 0,\n strokeOpacity: 0\n },\n to: {\n opacity: textAttribute.opacity ?? 1,\n fillOpacity: textAttribute.fillOpacity ?? 1,\n strokeOpacity: textAttribute.strokeOpacity ?? 1\n }\n };\n};\n\nconst fadeOut = (textAttribute: ITextGraphicAttribute = {}) => {\n return {\n from: {\n opacity: textAttribute.opacity ?? 1,\n fillOpacity: textAttribute.fillOpacity ?? 1,\n strokeOpacity: textAttribute.strokeOpacity ?? 1\n },\n to: {\n opacity: 0,\n fillOpacity: 0,\n strokeOpacity: 0\n }\n };\n};\n\nconst animationEffects = { fadeIn, fadeOut };\n\nexport function getAnimationAttributes(\n textAttribute: ITextGraphicAttribute,\n type: 'fadeIn' | 'fadeOut'\n): {\n from: any;\n to: any;\n} {\n return animationEffects[type]?.(textAttribute) ?? { from: {}, to: {} };\n}\n\nexport const DefaultLabelAnimation: ILabelAnimation = {\n mode: 'same-time',\n duration: 300,\n easing: 'linear' as EasingType\n};\n"]}
1
+ {"version":3,"sources":["../src/label/animate/animate.ts"],"names":[],"mappings":"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","file":"animate.js","sourcesContent":["import type { IText, ITextGraphicAttribute, EasingType } from '@visactor/vrender-core';\nimport { IncreaseCount } from '@visactor/vrender-core';\nimport type { BaseLabelAttrs, ILabelAnimation, ILabelUpdateChannelAnimation } from '../type';\nimport { array, isArray, isEmpty, isValidNumber } from '@visactor/vutils';\n\nconst fadeIn = (textAttribute: ITextGraphicAttribute = {}) => {\n return {\n from: {\n opacity: 0,\n fillOpacity: 0,\n strokeOpacity: 0\n },\n to: {\n opacity: textAttribute.opacity ?? 1,\n fillOpacity: textAttribute.fillOpacity ?? 1,\n strokeOpacity: textAttribute.strokeOpacity ?? 1\n }\n };\n};\n\nconst fadeOut = (textAttribute: ITextGraphicAttribute = {}) => {\n return {\n from: {\n opacity: textAttribute.opacity ?? 1,\n fillOpacity: textAttribute.fillOpacity ?? 1,\n strokeOpacity: textAttribute.strokeOpacity ?? 1\n },\n to: {\n opacity: 0,\n fillOpacity: 0,\n strokeOpacity: 0\n }\n };\n};\n\nconst animationEffects = { fadeIn, fadeOut };\n\nexport function getAnimationAttributes(\n textAttribute: ITextGraphicAttribute,\n type: 'fadeIn' | 'fadeOut'\n): {\n from: any;\n to: any;\n} {\n return animationEffects[type]?.(textAttribute) ?? { from: {}, to: {} };\n}\n\nexport function updateAnimation(prev: IText, next: IText, animationConfig: BaseLabelAttrs['animationUpdate']) {\n if (!isArray(animationConfig)) {\n const { duration, easing, increaseEffect = true } = animationConfig;\n prev.animate().to(next.attribute, duration, easing);\n increaseEffect && playIncreaseCount(prev, next, duration, easing);\n return;\n }\n\n animationConfig.forEach((cfg, i) => {\n const { duration, easing, increaseEffect = true, channel } = cfg;\n const { from, to } = update(prev, next, channel, cfg.options);\n if (!isEmpty(to)) {\n prev.animate().to(to, duration, easing);\n }\n\n if ('text' in from && 'text' in to && increaseEffect) {\n playIncreaseCount(prev, next, duration, easing);\n }\n });\n}\n\nexport const update = (\n prev: IText,\n next: IText,\n channel?: string[],\n options?: ILabelUpdateChannelAnimation['options']\n) => {\n const from = Object.assign({}, prev.attribute);\n const to = Object.assign({}, next.attribute);\n array(options?.excludeChannels).forEach(key => {\n delete to[key];\n });\n Object.keys(to).forEach(key => {\n if (channel && !channel.includes(key)) {\n delete to[key];\n }\n });\n return { from, to };\n};\n\nexport function playIncreaseCount(prev: IText, next: IText, duration: number, easing: EasingType) {\n if (\n prev.attribute.text !== next.attribute.text &&\n isValidNumber(Number(prev.attribute.text) * Number(next.attribute.text))\n ) {\n prev\n .animate()\n .play(\n new IncreaseCount(\n { text: prev.attribute.text as string },\n { text: next.attribute.text as string },\n duration,\n easing\n )\n );\n }\n}\n\nexport const DefaultLabelAnimation: ILabelAnimation = {\n mode: 'same-time',\n duration: 300,\n easing: 'linear' as EasingType\n};\n"]}
@@ -0,0 +1,15 @@
1
+ import type { IBoundsLike } from '@visactor/vutils';
2
+ import type { IArea } from '@visactor/vrender-core';
3
+ import type { PointLocationCfg } from '../core/type';
4
+ import type { AreaLabelAttrs } from './type';
5
+ import { LabelBase } from './base';
6
+ export declare class AreaLabel extends LabelBase<AreaLabelAttrs> {
7
+ name: string;
8
+ static defaultAttributes: Partial<AreaLabelAttrs>;
9
+ constructor(attributes: AreaLabelAttrs);
10
+ protected getGraphicBounds(graphic: IArea, point?: Partial<PointLocationCfg>): IBoundsLike;
11
+ protected labeling(textBounds: IBoundsLike, graphicBounds: IBoundsLike, position?: string, offset?: number): {
12
+ x: number;
13
+ y: number;
14
+ };
15
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.AreaLabel = void 0;
6
+
7
+ const vutils_1 = require("@visactor/vutils"), base_1 = require("./base"), util_1 = require("./util");
8
+
9
+ class AreaLabel extends base_1.LabelBase {
10
+ constructor(attributes) {
11
+ super((0, vutils_1.merge)({}, AreaLabel.defaultAttributes, attributes)), this.name = "line-label";
12
+ }
13
+ getGraphicBounds(graphic, point = {}) {
14
+ var _a;
15
+ if ("area" !== graphic.type) return super.getGraphicBounds(graphic, point);
16
+ const {position: position = "end"} = this.attribute, points = (null === (_a = null == graphic ? void 0 : graphic.attribute) || void 0 === _a ? void 0 : _a.points) || [ point ], index = "start" === position ? 0 : points.length - 1;
17
+ return {
18
+ x1: points[index].x,
19
+ x2: points[index].x,
20
+ y1: points[index].y,
21
+ y2: points[index].y
22
+ };
23
+ }
24
+ labeling(textBounds, graphicBounds, position = "end", offset = 0) {
25
+ return (0, util_1.labelingLineOrArea)(textBounds, graphicBounds, position, offset);
26
+ }
27
+ }
28
+
29
+ exports.AreaLabel = AreaLabel, AreaLabel.defaultAttributes = {
30
+ textStyle: {
31
+ fontSize: 12,
32
+ fill: "#000",
33
+ textAlign: "center",
34
+ textBaseline: "middle",
35
+ boundsPadding: [ -1, 0, -1, 0 ]
36
+ },
37
+ position: "end",
38
+ offset: 6,
39
+ pickable: !1
40
+ };
41
+ //# sourceMappingURL=area.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/label/area.ts"],"names":[],"mappings":";;;AACA,6CAAyC;AAIzC,iCAAmC;AACnC,iCAA4C;AAE5C,MAAa,SAAU,SAAQ,gBAAyB;IAgBtD,YAAY,UAA0B;QACpC,KAAK,CAAC,IAAA,cAAK,EAAC,EAAE,EAAE,SAAS,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC,CAAC;QAhB5D,SAAI,GAAG,YAAY,CAAC;IAiBpB,CAAC;IAES,gBAAgB,CAAC,OAAc,EAAE,QAAmC,EAAE;;QAC9E,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;YAC3B,OAAO,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;SAC/C;QACD,MAAM,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAC5C,MAAM,MAAM,GAAG,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,0CAAE,MAAM,KAAI,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3D,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAW;YAC7B,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAW;YAC7B,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAW;YAC7B,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAW;SAC9B,CAAC;IACJ,CAAC;IAES,QAAQ,CAAC,UAAuB,EAAE,aAA0B,EAAE,WAAmB,KAAK,EAAE,MAAM,GAAG,CAAC;QAC1G,OAAO,IAAA,yBAAkB,EAAC,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzE,CAAC;;AArCH,8BAsCC;AAnCQ,2BAAiB,GAA4B;IAClD,SAAS,EAAE;QACT,QAAQ,EAAE,EAAE;QACZ,IAAI,EAAE,MAAM;QACZ,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE,QAAQ;QACtB,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;KAC9B;IACD,QAAQ,EAAE,KAAK;IACf,MAAM,EAAE,CAAC;IACT,QAAQ,EAAE,KAAK;CAChB,CAAC","file":"area.js","sourcesContent":["import type { IBoundsLike } from '@visactor/vutils';\nimport { merge } from '@visactor/vutils';\nimport type { IArea } from '@visactor/vrender-core';\nimport type { PointLocationCfg } from '../core/type';\nimport type { AreaLabelAttrs } from './type';\nimport { LabelBase } from './base';\nimport { labelingLineOrArea } from './util';\n\nexport class AreaLabel extends LabelBase<AreaLabelAttrs> {\n name = 'line-label';\n\n static defaultAttributes: Partial<AreaLabelAttrs> = {\n textStyle: {\n fontSize: 12,\n fill: '#000',\n textAlign: 'center',\n textBaseline: 'middle',\n boundsPadding: [-1, 0, -1, 0] // to ignore the textBound buf\n },\n position: 'end',\n offset: 6,\n pickable: false\n };\n\n constructor(attributes: AreaLabelAttrs) {\n super(merge({}, AreaLabel.defaultAttributes, attributes));\n }\n\n protected getGraphicBounds(graphic: IArea, point: Partial<PointLocationCfg> = {}) {\n if (graphic.type !== 'area') {\n return super.getGraphicBounds(graphic, point);\n }\n const { position = 'end' } = this.attribute;\n const points = graphic?.attribute?.points || [point];\n const index = position === 'start' ? 0 : points.length - 1;\n return {\n x1: points[index].x as number,\n x2: points[index].x as number,\n y1: points[index].y as number,\n y2: points[index].y as number\n };\n }\n\n protected labeling(textBounds: IBoundsLike, graphicBounds: IBoundsLike, position: string = 'end', offset = 0) {\n return labelingLineOrArea(textBounds, graphicBounds, position, offset);\n }\n}\n"]}
@@ -4,13 +4,18 @@ import { AbstractComponent } from '../core/base';
4
4
  import type { PointLocationCfg } from '../core/type';
5
5
  import type { Bitmap } from './overlap';
6
6
  import { bitmapTool } from './overlap';
7
- import type { BaseLabelAttrs, ILabelAnimation, LabelItem } from './type';
7
+ import type { BaseLabelAttrs, ILabelAnimation, LabelItem, ILabelEnterAnimation, ILabelExitAnimation, ILabelUpdateAnimation } from './type';
8
8
  import type { ComponentOptions } from '../interface';
9
9
  export declare class LabelBase<T extends BaseLabelAttrs> extends AbstractComponent<T> {
10
10
  name: string;
11
11
  protected _baseMarks?: IGraphic[];
12
12
  protected _isCollectionBase: boolean;
13
13
  protected _bitmap?: Bitmap;
14
+ protected _animationConfig?: {
15
+ enter: ILabelEnterAnimation;
16
+ exit: ILabelExitAnimation;
17
+ update: ILabelUpdateAnimation;
18
+ };
14
19
  static defaultAttributes: Partial<BaseLabelAttrs>;
15
20
  setBitmap(bitmap: Bitmap): void;
16
21
  protected _bmpTool?: ReturnType<typeof bitmapTool>;
@@ -50,9 +55,7 @@ export declare class LabelBase<T extends BaseLabelAttrs> extends AbstractCompone
50
55
  protected _renderWithOutAnimation(labels: IText[]): void;
51
56
  protected _handleRelatedGraphicSetState: (e: any) => void;
52
57
  protected _syncStateWithRelatedGraphic(relatedGraphic: IGraphic): void;
53
- protected _afterRelatedGraphicAttributeUpdate(text: IText, texts: IText[], index: number, relatedGraphic: IGraphic, { mode, duration, easing, to, delay }: ILabelAnimation & {
54
- to: any;
55
- }): (event: any) => {};
58
+ protected _afterRelatedGraphicAttributeUpdate(text: IText, texts: IText[], index: number, relatedGraphic: IGraphic, to: any, { mode, duration, easing, delay }: ILabelAnimation): (event: any) => {};
56
59
  protected _smartInvert(labels: IText[]): void;
57
60
  protected _canPlaceInside(textBound: IBoundsLike, shapeBound: IAABBBounds): boolean;
58
61
  setLocation(point: PointLocationCfg): void;
package/cjs/label/base.js CHANGED
@@ -81,33 +81,40 @@ class LabelBase extends base_1.AbstractComponent {
81
81
  return this._bindEvent(text), this._setStatesOfText(text), text;
82
82
  }
83
83
  _prepare() {
84
- var _a, _b, _c, _d;
84
+ var _a, _b, _c, _d, _e;
85
85
  const currentBaseMarks = [];
86
86
  let baseMarks;
87
87
  if (baseMarks = (0, vutils_1.isFunction)(this.attribute.getBaseMarks) ? this.attribute.getBaseMarks() : (0,
88
88
  util_1.getMarksByName)(this.getRootNode(), this.attribute.baseMarkGroupName), baseMarks.forEach((mark => {
89
89
  "willRelease" !== mark.releaseStatus && currentBaseMarks.push(mark);
90
90
  })), null === (_a = this._idToGraphic) || void 0 === _a || _a.clear(), null === (_b = this._idToPoint) || void 0 === _b || _b.clear(),
91
- this._baseMarks = currentBaseMarks, this._isCollectionBase = "line" === (null === (_c = null == currentBaseMarks ? void 0 : currentBaseMarks[0]) || void 0 === _c ? void 0 : _c.type) || "area" === (null === (_d = null == currentBaseMarks ? void 0 : currentBaseMarks[0]) || void 0 === _d ? void 0 : _d.type),
91
+ this._baseMarks = currentBaseMarks, this._isCollectionBase = "line-data" === this.attribute.type,
92
92
  !currentBaseMarks || 0 === currentBaseMarks.length) return;
93
93
  const {data: data} = this.attribute;
94
- if (data && 0 !== data.length) if (this._idToGraphic || (this._idToGraphic = new Map),
95
- this._isCollectionBase) {
96
- this._idToPoint || (this._idToPoint = new Map);
97
- let cur = 0;
98
- for (let i = 0; i < currentBaseMarks.length; i++) {
99
- const baseMark = currentBaseMarks[i], points = (0, util_2.getPointsOfLineArea)(baseMark);
100
- if (null == points ? void 0 : points.length) for (let j = 0; j < points.length; j++) {
101
- const textData = data[cur];
102
- textData && points[j] && ((0, vutils_1.isValid)(textData.id) || (textData.id = `vrender-component-${this.name}-${cur}`),
103
- this._idToPoint.set(textData.id, points[j]), this._idToGraphic.set(textData.id, baseMark)),
104
- cur++;
94
+ if (data && 0 !== data.length) {
95
+ if (this._idToGraphic || (this._idToGraphic = new Map), this._isCollectionBase) {
96
+ this._idToPoint || (this._idToPoint = new Map);
97
+ let cur = 0;
98
+ for (let i = 0; i < currentBaseMarks.length; i++) {
99
+ const baseMark = currentBaseMarks[i], points = (0, util_2.getPointsOfLineArea)(baseMark);
100
+ if (null == points ? void 0 : points.length) for (let j = 0; j < points.length; j++) {
101
+ const textData = data[cur];
102
+ textData && points[j] && ((0, vutils_1.isValid)(textData.id) || (textData.id = `vrender-component-${this.name}-${cur}`),
103
+ this._idToPoint.set(textData.id, points[j]), this._idToGraphic.set(textData.id, baseMark)),
104
+ cur++;
105
+ }
105
106
  }
107
+ } else for (let i = 0; i < currentBaseMarks.length; i++) {
108
+ const textData = data[i], baseMark = currentBaseMarks[i];
109
+ textData && baseMark && ((0, vutils_1.isValid)(textData.id) || (textData.id = `vrender-component-${this.name}-${i}`),
110
+ this._idToGraphic.set(textData.id, baseMark));
106
111
  }
107
- } else for (let i = 0; i < currentBaseMarks.length; i++) {
108
- const textData = data[i], baseMark = currentBaseMarks[i];
109
- textData && baseMark && ((0, vutils_1.isValid)(textData.id) || (textData.id = `vrender-component-${this.name}-${i}`),
110
- this._idToGraphic.set(textData.id, baseMark));
112
+ !1 !== this.attribute.animation && (this._animationConfig = {
113
+ enter: (0, vutils_1.merge)({}, animate_1.DefaultLabelAnimation, this.attribute.animation, null !== (_c = this.attribute.animationEnter) && void 0 !== _c ? _c : {}),
114
+ exit: (0, vutils_1.merge)({}, animate_1.DefaultLabelAnimation, this.attribute.animation, null !== (_d = this.attribute.animationExit) && void 0 !== _d ? _d : {}),
115
+ update: (0, vutils_1.isArray)(this.attribute.animationUpdate) ? this.attribute.animationUpdate : (0,
116
+ vutils_1.merge)({}, animate_1.DefaultLabelAnimation, this.attribute.animation, null !== (_e = this.attribute.animationUpdate) && void 0 !== _e ? _e : {})
117
+ });
111
118
  }
112
119
  }
113
120
  getRelatedGrphic(item) {
@@ -209,8 +216,7 @@ class LabelBase extends base_1.AbstractComponent {
209
216
  !1 === this._enableAnimation || !1 === this.attribute.animation ? this._renderWithOutAnimation(labels) : this._renderWithAnimation(labels);
210
217
  }
211
218
  _renderWithAnimation(labels) {
212
- var _a, _b, _c, _d, _e;
213
- const animationConfig = null !== (_a = this.attribute.animation) && void 0 !== _a ? _a : {}, mode = null !== (_b = animationConfig.mode) && void 0 !== _b ? _b : animate_1.DefaultLabelAnimation.mode, duration = null !== (_c = animationConfig.duration) && void 0 !== _c ? _c : animate_1.DefaultLabelAnimation.duration, easing = null !== (_d = animationConfig.easing) && void 0 !== _d ? _d : animate_1.DefaultLabelAnimation.easing, delay = null !== (_e = animationConfig.delay) && void 0 !== _e ? _e : 0, currentTextMap = new Map, prevTextMap = this._graphicToText || new Map, texts = [];
219
+ const currentTextMap = new Map, prevTextMap = this._graphicToText || new Map, texts = [];
214
220
  labels.forEach(((text, index) => {
215
221
  var _a, _b, _c, _d, _e, _f, _g;
216
222
  const labelLine = this._labelLine(text), relatedGraphic = this.getRelatedGrphic(text.attribute), textId = text.attribute.id, textKey = this._isCollectionBase ? textId : relatedGraphic, state = (null == prevTextMap ? void 0 : prevTextMap.get(textKey)) ? "update" : "enter";
@@ -225,34 +231,23 @@ class LabelBase extends base_1.AbstractComponent {
225
231
  this.add(text), labelLine && (this._setStatesOfLabelLine(labelLine), this.add(labelLine)),
226
232
  this._syncStateWithRelatedGraphic(relatedGraphic), relatedGraphic.once("animate-bind", (a => {
227
233
  text.setAttributes(from);
228
- const listener = this._afterRelatedGraphicAttributeUpdate(text, texts, index, relatedGraphic, {
229
- mode: mode,
230
- duration: duration,
231
- easing: easing,
232
- to: to,
233
- delay: delay
234
- });
234
+ const listener = this._afterRelatedGraphicAttributeUpdate(text, texts, index, relatedGraphic, to, this._animationConfig.enter);
235
235
  relatedGraphic.on("afterAttributeUpdate", listener);
236
236
  }));
237
237
  }
238
238
  } else if ("update" === state) {
239
239
  const prevLabel = prevTextMap.get(textKey);
240
240
  prevTextMap.delete(textKey), currentTextMap.set(textKey, prevLabel);
241
- const prevText = prevLabel.text;
242
- prevText.animate().to(text.attribute, duration, easing), prevLabel.labelLine && prevLabel.labelLine.animate().to((0,
241
+ const prevText = prevLabel.text, {duration: duration, easing: easing} = this._animationConfig.update;
242
+ (0, animate_1.updateAnimation)(prevText, text, this._animationConfig.update), prevLabel.labelLine && prevLabel.labelLine.animate().to((0,
243
243
  vutils_1.merge)({}, prevLabel.labelLine.attribute, {
244
244
  visible: null === (_f = null !== (_d = (null === (_b = null === (_a = text.attribute) || void 0 === _a ? void 0 : _a.line) || void 0 === _b ? void 0 : _b.visible) && (null === (_c = text.attribute) || void 0 === _c ? void 0 : _c.visible)) && void 0 !== _d ? _d : null === (_e = text.attribute) || void 0 === _e ? void 0 : _e.visible) || void 0 === _f || _f,
245
245
  points: null === (_g = text.attribute) || void 0 === _g ? void 0 : _g.points
246
- }), duration, easing), !1 !== animationConfig.increaseEffect && prevText.attribute.text !== text.attribute.text && (0,
247
- vutils_1.isValidNumber)(Number(prevText.attribute.text) * Number(text.attribute.text)) && prevText.animate().play(new vrender_core_1.IncreaseCount({
248
- text: prevText.attribute.text
249
- }, {
250
- text: text.attribute.text
251
- }, duration, easing));
246
+ }), duration, easing);
252
247
  }
253
248
  })), prevTextMap.forEach((label => {
254
249
  var _a;
255
- null === (_a = label.text) || void 0 === _a || _a.animate().to((0, animate_1.getAnimationAttributes)(label.text.attribute, "fadeOut").to, duration, easing).onEnd((() => {
250
+ null === (_a = label.text) || void 0 === _a || _a.animate().to((0, animate_1.getAnimationAttributes)(label.text.attribute, "fadeOut").to, this._animationConfig.exit.duration, this._animationConfig.exit.easing).onEnd((() => {
256
251
  this.removeChild(label.text), (null == label ? void 0 : label.labelLine) && this.removeChild(label.labelLine);
257
252
  }));
258
253
  })), this._graphicToText = currentTextMap;
@@ -281,27 +276,27 @@ class LabelBase extends base_1.AbstractComponent {
281
276
  _syncStateWithRelatedGraphic(relatedGraphic) {
282
277
  this.attribute.syncState && relatedGraphic.on("afterAttributeUpdate", this._handleRelatedGraphicSetState);
283
278
  }
284
- _afterRelatedGraphicAttributeUpdate(text, texts, index, relatedGraphic, {mode: mode, duration: duration, easing: easing, to: to, delay: delay}) {
279
+ _afterRelatedGraphicAttributeUpdate(text, texts, index, relatedGraphic, to, {mode: mode, duration: duration, easing: easing, delay: delay}) {
285
280
  const listener = event => {
286
281
  var _a, _b;
287
282
  const {detail: detail} = event;
288
283
  if (!detail) return {};
289
284
  if (!(detail && detail.type === vrender_core_1.AttributeUpdateType.ANIMATE_UPDATE && detail.animationState && "wait" !== (null === (_a = detail.animationState.step) || void 0 === _a ? void 0 : _a.type))) return {};
290
285
  if (detail.type === vrender_core_1.AttributeUpdateType.ANIMATE_END) return void text.setAttributes(to);
291
- const onEnd = () => {
286
+ const onStart = () => {
292
287
  relatedGraphic && (relatedGraphic.onAnimateBind = void 0, relatedGraphic.removeEventListener("afterAttributeUpdate", listener));
293
288
  };
294
289
  switch (mode) {
295
290
  case "after":
296
291
  detail.animationState.end && text.animate({
297
- onEnd: onEnd
292
+ onStart: onStart
298
293
  }).wait(delay).to(to, duration, easing);
299
294
  break;
300
295
 
301
296
  case "after-all":
302
297
  index === texts.length - 1 && detail.animationState.end && texts.forEach((t => {
303
298
  t.animate({
304
- onEnd: onEnd
299
+ onStart: onStart
305
300
  }).wait(delay).to(to, duration, easing);
306
301
  }));
307
302
  break;
@@ -309,11 +304,11 @@ class LabelBase extends base_1.AbstractComponent {
309
304
  default:
310
305
  if (this._isCollectionBase) {
311
306
  const point = this._idToPoint.get(text.attribute.id);
312
- !point || text.animates && text.animates.has("label-animate") || !this._baseMarks[0].containsPoint(point.x, point.y, vrender_core_1.IContainPointMode.LOCAL, null === (_b = this.stage) || void 0 === _b ? void 0 : _b.pickerService) || text.animate({
313
- onEnd: onEnd
307
+ !point || text.animates && text.animates.has("label-animate") || !relatedGraphic.containsPoint(point.x, point.y, vrender_core_1.IContainPointMode.LOCAL, null === (_b = this.stage) || void 0 === _b ? void 0 : _b.pickerService) || text.animate({
308
+ onStart: onStart
314
309
  }).wait(delay).to(to, duration, easing);
315
310
  } else detail.animationState.isFirstFrameOfStep && text.animate({
316
- onEnd: onEnd
311
+ onStart: onStart
317
312
  }).wait(delay).to(to, duration, easing);
318
313
  }
319
314
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/label/base.ts"],"names":[],"mappings":"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","file":"base.js","sourcesContent":["/**\n * @description Label 基类\n */\nimport type {\n IGroup,\n Text,\n IGraphic,\n IText,\n FederatedPointerEvent,\n IColor,\n ILine,\n IArea\n} from '@visactor/vrender-core';\nimport { createText, IncreaseCount, AttributeUpdateType, IContainPointMode } from '@visactor/vrender-core';\nimport type { IAABBBounds, IBoundsLike, IPointLike } from '@visactor/vutils';\nimport {\n isFunction,\n isValidNumber,\n isEmpty,\n isValid,\n isString,\n merge,\n isRectIntersect,\n isNil,\n isArray\n} from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { PointLocationCfg } from '../core/type';\nimport { labelSmartInvert, contrastAccessibilityChecker, smartInvertStrategy } from '../util/label-smartInvert';\nimport { getMarksByName, getNoneGroupMarksByName, traverseGroup } from '../util';\nimport { StateValue } from '../constant';\nimport type { Bitmap } from './overlap';\nimport { bitmapTool, boundToRange, canPlace, clampText, place } from './overlap';\nimport type { BaseLabelAttrs, OverlapAttrs, ILabelAnimation, ArcLabelAttrs, LabelItem, SmartInvertAttrs } from './type';\nimport { DefaultLabelAnimation, getAnimationAttributes } from './animate/animate';\nimport { getPointsOfLineArea } from './util';\nimport type { ComponentOptions } from '../interface';\n\nexport class LabelBase<T extends BaseLabelAttrs> extends AbstractComponent<T> {\n name = 'label';\n\n protected _baseMarks?: IGraphic[];\n\n protected _isCollectionBase: boolean;\n\n protected _bitmap?: Bitmap;\n\n static defaultAttributes: Partial<BaseLabelAttrs> = {\n textStyle: {\n fontSize: 12,\n // FIXME: we need a default color. Yet in current logic, textStyle will override fill from baseMark.\n // This need a new config option like `colorFull`\n // fill: '#000',\n textAlign: 'center',\n textBaseline: 'middle',\n boundsPadding: [-1, 0, -1, 0] // to ignore the textBound buf\n },\n offset: 0,\n pickable: false\n };\n\n setBitmap(bitmap: Bitmap) {\n this._bitmap = bitmap;\n }\n\n protected _bmpTool?: ReturnType<typeof bitmapTool>;\n setBitmapTool(bmpTool: ReturnType<typeof bitmapTool>) {\n this._bmpTool = bmpTool;\n }\n\n protected _graphicToText: Map<IGraphic, { text: IText; labelLine?: ILine }>;\n\n protected _idToGraphic: Map<string, IGraphic>;\n\n protected _idToPoint: Map<string, IPointLike>;\n\n onAfterLabelOverlap?: (bitmap: Bitmap) => void;\n\n private _lastHover: IGraphic;\n private _lastSelect: IGraphic;\n\n private _enableAnimation: boolean;\n\n constructor(attributes: BaseLabelAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, LabelBase.defaultAttributes, attributes));\n }\n\n /**\n * 计算 text 的最终位置属性x, y\n * @param textBounds\n * @param graphicBounds\n * @param position\n * @param offset\n * @returns\n */\n protected labeling(\n textBounds: IBoundsLike,\n graphicBounds: IBoundsLike,\n position?: BaseLabelAttrs['position'],\n offset?: number\n ): { x: number; y: number } | undefined {\n // 基类没有指定的图元类型,需要在 data 中指定位置,故无需进行 labeling\n return;\n }\n\n protected _labelLine(text: IText): ILine | undefined {\n // 基类没有指定的图元类型,需要在 data 中指定位置,故无需进行 labeling\n return;\n }\n\n protected render() {\n this._prepare();\n\n if (isNil(this._idToGraphic) || (this._isCollectionBase && isNil(this._idToPoint))) {\n return;\n }\n\n const { overlap, smartInvert, dataFilter, customLayoutFunc, customOverlapFunc } = this.attribute;\n let data = this.attribute.data;\n\n if (isFunction(dataFilter)) {\n data = dataFilter(data);\n }\n\n let labels: IText[];\n\n if (isFunction(customLayoutFunc)) {\n labels = customLayoutFunc(\n data,\n this.getRelatedGrphic,\n this._isCollectionBase ? (d: LabelItem) => this._idToPoint.get(d.id) : null\n );\n } else {\n // 根据关联图元和配置的position计算标签坐标\n labels = this._layout(data);\n }\n\n if (isFunction(customOverlapFunc)) {\n labels = customOverlapFunc(\n labels as Text[],\n this.getRelatedGrphic,\n this._isCollectionBase ? (d: LabelItem) => this._idToPoint.get(d.id) : null\n );\n } else {\n // 防重叠逻辑\n if (overlap !== false) {\n labels = this._overlapping(labels);\n }\n }\n\n if (smartInvert !== false) {\n this._smartInvert(labels);\n }\n\n this._renderLabels(labels);\n }\n\n private _bindEvent(target: IGraphic) {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n if (!target) {\n return;\n }\n\n const { hover, select } = this.attribute;\n\n if (hover) {\n target.addEventListener('pointermove', this._onHover as EventListenerOrEventListenerObject);\n target.addEventListener('pointerout', this._onUnHover as EventListenerOrEventListenerObject);\n }\n\n if (select) {\n target.addEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _setStatesOfText(target: IGraphic) {\n if (!target) {\n return;\n }\n const state = this.attribute.state;\n\n if (!state || isEmpty(state)) {\n return;\n }\n\n target.states = state;\n }\n\n private _setStatesOfLabelLine(target: IGraphic) {\n if (!target) {\n return;\n }\n const state = this.attribute.labelLineState;\n\n if (!state || isEmpty(state)) {\n return;\n }\n\n target.states = state;\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGraphic;\n if (target !== this._lastHover && !isEmpty(target.states)) {\n target.addState(StateValue.hover, true);\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (node !== target && !isEmpty(node.states)) {\n node.addState(StateValue.hoverReverse, true);\n }\n });\n this._lastHover = target;\n }\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n if (this._lastHover) {\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (!isEmpty(node.states)) {\n node.removeState(StateValue.hoverReverse);\n node.removeState(StateValue.hover);\n }\n });\n this._lastHover = null;\n }\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGraphic;\n if (this._lastSelect === target && target.hasState('selected')) {\n // 取消选中\n this._lastSelect = null;\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (!isEmpty(node.states)) {\n node.removeState(StateValue.selectedReverse);\n node.removeState(StateValue.selected);\n }\n });\n return;\n }\n\n if (!isEmpty(target.states)) {\n target.addState(StateValue.selected, true);\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (node !== target && !isEmpty(node.states)) {\n node.addState(StateValue.selectedReverse, true);\n }\n });\n this._lastSelect = target;\n }\n };\n\n protected _createLabelText(attributes: LabelItem) {\n const text = createText(attributes);\n this._bindEvent(text);\n this._setStatesOfText(text);\n return text;\n }\n\n private _prepare() {\n const currentBaseMarks: IGraphic[] = [];\n let baseMarks;\n if (isFunction(this.attribute.getBaseMarks)) {\n baseMarks = this.attribute.getBaseMarks();\n } else {\n baseMarks = getMarksByName(this.getRootNode() as IGroup, this.attribute.baseMarkGroupName);\n }\n\n baseMarks.forEach(mark => {\n if ((mark as any).releaseStatus !== 'willRelease') {\n currentBaseMarks.push(mark);\n }\n });\n\n this._idToGraphic?.clear();\n this._idToPoint?.clear();\n this._baseMarks = currentBaseMarks;\n this._isCollectionBase = currentBaseMarks?.[0]?.type === 'line' || currentBaseMarks?.[0]?.type === 'area';\n\n if (!currentBaseMarks || currentBaseMarks.length === 0) {\n return;\n }\n\n const { data } = this.attribute;\n\n if (!data || data.length === 0) {\n return;\n }\n if (!this._idToGraphic) {\n this._idToGraphic = new Map();\n }\n\n // generate id mapping before data filter\n if (this._isCollectionBase) {\n if (!this._idToPoint) {\n this._idToPoint = new Map();\n }\n let cur = 0;\n for (let i = 0; i < currentBaseMarks.length; i++) {\n const baseMark = currentBaseMarks[i];\n const points = getPointsOfLineArea(baseMark as ILine | IArea);\n\n if (points?.length) {\n for (let j = 0; j < points.length; j++) {\n const textData = data[cur];\n if (textData && points[j]) {\n if (!isValid(textData.id)) {\n textData.id = `vrender-component-${this.name}-${cur}`;\n }\n this._idToPoint.set(textData.id, points[j]);\n this._idToGraphic.set(textData.id, baseMark);\n }\n\n cur++;\n }\n }\n }\n } else {\n for (let i = 0; i < currentBaseMarks.length; i++) {\n const textData = data[i];\n const baseMark = currentBaseMarks[i] as IGraphic;\n if (textData && baseMark) {\n if (!isValid(textData.id)) {\n textData.id = `vrender-component-${this.name}-${i}`;\n }\n this._idToGraphic.set(textData.id, baseMark);\n }\n }\n }\n }\n\n protected getRelatedGrphic(item: LabelItem) {\n return this._idToGraphic.get(item.id);\n }\n\n protected _layout(data: LabelItem[] = []): IText[] {\n const { textStyle = {}, position, offset } = this.attribute;\n const labels = [];\n\n for (let i = 0; i < data.length; i++) {\n const textData = data[i];\n const baseMark = this.getRelatedGrphic(textData);\n\n const labelAttribute = {\n fill: this._isCollectionBase\n ? isArray(baseMark.attribute.stroke)\n ? baseMark.attribute.stroke.find(entry => !!entry && entry !== true)\n : baseMark.attribute.stroke\n : baseMark.attribute.fill,\n ...textStyle,\n ...textData\n };\n const text = this._createLabelText(labelAttribute);\n const textBounds = this.getGraphicBounds(text);\n const graphicBounds = this._isCollectionBase\n ? this.getGraphicBounds(null, this._idToPoint.get(textData.id))\n : this.getGraphicBounds(baseMark, { x: textData.x as number, y: textData.y as number });\n\n const textLocation = this.labeling(\n textBounds,\n graphicBounds,\n isFunction(position) ? position(textData) : position,\n offset\n );\n\n if (textLocation) {\n labelAttribute.x = textLocation.x;\n labelAttribute.y = textLocation.y;\n text.setAttributes(textLocation);\n }\n\n labels.push(text);\n }\n\n return labels;\n }\n\n protected _overlapping(labels: IText[]) {\n if (labels.length === 0) {\n return [];\n }\n const option = this.attribute.overlap as OverlapAttrs;\n\n const result: IText[] = [];\n const baseMarkGroup = this.getBaseMarkGroup();\n\n const size = option.size ?? {\n width: baseMarkGroup?.AABBBounds.width() ?? 0,\n height: baseMarkGroup?.AABBBounds.height() ?? 0\n };\n\n if (size.width === 0 || size.height === 0) {\n return labels;\n }\n\n const {\n avoidBaseMark,\n strategy = [],\n hideOnHit = true,\n clampForce = true,\n avoidMarks = [],\n overlapPadding\n } = option;\n const bmpTool = this._bmpTool || bitmapTool(size.width, size.height);\n const bitmap = this._bitmap || bmpTool.bitmap();\n const checkBounds = strategy.some(s => s.type === 'bound');\n\n // 躲避关联的基础图元\n if (avoidBaseMark) {\n this._baseMarks?.forEach(mark => {\n mark.AABBBounds && bitmap.setRange(boundToRange(bmpTool, mark.AABBBounds, true));\n });\n }\n\n // 躲避指定图元\n if (avoidMarks.length > 0) {\n avoidMarks.forEach(avoid => {\n if (isString(avoid)) {\n getNoneGroupMarksByName(this.getRootNode() as IGroup, avoid).forEach(avoidMark => {\n avoidMark.AABBBounds && bitmap.setRange(boundToRange(bmpTool, avoidMark.AABBBounds, true));\n });\n } else if (avoid.AABBBounds) {\n bitmap.setRange(boundToRange(bmpTool, avoid.AABBBounds, true));\n }\n });\n }\n\n for (let i = 0; i < labels.length; i++) {\n if (labels[i].visible === false) {\n continue;\n }\n\n const text = labels[i] as IText;\n const baseMark = this.getRelatedGrphic(text.attribute);\n text.update();\n if (!isRectIntersect(baseMark.AABBBounds, { x1: 0, x2: bmpTool.width, y1: 0, y2: bmpTool.height }, true)) {\n continue;\n }\n\n // 默认位置可以放置\n if (canPlace(bmpTool, bitmap, text.AABBBounds, clampForce, overlapPadding)) {\n // 如果配置了限制在图形内部,需要提前判断;\n if (!checkBounds) {\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\n continue;\n }\n\n if (checkBounds && baseMark?.AABBBounds && this._canPlaceInside(text.AABBBounds, baseMark?.AABBBounds)) {\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\n continue;\n }\n }\n\n let hasPlace: ReturnType<typeof place> = false;\n // 发生碰撞,根据策略寻找可放置的位置\n for (let j = 0; j < strategy.length; j++) {\n hasPlace = place(\n bmpTool,\n bitmap,\n strategy[j],\n <BaseLabelAttrs>this.attribute,\n text as Text,\n this._isCollectionBase\n ? this.getGraphicBounds(null, this._idToPoint.get((labels[i].attribute as any).id))\n : this.getGraphicBounds(baseMark, labels[i].attribute),\n this.labeling\n );\n if (hasPlace !== false) {\n text.setAttributes({ x: hasPlace.x, y: hasPlace.y });\n result.push(text);\n break;\n }\n }\n\n // 尝试向内挤压\n if (!hasPlace && clampForce) {\n const { dx = 0, dy = 0 } = clampText(text, bmpTool.width, bmpTool.height);\n if (\n !(dx === 0 && dy === 0) &&\n canPlace(\n bmpTool,\n bitmap,\n {\n x1: text.AABBBounds.x1 + dx,\n x2: text.AABBBounds.x2 + dx,\n y1: text.AABBBounds.y1 + dy,\n y2: text.AABBBounds.y2 + dy\n }\n // 向内 clamp 只处理超出的位移量,不叠加 overlapPadding\n )\n ) {\n text.setAttributes({ x: text.attribute.x + dx, y: text.attribute.y + dy });\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\n continue;\n }\n }\n\n !hasPlace && !hideOnHit && result.push(text);\n }\n\n if (isFunction(this.onAfterLabelOverlap)) {\n this.onAfterLabelOverlap(bitmap);\n }\n\n return result;\n }\n\n protected getBaseMarkGroup() {\n const { baseMarkGroupName } = this.attribute as BaseLabelAttrs;\n if (!baseMarkGroupName) {\n return;\n }\n return (this.getRootNode() as IGroup).find(node => node.name === baseMarkGroupName, true) as IGroup;\n }\n\n protected getGraphicBounds(graphic?: IGraphic, point: Partial<PointLocationCfg> = {}): IBoundsLike {\n // if (graphic && !isEmpty((graphic as any).finalAttrs)) {\n // const g = graphic.clone();\n // g.onBeforeAttributeUpdate = graphic.onBeforeAttributeUpdate;\n // g.setAttributes((graphic as any).finalAttrs);\n // g.update();\n // return g.AABBBounds;\n // }\n\n return (\n graphic?.AABBBounds ||\n ({\n x1: point.x,\n x2: point.x,\n y1: point.y,\n y2: point.y\n } as IBoundsLike)\n );\n }\n\n protected _renderLabels(labels: IText[]) {\n const disableAnimation = this._enableAnimation === false || this.attribute.animation === false;\n\n if (disableAnimation) {\n this._renderWithOutAnimation(labels);\n } else {\n this._renderWithAnimation(labels);\n }\n }\n\n protected _renderWithAnimation(labels: IText[]) {\n const animationConfig = (this.attribute.animation ?? {}) as ILabelAnimation;\n\n const mode = animationConfig.mode ?? DefaultLabelAnimation.mode;\n const duration = animationConfig.duration ?? DefaultLabelAnimation.duration;\n const easing = animationConfig.easing ?? DefaultLabelAnimation.easing;\n const delay = animationConfig.delay ?? 0;\n\n const currentTextMap: Map<any, { text: IText; labelLine?: ILine }> = new Map();\n const prevTextMap: Map<any, { text: IText; labelLine?: ILine }> = this._graphicToText || new Map();\n const texts = [] as IText[];\n\n labels.forEach((text, index) => {\n const labelLine: ILine = this._labelLine(text);\n const relatedGraphic = this.getRelatedGrphic(text.attribute);\n const textId = (text.attribute as LabelItem).id;\n const textKey = this._isCollectionBase ? textId : relatedGraphic;\n const state = prevTextMap?.get(textKey) ? 'update' : 'enter';\n\n if (state === 'enter') {\n texts.push(text);\n currentTextMap.set(textKey, labelLine ? { text, labelLine } : { text });\n if (relatedGraphic) {\n const { from, to } = getAnimationAttributes(text.attribute, 'fadeIn');\n this.add(text);\n\n if (labelLine) {\n this._setStatesOfLabelLine(labelLine);\n this.add(labelLine);\n }\n\n this._syncStateWithRelatedGraphic(relatedGraphic);\n relatedGraphic.once('animate-bind', a => {\n text.setAttributes(from);\n const listener = this._afterRelatedGraphicAttributeUpdate(text, texts, index, relatedGraphic, {\n mode,\n duration,\n easing,\n to,\n delay\n });\n relatedGraphic.on('afterAttributeUpdate', listener);\n });\n }\n } else if (state === 'update') {\n const prevLabel = prevTextMap.get(textKey);\n prevTextMap.delete(textKey);\n currentTextMap.set(textKey, prevLabel);\n const prevText = prevLabel.text;\n prevText.animate().to(text.attribute, duration, easing);\n if (prevLabel.labelLine) {\n prevLabel.labelLine.animate().to(\n merge({}, prevLabel.labelLine.attribute, {\n visible:\n ((text.attribute as ArcLabelAttrs)?.line?.visible && text.attribute?.visible) ??\n text.attribute?.visible ??\n true,\n points: (text.attribute as ArcLabelAttrs)?.points\n }),\n duration,\n easing\n );\n }\n if (\n animationConfig.increaseEffect !== false &&\n prevText.attribute.text !== text.attribute.text &&\n isValidNumber(Number(prevText.attribute.text) * Number(text.attribute.text))\n ) {\n prevText\n .animate()\n .play(\n new IncreaseCount(\n { text: prevText.attribute.text as string },\n { text: text.attribute.text as string },\n duration,\n easing\n )\n );\n }\n }\n });\n prevTextMap.forEach(label => {\n label.text\n ?.animate()\n .to(getAnimationAttributes(label.text.attribute, 'fadeOut').to, duration, easing)\n .onEnd(() => {\n this.removeChild(label.text);\n if (label?.labelLine) {\n this.removeChild(label.labelLine);\n }\n });\n });\n\n this._graphicToText = currentTextMap;\n }\n\n protected _renderWithOutAnimation(labels: IText[]) {\n const currentTextMap: Map<any, { text: IText; labelLine?: ILine }> = new Map();\n const prevTextMap: Map<any, { text: IText; labelLine?: ILine }> = this._graphicToText || new Map();\n const texts = [] as IText[];\n\n labels.forEach(text => {\n const labelLine = this._labelLine(text);\n const relatedGraphic = this.getRelatedGrphic(text.attribute);\n const state = prevTextMap?.get(relatedGraphic) ? 'update' : 'enter';\n const textKey = this._isCollectionBase ? (text.attribute as LabelItem).id : relatedGraphic;\n\n if (state === 'enter') {\n texts.push(text);\n currentTextMap.set(textKey, labelLine ? { text, labelLine } : { text });\n this.add(text);\n if (labelLine) {\n this.add(labelLine);\n }\n\n this._syncStateWithRelatedGraphic(relatedGraphic);\n } else if (state === 'update') {\n const prevLabel = prevTextMap.get(textKey);\n prevTextMap.delete(textKey);\n currentTextMap.set(textKey, prevLabel);\n prevLabel.text.setAttributes(text.attribute);\n if (prevLabel?.labelLine) {\n prevLabel.labelLine.setAttributes({ points: (text.attribute as ArcLabelAttrs)?.points });\n }\n }\n });\n\n prevTextMap.forEach(label => {\n this.removeChild(label.text);\n if (label?.labelLine) {\n this.removeChild(label.labelLine);\n }\n });\n\n this._graphicToText = currentTextMap;\n }\n\n protected _handleRelatedGraphicSetState = (e: any) => {\n if (e.detail?.type === AttributeUpdateType.STATE) {\n const currentStates = e.target?.currentStates ?? [];\n const labels = this._isCollectionBase ? [...this._graphicToText.values()] : [this._graphicToText.get(e.target)];\n\n labels.forEach(label => {\n if (label) {\n if (label.text) {\n label.text.useStates(currentStates);\n }\n\n if (label.labelLine) {\n label.labelLine.useStates(currentStates);\n }\n }\n });\n }\n };\n\n protected _syncStateWithRelatedGraphic(relatedGraphic: IGraphic) {\n if (this.attribute.syncState) {\n relatedGraphic.on('afterAttributeUpdate', this._handleRelatedGraphicSetState);\n }\n }\n\n protected _afterRelatedGraphicAttributeUpdate(\n text: IText,\n texts: IText[],\n index: number,\n relatedGraphic: IGraphic,\n { mode, duration, easing, to, delay }: ILabelAnimation & { to: any }\n ) {\n const listener = (event: any) => {\n const { detail } = event;\n if (!detail) {\n return {};\n }\n\n const isValidAnimateState =\n detail &&\n detail.type === AttributeUpdateType.ANIMATE_UPDATE &&\n detail.animationState &&\n detail.animationState.step?.type !== 'wait';\n\n if (!isValidAnimateState) {\n return {};\n }\n\n if (detail.type === AttributeUpdateType.ANIMATE_END) {\n text.setAttributes(to);\n return;\n }\n\n const onEnd = () => {\n if (relatedGraphic) {\n relatedGraphic.onAnimateBind = undefined;\n relatedGraphic.removeEventListener('afterAttributeUpdate', listener);\n }\n };\n\n switch (mode) {\n case 'after':\n // 3. 当前关联图元的动画播放结束后\n if (detail.animationState.end) {\n text.animate({ onEnd }).wait(delay).to(to, duration, easing);\n }\n break;\n case 'after-all':\n // 2. 所有完成后才开始;\n if (index === texts.length - 1) {\n if (detail.animationState.end) {\n texts.forEach(t => {\n t.animate({ onEnd }).wait(delay).to(to, duration, easing);\n });\n }\n }\n break;\n case 'same-time':\n default:\n if (this._isCollectionBase) {\n const point = this._idToPoint.get((text.attribute as LabelItem).id);\n\n if (\n point &&\n (!text.animates || !text.animates.has('label-animate')) &&\n this._baseMarks[0].containsPoint(point.x, point.y, IContainPointMode.LOCAL, this.stage?.pickerService)\n ) {\n text.animate({ onEnd }).wait(delay).to(to, duration, easing);\n }\n } else if (detail.animationState.isFirstFrameOfStep) {\n text.animate({ onEnd }).wait(delay).to(to, duration, easing);\n }\n\n break;\n }\n };\n return listener;\n }\n\n protected _smartInvert(labels: IText[]) {\n const option = (this.attribute.smartInvert || {}) as SmartInvertAttrs;\n const { textType, contrastRatiosThreshold, alternativeColors } = option;\n const fillStrategy = option.fillStrategy ?? 'invertBase';\n const strokeStrategy = option.strokeStrategy ?? 'base';\n const brightColor = option.brightColor ?? '#ffffff';\n const darkColor = option.darkColor ?? '#000000';\n const outsideEnable = option.outsideEnable ?? false;\n\n if (fillStrategy === 'null' && strokeStrategy === 'null') {\n return;\n }\n\n for (let i = 0; i < labels.length; i++) {\n const label = labels[i];\n if (!label) {\n continue;\n }\n\n const baseMark = this.getRelatedGrphic(label.attribute as LabelItem);\n\n /**\n * 增加smartInvert时fillStrategy和 strokeStrategy的四种策略:\n * series(baseMark色),\n * invertSeries(执行智能反色),\n * similarSeries(智能反色的补色),\n * null(不执行智能反色,保持fill设置的颜色)\n * */\n const backgroundColor = baseMark.attribute.fill as IColor;\n const foregroundColor = label.attribute.fill as IColor;\n const baseColor = backgroundColor;\n const invertColor = labelSmartInvert(\n foregroundColor,\n backgroundColor,\n textType,\n contrastRatiosThreshold,\n alternativeColors\n );\n const similarColor = contrastAccessibilityChecker(invertColor, brightColor) ? brightColor : darkColor;\n\n if (outsideEnable) {\n const fill = smartInvertStrategy(fillStrategy, baseColor, invertColor, similarColor);\n fill && label.setAttributes({ fill });\n\n if (label.attribute.lineWidth === 0) {\n continue;\n }\n\n const stroke = smartInvertStrategy(strokeStrategy, baseColor, invertColor, similarColor);\n stroke && label.setAttributes({ stroke });\n } else {\n const isInside = this._canPlaceInside(label.AABBBounds, baseMark?.AABBBounds);\n if (isInside) {\n const fill = smartInvertStrategy(fillStrategy, baseColor, invertColor, similarColor);\n fill && label.setAttributes({ fill });\n\n if (label.attribute.lineWidth === 0) {\n continue;\n }\n\n const stroke = smartInvertStrategy(strokeStrategy, baseColor, invertColor, similarColor);\n stroke && label.setAttributes({ stroke });\n } else {\n /** 当label无法设置stroke时,不进行反色计算(容易反色为白色与白色背景混合不可见) */\n if (label.attribute.lineWidth === 0) {\n continue;\n }\n\n /** 当label设置stroke时,保留stroke设置的颜色,根据stroke对fill做反色 */\n if (label.attribute.stroke) {\n label.setAttributes({\n fill: labelSmartInvert(\n label.attribute.fill as IColor,\n label.attribute.stroke as IColor,\n textType,\n contrastRatiosThreshold,\n alternativeColors\n )\n });\n continue;\n }\n\n /** 当label未设置stroke,且可设置stroke时,正常计算 */\n const fill = smartInvertStrategy(fillStrategy, baseColor, invertColor, similarColor);\n fill && label.setAttributes({ fill });\n\n const stroke = smartInvertStrategy(strokeStrategy, baseColor, invertColor, similarColor);\n stroke && label.setAttributes({ stroke });\n }\n }\n }\n }\n\n /**\n * 是否在图形内部\n * @param textBound\n * @param shapeBound\n * @returns\n */\n protected _canPlaceInside(textBound: IBoundsLike, shapeBound: IAABBBounds) {\n if (!textBound || !shapeBound) {\n return false;\n }\n return shapeBound.encloses(textBound);\n }\n\n setLocation(point: PointLocationCfg) {\n this.translateTo(point.x, point.y);\n }\n\n disableAnimation() {\n this._enableAnimation = false;\n }\n\n enableAnimation() {\n this._enableAnimation = true;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/label/base.ts"],"names":[],"mappings":"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","file":"base.js","sourcesContent":["/**\n * @description Label 基类\n */\nimport type {\n IGroup,\n Text,\n IGraphic,\n IText,\n FederatedPointerEvent,\n IColor,\n ILine,\n IArea\n} from '@visactor/vrender-core';\nimport { createText, AttributeUpdateType, IContainPointMode } from '@visactor/vrender-core';\nimport type { IAABBBounds, IBoundsLike, IPointLike } from '@visactor/vutils';\nimport { isFunction, isEmpty, isValid, isString, merge, isRectIntersect, isNil, isArray } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { PointLocationCfg } from '../core/type';\nimport { labelSmartInvert, contrastAccessibilityChecker, smartInvertStrategy } from '../util/label-smartInvert';\nimport { getMarksByName, getNoneGroupMarksByName, traverseGroup } from '../util';\nimport { StateValue } from '../constant';\nimport type { Bitmap } from './overlap';\nimport { bitmapTool, boundToRange, canPlace, clampText, place } from './overlap';\nimport type {\n BaseLabelAttrs,\n OverlapAttrs,\n ILabelAnimation,\n ArcLabelAttrs,\n LabelItem,\n SmartInvertAttrs,\n ILabelEnterAnimation,\n ILabelExitAnimation,\n ILabelUpdateAnimation\n} from './type';\nimport { DefaultLabelAnimation, getAnimationAttributes, updateAnimation } from './animate/animate';\nimport { getPointsOfLineArea } from './util';\nimport type { ComponentOptions } from '../interface';\n\nexport class LabelBase<T extends BaseLabelAttrs> extends AbstractComponent<T> {\n name = 'label';\n\n protected _baseMarks?: IGraphic[];\n\n protected _isCollectionBase: boolean;\n\n protected _bitmap?: Bitmap;\n\n protected _animationConfig?: {\n enter: ILabelEnterAnimation;\n exit: ILabelExitAnimation;\n update: ILabelUpdateAnimation;\n };\n\n static defaultAttributes: Partial<BaseLabelAttrs> = {\n textStyle: {\n fontSize: 12,\n // FIXME: we need a default color. Yet in current logic, textStyle will override fill from baseMark.\n // This need a new config option like `colorFull`\n // fill: '#000',\n textAlign: 'center',\n textBaseline: 'middle',\n boundsPadding: [-1, 0, -1, 0] // to ignore the textBound buf\n },\n offset: 0,\n pickable: false\n };\n\n setBitmap(bitmap: Bitmap) {\n this._bitmap = bitmap;\n }\n\n protected _bmpTool?: ReturnType<typeof bitmapTool>;\n setBitmapTool(bmpTool: ReturnType<typeof bitmapTool>) {\n this._bmpTool = bmpTool;\n }\n\n protected _graphicToText: Map<IGraphic, { text: IText; labelLine?: ILine }>;\n\n protected _idToGraphic: Map<string, IGraphic>;\n\n protected _idToPoint: Map<string, IPointLike>;\n\n onAfterLabelOverlap?: (bitmap: Bitmap) => void;\n\n private _lastHover: IGraphic;\n private _lastSelect: IGraphic;\n\n private _enableAnimation: boolean;\n\n constructor(attributes: BaseLabelAttrs, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, LabelBase.defaultAttributes, attributes));\n }\n\n /**\n * 计算 text 的最终位置属性x, y\n * @param textBounds\n * @param graphicBounds\n * @param position\n * @param offset\n * @returns\n */\n protected labeling(\n textBounds: IBoundsLike,\n graphicBounds: IBoundsLike,\n position?: BaseLabelAttrs['position'],\n offset?: number\n ): { x: number; y: number } | undefined {\n // 基类没有指定的图元类型,需要在 data 中指定位置,故无需进行 labeling\n return;\n }\n\n protected _labelLine(text: IText): ILine | undefined {\n // 基类没有指定的图元类型,需要在 data 中指定位置,故无需进行 labeling\n return;\n }\n\n protected render() {\n this._prepare();\n\n if (isNil(this._idToGraphic) || (this._isCollectionBase && isNil(this._idToPoint))) {\n return;\n }\n\n const { overlap, smartInvert, dataFilter, customLayoutFunc, customOverlapFunc } = this.attribute;\n let data = this.attribute.data;\n\n if (isFunction(dataFilter)) {\n data = dataFilter(data);\n }\n\n let labels: IText[];\n\n if (isFunction(customLayoutFunc)) {\n labels = customLayoutFunc(\n data,\n this.getRelatedGrphic,\n this._isCollectionBase ? (d: LabelItem) => this._idToPoint.get(d.id) : null\n );\n } else {\n // 根据关联图元和配置的position计算标签坐标\n labels = this._layout(data);\n }\n\n if (isFunction(customOverlapFunc)) {\n labels = customOverlapFunc(\n labels as Text[],\n this.getRelatedGrphic,\n this._isCollectionBase ? (d: LabelItem) => this._idToPoint.get(d.id) : null\n );\n } else {\n // 防重叠逻辑\n if (overlap !== false) {\n labels = this._overlapping(labels);\n }\n }\n\n if (smartInvert !== false) {\n this._smartInvert(labels);\n }\n\n this._renderLabels(labels);\n }\n\n private _bindEvent(target: IGraphic) {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n if (!target) {\n return;\n }\n\n const { hover, select } = this.attribute;\n\n if (hover) {\n target.addEventListener('pointermove', this._onHover as EventListenerOrEventListenerObject);\n target.addEventListener('pointerout', this._onUnHover as EventListenerOrEventListenerObject);\n }\n\n if (select) {\n target.addEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _setStatesOfText(target: IGraphic) {\n if (!target) {\n return;\n }\n const state = this.attribute.state;\n\n if (!state || isEmpty(state)) {\n return;\n }\n\n target.states = state;\n }\n\n private _setStatesOfLabelLine(target: IGraphic) {\n if (!target) {\n return;\n }\n const state = this.attribute.labelLineState;\n\n if (!state || isEmpty(state)) {\n return;\n }\n\n target.states = state;\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGraphic;\n if (target !== this._lastHover && !isEmpty(target.states)) {\n target.addState(StateValue.hover, true);\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (node !== target && !isEmpty(node.states)) {\n node.addState(StateValue.hoverReverse, true);\n }\n });\n this._lastHover = target;\n }\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n if (this._lastHover) {\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (!isEmpty(node.states)) {\n node.removeState(StateValue.hoverReverse);\n node.removeState(StateValue.hover);\n }\n });\n this._lastHover = null;\n }\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGraphic;\n if (this._lastSelect === target && target.hasState('selected')) {\n // 取消选中\n this._lastSelect = null;\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (!isEmpty(node.states)) {\n node.removeState(StateValue.selectedReverse);\n node.removeState(StateValue.selected);\n }\n });\n return;\n }\n\n if (!isEmpty(target.states)) {\n target.addState(StateValue.selected, true);\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (node !== target && !isEmpty(node.states)) {\n node.addState(StateValue.selectedReverse, true);\n }\n });\n this._lastSelect = target;\n }\n };\n\n protected _createLabelText(attributes: LabelItem) {\n const text = createText(attributes);\n this._bindEvent(text);\n this._setStatesOfText(text);\n return text;\n }\n\n private _prepare() {\n const currentBaseMarks: IGraphic[] = [];\n let baseMarks;\n if (isFunction(this.attribute.getBaseMarks)) {\n baseMarks = this.attribute.getBaseMarks();\n } else {\n baseMarks = getMarksByName(this.getRootNode() as IGroup, this.attribute.baseMarkGroupName);\n }\n\n baseMarks.forEach(mark => {\n if ((mark as any).releaseStatus !== 'willRelease') {\n currentBaseMarks.push(mark);\n }\n });\n\n this._idToGraphic?.clear();\n this._idToPoint?.clear();\n this._baseMarks = currentBaseMarks;\n this._isCollectionBase = this.attribute.type === 'line-data';\n\n if (!currentBaseMarks || currentBaseMarks.length === 0) {\n return;\n }\n\n const { data } = this.attribute;\n\n if (!data || data.length === 0) {\n return;\n }\n if (!this._idToGraphic) {\n this._idToGraphic = new Map();\n }\n\n // generate id mapping before data filter\n if (this._isCollectionBase) {\n if (!this._idToPoint) {\n this._idToPoint = new Map();\n }\n let cur = 0;\n for (let i = 0; i < currentBaseMarks.length; i++) {\n const baseMark = currentBaseMarks[i];\n const points = getPointsOfLineArea(baseMark as ILine | IArea);\n\n if (points?.length) {\n for (let j = 0; j < points.length; j++) {\n const textData = data[cur];\n if (textData && points[j]) {\n if (!isValid(textData.id)) {\n textData.id = `vrender-component-${this.name}-${cur}`;\n }\n this._idToPoint.set(textData.id, points[j]);\n this._idToGraphic.set(textData.id, baseMark);\n }\n\n cur++;\n }\n }\n }\n } else {\n for (let i = 0; i < currentBaseMarks.length; i++) {\n const textData = data[i];\n const baseMark = currentBaseMarks[i] as IGraphic;\n if (textData && baseMark) {\n if (!isValid(textData.id)) {\n textData.id = `vrender-component-${this.name}-${i}`;\n }\n this._idToGraphic.set(textData.id, baseMark);\n }\n }\n }\n\n if (this.attribute.animation !== false) {\n this._animationConfig = {\n enter: merge({}, DefaultLabelAnimation, this.attribute.animation, this.attribute.animationEnter ?? {}),\n exit: merge({}, DefaultLabelAnimation, this.attribute.animation, this.attribute.animationExit ?? {}),\n update: isArray(this.attribute.animationUpdate)\n ? this.attribute.animationUpdate\n : merge({}, DefaultLabelAnimation, this.attribute.animation, this.attribute.animationUpdate ?? {})\n };\n }\n }\n\n protected getRelatedGrphic(item: LabelItem) {\n return this._idToGraphic.get(item.id);\n }\n\n protected _layout(data: LabelItem[] = []): IText[] {\n const { textStyle = {}, position, offset } = this.attribute;\n const labels = [];\n\n for (let i = 0; i < data.length; i++) {\n const textData = data[i];\n const baseMark = this.getRelatedGrphic(textData);\n\n const labelAttribute = {\n fill: this._isCollectionBase\n ? isArray(baseMark.attribute.stroke)\n ? baseMark.attribute.stroke.find(entry => !!entry && entry !== true)\n : baseMark.attribute.stroke\n : baseMark.attribute.fill,\n ...textStyle,\n ...textData\n };\n const text = this._createLabelText(labelAttribute);\n const textBounds = this.getGraphicBounds(text);\n const graphicBounds = this._isCollectionBase\n ? this.getGraphicBounds(null, this._idToPoint.get(textData.id))\n : this.getGraphicBounds(baseMark, { x: textData.x as number, y: textData.y as number });\n\n const textLocation = this.labeling(\n textBounds,\n graphicBounds,\n isFunction(position) ? position(textData) : position,\n offset\n );\n\n if (textLocation) {\n labelAttribute.x = textLocation.x;\n labelAttribute.y = textLocation.y;\n text.setAttributes(textLocation);\n }\n\n labels.push(text);\n }\n\n return labels;\n }\n\n protected _overlapping(labels: IText[]) {\n if (labels.length === 0) {\n return [];\n }\n const option = this.attribute.overlap as OverlapAttrs;\n\n const result: IText[] = [];\n const baseMarkGroup = this.getBaseMarkGroup();\n\n const size = option.size ?? {\n width: baseMarkGroup?.AABBBounds.width() ?? 0,\n height: baseMarkGroup?.AABBBounds.height() ?? 0\n };\n\n if (size.width === 0 || size.height === 0) {\n return labels;\n }\n\n const {\n avoidBaseMark,\n strategy = [],\n hideOnHit = true,\n clampForce = true,\n avoidMarks = [],\n overlapPadding\n } = option;\n const bmpTool = this._bmpTool || bitmapTool(size.width, size.height);\n const bitmap = this._bitmap || bmpTool.bitmap();\n const checkBounds = strategy.some(s => s.type === 'bound');\n\n // 躲避关联的基础图元\n if (avoidBaseMark) {\n this._baseMarks?.forEach(mark => {\n mark.AABBBounds && bitmap.setRange(boundToRange(bmpTool, mark.AABBBounds, true));\n });\n }\n\n // 躲避指定图元\n if (avoidMarks.length > 0) {\n avoidMarks.forEach(avoid => {\n if (isString(avoid)) {\n getNoneGroupMarksByName(this.getRootNode() as IGroup, avoid).forEach(avoidMark => {\n avoidMark.AABBBounds && bitmap.setRange(boundToRange(bmpTool, avoidMark.AABBBounds, true));\n });\n } else if (avoid.AABBBounds) {\n bitmap.setRange(boundToRange(bmpTool, avoid.AABBBounds, true));\n }\n });\n }\n\n for (let i = 0; i < labels.length; i++) {\n if (labels[i].visible === false) {\n continue;\n }\n\n const text = labels[i] as IText;\n const baseMark = this.getRelatedGrphic(text.attribute);\n text.update();\n if (!isRectIntersect(baseMark.AABBBounds, { x1: 0, x2: bmpTool.width, y1: 0, y2: bmpTool.height }, true)) {\n continue;\n }\n\n // 默认位置可以放置\n if (canPlace(bmpTool, bitmap, text.AABBBounds, clampForce, overlapPadding)) {\n // 如果配置了限制在图形内部,需要提前判断;\n if (!checkBounds) {\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\n continue;\n }\n\n if (checkBounds && baseMark?.AABBBounds && this._canPlaceInside(text.AABBBounds, baseMark?.AABBBounds)) {\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\n continue;\n }\n }\n\n let hasPlace: ReturnType<typeof place> = false;\n // 发生碰撞,根据策略寻找可放置的位置\n for (let j = 0; j < strategy.length; j++) {\n hasPlace = place(\n bmpTool,\n bitmap,\n strategy[j],\n <BaseLabelAttrs>this.attribute,\n text as Text,\n this._isCollectionBase\n ? this.getGraphicBounds(null, this._idToPoint.get((labels[i].attribute as any).id))\n : this.getGraphicBounds(baseMark, labels[i].attribute),\n this.labeling\n );\n if (hasPlace !== false) {\n text.setAttributes({ x: hasPlace.x, y: hasPlace.y });\n result.push(text);\n break;\n }\n }\n\n // 尝试向内挤压\n if (!hasPlace && clampForce) {\n const { dx = 0, dy = 0 } = clampText(text, bmpTool.width, bmpTool.height);\n if (\n !(dx === 0 && dy === 0) &&\n canPlace(\n bmpTool,\n bitmap,\n {\n x1: text.AABBBounds.x1 + dx,\n x2: text.AABBBounds.x2 + dx,\n y1: text.AABBBounds.y1 + dy,\n y2: text.AABBBounds.y2 + dy\n }\n // 向内 clamp 只处理超出的位移量,不叠加 overlapPadding\n )\n ) {\n text.setAttributes({ x: text.attribute.x + dx, y: text.attribute.y + dy });\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\n continue;\n }\n }\n\n !hasPlace && !hideOnHit && result.push(text);\n }\n\n if (isFunction(this.onAfterLabelOverlap)) {\n this.onAfterLabelOverlap(bitmap);\n }\n\n return result;\n }\n\n protected getBaseMarkGroup() {\n const { baseMarkGroupName } = this.attribute as BaseLabelAttrs;\n if (!baseMarkGroupName) {\n return;\n }\n return (this.getRootNode() as IGroup).find(node => node.name === baseMarkGroupName, true) as IGroup;\n }\n\n protected getGraphicBounds(graphic?: IGraphic, point: Partial<PointLocationCfg> = {}): IBoundsLike {\n // if (graphic && !isEmpty((graphic as any).finalAttrs)) {\n // const g = graphic.clone();\n // g.onBeforeAttributeUpdate = graphic.onBeforeAttributeUpdate;\n // g.setAttributes((graphic as any).finalAttrs);\n // g.update();\n // return g.AABBBounds;\n // }\n\n return (\n graphic?.AABBBounds ||\n ({\n x1: point.x,\n x2: point.x,\n y1: point.y,\n y2: point.y\n } as IBoundsLike)\n );\n }\n\n protected _renderLabels(labels: IText[]) {\n const disableAnimation = this._enableAnimation === false || this.attribute.animation === false;\n\n if (disableAnimation) {\n this._renderWithOutAnimation(labels);\n } else {\n this._renderWithAnimation(labels);\n }\n }\n\n protected _renderWithAnimation(labels: IText[]) {\n const currentTextMap: Map<any, { text: IText; labelLine?: ILine }> = new Map();\n const prevTextMap: Map<any, { text: IText; labelLine?: ILine }> = this._graphicToText || new Map();\n const texts = [] as IText[];\n\n labels.forEach((text, index) => {\n const labelLine: ILine = this._labelLine(text);\n const relatedGraphic = this.getRelatedGrphic(text.attribute);\n const textId = (text.attribute as LabelItem).id;\n const textKey = this._isCollectionBase ? textId : relatedGraphic;\n const state = prevTextMap?.get(textKey) ? 'update' : 'enter';\n\n if (state === 'enter') {\n texts.push(text);\n currentTextMap.set(textKey, labelLine ? { text, labelLine } : { text });\n if (relatedGraphic) {\n const { from, to } = getAnimationAttributes(text.attribute, 'fadeIn');\n this.add(text);\n\n if (labelLine) {\n this._setStatesOfLabelLine(labelLine);\n this.add(labelLine);\n }\n\n this._syncStateWithRelatedGraphic(relatedGraphic);\n relatedGraphic.once('animate-bind', a => {\n text.setAttributes(from);\n const listener = this._afterRelatedGraphicAttributeUpdate(\n text,\n texts,\n index,\n relatedGraphic,\n to,\n this._animationConfig.enter\n );\n relatedGraphic.on('afterAttributeUpdate', listener);\n });\n }\n } else if (state === 'update') {\n const prevLabel = prevTextMap.get(textKey);\n prevTextMap.delete(textKey);\n currentTextMap.set(textKey, prevLabel);\n const prevText = prevLabel.text;\n const { duration, easing } = this._animationConfig.update;\n updateAnimation(prevText as Text, text, this._animationConfig.update);\n if (prevLabel.labelLine) {\n prevLabel.labelLine.animate().to(\n merge({}, prevLabel.labelLine.attribute, {\n visible:\n ((text.attribute as ArcLabelAttrs)?.line?.visible && text.attribute?.visible) ??\n text.attribute?.visible ??\n true,\n points: (text.attribute as ArcLabelAttrs)?.points\n }),\n duration,\n easing\n );\n }\n }\n });\n prevTextMap.forEach(label => {\n label.text\n ?.animate()\n .to(\n getAnimationAttributes(label.text.attribute, 'fadeOut').to,\n this._animationConfig.exit.duration,\n this._animationConfig.exit.easing\n )\n .onEnd(() => {\n this.removeChild(label.text);\n if (label?.labelLine) {\n this.removeChild(label.labelLine);\n }\n });\n });\n\n this._graphicToText = currentTextMap;\n }\n\n protected _renderWithOutAnimation(labels: IText[]) {\n const currentTextMap: Map<any, { text: IText; labelLine?: ILine }> = new Map();\n const prevTextMap: Map<any, { text: IText; labelLine?: ILine }> = this._graphicToText || new Map();\n const texts = [] as IText[];\n\n labels.forEach(text => {\n const labelLine = this._labelLine(text);\n const relatedGraphic = this.getRelatedGrphic(text.attribute);\n const state = prevTextMap?.get(relatedGraphic) ? 'update' : 'enter';\n const textKey = this._isCollectionBase ? (text.attribute as LabelItem).id : relatedGraphic;\n\n if (state === 'enter') {\n texts.push(text);\n currentTextMap.set(textKey, labelLine ? { text, labelLine } : { text });\n this.add(text);\n if (labelLine) {\n this.add(labelLine);\n }\n\n this._syncStateWithRelatedGraphic(relatedGraphic);\n } else if (state === 'update') {\n const prevLabel = prevTextMap.get(textKey);\n prevTextMap.delete(textKey);\n currentTextMap.set(textKey, prevLabel);\n prevLabel.text.setAttributes(text.attribute);\n if (prevLabel?.labelLine) {\n prevLabel.labelLine.setAttributes({ points: (text.attribute as ArcLabelAttrs)?.points });\n }\n }\n });\n\n prevTextMap.forEach(label => {\n this.removeChild(label.text);\n if (label?.labelLine) {\n this.removeChild(label.labelLine);\n }\n });\n\n this._graphicToText = currentTextMap;\n }\n\n protected _handleRelatedGraphicSetState = (e: any) => {\n if (e.detail?.type === AttributeUpdateType.STATE) {\n const currentStates = e.target?.currentStates ?? [];\n const labels = this._isCollectionBase ? [...this._graphicToText.values()] : [this._graphicToText.get(e.target)];\n\n labels.forEach(label => {\n if (label) {\n if (label.text) {\n label.text.useStates(currentStates);\n }\n\n if (label.labelLine) {\n label.labelLine.useStates(currentStates);\n }\n }\n });\n }\n };\n\n protected _syncStateWithRelatedGraphic(relatedGraphic: IGraphic) {\n if (this.attribute.syncState) {\n relatedGraphic.on('afterAttributeUpdate', this._handleRelatedGraphicSetState);\n }\n }\n\n protected _afterRelatedGraphicAttributeUpdate(\n text: IText,\n texts: IText[],\n index: number,\n relatedGraphic: IGraphic,\n to: any,\n { mode, duration, easing, delay }: ILabelAnimation\n ) {\n const listener = (event: any) => {\n const { detail } = event;\n if (!detail) {\n return {};\n }\n const isValidAnimateState =\n detail &&\n detail.type === AttributeUpdateType.ANIMATE_UPDATE &&\n detail.animationState &&\n detail.animationState.step?.type !== 'wait';\n\n if (!isValidAnimateState) {\n return {};\n }\n\n if (detail.type === AttributeUpdateType.ANIMATE_END) {\n text.setAttributes(to);\n return;\n }\n\n const onStart = () => {\n if (relatedGraphic) {\n relatedGraphic.onAnimateBind = undefined;\n relatedGraphic.removeEventListener('afterAttributeUpdate', listener);\n }\n };\n\n switch (mode) {\n case 'after':\n // 3. 当前关联图元的动画播放结束后\n if (detail.animationState.end) {\n text.animate({ onStart }).wait(delay).to(to, duration, easing);\n }\n break;\n case 'after-all':\n // 2. 所有完成后才开始;\n if (index === texts.length - 1) {\n if (detail.animationState.end) {\n texts.forEach(t => {\n t.animate({ onStart }).wait(delay).to(to, duration, easing);\n });\n }\n }\n break;\n case 'same-time':\n default:\n if (this._isCollectionBase) {\n const point = this._idToPoint.get((text.attribute as LabelItem).id);\n if (\n point &&\n (!text.animates || !text.animates.has('label-animate')) &&\n relatedGraphic.containsPoint(point.x, point.y, IContainPointMode.LOCAL, this.stage?.pickerService)\n ) {\n text.animate({ onStart }).wait(delay).to(to, duration, easing);\n }\n } else if (detail.animationState.isFirstFrameOfStep) {\n text.animate({ onStart }).wait(delay).to(to, duration, easing);\n }\n\n break;\n }\n };\n return listener;\n }\n\n protected _smartInvert(labels: IText[]) {\n const option = (this.attribute.smartInvert || {}) as SmartInvertAttrs;\n const { textType, contrastRatiosThreshold, alternativeColors } = option;\n const fillStrategy = option.fillStrategy ?? 'invertBase';\n const strokeStrategy = option.strokeStrategy ?? 'base';\n const brightColor = option.brightColor ?? '#ffffff';\n const darkColor = option.darkColor ?? '#000000';\n const outsideEnable = option.outsideEnable ?? false;\n\n if (fillStrategy === 'null' && strokeStrategy === 'null') {\n return;\n }\n\n for (let i = 0; i < labels.length; i++) {\n const label = labels[i];\n if (!label) {\n continue;\n }\n\n const baseMark = this.getRelatedGrphic(label.attribute as LabelItem);\n\n /**\n * 增加smartInvert时fillStrategy和 strokeStrategy的四种策略:\n * series(baseMark色),\n * invertSeries(执行智能反色),\n * similarSeries(智能反色的补色),\n * null(不执行智能反色,保持fill设置的颜色)\n * */\n const backgroundColor = baseMark.attribute.fill as IColor;\n const foregroundColor = label.attribute.fill as IColor;\n const baseColor = backgroundColor;\n const invertColor = labelSmartInvert(\n foregroundColor,\n backgroundColor,\n textType,\n contrastRatiosThreshold,\n alternativeColors\n );\n const similarColor = contrastAccessibilityChecker(invertColor, brightColor) ? brightColor : darkColor;\n\n if (outsideEnable) {\n const fill = smartInvertStrategy(fillStrategy, baseColor, invertColor, similarColor);\n fill && label.setAttributes({ fill });\n\n if (label.attribute.lineWidth === 0) {\n continue;\n }\n\n const stroke = smartInvertStrategy(strokeStrategy, baseColor, invertColor, similarColor);\n stroke && label.setAttributes({ stroke });\n } else {\n const isInside = this._canPlaceInside(label.AABBBounds, baseMark?.AABBBounds);\n if (isInside) {\n const fill = smartInvertStrategy(fillStrategy, baseColor, invertColor, similarColor);\n fill && label.setAttributes({ fill });\n\n if (label.attribute.lineWidth === 0) {\n continue;\n }\n\n const stroke = smartInvertStrategy(strokeStrategy, baseColor, invertColor, similarColor);\n stroke && label.setAttributes({ stroke });\n } else {\n /** 当label无法设置stroke时,不进行反色计算(容易反色为白色与白色背景混合不可见) */\n if (label.attribute.lineWidth === 0) {\n continue;\n }\n\n /** 当label设置stroke时,保留stroke设置的颜色,根据stroke对fill做反色 */\n if (label.attribute.stroke) {\n label.setAttributes({\n fill: labelSmartInvert(\n label.attribute.fill as IColor,\n label.attribute.stroke as IColor,\n textType,\n contrastRatiosThreshold,\n alternativeColors\n )\n });\n continue;\n }\n\n /** 当label未设置stroke,且可设置stroke时,正常计算 */\n const fill = smartInvertStrategy(fillStrategy, baseColor, invertColor, similarColor);\n fill && label.setAttributes({ fill });\n\n const stroke = smartInvertStrategy(strokeStrategy, baseColor, invertColor, similarColor);\n stroke && label.setAttributes({ stroke });\n }\n }\n }\n }\n\n /**\n * 是否在图形内部\n * @param textBound\n * @param shapeBound\n * @returns\n */\n protected _canPlaceInside(textBound: IBoundsLike, shapeBound: IAABBBounds) {\n if (!textBound || !shapeBound) {\n return false;\n }\n return shapeBound.encloses(textBound);\n }\n\n setLocation(point: PointLocationCfg) {\n this.translateTo(point.x, point.y);\n }\n\n disableAnimation() {\n this._enableAnimation = false;\n }\n\n enableAnimation() {\n this._enableAnimation = true;\n }\n}\n"]}