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