Commit Graph
100 Commits
Author SHA1 Message Date
Yif 0701068a31 fix(ui): polish session hints, task menus and plugin examples 2026-09-24 19:40:02 +08:00
Yif 5688962ee9 test(ui-primitives): count the 94 merged public glyphs 2026-09-23 23:48:05 +08:00
Yif 6ddece2439 refactor(ui-workspace): share the viewing store with the row toast as a declared store
The archived filter reaches the row toast through the registration's declared
store instead of a registrant-owned view hook, per the cross-entry view-state
rule. The README names the toast action by its actual label, and the
unarchive e2e switches back to Hide archived so it again proves the restored
row is an ordinary row in the default view.
2026-09-23 23:48:04 +08:00
Yif d6e5dc7748 test(client): cover the unset archived filter and follow the three-way menu in web goldens 2026-09-23 23:48:00 +08:00
Yif aaf733c175 fix(client): let a snippetless search result use the full row for its workspace name 2026-09-23 23:48:00 +08:00
Yif 64352df324 style(client): tune empty-state tokens and glyph spacing 2026-09-23 23:47:59 +08:00
Yif e28434bbc8 chore(client): re-record slot catalog source lines after the slots import 2026-09-23 23:47:59 +08:00
Yif 2129486048 feat(client): give the session list an iconed empty state with an archived-only way back 2026-09-23 23:47:30 +08:00
Yif 62bd4363e6 feat(client): omit the toast filter action while archived rows are visible 2026-09-23 23:46:21 +08:00
Yif 9775a95315 feat(client): make archived filtering an explicit three-way menu choice
The view-options filter is now hide/all/only radio items, the
archived-only view drops Workspaces without an archived Session, and
tree children of a dropped Workspace nest under the nearest shown
ancestor (#4854).
2026-09-23 23:46:21 +08:00
Yif 82b8c476e6 feat(client): add archive-off glyph and reuse chat-lines for session references 2026-09-23 23:46:21 +08:00
Yif 86e3e0e448 feat(web): refine the Team header panel interactions and adaptive header
The Team panel opens on hover with the subagent-catalog grace timings, pins
on click, polls the one-shot view RPC every 20s while open (replacing the
toolbar refresh/close controls), and eagerly loads on mount so the trigger
keeps a stable two-person icon. The lead card navigates from teammate
conversations, the current conversation carries a Current chat tag (selected
ring only among multiple members), task descriptions clamp to two lines
behind an expand toggle, an empty board shows a one-line description, and a
lone member narrows the panel to one column.

The header title row becomes an inline-size container: the preset label
hides first, then the Team trigger collapses to its icon and switches to
click-only opening. The subagent catalog moves to the front of the actions
band so lineage stays beside the title crumbs, and its pinned-menu behavior
matches the Team panel. Tooltip gains a gap prop for tight anchors.
2026-09-23 15:14:29 +08:00
Yif e8d5278c46 docs(skills): fix review findings in dsh-client-ui-ux and add scrollbar rule
Point selectable hover content at HoverCard (Tooltip has no interactive
prop), require a persistently mounted toast host, scope the font-weight
cap to new feature CSS, prefer theme typography tokens, link the styling
owners, date the design-reviewer roster, add the scrollbar containment
rule, and make the skill discoverable from packages/client/AGENTS.md.
2026-09-22 21:03:30 +08:00
Yif 6a07033145 docs(skills): require designer review for new icons and user-perceivable UI changes 2026-09-22 20:39:38 +08:00
Yif 5b600047d2 docs(agents): add dsh-client-ui-ux skill for client UI/UX design and review
Collects the standing judgment rules for product-user-visible GUI work:
token and shared-treatment reuse, light/dark readability, font weight and
size scale, feedback-surface choice (toast vs in-place notice vs empty
state), loading treatments, overlay dismiss/fit/clip checks, macOS/Windows
window adaptation, and spacing review. dsh-code-review links it from its
sources of truth so UI PR reviews load it.
2026-09-22 18:52:15 +08:00
Yif b631804d2b Merge remote-tracking branch 'origin/master' into fix/4781-dedupe-open-with-apps 2026-09-21 16:25:47 +08:00
Yif 3cab7723e4 fix(native-command): validate macOS grouping fields without an unsafe any 2026-09-21 16:12:09 +08:00
Yif 1a14166d2b fix(native-command): validate the full handler list and dedupe only for display 2026-09-21 15:46:03 +08:00
Yif 64094e8991 test(web): match the 36px unpreviewable open control height 2026-09-21 14:56:01 +08:00
Yif 9a485724f6 fix(open-in-app): scale the empty-state opener chevron up and trim its height to 36px 2026-09-21 14:15:11 +08:00
Yif 6cb1cd921f fix(native-command): collapse duplicate macOS handler copies to one menu entry 2026-09-21 13:58:18 +08:00
Yif 8dafa0829b Merge remote-tracking branch 'origin/fix/desktop-minimize-vibrancy' into fix/desktop-minimize-vibrancy 2026-09-21 13:04:29 +08:00
Yif b4886c7e5b feat(workspace): marquee hovered session titles with fades on both cut edges 2026-09-21 13:02:48 +08:00
Yif 44fe86eaf8 test(desktop): cover the minimize backdrop swap and extract the chrome fallback fill 2026-09-21 13:02:45 +08:00
Yif d72f85a0ad fix(desktop): paint an opaque base while minimized to cover the vibrancy reattach gap 2026-09-20 20:41:48 +08:00
Yif 9c48e74409 test(web): capture sidebar snapshots after the track-easing gate settles
The columnTransition probe raced data-animating's transitionend/600ms
settle: checkpoints recorded whichever side of the window the capture
landed on. Waiting for the attribute to drop pins the steady state —
no declared transition (computed 'all') — deterministically.
2026-09-19 16:39:47 +08:00
Yif 45d77b0e8e fix(ui-theme): match the scrollbar sheet exclusion against /-separated scan paths 2026-09-19 16:39:46 +08:00
Yif 9e95a7b183 fix(client): keep fullscreen sidebar strips draggable via fine-grained dockkit subtraction
Drop the fullscreen panel's whole-box no-drag: it swallowed the strips'
blank-run window drag and made no-drag the steady state, turning the
open/close app-region nudge into a computed-value no-op (electron#32341)
exactly when a hidden panel opens straight into fullscreen. The panel now
declares no steady-state app-region in either presentation, and ui-dockkit
subtracts the one box base.css never matches — the plain-div split divider —
alongside tabs, strip-end chrome, and pane bodies. New specs pin both
contracts against the stylesheets on disk.
2026-09-19 16:19:44 +08:00
Yif c6c1df6869 fix(ui-theme): normalize stylesheet-scan paths to forward slashes for Windows 2026-09-19 16:19:34 +08:00
Yif 699d06a7eb feat(client): widen overlay top margins to the frame's top clearance
Publish --dsh-frame-top-clearance on html[data-platform='darwin'] so
body-portalled overlays inherit it; useAnchoredMaxHeight and the portalled
Menu widen their 12px viewport margin to it, Modal centralizes the vertical
padding its cards previously each computed, and the trigger menu keeps an
84px margin on every platform so it stops below the conversation header.
Reduce Transparency replaces the sidebar tint with a 90%-opaque fill.
2026-09-19 15:37:47 +08:00
Yif a80f5186a6 Merge remote-tracking branch 'origin/master' into feat/macos-sidebar-ui-and-drag-refine 2026-09-19 14:05:21 +08:00
Yif de74a45f60 feat(desktop): raise the main window minimum width to 520 2026-09-19 13:42:52 +08:00
Yif 3f7a209835 revert(ui-primitives): drop the tooltip pointer-focus suppression 2026-09-19 13:42:50 +08:00
Yif c8e3cb2b87 test(web): track breadcrumb text crumb and shell.leading seat in e2e and goldens 2026-09-19 13:31:41 +08:00
Yif 8f2f13bc48 Merge remote-tracking branch 'origin/master' into feat/macos-sidebar-ui-and-drag-refine 2026-09-19 13:26:16 +08:00
Yif 34d78d843d feat(workspace): restore the hover title reveal with an 8px jitter floor
Hovering a session row again scrolls a clipped title to its far edge
(the #4423 reveal), but overflow of at most 8px stays put so barely
clipped titles do not jitter. The hover mask fade yields back to plain
clipping — at the scrolled extent the fade would cover the revealed
tail. Row action buttons tighten from gap 12 to 10.
2026-09-19 12:04:07 +08:00
Yif 1d221f9723 fix(workspace): end-aligned action tooltips, slower hover cards, archived-row alignment 2026-09-19 12:04:07 +08:00
Yif 9ca19474ab fix(workspace): tooltip the row hover actions and open the sliders glyph 2026-09-19 12:04:07 +08:00
Yif 94c62ea564 fix(client): draw the sidebar new-chat glyph at the regular weight 2026-09-19 12:04:07 +08:00
Yif 5474efe890 fix(client): lighten the ellipsis glyph and adopt the Toast success tone 2026-09-19 12:04:07 +08:00
Yif bd0461c894 fix(workspace): give the compact-label row spec the pin/archive props 2026-09-19 12:04:07 +08:00
Yif 3e96ed79a7 fix(workspace): steady hovered session titles and polish the sidebar controls
Hovering a session row no longer scrolls its clipped title (the mask fade
stays), the one-time archived-filter callout and the content-search
unavailable notice are gone, the group-row new-session button shares the
new-chat glyph, and the view-options trigger uses the two-slider icon with
a 200px menu floor and a visible separator hairline.
2026-09-19 12:04:07 +08:00
Yif 33d496951c feat(workspace): session pinning and the sidebar archived filter
Pin sessions to the top of the sidebar and reach archived sessions
through the view-options filter instead of a settings page; archiving
gains an undo/filter toast, and row motion stays reserved for pin jumps
and archive fades.
2026-09-19 12:04:07 +08:00
Yif b46af4d288 Merge remote-tracking branch 'origin/master' into feat/macos-sidebar-ui-and-drag-refine 2026-09-18 23:05:35 +08:00
Yif 1cfb776604 fix(ci): re-record slots pairing, refresh breadcrumb golden, cover null-panel nudge branch
The master merge invalidated docs/subsystems/slots.md's recorded pairing hashes; the minimal-preset UI golden still expected the breadcrumb as a disabled button, which darwin drag-band avoidance intentionally turned into plain text; and the app-region nudge effect's unattached-ref return had no darwin first-render test.
2026-09-18 23:05:24 +08:00
Yif d1e7bd0901 fix(client): keep the drag-gate fixture path outside packages/ so verify-package-paths resolves 2026-09-18 22:18:52 +08:00
Yif 6f77b92121 docs(notes): reconcile shell.leading note with the sessionless conversation.header.leading seat
Master's sessionless-sidebar work renamed the conversation leading seat to
root-scoped conversation.header.leading instead of deleting it; the note now
states both seats' current roles rather than claiming outright removal.
2026-09-18 22:01:05 +08:00
Yif 64556a1285 fix(client): restore fullscreen panel drag subtraction, correct seat mount-condition docs
The fixed fullscreen right panel sits over the frame's leading band and the
sidebar logo row's drag rects, so without a whole-box no-drag its
non-interactive content dragged the window; restore the subtraction (darwin).
The shell.leading note and AppFrame comment now state the real mount
condition (darwin && sidebarCollapsed) instead of the platform-agnostic
collapsedWidth === 0 claim, which Windows' caption collapse also satisfies.
2026-09-18 21:51:01 +08:00
Yif d94aef5214 Merge remote-tracking branch 'origin/master' into feat/macos-sidebar-ui-and-drag-refine 2026-09-18 21:42:09 +08:00
Yif 50f7bc0bc6 fix(client): declare pointerup/pointercancel on Tooltip AnchorProps 2026-09-18 21:41:57 +08:00
Yif 5467209f8e fix(client): settle tooltip pointer flag, harden drag gate, scope shared-curve doc
Clear pointerFocus on pointerup/pointercancel so a press that never moves
focus cannot swallow the next keyboard focus; match prefixed/unprefixed
app-region with !important tolerance and prove the allowlist path rejects
an offender; scope the ui-layout shared-curve limitation to data-animating.
2026-09-18 21:23:11 +08:00
Yif 8837c532d1 Merge remote-tracking branch 'origin/master' into feat/macos-sidebar-ui-and-drag-refine 2026-09-18 20:54:38 +08:00
Yif 761f53223a feat(desktop): align main window default and minimum size with Codex (1280x820, min 480x600) 2026-09-18 18:44:24 +08:00
Yif e9b928d993 Merge remote-tracking branch 'origin/master' into feat/macos-sidebar-ui-and-drag-refine
# Conflicts:
#	.agents/notes/implemented/feature/2026-09-13-macos-hidden-titlebar-vibrancy.i18n.yaml
#	.agents/notes/implemented/feature/2026-09-13-macos-hidden-titlebar-vibrancy.md
#	.agents/notes/implemented/feature/2026-09-13-macos-hidden-titlebar-vibrancy.zh.md
#	docs/subsystems/slots.i18n.yaml
#	docs/subsystems/slots.md
#	docs/subsystems/slots.zh.md
#	packages/client/ui-conversation/src/client/contract/slots.ts
#	packages/client/ui-conversation/src/client/skeleton/ConversationRoot.module.css
#	packages/client/ui-conversation/tests/skeleton.client.spec.tsx
#	packages/client/ui-sidebar/README.i18n.yaml
#	packages/client/ui-sidebar/README.md
#	packages/client/ui-sidebar/README.zh.md
#	packages/client/ui-sidebar/src/client/HeaderLeadingControls.tsx
#	packages/client/ui-sidebar/src/client/index.ts
#	packages/client/ui-sidebar/tests/apply.client.spec.tsx
#	packages/extensions/cordis-client-runner/src/client/slot-catalog.ts
2026-09-18 18:34:12 +08:00
Yif c3226f93e9 Merge remote-tracking branch 'origin/master' into feat/plugin-refine
# Conflicts:
#	packages/client/ui-primitives/README.i18n.yaml
#	packages/client/ui-primitives/README.md
#	packages/client/ui-primitives/README.zh.md
#	packages/client/ui-primitives/tests/icons.client.spec.tsx
2026-09-18 17:43:20 +08:00
Yif 978e39e94e fix(plugin-manager): align plugin-config e2e and README quotes with revised copy
The plugin-config e2e pinned the old terminal one-liner and its golden still
carried the three pre-revision summaries; the ui-plugin-manager READMEs still
quoted the renamed install-guide button. Refresh the golden, update the
assertion and both READMEs, and re-record the translation pairing.
2026-09-18 17:30:31 +08:00
Yif a6267c8d90 fix(plugin-manager): per-instance artwork ids, detail error feedback, coverage
Give every plugin artwork per-instance SVG def ids via useId so repeats on
one page keep their gradients and clips; drop the dead agent-team-web-profile
artwork row; keep the read-failure alert and retry visible on detail pages;
cover the new artwork components and the default-artwork branch; document the
artwork exports in the ui-primitives READMEs; refresh the plugin-manager and
plugin-install-cancel web expected outputs for the revised copy.
2026-09-18 16:30:25 +08:00
Yif 92101e1a5b fix(ui-conversation): render the current crumb as text so the title joins the drag band
The current session's breadcrumb was a disabled button: the global darwin
no-drag rule subtracted it from the window drag band while its disabled state
and button user-select kept it from doing anything else, leaving the title a
dead zone that neither dragged the window nor selected. Plain text keeps the
native titlebar behavior — the title drags the window; ancestor crumbs stay
buttons.
2026-09-18 15:59:27 +08:00
Yif e67aca993e docs(notes): align window-chrome notes and sidebar README with shipped drag ownership
The seat note claimed a plugin-manager inline clearance formula that never
shipped (entry pages pad by the unconditional --dsh-frame-top-clearance) and
omitted the 84px fullscreen clearance tier. The vibrancy note still called the
sidebar top strip a drag region after that declaration moved to the frame's
.leadingBand, said drag lives in "exactly two places" while the Windows caption
::before is a third, and lacked the dsh-desktop:window-fullscreen relay that
drives html[data-fullscreen]. The ui-sidebar README carried the same stale
top-strip drag claim. Chinese sides follow; pairings re-recorded.
2026-09-18 15:14:59 +08:00
Yif b42bb09420 Merge remote-tracking branch 'origin/master' into feat/plugin-refine 2026-09-18 15:10:18 +08:00
Yif c52400ad72 test(ui-primitives): count the new check-circle glyph in the icon set 2026-09-18 15:01:43 +08:00
Yif 76fa3860c6 fix(plugin-manager): drop guide item background that surfaced in dark mode 2026-09-18 14:54:12 +08:00
Yif 3065e75d08 Merge remote-tracking branch 'origin/master' into feat/plugin-refine
# Conflicts:
#	packages/client/ui-plugin-manager/src/client/locales.ts
#	packages/client/ui-primitives/src/icons/index.tsx
2026-09-18 14:45:13 +08:00
Yif e509dd9341 fix(client): pulse an app-region nudge at the right panel's open/close edges
Electron recollects window drag rects only when a style or layout pass
dirties an app-region value, and Blink skips hidden boxes when collecting
them, so the first open of the slid-off panel left the strip swallowed by
the drag band until an unrelated layout ran.
2026-09-18 14:28:12 +08:00
Yif 9ae6f0defa fix(client): mount the shell.leading seat on macOS only and cover the fullscreen relay 2026-09-18 14:28:07 +08:00
Yif bd6447479d refine(plugin-manager): polish install dialog guide, input, and wizard states 2026-09-18 14:00:50 +08:00
Yif 02bb08ecd9 fix(client): compensate menu fills for the blur the transparent window disables 2026-09-18 13:33:00 +08:00
Yif 8072511aad fix(client): subtract dockkit strip runs and pane bodies from the macOS drag band 2026-09-18 13:32:55 +08:00
Yif e44345c044 test(desktop): stub syncWindowFullscreen in preload-platform mocks 2026-09-18 13:32:53 +08:00
Yif fd04c0c4be feat(client): make the macOS sidebar wordmark a window-drag surface
On darwin the expanded brand renders as a plain span instead of the New
Session shortcut button, so it stops matching the global interactive
no-drag rule and inherits the logo row's drag region; the dedicated New
Session button keeps the action.
2026-09-18 12:25:05 +08:00
Yif b9bc99b675 Merge origin/master (#4451 developer tools setting)
The view tab strip keeps the data-conversation-tabs marker on upstream's
showTabs condition, so the deepened drag band follows the compact header.
2026-09-18 12:01:55 +08:00
Yif 994e998b7d feat(client): deepen the conversation drag band to the header block
While the Conversation is selected and its header shows the view tab strip,
the macOS window drag band grows from 52px to the 76px header block (title
row plus tab strip), so blank header space drags. The band matches the
strip's data-conversation-tabs marker via :has, so a compact header (single
view, per #4451's developer-tools setting) falls back to the 52px strip.
2026-09-18 11:59:45 +08:00
Yif c8b17dd4d0 refine(plugin-manager): per-plugin artwork, trailing load-failure notice, friendlier copy 2026-09-18 11:38:45 +08:00
Yif d66b9c81b1 fix(desktop): drop superseded preload.ts after merge
Upstream removed the standalone plugin manager and replaced this bridge
with preload-app.ts; the fullscreen sync it carried already lives there.
2026-09-18 11:36:21 +08:00
Yif e9def243e2 Merge origin/master into feat/macos-sidebar-ui-and-drag-refine
Keeps both window-chrome features: this branch's macOS shell.leading seat,
single drag owner, and fullscreen sync alongside upstream's Windows desktop
titlebar (#4407). ipc.ts and preload-app.ts merge both platforms' channels
and preload wiring; Tooltip merges upstream's suppression context with this
branch's pointer-focus suppression; slot-catalog regenerated.
2026-09-18 11:27:06 +08:00
Yif 8019d37d3f feat(client): frame-owned macOS window chrome with single drag owner
One 52px leadingBand in the AppFrame (frame's first child) plus the sidebar
logoRow are the only -webkit-app-region drag surfaces; everything interactive
subtracts itself through two global base.css rules (interactive elements and
body > :not(#root) overlay portals), so header controls, breadcrumb chips, and
strip tabs stay clickable under the band. A ui-theme stylesheet gate pins the
two-file drag allowlist. The frame publishes --dsh-frame-top-clearance (48px)
for entry pages (plugin manager list and detail) beside the existing
--dsh-frame-leading-clearance, replacing per-page hardcoded insets. The
shell.leading window-chrome seat moves the collapsed-sidebar reopen controls
from the conversation header to the frame. Sidebar vibrancy tint drops the
blue cast in dark mode and halves its fill opacity, light mode softens the
blue mix, and the logo row tightens 4px above New Session.
2026-09-18 11:08:13 +08:00
Yif c6b81a75fd fix(web): polish the plugin page, detail page, and rail per design
Ported from fix/plugin-manager-ui-polish (cce193cff3, 4ed0f1c9cb) onto
the page as it stands after the #4182 re-port: a 32px rhythm on the page
and the detail sections; a four-arc pinwheel icon on the cards, the
detail head, and the sidebar entry; the version as a tag beside the
detail title and the crumb leading back only; a red-tinted uninstall pill
with its trash icon and a plus icon on Add plugin; a round refresh action
and caption-toned counts; 12px hover rounding across the rail controls;
and the group copy renamed to Installed. The non-bundle group and its
info tooltip are not carried, since the page lists bundles only.
2026-09-15 18:11:11 +08:00
Yif f2db686404 feat(desktop): macOS hidden titlebar with vibrancy sidebar
hiddenInset titlebar with traffic lights over a vibrancy sidebar, darwin-only
via data-platform set by the desktop preload: transparent chain to the window
material, native-theme sync from the app theme source, sidebar top strip +
full hide when collapsed with reopen controls in the new
conversation.session.header.leading slot, title-row drag regions, and
fullscreen right-sidebar traffic-light clearance via the dockkit strip inset.
2026-09-15 02:26:57 +08:00
Yif f51addaa0d fix(web-sidebar): resolve review feedback on document preview polish
- files tree records its scroll offset in a ref and commits it once on
  unmount, only while the owner's signal is live, so a scroll neither
  re-renders the tree nor writes to a forgotten bucket
- LoadingIndicator drops iconOnly and always renders icon-only
- registry and the unviewable list share one suffix-matching module, and
  register() rejects binaryExtensions entries outside extensions
- drop the ambiguous key suffix from the unviewable office group
- extract the text preview's header path block shared by the unsupported
  and content branches; clsx for static class joins; CSS trailing newline
- sync the preview-operations and polish Agent Notes with shipped facts
2026-09-14 18:06:23 +08:00
Yif f7e010a70a docs(agent-notes): cite issue 3974 as plain text to satisfy the repository-references gate 2026-09-13 13:37:02 +08:00
Yif 25e6e976b7 test(sidebar-documentpreview): cover the visible-label loading branch and drop the stale single-viewer control from the seeded-history golden 2026-09-13 13:28:16 +08:00
Yif 004dceed5e feat(sidebar-files): restore the tree's scroll position across tab switches 2026-09-12 00:07:50 +08:00
Yif adbe7e6395 fix(documentpreview): draw pdf page placeholders on the skeleton token 2026-09-12 00:07:40 +08:00
Yif 351b399639 feat(ui-commands): swap the feedback command icon to a paper plane 2026-09-11 23:42:32 +08:00
Yif f210305689 fix(documentpreview): fit images to the pane and polish binary and loading states 2026-09-11 23:42:20 +08:00
Yif ce1a55816f Merge remote-tracking branch 'origin/refine/connecting-ui' into refine/connecting-ui 2026-09-11 13:28:50 +08:00
Yif dd7ba51a13 Merge remote-tracking branch 'origin/master' into refine/connecting-ui
# Conflicts:
#	packages/client/ui-primitives/README.i18n.yaml
#	packages/client/ui-primitives/README.md
#	packages/client/ui-primitives/README.zh.md
2026-09-11 12:29:34 +08:00
Yif 11ca8020cd fix(sidebar): keep one reconnect label and confirm recovery from visibility
ConnectionController deduplicates repeated connecting states across backoff
attempts, so the shell cannot tell manual retries from automatic ones; a
shell-held flag either flipped the label mid-hold or stuck across later
attempts. Every attempt now reads the single connecting label, and the
two-second recovery confirmation starts when the recovered pill becomes
visible rather than at the state transition, so the 800ms hold never
shortens it.
2026-09-10 20:12:09 +08:00
Yif b044e45438 test(web): pin the static connection pill in the lifecycle browser snapshot 2026-09-10 19:52:38 +08:00
Yif 16e986548e test(sidebar): pin the refined connection indicator behavior and docs
Update the behavior tests for the static retry label, the 800ms minimum
connecting hold, manual-versus-automatic attempt naming, and the 150ms
fade-out unmount; restate the interaction in both packages' bilingual
READMEs and record the decision as an Agent Note.
2026-09-10 19:29:48 +08:00
Yif 626fa816a5 feat(sidebar): refine the connection indicator states and styling
The disconnected pill now names the retry action statically (refresh icon +
"连接异常,刷新重试") instead of swapping text on hover; connecting shows a
spinner, holds visible for at least 800ms, and distinguishes manual retry
(重新连接中) from automatic backoff (自动重连中); state changes fade over
150ms. Pill chrome tightened to 28px height with a 20%-alpha label border.
2026-09-10 17:45:56 +08:00
Yif 53d5c9386e fix(sidebar): pin the guide hero to the pure-gray ramp
The label-dimmed alias rides the bluish neutral ramp, whose cast shows
at the 56px compass; the hero now takes neutral-200 (light) and
neutral-700 (dark) from the pure-gray static ramp.
2026-09-10 01:32:45 +08:00
Yif 1c044f5140 feat(sidebar): refine guide start page and quiet stat pill noise
The guide tab gains a compass hero, per-entry descriptions (shown while
at most four entries are listed), and a quieter cube placeholder for
entries that registered no glyph; the files entry registers its
description and folder glyph. Bundled stat fixes: the session usage
dialog drops the zero cache-write row, and the turn-time pill renders as
plain text when its dialog would only repeat the pill's own duration.
2026-09-10 01:23:24 +08:00
Yif 3b4122ac16 feat(client): polish sidebar and file preview interactions
Seed sidebar default pages lazily on expansion, scope page-tab dedupe
to the target pane, let a sole tab split its own pane with a factory
backfill, close menus when focus enters a sandboxed iframe, and pin the
code preview copy banner while unifying its background with the pane.
2026-09-09 17:27:37 +08:00
Yif d0a1ab8723 chore(client): regenerate slot catalog after master merge 2026-09-09 12:15:00 +08:00
Yif c73dcecb96 fix(textpreview): say a stat-and-read failure once
A file whose stat and first page both fail — outside the workspace, gone —
showed the same line twice: the metadata bar above an identical centred body
failure. The bar now stands only over pages already loaded, and the centred
retry runs the full reload so one press clears both halves.
2026-09-09 12:15:00 +08:00
Yif 284758cbc3 test(web): refresh goldens for the sidebar aria renames
The expand/collapse and wrap toggles' accessible names diverged from their
tooltips, and the replay harness now normalizes clientTimeZone in recorded
sessions; every golden holding the old names or the literal zone refreshes.
2026-09-09 12:15:00 +08:00
Yif c76e371874 fix(sidebar): address review feedback on aria names, touch hits, and fullscreen close
- Split toggle aria-labels from their tooltips: the sidebar expand/collapse
  buttons announce "Open/Collapse right sidebar" so the two sidebars stay
  distinguishable, and the wrap toggle keeps an invariant "Line wrap" name
  beside aria-pressed while the tooltip keeps the action wording.
- A hidden tab close also takes no pointer events, so a touch press on the
  chip's trailing edge activates the tab instead of closing it; e2e closes
  hover the chip first, the way a reader would.
- Closing the last docked tab in fullscreen hands the mode back to push, so
  the next expand does not give the whole window to the start page.
- The drop scrim mixes from bg-base, not bg-layer-2, which dark mode binds
  to a lighter bluish step than the column beneath it.
- Document the menuitem probe in TabMenuExtras and the strip fade's known
  gap; match the open-in-app split-button comment to the 28px control row.
2026-09-09 12:14:59 +08:00
Yif 814f447b8f fix(dockkit): move ui-primitives to devDependencies and hoist zone glyph paths past the i18n gate 2026-09-09 12:14:59 +08:00
Yif 5e44fc79d3 test(web): refresh header and file-preview goldens for renamed controls 2026-09-09 12:14:59 +08:00