95e02aca57
- Add @ducanh2912/next-pwa with NetworkFirst runtime caching (24h, 200 entries) - Disabled in development to avoid SW interference - Generate icon-192.png, icon-512.png, apple-touch-icon.png from SVG - Update manifest.json to use PNG icons (required for Android install prompt) - Add apple-touch-icon + appleWebApp metadata to layout - Add /offline fallback page shown when network unavailable Offline behavior: cached reads work on all platforms; background sync for new events not supported (iOS Safari has no Background Sync API). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
import type { Metadata, Viewport } from "next";
|
|
import "./globals.css";
|
|
import { Providers } from "@/components/providers";
|
|
|
|
export const metadata: Metadata = {
|
|
title: "Grow — Suivi bébé",
|
|
description: "Suivez les activités de votre nouveau-né",
|
|
manifest: "/manifest.json",
|
|
appleWebApp: {
|
|
capable: true,
|
|
statusBarStyle: "default",
|
|
title: "Grow",
|
|
startupImage: "/apple-touch-icon.png",
|
|
},
|
|
icons: {
|
|
apple: "/apple-touch-icon.png",
|
|
},
|
|
};
|
|
|
|
export const viewport: Viewport = {
|
|
themeColor: "#4f46e5",
|
|
width: "device-width",
|
|
initialScale: 1,
|
|
maximumScale: 1,
|
|
userScalable: false,
|
|
};
|
|
|
|
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
|
return (
|
|
<html lang="fr" suppressHydrationWarning>
|
|
<head>
|
|
<script dangerouslySetInnerHTML={{ __html: `try{var t=localStorage.getItem('grow_theme')||'auto';var d=t==='dark'||(t==='auto'&&window.matchMedia('(prefers-color-scheme: dark)').matches);if(d)document.documentElement.classList.add('dark')}catch(e){}` }} />
|
|
</head>
|
|
<body>
|
|
<Providers>{children}</Providers>
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|