Commit Graph
17 Commits
Author SHA1 Message Date
imccyu 79231619e4 🔀 Sync master and resolve sidebar column comment 2026-10-28 11:31:29 +08:00
Yif 8668cf310a fix(client): address sidebar alignment review feedback 2026-10-26 12:57:11 +08:00
Saafo 241468ce09 🔀 Sync master and resolve mobile sidebar integration 2026-10-23 12:52:35 +08:00
Turtle a0cbe9331c Merge pull request #6887 from deepseek-harness/turtle/trace-tab-indicator-clip-bede5ab93d0f
fix(ui-conversation): keep the active tab bar visible over Trajectory and widen tab targets
2026-10-23 10:14:02 +08:00
Saafo 54daad316e 🔀 Sync master and adapt sidebar integration tests 2026-10-22 16:04:55 +08:00
Saafo 15af3baa86 ♻️ Split tree keyboard navigation from mobile drawer changes 2026-10-22 13:53:42 +08:00
imccyu 9fb3a064ea Revert "fix(client): 将模型发布标记改为蓝色纯文字" (#6936) 2026-10-22 13:21:40 +08:00
Saafo 20c17996e2 🔀 Sync master and adapt drawer regressions to selector fades 2026-10-22 13:08:47 +08:00
Turtle bde671f984 test(web): ignore scroll-driven animations when waiting for settled layout
The model selector's clipped-text fade runs on a scroll timeline, which
never finishes, so document-wide waits never settled.
2026-10-22 12:48:28 +08:00
TurtleandShigma 11e1580b82 fix(ui-conversation): keep the active tab bar visible over Trajectory and widen tab targets
Co-authored-by: Shigma <[email protected]>
2026-10-21 22:45:28 +08:00
Yif 3c26689899 fix(plugin-manager): make sticky header scrolling smooth
让插件主页面的吸顶过渡随滚动连续到位,而不是滚过 8px 后突然重排。

- 标题栏与列表共用滚动容器,保留展开态占位,避免收缩改变滚动范围
- 用不可交互的临时布局副本测量展开态和吸顶态,在同一组控件上按滚动距离更新位移和宽度
- 保持控件身份与焦点,补偿占空间的滚动条,防止水平偏移和临界位置来回抖动
- 小屏优先将 Tabs 与操作按钮排成一行,放不下时固定 Tabs 在上、按钮在下,吸顶前后不换序
- 仅 macOS 收起侧栏的吸顶态采用窗口安全区外 8px 留白,不再限制宽度;其他平台和状态不变
- 补充端点布局、滚动往返、短列表、滚动条和平台隔离回归

本次到插件主页面的吸顶动画与布局优化为止。实验性插件相关页面的吸顶体验留待后续单独处理。
2026-10-21 16:09:06 +08:00
Yif 2951b75ffe fix(plugin-manager): keep the compact bar clear of macOS window controls
With the sidebar open the native window controls live in the sidebar, so the compact
bar only needs its own 16px inset. Collapsing the sidebar moves those controls above
the page, and the compact bar then adds the frame's top clearance so its controls stay
below them instead of underneath.

The style-driven motion between the expanded and compact bars still needs work; it lands
in a follow-up.
2026-10-20 20:09:59 +08:00
Saafo 6dbe6e9ab7 🐛 preserve titlebar dragging in macOS drawers 2026-10-20 19:30:02 +08:00
Yif fbff97cd28 feat(plugin-manager): compact sticky header and responsive actions 2026-10-19 22:06:14 +08:00
Xinyu Yang e8daeb4969 test(web): align window drag fixture with desktop shortcuts 2026-09-23 22:39:48 +08:00
mektpoy 4a409edf8b fix(client): keep the plugin manager's whole top strip draggable
The page carried a 28px top inset above its head row, so the window's topmost 28px on that page belonged to no drag region — the frame's former band covered it, and the per-row mark did not. The inset moves into the head rows themselves (.pageHead and .detailTop), which now start at the window's top edge while the content keeps its position. The browser lane pins each row's top edge at zero and the negative control confirms both assertions fail on the pre-fix sheet.
2026-09-23 21:10:27 +08:00
mektpoy 31a83ebc4b refactor(client): let chrome rows own the macOS window drag
The macOS window's draggable area was a hand-written band: a 52px strip, deepened
to 76px by a marker the Conversation header had to keep in step with its own
height. It drifted from the layout — blank runs inside a chrome row did not drag,
and a control a few pixels away dragged the window instead.

Chrome rows now mark their own element (`data-window-drag`) and the shell declares
the surface once (`html[data-platform='darwin'] [data-window-drag]`), so a row's own
box is its draggable geometry and no fixed band has to match any row's height. The
frame band, its 52/76 figures, the marker, and the per-sheet drag rules are gone;
interactive controls and overlays portal beside `#root` where one rule subtracts
them.

Recollection becomes one shell watcher (`window-drag/recall.ts`): Electron rebuilds
the window's drag rects only when a computed app-region value changes
(electron#32341), so the watcher measures every marked row each frame while the
surface moves, sets `data-window-drag-recall` for the frames whose geometry changed,
and clears it on the frame that finds the geometry settled. The right panel's
hand-written pulse is deleted with it.

Coverage is a contract with executable parts. `window-drag/regions.ts` publishes the
composition rule and the interactive selector that both the sheet and its spec
compare against; the ui-theme gate asserts the package tree declares drag in exactly
two places and pairs every row's mark with its sheet, selector, and authored height;
and the browser lane boots the shipped composition in Chromium with the darwin
marker to assert per-row geometry, a content body under a marked head row, a
covering overlay, and the watcher's pulse. The plugin manager's detail views mark
the head row they share rather than the pane they render in, so their text and form
labels stay content.

Both real machines agree: the macOS matrix ran on a real `hiddenInset` window with
HID-level pointer input and window-frame readback, and the Windows matrix on a
Windows 11 ARM64 VM — chrome rows drag, content and the covering overlay do not,
and the controls keep their clicks.

Refs #4619
2026-09-20 19:01:15 +08:00