// app.jsx — Router + Tweaks for My Lovely Wedding const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "accent": "gold", "density": "regular", "lang": "en", "heroImage": "media/hero-3.webp" }/*EDITMODE-END*/; function parseHash() { const h = window.location.hash.replace(/^#\/?/, ''); if (!h) return { route: 'home', params: {} }; const [path, query] = h.split('?'); const params = {}; if (query) { query.split('&').forEach(kv => { const [k, v] = kv.split('='); params[k] = decodeURIComponent(v || ''); }); } const segs = path.split('/').filter(Boolean); if (segs[0] === 'wedding' && segs[1]) return { route: 'wedding', id: segs[1], params }; return { route: segs[0] || 'home', params }; } function App() { const [t, setTweak] = useTweaks(TWEAK_DEFAULTS); const [{ route, id, params }, setNav] = useState(parseHash()); useEffect(() => { const on = () => setNav(parseHash()); window.addEventListener('hashchange', on); return () => window.removeEventListener('hashchange', on); }, []); // scroll to top on route change useEffect(() => { window.scrollTo({ top: 0, behavior: 'instant' }); }, [route, id]); // Apply lang + accent + density to root useEffect(() => { const root = document.documentElement; root.setAttribute('data-accent', t.accent); root.setAttribute('data-density', t.density); root.setAttribute('dir', t.lang === 'ar' ? 'rtl' : 'ltr'); root.setAttribute('lang', t.lang === 'ar' ? 'ar' : 'en'); }, [t]); const go = (key, extraParams) => { if (key === 'styling' || key === 'planning' || key === 'flowers') { window.location.hash = `/${key}`; } else if (key === 'weddings' && extraParams?.venue) { window.location.hash = `/weddings?venue=${extraParams.venue}`; } else { window.location.hash = `/${key}`; } }; const openWedding = (id) => { window.location.hash = `/wedding/${id}`; }; let page; switch (route) { case 'weddings': page = ; break; case 'wedding': page = go('weddings')} onOpen={openWedding}/>; break; case 'styling': case 'planning': case 'flowers': page = ; break; case 'about': page = ; break; case 'journal': page = ; break; case 'contact': page = ; break; case 'home': default: page = ; } return (
); } ReactDOM.createRoot(document.getElementById('app')).render();