@darajs/ui-causal-graph-editor 1.4.4 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/graph-viewer/causal-graph-editor.d.ts +2 -0
- package/dist/graph-viewer/causal-graph-editor.d.ts.map +1 -1
- package/dist/graph-viewer/causal-graph-editor.js +42 -8
- package/dist/graph-viewer/causal-graph-editor.js.map +1 -1
- package/dist/graph-viewer/utils/stories-utils.d.ts +322 -0
- package/dist/graph-viewer/utils/stories-utils.d.ts.map +1 -0
- package/dist/graph-viewer/utils/stories-utils.js +338 -0
- package/dist/graph-viewer/utils/stories-utils.js.map +1 -0
- package/dist/shared/graph-layout/common.d.ts +5 -1
- package/dist/shared/graph-layout/common.d.ts.map +1 -1
- package/dist/shared/graph-layout/fcose-layout.d.ts +26 -2
- package/dist/shared/graph-layout/fcose-layout.d.ts.map +1 -1
- package/dist/shared/graph-layout/fcose-layout.js +111 -0
- package/dist/shared/graph-layout/fcose-layout.js.map +1 -1
- package/dist/shared/graph-layout/marketing-layout.d.ts +14 -2
- package/dist/shared/graph-layout/marketing-layout.d.ts.map +1 -1
- package/dist/shared/graph-layout/marketing-layout.js +18 -0
- package/dist/shared/graph-layout/marketing-layout.js.map +1 -1
- package/dist/shared/graph-layout/planar-layout.d.ts +10 -3
- package/dist/shared/graph-layout/planar-layout.d.ts.map +1 -1
- package/dist/shared/graph-layout/planar-layout.js +67 -12
- package/dist/shared/graph-layout/planar-layout.js.map +1 -1
- package/dist/shared/graph-layout/spring-layout.d.ts +43 -2
- package/dist/shared/graph-layout/spring-layout.d.ts.map +1 -1
- package/dist/shared/graph-layout/spring-layout.js +101 -0
- package/dist/shared/graph-layout/spring-layout.js.map +1 -1
- package/dist/shared/parsers.d.ts +12 -5
- package/dist/shared/parsers.d.ts.map +1 -1
- package/dist/shared/parsers.js +33 -6
- package/dist/shared/parsers.js.map +1 -1
- package/dist/shared/rendering/engine.d.ts +4 -1
- package/dist/shared/rendering/engine.d.ts.map +1 -1
- package/dist/shared/rendering/engine.js +43 -10
- package/dist/shared/rendering/engine.js.map +1 -1
- package/dist/shared/rendering/use-render-engine.d.ts +2 -1
- package/dist/shared/rendering/use-render-engine.d.ts.map +1 -1
- package/dist/shared/rendering/use-render-engine.js +2 -2
- package/dist/shared/rendering/use-render-engine.js.map +1 -1
- package/dist/shared/rendering/utils.d.ts +2 -0
- package/dist/shared/rendering/utils.d.ts.map +1 -1
- package/dist/shared/rendering/utils.js +3 -0
- package/dist/shared/rendering/utils.js.map +1 -1
- package/dist/shared/use-causal-graph-editor.d.ts +3 -1
- package/dist/shared/use-causal-graph-editor.d.ts.map +1 -1
- package/dist/shared/use-causal-graph-editor.js +20 -1
- package/dist/shared/use-causal-graph-editor.js.map +1 -1
- package/dist/shared/utils.d.ts +27 -1
- package/dist/shared/utils.d.ts.map +1 -1
- package/dist/shared/utils.js +106 -0
- package/dist/shared/utils.js.map +1 -1
- package/dist/types.d.ts +18 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +12 -12
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright 2023 Impulse Innovations Limited
|
|
4
|
+
*
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this file except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*/
|
|
18
|
+
import { NotificationWrapper, useNotifications } from '@darajs/ui-notifications';
|
|
19
|
+
import { EdgeType, VariableType } from '../../types';
|
|
20
|
+
import { default as CausalGraphViewerComponent } from '../causal-graph-editor';
|
|
21
|
+
export const Template = (args) => {
|
|
22
|
+
const { pushNotification } = useNotifications();
|
|
23
|
+
return (_jsxs(_Fragment, { children: [_jsx(CausalGraphViewerComponent, Object.assign({}, args, { onNotify: pushNotification, style: { margin: 0 } })), _jsx(NotificationWrapper, { style: { bottom: 0 } })] }));
|
|
24
|
+
};
|
|
25
|
+
export const causalGraph = {
|
|
26
|
+
edges: {
|
|
27
|
+
input1: {
|
|
28
|
+
input4: {
|
|
29
|
+
destination: {
|
|
30
|
+
identifier: 'input4',
|
|
31
|
+
meta: {},
|
|
32
|
+
variable_type: VariableType.UNSPECIFIED,
|
|
33
|
+
},
|
|
34
|
+
edge_type: EdgeType.DIRECTED_EDGE,
|
|
35
|
+
meta: {
|
|
36
|
+
rendering_properties: {
|
|
37
|
+
color: 'red',
|
|
38
|
+
description: 'my super long description text that spans a few lines, is super descriptive and goes in depth into the explanation of why this edge exists in the first place and this is some extra text that will be behind a scrollbar',
|
|
39
|
+
tooltip: {
|
|
40
|
+
key1: 'some value 1',
|
|
41
|
+
key2: 'some value 2',
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
source: {
|
|
46
|
+
identifier: 'input1',
|
|
47
|
+
meta: {},
|
|
48
|
+
variable_type: VariableType.UNSPECIFIED,
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
target: {
|
|
52
|
+
destination: {
|
|
53
|
+
identifier: 'target',
|
|
54
|
+
meta: {},
|
|
55
|
+
variable_type: VariableType.UNSPECIFIED,
|
|
56
|
+
},
|
|
57
|
+
edge_type: EdgeType.DIRECTED_EDGE,
|
|
58
|
+
meta: {},
|
|
59
|
+
source: {
|
|
60
|
+
identifier: 'input1',
|
|
61
|
+
meta: {},
|
|
62
|
+
variable_type: VariableType.UNSPECIFIED,
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
input2: {
|
|
67
|
+
target: {
|
|
68
|
+
destination: {
|
|
69
|
+
identifier: 'target',
|
|
70
|
+
meta: {},
|
|
71
|
+
variable_type: VariableType.UNSPECIFIED,
|
|
72
|
+
},
|
|
73
|
+
edge_type: EdgeType.DIRECTED_EDGE,
|
|
74
|
+
meta: {
|
|
75
|
+
rendering_properties: {
|
|
76
|
+
description: 'my super long description text that spans a few lines, is super descriptive and goes in depth into the explanation of why this edge exists in the first place. It is actually so long that it does not fit by default and triggers overflow to scroll because of the max-height set to 5 lines',
|
|
77
|
+
tooltip: 'some plaintext description',
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
source: {
|
|
81
|
+
identifier: 'input2',
|
|
82
|
+
meta: {
|
|
83
|
+
rendering_properties: {
|
|
84
|
+
label: 'input2 renamed multi word node name',
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
variable_type: VariableType.UNSPECIFIED,
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
input3: {
|
|
92
|
+
target: {
|
|
93
|
+
destination: {
|
|
94
|
+
identifier: 'target',
|
|
95
|
+
meta: {},
|
|
96
|
+
variable_type: VariableType.UNSPECIFIED,
|
|
97
|
+
},
|
|
98
|
+
edge_type: EdgeType.DIRECTED_EDGE,
|
|
99
|
+
meta: {},
|
|
100
|
+
source: {
|
|
101
|
+
identifier: 'input3',
|
|
102
|
+
meta: {},
|
|
103
|
+
variable_type: VariableType.UNSPECIFIED,
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
input4: {
|
|
108
|
+
target: {
|
|
109
|
+
destination: {
|
|
110
|
+
identifier: 'target',
|
|
111
|
+
meta: {},
|
|
112
|
+
variable_type: VariableType.UNSPECIFIED,
|
|
113
|
+
},
|
|
114
|
+
edge_type: EdgeType.DIRECTED_EDGE,
|
|
115
|
+
meta: { rendering_properties: {} },
|
|
116
|
+
source: {
|
|
117
|
+
identifier: 'input4',
|
|
118
|
+
meta: {},
|
|
119
|
+
variable_type: VariableType.UNSPECIFIED,
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
nodes: {
|
|
125
|
+
input1: {
|
|
126
|
+
identifier: 'input1',
|
|
127
|
+
meta: {
|
|
128
|
+
rendering_properties: {
|
|
129
|
+
label: 'input1 renamed',
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
variable_type: VariableType.UNSPECIFIED,
|
|
133
|
+
},
|
|
134
|
+
input2: {
|
|
135
|
+
identifier: 'input2',
|
|
136
|
+
meta: {
|
|
137
|
+
rendering_properties: {
|
|
138
|
+
label: 'input2 renamed multi word node name',
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
variable_type: VariableType.UNSPECIFIED,
|
|
142
|
+
},
|
|
143
|
+
input3: {
|
|
144
|
+
identifier: 'input3',
|
|
145
|
+
meta: {},
|
|
146
|
+
variable_type: VariableType.UNSPECIFIED,
|
|
147
|
+
},
|
|
148
|
+
input4: {
|
|
149
|
+
identifier: 'input4',
|
|
150
|
+
meta: {},
|
|
151
|
+
variable_type: VariableType.UNSPECIFIED,
|
|
152
|
+
},
|
|
153
|
+
target: {
|
|
154
|
+
identifier: 'target',
|
|
155
|
+
meta: {},
|
|
156
|
+
variable_type: VariableType.UNSPECIFIED,
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
version: '2.0',
|
|
160
|
+
};
|
|
161
|
+
export const pagCausalGraph = Object.assign(Object.assign({}, causalGraph), { edges: Object.assign(Object.assign({}, causalGraph.edges), { input1: Object.assign(Object.assign({}, causalGraph.edges.input1), { input4: Object.assign(Object.assign({}, causalGraph.edges.input1.input4), { edge_type: EdgeType.UNDIRECTED_EDGE }) }) }) });
|
|
162
|
+
export const nodeTiersCausalGraph = Object.assign(Object.assign({}, causalGraph), { nodes: Object.assign(Object.assign({}, causalGraph.nodes), { input1: Object.assign(Object.assign({}, causalGraph.nodes.input1), { group: 'group1', meta: Object.assign(Object.assign({}, causalGraph.nodes.input1.meta), { rendering_properties: Object.assign(Object.assign({}, causalGraph.nodes.input1.meta.rendering_properties), { another: 'group3' }), test: 'group2' }), order: 2 }), input2: Object.assign(Object.assign({}, causalGraph.nodes.input2), { group: 'group1', meta: Object.assign(Object.assign({}, causalGraph.nodes.input2.meta), { rendering_properties: Object.assign(Object.assign({}, causalGraph.nodes.input2.meta.rendering_properties), { another: 'group3' }), test: 'group2' }), order: 7 }), input3: Object.assign(Object.assign({}, causalGraph.nodes.input3), { group: 'group2', meta: Object.assign(Object.assign({}, causalGraph.nodes.input3.meta), { rendering_properties: Object.assign(Object.assign({}, causalGraph.nodes.input3.meta.rendering_properties), { another: 'group3' }), test: 'group1' }), order: 3 }), input4: Object.assign(Object.assign({}, causalGraph.nodes.input4), { group: 'group2', meta: Object.assign(Object.assign({}, causalGraph.nodes.input4.meta), { rendering_properties: Object.assign(Object.assign({}, causalGraph.nodes.input4.meta.rendering_properties), { another: 'group3' }), test: 'group1' }), order: 2 }), target: Object.assign(Object.assign({}, causalGraph.nodes.target), { group: 'group3', meta: Object.assign(Object.assign({}, causalGraph.nodes.target.meta), { rendering_properties: Object.assign(Object.assign({}, causalGraph.nodes.target.meta.rendering_properties), { another: 'group1' }), test: 'group3' }) }) }) });
|
|
163
|
+
export const nodeTiersList = [['input1', 'input2'], ['input3', 'input4'], ['target']];
|
|
164
|
+
export const timeSeriesCausalGraph = {
|
|
165
|
+
edges: {
|
|
166
|
+
X1: {
|
|
167
|
+
X3: {
|
|
168
|
+
destination: {
|
|
169
|
+
identifier: 'X3',
|
|
170
|
+
meta: {
|
|
171
|
+
time_lag: 0,
|
|
172
|
+
variable_name: 'X3',
|
|
173
|
+
},
|
|
174
|
+
node_class: 'TimeSeriesNode',
|
|
175
|
+
time_lag: 0,
|
|
176
|
+
variable_name: 'X3',
|
|
177
|
+
variable_type: 'unspecified',
|
|
178
|
+
},
|
|
179
|
+
edge_type: '->',
|
|
180
|
+
meta: {},
|
|
181
|
+
source: {
|
|
182
|
+
identifier: 'X1',
|
|
183
|
+
meta: {
|
|
184
|
+
time_lag: 0,
|
|
185
|
+
variable_name: 'X1',
|
|
186
|
+
},
|
|
187
|
+
node_class: 'TimeSeriesNode',
|
|
188
|
+
time_lag: 0,
|
|
189
|
+
variable_name: 'X1',
|
|
190
|
+
variable_type: 'unspecified',
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
'X1 lag(n=1)': {
|
|
195
|
+
X1: {
|
|
196
|
+
destination: {
|
|
197
|
+
identifier: 'X1',
|
|
198
|
+
meta: {
|
|
199
|
+
time_lag: 0,
|
|
200
|
+
variable_name: 'X1',
|
|
201
|
+
},
|
|
202
|
+
node_class: 'TimeSeriesNode',
|
|
203
|
+
time_lag: 0,
|
|
204
|
+
variable_name: 'X1',
|
|
205
|
+
variable_type: 'unspecified',
|
|
206
|
+
},
|
|
207
|
+
edge_type: '->',
|
|
208
|
+
meta: {},
|
|
209
|
+
source: {
|
|
210
|
+
identifier: 'X1 lag(n=1)',
|
|
211
|
+
meta: {
|
|
212
|
+
time_lag: -1,
|
|
213
|
+
variable_name: 'X1',
|
|
214
|
+
},
|
|
215
|
+
node_class: 'TimeSeriesNode',
|
|
216
|
+
time_lag: -1,
|
|
217
|
+
variable_name: 'X1',
|
|
218
|
+
variable_type: 'unspecified',
|
|
219
|
+
},
|
|
220
|
+
},
|
|
221
|
+
},
|
|
222
|
+
X2: {
|
|
223
|
+
X3: {
|
|
224
|
+
destination: {
|
|
225
|
+
identifier: 'X3',
|
|
226
|
+
meta: {
|
|
227
|
+
time_lag: 0,
|
|
228
|
+
variable_name: 'X3',
|
|
229
|
+
},
|
|
230
|
+
node_class: 'TimeSeriesNode',
|
|
231
|
+
time_lag: 0,
|
|
232
|
+
variable_name: 'X3',
|
|
233
|
+
variable_type: 'unspecified',
|
|
234
|
+
},
|
|
235
|
+
edge_type: '->',
|
|
236
|
+
meta: {},
|
|
237
|
+
source: {
|
|
238
|
+
identifier: 'X2',
|
|
239
|
+
meta: {
|
|
240
|
+
time_lag: 0,
|
|
241
|
+
variable_name: 'X2',
|
|
242
|
+
},
|
|
243
|
+
node_class: 'TimeSeriesNode',
|
|
244
|
+
time_lag: 0,
|
|
245
|
+
variable_name: 'X2',
|
|
246
|
+
variable_type: 'unspecified',
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
},
|
|
250
|
+
'X2 lag(n=1)': {
|
|
251
|
+
X2: {
|
|
252
|
+
destination: {
|
|
253
|
+
identifier: 'X2',
|
|
254
|
+
meta: {
|
|
255
|
+
time_lag: 0,
|
|
256
|
+
variable_name: 'X2',
|
|
257
|
+
},
|
|
258
|
+
node_class: 'TimeSeriesNode',
|
|
259
|
+
time_lag: 0,
|
|
260
|
+
variable_name: 'X2',
|
|
261
|
+
variable_type: 'unspecified',
|
|
262
|
+
},
|
|
263
|
+
edge_type: '->',
|
|
264
|
+
meta: {},
|
|
265
|
+
source: {
|
|
266
|
+
identifier: 'X2 lag(n=1)',
|
|
267
|
+
meta: {
|
|
268
|
+
time_lag: -1,
|
|
269
|
+
variable_name: 'X2',
|
|
270
|
+
},
|
|
271
|
+
node_class: 'TimeSeriesNode',
|
|
272
|
+
time_lag: -1,
|
|
273
|
+
variable_name: 'X2',
|
|
274
|
+
variable_type: 'unspecified',
|
|
275
|
+
},
|
|
276
|
+
},
|
|
277
|
+
},
|
|
278
|
+
},
|
|
279
|
+
nodes: {
|
|
280
|
+
X1: {
|
|
281
|
+
identifier: 'X1',
|
|
282
|
+
meta: {
|
|
283
|
+
time_lag: 0,
|
|
284
|
+
variable_name: 'X1',
|
|
285
|
+
},
|
|
286
|
+
node_class: 'TimeSeriesNode',
|
|
287
|
+
time_lag: 0,
|
|
288
|
+
variable_name: 'X1',
|
|
289
|
+
variable_type: 'unspecified',
|
|
290
|
+
},
|
|
291
|
+
'X1 lag(n=1)': {
|
|
292
|
+
identifier: 'X1 lag(n=1)',
|
|
293
|
+
meta: {
|
|
294
|
+
time_lag: -1,
|
|
295
|
+
variable_name: 'X1',
|
|
296
|
+
},
|
|
297
|
+
node_class: 'TimeSeriesNode',
|
|
298
|
+
time_lag: -1,
|
|
299
|
+
variable_name: 'X1',
|
|
300
|
+
variable_type: 'unspecified',
|
|
301
|
+
},
|
|
302
|
+
X2: {
|
|
303
|
+
identifier: 'X2',
|
|
304
|
+
meta: {
|
|
305
|
+
time_lag: 0,
|
|
306
|
+
variable_name: 'X2',
|
|
307
|
+
},
|
|
308
|
+
node_class: 'TimeSeriesNode',
|
|
309
|
+
time_lag: 0,
|
|
310
|
+
variable_name: 'X2',
|
|
311
|
+
variable_type: 'unspecified',
|
|
312
|
+
},
|
|
313
|
+
'X2 lag(n=1)': {
|
|
314
|
+
identifier: 'X2 lag(n=1)',
|
|
315
|
+
meta: {
|
|
316
|
+
time_lag: -1,
|
|
317
|
+
variable_name: 'X2',
|
|
318
|
+
},
|
|
319
|
+
node_class: 'TimeSeriesNode',
|
|
320
|
+
time_lag: -1,
|
|
321
|
+
variable_name: 'X2',
|
|
322
|
+
variable_type: 'unspecified',
|
|
323
|
+
},
|
|
324
|
+
X3: {
|
|
325
|
+
identifier: 'X3',
|
|
326
|
+
meta: {
|
|
327
|
+
time_lag: 0,
|
|
328
|
+
variable_name: 'X3',
|
|
329
|
+
},
|
|
330
|
+
node_class: 'TimeSeriesNode',
|
|
331
|
+
time_lag: 0,
|
|
332
|
+
variable_name: 'X3',
|
|
333
|
+
variable_type: 'unspecified',
|
|
334
|
+
},
|
|
335
|
+
},
|
|
336
|
+
version: '0.3.14',
|
|
337
|
+
};
|
|
338
|
+
//# sourceMappingURL=stories-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stories-utils.js","sourceRoot":"","sources":["../../../src/graph-viewer/utils/stories-utils.tsx"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
import { LayoutMapping, XYPosition } from 'graphology-layout/utils';
|
|
18
|
-
import { SimulationGraph } from '../../types';
|
|
18
|
+
import { DirectionType, GraphTiers, SimulationGraph } from '../../types';
|
|
19
19
|
export declare abstract class GraphLayoutBuilder<T> {
|
|
20
20
|
_nodeSize: number;
|
|
21
21
|
_nodeFontSize: number;
|
|
@@ -61,4 +61,8 @@ export declare abstract class GraphLayout {
|
|
|
61
61
|
onStartDrag?: () => void | Promise<void>;
|
|
62
62
|
}>;
|
|
63
63
|
}
|
|
64
|
+
export interface GraphLayoutWithTiers extends GraphLayout {
|
|
65
|
+
orientation: DirectionType;
|
|
66
|
+
tiers: GraphTiers;
|
|
67
|
+
}
|
|
64
68
|
//# sourceMappingURL=common.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/shared/graph-layout/common.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/shared/graph-layout/common.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEzE,8BAAsB,kBAAkB,CAAC,CAAC;IACtC,SAAS,SAAM;IAEf,aAAa,SAAM;IAEnB;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK5B;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKhC,QAAQ,CAAC,KAAK,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,8BAAsB,WAAW;IAC7B,QAAQ,EAAE,MAAM,CAAC;IAEjB,YAAY,EAAE,MAAM,CAAC;gBAET,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC;IAMhD,IAAI,YAAY,IAAI,OAAO,CAE1B;IAGD,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,CAChB,KAAK,EAAE,eAAe,EACtB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,aAAa,CAAC,UAAU,EAAE,CAAC,KAAK,IAAI,GACpG,OAAO,CAAC;QACP,UAAU,CAAC,EAAE,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC;QACzC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;QAClC,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACxE,WAAW,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KAC5C,CAAC;CACL;AAED,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACrD,WAAW,EAAE,aAAa,CAAC;IAC3B,KAAK,EAAE,UAAU,CAAC;CACrB"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { FcoseRelativePlacementConstraint } from 'cytoscape-fcose';
|
|
1
2
|
import { LayoutMapping, XYPosition } from 'graphology-layout/utils';
|
|
2
|
-
import { SimulationGraph } from '../../types';
|
|
3
|
+
import { DirectionType, GraphTiers, SimulationGraph, TieredGraphLayoutBuilder } from '../../types';
|
|
3
4
|
import { GraphLayout, GraphLayoutBuilder } from './common';
|
|
4
|
-
declare class FcoseLayoutBuilder extends GraphLayoutBuilder<FcoseLayout> {
|
|
5
|
+
declare class FcoseLayoutBuilder extends GraphLayoutBuilder<FcoseLayout> implements TieredGraphLayoutBuilder {
|
|
5
6
|
_edgeElasticity: number;
|
|
6
7
|
_edgeLength: number;
|
|
7
8
|
_energy: number;
|
|
@@ -11,6 +12,9 @@ declare class FcoseLayoutBuilder extends GraphLayoutBuilder<FcoseLayout> {
|
|
|
11
12
|
_iterations: number;
|
|
12
13
|
_nodeRepulsion: number;
|
|
13
14
|
_nodeSeparation: number;
|
|
15
|
+
_tierSeparation: number;
|
|
16
|
+
orientation?: DirectionType;
|
|
17
|
+
tiers: GraphTiers;
|
|
14
18
|
/**
|
|
15
19
|
* Set edge elasticity
|
|
16
20
|
*
|
|
@@ -65,8 +69,25 @@ declare class FcoseLayoutBuilder extends GraphLayoutBuilder<FcoseLayout> {
|
|
|
65
69
|
* @param separation separation
|
|
66
70
|
*/
|
|
67
71
|
nodeSeparation(separation: number): this;
|
|
72
|
+
/**
|
|
73
|
+
* Set tier separation
|
|
74
|
+
*
|
|
75
|
+
* @param separation separation
|
|
76
|
+
*/
|
|
77
|
+
tierSeparation(separation: number): this;
|
|
68
78
|
build(): FcoseLayout;
|
|
69
79
|
}
|
|
80
|
+
interface TiersProperties {
|
|
81
|
+
alignmentConstraint?: string[][];
|
|
82
|
+
relativePlacementConstraint?: FcoseRelativePlacementConstraint[];
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get properties values for tiered fcose layout
|
|
86
|
+
* @param tiers node tiers defined by the user
|
|
87
|
+
* @param orientation the orientation of the graph
|
|
88
|
+
* @param tierSeparation tier separation
|
|
89
|
+
* */
|
|
90
|
+
export declare function getTieredLayoutProperties(graph: SimulationGraph, tiers: GraphTiers, orientation: DirectionType, tierSeparation: number): TiersProperties;
|
|
70
91
|
export default class FcoseLayout extends GraphLayout {
|
|
71
92
|
edgeElasticity: number;
|
|
72
93
|
edgeLength: number;
|
|
@@ -77,6 +98,9 @@ export default class FcoseLayout extends GraphLayout {
|
|
|
77
98
|
iterations: number;
|
|
78
99
|
nodeRepulsion: number;
|
|
79
100
|
nodeSeparation: number;
|
|
101
|
+
tierSeparation: number;
|
|
102
|
+
orientation: DirectionType;
|
|
103
|
+
tiers: GraphTiers;
|
|
80
104
|
constructor(builder: FcoseLayoutBuilder);
|
|
81
105
|
get requiresPosition(): boolean;
|
|
82
106
|
applyLayout(graph: SimulationGraph): Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fcose-layout.d.ts","sourceRoot":"","sources":["../../../src/shared/graph-layout/fcose-layout.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fcose-layout.d.ts","sourceRoot":"","sources":["../../../src/shared/graph-layout/fcose-layout.tsx"],"names":[],"mappings":"AAiBA,OAAc,EAAsB,gCAAgC,EAAE,MAAM,iBAAiB,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEnG,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAI3D,cAAM,kBAAmB,SAAQ,kBAAkB,CAAC,WAAW,CAAE,YAAW,wBAAwB;IAChG,eAAe,SAAQ;IAEvB,WAAW,SAAK;IAEhB,OAAO,SAAO;IAEd,QAAQ,SAAM;IAEd,aAAa,SAAM;IAEnB,YAAY,UAAQ;IAEpB,WAAW,SAAQ;IAEnB,cAAc,SAAQ;IAEtB,eAAe,SAAM;IAErB,eAAe,SAAO;IAEtB,WAAW,CAAC,EAAE,aAAa,CAAgB;IAE3C,KAAK,EAAE,UAAU,CAAC;IAElB;;;;OAIG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAKxC;;;;OAIG;IACH,UAAU,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAK1C;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK5B;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK9B;;;;OAIG;IACH,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAKxC;;;;OAIG;IACH,WAAW,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI;IAKvC;;;;OAIG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK/B;;;;OAIG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAKtC;;;;OAIG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAKxC;;;;OAIG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAKxC,KAAK,IAAI,WAAW;CAIvB;AAyFD,UAAU,eAAe;IACrB,mBAAmB,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IACjC,2BAA2B,CAAC,EAAE,gCAAgC,EAAE,CAAC;CACpE;AAED;;;;;MAKM;AACN,wBAAgB,yBAAyB,CACrC,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,UAAU,EACjB,WAAW,EAAE,aAAa,EAC1B,cAAc,EAAE,MAAM,GACvB,eAAe,CAoBjB;AAED,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IACzC,cAAc,EAAE,MAAM,CAAC;IAEvB,UAAU,EAAE,MAAM,CAAC;IAEnB,MAAM,EAAE,MAAM,CAAC;IAEf,OAAO,EAAE,MAAM,CAAC;IAEhB,YAAY,EAAE,MAAM,CAAC;IAErB,WAAW,EAAE,OAAO,CAAC;IAErB,UAAU,EAAE,MAAM,CAAC;IAEnB,aAAa,EAAE,MAAM,CAAC;IAEtB,cAAc,EAAE,MAAM,CAAC;IAEvB,cAAc,EAAE,MAAM,CAAC;IAEvB,WAAW,EAAE,aAAa,CAAC;IAE3B,KAAK,EAAE,UAAU,CAAC;gBAEb,OAAO,EAAE,kBAAkB;IAiBvC,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC;QACzC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;KACrC,CAAC;IA0EF,MAAM,KAAK,OAAO,IAAI,kBAAkB,CAEvC;CACJ"}
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import cytoscape from 'cytoscape';
|
|
18
18
|
import fcose from 'cytoscape-fcose';
|
|
19
|
+
import { getNodeOrder, getTiersArray } from '../utils';
|
|
19
20
|
import { GraphLayout, GraphLayoutBuilder } from './common';
|
|
20
21
|
cytoscape.use(fcose);
|
|
21
22
|
class FcoseLayoutBuilder extends GraphLayoutBuilder {
|
|
@@ -30,6 +31,8 @@ class FcoseLayoutBuilder extends GraphLayoutBuilder {
|
|
|
30
31
|
this._iterations = 2500;
|
|
31
32
|
this._nodeRepulsion = 6500;
|
|
32
33
|
this._nodeSeparation = 75;
|
|
34
|
+
this._tierSeparation = 200;
|
|
35
|
+
this.orientation = 'horizontal';
|
|
33
36
|
}
|
|
34
37
|
/**
|
|
35
38
|
* Set edge elasticity
|
|
@@ -112,11 +115,108 @@ class FcoseLayoutBuilder extends GraphLayoutBuilder {
|
|
|
112
115
|
this._nodeSeparation = separation;
|
|
113
116
|
return this;
|
|
114
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* Set tier separation
|
|
120
|
+
*
|
|
121
|
+
* @param separation separation
|
|
122
|
+
*/
|
|
123
|
+
tierSeparation(separation) {
|
|
124
|
+
this._tierSeparation = separation;
|
|
125
|
+
return this;
|
|
126
|
+
}
|
|
115
127
|
build() {
|
|
116
128
|
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
117
129
|
return new FcoseLayout(this);
|
|
118
130
|
}
|
|
119
131
|
}
|
|
132
|
+
/**
|
|
133
|
+
* Creates an array of relative placements for a given tier given a certain order of nodes and orientation
|
|
134
|
+
* @param tier tier to be placed
|
|
135
|
+
* @param orientation the orientation of the graph
|
|
136
|
+
* @param tierSeparation tier separation
|
|
137
|
+
* @param nodesOrder nodes order
|
|
138
|
+
* */
|
|
139
|
+
function createPositionedArray(tier, orientation, tierSeparation, nodesOrder) {
|
|
140
|
+
// Filter out any nodes that do not have an order defined in nodesOrder
|
|
141
|
+
const validNodes = tier.filter((node) => node in nodesOrder);
|
|
142
|
+
// sort tier based on nodesOrder
|
|
143
|
+
const sortedArray = validNodes.sort((a, b) => {
|
|
144
|
+
const orderA = nodesOrder[a];
|
|
145
|
+
const orderB = nodesOrder[b];
|
|
146
|
+
const parsedA = parseInt(orderA);
|
|
147
|
+
const parsedB = parseInt(orderB);
|
|
148
|
+
if (Number.isNaN(parsedA) || Number.isNaN(parsedB)) {
|
|
149
|
+
throw new Error(`Non-numeric order value encountered for nodes`);
|
|
150
|
+
}
|
|
151
|
+
return parsedA - parsedB;
|
|
152
|
+
});
|
|
153
|
+
// if horizontal we place nodes to the left of each other, if vertical we place nodes to the top of each other
|
|
154
|
+
if (orientation === 'horizontal') {
|
|
155
|
+
return sortedArray.slice(0, -1).map((item, index) => ({
|
|
156
|
+
bottom: sortedArray[index + 1],
|
|
157
|
+
gap: tierSeparation,
|
|
158
|
+
top: item,
|
|
159
|
+
}));
|
|
160
|
+
} // orientation === 'vertical'
|
|
161
|
+
return sortedArray.slice(0, -1).map((item, index) => ({
|
|
162
|
+
gap: tierSeparation,
|
|
163
|
+
left: item,
|
|
164
|
+
right: sortedArray[index + 1],
|
|
165
|
+
}));
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Gets relative placements for tiered fcose layout when tiers are given as string[][]. Defines so that given nodes within a tier are placed
|
|
169
|
+
* right/left or top/bottom of each other. Following the defined hierarchy of tiers.
|
|
170
|
+
* @param tiers node tiers defined by the user
|
|
171
|
+
* @param orientation the orientation of the graph
|
|
172
|
+
* @param tierSeparation tier separation
|
|
173
|
+
* @param nodesOrder the order the nodes should appear in the tier
|
|
174
|
+
* */
|
|
175
|
+
function getRelativeTieredArrayPlacement(tiers, orientation, tierSeparation, nodesOrder) {
|
|
176
|
+
const relativePlacements = [];
|
|
177
|
+
tiers.forEach((tier, tierIndex) => {
|
|
178
|
+
// if within the tier a node order should be followed we add those placements
|
|
179
|
+
if (nodesOrder) {
|
|
180
|
+
const positionedArray = createPositionedArray(tier, orientation, tierSeparation, nodesOrder);
|
|
181
|
+
relativePlacements.push(...positionedArray);
|
|
182
|
+
}
|
|
183
|
+
// Next we take care of the hierarchical placement of the tiers
|
|
184
|
+
// if last tier do not add relative placement
|
|
185
|
+
if (tierIndex === tiers.length - 1) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
// get one element for each subsequent tiers
|
|
189
|
+
const firstElement = tier[0];
|
|
190
|
+
const nextTierFirstElement = tiers[tierIndex + 1][0];
|
|
191
|
+
// Place onde node from the first tier to the left/top of the first node of the next tier
|
|
192
|
+
// That way we have one node from each tier defining the position of the tier relative to the other tiers
|
|
193
|
+
const placement = orientation === 'horizontal'
|
|
194
|
+
? { gap: tierSeparation, left: firstElement, right: nextTierFirstElement }
|
|
195
|
+
: { bottom: nextTierFirstElement, gap: tierSeparation, top: firstElement };
|
|
196
|
+
relativePlacements.push(placement);
|
|
197
|
+
});
|
|
198
|
+
return relativePlacements;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Get properties values for tiered fcose layout
|
|
202
|
+
* @param tiers node tiers defined by the user
|
|
203
|
+
* @param orientation the orientation of the graph
|
|
204
|
+
* @param tierSeparation tier separation
|
|
205
|
+
* */
|
|
206
|
+
export function getTieredLayoutProperties(graph, tiers, orientation, tierSeparation) {
|
|
207
|
+
const tiersArray = getTiersArray(tiers, graph);
|
|
208
|
+
let nodesOrder;
|
|
209
|
+
if (!Array.isArray(tiers)) {
|
|
210
|
+
// must be of type TiersConfig
|
|
211
|
+
const { order_nodes_by } = tiers;
|
|
212
|
+
const nodes = graph.nodes();
|
|
213
|
+
nodesOrder = order_nodes_by ? getNodeOrder(nodes, order_nodes_by, graph) : undefined;
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
alignmentConstraint: tiersArray,
|
|
217
|
+
relativePlacementConstraint: getRelativeTieredArrayPlacement(tiersArray, orientation, tierSeparation, nodesOrder),
|
|
218
|
+
};
|
|
219
|
+
}
|
|
120
220
|
export default class FcoseLayout extends GraphLayout {
|
|
121
221
|
constructor(builder) {
|
|
122
222
|
super(builder);
|
|
@@ -129,6 +229,9 @@ export default class FcoseLayout extends GraphLayout {
|
|
|
129
229
|
this.iterations = builder._iterations;
|
|
130
230
|
this.nodeRepulsion = builder._nodeRepulsion;
|
|
131
231
|
this.nodeSeparation = builder._nodeSeparation;
|
|
232
|
+
this.tierSeparation = builder._tierSeparation;
|
|
233
|
+
this.orientation = builder.orientation;
|
|
234
|
+
this.tiers = builder.tiers;
|
|
132
235
|
}
|
|
133
236
|
// eslint-disable-next-line class-methods-use-this
|
|
134
237
|
get requiresPosition() {
|
|
@@ -138,6 +241,9 @@ export default class FcoseLayout extends GraphLayout {
|
|
|
138
241
|
return new Promise((resolve) => {
|
|
139
242
|
const hasPositions = graph.getNodeAttribute(graph.nodes()[0], 'x');
|
|
140
243
|
const size = graph.getAttribute('size');
|
|
244
|
+
const tiersPlacement = this.tiers
|
|
245
|
+
? getTieredLayoutProperties(graph, this.tiers, this.orientation, this.tierSeparation)
|
|
246
|
+
: { alignmentConstraint: undefined, relativePlacementConstraint: undefined };
|
|
141
247
|
const elements = [
|
|
142
248
|
...graph.mapNodes((id, attrs) => ({
|
|
143
249
|
data: Object.assign(Object.assign({}, attrs), { height: size, width: size }),
|
|
@@ -153,6 +259,10 @@ export default class FcoseLayout extends GraphLayout {
|
|
|
153
259
|
elements,
|
|
154
260
|
headless: true,
|
|
155
261
|
layout: {
|
|
262
|
+
alignmentConstraint: {
|
|
263
|
+
horizontal: this.orientation === 'vertical' ? tiersPlacement.alignmentConstraint : undefined,
|
|
264
|
+
vertical: this.orientation === 'horizontal' ? tiersPlacement.alignmentConstraint : undefined,
|
|
265
|
+
},
|
|
156
266
|
animate: false,
|
|
157
267
|
edgeElasticity: this.edgeElasticity,
|
|
158
268
|
gravity: this.gravity,
|
|
@@ -166,6 +276,7 @@ export default class FcoseLayout extends GraphLayout {
|
|
|
166
276
|
quality: this.highQuality ? 'proof' : 'default',
|
|
167
277
|
// only randomize if there are no position in graph yet
|
|
168
278
|
randomize: !hasPositions,
|
|
279
|
+
relativePlacementConstraint: tiersPlacement.relativePlacementConstraint,
|
|
169
280
|
stop: (ev) => {
|
|
170
281
|
const positions = Object.fromEntries(ev.cy.elements('node').map((node) => {
|
|
171
282
|
return [node.id(), node.position()];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fcose-layout.js","sourceRoot":"","sources":["../../../src/shared/graph-layout/fcose-layout.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,SAA8C,MAAM,WAAW,CAAC;AACvE,OAAO,
|
|
1
|
+
{"version":3,"file":"fcose-layout.js","sourceRoot":"","sources":["../../../src/shared/graph-layout/fcose-layout.tsx"],"names":[],"mappings":"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"}
|