Releases

Changelogs for each Base UI release.

View as Markdown

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)
  • Fix of the types of the refs in the Checkbox, Switch and Radio components (#3246)
  • Fix of the value type error with mergeProps (#3247)

v1.0.0-beta.5

Nov 17, 2025

General changes

  • Breaking change: Replace trackAnchor with disableAnchorTracking.
    If you were using trackAnchor={false}, be sure to update your usage to disableAnchorTracking instead. (#3188)
  • Breaking change: Rename loop to loopFocus (#3186)
  • Fix type portability (#2912)
  • Accept a function for the style prop (#3038)
  • Create portal elements inside React (#2889)
  • Avoid applying hidden attribute to indicator elements when they specify keepMounted and are invisible (#3228)
  • Fix crash in Next.js 16 when accessing render.props.ref (#3231)

Accordion

  • Breaking change: Change multiple prop to be false by default and add a demo (#3141)
  • Fix flaky exit transition (#3101)

Alert Dialog

  • Fix initialFocus as function being called on close (#2949)
  • Support detached triggers (#2974)
  • Place overflow: hidden on <body> for overlay scrollbars by default. Avoids sticky elements shifting if <body> has an overflow style specified. (#3083)
  • Add <AlertDialog.Viewport> part (#2808)

Autocomplete

  • Breaking change: Refactor alwaysSubmitOnEnter to submitOnItemClick prop.
    If you were using alwaysSubmitOnEnter, be sure to update your usage to submitOnItemClick instead. (#3018)
  • Prevent blocking filtering while composing text on Android (#2944)
  • Add empty state to List.State (#2934)
  • Fix initialFocus as function being called on close (#2949)
  • Add role="combobox" to <Autocomplete.Trigger> if <Autocomplete.Input> is inside Popup (#2973)
  • Fix stale onItemHighlighted data when filtering with autoHighlight (#2829)
  • Add empty and side styling attributes on <Autocomplete.Input> (#2926)
  • Fix <Autocomplete.Value> component return type for React 17 (#3050)
  • Support autoHighlight: "always", and add keepHighlight, highlightItemOnHover props (#2976)
  • Keep focus on input when pressing list element (#3092)
  • Allow Esc to bubble if <Autocomplete.Empty> is not used (#2935)
  • Add dialog role to popup when input is inside (#3213)

Button

  • New <Button> component (#2363)

Checkbox

  • Breaking change: Render root as <span> instead of <button> (#3205)

Collapsible

  • Fix starting-style state (#2985)

Combobox

  • Take into account isItemEqualToValue when selecting an option in multiple mode (#2893)
  • Move CompositeList to List component to make Input work with composites (#2883)
  • Fix onValueChange type inference when value is unspecified (#2897)
  • Fix required form submission with multiple values (#2925)
  • Fix Home/End Input scroll in Chrome/Safari (#2928)
  • Prevent blocking filtering while composing text on Android (#2944)
  • Add empty state to List.State (#2934)
  • Fix initialFocus as function being called on close (#2949)
  • Add role="combobox" to <Combobox.Trigger> if <Combobox.Input> is inside Popup (#2973)
  • Fix Field control ref when input is inside popup (#2971)
  • Fix stale onItemHighlighted data when filtering with autoHighlight (#2829)
  • Add empty and side styling attributes on <Combobox.Input> (#2926)
  • Fix <Combobox.Value> component return type for React 17 (#3050)
  • Fix input value derivation on value and items prop updates (#3067)
  • Support autoHighlight: "always", and add keepHighlight, highlightItemOnHover props (#2976)
  • Keep focus on input when pressing list element (#3092)
  • Fix support of dialog + combobox pattern (#3049)
  • Support drag-to-select (#3167)
  • Allow Esc to bubble if <Combobox.Empty> is not used (#2935)
  • Fix stuck filtering with differing stringifiers (#3201)
  • Add dialog role to popup when input is inside (#3213)

Context Menu

  • Add open state to <ContextMenu.Trigger> (#3195)
  • Fix ignored anchor prop on <ContextMenu.Positioner> (#3202)

Dialog

  • Breaking change: Replace dismissible with disablePointerDismissal.
    If you were using dismissible={false}, replace it with disablePointerDismissal. (#3190)
  • Fix initialFocus as function being called on close (#2949)
  • Support detached triggers (#2974)
  • Place overflow: hidden on <body> for overlay scrollbars by default. Avoids sticky elements shifting if <body> has an overflow style specified. (#3083)
  • Add <Dialog.Viewport> part and scrollable demos on docs (#2808)

Field

  • Breaking change: Add onSubmit validation mode and make it the default over onBlur.
    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)
  • Add dirty and touched props (#2950)
  • New <Field.Item> part (#2810)
  • Fix validationMode="onChange" not clearing custom error state (#3048)
  • Fix external onChange validation mode errors (#3137)

Form

  • Breaking change: The onClearErrors prop has been removed.
    Errors from the errors prop are always cleared when the value changes. (#3136)
  • Add onSubmit validation mode.
    Additionally, validationMode can be set on <Form>. (#3013)
  • Add onFormSubmit callback (#3131)

Menu

  • Breaking change: Support detached triggers.
    openOnHover, delay, and closeDelay props have been moved from <Menu.Root> to <Menu.Trigger>.
    Additionally, menus now must have at least one <Menu.Trigger> element. (#3170)
  • Ignore disabled item on initial focusing (#2604)
  • Fix stealing focus from dialogs on close (#2920)
  • Place overflow: hidden on <body> for overlay scrollbars by default. Avoids sticky elements shifting if <body> has an overflow style specified. (#3083)

Navigation Menu

  • Fix nested popup dismiss actions (#2978)
  • Fix error on React 17 (#3204)

Number Field

  • Granular change reasons (#3132)

Popover

  • Breaking change: Support detached triggers and multiple triggers per popover.
    openOnHover, delay, and closeDelay props have been moved from <Popover.Root> to <Popover.Trigger>. (#2336)
  • Fix initialFocus as function being called on close (#2949)
  • Fix swiping or scrolling on nested popup dismissing popover on touch (#3011)
  • Place overflow: hidden on <body> for overlay scrollbars by default. Avoids sticky elements shifting if <body> has an overflow style specified. (#3083)

Preview Card

  • Breaking change: Move delay props to trigger.
    If you were using delay or closeDelay props, be sure to move them to from <PreviewCard.Root> to the <PreviewCard.Trigger> component. (#3182)

Radio Group

  • Breaking change: Render root as <span> instead of <button> (#3205)

Scroll Area

  • Breaking change: Improve CSS vars performance.
    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)

Select

  • Breaking change: Make the trigger native button by default.
    The trigger now renders a <button> element, be sure to adjust your code if necessary. (#3177)
  • Add open state type on Select.Icon interface (#2919)
  • Fix onValueChange type inference when value is unspecified (#2897)
  • Fix required form submission with multiple values (#2925)
  • Avoid re-rendering on popup height expansion (#2972)
  • Place overflow: hidden on <body> for overlay scrollbars by default. Avoids sticky elements shifting if <body> has an overflow style specified. (#3083)
  • Add data-placeholder attribute (#2737)

Slider

  • Breaking change: Add thumbCollisionBehavior prop.
    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).
    The value swap was also added, which allows thumbs to be dragged past each other when they collide.
    Lastly, the value none is the same as the previous behavior, where thumbs can’t be dragged past one another.
    Keyboard interactions always use none behavior. (#2856)
  • Granular change reasons (#3132)

Switch

  • Breaking change: Render root as <span> instead of <button> (#3205)

Tabs

  • Breaking change: Fix selected/active state naming consistency.
    • Renamed [data-selected] to [data-active] in <Tabs.Tab>
    • Removed [data-highlighted] (:focus-visible was already the recommendation in styles)
    • selectedTabPosition/selectedTabSize are now activeTabPosition/activeTabSize in Tabs.Indicator.State (#3024)
  • Breaking change: Change activateOnFocus to false.
    If you need your Tabs to activate on focus, be sure to add activateOnFocus prop. (#3176)
  • Fix Next.js 16 error from Math.random id generation (#3051)
  • Fix indicator sizing and offsets (#3214)

Toast

  • Allow React.ReactNode for title/description properties (#2929)
  • Add ability to anchor to an element (#3096)

Toolbar

  • Breaking change: The cols prop has been removed.
    This prop was not supposed to be exposed. (#3133)

Tooltip

  • Breaking change: Support detached triggers.
    delay and closeDelay props have been moved from <Tooltip.Root> to <Tooltip.Trigger>. (#3071)
  • Breaking change: Change hoverable to disableHoverablePopup.
    In case you need to disable the hoverable popup behavior, be sure to add the disableHoverablePopup prop. (#3178)
  • Fix data-instant ending transition of same tooltip (#2962)

v1.0.0-beta.4

Oct 1, 2025

General changes

  • Breaking change: Generic event details. The main exported type is now BaseUIChangeEventDetails (with a paired BaseUIGenericEventDetails), not BaseUIEventDetails. (#2796)
  • Update disabled prop of buttons when ref changes (#2756)
  • Refine event details (#2698)

Accordion

  • Breaking change: Use useId instead of composite index as fallback value. Accordion items must have an explicit value set in order to be initially open. Inferring the value by their DOM index is no longer supported. (#2664)
  • Breaking change: Rename openMultiple prop to multiple (#2764)

Autocomplete

  • Breaking change: onItemHighlighted now has a reason property instead of type to be consistent with the eventDetails API. (#2796)
  • Breaking change: Rename cols to grid prop. Specify grid={true} instead of cols={number} — the columns are automatically inferred from <Autocomplete.Row> (#2683)
  • Fix duplicate onOpenChange calls and pass correct DOM event. (#2682)
  • Fix controlled input value updates (#2707)
  • Fix input focus on close when clicking trigger. Fixes a jump to the bottom of the page in Safari (#2723)
  • Add alwaysSubmitOnEnter prop and allow form submission on Enter if no item is highlighted by default (#2700)
  • Use ReadonlyArray type for items (#2819)

Collapsible

  • Fix CollapsiblePanel type to use its own state (#2697)
  • Respect user’s CSS display property on panel (#2772)

Combobox

  • Breaking change: onItemHighlighted now has a reason property instead of type to be consistent with the eventDetails API. (#2796)
  • Breaking change: Rename cols to grid prop. Specify grid={true} instead of cols={number} — the columns are automatically inferred from <Combobox.Row>. (#2683)
  • Fix duplicate onOpenChange calls and pass correct DOM event. (#2682)
  • Fix initial closed typeahead (#2665)
  • Support autoHighlight prop (#2668)
  • Set default input value based on value prop (#2680)
  • Fix controlled input value updates (#2707)
  • Fix input focus on close when clicking trigger. Fixes a jump to the bottom of the page in Safari (#2723)
  • Fix unexpected close with multiple selection and input inside popup (#2771)
  • Allow form submission on Enter if no item is highlighted by default (#2700)
  • Avoid refiltering with ending transition in multiple selection mode (#2681)
  • Support object values with isItemEqualToValue prop (#2704)
  • Use ReadonlyArray type for items (#2819)
  • Fix misleading item-press reason in onInputValueChange (#2830)
  • Clear single-select value on input clear (#2860)
  • Fix focusout of input not closing popup under certain conditions (#2864)

Context Menu

  • Ensure submenus close when parents close (#2768)
  • Fix onClick firing twice on first click of item (#2849)

Menu

  • Ensure submenus close when parents close (#2768)
  • Allow non-nested portals across differing popup trees (#2818)

Menubar

  • Fix Menubar not disabling child Menus (#2736)
  • Ensure submenus close when parents close (#2768)
  • Fix <CompositeList> not updating item order on reordering (#2675)

Navigation Menu

  • Make link close on click configurable (#2740)
  • Fix focus returning to trigger without animations (#2779)

Number Field

  • Fix stuck virtual cursor after mouse tap (#2720)
  • Improve parsing logic (#2725)
  • Align value changes with Slider. An onValueCommitted callback has been added. (#2726)

Popover

  • Allow non-nested portals across differing popup trees (#2818)

Scroll Area

  • Add overflow presence state attributes and CSS variables (#2478)
  • Fix RTL horizontal scrollbar on Safari (#2776)
  • Fix thumb size flicker (#2778)

Select

  • Breaking change: Add <Select.List> component. It is now possible for <Select.ScrollArrow> to show when in fallback (alignItemWithTrigger deactivated). As a result, if you want the scroll arrows to be hidden in this mode like before, change the styles to default to display: none on .ScrollArrow, and display: block when [data-side="none"]. (#2596)
  • Block opening the popup when provided readOnly (#2717)
  • Add open state for <Select.Icon> and fix ref type (#2714)
  • Support object values with isItemEqualToValue prop (#2704)
  • Use ReadonlyArray type for items (#2819)

Slider

  • Breaking change: onValueChange has activeThumbIndex as part of the eventDetails object as a second parameter, not third. (#2796)
  • Breaking change: Remove redundant hidden inputs. The inputRef prop is moved from <Slider.Root> to <Slider.Thumb>. (#2631)
  • Fix pointer tracking bugs (#2688)
  • Fix input attributes (#2728)
  • Add thumbAlignment prop (#2540)

Switch

  • Fix duplicate name attribute (#2763)

Toast

  • Breaking change: Support variable height stacking. Toasts that have varying heights no longer force a data-expanded expanded state on the viewport. CSS should be amended to ensure larger toasts don’t overflow a small toast stacked at the front. See this diff for new styles, along with general improvements to stacking styles. (#2742)
  • Reduce stickiness of expanded state (#2770)
  • Ensure toast is frozen at its current visual transform while swiping (#2769)

Toggle Group

  • Breaking change: Rename toggleMultiple prop to multiple. (#2764)

Toolbar

  • Fix <CompositeList> not updating item order on reordering (#2675)

useRender

  • Add div as a defaultTagName (#2692)

v1.0.0-beta.3

Sep 3, 2025

General changes

  • Breaking change: Base UI event details. Custom event callbacks provide BaseUIChangeEventDetails object as their second parameter. This object contains the source event, reason and methods to customize the behavior (where applicable). For example, onOpenChange(open, event, reason) becomes onOpenChange(open, eventDetails), where eventDetails contains event and reason properties. (#2382)

Alert Dialog

  • Breaking change: Support initialFocus and finalFocus functions. The initialFocus and finalFocus props can be functions that return DOM elements to focus. This is a new feature for finalFocus and a breaking change for initialFocus as the element must be returned directly (not as a ref). (#2536)

Autocomplete

  • New Autocomplete component (#2105)

Checkbox

  • Fix missing validity attributes when wrapped in <Field> (#2572)

Combobox

  • New Combobox component (#2105)

Context Menu

  • Fix default offsets when align="center" or side differs (#2601)

Dialog

  • Breaking change: Support initialFocus and finalFocus functions. The initialFocus and finalFocus props can be functions that return DOM elements to focus. This is a new feature for finalFocus and a breaking change for initialFocus as the element must be returned directly (not as a ref). (#2536)
  • Restore focus to popup when focused element is removed (#2479)

Field

  • Prevent defaultValue reset on focus for uncontrolled inputs (#2543)
  • Allow onValueChange to fire when defaultValue/value are not set (#2600)

Input

  • Allow onValueChange to fire when defaultValue/value are not set (#2600)

Menu

  • Breaking change: Fix closeParentOnEsc default value. The default value of closeParentOnEsc in Menu.SubmenuRoot is now false. When the Esc key is pressed in a Submenu, the Submenu closes, and the focus correctly moves to the SubmenuTrigger. (#2493)
  • Breaking change: Support initialFocus and finalFocus functions. The initialFocus and finalFocus props can be functions that return DOM elements to focus. This is a new feature for finalFocus and a breaking change for initialFocus as the element must be returned directly (not as a ref). (#2536)
  • Fix menu not opening when inside context menu trigger (#2506)
  • Fix transform-origin variable calculation when Positioner sideOffset is a function (#2511)
  • Fix submenu events (#2483)
  • Fix limitShift offset based on arrow size (#2571)

Navigation Menu

  • Breaking change: Semantic element structure and active page prop. <NavigationMenu.List> renders <ul> and <NavigationMenu.Item> renders <li> by default. (#2526)
  • Unshare AbortController instance (#2441)
  • Close on link click by default (#2535)

Number Field

  • Fix duplicate onValueChange calls (#2591)

Popover

  • Breaking change: Support initialFocus and finalFocus functions. The initialFocus and finalFocus props can be functions that return DOM elements to focus. This is a new feature for finalFocus and a breaking change for initialFocus as the element must be returned directly (not as a ref). (#2536)
  • Fix outside click after right clicking in popup (#2508)
  • Fix unexpected close when nested inside two popovers (#2481)
  • Fix transform-origin variable calculation when Positioner sideOffset is a function (#2511)
  • Restore focus to popup when focused element is removed (#2479)
  • Fix limitShift offset based on arrow size (#2571)

Preview Card

  • Fix transform-origin variable calculation when Positioner sideOffset is a function (#2511)
  • Fix limitShift offset based on arrow size (#2571)

Radio Group

  • Return null in form data when no option selected (#2473)

Scroll Area

  • Prevent pointer events from sibling portals triggering hover (#2542)

Select

  • Fix stale items prop (#2397)
  • Fix unexpected close when nested inside two popovers (#2481)
  • Fix onValueChange type inference (#2372)
  • Fix transform-origin variable calculation when Positioner sideOffset is a function (#2511)
  • Reset state when selected item is removed (#2577)
  • Fix data-highlighted and DOM focus item desync (#2569)
  • Fix item click with defaultOpen prop (#2570)
  • Fix scroll arrows not propagating scroll fully to start/end of list (#2523)
  • Fix limitShift offset based on arrow size (#2571)

Slider

  • Breaking change: Instead of the thumb div, the input type="range" element receives focus. Focus styles that were targeting the thumb, should be updated. For example .Thumb:focus-visible should be replaced with .Thumb:has(:focus-visible). The tabIndex prop is moved from Root to Thumb where it gets forwarded to the input. The thumb’s render prop no longer contains the third inputProps argument; the input element is instead merged with children. (#2578)
  • Reduce bundle size (#2551)
  • Fix thumb :focus-visible with mixed keyboard and pointer modality (#2584)
  • Add index prop to <Slider.Thumb> (#2593)

Tabs

  • Fix tab size rounding (#2488)
  • Fix highlight sync when focus is inside list (#2487)

Tooltip

  • Fix transform-origin variable calculation when Positioner sideOffset is a function (#2511)
  • Fix limitShift offset based on arrow size (#2571)

useRender

  • Add support for data-* attributes (#2524)
  • Add defaultTagName parameter (#2527)

v1.0.0-beta.2

Jul 30, 2025

General changes

  • Fix navigator checks and ensure safe platform retrieval (#2273)
  • Prevent Space key default on keydown (#2295)
  • Check for performance existence on server (#2316)

Accordion

  • Destructure render prop (#2280)
  • Fix keyboard interactions with elements in the panel (#2321)
  • Fix open transitions in Safari/Firefox (#2327)

Alert Dialog

  • Support ShadowRoot containers (#2236)
  • Add forceRender prop to Backdrop part (#2037)
  • Improve outside press behavior with touch input (#2334)

Checkbox

  • Fix focusing form controls with inputRef (#2252)

Collapsible

  • Destructure render prop (#2323)
  • Fix open transitions in Safari/Firefox (#2327)

Dialog

  • Support ShadowRoot containers (#2236)
  • Add forceRender prop to Backdrop part (#2037)
  • Improve outside press behavior with touch input (#2334)
  • Use click event for outside press dismissal (#2275)

Field

  • Deregister fields from Form when unmounting (#2231)

Form

  • Deregister fields from Form when unmounting (#2231)

Menu

  • Support ShadowRoot containers (#2236)
  • Avoid double useRenderElement passes (#2256)
  • Improve outside press behavior with touch input (#2334)
  • Close submenus when focus is lost by shift-tabbing (#2290)

Menubar

  • Fix triggers role (#2317)

Meter

  • Fix ARIA attributes and update docs (#2267)

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)
  • Avoid double useRenderElement passes (#2256)
  • Add useButton integration to Trigger (#2296)
  • Fix popup size transitions on iOS (#2387)

Number Field

  • Remove invalid prop (#2315)
  • Fix button disabled state only including root disabled state (#2268)

Popover

  • Support ShadowRoot containers (#2236)
  • Remove ancestor nodes from inside elements for outside press detection (#2339)
  • Improve outside press behavior with touch input (#2334)
  • Use click event for outside press dismissal (#2275)

Preview Card

  • Support ShadowRoot containers (#2236)

Progress

  • Fix ARIA attributes and update docs (#2267)

Radio Group

  • Add aria-required attribute (#2227)
  • Extend state with FieldRoot.State (#2251)
  • Fix focusing form controls with inputRef (#2252)
  • Avoid double useRenderElement passes (#2256)

Scroll Area

  • Disable user-select on scrollbar and non-main button interactions (#2338)

Select

  • Support ShadowRoot containers (#2236)
  • Add value and readOnly to <Select.Trigger> state (#2237)
  • Add multiple prop (#2173)
  • Allow typeahead while open for multiple mode (#2274)
  • Ensure positionerElement is available in document mouseup (#2276)
  • Fix alignItemWithTrigger fallback scroll jump (#2241)
  • Support conditional multiple prop in types (#2369)
  • Fix multiple ARIA behavior on touch (#2333)
  • Improve outside press behavior with touch input (#2334)

Slider

  • Fix focusing form controls with inputRef (#2252)

Toast

  • Fix promise method timeout option handling (#2294)
  • Make <Toast.Viewport> an announce container (#2246)

Toggle

  • Avoid double useRenderElement passes (#2256)

Toggle Group

  • Avoid double useRenderElement passes (#2256)

Toolbar

  • Avoid double useRenderElement passes (#2256)

Tooltip

  • Support ShadowRoot containers (#2236)
  • Memoize leftover object in tooltip (#2250)
  • Fix error when combining defaultOpen and disabled (#2374)

v1.0.0-beta.1

Jul 1, 2025

General changes

  • Make error messages consistent (#2049)
  • Do not overwrite event handler when undefined is passed explicitly (#2151)

Accordion

  • Allow content to resize naturally (#2043)
  • Fix transition status mapping (#2169)
  • Fix aria-controls reference (#2170)
  • Fix test warning about mixed animation types (#2180)

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)
  • Refactor to useRenderElement (#2053)
  • Always set id on the <input> element (#2115)

Checkbox Group

  • Fix onCheckedChange not running when parent checkbox is present (#2155)

Collapsible

  • Allow content to resize naturally (#2043)
  • Fix aria-controls reference (#2170)
  • Fix test warning about mixed animation types (#2180)

Context Menu

  • Breaking change: Add SubmenuRoot part. Nested menus should be defined with <Menu.SubmenuRoot> instead of <Menu.Root> to to avoid ambiguity. (#2042)
  • Fix CheckboxItemIndicator export (#2009)

Dialog

  • Fix popup prop merging (#2119)

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)
  • Enable custom validation based on other form values (#1941)
  • Fix onValueChange value type (#2112)
  • Fix <Field.Label> focusing trigger (#2118)
  • Fix slider field label (#2154)

Fieldset

  • Refactor to useRenderElement (#2053)

Form

  • Enable custom validation based on other form values (#1941)

Input

  • Fix onValueChange value type (#2112)

Menu

  • Breaking change: Add SubmenuRoot part. Nested menus should be defined with <Menu.SubmenuRoot> instead of <Menu.Root> to to avoid ambiguity. (#2042)
  • Unset role from Trigger (#2047)
  • Emit close event on cancel-open (#2067)
  • Fix close toggle when rendering non-native button (#2071)
  • Add highlighted to item State (#2079)
  • Remove highlighted effect (#2162)
  • Cut out internal backdrop to allow interacting with triggers (#2141)
  • Fix active index sync on hover (#2163)
  • Fix focus returning to root when submenus have exit transitions (#2171)

Menubar

  • Fix closeOnClick: false not working in nested menus (#2094)

Navigation Menu

  • Breaking change: Handle layout resize while open (#2070). For large scrollable content, add the max-height style to .Content in addition to .Popup.
  • Fix positioner height when opening menu using the keyboard arrows (#2060)

Number Field

  • Ensure onValueChange is called with already-formatted parsed value (#1905)
  • Fix revalidation on change (#2174)

Popover

  • Fix close toggle when rendering non-native button (#2071)
  • Cut out internal backdrop to allow interacting with triggers (#2141)

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)
  • Refactor to useRenderElement (#2053)

Scroll Area

  • Ignore data-scrolling during programmatic scroll (#1908)

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)
  • Performance: avoid re-renders (#1961)
  • Fix close toggle when rendering non-native button (#2071)
  • Fix <Field.Label> focusing trigger (#2118)
  • Fix programmatic value changes and autofill handling (#2084)
  • Add highlighted to item State (#2079)
  • Cut out internal backdrop to allow interacting with triggers (#2141)
  • Pass value as state (#2153)
  • Extend FieldRoot.State type (#2192)

Slider

  • Use pointer capture when dragging (#2059)
  • Fix slider field label (#2154)

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)

Tabs

  • Fix indicator positioning when TabsList overflows (#2093)
  • Fix focus going out of sync when selected value is changed externally (#2107)
  • Remove highlighted state (#2164)

Toolbar

  • Set disabled attr on toolbar button when focusableWhenDisabled={false} (#2176)

useRender

  • Make useRender RSC-friendly (#2134)

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)

Menu

  • 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)

Menubar

  • New Menubar component (#1684)

Navigation Menu

  • 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)

Menu

  • 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)

Menu

  • 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)

Menu

  • 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

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
  • 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! 🎁