diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/diagram/ElkDiagramRenderer.java b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/diagram/ElkDiagramRenderer.java index 4ad8fbdc..b995bd4e 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/diagram/ElkDiagramRenderer.java +++ b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/diagram/ElkDiagramRenderer.java @@ -326,6 +326,7 @@ public class ElkDiagramRenderer implements DiagramRenderer { */ private void postProcessDoTrySections(LayoutContext ctx) { for (Map.Entry> entry : ctx.doTrySectionOrder.entrySet()) { + String doTryId = entry.getKey(); List orderedIds = entry.getValue(); List sections = new ArrayList<>(); for (String id : orderedIds) { @@ -334,18 +335,29 @@ public class ElkDiagramRenderer implements DiagramRenderer { } if (sections.size() < 2) continue; + // Left-align all sections and stack vertically double startY = sections.stream().mapToDouble(ElkNode::getY).min().orElse(0); double spacing = 20; double currentY = startY; for (ElkNode section : sections) { + section.setX(COMPOUND_SIDE_PADDING); section.setY(currentY); currentY += section.getHeight() + spacing; } + // Uniform width double maxWidth = sections.stream().mapToDouble(ElkNode::getWidth).max().orElse(0); for (ElkNode section : sections) { section.setWidth(maxWidth); } + + // Shrink DO_TRY parent height to fit its content + ElkNode doTryNode = ctx.elkNodeMap.get(doTryId); + if (doTryNode != null) { + double contentBottom = currentY - spacing + COMPOUND_SIDE_PADDING; + doTryNode.setHeight(contentBottom); + doTryNode.setWidth(maxWidth + 2 * COMPOUND_SIDE_PADDING); + } } }