@unovis/ts 1.6.2 → 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.
Files changed (110) hide show
  1. package/components/annotations/config.d.ts +2 -0
  2. package/components/annotations/config.js +1 -1
  3. package/components/annotations/config.js.map +1 -1
  4. package/components/annotations/index.d.ts +1 -0
  5. package/components/annotations/index.js +25 -10
  6. package/components/annotations/index.js.map +1 -1
  7. package/components/annotations/style.d.ts +2 -0
  8. package/components/annotations/style.js +8 -1
  9. package/components/annotations/style.js.map +1 -1
  10. package/components/area/config.d.ts +11 -1
  11. package/components/area/config.js +1 -1
  12. package/components/area/config.js.map +1 -1
  13. package/components/area/index.d.ts +6 -0
  14. package/components/area/index.js +80 -7
  15. package/components/area/index.js.map +1 -1
  16. package/components/area/style.d.ts +1 -0
  17. package/components/area/style.js +7 -1
  18. package/components/area/style.js.map +1 -1
  19. package/components/axis/index.d.ts +2 -0
  20. package/components/axis/index.js +46 -7
  21. package/components/axis/index.js.map +1 -1
  22. package/components/bullet-legend/index.d.ts +2 -0
  23. package/components/bullet-legend/index.js +9 -5
  24. package/components/bullet-legend/index.js.map +1 -1
  25. package/components/bullet-legend/modules/shape.js +3 -2
  26. package/components/bullet-legend/modules/shape.js.map +1 -1
  27. package/components/crosshair/config.d.ts +1 -1
  28. package/components/crosshair/config.js.map +1 -1
  29. package/components/crosshair/index.d.ts +1 -1
  30. package/components/crosshair/index.js +3 -2
  31. package/components/crosshair/index.js.map +1 -1
  32. package/components/flow-legend/config.d.ts +10 -0
  33. package/components/flow-legend/config.js +4 -0
  34. package/components/flow-legend/config.js.map +1 -1
  35. package/components/flow-legend/index.d.ts +6 -2
  36. package/components/flow-legend/index.js +34 -16
  37. package/components/flow-legend/index.js.map +1 -1
  38. package/components/flow-legend/style.d.ts +3 -3
  39. package/components/flow-legend/style.js +30 -26
  40. package/components/flow-legend/style.js.map +1 -1
  41. package/components/free-brush/types.js +1 -0
  42. package/components/free-brush/types.js.map +1 -1
  43. package/components/graph/index.d.ts +1 -0
  44. package/components/graph/index.js +35 -14
  45. package/components/graph/index.js.map +1 -1
  46. package/components/graph/modules/link/index.js +2 -2
  47. package/components/graph/modules/link/index.js.map +1 -1
  48. package/components/graph/modules/node/index.js +2 -1
  49. package/components/graph/modules/node/index.js.map +1 -1
  50. package/components/leaflet-map/leaflet.css.js +2 -2
  51. package/components/leaflet-map/modules/map.js +2 -2
  52. package/components/leaflet-map/modules/map.js.map +1 -1
  53. package/components/leaflet-map/renderer/mapboxgl-utils.d.ts +0 -1
  54. package/components/leaflet-map/renderer/mapboxgl-utils.js +1 -2
  55. package/components/leaflet-map/renderer/mapboxgl-utils.js.map +1 -1
  56. package/components/sankey/config.d.ts +28 -2
  57. package/components/sankey/config.js +2 -2
  58. package/components/sankey/config.js.map +1 -1
  59. package/components/sankey/index.d.ts +28 -2
  60. package/components/sankey/index.js +366 -46
  61. package/components/sankey/index.js.map +1 -1
  62. package/components/sankey/modules/label.d.ts +8 -5
  63. package/components/sankey/modules/label.js +64 -32
  64. package/components/sankey/modules/label.js.map +1 -1
  65. package/components/sankey/modules/link.d.ts +1 -0
  66. package/components/sankey/modules/link.js +20 -25
  67. package/components/sankey/modules/link.js.map +1 -1
  68. package/components/sankey/modules/node.d.ts +5 -4
  69. package/components/sankey/modules/node.js +78 -28
  70. package/components/sankey/modules/node.js.map +1 -1
  71. package/components/sankey/style.d.ts +67 -1
  72. package/components/sankey/style.js +78 -77
  73. package/components/sankey/style.js.map +1 -1
  74. package/components/sankey/types.d.ts +5 -0
  75. package/components/sankey/types.js +9 -2
  76. package/components/sankey/types.js.map +1 -1
  77. package/components/stacked-bar/index.d.ts +1 -1
  78. package/components/stacked-bar/index.js +24 -14
  79. package/components/stacked-bar/index.js.map +1 -1
  80. package/components/stacked-bar/types.d.ts +6 -4
  81. package/components/treemap/config.d.ts +2 -0
  82. package/components/treemap/config.js +1 -1
  83. package/components/treemap/config.js.map +1 -1
  84. package/components/treemap/index.d.ts +6 -2
  85. package/components/treemap/index.js +97 -71
  86. package/components/treemap/index.js.map +1 -1
  87. package/components/treemap/style.d.ts +1 -0
  88. package/components/treemap/style.js +5 -1
  89. package/components/treemap/style.js.map +1 -1
  90. package/components/treemap/types.d.ts +1 -0
  91. package/containers/single-container/config.d.ts +3 -0
  92. package/containers/single-container/config.js.map +1 -1
  93. package/containers/single-container/index.js +2 -1
  94. package/containers/single-container/index.js.map +1 -1
  95. package/containers/xy-container/config.d.ts +3 -0
  96. package/containers/xy-container/config.js.map +1 -1
  97. package/containers/xy-container/index.d.ts +1 -0
  98. package/containers/xy-container/index.js +13 -9
  99. package/containers/xy-container/index.js.map +1 -1
  100. package/index.js +1 -1
  101. package/package.json +41 -6
  102. package/types.js +1 -1
  103. package/utils/misc.js +13 -2
  104. package/utils/misc.js.map +1 -1
  105. package/utils/text.d.ts +1 -1
  106. package/utils/text.js +17 -15
  107. package/utils/text.js.map +1 -1
  108. package/utils/to-px.d.ts +1 -0
  109. package/utils/to-px.js +110 -0
  110. 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
- return linkPath({
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) => linkPath({
82
- x0: d.source.x1,
83
- x1: d.target.x0,
84
- y0: d.y0,
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 = {\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 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 = {\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 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 el[i]._animState = next\n\n return function (t: number) {\n return linkPath({\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 })\n } else {\n linkSelection.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(1, d.width),\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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"}
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, enforceNodeVisibility?: SankeyNode<N, L>): void;
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 updateNodes(sel, config, width, bleed, hasLinks, duration) {
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
- .attr('visibility', null)
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
- return nodeHeight < SANKEY_ICON_SIZE ? `${nodeHeight * 0.65}px` : null;
70
- })
71
- .html((d) => getString(d, config.nodeIcon));
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, enforceNodeVisibility) {
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 tem
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
- return renderLabel(gSelection, datum, config, width, duration, enforceNodeVisibility === datum);
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, enforceNodeVisibility === datum);
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 (b1.selection.datum() === enforceNodeVisibility)
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
- renderLabel(labelGroup$1, d, config, width, 0);
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":"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"}
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 variables: void;
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;