@visactor/vchart 1.13.21-alpha.0 → 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 (74) hide show
  1. package/build/es5/index.js +1 -1
  2. package/build/index.es.js +314 -327
  3. package/build/index.js +460 -468
  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.d.ts +0 -2
  18. package/cjs/core/vchart.js +2 -4
  19. package/cjs/core/vchart.js.map +1 -1
  20. package/cjs/data/transforms/sankey.d.ts +0 -2
  21. package/cjs/data/transforms/sankey.js +1 -2
  22. package/cjs/data/transforms/sankey.js.map +1 -1
  23. package/cjs/index.d.ts +2 -0
  24. package/cjs/index.js +2 -1
  25. package/cjs/index.js.map +1 -1
  26. package/cjs/mark/index.d.ts +3 -2
  27. package/cjs/mark/index.js +15 -1
  28. package/cjs/mark/index.js.map +1 -1
  29. package/cjs/plugin/chart/plugin-service.d.ts +0 -1
  30. package/cjs/plugin/chart/plugin-service.js +0 -3
  31. package/cjs/plugin/chart/plugin-service.js.map +1 -1
  32. package/cjs/plugin/chart/scroll/scroll.d.ts +2 -16
  33. package/cjs/plugin/chart/scroll/scroll.js +23 -98
  34. package/cjs/plugin/chart/scroll/scroll.js.map +1 -1
  35. package/cjs/series/sankey/interface.d.ts +0 -3
  36. package/cjs/series/sankey/interface.js.map +1 -1
  37. package/cjs/series/sankey/sankey.d.ts +7 -7
  38. package/cjs/series/sankey/sankey.js +167 -165
  39. package/cjs/series/sankey/sankey.js.map +1 -1
  40. package/esm/chart/index.d.ts +2 -2
  41. package/esm/chart/index.js +2 -2
  42. package/esm/chart/index.js.map +1 -1
  43. package/esm/chart/sankey/sankey-transformer.js +1 -1
  44. package/esm/chart/sankey/sankey-transformer.js.map +1 -1
  45. package/esm/constant/funnel.js +1 -2
  46. package/esm/constant/sunburst.js +2 -1
  47. package/esm/core/index.d.ts +1 -1
  48. package/esm/core/index.js +1 -1
  49. package/esm/core/index.js.map +1 -1
  50. package/esm/core/interface.js +1 -2
  51. package/esm/core/vchart.d.ts +0 -2
  52. package/esm/core/vchart.js +2 -4
  53. package/esm/core/vchart.js.map +1 -1
  54. package/esm/data/transforms/sankey.d.ts +0 -2
  55. package/esm/data/transforms/sankey.js +1 -2
  56. package/esm/data/transforms/sankey.js.map +1 -1
  57. package/esm/index.d.ts +2 -0
  58. package/esm/index.js +4 -0
  59. package/esm/index.js.map +1 -1
  60. package/esm/mark/index.d.ts +3 -2
  61. package/esm/mark/index.js +4 -2
  62. package/esm/mark/index.js.map +1 -1
  63. package/esm/plugin/chart/plugin-service.d.ts +0 -1
  64. package/esm/plugin/chart/plugin-service.js +0 -3
  65. package/esm/plugin/chart/plugin-service.js.map +1 -1
  66. package/esm/plugin/chart/scroll/scroll.d.ts +2 -16
  67. package/esm/plugin/chart/scroll/scroll.js +23 -102
  68. package/esm/plugin/chart/scroll/scroll.js.map +1 -1
  69. package/esm/series/sankey/interface.d.ts +0 -3
  70. package/esm/series/sankey/interface.js.map +1 -1
  71. package/esm/series/sankey/sankey.d.ts +7 -7
  72. package/esm/series/sankey/sankey.js +166 -164
  73. package/esm/series/sankey/sankey.js.map +1 -1
  74. package/package.json +4 -4
@@ -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() {
@@ -340,8 +178,7 @@ export class SankeySeries extends CartesianSeries {
340
178
  linkHeight: this._spec.linkHeight,
341
179
  equalNodeHeight: this._spec.equalNodeHeight,
342
180
  linkOverlap: this._spec.linkOverlap,
343
- inverse: this._spec.inverse,
344
- customLayout: this._spec.customLayout
181
+ inverse: this._spec.inverse
345
182
  },
346
183
  level: TransformLevel.sankeyLayout
347
184
  });
@@ -528,6 +365,171 @@ export class SankeySeries extends CartesianSeries {
528
365
  linksSeriesDataUpdate() {
529
366
  this._linksSeriesData.updateData();
530
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
+ }
531
533
  _highLightElements(vGrammarElements, highlightNodes, highlightState, blurState) {
532
534
  vGrammarElements && vGrammarElements.length && vGrammarElements.forEach((el => {
533
535
  el.removeState([ blurState, highlightState ]), highlightNodes.includes(el.getDatum().key) ? el.addState(highlightState) : el.addState(blurState);