/* LW Design Group — app shell, router, tweaks */ const { useState: uS, useEffect: uE } = React; const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "palette": "paper", "displayFont": "cormorant", "density": "editorial", "language": "en", "showRefBadge": true }/*EDITMODE-END*/; function App() { const [t, setT] = useTweaks(TWEAK_DEFAULTS); const { palette, displayFont, density, language, showRefBadge } = t; /* lightweight route state — hash-driven so refresh keeps page */ const [route, setRoute] = uS(() => parseHash()); uE(() => { const on = () => setRoute(parseHash()); window.addEventListener("hashchange", on); return () => window.removeEventListener("hashchange", on); }, []); uE(() => { window.scrollTo({ top: 0, behavior: "instant" }); }, [route.name, route.params.slug]); function go(name, params) { const h = "#/" + name + (params ? "?" + new URLSearchParams(params).toString() : ""); window.location.hash = h; } /* lang/density/palette → root data-attrs */ uE(() => { const root = document.documentElement; root.setAttribute("data-palette", palette); root.setAttribute("data-display", displayFont); root.setAttribute("data-density", density); root.setAttribute("dir", language === "ar" ? "rtl" : "ltr"); root.setAttribute("lang", language); root.setAttribute("data-ref-on", String(showRefBadge)); }, [palette, displayFont, density, language, showRefBadge]); const setLang = (L) => setT("language", L); const page = (() => { switch (route.name) { case "projects": return ; case "project": return ; case "sectors": return ; case "studio": return ; case "offices": return ; case "awards": return ; case "contact": return ; default: return ; } })(); return (
{page}
setT("palette", v)} /> setT("displayFont", v)} /> setT("density", v)} /> setT("language", v)} /> setT("showRefBadge", v)} />
); } function parseHash() { const h = window.location.hash.replace(/^#\/?/, ""); if (!h) return { name: "home", params: {} }; const [name, q] = h.split("?"); const params = {}; if (q) for (const [k, v] of new URLSearchParams(q)) params[k] = v; return { name, params }; } ReactDOM.createRoot(document.getElementById("root")).render();