Files
message-inbox-web-frontend-sdk/apps/web/app/layout.tsx
T
2026-07-17 21:48:37 +05:30

48 lines
1.7 KiB
TypeScript

import type { Metadata } from "next";
import "./globals.css";
import { getServerConfig } from "@/lib/config";
import { Providers } from "@/components/Providers";
export const metadata: Metadata = {
title: "LynkedUp Pro — Messages",
description:
"Slack-grade team messaging, inbox and support — a demo of the @lynkd/messaging-inbox-sdk.",
};
// Runs before paint: restores the user's saved scheme + accent so returning
// users never see a flash of the wrong theme.
const NO_FLASH = `
try {
var s = localStorage.getItem('lynkd.scheme');
if (s === 'dark') document.documentElement.classList.add('dark');
else if (s === 'light') document.documentElement.classList.remove('dark');
document.documentElement.style.colorScheme = document.documentElement.classList.contains('dark') ? 'dark' : 'light';
var t = localStorage.getItem('lynkd.theme');
if (t) { var p = JSON.parse(t); if (p && p.dark && p.dark.accent) {
document.documentElement.style.setProperty('--c-accent', p.dark.accent);
} }
} catch (e) {}
`;
export default function RootLayout({ children }: { children: React.ReactNode }) {
const config = getServerConfig();
const initialScheme = config.theme.mode === "light" ? "light" : "dark";
return (
<html
lang="en"
className={initialScheme === "dark" ? "dark" : ""}
style={{ colorScheme: initialScheme } as React.CSSProperties}
suppressHydrationWarning
>
<head>
{/* eslint-disable-next-line @next/next/no-before-interactive-script-outside-document */}
<script dangerouslySetInnerHTML={{ __html: NO_FLASH }} />
</head>
<body suppressHydrationWarning>
<Providers config={config}>{children}</Providers>
</body>
</html>
);
}