From 939da082b2f5d09fd9b8997114aafa53f597a3a7 Mon Sep 17 00:00:00 2001 From: qraqras Date: Sat, 28 Jun 2025 08:18:19 +0000 Subject: [PATCH 1/4] Fix 6633 --- packages/mermaid/src/diagrams/block/layout.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/mermaid/src/diagrams/block/layout.ts b/packages/mermaid/src/diagrams/block/layout.ts index a00e935ac..9daf0b4c1 100644 --- a/packages/mermaid/src/diagrams/block/layout.ts +++ b/packages/mermaid/src/diagrams/block/layout.ts @@ -270,7 +270,11 @@ function layoutBlocks(block: Block, db: BlockDB) { if (child.children) { layoutBlocks(child, db); } - columnPos += child?.widthInColumns ?? 1; + let columnsFilled = child?.widthInColumns ?? 1; + if (columns > 0) { + columnsFilled = Math.min(columnsFilled, columns - (columnPos % columns)); + } + columnPos += columnsFilled; log.debug('abc88 columnsPos', child, columnPos); } } From e073c80019982407bff45f3d5f68a78c0a0a4afa Mon Sep 17 00:00:00 2001 From: Alois Klink Date: Tue, 29 Jul 2025 15:27:10 +0900 Subject: [PATCH 2/4] test(e2e): test block column overflowing Add a test-case for 939da082b (Fix 6633, 2025-06-28), that checks whether overflowing blocks render correctly. --- cypress/integration/rendering/block.spec.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/cypress/integration/rendering/block.spec.js b/cypress/integration/rendering/block.spec.js index 589a30fde..f01d59375 100644 --- a/cypress/integration/rendering/block.spec.js +++ b/cypress/integration/rendering/block.spec.js @@ -384,4 +384,17 @@ describe('Block diagram', () => { {} ); }); + + it('BL30: block should overflow if too wide for columns', () => { + imgSnapshotTest( + `block-beta + columns 2 + fit:2 + overflow:3 + short:1 + also_overflow:2 +`, + {} + ); + }); }); From 8bb29fc879329ad109898e4025b4f4eba2ab0649 Mon Sep 17 00:00:00 2001 From: Alois Klink Date: Tue, 29 Jul 2025 15:31:58 +0900 Subject: [PATCH 3/4] docs(block): add changeset for overflow bug Add a changeset that explains that overflowing blocks no longer create an empty line in block diagrams or cause bugs in later lines. Technically, this is a breaking change since it can change the layout of block diagrams, but this diagram is still in `-beta` and they all will still render correctly. --- .changeset/lovely-queens-own.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .changeset/lovely-queens-own.md diff --git a/.changeset/lovely-queens-own.md b/.changeset/lovely-queens-own.md new file mode 100644 index 000000000..edc8dda2d --- /dev/null +++ b/.changeset/lovely-queens-own.md @@ -0,0 +1,8 @@ +--- +'mermaid': patch +--- + +fix(block): overflowing blocks no longer affect later lines + +This may change the layout of block diagrams that have overflowing lines +(i.e. block diagrams that use up more columns that the `columns` specifier). From b7a591b8d3ddb0867036ea87b5d7bd4523ff047f Mon Sep 17 00:00:00 2001 From: Alois Klink Date: Tue, 29 Jul 2025 15:45:06 +0900 Subject: [PATCH 4/4] docs(block): add clarifying comment for overflow This line is a bit confusing to me, so I thought I should clarify it! See: 939da082b2f5d09fd9b8997114aafa53f597a3a7 --- packages/mermaid/src/diagrams/block/layout.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/mermaid/src/diagrams/block/layout.ts b/packages/mermaid/src/diagrams/block/layout.ts index 9daf0b4c1..ea0de6312 100644 --- a/packages/mermaid/src/diagrams/block/layout.ts +++ b/packages/mermaid/src/diagrams/block/layout.ts @@ -272,6 +272,7 @@ function layoutBlocks(block: Block, db: BlockDB) { } let columnsFilled = child?.widthInColumns ?? 1; if (columns > 0) { + // Make sure overflowing lines do not affect later lines columnsFilled = Math.min(columnsFilled, columns - (columnPos % columns)); } columnPos += columnsFilled;