π―ββοΈ fix: Dedupe @radix-ui/react-dismissable-layer to Unblock Body Clicks#74
Open
dustinhealy wants to merge 1 commit into
Open
π―ββοΈ fix: Dedupe @radix-ui/react-dismissable-layer to Unblock Body Clicks#74dustinhealy wants to merge 1 commit into
dustinhealy wants to merge 1 commit into
Conversation
Three copies of @radix-ui/react-dismissable-layer were getting installed (1.1.0 nested under react-tooltip, 1.1.1 hoisted via react-menu, 1.1.11 nested under the react-dialog 1.1.15 override). Each module copy holds its own DismissableLayerContext and originalBodyPointerEvents module variable, so when the sidebar Dropdown opens, the user clicks Settings, and the SettingsDialog mounts before the Dropdown portal has finished unmounting, the Dialog's copy snapshots document.body with the Dropdown's "none" still applied. When the Dialog later closes, its cleanup writes that stale "none" back onto the body and leaves the whole app unclickable until reload. Pin a single shared version (1.1.11, the newest already pulled in by react-dialog 1.1.15) so all Radix packages route through one module copy with one shared layer context.
6 tasks
Contributor
Author
|
@codex review |
|
Codex Review: Didn't find any major issues. Breezy! Reviewed commit: βΉοΈ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with π. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
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.
Summary
Three copies of @radix-ui/react-dismissable-layer were getting installed (1.1.0 nested under react-tooltip, 1.1.1 hoisted via react-menu, 1.1.11 nested under the react-dialog 1.1.15 override). Each module copy holds its own DismissableLayerContext and originalBodyPointerEvents module variable, so when the sidebar Dropdown opens, the user clicks Settings, and the SettingsDialog mounts before the Dropdown portal has finished unmounting, the Dialog's copy snapshots document.body with the Dropdown's "none" still applied. When the Dialog later closes, its cleanup writes that stale "none" back onto the body and leaves the whole app unclickable until reload.
Pin a single shared version (1.1.11, the newest already pulled in by react-dialog 1.1.15) so all Radix packages route through one module copy with one shared layer context.
Change Type
Testing
Confirmed behavior no longer present after using theme switcher, app buttons are now interactable again when closing settings dialog modal.
Checklist
Note
Low Risk
Dependency resolution-only change with no application code edits; risk is limited to Radix overlay/dismiss behavior across the pinned version.
Overview
Adds a
package.json/bun.lockoverride pinning@radix-ui/react-dismissable-layerto1.1.11, alongside the existing@radix-ui/react-dialogpin, so every Radix consumer resolves one copy of the dismissable-layer module.That deduplication fixes a race where opening Settings from a sidebar dropdown while the dropdown portal is still tearing down left
document.bodywithpointer-events: noneafter the settings dialog closed, because separate module copies each maintained their own body snapshot and cleanup.Reviewed by Cursor Bugbot for commit 2a2c777. Bugbot is set up for automated code reviews on this repo. Configure here.