Releases

Changelogs for each Base UI release.

v1.0.0-beta.0

May 29, 2025

General changes

  • Remove proptypes (#1760)
  • Unify component export patterns (#1478)
  • Default tabIndex to 0 on <button> parts (#1939)

Accordion

  • Stop event propagation to allow composite components to be used within popups (#1871)

Alert Dialog

  • Breaking change: Refine OpenChangeReason. hover is now trigger-hover; click is now trigger-press; focus is now trigger-focus. (#1782)
  • Use basic scroll lock on iOS (#1890)

Checkbox

  • Set aria-required, use useButton (#1777)

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)
  • Fix validate fn incorrectly running twice (#1959)

Context Menu

  • New ContextMenu component (#1665)

Dialog

  • Breaking change: Refine OpenChangeReason. hover is now trigger-hover; click is now trigger-press; focus is now trigger-focus. (#1782)
  • Use basic scroll lock on iOS (#1890)

Field

  • Breaking change: Consolidate Field.Error forceShow into match prop. Use match={true} (or implicit boolean) instead of forceShow. (#1919)
  • Improve Label logic that prevents text selection on double click (#1784)
  • Fix validation inconsistency (#1779)
  • Fix integration of Base UI components (#1755)
  • Set valueMissing to false if only error and not dirtied (#1810)
  • validate with latest value on blur (#1850)
  • Revalidate only required on change (#1840)
  • Run validate function after native validations (#1926)
  • Fix validate fn incorrectly running twice (#1959)
  • Integrate range sliders with Form and Field (#1929)

Form

  • Fix integration of Base UI components (#1755)
  • Select inputs on focus (#1858)
  • Exclude number formatting from form value (#1957)
  • Integrate range sliders with Form and Field (#1929)

Input

  • Fix Input.Props type (#1915)
  • Extend Field.Control.State (#1954)
  • Breaking change: Refine OpenChangeReason. hover is now trigger-hover; click is now trigger-press; focus is now trigger-focus. (#1782)
  • Fix function dependency handling (#1787)
  • Add missing 'use client' to RadioGroup part (#1851)
  • Ensure null items are removed from composite lists (#1847)
  • Avoid :focus-visible style appearing (#1846)
  • Better handle dynamic and non-string items (#1861)
  • Add collisionAvoidance prop (#1849)
  • Add finalFocus and closeDelay props (#1918)
  • Use basic scroll lock on iOS (#1890)
  • New Menubar component (#1684)
  • New NavigationMenu component (#1741)

Number Field

  • validate with latest value on blur (#1850)
  • Move scrubbing logic to ScrubArea component (#1859)
  • Remove floating point errors when snapOnStep is disabled (#1857)
  • Stop event propagation to allow composite components to be used within popups (#1871)
  • Exclude number formatting from form value (#1957)

Popover

  • Breaking change: Refine OpenChangeReason. hover is now trigger-hover; click is now trigger-press; focus is now trigger-focus. (#1782)
  • Fix function dependency handling (#1787)
  • Avoid prop getters when merging props (#1852)
  • Add collisionAvoidance prop (#1849)
  • Fix nested openOnHover (#1938)
  • Use basic scroll lock on iOS (#1890)

Preview Card

  • Breaking change: Refine OpenChangeReason. hover is now trigger-hover; click is now trigger-press; focus is now trigger-focus. (#1782)
  • Fix function dependency handling (#1787)
  • Add collisionAvoidance prop (#1849)

Radio Group

  • Fix composite focus of initially selected radio item (#1753)
  • Add inputRef props (#1683)
  • Stop event propagation to allow composite components to be used within popups (#1871)

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)
  • 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)
  • Breaking change: Refine OpenChangeReason. hover is now trigger-hover; click is now trigger-press; focus is now trigger-focus. (#1782)
  • Fix function dependency handling (#1787)
  • Add inputRef props (#1683)
  • Refactor to useRenderElement (#1797)
  • Ensure null items are removed from composite lists (#1847)
  • Fix id prop forwarding to hidden input (#1862)
  • Avoid :focus-visible style appearing (#1846)
  • Fix transitionStatus mapping on ItemIndicator (#1925)
  • Better handle dynamic and non-string items (#1861)
  • Use Select.ItemText ref to grab default text content (#1943)
  • Add collisionAvoidance prop (#1849)
  • Use basic scroll lock on iOS (#1890)

Slider

  • Breaking change: Drop inputId prop from Thumb. (#1914)
  • Position thumb based on value instead of pointer location when dragging (#1750)
  • Use useRenderElement (#1772)
  • Add inputRef props (#1683)
  • Add locale prop (#1796)
  • Stop event propagation to allow composite components to be used within popups (#1871)
  • set data-dragging on touchstart and pointerdown (#1874)
  • Integrate range sliders with Form and Field (#1929)

Toast

  • Breaking change: Add Portal part. Place <Toast.Viewport> inside of <Toast.Portal>. (#1962)
  • 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)
  • Fix swipe jump on iOS (#1785)

Toggle

  • Stop event propagation to allow composite components to be used within popups (#1871)

Toolbar

  • Stop event propagation to allow composite components to be used within popups (#1871)

Tooltip

  • Breaking change: Refine OpenChangeReason. hover is now trigger-hover; click is now trigger-press; focus is now trigger-focus. (#1782)
  • Fix function dependency handling (#1787)
  • Avoid prop getters when merging props (#1852)
  • Remove trackCursorAxis type from Positioner (#1895)
  • Apply pointer-events: none to Positioner when not hoverable (#1917)
  • Add collisionAvoidance prop (#1849)

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)
  • Skip most of useRenderElement logic when unnecessary (#1967)

v1.0.0-alpha.8

Apr 17, 2025

Accordion

  • Recalculate panel dimensions on layout resize (#1704)
  • Rework animations and transitions (#1601)

AlertDialog

  • Breaking change: Rename data-has-nested-dialogs to data-nested-dialog-open (#1686)
  • Fix onOpenChange types for event/reason passing (#1721)
  • Use consistent inert attr and map [data-popup-open] back to open (#1650)
  • Fix text selection & right-clicks (#1702)

CheckboxGroup

  • Parent checkbox/nested demos (#1610)

Collapsible

  • Fix ForwardedRef type of CollapsiblePanel (#1595)
  • Recalculate panel dimensions on layout resize (#1704)
  • Rework animations and transitions (#1601)

Dialog

  • Breaking change: Rename data-has-nested-dialogs to data-nested-dialog-open (#1686)
  • Breaking change: Add new trap-focus value to modal prop. Dialogs with modal=false no longer trap focus. (#1571)
  • Fix onOpenChange types for event/reason passing (#1721)
  • Use consistent inert attr and map [data-popup-open] back to open (#1650)
  • Fix text selection & right-clicks (#1702)
  • Allow document to slide input into view on iOS when keyboard opens (#1735)

Field

  • Fix forwarding of name and disabled props (#1616)
  • Add missing item data attributes docs (#1691)
  • Fix inert prop compatibility in React <19 (#1618)
  • Fix stuck highlight on submenu trigger when submenu opens with keyboard (#1698)
  • Fix onOpenChange types for event/reason passing (#1721)
  • Use consistent inert attr and map [data-popup-open] back to open (#1650)
  • Fix text selection & right-clicks (#1702)

Meter

  • New Meter component (#1435)

NumberField

  • Correct percentage parse handling (#1676)
  • New snapOnStep prop (#1560)

Popover

  • Breaking change: Add new trap-focus value to modal prop (#1571)
  • Fix inert prop compatibility in React <19 (#1618)
  • Fix onOpenChange types for event/reason passing (#1721)
  • Use consistent inert attr and map [data-popup-open] back to open (#1650)
  • Fix text selection & right-clicks (#1702)

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)

Radio

  • Fix value forwarding and null handling (#1697)

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)
  • Handle visibility change and nesting (#1598)
  • Correct thumb sizing with scrollbar margins (#1606)

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)
  • Avoid double commit on value change (#1597)
  • Reset selectedIndex when set to null (#1596)
  • Add missing item data attributes docs (#1691)
  • Fix onOpenChange types for event/reason passing (#1721)
  • Use consistent inert attr and map [data-popup-open] back to open (#1650)
  • Fix text selection & right-clicks (#1702)

Slider

  • Correct thumb positioning when control has padding (#1661)
  • Prevent range slider thumbs from being dragged past each other (#1612)
  • Fix incorrect CSS position on vertical slider indicator (#1599)
  • Fix overlapping slider thumbs stuck at min or max (#1732)

Toast

  • New Toast component (#1467)

Tooltip

  • Avoid re-rendering unrelated consumers (#1677)
  • Add disabled prop (#1682)
  • Fix onOpenChange types for event/reason passing (#1721)
  • Use consistent inert attr and map [data-popup-open] back to open (#1650)
  • Fix text selection & right-clicks (#1702)

v1.0.0-alpha.7

Mar 20, 2025

Accordion

  • Fix aria-labelledby on accordion panel (#1544)

AlertDialog

  • Fix selection on outside press on Firefox with modal prop (#1573)
  • Fix non-interactive button disabled state (#1473)
  • actionsRef prop (#1236)

Avatar

  • Support cross origin in useImageLoadingStatus (#1433)
  • Add missing Avatar export (#1428)

Collapsible

  • Update props destructuring to fix Trigger disabled state (#1469)

Dialog

  • Fix selection on outside press on Firefox with modal prop (#1573)
  • Fix non-interactive button disabled state (#1473)
  • actionsRef prop (#1236)

Field

  • Fix FieldControl [data-filled] not reacting to external value changes (#1565)
  • Ensure submenu triggers respond to clicks when openOnHover=false (#1583)
  • Ensure stickIfOpen is reset to true correctly (#1548)
  • Fix selection on outside press on Firefox with modal prop (#1573)
  • Reset hoverEnabled state on close (#1461)
  • Fix prop merging issues (#1445)
  • Set pointer-events: none style on backdrops when hoverable (#1351)
  • actionsRef prop (#1236)

NumberField

  • Fix ScrubArea on Safari ([#1584])(https://github.com/mui/base-ui/pull/1584/))
  • Fix large/smallStep getting stuck (#1578)
  • Fix parse of numbers with spaces as thousands separators (#1577)
  • Prevent virtual cursor overlapping native one (#1491)
  • Fix disabled state on increment/decrement buttons (#1462)
  • Correct virtual cursor rendering (#1484)
  • Add locale prop (#1488)
  • Improve virtual cursor perf (#1485)

Popover

  • Ensure stickIfOpen is reset to true correctly (#1548)
  • Fix selection on outside press on Firefox with modal prop (#1573)
  • Set pointer-events: none style on backdrops when hoverable (#1351)
  • Fix non-interactive button disabled state (#1473)
  • modal prop (#1459)
  • actionsRef prop (#1236)

PreviewCard

  • Set pointer-events: none style on backdrops when hoverable (#1351)
  • actionsRef prop (#1236)

RadioGroup

  • Fix Form/Field validation integration (#1448)
  • Handle modifier keys (#1529)

Select

  • Fix selection on outside press on Firefox with modal prop (#1573)
  • actionsRef prop (#1236)
  • Improve ScrollArrow behavior (#1564)
  • Ensure switching controlled value to null updates Select.Value label (#1561)
  • Pass value as second argument to function children Select.Value (#1562)
  • Fix focus jump while hovering while navigating with keyboard (#1563)
  • Fix disabled state changing (#1526)

Slider

  • Fix thumb positioning when controlled value violates min/max/step (#1541)
  • Warn when min is not less than max (#1475)
  • Narrow the type of value in callbacks (#1241)

Tabs

  • Fix keyboard navigation involving disabled Tabs (#1449)
  • Handle modifier keys (#1529)

Toolbar

  • Add Toolbar components (#1349)

Tooltip

  • actionsRef prop (#1236)
  • Fix Provider delay=0 not being respected (#1416)

useRender

  • Add public hook (#1418)
  • Refine docs and APIs (#1551)

v1.0.0-alpha.6

Feb 6, 2025

AlertDialog

  • onOpenChangeComplete prop (#1305)
  • Fix jump with scroll-behavior style (#1343)

Avatar

  • Add Avatar component (#1210)

Checkbox

  • Avoid applying hidden attr when keepMounted=true for indicators (#1329)

Dialog

  • Remove modal={open} state (#1352)
  • Support multiple non-nested modal backdrops (#1327)
  • Fix missing ids on Title and Description (#1326)
  • onOpenChangeComplete prop (#1305)
  • Fix jump with scroll-behavior style (#1343)

Field

  • Respect validationMode (#1053)
  • Add filled and focused style hooks (#1341)

Form

  • Fix focusing of invalid field controls on errors prop change (#1364)
  • Avoid applying hidden attr when keepMounted=true for indicators (#1329)
  • Support submenus with openOnHover prop (#1338)
  • Fix iPad detection when applying scroll lock (#1342)
  • onOpenChangeComplete prop (#1305)
  • Fix jump with scroll-behavior style (#1343)
  • Add OffsetFunction for sideOffset and alignOffset (#1223)
  • Ensure keepMounted is a private param on Positioner (#1410)

Popover

  • onOpenChangeComplete prop (#1305)
  • Add OffsetFunction for sideOffset and alignOffset (#1223)
  • Ensure keepMounted is a private param on Positioner (#1410)

PreviewCard

  • onOpenChangeComplete prop (#1305)
  • Add OffsetFunction for sideOffset and alignOffset (#1223)
  • Ensure keepMounted is a private param on Positioner (#1410)

Progress

  • Add format prop and Value component (#1355)

Radio

  • Avoid applying hidden attr when keepMounted=true for indicators (#1329)

Select

  • onOpenChangeComplete prop (#1305)
  • Fix jump with scroll-behavior style (#1343)
  • Add OffsetFunction for sideOffset and alignOffset (#1223)
  • Ensure keepMounted is a private param on Positioner (#1410)

Slider

  • Fix thumb positioning (#1411)

Tabs

  • Fix being able to activate a disabled tab (#1359)
  • Fix tabs activating incorrectly on non-primary button clicks (#1318)

Tooltip

  • onOpenChangeComplete prop (#1305)
  • Add OffsetFunction for sideOffset and alignOffset (#1223)
  • Ensure keepMounted is a private param on Positioner (#1410)

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
  • Don’t call onNestedDialogOpen when unmounting a closed nested dialog #1280
  • Fix the nesting of different dialogs #1167
  • Remove useFloating call from the Popup #1300
  • Set pointer-events on InternalBackdrop based on open state #1221
  • Use internal backdrop for pointer modality #1161

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
  • Don’t call onNestedDialogOpen when unmounting a closed nested dialog #1280
  • Fix the nesting of different dialogs #1167
  • Remove useFloating call from the Popup #1300
  • Set pointer-events on InternalBackdrop based on open state #1221
  • Use internal backdrop for pointer modality #1161
  • 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
  • Apply aria-hidden to Arrow parts #1196
  • Fix focusableWhenDisabled components #1313
  • Fix openOnHover issues #1191
  • Fix closing the menu when clicking on checkboxitem/radioitem #1301
  • Fix Enter key preventDefault when rendering links #1251
  • Handle pseudo-element bounds in mouseup detection #1250
  • Set pointer-events on InternalBackdrop based on open state #1221
  • Use internal backdrop for pointer modality #1161

NumberField

  • Correctly handle quick touches #1294

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
  • Apply aria-hidden to Arrow parts #1196
  • Fix PopoverTrigger and TooltipTrigger prop types #1209

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
  • Apply aria-hidden to Arrow parts #1196
  • Use FloatingPortalLite #1278

Progress

  • Set zero width when value is zero #1204

ScrollArea

  • Differentiate x/y orientation data-scrolling #1188
  • Read DirectionProvider and use logical positioning CSS props #1194

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
  • Allow id to be passed to trigger #1174
  • Fallback to standard positioning when pinch-zoomed in Safari #1139
  • Fix focusableWhenDisabled components #1313
  • Fix highlight flash on Safari #1233
  • Handle pseudo-element bounds in mouseup detection #1250
  • Use internal backdrop for pointer modality #1161

Separator

  • Support vertical orientation #1304

Slider

  • Ensure onValueCommitted is called with the same value as latest onValueChange #1296
  • Replace internal map with Composite metadata #1082
  • Set position: relative on range slider indicator #1175
  • Use un-rounded values to position thumbs #1219

Tabs

  • Expose width/height state in tabs indicator #1288

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
  • Apply aria-hidden to Arrow parts #1196
  • Fix PopoverTrigger and TooltipTrigger prop types #1209
  • Use FloatingPortalLite #1278

1.0.0-alpha.4

December 17, 2024

Public alpha launch 🐣 Merry Xmas! 🎁