// App: routing + tweaks const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "accent": true, "theme": "dark" }/*EDITMODE-END*/; function App() { const [tweaks, setTweak] = window.useTweaks(TWEAK_DEFAULTS); const [route, setRoute] = React.useState("home"); // apply theme + accent tweaks React.useEffect(()=>{ document.body.classList.toggle("light", tweaks.theme === "light"); document.body.classList.toggle("no-accent", !tweaks.accent); }, [tweaks]); // intercept route clicks React.useEffect(()=>{ const handler = (e)=>{ const a = e.target.closest("[data-route]"); if (!a) return; // Skip the dropdown trigger — its own handler manages open/close. if (a.getAttribute("data-prevent-route") === "1") return; e.preventDefault(); const r = a.getAttribute("data-route"); const fam = a.getAttribute("data-fam"); // If a specific product family is targeted, write it to the URL hash // BEFORE switching route — ProductDetailApp reads the hash on mount. if (fam) { if (window.location.hash !== "#" + fam) { window.location.hash = fam; } } setRoute(r); window.scrollTo({top:0, behavior:"instant"}); }; document.addEventListener("click", handler); return ()=> document.removeEventListener("click", handler); }, []); // active nav state React.useEffect(()=>{ document.querySelectorAll(".navlink").forEach(a=>{ a.classList.toggle("active", a.getAttribute("data-route") === route); }); }, [route]); const Page = { home: window.SiteHome, oplossingen: window.SiteOplossingen, situaties: window.SiteSituaties, "situatie-1": window.SiteSituatie1, "situatie-2": window.SiteSituatie2, "situatie-3": window.SiteSituatie3, "situatie-4": window.SiteSituatie4, producten: window.SiteProducten, control: window.SiteControl, over: window.SiteOver, contact: window.SiteContact, }[route] || window.SiteHome; const { TweaksPanel, TweakSection, TweakToggle, TweakRadio } = window; return ( <> setTweak("theme", v)}/> setTweak("accent", v)}/> setRoute(v)}/> ); } const root = ReactDOM.createRoot(document.getElementById("pages")); root.render();