renders the expanded column (wordmark, capsul
class="newSession"
type="button"
>
-
renders the expanded column in the default lo
class="newSession"
type="button"
>
-
- 新会话
+
+
+ 新会话
+
{
for (const button of screen.getAllByRole('button', { name: 'New session' })) {
expect(button.getAttribute('aria-keyshortcuts')).toBe('Control+N')
}
+ const expanded = screen.getAllByRole('button', { name: 'New session' }).find(button => button.querySelector('kbd') !== null)!
+ fireEvent.mouseEnter(expanded)
+ fireEvent.focus(expanded)
+ expect(screen.getByRole('tooltip').getAttribute('aria-label')).toBe('Ctrl N')
+ expect(Array.from(expanded.querySelectorAll('kbd'), key => key.textContent)).toEqual(['Ctrl', 'N'])
cleanup()
render( {
const button = screen.getByRole('button', { name: 'New session' })
expect(button.getAttribute('aria-keyshortcuts')).toBe('Control+N')
fireEvent.focus(button)
- expect(screen.getByRole('tooltip').textContent).toContain('Ctrl N')
+ expect(Array.from(screen.getByRole('tooltip').querySelectorAll('kbd'), key => key.textContent)).toEqual(['Ctrl', 'N'])
})
it('routes New Session (capsule + wordmark) and the column toggle', () => {
const b = mountShell()
@@ -306,5 +311,5 @@ it('uses the same effective sidebar binding for hover/focus hints and ARIA', ()
const toggle = screen.getByRole('button', { name: en['toggle.collapse'] })
expect(toggle.getAttribute('aria-keyshortcuts')).toBe('Meta+B')
fireEvent.focus(toggle)
- expect(screen.getByRole('tooltip').textContent).toContain('⌘ B')
+ expect(Array.from(screen.getByRole('tooltip').querySelectorAll('kbd'), key => key.textContent)).toEqual(['⌘', 'B'])
})
diff --git a/packages/client/ui-theme/README.i18n.yaml b/packages/client/ui-theme/README.i18n.yaml
index 70f49fbb64..f6602d231a 100644
--- a/packages/client/ui-theme/README.i18n.yaml
+++ b/packages/client/ui-theme/README.i18n.yaml
@@ -30,8 +30,8 @@
en: 8fbfdb050e880f9b
zh: dd201f049036c5c4
/deepseek-ai-dsh-client-ui-theme/understand-the-implementation/stylesheets:
- en: 1d398bcc78b09ef2
- zh: cc657eeb80b55a62
+ en: 9e12626e970874b7
+ zh: 7b4013d4305b4d2e
/deepseek-ai-dsh-client-ui-theme/understand-the-implementation/scrollbar-rebinding:
en: bf76e7c34a331595
zh: 5accd0260ef7c61e
diff --git a/packages/client/ui-theme/README.md b/packages/client/ui-theme/README.md
index 30cfb594cb..06bc74f848 100644
--- a/packages/client/ui-theme/README.md
+++ b/packages/client/ui-theme/README.md
@@ -59,7 +59,7 @@ The service owns theme and font-size state and publishes snapshots. The ui-layou
`base.css` suppresses only the outline of focused elements marked `data-dsh-automatic-focus` by the [primitive focus helper](../ui-primitives/README.md); ordinary keyboard focus styling, borders, shadows, and error states remain intact.
-System toasts use `--dsw-alias-toast-bg` and `--dsw-alias-toast-label` for a shared background and text color across callers. Document previews pair `--dsw-alias-bg-document-preview` with `--dsw-alias-label-document-preview` so the backdrop and status text follow the same theme.
+System toasts use `--dsw-alias-toast-bg` and `--dsw-alias-toast-label` for a shared background and text color across callers. Document previews pair `--dsw-alias-bg-document-preview` with `--dsw-alias-label-document-preview` so the backdrop and status text follow the same theme. Tooltip keycaps use `--dsw-alias-tooltip-key-bg`, a lighter fill derived from the tooltip background in each palette.
`brand-font.css` exports the local Montserrat Light, Regular and Medium faces (normal style, weights 300, 400 and 500), with `montserrat-light.woff2`, `montserrat-regular.woff2`, `montserrat-medium.woff2` and its SIL Open Font License in `lib/styles/`. Desktop bundles the same stylesheet, font and license for offline welcome brand text; ordinary UI keeps its system font stack.
diff --git a/packages/client/ui-theme/README.zh.md b/packages/client/ui-theme/README.zh.md
index 3ccc8901a6..d7f1debd71 100644
--- a/packages/client/ui-theme/README.zh.md
+++ b/packages/client/ui-theme/README.zh.md
@@ -59,7 +59,7 @@ kind: "package-reference"
`base.css` 仅抑制[基础控件焦点工具](../ui-primitives/README.zh.md)通过 `data-dsh-automatic-focus` 标记的聚焦元素外轮廓线;正常键盘焦点样式、边框、阴影及错误状态保持不变。
-系统提示使用 `--dsw-alias-toast-bg` 和 `--dsw-alias-toast-label`,在各调用方之间统一背景与文字颜色。文档预览配对使用 `--dsw-alias-bg-document-preview` 与 `--dsw-alias-label-document-preview`,使底色与状态文字遵循相同主题。
+系统提示使用 `--dsw-alias-toast-bg` 和 `--dsw-alias-toast-label`,在各调用方之间统一背景与文字颜色。文档预览配对使用 `--dsw-alias-bg-document-preview` 与 `--dsw-alias-label-document-preview`,使底色与状态文字遵循相同主题。Tooltip 键帽使用 `--dsw-alias-tooltip-key-bg`,由各主题的 tooltip 背景派生稍浅的填充。
`brand-font.css` 导出本地 Montserrat Light、Regular 和 Medium 字体(正体、字重 300、400 和 500),`lib/styles/` 同时提供 `montserrat-light.woff2`、`montserrat-regular.woff2`、`montserrat-medium.woff2` 及其 SIL Open Font License。Desktop 将同一份样式表、字体和许可证打包,用于欢迎页品牌文字的离线显示;普通界面保留系统字体栈。
diff --git a/packages/client/ui-theme/src/styles/design-platform.css b/packages/client/ui-theme/src/styles/design-platform.css
index 7b9ee141d6..672e90c20a 100644
--- a/packages/client/ui-theme/src/styles/design-platform.css
+++ b/packages/client/ui-theme/src/styles/design-platform.css
@@ -256,6 +256,7 @@ body {
--dsw-alias-toast-bg: var(--dsw-static-neutral-bluish-800);
--dsw-alias-toast-label: var(--dsw-static-neutral-bluish-00);
--dsw-alias-tooltip-bg: var(--dsw-static-neutral-bluish-850);
+ --dsw-alias-tooltip-key-bg: color-mix(in srgb, var(--dsw-alias-tooltip-bg), white 18%);
--dsw-specific-bubble-highlight: var(--dsw-static-deepseek-200);
--dsw-specific-bubble: var(--dsw-static-deepseek-50);
--dsw-specific-input-major: var(--dsw-static-neutral-bluish-00);
@@ -365,6 +366,7 @@ body[data-ds-dark-theme] {
--dsw-alias-toast-bg: var(--dsw-static-neutral-bluish-750);
--dsw-alias-toast-label: var(--dsw-static-neutral-bluish-00);
--dsw-alias-tooltip-bg: var(--dsw-static-neutral-bluish-750);
+ --dsw-alias-tooltip-key-bg: color-mix(in srgb, var(--dsw-alias-tooltip-bg), white 18%);
--dsw-specific-bubble-highlight: var(--dsw-static-neutral-bluish-750);
--dsw-specific-bubble: var(--dsw-static-neutral-bluish-850);
--dsw-specific-input-major: var(--dsw-static-neutral-bluish-850);
diff --git a/packages/client/ui-theme/tests/expected/radius-exceptions.expected.json b/packages/client/ui-theme/tests/expected/radius-exceptions.expected.json
index f4a7729d1a..fad12ea46f 100644
--- a/packages/client/ui-theme/tests/expected/radius-exceptions.expected.json
+++ b/packages/client/ui-theme/tests/expected/radius-exceptions.expected.json
@@ -1,7 +1,4 @@
{
- "ui-primitives/src/ShortcutKeys.module.css": [
- ".keys: border-radius: 10px"
- ],
"ui-schedule/src/client/ClockPicker.module.css": [
".option: border-radius: 10px"
],
@@ -58,7 +55,7 @@
".dialog: border-radius: 24px",
".close: border-radius: 28px",
".searchField: border-radius: 12px",
- ".keyButton: border-radius: 10px",
+ ".keyBadge: border-radius: 10px",
".unbound: border-radius: 10px",
".recorder: border-radius: 10px"
]
diff --git a/packages/client/ui-workspace/src/client/rows/Rows.tsx b/packages/client/ui-workspace/src/client/rows/Rows.tsx
index bdf201e7e9..635770fd47 100644
--- a/packages/client/ui-workspace/src/client/rows/Rows.tsx
+++ b/packages/client/ui-workspace/src/client/rows/Rows.tsx
@@ -294,7 +294,7 @@ export function ProjectRowItem({ group, containsCurrentDescendant = false, onTog
)}
/>
)}
-
+