import { Button, CunninghamProvider, Select, useModal, } from "@openfun/cunningham-react"; import React, { useEffect, useMemo, useState } from "react"; import { Create } from "./Create"; import { Home } from "./Home"; import Onboarding from "./Onboarding"; enum Theme { CUNNINGHAM = "cunningham", REDFLUX = "redflux", BLUENEY = "blueny", } enum Variant { LIGHT = "light", DARK = "dark", } const THEMES: Record> = { [Theme.CUNNINGHAM]: { light: "default", dark: "dark", }, [Theme.REDFLUX]: { light: undefined, dark: "redflux", }, [Theme.BLUENEY]: { light: undefined, dark: "blueny", }, }; export type PageProps = ReturnType; const preferredScheme = window.matchMedia("(prefers-color-scheme: dark)") .matches ? { theme: Theme.CUNNINGHAM, variant: Variant.DARK } : { theme: Theme.CUNNINGHAM, variant: Variant.LIGHT }; export const App = () => { const [locale] = useState("en-US"); const [theme, setTheme] = useState( (sessionStorage.getItem("c-theme") as Theme | null) ?? preferredScheme.theme, ); const [variant, setVariant] = useState( (sessionStorage.getItem("c-variant") as Variant | null) ?? preferredScheme.variant, ); const activeTheme = useMemo(() => THEMES[theme][variant], [theme, variant]); const modal = useModal(); const handleThemeChange = (event: MediaQueryListEvent) => { const nextVariant = event.matches ? Variant.DARK : Variant.LIGHT; if (THEMES[theme][nextVariant] !== undefined) { setVariant(nextVariant); } }; useEffect(() => { const query = window.matchMedia("(prefers-color-scheme: dark)"); query.addEventListener("change", handleThemeChange); return () => { query.removeEventListener("change", handleThemeChange); }; }, []); useEffect(() => { document.documentElement.setAttribute("data-theme", theme); document.documentElement.setAttribute("data-variant", variant); sessionStorage.setItem("c-theme", theme); sessionStorage.setItem("c-variant", variant); }, [theme, variant]); return (