fix(ui-conversation): keep the active tab bar visible over Trajectory and widen tab targets

Co-authored-by: Shigma <[email protected]>
This commit is contained in:
TurtleandShigma committed 2026-10-21 22:45:28 +08:00
1 parent ded424132e
commit 11e1580b82
4 files changed
+25 -10

No files matched your search

+3 -1
View File
@@ -276,7 +276,9 @@ describe('web e2e: macOS window drag coverage', () => {
{
row: 'conversation header',
what: 'the blank run right of the view tabs, on the tab strip row',
at: () => [tabs.x + tabs.width + 8, tabs.y + tabs.height / 2],
// The last tab's press target overhangs the tablist by 10px and the
// More launcher starts 20px past it; probe the run between them.
at: () => [tabs.x + tabs.width + 15, tabs.y + tabs.height / 2],
drag: true,
},
{
@@ -212,12 +212,19 @@
min-height: 25px;
}
/* The 16px text line retains 9px below it. The active bar reaches 1px past
the tab box to sit over the header rule. */
/* The 16px text line retains 9px below it. The press target extends 10px
above the text into the strip's top margin and 10px to each side, as the
Sidebar tab chips do (ui-dockkit `.tab`); negative margins keep the layout
at the text box. The active bar spans the text and reaches 1px past the tab
box to sit over the header rule. */
.tab {
--dsh-tab-hit-inline: 10px;
position: relative;
min-height: 25px;
padding: 0 0 9px;
box-sizing: border-box;
min-height: 35px;
margin: -10px calc(-1 * var(--dsh-tab-hit-inline)) 0;
padding: 10px var(--dsh-tab-hit-inline) 9px;
border: none;
background: transparent;
font-size: 13px;
@@ -230,9 +237,9 @@
.tab::after {
content: '';
position: absolute;
right: 0;
right: var(--dsh-tab-hit-inline);
bottom: -1px;
left: 0;
left: var(--dsh-tab-hit-inline);
height: 2px;
border-radius: 2px;
background: transparent;
@@ -8,8 +8,10 @@ describe('conversation header geometry', () => {
it('keeps the single-line header at the shared 76px height', () => {
expect(css.match(/\.header\s*\{([^}]*)\}/)?.[1]).toContain('min-height: 76px')
expect(css.match(/\.viewTabs\s*\{([^}]*)\}/)?.[1]).toContain('min-height: 25px')
expect(css.match(/\.tab\s*\{([^}]*)\}/)?.[1]).toContain('min-height: 25px')
expect(css.match(/\.tab\s*\{([^}]*)\}/)?.[1]).toContain('padding: 0 0 9px')
// The tab's 35px press target sits 10px above its 25px row through a negative top margin.
expect(css.match(/\.tab\s*\{([^}]*)\}/)?.[1]).toContain('min-height: 35px')
expect(css.match(/\.tab\s*\{([^}]*)\}/)?.[1]).toContain('margin: -10px calc(-1 * var(--dsh-tab-hit-inline)) 0')
expect(css.match(/\.tab\s*\{([^}]*)\}/)?.[1]).toContain('padding: 10px var(--dsh-tab-hit-inline) 9px')
})
it('uses 32px between view labels without changing the action gap', () => {
@@ -1,7 +1,11 @@
/* Full-bleed, fixed-height host for the trajectory ledger. */
/* Full-bleed, fixed-height host for the trajectory ledger. Isolation keeps the
sticky toolbar's z-index inside this view, so the conversation tab row
(ui-conversation `.tabs`, z-index 1) still paints its active bar over the
view's top edge. */
.root {
--dsh-trajectory-toolbar-height: 32px;
isolation: isolate;
display: flex;
flex-direction: column;
overflow: hidden;