Repository navigation
Conversation
…s Popover (FR9, DEC-8)
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
AI review status for this pull request.
|
This branch was successfully deployed
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.
Proposed; pending owner decision. This PR records a proposed rule for review; it is not approved.
Exact decision needed
Should a pan or drag that starts outside an open light-dismiss Popover close it, for mouse, pen, and touch alike?
Existing authority searched
component:Popover: outside light dismiss uses nativepopover="auto";hasLightDismiss(defaulttrue) turns it off. No rule names pans or drags.family:overlay-dismissalAV4: each member owns whether and how pointer, touch, or gesture interaction dismisses it.spec:AST-003FR7–FR13: outside interaction resolves against owner surfaces, associated triggers, and branches; the gesture that dismissed or opened a surface is claimed so it cannot reopen or re-close it.spec:AST-017FR1, FR3: a changed functional default is judged under FR1 and names the restoring option; FR59: touch work changes desktop behavior only for a defect or deliberate cross-device consistency, with desktop evidence.Decision (proposed)
component:PopoverFR9 and DEC-8, both marked proposed:hasLightDismiss={false}keeps it open.Who is affected
Today native
popover="auto"closes on a press that both starts and ends outside (pointerup). A gesture the browser takes over for scrolling ends in pointercancel, so it does not close.Migration
[breaking]and ships in a declared minor. The Changeset names the old and new default.hasLightDismiss={false}. It is blunt: it also stops tap-outside dismissal. A narrower option that keeps tap-outside dismissal would be new public API under AST-002; OQ1 lists it.Menus (AST-094, #8409)
usePopover, so it follows FR9 unless its record decides otherwise.mousedownand usespopover="manual", so it does not inherit FR9; a touch pan does not reach it today. Adopting the rule is ContextMenu's own decision.module:DropdownMenu/useMenuPress): a press that opens a menu and drags to a row starts on the trigger, and a ContextMenu long-press starts on the trigger area; both are the opening gesture, which FR9 never treats as outside. No conflict.Rejected alternatives
Claim scope and non-goals
Outside pan and drag dismissal for Popover only. Escape, platform close, focus loss, and menu-specific dismissal stay with their owners.
Writing rubric results
Scope
Validation
pnpm check:knowledge(CI lint)git diff --check