From 285aa0b2b2da949524a910e5fdfcbe816ca23deb Mon Sep 17 00:00:00 2001 From: timkjr Date: Mon, 26 Oct 2026 21:35:04 -0500 Subject: [PATCH] fix(tabs): keep the plain wrap when the strip scrolls, add a browser test Review follow-up for the L-shaped header strip: - _syncTabStripCorner() keeps the plain wrap when the plain strip is already past --tab-strip-max-height, checked before .tabs-corner goes on: the float scrolled with the tabs while the toolbar stayed put, so a scrolled strip put tabs under #headerRight, and a re-render of a scrolled two-rows strip sized the float from the scrolled frame. The "- scrollTop" in contentTop is gone (always 0 now). - A strip just under its max-height that passes it once the float is in falls back to the plain wrap as well. - test/tab-strip-corner.browser.test.ts (real Chromium, real header and styles.css), listed in BROWSER_TEST_GLOBS. - src/web/CLAUDE.md Tab layouts entry describes the L-shaped classic strip. --- config/test-suites.ts | 1 + src/web/CLAUDE.md | 2 +- src/web/public/app.js | 15 +- src/web/public/styles.css | 5 +- test/tab-strip-corner.browser.test.ts | 227 ++++++++++++++++++++++++++ 5 files changed, 244 insertions(+), 6 deletions(-) create mode 100644 test/tab-strip-corner.browser.test.ts diff --git a/config/test-suites.ts b/config/test-suites.ts index d66abd58..40745032 100644 --- a/config/test-suites.ts +++ b/config/test-suites.ts @@ -27,6 +27,7 @@ export const BROWSER_TEST_GLOBS = [ 'test/tab-focus.browser.test.ts', 'test/session-sidebar-ux.browser.test.ts', 'test/header-divider.browser.test.ts', + 'test/tab-strip-corner.browser.test.ts', 'test/header-host-sensors.browser.test.ts', 'test/session-options-responsive.browser.test.ts', 'test/inline-rename.test.ts', diff --git a/src/web/CLAUDE.md b/src/web/CLAUDE.md index 1c884dfc..1d02a363 100644 --- a/src/web/CLAUDE.md +++ b/src/web/CLAUDE.md @@ -38,7 +38,7 @@ Frontend JS modules have `@fileoverview` with `@dependency`/`@loadorder` tags. L **Session list layout: header strip or left sidebar** (`sessionListLayout`, default `header`; per-device via `displayKeys`, also in `SettingsUpdateSchema`): the list can move into a collapsible `