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