SPB Git

Repository Public

layout.tsx 1.8 KB 37 lines tsx

1import type { Metadata, Viewport } from "next";2import "./globals.css";3import { LocaleProvider } from "@/i18n";4import { requestLocale } from "@/lib/locale";5import { Toaster } from "@/components/ui";67export const metadata: Metadata = {8  title: { default: "SP Calendar", template: "%s · SP Calendar" },9  description: "Prise de rendez-vous — calendar.spboucher.ai",10  manifest: "/manifest.webmanifest",11  icons: { icon: "/icon.svg", apple: "/apple-touch-icon.png" },12  appleWebApp: { capable: true, title: "SP Calendar", statusBarStyle: "default" },13};14export const viewport: Viewport = {15  width: "device-width", initialScale: 1, viewportFit: "cover",16  themeColor: [{ media: "(prefers-color-scheme: light)", color: "#f4f4fa" }, { media: "(prefers-color-scheme: dark)", color: "#050508" }],17};1819// Applied before first paint so the theme never flashes: the stored choice wins, otherwise the system setting.20// The browser chrome colour is aligned with the result (the media-query metas only know the system setting).21const themeScript = `try{var t=localStorage.getItem("spcal:theme"),d=t?t==="dark":matchMedia("(prefers-color-scheme: dark)").matches;if(d)document.documentElement.dataset.theme="dark";if(t)document.addEventListener("DOMContentLoaded",function(){document.querySelectorAll('meta[name="theme-color"]').forEach(function(m){m.content=d?"#050508":"#f4f4fa"})})}catch(e){}`;2223export default async function RootLayout({ children }: { children: React.ReactNode }) {24  const locale = await requestLocale();25  return (26    <html lang={locale === "fr" ? "fr-CA" : "en-CA"} suppressHydrationWarning>27      <head><script dangerouslySetInnerHTML={{ __html: themeScript }} /></head>28      <body>29        <LocaleProvider locale={locale}>30          {children}31          <Toaster />32        </LocaleProvider>33      </body>34    </html>35  );36}37
Files main
Menu

Theme