1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78import type { Metadata } from "next";
import { GeistMono } from "geist/font/mono";
import { GeistSans } from "geist/font/sans";
import { Toaster } from "@/components/ui/toaster";
import "./globals.css";
import { AI } from "./action";
import { Header } from "@/components/header";
import { Providers } from "@/components/providers";
const meta = {
title: "GenerativeUI",
description:
"Demo of an interactive financial assistant built using Next.js and Vercel AI SDK.",
};
export const metadata: Metadata = {
...meta,
title: {
default: "GenerativeUI",
template: `%s - GenerativeUI`,
},
icons: {
icon: "/favicon.ico",
shortcut: "/favicon-16x16.png",
apple: "/apple-touch-icon.png",
},
twitter: {
...meta,
card: "summary_large_image",
site: "@T1LTdev",
},
openGraph: {
...meta,
locale: "en-US",
type: "website",
},
};
export const viewport = {
themeColor: [
{ media: "(prefers-color-scheme: light)", color: "white" },
{ media: "(prefers-color-scheme: dark)", color: "black" },
],
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en" suppressHydrationWarning>
<body
className={`font-sans antialiased ${GeistSans.variable} ${GeistMono.variable}`}
>
<Toaster />
<AI>
<Providers
attribute="class"
defaultTheme="system"
enableSystem
disableTransitionOnChange
>
<div className="flex flex-col min-h-screen">
<Header />
<main className="flex flex-col flex-1 bg-muted/50 dark:bg-background">
{children}
</main>
</div>
</Providers>
</AI>
</body>
</html>
);
}
export const runtime = "edge";