From a5cd1ce2a8306ad2e40adeb50c75a26ad80d7dcd Mon Sep 17 00:00:00 2001 From: xintaofei Date: Sat, 11 Apr 2026 15:50:25 +0800 Subject: [PATCH] feat(appearance): wire AppearanceProvider and FOUC script into root layout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在 顶部注入同步执行的 inline 脚本,在 hydration 前为 写入 data-theme 属性和 font-size 样式;在 ThemeProvider 内嵌套 AppearanceProvider 管理 React 侧 state。两条通道并行运作,互不干扰。 Co-Authored-By: Claude Opus 4.6 (1M context) --- src/app/layout.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/app/layout.tsx b/src/app/layout.tsx index b1905e7..1d7acb1 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -8,6 +8,8 @@ import { getMessagesForLocale } from "@/i18n/messages" import { resolveRequestLocale } from "@/i18n/resolve-request-locale" import { ThemeProvider } from "@/components/theme-provider" import { toIntlLocale } from "@/lib/i18n" +import { APPEARANCE_INIT_SCRIPT } from "@/lib/appearance-script" +import { AppearanceProvider } from "@/components/appearance-provider" const jetbrainsMono = JetBrains_Mono({ subsets: ["latin"], @@ -48,6 +50,8 @@ export default async function RootLayout({ suppressHydrationWarning > + {/* Apply appearance preferences (theme color + zoom) before first paint to prevent FOUC */} + - {children} + {children}