From 20720ef238fd024f87fb235145243cc5b4d5a01f Mon Sep 17 00:00:00 2001 From: Yif <877193178@qq.com> Date: Thu, 23 Jul 2026 17:08:47 +0800 Subject: [PATCH] fix(gui): polish sidebar layout, wordmark, tooltip, and fonts to figma Fixed sidebar width (never concedes), figma session-row rail (16px twist + status slots, triangle arrows, mount fade), exact brand wordmark svg with tooltip'd rail controls, form controls inheriting the app font stack, and inlined the twist button reset since the tsdown CSS pipeline drops composes. --- .../ui-layout/src/client/AppFrame.module.css | 16 +- .../client/ui-layout/src/client/AppFrame.tsx | 9 +- .../client/ui-layout/src/client/columns.ts | 51 ++--- .../client/ui-layout/tests/app-frame.spec.tsx | 30 +-- .../client/ui-layout/tests/columns.spec.ts | 41 ++-- .../ui-primitives/src/BrandWordmark.tsx | 56 +++++ .../ui-primitives/src/Tooltip.module.css | 38 ++++ packages/client/ui-primitives/src/Tooltip.tsx | 72 +++++++ .../client/ui-primitives/src/icons/index.tsx | 16 +- packages/client/ui-primitives/src/index.ts | 3 + .../client/ui-primitives/tests/icons.spec.tsx | 4 +- .../ui-sidebar/src/client/Rows.module.css | 72 +++++-- .../client/ui-sidebar/src/client/Rows.tsx | 25 +-- .../src/client/SidebarRoot.module.css | 197 +++++++++--------- .../ui-sidebar/src/client/SidebarRoot.tsx | 136 +++++++----- .../ui-sidebar/tests/sidebar-root.spec.tsx | 19 +- packages/client/web/src/base.css | 10 + 17 files changed, 523 insertions(+), 272 deletions(-) create mode 100644 packages/client/ui-primitives/src/BrandWordmark.tsx create mode 100644 packages/client/ui-primitives/src/Tooltip.module.css create mode 100644 packages/client/ui-primitives/src/Tooltip.tsx diff --git a/packages/client/ui-layout/src/client/AppFrame.module.css b/packages/client/ui-layout/src/client/AppFrame.module.css index 631bb929db..b805bb178a 100644 --- a/packages/client/ui-layout/src/client/AppFrame.module.css +++ b/packages/client/ui-layout/src/client/AppFrame.module.css @@ -86,11 +86,25 @@ height: 32px; border-radius: 10px; box-sizing: border-box; - background: var(--dsw-alias-bg-layer-2); + background: var(--dsw-alias-button-floating-fill); border: 1px solid var(--dsw-alias-border-l2-darkmode-thin); + /* Hover affordance: the pill hides until the pointer is over the owning + column (data-side pairs handle and column), the strip itself, or a drag. */ + opacity: 0; + transition: + opacity var(--ds-transition-duration-slow) var(--ds-ease-in-out), + background var(--ds-transition-duration-slow) var(--ds-ease-in-out); +} + +.sidebarCol:hover ~ .handle[data-side='sidebar']::after, +.detailsCol:hover ~ .handle[data-side='details']::after, +.handle:hover::after, +.handle[data-dragging='true']::after { + opacity: 1; } .handle:hover::after, .handle[data-dragging='true']::after { + background: var(--dsw-alias-button-floating-hover); border-color: var(--dsw-alias-border-l3); } diff --git a/packages/client/ui-layout/src/client/AppFrame.tsx b/packages/client/ui-layout/src/client/AppFrame.tsx index e40c94454d..dfa8271075 100644 --- a/packages/client/ui-layout/src/client/AppFrame.tsx +++ b/packages/client/ui-layout/src/client/AppFrame.tsx @@ -34,8 +34,8 @@ function DetailsColumn(props: { children?: ReactNode }) { return