-
Notifications
You must be signed in to change notification settings - Fork 647
perf(BaseStyles): Add feature flag for :has([data-color-mode]) selector optimization #7367
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Draft
Copilot
wants to merge
4
commits into
main
Choose a base branch
from
copilot/add-feature-flag-for-optimization
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+49
−4
Conversation
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
🦋 Changeset detectedLatest commit: 2681380 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
- Modified BaseStyles.module.css to use negative data attribute selector - Added comprehensive comments explaining the feature flag behavior - Created changeset for the patch release - All tests passing, linting and type checking successful Co-authored-by: mattcosta7 <8616962+mattcosta7@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Add feature-flagged version of performance optimization
perf(BaseStyles): Add feature flag for :has([data-color-mode]) selector optimization
Dec 25, 2025
Contributor
|
@copilot could we avoid an * selector by putting the attribute on the basestyle element when the flag is enabled? |
Changed selector from `&:not([data-primer-css-perf-has-selector] *)` to `&:not([data-primer-css-perf-has-selector])` to avoid the universal selector. The attribute should now be placed directly on the BaseStyles element instead of an ancestor. Co-authored-by: mattcosta7 <8616962+mattcosta7@users.noreply.github.com>
Contributor
Author
Contributor
|
@copilot use the feature flag system to automatically add it |
- Added primer_react_css_perf_has_selector to DefaultFeatureFlags - BaseStyles component now uses useFeatureFlag hook - Automatically adds data-primer-css-perf-has-selector when flag is enabled - Added tests to verify feature flag behavior - Updated documentation to reference feature flag usage Co-authored-by: mattcosta7 <8616962+mattcosta7@users.noreply.github.com>
Contributor
Author
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.
Adds
primer_react_css_perf_has_selectorfeature flag to opt-in to skipping expensive:has([data-color-mode])selectors that scan the entire DOM on every style recalculation.Changes
Modified
BaseStyles.module.cssto wrap expensive selectors with:not([data-primer-css-perf-has-selector]):Integrated with Primer React's feature flag system:
primer_react_css_perf_has_selectortoDefaultFeatureFlags(defaults tofalse)useFeatureFlaghook to automatically add thedata-primer-css-perf-has-selectorattribute when enabledUsage:
Default behavior: Expensive selectors remain active (unchanged)
Opt-in behavior: Enable the
primer_react_css_perf_has_selectorfeature flag to automatically apply the optimizationInput
color-schemeis already handled by global selectors at lines 20-26, making these:has()checks redundant for consumers who opt-in.Changelog
New
primer_react_css_perf_has_selectorfeature flag to control performance optimizationChanged
.BaseStylesselector to support performance feature flag via negative data attribute checkuseFeatureFlaghook to automatically add optimization attributeRollout strategy
Consumers can test the optimization in staging/canary by enabling the feature flag before production rollout. Once validated broadly, the feature flag can be removed in a future release.
Testing & Reviewing
Added tests to verify feature flag integration:
To test the optimization manually:
primer_react_css_perf_has_selectorfeature flag viaFeatureFlagscomponentcolor-schemestill works correctly (handled by global selectors):has()selectors are no longer recalculating stylesMerge checklist
Original prompt
This pull request was created from Copilot chat.
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.