@visactor/vchart 1.13.21-alpha.0 → 1.13.21-alpha.2

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 (52) hide show
  1. package/build/es5/index.js +2 -2
  2. package/build/index.es.js +326 -317
  3. package/build/index.js +472 -458
  4. package/build/index.min.js +1 -1
  5. package/build/tsconfig.tsbuildinfo +1 -1
  6. package/cjs/chart/index.d.ts +2 -2
  7. package/cjs/chart/index.js +7 -2
  8. package/cjs/chart/index.js.map +1 -1
  9. package/cjs/chart/sankey/sankey-transformer.js +1 -1
  10. package/cjs/chart/sankey/sankey-transformer.js.map +1 -1
  11. package/cjs/constant/funnel.js +1 -2
  12. package/cjs/constant/sunburst.js +2 -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/interface.js +1 -2
  17. package/cjs/core/vchart.js +2 -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/series/sankey/interface.d.ts +1 -0
  25. package/cjs/series/sankey/interface.js.map +1 -1
  26. package/cjs/series/sankey/sankey.d.ts +7 -7
  27. package/cjs/series/sankey/sankey.js +167 -163
  28. package/cjs/series/sankey/sankey.js.map +1 -1
  29. package/esm/chart/index.d.ts +2 -2
  30. package/esm/chart/index.js +2 -2
  31. package/esm/chart/index.js.map +1 -1
  32. package/esm/chart/sankey/sankey-transformer.js +1 -1
  33. package/esm/chart/sankey/sankey-transformer.js.map +1 -1
  34. package/esm/constant/funnel.js +1 -2
  35. package/esm/constant/sunburst.js +2 -1
  36. package/esm/core/index.d.ts +1 -1
  37. package/esm/core/index.js +1 -1
  38. package/esm/core/index.js.map +1 -1
  39. package/esm/core/interface.js +1 -2
  40. package/esm/core/vchart.js +2 -1
  41. package/esm/index.d.ts +2 -0
  42. package/esm/index.js +4 -0
  43. package/esm/index.js.map +1 -1
  44. package/esm/mark/index.d.ts +3 -2
  45. package/esm/mark/index.js +4 -2
  46. package/esm/mark/index.js.map +1 -1
  47. package/esm/series/sankey/interface.d.ts +1 -0
  48. package/esm/series/sankey/interface.js.map +1 -1
  49. package/esm/series/sankey/sankey.d.ts +7 -7
  50. package/esm/series/sankey/sankey.js +166 -162
  51. package/esm/series/sankey/sankey.js.map +1 -1
  52. package/package.json +13 -13
@@ -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() {
@@ -284,6 +121,7 @@ class SankeySeries extends cartesian_1.CartesianSeries {
284
121
  maxLinkHeight: this._spec.maxLinkHeight,
285
122
  iterations: this._spec.iterations,
286
123
  nodeKey: this._spec.nodeKey,
124
+ depthKey: this._spec.depthKey,
287
125
  linkSortBy: this._spec.linkSortBy,
288
126
  nodeSortBy: this._spec.nodeSortBy,
289
127
  setNodeLayer: this._spec.setNodeLayer,
@@ -487,6 +325,172 @@ class SankeySeries extends cartesian_1.CartesianSeries {
487
325
  linksSeriesDataUpdate() {
488
326
  this._linksSeriesData.updateData();
489
327
  }
328
+ _handleClearEmpty(highlightState, blurState) {
329
+ var _a, _b;
330
+ if (!this._needClear) return;
331
+ const allNodeElements = null === (_a = this._nodeMark) || void 0 === _a ? void 0 : _a.getProductElements();
332
+ if (!allNodeElements || !allNodeElements.length) return;
333
+ const allLinkElements = null === (_b = this._linkMark) || void 0 === _b ? void 0 : _b.getProductElements();
334
+ if (!allLinkElements || !allLinkElements.length) return;
335
+ const states = [ highlightState, blurState ];
336
+ allNodeElements.forEach((el => {
337
+ el.removeState(states);
338
+ })), allLinkElements.forEach((el => {
339
+ el.removeState(states);
340
+ })), this._needClear = !1;
341
+ }
342
+ _handleNodeRelatedClick(element, highlightState, blurState) {
343
+ var _a;
344
+ const nodeDatum = element.getDatum(), allNodeElements = this._nodeMark.getProductElements();
345
+ if (!allNodeElements || !allNodeElements.length) return;
346
+ const allLinkElements = this._linkMark.getProductElements();
347
+ if (!allLinkElements || !allLinkElements.length) return;
348
+ const father = (null === (_a = allLinkElements[0].getDatum()) || void 0 === _a ? void 0 : _a.parents) ? "parents" : "source";
349
+ if ("source" === father) {
350
+ const highlightNodes = [ nodeDatum.key ], highlightLinks = [];
351
+ if (allLinkElements.forEach(((linkEl, i) => {
352
+ var _a, _b, _c, _d;
353
+ const linkDatum = linkEl.getDatum(), father = (null == linkDatum ? void 0 : linkDatum.parents) ? "parents" : "source";
354
+ if ((0, vutils_1.array)(linkDatum[father]).includes(nodeDatum.key)) {
355
+ 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),
356
+ highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
357
+ !highlightNodes.includes(linkDatum.target)) {
358
+ highlightNodes.push(linkDatum.target);
359
+ let targetNodeSourceLinks = allNodeElements.find((nodeElement => nodeElement.data[0].key === linkDatum.target)).data[0].sourceLinks;
360
+ for (;(null == targetNodeSourceLinks ? void 0 : targetNodeSourceLinks.length) > 0; ) {
361
+ const newTargetNodeSourceLinks = [];
362
+ return targetNodeSourceLinks.forEach((targetNodeSourceLinkDatum => {
363
+ var _a, _b;
364
+ 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),
365
+ !highlightNodes.includes(targetNodeSourceLinkDatum.target))) {
366
+ highlightNodes.push(targetNodeSourceLinkDatum.target);
367
+ const sourceNodeTemp = allNodeElements.find((nodeElement => nodeElement.data[0].key === targetNodeSourceLinkDatum.target));
368
+ newTargetNodeSourceLinks.push(sourceNodeTemp.data[0].targetLinks);
369
+ }
370
+ })), void (targetNodeSourceLinks = newTargetNodeSourceLinks);
371
+ }
372
+ }
373
+ } 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),
374
+ !highlightNodes.includes(linkDatum.source))) {
375
+ highlightNodes.push(linkDatum.source);
376
+ let sourceNodeTargetLinks = allNodeElements.find((nodeElement => nodeElement.data[0].key === linkDatum.source)).data[0].targetLinks;
377
+ for (;(null == sourceNodeTargetLinks ? void 0 : sourceNodeTargetLinks.length) > 0; ) {
378
+ const newSourceNodeTargetLinks = [];
379
+ return sourceNodeTargetLinks.forEach((sourceNodeTargetLinkDatum => {
380
+ var _a, _b;
381
+ 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),
382
+ !highlightNodes.includes(sourceNodeTargetLinkDatum.source))) {
383
+ highlightNodes.push(sourceNodeTargetLinkDatum.source);
384
+ const sourceNodeTemp = allNodeElements.find((nodeElement => nodeElement.data[0].key === sourceNodeTargetLinkDatum.source));
385
+ newSourceNodeTargetLinks.push(sourceNodeTemp.data[0].targetLinks);
386
+ }
387
+ })), void (sourceNodeTargetLinks = newSourceNodeTargetLinks);
388
+ }
389
+ }
390
+ })), this._linkMark) {
391
+ const allLinkElements = this._linkMark.getProductElements();
392
+ if (!allLinkElements || !allLinkElements.length) return;
393
+ allLinkElements.forEach(((linkEl, i) => {
394
+ var _a;
395
+ highlightLinks.includes(null !== (_a = linkEl.getDatum().key) && void 0 !== _a ? _a : linkEl.getDatum().index) ? (linkEl.removeState(blurState),
396
+ linkEl.addState(highlightState)) : (linkEl.removeState(highlightState), linkEl.addState(blurState));
397
+ }));
398
+ }
399
+ this._nodeMark && this._highLightElements(this._nodeMark.getProductElements(), highlightNodes, highlightState, blurState);
400
+ } else {
401
+ const highlightNodes = [ nodeDatum.key ], upstreamLinks = nodeDatum.targetLinks.reduce(((res, link) => ((0,
402
+ vutils_1.array)(link.datum).forEach((dividedLink => {
403
+ const parents = dividedLink.parents, len = parents.length;
404
+ for (let i = 0; i < len; i++) {
405
+ 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));
406
+ existingItem ? existingItem.value += value : res.push({
407
+ source: source,
408
+ target: target,
409
+ value: value
410
+ });
411
+ }
412
+ })), res)), []);
413
+ allLinkElements.forEach(((linkEl, i) => {
414
+ 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));
415
+ if (selectedDatum && selectedDatum.length) {
416
+ highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
417
+ highlightNodes.includes(linkDatum.target) || highlightNodes.push(linkDatum.target);
418
+ const ratio = selectedDatum.reduce(((sum, d) => sum + d.value), 0) / linkDatum.value;
419
+ return linkEl.removeState(blurState), void linkEl.addState(highlightState, {
420
+ ratio: ratio
421
+ });
422
+ }
423
+ if (upSelectedLink) return highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
424
+ highlightNodes.includes(linkDatum.target) || highlightNodes.push(linkDatum.target),
425
+ linkEl.removeState(blurState), void linkEl.addState(highlightState, {
426
+ ratio: upSelectedLink.value / linkDatum.value
427
+ });
428
+ linkEl.removeState(highlightState), linkEl.addState(blurState);
429
+ })), this._nodeMark && this._highLightElements(this._nodeMark.getProductElements(), highlightNodes, highlightState, blurState);
430
+ }
431
+ this._needClear = !0;
432
+ }
433
+ _handleLinkRelatedClick(element, highlightState, blurState) {
434
+ var _a;
435
+ const allNodeElements = this._nodeMark.getProductElements();
436
+ if (!allNodeElements || !allNodeElements.length) return;
437
+ const allLinkElements = this._linkMark.getProductElements();
438
+ if (!allLinkElements || !allLinkElements.length) return;
439
+ if ("source" === ((null === (_a = element.getDatum()) || void 0 === _a ? void 0 : _a.parents) ? "parents" : "source")) {
440
+ const states = [ highlightState, blurState ];
441
+ this._linkMark && allLinkElements.forEach((linkEl => {
442
+ linkEl.removeState(states);
443
+ })), this._nodeMark && allNodeElements.forEach((el => {
444
+ el.removeState(states);
445
+ }));
446
+ } else {
447
+ const curLinkDatum = element.getDatum(), highlightNodes = [ curLinkDatum.source, curLinkDatum.target ], upstreamLinks = [];
448
+ (0, vutils_1.array)(curLinkDatum.datum).forEach((dividedLink => {
449
+ const parents = dividedLink.parents, len = parents.length;
450
+ for (let i = 0; i < len - 1; i++) {
451
+ const source = parents[i].key, target = parents[i + 1].key, value = dividedLink.value, existingItem = upstreamLinks.find((item => item.source === source && item.target === target));
452
+ upstreamLinks.push({
453
+ source: parents[i].key,
454
+ target: parents[i + 1].key,
455
+ value: dividedLink.value
456
+ }), existingItem ? existingItem.value += value : upstreamLinks.push({
457
+ source: source,
458
+ target: target,
459
+ value: value
460
+ });
461
+ }
462
+ })), allLinkElements.forEach((linkEl => {
463
+ const linkDatum = linkEl.getDatum(), originalDatum = linkDatum.datum;
464
+ if (linkDatum.source === curLinkDatum.source && linkDatum.target === curLinkDatum.target) return linkEl.removeState(blurState),
465
+ void linkEl.addState(highlightState, {
466
+ ratio: 1
467
+ });
468
+ const selectedDatum = originalDatum ? originalDatum.filter((entry => {
469
+ const parentKeysList = entry.parents.map((item => item.key));
470
+ return parentKeysList.includes(curLinkDatum.source) && parentKeysList.includes(curLinkDatum.target);
471
+ })) : null;
472
+ if (selectedDatum && selectedDatum.length) {
473
+ highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
474
+ highlightNodes.includes(linkDatum.target) || highlightNodes.push(linkDatum.target);
475
+ const val = selectedDatum.filter((entry => entry.parents.some(((par, index) => {
476
+ var _a;
477
+ return par.key === curLinkDatum.source && (null === (_a = entry.parents[index + 1]) || void 0 === _a ? void 0 : _a.key) === curLinkDatum.target;
478
+ })))).reduce(((sum, d) => sum + d.value), 0), ratio = val / linkDatum.value;
479
+ return linkEl.removeState(blurState), void linkEl.addState(highlightState, {
480
+ ratio: ratio
481
+ });
482
+ }
483
+ const upSelectedLink = upstreamLinks.find((upLink => upLink.source === linkDatum.source && upLink.target === linkDatum.target));
484
+ if (upSelectedLink) return highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
485
+ highlightNodes.includes(linkDatum.target) || highlightNodes.push(linkDatum.target),
486
+ linkEl.removeState(blurState), void linkEl.addState(highlightState, {
487
+ ratio: upSelectedLink.value / linkDatum.value
488
+ });
489
+ linkEl.removeState(highlightState), linkEl.addState(blurState);
490
+ })), this._highLightElements(allNodeElements, highlightNodes, highlightState, blurState);
491
+ }
492
+ this._needClear = !0;
493
+ }
490
494
  _highLightElements(vGrammarElements, highlightNodes, highlightState, blurState) {
491
495
  vGrammarElements && vGrammarElements.length && vGrammarElements.forEach((el => {
492
496
  el.removeState([ blurState, highlightState ]), highlightNodes.includes(el.getDatum().key) ? el.addState(highlightState) : el.addState(blurState);