From 959ebcf37f9de8c2877fa5a661523f3fa03863fc Mon Sep 17 00:00:00 2001 From: Bart van der Braak <bartvdbraak@gmail.com> Date: Wed, 14 Jun 2023 03:50:07 +0200 Subject: [PATCH] feat: change main layout with added theme provider --- app/layout.tsx | 88 +++++++++++++++++++++++++++++------ components/theme-provider.tsx | 9 ++++ 2 files changed, 82 insertions(+), 15 deletions(-) create mode 100644 components/theme-provider.tsx diff --git a/app/layout.tsx b/app/layout.tsx index 71b3fbf..8636523 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,21 +1,79 @@ -import './globals.css' -import { Inter } from 'next/font/google' +import { Inter, Fjalla_One } from "next/font/google"; -const inter = Inter({ subsets: ['latin'] }) +import { ThemeProvider } from "@/components/theme-provider"; +import "tailwindcss/tailwind.css"; -export const metadata = { - title: 'Create Next App', - description: 'Generated by create next app', +import { Metadata } from "next"; + +export const metadata: Metadata = { + title: { + default: "hellob.art", + template: "%s | hellob.art", + }, + description: "a simple portfolio made by bart van der braak", + metadataBase: new URL("https://hellob.art"), + openGraph: { + title: "hellob.art", + description: "a simple portfolio made by bart van der braak", + url: "https://hellob.art", + siteName: "hellob.art", + locale: "en-US", + type: "website", + }, + robots: { + index: true, + follow: true, + googleBot: { + index: true, + follow: true, + "max-video-preview": -1, + "max-image-preview": "large", + "max-snippet": -1, + }, + }, + twitter: { + title: "hellob.art", + card: "summary_large_image", + }, + icons: { + shortcut: "/favicon.png", + }, +}; + +interface RootLayoutProps { + children: React.ReactNode; } -export default function RootLayout({ - children, -}: { - children: React.ReactNode -}) { +const inter = Inter({ + subsets: ["latin"], + variable: "--font-inter", +}); + +const fjallaOne = Fjalla_One({ + subsets: ["latin"], + weight: "400", + variable: "--font-fjalla-one", +}); + +interface RootLayoutProps { + children: React.ReactNode; +} + +export default async function RootLayout({ children }: RootLayoutProps) { return ( - <html lang="en"> - <body className={inter.className}>{children}</body> - </html> - ) + <> + <html + lang="en" + suppressHydrationWarning + className={[inter.variable, fjallaOne.variable].join(" ")} + > + <head /> + <body className="min-h-screen antialiased"> + <ThemeProvider attribute="class" defaultTheme="dark" enableSystem> + {children} + </ThemeProvider> + </body> + </html> + </> + ); } diff --git a/components/theme-provider.tsx b/components/theme-provider.tsx new file mode 100644 index 0000000..b4e8e4f --- /dev/null +++ b/components/theme-provider.tsx @@ -0,0 +1,9 @@ +"use client"; + +import * as React from "react"; +import { ThemeProvider as NextThemesProvider } from "next-themes"; +import { ThemeProviderProps } from "next-themes/dist/types"; + +export function ThemeProvider({ children, ...props }: ThemeProviderProps) { + return <NextThemesProvider {...props}>{children}</NextThemesProvider>; +}