/* global React, ReactDOM, window, Nav, Hero, Why, Subjects, Courses, CourseModal, Journey, Teachers, Achievements, Testimonials, CTA, Footer, useTweaks, TweaksPanel, TweakSection, TweakRadio, TweakSelect, Mascot */ const { useState, useEffect, useRef } = React; function App() { const [tweaks, setTweak] = useTweaks(window.__TWEAK_DEFAULTS); const mascotStyle = tweaks.mascotStyle; const [activeSubject, setActiveSubject] = useState("all"); const [openCourse, setOpenCourse] = useState(null); const [activeNav, setActiveNav] = useState("top"); const [route, setRoute] = useState("home"); // "home" | "login" | "register" | "portal" const signupRef = useRef(null); // Scroll spy useEffect(() => { const ids = ["top", "why", "courses", "journey", "teachers", "stories", "cta"]; const els = ids.map(id => document.getElementById(id)).filter(Boolean); const io = new IntersectionObserver((entries) => { entries.forEach(e => { if (e.isIntersecting) setActiveNav(e.target.id); }); }, { rootMargin: "-40% 0px -55% 0px" }); els.forEach(el => io.observe(el)); return () => io.disconnect(); }, []); const onNav = (id) => { if (id === "login") { setRoute("login"); return; } const el = document.getElementById(id === "top" ? "top" : id); if (el) el.scrollIntoView({ behavior: "smooth", block: "start" }); }; const onSignup = () => { setRoute("register"); }; const onScrollCourses = () => onNav("courses"); const onSelectSubject = (id) => { setActiveSubject(id); setTimeout(() => onNav("courses"), 50); }; const onOpenCourse = (c) => setOpenCourse(c); const onEnroll = () => { setOpenCourse(null); setTimeout(() => setRoute("register"), 200); }; const closeAuth = () => setRoute("home"); return (