feat: Add feature flag for Dialog scroll performance optimization #7366
+198
−13
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.
Adds
primer_react_css_has_selector_perffeature flag to gate the Dialog scroll optimization, enabling gradual rollout and easy rollback.Changelog
New
primer_react_css_has_selector_perffeature flag (defaults tofalse).DisableScrollCSS class for :has() selector targetChanged
:has()selector with:not([data-dialog-scroll-optimized])guarddata-dialog-scroll-optimizedattribute to body, short-circuits:has()evaluation via O(1) attribute checkRemoved
Rollout strategy
Rollout plan:
:has()behavior)Testing & Reviewing
Flag OFF (legacy): Body selector
body:not([data-dialog-scroll-optimized]):has(.Dialog.DisableScroll)matches because attribute is absent. Uses expensive:has().Flag ON (optimized): Attribute
data-dialog-scroll-optimizedpresent on body causes:not()to fail immediately. Browser skips:has()evaluation. Direct classbody.DialogScrollDisabledhandles scroll disabling.Both paths use ref counting for multiple dialogs (critical for mixed Turbo/React).
Merge checklist
Original prompt
This pull request was created from Copilot chat.
💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.