From 5fcee8957aa43af67e7675b8def3f640d4200b54 Mon Sep 17 00:00:00 2001 From: Dan Shapiro <3732858+danshapiro@users.noreply.github.com> Date: Fri, 31 Jul 2026 23:44:19 -0700 Subject: [PATCH] feat(tabs): uniform responsive tab widths (180px cap, equal shrink) Give every tab in the tab bar a uniform, responsive width instead of content-driven sizing with a hard 5rem title cap: - TabBar: each sortable tab wrapper gets w-[180px] min-w-[100px] shrink, so tabs are 180px when space allows and shrink equally to a 100px floor before the strip scrolls (single-row and multirow modes). The DragOverlay preview wrapper gets w-[180px] to match. - TabItem: tab root is w-full min-w-0; title span uses flex-1 min-w-0 truncate (close button pinned to the right edge); icons, status dot, and close button are shrink-0; rename input uses flex-1 min-w-0. - Tests: title-width-class test asserts the new flexible classes. Verified: 121 tests pass across TabItem, TabBar, overflow, multirow, a11y, and mobile suites. Generated with Amplifier Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com> --- src/components/TabBar.tsx | 11 ++++++++++- src/components/TabItem.tsx | 12 ++++++------ test/unit/client/components/TabItem.test.tsx | 10 +++++++--- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/components/TabBar.tsx b/src/components/TabBar.tsx index d262b05d8..52871d27d 100644 --- a/src/components/TabBar.tsx +++ b/src/components/TabBar.tsx @@ -121,7 +121,15 @@ function SortableTab({ ) return ( -
+
{activeTab ? (
+ return } /** Max pane-type icons shown per tab; panes beyond this fold into the '+N' badge. */ @@ -126,7 +126,7 @@ export default function TabItem({ ) return ( - + {groups.map((group) => ( {group.info && repoIconKeys.has(group.key) && ( @@ -158,7 +158,7 @@ export default function TabItem({ const tabContent = (
onRenameChange(e.target.value)} onBlur={onRenameBlur} @@ -209,14 +209,14 @@ export default function TabItem({ onClick={(e) => e.stopPropagation()} /> ) : ( - + {tab.title} )}