diff --git a/cypress/platform/knsv-pos.html b/cypress/platform/knsv-pos.html index ce54d42d9..b53598ff4 100644 --- a/cypress/platform/knsv-pos.html +++ b/cypress/platform/knsv-pos.html @@ -105,6 +105,12 @@ stateDiagram S:Stillas T:Tiger U:Ulv + state Z { + state X { + Y:Ypsilon + } + } + A S --> T: angrepp T --> U: Apa @@ -116,7 +122,11 @@ stateDiagram S: { x: 0, y: 0 }, T: { x: 100, y: 100, width: 100, height: 100 }, U: { x: 200, y: 200 }, - V: { x: 300, y: 100 }, + V: { x: 300, y: 120 }, + Z: { x: 300, y: 10, width: 160, height: 100 }, + X: { x: 300, y: 20, width: 80, height: 60 }, + Y: { x: 300, y: 30, width: 50, height: 20 }, + A: { x: 300, y: 75, width: 20, height: 20 }, }, edges: { edge0: { diff --git a/cypress/platform/knsv2.html b/cypress/platform/knsv2.html index e4d904528..74ea91eb6 100644 --- a/cypress/platform/knsv2.html +++ b/cypress/platform/knsv2.html @@ -211,7 +211,7 @@ stateDiagram end note -
+    
 stateDiagram-v2
     direction LR
     [*] --> Active
@@ -237,9 +237,9 @@ stateDiagram-v2
         handdrawnSeed: 12,
         look: 'handdrawn',
         'elk.nodePlacement.strategy': 'NETWORK_SIMPLEX',
-        // layout: 'dagre',
+        layout: 'dagre',
         // layout: 'elk',
-        layout: 'fixed',
+        // layout: 'fixed',
         flowchart: { titleTopMargin: 10 },
         // fontFamily: 'Caveat',
         fontFamily: 'Kalam',
diff --git a/packages/mermaid/package.json b/packages/mermaid/package.json
index 5dbc9ee43..6897374f0 100644
--- a/packages/mermaid/package.json
+++ b/packages/mermaid/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@mermaid-chart/mermaid",
-  "version": "11.0.0-beta.6",
+  "version": "11.0.0-beta.9",
   "description": "Markdown-ish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.",
   "type": "module",
   "module": "./dist/mermaid.core.mjs",
diff --git a/packages/mermaid/src/rendering-util/layout-algorithms/fixed/index.js b/packages/mermaid/src/rendering-util/layout-algorithms/fixed/index.js
index 2691e7f3d..510df2855 100644
--- a/packages/mermaid/src/rendering-util/layout-algorithms/fixed/index.js
+++ b/packages/mermaid/src/rendering-util/layout-algorithms/fixed/index.js
@@ -16,7 +16,11 @@ import {
   clear as clearNodes,
   setNodeElem,
 } from '../../rendering-elements/nodes.js';
-import { insertCluster, clear as clearClusters } from '../../rendering-elements/clusters.js';
+import {
+  insertCluster,
+  clear as clearClusters,
+  positionCluster,
+} from '../../rendering-elements/clusters.js';
 import {
   insertEdgeLabel,
   positionEdgeLabel,
@@ -53,15 +57,28 @@ const doRender = async (_elem, data4Layout, siteConfig, positions) => {
   const nodeDB = {};
   await Promise.all(
     data4Layout.nodes.map(async function (node) {
+      let pos;
       if (node.x === undefined || node.y === undefined) {
-        const pos = positions.nodes[node.id];
-        node.x = pos?.x || 0;
-        node.y = pos?.y || 0;
+        pos = positions.nodes[node.id];
         node.height = pos?.height || 0;
         node.width = pos?.width || 0;
       }
-
-      await insertNode(nodes, node, 'TB');
+      if (node.isGroup) {
+        node.x = 0;
+        node.y = 0;
+        await insertCluster(nodes, node, 'TB');
+        // Don't set the coordinates before they "layout", this will mess up the positioning
+        if (pos) {
+          node.x = pos?.x || 0;
+          node.y = pos?.y || 0;
+        }
+      } else {
+        if (pos) {
+          node.x = pos?.x || 0;
+          node.y = pos?.y || 0;
+        }
+        await insertNode(nodes, node, 'TB');
+      }
       nodeDB[node.id] = node;
     })
   );
@@ -79,7 +96,11 @@ const doRender = async (_elem, data4Layout, siteConfig, positions) => {
   // Position the nodes
   await Promise.all(
     data4Layout.nodes.map(async function (node) {
-      positionNode(node);
+      if (node.isGroup) {
+        positionCluster(node);
+      } else {
+        positionNode(node);
+      }
     })
   );
 
diff --git a/packages/mermaid/src/rendering-util/rendering-elements/clusters.js b/packages/mermaid/src/rendering-util/rendering-elements/clusters.js
index a4b8f896d..db60f8d5c 100644
--- a/packages/mermaid/src/rendering-util/rendering-elements/clusters.js
+++ b/packages/mermaid/src/rendering-util/rendering-elements/clusters.js
@@ -327,8 +327,20 @@ export const clear = () => {
 };
 
 export const positionCluster = (node) => {
-  log.info('Position cluster (' + node.id + ', ' + node.x + ', ' + node.y + ')');
+  log.info(
+    'Position cluster (' +
+      node.id +
+      ', ' +
+      node.x +
+      ', ' +
+      node.y +
+      ') (' +
+      node?.width +
+      ', ' +
+      node?.height +
+      ')',
+    clusterElems[node.id]
+  );
   const el = clusterElems[node.id];
-
-  el.attr('transform', 'translate(' + node.x + ', ' + node.y + ')');
+  el.cluster.attr('transform', 'translate(' + node.x + ', ' + node.y + ')');
 };