@unovis/ts 1.5.2 → 1.6.0-bigip.0
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/axis/index.d.ts +0 -1
- package/components/axis/index.js +2 -10
- package/components/axis/index.js.map +1 -1
- package/components/brush/config.d.ts +1 -1
- package/components/brush/config.js.map +1 -1
- package/components/crosshair/config.d.ts +5 -0
- package/components/crosshair/config.js +1 -1
- package/components/crosshair/config.js.map +1 -1
- package/components/crosshair/index.d.ts +6 -1
- package/components/crosshair/index.js +182 -34
- package/components/crosshair/index.js.map +1 -1
- package/components/crosshair/sync-bus.d.ts +9 -0
- package/components/crosshair/sync-bus.js +27 -0
- package/components/crosshair/sync-bus.js.map +1 -0
- package/components/graph/config.d.ts +8 -0
- package/components/graph/config.js +1 -1
- package/components/graph/config.js.map +1 -1
- package/components/graph/index.d.ts +1 -0
- package/components/graph/index.js +14 -9
- package/components/graph/index.js.map +1 -1
- package/components/graph/modules/layout.js +31 -29
- package/components/graph/modules/layout.js.map +1 -1
- package/components/graph/modules/link/index.js +1 -1
- package/components/graph/modules/link/index.js.map +1 -1
- package/components/graph/types.d.ts +2 -1
- package/components/graph/types.js.map +1 -1
- package/components/plotband/config.d.ts +59 -0
- package/components/plotband/config.js +9 -0
- package/components/plotband/config.js.map +1 -0
- package/components/plotband/constants.d.ts +5 -0
- package/components/plotband/constants.js +413 -0
- package/components/plotband/constants.js.map +1 -0
- package/components/plotband/index.d.ts +15 -0
- package/components/plotband/index.js +92 -0
- package/components/plotband/index.js.map +1 -0
- package/components/plotband/style.d.ts +4 -0
- package/components/plotband/style.js +38 -0
- package/components/plotband/style.js.map +1 -0
- package/components/plotband/types.d.ts +51 -0
- package/components/plotband/types.js +27 -0
- package/components/plotband/types.js.map +1 -0
- package/components/timeline/config.d.ts +65 -14
- package/components/timeline/config.js +15 -1
- package/components/timeline/config.js.map +1 -1
- package/components/timeline/constants.d.ts +3 -0
- package/components/timeline/constants.js +6 -0
- package/components/timeline/constants.js.map +1 -0
- package/components/timeline/index.d.ts +21 -10
- package/components/timeline/index.js +379 -93
- package/components/timeline/index.js.map +1 -1
- package/components/timeline/style.d.ts +7 -0
- package/components/timeline/style.js +40 -1
- package/components/timeline/style.js.map +1 -1
- package/components/timeline/types.d.ts +62 -0
- package/components/timeline/types.js +2 -0
- package/components/timeline/types.js.map +1 -0
- package/components/timeline/utils.d.ts +2 -0
- package/components/timeline/utils.js +16 -0
- package/components/timeline/utils.js.map +1 -0
- package/components.d.ts +4 -2
- package/components.js +1 -0
- package/components.js.map +1 -1
- package/containers/xy-container/config.d.ts +2 -0
- package/containers/xy-container/config.js +1 -1
- package/containers/xy-container/config.js.map +1 -1
- package/containers/xy-container/index.js +2 -2
- package/containers/xy-container/index.js.map +1 -1
- package/data-models/graph.js +7 -1
- package/data-models/graph.js.map +1 -1
- package/index.js +4 -2
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/types/position.d.ts +2 -1
- package/types/position.js +1 -0
- package/types/position.js.map +1 -1
- package/types.d.ts +2 -0
- package/types.js +2 -0
- package/types.js.map +1 -1
- package/utils/data.d.ts +1 -1
- package/utils/data.js +1 -1
- package/utils/data.js.map +1 -1
- package/utils/index.js +2 -2
- package/utils/path.d.ts +8 -0
- package/utils/path.js +109 -1
- package/utils/path.js.map +1 -1
- package/utils/text.d.ts +2 -1
- package/utils/text.js +10 -2
- package/utils/text.js.map +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __awaiter } from 'tslib';
|
|
2
2
|
import { max, min, group } from 'd3-array';
|
|
3
|
-
import { unique, getString, sortBy, groupBy, without, clamp, getNumber, isNil, isFunction, merge, getValue } from '../../../utils/data.js';
|
|
3
|
+
import { unique, getString, sortBy, groupBy, without, isArray, clamp, getNumber, isNil, isFunction, merge, getValue } from '../../../utils/data.js';
|
|
4
4
|
import { getMaxNodeSize, configuredNodeSize, getAverageNodeSize, getNodeSize } from './node/helper.js';
|
|
5
5
|
import { positionNonConnectedNodes, toElkHierarchy, DEFAULT_ELK_SETTINGS, adjustElkHierarchyCoordinates } from './layout-helpers.js';
|
|
6
6
|
|
|
@@ -35,8 +35,9 @@ function applyLayoutCircular(datamodel, config, width, height) {
|
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
function applyLayoutParallel(datamodel, config, width, height, orientation) {
|
|
38
|
+
var _a, _b, _c, _d;
|
|
38
39
|
const { nonConnectedNodes, connectedNodes, nodes } = datamodel;
|
|
39
|
-
const { layoutNonConnectedAside, layoutGroupOrder, layoutParallelSortConnectionsByGroup, layoutParallelNodesPerColumn, layoutParallelSubGroupsPerRow, nodeSize, layoutNodeGroup, layoutParallelNodeSubGroup, layoutParallelGroupSpacing, } = config;
|
|
40
|
+
const { layoutNonConnectedAside, layoutGroupOrder, layoutParallelSortConnectionsByGroup, layoutParallelNodesPerColumn, layoutParallelSubGroupsPerRow, nodeSize, layoutNodeGroup, layoutParallelNodeSubGroup, layoutParallelGroupSpacing, layoutParallelNodeSpacing, layoutParallelSubGroupSpacing, } = config;
|
|
40
41
|
const activeWidth = width - configuredNodeSize(nodeSize);
|
|
41
42
|
const activeHeight = height - configuredNodeSize(nodeSize) - (nonConnectedNodes.length ? configuredNodeSize(nodeSize) * 5 : 0);
|
|
42
43
|
// Handle connected nodes
|
|
@@ -81,16 +82,17 @@ function applyLayoutParallel(datamodel, config, width, height, orientation) {
|
|
|
81
82
|
const maxN = max(groups, d => { var _a; return (_a = d.nodes) === null || _a === void 0 ? void 0 : _a.length; });
|
|
82
83
|
const labelApprxHeight = 40;
|
|
83
84
|
const labelMargin = 10;
|
|
84
|
-
const
|
|
85
|
+
const subgroupSpacing = layoutParallelSubGroupSpacing !== null && layoutParallelSubGroupSpacing !== void 0 ? layoutParallelSubGroupSpacing : 0;
|
|
85
86
|
const maxNodeSize = getMaxNodeSize(layoutNodes, nodeSize);
|
|
87
|
+
const configuredNodeSpacing = isArray(layoutParallelNodeSpacing) ? layoutParallelNodeSpacing : [layoutParallelNodeSpacing, layoutParallelNodeSpacing];
|
|
86
88
|
if (orientation === 'horizontal') {
|
|
87
|
-
const
|
|
88
|
-
const
|
|
89
|
-
const
|
|
89
|
+
const minHorizontalSpacing = 2 * maxNodeSize + labelMargin;
|
|
90
|
+
const maxHorizontalSpacing = 3.5 * maxNodeSize + labelMargin;
|
|
91
|
+
const horizontalNodeSpacing = (_a = configuredNodeSpacing[0]) !== null && _a !== void 0 ? _a : clamp(activeWidth / (maxN - 1), minHorizontalSpacing, maxHorizontalSpacing);
|
|
90
92
|
const maxVerticalStep = maxNodeSize * 4 + labelApprxHeight;
|
|
91
93
|
const minVerticalStep = maxNodeSize * 1.5 + labelApprxHeight;
|
|
92
|
-
const
|
|
93
|
-
const
|
|
94
|
+
const groupSpacing = layoutParallelGroupSpacing !== null && layoutParallelGroupSpacing !== void 0 ? layoutParallelGroupSpacing : clamp(activeHeight / (groups.length - 1), minVerticalStep, maxVerticalStep);
|
|
95
|
+
const verticalNodeSpacing = (_b = configuredNodeSpacing[1]) !== null && _b !== void 0 ? _b : maxNodeSize + labelApprxHeight + labelMargin;
|
|
94
96
|
let y0 = (groups.length < 2) ? height / 2 : 0;
|
|
95
97
|
groups.forEach(group => {
|
|
96
98
|
let x0 = 0;
|
|
@@ -105,26 +107,26 @@ function applyLayoutParallel(datamodel, config, width, height, orientation) {
|
|
|
105
107
|
let x = x0;
|
|
106
108
|
let y = y0 + dy;
|
|
107
109
|
subgroup.nodes.forEach(d => {
|
|
108
|
-
x = x +
|
|
110
|
+
x = x + horizontalNodeSpacing;
|
|
109
111
|
d.x = x;
|
|
110
112
|
d.y = y;
|
|
111
113
|
groupWidth = Math.max(groupWidth, x);
|
|
112
114
|
n = n + 1;
|
|
113
115
|
if (n >= layoutParallelNodesPerColumn) {
|
|
114
116
|
n = 0;
|
|
115
|
-
y +=
|
|
117
|
+
y += verticalNodeSpacing;
|
|
116
118
|
x = x0;
|
|
117
119
|
}
|
|
118
120
|
});
|
|
119
|
-
const subgroupWidth = Math.min(subgroup.nodes.length, layoutParallelNodesPerColumn) *
|
|
120
|
-
const subgroupHeight = subgroupRows *
|
|
121
|
+
const subgroupWidth = Math.min(subgroup.nodes.length, layoutParallelNodesPerColumn) * horizontalNodeSpacing;
|
|
122
|
+
const subgroupHeight = subgroupRows * verticalNodeSpacing;
|
|
121
123
|
subgroupMaxWidth = Math.max(subgroupMaxWidth, subgroupWidth);
|
|
122
|
-
dy = dy + subgroupHeight +
|
|
124
|
+
dy = dy + subgroupHeight + subgroupSpacing;
|
|
123
125
|
k = k + 1;
|
|
124
126
|
if (k >= layoutParallelSubGroupsPerRow) {
|
|
125
127
|
k = 0;
|
|
126
128
|
dy = 0;
|
|
127
|
-
x0 = x0 + subgroupMaxWidth +
|
|
129
|
+
x0 = x0 + subgroupMaxWidth + subgroupSpacing;
|
|
128
130
|
subgroupMaxWidth = 0;
|
|
129
131
|
}
|
|
130
132
|
groupHeight = Math.max(groupHeight, y);
|
|
@@ -138,17 +140,17 @@ function applyLayoutParallel(datamodel, config, width, height, orientation) {
|
|
|
138
140
|
});
|
|
139
141
|
groupWidth = 0;
|
|
140
142
|
// Update y0 for the next group
|
|
141
|
-
y0 = groupHeight +
|
|
143
|
+
y0 = groupHeight + groupSpacing;
|
|
142
144
|
});
|
|
143
145
|
}
|
|
144
146
|
else {
|
|
145
|
-
const
|
|
146
|
-
const
|
|
147
|
-
const
|
|
148
|
-
const
|
|
149
|
-
const
|
|
150
|
-
const
|
|
151
|
-
const
|
|
147
|
+
const groupSpacingMin = 6 * maxNodeSize + labelMargin;
|
|
148
|
+
const groupSpacingMax = 10 * maxNodeSize + labelMargin;
|
|
149
|
+
const groupSpacing = (layoutParallelGroupSpacing !== null && layoutParallelGroupSpacing !== void 0 ? layoutParallelGroupSpacing : clamp(activeWidth / (maxN - 1), groupSpacingMin, groupSpacingMax));
|
|
150
|
+
const minVerticalSpacing = maxNodeSize * 2.0 + labelApprxHeight;
|
|
151
|
+
const maxVerticalSpacing = maxNodeSize * 1.5 + labelApprxHeight;
|
|
152
|
+
const verticalNodeSpacing = (_c = configuredNodeSpacing[1]) !== null && _c !== void 0 ? _c : clamp(activeHeight / (groups.length - 1), maxVerticalSpacing, minVerticalSpacing);
|
|
153
|
+
const horizontalNodeSpacing = (_d = configuredNodeSpacing[0]) !== null && _d !== void 0 ? _d : maxNodeSize * 2.0;
|
|
152
154
|
let x0 = (groups.length < 2) ? width / 2 : 0;
|
|
153
155
|
groups.forEach(group => {
|
|
154
156
|
let y0 = 0;
|
|
@@ -163,26 +165,26 @@ function applyLayoutParallel(datamodel, config, width, height, orientation) {
|
|
|
163
165
|
let y = y0;
|
|
164
166
|
let x = x0 + dx;
|
|
165
167
|
subgroup.nodes.forEach(d => {
|
|
166
|
-
y = y +
|
|
168
|
+
y = y + verticalNodeSpacing;
|
|
167
169
|
d.x = x;
|
|
168
170
|
d.y = y;
|
|
169
171
|
groupHeight = Math.max(groupHeight, y);
|
|
170
172
|
n = n + 1;
|
|
171
173
|
if (n >= layoutParallelNodesPerColumn) {
|
|
172
174
|
n = 0;
|
|
173
|
-
x +=
|
|
175
|
+
x += horizontalNodeSpacing;
|
|
174
176
|
y = y0;
|
|
175
177
|
}
|
|
176
178
|
});
|
|
177
|
-
const subgroupHeight = Math.min(subgroup.nodes.length, layoutParallelNodesPerColumn) *
|
|
178
|
-
const subgroupWidth = subgroupColumns *
|
|
179
|
+
const subgroupHeight = Math.min(subgroup.nodes.length, layoutParallelNodesPerColumn) * verticalNodeSpacing;
|
|
180
|
+
const subgroupWidth = subgroupColumns * horizontalNodeSpacing;
|
|
179
181
|
subgroupMaxHeight = Math.max(subgroupMaxHeight, subgroupHeight);
|
|
180
|
-
dx = dx + subgroupWidth +
|
|
182
|
+
dx = dx + subgroupWidth + subgroupSpacing;
|
|
181
183
|
k = k + 1;
|
|
182
184
|
if (k >= layoutParallelSubGroupsPerRow) {
|
|
183
185
|
k = 0;
|
|
184
186
|
dx = 0;
|
|
185
|
-
y0 = y0 + subgroupMaxHeight +
|
|
187
|
+
y0 = y0 + subgroupMaxHeight + subgroupSpacing;
|
|
186
188
|
subgroupMaxHeight = 0;
|
|
187
189
|
}
|
|
188
190
|
groupWidth = Math.max(groupWidth, x);
|
|
@@ -195,7 +197,7 @@ function applyLayoutParallel(datamodel, config, width, height, orientation) {
|
|
|
195
197
|
});
|
|
196
198
|
groupHeight = 0;
|
|
197
199
|
// Update x0 for the next group
|
|
198
|
-
x0 = groupWidth +
|
|
200
|
+
x0 = groupWidth + groupSpacing;
|
|
199
201
|
});
|
|
200
202
|
}
|
|
201
203
|
// Handle non-connected nodes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","sources":["../../../../src/components/graph/modules/layout.ts"],"sourcesContent":["import { min, max, group } from 'd3-array'\nimport type { SimulationNodeDatum } from 'd3-force'\nimport type { ElkNode } from 'elkjs/lib/elk.bundled.js'\nimport type { graphlib, Node } from 'dagre'\n\n// Core\nimport { GraphDataModel } from 'data-models/graph'\n\n// Utils\nimport { without, clamp, groupBy, unique, sortBy, getString, getNumber, getValue, merge, isFunction, isNil } from 'utils/data'\n\n// Types\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\n\n// Local Types\nimport { GraphNode, GraphLink, GraphForceSimulationNode } from '../types'\n\n// Config\nimport { GraphConfigInterface } from '../config'\n\n// Helpers\nimport { getMaxNodeSize, configuredNodeSize, getNodeSize, getAverageNodeSize } from './node/helper'\nimport {\n DEFAULT_ELK_SETTINGS,\n adjustElkHierarchyCoordinates,\n positionNonConnectedNodes,\n toElkHierarchy,\n GraphElkHierarchyNode,\n} from './layout-helpers'\n\nexport function applyLayoutCircular<N extends GraphInputNode, L extends GraphInputLink> (\n datamodel: GraphDataModel<N, L, GraphNode<N, L>, GraphLink<N, L>>,\n config: GraphConfigInterface<N, L>,\n width: number,\n height: number\n): void {\n const { nonConnectedNodes, connectedNodes, nodes } = datamodel\n const { layoutNonConnectedAside, nodeSize } = config\n\n const activeWidth = width\n const activeHeight = height\n\n // Handle layout nodes\n const layoutNodes = layoutNonConnectedAside ? connectedNodes : nodes\n const maxNodeSize = getMaxNodeSize(layoutNodes, nodeSize)\n const yRatio = activeHeight / maxNodeSize\n const yScaling = yRatio < layoutNodes.length / 2 ? layoutNodes.length / 2 / yRatio : 1\n const xRatio = activeWidth / maxNodeSize\n const xScaling = xRatio < layoutNodes.length / 2 ? layoutNodes.length / 2 / xRatio : 1\n const scaling = Math.max(xScaling, yScaling)\n\n layoutNodes.forEach((d, i) => {\n const rX = scaling * activeWidth / 2\n const rY = scaling * activeHeight / 2 // maxNodeSize * layoutNodes.length / 4\n const angle = 2 * i * Math.PI / layoutNodes.length\n d.x = activeWidth / 2 + rX * Math.cos(angle)\n d.y = activeHeight / 2 + rY * Math.sin(angle)\n })\n\n // Handle non-connected nodes\n if (layoutNonConnectedAside) {\n const maxSize = getMaxNodeSize(nonConnectedNodes, nodeSize)\n const maxY = max<number>(connectedNodes.map(d => d.y))\n const maxX = max<number>(connectedNodes.map(d => d.x))\n const minX = min<number>(connectedNodes.map(d => d.x))\n const graphWidth = maxX - minX\n positionNonConnectedNodes(nonConnectedNodes, maxY + maxSize * 3, maxSize * 2.25, Math.max(graphWidth, width), minX)\n }\n}\n\nexport function applyLayoutParallel<N extends GraphInputNode, L extends GraphInputLink> (\n datamodel: GraphDataModel<N, L, GraphNode<N, L>, GraphLink<N, L>>,\n config: GraphConfigInterface<N, L>,\n width: number,\n height: number,\n orientation?: string\n): void {\n const { nonConnectedNodes, connectedNodes, nodes } = datamodel\n const {\n layoutNonConnectedAside, layoutGroupOrder, layoutParallelSortConnectionsByGroup, layoutParallelNodesPerColumn,\n layoutParallelSubGroupsPerRow, nodeSize, layoutNodeGroup, layoutParallelNodeSubGroup, layoutParallelGroupSpacing,\n } = config\n\n const activeWidth = width - configuredNodeSize(nodeSize)\n const activeHeight = height - configuredNodeSize(nodeSize) - (nonConnectedNodes.length ? configuredNodeSize(nodeSize) * 5 : 0)\n\n // Handle connected nodes\n const layoutNodes = layoutNonConnectedAside ? connectedNodes : nodes\n const groupNames = unique(layoutNodes.map(d => getString(d, layoutNodeGroup, d._index)))\n const groupNamesSorted: string[] = sortBy(groupNames, d => layoutGroupOrder.indexOf(d))\n\n const groups = groupNamesSorted.map(groupName => {\n const groupNodes = layoutNodes.filter(d => getString(d, layoutNodeGroup, d._index) === groupName)\n const groupedBySubgroup = groupBy(groupNodes, d => getString(d, layoutParallelNodeSubGroup, d._index))\n const subgroups = Object.keys(groupedBySubgroup).map(name => ({\n nodes: groupedBySubgroup[name],\n name,\n }))\n\n return {\n name: groupName,\n nodes: groupNodes,\n subgroups,\n }\n })\n\n // Sort\n const group = groups.find(g => g.name === layoutParallelSortConnectionsByGroup)\n if (group) {\n const sortMap: Record<string, number> = {}\n let idx = 0\n group.subgroups.forEach(subgroup => {\n subgroup.nodes.forEach(node => {\n node.links.forEach(link => {\n const linkTargetId = link?.target._id\n sortMap[linkTargetId] = idx\n idx = idx + 1\n })\n })\n })\n\n without(groups, group).forEach(g => {\n g.subgroups.forEach(subgroup => {\n subgroup.nodes.sort((a, b) => {\n return (sortMap[a._id] || 0) - (sortMap[b._id] || 0)\n })\n })\n })\n }\n\n const maxN = max(groups, d => d.nodes?.length)\n const labelApprxHeight = 40\n const labelMargin = 10\n const subgroupMargin = 40\n const maxNodeSize = getMaxNodeSize(layoutNodes, nodeSize)\n\n if (orientation === 'horizontal') {\n const minHorizontalStep = 2 * maxNodeSize + labelMargin\n const maxHorizontalStep = 3.5 * maxNodeSize + labelMargin\n const horizontalStep = clamp(activeWidth / (maxN - 1), minHorizontalStep, maxHorizontalStep)\n\n const maxVerticalStep = maxNodeSize * 4 + labelApprxHeight\n const minVerticalStep = maxNodeSize * 1.5 + labelApprxHeight\n const verticalStep = (maxNodeSize + layoutParallelGroupSpacing) || clamp(activeHeight / (groups.length - 1), minVerticalStep, maxVerticalStep)\n const subgroupNodeStep = maxNodeSize + labelApprxHeight + labelMargin\n\n let y0 = (groups.length < 2) ? height / 2 : 0\n groups.forEach(group => {\n let x0 = 0\n let dy = 0\n let subgroupMaxWidth = 0\n let groupWidth = 0\n let groupHeight = 0\n let k = 0\n group.subgroups.forEach(subgroup => {\n const subgroupRows = Math.ceil(subgroup.nodes.length / layoutParallelNodesPerColumn)\n let n = 0\n let x = x0\n let y = y0 + dy\n subgroup.nodes.forEach(d => {\n x = x + horizontalStep\n d.x = x\n d.y = y\n groupWidth = Math.max(groupWidth, x)\n\n n = n + 1\n if (n >= layoutParallelNodesPerColumn) {\n n = 0\n y += subgroupNodeStep\n x = x0\n }\n })\n\n const subgroupWidth = Math.min(subgroup.nodes.length, layoutParallelNodesPerColumn) * horizontalStep\n const subgroupHeight = subgroupRows * subgroupNodeStep\n subgroupMaxWidth = Math.max(subgroupMaxWidth, subgroupWidth)\n dy = dy + subgroupHeight + subgroupMargin\n k = k + 1\n if (k >= layoutParallelSubGroupsPerRow) {\n k = 0\n dy = 0\n x0 = x0 + subgroupMaxWidth + subgroupMargin\n subgroupMaxWidth = 0\n }\n\n groupHeight = Math.max(groupHeight, y)\n // x0 += Math.min(subgroup.nodes.length, layoutParallelNodesPerColumn) * horizontalStep + subgroupMargin\n })\n\n // Center group horizontally\n group.subgroups.forEach(subgroup => {\n subgroup.nodes.forEach(d => {\n d.x -= groupWidth / 2\n })\n })\n groupWidth = 0\n\n // Update y0 for the next group\n y0 = groupHeight + verticalStep\n })\n } else {\n const minHorizontalStep = 6 * maxNodeSize + labelMargin\n const maxHorizontalStep = 10 * maxNodeSize + labelMargin\n const horizontalStep = (maxNodeSize + layoutParallelGroupSpacing) || clamp(activeWidth / (maxN - 1), minHorizontalStep, maxHorizontalStep)\n\n const maxVerticalStep = maxNodeSize * 2.0 + labelApprxHeight\n const minVerticalStep = maxNodeSize * 1.5 + labelApprxHeight\n const verticalStep = clamp(activeHeight / (groups.length - 1), minVerticalStep, maxVerticalStep)\n const subgroupNodeStep = maxNodeSize * 2.0\n\n let x0 = (groups.length < 2) ? width / 2 : 0\n groups.forEach(group => {\n let y0 = 0\n let dx = 0 // Horizontal shift inside the group (column)\n let subgroupMaxHeight = 0\n let groupWidth = 0\n let groupHeight = 0\n\n let k = 0\n group.subgroups.forEach(subgroup => {\n const subgroupColumns = Math.ceil(subgroup.nodes.length / layoutParallelNodesPerColumn)\n let n = 0\n let y = y0\n let x = x0 + dx\n subgroup.nodes.forEach(d => {\n y = y + verticalStep\n d.x = x\n d.y = y\n groupHeight = Math.max(groupHeight, y)\n\n n = n + 1\n if (n >= layoutParallelNodesPerColumn) {\n n = 0\n x += subgroupNodeStep\n y = y0\n }\n })\n\n const subgroupHeight = Math.min(subgroup.nodes.length, layoutParallelNodesPerColumn) * verticalStep\n const subgroupWidth = subgroupColumns * subgroupNodeStep\n subgroupMaxHeight = Math.max(subgroupMaxHeight, subgroupHeight)\n dx = dx + subgroupWidth + subgroupMargin\n k = k + 1\n if (k >= layoutParallelSubGroupsPerRow) {\n k = 0\n dx = 0\n y0 = y0 + subgroupMaxHeight + subgroupMargin\n subgroupMaxHeight = 0\n }\n\n groupWidth = Math.max(groupWidth, x)\n })\n\n // Center group vertically\n group.subgroups.forEach(subgroup => {\n subgroup.nodes.forEach(d => {\n d.y -= groupHeight / 2\n })\n })\n groupHeight = 0\n\n // Update x0 for the next group\n x0 = groupWidth + horizontalStep\n })\n }\n\n // Handle non-connected nodes\n if (layoutNonConnectedAside) {\n const maxSize = getMaxNodeSize(nonConnectedNodes, nodeSize)\n const maxY = max<number>(connectedNodes.map(d => d.y)) || 0\n const maxX = max<number>(connectedNodes.map(d => d.x)) || 0\n const minX = min<number>(connectedNodes.map(d => d.x)) || 0\n const graphWidth = (maxX - minX) || width\n positionNonConnectedNodes(nonConnectedNodes, maxY + maxSize * 3, maxSize * 2.25, Math.max(graphWidth, width))\n }\n}\n\nexport async function applyLayoutDagre<N extends GraphInputNode, L extends GraphInputLink> (\n datamodel: GraphDataModel<N, L, GraphNode<N, L>, GraphLink<N, L>>,\n config: GraphConfigInterface<N, L>,\n width: number\n): Promise<void> {\n const { nonConnectedNodes, connectedNodes, nodes, links } = datamodel\n const { nodeSize, layoutNonConnectedAside, dagreLayoutSettings, nodeStrokeWidth, nodeLabel } = config\n\n // eslint-disable-next-line @typescript-eslint/naming-convention,@typescript-eslint/ban-ts-comment\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const { Graph } = await import('@unovis/graphlibrary')\n // eslint-disable-next-line @typescript-eslint/naming-convention,@typescript-eslint/ban-ts-comment\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const { layout } = await import('@unovis/dagre-layout')\n\n // https://github.com/dagrejs/dagre/wiki\n const dagreGraph = new Graph() as graphlib.Graph<GraphNode<N, L>>\n\n // Set an object for the graph label\n dagreGraph.setGraph(dagreLayoutSettings)\n\n // Default to assigning a new object as a label for each new edge.\n dagreGraph.setDefaultEdgeLabel(() => ({}))\n\n // Add nodes to the graph. The first argument is the node id. The second is\n // metadata about the node. In this case we're going to add labels to each of\n // our nodes.\n const labelApprxHeight = 40\n const nds = (layoutNonConnectedAside ? connectedNodes : nodes)\n nds.forEach(node => {\n dagreGraph.setNode(`${node._index}`, {\n label: getString(node, nodeLabel, node._index),\n width: getNumber(node, nodeSize, node._index) * 1.5 + getNumber(node, nodeStrokeWidth, node._index),\n height: labelApprxHeight + getNumber(node, nodeSize, node._index) * 1.5,\n originalNode: node,\n })\n })\n\n // Add edges to the graph.\n links.forEach(link => {\n dagreGraph.setEdge(\n `${link.source._index}`,\n `${link.target._index}`\n )\n })\n\n // Calculate the layout\n layout(dagreGraph)\n\n // Apply coordinates to the graph\n dagreGraph.nodes().forEach(d => {\n const node = dagreGraph.node(d) as Node<GraphNode<N, L>> & { originalNode: GraphNode<N, L>}\n node.originalNode.x = node.x // width * d.x / dagreGraph._label.width\n node.originalNode.y = node.y // height * d.y / dagreGraph._label.height\n })\n\n // Handle non-connected nodes\n if (layoutNonConnectedAside) {\n const maxNodeSize = getMaxNodeSize(nonConnectedNodes, nodeSize)\n const maxY = max<number>(connectedNodes.map(d => d.y))\n const maxX = max<number>(connectedNodes.map(d => d.x))\n const minX = min<number>(connectedNodes.map(d => d.x))\n const graphWidth = maxX - minX\n positionNonConnectedNodes(nonConnectedNodes, maxY + maxNodeSize * 3, maxNodeSize * 2.25, Math.max(graphWidth, width), 0)\n }\n}\n\nexport function applyLayoutConcentric<N extends GraphInputNode, L extends GraphInputLink> (\n datamodel: GraphDataModel<N, L, GraphNode<N, L>, GraphLink<N, L>>,\n config: GraphConfigInterface<N, L>,\n width: number,\n height: number\n): void {\n const { nonConnectedNodes, connectedNodes, nodes } = datamodel\n const { layoutNonConnectedAside, layoutGroupOrder, nodeSize, layoutNodeGroup } = config\n\n const layoutNodes = layoutNonConnectedAside ? connectedNodes : nodes\n\n const groupNames: string[] = unique(layoutNodes.map(d => getString(d, layoutNodeGroup, d._index)))\n const groupNamesSorted: string[] = sortBy(groupNames, d => layoutGroupOrder.indexOf(d))\n\n const groups = groupNamesSorted.map(groupName => ({\n name: groupName,\n nodes: layoutNodes.filter(d => getString(d, layoutNodeGroup, d._index) === groupName),\n }))\n\n // Handle connected nodes\n let r = 2 * getAverageNodeSize(groups[0]?.nodes ?? [], nodeSize)\n const widthToHeightRatio = width / height\n\n groups.forEach((group, i) => {\n const avgNodeSize = getAverageNodeSize(group.nodes, nodeSize)\n const requiredRadius = 1.1 * avgNodeSize * group.nodes.length / Math.PI\n if (r < requiredRadius) r = requiredRadius\n\n group.nodes.forEach((node, j) => {\n // If the first (central) group has only one node\n if (i === 0 && group.nodes.length === 1) {\n node.x = width / 2\n node.y = height / 2\n } else {\n let dAngle = 0\n if (i === 0 && group.nodes.length === 3) dAngle = Math.PI / 6\n if (i === 0 && group.nodes.length === 4) dAngle = Math.PI / 4\n const angle = 2 * j * Math.PI / group.nodes.length + i * Math.PI / 12 + dAngle\n node.x = width / 2 + r * Math.cos(angle) * widthToHeightRatio\n node.y = height / 2 + r * Math.sin(angle)\n }\n })\n\n const groupSpacing = avgNodeSize * 3\n r += groupSpacing\n })\n\n // Handle non-connected nodes\n if (layoutNonConnectedAside) {\n const maxSize = getMaxNodeSize(nonConnectedNodes, nodeSize)\n const maxY = max<number>(connectedNodes.map(d => d.y))\n const maxX = max<number>(connectedNodes.map(d => d.x))\n const minX = min<number>(connectedNodes.map(d => d.x))\n const graphWidth = maxX - minX\n positionNonConnectedNodes(nonConnectedNodes, maxY + maxSize * 3, maxSize * 2.25, graphWidth, minX)\n }\n}\n\nexport async function applyLayoutForce<N extends GraphInputNode, L extends GraphInputLink> (\n datamodel: GraphDataModel<N, L, GraphNode<N, L>, GraphLink<N, L>>,\n config: GraphConfigInterface<N, L>,\n width: number\n): Promise<void> {\n const { layoutNonConnectedAside, forceLayoutSettings, nodeSize } = config\n\n const { forceSimulation, forceLink, forceManyBody, forceX, forceY, forceCollide } = await import('d3-force')\n\n const { nonConnectedNodes, connectedNodes, nodes, links } = datamodel\n\n\n // Apply fx and fy to nodes if present before running the simulation\n if (forceLayoutSettings.fixNodePositionAfterSimulation) {\n nodes.forEach((d: GraphForceSimulationNode<N, L>) => {\n d.fx = isNil(d._state.fx) ? undefined : d._state.fx\n d.fy = isNil(d._state.fy) ? undefined : d._state.fy\n })\n } else {\n nodes.forEach((d: GraphForceSimulationNode<N, L>) => {\n delete d._state.fx\n delete d._state.fy\n })\n }\n\n const simulation = forceSimulation(layoutNonConnectedAside ? connectedNodes : nodes)\n .force('link', forceLink(links)\n .id((d) => String((d as GraphNode<N, L>)._id))\n .distance((l, i) => isFunction(forceLayoutSettings.linkDistance) ? forceLayoutSettings.linkDistance(l, i) : forceLayoutSettings.linkDistance)\n .strength((l, i) => isFunction(forceLayoutSettings.linkStrength) ? forceLayoutSettings.linkStrength(l, i) : forceLayoutSettings.linkStrength)\n )\n .force('charge', forceManyBody().strength((d, i) => {\n if (isFunction(forceLayoutSettings.charge)) {\n return forceLayoutSettings.charge(d as GraphNode<N, L>, i)\n } else {\n const linkCount = links.reduce((count, l) => count + Number((l.source === d) || (l.target === d)), 0)\n return forceLayoutSettings.charge * Math.sqrt(linkCount)\n }\n }))\n .force('x', forceX().strength(forceLayoutSettings.forceXStrength))\n .force('y', forceY().strength(forceLayoutSettings.forceYStrength))\n .force('collide', forceCollide<SimulationNodeDatum & N>().radius((d, i) => getNodeSize(d, nodeSize, i)).iterations(1))\n .stop()\n\n // See https://bl.ocks.org/mbostock/1667139, https://github.com/d3/d3-force/blob/master/README.md#simulation_tick\n const numIterations = forceLayoutSettings.numIterations ?? Math.ceil(Math.log(simulation.alphaMin()) / Math.log(1 - simulation.alphaDecay()))\n for (let i = 0, n = numIterations; i < n; ++i) {\n simulation.tick()\n }\n\n // Fix node positions to `_state` if requested.\n // And remove fx and fy from the node datum if present to make sure the nodes are not fixed\n // if the layout was changed to a different layout and then back to force\n if (forceLayoutSettings.fixNodePositionAfterSimulation) {\n nodes.forEach((d: GraphForceSimulationNode<N, L>) => {\n delete d.fx\n delete d.fy\n d._state.fx = d.x\n d._state.fy = d.y\n })\n }\n\n // Handle non-connected nodes\n if (layoutNonConnectedAside) {\n const maxSize = getMaxNodeSize(nonConnectedNodes, nodeSize)\n const maxY = max<number>(connectedNodes.map(d => d.y))\n const maxX = max<number>(connectedNodes.map(d => d.x))\n const minX = min<number>(connectedNodes.map(d => d.x))\n const graphWidth = maxX - minX\n positionNonConnectedNodes(nonConnectedNodes, maxY + maxSize * 6, maxSize * 2.25, Math.max(graphWidth, width), minX)\n }\n}\n\nexport async function applyELKLayout<N extends GraphInputNode, L extends GraphInputLink> (\n datamodel: GraphDataModel<N, L, GraphNode<N, L>, GraphLink<N, L>>,\n config: GraphConfigInterface<N, L>,\n width: number\n): Promise<void> {\n const ELK = (await import('elkjs/lib/elk.bundled.js')).default\n const elk = new ELK()\n\n const labelApprxHeight = 30\n const nodes = datamodel.nodes.map((n, i) => ({\n ...n,\n id: n._id,\n width: getNumber(n, config.nodeSize, n._index) + getNumber(n, config.nodeStrokeWidth, n._index),\n height: getNumber(n, config.nodeSize, n._index) + labelApprxHeight,\n ...(config.layoutElkGetNodeShape ? config.layoutElkGetNodeShape(n, i) : {}),\n }))\n\n let elkNodes: (GraphNode<N, L> | GraphElkHierarchyNode<N, L>)[]\n if (config.layoutElkNodeGroups) {\n const groupingFunctions = config.layoutElkNodeGroups\n .map(accessor => (d: GraphNode<N, L>) => getString(d, accessor, d._index)) as [(d: GraphNode<N, L>) => string]\n const grouped = group(nodes, ...groupingFunctions)\n elkNodes = toElkHierarchy(grouped, config.layoutElkSettings)\n } else {\n elkNodes = nodes\n }\n\n const rootNodeId = 'root'\n const elkGraph: ElkNode = {\n id: rootNodeId,\n layoutOptions: merge(DEFAULT_ELK_SETTINGS, getValue(rootNodeId, config.layoutElkSettings)),\n children: elkNodes as ElkNode[],\n edges: datamodel.links.map(l => ({\n id: l._id,\n sources: [l.source._id],\n targets: [l.target._id],\n })),\n }\n\n const layout = await elk.layout(elkGraph)\n adjustElkHierarchyCoordinates(layout)\n\n nodes.forEach((node, i) => {\n const found = datamodel.nodes.find(n => n._id === node.id)\n if (!found) return\n\n found.x = node.x + node.width / 2\n found.y = node.y + node.height / 2\n })\n\n // Handle non-connected nodes\n if (config.layoutNonConnectedAside) {\n const maxSize = getMaxNodeSize(datamodel.nonConnectedNodes, config.nodeSize)\n const maxY = max<number>(datamodel.connectedNodes.map(d => d.y)) || 0\n const maxX = max<number>(datamodel.connectedNodes.map(d => d.x)) || 0\n const minX = min<number>(datamodel.connectedNodes.map(d => d.x)) || 0\n const graphWidth = (maxX - minX) || width\n positionNonConnectedNodes(datamodel.nonConnectedNodes, maxY + maxSize * 3, maxSize * 2.25, Math.max(graphWidth, width))\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"layout.js","sources":["../../../../src/components/graph/modules/layout.ts"],"sourcesContent":["import { min, max, group } from 'd3-array'\nimport type { SimulationNodeDatum } from 'd3-force'\nimport type { ElkNode } from 'elkjs/lib/elk.bundled.js'\nimport type { graphlib, Node } from 'dagre'\n\n// Core\nimport { GraphDataModel } from 'data-models/graph'\n\n// Utils\nimport { without, clamp, groupBy, unique, sortBy, getString, getNumber, getValue, merge, isFunction, isNil, isArray } from 'utils/data'\n\n// Types\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\n\n// Local Types\nimport { GraphNode, GraphLink, GraphForceSimulationNode } from '../types'\n\n// Config\nimport { GraphConfigInterface } from '../config'\n\n// Helpers\nimport { getMaxNodeSize, configuredNodeSize, getNodeSize, getAverageNodeSize } from './node/helper'\nimport {\n DEFAULT_ELK_SETTINGS,\n adjustElkHierarchyCoordinates,\n positionNonConnectedNodes,\n toElkHierarchy,\n GraphElkHierarchyNode,\n} from './layout-helpers'\n\nexport function applyLayoutCircular<N extends GraphInputNode, L extends GraphInputLink> (\n datamodel: GraphDataModel<N, L, GraphNode<N, L>, GraphLink<N, L>>,\n config: GraphConfigInterface<N, L>,\n width: number,\n height: number\n): void {\n const { nonConnectedNodes, connectedNodes, nodes } = datamodel\n const { layoutNonConnectedAside, nodeSize } = config\n\n const activeWidth = width\n const activeHeight = height\n\n // Handle layout nodes\n const layoutNodes = layoutNonConnectedAside ? connectedNodes : nodes\n const maxNodeSize = getMaxNodeSize(layoutNodes, nodeSize)\n const yRatio = activeHeight / maxNodeSize\n const yScaling = yRatio < layoutNodes.length / 2 ? layoutNodes.length / 2 / yRatio : 1\n const xRatio = activeWidth / maxNodeSize\n const xScaling = xRatio < layoutNodes.length / 2 ? layoutNodes.length / 2 / xRatio : 1\n const scaling = Math.max(xScaling, yScaling)\n\n layoutNodes.forEach((d, i) => {\n const rX = scaling * activeWidth / 2\n const rY = scaling * activeHeight / 2 // maxNodeSize * layoutNodes.length / 4\n const angle = 2 * i * Math.PI / layoutNodes.length\n d.x = activeWidth / 2 + rX * Math.cos(angle)\n d.y = activeHeight / 2 + rY * Math.sin(angle)\n })\n\n // Handle non-connected nodes\n if (layoutNonConnectedAside) {\n const maxSize = getMaxNodeSize(nonConnectedNodes, nodeSize)\n const maxY = max<number>(connectedNodes.map(d => d.y))\n const maxX = max<number>(connectedNodes.map(d => d.x))\n const minX = min<number>(connectedNodes.map(d => d.x))\n const graphWidth = maxX - minX\n positionNonConnectedNodes(nonConnectedNodes, maxY + maxSize * 3, maxSize * 2.25, Math.max(graphWidth, width), minX)\n }\n}\n\nexport function applyLayoutParallel<N extends GraphInputNode, L extends GraphInputLink> (\n datamodel: GraphDataModel<N, L, GraphNode<N, L>, GraphLink<N, L>>,\n config: GraphConfigInterface<N, L>,\n width: number,\n height: number,\n orientation?: string\n): void {\n const { nonConnectedNodes, connectedNodes, nodes } = datamodel\n const {\n layoutNonConnectedAside, layoutGroupOrder, layoutParallelSortConnectionsByGroup, layoutParallelNodesPerColumn,\n layoutParallelSubGroupsPerRow, nodeSize, layoutNodeGroup, layoutParallelNodeSubGroup, layoutParallelGroupSpacing,\n layoutParallelNodeSpacing, layoutParallelSubGroupSpacing,\n } = config\n\n const activeWidth = width - configuredNodeSize(nodeSize)\n const activeHeight = height - configuredNodeSize(nodeSize) - (nonConnectedNodes.length ? configuredNodeSize(nodeSize) * 5 : 0)\n\n // Handle connected nodes\n const layoutNodes = layoutNonConnectedAside ? connectedNodes : nodes\n const groupNames = unique(layoutNodes.map(d => getString(d, layoutNodeGroup, d._index)))\n const groupNamesSorted: string[] = sortBy(groupNames, d => layoutGroupOrder.indexOf(d))\n\n const groups = groupNamesSorted.map(groupName => {\n const groupNodes = layoutNodes.filter(d => getString(d, layoutNodeGroup, d._index) === groupName)\n const groupedBySubgroup = groupBy(groupNodes, d => getString(d, layoutParallelNodeSubGroup, d._index))\n const subgroups = Object.keys(groupedBySubgroup).map(name => ({\n nodes: groupedBySubgroup[name],\n name,\n }))\n\n return {\n name: groupName,\n nodes: groupNodes,\n subgroups,\n }\n })\n\n // Sort\n const group = groups.find(g => g.name === layoutParallelSortConnectionsByGroup)\n if (group) {\n const sortMap: Record<string, number> = {}\n let idx = 0\n group.subgroups.forEach(subgroup => {\n subgroup.nodes.forEach(node => {\n node.links.forEach(link => {\n const linkTargetId = link?.target._id\n sortMap[linkTargetId] = idx\n idx = idx + 1\n })\n })\n })\n\n without(groups, group).forEach(g => {\n g.subgroups.forEach(subgroup => {\n subgroup.nodes.sort((a, b) => {\n return (sortMap[a._id] || 0) - (sortMap[b._id] || 0)\n })\n })\n })\n }\n\n const maxN = max(groups, d => d.nodes?.length)\n const labelApprxHeight = 40\n const labelMargin = 10\n const subgroupSpacing = layoutParallelSubGroupSpacing ?? 0\n const maxNodeSize = getMaxNodeSize(layoutNodes, nodeSize)\n\n const configuredNodeSpacing = isArray(layoutParallelNodeSpacing) ? layoutParallelNodeSpacing : [layoutParallelNodeSpacing, layoutParallelNodeSpacing]\n if (orientation === 'horizontal') {\n const minHorizontalSpacing = 2 * maxNodeSize + labelMargin\n const maxHorizontalSpacing = 3.5 * maxNodeSize + labelMargin\n const horizontalNodeSpacing = configuredNodeSpacing[0] ?? clamp(activeWidth / (maxN - 1), minHorizontalSpacing, maxHorizontalSpacing)\n\n const maxVerticalStep = maxNodeSize * 4 + labelApprxHeight\n const minVerticalStep = maxNodeSize * 1.5 + labelApprxHeight\n const groupSpacing = layoutParallelGroupSpacing ?? clamp(activeHeight / (groups.length - 1), minVerticalStep, maxVerticalStep)\n const verticalNodeSpacing = configuredNodeSpacing[1] ?? maxNodeSize + labelApprxHeight + labelMargin\n\n let y0 = (groups.length < 2) ? height / 2 : 0\n groups.forEach(group => {\n let x0 = 0\n let dy = 0\n let subgroupMaxWidth = 0\n let groupWidth = 0\n let groupHeight = 0\n let k = 0\n group.subgroups.forEach(subgroup => {\n const subgroupRows = Math.ceil(subgroup.nodes.length / layoutParallelNodesPerColumn)\n let n = 0\n let x = x0\n let y = y0 + dy\n subgroup.nodes.forEach(d => {\n x = x + horizontalNodeSpacing\n d.x = x\n d.y = y\n groupWidth = Math.max(groupWidth, x)\n\n n = n + 1\n if (n >= layoutParallelNodesPerColumn) {\n n = 0\n y += verticalNodeSpacing\n x = x0\n }\n })\n\n const subgroupWidth = Math.min(subgroup.nodes.length, layoutParallelNodesPerColumn) * horizontalNodeSpacing\n const subgroupHeight = subgroupRows * verticalNodeSpacing\n subgroupMaxWidth = Math.max(subgroupMaxWidth, subgroupWidth)\n dy = dy + subgroupHeight + subgroupSpacing\n k = k + 1\n if (k >= layoutParallelSubGroupsPerRow) {\n k = 0\n dy = 0\n x0 = x0 + subgroupMaxWidth + subgroupSpacing\n subgroupMaxWidth = 0\n }\n\n groupHeight = Math.max(groupHeight, y)\n // x0 += Math.min(subgroup.nodes.length, layoutParallelNodesPerColumn) * horizontalStep + subgroupMargin\n })\n\n // Center group horizontally\n group.subgroups.forEach(subgroup => {\n subgroup.nodes.forEach(d => {\n d.x -= groupWidth / 2\n })\n })\n groupWidth = 0\n\n // Update y0 for the next group\n y0 = groupHeight + groupSpacing\n })\n } else {\n const groupSpacingMin = 6 * maxNodeSize + labelMargin\n const groupSpacingMax = 10 * maxNodeSize + labelMargin\n const groupSpacing = (layoutParallelGroupSpacing ?? clamp(activeWidth / (maxN - 1), groupSpacingMin, groupSpacingMax))\n\n const minVerticalSpacing = maxNodeSize * 2.0 + labelApprxHeight\n const maxVerticalSpacing = maxNodeSize * 1.5 + labelApprxHeight\n const verticalNodeSpacing = configuredNodeSpacing[1] ?? clamp(activeHeight / (groups.length - 1), maxVerticalSpacing, minVerticalSpacing)\n const horizontalNodeSpacing = configuredNodeSpacing[0] ?? maxNodeSize * 2.0\n\n let x0 = (groups.length < 2) ? width / 2 : 0\n groups.forEach(group => {\n let y0 = 0\n let dx = 0 // Horizontal shift inside the group (column)\n let subgroupMaxHeight = 0\n let groupWidth = 0\n let groupHeight = 0\n\n let k = 0\n group.subgroups.forEach(subgroup => {\n const subgroupColumns = Math.ceil(subgroup.nodes.length / layoutParallelNodesPerColumn)\n let n = 0\n let y = y0\n let x = x0 + dx\n subgroup.nodes.forEach(d => {\n y = y + verticalNodeSpacing\n d.x = x\n d.y = y\n groupHeight = Math.max(groupHeight, y)\n\n n = n + 1\n if (n >= layoutParallelNodesPerColumn) {\n n = 0\n x += horizontalNodeSpacing\n y = y0\n }\n })\n\n const subgroupHeight = Math.min(subgroup.nodes.length, layoutParallelNodesPerColumn) * verticalNodeSpacing\n const subgroupWidth = subgroupColumns * horizontalNodeSpacing\n subgroupMaxHeight = Math.max(subgroupMaxHeight, subgroupHeight)\n dx = dx + subgroupWidth + subgroupSpacing\n k = k + 1\n if (k >= layoutParallelSubGroupsPerRow) {\n k = 0\n dx = 0\n y0 = y0 + subgroupMaxHeight + subgroupSpacing\n subgroupMaxHeight = 0\n }\n\n groupWidth = Math.max(groupWidth, x)\n })\n\n // Center group vertically\n group.subgroups.forEach(subgroup => {\n subgroup.nodes.forEach(d => {\n d.y -= groupHeight / 2\n })\n })\n groupHeight = 0\n\n // Update x0 for the next group\n x0 = groupWidth + groupSpacing\n })\n }\n\n // Handle non-connected nodes\n if (layoutNonConnectedAside) {\n const maxSize = getMaxNodeSize(nonConnectedNodes, nodeSize)\n const maxY = max<number>(connectedNodes.map(d => d.y)) || 0\n const maxX = max<number>(connectedNodes.map(d => d.x)) || 0\n const minX = min<number>(connectedNodes.map(d => d.x)) || 0\n const graphWidth = (maxX - minX) || width\n positionNonConnectedNodes(nonConnectedNodes, maxY + maxSize * 3, maxSize * 2.25, Math.max(graphWidth, width))\n }\n}\n\nexport async function applyLayoutDagre<N extends GraphInputNode, L extends GraphInputLink> (\n datamodel: GraphDataModel<N, L, GraphNode<N, L>, GraphLink<N, L>>,\n config: GraphConfigInterface<N, L>,\n width: number\n): Promise<void> {\n const { nonConnectedNodes, connectedNodes, nodes, links } = datamodel\n const { nodeSize, layoutNonConnectedAside, dagreLayoutSettings, nodeStrokeWidth, nodeLabel } = config\n\n // eslint-disable-next-line @typescript-eslint/naming-convention,@typescript-eslint/ban-ts-comment\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const { Graph } = await import('@unovis/graphlibrary')\n // eslint-disable-next-line @typescript-eslint/naming-convention,@typescript-eslint/ban-ts-comment\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const { layout } = await import('@unovis/dagre-layout')\n\n // https://github.com/dagrejs/dagre/wiki\n const dagreGraph = new Graph() as graphlib.Graph<GraphNode<N, L>>\n\n // Set an object for the graph label\n dagreGraph.setGraph(dagreLayoutSettings)\n\n // Default to assigning a new object as a label for each new edge.\n dagreGraph.setDefaultEdgeLabel(() => ({}))\n\n // Add nodes to the graph. The first argument is the node id. The second is\n // metadata about the node. In this case we're going to add labels to each of\n // our nodes.\n const labelApprxHeight = 40\n const nds = (layoutNonConnectedAside ? connectedNodes : nodes)\n nds.forEach(node => {\n dagreGraph.setNode(`${node._index}`, {\n label: getString(node, nodeLabel, node._index),\n width: getNumber(node, nodeSize, node._index) * 1.5 + getNumber(node, nodeStrokeWidth, node._index),\n height: labelApprxHeight + getNumber(node, nodeSize, node._index) * 1.5,\n originalNode: node,\n })\n })\n\n // Add edges to the graph.\n links.forEach(link => {\n dagreGraph.setEdge(\n `${link.source._index}`,\n `${link.target._index}`\n )\n })\n\n // Calculate the layout\n layout(dagreGraph)\n\n // Apply coordinates to the graph\n dagreGraph.nodes().forEach(d => {\n const node = dagreGraph.node(d) as Node<GraphNode<N, L>> & { originalNode: GraphNode<N, L>}\n node.originalNode.x = node.x // width * d.x / dagreGraph._label.width\n node.originalNode.y = node.y // height * d.y / dagreGraph._label.height\n })\n\n // Handle non-connected nodes\n if (layoutNonConnectedAside) {\n const maxNodeSize = getMaxNodeSize(nonConnectedNodes, nodeSize)\n const maxY = max<number>(connectedNodes.map(d => d.y))\n const maxX = max<number>(connectedNodes.map(d => d.x))\n const minX = min<number>(connectedNodes.map(d => d.x))\n const graphWidth = maxX - minX\n positionNonConnectedNodes(nonConnectedNodes, maxY + maxNodeSize * 3, maxNodeSize * 2.25, Math.max(graphWidth, width), 0)\n }\n}\n\nexport function applyLayoutConcentric<N extends GraphInputNode, L extends GraphInputLink> (\n datamodel: GraphDataModel<N, L, GraphNode<N, L>, GraphLink<N, L>>,\n config: GraphConfigInterface<N, L>,\n width: number,\n height: number\n): void {\n const { nonConnectedNodes, connectedNodes, nodes } = datamodel\n const { layoutNonConnectedAside, layoutGroupOrder, nodeSize, layoutNodeGroup } = config\n\n const layoutNodes = layoutNonConnectedAside ? connectedNodes : nodes\n\n const groupNames: string[] = unique(layoutNodes.map(d => getString(d, layoutNodeGroup, d._index)))\n const groupNamesSorted: string[] = sortBy(groupNames, d => layoutGroupOrder.indexOf(d))\n\n const groups = groupNamesSorted.map(groupName => ({\n name: groupName,\n nodes: layoutNodes.filter(d => getString(d, layoutNodeGroup, d._index) === groupName),\n }))\n\n // Handle connected nodes\n let r = 2 * getAverageNodeSize(groups[0]?.nodes ?? [], nodeSize)\n const widthToHeightRatio = width / height\n\n groups.forEach((group, i) => {\n const avgNodeSize = getAverageNodeSize(group.nodes, nodeSize)\n const requiredRadius = 1.1 * avgNodeSize * group.nodes.length / Math.PI\n if (r < requiredRadius) r = requiredRadius\n\n group.nodes.forEach((node, j) => {\n // If the first (central) group has only one node\n if (i === 0 && group.nodes.length === 1) {\n node.x = width / 2\n node.y = height / 2\n } else {\n let dAngle = 0\n if (i === 0 && group.nodes.length === 3) dAngle = Math.PI / 6\n if (i === 0 && group.nodes.length === 4) dAngle = Math.PI / 4\n const angle = 2 * j * Math.PI / group.nodes.length + i * Math.PI / 12 + dAngle\n node.x = width / 2 + r * Math.cos(angle) * widthToHeightRatio\n node.y = height / 2 + r * Math.sin(angle)\n }\n })\n\n const groupSpacing = avgNodeSize * 3\n r += groupSpacing\n })\n\n // Handle non-connected nodes\n if (layoutNonConnectedAside) {\n const maxSize = getMaxNodeSize(nonConnectedNodes, nodeSize)\n const maxY = max<number>(connectedNodes.map(d => d.y))\n const maxX = max<number>(connectedNodes.map(d => d.x))\n const minX = min<number>(connectedNodes.map(d => d.x))\n const graphWidth = maxX - minX\n positionNonConnectedNodes(nonConnectedNodes, maxY + maxSize * 3, maxSize * 2.25, graphWidth, minX)\n }\n}\n\nexport async function applyLayoutForce<N extends GraphInputNode, L extends GraphInputLink> (\n datamodel: GraphDataModel<N, L, GraphNode<N, L>, GraphLink<N, L>>,\n config: GraphConfigInterface<N, L>,\n width: number\n): Promise<void> {\n const { layoutNonConnectedAside, forceLayoutSettings, nodeSize } = config\n\n const { forceSimulation, forceLink, forceManyBody, forceX, forceY, forceCollide } = await import('d3-force')\n\n const { nonConnectedNodes, connectedNodes, nodes, links } = datamodel\n\n\n // Apply fx and fy to nodes if present before running the simulation\n if (forceLayoutSettings.fixNodePositionAfterSimulation) {\n nodes.forEach((d: GraphForceSimulationNode<N, L>) => {\n d.fx = isNil(d._state.fx) ? undefined : d._state.fx\n d.fy = isNil(d._state.fy) ? undefined : d._state.fy\n })\n } else {\n nodes.forEach((d: GraphForceSimulationNode<N, L>) => {\n delete d._state.fx\n delete d._state.fy\n })\n }\n\n const simulation = forceSimulation(layoutNonConnectedAside ? connectedNodes : nodes)\n .force('link', forceLink(links)\n .id((d) => String((d as GraphNode<N, L>)._id))\n .distance((l, i) => isFunction(forceLayoutSettings.linkDistance) ? forceLayoutSettings.linkDistance(l, i) : forceLayoutSettings.linkDistance)\n .strength((l, i) => isFunction(forceLayoutSettings.linkStrength) ? forceLayoutSettings.linkStrength(l, i) : forceLayoutSettings.linkStrength)\n )\n .force('charge', forceManyBody().strength((d, i) => {\n if (isFunction(forceLayoutSettings.charge)) {\n return forceLayoutSettings.charge(d as GraphNode<N, L>, i)\n } else {\n const linkCount = links.reduce((count, l) => count + Number((l.source === d) || (l.target === d)), 0)\n return forceLayoutSettings.charge * Math.sqrt(linkCount)\n }\n }))\n .force('x', forceX().strength(forceLayoutSettings.forceXStrength))\n .force('y', forceY().strength(forceLayoutSettings.forceYStrength))\n .force('collide', forceCollide<SimulationNodeDatum & N>().radius((d, i) => getNodeSize(d, nodeSize, i)).iterations(1))\n .stop()\n\n // See https://bl.ocks.org/mbostock/1667139, https://github.com/d3/d3-force/blob/master/README.md#simulation_tick\n const numIterations = forceLayoutSettings.numIterations ?? Math.ceil(Math.log(simulation.alphaMin()) / Math.log(1 - simulation.alphaDecay()))\n for (let i = 0, n = numIterations; i < n; ++i) {\n simulation.tick()\n }\n\n // Fix node positions to `_state` if requested.\n // And remove fx and fy from the node datum if present to make sure the nodes are not fixed\n // if the layout was changed to a different layout and then back to force\n if (forceLayoutSettings.fixNodePositionAfterSimulation) {\n nodes.forEach((d: GraphForceSimulationNode<N, L>) => {\n delete d.fx\n delete d.fy\n d._state.fx = d.x\n d._state.fy = d.y\n })\n }\n\n // Handle non-connected nodes\n if (layoutNonConnectedAside) {\n const maxSize = getMaxNodeSize(nonConnectedNodes, nodeSize)\n const maxY = max<number>(connectedNodes.map(d => d.y))\n const maxX = max<number>(connectedNodes.map(d => d.x))\n const minX = min<number>(connectedNodes.map(d => d.x))\n const graphWidth = maxX - minX\n positionNonConnectedNodes(nonConnectedNodes, maxY + maxSize * 6, maxSize * 2.25, Math.max(graphWidth, width), minX)\n }\n}\n\nexport async function applyELKLayout<N extends GraphInputNode, L extends GraphInputLink> (\n datamodel: GraphDataModel<N, L, GraphNode<N, L>, GraphLink<N, L>>,\n config: GraphConfigInterface<N, L>,\n width: number\n): Promise<void> {\n const ELK = (await import('elkjs/lib/elk.bundled.js')).default\n const elk = new ELK()\n\n const labelApprxHeight = 30\n const nodes = datamodel.nodes.map((n, i) => ({\n ...n,\n id: n._id,\n width: getNumber(n, config.nodeSize, n._index) + getNumber(n, config.nodeStrokeWidth, n._index),\n height: getNumber(n, config.nodeSize, n._index) + labelApprxHeight,\n ...(config.layoutElkGetNodeShape ? config.layoutElkGetNodeShape(n, i) : {}),\n }))\n\n let elkNodes: (GraphNode<N, L> | GraphElkHierarchyNode<N, L>)[]\n if (config.layoutElkNodeGroups) {\n const groupingFunctions = config.layoutElkNodeGroups\n .map(accessor => (d: GraphNode<N, L>) => getString(d, accessor, d._index)) as [(d: GraphNode<N, L>) => string]\n const grouped = group(nodes, ...groupingFunctions)\n elkNodes = toElkHierarchy(grouped, config.layoutElkSettings)\n } else {\n elkNodes = nodes\n }\n\n const rootNodeId = 'root'\n const elkGraph: ElkNode = {\n id: rootNodeId,\n layoutOptions: merge(DEFAULT_ELK_SETTINGS, getValue(rootNodeId, config.layoutElkSettings)),\n children: elkNodes as ElkNode[],\n edges: datamodel.links.map(l => ({\n id: l._id,\n sources: [l.source._id],\n targets: [l.target._id],\n })),\n }\n\n const layout = await elk.layout(elkGraph)\n adjustElkHierarchyCoordinates(layout)\n\n nodes.forEach((node, i) => {\n const found = datamodel.nodes.find(n => n._id === node.id)\n if (!found) return\n\n found.x = node.x + node.width / 2\n found.y = node.y + node.height / 2\n })\n\n // Handle non-connected nodes\n if (config.layoutNonConnectedAside) {\n const maxSize = getMaxNodeSize(datamodel.nonConnectedNodes, config.nodeSize)\n const maxY = max<number>(datamodel.connectedNodes.map(d => d.y)) || 0\n const maxX = max<number>(datamodel.connectedNodes.map(d => d.x)) || 0\n const minX = min<number>(datamodel.connectedNodes.map(d => d.x)) || 0\n const graphWidth = (maxX - minX) || width\n positionNonConnectedNodes(datamodel.nonConnectedNodes, maxY + maxSize * 3, maxSize * 2.25, Math.max(graphWidth, width))\n }\n}\n"],"names":[],"mappings":";;;;;;AA8BM,SAAU,mBAAmB,CACjC,SAAiE,EACjE,MAAkC,EAClC,KAAa,EACb,MAAc,EAAA;IAEd,MAAM,EAAE,iBAAiB,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,SAAS,CAAA;AAC9D,IAAA,MAAM,EAAE,uBAAuB,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;IAEpD,MAAM,WAAW,GAAG,KAAK,CAAA;IACzB,MAAM,YAAY,GAAG,MAAM,CAAA;;IAG3B,MAAM,WAAW,GAAG,uBAAuB,GAAG,cAAc,GAAG,KAAK,CAAA;IACpE,MAAM,WAAW,GAAG,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;AACzD,IAAA,MAAM,MAAM,GAAG,YAAY,GAAG,WAAW,CAAA;IACzC,MAAM,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAA;AACtF,IAAA,MAAM,MAAM,GAAG,WAAW,GAAG,WAAW,CAAA;IACxC,MAAM,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAA;IACtF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAE5C,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC3B,QAAA,MAAM,EAAE,GAAG,OAAO,GAAG,WAAW,GAAG,CAAC,CAAA;QACpC,MAAM,EAAE,GAAG,OAAO,GAAG,YAAY,GAAG,CAAC,CAAA;AACrC,QAAA,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,MAAM,CAAA;AAClD,QAAA,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AAC5C,QAAA,CAAC,CAAC,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AAC/C,KAAC,CAAC,CAAA;;AAGF,IAAA,IAAI,uBAAuB,EAAE;QAC3B,MAAM,OAAO,GAAG,cAAc,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAA;AAC3D,QAAA,MAAM,IAAI,GAAG,GAAG,CAAS,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACtD,QAAA,MAAM,IAAI,GAAG,GAAG,CAAS,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACtD,QAAA,MAAM,IAAI,GAAG,GAAG,CAAS,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACtD,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,CAAA;QAC9B,yBAAyB,CAAC,iBAAiB,EAAE,IAAI,GAAG,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,CAAA;AACpH,KAAA;AACH,CAAC;AAEK,SAAU,mBAAmB,CACjC,SAAiE,EACjE,MAAkC,EAClC,KAAa,EACb,MAAc,EACd,WAAoB,EAAA;;IAEpB,MAAM,EAAE,iBAAiB,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,SAAS,CAAA;IAC9D,MAAM,EACJ,uBAAuB,EAAE,gBAAgB,EAAE,oCAAoC,EAAE,4BAA4B,EAC7G,6BAA6B,EAAE,QAAQ,EAAE,eAAe,EAAE,0BAA0B,EAAE,0BAA0B,EAChH,yBAAyB,EAAE,6BAA6B,GACzD,GAAG,MAAM,CAAA;IAEV,MAAM,WAAW,GAAG,KAAK,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAA;IACxD,MAAM,YAAY,GAAG,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CAAC,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;;IAG9H,MAAM,WAAW,GAAG,uBAAuB,GAAG,cAAc,GAAG,KAAK,CAAA;IACpE,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AACxF,IAAA,MAAM,gBAAgB,GAAa,MAAM,CAAC,UAAU,EAAE,CAAC,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IAEvF,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,IAAG;QAC9C,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAA;QACjG,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,0BAA0B,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;AACtG,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK;AAC5D,YAAA,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC;YAC9B,IAAI;AACL,SAAA,CAAC,CAAC,CAAA;QAEH,OAAO;AACL,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,KAAK,EAAE,UAAU;YACjB,SAAS;SACV,CAAA;AACH,KAAC,CAAC,CAAA;;AAGF,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,oCAAoC,CAAC,CAAA;AAC/E,IAAA,IAAI,KAAK,EAAE;QACT,MAAM,OAAO,GAA2B,EAAE,CAAA;QAC1C,IAAI,GAAG,GAAG,CAAC,CAAA;AACX,QAAA,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAG;AACjC,YAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;AAC5B,gBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;oBACxB,MAAM,YAAY,GAAG,IAAI,KAAJ,IAAA,IAAA,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,CAAE,MAAM,CAAC,GAAG,CAAA;AACrC,oBAAA,OAAO,CAAC,YAAY,CAAC,GAAG,GAAG,CAAA;AAC3B,oBAAA,GAAG,GAAG,GAAG,GAAG,CAAC,CAAA;AACf,iBAAC,CAAC,CAAA;AACJ,aAAC,CAAC,CAAA;AACJ,SAAC,CAAC,CAAA;QAEF,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAG;AACjC,YAAA,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAG;gBAC7B,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;oBAC3B,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;AACtD,iBAAC,CAAC,CAAA;AACJ,aAAC,CAAC,CAAA;AACJ,SAAC,CAAC,CAAA;AACH,KAAA;IAED,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAG,EAAA,IAAA,EAAA,CAAA,CAAC,OAAA,CAAA,EAAA,GAAA,CAAC,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAA,EAAA,CAAC,CAAA;IAC9C,MAAM,gBAAgB,GAAG,EAAE,CAAA;IAC3B,MAAM,WAAW,GAAG,EAAE,CAAA;IACtB,MAAM,eAAe,GAAG,6BAA6B,KAAA,IAAA,IAA7B,6BAA6B,KAA7B,KAAA,CAAA,GAAA,6BAA6B,GAAI,CAAC,CAAA;IAC1D,MAAM,WAAW,GAAG,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;AAEzD,IAAA,MAAM,qBAAqB,GAAG,OAAO,CAAC,yBAAyB,CAAC,GAAG,yBAAyB,GAAG,CAAC,yBAAyB,EAAE,yBAAyB,CAAC,CAAA;IACrJ,IAAI,WAAW,KAAK,YAAY,EAAE;AAChC,QAAA,MAAM,oBAAoB,GAAG,CAAC,GAAG,WAAW,GAAG,WAAW,CAAA;AAC1D,QAAA,MAAM,oBAAoB,GAAG,GAAG,GAAG,WAAW,GAAG,WAAW,CAAA;QAC5D,MAAM,qBAAqB,GAAG,CAAA,EAAA,GAAA,qBAAqB,CAAC,CAAC,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,KAAK,CAAC,WAAW,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,CAAA;AAErI,QAAA,MAAM,eAAe,GAAG,WAAW,GAAG,CAAC,GAAG,gBAAgB,CAAA;AAC1D,QAAA,MAAM,eAAe,GAAG,WAAW,GAAG,GAAG,GAAG,gBAAgB,CAAA;QAC5D,MAAM,YAAY,GAAG,0BAA0B,KAA1B,IAAA,IAAA,0BAA0B,cAA1B,0BAA0B,GAAI,KAAK,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,eAAe,EAAE,eAAe,CAAC,CAAA;AAC9H,QAAA,MAAM,mBAAmB,GAAG,CAAA,EAAA,GAAA,qBAAqB,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,WAAW,GAAG,gBAAgB,GAAG,WAAW,CAAA;AAEpG,QAAA,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC,CAAA;AAC7C,QAAA,MAAM,CAAC,OAAO,CAAC,KAAK,IAAG;YACrB,IAAI,EAAE,GAAG,CAAC,CAAA;YACV,IAAI,EAAE,GAAG,CAAC,CAAA;YACV,IAAI,gBAAgB,GAAG,CAAC,CAAA;YACxB,IAAI,UAAU,GAAG,CAAC,CAAA;YAClB,IAAI,WAAW,GAAG,CAAC,CAAA;YACnB,IAAI,CAAC,GAAG,CAAC,CAAA;AACT,YAAA,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAG;AACjC,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,4BAA4B,CAAC,CAAA;gBACpF,IAAI,CAAC,GAAG,CAAC,CAAA;gBACT,IAAI,CAAC,GAAG,EAAE,CAAA;AACV,gBAAA,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAA;AACf,gBAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAG;AACzB,oBAAA,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAA;AAC7B,oBAAA,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AACP,oBAAA,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;oBACP,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;AAEpC,oBAAA,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;oBACT,IAAI,CAAC,IAAI,4BAA4B,EAAE;wBACrC,CAAC,GAAG,CAAC,CAAA;wBACL,CAAC,IAAI,mBAAmB,CAAA;wBACxB,CAAC,GAAG,EAAE,CAAA;AACP,qBAAA;AACH,iBAAC,CAAC,CAAA;AAEF,gBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,4BAA4B,CAAC,GAAG,qBAAqB,CAAA;AAC3G,gBAAA,MAAM,cAAc,GAAG,YAAY,GAAG,mBAAmB,CAAA;gBACzD,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAA;AAC5D,gBAAA,EAAE,GAAG,EAAE,GAAG,cAAc,GAAG,eAAe,CAAA;AAC1C,gBAAA,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACT,IAAI,CAAC,IAAI,6BAA6B,EAAE;oBACtC,CAAC,GAAG,CAAC,CAAA;oBACL,EAAE,GAAG,CAAC,CAAA;AACN,oBAAA,EAAE,GAAG,EAAE,GAAG,gBAAgB,GAAG,eAAe,CAAA;oBAC5C,gBAAgB,GAAG,CAAC,CAAA;AACrB,iBAAA;gBAED,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;;AAExC,aAAC,CAAC,CAAA;;AAGF,YAAA,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAG;AACjC,gBAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAG;AACzB,oBAAA,CAAC,CAAC,CAAC,IAAI,UAAU,GAAG,CAAC,CAAA;AACvB,iBAAC,CAAC,CAAA;AACJ,aAAC,CAAC,CAAA;YACF,UAAU,GAAG,CAAC,CAAA;;AAGd,YAAA,EAAE,GAAG,WAAW,GAAG,YAAY,CAAA;AACjC,SAAC,CAAC,CAAA;AACH,KAAA;AAAM,SAAA;AACL,QAAA,MAAM,eAAe,GAAG,CAAC,GAAG,WAAW,GAAG,WAAW,CAAA;AACrD,QAAA,MAAM,eAAe,GAAG,EAAE,GAAG,WAAW,GAAG,WAAW,CAAA;QACtD,MAAM,YAAY,IAAI,0BAA0B,KAAA,IAAA,IAA1B,0BAA0B,KAA1B,KAAA,CAAA,GAAA,0BAA0B,GAAI,KAAK,CAAC,WAAW,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC,CAAA;AAEtH,QAAA,MAAM,kBAAkB,GAAG,WAAW,GAAG,GAAG,GAAG,gBAAgB,CAAA;AAC/D,QAAA,MAAM,kBAAkB,GAAG,WAAW,GAAG,GAAG,GAAG,gBAAgB,CAAA;QAC/D,MAAM,mBAAmB,GAAG,CAAA,EAAA,GAAA,qBAAqB,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,KAAK,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,CAAA;QACzI,MAAM,qBAAqB,GAAG,CAAA,EAAA,GAAA,qBAAqB,CAAC,CAAC,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,WAAW,GAAG,GAAG,CAAA;AAE3E,QAAA,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,CAAA;AAC5C,QAAA,MAAM,CAAC,OAAO,CAAC,KAAK,IAAG;YACrB,IAAI,EAAE,GAAG,CAAC,CAAA;AACV,YAAA,IAAI,EAAE,GAAG,CAAC,CAAA;YACV,IAAI,iBAAiB,GAAG,CAAC,CAAA;YACzB,IAAI,UAAU,GAAG,CAAC,CAAA;YAClB,IAAI,WAAW,GAAG,CAAC,CAAA;YAEnB,IAAI,CAAC,GAAG,CAAC,CAAA;AACT,YAAA,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAG;AACjC,gBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,4BAA4B,CAAC,CAAA;gBACvF,IAAI,CAAC,GAAG,CAAC,CAAA;gBACT,IAAI,CAAC,GAAG,EAAE,CAAA;AACV,gBAAA,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAA;AACf,gBAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAG;AACzB,oBAAA,CAAC,GAAG,CAAC,GAAG,mBAAmB,CAAA;AAC3B,oBAAA,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AACP,oBAAA,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;oBACP,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;AAEtC,oBAAA,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;oBACT,IAAI,CAAC,IAAI,4BAA4B,EAAE;wBACrC,CAAC,GAAG,CAAC,CAAA;wBACL,CAAC,IAAI,qBAAqB,CAAA;wBAC1B,CAAC,GAAG,EAAE,CAAA;AACP,qBAAA;AACH,iBAAC,CAAC,CAAA;AAEF,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,4BAA4B,CAAC,GAAG,mBAAmB,CAAA;AAC1G,gBAAA,MAAM,aAAa,GAAG,eAAe,GAAG,qBAAqB,CAAA;gBAC7D,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAA;AAC/D,gBAAA,EAAE,GAAG,EAAE,GAAG,aAAa,GAAG,eAAe,CAAA;AACzC,gBAAA,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACT,IAAI,CAAC,IAAI,6BAA6B,EAAE;oBACtC,CAAC,GAAG,CAAC,CAAA;oBACL,EAAE,GAAG,CAAC,CAAA;AACN,oBAAA,EAAE,GAAG,EAAE,GAAG,iBAAiB,GAAG,eAAe,CAAA;oBAC7C,iBAAiB,GAAG,CAAC,CAAA;AACtB,iBAAA;gBAED,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;AACtC,aAAC,CAAC,CAAA;;AAGF,YAAA,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAG;AACjC,gBAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAG;AACzB,oBAAA,CAAC,CAAC,CAAC,IAAI,WAAW,GAAG,CAAC,CAAA;AACxB,iBAAC,CAAC,CAAA;AACJ,aAAC,CAAC,CAAA;YACF,WAAW,GAAG,CAAC,CAAA;;AAGf,YAAA,EAAE,GAAG,UAAU,GAAG,YAAY,CAAA;AAChC,SAAC,CAAC,CAAA;AACH,KAAA;;AAGD,IAAA,IAAI,uBAAuB,EAAE;QAC3B,MAAM,OAAO,GAAG,cAAc,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAA;AAC3D,QAAA,MAAM,IAAI,GAAG,GAAG,CAAS,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AAC3D,QAAA,MAAM,IAAI,GAAG,GAAG,CAAS,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AAC3D,QAAA,MAAM,IAAI,GAAG,GAAG,CAAS,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAC3D,MAAM,UAAU,GAAG,CAAC,IAAI,GAAG,IAAI,KAAK,KAAK,CAAA;QACzC,yBAAyB,CAAC,iBAAiB,EAAE,IAAI,GAAG,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAA;AAC9G,KAAA;AACH,CAAC;SAEqB,gBAAgB,CACpC,SAAiE,EACjE,MAAkC,EAClC,KAAa,EAAA;;QAEb,MAAM,EAAE,iBAAiB,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,SAAS,CAAA;AACrE,QAAA,MAAM,EAAE,QAAQ,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,eAAe,EAAE,SAAS,EAAE,GAAG,MAAM,CAAA;;;;QAKrG,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,sBAAsB,CAAC,CAAA;;;;QAItD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,sBAAsB,CAAC,CAAA;;AAGvD,QAAA,MAAM,UAAU,GAAG,IAAI,KAAK,EAAqC,CAAA;;AAGjE,QAAA,UAAU,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAA;;QAGxC,UAAU,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;;;;QAK1C,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAC3B,QAAA,MAAM,GAAG,IAAI,uBAAuB,GAAG,cAAc,GAAG,KAAK,CAAC,CAAA;AAC9D,QAAA,GAAG,CAAC,OAAO,CAAC,IAAI,IAAG;YACjB,UAAU,CAAC,OAAO,CAAC,CAAA,EAAG,IAAI,CAAC,MAAM,EAAE,EAAE;gBACnC,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC;gBAC9C,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC;AACnG,gBAAA,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG;AACvE,gBAAA,YAAY,EAAE,IAAI;AACnB,aAAA,CAAC,CAAA;AACJ,SAAC,CAAC,CAAA;;AAGF,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;AACnB,YAAA,UAAU,CAAC,OAAO,CAChB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EACvB,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE,CACxB,CAAA;AACH,SAAC,CAAC,CAAA;;QAGF,MAAM,CAAC,UAAU,CAAC,CAAA;;QAGlB,UAAU,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,IAAG;YAC7B,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAA6D,CAAA;YAC3F,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;YAC5B,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;AAC9B,SAAC,CAAC,CAAA;;AAGF,QAAA,IAAI,uBAAuB,EAAE;YAC3B,MAAM,WAAW,GAAG,cAAc,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAA;AAC/D,YAAA,MAAM,IAAI,GAAG,GAAG,CAAS,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACtD,YAAA,MAAM,IAAI,GAAG,GAAG,CAAS,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACtD,YAAA,MAAM,IAAI,GAAG,GAAG,CAAS,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACtD,YAAA,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,CAAA;YAC9B,yBAAyB,CAAC,iBAAiB,EAAE,IAAI,GAAG,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;AACzH,SAAA;KACF,CAAA,CAAA;AAAA,CAAA;AAEK,SAAU,qBAAqB,CACnC,SAAiE,EACjE,MAAkC,EAClC,KAAa,EACb,MAAc,EAAA;;IAEd,MAAM,EAAE,iBAAiB,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,SAAS,CAAA;IAC9D,MAAM,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,CAAA;IAEvF,MAAM,WAAW,GAAG,uBAAuB,GAAG,cAAc,GAAG,KAAK,CAAA;IAEpE,MAAM,UAAU,GAAa,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAClG,IAAA,MAAM,gBAAgB,GAAa,MAAM,CAAC,UAAU,EAAE,CAAC,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IAEvF,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,KAAK;AAChD,QAAA,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;AACtF,KAAA,CAAC,CAAC,CAAA;;AAGH,IAAA,IAAI,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,MAAA,CAAA,EAAA,GAAA,MAAM,CAAC,CAAC,CAAC,0CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,EAAE,QAAQ,CAAC,CAAA;AAChE,IAAA,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,CAAA;IAEzC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,KAAI;QAC1B,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;AAC7D,QAAA,MAAM,cAAc,GAAG,GAAG,GAAG,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAA;QACvE,IAAI,CAAC,GAAG,cAAc;YAAE,CAAC,GAAG,cAAc,CAAA;QAE1C,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;;YAE9B,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACvC,gBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA;AAClB,gBAAA,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAA;AACpB,aAAA;AAAM,iBAAA;gBACL,IAAI,MAAM,GAAG,CAAC,CAAA;gBACd,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,oBAAA,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAA;gBAC7D,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,oBAAA,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAA;gBAC7D,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,MAAM,CAAA;AAC9E,gBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,kBAAkB,CAAA;AAC7D,gBAAA,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AAC1C,aAAA;AACH,SAAC,CAAC,CAAA;AAEF,QAAA,MAAM,YAAY,GAAG,WAAW,GAAG,CAAC,CAAA;QACpC,CAAC,IAAI,YAAY,CAAA;AACnB,KAAC,CAAC,CAAA;;AAGF,IAAA,IAAI,uBAAuB,EAAE;QAC3B,MAAM,OAAO,GAAG,cAAc,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAA;AAC3D,QAAA,MAAM,IAAI,GAAG,GAAG,CAAS,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACtD,QAAA,MAAM,IAAI,GAAG,GAAG,CAAS,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACtD,QAAA,MAAM,IAAI,GAAG,GAAG,CAAS,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACtD,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,CAAA;AAC9B,QAAA,yBAAyB,CAAC,iBAAiB,EAAE,IAAI,GAAG,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;AACnG,KAAA;AACH,CAAC;SAEqB,gBAAgB,CACpC,SAAiE,EACjE,MAAkC,EAClC,KAAa,EAAA;;;QAEb,MAAM,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;AAEzE,QAAA,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,OAAO,UAAU,CAAC,CAAA;QAE5G,MAAM,EAAE,iBAAiB,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,SAAS,CAAA;;QAIrE,IAAI,mBAAmB,CAAC,8BAA8B,EAAE;AACtD,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,CAAiC,KAAI;gBAClD,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAA;gBACnD,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAA;AACrD,aAAC,CAAC,CAAA;AACH,SAAA;AAAM,aAAA;AACL,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,CAAiC,KAAI;AAClD,gBAAA,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAA;AAClB,gBAAA,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAA;AACpB,aAAC,CAAC,CAAA;AACH,SAAA;AAED,QAAA,MAAM,UAAU,GAAG,eAAe,CAAC,uBAAuB,GAAG,cAAc,GAAG,KAAK,CAAC;AACjF,aAAA,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC;AAC5B,aAAA,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,CAAE,CAAqB,CAAC,GAAG,CAAC,CAAC;AAC7C,aAAA,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,UAAU,CAAC,mBAAmB,CAAC,YAAY,CAAC,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,mBAAmB,CAAC,YAAY,CAAC;AAC5I,aAAA,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,UAAU,CAAC,mBAAmB,CAAC,YAAY,CAAC,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAC9I;AACA,aAAA,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACjD,YAAA,IAAI,UAAU,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;gBAC1C,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAoB,EAAE,CAAC,CAAC,CAAA;AAC3D,aAAA;AAAM,iBAAA;AACL,gBAAA,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;gBACrG,OAAO,mBAAmB,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;AACzD,aAAA;AACH,SAAC,CAAC,CAAC;AACF,aAAA,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;AACjE,aAAA,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;AACjE,aAAA,KAAK,CAAC,SAAS,EAAE,YAAY,EAA2B,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACrH,aAAA,IAAI,EAAE,CAAA;;AAGT,QAAA,MAAM,aAAa,GAAG,CAAA,EAAA,GAAA,mBAAmB,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;AAC7I,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;YAC7C,UAAU,CAAC,IAAI,EAAE,CAAA;AAClB,SAAA;;;;QAKD,IAAI,mBAAmB,CAAC,8BAA8B,EAAE;AACtD,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,CAAiC,KAAI;gBAClD,OAAO,CAAC,CAAC,EAAE,CAAA;gBACX,OAAO,CAAC,CAAC,EAAE,CAAA;gBACX,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;gBACjB,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;AACnB,aAAC,CAAC,CAAA;AACH,SAAA;;AAGD,QAAA,IAAI,uBAAuB,EAAE;YAC3B,MAAM,OAAO,GAAG,cAAc,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAA;AAC3D,YAAA,MAAM,IAAI,GAAG,GAAG,CAAS,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACtD,YAAA,MAAM,IAAI,GAAG,GAAG,CAAS,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACtD,YAAA,MAAM,IAAI,GAAG,GAAG,CAAS,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACtD,YAAA,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,CAAA;YAC9B,yBAAyB,CAAC,iBAAiB,EAAE,IAAI,GAAG,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,CAAA;AACpH,SAAA;;AACF,CAAA;SAEqB,cAAc,CAClC,SAAiE,EACjE,MAAkC,EAClC,KAAa,EAAA;;QAEb,MAAM,GAAG,GAAG,CAAC,MAAM,OAAO,0BAA0B,CAAC,EAAE,OAAO,CAAA;AAC9D,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;QAErB,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAC3B,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,oDAClC,CAAC,CAAA,EAAA,EACJ,EAAE,EAAE,CAAC,CAAC,GAAG,EACT,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,EAC/F,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,gBAAgB,EAAA,CAAA,GAC9D,MAAM,CAAC,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,EAAC,CAC3E,CAAC,CAAA;AAEH,QAAA,IAAI,QAA2D,CAAA;QAC/D,IAAI,MAAM,CAAC,mBAAmB,EAAE;AAC9B,YAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,mBAAmB;iBACjD,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAkB,KAAK,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAqC,CAAA;YAChH,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,iBAAiB,CAAC,CAAA;YAClD,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAA;AAC7D,SAAA;AAAM,aAAA;YACL,QAAQ,GAAG,KAAK,CAAA;AACjB,SAAA;QAED,MAAM,UAAU,GAAG,MAAM,CAAA;AACzB,QAAA,MAAM,QAAQ,GAAY;AACxB,YAAA,EAAE,EAAE,UAAU;AACd,YAAA,aAAa,EAAE,KAAK,CAAC,oBAAoB,EAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC1F,YAAA,QAAQ,EAAE,QAAqB;YAC/B,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK;gBAC/B,EAAE,EAAE,CAAC,CAAC,GAAG;AACT,gBAAA,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;AACvB,gBAAA,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;AACxB,aAAA,CAAC,CAAC;SACJ,CAAA;QAED,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACzC,6BAA6B,CAAC,MAAM,CAAC,CAAA;QAErC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;YACxB,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE,CAAC,CAAA;AAC1D,YAAA,IAAI,CAAC,KAAK;gBAAE,OAAM;AAElB,YAAA,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAA;AACjC,YAAA,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;AACpC,SAAC,CAAC,CAAA;;QAGF,IAAI,MAAM,CAAC,uBAAuB,EAAE;AAClC,YAAA,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;YAC5E,MAAM,IAAI,GAAG,GAAG,CAAS,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YACrE,MAAM,IAAI,GAAG,GAAG,CAAS,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YACrE,MAAM,IAAI,GAAG,GAAG,CAAS,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YACrE,MAAM,UAAU,GAAG,CAAC,IAAI,GAAG,IAAI,KAAK,KAAK,CAAA;YACzC,yBAAyB,CAAC,SAAS,CAAC,iBAAiB,EAAE,IAAI,GAAG,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAA;AACxH,SAAA;KACF,CAAA,CAAA;AAAA;;;;"}
|
|
@@ -263,7 +263,7 @@ function animateLinkFlow(selection, config, scale, linkPathLengthMap) {
|
|
|
263
263
|
const pathLength = cachedLinkPathLength !== null && cachedLinkPathLength !== void 0 ? cachedLinkPathLength : linkPathElement.getTotalLength();
|
|
264
264
|
if (!getBoolean(d, linkFlow, d._indexGlobal) || !pathLength)
|
|
265
265
|
return;
|
|
266
|
-
const t = d._state.
|
|
266
|
+
const t = d._state.flowAnimDistanceRelative;
|
|
267
267
|
const circles = flowGroup$1.selectAll(`.${flowCircle}`);
|
|
268
268
|
circles
|
|
269
269
|
.attr('transform', index => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/components/graph/modules/link/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { range, sum } from 'd3-array'\nimport { Transition } from 'd3-transition'\nimport toPx from 'to-px'\n\n// Utils\nimport { throttle, getValue, getNumber, getBoolean, ensureArray } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\nimport { getCSSVariableValueInPixels } from 'utils/misc'\nimport { estimateStringPixelLength } from 'utils/text'\n\n// Types\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\n\n// Local Types\nimport { GraphCircleLabel, GraphLink, GraphLinkArrowStyle, GraphLinkStyle } from '../../types'\n\n// Config\nimport { GraphConfigInterface } from '../../config'\n\n// Helpers\nimport { getX, getY, isInternalHref } from '../node/helper'\nimport {\n getLinkShiftTransform,\n getLinkStrokeWidth,\n getLinkBandWidth,\n getLinkColor,\n getLinkLabelTextColor,\n getLinkArrowStyle,\n LINK_MARKER_WIDTH,\n} from './helper'\nimport { ZoomLevel } from '../zoom-levels'\n\n// Styles\nimport * as generalSelectors from '../../style'\nimport * as linkSelectors from './style'\n\nexport function createLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>\n): void {\n selection.attr('opacity', 0)\n\n selection.append('path')\n .attr('class', linkSelectors.linkSupport)\n\n selection.append('path')\n .attr('class', linkSelectors.link)\n\n selection.append('path')\n .attr('class', linkSelectors.linkBand)\n\n selection.append('use')\n .attr('class', linkSelectors.linkArrow)\n\n selection.append('g')\n .attr('class', linkSelectors.flowGroup)\n .style('opacity', 0)\n .selectAll(`.${linkSelectors.flowCircle}`)\n .data(range(0, 6)).enter()\n .append('circle')\n .attr('class', linkSelectors.flowCircle)\n}\n\n/** Updates the links partially according to their `_state` */\nexport function updateLinksPartial<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n scale: number\n): void {\n const isGreyedOut = (d: GraphLink<N, L>, i: number): boolean => getBoolean(d, config.linkDisabled, i) || d._state.greyout\n selection\n .classed(linkSelectors.greyedOutLink, (d, i) => isGreyedOut(d, i))\n\n selection.each((d, i, elements) => {\n const element = elements[i]\n const group = select(element)\n group.select(`.${linkSelectors.link}`)\n group.select(`.${linkSelectors.linkBand}`)\n const linkSupport = group.select(`.${linkSelectors.linkSupport}`)\n\n linkSupport\n .style('stroke-opacity', (d._state.hovered || d._state.selected) ? 0.2 : 0)\n .style('stroke-width',\n d._state.selected\n ? getLinkBandWidth(d, scale, config) + 5\n : d._state.hovered ? getLinkBandWidth(d, scale, config) + 10 : null\n )\n })\n}\n\nexport function updateLinkLines<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n duration: number,\n scale = 1,\n getLinkArrowDefId: (arrow: GraphLinkArrowStyle | undefined) => string,\n linkPathLengthMap: Map<string, number>\n): Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown> {\n return selection.each((d, i, elements) => {\n const element = elements[i]\n const linkGroup = select(element)\n const link = linkGroup.select<SVGPathElement>(`.${linkSelectors.link}`)\n const linkBand = linkGroup.select<SVGPathElement>(`.${linkSelectors.linkBand}`)\n const linkSupport = linkGroup.select<SVGPathElement>(`.${linkSelectors.linkSupport}`)\n const linkArrow = linkGroup.select<SVGUseElement>(`.${linkSelectors.linkArrow}`)\n const linkColor = getLinkColor(d, config)\n const linkShiftTransform = getLinkShiftTransform(d, config.linkNeighborSpacing)\n const linkLabelData = ensureArray(\n getValue<GraphLink<N, L>, GraphCircleLabel | GraphCircleLabel[]>(d, config.linkLabel, d._indexGlobal)\n )\n const offsetSource = getValue(d, config.linkSourcePointOffset, i)\n const offsetTarget = getValue(d, config.linkTargetPointOffset, i)\n const x1 = getX(d.source) + (offsetSource?.[0] || 0)\n const y1 = getY(d.source) + (offsetSource?.[1] || 0)\n const x2 = getX(d.target) + (offsetTarget?.[0] || 0)\n const y2 = getY(d.target) + (offsetTarget?.[1] || 0)\n\n const curvature = getNumber(d, config.linkCurvature, i) ?? 0\n const cp1x = x1 + (x2 - x1) * 0.5 * curvature\n const cp1y = y1 + (y2 - y1) * 0.0 * curvature\n const cp2x = x1 + (x2 - x1) * 0.5 * curvature\n const cp2y = y1 + (y2 - y1) * 1.0 * curvature\n\n const pathData = `M${x1},${y1} C${cp1x},${cp1y} ${cp2x},${cp2y} ${x2},${y2}`\n const linkPathElement = linkSupport.attr('d', pathData).node()\n const cachedLinkPathLength = linkPathLengthMap.get(pathData)\n const pathLength = cachedLinkPathLength ?? linkPathElement.getTotalLength()\n if (!cachedLinkPathLength) linkPathLengthMap.set(pathData, pathLength)\n\n linkSupport\n .style('stroke', linkColor)\n .attr('transform', linkShiftTransform)\n\n link\n .attr('class', linkSelectors.link)\n .style('stroke-width', getLinkStrokeWidth(d, scale, config))\n .style('stroke', linkColor)\n .attr('transform', linkShiftTransform)\n\n smartTransition(link, duration)\n .attr('d', pathData)\n\n linkBand\n .attr('class', linkSelectors.linkBand)\n .attr('transform', linkShiftTransform)\n .style('stroke-width', getLinkBandWidth(d, scale, config))\n .style('stroke', linkColor)\n\n smartTransition(linkBand, duration)\n .attr('d', pathData)\n\n\n // Arrow\n const linkArrowStyle = getLinkArrowStyle(d, config)\n if (linkArrowStyle) {\n const arrowPos = pathLength * (linkLabelData.length ? 0.65 : 0.5)\n const p1 = linkPathElement.getPointAtLength(arrowPos)\n const p2 = linkPathElement.getPointAtLength(arrowPos + 1) // A point very close to p1\n\n // Calculate the angle for the arrowhead\n const angle = Math.atan2(p2.y - p1.y, p2.x - p1.x) * (180 / Math.PI)\n const arrowWasShownBefore = linkArrow.attr('href')\n linkArrow\n .attr('href', `#${getLinkArrowDefId(linkArrowStyle)}`)\n\n smartTransition(linkArrow, arrowWasShownBefore ? duration : 0)\n .attr('fill', linkColor)\n .attr('transform', `translate(${p1.x}, ${p1.y}) rotate(${angle})`)\n } else {\n linkArrow.attr('href', null)\n }\n })\n}\n\nexport function updateLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n duration: number,\n scale = 1,\n getLinkArrowDefId: (arrow: GraphLinkArrowStyle | undefined) => string,\n linkPathLengthMap: Map<string, number>\n): void {\n const { linkStyle, linkFlow, linkLabel, linkLabelShiftFromCenter } = config\n if (!selection.size()) return\n\n selection\n .classed(\n linkSelectors.linkDashed,\n d => getValue<GraphLink<N, L>, GraphLinkStyle>(d, linkStyle, d._indexGlobal) === GraphLinkStyle.Dashed\n )\n\n // Update line and arrow positions\n updateLinkLines(selection, config, duration, scale, getLinkArrowDefId, linkPathLengthMap)\n\n // Update labels and link flow (particles) groups\n selection.each((d, i, elements) => {\n const element = elements[i]\n const linkGroup = select(element)\n const flowGroup = linkGroup.select(`.${linkSelectors.flowGroup}`)\n const linkSupport = linkGroup.select<SVGPathElement>(`.${linkSelectors.linkSupport}`)\n const linkPathElement = linkSupport.node()\n const linkColor = getLinkColor(d, config)\n const linkShiftTransform = getLinkShiftTransform(d, config.linkNeighborSpacing)\n const linkLabelData = ensureArray(\n getValue<GraphLink<N, L>, GraphCircleLabel | GraphCircleLabel[]>(d, linkLabel, d._indexGlobal)\n )\n const linkFlowParticleSize = getNumber(d, config.linkFlowParticleSize, d._indexGlobal)\n\n // Particle Flow\n flowGroup\n .attr('transform', linkShiftTransform)\n .style('display', getBoolean(d, linkFlow, d._indexGlobal) ? null : 'none')\n\n flowGroup\n .selectAll(`.${linkSelectors.flowCircle}`)\n .attr('r', linkFlowParticleSize / Math.sqrt(scale))\n .style('fill', linkColor)\n\n smartTransition(flowGroup, duration)\n .style('opacity', scale < ZoomLevel.Level2 ? 0 : 1)\n\n // Labels\n // Preparing the labels before rendering to be able to center them\n const linkLabelsDataPrepared = linkLabelData.map((linkLabelDatum) => {\n const text = linkLabelDatum.text?.toString() || ''\n const shouldRenderUseElement = isInternalHref(text)\n const fontSizePx = toPx(linkLabelDatum.fontSize) ?? getCSSVariableValueInPixels('var(--vis-graph-link-label-font-size)', linkGroup.node())\n const shouldBeRenderedAsCircle = text.length <= 2 || shouldRenderUseElement\n const paddingVertical = 4\n const paddingHorizontal = shouldBeRenderedAsCircle ? paddingVertical : 8\n const estimatedWidthPx = estimateStringPixelLength(text, fontSizePx)\n\n return {\n ...linkLabelDatum,\n _shouldRenderUseElement: shouldRenderUseElement,\n _fontSizePx: fontSizePx,\n _shouldBeRenderedAsCircle: shouldBeRenderedAsCircle,\n _paddingVertical: paddingVertical,\n _paddingHorizontal: paddingHorizontal,\n _estimatedWidthPx: estimatedWidthPx,\n _borderRadius: linkLabelDatum.radius ?? (shouldBeRenderedAsCircle ? fontSizePx : 4),\n _backgroundWidth: (shouldBeRenderedAsCircle ? fontSizePx : estimatedWidthPx) + paddingHorizontal * 2,\n _backgroundHeight: fontSizePx + paddingVertical * 2,\n }\n })\n type GraphCircleLabelPrepared = typeof linkLabelsDataPrepared[0]\n const linkLabelGroups = linkGroup\n .selectAll<SVGGElement, GraphCircleLabelPrepared>(`.${linkSelectors.linkLabelGroup}`)\n .data(linkLabelsDataPrepared, (d: GraphCircleLabelPrepared) => d.text)\n\n const linkLabelGroupsEnter = linkLabelGroups.enter().append('g').attr('class', linkSelectors.linkLabelGroup)\n linkLabelGroupsEnter.each((linkLabelDatum, i, elements) => {\n const linkLabelGroup = select<SVGGElement, GraphCircleLabelPrepared>(elements[i])\n linkLabelGroup.append('rect').attr('class', linkSelectors.linkLabelBackground)\n\n const linkLabelText = linkLabelDatum ? linkLabelDatum.text?.toString() : undefined\n const shouldRenderUseElement = isInternalHref(linkLabelText)\n linkLabelGroup.select<SVGTextElement>(`.${linkSelectors.linkLabelContent}`).remove()\n linkLabelGroup\n .append(shouldRenderUseElement ? 'use' : 'text')\n .attr('class', linkSelectors.linkLabelContent)\n })\n linkLabelGroupsEnter.style('opacity', 0)\n\n const linkLabelGroupsMerged = linkLabelGroups.merge(linkLabelGroupsEnter)\n const linkLabelMargin = 1\n let linkLabelShiftCumulative = -sum(linkLabelsDataPrepared, d => d._backgroundWidth + linkLabelMargin) / 2 // Centering the labels\n const cachedLinkPathLength = linkPathLengthMap.get(linkPathElement.getAttribute('d'))\n const pathLength = cachedLinkPathLength ?? linkPathElement.getTotalLength()\n const linkArrowStyle = getLinkArrowStyle(d, config)\n linkLabelGroupsMerged.each((linkLabelDatum, i, elements) => {\n const element = elements[i]\n const linkLabelGroup = select<SVGGElement, GraphCircleLabelPrepared>(element)\n const linkLabelText = linkLabelDatum.text?.toString()\n const linkLabelContent = linkLabelGroup.select<SVGTextElement | SVGUseElement>(`.${linkSelectors.linkLabelContent}`)\n const linkMarkerWidth = linkArrowStyle ? LINK_MARKER_WIDTH * 2 : 0\n const linkLabelShift = getBoolean(d, linkLabelShiftFromCenter, d._indexGlobal) ? -linkMarkerWidth + 4 : 0\n const linkLabelPos = linkPathElement.getPointAtLength(pathLength / 2 + linkLabelShift + linkLabelShiftCumulative + linkLabelDatum._backgroundWidth / 2)\n const linkLabelTranslate = `translate(${linkLabelPos.x}, ${linkLabelPos.y})`\n const linkLabelBackground = linkLabelGroup.select<SVGRectElement>(`.${linkSelectors.linkLabelBackground}`)\n\n // If the label was not displayed before, we set the initial transform\n if (!linkLabelGroup.attr('transform')) {\n linkLabelGroup.attr('transform', `${linkLabelTranslate} scale(0)`)\n }\n\n const linkLabelColor = linkLabelDatum.textColor ?? getLinkLabelTextColor(linkLabelDatum)\n if (linkLabelDatum._shouldRenderUseElement) {\n linkLabelContent\n .attr('href', linkLabelText)\n .attr('x', -linkLabelDatum._fontSizePx / 2)\n .attr('y', -linkLabelDatum._fontSizePx / 2)\n .attr('width', linkLabelDatum._fontSizePx)\n .attr('height', linkLabelDatum._fontSizePx)\n .style('fill', linkLabelColor)\n } else {\n linkLabelContent\n .text(linkLabelText)\n .attr('dy', '0.1em')\n .style('font-size', linkLabelDatum._fontSizePx)\n .style('fill', linkLabelColor)\n }\n\n linkLabelGroup.attr('hidden', null)\n .style('cursor', linkLabelDatum.cursor)\n\n smartTransition(linkLabelGroup, duration)\n .attr('transform', `${linkLabelTranslate} scale(1)`)\n .style('opacity', 1)\n\n linkLabelBackground\n .attr('x', -linkLabelDatum._backgroundWidth / 2)\n .attr('y', -linkLabelDatum._backgroundHeight / 2)\n .attr('width', linkLabelDatum._backgroundWidth)\n .attr('height', linkLabelDatum._backgroundHeight)\n .attr('rx', linkLabelDatum._borderRadius)\n .style('fill', linkLabelDatum.color)\n\n linkLabelShiftCumulative += linkLabelDatum._backgroundWidth + linkLabelMargin\n })\n\n smartTransition(linkLabelGroups.exit(), duration)\n .style('opacity', 0)\n .remove()\n })\n\n // Pointer Events\n if (duration > 0) {\n selection.attr('pointer-events', 'none')\n const t = smartTransition(selection, duration) as Transition<SVGGElement, GraphLink<N, L>, SVGGElement, GraphLink<N, L>>\n t\n .attr('opacity', 1)\n .on('end interrupt', (d, i, elements) => {\n select(elements[i])\n .attr('pointer-events', 'stroke')\n .attr('opacity', 1)\n })\n } else {\n selection.attr('opacity', 1)\n }\n\n updateLinksPartial(selection, config, scale)\n}\n\nexport function removeLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n duration: number\n): void {\n smartTransition(selection, duration / 2)\n .attr('opacity', 0)\n .remove()\n}\n\nexport function animateLinkFlow<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n scale: number,\n linkPathLengthMap: Map<string, number>\n): void {\n const { linkFlow } = config\n if (scale < ZoomLevel.Level2) return\n\n selection.each((d, i, elements) => {\n const element = elements[i]\n const linkGroup = select(element)\n const flowGroup = linkGroup.select(`.${linkSelectors.flowGroup}`)\n\n const linkPathElement = linkGroup.select<SVGPathElement>(`.${linkSelectors.link}`).node()\n const cachedLinkPathLength = linkPathLengthMap.get(linkPathElement.getAttribute('d'))\n const pathLength = cachedLinkPathLength ?? linkPathElement.getTotalLength()\n\n if (!getBoolean(d, linkFlow, d._indexGlobal) || !pathLength) return\n const t = d._state.flowAnimTime\n const circles = flowGroup.selectAll(`.${linkSelectors.flowCircle}`)\n\n circles\n .attr('transform', index => {\n const tt = (t + (+index) / (circles.size() - 1)) % 1\n const p = linkPathElement.getPointAtLength(tt * pathLength)\n return `translate(${p.x}, ${p.y})`\n })\n })\n}\n\nexport function zoomLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n scale: number\n): void {\n selection.classed(generalSelectors.zoomOutLevel2, scale < ZoomLevel.Level2)\n\n selection.select(`.${linkSelectors.flowGroup}`)\n .style('opacity', scale < ZoomLevel.Level2 ? 0 : 1)\n\n selection.each((l, i, els) => {\n const r = getNumber(l, config.linkFlowParticleSize, l._indexGlobal) / Math.sqrt(scale)\n select(els[i]).selectAll(`.${linkSelectors.flowCircle}`).attr('r', r)\n })\n\n const linkElements = selection.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.link}`)\n linkElements\n .style('stroke-width', d => getLinkStrokeWidth(d, scale, config))\n\n const linkBandElements = selection.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.linkBand}`)\n linkBandElements\n .style('stroke-width', d => getLinkBandWidth(d, scale, config))\n}\n\nexport const zoomLinksThrottled = throttle(zoomLinks, 500)\n\n"],"names":["linkSelectors.linkSupport","linkSelectors.link","linkSelectors.linkBand","linkSelectors.linkArrow","linkSelectors.flowGroup","linkSelectors.flowCircle","linkSelectors.greyedOutLink","linkSupport","link","linkBand","linkArrow","linkSelectors.linkDashed","flowGroup","linkSelectors.linkLabelGroup","linkSelectors.linkLabelBackground","linkSelectors.linkLabelContent","linkLabelContent","linkLabelBackground","generalSelectors.zoomOutLevel2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/components/graph/modules/link/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { range, sum } from 'd3-array'\nimport { Transition } from 'd3-transition'\nimport toPx from 'to-px'\n\n// Utils\nimport { throttle, getValue, getNumber, getBoolean, ensureArray } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\nimport { getCSSVariableValueInPixels } from 'utils/misc'\nimport { estimateStringPixelLength } from 'utils/text'\n\n// Types\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\n\n// Local Types\nimport { GraphCircleLabel, GraphLink, GraphLinkArrowStyle, GraphLinkStyle } from '../../types'\n\n// Config\nimport { GraphConfigInterface } from '../../config'\n\n// Helpers\nimport { getX, getY, isInternalHref } from '../node/helper'\nimport {\n getLinkShiftTransform,\n getLinkStrokeWidth,\n getLinkBandWidth,\n getLinkColor,\n getLinkLabelTextColor,\n getLinkArrowStyle,\n LINK_MARKER_WIDTH,\n} from './helper'\nimport { ZoomLevel } from '../zoom-levels'\n\n// Styles\nimport * as generalSelectors from '../../style'\nimport * as linkSelectors from './style'\n\nexport function createLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>\n): void {\n selection.attr('opacity', 0)\n\n selection.append('path')\n .attr('class', linkSelectors.linkSupport)\n\n selection.append('path')\n .attr('class', linkSelectors.link)\n\n selection.append('path')\n .attr('class', linkSelectors.linkBand)\n\n selection.append('use')\n .attr('class', linkSelectors.linkArrow)\n\n selection.append('g')\n .attr('class', linkSelectors.flowGroup)\n .style('opacity', 0)\n .selectAll(`.${linkSelectors.flowCircle}`)\n .data(range(0, 6)).enter()\n .append('circle')\n .attr('class', linkSelectors.flowCircle)\n}\n\n/** Updates the links partially according to their `_state` */\nexport function updateLinksPartial<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n scale: number\n): void {\n const isGreyedOut = (d: GraphLink<N, L>, i: number): boolean => getBoolean(d, config.linkDisabled, i) || d._state.greyout\n selection\n .classed(linkSelectors.greyedOutLink, (d, i) => isGreyedOut(d, i))\n\n selection.each((d, i, elements) => {\n const element = elements[i]\n const group = select(element)\n group.select(`.${linkSelectors.link}`)\n group.select(`.${linkSelectors.linkBand}`)\n const linkSupport = group.select(`.${linkSelectors.linkSupport}`)\n\n linkSupport\n .style('stroke-opacity', (d._state.hovered || d._state.selected) ? 0.2 : 0)\n .style('stroke-width',\n d._state.selected\n ? getLinkBandWidth(d, scale, config) + 5\n : d._state.hovered ? getLinkBandWidth(d, scale, config) + 10 : null\n )\n })\n}\n\nexport function updateLinkLines<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n duration: number,\n scale = 1,\n getLinkArrowDefId: (arrow: GraphLinkArrowStyle | undefined) => string,\n linkPathLengthMap: Map<string, number>\n): Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown> {\n return selection.each((d, i, elements) => {\n const element = elements[i]\n const linkGroup = select(element)\n const link = linkGroup.select<SVGPathElement>(`.${linkSelectors.link}`)\n const linkBand = linkGroup.select<SVGPathElement>(`.${linkSelectors.linkBand}`)\n const linkSupport = linkGroup.select<SVGPathElement>(`.${linkSelectors.linkSupport}`)\n const linkArrow = linkGroup.select<SVGUseElement>(`.${linkSelectors.linkArrow}`)\n const linkColor = getLinkColor(d, config)\n const linkShiftTransform = getLinkShiftTransform(d, config.linkNeighborSpacing)\n const linkLabelData = ensureArray(\n getValue<GraphLink<N, L>, GraphCircleLabel | GraphCircleLabel[]>(d, config.linkLabel, d._indexGlobal)\n )\n const offsetSource = getValue(d, config.linkSourcePointOffset, i)\n const offsetTarget = getValue(d, config.linkTargetPointOffset, i)\n const x1 = getX(d.source) + (offsetSource?.[0] || 0)\n const y1 = getY(d.source) + (offsetSource?.[1] || 0)\n const x2 = getX(d.target) + (offsetTarget?.[0] || 0)\n const y2 = getY(d.target) + (offsetTarget?.[1] || 0)\n\n const curvature = getNumber(d, config.linkCurvature, i) ?? 0\n const cp1x = x1 + (x2 - x1) * 0.5 * curvature\n const cp1y = y1 + (y2 - y1) * 0.0 * curvature\n const cp2x = x1 + (x2 - x1) * 0.5 * curvature\n const cp2y = y1 + (y2 - y1) * 1.0 * curvature\n\n const pathData = `M${x1},${y1} C${cp1x},${cp1y} ${cp2x},${cp2y} ${x2},${y2}`\n const linkPathElement = linkSupport.attr('d', pathData).node()\n const cachedLinkPathLength = linkPathLengthMap.get(pathData)\n const pathLength = cachedLinkPathLength ?? linkPathElement.getTotalLength()\n if (!cachedLinkPathLength) linkPathLengthMap.set(pathData, pathLength)\n\n linkSupport\n .style('stroke', linkColor)\n .attr('transform', linkShiftTransform)\n\n link\n .attr('class', linkSelectors.link)\n .style('stroke-width', getLinkStrokeWidth(d, scale, config))\n .style('stroke', linkColor)\n .attr('transform', linkShiftTransform)\n\n smartTransition(link, duration)\n .attr('d', pathData)\n\n linkBand\n .attr('class', linkSelectors.linkBand)\n .attr('transform', linkShiftTransform)\n .style('stroke-width', getLinkBandWidth(d, scale, config))\n .style('stroke', linkColor)\n\n smartTransition(linkBand, duration)\n .attr('d', pathData)\n\n\n // Arrow\n const linkArrowStyle = getLinkArrowStyle(d, config)\n if (linkArrowStyle) {\n const arrowPos = pathLength * (linkLabelData.length ? 0.65 : 0.5)\n const p1 = linkPathElement.getPointAtLength(arrowPos)\n const p2 = linkPathElement.getPointAtLength(arrowPos + 1) // A point very close to p1\n\n // Calculate the angle for the arrowhead\n const angle = Math.atan2(p2.y - p1.y, p2.x - p1.x) * (180 / Math.PI)\n const arrowWasShownBefore = linkArrow.attr('href')\n linkArrow\n .attr('href', `#${getLinkArrowDefId(linkArrowStyle)}`)\n\n smartTransition(linkArrow, arrowWasShownBefore ? duration : 0)\n .attr('fill', linkColor)\n .attr('transform', `translate(${p1.x}, ${p1.y}) rotate(${angle})`)\n } else {\n linkArrow.attr('href', null)\n }\n })\n}\n\nexport function updateLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n duration: number,\n scale = 1,\n getLinkArrowDefId: (arrow: GraphLinkArrowStyle | undefined) => string,\n linkPathLengthMap: Map<string, number>\n): void {\n const { linkStyle, linkFlow, linkLabel, linkLabelShiftFromCenter } = config\n if (!selection.size()) return\n\n selection\n .classed(\n linkSelectors.linkDashed,\n d => getValue<GraphLink<N, L>, GraphLinkStyle>(d, linkStyle, d._indexGlobal) === GraphLinkStyle.Dashed\n )\n\n // Update line and arrow positions\n updateLinkLines(selection, config, duration, scale, getLinkArrowDefId, linkPathLengthMap)\n\n // Update labels and link flow (particles) groups\n selection.each((d, i, elements) => {\n const element = elements[i]\n const linkGroup = select(element)\n const flowGroup = linkGroup.select(`.${linkSelectors.flowGroup}`)\n const linkSupport = linkGroup.select<SVGPathElement>(`.${linkSelectors.linkSupport}`)\n const linkPathElement = linkSupport.node()\n const linkColor = getLinkColor(d, config)\n const linkShiftTransform = getLinkShiftTransform(d, config.linkNeighborSpacing)\n const linkLabelData = ensureArray(\n getValue<GraphLink<N, L>, GraphCircleLabel | GraphCircleLabel[]>(d, linkLabel, d._indexGlobal)\n )\n const linkFlowParticleSize = getNumber(d, config.linkFlowParticleSize, d._indexGlobal)\n\n // Particle Flow\n flowGroup\n .attr('transform', linkShiftTransform)\n .style('display', getBoolean(d, linkFlow, d._indexGlobal) ? null : 'none')\n\n flowGroup\n .selectAll(`.${linkSelectors.flowCircle}`)\n .attr('r', linkFlowParticleSize / Math.sqrt(scale))\n .style('fill', linkColor)\n\n smartTransition(flowGroup, duration)\n .style('opacity', scale < ZoomLevel.Level2 ? 0 : 1)\n\n // Labels\n // Preparing the labels before rendering to be able to center them\n const linkLabelsDataPrepared = linkLabelData.map((linkLabelDatum) => {\n const text = linkLabelDatum.text?.toString() || ''\n const shouldRenderUseElement = isInternalHref(text)\n const fontSizePx = toPx(linkLabelDatum.fontSize) ?? getCSSVariableValueInPixels('var(--vis-graph-link-label-font-size)', linkGroup.node())\n const shouldBeRenderedAsCircle = text.length <= 2 || shouldRenderUseElement\n const paddingVertical = 4\n const paddingHorizontal = shouldBeRenderedAsCircle ? paddingVertical : 8\n const estimatedWidthPx = estimateStringPixelLength(text, fontSizePx)\n\n return {\n ...linkLabelDatum,\n _shouldRenderUseElement: shouldRenderUseElement,\n _fontSizePx: fontSizePx,\n _shouldBeRenderedAsCircle: shouldBeRenderedAsCircle,\n _paddingVertical: paddingVertical,\n _paddingHorizontal: paddingHorizontal,\n _estimatedWidthPx: estimatedWidthPx,\n _borderRadius: linkLabelDatum.radius ?? (shouldBeRenderedAsCircle ? fontSizePx : 4),\n _backgroundWidth: (shouldBeRenderedAsCircle ? fontSizePx : estimatedWidthPx) + paddingHorizontal * 2,\n _backgroundHeight: fontSizePx + paddingVertical * 2,\n }\n })\n type GraphCircleLabelPrepared = typeof linkLabelsDataPrepared[0]\n const linkLabelGroups = linkGroup\n .selectAll<SVGGElement, GraphCircleLabelPrepared>(`.${linkSelectors.linkLabelGroup}`)\n .data(linkLabelsDataPrepared, (d: GraphCircleLabelPrepared) => d.text)\n\n const linkLabelGroupsEnter = linkLabelGroups.enter().append('g').attr('class', linkSelectors.linkLabelGroup)\n linkLabelGroupsEnter.each((linkLabelDatum, i, elements) => {\n const linkLabelGroup = select<SVGGElement, GraphCircleLabelPrepared>(elements[i])\n linkLabelGroup.append('rect').attr('class', linkSelectors.linkLabelBackground)\n\n const linkLabelText = linkLabelDatum ? linkLabelDatum.text?.toString() : undefined\n const shouldRenderUseElement = isInternalHref(linkLabelText)\n linkLabelGroup.select<SVGTextElement>(`.${linkSelectors.linkLabelContent}`).remove()\n linkLabelGroup\n .append(shouldRenderUseElement ? 'use' : 'text')\n .attr('class', linkSelectors.linkLabelContent)\n })\n linkLabelGroupsEnter.style('opacity', 0)\n\n const linkLabelGroupsMerged = linkLabelGroups.merge(linkLabelGroupsEnter)\n const linkLabelMargin = 1\n let linkLabelShiftCumulative = -sum(linkLabelsDataPrepared, d => d._backgroundWidth + linkLabelMargin) / 2 // Centering the labels\n const cachedLinkPathLength = linkPathLengthMap.get(linkPathElement.getAttribute('d'))\n const pathLength = cachedLinkPathLength ?? linkPathElement.getTotalLength()\n const linkArrowStyle = getLinkArrowStyle(d, config)\n linkLabelGroupsMerged.each((linkLabelDatum, i, elements) => {\n const element = elements[i]\n const linkLabelGroup = select<SVGGElement, GraphCircleLabelPrepared>(element)\n const linkLabelText = linkLabelDatum.text?.toString()\n const linkLabelContent = linkLabelGroup.select<SVGTextElement | SVGUseElement>(`.${linkSelectors.linkLabelContent}`)\n const linkMarkerWidth = linkArrowStyle ? LINK_MARKER_WIDTH * 2 : 0\n const linkLabelShift = getBoolean(d, linkLabelShiftFromCenter, d._indexGlobal) ? -linkMarkerWidth + 4 : 0\n const linkLabelPos = linkPathElement.getPointAtLength(pathLength / 2 + linkLabelShift + linkLabelShiftCumulative + linkLabelDatum._backgroundWidth / 2)\n const linkLabelTranslate = `translate(${linkLabelPos.x}, ${linkLabelPos.y})`\n const linkLabelBackground = linkLabelGroup.select<SVGRectElement>(`.${linkSelectors.linkLabelBackground}`)\n\n // If the label was not displayed before, we set the initial transform\n if (!linkLabelGroup.attr('transform')) {\n linkLabelGroup.attr('transform', `${linkLabelTranslate} scale(0)`)\n }\n\n const linkLabelColor = linkLabelDatum.textColor ?? getLinkLabelTextColor(linkLabelDatum)\n if (linkLabelDatum._shouldRenderUseElement) {\n linkLabelContent\n .attr('href', linkLabelText)\n .attr('x', -linkLabelDatum._fontSizePx / 2)\n .attr('y', -linkLabelDatum._fontSizePx / 2)\n .attr('width', linkLabelDatum._fontSizePx)\n .attr('height', linkLabelDatum._fontSizePx)\n .style('fill', linkLabelColor)\n } else {\n linkLabelContent\n .text(linkLabelText)\n .attr('dy', '0.1em')\n .style('font-size', linkLabelDatum._fontSizePx)\n .style('fill', linkLabelColor)\n }\n\n linkLabelGroup.attr('hidden', null)\n .style('cursor', linkLabelDatum.cursor)\n\n smartTransition(linkLabelGroup, duration)\n .attr('transform', `${linkLabelTranslate} scale(1)`)\n .style('opacity', 1)\n\n linkLabelBackground\n .attr('x', -linkLabelDatum._backgroundWidth / 2)\n .attr('y', -linkLabelDatum._backgroundHeight / 2)\n .attr('width', linkLabelDatum._backgroundWidth)\n .attr('height', linkLabelDatum._backgroundHeight)\n .attr('rx', linkLabelDatum._borderRadius)\n .style('fill', linkLabelDatum.color)\n\n linkLabelShiftCumulative += linkLabelDatum._backgroundWidth + linkLabelMargin\n })\n\n smartTransition(linkLabelGroups.exit(), duration)\n .style('opacity', 0)\n .remove()\n })\n\n // Pointer Events\n if (duration > 0) {\n selection.attr('pointer-events', 'none')\n const t = smartTransition(selection, duration) as Transition<SVGGElement, GraphLink<N, L>, SVGGElement, GraphLink<N, L>>\n t\n .attr('opacity', 1)\n .on('end interrupt', (d, i, elements) => {\n select(elements[i])\n .attr('pointer-events', 'stroke')\n .attr('opacity', 1)\n })\n } else {\n selection.attr('opacity', 1)\n }\n\n updateLinksPartial(selection, config, scale)\n}\n\nexport function removeLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n duration: number\n): void {\n smartTransition(selection, duration / 2)\n .attr('opacity', 0)\n .remove()\n}\n\nexport function animateLinkFlow<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n scale: number,\n linkPathLengthMap: Map<string, number>\n): void {\n const { linkFlow } = config\n if (scale < ZoomLevel.Level2) return\n\n selection.each((d, i, elements) => {\n const element = elements[i]\n const linkGroup = select(element)\n const flowGroup = linkGroup.select(`.${linkSelectors.flowGroup}`)\n\n const linkPathElement = linkGroup.select<SVGPathElement>(`.${linkSelectors.link}`).node()\n const cachedLinkPathLength = linkPathLengthMap.get(linkPathElement.getAttribute('d'))\n const pathLength = cachedLinkPathLength ?? linkPathElement.getTotalLength()\n\n if (!getBoolean(d, linkFlow, d._indexGlobal) || !pathLength) return\n const t = d._state.flowAnimDistanceRelative\n const circles = flowGroup.selectAll(`.${linkSelectors.flowCircle}`)\n\n circles\n .attr('transform', index => {\n const tt = (t + (+index) / (circles.size() - 1)) % 1\n const p = linkPathElement.getPointAtLength(tt * pathLength)\n return `translate(${p.x}, ${p.y})`\n })\n })\n}\n\nexport function zoomLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n scale: number\n): void {\n selection.classed(generalSelectors.zoomOutLevel2, scale < ZoomLevel.Level2)\n\n selection.select(`.${linkSelectors.flowGroup}`)\n .style('opacity', scale < ZoomLevel.Level2 ? 0 : 1)\n\n selection.each((l, i, els) => {\n const r = getNumber(l, config.linkFlowParticleSize, l._indexGlobal) / Math.sqrt(scale)\n select(els[i]).selectAll(`.${linkSelectors.flowCircle}`).attr('r', r)\n })\n\n const linkElements = selection.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.link}`)\n linkElements\n .style('stroke-width', d => getLinkStrokeWidth(d, scale, config))\n\n const linkBandElements = selection.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.linkBand}`)\n linkBandElements\n .style('stroke-width', d => getLinkBandWidth(d, scale, config))\n}\n\nexport const zoomLinksThrottled = throttle(zoomLinks, 500)\n\n"],"names":["linkSelectors.linkSupport","linkSelectors.link","linkSelectors.linkBand","linkSelectors.linkArrow","linkSelectors.flowGroup","linkSelectors.flowCircle","linkSelectors.greyedOutLink","linkSupport","link","linkBand","linkArrow","linkSelectors.linkDashed","flowGroup","linkSelectors.linkLabelGroup","linkSelectors.linkLabelBackground","linkSelectors.linkLabelContent","linkLabelContent","linkLabelBackground","generalSelectors.zoomOutLevel2"],"mappings":"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"}
|
|
@@ -31,7 +31,8 @@ export declare type GraphLink<N extends GraphInputNode = GraphInputNode, L exten
|
|
|
31
31
|
_index?: number;
|
|
32
32
|
_neighbours?: number;
|
|
33
33
|
_state?: {
|
|
34
|
-
|
|
34
|
+
flowAnimDistanceRelative?: number;
|
|
35
|
+
flowAnimDistancePx?: number;
|
|
35
36
|
hovered?: boolean;
|
|
36
37
|
selected?: boolean;
|
|
37
38
|
greyout?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sources":["../../../src/components/graph/types.ts"],"sourcesContent":["// Types\nimport { Position } from 'types/position'\nimport { GraphInputLink, GraphInputNode, GraphNodeCore, GraphLinkCore } from 'types/graph'\nimport { Spacing } from 'types/spacing'\nimport { TrimMode } from 'types/text'\n\nexport type GraphNode<\n N extends GraphInputNode = GraphInputNode,\n L extends GraphInputLink = GraphInputLink,\n> = GraphNodeCore<N, L> & {\n x?: number;\n y?: number;\n\n _id?: number | string;\n _index?: number;\n _state?: {\n isDragged?: boolean;\n fx?: number;\n fy?: number;\n selected?: boolean;\n greyout?: boolean;\n brushed?: boolean;\n };\n\n _panels?: GraphPanel<N, L>[];\n _isConnected?: boolean;\n}\n\nexport type GraphForceSimulationNode<\n N extends GraphInputNode = GraphInputNode,\n L extends GraphInputLink = GraphInputLink,\n> = GraphNode<N, L> & {\n fx?: number;\n fy?: number;\n}\n\nexport type GraphLink<\n N extends GraphInputNode = GraphInputNode,\n L extends GraphInputLink = GraphInputLink,\n> = GraphLinkCore<N, L> & {\n id?: number | string;\n source: number | string | GraphNode<N>;\n target: number | string | GraphNode<N>;\n\n _id?: number | string;\n _direction?: number;\n _index?: number;\n _neighbours?: number;\n\n _state?: {\n
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../../src/components/graph/types.ts"],"sourcesContent":["// Types\nimport { Position } from 'types/position'\nimport { GraphInputLink, GraphInputNode, GraphNodeCore, GraphLinkCore } from 'types/graph'\nimport { Spacing } from 'types/spacing'\nimport { TrimMode } from 'types/text'\n\nexport type GraphNode<\n N extends GraphInputNode = GraphInputNode,\n L extends GraphInputLink = GraphInputLink,\n> = GraphNodeCore<N, L> & {\n x?: number;\n y?: number;\n\n _id?: number | string;\n _index?: number;\n _state?: {\n isDragged?: boolean;\n fx?: number;\n fy?: number;\n selected?: boolean;\n greyout?: boolean;\n brushed?: boolean;\n };\n\n _panels?: GraphPanel<N, L>[];\n _isConnected?: boolean;\n}\n\nexport type GraphForceSimulationNode<\n N extends GraphInputNode = GraphInputNode,\n L extends GraphInputLink = GraphInputLink,\n> = GraphNode<N, L> & {\n fx?: number;\n fy?: number;\n}\n\nexport type GraphLink<\n N extends GraphInputNode = GraphInputNode,\n L extends GraphInputLink = GraphInputLink,\n> = GraphLinkCore<N, L> & {\n id?: number | string;\n source: number | string | GraphNode<N>;\n target: number | string | GraphNode<N>;\n\n _id?: number | string;\n _direction?: number;\n _index?: number;\n _neighbours?: number;\n\n _state?: {\n flowAnimDistanceRelative?: number;\n flowAnimDistancePx?: number;\n hovered?: boolean;\n selected?: boolean;\n greyout?: boolean;\n };\n}\n\nexport enum GraphLayoutType {\n Circular = 'circular',\n Concentric = 'concentric',\n Parallel = 'parallel',\n ParallelHorizontal = 'parallel horizontal',\n Dagre = 'dagre',\n Force = 'force',\n Elk = 'elk',\n Precalculated = 'precalculated',\n}\n\nexport type GraphCircleLabel = {\n text: string;\n textColor?: string | null;\n color?: string | null;\n cursor?: string | null;\n fontSize?: string | null;\n radius?: number;\n}\n\nexport type GraphLinkLabel = GraphCircleLabel\n\nexport enum GraphLinkStyle {\n Dashed = 'dashed',\n Solid = 'solid',\n}\n\nexport enum GraphLinkArrowStyle {\n Single = 'single',\n Double = 'double',\n}\n\nexport enum GraphNodeShape {\n Circle = 'circle',\n Square = 'square',\n Hexagon = 'hexagon',\n Triangle = 'triangle',\n}\n\nexport type GraphPanelConfig = {\n /** Panel nodes references by unique ids */\n nodes: (string|number)[];\n /** Panel label */\n label?: string;\n /** Trim label if it's longer than this number of characters */\n labelTrimLength?: number;\n /** Trim mode of the label */\n labelTrimMode?: TrimMode;\n /** Position of the label */\n labelPosition?: Position.Top | Position.Bottom | string;\n /** Fill color of the panel */\n fillColor?: string;\n /** Color of the panel's border */\n borderColor?: string;\n /** Border width of the panel in pixels */\n borderWidth?: number;\n /** Inner padding */\n padding?: number | Spacing;\n /** Dashed outline showing that the panel is selected */\n dashedOutline?: boolean;\n /** Side icon symbol */\n sideIconSymbol?: string;\n /** Size of the icon as a CSS string. e.g.: `12pt` or `12px` */\n sideIconFontSize?: string;\n /** Color of the icon */\n sideIconSymbolColor?: string;\n /** Shape of the icon's background */\n sideIconShape?: GraphNodeShape | string;\n /** Size of the icon's background shape */\n sideIconShapeSize?: number;\n /** Stroke color of the icon's background shape */\n sideIconShapeStroke?: string;\n /** Cursor, when hovering over the icon */\n sideIconCursor?: string;\n}\n\nexport type GraphPanel<\n N extends GraphInputNode = GraphInputNode,\n L extends GraphInputLink = GraphInputLink,\n> = GraphPanelConfig & {\n _numNodes?: number;\n _x?: number;\n _y?: number;\n _width?: number;\n _height?: number;\n _disabled?: boolean;\n _padding?: Spacing;\n}\n\nexport type GraphNodeAnimationState = {\n endAngle: number;\n nodeIndex: number;\n nodeSize?: number;\n borderWidth?: number;\n}\n\nexport type GraphNodeAnimatedElement<T = SVGElement> = T & {\n _animState: GraphNodeAnimationState;\n}\n\nexport type GraphForceLayoutSettings<\n N extends GraphInputNode = GraphInputNode,\n L extends GraphInputLink = GraphInputLink,\n> = {\n /** Preferred Link Distance. Default: `60` */\n linkDistance?: number | ((l: GraphLink<N, L>, i: number) => number);\n /** Link Strength [0:1]. Default: `0.45` */\n linkStrength?: number | ((l: GraphLink<N, L>, i: number) => number);\n /** Charge Force (<0 repulsion, >0 attraction). Default: `-500` */\n charge?: number | ((l: GraphNode<N, L>, i: number) => number);\n /** X-centring force. Default: `0.15` */\n forceXStrength?: number;\n /** Y-centring force. Default: `0.25` */\n forceYStrength?: number;\n /** Number if simulation iterations. Default: automatic */\n numIterations?: number;\n /** Set to true if you want to fix the node positions after the simulation\n * Helpful when you want to update graph settings without re-calculating the layout.\n * Default: `false` */\n fixNodePositionAfterSimulation?: boolean;\n}\n\nexport type GraphElkLayoutSettings = Record<string, string>\n\n/**\n * Settings for configuring the layout of a Dagre graph.\n */\nexport type GraphDagreLayoutSetting = {\n /**\n * Direction for rank nodes. Can be TB, BT, LR, or RL, where T = top, B = bottom, L = left, and R = right.\n * Additional custom values can also be provided as a string.\n */\n rankdir?: 'TB' | 'BT' | 'LR' | 'RL' | string;\n\n /**\n * Alignment for rank nodes. Can be UL, UR, DL, or DR, where U = up, D = down, L = left, and R = right.\n * Additional custom values can also be provided as a string.\n */\n align?: 'UL' | 'UR' | 'DL' | 'DR' | string;\n\n /**\n * Number of pixels that separate nodes horizontally in the layout.\n */\n nodesep?: number;\n\n /**\n * Number of pixels that separate edges horizontally in the layout.\n */\n edgesep?: number;\n\n /**\n * Number of pixels between each rank in the layout.\n */\n ranksep?: number;\n\n /**\n * Number of pixels to use as a margin around the left and right of the graph.\n */\n marginx?: number;\n\n /**\n * Number of pixels to use as a margin around the top and bottom of the graph.\n */\n marginy?: number;\n\n /**\n * If set to 'greedy', uses a greedy heuristic for finding a feedback arc set for a graph.\n * A feedback arc set is a set of edges that can be removed to make a graph acyclic.\n */\n acyclicer?: 'greedy' | undefined;\n\n /**\n * Type of algorithm to assign a rank to each node in the input graph.\n * Possible values are 'network-simplex', 'tight-tree', or 'longest-path'.\n * Additional custom values can also be provided as a string.\n */\n ranker?: 'network-simplex' | 'tight-tree' | 'longest-path' | string;\n}\n\nexport enum GraphNodeSelectionHighlightMode {\n None = 'none',\n Greyout ='greyout',\n GreyoutNonConnected ='greyout-non-connected',\n}\n\nexport enum GraphFitViewAlignment {\n Center = 'center',\n Top = 'top',\n Bottom = 'bottom',\n Left = 'left',\n Right = 'right',\n}\n"],"names":[],"mappings":"IA0DY,gBASX;AATD,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,eAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,eAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,eAAA,CAAA,oBAAA,CAAA,GAAA,qBAA0C,CAAA;AAC1C,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,eAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,eAAA,CAAA,eAAA,CAAA,GAAA,eAA+B,CAAA;AACjC,CAAC,EATW,eAAe,KAAf,eAAe,GAS1B,EAAA,CAAA,CAAA,CAAA;IAaW,eAGX;AAHD,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACjB,CAAC,EAHW,cAAc,KAAd,cAAc,GAGzB,EAAA,CAAA,CAAA,CAAA;IAEW,oBAGX;AAHD,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACnB,CAAC,EAHW,mBAAmB,KAAnB,mBAAmB,GAG9B,EAAA,CAAA,CAAA,CAAA;IAEW,eAKX;AALD,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,cAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACvB,CAAC,EALW,cAAc,KAAd,cAAc,GAKzB,EAAA,CAAA,CAAA,CAAA;IA8IW,gCAIX;AAJD,CAAA,UAAY,+BAA+B,EAAA;AACzC,IAAA,+BAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,+BAAA,CAAA,SAAA,CAAA,GAAA,SAAkB,CAAA;AAClB,IAAA,+BAAA,CAAA,qBAAA,CAAA,GAAA,uBAA4C,CAAA;AAC9C,CAAC,EAJW,+BAA+B,KAA/B,+BAA+B,GAI1C,EAAA,CAAA,CAAA,CAAA;IAEW,sBAMX;AAND,CAAA,UAAY,qBAAqB,EAAA;AAC/B,IAAA,qBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,qBAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,qBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,qBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,qBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACjB,CAAC,EANW,qBAAqB,KAArB,qBAAqB,GAMhC,EAAA,CAAA,CAAA;;;;"}
|