|
import type { Metadata } from 'next'; |
|
import { Inter } from 'next/font/google'; |
|
import './globals.css'; |
|
import Sidebar from '@/components/Sidebar'; |
|
import { ThemeProvider } from '@/components/ThemeProvider'; |
|
import ConfirmModal from '@/components/ConfirmModal'; |
|
import SampleImageModal from '@/components/SampleImageModal'; |
|
import { Suspense } from 'react'; |
|
import AuthWrapper from '@/components/AuthWrapper'; |
|
|
|
export const dynamic = 'force-dynamic'; |
|
|
|
const inter = Inter({ subsets: ['latin'] }); |
|
|
|
export const metadata: Metadata = { |
|
title: 'Ostris - AI Toolkit', |
|
description: 'A toolkit for building AI things.', |
|
}; |
|
|
|
export default function RootLayout({ children }: { children: React.ReactNode }) { |
|
|
|
const authRequired = process.env.AI_TOOLKIT_AUTH ? true : false; |
|
|
|
return ( |
|
<html lang="en" className="dark"> |
|
<head> |
|
<meta name="apple-mobile-web-app-title" content="AI-Toolkit" /> |
|
</head> |
|
<body className={inter.className}> |
|
<ThemeProvider> |
|
<AuthWrapper authRequired={authRequired}> |
|
<div className="flex h-screen bg-gray-950"> |
|
<Sidebar /> |
|
<main className="flex-1 overflow-auto bg-gray-950 text-gray-100 relative"> |
|
<Suspense>{children}</Suspense> |
|
</main> |
|
</div> |
|
</AuthWrapper> |
|
</ThemeProvider> |
|
<ConfirmModal /> |
|
<SampleImageModal /> |
|
</body> |
|
</html> |
|
); |
|
} |
|
|