@visactor/vchart 1.13.20 → 1.13.21-alpha.1

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 (76) hide show
  1. package/build/es5/index.js +1 -1
  2. package/build/index.es.js +326 -312
  3. package/build/index.js +472 -453
  4. package/build/index.min.js +1 -1
  5. package/build/tsconfig.tsbuildinfo +1 -1
  6. package/cjs/chart/base/base-chart.js +3 -0
  7. package/cjs/chart/base/base-chart.js.map +1 -1
  8. package/cjs/chart/index.d.ts +2 -2
  9. package/cjs/chart/index.js +7 -2
  10. package/cjs/chart/index.js.map +1 -1
  11. package/cjs/chart/interface/common.d.ts +2 -0
  12. package/cjs/chart/interface/common.js.map +1 -1
  13. package/cjs/core/index.d.ts +1 -1
  14. package/cjs/core/index.js +1 -1
  15. package/cjs/core/index.js.map +1 -1
  16. package/cjs/core/vchart.js +4 -2
  17. package/cjs/core/vchart.js.map +1 -1
  18. package/cjs/index.d.ts +2 -0
  19. package/cjs/index.js +2 -1
  20. package/cjs/index.js.map +1 -1
  21. package/cjs/mark/index.d.ts +3 -2
  22. package/cjs/mark/index.js +15 -1
  23. package/cjs/mark/index.js.map +1 -1
  24. package/cjs/plugin/chart/interface.d.ts +4 -0
  25. package/cjs/plugin/chart/interface.js.map +1 -1
  26. package/cjs/plugin/chart/plugin-service.d.ts +2 -0
  27. package/cjs/plugin/chart/plugin-service.js +10 -0
  28. package/cjs/plugin/chart/plugin-service.js.map +1 -1
  29. package/cjs/plugin/chart/scroll/index.d.ts +2 -0
  30. package/cjs/plugin/chart/scroll/index.js +21 -0
  31. package/cjs/plugin/chart/scroll/index.js.map +1 -0
  32. package/cjs/plugin/chart/scroll/interface.d.ts +11 -0
  33. package/cjs/plugin/chart/scroll/interface.js +6 -0
  34. package/cjs/plugin/chart/scroll/interface.js.map +1 -0
  35. package/cjs/plugin/chart/scroll/scroll.d.ts +27 -0
  36. package/cjs/plugin/chart/scroll/scroll.js +129 -0
  37. package/cjs/plugin/chart/scroll/scroll.js.map +1 -0
  38. package/cjs/series/sankey/sankey.d.ts +7 -7
  39. package/cjs/series/sankey/sankey.js +166 -163
  40. package/cjs/series/sankey/sankey.js.map +1 -1
  41. package/esm/chart/base/base-chart.js +3 -0
  42. package/esm/chart/base/base-chart.js.map +1 -1
  43. package/esm/chart/index.d.ts +2 -2
  44. package/esm/chart/index.js +2 -2
  45. package/esm/chart/index.js.map +1 -1
  46. package/esm/chart/interface/common.d.ts +2 -0
  47. package/esm/chart/interface/common.js.map +1 -1
  48. package/esm/core/index.d.ts +1 -1
  49. package/esm/core/index.js +1 -1
  50. package/esm/core/index.js.map +1 -1
  51. package/esm/core/vchart.js +4 -2
  52. package/esm/core/vchart.js.map +1 -1
  53. package/esm/index.d.ts +2 -0
  54. package/esm/index.js +4 -0
  55. package/esm/index.js.map +1 -1
  56. package/esm/mark/index.d.ts +3 -2
  57. package/esm/mark/index.js +4 -2
  58. package/esm/mark/index.js.map +1 -1
  59. package/esm/plugin/chart/interface.d.ts +4 -0
  60. package/esm/plugin/chart/interface.js.map +1 -1
  61. package/esm/plugin/chart/plugin-service.d.ts +2 -0
  62. package/esm/plugin/chart/plugin-service.js +10 -0
  63. package/esm/plugin/chart/plugin-service.js.map +1 -1
  64. package/esm/plugin/chart/scroll/index.d.ts +2 -0
  65. package/esm/plugin/chart/scroll/index.js +4 -0
  66. package/esm/plugin/chart/scroll/index.js.map +1 -0
  67. package/esm/plugin/chart/scroll/interface.d.ts +11 -0
  68. package/esm/plugin/chart/scroll/interface.js +2 -0
  69. package/esm/plugin/chart/scroll/interface.js.map +1 -0
  70. package/esm/plugin/chart/scroll/scroll.d.ts +27 -0
  71. package/esm/plugin/chart/scroll/scroll.js +127 -0
  72. package/esm/plugin/chart/scroll/scroll.js.map +1 -0
  73. package/esm/series/sankey/sankey.d.ts +7 -7
  74. package/esm/series/sankey/sankey.js +165 -162
  75. package/esm/series/sankey/sankey.js.map +1 -1
  76. package/package.json +2 -2
@@ -34,19 +34,6 @@ class SankeySeries extends cartesian_1.CartesianSeries {
34
34
  var _a, _b, _c, _d, _e, _f, _g;
35
35
  const emphasisSpec = null !== (_a = this._spec.emphasis) && void 0 !== _a ? _a : {}, highlightState = null !== (_b = emphasisSpec.highlightState) && void 0 !== _b ? _b : interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, blurState = null !== (_c = emphasisSpec.blurState) && void 0 !== _c ? _c : interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE, element = params.item;
36
36
  "adjacency" === emphasisSpec.effect ? element && element.mark === (null === (_d = this._nodeMark) || void 0 === _d ? void 0 : _d.getProduct()) ? this._handleNodeAdjacencyClick(element, highlightState, blurState) : element && element.mark === (null === (_e = this._linkMark) || void 0 === _e ? void 0 : _e.getProduct()) ? this._handleLinkAdjacencyClick(element, highlightState, blurState) : this._handleClearEmpty(highlightState, blurState) : "related" === emphasisSpec.effect && (element && element.mark === (null === (_f = this._nodeMark) || void 0 === _f ? void 0 : _f.getProduct()) ? this._handleNodeRelatedClick(element, highlightState, blurState) : element && element.mark === (null === (_g = this._linkMark) || void 0 === _g ? void 0 : _g.getProduct()) ? this._handleLinkRelatedClick(element, highlightState, blurState) : this._handleClearEmpty(highlightState, blurState));
37
- }, this._handleClearEmpty = (highlightState, blurState) => {
38
- var _a, _b;
39
- if (!this._needClear) return;
40
- const allNodeElements = null === (_a = this._nodeMark) || void 0 === _a ? void 0 : _a.getProductElements();
41
- if (!allNodeElements || !allNodeElements.length) return;
42
- const allLinkElements = null === (_b = this._linkMark) || void 0 === _b ? void 0 : _b.getProductElements();
43
- if (!allLinkElements || !allLinkElements.length) return;
44
- const states = [ highlightState, blurState ];
45
- allNodeElements.forEach((el => {
46
- el.removeState(states);
47
- })), allLinkElements.forEach((el => {
48
- el.removeState(states);
49
- })), this._needClear = !1;
50
37
  }, this._handleNodeAdjacencyClick = (element, highlightState, blurState) => {
51
38
  const nodeDatum = element.getDatum(), highlightNodes = [ nodeDatum.key ];
52
39
  if (this._linkMark) {
@@ -77,156 +64,6 @@ class SankeySeries extends cartesian_1.CartesianSeries {
77
64
  }
78
65
  this._nodeMark && this._highLightElements(this._nodeMark.getProductElements(), highlightNodes, highlightState, blurState),
79
66
  this._needClear = !0;
80
- }, this._handleNodeRelatedClick = (element, highlightState, blurState) => {
81
- var _a;
82
- const nodeDatum = element.getDatum(), allNodeElements = this._nodeMark.getProductElements();
83
- if (!allNodeElements || !allNodeElements.length) return;
84
- const allLinkElements = this._linkMark.getProductElements();
85
- if (!allLinkElements || !allLinkElements.length) return;
86
- const father = (null === (_a = allLinkElements[0].getDatum()) || void 0 === _a ? void 0 : _a.parents) ? "parents" : "source";
87
- if ("source" === father) {
88
- const highlightNodes = [ nodeDatum.key ], highlightLinks = [];
89
- if (allLinkElements.forEach(((linkEl, i) => {
90
- var _a, _b, _c, _d;
91
- const linkDatum = linkEl.getDatum(), father = (null == linkDatum ? void 0 : linkDatum.parents) ? "parents" : "source";
92
- if ((0, vutils_1.array)(linkDatum[father]).includes(nodeDatum.key)) {
93
- if (highlightLinks.includes(null !== (_a = linkDatum.key) && void 0 !== _a ? _a : linkDatum.index) || highlightLinks.push(null !== (_b = linkDatum.key) && void 0 !== _b ? _b : linkDatum.index),
94
- highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
95
- !highlightNodes.includes(linkDatum.target)) {
96
- highlightNodes.push(linkDatum.target);
97
- let targetNodeSourceLinks = allNodeElements.find((nodeElement => nodeElement.data[0].key === linkDatum.target)).data[0].sourceLinks;
98
- for (;(null == targetNodeSourceLinks ? void 0 : targetNodeSourceLinks.length) > 0; ) {
99
- const newTargetNodeSourceLinks = [];
100
- return targetNodeSourceLinks.forEach((targetNodeSourceLinkDatum => {
101
- var _a, _b;
102
- if (!highlightLinks.includes(null !== (_a = targetNodeSourceLinkDatum.key) && void 0 !== _a ? _a : targetNodeSourceLinkDatum.index) && (highlightLinks.push(null !== (_b = targetNodeSourceLinkDatum.key) && void 0 !== _b ? _b : targetNodeSourceLinkDatum.index),
103
- !highlightNodes.includes(targetNodeSourceLinkDatum.target))) {
104
- highlightNodes.push(targetNodeSourceLinkDatum.target);
105
- const sourceNodeTemp = allNodeElements.find((nodeElement => nodeElement.data[0].key === targetNodeSourceLinkDatum.target));
106
- newTargetNodeSourceLinks.push(sourceNodeTemp.data[0].targetLinks);
107
- }
108
- })), void (targetNodeSourceLinks = newTargetNodeSourceLinks);
109
- }
110
- }
111
- } else if (linkDatum.target === nodeDatum.key && (highlightLinks.includes(null !== (_c = linkDatum.key) && void 0 !== _c ? _c : linkDatum.index) || highlightLinks.push(null !== (_d = linkDatum.key) && void 0 !== _d ? _d : linkDatum.index),
112
- !highlightNodes.includes(linkDatum.source))) {
113
- highlightNodes.push(linkDatum.source);
114
- let sourceNodeTargetLinks = allNodeElements.find((nodeElement => nodeElement.data[0].key === linkDatum.source)).data[0].targetLinks;
115
- for (;(null == sourceNodeTargetLinks ? void 0 : sourceNodeTargetLinks.length) > 0; ) {
116
- const newSourceNodeTargetLinks = [];
117
- return sourceNodeTargetLinks.forEach((sourceNodeTargetLinkDatum => {
118
- var _a, _b;
119
- if (!highlightLinks.includes(null !== (_a = sourceNodeTargetLinkDatum.key) && void 0 !== _a ? _a : sourceNodeTargetLinkDatum.index) && (highlightLinks.push(null !== (_b = sourceNodeTargetLinkDatum.key) && void 0 !== _b ? _b : sourceNodeTargetLinkDatum.index),
120
- !highlightNodes.includes(sourceNodeTargetLinkDatum.source))) {
121
- highlightNodes.push(sourceNodeTargetLinkDatum.source);
122
- const sourceNodeTemp = allNodeElements.find((nodeElement => nodeElement.data[0].key === sourceNodeTargetLinkDatum.source));
123
- newSourceNodeTargetLinks.push(sourceNodeTemp.data[0].targetLinks);
124
- }
125
- })), void (sourceNodeTargetLinks = newSourceNodeTargetLinks);
126
- }
127
- }
128
- })), this._linkMark) {
129
- const allLinkElements = this._linkMark.getProductElements();
130
- if (!allLinkElements || !allLinkElements.length) return;
131
- allLinkElements.forEach(((linkEl, i) => {
132
- var _a;
133
- highlightLinks.includes(null !== (_a = linkEl.getDatum().key) && void 0 !== _a ? _a : linkEl.getDatum().index) ? (linkEl.removeState(blurState),
134
- linkEl.addState(highlightState)) : (linkEl.removeState(highlightState), linkEl.addState(blurState));
135
- }));
136
- }
137
- this._nodeMark && this._highLightElements(this._nodeMark.getProductElements(), highlightNodes, highlightState, blurState);
138
- } else {
139
- const highlightNodes = [ nodeDatum.key ], upstreamLinks = nodeDatum.targetLinks.reduce(((res, link) => ((0,
140
- vutils_1.array)(link.datum).forEach((dividedLink => {
141
- const parents = dividedLink.parents, len = parents.length;
142
- for (let i = 0; i < len; i++) {
143
- const source = parents[i].key, target = parents[i + 1] ? parents[i + 1].key : nodeDatum.key, value = dividedLink.value, existingItem = res.find((item => item.source === source && item.target === target));
144
- existingItem ? existingItem.value += value : res.push({
145
- source: source,
146
- target: target,
147
- value: value
148
- });
149
- }
150
- })), res)), []);
151
- allLinkElements.forEach(((linkEl, i) => {
152
- const linkDatum = linkEl.getDatum(), originalDatum = linkDatum.datum, selectedDatum = originalDatum ? originalDatum.filter((entry => entry[father].some((par => par.key === nodeDatum.key)))) : null, upSelectedLink = upstreamLinks.find((upLink => upLink.source === linkDatum.source && upLink.target === linkDatum.target));
153
- if (selectedDatum && selectedDatum.length) {
154
- highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
155
- highlightNodes.includes(linkDatum.target) || highlightNodes.push(linkDatum.target);
156
- const ratio = selectedDatum.reduce(((sum, d) => sum + d.value), 0) / linkDatum.value;
157
- return linkEl.removeState(blurState), void linkEl.addState(highlightState, {
158
- ratio: ratio
159
- });
160
- }
161
- if (upSelectedLink) return highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
162
- highlightNodes.includes(linkDatum.target) || highlightNodes.push(linkDatum.target),
163
- linkEl.removeState(blurState), void linkEl.addState(highlightState, {
164
- ratio: upSelectedLink.value / linkDatum.value
165
- });
166
- linkEl.removeState(highlightState), linkEl.addState(blurState);
167
- })), this._nodeMark && this._highLightElements(this._nodeMark.getProductElements(), highlightNodes, highlightState, blurState);
168
- }
169
- this._needClear = !0;
170
- }, this._handleLinkRelatedClick = (element, highlightState, blurState) => {
171
- var _a;
172
- const allNodeElements = this._nodeMark.getProductElements();
173
- if (!allNodeElements || !allNodeElements.length) return;
174
- const allLinkElements = this._linkMark.getProductElements();
175
- if (!allLinkElements || !allLinkElements.length) return;
176
- if ("source" === ((null === (_a = element.getDatum()) || void 0 === _a ? void 0 : _a.parents) ? "parents" : "source")) {
177
- const states = [ highlightState, blurState ];
178
- this._linkMark && allLinkElements.forEach((linkEl => {
179
- linkEl.removeState(states);
180
- })), this._nodeMark && allNodeElements.forEach((el => {
181
- el.removeState(states);
182
- }));
183
- } else {
184
- const curLinkDatum = element.getDatum(), highlightNodes = [ curLinkDatum.source, curLinkDatum.target ], upstreamLinks = [];
185
- (0, vutils_1.array)(curLinkDatum.datum).forEach((dividedLink => {
186
- const parents = dividedLink.parents, len = parents.length;
187
- for (let i = 0; i < len - 1; i++) {
188
- const source = parents[i].key, target = parents[i + 1].key, value = dividedLink.value, existingItem = upstreamLinks.find((item => item.source === source && item.target === target));
189
- upstreamLinks.push({
190
- source: parents[i].key,
191
- target: parents[i + 1].key,
192
- value: dividedLink.value
193
- }), existingItem ? existingItem.value += value : upstreamLinks.push({
194
- source: source,
195
- target: target,
196
- value: value
197
- });
198
- }
199
- })), allLinkElements.forEach((linkEl => {
200
- const linkDatum = linkEl.getDatum(), originalDatum = linkDatum.datum;
201
- if (linkDatum.source === curLinkDatum.source && linkDatum.target === curLinkDatum.target) return linkEl.removeState(blurState),
202
- void linkEl.addState(highlightState, {
203
- ratio: 1
204
- });
205
- const selectedDatum = originalDatum ? originalDatum.filter((entry => {
206
- const parentKeysList = entry.parents.map((item => item.key));
207
- return parentKeysList.includes(curLinkDatum.source) && parentKeysList.includes(curLinkDatum.target);
208
- })) : null;
209
- if (selectedDatum && selectedDatum.length) {
210
- highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
211
- highlightNodes.includes(linkDatum.target) || highlightNodes.push(linkDatum.target);
212
- const val = selectedDatum.filter((entry => entry.parents.some(((par, index) => {
213
- var _a;
214
- return par.key === curLinkDatum.source && (null === (_a = entry.parents[index + 1]) || void 0 === _a ? void 0 : _a.key) === curLinkDatum.target;
215
- })))).reduce(((sum, d) => sum + d.value), 0), ratio = val / linkDatum.value;
216
- return linkEl.removeState(blurState), void linkEl.addState(highlightState, {
217
- ratio: ratio
218
- });
219
- }
220
- const upSelectedLink = upstreamLinks.find((upLink => upLink.source === linkDatum.source && upLink.target === linkDatum.target));
221
- if (upSelectedLink) return highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
222
- highlightNodes.includes(linkDatum.target) || highlightNodes.push(linkDatum.target),
223
- linkEl.removeState(blurState), void linkEl.addState(highlightState, {
224
- ratio: upSelectedLink.value / linkDatum.value
225
- });
226
- linkEl.removeState(highlightState), linkEl.addState(blurState);
227
- })), this._highLightElements(allNodeElements, highlightNodes, highlightState, blurState);
228
- }
229
- this._needClear = !0;
230
67
  };
231
68
  }
232
69
  get direction() {
@@ -486,6 +323,172 @@ class SankeySeries extends cartesian_1.CartesianSeries {
486
323
  linksSeriesDataUpdate() {
487
324
  this._linksSeriesData.updateData();
488
325
  }
326
+ _handleClearEmpty(highlightState, blurState) {
327
+ var _a, _b;
328
+ if (!this._needClear) return;
329
+ const allNodeElements = null === (_a = this._nodeMark) || void 0 === _a ? void 0 : _a.getProductElements();
330
+ if (!allNodeElements || !allNodeElements.length) return;
331
+ const allLinkElements = null === (_b = this._linkMark) || void 0 === _b ? void 0 : _b.getProductElements();
332
+ if (!allLinkElements || !allLinkElements.length) return;
333
+ const states = [ highlightState, blurState ];
334
+ allNodeElements.forEach((el => {
335
+ el.removeState(states);
336
+ })), allLinkElements.forEach((el => {
337
+ el.removeState(states);
338
+ })), this._needClear = !1;
339
+ }
340
+ _handleNodeRelatedClick(element, highlightState, blurState) {
341
+ var _a;
342
+ const nodeDatum = element.getDatum(), allNodeElements = this._nodeMark.getProductElements();
343
+ if (!allNodeElements || !allNodeElements.length) return;
344
+ const allLinkElements = this._linkMark.getProductElements();
345
+ if (!allLinkElements || !allLinkElements.length) return;
346
+ const father = (null === (_a = allLinkElements[0].getDatum()) || void 0 === _a ? void 0 : _a.parents) ? "parents" : "source";
347
+ if ("source" === father) {
348
+ const highlightNodes = [ nodeDatum.key ], highlightLinks = [];
349
+ if (allLinkElements.forEach(((linkEl, i) => {
350
+ var _a, _b, _c, _d;
351
+ const linkDatum = linkEl.getDatum(), father = (null == linkDatum ? void 0 : linkDatum.parents) ? "parents" : "source";
352
+ if ((0, vutils_1.array)(linkDatum[father]).includes(nodeDatum.key)) {
353
+ if (highlightLinks.includes(null !== (_a = linkDatum.key) && void 0 !== _a ? _a : linkDatum.index) || highlightLinks.push(null !== (_b = linkDatum.key) && void 0 !== _b ? _b : linkDatum.index),
354
+ highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
355
+ !highlightNodes.includes(linkDatum.target)) {
356
+ highlightNodes.push(linkDatum.target);
357
+ let targetNodeSourceLinks = allNodeElements.find((nodeElement => nodeElement.data[0].key === linkDatum.target)).data[0].sourceLinks;
358
+ for (;(null == targetNodeSourceLinks ? void 0 : targetNodeSourceLinks.length) > 0; ) {
359
+ const newTargetNodeSourceLinks = [];
360
+ return targetNodeSourceLinks.forEach((targetNodeSourceLinkDatum => {
361
+ var _a, _b;
362
+ if (!highlightLinks.includes(null !== (_a = targetNodeSourceLinkDatum.key) && void 0 !== _a ? _a : targetNodeSourceLinkDatum.index) && (highlightLinks.push(null !== (_b = targetNodeSourceLinkDatum.key) && void 0 !== _b ? _b : targetNodeSourceLinkDatum.index),
363
+ !highlightNodes.includes(targetNodeSourceLinkDatum.target))) {
364
+ highlightNodes.push(targetNodeSourceLinkDatum.target);
365
+ const sourceNodeTemp = allNodeElements.find((nodeElement => nodeElement.data[0].key === targetNodeSourceLinkDatum.target));
366
+ newTargetNodeSourceLinks.push(sourceNodeTemp.data[0].targetLinks);
367
+ }
368
+ })), void (targetNodeSourceLinks = newTargetNodeSourceLinks);
369
+ }
370
+ }
371
+ } else if (linkDatum.target === nodeDatum.key && (highlightLinks.includes(null !== (_c = linkDatum.key) && void 0 !== _c ? _c : linkDatum.index) || highlightLinks.push(null !== (_d = linkDatum.key) && void 0 !== _d ? _d : linkDatum.index),
372
+ !highlightNodes.includes(linkDatum.source))) {
373
+ highlightNodes.push(linkDatum.source);
374
+ let sourceNodeTargetLinks = allNodeElements.find((nodeElement => nodeElement.data[0].key === linkDatum.source)).data[0].targetLinks;
375
+ for (;(null == sourceNodeTargetLinks ? void 0 : sourceNodeTargetLinks.length) > 0; ) {
376
+ const newSourceNodeTargetLinks = [];
377
+ return sourceNodeTargetLinks.forEach((sourceNodeTargetLinkDatum => {
378
+ var _a, _b;
379
+ if (!highlightLinks.includes(null !== (_a = sourceNodeTargetLinkDatum.key) && void 0 !== _a ? _a : sourceNodeTargetLinkDatum.index) && (highlightLinks.push(null !== (_b = sourceNodeTargetLinkDatum.key) && void 0 !== _b ? _b : sourceNodeTargetLinkDatum.index),
380
+ !highlightNodes.includes(sourceNodeTargetLinkDatum.source))) {
381
+ highlightNodes.push(sourceNodeTargetLinkDatum.source);
382
+ const sourceNodeTemp = allNodeElements.find((nodeElement => nodeElement.data[0].key === sourceNodeTargetLinkDatum.source));
383
+ newSourceNodeTargetLinks.push(sourceNodeTemp.data[0].targetLinks);
384
+ }
385
+ })), void (sourceNodeTargetLinks = newSourceNodeTargetLinks);
386
+ }
387
+ }
388
+ })), this._linkMark) {
389
+ const allLinkElements = this._linkMark.getProductElements();
390
+ if (!allLinkElements || !allLinkElements.length) return;
391
+ allLinkElements.forEach(((linkEl, i) => {
392
+ var _a;
393
+ highlightLinks.includes(null !== (_a = linkEl.getDatum().key) && void 0 !== _a ? _a : linkEl.getDatum().index) ? (linkEl.removeState(blurState),
394
+ linkEl.addState(highlightState)) : (linkEl.removeState(highlightState), linkEl.addState(blurState));
395
+ }));
396
+ }
397
+ this._nodeMark && this._highLightElements(this._nodeMark.getProductElements(), highlightNodes, highlightState, blurState);
398
+ } else {
399
+ const highlightNodes = [ nodeDatum.key ], upstreamLinks = nodeDatum.targetLinks.reduce(((res, link) => ((0,
400
+ vutils_1.array)(link.datum).forEach((dividedLink => {
401
+ const parents = dividedLink.parents, len = parents.length;
402
+ for (let i = 0; i < len; i++) {
403
+ const source = parents[i].key, target = parents[i + 1] ? parents[i + 1].key : nodeDatum.key, value = dividedLink.value, existingItem = res.find((item => item.source === source && item.target === target));
404
+ existingItem ? existingItem.value += value : res.push({
405
+ source: source,
406
+ target: target,
407
+ value: value
408
+ });
409
+ }
410
+ })), res)), []);
411
+ allLinkElements.forEach(((linkEl, i) => {
412
+ const linkDatum = linkEl.getDatum(), originalDatum = linkDatum.datum, selectedDatum = originalDatum ? originalDatum.filter((entry => entry[father].some((par => par.key === nodeDatum.key)))) : null, upSelectedLink = upstreamLinks.find((upLink => upLink.source === linkDatum.source && upLink.target === linkDatum.target));
413
+ if (selectedDatum && selectedDatum.length) {
414
+ highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
415
+ highlightNodes.includes(linkDatum.target) || highlightNodes.push(linkDatum.target);
416
+ const ratio = selectedDatum.reduce(((sum, d) => sum + d.value), 0) / linkDatum.value;
417
+ return linkEl.removeState(blurState), void linkEl.addState(highlightState, {
418
+ ratio: ratio
419
+ });
420
+ }
421
+ if (upSelectedLink) return highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
422
+ highlightNodes.includes(linkDatum.target) || highlightNodes.push(linkDatum.target),
423
+ linkEl.removeState(blurState), void linkEl.addState(highlightState, {
424
+ ratio: upSelectedLink.value / linkDatum.value
425
+ });
426
+ linkEl.removeState(highlightState), linkEl.addState(blurState);
427
+ })), this._nodeMark && this._highLightElements(this._nodeMark.getProductElements(), highlightNodes, highlightState, blurState);
428
+ }
429
+ this._needClear = !0;
430
+ }
431
+ _handleLinkRelatedClick(element, highlightState, blurState) {
432
+ var _a;
433
+ const allNodeElements = this._nodeMark.getProductElements();
434
+ if (!allNodeElements || !allNodeElements.length) return;
435
+ const allLinkElements = this._linkMark.getProductElements();
436
+ if (!allLinkElements || !allLinkElements.length) return;
437
+ if ("source" === ((null === (_a = element.getDatum()) || void 0 === _a ? void 0 : _a.parents) ? "parents" : "source")) {
438
+ const states = [ highlightState, blurState ];
439
+ this._linkMark && allLinkElements.forEach((linkEl => {
440
+ linkEl.removeState(states);
441
+ })), this._nodeMark && allNodeElements.forEach((el => {
442
+ el.removeState(states);
443
+ }));
444
+ } else {
445
+ const curLinkDatum = element.getDatum(), highlightNodes = [ curLinkDatum.source, curLinkDatum.target ], upstreamLinks = [];
446
+ (0, vutils_1.array)(curLinkDatum.datum).forEach((dividedLink => {
447
+ const parents = dividedLink.parents, len = parents.length;
448
+ for (let i = 0; i < len - 1; i++) {
449
+ const source = parents[i].key, target = parents[i + 1].key, value = dividedLink.value, existingItem = upstreamLinks.find((item => item.source === source && item.target === target));
450
+ upstreamLinks.push({
451
+ source: parents[i].key,
452
+ target: parents[i + 1].key,
453
+ value: dividedLink.value
454
+ }), existingItem ? existingItem.value += value : upstreamLinks.push({
455
+ source: source,
456
+ target: target,
457
+ value: value
458
+ });
459
+ }
460
+ })), allLinkElements.forEach((linkEl => {
461
+ const linkDatum = linkEl.getDatum(), originalDatum = linkDatum.datum;
462
+ if (linkDatum.source === curLinkDatum.source && linkDatum.target === curLinkDatum.target) return linkEl.removeState(blurState),
463
+ void linkEl.addState(highlightState, {
464
+ ratio: 1
465
+ });
466
+ const selectedDatum = originalDatum ? originalDatum.filter((entry => {
467
+ const parentKeysList = entry.parents.map((item => item.key));
468
+ return parentKeysList.includes(curLinkDatum.source) && parentKeysList.includes(curLinkDatum.target);
469
+ })) : null;
470
+ if (selectedDatum && selectedDatum.length) {
471
+ highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
472
+ highlightNodes.includes(linkDatum.target) || highlightNodes.push(linkDatum.target);
473
+ const val = selectedDatum.filter((entry => entry.parents.some(((par, index) => {
474
+ var _a;
475
+ return par.key === curLinkDatum.source && (null === (_a = entry.parents[index + 1]) || void 0 === _a ? void 0 : _a.key) === curLinkDatum.target;
476
+ })))).reduce(((sum, d) => sum + d.value), 0), ratio = val / linkDatum.value;
477
+ return linkEl.removeState(blurState), void linkEl.addState(highlightState, {
478
+ ratio: ratio
479
+ });
480
+ }
481
+ const upSelectedLink = upstreamLinks.find((upLink => upLink.source === linkDatum.source && upLink.target === linkDatum.target));
482
+ if (upSelectedLink) return highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
483
+ highlightNodes.includes(linkDatum.target) || highlightNodes.push(linkDatum.target),
484
+ linkEl.removeState(blurState), void linkEl.addState(highlightState, {
485
+ ratio: upSelectedLink.value / linkDatum.value
486
+ });
487
+ linkEl.removeState(highlightState), linkEl.addState(blurState);
488
+ })), this._highLightElements(allNodeElements, highlightNodes, highlightState, blurState);
489
+ }
490
+ this._needClear = !0;
491
+ }
489
492
  _highLightElements(vGrammarElements, highlightNodes, highlightState, blurState) {
490
493
  vGrammarElements && vGrammarElements.length && vGrammarElements.forEach((el => {
491
494
  el.removeState([ blurState, highlightState ]), highlightNodes.includes(el.getDatum().key) ? el.addState(highlightState) : el.addState(blurState);