@unovis/ts 1.3.6-beta.1 → 1.3.6-beta.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.
- package/components/graph/config.d.ts +22 -15
- package/components/graph/config.js +4 -2
- package/components/graph/config.js.map +1 -1
- package/components/graph/index.d.ts +7 -2
- package/components/graph/index.js +114 -110
- package/components/graph/index.js.map +1 -1
- package/components/graph/modules/layout.js +30 -19
- package/components/graph/modules/layout.js.map +1 -1
- package/components/graph/modules/link/helper.d.ts +4 -6
- package/components/graph/modules/link/helper.js +15 -25
- package/components/graph/modules/link/helper.js.map +1 -1
- package/components/graph/modules/link/index.d.ts +3 -3
- package/components/graph/modules/link/index.js +111 -89
- package/components/graph/modules/link/index.js.map +1 -1
- package/components/graph/modules/link/style.d.ts +5 -5
- package/components/graph/modules/link/style.js +26 -22
- package/components/graph/modules/link/style.js.map +1 -1
- package/components/graph/modules/node/helper.d.ts +1 -0
- package/components/graph/modules/node/helper.js +4 -1
- package/components/graph/modules/node/helper.js.map +1 -1
- package/components/graph/modules/node/index.js +28 -11
- package/components/graph/modules/node/index.js.map +1 -1
- package/components/graph/modules/node/style.d.ts +1 -1
- package/components/graph/modules/node/style.js +13 -6
- package/components/graph/modules/node/style.js.map +1 -1
- package/components/graph/modules/shape.d.ts +0 -2
- package/components/graph/modules/shape.js +7 -9
- package/components/graph/modules/shape.js.map +1 -1
- package/components/graph/types.d.ts +63 -5
- package/components/graph/types.js +1 -0
- package/components/graph/types.js.map +1 -1
- package/core/component/index.d.ts +3 -3
- package/core/component/index.js.map +1 -1
- package/package.json +1 -1
- package/utils/data.js +1 -1
- package/utils/data.js.map +1 -1
- package/utils/svg.d.ts +3 -0
- package/utils/svg.js +61 -0
- package/utils/svg.js.map +1 -0
- package/utils/text.js.map +1 -1
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import { getNumber,
|
|
1
|
+
import { getNumber, getValue } from '../../../../utils/data.js';
|
|
2
2
|
import { getColor, hexToBrightness } from '../../../../utils/color.js';
|
|
3
3
|
import { color } from 'd3-color';
|
|
4
|
+
import { GraphLinkArrowStyle } from '../../types.js';
|
|
4
5
|
import { getY, getX } from '../node/helper.js';
|
|
5
|
-
import { ZoomLevel } from '../zoom-levels.js';
|
|
6
6
|
|
|
7
7
|
// Utils
|
|
8
8
|
const getPolylineData = (d) => `${d.x1},${d.y1} ${(d.x1 + d.x2) / 2},${(d.y1 + d.y2) / 2} ${d.x2},${d.y2}`;
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const LINK_MARKER_HEIGHT = 8;
|
|
9
|
+
const LINK_MARKER_WIDTH = 9;
|
|
10
|
+
const LINK_MARKER_HEIGHT = 7;
|
|
12
11
|
function getLinkShift(link, spacing) {
|
|
13
12
|
const sourceNode = link.source;
|
|
14
13
|
const targetNode = link.target;
|
|
@@ -21,17 +20,6 @@ function getLinkShiftTransform(link, spacing) {
|
|
|
21
20
|
const { dx, dy } = getLinkShift(link, spacing);
|
|
22
21
|
return `translate(${dx}, ${dy})`;
|
|
23
22
|
}
|
|
24
|
-
function getLinkLabelShift(link, linkSpacing, shiftFromCenter = 0) {
|
|
25
|
-
const x1 = getX(link.source);
|
|
26
|
-
const y1 = getY(link.source);
|
|
27
|
-
const x2 = getX(link.target);
|
|
28
|
-
const y2 = getY(link.target);
|
|
29
|
-
const angle = Math.atan2(y2 - y1, x2 - x1);
|
|
30
|
-
const perpendicularShift = getLinkShift(link, linkSpacing);
|
|
31
|
-
const x = x1 + 0.5 * (x2 - x1) + shiftFromCenter * Math.cos(angle) + perpendicularShift.dx;
|
|
32
|
-
const y = y1 + 0.5 * (y2 - y1) + shiftFromCenter * Math.sin(angle) + perpendicularShift.dy;
|
|
33
|
-
return `translate(${x}, ${y})`;
|
|
34
|
-
}
|
|
35
23
|
function getLinkStrokeWidth(d, scale, config) {
|
|
36
24
|
const m = getNumber(d, config.linkWidth, d._indexGlobal);
|
|
37
25
|
return m / Math.pow(scale, 0.5);
|
|
@@ -49,18 +37,20 @@ function getLinkColor(link, config) {
|
|
|
49
37
|
const c = (_a = getColor(link, linkStroke, link._indexGlobal, true)) !== null && _a !== void 0 ? _a : 'var(--vis-graph-link-stroke-color)';
|
|
50
38
|
return c || null;
|
|
51
39
|
}
|
|
52
|
-
function
|
|
53
|
-
const
|
|
54
|
-
if (
|
|
55
|
-
return
|
|
56
|
-
|
|
57
|
-
|
|
40
|
+
function getLinkArrowStyle(d, config) {
|
|
41
|
+
const linkArrowValue = getValue(d, config.linkArrow, d._indexGlobal);
|
|
42
|
+
if (!linkArrowValue)
|
|
43
|
+
return undefined;
|
|
44
|
+
else if (linkArrowValue === GraphLinkArrowStyle.Double)
|
|
45
|
+
return linkArrowValue;
|
|
46
|
+
else
|
|
47
|
+
return GraphLinkArrowStyle.Single;
|
|
58
48
|
}
|
|
59
49
|
function getArrowPath() {
|
|
60
|
-
return `
|
|
50
|
+
return `M${-LINK_MARKER_WIDTH / 2},${-LINK_MARKER_HEIGHT / 2} V${LINK_MARKER_HEIGHT / 2} L${LINK_MARKER_WIDTH / 2},0 Z`;
|
|
61
51
|
}
|
|
62
52
|
function getDoubleArrowPath() {
|
|
63
|
-
return `
|
|
53
|
+
return `M${-LINK_MARKER_WIDTH / 2},0 L${LINK_MARKER_WIDTH / 2},${-LINK_MARKER_HEIGHT / 2} L${LINK_MARKER_WIDTH * 1.5},0 L${LINK_MARKER_WIDTH / 2},${LINK_MARKER_HEIGHT / 2} Z`;
|
|
64
54
|
}
|
|
65
55
|
function getLinkLabelTextColor(label) {
|
|
66
56
|
if (!label.color)
|
|
@@ -70,5 +60,5 @@ function getLinkLabelTextColor(label) {
|
|
|
70
60
|
return brightness > 0.65 ? 'var(--vis-graph-link-label-text-color-dark)' : 'var(--vis-graph-link-label-text-color-bright)';
|
|
71
61
|
}
|
|
72
62
|
|
|
73
|
-
export {
|
|
63
|
+
export { LINK_MARKER_HEIGHT, LINK_MARKER_WIDTH, getArrowPath, getDoubleArrowPath, getLinkArrowStyle, getLinkBandWidth, getLinkColor, getLinkLabelTextColor, getLinkShift, getLinkShiftTransform, getLinkStrokeWidth, getPolylineData };
|
|
74
64
|
//# sourceMappingURL=helper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helper.js","sources":["../../../../../src/components/graph/modules/link/helper.ts"],"sourcesContent":["// Utils\nimport { getNumber,
|
|
1
|
+
{"version":3,"file":"helper.js","sources":["../../../../../src/components/graph/modules/link/helper.ts"],"sourcesContent":["// Utils\nimport { getNumber, getValue } from 'utils/data'\nimport { getColor, hexToBrightness } from 'utils/color'\nimport { color } from 'd3-color'\n\n// Types\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\n\n// Local Types\nimport { GraphLink, GraphLinkArrowStyle, GraphCircleLabel } from '../../types'\n\n// Config\nimport { GraphConfigInterface } from '../../config'\n\n// Helpers\nimport { getX, getY } from '../node/helper'\n\nexport const getPolylineData = (d: { x1: number; x2: number; y1: number; y2: number}): string => `${d.x1},${d.y1} ${(d.x1 + d.x2) / 2},${(d.y1 + d.y2) / 2} ${d.x2},${d.y2}`\n\nexport const LINK_MARKER_WIDTH = 9\nexport const LINK_MARKER_HEIGHT = 7\n\nexport function getLinkShift (link: GraphLink, spacing: number): { dx: number; dy: number } {\n const sourceNode = link.source\n const targetNode = link.target\n const angle = Math.atan2(getY(targetNode) - getY(sourceNode), getX(targetNode) - getX(sourceNode)) - Math.PI / 2\n const dx = Math.cos(angle) * spacing * link._direction * (link._index - (link._neighbours - 1) / 2)\n const dy = Math.sin(angle) * spacing * link._direction * (link._index - (link._neighbours - 1) / 2)\n return { dx, dy }\n}\n\nexport function getLinkShiftTransform (link: GraphLink, spacing: number): string {\n const { dx, dy } = getLinkShift(link, spacing)\n return `translate(${dx}, ${dy})`\n}\n\nexport function getLinkStrokeWidth<N extends GraphInputNode, L extends GraphInputLink> (\n d: GraphLink<N, L>,\n scale: number,\n config: GraphConfigInterface<N, L>\n): number {\n const m = getNumber(d, config.linkWidth, d._indexGlobal)\n return m / Math.pow(scale, 0.5)\n}\n\nexport function getLinkBandWidth<N extends GraphInputNode, L extends GraphInputLink> (\n d: GraphLink<N, L>,\n scale: number,\n config: GraphConfigInterface<N, L>\n): number {\n const { nodeSize, linkBandWidth } = config\n const sourceNodeSize = getNumber(d.source, nodeSize, d.source._index)\n const targetNodeSize = getNumber(d.target, nodeSize, d.target._index)\n const minNodeSize = Math.min(sourceNodeSize, targetNodeSize)\n return Math.min(minNodeSize, getNumber(d, linkBandWidth, d._indexGlobal) / Math.pow(scale || 1, 0.5)) || 0\n}\n\nexport function getLinkColor<N extends GraphInputNode, L extends GraphInputLink> (link: GraphLink<N, L>, config: GraphConfigInterface<N, L>): string {\n const { linkStroke } = config\n const c = getColor(link, linkStroke, link._indexGlobal, true) ?? 'var(--vis-graph-link-stroke-color)'\n return c || null\n}\n\nexport function getLinkArrowStyle<N extends GraphInputNode, L extends GraphInputLink> (\n d: GraphLink<N, L>,\n config: GraphConfigInterface<N, L>\n): GraphLinkArrowStyle | undefined {\n const linkArrowValue = getValue<GraphLink<N, L>, GraphLinkArrowStyle | string | boolean>(d, config.linkArrow, d._indexGlobal)\n\n if (!linkArrowValue) return undefined\n else if (linkArrowValue === GraphLinkArrowStyle.Double) return linkArrowValue as GraphLinkArrowStyle.Double\n else return GraphLinkArrowStyle.Single\n}\n\nexport function getArrowPath (): string {\n return `M${-LINK_MARKER_WIDTH / 2},${-LINK_MARKER_HEIGHT / 2} V${LINK_MARKER_HEIGHT / 2} L${LINK_MARKER_WIDTH / 2},0 Z`\n}\n\nexport function getDoubleArrowPath (): string {\n return `M${-LINK_MARKER_WIDTH / 2},0 L${LINK_MARKER_WIDTH / 2},${-LINK_MARKER_HEIGHT / 2} L${LINK_MARKER_WIDTH * 1.5},0 L${LINK_MARKER_WIDTH / 2},${LINK_MARKER_HEIGHT / 2} Z`\n}\n\nexport function getLinkLabelTextColor (label: GraphCircleLabel): string {\n if (!label.color) return null\n\n const hex = color(label.color).hex()\n const brightness = hexToBrightness(hex)\n return brightness > 0.65 ? 'var(--vis-graph-link-label-text-color-dark)' : 'var(--vis-graph-link-label-text-color-bright)'\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Selection } from 'd3-selection';
|
|
2
2
|
import { GraphInputLink, GraphInputNode } from "../../../../types/graph";
|
|
3
|
-
import { GraphLink } from '../../types';
|
|
3
|
+
import { GraphLink, GraphLinkArrowStyle } from '../../types';
|
|
4
4
|
import { GraphConfigInterface } from '../../config';
|
|
5
5
|
export declare function createLinks<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>): void;
|
|
6
6
|
export declare function updateSelectedLinks<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>, config: GraphConfigInterface<N, L>, scale: number): void;
|
|
7
|
-
export declare function updateLinks<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>, config: GraphConfigInterface<N, L>, duration: number, scale: number,
|
|
7
|
+
export declare function updateLinks<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>, config: GraphConfigInterface<N, L>, duration: number, scale: number, getLinkArrowDefId: (arrow: GraphLinkArrowStyle | undefined) => string): void;
|
|
8
8
|
export declare function removeLinks<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>, config: GraphConfigInterface<N, L>, duration: number): void;
|
|
9
9
|
export declare function animateLinkFlow<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>, config: GraphConfigInterface<N, L>, scale: number): void;
|
|
10
|
-
export declare function zoomLinks<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>, config: GraphConfigInterface<N, L>, scale: number
|
|
10
|
+
export declare function zoomLinks<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>, config: GraphConfigInterface<N, L>, scale: number): void;
|
|
11
11
|
export declare const zoomLinksThrottled: import("throttle-debounce").throttle<typeof zoomLinks>;
|
|
@@ -1,40 +1,44 @@
|
|
|
1
1
|
import { select } from 'd3-selection';
|
|
2
2
|
import { range } from 'd3-array';
|
|
3
|
-
import
|
|
3
|
+
import toPx from 'to-px';
|
|
4
|
+
import { getBoolean, getValue, getNumber, throttle } from '../../../../utils/data.js';
|
|
4
5
|
import { smartTransition } from '../../../../utils/d3.js';
|
|
5
|
-
import {
|
|
6
|
+
import { getCSSVariableValueInPixels } from '../../../../utils/misc.js';
|
|
7
|
+
import { estimateStringPixelLength } from '../../../../utils/text.js';
|
|
6
8
|
import { GraphLinkStyle } from '../../types.js';
|
|
7
9
|
import { getX, getY } from '../node/helper.js';
|
|
8
|
-
import { getLinkBandWidth,
|
|
10
|
+
import { getLinkBandWidth, getLinkColor, getLinkShiftTransform, getLinkStrokeWidth, getLinkArrowStyle, LINK_MARKER_WIDTH, getLinkLabelTextColor } from './helper.js';
|
|
9
11
|
import { ZoomLevel } from '../zoom-levels.js';
|
|
10
12
|
import { zoomOutLevel2 } from '../../style.js';
|
|
11
|
-
import { linkSupport, link, linkBand, flowGroup, flowCircle,
|
|
13
|
+
import { linkSupport, link, linkBand, linkArrow, flowGroup, flowCircle, linkLabelGroup, linkLabelBackground, linkLabelContent, greyedOutLink, linkDashed } from './style.js';
|
|
12
14
|
|
|
13
15
|
function createLinks(selection) {
|
|
14
16
|
selection.attr('opacity', 0);
|
|
15
|
-
selection.append('
|
|
17
|
+
selection.append('path')
|
|
16
18
|
.attr('class', linkSupport);
|
|
17
|
-
selection.append('
|
|
19
|
+
selection.append('path')
|
|
18
20
|
.attr('class', link);
|
|
19
|
-
selection.append('
|
|
20
|
-
.attr('class', linkBand)
|
|
21
|
-
|
|
22
|
-
.attr('
|
|
23
|
-
.attr('x2', d => getX(d.target))
|
|
24
|
-
.attr('y2', d => getY(d.target));
|
|
21
|
+
selection.append('path')
|
|
22
|
+
.attr('class', linkBand);
|
|
23
|
+
selection.append('use')
|
|
24
|
+
.attr('class', linkArrow);
|
|
25
25
|
selection.append('g')
|
|
26
26
|
.attr('class', flowGroup)
|
|
27
27
|
.selectAll(`.${flowCircle}`)
|
|
28
28
|
.data(range(0, 6)).enter()
|
|
29
29
|
.append('circle')
|
|
30
30
|
.attr('class', flowCircle);
|
|
31
|
-
selection.append('g')
|
|
32
|
-
.attr('class',
|
|
31
|
+
const linkLabelGroup$1 = selection.append('g')
|
|
32
|
+
.attr('class', linkLabelGroup);
|
|
33
|
+
linkLabelGroup$1.append('rect')
|
|
34
|
+
.attr('class', linkLabelBackground);
|
|
35
|
+
linkLabelGroup$1.append('text')
|
|
36
|
+
.attr('class', linkLabelContent);
|
|
33
37
|
}
|
|
34
38
|
function updateSelectedLinks(selection, config, scale) {
|
|
35
39
|
const isGreyedOut = (d, i) => getBoolean(d, config.linkDisabled, i) || d._state.greyout;
|
|
36
40
|
selection
|
|
37
|
-
.classed(
|
|
41
|
+
.classed(greyedOutLink, (d, i) => isGreyedOut(d, i));
|
|
38
42
|
selection.each((d, i, elements) => {
|
|
39
43
|
const element = elements[i];
|
|
40
44
|
const group = select(element);
|
|
@@ -48,105 +52,127 @@ function updateSelectedLinks(selection, config, scale) {
|
|
|
48
52
|
: d._state.hovered ? getLinkBandWidth(d, scale, config) + 10 : null);
|
|
49
53
|
});
|
|
50
54
|
}
|
|
51
|
-
function updateLinks(selection, config, duration, scale = 1,
|
|
52
|
-
const { linkFlowParticleSize, linkStyle, linkFlow,
|
|
55
|
+
function updateLinks(selection, config, duration, scale = 1, getLinkArrowDefId) {
|
|
56
|
+
const { linkFlowParticleSize, linkStyle, linkFlow, linkLabel, linkLabelShiftFromCenter } = config;
|
|
53
57
|
if (!selection.size())
|
|
54
58
|
return;
|
|
55
59
|
selection
|
|
56
60
|
.classed(linkDashed, d => getValue(d, linkStyle, d._indexGlobal) === GraphLinkStyle.Dashed);
|
|
57
61
|
selection.each((d, i, elements) => {
|
|
62
|
+
var _a, _b, _c, _d, _e;
|
|
58
63
|
const element = elements[i];
|
|
59
64
|
const linkGroup = select(element);
|
|
60
65
|
const link$1 = linkGroup.select(`.${link}`);
|
|
61
66
|
const linkBand$1 = linkGroup.select(`.${linkBand}`);
|
|
62
67
|
const linkSupport$1 = linkGroup.select(`.${linkSupport}`);
|
|
68
|
+
const linkArrow$1 = linkGroup.select(`.${linkArrow}`);
|
|
63
69
|
const flowGroup$1 = linkGroup.select(`.${flowGroup}`);
|
|
70
|
+
const linkColor = getLinkColor(d, config);
|
|
71
|
+
const linkShiftTransform = getLinkShiftTransform(d, config.linkNeighborSpacing);
|
|
72
|
+
const linkLabelDatum = getValue(d, linkLabel, d._indexGlobal);
|
|
73
|
+
const linkLabelText = linkLabelDatum ? (_a = linkLabelDatum.text) === null || _a === void 0 ? void 0 : _a.toString() : undefined;
|
|
64
74
|
const x1 = getX(d.source);
|
|
65
75
|
const y1 = getY(d.source);
|
|
66
76
|
const x2 = getX(d.target);
|
|
67
77
|
const y2 = getY(d.target);
|
|
78
|
+
const curvature = (_b = getNumber(d, config.linkCurvature, i)) !== null && _b !== void 0 ? _b : 0;
|
|
79
|
+
const cp1x = x1 + (x2 - x1) * 0.5 * curvature;
|
|
80
|
+
const cp1y = y1 + (y2 - y1) * 0.0 * curvature;
|
|
81
|
+
const cp2x = x1 + (x2 - x1) * 0.5 * curvature;
|
|
82
|
+
const cp2y = y1 + (y2 - y1) * 1.0 * curvature;
|
|
83
|
+
const pathData = `M${x1},${y1} C${cp1x},${cp1y} ${cp2x},${cp2y} ${x2},${y2}`;
|
|
68
84
|
link$1
|
|
69
85
|
.attr('class', link)
|
|
70
|
-
.attr('marker-mid', getHref(d, getMarkerId))
|
|
71
86
|
.style('stroke-width', getLinkStrokeWidth(d, scale, config))
|
|
72
|
-
.style('stroke',
|
|
73
|
-
.attr('transform',
|
|
87
|
+
.style('stroke', linkColor)
|
|
88
|
+
.attr('transform', linkShiftTransform);
|
|
74
89
|
smartTransition(link$1, duration)
|
|
75
|
-
.attr('
|
|
90
|
+
.attr('d', pathData);
|
|
76
91
|
linkBand$1
|
|
77
92
|
.attr('class', linkBand)
|
|
78
|
-
.attr('transform',
|
|
93
|
+
.attr('transform', linkShiftTransform)
|
|
79
94
|
.style('stroke-width', getLinkBandWidth(d, scale, config))
|
|
80
|
-
.style('stroke',
|
|
95
|
+
.style('stroke', linkColor);
|
|
81
96
|
smartTransition(linkBand$1, duration)
|
|
82
|
-
.attr('
|
|
83
|
-
.attr('y1', y1)
|
|
84
|
-
.attr('x2', x2)
|
|
85
|
-
.attr('y2', y2);
|
|
97
|
+
.attr('d', pathData);
|
|
86
98
|
linkSupport$1
|
|
87
|
-
.style('stroke',
|
|
88
|
-
.attr('transform',
|
|
89
|
-
.attr('
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
99
|
+
.style('stroke', linkColor)
|
|
100
|
+
.attr('transform', linkShiftTransform)
|
|
101
|
+
.attr('d', pathData);
|
|
102
|
+
// Arrow
|
|
103
|
+
const linkArrowStyle = getLinkArrowStyle(d, config);
|
|
104
|
+
const linkPathElement = linkSupport$1.node();
|
|
105
|
+
const pathLength = linkPathElement.getTotalLength();
|
|
106
|
+
if (linkArrowStyle) {
|
|
107
|
+
const arrowPos = pathLength * (linkLabelText ? 0.65 : 0.5);
|
|
108
|
+
const p1 = linkPathElement.getPointAtLength(arrowPos);
|
|
109
|
+
const p2 = linkPathElement.getPointAtLength(arrowPos + 1); // A point very close to p1
|
|
110
|
+
// Calculate the angle for the arrowhead
|
|
111
|
+
const angle = Math.atan2(p2.y - p1.y, p2.x - p1.x) * (180 / Math.PI);
|
|
112
|
+
const arrowWasShownBefore = linkArrow$1.attr('href');
|
|
113
|
+
linkArrow$1
|
|
114
|
+
.attr('href', `#${getLinkArrowDefId(linkArrowStyle)}`);
|
|
115
|
+
smartTransition(linkArrow$1, arrowWasShownBefore ? duration : 0)
|
|
116
|
+
.attr('fill', linkColor)
|
|
117
|
+
.attr('transform', `translate(${p1.x}, ${p1.y}) rotate(${angle})`);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
linkArrow$1.attr('href', null);
|
|
121
|
+
}
|
|
122
|
+
// Particle Flow
|
|
93
123
|
flowGroup$1
|
|
94
|
-
.attr('transform',
|
|
124
|
+
.attr('transform', linkShiftTransform)
|
|
95
125
|
.style('display', getBoolean(d, linkFlow, d._indexGlobal) ? null : 'none')
|
|
96
126
|
.style('opacity', 0);
|
|
97
127
|
flowGroup$1
|
|
98
128
|
.selectAll(`.${flowCircle}`)
|
|
99
129
|
.attr('r', linkFlowParticleSize / scale)
|
|
100
|
-
.style('fill',
|
|
130
|
+
.style('fill', linkColor);
|
|
101
131
|
smartTransition(flowGroup$1, duration)
|
|
102
132
|
.style('opacity', scale < ZoomLevel.Level2 ? 0 : 1);
|
|
103
133
|
// Labels
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
.
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
.
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
.
|
|
130
|
-
|
|
131
|
-
.
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
smartTransition(labelsExit.select(`.${labelCircle}`), duration)
|
|
145
|
-
.attr('r', 0);
|
|
146
|
-
smartTransition(labelsExit, duration)
|
|
147
|
-
.style('opacity', 0)
|
|
148
|
-
.remove();
|
|
134
|
+
const linkLabelGroup$1 = linkGroup.select(`.${linkLabelGroup}`);
|
|
135
|
+
if (linkLabelText) {
|
|
136
|
+
const linkMarkerWidth = linkArrowStyle ? LINK_MARKER_WIDTH * 2 : 0;
|
|
137
|
+
const linkLabelShift = getBoolean(d, linkLabelShiftFromCenter, d._indexGlobal) ? -linkMarkerWidth + 4 : 0;
|
|
138
|
+
const linkLabelPos = linkPathElement.getPointAtLength(pathLength / 2 + linkLabelShift);
|
|
139
|
+
const linkLabelTranslate = `translate(${linkLabelPos.x}, ${linkLabelPos.y})`;
|
|
140
|
+
const linkLabelBackground$1 = linkLabelGroup$1.select(`.${linkLabelBackground}`);
|
|
141
|
+
const linkLabelContent$1 = linkLabelGroup$1.select(`.${linkLabelContent}`);
|
|
142
|
+
// If the label was hidden or didn't have text before, we need to set the initial position
|
|
143
|
+
if (!linkLabelContent$1.text() || linkLabelContent$1.attr('hidden')) {
|
|
144
|
+
linkLabelGroup$1.attr('transform', linkLabelTranslate);
|
|
145
|
+
}
|
|
146
|
+
linkLabelGroup$1.attr('hidden', null)
|
|
147
|
+
.style('cursor', linkLabelDatum.cursor);
|
|
148
|
+
smartTransition(linkLabelGroup$1, duration)
|
|
149
|
+
.attr('transform', linkLabelTranslate)
|
|
150
|
+
.style('opacity', 1);
|
|
151
|
+
linkLabelContent$1
|
|
152
|
+
.text(linkLabelText)
|
|
153
|
+
.attr('dy', '0.1em')
|
|
154
|
+
.style('font-size', linkLabelDatum.fontSize)
|
|
155
|
+
.style('fill', (_c = linkLabelDatum.textColor) !== null && _c !== void 0 ? _c : getLinkLabelTextColor(linkLabelDatum));
|
|
156
|
+
const shouldBeRenderedAsCircle = linkLabelText.length <= 2;
|
|
157
|
+
const linkLabelPaddingVertical = 4;
|
|
158
|
+
const linkLabelPaddingHorizontal = shouldBeRenderedAsCircle ? linkLabelPaddingVertical : 8;
|
|
159
|
+
const linkLabelFontSize = (_d = toPx(linkLabelDatum.fontSize)) !== null && _d !== void 0 ? _d : getCSSVariableValueInPixels('var(--vis-graph-link-label-font-size)', linkLabelContent$1.node());
|
|
160
|
+
const linkLabelWidthPx = estimateStringPixelLength(linkLabelText, linkLabelFontSize);
|
|
161
|
+
const linkLabelBackgroundBorderRadius = (_e = linkLabelDatum.radius) !== null && _e !== void 0 ? _e : (shouldBeRenderedAsCircle ? linkLabelFontSize : 4);
|
|
162
|
+
const linkLabelBackgroundWidth = (shouldBeRenderedAsCircle ? linkLabelFontSize : linkLabelWidthPx);
|
|
163
|
+
linkLabelBackground$1
|
|
164
|
+
.attr('x', -linkLabelBackgroundWidth / 2 - linkLabelPaddingHorizontal)
|
|
165
|
+
.attr('y', -linkLabelFontSize / 2 - linkLabelPaddingVertical)
|
|
166
|
+
.attr('width', linkLabelBackgroundWidth + linkLabelPaddingHorizontal * 2)
|
|
167
|
+
.attr('height', linkLabelFontSize + linkLabelPaddingVertical * 2)
|
|
168
|
+
.attr('rx', linkLabelBackgroundBorderRadius)
|
|
169
|
+
.style('fill', linkLabelDatum.color);
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
linkLabelGroup$1.attr('hidden', true);
|
|
173
|
+
}
|
|
149
174
|
});
|
|
175
|
+
// Pointer Events
|
|
150
176
|
if (duration > 0) {
|
|
151
177
|
selection.attr('pointer-events', 'none');
|
|
152
178
|
const t = smartTransition(selection, duration);
|
|
@@ -176,6 +202,8 @@ function animateLinkFlow(selection, config, scale) {
|
|
|
176
202
|
const element = elements[i];
|
|
177
203
|
const linkGroup = select(element);
|
|
178
204
|
const flowGroup$1 = linkGroup.select(`.${flowGroup}`);
|
|
205
|
+
const linkPathElement = linkGroup.select(`.${linkSupport}`).node();
|
|
206
|
+
const pathLength = linkPathElement.getTotalLength();
|
|
179
207
|
if (!getBoolean(d, linkFlow, d._indexGlobal))
|
|
180
208
|
return;
|
|
181
209
|
const t = d._state.flowAnimTime;
|
|
@@ -183,24 +211,18 @@ function animateLinkFlow(selection, config, scale) {
|
|
|
183
211
|
circles
|
|
184
212
|
.attr('transform', index => {
|
|
185
213
|
const tt = (t + (+index) / (circles.size() - 1)) % 1;
|
|
186
|
-
const
|
|
187
|
-
|
|
188
|
-
const x2 = getX(d.target);
|
|
189
|
-
const y2 = getY(d.target);
|
|
190
|
-
const x = x1 + tt * (x2 - x1);
|
|
191
|
-
const y = y1 + tt * (y2 - y1);
|
|
192
|
-
return `translate(${x}, ${y})`;
|
|
214
|
+
const p = linkPathElement.getPointAtLength(tt * pathLength);
|
|
215
|
+
return `translate(${p.x}, ${p.y})`;
|
|
193
216
|
});
|
|
194
217
|
});
|
|
195
218
|
}
|
|
196
|
-
function zoomLinks(selection, config, scale
|
|
219
|
+
function zoomLinks(selection, config, scale) {
|
|
197
220
|
const { linkFlowParticleSize } = config;
|
|
198
221
|
selection.classed(zoomOutLevel2, scale < ZoomLevel.Level2);
|
|
199
222
|
selection.selectAll(`.${flowCircle}`)
|
|
200
223
|
.attr('r', linkFlowParticleSize / scale);
|
|
201
224
|
const linkElements = selection.selectAll(`.${link}`);
|
|
202
225
|
linkElements
|
|
203
|
-
.attr('marker-mid', d => getHref(d, getMarkerId))
|
|
204
226
|
.style('stroke-width', d => getLinkStrokeWidth(d, scale, config));
|
|
205
227
|
const linkBandElements = selection.selectAll(`.${linkBand}`);
|
|
206
228
|
linkBandElements
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/components/graph/modules/link/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { range } from 'd3-array'\nimport { Transition } from 'd3-transition'\n\n// Utils\nimport { throttle, getValue, getBoolean } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\nimport { getHref } from 'utils/misc'\n\n// Types\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\n\n// Local Types\nimport { GraphCircleLabel, GraphLink, GraphLinkArrowStyle, GraphLinkStyle } from '../../types'\n\n// Config\nimport { GraphConfigInterface } from '../../config'\n\n// Helpers\nimport { getX, getY } from '../node/helper'\nimport {\n getPolylineData,\n getLinkShiftTransform,\n getLinkLabelShift,\n getLinkStrokeWidth,\n getLinkBandWidth,\n getLinkColor,\n getLinkLabelTextColor,\n LINK_LABEL_RADIUS,\n LINK_MARKER_WIDTH,\n} from './helper'\nimport { ZoomLevel } from '../zoom-levels'\n\n// Styles\nimport * as generalSelectors from '../../style'\nimport * as linkSelectors from './style'\n\nexport function createLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>\n): void {\n selection.attr('opacity', 0)\n\n selection.append('line')\n .attr('class', linkSelectors.linkSupport)\n\n selection.append('polyline')\n .attr('class', linkSelectors.link)\n\n selection.append('line')\n .attr('class', linkSelectors.linkBand)\n .attr('x1', d => getX(d.source))\n .attr('y1', d => getY(d.source))\n .attr('x2', d => getX(d.target))\n .attr('y2', d => getY(d.target))\n\n selection.append('g')\n .attr('class', linkSelectors.flowGroup)\n .selectAll(`.${linkSelectors.flowCircle}`)\n .data(range(0, 6)).enter()\n .append('circle')\n .attr('class', linkSelectors.flowCircle)\n\n selection.append('g')\n .attr('class', linkSelectors.labelGroups)\n}\n\nexport function updateSelectedLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n scale: number\n): void {\n const isGreyedOut = (d: GraphLink<N, L>, i: number): boolean => getBoolean(d, config.linkDisabled, i) || d._state.greyout\n selection\n .classed(linkSelectors.greyout, (d, i) => isGreyedOut(d, i))\n\n selection.each((d, i, elements) => {\n const element = elements[i]\n const group = select(element)\n group.select(`.${linkSelectors.link}`)\n group.select(`.${linkSelectors.linkBand}`)\n const linkSupport = group.select(`.${linkSelectors.linkSupport}`)\n\n linkSupport\n .style('stroke-opacity', (d._state.hovered || d._state.selected) ? 0.2 : 0)\n .style('stroke-width',\n d._state.selected\n ? getLinkBandWidth(d, scale, config) + 5\n : d._state.hovered ? getLinkBandWidth(d, scale, config) + 10 : null\n )\n })\n}\n\nexport function updateLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n duration: number,\n scale = 1,\n getMarkerId: (d: GraphLink) => string\n): void {\n const { linkFlowParticleSize, linkStyle, linkFlow, linkArrow, linkLabel, linkLabelShiftFromCenter } = config\n if (!selection.size()) return\n\n selection\n .classed(\n linkSelectors.linkDashed,\n d => getValue<GraphLink<N, L>, GraphLinkStyle>(d, linkStyle, d._indexGlobal) === GraphLinkStyle.Dashed\n )\n\n selection.each((d, i, elements) => {\n const element = elements[i]\n const linkGroup = select(element)\n const link = linkGroup.select(`.${linkSelectors.link}`)\n const linkBand = linkGroup.select(`.${linkSelectors.linkBand}`)\n const linkSupport = linkGroup.select(`.${linkSelectors.linkSupport}`)\n const flowGroup = linkGroup.select(`.${linkSelectors.flowGroup}`)\n\n const x1 = getX(d.source)\n const y1 = getY(d.source)\n const x2 = getX(d.target)\n const y2 = getY(d.target)\n\n link\n .attr('class', linkSelectors.link)\n .attr('marker-mid', getHref(d, getMarkerId))\n .style('stroke-width', getLinkStrokeWidth(d, scale, config))\n .style('stroke', getLinkColor(d, config))\n .attr('transform', getLinkShiftTransform(d, config.linkNeighborSpacing))\n\n smartTransition(link, duration)\n .attr('points', getPolylineData({ x1, y1, x2, y2 }))\n\n linkBand\n .attr('class', linkSelectors.linkBand)\n .attr('transform', getLinkShiftTransform(d, config.linkNeighborSpacing))\n .style('stroke-width', getLinkBandWidth(d, scale, config))\n .style('stroke', getLinkColor(d, config))\n\n smartTransition(linkBand, duration)\n .attr('x1', x1)\n .attr('y1', y1)\n .attr('x2', x2)\n .attr('y2', y2)\n\n linkSupport\n .style('stroke', getLinkColor(d, config))\n .attr('transform', getLinkShiftTransform(d, config.linkNeighborSpacing))\n .attr('x1', x1)\n .attr('y1', y1)\n .attr('x2', x2)\n .attr('y2', y2)\n\n flowGroup\n .attr('transform', getLinkShiftTransform(d, config.linkNeighborSpacing))\n .style('display', getBoolean(d, linkFlow, d._indexGlobal) ? null : 'none')\n .style('opacity', 0)\n\n flowGroup\n .selectAll(`.${linkSelectors.flowCircle}`)\n .attr('r', linkFlowParticleSize / scale)\n .style('fill', getLinkColor(d, config))\n\n smartTransition(flowGroup, duration)\n .style('opacity', scale < ZoomLevel.Level2 ? 0 : 1)\n\n // Labels\n const labelGroups = linkGroup.selectAll(`.${linkSelectors.labelGroups}`)\n const labelDatum = getValue<GraphLink<N, L>, GraphCircleLabel>(d, linkLabel, d._indexGlobal)\n const markerWidth = getValue<GraphLink<N, L>, GraphLinkArrowStyle>(d, linkArrow, d._indexGlobal) ? LINK_MARKER_WIDTH * 2 : 0\n const labelShift = getBoolean(d, linkLabelShiftFromCenter, d._indexGlobal) ? -markerWidth + 4 : 0\n const labelTranslate = getLinkLabelShift(d, config.linkNeighborSpacing, labelShift)\n\n const labels = labelGroups\n .selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.labelGroup}`)\n .data(labelDatum && labelDatum.text ? [labelDatum] : [])\n\n // Enter\n const labelsEnter = labels.enter().append('g')\n .attr('class', linkSelectors.labelGroup)\n .attr('transform', labelTranslate)\n .style('opacity', 0)\n\n labelsEnter.append('circle')\n .attr('class', linkSelectors.labelCircle)\n .attr('r', 0)\n\n labelsEnter.append('text')\n .attr('class', linkSelectors.labelContent)\n\n // Update\n const labelsUpdate = labels.merge(labelsEnter)\n\n smartTransition(labelsUpdate.select(`.${linkSelectors.labelCircle}`), duration)\n .attr('r', label => label.radius ?? LINK_LABEL_RADIUS)\n .style('fill', label => label.color)\n\n labelsUpdate.select(`.${linkSelectors.labelContent}`)\n .text(label => label.text)\n .attr('dy', '0.1em')\n .style('fill', label => label.textColor ?? getLinkLabelTextColor(label))\n .style('font-size', label => {\n if (label.fontSize) return label.fontSize\n const radius = label.radius ?? LINK_LABEL_RADIUS\n return `${radius / Math.pow(label.text.toString().length, 0.4)}px`\n })\n\n smartTransition(labelsUpdate, duration)\n .attr('transform', labelTranslate)\n .style('cursor', label => label.cursor)\n .style('opacity', 1)\n\n // Exit\n const labelsExit = labels.exit()\n smartTransition(labelsExit.select(`.${linkSelectors.labelCircle}`), duration)\n .attr('r', 0)\n\n smartTransition(labelsExit, duration)\n .style('opacity', 0)\n .remove()\n })\n\n if (duration > 0) {\n selection.attr('pointer-events', 'none')\n const t = smartTransition(selection, duration) as Transition<SVGGElement, GraphLink<N, L>, SVGGElement, GraphLink<N, L>>\n t\n .attr('opacity', 1)\n .on('end interrupt', (d, i, elements) => {\n select(elements[i])\n .attr('pointer-events', 'stroke')\n .attr('opacity', 1)\n })\n } else {\n selection.attr('opacity', 1)\n }\n\n updateSelectedLinks(selection, config, scale)\n}\n\nexport function removeLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n duration: number\n): void {\n smartTransition(selection, duration / 2)\n .attr('opacity', 0)\n .remove()\n}\n\nexport function animateLinkFlow<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n scale: number\n): void {\n const { linkFlow } = config\n if (scale < ZoomLevel.Level2) return\n\n selection.each((d, i, elements) => {\n const element = elements[i]\n const linkGroup = select(element)\n const flowGroup = linkGroup.select(`.${linkSelectors.flowGroup}`)\n\n if (!getBoolean(d, linkFlow, d._indexGlobal)) return\n const t = d._state.flowAnimTime\n const circles = flowGroup.selectAll(`.${linkSelectors.flowCircle}`)\n\n circles\n .attr('transform', index => {\n const tt = (t + (+index) / (circles.size() - 1)) % 1\n const x1 = getX(d.source)\n const y1 = getY(d.source)\n const x2 = getX(d.target)\n const y2 = getY(d.target)\n\n const x = x1 + tt * (x2 - x1)\n const y = y1 + tt * (y2 - y1)\n return `translate(${x}, ${y})`\n })\n })\n}\n\nexport function zoomLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n scale: number,\n getMarkerId: (d: GraphLink) => string\n): void {\n const { linkFlowParticleSize } = config\n\n selection.classed(generalSelectors.zoomOutLevel2, scale < ZoomLevel.Level2)\n selection.selectAll(`.${linkSelectors.flowCircle}`)\n .attr('r', linkFlowParticleSize / scale)\n\n const linkElements = selection.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.link}`)\n linkElements\n .attr('marker-mid', d => getHref(d, getMarkerId))\n .style('stroke-width', d => getLinkStrokeWidth(d, scale, config))\n\n const linkBandElements = selection.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.linkBand}`)\n linkBandElements\n .style('stroke-width', d => getLinkBandWidth(d, scale, config))\n}\n\nexport const zoomLinksThrottled = throttle(zoomLinks, 500)\n"],"names":["linkSelectors.linkSupport","linkSelectors.link","linkSelectors.linkBand","linkSelectors.flowGroup","linkSelectors.flowCircle","linkSelectors.labelGroups","linkSelectors.greyout","linkSupport","linkSelectors.linkDashed","link","linkBand","flowGroup","labelGroups","linkSelectors.labelGroup","linkSelectors.labelCircle","linkSelectors.labelContent","generalSelectors.zoomOutLevel2"],"mappings":";;;;;;;;;;;;AAqCM,SAAU,WAAW,CACzB,SAAwE,EAAA;AAExE,IAAA,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;AAE5B,IAAA,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;AACrB,SAAA,IAAI,CAAC,OAAO,EAAEA,WAAyB,CAAC,CAAA;AAE3C,IAAA,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC;AACzB,SAAA,IAAI,CAAC,OAAO,EAAEC,IAAkB,CAAC,CAAA;AAEpC,IAAA,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;AACrB,SAAA,IAAI,CAAC,OAAO,EAAEC,QAAsB,CAAC;AACrC,SAAA,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/B,SAAA,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/B,SAAA,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/B,SAAA,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;AAElC,IAAA,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;AAClB,SAAA,IAAI,CAAC,OAAO,EAAEC,SAAuB,CAAC;AACtC,SAAA,SAAS,CAAC,CAAI,CAAA,EAAAC,UAAwB,EAAE,CAAC;SACzC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;SACzB,MAAM,CAAC,QAAQ,CAAC;AAChB,SAAA,IAAI,CAAC,OAAO,EAAEA,UAAwB,CAAC,CAAA;AAE1C,IAAA,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;AAClB,SAAA,IAAI,CAAC,OAAO,EAAEC,WAAyB,CAAC,CAAA;AAC7C,CAAC;SAEe,mBAAmB,CACjC,SAAwE,EACxE,MAAkC,EAClC,KAAa,EAAA;IAEb,MAAM,WAAW,GAAG,CAAC,CAAkB,EAAE,CAAS,KAAc,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAA;IACzH,SAAS;AACN,SAAA,OAAO,CAACC,OAAqB,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAE9D,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,KAAI;AAChC,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;AAC3B,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;QAC7B,KAAK,CAAC,MAAM,CAAC,CAAA,CAAA,EAAIL,IAAkB,CAAE,CAAA,CAAC,CAAA;QACtC,KAAK,CAAC,MAAM,CAAC,CAAA,CAAA,EAAIC,QAAsB,CAAE,CAAA,CAAC,CAAA;AAC1C,QAAA,MAAMK,aAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAI,CAAA,EAAAP,WAAyB,CAAE,CAAA,CAAC,CAAA;QAEjEO,aAAW;aACR,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,GAAG,GAAG,CAAC,CAAC;AAC1E,aAAA,KAAK,CAAC,cAAc,EACnB,CAAC,CAAC,MAAM,CAAC,QAAQ;cACb,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;cACtC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CACtE,CAAA;AACL,KAAC,CAAC,CAAA;AACJ,CAAC;AAEe,SAAA,WAAW,CACzB,SAAwE,EACxE,MAAkC,EAClC,QAAgB,EAChB,KAAK,GAAG,CAAC,EACT,WAAqC,EAAA;AAErC,IAAA,MAAM,EAAE,oBAAoB,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,wBAAwB,EAAE,GAAG,MAAM,CAAA;AAC5G,IAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QAAE,OAAM;IAE7B,SAAS;SACN,OAAO,CACNC,UAAwB,EACxB,CAAC,IAAI,QAAQ,CAAkC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,YAAY,CAAC,KAAK,cAAc,CAAC,MAAM,CACvG,CAAA;IAEH,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,KAAI;AAChC,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;AAC3B,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;AACjC,QAAA,MAAMC,MAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAI,CAAA,EAAAR,IAAkB,CAAE,CAAA,CAAC,CAAA;AACvD,QAAA,MAAMS,UAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAI,CAAA,EAAAR,QAAsB,CAAE,CAAA,CAAC,CAAA;AAC/D,QAAA,MAAMK,aAAW,GAAG,SAAS,CAAC,MAAM,CAAC,CAAI,CAAA,EAAAP,WAAyB,CAAE,CAAA,CAAC,CAAA;AACrE,QAAA,MAAMW,WAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAI,CAAA,EAAAR,SAAuB,CAAE,CAAA,CAAC,CAAA;QAEjE,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QAEzBM,MAAI;AACD,aAAA,IAAI,CAAC,OAAO,EAAER,IAAkB,CAAC;aACjC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;aAC3C,KAAK,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;aAC3D,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACxC,aAAA,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAA;AAE1E,QAAA,eAAe,CAACQ,MAAI,EAAE,QAAQ,CAAC;AAC5B,aAAA,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QAEtDC,UAAQ;AACL,aAAA,IAAI,CAAC,OAAO,EAAER,QAAsB,CAAC;aACrC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC;aACvE,KAAK,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;aACzD,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;AAE3C,QAAA,eAAe,CAACQ,UAAQ,EAAE,QAAQ,CAAC;AAChC,aAAA,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;AACd,aAAA,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;AACd,aAAA,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;AACd,aAAA,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QAEjBH,aAAW;aACR,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;aACxC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC;AACvE,aAAA,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;AACd,aAAA,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;AACd,aAAA,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;AACd,aAAA,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QAEjBI,WAAS;aACN,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC;aACvE,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC;AACzE,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;QAEtBA,WAAS;AACN,aAAA,SAAS,CAAC,CAAI,CAAA,EAAAP,UAAwB,EAAE,CAAC;AACzC,aAAA,IAAI,CAAC,GAAG,EAAE,oBAAoB,GAAG,KAAK,CAAC;aACvC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;AAEzC,QAAA,eAAe,CAACO,WAAS,EAAE,QAAQ,CAAC;AACjC,aAAA,KAAK,CAAC,SAAS,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;;AAGrD,QAAA,MAAMC,aAAW,GAAG,SAAS,CAAC,SAAS,CAAC,CAAI,CAAA,EAAAP,WAAyB,CAAE,CAAA,CAAC,CAAA;AACxE,QAAA,MAAM,UAAU,GAAG,QAAQ,CAAoC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,YAAY,CAAC,CAAA;QAC5F,MAAM,WAAW,GAAG,QAAQ,CAAuC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,iBAAiB,GAAG,CAAC,GAAG,CAAC,CAAA;QAC5H,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,EAAE,wBAAwB,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,CAAA;AACjG,QAAA,MAAM,cAAc,GAAG,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAA;QAEnF,MAAM,MAAM,GAAGO,aAAW;AACvB,aAAA,SAAS,CAA+B,CAAI,CAAA,EAAAC,UAAwB,EAAE,CAAC;AACvE,aAAA,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAA;;QAG1D,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;AAC3C,aAAA,IAAI,CAAC,OAAO,EAAEA,UAAwB,CAAC;AACvC,aAAA,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC;AACjC,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;AAEtB,QAAA,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC;AACzB,aAAA,IAAI,CAAC,OAAO,EAAEC,WAAyB,CAAC;AACxC,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;AAEf,QAAA,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;AACvB,aAAA,IAAI,CAAC,OAAO,EAAEC,YAA0B,CAAC,CAAA;;QAG5C,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;AAE9C,QAAA,eAAe,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA,CAAA,EAAID,WAAyB,CAAA,CAAE,CAAC,EAAE,QAAQ,CAAC;AAC5E,aAAA,IAAI,CAAC,GAAG,EAAE,KAAK,IAAI,EAAA,IAAA,EAAA,CAAA,CAAA,OAAA,CAAA,EAAA,GAAA,KAAK,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,iBAAiB,CAAA,EAAA,CAAC;aACrD,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAA;QAEtC,YAAY,CAAC,MAAM,CAAC,CAAA,CAAA,EAAIC,YAA0B,EAAE,CAAC;aAClD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC;AACzB,aAAA,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AACnB,aAAA,KAAK,CAAC,MAAM,EAAE,KAAK,cAAI,OAAA,CAAA,EAAA,GAAA,KAAK,CAAC,SAAS,mCAAI,qBAAqB,CAAC,KAAK,CAAC,CAAA,EAAA,CAAC;AACvE,aAAA,KAAK,CAAC,WAAW,EAAE,KAAK,IAAG;;YAC1B,IAAI,KAAK,CAAC,QAAQ;gBAAE,OAAO,KAAK,CAAC,QAAQ,CAAA;YACzC,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,iBAAiB,CAAA;AAChD,YAAA,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAA;AACpE,SAAC,CAAC,CAAA;AAEJ,QAAA,eAAe,CAAC,YAAY,EAAE,QAAQ,CAAC;AACpC,aAAA,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC;aACjC,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;AACtC,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;;AAGtB,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;AAChC,QAAA,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA,CAAA,EAAID,WAAyB,CAAA,CAAE,CAAC,EAAE,QAAQ,CAAC;AAC1E,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;AAEf,QAAA,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC;AAClC,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AACnB,aAAA,MAAM,EAAE,CAAA;AACb,KAAC,CAAC,CAAA;IAEF,IAAI,QAAQ,GAAG,CAAC,EAAE;AAChB,QAAA,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAA;QACxC,MAAM,CAAC,GAAG,eAAe,CAAC,SAAS,EAAE,QAAQ,CAA2E,CAAA;QACxH,CAAC;AACE,aAAA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,KAAI;AACtC,YAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAChB,iBAAA,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC;AAChC,iBAAA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;AACvB,SAAC,CAAC,CAAA;AACL,KAAA;AAAM,SAAA;AACL,QAAA,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;AAC7B,KAAA;AAED,IAAA,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;AAC/C,CAAC;SAEe,WAAW,CACzB,SAAwE,EACxE,MAAkC,EAClC,QAAgB,EAAA;AAEhB,IAAA,eAAe,CAAC,SAAS,EAAE,QAAQ,GAAG,CAAC,CAAC;AACrC,SAAA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;AAClB,SAAA,MAAM,EAAE,CAAA;AACb,CAAC;SAEe,eAAe,CAC7B,SAAwE,EACxE,MAAkC,EAClC,KAAa,EAAA;AAEb,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;AAC3B,IAAA,IAAI,KAAK,GAAG,SAAS,CAAC,MAAM;QAAE,OAAM;IAEpC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,KAAI;AAChC,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;AAC3B,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;AACjC,QAAA,MAAMH,WAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAI,CAAA,EAAAR,SAAuB,CAAE,CAAA,CAAC,CAAA;QAEjE,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,YAAY,CAAC;YAAE,OAAM;AACpD,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,CAAA;AAC/B,QAAA,MAAM,OAAO,GAAGQ,WAAS,CAAC,SAAS,CAAC,CAAI,CAAA,EAAAP,UAAwB,CAAE,CAAA,CAAC,CAAA;QAEnE,OAAO;AACJ,aAAA,IAAI,CAAC,WAAW,EAAE,KAAK,IAAG;YACzB,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAA;YACpD,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;YACzB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;YACzB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;YACzB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;YAEzB,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;YAC7B,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;AAC7B,YAAA,OAAO,CAAa,UAAA,EAAA,CAAC,CAAK,EAAA,EAAA,CAAC,GAAG,CAAA;AAChC,SAAC,CAAC,CAAA;AACN,KAAC,CAAC,CAAA;AACJ,CAAC;AAEK,SAAU,SAAS,CACvB,SAAwE,EACxE,MAAkC,EAClC,KAAa,EACb,WAAqC,EAAA;AAErC,IAAA,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,CAAA;AAEvC,IAAA,SAAS,CAAC,OAAO,CAACY,aAA8B,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;IAC3E,SAAS,CAAC,SAAS,CAAC,CAAA,CAAA,EAAIZ,UAAwB,EAAE,CAAC;AAChD,SAAA,IAAI,CAAC,GAAG,EAAE,oBAAoB,GAAG,KAAK,CAAC,CAAA;AAE1C,IAAA,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAA+B,CAAI,CAAA,EAAAH,IAAkB,CAAE,CAAA,CAAC,CAAA;IAChG,YAAY;AACT,SAAA,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;AAChD,SAAA,KAAK,CAAC,cAAc,EAAE,CAAC,IAAI,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;AAEnE,IAAA,MAAM,gBAAgB,GAAG,SAAS,CAAC,SAAS,CAA+B,CAAI,CAAA,EAAAC,QAAsB,CAAE,CAAA,CAAC,CAAA;IACxG,gBAAgB;AACb,SAAA,KAAK,CAAC,cAAc,EAAE,CAAC,IAAI,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;AACnE,CAAC;AAEY,MAAA,kBAAkB,GAAG,QAAQ,CAAC,SAAS,EAAE,GAAG;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/components/graph/modules/link/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { range } from 'd3-array'\nimport { Transition } from 'd3-transition'\nimport toPx from 'to-px'\n\n// Utils\nimport { throttle, getValue, getNumber, getBoolean } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\nimport { getCSSVariableValueInPixels } from 'utils/misc'\nimport { estimateStringPixelLength } from 'utils/text'\n\n// Types\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\n\n// Local Types\nimport { GraphCircleLabel, GraphLink, GraphLinkArrowStyle, GraphLinkStyle } from '../../types'\n\n// Config\nimport { GraphConfigInterface } from '../../config'\n\n// Helpers\nimport { getX, getY } from '../node/helper'\nimport {\n getLinkShiftTransform,\n getLinkStrokeWidth,\n getLinkBandWidth,\n getLinkColor,\n getLinkLabelTextColor,\n getLinkArrowStyle,\n LINK_MARKER_WIDTH,\n} from './helper'\nimport { ZoomLevel } from '../zoom-levels'\n\n// Styles\nimport * as generalSelectors from '../../style'\nimport * as linkSelectors from './style'\n\n\nexport function createLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>\n): void {\n selection.attr('opacity', 0)\n\n selection.append('path')\n .attr('class', linkSelectors.linkSupport)\n\n selection.append('path')\n .attr('class', linkSelectors.link)\n\n selection.append('path')\n .attr('class', linkSelectors.linkBand)\n\n selection.append('use')\n .attr('class', linkSelectors.linkArrow)\n\n selection.append('g')\n .attr('class', linkSelectors.flowGroup)\n .selectAll(`.${linkSelectors.flowCircle}`)\n .data(range(0, 6)).enter()\n .append('circle')\n .attr('class', linkSelectors.flowCircle)\n\n const linkLabelGroup = selection.append('g')\n .attr('class', linkSelectors.linkLabelGroup)\n\n linkLabelGroup.append('rect')\n .attr('class', linkSelectors.linkLabelBackground)\n\n linkLabelGroup.append('text')\n .attr('class', linkSelectors.linkLabelContent)\n}\n\nexport function updateSelectedLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n scale: number\n): void {\n const isGreyedOut = (d: GraphLink<N, L>, i: number): boolean => getBoolean(d, config.linkDisabled, i) || d._state.greyout\n selection\n .classed(linkSelectors.greyedOutLink, (d, i) => isGreyedOut(d, i))\n\n selection.each((d, i, elements) => {\n const element = elements[i]\n const group = select(element)\n group.select(`.${linkSelectors.link}`)\n group.select(`.${linkSelectors.linkBand}`)\n const linkSupport = group.select(`.${linkSelectors.linkSupport}`)\n\n linkSupport\n .style('stroke-opacity', (d._state.hovered || d._state.selected) ? 0.2 : 0)\n .style('stroke-width',\n d._state.selected\n ? getLinkBandWidth(d, scale, config) + 5\n : d._state.hovered ? getLinkBandWidth(d, scale, config) + 10 : null\n )\n })\n}\n\nexport function updateLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n duration: number,\n scale = 1,\n getLinkArrowDefId: (arrow: GraphLinkArrowStyle | undefined) => string\n): void {\n const { linkFlowParticleSize, linkStyle, linkFlow, linkLabel, linkLabelShiftFromCenter } = config\n if (!selection.size()) return\n\n selection\n .classed(\n linkSelectors.linkDashed,\n d => getValue<GraphLink<N, L>, GraphLinkStyle>(d, linkStyle, d._indexGlobal) === GraphLinkStyle.Dashed\n )\n\n selection.each((d, i, elements) => {\n const element = elements[i]\n const linkGroup = select(element)\n const link = linkGroup.select<SVGPathElement>(`.${linkSelectors.link}`)\n const linkBand = linkGroup.select<SVGPathElement>(`.${linkSelectors.linkBand}`)\n const linkSupport = linkGroup.select<SVGPathElement>(`.${linkSelectors.linkSupport}`)\n const linkArrow = linkGroup.select<SVGUseElement>(`.${linkSelectors.linkArrow}`)\n const flowGroup = linkGroup.select(`.${linkSelectors.flowGroup}`)\n const linkColor = getLinkColor(d, config)\n const linkShiftTransform = getLinkShiftTransform(d, config.linkNeighborSpacing)\n const linkLabelDatum = getValue<GraphLink<N, L>, GraphCircleLabel>(d, linkLabel, d._indexGlobal)\n const linkLabelText = linkLabelDatum ? linkLabelDatum.text?.toString() : undefined\n\n const x1 = getX(d.source)\n const y1 = getY(d.source)\n const x2 = getX(d.target)\n const y2 = getY(d.target)\n\n const curvature = getNumber(d, config.linkCurvature, i) ?? 0\n const cp1x = x1 + (x2 - x1) * 0.5 * curvature\n const cp1y = y1 + (y2 - y1) * 0.0 * curvature\n const cp2x = x1 + (x2 - x1) * 0.5 * curvature\n const cp2y = y1 + (y2 - y1) * 1.0 * curvature\n\n const pathData = `M${x1},${y1} C${cp1x},${cp1y} ${cp2x},${cp2y} ${x2},${y2}`\n link\n .attr('class', linkSelectors.link)\n .style('stroke-width', getLinkStrokeWidth(d, scale, config))\n .style('stroke', linkColor)\n .attr('transform', linkShiftTransform)\n\n smartTransition(link, duration)\n .attr('d', pathData)\n\n linkBand\n .attr('class', linkSelectors.linkBand)\n .attr('transform', linkShiftTransform)\n .style('stroke-width', getLinkBandWidth(d, scale, config))\n .style('stroke', linkColor)\n\n smartTransition(linkBand, duration)\n .attr('d', pathData)\n\n linkSupport\n .style('stroke', linkColor)\n .attr('transform', linkShiftTransform)\n .attr('d', pathData)\n\n // Arrow\n const linkArrowStyle = getLinkArrowStyle(d, config)\n const linkPathElement = linkSupport.node()\n const pathLength = linkPathElement.getTotalLength()\n if (linkArrowStyle) {\n const arrowPos = pathLength * (linkLabelText ? 0.65 : 0.5)\n const p1 = linkPathElement.getPointAtLength(arrowPos)\n const p2 = linkPathElement.getPointAtLength(arrowPos + 1) // A point very close to p1\n\n // Calculate the angle for the arrowhead\n const angle = Math.atan2(p2.y - p1.y, p2.x - p1.x) * (180 / Math.PI)\n const arrowWasShownBefore = linkArrow.attr('href')\n linkArrow\n .attr('href', `#${getLinkArrowDefId(linkArrowStyle)}`)\n\n smartTransition(linkArrow, arrowWasShownBefore ? duration : 0)\n .attr('fill', linkColor)\n .attr('transform', `translate(${p1.x}, ${p1.y}) rotate(${angle})`)\n } else {\n linkArrow.attr('href', null)\n }\n\n // Particle Flow\n flowGroup\n .attr('transform', linkShiftTransform)\n .style('display', getBoolean(d, linkFlow, d._indexGlobal) ? null : 'none')\n .style('opacity', 0)\n\n flowGroup\n .selectAll(`.${linkSelectors.flowCircle}`)\n .attr('r', linkFlowParticleSize / scale)\n .style('fill', linkColor)\n\n smartTransition(flowGroup, duration)\n .style('opacity', scale < ZoomLevel.Level2 ? 0 : 1)\n\n // Labels\n const linkLabelGroup = linkGroup.select<SVGGElement>(`.${linkSelectors.linkLabelGroup}`)\n\n if (linkLabelText) {\n const linkMarkerWidth = linkArrowStyle ? LINK_MARKER_WIDTH * 2 : 0\n const linkLabelShift = getBoolean(d, linkLabelShiftFromCenter, d._indexGlobal) ? -linkMarkerWidth + 4 : 0\n const linkLabelPos = linkPathElement.getPointAtLength(pathLength / 2 + linkLabelShift)\n const linkLabelTranslate = `translate(${linkLabelPos.x}, ${linkLabelPos.y})`\n const linkLabelBackground = linkLabelGroup.select<SVGRectElement>(`.${linkSelectors.linkLabelBackground}`)\n const linkLabelContent = linkLabelGroup.select<SVGTextElement>(`.${linkSelectors.linkLabelContent}`)\n\n // If the label was hidden or didn't have text before, we need to set the initial position\n if (!linkLabelContent.text() || linkLabelContent.attr('hidden')) {\n linkLabelGroup.attr('transform', linkLabelTranslate)\n }\n\n linkLabelGroup.attr('hidden', null)\n .style('cursor', linkLabelDatum.cursor)\n\n smartTransition(linkLabelGroup, duration)\n .attr('transform', linkLabelTranslate)\n .style('opacity', 1)\n\n linkLabelContent\n .text(linkLabelText)\n .attr('dy', '0.1em')\n .style('font-size', linkLabelDatum.fontSize)\n .style('fill', linkLabelDatum.textColor ?? getLinkLabelTextColor(linkLabelDatum))\n\n const shouldBeRenderedAsCircle = linkLabelText.length <= 2\n const linkLabelPaddingVertical = 4\n const linkLabelPaddingHorizontal = shouldBeRenderedAsCircle ? linkLabelPaddingVertical : 8\n const linkLabelFontSize = toPx(linkLabelDatum.fontSize) ?? getCSSVariableValueInPixels('var(--vis-graph-link-label-font-size)', linkLabelContent.node())\n const linkLabelWidthPx = estimateStringPixelLength(linkLabelText, linkLabelFontSize)\n const linkLabelBackgroundBorderRadius = linkLabelDatum.radius ?? (shouldBeRenderedAsCircle ? linkLabelFontSize : 4)\n const linkLabelBackgroundWidth = (shouldBeRenderedAsCircle ? linkLabelFontSize : linkLabelWidthPx)\n linkLabelBackground\n .attr('x', -linkLabelBackgroundWidth / 2 - linkLabelPaddingHorizontal)\n .attr('y', -linkLabelFontSize / 2 - linkLabelPaddingVertical)\n .attr('width', linkLabelBackgroundWidth + linkLabelPaddingHorizontal * 2)\n .attr('height', linkLabelFontSize + linkLabelPaddingVertical * 2)\n .attr('rx', linkLabelBackgroundBorderRadius)\n .style('fill', linkLabelDatum.color)\n } else {\n linkLabelGroup.attr('hidden', true)\n }\n })\n\n // Pointer Events\n if (duration > 0) {\n selection.attr('pointer-events', 'none')\n const t = smartTransition(selection, duration) as Transition<SVGGElement, GraphLink<N, L>, SVGGElement, GraphLink<N, L>>\n t\n .attr('opacity', 1)\n .on('end interrupt', (d, i, elements) => {\n select(elements[i])\n .attr('pointer-events', 'stroke')\n .attr('opacity', 1)\n })\n } else {\n selection.attr('opacity', 1)\n }\n\n updateSelectedLinks(selection, config, scale)\n}\n\nexport function removeLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n duration: number\n): void {\n smartTransition(selection, duration / 2)\n .attr('opacity', 0)\n .remove()\n}\n\nexport function animateLinkFlow<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n scale: number\n): void {\n const { linkFlow } = config\n if (scale < ZoomLevel.Level2) return\n\n selection.each((d, i, elements) => {\n const element = elements[i]\n const linkGroup = select(element)\n const flowGroup = linkGroup.select(`.${linkSelectors.flowGroup}`)\n\n const linkPathElement = linkGroup.select<SVGPathElement>(`.${linkSelectors.linkSupport}`).node()\n const pathLength = linkPathElement.getTotalLength()\n\n if (!getBoolean(d, linkFlow, d._indexGlobal)) return\n const t = d._state.flowAnimTime\n const circles = flowGroup.selectAll(`.${linkSelectors.flowCircle}`)\n\n circles\n .attr('transform', index => {\n const tt = (t + (+index) / (circles.size() - 1)) % 1\n const p = linkPathElement.getPointAtLength(tt * pathLength)\n return `translate(${p.x}, ${p.y})`\n })\n })\n}\n\nexport function zoomLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n scale: number\n): void {\n const { linkFlowParticleSize } = config\n\n selection.classed(generalSelectors.zoomOutLevel2, scale < ZoomLevel.Level2)\n selection.selectAll(`.${linkSelectors.flowCircle}`)\n .attr('r', linkFlowParticleSize / scale)\n\n const linkElements = selection.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.link}`)\n linkElements\n .style('stroke-width', d => getLinkStrokeWidth(d, scale, config))\n\n const linkBandElements = selection.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.linkBand}`)\n linkBandElements\n .style('stroke-width', d => getLinkBandWidth(d, scale, config))\n}\n\nexport const zoomLinksThrottled = throttle(zoomLinks, 500)\n"],"names":["linkSelectors.linkSupport","linkSelectors.link","linkSelectors.linkBand","linkSelectors.linkArrow","linkSelectors.flowGroup","linkSelectors.flowCircle","linkLabelGroup","linkSelectors.linkLabelGroup","linkSelectors.linkLabelBackground","linkSelectors.linkLabelContent","linkSelectors.greyedOutLink","linkSupport","linkSelectors.linkDashed","link","linkBand","linkArrow","flowGroup","linkLabelBackground","linkLabelContent","generalSelectors.zoomOutLevel2"],"mappings":"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"}
|
|
@@ -3,13 +3,13 @@ export declare const variables: void;
|
|
|
3
3
|
export declare const linkSupport: string;
|
|
4
4
|
export declare const link: string;
|
|
5
5
|
export declare const linkDashed: string;
|
|
6
|
+
export declare const linkArrow: string;
|
|
6
7
|
export declare const gLink: string;
|
|
7
8
|
export declare const gLinkExit: string;
|
|
8
|
-
export declare const
|
|
9
|
+
export declare const greyedOutLink: string;
|
|
9
10
|
export declare const linkBand: string;
|
|
10
11
|
export declare const flowGroup: string;
|
|
11
12
|
export declare const flowCircle: string;
|
|
12
|
-
export declare const
|
|
13
|
-
export declare const
|
|
14
|
-
export declare const
|
|
15
|
-
export declare const labelContent: string;
|
|
13
|
+
export declare const linkLabelGroup: string;
|
|
14
|
+
export declare const linkLabelBackground: string;
|
|
15
|
+
export declare const linkLabelContent: string;
|