/* ============================================================ Shared layout β€” Nav, Footer, PageHero, Tweaks wiring. Used by every page in the site. Exports to window. ============================================================ */ const { useState: useStateL, useEffect: useEffectL } = React; const TWEAK_DEFAULTS_SHARED = { palette: "bubblegum", anim: "playful", stickers: true, trail: false, }; /* ---------- Nav ---------- */ const NAV_ITEMS = [ { href: "index.html", label: "Home" }, { href: "curriculum.html", label: "Curriculum" }, { href: "admissions.html", label: "Admissions" }, { href: "gallery.html", label: "Gallery" }, { href: "parents.html", label: "Parent Corner" }, { href: "contact.html", label: "Contact" }, ]; const SiteNav = ({ active }) => ( ); /* ---------- Page Hero ---------- */ const PageHero = ({ eyebrow, title, titleColor = "var(--pink)", subtitle, bg = "var(--mint)", icon = "star" }) => (
{eyebrow}

{title.split("|").map((chunk, i) => i % 2 === 1 ? {chunk} : {chunk} )}

{subtitle &&

{subtitle}

}
); /* ---------- Footer ---------- */ const SiteFooter = () => ( ); /* ---------- Tweaks Panel (shared) ---------- */ const SharedTweaks = () => { const [t, setTweak] = useTweaks(TWEAK_DEFAULTS_SHARED); useEffectL(() => { document.documentElement.dataset.palette = t.palette; const animMap = { calm: "calm", playful: "", wild: "wild" }; if (animMap[t.anim]) document.documentElement.dataset.anim = animMap[t.anim]; else document.documentElement.removeAttribute("data-anim"); }, [t.palette, t.anim]); useEffectL(() => { if (!t.trail) return; return initCursorTrail(); }, [t.trail]); return ( setTweak("palette", v)} options={[ { value: "bubblegum", label: "🍬 Bubblegum" }, { value: "crayon", label: "πŸ–οΈ Crayon Box" }, { value: "pastel", label: "🎨 Pastel Dream" }, { value: "tropical", label: "🌴 Tropical" }, ]} /> setTweak("anim", v)} options={[ { value: "calm", label: "Calm" }, { value: "playful", label: "Playful" }, { value: "wild", label: "Wild" }, ]} /> setTweak("stickers", v)} /> setTweak("trail", v)} /> ); }; /* ---------- Page bootstrap ---------- */ const renderPage = (active, Content) => { const Root = () => { useEffectL(() => initReveal(), []); useEffectL(() => { document.documentElement.dataset.palette = TWEAK_DEFAULTS_SHARED.palette; }, []); return ( <> ); }; ReactDOM.createRoot(document.getElementById("root")).render(); }; Object.assign(window, { SiteNav, PageHero, SiteFooter, SharedTweaks, renderPage });