Skip to content

Release tracking#7883

Merged
TylerJDev merged 1 commit into
mainfrom
changeset-release/main
May 29, 2026
Merged

Release tracking#7883
TylerJDev merged 1 commit into
mainfrom
changeset-release/main

Conversation

@primer
Copy link
Copy Markdown
Contributor

@primer primer Bot commented May 26, 2026

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 23fba52 Thanks @adierkens! - Slot system consistency improvements:

    • Remove orphan __SLOT__ markers from root components that no parent scans for: ActionMenu (root Menu), UnderlinePanels (root), Autocomplete is unchanged (still used as a FormControl child), PageLayout (root), SegmentedControl (root), RadioGroup (root), CheckboxGroup (root), and Dialog (root). Sub-component markers are intentionally retained so consumers can keep wrapping them.
    • Standardize Symbol(...) descriptions used as slot markers to the Parent.Slot convention: CheckboxOrRadioGroupLabelCheckboxOrRadioGroup.Label, CheckboxOrRadioGroupCaptionCheckboxOrRadioGroup.Caption, CheckboxOrRadioGroupValidationCheckboxOrRadioGroup.Validation, DEPRECATED_TooltipTooltip, and TableDataTable.Table.
    • Migrate PageHeader, NavList.Item, and the internal CheckboxOrRadioGroup to use the useSlots hook instead of hand-rolling React.Children traversal with isSlot. The CheckboxOrRadioGroup migration also removes duplicated work where useSlots was already called but slots were re-extracted by hand immediately after.
    • Export useSlots, isSlot, asSlot, and the WithSlotMarker/FCWithSlotMarker types publicly from @primer/react so downstream consumers can build their own slot-aware compound components.
    • Add 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.
    • Add a dev-mode warning in useSlots when a child's displayName matches a slot component's displayName but the child is missing the __SLOT__ marker — a common footgun when wrapping slot components.
  • #7898 da27739 Thanks @francinelucca! - ThemeProvider: Add contextOnly prop to opt out of rendering the wrapping <div> with data-* theme attributes

  • #7886 64dfbd3 Thanks @janmaarten-a11y! - Add Timeline.Actions sub-component for rendering action buttons, links, SHAs, status labels, and similar right-aligned content on a Timeline.Item. Renders as a horizontal flex row pushed to the right edge of the item with gap: 8px between children and min-height matching the badge so contents vertically center against it.

  • #7885 9d2cb53 Thanks @janmaarten-a11y! - Add Timeline.Avatar sub-component for rendering an actor avatar in the left gutter of a Timeline.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 the Timeline for the avatar to be visible.

Patch Changes

  • #7864 e7205ea Thanks @mattcosta7! - Eliminate nested-update cascades in useFocus, PageLayout.Pane, and
    AnchoredOverlay:

    • useFocus no longer produces a second re-render after focusing; one
      focus() call now results in exactly one render instead of two.
    • PageLayout.Pane (resizable) no longer triggers a forced re-render
      before paint on mount. The CSS variable and ARIA attributes are still
      updated synchronously in the layout effect; the React state sync is
      wrapped in startTransition so it runs in the transition lane rather
      than as part of the layout-effect commit.
    • AnchoredOverlay no longer keeps useAnchoredPosition's scroll
      listeners and ResizeObserver attached while it is closed. After an
      open→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.tsx so future regressions can be pinned with
    counter.updateCount and counter.nestedUpdateCount assertions.

  • #7892 4dd08af Thanks @TylerJDev! - AnchoredOverlay: Disable CSS anchor positioning if related CSS rules are not supported

  • #7878 8c468fd Thanks @mattcosta7! - FilteredActionList: Guard against undefined items in the virtualizer's getItemKey callback to prevent a crash when @tanstack/react-virtual invokes it with an index whose item was just removed (e.g. when filtering shrinks the items list).

  • #7893 0eef204 Thanks @mattcosta7! - Button: Replace the icon-only-with-counter :has(...):not(:has(...)) selector with a data-icon-only-counter attribute computed from props. Reduces style-recalculation cost on pages that render many Buttons. No visual or behavioral changes.

  • #7896 673514b Thanks @mattcosta7! - TextInput / TextInputWithTokens / Select / Autocomplete: Replace chained :not([data-leading-visual]), :not([data-trailing-visual]), and :not([data-trailing-action]) attribute negations in TextInputWrapper styles with positive data-no-leading-visual, data-no-trailing-visual, and data-no-trailing-action markers 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 980e94c Thanks @mattcosta7! - UnderlinePanels: Eliminate the empty-tablist frame on mount and the cascading
    re-render when icons toggle. Tabs and panels are now derived in render
    (previously stored in state synced via useEffect), the list width is kept
    in a ref instead of state, and iconsVisible / loadingCounters flow to
    each tab via context — combined with React.memo(Tab), that makes
    resize-driven icon toggles update only the part of each tab that depends on
    the change, not the whole tablist subtree. Behavior is unchanged.

  • #7874 8cc7e99 Thanks @mattcosta7! - Dev-only effects (the if (__DEV__) { useEffect(...) } pattern with an
    eslint-disable react-hooks/rules-of-hooks comment at every call site) are
    now expressed via a new internal useDevOnlyEffect hook. The lint
    suppression lives in the wrapper, the effect is dropped from production by
    the consumer's process.env.NODE_ENV replacement, and call sites get
    react-hooks/exhaustive-deps lint via additionalEffectHooks. No public
    API changes.

@primer/styled-react@1.1.0

Minor Changes

@primer primer Bot requested a review from a team as a code owner May 26, 2026 17:16
@primer primer Bot requested a review from jonrohan May 26, 2026 17:16
@github-actions
Copy link
Copy Markdown
Contributor

❗ Pre-merge checklist

Please ensure these items are checked before merging:

🔎 Smoke test

  • All CI checks pass on this pull request
  • Docs and Storybook open in a browser

🌏 Integration tests

  • Successful integration test with github/github-ui as a primary consumer of primer/react (automated pull request)
    • Verify all CI checks have passed on automated pull request
    • Manually test critical paths in preview
    • Manually test release-specific bugfixes and/or feature work as described in preview

✅ Peer Review

  • Create release review issue for Issues team (example)
  • Wait for approval from Issues team before merging

🤔 Sanity test

  • All bugfixes in this release have resolved their corresponding issues
  • The issues for any reverted PRs have been re-opened and commented on with a link to the reverted PR
  • No noticeable regressions have been introduced as a result of changes in this release
  • Release notes accurately describe the changes made

❗ Post-merge checklist

Please ensure these items are checked after merging:

🚢 Version upgrade, cleanup, and documentation

  • Upgrade @primer/react version at github/github-ui
  • Close Integration test PR and delete branch
  • Leave a /short-report comment on quarterly release conductor tracking issue summarizing time spent on release activities and any challenges encountered
  • Leave any testing notes on the automated per-shift release tracking issue. In particular, describe any issues encountered during your testing. This is helpful in providing historical context to the next release conductor as well as other maintainers.

@github-actions github-actions Bot added the integration-tests: recommended This change needs to be tested for breaking changes. See https://arc.net/l/quote/tdmpakpm label May 26, 2026
@github-actions
Copy link
Copy Markdown
Contributor

⚠️ Action required

👋 Hi, this pull request contains changes to the source code that github/github-ui depends on. If you are GitHub staff, test these changes with github/github-ui using the integration workflow. Check the integration testing docs for step-by-step instructions. Or, apply the integration-tests: skipped manually label to skip these checks.

To publish a canary release for integration testing, apply the Canary Release label to this PR.

@github-actions github-actions Bot requested a review from TylerJDev May 26, 2026 17:17
@github-actions github-actions Bot temporarily deployed to storybook-preview-7883 May 26, 2026 17:27 Inactive
@primer primer Bot force-pushed the changeset-release/main branch from 5a14e1a to c82500a Compare May 26, 2026 18:02
@github-actions github-actions Bot temporarily deployed to storybook-preview-7883 May 26, 2026 18:13 Inactive
@jonrohan jonrohan removed their request for review May 26, 2026 20:29
@primer primer Bot force-pushed the changeset-release/main branch from c82500a to 73c77c7 Compare May 27, 2026 02:28
@github-actions github-actions Bot temporarily deployed to storybook-preview-7883 May 27, 2026 02:39 Inactive
@primer primer Bot force-pushed the changeset-release/main branch from 73c77c7 to d5cb2b3 Compare May 27, 2026 13:05
@primer primer Bot had a problem deploying to github-pages May 27, 2026 13:16 Failure
@github-actions github-actions Bot requested a deployment to storybook-preview-7883 May 27, 2026 13:16 Abandoned
@TylerJDev TylerJDev added the Canary Release Apply this label when you want CI to create a canary release of the current PR label May 27, 2026
@primer primer Bot had a problem deploying to github-pages May 27, 2026 17:34 Failure
@github-actions github-actions Bot requested a deployment to storybook-preview-7883 May 27, 2026 17:35 Abandoned
@primer primer Bot had a problem deploying to github-pages May 27, 2026 17:43 Failure
@github-actions github-actions Bot requested a deployment to storybook-preview-7883 May 27, 2026 17:44 Abandoned
@primer primer Bot had a problem deploying to github-pages May 27, 2026 18:21 Failure
@github-actions github-actions Bot requested a deployment to storybook-preview-7883 May 27, 2026 18:21 Abandoned
@primer primer Bot force-pushed the changeset-release/main branch from d5cb2b3 to 327998f Compare May 27, 2026 21:42
@github-actions github-actions Bot temporarily deployed to storybook-preview-7883 May 27, 2026 21:53 Inactive
@primer primer Bot force-pushed the changeset-release/main branch from 327998f to 5354900 Compare May 27, 2026 23:18
@primer-integration
Copy link
Copy Markdown

👋 Hi from github/github-ui! Your integration PR is ready: https://github.com/github/github-ui/pull/21885

@primer-integration
Copy link
Copy Markdown

Integration test results from github/github-ui:

Passed  CI   Passed
Passed  VRT   Passed
Passed  Projects   Passed

All checks passed!

@TylerJDev TylerJDev merged commit df9fd9b into main May 29, 2026
56 checks passed
@TylerJDev TylerJDev deleted the changeset-release/main branch May 29, 2026 20:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Canary Release Apply this label when you want CI to create a canary release of the current PR integration-tests: recommended This change needs to be tested for breaking changes. See https://arc.net/l/quote/tdmpakpm

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant