fix(dashboard): truncate the channel and status pane heading - #1426
Merged
Conversation
rmyndharis
force-pushed
the
fix/chats-pane-heading-ellipsis
branch
from
August 21, 2026 05:59
6b15b16 to
9796d24
Compare
The heading in those two panes carried none of the truncation its twin in the chat header has, so a title with no break opportunity kept its full natural width, ran past the panel and was cut mid-glyph by the layout's overflow with nothing to signal that text was missing. Neither heading exposed the full value anywhere either. overflow: hidden is the load-bearing declaration: it both clips and zeroes the flex item's automatic minimum, so nowrap and ellipsis need no min-width here or on an ancestor to engage.
The comment justifying the icon's flex-shrink opt-out claimed both of the icon's siblings opted out and that the icon was the only flexible item in the row. Neither held: the back button is display:none above the mobile breakpoint, and the heading has always had flex-shrink 1, resting only on its automatic minimum. Truncating the heading removes that minimum, so the heading now shares the deficit and the icon lands at a couple of pixels rather than zero. The opt-out stays load-bearing; only its stated mechanism moved.
rmyndharis
force-pushed
the
fix/chats-pane-heading-ellipsis
branch
from
August 21, 2026 06:51
9796d24 to
85d4a0a
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
.chats-page .chats-room-header h2, the heading of the channel and status panes, carried none of the truncation its twin.chats-page .room-contact-info h3has. A title with no break opportunity therefore kept its full natural width, ran past the panel, and was cut mid-glyph by.chats-layout { overflow: hidden }with nothing to signal that text was missing. Neither pane exposed the untruncated value anywhere.What changed
white-space: nowrap,overflow: hiddenandtext-overflow: ellipsison that heading.overflow: hiddenis the load-bearing one: it both clips and zeroes the flex item's automatic minimum, so the other two engage without amin-widthhere or on any ancestor.titleon both headings, so the full text is recoverable:activeChannel.namefor the channel pane, and for the status pane thename ?? pushName ?? idchain, hoisted toactiveStatusTitleso the heading and its tooltip read one expression rather than two copies..chats-page .chats-room-header > svg { flex-shrink: 0 }is rewritten. It claimed both of the icon's siblings opted out of shrinking and that the icon was the only flexible item in the row. Neither was ever true:.room-backisdisplay: noneabove the mobile breakpoint, and the heading has always hadflex-shrink: 1, resting only on its automatic minimum. Truncating the heading removes that minimum, so the heading now shares the deficit. Mutation-tested by removing the opt-out and re-rendering: the icon lands at 0px onmainagainst 1.2px to 4.5px on this branch at a 769px viewport, so the rule stays load-bearing and only its stated mechanism moved.Impact
Measured in headless Chromium with the real webfont and the production globals, across both navigation states, at 900px and 1024px viewports, with unbroken titles of 40 and 60 characters. Before, the heading never shrank in any of the 8 cells, its rendered width equalling the natural text width, and it overhung the layout edge by up to 392px. After, it stops 24px inside the edge, which is the header's own right padding, and the ellipsis engages in 7 of the 8 cells. The eighth is the one case where the title genuinely fits, 417px natural against 417px available, so no ellipsis there is correct. The header's own
scrollWidthdrops to exactly itsclientWidthin every cell, so it no longer overflows at all.Behaviour change worth knowing before reviewing screenshots: titles that do have spaces used to wrap. With the production
line-height: 1.6a 58 character spaced name and the navigation expanded rendered on 3 lines, 77px tall, at a 900px viewport and on 2 lines, 51px, at 1024px. The header is fixed at 70px, so the 900px case was not merely tall, it escaped the header and painted over the message feed. It now renders on one line of 26px in both. At the narrow end that is a fix rather than a restyle.Verification
main. The discriminating assertion isscrollWidthstaying at the natural text width whileclientWidthcollapses to the available width, with a non-visible overflow. A bounding rect alone is not sufficient evidence here:min-width: 0on its own moves the rect inside the edge while the text pixels still run to it unchanged, which is why it is not part of this change..chats-room-placeholder h2is a disjoint selector left untouched.lint,format:check,typecheck,i18n:check,build,test:unit, all pass. Docs lanetest:docspasses, 264 tests.Notes
The tooltip is a pointer affordance. On the single-pane touch layout below 768px there is no hover, so a truncated title is not recoverable there; the ellipsis still signals that it is truncated.
The changelog entry sits at the same anchor as the one in #1425. Whichever lands second will conflict there and needs a one line rebase. A conflicted PR in this repository gets no CI run at all and reports "no checks reported", which reads as pending rather than as never going to run, so re-check the second PR after rebasing.
Fixes #1423