44 lines
1.4 KiB
TypeScript
44 lines
1.4 KiB
TypeScript
|
|
import type { Metadata } from "next";
|
|||
|
|
import { Noto_Sans_TC } from "next/font/google";
|
|||
|
|
import { ThemeProvider } from "@/components/theme-provider";
|
|||
|
|
import { BRAND_ASSETS, BRAND_FULL_TITLE, BRAND_NAME } from "@/lib/brand";
|
|||
|
|
import { DEFAULT_THEME } from "@/lib/theme";
|
|||
|
|
import "./globals.css";
|
|||
|
|
|
|||
|
|
const notoSansTc = Noto_Sans_TC({
|
|||
|
|
weight: ["400", "500", "600", "700"],
|
|||
|
|
subsets: ["latin"],
|
|||
|
|
variable: "--font-readable",
|
|||
|
|
display: "swap",
|
|||
|
|
preload: true,
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
const themeInitScript = `(function(){try{var k="xunlou-theme";var t=localStorage.getItem(k);var m=t==="light"||t==="dark"?t:"${DEFAULT_THEME}";document.documentElement.setAttribute("data-theme",m);document.documentElement.style.colorScheme=m;}catch(e){document.documentElement.setAttribute("data-theme","${DEFAULT_THEME}");}})();`;
|
|||
|
|
|
|||
|
|
export const viewport = {
|
|||
|
|
width: "device-width",
|
|||
|
|
initialScale: 1,
|
|||
|
|
viewportFit: "cover",
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
export const metadata: Metadata = {
|
|||
|
|
title: BRAND_FULL_TITLE,
|
|||
|
|
description: `${BRAND_NAME}:Threads AI 經營工作台`,
|
|||
|
|
icons: {
|
|||
|
|
icon: BRAND_ASSETS.logo,
|
|||
|
|
apple: BRAND_ASSETS.logo,
|
|||
|
|
},
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
|||
|
|
return (
|
|||
|
|
<html lang="zh-Hant" className={notoSansTc.variable} suppressHydrationWarning>
|
|||
|
|
<head>
|
|||
|
|
<script dangerouslySetInnerHTML={{ __html: themeInitScript }} />
|
|||
|
|
</head>
|
|||
|
|
<body>
|
|||
|
|
<ThemeProvider>{children}</ThemeProvider>
|
|||
|
|
</body>
|
|||
|
|
</html>
|
|||
|
|
);
|
|||
|
|
}
|