import type { AppProps } from 'next/app'; import dynamic from 'next/dynamic'; import '../../public/globals.css'; import '../../public/variable.css'; import './temporary.css'; import { Logger } from '@toeverything/pathfinder-logger'; import '@fontsource/space-mono'; import '@fontsource/poppins'; import '../utils/print-build-info'; import ProviderComposer from '@/components/provider-composer'; import type { PropsWithChildren, ReactElement, ReactNode } from 'react'; import type { NextPage } from 'next'; import { AppStateProvider } from '@/providers/app-state-provider/Provider'; import ConfirmProvider from '@/providers/ConfirmProvider'; import { ModalProvider } from '@/providers/GlobalModalProvider'; import { useRouter } from 'next/router'; import { useEffect } from 'react'; import { useAppState } from '@/providers/app-state-provider'; import { PageLoading } from '@/components/loading'; import Head from 'next/head'; import TemporaryHelperProvider from '@/providers/temporary-helper-provider'; import '@affine/i18n'; const ThemeProvider = dynamic(() => import('@/providers/ThemeProvider'), { ssr: false, }); export type NextPageWithLayout

, IP = P> = NextPage< P, IP > & { getLayout?: (page: ReactElement) => ReactNode; }; type AppPropsWithLayout = AppProps & { Component: NextPageWithLayout; }; const App = ({ Component, pageProps }: AppPropsWithLayout) => { const getLayout = Component.getLayout || (page => page); return ( <> , , , , , ]} > {getLayout()} ); }; const AppDefender = ({ children }: PropsWithChildren) => { const router = useRouter(); const { synced } = useAppState(); useEffect(() => { if (router.pathname === '/') { router.replace('/workspace'); } }, [router]); return

{synced ? children : }
; }; export default App;