const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
"accentColor": "#10b981",
"darkAccent": "#059669",
"showMarquee": true,
"fontFamily": "Plus Jakarta Sans"
}/*EDITMODE-END*/;
const VALID_PAGES = ['home','gmc','shopping','insider','preapproved','about','contact','cases','pricing','blog','services','partner'];
const parsePath = () => {
const p = window.location.pathname.replace(/^\/|\/$/g, '');
if (!p) return { page: 'home', slug: null };
const parts = p.split('/');
if (parts[0] === 'blog' && parts[1]) return { page: 'blog', slug: parts[1] };
return { page: VALID_PAGES.includes(parts[0]) ? parts[0] : 'home', slug: null };
};
const pageToPath = (p, slug) => {
if (p === 'home') return '/';
if (p === 'blog' && slug) return '/blog/' + slug;
return '/' + p;
};
const App = () => {
const initial = parsePath();
const [page, setPage] = React.useState(initial.page);
const [blogSlug, setBlogSlug] = React.useState(initial.slug);
const [tweaks, setTweaks] = React.useState(TWEAK_DEFAULTS);
const [showTweaks, setShowTweaks] = React.useState(false);
const navigate = (p, opts) => {
const slug = (opts && opts.slug) || null;
setPage(p);
setBlogSlug(slug);
const path = pageToPath(p, slug);
if (window.location.pathname !== path) window.history.pushState({ page: p, slug }, '', path);
if (window.__applyPageSEO) window.__applyPageSEO(p);
window.scrollTo({ top: 0, behavior: 'instant' });
};
React.useEffect(() => {
if (window.__applyPageSEO) window.__applyPageSEO(page);
const onPop = () => { const s = parsePath(); setPage(s.page); setBlogSlug(s.slug); if (window.__applyPageSEO) window.__applyPageSEO(s.page); };
window.addEventListener('popstate', onPop);
const handler = (e) => {
if (e.data?.type === '__activate_edit_mode') setShowTweaks(true);
if (e.data?.type === '__deactivate_edit_mode') setShowTweaks(false);
};
window.addEventListener('message', handler);
window.parent.postMessage({ type: '__edit_mode_available' }, '*');
return () => { window.removeEventListener('message', handler); window.removeEventListener('popstate', onPop); };
}, []);
const updateTweak = (key, val) => {
const next = { ...tweaks, [key]: val };
setTweaks(next);
window.parent.postMessage({ type: '__edit_mode_set_keys', edits: next }, '*');
if (key === 'accentColor') document.documentElement.style.setProperty('--green', val);
if (key === 'darkAccent') document.documentElement.style.setProperty('--green-dark', val);
if (key === 'fontFamily') document.body.style.fontFamily = `'${val}', sans-serif`;
};
const pages = { home: HomePage, gmc: GMCPage, shopping: ShoppingPage, insider: InsiderPage, preapproved: PreApprovedPage, about: AboutPage, contact: ContactPage, cases: CasesPage, pricing: PricingPage, blog: BlogPage, services: typeof ServicesPage !== 'undefined' ? ServicesPage : HomePage, partner: PartnerPage };
const PageComponent = pages[page] || HomePage;
return (
<>