53 lines
1.8 KiB
TypeScript
53 lines
1.8 KiB
TypeScript
import * as React from 'react';
|
|
import type { Viewport } from 'next';
|
|
|
|
import '@/styles/global.css';
|
|
|
|
import { config } from '@/config';
|
|
import { applyDefaultSettings } from '@/lib/settings/apply-default-settings';
|
|
import { getSettings as getPersistedSettings } from '@/lib/settings/get-settings';
|
|
import { UserProvider } from '@/contexts/auth/user-context';
|
|
import { SettingsProvider } from '@/contexts/settings';
|
|
import { Analytics } from '@/components/core/analytics';
|
|
import { I18nProvider } from '@/components/core/i18n-provider';
|
|
import { LocalizationProvider } from '@/components/core/localization-provider';
|
|
// import { SettingsButton } from '@/components/core/settings/settings-button';
|
|
import { ThemeProvider } from '@/components/core/theme-provider/theme-provider';
|
|
import { Toaster } from '@/components/core/toaster';
|
|
|
|
export const viewport = {
|
|
width: 'device-width',
|
|
initialScale: 1,
|
|
themeColor: config.site.themeColor,
|
|
} satisfies Viewport;
|
|
|
|
interface LayoutProps {
|
|
children: React.ReactNode;
|
|
}
|
|
|
|
export default async function Layout({ children }: LayoutProps): Promise<React.JSX.Element> {
|
|
const settings = applyDefaultSettings(await getPersistedSettings());
|
|
|
|
return (
|
|
<html data-mui-color-scheme={settings.colorScheme} lang="en">
|
|
<body>
|
|
<Analytics>
|
|
<LocalizationProvider>
|
|
<UserProvider>
|
|
<SettingsProvider settings={settings}>
|
|
<I18nProvider>
|
|
<ThemeProvider>
|
|
{children}
|
|
{/* <SettingsButton /> */}
|
|
<Toaster position="bottom-right" />
|
|
</ThemeProvider>
|
|
</I18nProvider>
|
|
</SettingsProvider>
|
|
</UserProvider>
|
|
</LocalizationProvider>
|
|
</Analytics>
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|