From 8fe75604df27b6e4758e0aa02cf6076e14933f6c Mon Sep 17 00:00:00 2001
From: Martin Trapp <94928215+martrapp@users.noreply.github.com>
Date: Wed, 14 Aug 2024 15:23:33 +0200
Subject: [PATCH 1/8] extend virtual module astro:transitions/client to exports
swapFunctions
---
.changeset/new-monkeys-sit.md | 5 +++++
packages/astro/client.d.ts | 2 ++
packages/astro/src/transitions/swap-functions.ts | 9 +++++++++
.../astro/src/transitions/vite-plugin-transitions.ts | 1 +
.../src/virtual-modules/transitions-swap-functions.ts | 1 +
5 files changed, 18 insertions(+)
create mode 100644 .changeset/new-monkeys-sit.md
create mode 100644 packages/astro/src/virtual-modules/transitions-swap-functions.ts
diff --git a/.changeset/new-monkeys-sit.md b/.changeset/new-monkeys-sit.md
new file mode 100644
index 000000000000..911ebfaa29ea
--- /dev/null
+++ b/.changeset/new-monkeys-sit.md
@@ -0,0 +1,5 @@
+---
+'astro': patch
+---
+
+Extends `astro:transitions/client` with `swapFunctions`, which provides building blocks for custom swap functions.
diff --git a/packages/astro/client.d.ts b/packages/astro/client.d.ts
index ed5c1b894d28..11bb35cd783a 100644
--- a/packages/astro/client.d.ts
+++ b/packages/astro/client.d.ts
@@ -150,6 +150,8 @@ declare module 'astro:transitions/client' {
import('./dist/virtual-modules/transitions-events.js').TransitionBeforeSwapEvent;
export const isTransitionBeforePreparationEvent: EventModule['isTransitionBeforePreparationEvent'];
export const isTransitionBeforeSwapEvent: EventModule['isTransitionBeforeSwapEvent'];
+ type TransitionSwapFunctionModule = typeof import('./dist/virtual-modules/transitions-swap-functions.js');
+ export const swapFunctions: TransitionSwapFunctionModule['swapFunctions']
}
declare module 'astro:prefetch' {
diff --git a/packages/astro/src/transitions/swap-functions.ts b/packages/astro/src/transitions/swap-functions.ts
index 4c8db82eef90..e69842fa1a3f 100644
--- a/packages/astro/src/transitions/swap-functions.ts
+++ b/packages/astro/src/transitions/swap-functions.ts
@@ -133,6 +133,15 @@ const shouldCopyProps = (el: HTMLElement): boolean => {
return persistProps == null || persistProps === 'false';
};
+export const swapFunctions = {
+ deselectScripts,
+ swapRootAttributes,
+ swapHeadElements,
+ swapBodyElement,
+ saveFocus,
+ restoreFocus,
+};
+
export const swap = (doc: Document) => {
deselectScripts(doc);
swapRootAttributes(doc);
diff --git a/packages/astro/src/transitions/vite-plugin-transitions.ts b/packages/astro/src/transitions/vite-plugin-transitions.ts
index d88c96f8919f..547ef3f38af0 100644
--- a/packages/astro/src/transitions/vite-plugin-transitions.ts
+++ b/packages/astro/src/transitions/vite-plugin-transitions.ts
@@ -42,6 +42,7 @@ export default function astroTransitions({ settings }: { settings: AstroSettings
TRANSITION_BEFORE_SWAP, isTransitionBeforeSwapEvent, TransitionBeforeSwapEvent,
TRANSITION_AFTER_SWAP, TRANSITION_PAGE_LOAD
} from "astro/virtual-modules/transitions-events.js";
+ export { swapFunctions } from "astro/virtual-modules/transitions-swap-functions.js";
`;
}
},
diff --git a/packages/astro/src/virtual-modules/transitions-swap-functions.ts b/packages/astro/src/virtual-modules/transitions-swap-functions.ts
new file mode 100644
index 000000000000..5947533e3d02
--- /dev/null
+++ b/packages/astro/src/virtual-modules/transitions-swap-functions.ts
@@ -0,0 +1 @@
+export * from '../transitions/swap-functions.js';
From b9c5c8e4264bb382db03b49bc732066d0ad473d8 Mon Sep 17 00:00:00 2001
From: Martin Trapp <94928215+martrapp@users.noreply.github.com>
Date: Wed, 14 Aug 2024 16:53:20 +0200
Subject: [PATCH 2/8] use virtual module in e2e tests
---
.../src/pages/keep-style-one.astro | 12 ++++++------
.../src/pages/keep-theme-one.astro | 12 ++++++------
.../src/pages/replace-main-one.astro | 14 +++++++-------
packages/astro/e2e/view-transitions.test.js | 2 +-
4 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/packages/astro/e2e/fixtures/view-transitions/src/pages/keep-style-one.astro b/packages/astro/e2e/fixtures/view-transitions/src/pages/keep-style-one.astro
index 413a404d76fe..f71898d8153f 100644
--- a/packages/astro/e2e/fixtures/view-transitions/src/pages/keep-style-one.astro
+++ b/packages/astro/e2e/fixtures/view-transitions/src/pages/keep-style-one.astro
@@ -7,22 +7,22 @@ import Layout from '../components/Layout.astro';
diff --git a/packages/astro/e2e/fixtures/view-transitions/src/pages/keep-theme-one.astro b/packages/astro/e2e/fixtures/view-transitions/src/pages/keep-theme-one.astro
index a4c942d587f2..18ae0221fc65 100644
--- a/packages/astro/e2e/fixtures/view-transitions/src/pages/keep-theme-one.astro
+++ b/packages/astro/e2e/fixtures/view-transitions/src/pages/keep-theme-one.astro
@@ -6,18 +6,18 @@ import Layout from '../components/Layout.astro';
go to next page