From effed1c3cf7706203ea592c0df691f9b67fa3877 Mon Sep 17 00:00:00 2001 From: Ajay Ghanwat Date: Wed, 12 Aug 2026 21:11:22 +0530 Subject: [PATCH] fix(styles): synchronize accent across open apps --- packages/cli/package.json | 2 +- packages/dev-server/package.json | 2 +- packages/styles/package.json | 2 +- packages/styles/src/theme.ts | 15 +++++++++++++++ packages/styles/test/theme-accent.test.ts | 2 ++ 5 files changed, 20 insertions(+), 3 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index 8e23afb3..959fda4e 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/cli", - "version": "0.8.26", + "version": "0.8.27", "type": "module", "main": "src/index.ts", "exports": { diff --git a/packages/dev-server/package.json b/packages/dev-server/package.json index da8da609..631ad537 100644 --- a/packages/dev-server/package.json +++ b/packages/dev-server/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/dev-server", - "version": "0.8.25", + "version": "0.8.26", "type": "module", "main": "src/index.ts", "exports": { diff --git a/packages/styles/package.json b/packages/styles/package.json index 95a4f61c..642443b0 100644 --- a/packages/styles/package.json +++ b/packages/styles/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/styles", - "version": "0.8.11", + "version": "0.8.12", "type": "module", "main": "src/index.ts", "exports": { diff --git a/packages/styles/src/theme.ts b/packages/styles/src/theme.ts index b226591e..5f1ec4e6 100644 --- a/packages/styles/src/theme.ts +++ b/packages/styles/src/theme.ts @@ -745,6 +745,17 @@ export function renderThemeRuntime(theme: ResolvedTheme): string { window.dispatchEvent(new CustomEvent("wrnexus:accent-changed",{detail:{accent:null}})); } + function syncSharedAccent(){ + var cookieAccent=readCookie(ACCENT_COOKIE); + var next=cookieAccent&&ACCENTS.indexOf(cookieAccent)>=0?cookieAccent:DEFAULT_ACCENT; + var current=el.getAttribute("data-accent"); + if(next===current)return; + if(next)el.setAttribute("data-accent",next);else el.removeAttribute("data-accent"); + syncStylesheet(getTheme(),next); + syncAccentButtons(document); + window.dispatchEvent(new CustomEvent("wrnexus:accent-changed",{detail:{accent:next}})); + } + function bind(root){ var target=root||document; @@ -803,6 +814,10 @@ export function renderThemeRuntime(theme: ResolvedTheme): string { }; window.addEventListener("wrnexus:navigated",function(){bind(document);}); + window.addEventListener("focus",syncSharedAccent); + window.addEventListener("pageshow",syncSharedAccent); + document.addEventListener("visibilitychange",function(){if(!document.hidden)syncSharedAccent();}); + window.setInterval(syncSharedAccent,1000); if(document.readyState==="loading"){ document.addEventListener("DOMContentLoaded",function(){bind(document);}); }else{ diff --git a/packages/styles/test/theme-accent.test.ts b/packages/styles/test/theme-accent.test.ts index d78b9a74..0771c46c 100644 --- a/packages/styles/test/theme-accent.test.ts +++ b/packages/styles/test/theme-accent.test.ts @@ -58,6 +58,8 @@ describe("theme accents", () => { expect(runtime).toContain('"domain":"localhost"'); expect(runtime).toContain("deleteCookie(ACCENT_COOKIE);"); expect(runtime).toContain("writeCookie(ACCENT_COOKIE,name,ACCENT_COOKIE_OPTIONS)"); + expect(runtime).toContain('window.addEventListener("focus",syncSharedAccent)'); + expect(runtime).toContain("window.setInterval(syncSharedAccent,1000)"); }); }); test("live document accent has priority over cookie and default", () => {