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