Paths
A path is an object that passes over a series of edges.
A path is represented as a list of edge IDs so that the path can identify the edges it passes through, even when there are multiple edges between the same nodes.
Basic
A simple example is shown below.
<script setup lang="ts">
import * as vNG from "v-network-graph"
import data from "./data"
const paths: vNG.Paths = {
path1: { edges: ["edge1", "edge3", "edge5", "edge7"] },
path2: { edges: ["edge2", "edge4", "edge6", "edge10"] },
}
</script>
<template>
<v-network-graph
:nodes="data.nodes"
:edges="data.edges"
:layouts="data.layouts"
:paths="paths"
:configs="data.configs"
/>
</template>2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import { Nodes, Edges, Layouts, defineConfigs } from "v-network-graph"
const nodes: Nodes = {
node1: { name: "Node 1" },
node2: { name: "Node 2" },
node3: { name: "Node 3" },
node4: { name: "Node 4" },
node5: { name: "Node 5" },
node6: { name: "Node 6" },
node7: { name: "Node 7" },
node8: { name: "Node 8" },
node9: { name: "Node 9" },
node10: { name: "Node 10" },
}
const edges: Edges = {
edge1: { source: "node1", target: "node2" },
edge2: { source: "node3", target: "node2" },
edge3: { source: "node2", target: "node4" },
edge4: { source: "node2", target: "node4" },
edge5: { source: "node4", target: "node5" },
edge6: { source: "node4", target: "node6" },
edge7: { source: "node5", target: "node7" },
edge8: { source: "node5", target: "node8" },
edge9: { source: "node6", target: "node9" },
edge10: { source: "node6", target: "node10" },
}
const layouts: Layouts = {
nodes: {
node1: { x: 0, y: 0 },
node2: { x: 100, y: 60 },
node3: { x: 0, y: 110 },
node4: { x: 250, y: 60 },
node5: { x: 350, y: 10 },
node6: { x: 350, y: 110 },
node7: { x: 450, y: 10 },
node8: { x: 450, y: 60 },
node9: { x: 450, y: 110 },
node10: { x: 450, y: 160 },
},
}
const configs = defineConfigs({
node: {
normal: {
type: "circle",
radius: 20,
color: "#99ccff",
},
hover: {
color: "#88bbff",
},
label: {
visible: false,
fontSize: 8,
},
},
edge: {
gap: 12,
normal: {
color: "#6699cc",
},
},
path: {
visible: true,
path: {
width: 10,
},
},
})
export default {
nodes,
edges,
layouts,
configs,
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
TIP
When there are multiple edges between the same pair of nodes and each of them has a path through it, suggest changing the edge gaps from the default.
TIP
By default, the path color is automatically selected from a several colors, but the same color may be selected for some paths. It is also possible to specify colors individually, see the following sample.
Coloring
The following is a sample of how to specify the color of each path, based on the color values in the path data.
<script setup lang="ts">
import * as vNG from "v-network-graph"
import data from "./data"
const paths: vNG.Paths = {
path1: {
edges: ["edge1", "edge3", "edge5", "edge7"],
color: "#ff00ff66", // #rrggbbaa <- with alpha
},
path2: {
edges: ["edge2", "edge4", "edge6", "edge10"],
color: "#00aa0066", // #rrggbbaa <- with alpha
},
}
const configs = vNG.defineConfigs({
node: {
normal: { type: "circle", radius: 20, color: "#99ccff" },
hover: { color: "#88bbff" },
label: { visible: false, fontSize: 8 },
},
edge: {
gap: 12,
normal: { color: "#6699cc" },
},
path: {
visible: true,
normal: {
width: 10,
color: p => p.color,
},
},
})
</script>
<template>
<v-network-graph
:nodes="data.nodes"
:edges="data.edges"
:layouts="data.layouts"
:paths="paths"
:configs="configs"
/>
</template>2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import { Nodes, Edges, Layouts } from "v-network-graph"
const nodes: Nodes = {
node1: { name: "Node 1" },
node2: { name: "Node 2" },
node3: { name: "Node 3" },
node4: { name: "Node 4" },
node5: { name: "Node 5" },
node6: { name: "Node 6" },
node7: { name: "Node 7" },
node8: { name: "Node 8" },
node9: { name: "Node 9" },
node10: { name: "Node 10" },
}
const edges: Edges = {
edge1: { source: "node1", target: "node2" },
edge2: { source: "node3", target: "node2" },
edge3: { source: "node2", target: "node4" },
edge4: { source: "node2", target: "node4" },
edge5: { source: "node4", target: "node5" },
edge6: { source: "node4", target: "node6" },
edge7: { source: "node5", target: "node7" },
edge8: { source: "node5", target: "node8" },
edge9: { source: "node6", target: "node9" },
edge10: { source: "node6", target: "node10" },
}
const layouts: Layouts = {
nodes: {
node1: { x: 0, y: 0 },
node2: { x: 100, y: 60 },
node3: { x: 0, y: 110 },
node4: { x: 250, y: 60 },
node5: { x: 350, y: 10 },
node6: { x: 350, y: 110 },
node7: { x: 450, y: 10 },
node8: { x: 450, y: 60 },
node9: { x: 450, y: 110 },
node10: { x: 450, y: 160 },
},
}
export default {
nodes,
edges,
layouts,
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Animation
Paths can also be animated in the same way as in Edge.
<script setup lang="ts">
import * as vNG from "v-network-graph"
import data from "./data"
const paths: vNG.Paths = {
path1: { edges: ["edge1", "edge3", "edge5", "edge7"] },
path2: { edges: ["edge2", "edge4", "edge6", "edge10"] },
}
const configs = vNG.defineConfigs({
node: {
normal: { type: "circle", radius: 20, color: "#99ccff" },
hover: { color: "#88bbff" },
label: { visible: false, fontSize: 8 },
},
edge: {
gap: 12,
normal: { color: "#6699cc" },
},
path: {
visible: true,
normal: {
width: 10,
dasharray: "10 16",
animate: true,
animationSpeed: 40,
},
},
})
</script>
<template>
<v-network-graph
:nodes="data.nodes"
:edges="data.edges"
:layouts="data.layouts"
:paths="paths"
:configs="configs"
/>
</template>2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import { Nodes, Edges, Layouts } from "v-network-graph"
const nodes: Nodes = {
node1: { name: "Node 1" },
node2: { name: "Node 2" },
node3: { name: "Node 3" },
node4: { name: "Node 4" },
node5: { name: "Node 5" },
node6: { name: "Node 6" },
node7: { name: "Node 7" },
node8: { name: "Node 8" },
node9: { name: "Node 9" },
node10: { name: "Node 10" },
}
const edges: Edges = {
edge1: { source: "node1", target: "node2" },
edge2: { source: "node3", target: "node2" },
edge3: { source: "node2", target: "node4" },
edge4: { source: "node2", target: "node4" },
edge5: { source: "node4", target: "node5" },
edge6: { source: "node4", target: "node6" },
edge7: { source: "node5", target: "node7" },
edge8: { source: "node5", target: "node8" },
edge9: { source: "node6", target: "node9" },
edge10: { source: "node6", target: "node10" },
}
const layouts: Layouts = {
nodes: {
node1: { x: 0, y: 0 },
node2: { x: 100, y: 60 },
node3: { x: 0, y: 110 },
node4: { x: 250, y: 60 },
node5: { x: 350, y: 10 },
node6: { x: 350, y: 110 },
node7: { x: 450, y: 10 },
node8: { x: 450, y: 60 },
node9: { x: 450, y: 110 },
node10: { x: 450, y: 160 },
},
}
export default {
nodes,
edges,
layouts,
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Select paths
Set configs.path.selectable to true to make the path selectable by clicking or touching. If you specify a number instead of true, it will be taken as the maximum number of selectable paths.
Specify 2-way binding for selected-paths prop to get an array of path IDs selected. It is also possible to control the selection state on the network graph by setting a value to the same prop.
INFO
Since the paths cover the edges, by default the paths do not handle mouse/touch events. To make the path selectable by mouse/touch, it is necessary to set the configuration configs.path.clickable to true.
Also, to enable mouse hover response, set configs.path.hoverable to true.
<script setup lang="ts">
import { reactive, ref, watch } from "vue"
import * as vNG from "v-network-graph"
import data from "./data"
const paths: vNG.Paths = {
path1: { edges: ["edge1", "edge3", "edge5", "edge7"] },
path2: { edges: ["edge2", "edge4", "edge6", "edge10"] },
}
const initialConfigs = vNG.defineConfigs({
node: {
normal: { type: "circle", radius: 20, color: "#99ccff" },
hover: { color: "#88bbff" },
label: { visible: false, fontSize: 8 },
},
edge: {
gap: 12,
normal: { color: "#6699cc" },
},
path: {
visible: true,
selectable: true as boolean | number,
clickable: true,
hoverable: true,
normal: {
width: 10,
},
},
})
const configs = reactive(initialConfigs)
const selectedPaths = ref<string[]>([])
const limit = ref(-1)
watch(limit, v => {
selectedPaths.value = [] // reset
switch (v) {
case 0: // disabled
configs.path.selectable = false
break
case 1: // limit
configs.path.selectable = v
break
case -1: // unlimited
default:
configs.path.selectable = true
break
}
})
</script>
<template>
<div class="demo-control-panel">
<label>Selected:</label>
<el-select
v-model="selectedPaths"
:disabled="limit === 0"
multiple
:multiple-limit="limit"
placeholder="Select"
>
<el-option
v-for="(node, key) in paths"
:key="key"
:label="node.name"
:value="key"
/>
</el-select>
<label>Limit:</label>
<el-select v-model="limit" :width="400">
<el-option label="0 (disable)" :value="0" />
<el-option label="1 path" :value="1" />
<el-option label="unlimited" :value="-1" />
</el-select>
</div>
<v-network-graph
v-model:selected-paths="selectedPaths"
:nodes="data.nodes"
:edges="data.edges"
:layouts="data.layouts"
:paths="paths"
:configs="configs"
/>
</template>2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import { Nodes, Edges, Layouts } from "v-network-graph"
const nodes: Nodes = {
node1: { name: "Node 1" },
node2: { name: "Node 2" },
node3: { name: "Node 3" },
node4: { name: "Node 4" },
node5: { name: "Node 5" },
node6: { name: "Node 6" },
node7: { name: "Node 7" },
node8: { name: "Node 8" },
node9: { name: "Node 9" },
node10: { name: "Node 10" },
}
const edges: Edges = {
edge1: { source: "node1", target: "node2" },
edge2: { source: "node3", target: "node2" },
edge3: { source: "node2", target: "node4" },
edge4: { source: "node2", target: "node4" },
edge5: { source: "node4", target: "node5" },
edge6: { source: "node4", target: "node6" },
edge7: { source: "node5", target: "node7" },
edge8: { source: "node5", target: "node8" },
edge9: { source: "node6", target: "node9" },
edge10: { source: "node6", target: "node10" },
}
const layouts: Layouts = {
nodes: {
node1: { x: 0, y: 0 },
node2: { x: 100, y: 60 },
node3: { x: 0, y: 110 },
node4: { x: 250, y: 60 },
node5: { x: 350, y: 10 },
node6: { x: 350, y: 110 },
node7: { x: 450, y: 10 },
node8: { x: 450, y: 60 },
node9: { x: 450, y: 110 },
node10: { x: 450, y: 160 },
},
}
export default {
nodes,
edges,
layouts,
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Customize appearances
<script setup lang="ts">
import { reactive } from "vue"
import * as vNG from "v-network-graph"
import data from "./data"
const paths: vNG.Paths = {
path1: { edges: ["edge1", "edge3", "edge5", "edge7"] },
path2: { edges: ["edge2", "edge4", "edge6", "edge10"] },
}
const initialConfigs = vNG.defineConfigs({
node: {
normal: {
type: "circle",
radius: 20,
color: "#99ccff",
},
hover: {
color: "#88bbff",
},
label: {
visible: false,
fontSize: 8,
},
},
edge: {
gap: 12,
normal: {
color: "#6699cc",
},
},
path: {
visible: true,
clickable: true,
hoverable: true,
selectable: true,
curveInNode: false,
end: "centerOfNode", // "centerOfNode" or "edgeOfNode"
margin: 0,
normal: {
width: 10,
color: "#ff800088",
dasharray: "",
linecap: "round",
linejoin: "round",
animate: false,
animationSpeed: 50,
},
hover: {
width: 12,
color: "#ff000088",
dasharray: "",
linecap: "round",
linejoin: "round",
animate: false,
animationSpeed: 50,
},
selected: {
width: 12,
color: "#ff000088",
dasharray: "6 16",
linecap: "round",
linejoin: "round",
animate: true,
animationSpeed: 30,
},
},
})
const configs = reactive(initialConfigs)
</script>
<template>
<div class="demo-control-panel">
<el-tabs type="border-card">
<el-tab-pane label="General">
<demo-path-config-panel
v-model:end="configs.path.end"
v-model:margin="configs.path.margin"
v-model:curveInNode="configs.path.curveInNode"
v-model:clickable="configs.path.clickable"
v-model:hoverable="configs.path.hoverable"
v-model:selectable="configs.path.selectable"
/>
</el-tab-pane>
<el-tab-pane label="Stroke">
<el-tabs>
<el-tab-pane label="normal">
<demo-path-stroke-config-panel
v-model:width="configs.path.normal.width"
v-model:color="configs.path.normal.color"
v-model:dasharray="configs.path.normal.dasharray"
v-model:linecap="configs.path.normal.linecap"
v-model:animate="configs.path.normal.animate"
v-model:animationSpeed="configs.path.normal.animationSpeed"
/>
</el-tab-pane>
<el-tab-pane label="hover">
<demo-path-stroke-config-panel
v-model:width="configs.path.hover.width"
v-model:color="configs.path.hover.color"
v-model:dasharray="configs.path.hover.dasharray"
v-model:linecap="configs.path.hover.linecap"
v-model:animate="configs.path.hover.animate"
v-model:animationSpeed="configs.path.hover.animationSpeed"
/></el-tab-pane>
<el-tab-pane label="selected">
<demo-path-stroke-config-panel
v-model:width="configs.path.selected.width"
v-model:color="configs.path.selected.color"
v-model:dasharray="configs.path.selected.dasharray"
v-model:linecap="configs.path.selected.linecap"
v-model:animate="configs.path.selected.animate"
v-model:animationSpeed="configs.path.selected.animationSpeed"
/></el-tab-pane>
</el-tabs>
</el-tab-pane>
</el-tabs>
</div>
<v-network-graph
:nodes="data.nodes"
:edges="data.edges"
:layouts="data.layouts"
:paths="paths"
:configs="configs"
/>
</template>2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import { Nodes, Edges, Layouts } from "v-network-graph"
const nodes: Nodes = {
node1: { name: "Node 1" },
node2: { name: "Node 2" },
node3: { name: "Node 3" },
node4: { name: "Node 4" },
node5: { name: "Node 5" },
node6: { name: "Node 6" },
node7: { name: "Node 7" },
node8: { name: "Node 8" },
node9: { name: "Node 9" },
node10: { name: "Node 10" },
}
const edges: Edges = {
edge1: { source: "node1", target: "node2" },
edge2: { source: "node3", target: "node2" },
edge3: { source: "node2", target: "node4" },
edge4: { source: "node2", target: "node4" },
edge5: { source: "node4", target: "node5" },
edge6: { source: "node4", target: "node6" },
edge7: { source: "node5", target: "node7" },
edge8: { source: "node5", target: "node8" },
edge9: { source: "node6", target: "node9" },
edge10: { source: "node6", target: "node10" },
}
const layouts: Layouts = {
nodes: {
node1: { x: 0, y: 0 },
node2: { x: 100, y: 60 },
node3: { x: 0, y: 110 },
node4: { x: 250, y: 60 },
node5: { x: 350, y: 10 },
node6: { x: 350, y: 110 },
node7: { x: 450, y: 10 },
node8: { x: 450, y: 60 },
node9: { x: 450, y: 110 },
node10: { x: 450, y: 160 },
},
}
export default {
nodes,
edges,
layouts,
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Z-order
The z-index of paths can be specified to control the order of the paths in the z-direction.
Since there is no concept of z-index in SVG, this feature is achieved by sorting the internal path objects. It is disabled by default for performance reasons. If configs.path.zOrder.enabled is set to true, this feature will be enabled.
In addition to specifying the z-index based on the properties of the path itself, it is also possible to move to the topmost when it is mouse hovered or selected.
<script setup lang="ts">
import { reactive } from "vue"
import * as vNG from "v-network-graph"
import data from "./data"
const paths: vNG.Paths = {
path1: {
edges: ["edge1", "edge3", "edge6", "edge10"],
zIndex: 2,
color: "#ff66ffdd",
},
path2: {
edges: ["edge2", "edge4", "edge5", "edge7"],
zIndex: 1,
color: "#44cc44dd",
},
}
const initialConfigs = vNG.defineConfigs({
node: {
normal: {
type: "circle",
radius: 20,
color: "#99ccff",
},
hover: {
color: "#88bbff",
},
label: {
visible: false,
fontSize: 8,
},
},
edge: {
gap: 12,
normal: {
color: "#6699cc",
},
},
path: {
visible: true,
curveInNode: false,
end: "centerOfNode", // "centerOfNode" or "edgeOfNode"
margin: 0,
normal: {
width: 8,
color: p => p.color,
dasharray: "",
linecap: "round",
linejoin: "round",
animate: false,
animationSpeed: 50,
},
clickable: true,
hoverable: true,
selectable: true,
zOrder: {
enabled: true,
zIndex: n => n.zIndex,
bringToFrontOnHover: true,
bringToFrontOnSelected: true,
},
},
})
const configs = reactive(initialConfigs)
</script>
<template>
<div class="demo-control-panel">
<el-checkbox v-model="configs.path.zOrder.bringToFrontOnHover">
Bring to front on hover
</el-checkbox>
<el-checkbox v-model="configs.path.zOrder.bringToFrontOnSelected">
Bring to front on selected
</el-checkbox>
</div>
<v-network-graph
:nodes="data.nodes"
:edges="data.edges"
:layouts="data.layouts"
:paths="paths"
:configs="configs"
/>
</template>2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import { Nodes, Edges, Layouts } from "v-network-graph"
const nodes: Nodes = {
node1: { name: "Node 1" },
node2: { name: "Node 2" },
node3: { name: "Node 3" },
node4: { name: "Node 4" },
node5: { name: "Node 5" },
node6: { name: "Node 6" },
node7: { name: "Node 7" },
node8: { name: "Node 8" },
node9: { name: "Node 9" },
node10: { name: "Node 10" },
}
const edges: Edges = {
edge1: { source: "node1", target: "node2" },
edge2: { source: "node3", target: "node2" },
edge3: { source: "node2", target: "node4" },
edge4: { source: "node2", target: "node4" },
edge5: { source: "node4", target: "node5" },
edge6: { source: "node4", target: "node6" },
edge7: { source: "node5", target: "node7" },
edge8: { source: "node5", target: "node8" },
edge9: { source: "node6", target: "node9" },
edge10: { source: "node6", target: "node10" },
}
const layouts: Layouts = {
nodes: {
node1: { x: 0, y: 0 },
node2: { x: 100, y: 60 },
node3: { x: 0, y: 110 },
node4: { x: 250, y: 60 },
node5: { x: 350, y: 10 },
node6: { x: 350, y: 110 },
node7: { x: 450, y: 10 },
node8: { x: 450, y: 60 },
node9: { x: 450, y: 110 },
node10: { x: 450, y: 160 },
},
}
export default {
nodes,
edges,
layouts,
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
With curved edges
Paths can be drawn on curved edges as well.
<script setup lang="ts">
import * as vNG from "v-network-graph"
import data from "./data"
const paths: vNG.Paths = {
path1: { edges: ["edge1", "edge3", "edge5"] },
path2: { edges: ["edge2", "edge4", "edge6"] },
}
const configs = vNG.defineConfigs({
node: {
normal: {
type: "circle",
radius: 20,
color: "#99ccff",
},
hover: {
color: "#88bbff",
},
label: {
visible: false,
fontSize: 8,
},
},
edge: {
gap: 40,
normal: {
color: "#6699cc",
},
type: "curve",
},
path: {
visible: true,
curveInNode: true,
normal: {
width: 10,
},
},
})
</script>
<template>
<v-network-graph
:nodes="data.nodes"
:edges="data.edges"
:layouts="data.layouts"
:paths="paths"
:configs="configs"
/>
</template>2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import { Nodes, Edges, Layouts } from "v-network-graph"
const nodes: Nodes = {
node1: { name: "Node 1" },
node2: { name: "Node 2" },
node3: { name: "Node 3" },
node4: { name: "Node 4" },
node5: { name: "Node 5" },
node6: { name: "Node 6" },
}
const edges: Edges = {
edge1: { source: "node1", target: "node2" },
edge2: { source: "node3", target: "node2" },
edge3: { source: "node2", target: "node4" },
edge4: { source: "node2", target: "node4" },
edge5: { source: "node4", target: "node5" },
edge6: { source: "node4", target: "node6" },
edge7: { source: "node3", target: "node2" },
edge8: { source: "node4", target: "node5" },
}
const layouts: Layouts = {
nodes: {
node1: { x: 0, y: 0 },
node2: { x: 100, y: 60 },
node3: { x: 0, y: 110 },
node4: { x: 250, y: 60 },
node5: { x: 350, y: 10 },
node6: { x: 350, y: 110 },
node7: { x: 450, y: 10 },
node8: { x: 450, y: 60 },
node9: { x: 450, y: 110 },
node10: { x: 450, y: 160 },
},
}
export default {
nodes,
edges,
layouts,
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
