From b3648c5bb4d55310e33d85b64bfdc8dc4a6f21e8 Mon Sep 17 00:00:00 2001 From: AI Studio Date: Fri, 15 May 2026 18:41:57 +0000 Subject: [PATCH] feat/fix: improve responsive constraints & add live ThemeListener --- Template-01/src/App.tsx | 4 +- .../src/components/layout/ThemeListener.tsx | 50 +++++++++++++++++++ Template-01/src/index.css | 11 ++++ Template-02/src/App.tsx | 4 +- .../src/components/layout/ThemeListener.tsx | 50 +++++++++++++++++++ Template-02/src/index.css | 11 ++++ 6 files changed, 128 insertions(+), 2 deletions(-) create mode 100644 Template-01/src/components/layout/ThemeListener.tsx create mode 100644 Template-02/src/components/layout/ThemeListener.tsx diff --git a/Template-01/src/App.tsx b/Template-01/src/App.tsx index b6dbee9..9e2e15a 100644 --- a/Template-01/src/App.tsx +++ b/Template-01/src/App.tsx @@ -1,3 +1,4 @@ +import { ThemeListener } from './components/layout/ThemeListener'; import React from 'react'; import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; import { Navbar } from './components/layout/Navbar'; @@ -16,8 +17,9 @@ import { Contact } from './pages/Contact'; export default function App() { return ( + -
+
diff --git a/Template-01/src/components/layout/ThemeListener.tsx b/Template-01/src/components/layout/ThemeListener.tsx new file mode 100644 index 0000000..55dfcbb --- /dev/null +++ b/Template-01/src/components/layout/ThemeListener.tsx @@ -0,0 +1,50 @@ +import { useEffect } from 'react'; + +export function ThemeListener() { + useEffect(() => { + const handleMessage = (event: MessageEvent) => { + // Allow messages from any origin since preview is generic + if (event.data?.type === 'UPDATE_APPEARANCE') { + const settings = event.data.settings; + if (!settings) return; + + const root = document.documentElement; + + // Update Primary Color + if (settings.primaryColor) { + root.style.setProperty('--color-brand-primary', settings.primaryColor); + root.style.setProperty('--color-brand-blue', settings.primaryColor); + root.style.setProperty('--color-brand-gold', settings.primaryColor); + } + + // Update Background Color + if (settings.backgroundColor) { + root.style.setProperty('--color-brand-bg', settings.backgroundColor); + document.body.style.backgroundColor = settings.backgroundColor; + } + + // Update Font Family + if (settings.fontFamily) { + const fontLink = document.getElementById('dynamic-font') as HTMLLinkElement; + const fontName = settings.fontFamily.replace(/ /g, '+'); + if (fontLink) { + fontLink.href = `https://fonts.googleapis.com/css2?family=${fontName}:wght@300;400;500;600;700&display=swap`; + } else { + const link = document.createElement('link'); + link.id = 'dynamic-font'; + link.rel = 'stylesheet'; + link.href = `https://fonts.googleapis.com/css2?family=${fontName}:wght@300;400;500;600;700&display=swap`; + document.head.appendChild(link); + } + root.style.setProperty('--font-sans', `"${settings.fontFamily}", sans-serif`); + document.body.style.fontFamily = `"${settings.fontFamily}", sans-serif`; + } + } + }; + + window.addEventListener('message', handleMessage); + return () => window.removeEventListener('message', handleMessage); + }, []); + + return null; +} \ No newline at end of file diff --git a/Template-01/src/index.css b/Template-01/src/index.css index 8fe1821..7d564db 100644 --- a/Template-01/src/index.css +++ b/Template-01/src/index.css @@ -35,3 +35,14 @@ body { ::-webkit-scrollbar-thumb:hover { background: #D4AF37; } + + +html, body { + overflow-x: hidden; + width: 100%; + max-width: 100vw; +} + +img { + max-width: 100%; +} diff --git a/Template-02/src/App.tsx b/Template-02/src/App.tsx index 7852bc7..f484989 100644 --- a/Template-02/src/App.tsx +++ b/Template-02/src/App.tsx @@ -1,3 +1,4 @@ +import { ThemeListener } from './components/layout/ThemeListener'; import React from 'react'; import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; import { ScrollToTop } from './components/ScrollToTop'; @@ -17,9 +18,10 @@ import { Contact } from './pages/Contact'; export default function App() { return ( + -
+
diff --git a/Template-02/src/components/layout/ThemeListener.tsx b/Template-02/src/components/layout/ThemeListener.tsx new file mode 100644 index 0000000..55dfcbb --- /dev/null +++ b/Template-02/src/components/layout/ThemeListener.tsx @@ -0,0 +1,50 @@ +import { useEffect } from 'react'; + +export function ThemeListener() { + useEffect(() => { + const handleMessage = (event: MessageEvent) => { + // Allow messages from any origin since preview is generic + if (event.data?.type === 'UPDATE_APPEARANCE') { + const settings = event.data.settings; + if (!settings) return; + + const root = document.documentElement; + + // Update Primary Color + if (settings.primaryColor) { + root.style.setProperty('--color-brand-primary', settings.primaryColor); + root.style.setProperty('--color-brand-blue', settings.primaryColor); + root.style.setProperty('--color-brand-gold', settings.primaryColor); + } + + // Update Background Color + if (settings.backgroundColor) { + root.style.setProperty('--color-brand-bg', settings.backgroundColor); + document.body.style.backgroundColor = settings.backgroundColor; + } + + // Update Font Family + if (settings.fontFamily) { + const fontLink = document.getElementById('dynamic-font') as HTMLLinkElement; + const fontName = settings.fontFamily.replace(/ /g, '+'); + if (fontLink) { + fontLink.href = `https://fonts.googleapis.com/css2?family=${fontName}:wght@300;400;500;600;700&display=swap`; + } else { + const link = document.createElement('link'); + link.id = 'dynamic-font'; + link.rel = 'stylesheet'; + link.href = `https://fonts.googleapis.com/css2?family=${fontName}:wght@300;400;500;600;700&display=swap`; + document.head.appendChild(link); + } + root.style.setProperty('--font-sans', `"${settings.fontFamily}", sans-serif`); + document.body.style.fontFamily = `"${settings.fontFamily}", sans-serif`; + } + } + }; + + window.addEventListener('message', handleMessage); + return () => window.removeEventListener('message', handleMessage); + }, []); + + return null; +} \ No newline at end of file diff --git a/Template-02/src/index.css b/Template-02/src/index.css index e038706..37d678e 100644 --- a/Template-02/src/index.css +++ b/Template-02/src/index.css @@ -35,3 +35,14 @@ body { ::-webkit-scrollbar-thumb:hover { background: #DDA7A5; } + + +html, body { + overflow-x: hidden; + width: 100%; + max-width: 100vw; +} + +img { + max-width: 100%; +}