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";
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}