/* App shell: routing + state management + footer + mount */ const { useState: useAppState, useEffect: useAppEffect } = React; function PPFooter({ t, setRoute }) { return ( ); } function PPHomePage({ t, setRoute }) { return (
); } function App() { const [route, setRouteState] = useAppState(() => { const h = window.location.hash.replace(/^#/, ""); return h || "/"; }); const [lang, setLangState] = useAppState(() => localStorage.getItem("pp-lang") || "pl"); const [theme, setThemeState] = useAppState(() => localStorage.getItem("pp-theme") || "dark"); const [fontSize, setFontSizeState] = useAppState(() => localStorage.getItem("pp-fs") || "md"); const [simple, setSimpleState] = useAppState(() => localStorage.getItem("pp-simple") === "true"); const [accOpen, setAccOpen] = useAppState(false); // Apply prefs to useAppEffect(() => { document.documentElement.dataset.theme = theme; localStorage.setItem("pp-theme", theme); }, [theme]); useAppEffect(() => { document.documentElement.dataset.fs = fontSize; localStorage.setItem("pp-fs", fontSize); }, [fontSize]); useAppEffect(() => { document.documentElement.dataset.simple = simple ? "true" : "false"; localStorage.setItem("pp-simple", simple); }, [simple]); useAppEffect(() => { document.documentElement.lang = lang; localStorage.setItem("pp-lang", lang); }, [lang]); // Hash-based routing useAppEffect(() => { const onHash = () => { const h = window.location.hash.replace(/^#/, ""); setRouteState(h || "/"); }; window.addEventListener("hashchange", onHash); return () => window.removeEventListener("hashchange", onHash); }, []); const setRoute = (r) => { setRouteState(r); window.location.hash = "#" + r; }; const setLang = (l) => setLangState(l); const t = window.PP_CONTENT[lang] || window.PP_CONTENT.pl; let Page; switch (route) { case "/o-poradni": Page = ; break; case "/oferta": Page = ; break; case "/zespol": Page = ; break; case "/aktualnosci": Page = ; break; case "/strefa-rodzica": Page = ; break; case "/do-pobrania": Page = ; break; case "/kontakt": Page = ; break; case "/dostepnosc": Page = ; break; default: Page = ; } return ( <> setAccOpen(true)} />
{Page}
setAccOpen(true)} lang={lang} /> setAccOpen(false)} theme={theme} setTheme={setThemeState} fontSize={fontSize} setFontSize={setFontSizeState} simple={simple} setSimple={setSimpleState} t={t} lang={lang} /> ); } ReactDOM.createRoot(document.getElementById("root")).render();