SPB Git

spb/ai-atlas

Public
2.5 KB · 58 lines tsx
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-context';6import { SearchDialog } from '@/components/layout/search-dialog';7import { SiteFooter } from '@/components/layout/site-footer';8import { SiteHeader } from '@/components/layout/site-header';9import { THEME_SCRIPT } from '@/components/layout/theme';10import { fontMono, fontUi } from '@/lib/fonts';11import { DESCRIPTION, SITE_NAME, SITE_URL, TAGLINE } from '@/lib/site';1213export const metadata: Metadata = {14  metadataBase: new URL(SITE_URL),15  title: { default: `${SITE_NAME} — ${TAGLINE}`, template: `%s | ${SITE_NAME}` },16  description: DESCRIPTION,17  applicationName: SITE_NAME,18  robots: { index: true, follow: true },19  alternates: { canonical: '/' },20  openGraph: { type: 'website', siteName: SITE_NAME, url: SITE_URL, title: `${SITE_NAME} — ${TAGLINE}`, description: DESCRIPTION },21  twitter: { card: 'summary_large_image', title: `${SITE_NAME} — ${TAGLINE}`, description: DESCRIPTION },22  icons: { icon: [{ url: '/icon.svg', type: 'image/svg+xml' }], apple: [{ url: '/apple-icon', sizes: '180x180', type: 'image/png' }] },23};2425export const viewport: Viewport = {26  width: 'device-width',27  initialScale: 1,28  viewportFit: 'cover',29  themeColor: [30    { media: '(prefers-color-scheme: light)', color: '#f6f6f3' },31    { media: '(prefers-color-scheme: dark)', color: '#0b0d11' },32  ],33};3435export default function RootLayout({ children }: { children: React.ReactNode }) {36  return (37    <html lang="en" className={`${fontUi.variable} ${fontMono.variable} h-full antialiased`} suppressHydrationWarning>38      <head>39        <Script id="aia-theme" strategy="beforeInteractive" dangerouslySetInnerHTML={{ __html: THEME_SCRIPT }} />40      </head>41      <body className="flex min-h-full flex-col pb-[calc(var(--tabbar-h)+env(safe-area-inset-bottom,0px))] md:pb-0">42        <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">43          Skip to content44        </a>45        <SearchProvider>46          <SiteHeader />47          <main id="main" className="flex-1">48            {children}49          </main>50          <SiteFooter />51          <MobileTabBar />52          <SearchDialog />53        </SearchProvider>54      </body>55    </html>56  );57}58
Files · 9f1db171c786cf4a3b99436329f29b145c02aeec
Menu

Theme