// App root + routing + Tweaks panel
const { useState: useStateA, useEffect: useEffectA } = React;
function App() {
const [route, setRoute] = useStateA("home");
const [enquireOpen, setEnquireOpen] = useStateA(false);
const [enquireSector, setEnquireSector] = useStateA(null);
// Tweaks
const defaults = window.__TWEAK_DEFAULTS || { palette: "paper", density: "default", locale: "en" };
const [tweaks, setTweaksRaw] = useStateA(defaults);
const setTweak = (key, value) => {
const next = typeof key === "object" ? { ...tweaks, ...key } : { ...tweaks, [key]: value };
setTweaksRaw(next);
try {
window.parent.postMessage({ type: "__edit_mode_set_keys", edits: next }, "*");
} catch (e) {}
};
// Apply tweaks to
useEffectA(() => {
const html = document.documentElement;
html.setAttribute("data-palette", tweaks.palette);
html.setAttribute("data-density", tweaks.density);
html.setAttribute("dir", tweaks.locale === "ar" ? "rtl" : "ltr");
html.setAttribute("lang", tweaks.locale);
}, [tweaks.palette, tweaks.density, tweaks.locale]);
// Tweaks panel availability protocol
const [tweaksOpen, setTweaksOpen] = useStateA(false);
useEffectA(() => {
const onMsg = (e) => {
if (!e.data || typeof e.data !== "object") return;
if (e.data.type === "__activate_edit_mode") setTweaksOpen(true);
else if (e.data.type === "__deactivate_edit_mode") setTweaksOpen(false);
};
window.addEventListener("message", onMsg);
try { window.parent.postMessage({ type: "__edit_mode_available" }, "*"); } catch (e) {}
return () => window.removeEventListener("message", onMsg);
}, []);
const t = COPY[tweaks.locale] || COPY.en;
// Scroll to top on route change
useEffectA(() => { window.scrollTo({ top: 0, behavior: "instant" }); }, [route]);
const openEnquire = (sector) => {
setEnquireSector(typeof sector === "string" ? sector : null);
setEnquireOpen(true);
};
const handleRoute = (r) => {
if (typeof r === "string" && r.startsWith("stub:")) {
const sector = r.slice(5);
// For corporate/social/etc — open enquiry pre-qualified, with a toast
setEnquireSector(sector === "corporate" ? "corporate" : sector === "social" ? "social" : null);
setEnquireOpen(true);
return;
}
setRoute(r);
};
return (
);
}
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render();