"use client"; require("../polyfill"); import { HashRouter as Router, Routes, Route } from "react-router-dom"; import { useState, useEffect, useLayoutEffect } from "react"; import dynamic from "next/dynamic"; import { Path } from "@/app/constant"; import { ErrorBoundary } from "@/app/components/error"; import { getISOLang } from "@/app/locales"; import { useSwitchTheme } from "@/app/hooks/useSwitchTheme"; import { AuthPage } from "@/app/components/auth"; import { getClientConfig } from "@/app/config/client"; import { useAccessStore, useAppConfig } from "@/app/store"; import { useLoadData } from "@/app/hooks/useLoadData"; import Loading from "@/app/components/Loading"; import Screen from "@/app/components/Screen"; import { SideBar } from "./Sidebar"; import GlobalLoading from "@/app/components/GlobalLoading"; import { MOBILE_MAX_WIDTH } from "../hooks/useListenWinResize"; const Settings = dynamic( async () => await import("@/app/containers/Settings"), { loading: () => , }, ); const Chat = dynamic(async () => await import("@/app/containers/Chat"), { loading: () => , }); const NewChat = dynamic( async () => (await import("@/app/components/new-chat")).NewChat, { loading: () => , }, ); const MaskPage = dynamic( async () => (await import("@/app/components/mask")).MaskPage, { loading: () => , }, ); function useHtmlLang() { useEffect(() => { const lang = getISOLang(); const htmlLang = document.documentElement.lang; if (lang !== htmlLang) { document.documentElement.lang = lang; } }, []); } const useHasHydrated = () => { const [hasHydrated, setHasHydrated] = useState(false); useEffect(() => { setHasHydrated(true); }, []); return hasHydrated; }; const loadAsyncGoogleFont = () => { const linkEl = document.createElement("link"); const proxyFontUrl = "/google-fonts"; const remoteFontUrl = "https://fonts.googleapis.com"; const googleFontUrl = getClientConfig()?.buildMode === "export" ? remoteFontUrl : proxyFontUrl; linkEl.rel = "stylesheet"; linkEl.href = googleFontUrl + "/css2?family=" + encodeURIComponent("Noto Sans:wght@300;400;700;900") + "&display=swap"; document.head.appendChild(linkEl); }; export default function Home() { useSwitchTheme(); useLoadData(); useHtmlLang(); const config = useAppConfig(); useEffect(() => { console.log("[Config] got config from build time", getClientConfig()); useAccessStore.getState().fetch(); }, []); useLayoutEffect(() => { loadAsyncGoogleFont(); config.update( (config) => (config.isMobileScreen = window.innerWidth <= MOBILE_MAX_WIDTH), ); }, []); if (!useHasHydrated()) { return ; } return ( } sidebar={}> } /> } /> } /> } /> } /> ); }