import '@affine/component/theme/global.css'; import '@affine/component/theme/theme.css'; import { AffineContext } from '@affine/component/context'; import { GlobalLoading } from '@affine/component/global-loading'; import { AppFallback } from '@affine/core/components/affine/app-container'; import { configureCommonModules } from '@affine/core/modules'; import { configureLocalStorageStateStorageImpls } from '@affine/core/modules/storage'; import { CustomThemeModifier } from '@affine/core/modules/theme-editor'; import { configureIndexedDBUserspaceStorageProvider } from '@affine/core/modules/userspace'; import { configureBrowserWorkbenchModule } from '@affine/core/modules/workbench'; import { configureBrowserWorkspaceFlavours, configureIndexedDBWorkspaceEngineStorageProvider, } from '@affine/core/modules/workspace-engine'; import { router } from '@affine/core/router'; import { performanceLogger, performanceRenderLogger, } from '@affine/core/shared'; import { Telemetry } from '@affine/core/telemetry'; import createEmotionCache from '@affine/core/utils/create-emotion-cache'; import { createI18n, setUpLanguage } from '@affine/i18n'; import { CacheProvider } from '@emotion/react'; import { Framework, FrameworkRoot, getCurrentStore, LifecycleService, } from '@toeverything/infra'; import { Suspense } from 'react'; import { RouterProvider } from 'react-router-dom'; if (environment.isElectron && environment.isDebug) { document.body.innerHTML = `

Don't run web entry in electron.

`; throw new Error('Wrong distribution'); } const performanceI18nLogger = performanceLogger.namespace('i18n'); const cache = createEmotionCache(); const future = { v7_startTransition: true, } as const; async function loadLanguage() { performanceI18nLogger.info('start'); const i18n = createI18n(); document.documentElement.lang = i18n.language; performanceI18nLogger.info('set up'); await setUpLanguage(i18n); performanceI18nLogger.info('done'); } let languageLoadingPromise: Promise | null = null; const framework = new Framework(); configureCommonModules(framework); configureBrowserWorkbenchModule(framework); configureLocalStorageStateStorageImpls(framework); configureBrowserWorkspaceFlavours(framework); configureIndexedDBWorkspaceEngineStorageProvider(framework); configureIndexedDBUserspaceStorageProvider(framework); const frameworkProvider = framework.provider(); // setup application lifecycle events, and emit application start event window.addEventListener('focus', () => { frameworkProvider.get(LifecycleService).applicationFocus(); }); frameworkProvider.get(LifecycleService).applicationStart(); export function App() { performanceRenderLogger.debug('App'); if (!languageLoadingPromise) { languageLoadingPromise = loadLanguage().catch(console.error); } return ( } router={router} future={future} /> ); }