From 903f6fcd54933f49658469c6a8530da32a9edaff Mon Sep 17 00:00:00 2001 From: Chris Huber Date: Wed, 9 Sep 2026 13:09:32 -0400 Subject: [PATCH] fix(php-transformer): honor explicit block flow --- .../src/HtmlToBlocks/Patterns/ColumnsPattern.php | 6 ++++++ .../tests/unit/block-style-support-conversion.php | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/php-transformer/src/HtmlToBlocks/Patterns/ColumnsPattern.php b/php-transformer/src/HtmlToBlocks/Patterns/ColumnsPattern.php index e8ded4d0f..b88303fda 100644 --- a/php-transformer/src/HtmlToBlocks/Patterns/ColumnsPattern.php +++ b/php-transformer/src/HtmlToBlocks/Patterns/ColumnsPattern.php @@ -157,6 +157,12 @@ private function looksLikeColumnsContainer(DOMElement $element, string $resolved return false; } + // Semantic sidebar/content names can suggest a split layout only when + // author CSS does not explicitly retain normal document flow. + if ( preg_match('/(?:^|;)\s*display\s*:\s*(?:block|inline|flow-root|contents)\b/', $style) ) { + return false; + } + // core/columns is a flex layout. Preserve resolved grid containers as // groups so their source classes continue to control track geometry. if ( preg_match('/(?:^|;)\s*display\s*:\s*(?:inline-)?grid\b/', $style) ) { diff --git a/php-transformer/tests/unit/block-style-support-conversion.php b/php-transformer/tests/unit/block-style-support-conversion.php index 59ed1176a..ad29cb9bc 100644 --- a/php-transformer/tests/unit/block-style-support-conversion.php +++ b/php-transformer/tests/unit/block-style-support-conversion.php @@ -295,6 +295,14 @@ $nativeColumnsBlock = $nativeColumnsResult['blocks'][0] ?? array(); $assert('core/columns' === ($nativeColumnsBlock['blockName'] ?? ''), '29: explicit native Columns markup remains core Columns', (string) ($nativeColumnsBlock['blockName'] ?? '(none)')); +$blockFlowSidebarHtml = '
Content
'; +$blockFlowSidebarResult = ( new HtmlTransformer() )->transform($blockFlowSidebarHtml, array('static_css' => '.plain-wrapper{display:block}.lightbox{display:none}'))->toArray(); +$blockFlowSidebarBlock = $blockFlowSidebarResult['blocks'][0] ?? array(); +$blockFlowSidebarMarkup = (string) ($blockFlowSidebarResult['serialized_blocks'] ?? ''); + +$assert('core/group' === ($blockFlowSidebarBlock['blockName'] ?? ''), '29a: explicit block flow overrides semantic sidebar/content column inference', (string) ($blockFlowSidebarBlock['blockName'] ?? '(none)')); +$assert(! str_contains($blockFlowSidebarMarkup, '