Repository navigation
fix(web): apply theme before first paint to avoid light flash and Dark Reader misdetection - #7571
Conversation
… dark mode Dark Reader checks html.dark / color-scheme only once during page load, but the theme class was added by ThemeProvider after React mounted. Resolve the saved theme in an inline head script and declare color-scheme: dark on .dark.
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (3)
Included review availability: Your plan provides up to 10 included reviews per hour; 9 remain after this review. WalkthroughThe page now resolves and applies a theme before first paint. The dark theme declares ChangesTheme initialization
Priority: ⬇️ Low Estimated code review effort: 2 (Simple) | ~10 minutes Change: Bug fix Suggested reviewers: Merge Risk: ⚪ Minimal · up to The saved or system theme is applied consistently before and after the app mounts. No identified issue prevents merging after normal checks. Security Architecture ReviewSecurity architecture risk: 🔵 Low · up to The new step reads a saved display preference and applies a theme class; it does not appear to expose data or grant authority. Whether every deployment permits the new inline script remains unverified. Retained concerns Security review detailsSecurity Blast Radius
Trust Boundaries and Controls
Hardening Proposals
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Full details: Docstring CoverageExplanation Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 2 functions across 1 files. (2 skipped: 2 unsupported.)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. A rabbit checks the morning light Comment |
Sync 54 upstream commit(s) via merge (fork history preserved). Behavior changes from upstream: - 4013729 fix: disable sensitive word filtering by default and clear the default word list (QuantumNous#7814) Upstream commits: - 5e95951 feat(channels): add drag mode for channel priority ordering - 5a59d69 fix(pricing): hide task prices left at zero when another price is set - 3e2ce2c fix: align model card summary with status bar hours (QuantumNous#7847) - b0a98ac fix(web): apply theme class before first paint so Dark Reader detects dark mode (QuantumNous#7571) - f92c576 fix(web): cover Cloudflare clef and NVIDIA model families in provider rules (QuantumNous#7840) - ff36846 fix(relayconvert): 保留 Chat/Claude → Responses 转换中 input_image 的 detail 字段 (QuantumNous#7855) - 09109ec fix(middleware): 过载哨兵改用容器口径并加入连续性与新鲜度判定 (QuantumNous#7317) - d032204 feat(aws): add Mantle Messages API support - ca2cae6 fix(relaykit): emit summary on reasoning items announced without one (QuantumNous#7833) - 45fbb14 fix(rate-limit): count each group with its own limit separately - 6549a17 fix(dashboard): draw flow chart labels in the theme text color (QuantumNous#7821) - c9179d3 fix(playground): support the reasoning field in chat responses (QuantumNous#7831) - 908f94d fix(web): hide pages the user cannot open from console search - 19d435e fix(relay): mask only the custom upstream address in error messages (QuantumNous#7822) - 718a4e7 fix(vertex): use the multi-region hostnames for us and eu - f196934 feat(plugins): bind Hailuo, Vidu and Veo plugins to New API channels - bfdad29 fix(vidu): bill the model, duration and resolution Vidu generates - 150ab3c chore(licenses): refresh the third-party dependency inventory - 76cd511 build: upgrade moejs to v0.1.0-alpha.7 - 1b63c28 fix(claude): preserve explicit zero usage and cache-only billing (QuantumNous#7816) - c9f7b62 fix(web): sort pricing models by input, output and per-request price (QuantumNous#7813) - a0bf6a8 fix(vertex): pass project_id in API Key mode to avoid 404 on official endpoints (QuantumNous#6330) - 4013729 fix: disable sensitive word filtering by default and clear the default word list (QuantumNous#7814) - 7de10f2 feat(token): let an API key read its owner's quota - ef60ef2 fix(relay): keep the cause of a failed body read for every later reader - d10eafb fix(relay): report the real cause when a request body cannot be read - 63cecab feat(channel): support Sub2API balance queries (QuantumNous#7749) - b4be2a7 feat(ui): show newly added pricing groups at the top (QuantumNous#7782) - 633b4c5 feat(logs): export usage logs from the common log page (QuantumNous#7774) - dd59854 chore(deps-dev): bump undici from 6.28.0 to 6.29.0 in /electron (QuantumNous#7624) - 93cf4ba chore(deps-dev): bump js-yaml from 4.3.1 to 4.3.2 in /electron (QuantumNous#7327) - 3c9fb2a chore(deps-dev): bump brace-expansion from 1.1.16 to 1.1.21 in /electron (QuantumNous#7623) - 9f04810 chore(deps): bump ai from 7.0.31 to 7.0.136 in /web (QuantumNous#7767) - 3fe394c chore(deps): bump github.com/gorilla/websocket from 1.5.0 to 1.5.3 (QuantumNous#7001) - 1c58f3d chore(deps-dev): bump fast-uri from 3.1.5 to 3.1.7 in /electron (QuantumNous#7169) - 7f51a97 chore(deps-dev): bump js-yaml from 4.3.1 to 4.3.2 in /electron (QuantumNous#7327) - 7e25797 chore(deps-dev): bump electron from 39.8.10 to 41.10.6 in /electron (QuantumNous#7625) - bf4e1eb build(deps-dev): bump oxfmt from 0.57.0 to 0.72.0 in /web (QuantumNous#7766) - 82306b3 build(deps-dev): bump @tanstack/router-plugin in /web (QuantumNous#7768) - c730add build(deps): bump stream-markdown-parser from 1.1.3 to 1.2.18 in /web (QuantumNous#7769) - b8c2dc1 build(deps): bump yace from 1.1.0 to 1.1.1 in /web (QuantumNous#7770) - ba29f06 chore(deps-dev): bump @xmldom/xmldom from 0.8.13 to 0.8.15 in /electron (QuantumNous#7187) - 767a82b fix(claude): forward thinking.block_binding and every anthropic-beta value (QuantumNous#7732) - 2b85a8f fix(auth): show legal consent warning on password login (QuantumNous#7771) - 2ed0587 fix(ci): stabilize checks and configure Bun dependency updates (QuantumNous#7765) - 9948b1e fix(pricing): accept declared endpoint arrays in pricing conversion (QuantumNous#7724) - 4bfcf28 chore(web): bump @lobehub/icons to 5.22.0 (QuantumNous#7764) - fc08b76 fix(web): preserve recorded billing tiers in usage log previews (QuantumNous#7763) - ba0e478 fix(relaykit): preserve assistant text with tool calls (QuantumNous#6871) - 34b1942 fix(pricing): allow root access when the model square is disabled (QuantumNous#7761) - b22a43b fix: mark task settlement logs with is_task for tiered billing display (QuantumNous#7446) - bbf60b4 fix(logs): vertically align billing source icons on mobile (QuantumNous#7760) - 3f926c3 fix(metrics): count completed streams after context cancellation (QuantumNous#7638) - 3827fd8 fix(web): show cache read price on expression model cards (QuantumNous#7757) Local tests not run (CI-only).
… dark mode (QuantumNous#7571) Dark Reader checks html.dark / color-scheme only once during page load, but the theme class was added by ThemeProvider after React mounted. Resolve the saved theme in an inline head script and declare color-scheme: dark on .dark.
English template:
.github/PULL_REQUEST_TEMPLATE/en.mdImportant
🔗 关联任务 / Related Issue
🚀 变更类型 / Type of change
📝 变更描述 / Description
改善了暗色模式的用户体验
问题: 主题 class(
html.dark/html.light)要等 React 挂载后才由ThemeProvider加上。html.dark/color-scheme。它错过了主题 class,就会把 new-api 自带的深色主题再反色一遍。改动:
web/index.html:在<head>中加入内联脚本,首次绘制前读取localStorage['newapi:theme:v1:mode'],值为system或无效时跟随prefers-color-scheme,再把dark/lightclass 加到<html>上。解析逻辑与ThemeProvider保持一致。web/src/styles/theme.css:.dark增加color-scheme: dark,Dark Reader 会读取这个属性。web/src/context/__tests__/theme-boot-script.test.ts:直接从index.html提取脚本执行,覆盖 保存为 dark / 保存为 light 但系统为深色 / 未保存且系统为深色 / 保存值无效 四种情况。📸 运行证明 / Proof of Work
1. 单元测试
2. 刷新白闪对比(录屏)
refresh-compare.mp4
慢速模式

3. Dark Reader 检测
✅ 提交前检查项 / Checklist
New feature,我已关联对应 Issue;若尚无 Issue,我已先自行创建。go build通过或测试通过,不视为有效证明。Summary by CodeRabbit
New Features
Tests