diff --git a/composer.lock b/composer.lock
index b0751d5..24a79fe 100644
--- a/composer.lock
+++ b/composer.lock
@@ -726,12 +726,12 @@
"source": {
"type": "git",
"url": "https://github.com/chubes4/html-to-blocks-converter.git",
- "reference": "5afe78315a77ccae5ddef74e5967e476aa7a615d"
+ "reference": "c4f9418c8fbf5d13ebf619f654a7209ea05f7989"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/chubes4/html-to-blocks-converter/zipball/5afe78315a77ccae5ddef74e5967e476aa7a615d",
- "reference": "5afe78315a77ccae5ddef74e5967e476aa7a615d",
+ "url": "https://api.github.com/repos/chubes4/html-to-blocks-converter/zipball/c4f9418c8fbf5d13ebf619f654a7209ea05f7989",
+ "reference": "c4f9418c8fbf5d13ebf619f654a7209ea05f7989",
"shasum": ""
},
"require": {
@@ -759,7 +759,7 @@
"source": "https://github.com/chubes4/html-to-blocks-converter/tree/main",
"issues": "https://github.com/chubes4/html-to-blocks-converter/issues"
},
- "time": "2026-06-07T18:18:54+00:00"
+ "time": "2026-06-07T19:43:57+00:00"
},
{
"name": "fidry/console",
diff --git a/vendor_prefixed/chubes4/html-to-blocks-converter/includes/class-transform-registry.php b/vendor_prefixed/chubes4/html-to-blocks-converter/includes/class-transform-registry.php
index bfb6de9..8db4398 100644
--- a/vendor_prefixed/chubes4/html-to-blocks-converter/includes/class-transform-registry.php
+++ b/vendor_prefixed/chubes4/html-to-blocks-converter/includes/class-transform-registry.php
@@ -876,6 +876,10 @@ private static function get_button_transforms()
return self::is_static_visual_button_container($element);
}, 'transform' => function ($element) {
return self::create_static_visual_button_group($element);
+ }), array('blockName' => 'core/group', 'priority' => 8, 'selector' => 'button', 'isMatch' => function ($element) {
+ return self::is_static_toggle_button_chrome($element);
+ }, 'transform' => function ($element) {
+ return self::create_static_toggle_button_group($element);
}), array('blockName' => 'core/paragraph', 'priority' => 8, 'selector' => 'button', 'isMatch' => function ($element) {
return self::is_static_navigation_toggle_button($element);
}, 'transform' => function ($element) {
@@ -1070,6 +1074,55 @@ private static function is_static_visual_button($element): bool
$class_name = $element->has_attribute('class') ? $element->get_attribute('class') : '';
return \preg_match('/(?:^|[-_\s])(?:tabs?|chips?|filters?|pills?|segmented|selector|use[-_]?case)(?:$|[-_\s])/i', $class_name) === 1;
}
+ /**
+ * Checks whether a button is inert navigation toggle chrome.
+ *
+ * @param HTML_To_Blocks_HTML_Element $element Element to inspect.
+ * @return bool True when the button can safely become native visual chrome.
+ */
+ private static function is_static_toggle_button_chrome($element): bool
+ {
+ if ('BUTTON' !== $element->get_tag_name()) {
+ return \false;
+ }
+ if ($element->has_attribute('form') || $element->has_attribute('name') || $element->has_attribute('value')) {
+ return \false;
+ }
+ $type = \strtolower(\trim((string) ($element->get_attribute('type') ?? '')));
+ if ('' !== $type && 'button' !== $type) {
+ return \false;
+ }
+ $class_name = $element->has_attribute('class') ? $element->get_attribute('class') : '';
+ if (\preg_match('/(?:^|[-_\s])(?:nav[-_\s]?toggle|menu[-_\s]?toggle|hamburger)(?:$|[-_\s])/i', $class_name) !== 1) {
+ return \false;
+ }
+ $children = $element->get_child_elements();
+ if (empty($children)) {
+ return \trim($element->get_text_content()) === '';
+ }
+ foreach ($children as $child) {
+ if (!\in_array($child->get_tag_name(), array('SPAN', 'DIV'), \true)) {
+ return \false;
+ }
+ if (self::is_empty_element($child)) {
+ continue;
+ }
+ if (!self::class_matches($child, '/(?:^|\s)sr-only(?:\s|$)/i') || array() !== $child->get_child_elements()) {
+ return \false;
+ }
+ }
+ return \true;
+ }
+ /**
+ * Creates native visual chrome for an inert navigation toggle button.
+ *
+ * @param HTML_To_Blocks_HTML_Element $element Button element.
+ * @return array Block array.
+ */
+ private static function create_static_toggle_button_group($element): array
+ {
+ return HTML_To_Blocks_Block_Factory::create_block('core/group', self::get_common_layout_attributes($element));
+ }
/**
* Creates a native group from a static visual button row.
*
diff --git a/vendor_prefixed/chubes4/html-to-blocks-converter/tests/smoke-static-site-chrome.php b/vendor_prefixed/chubes4/html-to-blocks-converter/tests/smoke-static-site-chrome.php
index 1058006..e103d38 100644
--- a/vendor_prefixed/chubes4/html-to-blocks-converter/tests/smoke-static-site-chrome.php
+++ b/vendor_prefixed/chubes4/html-to-blocks-converter/tests/smoke-static-site-chrome.php
@@ -173,6 +173,19 @@ function html_to_blocks_smoke_block_names(array $blocks): array
$assert(\str_contains($salt_star_serialized, 'href="#our-bakes"'), 'salt-star-nav-preserves-our-bakes-href', $salt_star_serialized);
$assert(\str_contains($salt_star_serialized, 'href="#visit"'), 'salt-star-nav-preserves-visit-href', $salt_star_serialized);
$assert(\str_contains($salt_star_serialized, 'href="#order"'), 'salt-star-nav-preserves-order-href', $salt_star_serialized);
+$restaurant_nav_html = <<
+ Ember & RyeWood-Fired Pizza
+
+