@base-ui/react
Version:
Base UI is a library of headless ('unstyled') React components and low-level hooks. You gain complete control over your app's CSS and accessibility features.
1,355 lines (885 loc) • 102 kB
Markdown
# Versions
## v1.6.0
_Jun 18, 2026_
### General changes
- Correct inaccurate prop JSDoc (#5036) by @atomiks
- Update the hook value when store/arguments change (#4866) by @chuganzy
- Restore viewport morphing after reopen for kept-mounted popups (#5010) by @atomiks
- Fix pseudo-element bounds in dev mode (#5000) by @atomiks
### Accordion
- Fix trigger behavior bugs (#4833) by @atomiks
- Remove region role from `Accordion.Root` (#4961) by @chuganzy
- Align keyboard navigation with APG (#4965) by @chuganzy
### Alert Dialog
- Fix programmatic focus return (#4849) by @atomiks
### Autocomplete
- Keep ArrowLeft/ArrowRight on the input caret in grid mode (#4948) by @spokodev
- Document `open` requirement for the `inline` prop (#5069) by @atomiks
### Avatar
- Fix image status edge cases (#4835) by @atomiks
### Checkbox
- Fix parent group cancellation and indeterminate state (#4941) by @atomiks
- Ignore `data-focused` Field attribute when disabled (#4998) by @atomiks
- Fix extra `validate` fn calls (#4911) by @mj12albert
### Checkbox Group
- Fix parent group cancellation and indeterminate state (#4941) by @atomiks
- Fix parent checkbox with custom `validate` fn (#4912) by @mj12albert
- Fix validation with multiple required checkboxes (#4958) by @atomiks
- Forward group ids (#4997) by @atomiks
### Collapsible
- Fix trigger and panel state bugs (#4848) by @atomiks
### Combobox
- Fix chip context error (#4877) by @lyzno1
- Keep ArrowLeft/ArrowRight on the input caret in grid mode (#4948) by @spokodev
- Avoid re-rendering every item on each keystroke (#4964) by @flaviendelangle
- Fix autofill and selected state edge cases (#4972) by @atomiks
- Document `open` requirement for the `inline` prop (#5069) by @atomiks
### Dialog
- Fix confirmation return focus (#5024) by @atomiks
- Fix programmatic focus return (#4849) by @atomiks
- Fix positioning and viewport edge cases (#4925) by @atomiks
- Fix non-modal focus-out close and tabindex management (#5030) by @atomiks
### Drawer
- Fix confirmation return focus (#5024) by @atomiks
- Improve swipe dismiss drag performance (#4867) by @atomiks
- Drive swipe gestures natively to stop per-frame re-rasterization (#4980) by @atomiks
- Add virtual keyboard provider (#4353) by @atomiks
- Commit swipe on primary-button release (#5057) by @atomiks
### Field
- Fix form validation bugs (#4873) by @atomiks
- Reflect disabled `Field.Item` state in `Field.Label` (#4916) by @chuganzy
- Reflect disabled `Field.Item` state in `Field.Description` (#4960) by @chuganzy
- Fix valueMissing revalidation (#4995) by @atomiks
- Fix validation bugs (#4894) by @atomiks
### Fieldset
- Fix disabled fieldset form bugs (#4890) by @atomiks
### Form
- Fix form validation bugs (#4873) by @atomiks
### Menu
- Fix submenu trigger interactions (#4892) by @atomiks
- Open submenus on hover after a plain delay (#4990) by @atomiks
- Fix controlled hover leave close (#4893) by @atomiks
- Fix positioning and viewport edge cases (#4925) by @atomiks
### Menubar
- Fix vertical menu focus behavior (#4922) by @atomiks
### Meter
- Sync value text with indicator (#4904) by @atomiks
### Navigation Menu
- Preserve exit transition when controlled (#4855) by @mattrothenberg
- Fix interaction, value, and styling-hook bugs (#4942) by @atomiks
### Number Field
- Handle unreadable clipboard paste (#4876) by @lyzno1
- Fix committed values and keyboard stepping (#4905) by @atomiks
- Respect Intl rounding options on blur (#4804) by @atomiks
- Fix formatter locale cache (#4999) by @atomiks
- Preserve numeric precision while keeping default display formatting (#5040) by @atomiks
- Fix input and scrub edge cases (#5046) by @atomiks
### OTP Field
- 🚨 **Breaking change:** Unmark preview<br />
the namespace export is renamed `OTPFieldPreview` → `OTPField` and should be imported as: `{ OTPField } from '@base-ui/react/otp-field'` (#5029) by @atomiks
- Avoid password manager bubbles after first input (#4868) by @atomiks
### Popover
- Fix controlled hover leave close (#4893) by @atomiks
- Fix programmatic focus return (#4849) by @atomiks
- Fix positioning and viewport edge cases (#4925) by @atomiks
- Fix non-modal focus-out close and tabindex management (#5030) by @atomiks
### Preview Card
- Fix controlled hover leave close (#4893) by @atomiks
- Fix positioning and viewport edge cases (#4925) by @atomiks
- Keep inline preview anchored while open (#4836) by @atomiks
- Close when active trigger unmounts (#4886) by @michaldudak
### Radio Group
- Forward group ids (#4997) by @atomiks
- Fix selection on space key press (#4930) by @chuganzy
- Fix disabled selected form submission (#4926) by @atomiks
- Honor canceled value changes (#4996) by @atomiks
### Scroll Area
- Fix overflow and scrolling state (#4936) by @atomiks
- Add scrolling state to Thumb (#4982) by @aarongarciah
### Select
- Fix autofill and selected state edge cases (#4934) by @atomiks
- Fix dirty state not clearing in multiple mode (#4971) by @atomiks
- Skip disabled items in typeahead and fix multiple-mode serialization (#5025) by @atomiks
### Slider
- Fix extra `validate` fn calls (#4911) by @mj12albert
- Fix interaction edge cases (#4937) by @atomiks
- Fix touchend listener accumulation leak (#5070) by @atomiks
### Switch
- Fix extra `validate` fn calls (#4911) by @mj12albert
### Tabs
- Fix state edge cases (#4935) by @atomiks
- Fix suspended panel activation (#4903) by @atomiks
### Toast
- Fix timer and limit edge cases (#4933) by @atomiks
### Toggle
- Fix grouped cancelation and JSDoc (#4940) by @atomiks
### Toggle Group
- Fix grouped cancelation and JSDoc (#4940) by @atomiks
- Remove invalid `aria-orientation` from `role="group"` element (#4628) by @sernstberger
- Fix disabled state and roving focus bugs (#4968) by @atomiks
### Toolbar
- Do not forward `disabled` to default toolbar button (#4967) by @mj12albert
- Fix disabled state and roving focus bugs (#4968) by @atomiks
### Tooltip
- Fix positioning and viewport edge cases (#4925) by @atomiks
- Fix provider delay group lifecycle (#4887) by @michaldudak
- Reset preventUnmountOnClose on reopen (#4885) by @michaldudak
- Close when active trigger unmounts (#4886) by @michaldudak
All contributors of this release in alphabetical order: @aarongarciah, @atomiks, @chuganzy, @flaviendelangle, @lyzno1, @mattrothenberg, @michaldudak, @mj12albert, @sernstberger, @spokodev
## v1.5.0
_May 19, 2026_
### General changes
- Improve mount performance with interaction splitting, including closed popup mount performance by up to 50% and unmounting performance by up to 85% (#4661) by @atomiks
- Use local document for virtual arrow (#4662) by @lyzno1
- Fix macOS Safari and Firefox minimizing fullscreen when closing popups with <kbd>Esc</kbd> (#4695) by @arturbien
- Drop unnecessary memoization (#4693) by @flaviendelangle
- Do not use `Math.random()` in `useStableCallback()` (#4732) by @michaldudak
- Fix return focus when reference disconnects (#4655) by @atomiks
- Don't steal initial focus if focus already moved inside a popup (#4775) by @stefee
### Alert Dialog
- Fix handle defaults (#4834) by @atomiks
### Autocomplete
- Fix native `FormData` for popup inputs (#4725) by @lunaxislu
### Checkbox
- Submit the associated form when pressing <kbd>Enter</kbd> (#4713) by @michaldudak
### Combobox
- Expose clear visibility state (#4664) by @atomiks
- Fix popup input form submit (#4687) by @atomiks
- Preserve `closeQuery` when closing multiple input-inside-popup combobox (#4715) by @mj12albert
- Fix RTL component behavior (#4840) by @atomiks
- Ignore hidden-input changes while readonly or disabled (#4810) by @lunaxislu
### Dialog
- Consider the controlled `open` prop for open state detection (#4712) by @michaldudak
### Drawer
- Forward `style` prop in `<Drawer.Viewport>` (#4841) by @atomiks
### Field
- Avoid `flushSync` during validation (#4685) by @atomiks
### Form
- Avoid `flushSync` during validation (#4685) by @atomiks
### Menu
- Fix submenu pointer-events scope for `keepMounted` portals (#4723) by @twillhorn
- Support `<Menu.GroupLabel>` in `<Menu.RadioGroup>` (#4826) by @nami8824
- Consider the controlled `open` prop for open state detection (#4712) by @michaldudak
### Navigation Menu
- Fix RTL component behavior (#4840) by @atomiks
- Fix `keepMounted` content sizing (#4817) by @atomiks
### Number Field
- Allow Persian digits in keyboard input (#4719) by @lunaxislu
- Sync pasted input during step interactions (#4824) by @lunaxislu
### OTP Field
- **Breaking change:** Rename `sanitizeValue()` to `normalizeValue()` and allow composing with validation (#4717) by @atomiks
- Avoid `flushSync` during validation (#4685) by @atomiks
- Support <kbd>Ctrl</kbd> and <kbd>Cmd</kbd> shortcuts (#4606) by @atomiks
- Fire `onValueComplete()` for full paste (#4690) by @atomiks
- Fix vertical arrow slot navigation (#4844) by @atomiks
- Ignore hidden input changes while readonly or disabled (#4806) by @lunaxislu
- Prevent locked hidden autofill validation (#4827) by @lunaxislu
- Fix RTL arrow navigation (#4847) by @atomiks
### Popover
- Fix RTL component behavior (#4840) by @atomiks
- Preserve active trigger on close press (#4741) by @mj12albert
- Consider the controlled `open` prop for open state detection (#4712) by @michaldudak
### Preview Card
- Consider the controlled `open` prop for open state detection (#4712) by @michaldudak
- Integrate inline positioning (#2074) by @atomiks
### Scroll Area
- Fix RTL component behavior (#4840) by @atomiks
### Select
- Clear stale item text ref (#4683) by @atomiks
- Add `data-popup-side` to trigger (#4671) by @mj12albert
- Allow mouse selection without highlight (#4699) by @atomiks
- Ignore hidden-input changes while readonly or disabled (#4810) by @lunaxislu
- Fix nested Select requiring extra outside clicks to dismiss parent (#4820) by @mattrothenberg
### Tabs
- Fire `onValueChange()` for automatic tab selection (#4704) by @michaldudak
### Toast
- Re-use `getElementTransform()` and remove local implementation (#4749) by @sai6855
- Fix stuck drag state on release (#4742) by @aeterno-caspian
- Remove memoized selector (#4751) by @atomiks
### Tooltip
- Consider the controlled `open` prop for open state detection (#4712) by @michaldudak
- Fix flickering when nesting tooltip inside another tooltip's trigger (#4501) by @michaldudak
All contributors of this release in alphabetical order: @aeterno-caspian, @arturbien, @atomiks, @flaviendelangle, @Janpot, @lunaxislu, @lyzno1, @mattrothenberg, @michaldudak, @mj12albert, @nami8824, @sai6855, @stefee, @twillhorn
## v1.4.1
_Apr 20, 2026_
### General changes
- Clear highlight on pointer leave when item is clipped by scroll container (#4604) by @atomiks
- Fix `display: contents` tabbability (#4642) by @atomiks
- Fix multi-argument event handler forwarding in `mergeProps` (#4598) by @atomiks
- Mark `date-fns` peer dependencies as optional (#4639) by @LukasTy
### Navigation Menu
- Fix stale popup size on rapid trigger hover (#4646) by @atomiks
All contributors of this release in alphabetical order: @atomiks, @LukasTy
## v1.4.0
_Apr 13, 2026_
### General changes
- Improve `render` prop warning accuracy (#4324, #4363) by @atomiks
- Fix `preventBaseUIHandler` runtime wrapping (#4330) by @atomiks
- Fix Uncaught TypeError: Converting circular structure to JSON (#4452) by @Profesor08
- Expose `form` prop on hidden inputs (#4352) by @atomiks
- Add `suppressHydrationWarning` to hidden inputs (#4482) by @devxoul
- Fix outside-press dismissal in a shared shadow root (#4333) by @atomiks
- Fix `Positioner` not repositioning to a different trigger when reopened with `keepMounted` (#4407) by @mdm317
- Lock scroll of full-width anchored `modal` popups with touch input (#3100) by @atomiks
### Alert Dialog
- Fix detached trigger HMR with recreated handles (#4472) by @atomiks
### Autocomplete
- Fix initial live region announcements (#4286) by @atomiks
### Avatar
- Fix flash when image is cached (#4469) by @mj12albert
### Checkbox
- Fix uncontrolled default initialization (#4535) by @atomiks
- Prevent input state changes in `readOnly` mode (#4551) by @tsbehlman
### Collapsible
- Fix open state when `keepMounted` has no transitions (#4555) by @mj12albert
### Combobox
- Fix clicks in `Chips`/`InputGroup` areas not focusing the input or opening the popup (#4296) by @CiscoFran10
- Fix iOS viewport settling (#4351) by @atomiks
- Fix initial live region announcements (#4286) by @atomiks
- Prevent scroll lock when a controlled value triggers a re-render (#4507) by @ryanrhee
- Fix browser autofill with object values when autofill uses the label (#4560) by @mattrothenberg
- Prevent item taps from blurring the input (#4578) by @atomiks
- Respect rendered chips for keyboard navigation (#4572) by @atomiks
### Dialog
- Fix detached trigger HMR with recreated handles (#4472) by @atomiks
### Drawer
- Fix touch scroll in portaled popups (#4382) by @atomiks
- Fix nested swipe cancel state (#4410) by @atomiks
- Fix interrupted swipe dismiss cleanup (#4467) by @lunaxislu
- Warn when a popup is missing `Viewport` (#4495) by @atomiks
- Prevent dialogs from affecting nested drawer stack (#4493) by @atomiks
### Field
- Fix form error matching in `<Field.Error>` (#4494) by @atomiks
### Menu
- Fix `SubmenuTrigger` not respecting disabled state from `render` (#3858) by @CiscoFran10
- Preserve dialog focus on pointer leave (#4581) by @atomiks
### Navigation Menu
- Remove invalid `aria-orientation` attribute (#4355) by @atomiks
- Add generic `Value` typing (#4328) by @atomiks
- Fix initial trigger switch size snap (#4327) by @atomiks
- Fix top-level trigger pointer events blocking (#4362) by @atomiks
- Fix reverse <kbd>Shift</kbd>+<kbd>Tab</kbd> submenu re-entry (#4464) by @atomiks
- Fix nested inline submenu hover handoff (#4413) by @atomiks
- Fix transition width when reopening (#4587) by @mdm317
### Number Field
- Fix format rounding error on blur (#4557) by @atomiks
### OTP Field
- Add preview `OTPField` component for one-time password and verification code entry (#4365) by @atomiks
### Popover
- Remove stray focus guards around trigger when `modal` (#4350) by @atomiks
- Sync hover open event state (#4526) by @atomiks
### Preview Card
- Fix hover reopen race conditions across close transitions (#4446) by @arturbien
### Select
- Fix browser autofill with object values when autofill uses the label (#4560) by @mattrothenberg
- Preserve touch exit animations (#4325) by @atomiks
- Fix touch reopen highlight (#4356) by @atomiks
- Fix scroll arrows stopping short of the edges (#4447) by @atomiks
- Fix RTL-aligned popup positioning with `alignItemWithTrigger` (#4531) by @atomiks
### Slider
- Fix edge thumb alignment after reveal (#4354) by @atomiks
- Remove extra TalkBack focus targets (#4242) by @atomiks
- Fix keyboard floating-point rounding (#4548) by @atomiks
- Skip client-only prehydration scripts (#4530) by @atomiks
### Switch
- Prevent input state changes in `readOnly` mode (#4551) by @tsbehlman
### Tabs
- Fix `activationDirection` not updating on programmatic value changes (#4347) by @LukasTy
- Fix activation direction on first render (#4532) by @atomiks
- Skip client-only prehydration scripts (#4530) by @atomiks
### Toast
- Keep viewport expanded while touch swiping (#4411) by @atomiks
- Add upsert support to `add` method (#4440) by @atomiks
- Fix timers not resuming after window regains focus (#4438) by @kyrregjerstad
### Toggle Group
- Fix incorrect keyboard nav on cross axis (#4488) by @mj12albert
All contributors of this release in alphabetical order: @arturbien, @atomiks, @CiscoFran10, @devxoul, @flaviendelangle, @kyrregjerstad, @LukasTy, @lunaxislu, @mattrothenberg, @mdm317, @michaldudak, @mj12albert, @Profesor08, @ryanrhee, @sai6855, @tsbehlman
## v1.3.0
_Mar 12, 2026_
### General changes
- Warn when a component function is rendered directly (#4077) by @atomiks
- Reset `openMethod` after close transition (#4128) by @atomiks
- Fire <kbd>Space</kbd> activation on `keydown` in composite widgets (#4053) by @atomiks
- Skip CSS-hidden items during keyboard navigation in composite widgets (#4195) by @atomiks
- Optimize hot paths in `useHover` hooks and `safePolygon` (#4199) by @atomiks
- Snap `--anchor-width` and `--anchor-height` to device pixel grid (#4082) by @flaviendelangle
- Fix outside press dismissal when a component is portaled into a shadow DOM (#4230) by @dmitri-gb
- Fix nested hoverable popups (#4206) by @dmitri-gb
- Apply `data-base-ui-inert` to highest-level node (#3955) by @atomiks
- Fix portable types (#4058) by @cgatian
### Accordion
- Add generic `Value` typing (#4138) by @atomiks
### Autocomplete
- Respect a `null` `filter` prop (#4117) by @atomiks
- Add `InputGroup` part (#3745) by @atomiks
### Avatar
- Remove fallback transition logic and prevent premature image display (#4110) by @atomiks
### Button
- Avoid checking `disabled` twice in `onKeyDown` and `onKeyUp` (#4132) by @flaviendelangle
### Checkbox
- Add automatic `aria-labelledby` support (#4142) by @atomiks
### Combobox
- Avoid applying field attributes to input when it is inside popup (#4154) by @atomiks
- Preserve inline input on `Enter` when nothing is highlighted (#4235) by @atomiks
- Fix ARIA attributes during SSR (#4179) by @atomiks
- Fix wrapping in virtualized grid arrow-key navigation (#4164) by @atomiks
- Add `InputGroup` part (#3745) by @atomiks
- Add support for a visually hidden close button and improve modal focus trapping (#4084) by @atomiks
- Add `Label` part (#4167) by @atomiks
### Context Menu
- Ignore `mouseup` on non-Mac platforms (#3944) by @atomiks
### Drawer
- **Breaking change:** `Drawer` is no longer marked as preview<br />
`Drawer` is now stable and should be imported as `{ Drawer } from '@base-ui/react/drawer'` (#4293) by @atomiks
- Fix React 17 support (#4178) by @atomiks
- Include border in frontmost height variable (#4202) by @atomiks
- Improve touch selection (#4104) by @atomiks
- Preserve cross-axis scrolling during touch gestures (#4187) by @atomiks
- Prevent swipe dismissal when component is controlled (#4133) by @flaviendelangle
- Add `SwipeArea` part (#4102) by @atomiks
- Make `data-base-ui-swipe-ignore` explicit for touch interactions (#4295) by @atomiks
- Disable inheritance for swipe CSS variables (#4099) by @atomiks
### Field
- Fix field validation when `Form` errors or `invalid` prop are present at same time (#4112) by @mj12albert
### Menu
- Prevent `pointerleave` from stealing focus from dialogs (#4125) by @atomiks
- Optimize `pointer-events` for submenu hover interactions (#4231) by @atomiks
- Fix `closeDelay` not being applied to `Menu.SubmenuTrigger` (#4134) by @flaviendelangle
- Implement content transitions with `Viewport` (#4060) by @michaldudak
### Meter
- Fix label announcements in NVDA (#4200) by @mj12albert
### Navigation Menu
- Fix support for nested inline menus (#4198) by @atomiks
- Fix close propagation in nested hover menus (#4285) by @atomiks
- Close parent menus when nested link with `closeOnClick` is clicked (#4276) by @CiscoFran10
- Fix duplicate `aria-orientation` (#4309) by @atomiks
- Fix delayed trigger switches in Safari (#4310) by @atomiks
### Number Field
- Fix increment/decrement press `reason` values in `onValueCommitted` (#4259) by @jijiseong
### Popover
- Trap focus when `<Popover.Close>` is rendered inside and `modal` is `true`, and add support for a visually hidden close button (#4084) by @atomiks
- Fix nested hoverable popups (#3798) by @flaviendelangle
### Preview Card
- Fix nested hoverable popups (#3798) by @flaviendelangle
### Progress
- Fix label announcements in NVDA (#4200) by @mj12albert
### Radio Group
- Add automatic `aria-labelledby` support (#4142) by @atomiks
### Scroll Area
- Fix focus trapping with a non-scrollable viewport (#4220) by @atomiks
- Fix thumb size after remounting (#4107) by @atomiks
### Select
- Fix hidden input `id` fallback (#4135) by @atomiks
- Fix `Value` placeholder not rendering with `Record` items (#4137) by @vcode-sh
- Fire `onClick` during drag-to-select (#3969) by @obeattie
- Fix `items` type definition for groups (#3884) by @aarongarciah
- Fix `alignItemWithTrigger` fallback with browser zoom (#4292) by @atomiks
- Add `Label` part (#4167) by @atomiks
### Slider
- Add `Label` part (#4167) by @atomiks
- Stop committing validation on `touchend` (#4091) by @jijiseong
### Switch
- Add automatic `aria-labelledby` support (#4142) by @atomiks
### Tabs
- Re-render indicator position on tab resize (#4165) by @atomiks
### Toast
- Enable closing all toasts (#3979) by @chuganzy
- Prevent duplicate `onClose` calls for ending toasts (#4280) by @chuganzy
### Tooltip
- Add `closeOnClick` prop (#4140) by @atomiks
All contributors of this release in alphabetical order: @aarongarciah, @atomiks, @cgatian, @chuganzy, @CiscoFran10, @dmitri-gb, @flaviendelangle, @jijiseong, @michaldudak, @mj12albert, @obeattie, @vcode-sh
## v1.2.0
_Feb 12, 2026_
### General changes
- Do not memoize `state` when not needed (#3812) by @flaviendelangle
- Support lazy element in `render` prop (#3856) by @oliviertassinari
- Replace Firefox deprecated mozInputSource check for virtual click detection (#3942) by @CiscoFran10
- Use `WeakRef` for previously focused elements (#3916) by @atomiks
- Fix page scroll jump when input has focus on unmount in Safari (#3925) by @atomiks
- Fix flash at origin before positioning completes in Preact (#3975) by @OliverSpeir
- Reduce style recalculation with classic scrollbars (#3854) by @mdm317
- Fix event handling in useEnhancedClickHandler (#3981) by @sai6855
### Autocomplete
- Fix filter method's `useMemo` dependency (#3862) by @ZeeshanTamboli
- Fix Autocomplete not using its internal filter method when `mode` is `list` (#3936) by @ZeeshanTamboli
- Remove unnecessary double stringification of item in filtering logic (#3945) by @ZeeshanTamboli
- Add `useFilteredItems` hook (#3732) by @guisehn
- Fix popup closing on iOS VoiceOver (#3859) by @atomiks
- Remove `aria-readonly` prop from `Clear` and `Popup` components when `readOnly` (#3907) by @markocupic024
### Avatar
- Add transition attributes (#3939) by @atomiks
### Button
- Capture component stack for `nativeButton` error message (#3861) by @atomiks
### Checkbox
- Cleanup disabled state tracking (#3913) by @atomiks
- Preserve modifier key properties in the change event (#3935) by @mj12albert
- Allow exit animations on `<Checkbox.Indicator>` when `keepMounted={false}` (#3939) by @atomiks
### Combobox
- Fix the type of the ref of the `Icon` part (#3796) by @flaviendelangle
- Avoid clearing selected value if item is not present in items array (#3824) by @atomiks
- Fix highlight change reason in `ChipRemove` (#3980) by @sai6855
- Keep highlight on last deselect (#3923) by @atomiks
- Fix inline filtering after selection in single mode (#3978) by @atomiks
- Clear highlight on inline blur when inline (#3973) by @atomiks
- Prevent opening popup on autofill change (#3924) by @atomiks
- Distinguish `input-press` from `trigger-press` in `onOpenChange` reason (#4015) by @jijiseong
- Fix async items while popup is open (#4034) by @atomiks
- Prevent `Chip` from receiving focus when `disabled` (#4044) by @jijiseong
- Add `useFilteredItems` hook (#3732) by @guisehn
- Fix popup closing on iOS VoiceOver (#3859) by @atomiks
- Remove `aria-readonly` prop from `Clear` and `Popup` components when `readOnly` (#3907) by @markocupic024
- Fix `onClick` `Item` type (#3964) by @atomiks
- Use reactive `domReferenceElement` subscriptions (#4017) by @atomiks
- Add `autoComplete` prop for explicit browser autofill support (#4005) by @mattrothenberg
- Fix inconsistent isItemEqualToValue argument order (#4056) by @atomiks
### Context Menu
- Fix `disabled` prop not working (#3806) by @arturbien
- Fix explicit `collisionAvoidance` with `side: 'flip'` not working (#3877) by @obeattie
### Drawer
- Create new Drawer / Sheet component (#3680) by @atomiks
### Field
- Prevent re-renders when `Field.Control` is uncontrolled (#3820) by @atomiks
- Fix autofocus in SSR environments (#3871) by @mj12albert
- Fix max update depth loop when using `<React.Activity>` (#3931) by @atomiks
- Add transition attributes (#3939) by @atomiks
### Input
- Fix autofocus in SSR environments (#3871) by @mj12albert
- Update ref type to `HTMLElement` (#3866) by @mj12albert
### Menu
- Fix `onClick` `Item` type (#3964) by @atomiks
- Fix submenu stuck glitch (#3783) by @atomiks
- Fix race conditions (#3821) by @atomiks
- Add `<Menu.LinkItem>` part (#3400) by @mj12albert
### Navigation Menu
- Fix forwarded ref types (#3775) by @CrawlerCode
- Add `keepMounted` prop to `Content` part (#3794) by @atomiks
### Number Field
- Fix click handlers on ScrubArea (#3827) by @mj12albert
- Remove `event.isTrusted` (#3920) by @atomiks
- Stop repeat change at bounds (#3915) by @atomiks
- Add `allowOutOfRange` prop (#3919) by @atomiks
- Fix pen pointer handling (#3917) by @atomiks
- Fix missing field state data attributes (#3909) by @mj12albert
### Popover
- Fix missing `aria-owns` element (#3959) by @atomiks
- Use reactive `domReferenceElement` subscriptions (#4017) by @atomiks
- Fix broken scale transition with detached triggers (#3810) by @michaldudak
### Preview Card
- Fix broken scale transition with detached triggers (#3810) by @michaldudak
### Progress
- De-duplicate `formatValue` function (#3805) by @sai6855
### Radio Group
- Preserve modifier key properties in the change event (#3935) by @mj12albert
- Allow exit animations on `<Radio.Indicator>` when `keepMounted={false}` (#3939) by @atomiks
- Rely on individual radio hidden inputs (#3826) by @atomiks
- Add generic `Value` typing to `Radio` (#4033) by @atomiks
### Scroll Area
- Add `data-scrolling` state attribute to `Root` and `Viewport` parts (#3823) by @arturbien
- Fix overflow edge rounding (#3888) by @atomiks
### Select
- Add `finalFocus` prop (#3785) by @markocupic024
- Fix `alignItemWithTrigger` transform with CSS animations (#3831) by @atomiks
- Fix `highlightItemOnHover` not being respected (#3868) by @sarthakmalik0810
- Reset typeahead on external blur (#2618) by @antonfrolovsky
- Fix scroll height loop (#3795) by @atomiks
- Add `autoComplete` prop for explicit browser autofill support (#4005) by @mattrothenberg
- Fix inconsistent isItemEqualToValue argument order (#4056) by @atomiks
### Slider
- Fix missing field state data attributes (#3909) by @mj12albert
- Fix change event cloning (#3960) by @atomiks
### Switch
- Preserve modifier key properties in the change event (#3935) by @mj12albert
### Tabs
- Add transition attributes to `<Tabs.Panel>` part (#3880) by @atomiks
### Toast
- Make `useToastManager` and `createToastManager` generic functions (#3882) by @solastley
- Prevent dismissed promise toast from reopening on updates (#4040) by @atomiks
- Introduce a store (#3464) by @flaviendelangle
### Toggle
- Improve type safety and inference (#3173) by @michaelhazan
### Toggle Group
- Type value as string to match Toggle (#3770) by @markocupic024
- Enable `Home`/`End` key navigation (#3971) by @jijiseong
- Improve type safety and inference (#3173) by @michaelhazan
### Tooltip
- Prevent opening when focusing a disabled Trigger (#3902) by @michaldudak
- Fix broken scale transition with detached triggers (#3810) by @michaldudak
- Fix disabled prop on Triggers (#4049) by @michaldudak
All contributors of this release in alphabetical order: @antonfrolovsky, @arturbien, @atomiks, @CiscoFran10, @CrawlerCode, @flaviendelangle, @guisehn, @jijiseong, @LukasTy, @markocupic024, @mattrothenberg, @mdm317, @michaelhazan, @michaldudak, @mj12albert, @obeattie, @OliverSpeir, @oliviertassinari, @sai6855, @sarthakmalik0810, @solastley, @ZeeshanTamboli
## v1.1.0
_Jan 15, 2026_
### General changes
- Fix `onOpenChangeComplete(true)` timing (#3558) by @atomiks
- Fix touch `openMethod` when tapping outside element bounds on Safari (#3541) by @atomiks
- Fix visually hidden input styles across form components (#3606) by @atomiks
- Fix click and drags outside a nested popup component from closing its parents (#3571) by @atomiks
- Fix forwarded ref types (#3638) by @atomiks
- Fix detached trigger remounting (#3724) by @atomiks
- Include `ref` in `BaseUIComponentProps` (#2813) by @atomiks
- Remove duplicated `disabled` prop (#3650) by @seongminn
- Allow `actionsRef` to be `null` (#3682) by @mj12albert
### Accordion
- Fix keyboard navigation with non-interactive trigger elements (#3684) by @ZeeshanTamboli
### Autocomplete
- Add `data-popup-side` and `data-list-empty` state attributes to `<Autocomplete.Trigger>` (#3491) by @atomiks
- Add `loopFocus` prop (#3592) by @atomiks
- Fix hidden input `id` and `required` props (#3640) by @atomiks
### Button
- Remove discriminated props union (#3643) by @atomiks
### Checkbox
- Fix hidden input `id` and `required` props (#3640) by @atomiks
### Combobox
- Add `data-popup-side` and `data-list-empty` state attributes to `<Combobox.Trigger>` (#3491) by @atomiks
- Add `loopFocus` prop (#3592) by @atomiks
- Add `toolbar` role to `<Combobox.Chips>` to prevent NVDA from entering browse mode (#3647) by @atomiks
- Add `placeholder` prop to `<Combobox.Value>` (#3604) by @atomiks
- Fix controlled `value` prop when `items` change (#3607) by @atomiks
- Fix `multiple` values label resolution in `<Combobox.Value>` (#3314) by @atomiks
- Forward root `id` to visible form element (#3722) by @atomiks
- Do not trigger Field `onBlur` handlers when opening popup (#3609) by @atomiks
### Context Menu
- Avoid creating sibling elements next to trigger (#3645) by @atomiks
### CSP Provider
- Add `CSPProvider` (#3553) by @atomiks
### Dialog
- Fix `Maximum update depth exceeded` error with Suspense (#3700) by @michaldudak
- Fix `<Dialog.Title>` forwardedRef type (#3736) by @ZeeshanTamboli
### Field
- Add `actionsRef` prop (#3395) by @mj12albert
- Add `nativeLabel` prop to `<Field.Label>` (#3723) by @atomiks
- Add missing type export (#3702) by @DiegoAndai
### Form
- Add `actionsRef` prop (#3395) by @mj12albert
### Menu
- Fix focus guard handling (#3654) by @atomiks
- Avoid disabling modality on click after hover-open (#3455) by @atomiks
### Menubar
- Fix submenu outside-press dismiss on touch (#3556) by @atomiks
### Number Field
- Fix Field `data-focused` state (#3563) by @atomiks
- Fix hidden input focus on submit (#3581) by @atomiks
### Popover
- Fix popup auto resize glitches (#3591) by @atomiks
- Fix focus guard handling (#3654) by @atomiks
- Prevent disabling focus management when clicking trigger before hover delay completes (#3572) by @atomiks
- Refactor popup auto resize logic. It is no longer necessary to specify `--positioner-width`/`--positioner-height` CSS variables on `<Popover.Positioner>` when using detached triggers unless the `Viewport` part has been added to the JSX. (#3652) by @atomiks
### Preview Card
- Support detached triggers (#3566) by @michaldudak and @atomiks
### Radio Group
- Fix `value` type (#3582) by @atomiks
- Fix hidden input `id` and `required` props (#3640) by @atomiks
### Scroll Area
- Perf improvements (#3536) by @atomiks
### Select
- Add `placeholder` prop to `<Select.Value>` (#3604) by @atomiks
- Fix support for transform animations when `alignItemWithTrigger` is active (#3532) by @atomiks
- Fix support for `max-height` popup style when `alignItemWithTrigger` is active (#3573) by @atomiks
- Fix `data-filled` state in `multiple` mode (#3608) by @atomiks
- Fix highlight being removed on popup mouseout when `highlightItemOnHover` is disabled (#3492) by @atomiks
- Fix support for individual transform animations when `alignItemWithTrigger` is active (#3637) by @atomiks
- Fix `multiple` values label resolution in `<Select.Value>` (#3314) by @atomiks
- Forward root `id` to visible form element (#3722) by @atomiks
- Do not trigger Field `onBlur` handlers when opening popup (#3609) by @atomiks
### Slider
- Fix `onValueCommitted` not called for range sliders (#3600) by @mj12albert
### Switch
- Add `value` prop (#3676) by @Grafikart
- Fix hidden input `id` and `required` props (#3640) by @atomiks
### Toast
- Fix timers not being rescheduled when updated (#3564) by @atomiks
### Tooltip
- Fix popup auto resize glitches (#3591) by @atomiks
- Fix `trackCursorAxis` handling (#3679) by @atomiks
- Refactor popup auto resize logic. It is no longer necessary to specify `--positioner-width`/`--positioner-height` CSS variables on `<Tooltip.Positioner>` when using detached triggers unless the `Viewport` part has been added to the JSX. (#3652) by @atomiks
### mergeProps
- Make `mergeProps` public (#3642) by @michaldudak and @LukasTy
### useRender
- Export missing types (#3565) by @michaldudak
All contributors of this release in alphabetical order: @albertdugba, @atomiks, @brijeshb42, @chuganzy, @colmtuite, @dav-is, @DiegoAndai, @Grafikart, @Janpot, @LukasTy, @michaldudak, @mj12albert, @oliviertassinari, @seongminn, @updbqn, @ZeeshanTamboli
## v1.0.0
_Dec 11, 2025_
### General changes
- **Breaking change:** Rename packages to use the `@base-ui` org.<br />
The package name has changed from `@base-ui-components/react` to `@base-ui/react`.
(#3462) by @mnajdova
### Combobox
- Respect `itemToStringValue` for `onFormSubmit` (#3441) by @atomiks
- Add `null` as an option for the value prop (#3488) by @mnajdova
### Menu
- Fix submenu opens with 0 delay (#3459) by @atomiks
- Fix focus not returning to trigger on <kbd>Esc</kbd> while pointer rests on popup (#3482) by @atomiks
- Fix always `null` open method (#3486) by @atomiks
- Allow side axis fallback for submenus by default (#3470) by @atomiks
### Navigation Menu
- Fix mount transitions on `Positioner` in Firefox (#3424) by @atomiks
### Number Field
- Fix multiple scrub area support (#3471) by @atomiks
### Popover
- Fix mount transitions on `Positioner` in Firefox (#3424) by @atomiks
- Fix skipped viewport transitions (#3453) by @atomiks
### Select
- Respect `itemToStringValue` for `onFormSubmit` (#3441) by @atomiks
- Add `null` as an option for the value prop (#3488) by @mnajdova
### Tabs
- Fix indicator positioning in transformed containers (#3439) by @atomiks
- Do not initially select a disabled tab (#3475) by @michaldudak
### Toast
- Fix `flushSync` dev error when toast is added (#3443) by @atomiks
- Fix `<Toast.Close>;` emitting `aria-hidden` warning on click (#3469) by @atomiks
### Toggle Group
- More permissive towards falsy toggle values (#3477) by @mj12albert
### Tooltip
- Fix mount transitions on `Positioner` in Firefox (#3424) by @atomiks
- Fix ignored "modal" setting in Popovers experiment (#3474) by @michaldudak
- Fix shared tooltip closing with trigger gaps (#3452) by @atomiks
- Fix skipped viewport transitions (#3453) by @atomiks
All contributors of this release in alphabetical order: @atomiks, @LukasTy, @michaldudak, @mj12albert, @mnajdova, @oliviertassinari, @pondorasti, @romgrk, @ZeeshanTamboli
## v1.0.0-rc.2
_Dec 11, 2025_
This release contains the same code as v1.0.0.
Please refer to that version to see the changes.
## v1.0.0-rc.1
_Dec 11, 2025_
This release contains the same code as v1.0.0.
Please refer to that version to see the changes.
## v1.0.0-rc.0
_Dec 4, 2025_
### General changes
- Fix missing `'use client'` directives (#3408) by @atomiks
### Autocomplete
- Fix `keepHighlight` focus sync (#3399) by @atomiks
### Checkbox
- **Breaking change:** Match native unchecked state in form submission.<br />
The Checkbox will not submit the `"off"` value with a form when unchecked anymore, unless the new `uncheckedValue` prop is set.
(#3406) by @atomiks
### Collapsible
- Remove `render={null}` (#3407) by @mj12albert
### Combobox
- **Breaking change:** Removed the `keepHighlight` prop (#3377) by @atomiks
### Dialog
- Close when pressing focusable element outside (#3380) by @atomiks
- Fix closing after pointer lock exit in Firefox (#3379) by @atomiks
### Menu
- Add `highlightItemOnHover` prop (#3377) by @atomiks
- Do not import client components from MenuStore (#3409) by @michaldudak
### Number Field
- Ensure hidden input participates in form validation (#3374) by @atomiks
- Improve symbol replacement logic (#3376) by @atomiks
- Fix fractional step snapping (#3375) by @atomiks
- Fix parsing numbers with Swiss locale (#3361) by @michaldudak
- Fix pointer lock release when soft clicking in Firefox (#3378) by @atomiks
### Popover
- Close when pressing focusable element outside (#3380) by @atomiks
- Fix modal backdrop on touch (#3383) by @atomiks
- Fix popover glitching when flipped (#3364) by @michaldudak
### Select
- Add `highlightItemOnHover` prop (#3377) by @atomiks
### Switch
- **Breaking change:** Match native off state in form submission.<br />
The Switch will not submit the `"off"` value with a form when unchecked anymore, unless the new `uncheckedValue` prop is set.
(#3406) by @atomiks
### Tabs
- **Breaking change:** Fix Panel `keepMounted` behavior.<br />
The `value` prop is now required on `<Tabs.Tab>` and `<Tabs.Panel>` parts.
(#3372) by @atomiks
### Toast
- Recalculate content height when layout size is fixed (#3359) by @atomiks
- Fix multiple swipe directions on same axis (#3392) by @mj12albert
### Tooltip
- Improve contained triggers performance (#3385) by @michaldudak
All contributors of this release in alphabetical order: @atomiks, @michaldudak, @mj12albert, @oliviertassinari, @pondorasti, @romgrk
## v1.0.0-beta.7
_Nov 27, 2025_
### General changes
- Fix error about `props.ref` access in React <=18 (#3257) by @atomiks
- Prefer non-adaptive anchoring position in `<Positioner>` components and fix `autoFocus` scroll jumps (#3250) by @atomiks
- Make popups' `data-anchor-hidden` state attribute check for anchor presence in layout (#3267) by @atomiks
- Prevent popups from sticking after hover when pressing `<a>` tags inside them (#3318) by @atomiks
- Improve performance when detached triggers are used (#3277)
- Fix iOS VoiceOver voice control accessibility in non-modal popups (#3340)
### Alert Dialog
- Fix trigger registration loop (#3249) by @atomiks
- Fix focus restoration when focused element is hidden with CSS (#3313)
### Checkbox Group
- Fix `aria-describedby` on checkbox group (#3269) by @mj12albert
### Combobox
- Revert overload types to ensure typed wrappers work correctly (#3254) by @atomiks
- Fix ignored `filteredItems` instances (#3272) by @atomiks
- Fix loop when passing `undefined` to `items` prop (#3348)
### Context Menu
- Block mouseup at initial cursor point (#3274) by @atomiks
### Dialog
- Fix trigger registration loop (#3249) by @atomiks
- Fix focus restoration when focused element is hidden with CSS (#3313)
### Form
- Fix cast `ref` type (#3324) by @mj12albert
### Menu
- Fix trigger registration loop (#3249) by @atomiks
- Do not pass `key` to the rendered element (#3255) by @michaldudak
- Fix nested dialog from closing on <kbd>Shift+Tab</kbd> (#3346)
### Navigation Menu
- Fix Safari 18 issue where `<Positioner>` width may be set to 0 on hover (#3309) by @EmilNordling
- Ensure submenu triggers participate in composite list (#3344) by @atomiks
### Number Field
- Fix literal space handling with symbols (#3334) by @atomiks
### Popover
- Fix trigger registration loop (#3249) by @atomiks
- Do not pass `key` to the rendered element (#3255) by @michaldudak
- Fix focus restoration when focused element is hidden with CSS (#3313)
### Select
- Revert overload types to ensure typed wrappers work correctly (#3254) by @atomiks
### Slider
- Fix extra `onValueCommitted` calls (#3312) by @mj12albert
- Fix cast `ref` type (#3324) by @mj12albert
### Tooltip
- Fix trigger registration loop (#3249) by @atomiks
All contributors of this release in alphabetical order: @atomiks, @brijeshb42, @Copilot, @EmilNordling, @michaldudak, @mj12albert, @oliviertassinari, @ZeeshanTamboli
## v1.0.0-beta.6
_Nov 17, 2025_
This is a hotfix release with the following changes:
- Fix for rendering of Alert Dialog, Dialog, Menu, Popover, and Tooltip in React Server Components (#3241) by @michaldudak
- Fix of the types of the refs in the Checkbox, Switch and Radio components (#3246) by @mnajdova
- Fix of the value type error with mergeProps (#3247) by @atomiks
## v1.0.0-beta.5
_Nov 17, 2025_
### General changes
- **Breaking change:** Replace `trackAnchor` with `disableAnchorTracking`.<br />
If you were using `trackAnchor={false}`, be sure to update your usage to `disableAnchorTracking` instead.
(#3188) by @mnajdova
- **Breaking change:** Rename `loop` to `loopFocus` (#3186) by @mnajdova
- Fix type portability (#2912) by @atomiks
- Accept a function for the `style` prop (#3038) by @mnajdova
- Create portal elements inside React (#2889) by @atomiks
- Avoid applying `hidden` attribute to indicator elements when they specify `keepMounted` and are invisible (#3228) by @atomiks
- Fix crash in Next.js 16 when accessing `render.props.ref` (#3231) by @atomiks
### Accordion
- **Breaking change:** Change `multiple` prop to be false by default and add a demo (#3141) by @mnajdova
- Fix flaky exit transition (#3101) by @atomiks
### Alert Dialog
- Fix `initialFocus` as function being called on close (#2949) by @atomiks
- Support detached triggers (#2974) by @michaldudak
- Place `overflow: hidden` on `<body>` for overlay scrollbars by default. Avoids sticky elements shifting if `<body>` has an `overflow` style specified. (#3083) by @atomiks
- Add `<AlertDialog.Viewport>` part (#2808) by @atomiks
### Autocomplete
- **Breaking change:** Refactor `alwaysSubmitOnEnter` to `submitOnItemClick` prop.<br />
If you were using `alwaysSubmitOnEnter`, be sure to update your usage to `submitOnItemClick` instead.
(#3018) by @atomiks
- Prevent blocking filtering while composing text on Android (#2944) by @atomiks
- Add empty state to `List.State` (#2934) by @atomiks
- Fix `initialFocus` as function being called on close (#2949) by @atomiks
- Add `role="combobox"` to `<Autocomplete.Trigger>` if `<Autocomplete.Input>` is inside Popup (#2973) by @atomiks
- Fix stale `onItemHighlighted` data when filtering with `autoHighlight` (#2829) by @atomiks
- Add empty and side styling attributes on `<Autocomplete.Input>` (#2926) by @atomiks
- Fix `<Autocomplete.Value>` component return type for React 17 (#3050) by @atomiks
- Support `autoHighlight: "always"`, and add `keepHighlight`, `highlightItemOnHover` props (#2976) by @atomiks
- Keep focus on input when pressing list element (#3092) by @atomiks
- Allow <kbd>Esc</kbd> to bubble if `<Autocomplete.Empty>` is not used (#2935) by @atomiks
- Add `dialog` role to popup when input is inside (#3213) by @atomiks
### Button
- New `<Button>` component (#2363) by @atomiks
### Checkbox
- **Breaking change:** Render root as `<span>` instead of `<button>`
(#3205) by @mj12albert
### Collapsible
- Fix `starting-style` state (#2985) by @atomiks
### Combobox
- Take into account `isItemEqualToValue` when selecting an option in multiple mode (#2893) by @epr3
- Move `CompositeList` to `List` component to make `Input` work with composites (#2883) by @chuganzy
- Fix `onValueChange` type inference when `value` is unspecified (#2897) by @atomiks
- Fix `required` form submission with multiple values (#2925) by @atomiks
- Fix <kbd>Home</kbd>/<kbd>End</kbd> Input scroll in Chrome/Safari (#2928) by @atomiks
- Prevent blocking filtering while composing text on Android (#2944) by @atomiks
- Add empty state to `List.State` (#2934) by @atomiks
- Fix `initialFocus` as function being called on close (#2949) by @atomiks
- Add `role="combobox"` to `<Combobox.Trigger>` if `<Combobox.Input>` is inside Popup (#2973) by @atomiks
- Fix `Field` control ref when input is inside popup (#2971) by @atomiks
- Fix stale `onItemHighlighted` data when filtering with `autoHighlight` (#2829) by @atomiks
- Add empty and side styling attributes on `<Combobox.Input>` (#2926) by @atomiks
- Fix `<Combobox.Value>` component return type for React 17 (#3050) by @atomiks
- Fix input value derivation on `value` and `items` prop updates (#3067) by @atomiks
- Support `autoHighlight: "always"`, and add `keepHighlight`, `highlightItemOnHover` props (#2976) by @atomiks
- Keep focus on input when pressing list element (#3092) by @atomiks
- Fix support of dialog + combobox pattern (#3049) by @atomiks
- Support drag-to-select (#3167) by @atomiks
- Allow <kbd>Esc</kbd> to bubble if `<Combobox.Empty>` is not used (#2935) by @atomiks
- Fix stuck filtering with differing stringifiers (#3201) by @atomiks
- Add `dialog` role to popup when input is inside (#3213) by @atomiks
### Context Menu
- Add `open` state to `<ContextMenu.Trigger>` (#3195) by @atomiks
- Fix ignored `anchor` prop on `<ContextMenu.Positioner>` (#3202) by @atomiks
### Dialog
- **Breaking change:** Replace `dismissible` with `disablePointerDismissal`.<br />
If you were using `dismissible={false}`, replace it with `disablePointerDismissal`.
(#3190) by @mnajdova
- Fix `initialFocus` as function being called on close (#2949) by @atomiks
- Support detached triggers (#2974) by @michaldudak
- Place `overflow: hidden` on `<body>` for overlay scrollbars by default. Avoids sticky elements shifting if `<body>` has an `overflow` style specified. (#3083) by @atomiks
- Add `<Dialog.Viewport>` part and scrollable demos on docs (#2808) by @atomiks
### Field
- **Breaking change:** Add `onSubmit` validation mode and make it the default over `onBlur`.<br />
Fields that use non-`required` attribute validation no longer validate the control on blur. Instead, validation first occurs `onSubmit`, and afterwards revalidation occurs `onChange`.
(#3013) by @mj12albert
- Add `dirty` and `touched` props (#2950) by @mj12albert
- New `<Field.Item>` part (#2810) by @mj12albert
- Fix `validationMode="onChange"` not clearing custom error state (#3048) by @mj12albert
- Fix external `onChange` validation mode errors (#3137) by @atomiks
### Form
- **Breaking change:** The `onClearErrors` prop has been removed.<br />
Errors from the `errors` prop are always cleared when the value changes.
(#3136) by @mj12albert
- Add `onSubmit` validation mode.<br />
Additionally, `validationMode` can be set on `<Form>`.
(#3013) by @mj12albert
- Add `onFormSubmit` callback (#3131) by @mj12albert
### Menu
- **Breaking change:** Support detached triggers.<br />
`openOnHover`, `delay`, and `closeDelay` props have been moved from `<Menu.Root>` to `<Menu.Trigger>`.<br />
Additionally, menus now must have at least one `<Menu.Trigger>` element.
(#3170) by @michaldudak
- Ignore disabled item on initial focusing (#2604) by @mnajdova
- Fix stealing focus from dialogs on close (#2920) by @atomiks
- Place `overflow: hidden` on `<body>` for overlay scrollbars by default. Avoids sticky elements shifting if `<body>` has an `overflow` style specified. (#3083) by @atomiks
### Navigation Menu
- Fix nested popup dismiss actions (#2978) by @atomiks
- Fix error on React 17 (#3204) by @atomiks
### Number Field
- Granular change reasons (#3132) by @atomiks
### Popover
- **Breaking change:** Support detached triggers and multiple triggers per popover.<br />
`openOnHover`, `delay`, and `closeDelay` props have been moved from `<Popover.Root>` to `<Popover.Trigger>`.
(#2336) by @michaldudak
- Fix `initialFocus` as function being called on close (#2949) by @atomiks
- Fix swiping or scrolling on nested popup dismissing popover on touch (#3011) by @atomiks
- Place `overflow: hidden` on `<body>` for overlay scrollbars by default. Avoids sticky elements shifting if `<body>` has an `overflow` style specified. (#3083) by @atomiks
### Preview Card
- **Breaking change:** Move delay props to trigger.<br />
If you were using `delay` or `closeDelay` props, be sure to move them to from `<PreviewCard.Root>` to the `<PreviewCard.Trigger>` component.
(#3182) by @atomiks
### Radio Group
- **Breaking change:** Render root as `<span>` instead of `<button>`
(#3205) by @mj12albert
### Scroll Area
- **Breaking change:** Improve CSS vars performance.<br />
The CSS variables are now on the `<ScrollArea.Viewport>` part, not `<ScrollArea.Root>`, and inheritance is disabled for all child elements (or pseudo-elements). Children must manually opt in using `--scroll-area-[variable-name]: inherit`.
(#3156) by @atomiks
### Select
- **Breaking change:** Make the trigger native button by default.<br />
The trigger now renders a `<button>` element, be sure to adjust your code if necessary.
(#3177) by @mnajdova
- Add `open` state type on `Select.Icon` interface (#2919) by @komkanit
- Fix `onValueChange` type inference when `value` is unspecified (#2897) by @atomiks
- Fix `required` form submission with multiple values (#2925) by @atomiks
- Avoid re-rendering on popup height expansion (#2972) by @atomiks
- Place `overflow: hidden` on `<body>` for overlay scrollbars by default. Avoids sticky elements shifting if `<body>` has an `overflow` style specified. (#3083) by @atomiks
- Add `data-placeholder` attribute (#2737) by @seongminn
### Slider
- **Breaking change:** Add `thumbCollisionBehavior` prop.<br />
In range sliders, moving a thumb with a pointer will now push other thumbs it collides with to avoid blocking drag movements by default (the default value is `push`).<br />
The value `swap` was also added, which allows thumbs to be dragged past each other when they collide.<br />
Lastly, the value `none` is the same as the previous behavior, where thumbs can't be dragged past one another.<br />
Keyboard interactions always use `none` behavior.
(#2856) by @atomiks
- Granular change reasons (#3132) by @atomiks
### Switch
- **Breaking change:** Render root as `<span>` instead of `<button>`
(#3205) by