Template
45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
import type { Metadata } from 'next';
|
|
import { Outfit } from 'next/font/google';
|
|
import { ThemeProvider } from '@/components/theme-provider';
|
|
import { site } from '@/config/site';
|
|
import './globals.css';
|
|
|
|
const outfit = Outfit({
|
|
subsets: ['latin'],
|
|
variable: '--font-outfit',
|
|
});
|
|
|
|
export const metadata: Metadata = {
|
|
metadataBase: new URL(site.url),
|
|
title: { default: site.name, template: `%s — ${site.name}` },
|
|
description: site.description,
|
|
openGraph: {
|
|
type: 'website',
|
|
siteName: site.name,
|
|
title: site.name,
|
|
description: site.description,
|
|
},
|
|
twitter: {
|
|
card: 'summary_large_image',
|
|
title: site.name,
|
|
description: site.description,
|
|
},
|
|
};
|
|
|
|
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
|
return (
|
|
<html lang="en" suppressHydrationWarning className={outfit.variable}>
|
|
<body className="min-h-screen bg-background font-sans text-foreground antialiased">
|
|
<ThemeProvider
|
|
attribute="class"
|
|
defaultTheme="system"
|
|
enableSystem
|
|
disableTransitionOnChange
|
|
>
|
|
{children}
|
|
</ThemeProvider>
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|