layout.tsx (1914B)
1 import type { Metadata, Viewport } from "next"; 2 import { Mandali, Kosugi_Maru } from "next/font/google"; 3 import { GoogleAnalytics } from '@next/third-parties/google'; 4 import "./globals.css"; 5 import Providers from "./providers"; 6 import TouchEffect from "@/components/TouchEffect"; 7 8 const mandali = Mandali({ 9 weight: "400", 10 subsets: ["latin"], 11 variable: "--font-mandali", 12 }); 13 14 const kosugi = Kosugi_Maru({ 15 weight: "400", 16 subsets: ["latin"], 17 variable: "--font-kosugi", 18 }); 19 20 export const metadata: Metadata = { 21 title: "Cafe Timer", 22 description: "この一瞬を、アーカイブ。", 23 manifest: "/manifest.json", 24 appleWebApp: { 25 capable: true, 26 statusBarStyle: "default", 27 title: "Cafe Timer", 28 }, 29 openGraph: { 30 title: "Cafe Timer", 31 description: "この一瞬を、アーカイブ。", 32 url: "https://cafetimer.rabbit1.cc", 33 siteName: "Cafe Timer", 34 images: [ 35 { 36 url: "https://cafetimer.rabbit1.cc/ogp.png", 37 alt: "Cafe Timer", 38 }, 39 ], 40 locale: "ja_JP", 41 type: "website", 42 }, 43 twitter: { 44 card: "summary_large_image", 45 title: "Cafe Timer", 46 description: "この一瞬を、アーカイブ。", 47 images: ["https://cafetimer.rabbit1.cc/ogp.png"], 48 }, 49 }; 50 51 export const viewport: Viewport = { 52 themeColor: [ 53 { media: '(prefers-color-scheme: light)', color: '#fbfbfb' }, 54 { media: '(prefers-color-scheme: dark)', color: '#000000' }, 55 ], 56 width: "device-width", 57 initialScale: 1, 58 maximumScale: 1, 59 userScalable: false, 60 }; 61 62 export default function RootLayout({ 63 children, 64 }: Readonly<{ 65 children: React.ReactNode; 66 }>) { 67 return ( 68 <html lang="ja" className="h-full"> 69 <body className={`${mandali.variable} ${kosugi.variable} h-full`}> 70 <GoogleAnalytics gaId="G-FQSKNGBJ7W" /> 71 <Providers> 72 <TouchEffect /> 73 {children} 74 </Providers> 75 </body> 76 </html> 77 ); 78 }