// site/app.jsx — main App: language state, tweaks integration, section composition.
const { useState: useStateApp, useEffect: useEffectApp } = React;
const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
"heroVariant": "centered",
"channelsLayout": "grid",
"pricingLayout": "table",
"palette": "mix",
"showAppNote": true
}/*EDITMODE-END*/;
function App() {
// Language state — start from detection, persist on change.
const [lang, setLangState] = useStateApp(() => detectLang());
useEffectApp(() => {
document.documentElement.lang = lang;
try { localStorage.setItem('showtime-lang', lang); } catch (e) {}
}, [lang]);
const setLang = (v) => setLangState(v);
// Tweaks state via the starter hook.
const [t, setTweak] = useTweaks(TWEAK_DEFAULTS);
// Apply palette class on body so section selectors can react.
useEffectApp(() => {
document.body.classList.remove('sw-palette--mix', 'sw-palette--yellow', 'sw-palette--calm');
document.body.classList.add('sw-palette--' + (t.palette || 'mix'));
}, [t.palette]);
return (
setTweak('heroVariant', v)}
/>
setTweak('channelsLayout', v)}
/>
setTweak('pricingLayout', v)}
/>
setTweak('palette', v)}
/>
setLang(v)}
/>
);
}
ReactDOM.createRoot(document.getElementById('root')).render();