/* ============================================================ STREAM WITH LIEN — App shell, routing, language state ============================================================ */ /* Shared hero for inner pages lives in components.jsx (window.PageHero) */ const ROUTES = ["home", "setup", "muziekbingo", "playlists", "letters", "loveletters", "contact", "webshop"]; function App() { const [lang, setLang] = useState(() => localStorage.getItem("swl-lang") || "nl"); const [route, setRoute] = useState(() => { const h = (location.hash || "").replace("#", ""); return ROUTES.includes(h) ? h : "home"; }); // Demo: pretend Lien is live (drives the live badge) const [live] = useState(true); useEffect(() => { localStorage.setItem("swl-lang", lang); }, [lang]); useEffect(() => { document.documentElement.lang = lang; }, [lang]); const go = useCallback((id) => { setRoute(id); history.replaceState(null, "", "#" + id); window.scrollTo({ top: 0, behavior: "auto" }); }, []); useEffect(() => { const onHash = () => { const h = (location.hash || "").replace("#", ""); if (ROUTES.includes(h)) setRoute(h); }; window.addEventListener("hashchange", onHash); return () => window.removeEventListener("hashchange", onHash); }, []); const S = window.SITE; const ui = S.ui[lang]; const navItems = S.nav[lang]; let page = null; const common = { d: S, ui, social: S.social, live, go, lang }; switch (route) { case "home": page = ; break; case "setup": page = ; break; case "muziekbingo": page = ; break; case "playlists": page = ; break; case "letters": page = ; break; case "loveletters": page = ; break; case "contact": page = ; break; case "webshop": page = ; break; default: page = ; } return (
); } ReactDOM.createRoot(document.getElementById("root")).render();