Releases: primer/react
@primer/react@38.15.1
Patch Changes
-
#7625
2e8c707Thanks @liuliu-dev! - Banner: stack inline actions vertically on narrow viewports. -
#7554
f34f0c3Thanks @hectahertz! - perf(ActionList): memoize context values, menuItemProps, and aria attributes -
#7598
4b345dbThanks @hectahertz! - perf(Banner): replace:has(.BannerActions)with[data-has-actions]attribute selector -
#7597
adadd38Thanks @hectahertz! - perf(Button): replace:has(.Visual)with[data-no-visuals]attribute selector in link variant styling -
#7599
e6513c2Thanks @hectahertz! - perf(Dialog): replace:has(.Footer)with[data-has-footer]attribute selector for footer border detection -
#7620
ec0b789Thanks @hectahertz! - Use stable object reference for DialogContext value to prevent unnecessary re-renders -
#7621
235126aThanks @hectahertz! - Memoize SelectPanel overlayProps, focusTrapSettings, and preventBubbling to reduce allocations on re-renders -
#7600
0d7cc92Thanks @hectahertz! - perf(TextInput): skip redundant character counter updates -
#7654
a09a60cThanks @copilot-swe-agent! - SelectPanel: use100dvhandenv(safe-area-inset-bottom)in fullscreen-on-narrow mode to prevent content from being obscured by iOS Safari's browser chrome. -
#7545
17ec46fThanks @hectahertz! - perf(TreeView): defer scrollIntoView to coalesce reflows during rapid navigation
@primer/react@38.15.0
Minor Changes
-
#7524
f7bdd1cThanks @francinelucca! - chore: always render ActionMenu in viewport when inside Dialog under feature flag -
#7594
1e54bdfThanks @copilot-swe-agent! - Addalignandstyleprops to Dialog component
Patch Changes
-
#7529
7e108feThanks @liuliu-dev! - Add keyboard-accessible tooltip for truncated ActionList.Description -
#7585
3dd2c78Thanks @iansan5653! - - Fixes a bug whereActionBarmenu items would be out of order if new items were mounted after the initial render- Improves initial render performance for
ActionBar
- Improves initial render performance for
-
#7624
f6d4311Thanks @llastflowers! - Fix FormControl + SelectPanel accessible name to address SR issues -
#7617
79c855aThanks @llastflowers! - Push margin-top of TimelineBody +1px -
#7635
74762e2Thanks @iansan5653! - Fix(useRefObjectAsForwardedRef): fix ref failing to update when target changes -
#7550
9585669Thanks @hectahertz! - perf(Spinner): replace Web Animations API with CSS animation-delay sync -
#7618
17a103cThanks @liuliu-dev! - TextInputWithTokens: announce selected token values for screen readers. -
#7588
e649da3Thanks @lukasoppermann! - ToggleSwitch: Updated with a 1px space around the knob to work better with updated primitives.
@primer/react@38.14.0
Minor Changes
- #7531
0cfb938Thanks @hectahertz! - SelectPanel: Add built-in client-side list virtualization via a newvirtualizedprop. When enabled, only the visible items plus a small overscan buffer are rendered in the DOM, dramatically improving performance for large lists.
Patch Changes
-
#7497
931740bThanks @hectahertz! - Remove render phase setStates on SelectPanel -
#7532
39a2151Thanks @hectahertz! - PageLayout: Eliminate forced reflow (~614ms) on mount by replacinggetComputedStylecall with a pure JS viewport width check for the--pane-max-width-diffCSS variable. -
#7555
64c2243Thanks @hectahertz! - perf(useSlots): short-circuit iteration and skip filled slots -
#7547
4943d67Thanks @hectahertz! - perf(useScrollFlash): defer scroll read/write to requestAnimationFrame to avoid forced reflow -
#7497
931740bThanks @hectahertz! - Improve SelectPanel performance -
#7551
2fbfc49Thanks @hectahertz! - perf(Text): remove unnecessary useRef and useImperativeHandle hooks -
#7571
59ab235Thanks @liuliu-dev! - AnchoredOverlay: changedoverflowfromhiddentoautoto prevent content clipping at small viewports. -
#7553
6225ba2Thanks @hectahertz! - perf(useRefObjectAsForwardedRef): add dependency array to useImperativeHandle
@primer/mcp@0.3.0
Minor Changes
- #7574
14c5a6cThanks @lukasoppermann! - Replace design token tools with enhanced search and bundle system. The singlelist_tokenstool is replaced byfind_tokens,get_token_group_bundle,get_design_token_specs, andget_token_usage_patternsfor improved token discovery and usage guidance.
@primer/react@38.13.0
Minor Changes
-
#7099
4720c2fThanks @copilot-swe-agent! - Banner: Usearia-labelledbyto reference the title for the landmark region instead of generic variant labels. -
#7521
12dda86Thanks @TylerJDev! - PageLayout: AddPageLayout.Sidebarsub-component
Patch Changes
-
#7537
4fd987cThanks @hectahertz! - perf(ActionList): enable React Compiler -
#7546
86d6897Thanks @hectahertz! - perf(Announce): skip getComputedStyle when there is no text content to announce -
#7568
aa46098Thanks @HiroAgustin! - Blankslate: Addtext-wrap: balanceto Heading and Description -
#7552
551ec63Thanks @hectahertz! - perf(Button): fix CounterLabel remount and remove conditional DEV hook -
#7504
d91e78eThanks @TylerJDev! - UnderlineNav: Addsoverflow: hiddenwhen the "More" button isn't present -
#7526
0c2358aThanks @hectahertz! - Addcontent-visibility: autoto ActionList items to improve rendering performance for large lists by allowing the browser to skip layout and paint for off-screen items. -
#7556
6dc1858Thanks @hectahertz! - perf(ActionList): replace:has([aria-disabled])child scan withdata-is-disabledattribute for faster style recalculation -
#7548
d4b32c3Thanks @hectahertz! - perf(useIsMacOS): replace useState+useEffect with useSyncExternalStore to eliminate unnecessary re-render
@primer/mcp@0.2.0
@primer/react@38.12.0
Minor Changes
-
#7348
3c160b2Thanks @mattcosta7! - AddcurrentWidthandonResizeEndprops to PageLayout.Pane for controlled resizable widthThe
PageLayout.Panecomponent now supports controlled width:onResizeEnd— callback fired when a resize operation ends (pointer release or keyboard key up). Replaces localStorage persistence. RequirescurrentWidth.currentWidth— sets the current displayed width in pixels (number | undefined). Passundefinedwhen the persisted value hasn't loaded yet. RequiresonResizeEnd.
Both props must be provided together (enforced by TypeScript).
resizableremains a plainbooleanprop.These props are only meaningful when
resizable={true}— without it, no drag handle renders soonResizeEndnever fires.New export:
defaultPaneWidth— Record of preset width values:{small: 256, medium: 296, large: 320}
Example usage:
import {PageLayout, defaultPaneWidth} from '@primer/react' // Default behavior (unchanged) — localStorage persistence <PageLayout.Pane resizable /> // Controlled width with custom persistence const [width, setWidth] = useState(defaultPaneWidth.medium) <PageLayout.Pane resizable currentWidth={width} onResizeEnd={(newWidth) => { setWidth(newWidth) myStorage.save('pane-width', newWidth) }} /> // Async load — pass undefined until value is fetched <PageLayout.Pane resizable currentWidth={savedWidth ?? undefined} onResizeEnd={handleResizeEnd} />
Patch Changes
-
#7527
c87db98Thanks @llastflowers! - Update PageHeader story to have semantic headings -
#7535
d86c970Thanks @francinelucca! - fix: ActionBar overflow menu not closing on select
@primer/react@38.11.0
Minor Changes
- #7509
2e563b4Thanks @francinelucca! - feat: implement displayInViewport for ActionMenu and AnchoredOverlay
Patch Changes
-
#7501
81ab065Thanks @copilot-swe-agent! - Fix PageLayout horizontal overflow by adding width constraint to ContentWrapper -
#7483
fe999caThanks @francinelucca! - remove primer_react_overlay_overflow FF from the codebase
@primer/styled-react@1.0.3
Patch Changes
- #7499
4f43e82Thanks @copilot-swe-agent! - Remove deprecated component exports from @primer/styled-react that no longer have usage tracked in primer query