You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Bug]: Wide chat mode opens minimap preview over text and blocks selection #16447
With Chat width → Wide, the message navigation preview opens over response text and blocks text selection.
Steps to reproduce
Set Chat width to Wide.
Open a conversation with the message navigation minimap (the vertical strip of short horizontal marks on the left).
Try to select message text near the left edge of the conversation.
Actual behavior
The minimap message-preview popup opens over the text and prevents the user from selecting the intended text. The supplied screenshot shows the navigation marks next to the message body and a preview card covering part of the response. A second screenshot confirms that Chat width is set to Wide.
Expected behavior
Message text remains selectable in Wide mode. The minimap hover and click targets stay within the navigation strip and do not intercept pointer actions on message text.
Evidence and limits
Reported on 2026-10-06 with the two screenshots below. The behavior was not independently reproduced. The app version, OS, window size, and zoom level were not supplied.
The maintainer triage comment identifies the open preview’s expanded hit area as the cause from source inspection. Comfortable and Full modes were not tested in a running client.
Screenshots
Related: #3702 covered the collapsed minimap strip overlapping text and was fixed by #3869. Maintainer triage identifies this report as a separate path involving the open preview’s expanded hit area.
The collapsed strip is still gutter-capped. resolveTimelineMinimapHitStripWidth measures the rendered column ([data-timeline-root], .chat-content-lane) and keeps the hit area between left-3 and the column, or disables it when the gutter is too small. Wide mode doesn't change that.
Opening a mark does. resolveTimelineMinimapInteractiveWidth switches the same element to a fixed 22rem whenever a preview is open, for the full height of the rail. The preview card is left-8 w-80 inside that box (TimelineMinimap in apps/web/src/components/chat/MessagesTimeline.tsx). The rail button fills the box, and its mousedown calls preventDefault() except on the preview itself, so the message underneath can't start a selection. mouseleave only fires after the pointer leaves the whole 22rem area, so brushing the strip keeps the card up while the pointer is over the text.
Wide sets --chat-content-max-width to 72rem. The preview box runs from 12px to about 364px, and the column's left edge is (pane − 1152px) / 2, so on a timeline pane narrower than about 1880px the open card and its hit target cover the message. That matches the screenshots. Comfortable (46rem) only hits this under about 1464px, which is why it shows up with Wide. Full width measures a zero gutter, so the strip stays pointer-events-none and this path shouldn't open. Comfortable and Full weren't checked in a running client, and there's no minimap on mobile.
Likely fix area
Some options, keeping the collapsed strip gutter-capped either way:
When a preview is open, limit pointer events to the strip plus the card (and a short bridge between them) instead of stretching the full-height rail to 22rem across the column.
Dismiss the preview when the pointer moves onto the message, so the text can be selected.
A 20rem card can't fit in a Wide gutter, so it may still paint over the column. One option is to let it paint there without owning the pointer.
Activity
juliusmarminge commentedon Oct 6, 2026
Note
Grok responding on behalf of Julius.
Triage
Thanks @MaximilianMauroner for the screenshots and for filing this separately from #3702. The Wide-mode report lines up with the current code.
What I found
main(9bd1d8009a), this looks like a new path rather than a reopen of [Bug]: Timeline minimap hover target extends into text content area at non-default zoom levels #3702. That issue was closed by fix(web): scope timeline minimap hover target to the side gutter #3869, which caps the collapsed minimap strip to the side gutter so it doesn't sit on the message column. The open preview kept a fixed-width target, and the Chat width setting from feat(web): add chat width setting for wide screens #11594 is what makes that target land on the text.resolveTimelineMinimapHitStripWidthmeasures the rendered column ([data-timeline-root],.chat-content-lane) and keeps the hit area betweenleft-3and the column, or disables it when the gutter is too small. Wide mode doesn't change that.resolveTimelineMinimapInteractiveWidthswitches the same element to a fixed22remwhenever a preview is open, for the full height of the rail. The preview card isleft-8 w-80inside that box (TimelineMinimapinapps/web/src/components/chat/MessagesTimeline.tsx). The rail button fills the box, and itsmousedowncallspreventDefault()except on the preview itself, so the message underneath can't start a selection.mouseleaveonly fires after the pointer leaves the whole22remarea, so brushing the strip keeps the card up while the pointer is over the text.--chat-content-max-widthto72rem. The preview box runs from 12px to about 364px, and the column's left edge is(pane − 1152px) / 2, so on a timeline pane narrower than about 1880px the open card and its hit target cover the message. That matches the screenshots. Comfortable (46rem) only hits this under about 1464px, which is why it shows up with Wide. Full width measures a zero gutter, so the strip stayspointer-events-noneand this path shouldn't open. Comfortable and Full weren't checked in a running client, and there's no minimap on mobile.Likely fix area
Some options, keeping the collapsed strip gutter-capped either way:
22remacross the column.20remcard can't fit in a Wide gutter, so it may still paint over the column. One option is to let it paint there without owning the pointer.A maintainer will decide on the fix direction.