SPB Git forge

spb/market-atlas

Public
12commits 1branches 0releases
1.1 MBsize
maindefault branch
10 days agolast push
TypeScript 96.7% SQL 1.6% CSS 0.8% JavaScript 0.5%
2.3 KB · 56 lines tsx
Raw Blame History
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