Files
lettersoup-online/002_source/cms/src/app/layout.tsx
louiscklaw 59899fafc4 build ok,
2025-04-14 10:43:03 +08:00

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>
);
}