Release tracking#7883
Merged
Merged
Conversation
Contributor
❗ Pre-merge checklistPlease ensure these items are checked before merging: 🔎 Smoke test
🌏 Integration tests
✅ Peer Review
🤔 Sanity test
❗ Post-merge checklistPlease ensure these items are checked after merging: 🚢 Version upgrade, cleanup, and documentation
|
Contributor
|
5a14e1a to
c82500a
Compare
c82500a to
73c77c7
Compare
73c77c7 to
d5cb2b3
Compare
d5cb2b3 to
327998f
Compare
327998f to
5354900
Compare
5354900 to
351795e
Compare
351795e to
9aafff6
Compare
9aafff6 to
d08ff21
Compare
d08ff21 to
28aabd4
Compare
28aabd4 to
0fd8871
Compare
|
👋 Hi from github/github-ui! Your integration PR is ready: https://github.com/github/github-ui/pull/21885 |
TylerJDev
approved these changes
May 29, 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.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@primer/react@38.26.0
Minor Changes
#7869
23fba52Thanks @adierkens! - Slot system consistency improvements:__SLOT__markers from root components that no parent scans for:ActionMenu(rootMenu),UnderlinePanels(root),Autocompleteis unchanged (still used as aFormControlchild),PageLayout(root),SegmentedControl(root),RadioGroup(root),CheckboxGroup(root), andDialog(root). Sub-component markers are intentionally retained so consumers can keep wrapping them.Symbol(...)descriptions used as slot markers to theParent.Slotconvention:CheckboxOrRadioGroupLabel→CheckboxOrRadioGroup.Label,CheckboxOrRadioGroupCaption→CheckboxOrRadioGroup.Caption,CheckboxOrRadioGroupValidation→CheckboxOrRadioGroup.Validation,DEPRECATED_Tooltip→Tooltip, andTable→DataTable.Table.PageHeader,NavList.Item, and the internalCheckboxOrRadioGroupto use theuseSlotshook instead of hand-rollingReact.Childrentraversal withisSlot. TheCheckboxOrRadioGroupmigration also removes duplicated work whereuseSlotswas already called but slots were re-extracted by hand immediately after.useSlots,isSlot,asSlot, and theWithSlotMarker/FCWithSlotMarkertypes publicly from@primer/reactso downstream consumers can build their own slot-aware compound components.asSlot(component, slotSource)helper: a typed utility that copies a__SLOT__marker from a source slot component onto a wrapper component, replacing the cast-heavy(Wrapper as typeof Wrapper & {__SLOT__?: symbol}).__SLOT__ = Source.__SLOT__pattern.useSlotswhen a child'sdisplayNamematches a slot component'sdisplayNamebut the child is missing the__SLOT__marker — a common footgun when wrapping slot components.#7898
da27739Thanks @francinelucca! - ThemeProvider: AddcontextOnlyprop to opt out of rendering the wrapping<div>withdata-*theme attributes#7886
64dfbd3Thanks @janmaarten-a11y! - AddTimeline.Actionssub-component for rendering action buttons, links, SHAs, status labels, and similar right-aligned content on aTimeline.Item. Renders as a horizontal flex row pushed to the right edge of the item withgap: 8pxbetween children andmin-heightmatching the badge so contents vertically center against it.#7885
9d2cb53Thanks @janmaarten-a11y! - AddTimeline.Avatarsub-component for rendering an actor avatar in the left gutter of aTimeline.Item. Accepts any React children and is absolutely positioned so it does not affect badge or body layout. Consumers must reserve roughly 72px of left padding around theTimelinefor the avatar to be visible.Patch Changes
#7864
e7205eaThanks @mattcosta7! - Eliminate nested-update cascades inuseFocus,PageLayout.Pane, andAnchoredOverlay:useFocusno longer produces a second re-render after focusing; onefocus()call now results in exactly one render instead of two.PageLayout.Pane(resizable) no longer triggers a forced re-renderbefore paint on mount. The CSS variable and ARIA attributes are still
updated synchronously in the layout effect; the React state sync is
wrapped in
startTransitionso it runs in the transition lane ratherthan as part of the layout-effect commit.
AnchoredOverlayno longer keepsuseAnchoredPosition's scrolllisteners and
ResizeObserverattached while it is closed. After anopen→close cycle, the first scroll/resize event no longer fires a
spurious
setPosition(undefined)that re-renders the closed overlay.Also adds a profiler-based test harness at
src/utils/testing/profiler.tsxso future regressions can be pinned withcounter.updateCountandcounter.nestedUpdateCountassertions.#7892
4dd08afThanks @TylerJDev! - AnchoredOverlay: Disable CSS anchor positioning if related CSS rules are not supported#7878
8c468fdThanks @mattcosta7! - FilteredActionList: Guard againstundefineditems in the virtualizer'sgetItemKeycallback to prevent a crash when@tanstack/react-virtualinvokes it with an index whose item was just removed (e.g. when filtering shrinks the items list).#7893
0eef204Thanks @mattcosta7! - Button: Replace the icon-only-with-counter:has(...):not(:has(...))selector with adata-icon-only-counterattribute computed from props. Reduces style-recalculation cost on pages that render many Buttons. No visual or behavioral changes.#7896
673514bThanks @mattcosta7! - TextInput / TextInputWithTokens / Select / Autocomplete: Replace chained:not([data-leading-visual]),:not([data-trailing-visual]), and:not([data-trailing-action])attribute negations inTextInputWrapperstyles with positivedata-no-leading-visual,data-no-trailing-visual, anddata-no-trailing-actionmarkers emitted by the wrapper components. Eliminates the 2- and 3-deep:not()chains that previously evaluated against every input on every state change. No visual or behavioral changes.#7876
980e94cThanks @mattcosta7! - UnderlinePanels: Eliminate the empty-tablist frame on mount and the cascadingre-render when icons toggle. Tabs and panels are now derived in render
(previously stored in state synced via
useEffect), the list width is keptin a ref instead of state, and
iconsVisible/loadingCountersflow toeach tab via context — combined with
React.memo(Tab), that makesresize-driven icon toggles update only the part of each tab that depends on
the change, not the whole tablist subtree. Behavior is unchanged.
#7874
8cc7e99Thanks @mattcosta7! - Dev-only effects (theif (__DEV__) { useEffect(...) }pattern with aneslint-disable react-hooks/rules-of-hookscomment at every call site) arenow expressed via a new internal
useDevOnlyEffecthook. The lintsuppression lives in the wrapper, the effect is dropped from production by
the consumer's
process.env.NODE_ENVreplacement, and call sites getreact-hooks/exhaustive-depslint viaadditionalEffectHooks. No publicAPI changes.
@primer/styled-react@1.1.0
Minor Changes
da27739Thanks @francinelucca! - ThemeProvider: AddcontextOnlyprop as a no-op to match the@primer/reactAPI