May 29, 2025
General changes
- Remove proptypes (#1760) by @michaldudak
- Unify component export patterns (#1478) by @michaldudak
- Default
tabIndex
to0
on<button>
parts (#1939) by @atomiks
Accordion
Alert Dialog
- Breaking change: Refine
OpenChangeReason
.hover
is nowtrigger-hover
;click
is nowtrigger-press
;focus
is nowtrigger-focus
.
(#1782) by @atomiks - Use basic scroll lock on iOS
(#1890) by @atomiks
Checkbox
- Set
aria-required
, useuseButton
(#1777) by @mj12albert
Checkbox Group
- Breaking change: Enable submitting checkbox group value as one field.
For parent checkboxes, usevalue
instead ofname
on eachCheckbox.Root
part to link as the values.
(#1948) by @mj12albert - Fix
validate
fn incorrectly running twice (#1959) by @mj12albert
Context Menu
Dialog
- Breaking change: Refine
OpenChangeReason
.hover
is nowtrigger-hover
;click
is nowtrigger-press
;focus
is nowtrigger-focus
.
(#1782) by @atomiks - Use basic scroll lock on iOS
(#1890) by @atomiks
Field
- Breaking change: Consolidate
Field.Error
forceShow
intomatch
prop.
Usematch={true}
(or implicit boolean) instead offorceShow
.
(#1919) by @atomiks - Improve
Label
logic that prevents text selection on double click (#1784) by @atomiks - Fix validation inconsistency (#1779) by @atomiks
- Fix integration of Base UI components (#1755) by @atomiks
- Set
valueMissing
to false if only error and not dirtied (#1810) by @atomiks validate
with latest value on blur (#1850) by @atomiks- Revalidate only
required
on change (#1840) by @atomiks - Run validate function after native validations (#1926) by @mj12albert
- Fix
validate
fn incorrectly running twice (#1959) by @mj12albert - Integrate range sliders with Form and Field (#1929) by @mj12albert
Form
- Fix integration of Base UI components (#1755) by @atomiks
- Select inputs on focus (#1858) by @atomiks
- Exclude number formatting from form value (#1957) by @mj12albert
- Integrate range sliders with Form and Field (#1929) by @mj12albert
Input
- Fix
Input.Props
type (#1915) by @mj12albert - Extend
Field.Control.State
(#1954) by @atomiks
Menu
- Breaking change: Refine
OpenChangeReason
.hover
is nowtrigger-hover
;click
is nowtrigger-press
;focus
is nowtrigger-focus
.
(#1782) by @atomiks - Fix function dependency handling (#1787) by @atomiks
- Add missing
'use client'
toRadioGroup
part (#1851) by @atomiks - Ensure
null
items are removed from composite lists (#1847) by @atomiks - Avoid
:focus-visible
style appearing (#1846) by @atomiks - Better handle dynamic and non-string items (#1861) by @atomiks
- Add
collisionAvoidance
prop (#1849) by @atomiks - Add
finalFocus
andcloseDelay
props (#1918) by @atomiks - Use basic scroll lock on iOS
(#1890) by @atomiks
Menubar
- New
Menubar
component (#1684) by @michaldudak
Navigation Menu
Number Field
validate
with latest value on blur (#1850) by @atomiks- Move scrubbing logic to
ScrubArea
component (#1859) by @atomiks - Remove floating point errors when
snapOnStep
is disabled (#1857) by @atomiks - Stop event propagation to allow composite components to be used within popups (#1871) by @atomiks
- Exclude number formatting from form value (#1957) by @mj12albert
Popover
- Breaking change: Refine
OpenChangeReason
.hover
is nowtrigger-hover
;click
is nowtrigger-press
;focus
is nowtrigger-focus
.
(#1782) by @atomiks - Fix function dependency handling (#1787) by @atomiks
- Avoid prop getters when merging props (#1852) by @atomiks
- Add
collisionAvoidance
prop (#1849) by @atomiks - Fix nested
openOnHover
(#1938) by @atomiks - Use basic scroll lock on iOS
(#1890) by @atomiks
Preview Card
- Breaking change: Refine
OpenChangeReason
.hover
is nowtrigger-hover
;click
is nowtrigger-press
;focus
is nowtrigger-focus
.
(#1782) by @atomiks - Fix function dependency handling (#1787) by @atomiks
- Add
collisionAvoidance
prop (#1849) by @atomiks
Radio Group
- Fix composite focus of initially selected radio item (#1753) by @atomiks
- Add
inputRef
props (#1683) by @atomiks - Stop event propagation to allow composite components to be used within popups (#1871) by @atomiks
Select
- Breaking change: Move item anchoring prop to
Positioner
.
Use<Select.Positioner alignItemWithTrigger={false}>
instead of<Select.Root alignItemToTrigger={false}>
(note theWith
instead ofTo
).
(#1713) by @atomiks - Breaking change: Defer mounting until typeahead is needed.
Theplaceholder
prop is now required. Previously, only SSR needed it to prevent a hydration flash, but client-side rendering now also requires it.
(#1906) by @atomiks - Breaking change: Refine
OpenChangeReason
.hover
is nowtrigger-hover
;click
is nowtrigger-press
;focus
is nowtrigger-focus
.
(#1782) by @atomiks - Fix function dependency handling (#1787) by @atomiks
- Add
inputRef
props (#1683) by @atomiks - Refactor to
useRenderElement
(#1797) by @atomiks - Ensure
null
items are removed from composite lists (#1847) by @atomiks - Fix
id
prop forwarding to hidden input (#1862) by @atomiks - Avoid
:focus-visible
style appearing (#1846) by @atomiks - Fix
transitionStatus
mapping onItemIndicator
(#1925) by @atomiks - Better handle dynamic and non-string items (#1861) by @atomiks
- Use
Select.ItemText
ref to grab default text content (#1943) by @atomiks - Add
collisionAvoidance
prop (#1849) by @atomiks - Use basic scroll lock on iOS
(#1890) by @atomiks
Slider
- Breaking change: Drop
inputId
prop from Thumb.
(#1914) by @mj12albert - Position thumb based on value instead of pointer location when dragging (#1750) by @DarthSim
- Use
useRenderElement
(#1772) by @mj12albert - Add
inputRef
props (#1683) by @atomiks - Add
locale
prop (#1796) by @mj12albert - Stop event propagation to allow composite components to be used within popups (#1871) by @atomiks
- set
data-dragging
on touchstart and pointerdown (#1874) by @mj12albert - Integrate range sliders with Form and Field (#1929) by @mj12albert
Toast
- Breaking change: Add
Portal
part.
Place<Toast.Viewport>
inside of<Toast.Portal>
.
(#1962) by @atomiks - Breaking change: Avoid removing limited toasts from the DOM.
The[data-limited]
styles in the demos were updated to handle limited toasts remaining in the DOM. They should now be a standalone style as&[data-limited] { opacity: 0 }
.
(#1953) by @atomiks - Fix swipe jump on iOS (#1785) by @atomiks
Toggle
Toolbar
Tooltip
- Breaking change: Refine
OpenChangeReason
.hover
is nowtrigger-hover
;click
is nowtrigger-press
;focus
is nowtrigger-focus
.
(#1782) by @atomiks - Fix function dependency handling (#1787) by @atomiks
- Avoid prop getters when merging props (#1852) by @atomiks
- Remove
trackCursorAxis
type fromPositioner
(#1895) by @atomiks - Apply
pointer-events: none
toPositioner
when not hoverable (#1917) by @atomiks - Add
collisionAvoidance
prop (#1849) by @atomiks
useRender
- Breaking change: Performance/refactor:
useRender
. An object with arenderElement
property is no longer returned; instead, the hook returns the element directly (const element = useRender(...)
). Therefs
option was also renamed toref
.
(#1934) by @romgrk - Skip most of useRenderElement logic when unnecessary (#1967) by @michaldudak
All contributors of this release in alphabetical order: @aarongarciah, @atomiks, @brijeshb42, @DarthSim, @flaviendelangle, @Janpot, @JCQuintas, @michaldudak, @mj12albert, @oliviertassinari, @romgrk, @Yonava, @ZeeshanTamboli