@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
@@ -84,19 +84,6 @@ export class SankeySeries extends CartesianSeries {
84
84
  var _a, _b, _c, _d, _e, _f, _g;
85
85
  const emphasisSpec = null !== (_a = this._spec.emphasis) && void 0 !== _a ? _a : {}, highlightState = null !== (_b = emphasisSpec.highlightState) && void 0 !== _b ? _b : STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, blurState = null !== (_c = emphasisSpec.blurState) && void 0 !== _c ? _c : STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE, element = params.item;
86
86
  "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));
87
- }, this._handleClearEmpty = (highlightState, blurState) => {
88
- var _a, _b;
89
- if (!this._needClear) return;
90
- const allNodeElements = null === (_a = this._nodeMark) || void 0 === _a ? void 0 : _a.getProductElements();
91
- if (!allNodeElements || !allNodeElements.length) return;
92
- const allLinkElements = null === (_b = this._linkMark) || void 0 === _b ? void 0 : _b.getProductElements();
93
- if (!allLinkElements || !allLinkElements.length) return;
94
- const states = [ highlightState, blurState ];
95
- allNodeElements.forEach((el => {
96
- el.removeState(states);
97
- })), allLinkElements.forEach((el => {
98
- el.removeState(states);
99
- })), this._needClear = !1;
100
87
  }, this._handleNodeAdjacencyClick = (element, highlightState, blurState) => {
101
88
  const nodeDatum = element.getDatum(), highlightNodes = [ nodeDatum.key ];
102
89
  if (this._linkMark) {
@@ -127,155 +114,6 @@ export class SankeySeries extends CartesianSeries {
127
114
  }
128
115
  this._nodeMark && this._highLightElements(this._nodeMark.getProductElements(), highlightNodes, highlightState, blurState),
129
116
  this._needClear = !0;
130
- }, this._handleNodeRelatedClick = (element, highlightState, blurState) => {
131
- var _a;
132
- const nodeDatum = element.getDatum(), allNodeElements = this._nodeMark.getProductElements();
133
- if (!allNodeElements || !allNodeElements.length) return;
134
- const allLinkElements = this._linkMark.getProductElements();
135
- if (!allLinkElements || !allLinkElements.length) return;
136
- const father = (null === (_a = allLinkElements[0].getDatum()) || void 0 === _a ? void 0 : _a.parents) ? "parents" : "source";
137
- if ("source" === father) {
138
- const highlightNodes = [ nodeDatum.key ], highlightLinks = [];
139
- if (allLinkElements.forEach(((linkEl, i) => {
140
- var _a, _b, _c, _d;
141
- const linkDatum = linkEl.getDatum(), father = (null == linkDatum ? void 0 : linkDatum.parents) ? "parents" : "source";
142
- if (array(linkDatum[father]).includes(nodeDatum.key)) {
143
- 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),
144
- highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
145
- !highlightNodes.includes(linkDatum.target)) {
146
- highlightNodes.push(linkDatum.target);
147
- let targetNodeSourceLinks = allNodeElements.find((nodeElement => nodeElement.data[0].key === linkDatum.target)).data[0].sourceLinks;
148
- for (;(null == targetNodeSourceLinks ? void 0 : targetNodeSourceLinks.length) > 0; ) {
149
- const newTargetNodeSourceLinks = [];
150
- return targetNodeSourceLinks.forEach((targetNodeSourceLinkDatum => {
151
- var _a, _b;
152
- 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),
153
- !highlightNodes.includes(targetNodeSourceLinkDatum.target))) {
154
- highlightNodes.push(targetNodeSourceLinkDatum.target);
155
- const sourceNodeTemp = allNodeElements.find((nodeElement => nodeElement.data[0].key === targetNodeSourceLinkDatum.target));
156
- newTargetNodeSourceLinks.push(sourceNodeTemp.data[0].targetLinks);
157
- }
158
- })), void (targetNodeSourceLinks = newTargetNodeSourceLinks);
159
- }
160
- }
161
- } 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),
162
- !highlightNodes.includes(linkDatum.source))) {
163
- highlightNodes.push(linkDatum.source);
164
- let sourceNodeTargetLinks = allNodeElements.find((nodeElement => nodeElement.data[0].key === linkDatum.source)).data[0].targetLinks;
165
- for (;(null == sourceNodeTargetLinks ? void 0 : sourceNodeTargetLinks.length) > 0; ) {
166
- const newSourceNodeTargetLinks = [];
167
- return sourceNodeTargetLinks.forEach((sourceNodeTargetLinkDatum => {
168
- var _a, _b;
169
- 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),
170
- !highlightNodes.includes(sourceNodeTargetLinkDatum.source))) {
171
- highlightNodes.push(sourceNodeTargetLinkDatum.source);
172
- const sourceNodeTemp = allNodeElements.find((nodeElement => nodeElement.data[0].key === sourceNodeTargetLinkDatum.source));
173
- newSourceNodeTargetLinks.push(sourceNodeTemp.data[0].targetLinks);
174
- }
175
- })), void (sourceNodeTargetLinks = newSourceNodeTargetLinks);
176
- }
177
- }
178
- })), this._linkMark) {
179
- const allLinkElements = this._linkMark.getProductElements();
180
- if (!allLinkElements || !allLinkElements.length) return;
181
- allLinkElements.forEach(((linkEl, i) => {
182
- var _a;
183
- highlightLinks.includes(null !== (_a = linkEl.getDatum().key) && void 0 !== _a ? _a : linkEl.getDatum().index) ? (linkEl.removeState(blurState),
184
- linkEl.addState(highlightState)) : (linkEl.removeState(highlightState), linkEl.addState(blurState));
185
- }));
186
- }
187
- this._nodeMark && this._highLightElements(this._nodeMark.getProductElements(), highlightNodes, highlightState, blurState);
188
- } else {
189
- const highlightNodes = [ nodeDatum.key ], upstreamLinks = nodeDatum.targetLinks.reduce(((res, link) => (array(link.datum).forEach((dividedLink => {
190
- const parents = dividedLink.parents, len = parents.length;
191
- for (let i = 0; i < len; i++) {
192
- 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));
193
- existingItem ? existingItem.value += value : res.push({
194
- source: source,
195
- target: target,
196
- value: value
197
- });
198
- }
199
- })), res)), []);
200
- allLinkElements.forEach(((linkEl, i) => {
201
- 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));
202
- if (selectedDatum && selectedDatum.length) {
203
- highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
204
- highlightNodes.includes(linkDatum.target) || highlightNodes.push(linkDatum.target);
205
- const ratio = selectedDatum.reduce(((sum, d) => sum + d.value), 0) / linkDatum.value;
206
- return linkEl.removeState(blurState), void linkEl.addState(highlightState, {
207
- ratio: ratio
208
- });
209
- }
210
- if (upSelectedLink) return highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
211
- highlightNodes.includes(linkDatum.target) || highlightNodes.push(linkDatum.target),
212
- linkEl.removeState(blurState), void linkEl.addState(highlightState, {
213
- ratio: upSelectedLink.value / linkDatum.value
214
- });
215
- linkEl.removeState(highlightState), linkEl.addState(blurState);
216
- })), this._nodeMark && this._highLightElements(this._nodeMark.getProductElements(), highlightNodes, highlightState, blurState);
217
- }
218
- this._needClear = !0;
219
- }, this._handleLinkRelatedClick = (element, highlightState, blurState) => {
220
- var _a;
221
- const allNodeElements = this._nodeMark.getProductElements();
222
- if (!allNodeElements || !allNodeElements.length) return;
223
- const allLinkElements = this._linkMark.getProductElements();
224
- if (!allLinkElements || !allLinkElements.length) return;
225
- if ("source" === ((null === (_a = element.getDatum()) || void 0 === _a ? void 0 : _a.parents) ? "parents" : "source")) {
226
- const states = [ highlightState, blurState ];
227
- this._linkMark && allLinkElements.forEach((linkEl => {
228
- linkEl.removeState(states);
229
- })), this._nodeMark && allNodeElements.forEach((el => {
230
- el.removeState(states);
231
- }));
232
- } else {
233
- const curLinkDatum = element.getDatum(), highlightNodes = [ curLinkDatum.source, curLinkDatum.target ], upstreamLinks = [];
234
- array(curLinkDatum.datum).forEach((dividedLink => {
235
- const parents = dividedLink.parents, len = parents.length;
236
- for (let i = 0; i < len - 1; i++) {
237
- const source = parents[i].key, target = parents[i + 1].key, value = dividedLink.value, existingItem = upstreamLinks.find((item => item.source === source && item.target === target));
238
- upstreamLinks.push({
239
- source: parents[i].key,
240
- target: parents[i + 1].key,
241
- value: dividedLink.value
242
- }), existingItem ? existingItem.value += value : upstreamLinks.push({
243
- source: source,
244
- target: target,
245
- value: value
246
- });
247
- }
248
- })), allLinkElements.forEach((linkEl => {
249
- const linkDatum = linkEl.getDatum(), originalDatum = linkDatum.datum;
250
- if (linkDatum.source === curLinkDatum.source && linkDatum.target === curLinkDatum.target) return linkEl.removeState(blurState),
251
- void linkEl.addState(highlightState, {
252
- ratio: 1
253
- });
254
- const selectedDatum = originalDatum ? originalDatum.filter((entry => {
255
- const parentKeysList = entry.parents.map((item => item.key));
256
- return parentKeysList.includes(curLinkDatum.source) && parentKeysList.includes(curLinkDatum.target);
257
- })) : null;
258
- if (selectedDatum && selectedDatum.length) {
259
- highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
260
- highlightNodes.includes(linkDatum.target) || highlightNodes.push(linkDatum.target);
261
- const val = selectedDatum.filter((entry => entry.parents.some(((par, index) => {
262
- var _a;
263
- return par.key === curLinkDatum.source && (null === (_a = entry.parents[index + 1]) || void 0 === _a ? void 0 : _a.key) === curLinkDatum.target;
264
- })))).reduce(((sum, d) => sum + d.value), 0), ratio = val / linkDatum.value;
265
- return linkEl.removeState(blurState), void linkEl.addState(highlightState, {
266
- ratio: ratio
267
- });
268
- }
269
- const upSelectedLink = upstreamLinks.find((upLink => upLink.source === linkDatum.source && upLink.target === linkDatum.target));
270
- if (upSelectedLink) return highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
271
- highlightNodes.includes(linkDatum.target) || highlightNodes.push(linkDatum.target),
272
- linkEl.removeState(blurState), void linkEl.addState(highlightState, {
273
- ratio: upSelectedLink.value / linkDatum.value
274
- });
275
- linkEl.removeState(highlightState), linkEl.addState(blurState);
276
- })), this._highLightElements(allNodeElements, highlightNodes, highlightState, blurState);
277
- }
278
- this._needClear = !0;
279
117
  };
280
118
  }
281
119
  get direction() {
@@ -527,6 +365,171 @@ export class SankeySeries extends CartesianSeries {
527
365
  linksSeriesDataUpdate() {
528
366
  this._linksSeriesData.updateData();
529
367
  }
368
+ _handleClearEmpty(highlightState, blurState) {
369
+ var _a, _b;
370
+ if (!this._needClear) return;
371
+ const allNodeElements = null === (_a = this._nodeMark) || void 0 === _a ? void 0 : _a.getProductElements();
372
+ if (!allNodeElements || !allNodeElements.length) return;
373
+ const allLinkElements = null === (_b = this._linkMark) || void 0 === _b ? void 0 : _b.getProductElements();
374
+ if (!allLinkElements || !allLinkElements.length) return;
375
+ const states = [ highlightState, blurState ];
376
+ allNodeElements.forEach((el => {
377
+ el.removeState(states);
378
+ })), allLinkElements.forEach((el => {
379
+ el.removeState(states);
380
+ })), this._needClear = !1;
381
+ }
382
+ _handleNodeRelatedClick(element, highlightState, blurState) {
383
+ var _a;
384
+ const nodeDatum = element.getDatum(), allNodeElements = this._nodeMark.getProductElements();
385
+ if (!allNodeElements || !allNodeElements.length) return;
386
+ const allLinkElements = this._linkMark.getProductElements();
387
+ if (!allLinkElements || !allLinkElements.length) return;
388
+ const father = (null === (_a = allLinkElements[0].getDatum()) || void 0 === _a ? void 0 : _a.parents) ? "parents" : "source";
389
+ if ("source" === father) {
390
+ const highlightNodes = [ nodeDatum.key ], highlightLinks = [];
391
+ if (allLinkElements.forEach(((linkEl, i) => {
392
+ var _a, _b, _c, _d;
393
+ const linkDatum = linkEl.getDatum(), father = (null == linkDatum ? void 0 : linkDatum.parents) ? "parents" : "source";
394
+ if (array(linkDatum[father]).includes(nodeDatum.key)) {
395
+ 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),
396
+ highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
397
+ !highlightNodes.includes(linkDatum.target)) {
398
+ highlightNodes.push(linkDatum.target);
399
+ let targetNodeSourceLinks = allNodeElements.find((nodeElement => nodeElement.data[0].key === linkDatum.target)).data[0].sourceLinks;
400
+ for (;(null == targetNodeSourceLinks ? void 0 : targetNodeSourceLinks.length) > 0; ) {
401
+ const newTargetNodeSourceLinks = [];
402
+ return targetNodeSourceLinks.forEach((targetNodeSourceLinkDatum => {
403
+ var _a, _b;
404
+ 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),
405
+ !highlightNodes.includes(targetNodeSourceLinkDatum.target))) {
406
+ highlightNodes.push(targetNodeSourceLinkDatum.target);
407
+ const sourceNodeTemp = allNodeElements.find((nodeElement => nodeElement.data[0].key === targetNodeSourceLinkDatum.target));
408
+ newTargetNodeSourceLinks.push(sourceNodeTemp.data[0].targetLinks);
409
+ }
410
+ })), void (targetNodeSourceLinks = newTargetNodeSourceLinks);
411
+ }
412
+ }
413
+ } 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),
414
+ !highlightNodes.includes(linkDatum.source))) {
415
+ highlightNodes.push(linkDatum.source);
416
+ let sourceNodeTargetLinks = allNodeElements.find((nodeElement => nodeElement.data[0].key === linkDatum.source)).data[0].targetLinks;
417
+ for (;(null == sourceNodeTargetLinks ? void 0 : sourceNodeTargetLinks.length) > 0; ) {
418
+ const newSourceNodeTargetLinks = [];
419
+ return sourceNodeTargetLinks.forEach((sourceNodeTargetLinkDatum => {
420
+ var _a, _b;
421
+ 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),
422
+ !highlightNodes.includes(sourceNodeTargetLinkDatum.source))) {
423
+ highlightNodes.push(sourceNodeTargetLinkDatum.source);
424
+ const sourceNodeTemp = allNodeElements.find((nodeElement => nodeElement.data[0].key === sourceNodeTargetLinkDatum.source));
425
+ newSourceNodeTargetLinks.push(sourceNodeTemp.data[0].targetLinks);
426
+ }
427
+ })), void (sourceNodeTargetLinks = newSourceNodeTargetLinks);
428
+ }
429
+ }
430
+ })), this._linkMark) {
431
+ const allLinkElements = this._linkMark.getProductElements();
432
+ if (!allLinkElements || !allLinkElements.length) return;
433
+ allLinkElements.forEach(((linkEl, i) => {
434
+ var _a;
435
+ highlightLinks.includes(null !== (_a = linkEl.getDatum().key) && void 0 !== _a ? _a : linkEl.getDatum().index) ? (linkEl.removeState(blurState),
436
+ linkEl.addState(highlightState)) : (linkEl.removeState(highlightState), linkEl.addState(blurState));
437
+ }));
438
+ }
439
+ this._nodeMark && this._highLightElements(this._nodeMark.getProductElements(), highlightNodes, highlightState, blurState);
440
+ } else {
441
+ const highlightNodes = [ nodeDatum.key ], upstreamLinks = nodeDatum.targetLinks.reduce(((res, link) => (array(link.datum).forEach((dividedLink => {
442
+ const parents = dividedLink.parents, len = parents.length;
443
+ for (let i = 0; i < len; i++) {
444
+ 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));
445
+ existingItem ? existingItem.value += value : res.push({
446
+ source: source,
447
+ target: target,
448
+ value: value
449
+ });
450
+ }
451
+ })), res)), []);
452
+ allLinkElements.forEach(((linkEl, i) => {
453
+ 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));
454
+ if (selectedDatum && selectedDatum.length) {
455
+ highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
456
+ highlightNodes.includes(linkDatum.target) || highlightNodes.push(linkDatum.target);
457
+ const ratio = selectedDatum.reduce(((sum, d) => sum + d.value), 0) / linkDatum.value;
458
+ return linkEl.removeState(blurState), void linkEl.addState(highlightState, {
459
+ ratio: ratio
460
+ });
461
+ }
462
+ if (upSelectedLink) return highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
463
+ highlightNodes.includes(linkDatum.target) || highlightNodes.push(linkDatum.target),
464
+ linkEl.removeState(blurState), void linkEl.addState(highlightState, {
465
+ ratio: upSelectedLink.value / linkDatum.value
466
+ });
467
+ linkEl.removeState(highlightState), linkEl.addState(blurState);
468
+ })), this._nodeMark && this._highLightElements(this._nodeMark.getProductElements(), highlightNodes, highlightState, blurState);
469
+ }
470
+ this._needClear = !0;
471
+ }
472
+ _handleLinkRelatedClick(element, highlightState, blurState) {
473
+ var _a;
474
+ const allNodeElements = this._nodeMark.getProductElements();
475
+ if (!allNodeElements || !allNodeElements.length) return;
476
+ const allLinkElements = this._linkMark.getProductElements();
477
+ if (!allLinkElements || !allLinkElements.length) return;
478
+ if ("source" === ((null === (_a = element.getDatum()) || void 0 === _a ? void 0 : _a.parents) ? "parents" : "source")) {
479
+ const states = [ highlightState, blurState ];
480
+ this._linkMark && allLinkElements.forEach((linkEl => {
481
+ linkEl.removeState(states);
482
+ })), this._nodeMark && allNodeElements.forEach((el => {
483
+ el.removeState(states);
484
+ }));
485
+ } else {
486
+ const curLinkDatum = element.getDatum(), highlightNodes = [ curLinkDatum.source, curLinkDatum.target ], upstreamLinks = [];
487
+ array(curLinkDatum.datum).forEach((dividedLink => {
488
+ const parents = dividedLink.parents, len = parents.length;
489
+ for (let i = 0; i < len - 1; i++) {
490
+ const source = parents[i].key, target = parents[i + 1].key, value = dividedLink.value, existingItem = upstreamLinks.find((item => item.source === source && item.target === target));
491
+ upstreamLinks.push({
492
+ source: parents[i].key,
493
+ target: parents[i + 1].key,
494
+ value: dividedLink.value
495
+ }), existingItem ? existingItem.value += value : upstreamLinks.push({
496
+ source: source,
497
+ target: target,
498
+ value: value
499
+ });
500
+ }
501
+ })), allLinkElements.forEach((linkEl => {
502
+ const linkDatum = linkEl.getDatum(), originalDatum = linkDatum.datum;
503
+ if (linkDatum.source === curLinkDatum.source && linkDatum.target === curLinkDatum.target) return linkEl.removeState(blurState),
504
+ void linkEl.addState(highlightState, {
505
+ ratio: 1
506
+ });
507
+ const selectedDatum = originalDatum ? originalDatum.filter((entry => {
508
+ const parentKeysList = entry.parents.map((item => item.key));
509
+ return parentKeysList.includes(curLinkDatum.source) && parentKeysList.includes(curLinkDatum.target);
510
+ })) : null;
511
+ if (selectedDatum && selectedDatum.length) {
512
+ highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
513
+ highlightNodes.includes(linkDatum.target) || highlightNodes.push(linkDatum.target);
514
+ const val = selectedDatum.filter((entry => entry.parents.some(((par, index) => {
515
+ var _a;
516
+ return par.key === curLinkDatum.source && (null === (_a = entry.parents[index + 1]) || void 0 === _a ? void 0 : _a.key) === curLinkDatum.target;
517
+ })))).reduce(((sum, d) => sum + d.value), 0), ratio = val / linkDatum.value;
518
+ return linkEl.removeState(blurState), void linkEl.addState(highlightState, {
519
+ ratio: ratio
520
+ });
521
+ }
522
+ const upSelectedLink = upstreamLinks.find((upLink => upLink.source === linkDatum.source && upLink.target === linkDatum.target));
523
+ if (upSelectedLink) return highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
524
+ highlightNodes.includes(linkDatum.target) || highlightNodes.push(linkDatum.target),
525
+ linkEl.removeState(blurState), void linkEl.addState(highlightState, {
526
+ ratio: upSelectedLink.value / linkDatum.value
527
+ });
528
+ linkEl.removeState(highlightState), linkEl.addState(blurState);
529
+ })), this._highLightElements(allNodeElements, highlightNodes, highlightState, blurState);
530
+ }
531
+ this._needClear = !0;
532
+ }
530
533
  _highLightElements(vGrammarElements, highlightNodes, highlightState, blurState) {
531
534
  vGrammarElements && vGrammarElements.length && vGrammarElements.forEach((el => {
532
535
  el.removeState([ blurState, highlightState ]), highlightNodes.includes(el.getDatum().key) ? el.addState(highlightState) : el.addState(blurState);