diff --git a/php-transformer/src/HtmlToBlocks/Patterns/ColumnsPattern.php b/php-transformer/src/HtmlToBlocks/Patterns/ColumnsPattern.php index e8ded4d0..b88303fd 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 59ed1176..ad29cb9b 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, '