diff --git a/cypress/integration/rendering/stateDiagram-v2.spec.js b/cypress/integration/rendering/stateDiagram-v2.spec.js index c2490f65f..1b230c56f 100644 --- a/cypress/integration/rendering/stateDiagram-v2.spec.js +++ b/cypress/integration/rendering/stateDiagram-v2.spec.js @@ -347,6 +347,19 @@ describe('State diagram', () => { } ); }); + it('v2 width of compond state should grow with title if title is wider', () => { + imgSnapshotTest( + ` +stateDiagram-v2 + state "Long state name" as NotShooting { + a-->b + } + `, + { + logLevel: 0, + } + ); + }); it('v2 Simplest composite state', () => { imgSnapshotTest( ` diff --git a/cypress/platform/knsv.html b/cypress/platform/knsv.html index bfb1f63a7..cbef7c3a0 100644 --- a/cypress/platform/knsv.html +++ b/cypress/platform/knsv.html @@ -55,7 +55,7 @@ flowchart TD class T TestSub linkStyle 0,1 color:orange, stroke: orange; -
+
%% The width of composite states does not grow with the title stateDiagram-v2 [*] --> Off @@ -67,15 +67,10 @@ stateDiagram-v2 Washing --> Finished Finished --> [*]
-
+
stateDiagram-v2 -state "Not Shooting State" as NotShooting { - state "Configuring mode" as Configuring - [*] --> Idle - Idle : this is a string - Idle : this is another string - Idle --> Configuring : EvConfig - Configuring --> Idle : EvConfig +state "Long state name" as NotShooting { + a-->b }
diff --git a/src/dagre-wrapper/clusters.js b/src/dagre-wrapper/clusters.js index 0451fa263..8f1ad8780 100644 --- a/src/dagre-wrapper/clusters.js +++ b/src/dagre-wrapper/clusters.js @@ -136,18 +136,20 @@ const roundedWithTitle = (parent, node) => { const padding = 0 * node.padding; const halfPadding = padding / 2; + const width = node.width > bbox.width ? node.width : bbox.width + node.padding; + // center the rect around its coordinate rect .attr('class', 'outer') - .attr('x', node.x - node.width / 2 - halfPadding) + .attr('x', node.x - width / 2 - halfPadding) .attr('y', node.y - node.height / 2 - halfPadding) - .attr('width', node.width + padding) + .attr('width', width + padding) .attr('height', node.height + padding); innerRect .attr('class', 'inner') - .attr('x', node.x - node.width / 2 - halfPadding) + .attr('x', node.x - width / 2 - halfPadding) .attr('y', node.y - node.height / 2 - halfPadding + bbox.height - 1) - .attr('width', node.width + padding) + .attr('width', width + padding) .attr('height', node.height + padding - bbox.height - 3); // Center the label