a tool for shared writing and social publishing
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}