import React, { useState, useEffect } from "react"; import { Transition } from "@headlessui/react"; import { LinksFunction } from "@remix-run/deno"; import { Links, Meta, Outlet, Scripts, ScrollRestoration, useLoaderData, } from "@remix-run/react"; import normalizeCss from "./styles/normalize.css?url"; import tailwindCss from "./styles/tailwind.css?url"; import baseCss from "./styles/base.css?url"; import { LoadingDotsBricks } from "~/components"; import { AuthenticationProvider } from "./contexts/Authentication"; import { ToasterProvider } from "~/contexts/ToasterContext"; // The following import prevents a Font Awesome icon server-side rendering bug, // where the icons flash from a very large icon down to a properly sized one: import "@fortawesome/fontawesome-svg-core/styles.css"; // Prevent fontawesome from adding its CSS since we did it manually above: import { config } from "@fortawesome/fontawesome-svg-core"; import { useSignals } from "@preact/signals-react/runtime"; import { environmentVariables, pageHeight, pageWidth } from "~/store"; import { sidePanelWidth, timelineHeight } from "~/pages/PageEnigma/store"; import { AppUIProvider } from "~/contexts/AppUiContext"; import { json } from "@remix-run/router"; config.autoAddCss = false; /* eslint-disable import/first */ export const links: LinksFunction = () => [ { rel: "stylesheet", href: normalizeCss, }, { rel: "stylesheet", href: tailwindCss, }, { rel: "stylesheet", href: baseCss, }, { rel: "preconnect", href: "https://fonts.googleapis.com", }, { rel: "preconnect", href: "https://fonts.gstatic.com", crossOrigin: "anonymous", }, { rel: "stylesheet", href: "https://fonts.googleapis.com/css2?family=Fira+Sans:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap", }, ]; export async function loader() { const env = json({ ENV: { BASE_API: process.env.BASE_API || "%BUILD_BASE_API%", GOOGLE_API: process.env.GOOGLE_API || "%BUILD_GOOGLE_API%", FUNNEL_API: process.env.FUNNEL_API || "%BUILD_FUNNEL_API%", CDN_API: process.env.CDN_API || "%BUILD_CDN_API%", EXPRESSIONS: process.env.EXPRESSIONS === "true" || "%EXPRESSIONS_VALUE%" === "true", } as Record, }); return env; } export default function App() { const data = useLoaderData() as { ENV: Record }; const [showLoader, setShowLoader] = useState(true); useEffect(() => { setTimeout(() => setShowLoader(false), 2500); }, []); useSignals(); useEffect(() => { function setPage() { // TODO address this issue with zooming pageHeight.value = window.innerHeight; pageWidth.value = window.innerWidth; } timelineHeight.value = window.innerHeight * 0.25; sidePanelWidth.value = 340; setPage(); window.addEventListener("resize", setPage); return () => { window.removeEventListener("resize", setPage); }; }, []); useEffect(() => { environmentVariables.value = data.ENV; }, [data]); return (
); } function CompleteTakeoverLoadingScreen({ isShowing }: { isShowing: boolean }) { return ( ); }