@unovis/ts 1.6.2-pre.8 → 1.6.3
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/annotations/config.d.ts +2 -0
- package/components/annotations/config.js +1 -1
- package/components/annotations/config.js.map +1 -1
- package/components/annotations/index.d.ts +1 -0
- package/components/annotations/index.js +25 -10
- package/components/annotations/index.js.map +1 -1
- package/components/annotations/style.d.ts +2 -0
- package/components/annotations/style.js +8 -1
- package/components/annotations/style.js.map +1 -1
- package/components/area/config.d.ts +11 -1
- package/components/area/config.js +1 -1
- package/components/area/config.js.map +1 -1
- package/components/area/index.d.ts +6 -0
- package/components/area/index.js +80 -7
- package/components/area/index.js.map +1 -1
- package/components/area/style.d.ts +1 -0
- package/components/area/style.js +7 -1
- package/components/area/style.js.map +1 -1
- package/components/axis/index.d.ts +2 -0
- package/components/axis/index.js +46 -7
- package/components/axis/index.js.map +1 -1
- package/components/bullet-legend/index.d.ts +2 -0
- package/components/bullet-legend/index.js +9 -5
- package/components/bullet-legend/index.js.map +1 -1
- package/components/bullet-legend/modules/shape.js +3 -2
- package/components/bullet-legend/modules/shape.js.map +1 -1
- package/components/crosshair/config.d.ts +1 -1
- package/components/crosshair/config.js.map +1 -1
- package/components/crosshair/index.d.ts +1 -1
- package/components/crosshair/index.js +3 -2
- package/components/crosshair/index.js.map +1 -1
- package/components/flow-legend/config.d.ts +10 -0
- package/components/flow-legend/config.js +4 -0
- package/components/flow-legend/config.js.map +1 -1
- package/components/flow-legend/index.d.ts +6 -2
- package/components/flow-legend/index.js +34 -16
- package/components/flow-legend/index.js.map +1 -1
- package/components/flow-legend/style.d.ts +3 -3
- package/components/flow-legend/style.js +30 -26
- package/components/flow-legend/style.js.map +1 -1
- package/components/free-brush/types.js +1 -0
- package/components/free-brush/types.js.map +1 -1
- package/components/graph/index.d.ts +1 -0
- package/components/graph/index.js +35 -14
- package/components/graph/index.js.map +1 -1
- package/components/graph/modules/link/index.js +2 -2
- package/components/graph/modules/link/index.js.map +1 -1
- package/components/graph/modules/node/index.js +2 -1
- package/components/graph/modules/node/index.js.map +1 -1
- package/components/leaflet-map/leaflet.css.js +2 -2
- package/components/leaflet-map/modules/map.js +2 -2
- package/components/leaflet-map/modules/map.js.map +1 -1
- package/components/leaflet-map/renderer/mapboxgl-utils.d.ts +0 -1
- package/components/leaflet-map/renderer/mapboxgl-utils.js +1 -2
- package/components/leaflet-map/renderer/mapboxgl-utils.js.map +1 -1
- package/components/sankey/config.d.ts +28 -2
- package/components/sankey/config.js +2 -2
- package/components/sankey/config.js.map +1 -1
- package/components/sankey/index.d.ts +28 -2
- package/components/sankey/index.js +366 -46
- package/components/sankey/index.js.map +1 -1
- package/components/sankey/modules/label.d.ts +8 -5
- package/components/sankey/modules/label.js +64 -32
- package/components/sankey/modules/label.js.map +1 -1
- package/components/sankey/modules/link.d.ts +1 -0
- package/components/sankey/modules/link.js +20 -25
- package/components/sankey/modules/link.js.map +1 -1
- package/components/sankey/modules/node.d.ts +5 -4
- package/components/sankey/modules/node.js +78 -28
- package/components/sankey/modules/node.js.map +1 -1
- package/components/sankey/style.d.ts +67 -1
- package/components/sankey/style.js +78 -77
- package/components/sankey/style.js.map +1 -1
- package/components/sankey/types.d.ts +5 -0
- package/components/sankey/types.js +9 -2
- package/components/sankey/types.js.map +1 -1
- package/components/stacked-bar/index.d.ts +1 -1
- package/components/stacked-bar/index.js +24 -14
- package/components/stacked-bar/index.js.map +1 -1
- package/components/stacked-bar/types.d.ts +6 -4
- package/components/treemap/config.d.ts +2 -0
- package/components/treemap/config.js +1 -1
- package/components/treemap/config.js.map +1 -1
- package/components/treemap/index.d.ts +6 -2
- package/components/treemap/index.js +97 -71
- package/components/treemap/index.js.map +1 -1
- package/components/treemap/style.d.ts +1 -0
- package/components/treemap/style.js +5 -1
- package/components/treemap/style.js.map +1 -1
- package/components/treemap/types.d.ts +1 -0
- package/containers/single-container/config.d.ts +3 -0
- package/containers/single-container/config.js.map +1 -1
- package/containers/single-container/index.js +2 -1
- package/containers/single-container/index.js.map +1 -1
- package/containers/xy-container/config.d.ts +3 -0
- package/containers/xy-container/config.js.map +1 -1
- package/containers/xy-container/index.d.ts +1 -0
- package/containers/xy-container/index.js +13 -9
- package/containers/xy-container/index.js.map +1 -1
- package/index.js +1 -1
- package/package.json +41 -6
- package/types.js +1 -1
- package/utils/misc.js +13 -2
- package/utils/misc.js.map +1 -1
- package/utils/text.d.ts +1 -1
- package/utils/text.js +17 -15
- package/utils/text.js.map +1 -1
- package/utils/to-px.d.ts +1 -0
- package/utils/to-px.js +110 -0
- package/utils/to-px.js.map +1 -0
|
@@ -25,16 +25,19 @@ function linkPath({ x0, x1, y0, y1, width }) {
|
|
|
25
25
|
z
|
|
26
26
|
`;
|
|
27
27
|
}
|
|
28
|
+
function getLinkPathOptions(d) {
|
|
29
|
+
return {
|
|
30
|
+
x0: d.source.x1,
|
|
31
|
+
x1: d.target.x0,
|
|
32
|
+
y0: d.y0,
|
|
33
|
+
y1: d.y1,
|
|
34
|
+
width: Math.max(1, d.width),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
28
37
|
function createLinks(sel) {
|
|
29
38
|
sel.append('path').attr('class', linkPath$1)
|
|
30
39
|
.attr('d', (d, i, el) => {
|
|
31
|
-
el[i]._animState =
|
|
32
|
-
x0: d.source.x1,
|
|
33
|
-
x1: d.target.x0,
|
|
34
|
-
y0: d.y0,
|
|
35
|
-
y1: d.y1,
|
|
36
|
-
width: Math.max(1, d.width),
|
|
37
|
-
};
|
|
40
|
+
el[i]._animState = getLinkPathOptions(d);
|
|
38
41
|
return linkPath(el[i]._animState);
|
|
39
42
|
});
|
|
40
43
|
sel.append('path').attr('class', linkSelectionHelper);
|
|
@@ -51,13 +54,7 @@ function updateLinks(sel, config, duration) {
|
|
|
51
54
|
selectionTransition
|
|
52
55
|
.attrTween('d', (d, i, el) => {
|
|
53
56
|
const previous = el[i]._animState;
|
|
54
|
-
const next =
|
|
55
|
-
x0: d.source.x1,
|
|
56
|
-
x1: d.target.x0,
|
|
57
|
-
y0: d.y0,
|
|
58
|
-
y1: d.y1,
|
|
59
|
-
width: Math.max(1, d.width),
|
|
60
|
-
};
|
|
57
|
+
const next = getLinkPathOptions(d);
|
|
61
58
|
const interpolator = {
|
|
62
59
|
x0: interpolateNumber(previous.x0, next.x0),
|
|
63
60
|
x1: interpolateNumber(previous.x1, next.x1),
|
|
@@ -65,26 +62,24 @@ function updateLinks(sel, config, duration) {
|
|
|
65
62
|
y1: interpolateNumber(previous.y1, next.y1),
|
|
66
63
|
width: interpolateNumber(previous.width, next.width),
|
|
67
64
|
};
|
|
68
|
-
el[i]._animState = next;
|
|
69
65
|
return function (t) {
|
|
70
|
-
|
|
66
|
+
const currentPathOptions = {
|
|
71
67
|
x0: interpolator.x0(t),
|
|
72
68
|
x1: interpolator.x1(t),
|
|
73
69
|
y0: interpolator.y0(t),
|
|
74
70
|
y1: interpolator.y1(t),
|
|
75
71
|
width: interpolator.width(t),
|
|
76
|
-
}
|
|
72
|
+
};
|
|
73
|
+
el[i]._animState = currentPathOptions;
|
|
74
|
+
return linkPath(currentPathOptions);
|
|
77
75
|
};
|
|
78
76
|
});
|
|
79
77
|
}
|
|
80
78
|
else {
|
|
81
|
-
linkSelection.attr('d', (d) =>
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
y1: d.y1,
|
|
86
|
-
width: Math.max(1, d.width),
|
|
87
|
-
}));
|
|
79
|
+
linkSelection.attr('d', (d, i, el) => {
|
|
80
|
+
el[i]._animState = getLinkPathOptions(d);
|
|
81
|
+
return linkPath(el[i]._animState);
|
|
82
|
+
});
|
|
88
83
|
}
|
|
89
84
|
sel.select(`.${linkSelectionHelper}`)
|
|
90
85
|
.attr('d', (d) => linkPath({
|
|
@@ -100,5 +95,5 @@ function removeLinks(sel) {
|
|
|
100
95
|
sel.remove();
|
|
101
96
|
}
|
|
102
97
|
|
|
103
|
-
export { createLinks, linkPath, removeLinks, updateLinks };
|
|
98
|
+
export { createLinks, getLinkPathOptions, linkPath, removeLinks, updateLinks };
|
|
104
99
|
//# sourceMappingURL=link.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.js","sources":["../../../../src/components/sankey/modules/link.ts"],"sourcesContent":["import { Selection } from 'd3-selection'\nimport { Transition } from 'd3-transition'\nimport { interpolateNumber } from 'd3-interpolate'\n\n// Utils\nimport { getColor } from 'utils/color'\nimport { getString } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\n\n// Local Types\nimport { SankeyInputLink, SankeyInputNode, SankeyLink } from '../types'\n\n// Config\nimport { SankeyConfigInterface } from '../config'\n\n// Styles\nimport * as s from '../style'\n\nexport type LinkPathOptions = {\n x0: number;\n x1: number;\n y0: number;\n y1: number;\n width: number;\n}\n\nexport function linkPath ({ x0, x1, y0, y1, width }: LinkPathOptions): string {\n const top0 = y0 - width / 2\n const top1 = y1 - width / 2\n const bottom0 = y0 + width / 2\n const bottom1 = y1 + width / 2\n const centerX = (x0 + x1) / 2\n\n return `\n M ${x0}, ${top0}\n\n C ${centerX}, ${top0}\n ${centerX}, ${top1}\n ${x1}, ${top1}\n\n L ${x1}, ${bottom1}\n\n C ${centerX}, ${bottom1}\n ${centerX}, ${bottom0}\n ${x0}, ${bottom0}\n z\n `\n}\n\nexport type LinkAnimState = { x0: number; x1: number; y0: number; y1: number; width: number }\n\nexport interface LinkElement extends SVGPathElement {\n _animState?: LinkAnimState;\n}\n\nexport function createLinks<N extends SankeyInputNode, L extends SankeyInputLink> (\n sel: Selection<SVGGElement, SankeyLink<N, L>, SVGGElement, unknown>\n): void {\n sel.append('path').attr('class', s.linkPath)\n .attr('d', (d: SankeyLink<N, L>, i: number, el: ArrayLike<LinkElement>) => {\n el[i]._animState =
|
|
1
|
+
{"version":3,"file":"link.js","sources":["../../../../src/components/sankey/modules/link.ts"],"sourcesContent":["import { Selection } from 'd3-selection'\nimport { Transition } from 'd3-transition'\nimport { interpolateNumber } from 'd3-interpolate'\n\n// Utils\nimport { getColor } from 'utils/color'\nimport { getString } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\n\n// Local Types\nimport { SankeyInputLink, SankeyInputNode, SankeyLink } from '../types'\n\n// Config\nimport { SankeyConfigInterface } from '../config'\n\n// Styles\nimport * as s from '../style'\n\nexport type LinkPathOptions = {\n x0: number;\n x1: number;\n y0: number;\n y1: number;\n width: number;\n}\n\nexport function linkPath ({ x0, x1, y0, y1, width }: LinkPathOptions): string {\n const top0 = y0 - width / 2\n const top1 = y1 - width / 2\n const bottom0 = y0 + width / 2\n const bottom1 = y1 + width / 2\n const centerX = (x0 + x1) / 2\n\n return `\n M ${x0}, ${top0}\n\n C ${centerX}, ${top0}\n ${centerX}, ${top1}\n ${x1}, ${top1}\n\n L ${x1}, ${bottom1}\n\n C ${centerX}, ${bottom1}\n ${centerX}, ${bottom0}\n ${x0}, ${bottom0}\n z\n `\n}\n\nexport function getLinkPathOptions<N extends SankeyInputNode, L extends SankeyInputLink> (d: SankeyLink<N, L>): LinkPathOptions {\n return {\n x0: d.source.x1,\n x1: d.target.x0,\n y0: d.y0,\n y1: d.y1,\n width: Math.max(1, d.width),\n }\n}\n\nexport type LinkAnimState = { x0: number; x1: number; y0: number; y1: number; width: number }\n\nexport interface LinkElement extends SVGPathElement {\n _animState?: LinkAnimState;\n}\n\nexport function createLinks<N extends SankeyInputNode, L extends SankeyInputLink> (\n sel: Selection<SVGGElement, SankeyLink<N, L>, SVGGElement, unknown>\n): void {\n sel.append('path').attr('class', s.linkPath)\n .attr('d', (d: SankeyLink<N, L>, i: number, el: ArrayLike<LinkElement>) => {\n el[i]._animState = getLinkPathOptions(d)\n return linkPath(el[i]._animState)\n })\n sel.append('path').attr('class', s.linkSelectionHelper)\n sel.style('opacity', 0)\n}\n\nexport function updateLinks<N extends SankeyInputNode, L extends SankeyInputLink> (\n sel: Selection<SVGGElement, SankeyLink<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n duration: number\n): void {\n smartTransition(sel, duration)\n .style('opacity', (d: SankeyLink<N, L>) => d._state.greyout ? 0.2 : 1)\n\n const linkSelection = sel.select<SVGPathElement>(`.${s.linkPath}`)\n .style('cursor', (d: SankeyLink<N, L>) => getString(d, config.linkCursor))\n\n const selectionTransition = smartTransition(linkSelection, duration)\n .style('fill', (link: SankeyLink<N, L>) => getColor(link, config.linkColor))\n\n if (duration) {\n (selectionTransition as Transition<SVGPathElement, SankeyLink<N, L>, SVGGElement, unknown>)\n .attrTween('d', (d: SankeyLink<N, L>, i: number, el: ArrayLike<LinkElement>) => {\n const previous = el[i]._animState\n const next = getLinkPathOptions(d)\n\n const interpolator = {\n x0: interpolateNumber(previous.x0, next.x0),\n x1: interpolateNumber(previous.x1, next.x1),\n y0: interpolateNumber(previous.y0, next.y0),\n y1: interpolateNumber(previous.y1, next.y1),\n width: interpolateNumber(previous.width, next.width),\n }\n\n return function (t: number) {\n const currentPathOptions = {\n x0: interpolator.x0(t),\n x1: interpolator.x1(t),\n y0: interpolator.y0(t),\n y1: interpolator.y1(t),\n width: interpolator.width(t),\n }\n\n el[i]._animState = currentPathOptions\n return linkPath(currentPathOptions)\n }\n })\n } else {\n linkSelection.attr('d', (d: SankeyLink<N, L>, i: number, el: ArrayLike<LinkElement>) => {\n el[i]._animState = getLinkPathOptions(d)\n\n return linkPath(el[i]._animState)\n })\n }\n\n sel.select(`.${s.linkSelectionHelper}`)\n .attr('d', (d: SankeyLink<N, L>) => linkPath({\n x0: d.source.x1,\n x1: d.target.x0,\n y0: d.y0,\n y1: d.y1,\n width: Math.max(10, d.width),\n }))\n .style('cursor', d => getString(d, config.linkCursor))\n}\n\nexport function removeLinks<N extends SankeyInputNode, L extends SankeyInputLink> (\n sel: Selection<SVGGElement, SankeyLink<N, L>, SVGGElement, unknown>\n): void {\n sel.remove()\n}\n"],"names":["s.linkPath","s.linkSelectionHelper"],"mappings":"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"}
|
|
@@ -2,9 +2,10 @@ import { Selection } from 'd3-selection';
|
|
|
2
2
|
import { Spacing } from "../../../types/spacing";
|
|
3
3
|
import { SankeyInputLink, SankeyInputNode, SankeyNode } from '../types';
|
|
4
4
|
import { SankeyConfigInterface } from '../config';
|
|
5
|
+
export declare const NODE_SELECTION_RECT_DELTA = 3;
|
|
5
6
|
export declare function createNodes<N extends SankeyInputNode, L extends SankeyInputLink>(sel: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>, config: SankeyConfigInterface<N, L>, width: number, bleed: Spacing): void;
|
|
6
|
-
export declare function updateNodes<N extends SankeyInputNode, L extends SankeyInputLink>(sel: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>, config: SankeyConfigInterface<N, L>, width: number, bleed: Spacing, hasLinks: boolean, duration: number): void;
|
|
7
|
-
export declare function renderNodeLabels<N extends SankeyInputNode, L extends SankeyInputLink>(sel: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>, config: SankeyConfigInterface<N, L>, width: number, duration: number,
|
|
7
|
+
export declare function updateNodes<N extends SankeyInputNode, L extends SankeyInputLink>(sel: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>, config: SankeyConfigInterface<N, L>, width: number, bleed: Spacing, hasLinks: boolean, duration: number, layerSpacing: number): void;
|
|
8
|
+
export declare function renderNodeLabels<N extends SankeyInputNode, L extends SankeyInputLink>(sel: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>, config: SankeyConfigInterface<N, L>, width: number, duration: number, layerSpacing: number, sankeyMaxLayer: number, bleed: Spacing): void;
|
|
8
9
|
export declare function removeNodes<N extends SankeyInputNode, L extends SankeyInputLink>(selection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>, config: SankeyConfigInterface<N, L>, duration: number): void;
|
|
9
|
-
export declare function onNodeMouseOver<N extends SankeyInputNode, L extends SankeyInputLink>(d: SankeyNode<N, L>, nodeSelection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>, config: SankeyConfigInterface<N, L>, width: number): void;
|
|
10
|
-
export declare function onNodeMouseOut<N extends SankeyInputNode, L extends SankeyInputLink>(d: SankeyNode<N, L>, nodeSelection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>, config: SankeyConfigInterface<N, L>, width: number): void;
|
|
10
|
+
export declare function onNodeMouseOver<N extends SankeyInputNode, L extends SankeyInputLink>(d: SankeyNode<N, L>, data: SankeyNode<N, L>[], nodeSelection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>, config: SankeyConfigInterface<N, L>, width: number, layerSpacing: number, bleed: Spacing): void;
|
|
11
|
+
export declare function onNodeMouseOut<N extends SankeyInputNode, L extends SankeyInputLink>(d: SankeyNode<N, L>, data: SankeyNode<N, L>[], nodeSelection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>, config: SankeyConfigInterface<N, L>, width: number, layerSpacing: number, bleed: Spacing): void;
|
|
@@ -1,14 +1,24 @@
|
|
|
1
1
|
import { select } from 'd3-selection';
|
|
2
|
+
import { max } from 'd3-array';
|
|
2
3
|
import { getColor } from '../../../utils/color.js';
|
|
3
|
-
import { getString } from '../../../utils/data.js';
|
|
4
|
+
import { isNumber, getString } from '../../../utils/data.js';
|
|
4
5
|
import { smartTransition } from '../../../utils/d3.js';
|
|
5
|
-
import { SankeyEnterTransitionType, SankeyNodeAlign, SankeyExitTransitionType } from '../types.js';
|
|
6
|
-
import { renderLabel } from './label.js';
|
|
7
|
-
import { node, labelGroup, labelBackground, label, sublabel, nodeIcon, SANKEY_ICON_SIZE, hidden, labelTrimmed, forceShow } from '../style.js';
|
|
6
|
+
import { SankeyEnterTransitionType, SankeyNodeAlign, SankeySubLabelPlacement, SankeyExitTransitionType } from '../types.js';
|
|
7
|
+
import { getLabelFontSize, getSubLabelFontSize, renderLabel } from './label.js';
|
|
8
|
+
import { nodeSelectionRect, node, labelGroup, labelBackground, label, sublabel, nodeIcon, SANKEY_ICON_SIZE, hidden, labelTrimmed, forceShow } from '../style.js';
|
|
8
9
|
|
|
10
|
+
const NODE_SELECTION_RECT_DELTA = 3;
|
|
9
11
|
function createNodes(sel, config, width, bleed) {
|
|
10
12
|
const { enterTransitionType } = config;
|
|
11
13
|
// Node
|
|
14
|
+
sel.append('rect')
|
|
15
|
+
.attr('class', nodeSelectionRect)
|
|
16
|
+
.attr('width', config.nodeWidth + NODE_SELECTION_RECT_DELTA * 2)
|
|
17
|
+
.attr('height', d => d.y1 - d.y0 + NODE_SELECTION_RECT_DELTA * 2)
|
|
18
|
+
.attr('x', -NODE_SELECTION_RECT_DELTA)
|
|
19
|
+
.attr('y', -NODE_SELECTION_RECT_DELTA)
|
|
20
|
+
.style('stroke', node => getColor(node, config.nodeColor))
|
|
21
|
+
.style('opacity', 0);
|
|
12
22
|
sel.append('rect')
|
|
13
23
|
.attr('class', node)
|
|
14
24
|
.attr('width', config.nodeWidth)
|
|
@@ -21,8 +31,7 @@ function createNodes(sel, config, width, bleed) {
|
|
|
21
31
|
labelGroup$1.append('text').attr('class', sublabel);
|
|
22
32
|
// Node icon
|
|
23
33
|
sel.append('text').attr('class', nodeIcon)
|
|
24
|
-
.attr('text-anchor', 'middle')
|
|
25
|
-
.attr('dy', '0.5px');
|
|
34
|
+
.attr('text-anchor', 'middle');
|
|
26
35
|
sel
|
|
27
36
|
.attr('transform', d => {
|
|
28
37
|
var _a;
|
|
@@ -42,33 +51,59 @@ function getNodeXPos(d, config, width, bleed, hasLinks) {
|
|
|
42
51
|
default: return width * 0.5 - bleed.left;
|
|
43
52
|
}
|
|
44
53
|
}
|
|
45
|
-
function
|
|
54
|
+
function getXDistanceToNextNode(sel, datum, data, // Assuming that the nodes are sorted by the x position for performance reasons
|
|
55
|
+
config, width) {
|
|
56
|
+
let yTolerance = config.labelMaxWidthTakeAvailableSpaceTolerance;
|
|
57
|
+
if (!isNumber(yTolerance)) {
|
|
58
|
+
const labelFontSize = getLabelFontSize(config, sel.node());
|
|
59
|
+
const subLabelFontSize = getSubLabelFontSize(config, sel.node());
|
|
60
|
+
const hasSecondLineSublabel = getString(datum, config.subLabel) && config.subLabelPlacement !== SankeySubLabelPlacement.Inline;
|
|
61
|
+
yTolerance = (labelFontSize + subLabelFontSize) / (hasSecondLineSublabel ? 2 : 4);
|
|
62
|
+
}
|
|
63
|
+
// Assuming that the nodes are sorted by the x position
|
|
64
|
+
const nodeOnTheRight = data.find(d => d.layer > datum.layer &&
|
|
65
|
+
d.x0 >= datum.x1 &&
|
|
66
|
+
d.y1 >= (datum.y0 - yTolerance) &&
|
|
67
|
+
d.y0 <= (datum.y1 + yTolerance));
|
|
68
|
+
return (nodeOnTheRight ? nodeOnTheRight.x0 : width) - datum.x1;
|
|
69
|
+
}
|
|
70
|
+
function updateNodes(sel, config, width, bleed, hasLinks, duration, layerSpacing) {
|
|
46
71
|
smartTransition(sel, duration)
|
|
47
72
|
.attr('transform', d => `translate(${getNodeXPos(d, config, width, bleed, hasLinks)},${d.y0})`)
|
|
48
73
|
.style('opacity', d => d._state.greyout ? 0.2 : 1);
|
|
49
74
|
// Node
|
|
75
|
+
smartTransition(sel.select(`.${nodeSelectionRect}`), duration)
|
|
76
|
+
.attr('width', config.nodeWidth + NODE_SELECTION_RECT_DELTA * 2)
|
|
77
|
+
.attr('height', d => d.y1 - d.y0 + NODE_SELECTION_RECT_DELTA * 2)
|
|
78
|
+
.attr('x', -NODE_SELECTION_RECT_DELTA)
|
|
79
|
+
.attr('y', -NODE_SELECTION_RECT_DELTA)
|
|
80
|
+
.style('stroke', (d) => getColor(d, config.nodeColor))
|
|
81
|
+
.style('opacity', d => { var _a; return ((_a = config.selectedNodeIds) === null || _a === void 0 ? void 0 : _a.includes(d.id)) ? 1 : 0; });
|
|
50
82
|
smartTransition(sel.select(`.${node}`), duration)
|
|
51
83
|
.attr('width', config.nodeWidth)
|
|
52
84
|
.attr('height', (d) => d.y1 - d.y0)
|
|
53
85
|
.style('cursor', (d) => getString(d, config.nodeCursor))
|
|
54
86
|
.style('fill', (d) => getColor(d, config.nodeColor));
|
|
55
87
|
// Label Rendering
|
|
88
|
+
const maxLayer = max(sel.data(), d => d.layer);
|
|
56
89
|
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
57
|
-
renderNodeLabels(sel, config, width, duration);
|
|
90
|
+
renderNodeLabels(sel, config, width, duration, layerSpacing, maxLayer, bleed);
|
|
58
91
|
// Node Icon
|
|
59
92
|
const nodeIcon$1 = sel.select(`.${nodeIcon}`);
|
|
60
93
|
if (config.nodeIcon) {
|
|
61
|
-
nodeIcon$1
|
|
62
|
-
|
|
63
|
-
.attr('text-anchor', 'middle')
|
|
64
|
-
.style('dominant-baseline', 'central')
|
|
65
|
-
.style('stroke', (d) => getColor(d, config.nodeIconColor))
|
|
66
|
-
.style('fill', (d) => getColor(d, config.nodeIconColor))
|
|
67
|
-
.style('font-size', (d) => {
|
|
94
|
+
nodeIcon$1.each((d, i, els) => {
|
|
95
|
+
const el = select(els[i]);
|
|
68
96
|
const nodeHeight = d.y1 - d.y0;
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
97
|
+
const color = getColor(d, config.nodeIconColor);
|
|
98
|
+
const visibility = nodeHeight > 2 ? null : 'hidden';
|
|
99
|
+
const fontSize = nodeHeight < SANKEY_ICON_SIZE ? `${nodeHeight * 0.65}px` : null;
|
|
100
|
+
el
|
|
101
|
+
.attr('visibility', visibility)
|
|
102
|
+
.style('stroke', color)
|
|
103
|
+
.style('fill', color)
|
|
104
|
+
.style('font-size', fontSize)
|
|
105
|
+
.html(getString(d, config.nodeIcon));
|
|
106
|
+
});
|
|
72
107
|
smartTransition(nodeIcon$1, duration)
|
|
73
108
|
.attr('x', config.nodeWidth / 2)
|
|
74
109
|
.attr('y', (d) => (d.y1 - d.y0) / 2);
|
|
@@ -78,21 +113,26 @@ function updateNodes(sel, config, width, bleed, hasLinks, duration) {
|
|
|
78
113
|
.attr('visibility', 'hidden');
|
|
79
114
|
}
|
|
80
115
|
}
|
|
81
|
-
function renderNodeLabels(sel, config, width, duration,
|
|
116
|
+
function renderNodeLabels(sel, config, width, duration, layerSpacing, sankeyMaxLayer, bleed) {
|
|
117
|
+
var _a;
|
|
82
118
|
// Label Rendering
|
|
83
119
|
const labelGroupSelection = sel.select(`.${labelGroup}`);
|
|
84
120
|
const labelGroupEls = labelGroupSelection.nodes() || [];
|
|
85
|
-
// After rendering Label return a BBox so we can do intersection detection and hide some of
|
|
121
|
+
// After rendering Label return a BBox so we can do intersection detection and hide some of them
|
|
122
|
+
const data = sel.data();
|
|
86
123
|
const labelGroupBBoxes = labelGroupEls.map(g => {
|
|
87
124
|
const gSelection = select(g);
|
|
88
125
|
const datum = gSelection.datum();
|
|
89
|
-
|
|
126
|
+
const spacing = config.labelMaxWidthTakeAvailableSpace
|
|
127
|
+
? getXDistanceToNextNode(gSelection, datum, data, config, width)
|
|
128
|
+
: layerSpacing;
|
|
129
|
+
return renderLabel(gSelection, datum, config, width, duration, spacing, sankeyMaxLayer, bleed);
|
|
90
130
|
});
|
|
91
131
|
if (config.labelVisibility) {
|
|
92
132
|
for (const b of labelGroupBBoxes) {
|
|
93
133
|
const datum = b.selection.datum();
|
|
94
134
|
const box = { x: b.x, y: b.y, width: b.width, height: b.height };
|
|
95
|
-
b.hidden = !config.labelVisibility(datum, box,
|
|
135
|
+
b.hidden = !config.labelVisibility(datum, box, false);
|
|
96
136
|
}
|
|
97
137
|
}
|
|
98
138
|
else {
|
|
@@ -106,9 +146,11 @@ function renderNodeLabels(sel, config, width, duration, enforceNodeVisibility) {
|
|
|
106
146
|
const b0 = boxes[lastVisibleIdx];
|
|
107
147
|
const b1 = boxes[i];
|
|
108
148
|
const shouldBeHidden = b1.y < (b0.y + b0.height);
|
|
149
|
+
const b1Datum = b1.selection.datum();
|
|
109
150
|
if (shouldBeHidden) {
|
|
110
|
-
if (
|
|
151
|
+
if ((_a = config.selectedNodeIds) === null || _a === void 0 ? void 0 : _a.includes(b1Datum.id)) {
|
|
111
152
|
b0.hidden = true; // If the hovered node should be hidden, hide the previous one instead
|
|
153
|
+
}
|
|
112
154
|
else
|
|
113
155
|
b1.hidden = true;
|
|
114
156
|
}
|
|
@@ -136,21 +178,29 @@ function removeNodes(selection, config, duration) {
|
|
|
136
178
|
.remove();
|
|
137
179
|
});
|
|
138
180
|
}
|
|
139
|
-
function onNodeMouseOver(d, nodeSelection, config, width) {
|
|
181
|
+
function onNodeMouseOver(d, data, nodeSelection, config, width, layerSpacing, bleed) {
|
|
140
182
|
const labelGroup$1 = nodeSelection.raise()
|
|
141
183
|
.select(`.${labelGroup}`);
|
|
184
|
+
const spacing = config.labelMaxWidthTakeAvailableSpace
|
|
185
|
+
? getXDistanceToNextNode(nodeSelection, d, data, config, width)
|
|
186
|
+
: layerSpacing;
|
|
187
|
+
const maxLayer = max(data, d => d.layer);
|
|
142
188
|
if ((config.labelExpandTrimmedOnHover && labelGroup$1.classed(labelTrimmed)) || labelGroup$1.classed(hidden)) {
|
|
143
|
-
renderLabel(labelGroup$1, d, config, width, 0, true);
|
|
189
|
+
renderLabel(labelGroup$1, d, config, width, 0, spacing, maxLayer, bleed, true);
|
|
144
190
|
}
|
|
145
191
|
labelGroup$1.classed(forceShow, true);
|
|
146
192
|
}
|
|
147
|
-
function onNodeMouseOut(d, nodeSelection, config, width) {
|
|
193
|
+
function onNodeMouseOut(d, data, nodeSelection, config, width, layerSpacing, bleed) {
|
|
148
194
|
const labelGroup$1 = nodeSelection.select(`.${labelGroup}`);
|
|
195
|
+
const spacing = config.labelMaxWidthTakeAvailableSpace
|
|
196
|
+
? getXDistanceToNextNode(nodeSelection, d, data, config, width)
|
|
197
|
+
: layerSpacing;
|
|
149
198
|
if (config.labelExpandTrimmedOnHover || labelGroup$1.classed(hidden)) {
|
|
150
|
-
|
|
199
|
+
const maxLayer = max(data, d => d.layer);
|
|
200
|
+
renderLabel(labelGroup$1, d, config, width, 0, spacing, maxLayer, bleed, false);
|
|
151
201
|
}
|
|
152
202
|
labelGroup$1.classed(forceShow, false);
|
|
153
203
|
}
|
|
154
204
|
|
|
155
|
-
export { createNodes, onNodeMouseOut, onNodeMouseOver, removeNodes, renderNodeLabels, updateNodes };
|
|
205
|
+
export { NODE_SELECTION_RECT_DELTA, createNodes, onNodeMouseOut, onNodeMouseOver, removeNodes, renderNodeLabels, updateNodes };
|
|
156
206
|
//# sourceMappingURL=node.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sources":["../../../../src/components/sankey/modules/node.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\n\n// Utils\nimport { getColor } from 'utils/color'\nimport { getString } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\n\n// Types\nimport { Spacing } from 'types/spacing'\n\n// Local Types\nimport { SankeyEnterTransitionType, SankeyExitTransitionType, SankeyInputLink, SankeyInputNode, SankeyNode, SankeyNodeAlign } from '../types'\n\n// Config\nimport { SankeyConfigInterface } from '../config'\n\n// Helpers\nimport { renderLabel } from './label'\n\n// Styles\nimport * as s from '../style'\n\nexport function createNodes<N extends SankeyInputNode, L extends SankeyInputLink> (\n sel: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n width: number,\n bleed: Spacing\n): void {\n const { enterTransitionType } = config\n\n // Node\n sel.append('rect')\n .attr('class', s.node)\n .attr('width', config.nodeWidth)\n .attr('height', d => d.y1 - d.y0)\n .style('fill', node => getColor(node, config.nodeColor))\n\n // Labels\n const labelGroup = sel.append('g').attr('class', s.labelGroup)\n labelGroup.append('path').attr('class', s.labelBackground)\n labelGroup.append('text').attr('class', s.label)\n labelGroup.append('text').attr('class', s.sublabel)\n\n // Node icon\n sel.append('text').attr('class', s.nodeIcon)\n .attr('text-anchor', 'middle')\n .attr('dy', '0.5px')\n\n sel\n .attr('transform', d => {\n const x = (enterTransitionType === SankeyEnterTransitionType.FromAncestor && d.targetLinks?.[0]) ? d.targetLinks[0].source.x0 : d.x0\n return `translate(${sel.size() === 1 ? width * 0.5 - bleed.left : x}, ${d.y0})`\n })\n .style('opacity', 0)\n}\n\nfunction getNodeXPos<N extends SankeyInputNode, L extends SankeyInputLink> (\n d: SankeyNode<N, L>,\n config: SankeyConfigInterface<N, L>,\n width: number,\n bleed: Spacing,\n hasLinks: boolean\n): number {\n if (hasLinks) return d.x0\n\n switch (config.nodeAlign) {\n case SankeyNodeAlign.Left: return d.x0\n case SankeyNodeAlign.Right: return width - bleed.right\n case SankeyNodeAlign.Center:\n case SankeyNodeAlign.Justify:\n default: return width * 0.5 - bleed.left\n }\n}\n\nexport function updateNodes<N extends SankeyInputNode, L extends SankeyInputLink> (\n sel: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n width: number,\n bleed: Spacing,\n hasLinks: boolean,\n duration: number\n): void {\n smartTransition(sel, duration)\n .attr('transform', d => `translate(${getNodeXPos(d, config, width, bleed, hasLinks)},${d.y0})`)\n .style('opacity', d => d._state.greyout ? 0.2 : 1)\n\n // Node\n smartTransition(sel.select(`.${s.node}`), duration)\n .attr('width', config.nodeWidth)\n .attr('height', (d: SankeyNode<N, L>) => d.y1 - d.y0)\n .style('cursor', (d: SankeyNode<N, L>) => getString(d, config.nodeCursor))\n .style('fill', (d: SankeyNode<N, L>) => getColor(d, config.nodeColor))\n\n // Label Rendering\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n renderNodeLabels(sel, config, width, duration)\n\n // Node Icon\n const nodeIcon = sel.select(`.${s.nodeIcon}`)\n if (config.nodeIcon) {\n nodeIcon\n .attr('visibility', null)\n .attr('text-anchor', 'middle')\n .style('dominant-baseline', 'central')\n .style('stroke', (d: SankeyNode<N, L>) => getColor(d, config.nodeIconColor))\n .style('fill', (d: SankeyNode<N, L>) => getColor(d, config.nodeIconColor))\n .style('font-size', (d: SankeyNode<N, L>) => {\n const nodeHeight = d.y1 - d.y0\n return nodeHeight < s.SANKEY_ICON_SIZE ? `${nodeHeight * 0.65}px` : null\n })\n .html((d: SankeyNode<N, L>) => getString(d, config.nodeIcon))\n\n smartTransition(nodeIcon, duration)\n .attr('x', config.nodeWidth / 2)\n .attr('y', (d: SankeyNode<N, L>) => (d.y1 - d.y0) / 2)\n } else {\n nodeIcon\n .attr('visibility', 'hidden')\n }\n}\n\nexport function renderNodeLabels<N extends SankeyInputNode, L extends SankeyInputLink> (\n sel: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n width: number,\n duration: number,\n enforceNodeVisibility?: SankeyNode<N, L>\n): void {\n // Label Rendering\n const labelGroupSelection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, any> = sel.select(`.${s.labelGroup}`)\n const labelGroupEls = labelGroupSelection.nodes() || []\n\n // After rendering Label return a BBox so we can do intersection detection and hide some of tem\n const labelGroupBBoxes = labelGroupEls.map(g => {\n const gSelection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, any> = select(g)\n const datum = gSelection.datum()\n return renderLabel(gSelection, datum, config, width, duration, enforceNodeVisibility === datum)\n })\n\n if (config.labelVisibility) {\n for (const b of labelGroupBBoxes) {\n const datum = b.selection.datum() as SankeyNode<N, L>\n const box = { x: b.x, y: b.y, width: b.width, height: b.height }\n b.hidden = !config.labelVisibility(datum, box, enforceNodeVisibility === datum)\n }\n } else {\n // Detect intersecting labels\n const maxLayer = Math.max(...labelGroupBBoxes.map(b => b.layer))\n for (let layer = 0; layer <= maxLayer; layer += 1) {\n const boxes = labelGroupBBoxes.filter(b => (b.layer === layer))\n boxes.sort((a, b) => a.y - b.y)\n\n let lastVisibleIdx = 0\n for (let i = 1; i < boxes.length; i += 1) {\n const b0 = boxes[lastVisibleIdx]\n const b1 = boxes[i]\n\n const shouldBeHidden = b1.y < (b0.y + b0.height)\n if (shouldBeHidden) {\n if (b1.selection.datum() === enforceNodeVisibility) b0.hidden = true // If the hovered node should be hidden, hide the previous one instead\n else b1.hidden = true\n }\n\n if (!b1.hidden) lastVisibleIdx = i\n }\n }\n }\n\n // Hide intersecting labels\n for (const b of labelGroupBBoxes) {\n b.selection.classed(s.hidden, b.hidden)\n }\n}\n\nexport function removeNodes<N extends SankeyInputNode, L extends SankeyInputLink> (\n selection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n duration: number\n): void {\n const { exitTransitionType } = config\n\n selection.each((d, i, els) => {\n const node = select(els[i])\n const transition = smartTransition(node, duration)\n if ((exitTransitionType === SankeyExitTransitionType.ToAncestor) && d.targetLinks?.[0]) {\n transition.attr('transform', `translate(${d.targetLinks[0].source.x0},${d.y0})`)\n }\n\n transition\n .style('opacity', 0)\n .remove()\n })\n}\n\nexport function onNodeMouseOver<N extends SankeyInputNode, L extends SankeyInputLink> (\n d: SankeyNode<N, L>,\n nodeSelection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n width: number\n): void {\n const labelGroup = nodeSelection.raise()\n .select<SVGGElement>(`.${s.labelGroup}`)\n\n if ((config.labelExpandTrimmedOnHover && labelGroup.classed(s.labelTrimmed)) || labelGroup.classed(s.hidden)) {\n renderLabel(labelGroup, d, config, width, 0, true)\n }\n labelGroup.classed(s.forceShow, true)\n}\n\nexport function onNodeMouseOut<N extends SankeyInputNode, L extends SankeyInputLink> (\n d: SankeyNode<N, L>,\n nodeSelection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n width: number\n): void {\n const labelGroup = nodeSelection.select<SVGGElement>(`.${s.labelGroup}`)\n if (config.labelExpandTrimmedOnHover || labelGroup.classed(s.hidden)) {\n renderLabel(labelGroup, d, config, width, 0)\n }\n labelGroup.classed(s.forceShow, false)\n}\n"],"names":["s.node","labelGroup","s.labelGroup","s.labelBackground","s.label","s.sublabel","s.nodeIcon","nodeIcon","s.SANKEY_ICON_SIZE","s.hidden","s.labelTrimmed","s.forceShow"],"mappings":";;;;;;;;AAsBM,SAAU,WAAW,CACzB,GAAmE,EACnE,MAAmC,EACnC,KAAa,EACb,KAAc,EAAA;AAEd,IAAA,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAAA;;AAGtC,IAAA,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;AACf,SAAA,IAAI,CAAC,OAAO,EAAEA,IAAM,CAAC;AACrB,SAAA,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC;AAC/B,SAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;AAChC,SAAA,KAAK,CAAC,MAAM,EAAE,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;;AAG1D,IAAA,MAAMC,YAAU,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEC,UAAY,CAAC,CAAA;AAC9D,IAAAD,YAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEE,eAAiB,CAAC,CAAA;AAC1D,IAAAF,YAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEG,KAAO,CAAC,CAAA;AAChD,IAAAH,YAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEI,QAAU,CAAC,CAAA;;AAGnD,IAAA,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEC,QAAU,CAAC;AACzC,SAAA,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;AAC7B,SAAA,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAEtB,GAAG;AACA,SAAA,IAAI,CAAC,WAAW,EAAE,CAAC,IAAG;;AACrB,QAAA,MAAM,CAAC,GAAG,CAAC,mBAAmB,KAAK,yBAAyB,CAAC,YAAY,KAAI,CAAA,EAAA,GAAA,CAAC,CAAC,WAAW,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,CAAC,CAAC,CAAA,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAA;QACpI,OAAO,CAAA,UAAA,EAAa,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,CAAA,EAAA,EAAK,CAAC,CAAC,EAAE,CAAA,CAAA,CAAG,CAAA;AACjF,KAAC,CAAC;AACD,SAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;AACxB,CAAC;AAED,SAAS,WAAW,CAClB,CAAmB,EACnB,MAAmC,EACnC,KAAa,EACb,KAAc,EACd,QAAiB,EAAA;AAEjB,IAAA,IAAI,QAAQ;QAAE,OAAO,CAAC,CAAC,EAAE,CAAA;IAEzB,QAAQ,MAAM,CAAC,SAAS;QACtB,KAAK,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,CAAA;QACtC,KAAK,eAAe,CAAC,KAAK,EAAE,OAAO,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;QACtD,KAAK,eAAe,CAAC,MAAM,CAAC;QAC5B,KAAK,eAAe,CAAC,OAAO,CAAC;QAC7B,SAAS,OAAO,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,CAAA;AACzC,KAAA;AACH,CAAC;AAEe,SAAA,WAAW,CACzB,GAAmE,EACnE,MAAmC,EACnC,KAAa,EACb,KAAc,EACd,QAAiB,EACjB,QAAgB,EAAA;AAEhB,IAAA,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC;SAC3B,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAA,UAAA,EAAa,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,EAAE,CAAA,CAAA,CAAG,CAAC;SAC9F,KAAK,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,GAAG,CAAC,CAAC,CAAA;;AAGpD,IAAA,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA,CAAA,EAAIN,IAAM,CAAA,CAAE,CAAC,EAAE,QAAQ,CAAC;AAChD,SAAA,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC;AAC/B,SAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAmB,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;AACpD,SAAA,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAmB,KAAK,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;AACzE,SAAA,KAAK,CAAC,MAAM,EAAE,CAAC,CAAmB,KAAK,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;;;IAIxE,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;;AAG9C,IAAA,MAAMO,UAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,CAAI,CAAA,EAAAD,QAAU,CAAE,CAAA,CAAC,CAAA;IAC7C,IAAI,MAAM,CAAC,QAAQ,EAAE;QACnBC,UAAQ;AACL,aAAA,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC;AACxB,aAAA,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;AAC7B,aAAA,KAAK,CAAC,mBAAmB,EAAE,SAAS,CAAC;AACrC,aAAA,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAmB,KAAK,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;AAC3E,aAAA,KAAK,CAAC,MAAM,EAAE,CAAC,CAAmB,KAAK,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;AACzE,aAAA,KAAK,CAAC,WAAW,EAAE,CAAC,CAAmB,KAAI;YAC1C,MAAM,UAAU,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAA;AAC9B,YAAA,OAAO,UAAU,GAAGC,gBAAkB,GAAG,CAAG,EAAA,UAAU,GAAG,IAAI,CAAA,EAAA,CAAI,GAAG,IAAI,CAAA;AAC1E,SAAC,CAAC;AACD,aAAA,IAAI,CAAC,CAAC,CAAmB,KAAK,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;AAE/D,QAAA,eAAe,CAACD,UAAQ,EAAE,QAAQ,CAAC;aAChC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;aAC/B,IAAI,CAAC,GAAG,EAAE,CAAC,CAAmB,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;AACzD,KAAA;AAAM,SAAA;QACLA,UAAQ;AACL,aAAA,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;AAChC,KAAA;AACH,CAAC;AAEK,SAAU,gBAAgB,CAC9B,GAAmE,EACnE,MAAmC,EACnC,KAAa,EACb,QAAgB,EAChB,qBAAwC,EAAA;;AAGxC,IAAA,MAAM,mBAAmB,GAA+D,GAAG,CAAC,MAAM,CAAC,CAAI,CAAA,EAAAL,UAAY,CAAE,CAAA,CAAC,CAAA;IACtH,MAAM,aAAa,GAAG,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,CAAA;;IAGvD,MAAM,gBAAgB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAG;AAC7C,QAAA,MAAM,UAAU,GAA+D,MAAM,CAAC,CAAC,CAAC,CAAA;AACxF,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,CAAA;AAChC,QAAA,OAAO,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,qBAAqB,KAAK,KAAK,CAAC,CAAA;AACjG,KAAC,CAAC,CAAA;IAEF,IAAI,MAAM,CAAC,eAAe,EAAE;AAC1B,QAAA,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE;YAChC,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,EAAsB,CAAA;YACrD,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAA;AAChE,YAAA,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,qBAAqB,KAAK,KAAK,CAAC,CAAA;AAChF,SAAA;AACF,KAAA;AAAM,SAAA;;QAEL,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;AAChE,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,QAAQ,EAAE,KAAK,IAAI,CAAC,EAAE;AACjD,YAAA,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAA;AAC/D,YAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YAE/B,IAAI,cAAc,GAAG,CAAC,CAAA;AACtB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AACxC,gBAAA,MAAM,EAAE,GAAG,KAAK,CAAC,cAAc,CAAC,CAAA;AAChC,gBAAA,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;AAEnB,gBAAA,MAAM,cAAc,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;AAChD,gBAAA,IAAI,cAAc,EAAE;AAClB,oBAAA,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,qBAAqB;AAAE,wBAAA,EAAE,CAAC,MAAM,GAAG,IAAI,CAAA;;AAC/D,wBAAA,EAAE,CAAC,MAAM,GAAG,IAAI,CAAA;AACtB,iBAAA;gBAED,IAAI,CAAC,EAAE,CAAC,MAAM;oBAAE,cAAc,GAAG,CAAC,CAAA;AACnC,aAAA;AACF,SAAA;AACF,KAAA;;AAGD,IAAA,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE;AAChC,QAAA,CAAC,CAAC,SAAS,CAAC,OAAO,CAACO,MAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;AACxC,KAAA;AACH,CAAC;SAEe,WAAW,CACzB,SAAyE,EACzE,MAAmC,EACnC,QAAgB,EAAA;AAEhB,IAAA,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAAA;IAErC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,KAAI;;QAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3B,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AAClD,QAAA,IAAI,CAAC,kBAAkB,KAAK,wBAAwB,CAAC,UAAU,MAAK,CAAA,EAAA,GAAA,CAAC,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAG,CAAC,CAAC,CAAA,EAAE;YACtF,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAa,UAAA,EAAA,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAA,CAAA,EAAI,CAAC,CAAC,EAAE,CAAG,CAAA,CAAA,CAAC,CAAA;AACjF,SAAA;QAED,UAAU;AACP,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AACnB,aAAA,MAAM,EAAE,CAAA;AACb,KAAC,CAAC,CAAA;AACJ,CAAC;AAEK,SAAU,eAAe,CAC7B,CAAmB,EACnB,aAA6E,EAC7E,MAAmC,EACnC,KAAa,EAAA;AAEb,IAAA,MAAMR,YAAU,GAAG,aAAa,CAAC,KAAK,EAAE;AACrC,SAAA,MAAM,CAAc,CAAI,CAAA,EAAAC,UAAY,CAAA,CAAE,CAAC,CAAA;IAE1C,IAAI,CAAC,MAAM,CAAC,yBAAyB,IAAID,YAAU,CAAC,OAAO,CAACS,YAAc,CAAC,KAAKT,YAAU,CAAC,OAAO,CAACQ,MAAQ,CAAC,EAAE;AAC5G,QAAA,WAAW,CAACR,YAAU,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;AACnD,KAAA;IACDA,YAAU,CAAC,OAAO,CAACU,SAAW,EAAE,IAAI,CAAC,CAAA;AACvC,CAAC;AAEK,SAAU,cAAc,CAC5B,CAAmB,EACnB,aAA6E,EAC7E,MAAmC,EACnC,KAAa,EAAA;AAEb,IAAA,MAAMV,YAAU,GAAG,aAAa,CAAC,MAAM,CAAc,CAAI,CAAA,EAAAC,UAAY,CAAE,CAAA,CAAC,CAAA;AACxE,IAAA,IAAI,MAAM,CAAC,yBAAyB,IAAID,YAAU,CAAC,OAAO,CAACQ,MAAQ,CAAC,EAAE;QACpE,WAAW,CAACR,YAAU,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;AAC7C,KAAA;IACDA,YAAU,CAAC,OAAO,CAACU,SAAW,EAAE,KAAK,CAAC,CAAA;AACxC;;;;"}
|
|
1
|
+
{"version":3,"file":"node.js","sources":["../../../../src/components/sankey/modules/node.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { max } from 'd3-array'\n\n// Utils\nimport { getColor } from 'utils/color'\nimport { getString, isNumber } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\n\n// Types\nimport { Spacing } from 'types/spacing'\n\n// Local Types\nimport {\n SankeyEnterTransitionType,\n SankeyExitTransitionType,\n SankeyInputLink,\n SankeyInputNode,\n SankeyNode,\n SankeyNodeAlign,\n SankeySubLabelPlacement,\n} from '../types'\n\n// Config\nimport { SankeyConfigInterface } from '../config'\n\n// Helpers\nimport { getLabelFontSize, getSubLabelFontSize, renderLabel } from './label'\n\n// Styles\nimport * as s from '../style'\n\nexport const NODE_SELECTION_RECT_DELTA = 3\n\nexport function createNodes<N extends SankeyInputNode, L extends SankeyInputLink> (\n sel: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n width: number,\n bleed: Spacing\n): void {\n const { enterTransitionType } = config\n\n // Node\n sel.append('rect')\n .attr('class', s.nodeSelectionRect)\n .attr('width', config.nodeWidth + NODE_SELECTION_RECT_DELTA * 2)\n .attr('height', d => d.y1 - d.y0 + NODE_SELECTION_RECT_DELTA * 2)\n .attr('x', -NODE_SELECTION_RECT_DELTA)\n .attr('y', -NODE_SELECTION_RECT_DELTA)\n .style('stroke', node => getColor(node, config.nodeColor))\n .style('opacity', 0)\n\n sel.append('rect')\n .attr('class', s.node)\n .attr('width', config.nodeWidth)\n .attr('height', d => d.y1 - d.y0)\n .style('fill', node => getColor(node, config.nodeColor))\n\n // Labels\n const labelGroup = sel.append('g').attr('class', s.labelGroup)\n labelGroup.append('path').attr('class', s.labelBackground)\n labelGroup.append('text').attr('class', s.label)\n labelGroup.append('text').attr('class', s.sublabel)\n\n // Node icon\n sel.append('text').attr('class', s.nodeIcon)\n .attr('text-anchor', 'middle')\n\n sel\n .attr('transform', d => {\n const x = (enterTransitionType === SankeyEnterTransitionType.FromAncestor && d.targetLinks?.[0]) ? d.targetLinks[0].source.x0 : d.x0\n return `translate(${sel.size() === 1 ? width * 0.5 - bleed.left : x}, ${d.y0})`\n })\n .style('opacity', 0)\n}\n\nfunction getNodeXPos<N extends SankeyInputNode, L extends SankeyInputLink> (\n d: SankeyNode<N, L>,\n config: SankeyConfigInterface<N, L>,\n width: number,\n bleed: Spacing,\n hasLinks: boolean\n): number {\n if (hasLinks) return d.x0\n\n switch (config.nodeAlign) {\n case SankeyNodeAlign.Left: return d.x0\n case SankeyNodeAlign.Right: return width - bleed.right\n case SankeyNodeAlign.Center:\n case SankeyNodeAlign.Justify:\n default: return width * 0.5 - bleed.left\n }\n}\n\nfunction getXDistanceToNextNode<N extends SankeyInputNode, L extends SankeyInputLink> (\n sel: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n datum: SankeyNode<N, L>,\n data: SankeyNode<N, L>[], // Assuming that the nodes are sorted by the x position for performance reasons\n config: SankeyConfigInterface<N, L>,\n width: number\n): number {\n let yTolerance = config.labelMaxWidthTakeAvailableSpaceTolerance\n if (!isNumber(yTolerance)) {\n const labelFontSize = getLabelFontSize(config, sel.node())\n const subLabelFontSize = getSubLabelFontSize(config, sel.node())\n const hasSecondLineSublabel = getString(datum, config.subLabel) && config.subLabelPlacement !== SankeySubLabelPlacement.Inline\n yTolerance = (labelFontSize + subLabelFontSize) / (hasSecondLineSublabel ? 2 : 4)\n }\n\n // Assuming that the nodes are sorted by the x position\n const nodeOnTheRight = data.find(d =>\n d.layer > datum.layer &&\n d.x0 >= datum.x1 &&\n d.y1 >= (datum.y0 - yTolerance) &&\n d.y0 <= (datum.y1 + yTolerance)\n )\n\n return (nodeOnTheRight ? nodeOnTheRight.x0 : width) - datum.x1\n}\n\nexport function updateNodes<N extends SankeyInputNode, L extends SankeyInputLink> (\n sel: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n width: number,\n bleed: Spacing,\n hasLinks: boolean,\n duration: number,\n layerSpacing: number\n): void {\n smartTransition(sel, duration)\n .attr('transform', d => `translate(${getNodeXPos(d, config, width, bleed, hasLinks)},${d.y0})`)\n .style('opacity', d => d._state.greyout ? 0.2 : 1)\n\n // Node\n smartTransition(sel.select(`.${s.nodeSelectionRect}`), duration)\n .attr('width', config.nodeWidth + NODE_SELECTION_RECT_DELTA * 2)\n .attr('height', d => d.y1 - d.y0 + NODE_SELECTION_RECT_DELTA * 2)\n .attr('x', -NODE_SELECTION_RECT_DELTA)\n .attr('y', -NODE_SELECTION_RECT_DELTA)\n .style('stroke', (d: SankeyNode<N, L>) => getColor(d, config.nodeColor))\n .style('opacity', d => config.selectedNodeIds?.includes(d.id) ? 1 : 0)\n\n smartTransition(sel.select(`.${s.node}`), duration)\n .attr('width', config.nodeWidth)\n .attr('height', (d: SankeyNode<N, L>) => d.y1 - d.y0)\n .style('cursor', (d: SankeyNode<N, L>) => getString(d, config.nodeCursor))\n .style('fill', (d: SankeyNode<N, L>) => getColor(d, config.nodeColor))\n\n // Label Rendering\n const maxLayer = max(sel.data(), d => d.layer)\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n renderNodeLabels(sel, config, width, duration, layerSpacing, maxLayer, bleed)\n\n // Node Icon\n const nodeIcon = sel.select(`.${s.nodeIcon}`)\n if (config.nodeIcon) {\n nodeIcon.each((d, i, els) => {\n const el = select(els[i])\n const nodeHeight = d.y1 - d.y0\n const color = getColor(d, config.nodeIconColor)\n const visibility = nodeHeight > 2 ? null : 'hidden'\n const fontSize = nodeHeight < s.SANKEY_ICON_SIZE ? `${nodeHeight * 0.65}px` : null\n\n el\n .attr('visibility', visibility)\n .style('stroke', color)\n .style('fill', color)\n .style('font-size', fontSize)\n .html(getString(d, config.nodeIcon))\n })\n\n smartTransition(nodeIcon, duration)\n .attr('x', config.nodeWidth / 2)\n .attr('y', (d: SankeyNode<N, L>) => (d.y1 - d.y0) / 2)\n } else {\n nodeIcon\n .attr('visibility', 'hidden')\n }\n}\n\nexport function renderNodeLabels<N extends SankeyInputNode, L extends SankeyInputLink> (\n sel: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n width: number,\n duration: number,\n layerSpacing: number,\n sankeyMaxLayer: number,\n bleed: Spacing\n): void {\n // Label Rendering\n const labelGroupSelection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown> = sel.select(`.${s.labelGroup}`)\n const labelGroupEls = labelGroupSelection.nodes() || []\n\n // After rendering Label return a BBox so we can do intersection detection and hide some of them\n const data = sel.data()\n const labelGroupBBoxes = labelGroupEls.map(g => {\n const gSelection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown> = select(g)\n const datum = gSelection.datum()\n const spacing = config.labelMaxWidthTakeAvailableSpace\n ? getXDistanceToNextNode(gSelection, datum, data, config, width)\n : layerSpacing\n\n return renderLabel(gSelection, datum, config, width, duration, spacing, sankeyMaxLayer, bleed)\n })\n\n if (config.labelVisibility) {\n for (const b of labelGroupBBoxes) {\n const datum = b.selection.datum() as SankeyNode<N, L>\n const box = { x: b.x, y: b.y, width: b.width, height: b.height }\n b.hidden = !config.labelVisibility(datum, box, false)\n }\n } else {\n // Detect intersecting labels\n const maxLayer = Math.max(...labelGroupBBoxes.map(b => b.layer))\n for (let layer = 0; layer <= maxLayer; layer += 1) {\n const boxes = labelGroupBBoxes.filter(b => (b.layer === layer))\n boxes.sort((a, b) => a.y - b.y)\n\n let lastVisibleIdx = 0\n for (let i = 1; i < boxes.length; i += 1) {\n const b0 = boxes[lastVisibleIdx]\n const b1 = boxes[i]\n\n const shouldBeHidden = b1.y < (b0.y + b0.height)\n const b1Datum = b1.selection.datum() as SankeyNode<N, L>\n if (shouldBeHidden) {\n if (config.selectedNodeIds?.includes(b1Datum.id)) {\n b0.hidden = true // If the hovered node should be hidden, hide the previous one instead\n } else b1.hidden = true\n }\n\n if (!b1.hidden) lastVisibleIdx = i\n }\n }\n }\n\n // Hide intersecting labels\n for (const b of labelGroupBBoxes) {\n b.selection.classed(s.hidden, b.hidden)\n }\n}\n\nexport function removeNodes<N extends SankeyInputNode, L extends SankeyInputLink> (\n selection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n duration: number\n): void {\n const { exitTransitionType } = config\n\n selection.each((d, i, els) => {\n const node = select(els[i])\n const transition = smartTransition(node, duration)\n if ((exitTransitionType === SankeyExitTransitionType.ToAncestor) && d.targetLinks?.[0]) {\n transition.attr('transform', `translate(${d.targetLinks[0].source.x0},${d.y0})`)\n }\n\n transition\n .style('opacity', 0)\n .remove()\n })\n}\n\nexport function onNodeMouseOver<N extends SankeyInputNode, L extends SankeyInputLink> (\n d: SankeyNode<N, L>,\n data: SankeyNode<N, L>[],\n nodeSelection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n width: number,\n layerSpacing: number,\n bleed: Spacing\n): void {\n const labelGroup = nodeSelection.raise()\n .select<SVGGElement>(`.${s.labelGroup}`)\n\n const spacing = config.labelMaxWidthTakeAvailableSpace\n ? getXDistanceToNextNode(nodeSelection, d, data, config, width)\n : layerSpacing\n\n const maxLayer = max(data, d => d.layer)\n if ((config.labelExpandTrimmedOnHover && labelGroup.classed(s.labelTrimmed)) || labelGroup.classed(s.hidden)) {\n renderLabel(labelGroup, d, config, width, 0, spacing, maxLayer, bleed, true)\n }\n labelGroup.classed(s.forceShow, true)\n}\n\nexport function onNodeMouseOut<N extends SankeyInputNode, L extends SankeyInputLink> (\n d: SankeyNode<N, L>,\n data: SankeyNode<N, L>[],\n nodeSelection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n width: number,\n layerSpacing: number,\n bleed: Spacing\n): void {\n const labelGroup = nodeSelection.select<SVGGElement>(`.${s.labelGroup}`)\n\n const spacing = config.labelMaxWidthTakeAvailableSpace\n ? getXDistanceToNextNode(nodeSelection, d, data, config, width)\n : layerSpacing\n\n if (config.labelExpandTrimmedOnHover || labelGroup.classed(s.hidden)) {\n const maxLayer = max(data, d => d.layer)\n renderLabel(labelGroup, d, config, width, 0, spacing, maxLayer, bleed, false)\n }\n labelGroup.classed(s.forceShow, false)\n}\n"],"names":["s.nodeSelectionRect","s.node","labelGroup","s.labelGroup","s.labelBackground","s.label","s.sublabel","s.nodeIcon","nodeIcon","s.SANKEY_ICON_SIZE","s.hidden","s.labelTrimmed","s.forceShow"],"mappings":"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"}
|
|
@@ -1,6 +1,71 @@
|
|
|
1
1
|
export declare const SANKEY_ICON_SIZE = 22;
|
|
2
2
|
export declare const root: string;
|
|
3
|
-
export declare const
|
|
3
|
+
export declare const cssVarDefaults: {
|
|
4
|
+
'--vis-sankey-link-cursor': string;
|
|
5
|
+
'--vis-sankey-link-color': string;
|
|
6
|
+
'--vis-sankey-link-opacity': string;
|
|
7
|
+
'--vis-sankey-link-hover-opacity': string;
|
|
8
|
+
'--vis-sankey-node-cursor': string;
|
|
9
|
+
'--vis-sankey-node-color': string;
|
|
10
|
+
'--vis-sankey-node-label-color': string;
|
|
11
|
+
'--vis-sankey-node-opacity': string;
|
|
12
|
+
'--vis-sankey-node-hover-opacity': string;
|
|
13
|
+
'--vis-sankey-node-selection-stroke-width': string;
|
|
14
|
+
'--vis-sankey-node-selection-stroke-opacity': string;
|
|
15
|
+
'--vis-sankey-node-selection-border-radius': string;
|
|
16
|
+
'--vis-sankey-node-label-background-fill-color': string;
|
|
17
|
+
'--vis-sankey-node-label-background-stroke-color': string;
|
|
18
|
+
'--vis-sankey-node-label-background-opacity': string;
|
|
19
|
+
'--vis-sankey-node-label-cursor': string;
|
|
20
|
+
'--vis-sankey-node-label-font-weight': string;
|
|
21
|
+
'--vis-sankey-node-label-font-size': string;
|
|
22
|
+
'--vis-sankey-node-label-text-decoration': string;
|
|
23
|
+
'--vis-sankey-node-sublabel-font-size': string;
|
|
24
|
+
'--vis-sankey-node-sublabel-font-weight': string;
|
|
25
|
+
'--vis-sankey-icon-size': string;
|
|
26
|
+
'--vis-sankey-icon-color': string;
|
|
27
|
+
'--vis-sankey-icon-stroke-opacity': string;
|
|
28
|
+
'--vis-sankey-icon-font-family': string;
|
|
29
|
+
'--vis-dark-sankey-link-color': string;
|
|
30
|
+
'--vis-dark-sankey-node-color': string;
|
|
31
|
+
'--vis-dark-sankey-node-label-color': string;
|
|
32
|
+
'--vis-dark-sankey-node-label-background-fill-color': string;
|
|
33
|
+
'--vis-dark-sankey-node-label-background-stroke-color': string;
|
|
34
|
+
'--vis-dark-sankey-icon-color': string;
|
|
35
|
+
};
|
|
36
|
+
export declare const variables: {
|
|
37
|
+
sankeyLinkCursor: "--vis-sankey-link-cursor";
|
|
38
|
+
sankeyLinkColor: "--vis-sankey-link-color";
|
|
39
|
+
sankeyLinkOpacity: "--vis-sankey-link-opacity";
|
|
40
|
+
sankeyLinkHoverOpacity: "--vis-sankey-link-hover-opacity";
|
|
41
|
+
sankeyNodeCursor: "--vis-sankey-node-cursor";
|
|
42
|
+
sankeyNodeColor: "--vis-sankey-node-color";
|
|
43
|
+
sankeyNodeLabelColor: "--vis-sankey-node-label-color";
|
|
44
|
+
sankeyNodeOpacity: "--vis-sankey-node-opacity";
|
|
45
|
+
sankeyNodeHoverOpacity: "--vis-sankey-node-hover-opacity";
|
|
46
|
+
sankeyNodeSelectionStrokeWidth: "--vis-sankey-node-selection-stroke-width";
|
|
47
|
+
sankeyNodeSelectionStrokeOpacity: "--vis-sankey-node-selection-stroke-opacity";
|
|
48
|
+
sankeyNodeSelectionBorderRadius: "--vis-sankey-node-selection-border-radius";
|
|
49
|
+
sankeyNodeLabelBackgroundFillColor: "--vis-sankey-node-label-background-fill-color";
|
|
50
|
+
sankeyNodeLabelBackgroundStrokeColor: "--vis-sankey-node-label-background-stroke-color";
|
|
51
|
+
sankeyNodeLabelBackgroundOpacity: "--vis-sankey-node-label-background-opacity";
|
|
52
|
+
sankeyNodeLabelCursor: "--vis-sankey-node-label-cursor";
|
|
53
|
+
sankeyNodeLabelFontWeight: "--vis-sankey-node-label-font-weight";
|
|
54
|
+
sankeyNodeLabelFontSize: "--vis-sankey-node-label-font-size";
|
|
55
|
+
sankeyNodeLabelTextDecoration: "--vis-sankey-node-label-text-decoration";
|
|
56
|
+
sankeyNodeSublabelFontSize: "--vis-sankey-node-sublabel-font-size";
|
|
57
|
+
sankeyNodeSublabelFontWeight: "--vis-sankey-node-sublabel-font-weight";
|
|
58
|
+
sankeyIconSize: "--vis-sankey-icon-size";
|
|
59
|
+
sankeyIconColor: "--vis-sankey-icon-color";
|
|
60
|
+
sankeyIconStrokeOpacity: "--vis-sankey-icon-stroke-opacity";
|
|
61
|
+
sankeyIconFontFamily: "--vis-sankey-icon-font-family";
|
|
62
|
+
darkSankeyLinkColor: "--vis-dark-sankey-link-color";
|
|
63
|
+
darkSankeyNodeColor: "--vis-dark-sankey-node-color";
|
|
64
|
+
darkSankeyNodeLabelColor: "--vis-dark-sankey-node-label-color";
|
|
65
|
+
darkSankeyNodeLabelBackgroundFillColor: "--vis-dark-sankey-node-label-background-fill-color";
|
|
66
|
+
darkSankeyNodeLabelBackgroundStrokeColor: "--vis-dark-sankey-node-label-background-stroke-color";
|
|
67
|
+
darkSankeyIconColor: "--vis-dark-sankey-icon-color";
|
|
68
|
+
};
|
|
4
69
|
export declare const links: string;
|
|
5
70
|
export declare const nodes: string;
|
|
6
71
|
export declare const link: string;
|
|
@@ -17,4 +82,5 @@ export declare const nodeGroup: string;
|
|
|
17
82
|
export declare const node: string;
|
|
18
83
|
export declare const nodeIcon: string;
|
|
19
84
|
export declare const nodeExit: string;
|
|
85
|
+
export declare const nodeSelectionRect: string;
|
|
20
86
|
export declare const background: string;
|