- Updated theme resolution logic to utilize a shared inline script for consistent theme application across routes. - Introduced `AppShell` and `ReadyGate` components to manage app readiness and theme synchronization, improving user experience. - Enhanced `GlobalError` and `NotFound` pages with a unified full-screen layout for better accessibility and visual consistency. - Refactored CSS to implement safe area insets for sticky headers and content safety, ensuring proper layout on various devices. - Added unit tests for new functionality and improved existing tests for better coverage and reliability.
48 lines
1.4 KiB
TypeScript
48 lines
1.4 KiB
TypeScript
import type { Metadata, Viewport } from "next";
|
|
import { TooltipProvider } from "@/components/ui/tooltip";
|
|
import { TelegramProvider } from "@/components/providers/TelegramProvider";
|
|
import { AppShell } from "@/components/AppShell";
|
|
import { AppErrorBoundary } from "@/components/AppErrorBoundary";
|
|
import { THEME_BOOTSTRAP_SCRIPT } from "@/lib/theme-bootstrap-script";
|
|
import "./globals.css";
|
|
|
|
export const metadata: Metadata = {
|
|
title: "Duty Teller",
|
|
description: "Team duty shift calendar and reminders",
|
|
};
|
|
|
|
export const viewport: Viewport = {
|
|
width: "device-width",
|
|
initialScale: 1,
|
|
viewportFit: "cover",
|
|
};
|
|
|
|
export default function RootLayout({
|
|
children,
|
|
}: Readonly<{
|
|
children: React.ReactNode;
|
|
}>) {
|
|
return (
|
|
<html lang="en" data-theme="dark" suppressHydrationWarning>
|
|
<head>
|
|
<script dangerouslySetInnerHTML={{ __html: THEME_BOOTSTRAP_SCRIPT }} />
|
|
<script
|
|
dangerouslySetInnerHTML={{
|
|
__html: `(function(){if(typeof window!=='undefined'&&window.__DT_LANG==null)window.__DT_LANG='en';})();`,
|
|
}}
|
|
/>
|
|
<script src="/app/config.js" />
|
|
</head>
|
|
<body className="antialiased">
|
|
<TelegramProvider>
|
|
<AppErrorBoundary>
|
|
<TooltipProvider>
|
|
<AppShell>{children}</AppShell>
|
|
</TooltipProvider>
|
|
</AppErrorBoundary>
|
|
</TelegramProvider>
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|