From 3b6a5399e8fe7b87682a0a93a401494813f0fe68 Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Tue, 22 Sep 2026 15:49:20 +0800 Subject: [PATCH] docs(desktop): clarify login theme ownership --- apps/desktop/src/preload-theme.ts | 11 ++++++----- .../client/ui-layout/src/client/theme-presenter.ts | 10 ++++++---- packages/client/ui-settings-account/README.i18n.yaml | 4 ++-- packages/client/ui-settings-account/README.md | 2 +- packages/client/ui-settings-account/README.zh.md | 2 +- .../ui-settings-account/src/client/AccountSection.tsx | 2 +- 6 files changed, 17 insertions(+), 14 deletions(-) diff --git a/apps/desktop/src/preload-theme.ts b/apps/desktop/src/preload-theme.ts index 19d390b490..5091984fdb 100644 --- a/apps/desktop/src/preload-theme.ts +++ b/apps/desktop/src/preload-theme.ts @@ -8,11 +8,12 @@ const THEME_SOURCE_ATTRIBUTE = 'data-ds-theme-source' /** * Watches `html[data-ds-theme-source]` and forwards each value to the main - * process, which sets `nativeTheme.themeSource`. The macOS sidebar vibrancy - * material then follows the app's theme preference instead of the OS - * appearance while `system` keeps following the OS; the main process reads - * the same value back as `shouldUseDarkColors` when it needs the resolved - * palette for a Platform login link. + * process, which sets `nativeTheme.themeSource`. Native chrome and renderer + * `prefers-color-scheme` queries on every platform then follow the app's + * theme preference instead of the OS appearance while `system` keeps + * following the OS; the macOS sidebar vibrancy material is one such consumer. + * The main process reads the same value back as `shouldUseDarkColors` when a + * Platform login link needs the resolved palette. */ export function syncNativeTheme(): void { let sent: string | undefined diff --git a/packages/client/ui-layout/src/client/theme-presenter.ts b/packages/client/ui-layout/src/client/theme-presenter.ts index 608eb08bdb..be305142bc 100644 --- a/packages/client/ui-layout/src/client/theme-presenter.ts +++ b/packages/client/ui-layout/src/client/theme-presenter.ts @@ -16,10 +16,12 @@ export const DARK_ATTRIBUTE = 'data-ds-dark-theme' /** * Root attribute publishing the theme source (`light`, `dark`, or `system`) - * for host shells that mirror it into native window chrome (the Electron - * preload forwards it to `nativeTheme.themeSource` so macOS vibrancy follows - * the app theme). `system` only when the preference is `system`; a fixed - * preference (including registered theme ids) publishes its resolved scheme. + * for host shells that mirror it into the native theme (the Electron preload + * forwards it to `nativeTheme.themeSource`, so native chrome, renderer + * `prefers-color-scheme` queries, and Platform login links follow the app + * palette on every platform). `system` only when the preference is `system`; + * a fixed preference (including registered theme ids) publishes its resolved + * scheme. */ export const THEME_SOURCE_ATTRIBUTE = 'data-ds-theme-source' diff --git a/packages/client/ui-settings-account/README.i18n.yaml b/packages/client/ui-settings-account/README.i18n.yaml index 0dbd02cfdc..7cf3c896f6 100644 --- a/packages/client/ui-settings-account/README.i18n.yaml +++ b/packages/client/ui-settings-account/README.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write packages/client/ui-settings-account/README.md -README.md: 016d1161214cf5723de6d5d63dc54542b8382571 -README.zh.md: 56ff93217bf97126878a0c7d5fed889a5e3f56f2 +README.md: 27682d9fa145723019573d492bbc1627ed43d1be +README.zh.md: 0fd64077f980482a31774d91fa62d349b0a6616f diff --git a/packages/client/ui-settings-account/README.md b/packages/client/ui-settings-account/README.md index 016d116121..27682d9fa1 100644 --- a/packages/client/ui-settings-account/README.md +++ b/packages/client/ui-settings-account/README.md @@ -46,7 +46,7 @@ The Account section appears first in Settings only while signed in; it is hidden The [credentials subsystem](../../../docs/subsystems/credentials.md) owns storage APIs; the [architecture](../../../docs/architecture.md) explains application composition. -Account login uses a dismissible dialog before the model onboarding credential editor. The dialog uses a compact, right-aligned action row with the primary action last. The sidebar displays the profile name, falling back to the server-masked phone number or email when the name is absent; it stays blank while the profile is loading. Dialog copy and the sidebar account label are not text-selectable; the copy-link button remains available and restores its label two seconds after each successful copy. Clipboard failures show Copy failed on the link for two seconds without interrupting sign-in. Waiting shows a copyable authorization link and a loading indicator; timeout and failure require an explicit retry. The dialog's Copy sign-in link and the Settings Open link append the resolved Desktop palette as `theme=light` or `theme=dark` from the live theme snapshot, so both routes reach the Platform page in the current application theme without touching the stored preference. Sign-in failures render in that dialog; the launcher's inline failure line reports only a failed sign-out. Closing a waiting dialog cancels its Host attempt. The sidebar can reopen the same API-key editor through the settings coordinator. +Account login uses a dismissible dialog before the model onboarding credential editor. The dialog uses a compact, right-aligned action row with the primary action last. The sidebar displays the profile name, falling back to the server-masked phone number or email when the name is absent; it stays blank while the profile is loading. Dialog copy and the sidebar account label are not text-selectable; the copy-link button remains available and restores its label two seconds after each successful copy. Clipboard failures show Copy failed on the link for two seconds without interrupting sign-in. Waiting shows a copyable authorization link and a loading indicator; timeout and failure require an explicit retry. The dialog's Copy sign-in link and the Settings Open link append the resolved Desktop palette as `theme=light` or `theme=dark` from the live theme snapshot, so both routes reach the Platform page in the current application theme without changing the theme preference Platform has saved. Sign-in failures render in that dialog; the launcher's inline failure line reports only a failed sign-out. Closing a waiting dialog cancels its Host attempt. The sidebar can reopen the same API-key editor through the settings coordinator. A terminal account-state stream failure appears in the sign-in dialog or Account settings. Plugin unload suppresses late failure reports. diff --git a/packages/client/ui-settings-account/README.zh.md b/packages/client/ui-settings-account/README.zh.md index 56ff93217b..0fd64077f9 100644 --- a/packages/client/ui-settings-account/README.zh.md +++ b/packages/client/ui-settings-account/README.zh.md @@ -46,7 +46,7 @@ Desktop 的用量和充值操作在 48px 返回栏下方打开隔离的原生 Pl [凭证子系统](../../../docs/subsystems/credentials.zh.md)定义存储接口;[架构](../../../docs/architecture.zh.md)说明应用组合。 -账号登录在模型引导的凭证编辑器之前显示可关闭的弹窗。弹窗底部采用紧凑的右对齐横排操作,主操作位于末尾。侧边栏优先显示昵称,缺少昵称时显示服务端返回的脱敏手机号或邮箱;资料加载期间保持留空。 弹窗文字和侧边栏账号状态文字不可选中,复制登录链接按钮始终可用,并在每次复制成功两秒后恢复原文案。剪贴板失败时,链接原位显示“复制失败”两秒,不中断登录。等待状态提供可复制的授权链接和加载图标;超时和失败均须用户手动重试。弹窗的“复制登录链接”和设置页的“打开”链接会从当前主题快照读取 Desktop 生效配色,追加 `theme=light` 或 `theme=dark`,使两条路径都以当前应用主题打开 Platform 页面,且不写入已保存的主题偏好。登录失败在该弹窗内呈现;侧边栏入口的内联失败提示仅用于退出登录失败。关闭等待弹窗会取消对应 Host 登录流程。侧边栏通过设置协调器重新打开同一个 API Key 编辑器。 +账号登录在模型引导的凭证编辑器之前显示可关闭的弹窗。弹窗底部采用紧凑的右对齐横排操作,主操作位于末尾。侧边栏优先显示昵称,缺少昵称时显示服务端返回的脱敏手机号或邮箱;资料加载期间保持留空。 弹窗文字和侧边栏账号状态文字不可选中,复制登录链接按钮始终可用,并在每次复制成功两秒后恢复原文案。剪贴板失败时,链接原位显示“复制失败”两秒,不中断登录。等待状态提供可复制的授权链接和加载图标;超时和失败均须用户手动重试。弹窗的“复制登录链接”和设置页的“打开”链接会从当前主题快照读取 Desktop 生效配色,追加 `theme=light` 或 `theme=dark`,使两条路径都以当前应用主题打开 Platform 页面,且不改变 Platform 已保存的主题偏好。登录失败在该弹窗内呈现;侧边栏入口的内联失败提示仅用于退出登录失败。关闭等待弹窗会取消对应 Host 登录流程。侧边栏通过设置协调器重新打开同一个 API Key 编辑器。 账户状态流的终止错误会显示在登录对话框或账户设置中。插件卸载后不再报告延迟到达的错误。 diff --git a/packages/client/ui-settings-account/src/client/AccountSection.tsx b/packages/client/ui-settings-account/src/client/AccountSection.tsx index 1dccd18f84..d5e4f5d82a 100644 --- a/packages/client/ui-settings-account/src/client/AccountSection.tsx +++ b/packages/client/ui-settings-account/src/client/AccountSection.tsx @@ -32,7 +32,7 @@ export interface AccountSectionInjected { /** Desktop-only commands; absent in ordinary browsers. */ platform?: PlatformBridge - /** Host-owned account stream and theme snapshots observed through framework hooks. */ + /** Account stream owned by the Host and theme snapshots published by the renderer, observed through framework hooks. */ hooks: { account: HostObservable /** Palette the Platform login pages follow. */