a tool for shared writing and social publishing
at main 2.8 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: "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 headersList = await headers(); 59 let ipLocation = headersList.get("X-Vercel-IP-Country"); 60 let acceptLanguage = headersList.get("accept-language"); 61 let ipTimezone = headersList.get("X-Vercel-IP-Timezone"); 62 return ( 63 <html suppressHydrationWarning lang="en" className={`${quattro.variable}`}> 64 <body> 65 <script 66 dangerouslySetInnerHTML={{ 67 __html: ` 68 let listener = () => { 69 let el = document.querySelector(":root"); 70 el.style.setProperty("--leaflet-height-unitless", window.innerHeight) 71 el.style.setProperty("--leaflet-width-unitless", window.innerWidth) 72 } 73 listener() 74 window.addEventListener("resize", listener) 75 `, 76 }} 77 /> 78 <Analytics /> 79 <ServiceWorker /> 80 <InitialPageLoad> 81 <PopUpProvider> 82 <IdentityProviderServer> 83 <RequestHeadersProvider country={ipLocation} language={acceptLanguage} timezone={ipTimezone}> 84 <ViewportSizeLayout>{children}</ViewportSizeLayout> 85 <RouteUIStateManager /> 86 </RequestHeadersProvider> 87 </IdentityProviderServer> 88 </PopUpProvider> 89 </InitialPageLoad> 90 </body> 91 </html> 92 ); 93}