Skip to content

fix(desktop): un-clip hover action bar's upward bleed under content-visibility#1354

Merged
wesbillman merged 1 commit into
mainfrom
brain/reaction-bar-clip
Jun 29, 2026
Merged

fix(desktop): un-clip hover action bar's upward bleed under content-visibility#1354
wesbillman merged 1 commit into
mainfrom
brain/reaction-bar-clip

Conversation

@wesbillman

@wesbillman wesbillman commented Jun 29, 2026

Copy link
Copy Markdown
Collaborator

What

The message-row action bar (react / reply) intentionally bleeds slightly above its row's top edge. After #1338 added content-visibility: auto paint containment to timeline rows, that containment clipped the overhang — leaving the reaction bar sheared off at the top (both the normal message hover bar and the system "joined the channel" row's react button).

Fix

One CSS rule: drop paint containment on a row only while it's hovered / focused — the only time the action bar is visible.

.timeline-row-cv:is(:hover, :focus-within) {
  content-visibility: visible;
}

Idle and offscreen rows keep content-visibility: auto, so the #1338 scroll/perf win is fully preserved. This mirrors the existing .content-visibility-auto-interactive pattern already in the same file, so it's idiomatic here.

The original "floating bleed above the message" positioning is untouched — earlier component-level experiments were reverted; MessageRow / MessageThreadPanel are back to origin/main.

Test

Adds an e2e regression guard in messaging.spec.ts asserting a hovered row resolves to content-visibility: visible. Proven to bite: removing the CSS rule fails the guard.

  • tsc clean, biome clean, build green
  • 22 timeline / scroll / virtualization e2e tests pass → no scroll regression

Diff

2 files / ~14 lines (CSS rule + e2e guard).

Screenshots

Normal message — bleed-above look restored, bar fully rendered:

normal message action bar

System "joined the channel" row — react button is now a full circle, no longer sheared:

system row react button

…isibility

The message-row action bar (react/reply) intentionally bleeds slightly above
its row's top edge. After #1338 added `content-visibility: auto` paint
containment to timeline rows, that containment clipped the overhang, leaving
the reaction bar sheared off at the top.

Fix: drop paint containment (`content-visibility: visible`) on a row only
while it is hovered/focused — the only time the action bar is visible. Idle
and offscreen rows keep `content-visibility: auto`, so the #1338 scroll/perf
win is fully preserved. This mirrors the existing
`.content-visibility-auto-interactive` pattern in the same file.

Adds an e2e regression guard in messaging.spec.ts that asserts a hovered row
resolves to `content-visibility: visible` (proven to fail without the rule).

Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
@wesbillman wesbillman merged commit 7adbd05 into main Jun 29, 2026
25 checks passed
@wesbillman wesbillman deleted the brain/reaction-bar-clip branch June 29, 2026 16:17
tlongwell-block pushed a commit that referenced this pull request Jun 29, 2026
Brings the merged #1321 multi-tenant relay rewrite (and other main
commits) under the chart-fix branch so #1348 renders and tests against
current main. No conflicts.

Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>

* origin/main:
  Multi-tenant Buzz relay: community_id as a server-resolved key (comprehensive rewrite) (#1321)
  Disable persona start while runtime discovery runs (#1353)
  chore(deps): update dependency @tanstack/react-virtual to v3.14.4 (#1342)
  Fix sidebar unread indicator placement (#1319)
  fix(desktop): un-clip hover action bar's upward bleed under content-visibility (#1354)
  Allow Huddle between 2 humans in DM (#1347)
  chore(release): release Buzz Desktop version 0.3.36 (#1352)
  Polish agent runtime cards (#1327)
  Rework desktop message-timeline scrolling: de-virtualize + native overflow-anchor (#1338)
  Keep wave huddles pending for placeholder profiles (#1349)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant