chore(deps): Bump @radix-ui/react-dialog and react-dropdown-menu together - #712
Merged
Merged
Conversation
…ther Dependabot opened these as two separate PRs (#708, #709) and each was red on the same three Jest tests — the ones that open a dropdown menu, pick a destructive item and confirm in a dialog: Unable to perform pointer interaction as the element has `pointer-events: none` That is not a test artifact. Radix pins its internal dependencies to exact versions, so bumping one component alone makes npm nest a private second copy of the primitives it shares with the others — here `@radix-ui/react-dismissable-layer` (and `react-focus-guards`, `react-focus-scope`). Those keep module-level singleton state: dismissable-layer stores `originalBodyPointerEvents` plus a module-scoped context tracking the open layers. With two copies the bookkeeping splits: 1. menu opens → copy A saves "" and sets body pointer-events to "none" 2. dialog opens → copy B's layer set is empty, so it saves "none" 3. menu closes → copy A restores "" 4. dialog closes → copy B restores its saved "none" ...leaving the page unclickable until reload, after any menu-driven delete or rename. Merging either PR on its own would have shipped that. Bumping both together resolves them to the same internal versions, so the tree dedupes to one dismissable-layer (1.1.19) and the state is coherent again. The three tests pass unmodified; they are the only automated signal for this, since E2E and visual checks never close a dialog opened from a menu. Also: - Group `@radix-ui/*` in dependabot.yml so future Radix updates arrive as one PR and cannot re-split the shared primitives. - Ignore typescript 7.x. It is blocked upstream twice over: no released typescript-eslint accepts it (peer ">=4.8.4 <6.1.0", so ESLint dies in typescript-estree), and Next.js 16.2.x does not recognise the TS 7 package layout. TS 6 updates keep flowing. - Record both in CLAUDE.md. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UdGrX2TRsXgy6cYZmeFovC
|
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.



Dependabot opened these as two separate PRs (#708, #709) and each was red on
the same three Jest tests — the ones that open a dropdown menu, pick a
destructive item and confirm in a dialog:
That is not a test artifact. Radix pins its internal dependencies to exact
versions, so bumping one component alone makes npm nest a private second copy
of the primitives it shares with the others — here
@radix-ui/react-dismissable-layer(andreact-focus-guards,react-focus-scope). Those keep module-level singleton state:dismissable-layer stores
originalBodyPointerEventsplus a module-scopedcontext tracking the open layers. With two copies the bookkeeping splits:
...leaving the page unclickable until reload, after any menu-driven delete or
rename. Merging either PR on its own would have shipped that.
Bumping both together resolves them to the same internal versions, so the tree
dedupes to one dismissable-layer (1.1.19) and the state is coherent again. The
three tests pass unmodified; they are the only automated signal for this, since
E2E and visual checks never close a dialog opened from a menu.
Also:
@radix-ui/*in dependabot.yml so future Radix updates arrive as onePR and cannot re-split the shared primitives.
typescript-eslint accepts it (peer ">=4.8.4 <6.1.0", so ESLint dies in
typescript-estree), and Next.js 16.2.x does not recognise the TS 7 package
layout. TS 6 updates keep flowing.
Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01UdGrX2TRsXgy6cYZmeFovC