/* App shell: router, register modal, mount */
const { useState: useStateApp, useEffect: useEffectApp } = React;
const ROUTES = {
home: HomePage, events: EventsPage, about: AboutPage, community: CommunityPage,
poets: PoetsPage, journal: JournalPage, library: LibraryPage,
perform: PerformPage, membership: MembershipPage, partners: PartnersPage, contact: ContactPage,
};
function RegisterModal({ payload, onClose }) {
const isMember = !!payload.membership;
const [step, setStep] = useStateApp(1);
const [guests, setGuests] = useStateApp(1);
useEffectApp(() => { document.body.style.overflow = "hidden"; return () => { document.body.style.overflow = ""; }; }, []);
return (
e.stopPropagation()}>
{step === 1 ? (
{isMember ? "Become a member" : payload.status === "wait" ? "Join the waitlist" : "Reserve your seat"}
{isMember ? payload.membership : payload.title}
{isMember ? `${payload.price} / ${payload.per} · cancel anytime` : `${payload.date} · ${payload.time} · ${payload.venue}`}
) : (
1 ? "s" : ""} for ${payload.title}. A confirmation is on its way to your inbox.`}
/>
)}
);
}
function App() {
const [route, setRoute] = useStateApp(() => (location.hash.replace("#/", "") || "home"));
const [reg, setReg] = useStateApp(null);
const go = (to) => {
if (to === route) { window.scrollTo({ top: 0, behavior: "smooth" }); return; }
location.hash = "#/" + to;
};
useEffectApp(() => {
const onHash = () => {
const r = location.hash.replace("#/", "") || "home";
setRoute(ROUTES[r] ? r : "home");
window.scrollTo({ top: 0, behavior: "instant" in window ? "instant" : "auto" });
};
window.addEventListener("hashchange", onHash);
return () => window.removeEventListener("hashchange", onHash);
}, []);
useEffectApp(() => {
const playVids = () => { document.querySelectorAll("video").forEach((v) => v.play().catch(() => {})); };
playVids();
const evs = ["pointerdown", "touchstart", "scroll", "keydown"];
const once = () => { playVids(); evs.forEach((e) => window.removeEventListener(e, once)); };
evs.forEach((e) => window.addEventListener(e, once, { passive: true }));
return () => evs.forEach((e) => window.removeEventListener(e, once));
}, [route]);
const Page = ROUTES[route] || HomePage;
const onRegister = (payload) => setReg(payload);
return (
{reg && setReg(null)} />}
);
}
ReactDOM.createRoot(document.getElementById("root")).render();