@base-ui-components/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.
962 lines (666 loc) • 37 kB
Markdown
# Versions
## v1.0.0-beta.2
_Jul 30, 2025_
### General changes
- Fix navigator checks and ensure safe platform retrieval (#2273) by @mo36924
- Prevent `Space` key default on keydown (#2295) by @atomiks
- Check for `performance` existence on server (#2316) by @atomiks
### Accordion
- Destructure `render` prop (#2280) by @atomiks
- Fix keyboard interactions with elements in the panel (#2321) by @mj12albert
- Fix open transitions in Safari/Firefox (#2327) by @atomiks
### Alert Dialog
- Support `ShadowRoot` containers (#2236) by @atomiks
- Add `forceRender` prop to `Backdrop` part (#2037) by @atomiks
- Improve outside press behavior with touch input (#2334) by @atomiks
### Checkbox
- Fix focusing form controls with `inputRef` (#2252) by @mj12albert
### Collapsible
- Destructure render prop (#2323) by @atomiks
- Fix open transitions in Safari/Firefox (#2327) by @atomiks
### Dialog
- Support `ShadowRoot` containers (#2236) by @atomiks
- Add `forceRender` prop to `Backdrop` part (#2037) by @atomiks
- Improve outside press behavior with touch input (#2334) by @atomiks
- Use `click` event for outside press dismissal (#2275) by @atomiks
### Field
- Deregister fields from `Form` when unmounting (#2231) by @mj12albert
### Form
- Deregister fields from `Form` when unmounting (#2231) by @mj12albert
### Menu
- Support `ShadowRoot` containers (#2236) by @atomiks
- Avoid double `useRenderElement` passes (#2256) by @atomiks
- Improve outside press behavior with touch input (#2334) by @atomiks
- Close submenus when focus is lost by shift-tabbing (#2290) by @michaldudak
### Menubar
- Fix triggers role (#2317) by @atomiks
### Meter
- Fix ARIA attributes and update docs (#2267) by @mj12albert
### Navigation Menu
- **Breaking change:** Support inlined nesting.
Ensure the popup's `width` is set to `var(--popup-width)` unconditionally (without the media query) on the `.Popup` class.
(#2269) by @atomiks
- Avoid double `useRenderElement` passes (#2256) by @atomiks
- Add `useButton` integration to `Trigger` (#2296) by @atomiks
- Fix popup size transitions on iOS (#2387) by @atomiks
### Number Field
- Remove `invalid` prop (#2315) by @atomiks
- Fix button disabled state only including root disabled state (#2268) by @mj12albert
### Popover
- Support `ShadowRoot` containers (#2236) by @atomiks
- Remove ancestor nodes from inside elements for outside press detection (#2339) by @atomiks
- Improve outside press behavior with touch input (#2334) by @atomiks
- Use `click` event for outside press dismissal (#2275) by @atomiks
### Preview Card
- Support `ShadowRoot` containers (#2236) by @atomiks
### Progress
- Fix ARIA attributes and update docs (#2267) by @mj12albert
### Radio Group
- Add aria-required attribute (#2227) by @cgatian
- Extend state with `FieldRoot.State` (#2251) by @mj12albert
- Fix focusing form controls with `inputRef` (#2252) by @mj12albert
- Avoid double `useRenderElement` passes (#2256) by @atomiks
### Scroll Area
- Disable `user-select` on scrollbar and non-main button interactions (#2338) by @atomiks
### Select
- Support `ShadowRoot` containers (#2236) by @atomiks
- Add `value` and `readOnly` to `Select.Trigger` state (#2237) by @atomiks
- Add `multiple` prop (#2173) by @atomiks
- Allow typeahead while open for `multiple` mode (#2274) by @atomiks
- Ensure positionerElement is available in document mouseup (#2276) by @atomiks
- Fix `alignItemWithTrigger` fallback scroll jump (#2241) by @atomiks
- Support conditional `multiple` prop in types (#2369) by @atomiks
- Fix multiple ARIA behavior on touch (#2333) by @atomiks
- Improve outside press behavior with touch input (#2334) by @atomiks
### Slider
- Fix focusing form controls with `inputRef` (#2252) by @mj12albert
### Toast
- Fix `promise` method timeout option handling (#2294) by @atomiks
- Make `Toast.Viewport` an announce container (#2246) by @atomiks
### Toggle
- Avoid double `useRenderElement` passes (#2256) by @atomiks
### Toggle Group
- Avoid double `useRenderElement` passes (#2256) by @atomiks
### Toolbar
- Avoid double `useRenderElement` passes (#2256) by @atomiks
### Tooltip
- Support `ShadowRoot` containers (#2236) by @atomiks
- Memoize leftover object in tooltip (#2250) by @sai6855
- Fix error when combining `defaultOpen` and `disabled` (#2374) by @atomiks
All contributors of this release in alphabetical order: @aelfannir, @atomiks, @brijeshb42, @cgatian, @Janpot, @michaldudak, @mj12albert, @mo36924, @romgrk, @sai6855
## v1.0.0-beta.1
_Jul 1, 2025_
### General changes
- Make error messages consistent (#2049) by @michaldudak
- Do not overwrite event handler when `undefined` is passed explicitly (#2151) by @michaldudak
### Accordion
- Allow content to resize naturally (#2043) by @atomiks
- Fix transition status mapping (#2169) by @atomiks
- Fix `aria-controls` reference (#2170) by @atomiks
- Fix test warning about mixed animation types (#2180) by @atomiks
### Checkbox
- **Breaking change:** Support implicit `Field.Label`.
If `Field.Label` encloses Switch/Checkbox/Radio, the `htmlFor`/`id` attributes are no longer explicitly set to associate them.
(#2036) by @mj12albert
- Refactor to `useRenderElement` (#2053) by @mj12albert
- Always set `id` on the `<input>` element (#2115) by @mj12albert
### Checkbox Group
- Fix `onCheckedChange` not running when parent checkbox is present (#2155) by @mj12albert
### Collapsible
- Allow content to resize naturally (#2043) by @atomiks
- Fix `aria-controls` reference (#2170) by @atomiks
- Fix test warning about mixed animation types (#2180) by @atomiks
### Context Menu
- **Breaking change:** Add `SubmenuRoot` part.
Nested menus should be defined with `Menu.SubmenuRoot` instead of `Menu.Root` to to avoid ambiguity.
(#2042) by @atomiks
- Fix CheckboxItemIndicator export (#2009) by @aarongarciah
### Dialog
- Fix popup prop merging (#2119) by @atomiks
### Field
- **Breaking change:** Support implicit `Field.Label`.
If `Field.Label` encloses Switch/Checkbox/Radio, the `htmlFor`/`id` attributes are no longer explicitly set to associate them.
(#2036) by @mj12albert
- Enable custom validation based on other form values (#1941) by @mj12albert
- Fix `onValueChange` `value` type (#2112) by @atomiks
- Fix `Field.Label` focusing trigger (#2118) by @atomiks
- Fix slider field label (#2154) by @mj12albert
### Fieldset
- Refactor to `useRenderElement` (#2053) by @mj12albert
### Form
- Enable custom validation based on other form values (#1941) by @mj12albert
### Input
- Fix `onValueChange` `value` type (#2112) by @atomiks
### Menu
- **Breaking change:** Add `SubmenuRoot` part.
Nested menus should be defined with `Menu.SubmenuRoot` instead of `Menu.Root` to to avoid ambiguity.
(#2042) by @atomiks
- Unset `role` from Trigger (#2047) by @atomiks
- Emit `close` event on `cancel-open` (#2067) by @atomiks
- Fix close toggle when rendering non-native button (#2071) by @atomiks
- Add `highlighted` to item `State` (#2079) by @atomiks
- Remove highlighted effect (#2162) by @atomiks
- Cut out internal backdrop to allow interacting with triggers (#2141) by @michaldudak
- Fix active index sync on hover (#2163) by @atomiks
- Fix focus returning to root when submenus have exit transitions (#2163) by @atomiks
### Menubar
- Fix `closeOnClick: false` not working in nested menus (#2094) by @michaldudak
### Navigation Menu
- Handle layout resize while open (#2070) by @atomiks
- Fix positioner height when opening menu using the keyboard arrows (#2060) by @juliomerisio
### Number Field
- Ensure `onValueChange` is called with already-formatted parsed value (#1905) by @atomiks
- Fix revalidation on change (#2174) by @atomiks
### Popover
- Fix close toggle when rendering non-native button (#2071) by @atomiks
- Cut out internal backdrop to allow interacting with triggers (#2141) by @michaldudak
### Radio Group
- **Breaking change:** Support implicit `Field.Label`.
If `Field.Label` encloses Radio, the `htmlFor`/`id` attributes are no longer explicitly set to associate them.
(#2036) by @mj12albert
- Refactor to `useRenderElement` (#2053) by @mj12albert
### Scroll Area
- Ignore `data-scrolling` during programmatic scroll (#1908) by @atomiks
### Select
- **Breaking change:** Print raw value in `Select.Value`.
`<Select.Value>` now prints the raw value by default unless an `items` prop is specified on `Select.Root`.
See https://base-ui.com/react/components/select#formatting-the-value for more information.
(#2087) by @atomiks
- Performance: avoid re-renders (#1961) by @romgrk
- Fix close toggle when rendering non-native button (#2071) by @atomiks
- Fix `Field.Label` focusing trigger (#2118) by @atomiks
- Fix programmatic value changes and autofill handling (#2084) by @atomiks
- Add `highlighted` to item `State` (#2079) by @atomiks
- Cut out internal backdrop to allow interacting with triggers (#2141) by @michaldudak
- Pass `value` as state (#2153) by @atomiks
- Extend `FieldRoot.State` type (#2192) by @atomiks
### Slider
- Use pointer capture when dragging (#2059) by @mj12albert
- Fix slider field label (#2154) by @mj12albert
### Switch
- **Breaking change:** Support implicit `Field.Label`.
If `Field.Label` encloses Switch, the `htmlFor`/`id` attributes are no longer explicitly set to associate them.
(#2036) by @mj12albert
### Tabs
- Fix indicator positioning when TabsList overflows (#2093) by @mj12albert
- Fix focus going out of sync when selected value is changed externally (#2107) by @atomiks
- Remove highlighted state (#2164) by @atomiks
### Toolbar
- Set `disabled` attr on toolbar button when `focusableWhenDisabled={false}` (#2176) by @mj12albert
### useRender
- Make useRender RSC-friendly (#2134) by @michaldudak
All contributors of this release in alphabetical order: @aarongarciah, @atomiks, @bernardobelchior, @brijeshb42, @Janpot, @juliomerisio, @lesha1201, @michaldudak, @mj12albert, @oliviertassinari, @romgrk
## v1.0.0-beta.0
_May 29, 2025_
### General changes
- Remove proptypes (#1760) by @michaldudak
- Unify component export patterns (#1478) by @michaldudak
- Default `tabIndex` to `0` on `<button>` parts (#1939) by @atomiks
### Accordion
- Stop event propagation to allow composite components to be used within popups (#1871) by @atomiks
### Alert Dialog
- **Breaking change:** Refine `OpenChangeReason`. `hover` is now `trigger-hover`; `click` is now `trigger-press`; `focus` is now `trigger-focus`.
(#1782) by @atomiks
- Use basic scroll lock on iOS
(#1890) by @atomiks
### Checkbox
- Set `aria-required`, use `useButton` (#1777) by @mj12albert
### Checkbox Group
- **Breaking change:** Enable submitting checkbox group value as one field.
For parent checkboxes, use `value` instead of `name` on each `Checkbox.Root` part to link as the values.
(#1948) by @mj12albert
- Fix `validate` fn incorrectly running twice (#1959) by @mj12albert
### Context Menu
- New `ContextMenu` component (#1665) by @atomiks
### Dialog
- **Breaking change:** Refine `OpenChangeReason`. `hover` is now `trigger-hover`; `click` is now `trigger-press`; `focus` is now `trigger-focus`.
(#1782) by @atomiks
- Use basic scroll lock on iOS
(#1890) by @atomiks
### Field
- **Breaking change:** Consolidate `Field.Error` `forceShow` into `match` prop.
Use `match={true}` (or implicit boolean) instead of `forceShow`.
(#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 now `trigger-hover`; `click` is now `trigger-press`; `focus` is now `trigger-focus`.
(#1782) by @atomiks
- Fix function dependency handling (#1787) by @atomiks
- Add missing `'use client'` to `RadioGroup` 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` and `closeDelay` props (#1918) by @atomiks
- Use basic scroll lock on iOS
(#1890) by @atomiks
### Menubar
- New `Menubar` component (#1684) by @michaldudak
### Navigation Menu
- New `NavigationMenu` component (#1741) by @atomiks
### 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 now `trigger-hover`; `click` is now `trigger-press`; `focus` is now `trigger-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 now `trigger-hover`; `click` is now `trigger-press`; `focus` is now `trigger-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 the `With` instead of `To`).
(#1713) by @atomiks
- **Breaking change:** Defer mounting until typeahead is needed.
The `placeholder` 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 now `trigger-hover`; `click` is now `trigger-press`; `focus` is now `trigger-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 on `ItemIndicator` (#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
- Stop event propagation to allow composite components to be used within popups (#1871) by @atomiks
### Toolbar
- Stop event propagation to allow composite components to be used within popups (#1871) by @atomiks
### Tooltip
- **Breaking change:** Refine `OpenChangeReason`. `hover` is now `trigger-hover`; `click` is now `trigger-press`; `focus` is now `trigger-focus`.
(#1782) by @atomiks
- Fix function dependency handling (#1787) by @atomiks
- Avoid prop getters when merging props (#1852) by @atomiks
- Remove `trackCursorAxis` type from `Positioner` (#1895) by @atomiks
- Apply `pointer-events: none` to `Positioner` when not hoverable (#1917) by @atomiks
- Add `collisionAvoidance` prop (#1849) by @atomiks
### useRender
- **Breaking change:** Performance/refactor: `useRender`. An object with a `renderElement` property is no longer returned; instead, the hook returns the element directly (`const element = useRender(...)`). The `refs` option was also renamed to `ref`.
(#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
## v1.0.0-alpha.8
_Apr 17, 2025_
### Accordion
- Recalculate panel dimensions on layout resize (#1704) @atomiks
- Rework animations and transitions (#1601) @mj12albert
### AlertDialog
- **Breaking change:** Rename `data-has-nested-dialogs` to `data-nested-dialog-open` (#1686) @mj12albert
- Fix `onOpenChange` types for `event`/`reason` passing (#1721) @atomiks
- Use consistent `inert` attr and map `[data-popup-open]` back to `open` (#1650) @atomiks
- Fix text selection & right-clicks (#1702) @mj12albert
### CheckboxGroup
- Parent checkbox/nested demos (#1610) @atomiks
### Collapsible
- Fix ForwardedRef type of CollapsiblePanel (#1595) @megos
- Recalculate panel dimensions on layout resize (#1704) @atomiks
- Rework animations and transitions (#1601) @mj12albert
### Dialog
- **Breaking change:** Rename `data-has-nested-dialogs` to `data-nested-dialog-open` (#1686) @mj12albert
- **Breaking change:** Add new `trap-focus` value to `modal` prop.
Dialogs with `modal=false` no longer trap focus.
(#1571) @atomiks
- Fix `onOpenChange` types for `event`/`reason` passing (#1721) @atomiks
- Use consistent `inert` attr and map `[data-popup-open]` back to `open` (#1650) @atomiks
- Fix text selection & right-clicks (#1702) @mj12albert
- Allow document to slide input into view on iOS when keyboard opens (#1735) @atomiks
### Field
- Fix forwarding of `name` and `disabled` props (#1616) @atomiks
### Menu
- Add missing item data attributes docs (#1691) @atomiks
- Fix `inert` prop compatibility in React <19 (#1618) @sebinsua
- Fix stuck highlight on submenu trigger when submenu opens with keyboard (#1698) @atomiks
- Fix `onOpenChange` types for `event`/`reason` passing (#1721) @atomiks
- Use consistent `inert` attr and map `[data-popup-open]` back to `open` (#1650) @atomiks
- Fix text selection & right-clicks (#1702) @mj12albert
### Meter
- New Meter component (#1435) @mj12albert
### NumberField
- Correct percentage parse handling (#1676) @atomiks
- New `snapOnStep` prop (#1560) @atomiks
### Popover
- **Breaking change:** Add new `trap-focus` value to `modal` prop (#1571) @atomiks
- Fix `inert` prop compatibility in React <19 (#1618) @sebinsua
- Fix `onOpenChange` types for `event`/`reason` passing (#1721) @atomiks
- Use consistent `inert` attr and map `[data-popup-open]` back to `open` (#1650) @atomiks
- Fix text selection & right-clicks (#1702) @mj12albert
### Progress
- **Breaking change:** Add `Progress.Label` and `locale` prop.
The `getAriaLabel` prop was removed as `Progress.Label` should be used to provide an accessible name.
(#1666) @mj12albert
### Radio
- Fix value forwarding and null handling (#1697) @atomiks
### ScrollArea
- **Breaking change:** Add `Content` part.
It is now required to include the `ScrollArea.Content` within `ScrollArea.Viewport` part when the content is horizontally scrollable.
(#1607) @atomiks
- Handle visibility change and nesting (#1598) @atomiks
- Correct thumb sizing with scrollbar margins (#1606) @atomiks
### Select
- **Breaking change:** Improve item highlight performance.
The highlighted state is now removed. It's not possible to customize the `data-highlighted` attribute anymore.
(#1570) @atomiks
- Avoid double commit on value change (#1597) @atomiks
- Reset `selectedIndex` when set to `null` (#1596) @atomiks
- Add missing item data attributes docs (#1691) @atomiks
- Fix `onOpenChange` types for `event`/`reason` passing (#1721) @atomiks
- Use consistent `inert` attr and map `[data-popup-open]` back to `open` (#1650) @atomiks
- Fix text selection & right-clicks (#1702) @mj12albert
### Slider
- Correct thumb positioning when control has padding (#1661) @mj12albert
- Prevent range slider thumbs from being dragged past each other (#1612) @mj12albert
- Fix incorrect CSS position on vertical slider indicator (#1599) @ZeeshanTamboli
- Fix overlapping slider thumbs stuck at min or max (#1732) @mj12albert
### Toast
- New Toast component (#1467) @atomiks
### Tooltip
- Avoid re-rendering unrelated consumers (#1677) @atomiks
- Add `disabled` prop (#1682) @atomiks
- Fix `onOpenChange` types for `event`/`reason` passing (#1721) @atomiks
- Use consistent `inert` attr and map `[data-popup-open]` back to `open` (#1650) @atomiks
- Fix text selection & right-clicks (#1702) @mj12albert
All contributors of this release in alphabetical order: @atomiks, @megos, @michaldudak, @mj12albert, @oliviertassinari, @sebinsua, @ZeeshanTamboli
## v1.0.0-alpha.7
_Mar 20, 2025_
### Accordion
- Fix `aria-labelledby` on accordion panel (#1544) @mj12albert
### AlertDialog
- Fix selection on outside press on Firefox with modal prop (#1573) @atomiks
- Fix non-interactive button disabled state (#1473) @mj12albert
- `actionsRef` prop (#1236) @atomiks
### Avatar
- Support cross origin in useImageLoadingStatus (#1433) @ISnackable
- Add missing Avatar export (#1428) @Gomah
### Collapsible
- Update props destructuring to fix Trigger disabled state (#1469) @huijiewei
### Dialog
- Fix selection on outside press on Firefox with modal prop (#1573) @atomiks
- Fix non-interactive button disabled state (#1473) @mj12albert
- `actionsRef` prop (#1236) @atomiks
### Field
- Fix `FieldControl` [data-filled] not reacting to external value changes (#1565) @atomiks
### Menu
- Ensure submenu triggers respond to clicks when `openOnHover=false` (#1583) @atomiks
- Ensure `stickIfOpen` is reset to `true` correctly (#1548) @atomiks
- Fix selection on outside press on Firefox with modal prop (#1573) @atomiks
- Reset `hoverEnabled` state on close (#1461) @atomiks
- Fix prop merging issues (#1445) @michaldudak
- Set `pointer-events: none` style on backdrops when hoverable (#1351) @atomiks
- `actionsRef` prop (#1236) @atomiks
### NumberField
- Fix ScrubArea on Safari (#1584) @atomiks
- Fix `large/smallStep` getting stuck (#1578) @atomiks
- Fix parse of numbers with spaces as thousands separators (#1577) @michaldudak
- Prevent virtual cursor overlapping native one (#1491) @atomiks
- Fix disabled state on increment/decrement buttons (#1462) @mj12albert
- Correct virtual cursor rendering (#1484) @atomiks
- Add `locale` prop (#1488) @atomiks
- Improve virtual cursor perf (#1485) @atomiks
### Popover
- Ensure `stickIfOpen` is reset to `true` correctly (#1548) @atomiks
- Fix selection on outside press on Firefox with modal prop (#1573) @atomiks
- Set `pointer-events: none` style on backdrops when hoverable (#1351) @atomiks
- Fix non-interactive button disabled state (#1473) @mj12albert
- `modal` prop (#1459) @atomiks
- `actionsRef` prop (#1236) @atomiks
### PreviewCard
- Set `pointer-events: none` style on backdrops when hoverable (#1351) @atomiks
- `actionsRef` prop (#1236) @atomiks
### RadioGroup
- Fix `Form`/`Field` validation integration (#1448) @atomiks
- Handle modifier keys (#1529) @mj12albert
### Select
- Fix selection on outside press on Firefox with modal prop (#1573) @atomiks
- Improve `ScrollArrow` behavior (#1564) @atomiks
- Ensure switching controlled value to `null` updates `Select.Value` label (#1561) @atomiks
- Pass `value` as second argument to function children `Select.Value` (#1562) @atomiks
- Fix focus jump while hovering while navigating with keyboard (#1563) @atomiks
- Fix disabled state changing (#1526) @mj12albert
- `actionsRef` prop (#1236) @atomiks
### Slider
- Fix thumb positioning when controlled value violates min/max/step (#1541) @mj12albert
- Warn when `min` is not less than `max` (#1475) @mj12albert
- Narrow the type of `value` in callbacks (#1241) @seloner
### Tabs
- Fix keyboard navigation involving disabled Tabs (#1449) @mj12albert
- Handle modifier keys (#1529) @mj12albert
### Toolbar
- Add Toolbar components (#1349) @mj12albert
### Tooltip
- `actionsRef` prop (#1236) @atomiks
- Fix `Provider` `delay=0` not being respected (#1416) @atomiks
### useRender
- Add public hook (#1418) @mnajdova
- Refine docs and APIs (#1551) @atomiks
### Docs
- Fix CSS issues (#1585) @atomiks
- Clean up old experiments (#1572) @mj12albert
- Fix SEO site name description (#1520) @oliviertassinari
- Fix `actionsRef` propTypes (#1460) @atomiks
- Tooltip guidelines (#1356) @atomiks
- Update the release instructions (#1444) @michaldudak
- Mention Progress.Value in API reference (#1429) @aarongarciah
- Update release instructions (#1417) @michaldudak
### Core
- [code-infra] Polish VS Code DX (#1238) @oliviertassinari
- [code-infra] Fix build:types not copying on some setups (#1482) @Janpot
- [Composite] Derive sorted map state (#1489) @atomiks
- Update release docs and scripts (#1245) @oliviertassinari
- Export namespaces consistently (#1472) @michaldudak
- Make `mergeReactProps` work with non-native event handlers (#1440) @michaldudak
- Remove babel-plugin-istanbul (#1409) @michaldudak
- Fix stylelint violations (#1422) @michaldudak
- Misc cleaning (#1579) @atomiks
- [mergeProps] Convert as a top level import and export publicly (#1535) @mnajdova
- [test] Fix wrong env skip (#1490) @atomiks
- [test] Fix PreviewCard test flake (#1487) @atomiks
- [test] Extract common popup tests (#1358) @michaldudak
- [test] Verify root exports (#1431) @michaldudak
- [test] Fix flaky browser tests (#1371) @atomiks
- [test] Update vitest to ^3 (#1453) @michaldudak
- [test] Skip flaky FieldRoot tests in real browsers (#1446) @michaldudak
- [useMergedRefs] Support ref cleanup functions (#1553) @atomiks
- [utils] Change order of args in `mergeReactProps` (#1533) @mnajdova
## v1.0.0-alpha.6
_Feb 6, 2025_
### AlertDialog
- `onOpenChangeComplete` prop (#1305) @atomiks
- Fix jump with `scroll-behavior` style (#1343) @atomiks
### Avatar
- Add Avatar component (#1210) @acomanescu
### Checkbox
- Avoid applying `hidden` attr when `keepMounted=true` for indicators (#1329) @onehanddev
### Dialog
- Remove `modal={open}` state (#1352) @atomiks
- Support multiple non-nested modal backdrops (#1327) @atomiks
- Fix missing `id`s on Title and Description (#1326) @mj12albert
- `onOpenChangeComplete` prop (#1305) @atomiks
- Fix jump with `scroll-behavior` style (#1343) @atomiks
### Field
- Respect `validationMode` (#1053) @atomiks
- Add `filled` and `focused` style hooks (#1341) @atomiks
### Form
- Fix focusing of invalid field controls on errors prop change (#1364) @atomiks
### Menu
- Avoid applying `hidden` attr when `keepMounted=true` for indicators (#1329) @onehanddev
- Support submenus with `openOnHover` prop (#1338) @atomiks
- Fix iPad detection when applying scroll lock (#1342) @mj12albert
- `onOpenChangeComplete` prop (#1305) @atomiks
- Fix jump with `scroll-behavior` style (#1343) @atomiks
- Add `OffsetFunction` for `sideOffset` and `alignOffset` (#1223) @atomiks
- Ensure `keepMounted` is a private param on `Positioner` (#1410) @atomiks
### Popover
- `onOpenChangeComplete` prop (#1305) @atomiks
- Add `OffsetFunction` for `sideOffset` and `alignOffset` (#1223) @atomiks
- Ensure `keepMounted` is a private param on `Positioner` (#1410) @atomiks
### PreviewCard
- `onOpenChangeComplete` prop (#1305) @atomiks
- Add `OffsetFunction` for `sideOffset` and `alignOffset` (#1223) @atomiks
- Ensure `keepMounted` is a private param on `Positioner` (#1410) @atomiks
### Progress
- Add `format` prop and `Value` component (#1355) @mj12albert
### Radio
- Avoid applying `hidden` attr when `keepMounted=true` for indicators (#1329) @onehanddev
### Select
- `onOpenChangeComplete` prop (#1305) @atomiks
- Fix jump with `scroll-behavior` style (#1343) @atomiks
- Add `OffsetFunction` for `sideOffset` and `alignOffset` (#1223) @atomiks
- Ensure `keepMounted` is a private param on `Positioner` (#1410) @atomiks
### Slider
- Fix thumb positioning (#1411) @mj12albert
### Tabs
- Fix being able to activate a disabled tab (#1359) @michaldudak
- Fix tabs activating incorrectly on non-primary button clicks (#1318) @mj12albert
### Tooltip
- `onOpenChangeComplete` prop (#1305) @atomiks
- Add `OffsetFunction` for `sideOffset` and `alignOffset` (#1223) @atomiks
- Ensure `keepMounted` is a private param on `Positioner` (#1410) @atomiks
## v1.0.0-alpha.5
_Jan 10, 2025_
### AlertDialog
- **Breaking change:** Require `Portal` part.
The AlertDialog must explicitly include the Portal part wrapping the Popup.
The `keepMounted` prop was removed from the Popup.
It's only present on the Portal part.
[#1222](https://github.com/mui/base-ui/pull/1222) @atomiks
- Don't call `onNestedDialogOpen` when unmounting a closed nested dialog [#1280](https://github.com/mui/base-ui/pull/1280) @mj12albert
- Fix the nesting of different dialogs [#1167](https://github.com/mui/base-ui/pull/1167) @mnajdova
- Remove `useFloating` call from the Popup [#1300](https://github.com/mui/base-ui/pull/1300) @michaldudak
- Set `pointer-events` on `InternalBackdrop` based on `open` state [#1221](https://github.com/mui/base-ui/pull/1221) @atomiks
- Use internal backdrop for pointer modality [#1161](https://github.com/mui/base-ui/pull/1161) @atomiks
### Dialog
- **Breaking change:** Require `Portal` part.
The Dialog must explicitly include the Portal part wrapping the Popup.
The `keepMounted` prop was removed from the Popup.
It's only present on the Portal part.
[#1222](https://github.com/mui/base-ui/pull/1222) @atomiks
- Don't call `onNestedDialogOpen` when unmounting a closed nested dialog [#1280](https://github.com/mui/base-ui/pull/1280) @mj12albert
- Fix the nesting of different dialogs [#1167](https://github.com/mui/base-ui/pull/1167) @mnajdova
- Remove `useFloating` call from the Popup [#1300](https://github.com/mui/base-ui/pull/1300) @michaldudak
- Set `pointer-events` on `InternalBackdrop` based on `open` state [#1221](https://github.com/mui/base-ui/pull/1221) @atomiks
- Use internal backdrop for pointer modality [#1161](https://github.com/mui/base-ui/pull/1161) @atomiks
### Menu
- **Breaking change:** Require `Portal` part.
The Menu must explicitly include the Portal part wrapping the Positioner.
The `keepMounted` prop was removed from the Positioner.
It's only present on the Portal part.
[#1222](https://github.com/mui/base-ui/pull/1222) @atomiks
- Apply `aria-hidden` to `Arrow` parts [#1196](https://github.com/mui/base-ui/pull/1196) @atomiks
- Fix `focusableWhenDisabled` components [#1313](https://github.com/mui/base-ui/pull/1313) @mj12albert
- Fix `openOnHover` issues [#1191](https://github.com/mui/base-ui/pull/1191) @atomiks
- Fix closing the menu when clicking on checkboxitem/radioitem [#1301](https://github.com/mui/base-ui/pull/1301) @michaldudak
- Fix Enter key preventDefault when rendering links [#1251](https://github.com/mui/base-ui/pull/1251) @mj12albert
- Handle pseudo-element bounds in mouseup detection [#1250](https://github.com/mui/base-ui/pull/1250) @atomiks
- Set `pointer-events` on `InternalBackdrop` based on `open` state [#1221](https://github.com/mui/base-ui/pull/1221) @atomiks
- Use internal backdrop for pointer modality [#1161](https://github.com/mui/base-ui/pull/1161) @atomiks
### NumberField
- Correctly handle quick touches [#1294](https://github.com/mui/base-ui/pull/1294) @atomiks
### Popover
- **Breaking change:** Require `Portal` part.
The Popover must explicitly include the Portal part wrapping the Positioner.
The `keepMounted` prop was removed from the Positioner.
It's only present on the Portal part.
[#1222](https://github.com/mui/base-ui/pull/1222) @atomiks
- Apply `aria-hidden` to `Arrow` parts [#1196](https://github.com/mui/base-ui/pull/1196) @atomiks
- Fix PopoverTrigger and TooltipTrigger prop types [#1209](https://github.com/mui/base-ui/pull/1209) @mnajdova
### PreviewCard
- **Breaking change:** Require `Portal` part.
The PreviewCard must explicitly include the Portal part wrapping the Positioner.
The `keepMounted` prop was removed from the Positioner.
It's only present on the Portal part.
[#1222](https://github.com/mui/base-ui/pull/1222) @atomiks
- Apply `aria-hidden` to `Arrow` parts [#1196](https://github.com/mui/base-ui/pull/1196) @atomiks
- Use `FloatingPortalLite` [#1278](https://github.com/mui/base-ui/pull/1278) @atomiks
### Progress
- Set zero width when value is zero [#1204](https://github.com/mui/base-ui/pull/1204) @mj12albert
### ScrollArea
- Differentiate `x`/`y` orientation `data-scrolling` [#1188](https://github.com/mui/base-ui/pull/1188) @atomiks
- Read `DirectionProvider` and use logical positioning CSS props [#1194](https://github.com/mui/base-ui/pull/1194) @mj12albert
### Select
- **Breaking change:** Require `Portal` part.
The Select must explicitly include the Portal part wrapping the Positioner.
The `keepMounted` prop was removed from the Positioner.
It's only present on the Portal part.
[#1222](https://github.com/mui/base-ui/pull/1222) @atomiks
- Allow `id` to be passed to trigger [#1174](https://github.com/mui/base-ui/pull/1174) @atomiks
- Fallback to standard positioning when pinch-zoomed in Safari [#1139](https://github.com/mui/base-ui/pull/1139) @atomiks
- Fix `focusableWhenDisabled` components [#1313](https://github.com/mui/base-ui/pull/1313) @mj12albert
- Fix highlight flash on Safari [#1233](https://github.com/mui/base-ui/pull/1233) @atomiks
- Handle pseudo-element bounds in mouseup detection [#1250](https://github.com/mui/base-ui/pull/1250) @atomiks
- Use internal backdrop for pointer modality [#1161](https://github.com/mui/base-ui/pull/1161) @atomiks
### Separator
- Support vertical orientation [#1304](https://github.com/mui/base-ui/pull/1304) @mj12albert
### Slider
- Ensure `onValueCommitted` is called with the same value as latest `onValueChange` [#1296](https://github.com/mui/base-ui/pull/1296) @mj12albert
- Replace internal map with `Composite` metadata [#1082](https://github.com/mui/base-ui/pull/1082) @mj12albert
- Set `position: relative` on range slider indicator [#1175](https://github.com/mui/base-ui/pull/1175) @mj12albert
- Use un-rounded values to position thumbs [#1219](https://github.com/mui/base-ui/pull/1219) @mj12albert
### Tabs
- Expose width/height state in tabs indicator [#1288](https://github.com/mui/base-ui/pull/1288) @aarongarciah
### Tooltip
- **Breaking change:** Require `Portal` part.
The Tooltip must explicitly include the Portal part wrapping the Positioner.
The `keepMounted` prop was removed from the Positioner.
It's only present on the Portal part.
[#1222](https://github.com/mui/base-ui/pull/1222) @atomiks
- Apply `aria-hidden` to `Arrow` parts [#1196](https://github.com/mui/base-ui/pull/1196) @atomiks
- Fix PopoverTrigger and TooltipTrigger prop types [#1209](https://github.com/mui/base-ui/pull/1209) @mnajdova
- Use `FloatingPortalLite` [#1278](https://github.com/mui/base-ui/pull/1278) @atomiks
## v1.0.0-alpha.4
_Dec 17, 2024_
Public alpha launch 🐣 Merry Xmas! 🎁