Uh oh!
There was an error while loading. Please reload this page.
feat: message menu, selectable prose, and the phone and settle fixes - #37
Open
divyanshub024 wants to merge 12 commits into
Open
feat: message menu, selectable prose, and the phone and settle fixes#37divyanshub024 wants to merge 12 commits into
divyanshub024 wants to merge 12 commits into
Conversation
8 tasks
divyanshub024force-pushed
the
fix/mobile-touch-targets-and-caret
branch
from
August 29, 2026 22:15
c7949f5 to
b4d4d37Comparedivyanshub024force-pushed
the
feat/message-menu-and-text-selection
branch
from
August 29, 2026 22:16
51e42af to
bc6e368CompareUh oh!
There was an error while loading. Please reload this page.
divyanshub024force-pushed
the
fix/mobile-touch-targets-and-caret
branch
from
August 30, 2026 07:43
b4d4d37 to
8edf666Comparedivyanshub024force-pushed
the
feat/message-menu-and-text-selection
branch
from
August 30, 2026 07:43
bc6e368 to
f7a766eCompareUh oh!
There was an error while loading. Please reload this page.
divyanshub024force-pushed
the
feat/message-menu-and-text-selection
branch
from
August 30, 2026 08:07
f7a766e to
f14a149Comparedivyanshub024force-pushed
the
feat/message-menu-and-text-selection
branch
from
August 30, 2026 08:24
f14a149 to
b5bb110CompareUh oh!
There was an error while loading. Please reload this page.
divyanshub024force-pushed
the
feat/message-menu-and-text-selection
branch
from
August 30, 2026 08:36
b5bb110 to
7630fb1CompareThere was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 7630fb1. Configure here.
Uh oh!
There was an error while loading. Please reload this page.
This was referenced Aug 30, 2026
divyanshub024
changed the base branch from
fix/mobile-touch-targets-and-caret
to
mainAugust 30, 2026 11:55
8 tasks
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 freeto 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.

Summary
One PR for what was the stack #35, #36, #37: retargeted to
mainwith the commits unchanged, so the two PRs beneath are folded in here and closed.Message menu and selectable prose (the tip, #37)
FlowThread.messageMenu(message)hands back a message's entries (FlowMenuOptions and dividers, labels the host's) andonMessageMenuSelected(message, id)reports the pick;FlowMessagetakes the pair asmenuEntriesandonMenuSelected. A long-press with a haptic on touch, a right-click on pointer platforms; the phone sheet or a popover at the pointer, by the theme's platform like the other menus. Hit-testing defers to the child, so the blank run beside a user bubble is not the message, and controls with their own long-press (tooltips, code blocks) keep it.FlowMenu's entry-to-rows and sheet builders move toflow_menu_entries.dartand are shared with the message menu, so oneentrieslist reads the same wherever it opens.FlowThread.selectable(on by default) makes the conversation aSelectionAreaon pointer platforms; it sits above the messages, so their gestures still win and right-click still opens the menu. Phones select from the menu instead:showFlowTextSelectionpushes a full-screen page of a message's text, typeset throughFlowMarkdowninside aSelectionArea, andFlowMessageData.plainTextis the text to hand it.Phone pass: touch targets, control names, the caret (was #36)
FlowTouchTargetwidens hit areas to a finger's 44 to 48px on touch platforms without changing layout, sized per site so a neighbour's taps stay its own; applied to the message actions, the attach, send, stop, remove and error-dismiss discs, the menu triggers and the code block's copy. Pointer platforms pass straight through.FlowComposer.sendTooltipandstopTooltipname the discs, so VoiceOver no longer announces an unnamed button.FlowSelectionThemederives the caret, selection wash, handles and Cupertino primary fromFlowColors, so a host on a stockThemeDatano longer gets Material's purple; wraps the chat view and the composer.kIsWeb, silencing the two runtime warnings it logged on iOS.Thread settle (was #35)
RangeMaintainingScrollPhysicsthen carries.FlowThreadnow clamps an idle position back into range, on every metrics change and on every scroll end, each covering the other's blind spot. The list gets its own controller when the host passes none; a host sharing one controller across lists opts out of the settle.Screenshots
The menu sheet, the select text page and the caret before and after are attached on the original PRs (#36, #37 comments). The settle fix removes a broken state rather than changing a drawn one.
How this was verified
SelectionAreapath is analyzer-verified only; it is not exercisable on iOS.flutter analyzeclean at the root and inexample/andplayground/;dart format .applied.Checklist
flutter analyze libandflutter analyzeinexample/andplayground/are cleandart format .applieddependencies:inpubspec.yamlis flutter.dev-published, forces no configuration on hosts that never use the feature, and is argued in this PRlib/flow_ui.dartand documented indocs/and the README tableCHANGELOG.mdupdated for user-facing changes, with breaking changes called outfeat:,fix:,refactor:,docs:,chore:)