fix(interact-outside): handle focus-outside detection inside shadow roots#3093
Draft
fix(interact-outside): handle focus-outside detection inside shadow roots#3093
Conversation
|
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Copilot
AI
changed the title
[WIP] Fix onFocusOutside detection in shadow root
fix(interact-outside): handle focus-outside detection inside shadow roots
Apr 21, 2026
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.
📝 Description
Focus transitions triggered by keyboard navigation inside a shared shadow root were not reaching the existing global
focusinlisteners, soonFocusOutsidedid not fire and dismissable widgets could remain open.This update makes shadow-root focus transitions observable to
interact-outsidewithout changing public API shape.focusinon the component’srootNodewhen the tracked node is inside a shadow root.composedPath()before deferred execution so the original focus event target is preserved.⛳️ Current behavior (updates)
When a dismissable element (e.g. popover/menu) is rendered in a shadow root, tabbing focus to another element in the same shadow root can fail to trigger
onFocusOutside, leaving the element open.🚀 New behavior
onFocusOutsideis now detected for keyboard focus transitions within the same shadow root, so dismissable elements correctly react to outside focus in shadow-DOM contexts.💣 Is this a breaking change (Yes/No):
No
📝 Additional Information
No external dependencies were added. The change is scoped to
@zag-js/interact-outsideinternals plus a targeted regression test.