39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
import { Analytics } from '@vercel/analytics/next'
|
|
import type { Metadata, Viewport } from 'next'
|
|
import { Geist, Geist_Mono } from 'next/font/google'
|
|
import { Toaster } from '@/components/ui/sonner'
|
|
import { AISettingsProvider } from '@/components/ai/ai-settings-provider'
|
|
import './globals.css'
|
|
|
|
const geistSans = Geist({ variable: '--font-geist-sans', subsets: ['latin'] })
|
|
const geistMono = Geist_Mono({
|
|
variable: '--font-geist-mono',
|
|
subsets: ['latin'],
|
|
})
|
|
|
|
export const metadata: Metadata = {
|
|
title: '前端知识库 · DevVault',
|
|
description: '收集、整理与复习前端核心知识点的个人知识库',
|
|
}
|
|
|
|
export const viewport: Viewport = {
|
|
colorScheme: 'dark',
|
|
themeColor: '#0c0f14',
|
|
}
|
|
|
|
export default function RootLayout({
|
|
children,
|
|
}: Readonly<{
|
|
children: React.ReactNode
|
|
}>) {
|
|
return (
|
|
<html lang="zh" className={`${geistSans.variable} ${geistMono.variable}`}>
|
|
<body className="font-sans antialiased bg-background">
|
|
<AISettingsProvider>{children}</AISettingsProvider>
|
|
<Toaster position="top-center" richColors />
|
|
{process.env.NODE_ENV === 'production' && <Analytics />}
|
|
</body>
|
|
</html>
|
|
)
|
|
}
|