73 lines
1.8 KiB
TypeScript
73 lines
1.8 KiB
TypeScript
import type { Metadata, Viewport } from 'next';
|
|
import { GoogleAnalytics, GoogleTagManager } from '@next/third-parties/google';
|
|
import { SpeedInsights } from '@vercel/speed-insights/next';
|
|
import { getClientConfig } from './config/client';
|
|
import { getServerSideConfig } from './config/server';
|
|
import './styles/globals.scss';
|
|
import './styles/markdown.scss';
|
|
import './styles/highlight.scss';
|
|
|
|
const serverConfig = getServerSideConfig();
|
|
|
|
export const metadata: Metadata = {
|
|
title: 'NextChat',
|
|
description: 'Your personal ChatGPT Chat Bot.',
|
|
appleWebApp: {
|
|
title: 'NextChat',
|
|
statusBarStyle: 'default',
|
|
},
|
|
};
|
|
|
|
export const viewport: Viewport = {
|
|
width: 'device-width',
|
|
initialScale: 1,
|
|
maximumScale: 1,
|
|
themeColor: [
|
|
{ media: '(prefers-color-scheme: light)', color: '#fafafa' },
|
|
{ media: '(prefers-color-scheme: dark)', color: '#151515' },
|
|
],
|
|
};
|
|
|
|
export default function RootLayout({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode;
|
|
}) {
|
|
return (
|
|
<html lang="en">
|
|
<head>
|
|
<meta name="config" content={JSON.stringify(getClientConfig())} />
|
|
<meta
|
|
name="viewport"
|
|
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"
|
|
/>
|
|
<link
|
|
rel="manifest"
|
|
href="/site.webmanifest"
|
|
crossOrigin="use-credentials"
|
|
>
|
|
</link>
|
|
<script src="/serviceWorkerRegister.js" defer></script>
|
|
</head>
|
|
<body>
|
|
{children}
|
|
{serverConfig?.isVercel && (
|
|
<>
|
|
<SpeedInsights />
|
|
</>
|
|
)}
|
|
{serverConfig?.gtmId && (
|
|
<>
|
|
<GoogleTagManager gtmId={serverConfig.gtmId} />
|
|
</>
|
|
)}
|
|
{serverConfig?.gaId && (
|
|
<>
|
|
<GoogleAnalytics gaId={serverConfig.gaId} />
|
|
</>
|
|
)}
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|