spb/market-atlas
Public
TypeScript 96.7%
SQL 1.6%
CSS 0.8%
JavaScript 0.5%
1import type { Metadata, Viewport } from "next";2import Script from "next/script";3import "./globals.css";4import { MobileTabBar } from "@/components/layout/mobile-tab-bar";5import { SearchProvider } from "@/components/layout/search-dialog";6import { SiteFooter } from "@/components/layout/site-footer";7import { SiteHeader } from "@/components/layout/site-header";8import { fontMono, fontUi } from "@/lib/fonts";9import { THEME_SCRIPT } from "@/lib/prepaint";10import { DESCRIPTION, SITE_NAME, SITE_URL, TAGLINE, THEME_DARK, THEME_LIGHT } from "@/lib/site";1112export const metadata: Metadata = {13 metadataBase: new URL(SITE_URL),14 title: { default: `${SITE_NAME} — ${TAGLINE}`, template: `%s | ${SITE_NAME}` },15 description: DESCRIPTION,16 applicationName: SITE_NAME,17 robots: { index: true, follow: true },18 alternates: { canonical: "/" },19 openGraph: { type: "website", siteName: SITE_NAME, url: SITE_URL, title: `${SITE_NAME} — ${TAGLINE}`, description: DESCRIPTION },20 twitter: { card: "summary_large_image", title: `${SITE_NAME} — ${TAGLINE}`, description: DESCRIPTION },21 icons: { icon: [{ url: "/icon.svg", type: "image/svg+xml" }] },22};2324export const viewport: Viewport = {25 width: "device-width",26 initialScale: 1,27 viewportFit: "cover",28 themeColor: [29 { media: "(prefers-color-scheme: light)", color: THEME_LIGHT },30 { media: "(prefers-color-scheme: dark)", color: THEME_DARK },31 ],32};3334export default function RootLayout({ children }: { children: React.ReactNode }) {35 return (36 <html lang="en" className={`${fontUi.variable} ${fontMono.variable} h-full antialiased`} suppressHydrationWarning>37 <head>38 <Script id="ma-theme" strategy="beforeInteractive" dangerouslySetInnerHTML={{ __html: THEME_SCRIPT }} />39 </head>40 <body className="flex min-h-full flex-col pb-[calc(var(--tabbar-h)+env(safe-area-inset-bottom,0px))] lg:pb-0">41 <a href="#main" className="sr-only focus:not-sr-only focus:fixed focus:left-3 focus:top-3 focus:z-[200] focus:bg-accent focus:px-3 focus:py-2 focus:text-sm focus:text-accent-ink">42 Skip to content43 </a>44 <SearchProvider>45 <SiteHeader />46 <main id="main" className="flex-1">47 {children}48 </main>49 <SiteFooter />50 <MobileTabBar />51 </SearchProvider>52 </body>53 </html>54 );55}56