feat(desktop): a tab's long title fades out at its end rather than ending in an ellipsis

Merged
DA
8d ago
+38-5

Dean asked for long tab titles to fade out instead of ending in an ellipsis.

What changed

  • Tab (tab-strip.tsx) already measures whether its label is cut short, for the hint. That measurement now also sets data-overflow on .tab-label.
  • In desktop.css, .tab-label no longer uses text-overflow: ellipsis. When data-overflow="true", a mask-image fades the label's last --label-fade to transparent. --label-fade is a new 20px token in base.css. A label that fits isn't flagged, so it gets no fade.
  • The mask fades the text itself, not a gradient painted over a background, so it looks the same on every fill: rest, hover, chosen, and dragging, in light and dark. No colour literals were added; #000 is the mask's alpha stop, as in the strip-edge fades from #1955.
  • The fade is only on the label. The icon, the unread dot, and the Ɨ are untouched, and the hover-time fade under an unchosen tab's Ɨ still applies on top. The full name still shows in the Tooltip.
  • The plan column's tab uses the same component, so long plan names fade too.

Test

desktop-plans.test.ts: "a tab's label cut short is marked to fade at its end, while a label shown whole is not". It stages a measured layout and checks that a long subagent tab gets data-overflow="true" and the short Work tab gets "false". Confirmed it fails without the change.

Evidence

Headless-Chrome crops of the real base.css + desktop.css (tab markup copied from what Tab renders, data-overflow measured in the page the way the component measures it, hover forced through a selector rewrite):

LightDark
lightdark

Mac verification

CI could not verify the Mac UI, and ./scripts/verify.sh was not run. This was built on a Linux cloud VM. The manual Mac pass is LUKE-159. ./scripts/check.sh exits 0.

šŸ¤– Generated with Claude Code