From 71337304965425820e81cc27d54b95d23033c017 Mon Sep 17 00:00:00 2001 From: thelazylama <67310144+thelazylamaGit@users.noreply.github.com> Date: Mon, 10 Aug 2026 18:16:37 +1000 Subject: [PATCH] fix(transitions): preserve CSS HMR across ClientRouter navigations (#17612) * Preserve Vite style HMR across ClientRouter navigations * add changeset * lint fix * Address Reviewer Notes * cover updated Vite style contents with test * update comment pr reference * Improve Comments --------- Co-authored-by: Martin Trapp <94928215+martrapp@users.noreply.github.com> --- .changeset/bright-styles-return.md | 5 ++ .../src/components/SvelteMessage.svelte | 7 ++ .../src/components/SvelteStyleParent.svelte | 5 ++ .../src/components/client-router-hmr.css | 3 + .../src/pages/island-svelte-one.astro | 4 ++ .../src/pages/island-svelte-two.astro | 1 + .../view-transitions/src/pages/one.astro | 1 + packages/astro/e2e/view-transitions.test.ts | 65 +++++++++++++++++++ .../astro/src/transitions/swap-functions.ts | 65 +++++++++++++++---- 9 files changed, 142 insertions(+), 14 deletions(-) create mode 100644 .changeset/bright-styles-return.md create mode 100644 packages/astro/e2e/fixtures/view-transitions/src/components/SvelteMessage.svelte create mode 100644 packages/astro/e2e/fixtures/view-transitions/src/components/SvelteStyleParent.svelte create mode 100644 packages/astro/e2e/fixtures/view-transitions/src/components/client-router-hmr.css diff --git a/.changeset/bright-styles-return.md b/.changeset/bright-styles-return.md new file mode 100644 index 000000000000..58349ca743a7 --- /dev/null +++ b/.changeset/bright-styles-return.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Fixes CSS hot module replacement after navigating between pages with `ClientRouter` diff --git a/packages/astro/e2e/fixtures/view-transitions/src/components/SvelteMessage.svelte b/packages/astro/e2e/fixtures/view-transitions/src/components/SvelteMessage.svelte new file mode 100644 index 000000000000..1b8315433244 --- /dev/null +++ b/packages/astro/e2e/fixtures/view-transitions/src/components/SvelteMessage.svelte @@ -0,0 +1,7 @@ +

Nested component

+ + diff --git a/packages/astro/e2e/fixtures/view-transitions/src/components/SvelteStyleParent.svelte b/packages/astro/e2e/fixtures/view-transitions/src/components/SvelteStyleParent.svelte new file mode 100644 index 000000000000..17d195b143db --- /dev/null +++ b/packages/astro/e2e/fixtures/view-transitions/src/components/SvelteStyleParent.svelte @@ -0,0 +1,5 @@ + + + diff --git a/packages/astro/e2e/fixtures/view-transitions/src/components/client-router-hmr.css b/packages/astro/e2e/fixtures/view-transitions/src/components/client-router-hmr.css new file mode 100644 index 000000000000..7fadba97a150 --- /dev/null +++ b/packages/astro/e2e/fixtures/view-transitions/src/components/client-router-hmr.css @@ -0,0 +1,3 @@ +#island-one { + color: blue; +} diff --git a/packages/astro/e2e/fixtures/view-transitions/src/pages/island-svelte-one.astro b/packages/astro/e2e/fixtures/view-transitions/src/pages/island-svelte-one.astro index c60dfa9c9d10..b71cfb18dd3c 100644 --- a/packages/astro/e2e/fixtures/view-transitions/src/pages/island-svelte-one.astro +++ b/packages/astro/e2e/fixtures/view-transitions/src/pages/island-svelte-one.astro @@ -1,11 +1,15 @@ --- import Counter from '../components/SvelteCounter.svelte'; +import StyleParent from '../components/SvelteStyleParent.svelte'; import Layout from '../components/Layout.astro'; +import '../components/client-router-hmr.css'; export const prerender = false; ---

Page 1

go to 2 + leave route +
diff --git a/packages/astro/e2e/fixtures/view-transitions/src/pages/island-svelte-two.astro b/packages/astro/e2e/fixtures/view-transitions/src/pages/island-svelte-two.astro index 63222bacbc39..8c0499375cc8 100644 --- a/packages/astro/e2e/fixtures/view-transitions/src/pages/island-svelte-two.astro +++ b/packages/astro/e2e/fixtures/view-transitions/src/pages/island-svelte-two.astro @@ -1,6 +1,7 @@ --- import Counter from '../components/SvelteCounter.svelte'; import Layout from '../components/Layout.astro'; +import '../components/client-router-hmr.css'; export const prerender = false; --- diff --git a/packages/astro/e2e/fixtures/view-transitions/src/pages/one.astro b/packages/astro/e2e/fixtures/view-transitions/src/pages/one.astro index eee063b6d416..05c3c8b7fdd6 100644 --- a/packages/astro/e2e/fixtures/view-transitions/src/pages/one.astro +++ b/packages/astro/e2e/fixtures/view-transitions/src/pages/one.astro @@ -17,6 +17,7 @@ import Layout from '../components/Layout.astro'; go to undefined page go to inline module go to Vue scoped styles + go to Svelte styles