From f7952dcc3aeb91d0ed98a9ef9e4c17ade0b99cc6 Mon Sep 17 00:00:00 2001 From: GotPop Date: Mon, 29 Dec 2025 17:49:10 +0000 Subject: [PATCH 1/4] Adding view transition types --- package.json | 2 +- public/scripts/view-transitions.js | 39 ++++++++++++++++++++++++++++++ src/app/layout.tsx | 1 + yarn.lock | 8 +++--- 4 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 public/scripts/view-transitions.js diff --git a/package.json b/package.json index f1987d9..4c81965 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "@aws-sdk/client-lambda": "^3.940.0", "@gotpop/scripts": "^0.1.7", "@gotpop/storyblok": "^0.1.96", - "@gotpop/system": "^0.1.275", + "@gotpop/system": "^0.1.276", "@storyblok/react": "5.4.20", "next": "^16.0.7", "react": "19.2.0", diff --git a/public/scripts/view-transitions.js b/public/scripts/view-transitions.js new file mode 100644 index 0000000..fd2fbf8 --- /dev/null +++ b/public/scripts/view-transitions.js @@ -0,0 +1,39 @@ +const getTransitionType = (fromUrl, toUrl) => { + try { + const fromPath = new URL(fromUrl).pathname + const toPath = new URL(toUrl).pathname + + const fromPost = fromPath.startsWith("/work/") + const toPost = toPath.startsWith("/work/") + + if (fromPost && toPost) return "post-to-post" + + return null + } catch { + return null + } +} + +const addTransitionType = (event, fromUrl, toUrl) => { + if (!event.viewTransition) return + + const type = getTransitionType(fromUrl, toUrl) + + if (type) { + event.viewTransition.types.add(type) + } +} + +window.addEventListener("pageswap", (event) => { + if (!event.activation) return + + addTransitionType(event, window.location.href, event.activation.entry.url) +}) + +window.addEventListener("pagereveal", (event) => { + const activation = window.navigation?.activation + + if (!activation?.from) return + + addTransitionType(event, activation.from.url, activation.entry.url) +}) diff --git a/src/app/layout.tsx b/src/app/layout.tsx index fc8d40c..bff2414 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -49,6 +49,7 @@ export default function RootLayout({ content="#1a4a5c" media="(prefers-color-scheme: dark)" /> +