Skip to content

Commit b9ef683

Browse files
committed
#6856 Exposing elk configuration forceNodeModelOrder and considerModelOrder to the mermaid configuration
1 parent 91d7229 commit b9ef683

File tree

9 files changed

+310
-143
lines changed

9 files changed

+310
-143
lines changed

.changeset/busy-clocks-melt.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@mermaid-js/layout-elk': patch
3+
'mermaid': patch
4+
---
5+
6+
feat: Exposing elk configuration forceNodeModelOrder and considerModelOrder to the mermaid configuration

cypress/platform/knsv2.html

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,22 @@
131131

132132
<body>
133133
<pre id="diagram4" class="mermaid">
134+
---
135+
config:
136+
layout: elk
137+
elk:
138+
mergeEdges: false
139+
forceNodeModelOrder: false
140+
considerModelOrder: NONE
141+
142+
---
143+
flowchart TB
144+
a --> a1 & a2 & a3 & a4
145+
b --> b1 & b2
146+
b2 --> b3
147+
b1 --> b4</pre
148+
>
149+
<pre id="diagram4" class="mermaid">
134150
treemap
135151
"Section 1"
136152
"Leaf 1.1": 12

docs/config/setup/defaultConfig/variables/configKeys.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@
1212

1313
> `const` **configKeys**: `Set`<`string`>
1414
15-
Defined in: [packages/mermaid/src/defaultConfig.ts:290](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/defaultConfig.ts#L290)
15+
Defined in: [packages/mermaid/src/defaultConfig.ts:292](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/defaultConfig.ts#L292)

docs/config/setup/mermaid/interfaces/MermaidConfig.md

Lines changed: 51 additions & 39 deletions
Large diffs are not rendered by default.

packages/mermaid-layout-elk/src/render.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -766,7 +766,10 @@ export const render = async (
766766
id: 'root',
767767
layoutOptions: {
768768
'elk.hierarchyHandling': 'INCLUDE_CHILDREN',
769-
'elk.layered.considerModelOrder.strategy': 'NODES_AND_EDGES',
769+
'elk.layered.crossingMinimization.forceNodeModelOrder':
770+
data4Layout.config.elk?.forceNodeModelOrder,
771+
'elk.layered.considerModelOrder.strategy': data4Layout.config.elk?.considerModelOrder,
772+
770773
'elk.algorithm': algorithm,
771774
'nodePlacement.strategy': data4Layout.config.elk?.nodePlacementStrategy,
772775
'elk.layered.mergeEdges': data4Layout.config.elk?.mergeEdges,

packages/mermaid/src/config.type.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,16 @@ export interface MermaidConfig {
109109
| 'INTERACTIVE'
110110
| 'MODEL_ORDER'
111111
| 'GREEDY_MODEL_ORDER';
112+
/**
113+
* The node order given by the model does not change to produce a better layout. E.g. if node A is before node B in the model this is not changed during crossing minimization. This assumes that the node model order is already respected before crossing minimization. This can be achieved by setting considerModelOrder.strategy to NODES_AND_EDGES.
114+
*
115+
*/
116+
forceNodeModelOrder?: boolean;
117+
/**
118+
* Preserves the order of nodes and edges in the model file if this does not lead to additional edge crossings. Depending on the strategy this is not always possible since the node and edge order might be conflicting.
119+
*
120+
*/
121+
considerModelOrder?: 'NONE' | 'NODES_AND_EDGES' | 'PREFER_EDGES' | 'PREFER_NODES';
112122
};
113123
darkMode?: boolean;
114124
htmlLabels?: boolean;

packages/mermaid/src/defaultConfig.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ const config: RequiredDeep<MermaidConfig> = {
2424
// mergeEdges is needed here to be considered
2525
mergeEdges: false,
2626
nodePlacementStrategy: 'BRANDES_KOEPF',
27+
forceNodeModelOrder: false,
28+
considerModelOrder: 'NODES_AND_EDGES',
2729
},
2830
themeCSS: undefined,
2931

packages/mermaid/src/schemas/config.schema.yaml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,21 @@ properties:
133133
- MODEL_ORDER
134134
- GREEDY_MODEL_ORDER
135135
default: GREEDY_MODEL_ORDER
136+
forceNodeModelOrder:
137+
description: |
138+
The node order given by the model does not change to produce a better layout. E.g. if node A is before node B in the model this is not changed during crossing minimization. This assumes that the node model order is already respected before crossing minimization. This can be achieved by setting considerModelOrder.strategy to NODES_AND_EDGES.
139+
type: boolean
140+
default: false
141+
considerModelOrder:
142+
description: |
143+
Preserves the order of nodes and edges in the model file if this does not lead to additional edge crossings. Depending on the strategy this is not always possible since the node and edge order might be conflicting.
144+
type: string
145+
enum:
146+
- NONE
147+
- NODES_AND_EDGES
148+
- PREFER_EDGES
149+
- PREFER_NODES
150+
default: 'NODES_AND_EDGES'
136151
darkMode:
137152
type: boolean
138153
default: false

0 commit comments

Comments
 (0)