Repository navigation
[popups] Skip the focus-out close for a popup that already closed - #6088
Merged
Merged
Conversation
mkantautas
requested review from
atomiks,
colmtuite,
flaviendelangle,
jjenzz and
michaldudak
as code owners
October 23, 2026 06:52
commit: |
Bundle size
PerformanceNo regressions in 36 benchmarks · ran 3m 49s · details Check out the code infra dashboard for more information about this PR. |
✅ Deploy Preview for base-ui ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
atomiks
force-pushed
the
fix/focus-out-after-close
branch
from
November 10, 2026 04:54
e23a890 to
f7622a5
Compare
atomiks
enabled auto-merge (squash)
November 10, 2026 04:56
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.
Fixes #6041.
FloatingFocusManagerkeeps its focus-out listeners while a closed popup is still mounted, during the exit animation or afterpreventUnmountOnClose(). When focus then left the trigger, its queued close calledonOpenChange(false)with reasonfocus-outagain for a popup that had already closed. A non-modal Popover or Dialog closed by tabbing away from its trigger reported the close more than once, also without an exit animation, and a popup kept mounted withpreventUnmountOnClose()reported another close each time focus left the trigger. Menu was not affected because its store ignores a close when it is already closed.The focus-out close now runs only while the popup is open.
preventReturnFocusRefis still set as before, so with an explicitfinalFocus, focus that the user moved during the exit animation stays where it is.The new test fails on master: focus leaving the reference of a closed, still-mounted floating element reports
[false, 'focus-out']. Its sibling case checks that an open one still closes.