From e166bb8cd03c92cf137ffcdd46be429704b53083 Mon Sep 17 00:00:00 2001 From: David Date: Mon, 10 Aug 2026 23:02:34 +0200 Subject: [PATCH 1/2] Preserve client-injected styles via data-wp-router-managed --- .../e2e-tests/plugins/interactive-blocks.php | 7 + .../router-styles-managed/block.json | 16 + .../router-styles-managed/render.php | 111 +++++ .../router-managed-styles.php | 88 ++++ .../router-styles-managed/style-from-link.css | 3 + .../router-styles-managed/style-injected.css | 8 + .../router-styles-managed/style.css | 3 + .../router-styles-managed/view.asset.php | 9 + .../router-styles-managed/view.js | 24 + packages/interactivity-router/CHANGELOG.md | 3 + .../interactivity-router/src/assets/styles.ts | 157 ++++++- .../src/assets/test/styles.test.ts | 410 ++++++++++++++++++ packages/interactivity-router/src/index.ts | 18 +- .../router-styles-managed.spec.ts | 326 ++++++++++++++ 14 files changed, 1173 insertions(+), 10 deletions(-) create mode 100644 packages/e2e-tests/plugins/interactive-blocks/router-styles-managed/block.json create mode 100644 packages/e2e-tests/plugins/interactive-blocks/router-styles-managed/render.php create mode 100644 packages/e2e-tests/plugins/interactive-blocks/router-styles-managed/router-managed-styles.php create mode 100644 packages/e2e-tests/plugins/interactive-blocks/router-styles-managed/style-from-link.css create mode 100644 packages/e2e-tests/plugins/interactive-blocks/router-styles-managed/style-injected.css create mode 100644 packages/e2e-tests/plugins/interactive-blocks/router-styles-managed/style.css create mode 100644 packages/e2e-tests/plugins/interactive-blocks/router-styles-managed/view.asset.php create mode 100644 packages/e2e-tests/plugins/interactive-blocks/router-styles-managed/view.js create mode 100644 test/e2e/specs/interactivity/router-styles-managed.spec.ts diff --git a/packages/e2e-tests/plugins/interactive-blocks.php b/packages/e2e-tests/plugins/interactive-blocks.php index fe40ae10d4c05e..f9a089a78e0dfc 100644 --- a/packages/e2e-tests/plugins/interactive-blocks.php +++ b/packages/e2e-tests/plugins/interactive-blocks.php @@ -7,6 +7,13 @@ * @package gutenberg-test-interactive-blocks */ +/* + * Simulates the WordPress core feature that marks the style assets managed by + * the Interactivity API router, which is not available in the WordPress + * version bundled with `wp-env`. + */ +require_once __DIR__ . '/interactive-blocks/router-styles-managed/router-managed-styles.php'; + add_action( 'init', function () { diff --git a/packages/e2e-tests/plugins/interactive-blocks/router-styles-managed/block.json b/packages/e2e-tests/plugins/interactive-blocks/router-styles-managed/block.json new file mode 100644 index 00000000000000..bd7a3eee44b060 --- /dev/null +++ b/packages/e2e-tests/plugins/interactive-blocks/router-styles-managed/block.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "test/router-styles-managed", + "title": "E2E Interactivity tests - router styles - Managed wrapper", + "category": "text", + "icon": "heart", + "description": "", + "supports": { + "interactivity": true + }, + "textdomain": "e2e-interactivity", + "viewScriptModule": "file:./view.js", + "viewStyle": "file:./style.css", + "render": "file:./render.php" +} diff --git a/packages/e2e-tests/plugins/interactive-blocks/router-styles-managed/render.php b/packages/e2e-tests/plugins/interactive-blocks/router-styles-managed/render.php new file mode 100644 index 00000000000000..81d81ae99de290 --- /dev/null +++ b/packages/e2e-tests/plugins/interactive-blocks/router-styles-managed/render.php @@ -0,0 +1,111 @@ + +
> + +
+ Styles from inner block styles +

Red

+

Green

+

Blue

+
+ + +
+ Styles from this block's own assets + +

Managed from inline

+
+ + +
+ Targets for client-injected styles +

Injected

+ +
+ + + + + + + + +
+ +
+ + + + + + +
diff --git a/packages/e2e-tests/plugins/interactive-blocks/router-styles-managed/router-managed-styles.php b/packages/e2e-tests/plugins/interactive-blocks/router-styles-managed/router-managed-styles.php new file mode 100644 index 00000000000000..c14b8d6fd3b66f --- /dev/null +++ b/packages/e2e-tests/plugins/interactive-blocks/router-styles-managed/router-managed-styles.php @@ -0,0 +1,88 @@ +` and `` element + * it renders with an empty `data-wp-router-managed` attribute, so the router + * can tell them apart from the style assets injected at runtime by scripts + * unaware of it. That feature is not available in the WordPress version + * bundled with `wp-env`, so this file reproduces it with an output buffer for + * those pages containing the `test/router-styles-managed` block. + * + * @package gutenberg-test-interactive-blocks + */ + +/** + * Adds the `data-wp-router-managed` attribute to every style asset in the + * passed HTML. + * + * Style elements inside `