a tool for shared writing and social publishing
at feature/footnotes 98 lines 2.9 kB view raw
1import { ViewportSizeLayout } from "components/ViewportSizeLayout"; 2import { InitialPageLoad } from "../components/InitialPageLoadProvider"; 3import { ServiceWorker } from "../components/ServiceWorker"; 4import { Analytics } from "@vercel/analytics/react"; 5import "./globals.css"; 6import localFont from "next/font/local"; 7import { PopUpProvider } from "components/Toast"; 8import { IdentityProviderServer } from "components/IdentityProviderServer"; 9import { headers } from "next/headers"; 10import { RequestHeadersProvider } from "components/Providers/RequestHeadersProvider"; 11import { RouteUIStateManager } from "components/RouteUIStateManger"; 12 13export const metadata = { 14 title: "Leaflet", 15 description: "Read and publish on the Atmosphere", 16 metadataBase: new URL(`https://leaflet.pub`), 17 openGraph: { 18 images: ["/open-graph.png"], 19 }, 20 appleWebApp: { 21 title: "Leaflet", 22 statusBarStyle: "black-translucent", 23 capable: true, 24 }, 25}; 26 27export const viewport = { 28 themeColor: "#ffffff", 29 minimumScale: 1, 30 initialScale: 1, 31 maximumScale: 1, 32 width: "device-width", 33 viewportFit: "cover", 34 interactiveWidget: "resizes-content", 35}; 36 37export const preferredRegion = ["sfo1"]; 38 39const quattro = localFont({ 40 src: [ 41 { 42 path: "../public/fonts/iaw-quattro-vf.woff2", 43 style: "normal", 44 }, 45 { 46 path: "../public/fonts/iaw-quattro-vf-Italic.woff2", 47 style: "italic", 48 }, 49 ], 50 display: "swap", 51 variable: "--font-quattro", 52}); 53 54export default async function RootLayout({ 55 children, 56}: { 57 children: React.ReactNode; 58}) { 59 let headersList = await headers(); 60 let ipLocation = headersList.get("X-Vercel-IP-Country"); 61 let acceptLanguage = headersList.get("accept-language"); 62 let ipTimezone = headersList.get("X-Vercel-IP-Timezone"); 63 return ( 64 <html suppressHydrationWarning lang="en" className={`${quattro.variable}`}> 65 <body> 66 <script 67 dangerouslySetInnerHTML={{ 68 __html: ` 69 let listener = () => { 70 let el = document.querySelector(":root"); 71 el.style.setProperty("--leaflet-height-unitless", window.innerHeight) 72 el.style.setProperty("--leaflet-width-unitless", window.innerWidth) 73 } 74 listener() 75 window.addEventListener("resize", listener) 76 `, 77 }} 78 /> 79 <Analytics /> 80 <ServiceWorker /> 81 <InitialPageLoad> 82 <PopUpProvider> 83 <IdentityProviderServer> 84 <RequestHeadersProvider 85 country={ipLocation} 86 language={acceptLanguage} 87 timezone={ipTimezone} 88 > 89 <ViewportSizeLayout>{children}</ViewportSizeLayout> 90 <RouteUIStateManager /> 91 </RequestHeadersProvider> 92 </IdentityProviderServer> 93 </PopUpProvider> 94 </InitialPageLoad> 95 </body> 96 </html> 97 ); 98}