import type { Metadata } from 'next'; import { Geist, Geist_Mono } from 'next/font/google'; import { notFound } from 'next/navigation'; import { routing } from '@/lib/i18n/routing'; import { NextIntlClientProvider } from 'next-intl'; import { getMessages } from 'next-intl/server'; import { generateLocalizedMetadata, type Locale } from '@/lib/i18n/metadata'; import '../globals.css'; import { Providers } from '../providers'; import { AuthProvider } from '@/lib/auth/AuthContext'; import { AuthInitializer } from '@/components/auth'; import { MSWProvider } from '@/components/providers/MSWProvider'; import { DemoModeBanner } from '@/components/demo'; const geistSans = Geist({ variable: '--font-geist-sans', subsets: ['latin'], display: 'swap', // Prevent font from blocking render preload: true, }); const geistMono = Geist_Mono({ variable: '--font-geist-mono', subsets: ['latin'], display: 'swap', // Prevent font from blocking render preload: false, // Only preload primary font }); export async function generateMetadata({ params, }: { params: Promise<{ locale: string }>; }): Promise { const { locale } = await params; return generateLocalizedMetadata(locale as Locale); } export default async function LocaleLayout({ children, params, }: Readonly<{ children: React.ReactNode; params: Promise<{ locale: string }>; }>) { // Await params in Next.js 15 const { locale } = await params; // Ensure that the incoming `locale` is valid if (!routing.locales.includes(locale as 'en' | 'it')) { notFound(); } // Providing all messages to the client // side is the easiest way to get started const messages = await getMessages(); return ( {/* Theme initialization script - runs before React hydrates to prevent FOUC */}