mui/base-ui
 Watch   
 Star   
 Fork   
22 days ago
base-ui

v1.7.0

General changes

  • Restore visible focus after keyboard close in Safari and Firefox (#5093) by @lyzno1
  • Type render callback props based on the rendered element (#5104) by @atomiks
  • Reduce popup bundle size (#5233) by @atomiks
  • Reduce store bundle size (#5250) by @atomiks
  • Keep unpositioned popups at the viewport origin (#5299) by @flaviendelangle
  • Correct layout and passive effect timing (#5337) by @atomiks
  • Remove redundant lifecycle synchronization (#5341) by @atomiks
  • Prevent stale cleanup from clearing registered part IDs (#5340) by @atomiks
  • Complete popup unmounting after a canceled exit transition (#5401) by @atomiks
  • Fix rendered trigger ID ownership (#5110) by @atomiks
  • Prevent unwanted flip with capped scrollable content (#5120) by @atomiks
  • Fix collisionPadding off-by-one on the biased side (#5143) by @atomiks
  • Reduce shared popup bundle size (#5192) by @atomiks
  • Mount popup subtrees synchronously when opening in React 17 (#5309) by @atomiks
  • Fix auto-resize origin for left-anchored popups (#5370) by @sai6855
  • Avoid redundant re-renders during lazy flipping (#5372) by @mdm317
  • Strip implementation-only types from published .d.ts files (#5165) by @michaldudak
  • Fix usePreviousValue equality comparison (#5264) by @lyzno1

Accordion

  • Remove the implicit dir attribute from <Accordion.Root> (#5117) by @chuganzy

Alert Dialog

  • Prevent <AlertDialog.Root> from reopening after remounting with a reused handle (#5109) by @michaldudak

Autocomplete

  • Respect locale when filtering (#5195) by @atomiks
  • Add input-press to change event details (#5356) by @chuganzy
  • Add cancel-open to change event details (#5376) by @chuganzy
  • Reset list scroll position on filter (#5231) by @atomiks
  • Remove dead code and deduplicate handlers (#5194) by @atomiks
  • Fix listbox separator semantics (#5399) by @sarthakmalik0810

Avatar

  • Show <Avatar.Fallback> immediately when delay={0} (#5147) by @chuganzy

Button

  • Fix keyboard click handling for custom elements (#4838) by @atomiks

Checkbox

  • Remove redundant validation input ref (#5188) by @nami8824
  • Stop internal input clicks from reaching ancestors (#5176) by @atomiks
  • Reduce bundle size (#5223) by @atomiks

Checkbox Group

  • Focus invalid checkbox (#5216) by @atomiks
  • Align form values with native submission (#5218) by @atomiks
  • Reduce bundle size (#5223) by @atomiks

Combobox

  • Add input-press to change event details (#5356) by @chuganzy
  • Add cancel-open to change event details (#5376) by @chuganzy
  • Stop filtering grouped items after limit (#5086) by @lyzno1
  • Remove leaky value registry (#5198) by @atomiks
  • Set initial highlight in inline combobox (#5230) by @atomiks
  • Return highlight to selected item on query clear (#5232) by @atomiks
  • Expose expanded state for inline comboboxes (#5332) by @sarthakmalik0810
  • Keep portalled popup content open (#5334) by @obeattie
  • Reset list scroll position on filter (#5231) by @atomiks
  • Fix hovered item stealing highlight when the list scrolls in Safari (#5265) by @arikchakma
  • Inherit the disabled state from <Combobox.Root> in <Combobox.Item> (#5365) by @chuganzy
  • Widen trigger slip-out release tolerance (#5159) by @atomiks
  • Remove dead code and deduplicate handlers (#5194) by @atomiks
  • Fix listbox separator semantics (#5399) by @sarthakmalik0810

Composite

  • Fix nested list reorder detection (#5156) by @jjenzz
  • Always skip natively disabled items during list navigation (#5185) by @atomiks
  • Fix scroll alignment for RTL direction in scrollIntoViewIfNeeded (#5234) by @sai6855
  • Simplify keyboard bookkeeping (#5249) by @atomiks

Dialog

  • Fix touch outside-press dismissal without a backdrop (#5096) by @atomiks
  • Prevent <Dialog.Root> from reopening after remounting with a reused handle (#5109) by @michaldudak
  • Fix scroll lock handoff with external overlays (#4665) by @atomiks
  • Reduce bundle size (#5193) by @atomiks

Drawer

  • Prevent <Drawer.Root> from reopening after remounting with a reused handle (#5109) by @michaldudak
  • Fix unreliable swipe-to-open gestures (#5105) by @atomiks
  • Fix popup flashing fully open for a frame on swipe area re-grab (#5112) by @atomiks
  • Deduplicate swipe math to reduce bundle size (#5181) by @atomiks
  • Fix scroll handling when focus moves while the virtual keyboard is open (#5179) by @atomiks
  • Fix cross-axis scroll blocked on iOS below the touchmove slop (#5257) by @atomiks
  • Fix snap point jump when pinned pointer moves leave the drag offset unchanged (#5308) by @atomiks
  • Fix Shadow DOM swipe gestures (#5360) by @atomiks

Field

  • Keep invalid state on disabled fields (#5116) by @atomiks
  • Reduce bundle size (#5225) by @atomiks
  • Fix data-dirty tracking for null-valued controls (#5290) by @sai6855

Fieldset

  • Reduce bundle size (#5225) by @atomiks

Form

  • Reduce bundle size (#5225) by @atomiks
  • Focus the first invalid field in document order (#5287) by @atomiks

Menu

  • Ignore pinch-zoom shifting (#4485) by @atomiks
  • Cancel stale submenu hover-open when Chrome drops mouseleave (#5153) by @atomiks
  • Fix exit animation not running on uncheck of item (#5252) by @sai6855
  • Fix duplicate onOpenChange calls when closing a submenu (#5178) by @atomiks
  • Fix VoiceOver announcement when opening a submenu (#5342) by @atomiks
  • Propagate disabled state to items (#5363) by @chuganzy
  • Open submenus on Android TalkBack press (#5384) by @atomiks
  • Prevent <Menu.Root> from reopening after remounting with a reused handle (#5149) by @michaldudak
  • Widen trigger slip-out release tolerance (#5159) by @atomiks

Meter

  • Format clamped values (#5409) by @atomiks
  • Reduce bundle size (#5224) by @atomiks

Navigation Menu

  • Fix frozen menu when the open trigger unmounts (#5240) by @DreierF
  • Ignore pinch-zoom shifting (#4485) by @atomiks

Number Field

  • Fix keyboard editing with multi-character format symbols (#5111) by @atomiks
  • Reduce bundle size (#5220) by @atomiks

OTP Field

  • Keep focus on the invalid field when autoSubmit is blocked (#5089) by @lyzno1

Popover

  • Prevent <Popover.Root> from reopening after remounting with a reused handle (#5149) by @michaldudak
  • Reduce bundle size (#5193) by @atomiks

Preview Card

  • Prevent <PreviewCard.Root> from reopening after remounting with a reused handle (#5149) by @michaldudak

Progress

  • Fix custom min/max semantics to match the indicator (#5095) by @atomiks
  • Reduce bundle size (#5224) by @atomiks

Radio Group

  • Remove unnecessary ARIA attributes from <Radio.Root> (#5213) by @sai6855
  • Stop internal input clicks from reaching ancestors (#5176) by @atomiks
  • Align form values with native submission (#5238) by @atomiks
  • Reduce bundle size (#5223) by @atomiks

Scroll Area

  • Fix thumb-drag divide-by-zero and per-scroll re-render (#5099) by @atomiks
  • Fix scrollbar visibility during touch scrolling on iOS (#5157) by @atomiks
  • Add WebKit overscroll feedback to <ScrollArea.Thumb> (#5145) by @atomiks
  • Reduce bundle size (#5217) by @atomiks
  • Prevent scroll snapping while dragging the thumb (#5259) by @atomiks
  • End thumb drag when the primary button is no longer held (#5374) by @atomiks

Select

  • Fix hovered item stealing highlight when the list scrolls in Safari (#5265) by @arikchakma
  • Inherit the disabled state from <Select.Root> in <Select.Item> (#5365) by @chuganzy
  • Widen trigger slip-out release tolerance (#5159) by @atomiks
  • Do not force-mount the popup on programmatic value changes (#5119) by @atomiks
  • Remove dead code and deduplicate handlers (#5194) by @atomiks
  • Fix listbox separator semantics (#5399) by @sarthakmalik0810

Slider

  • Fix assorted issues (#5097) by @atomiks
  • Reduce bundle size (#5222) by @atomiks
  • Exclude the prehydration script from client bundles (#5003) by @michaldudak

Switch

  • Stop internal input clicks from reaching ancestors (#5176) by @atomiks
  • Reduce bundle size (#5223) by @atomiks

Tabs

  • Position pre-hydration indicator inside streamed Suspense (#5171) by @brijeshb42
  • Exclude the prehydration script from client bundles (#5003) by @michaldudak
  • Reduce bundle size (#5221) by @atomiks

Toast

  • Fix remaining toast timer calculation (#5261) by @sai6855
  • Reduce bundle size (#5219) by @atomiks
  • Render content passed through the render prop in <Toast.Title>, <Toast.Description>, and <Toast.Action> (#5210) by @m2na7
  • Fix re-adding a closing toast (#5258) by @atomiks
  • Fix swipe direction locking for two-axis swipes (#5295) by @sai6855
  • Fix <Toast.Provider> prop effect ordering (#5338) by @atomiks

Toggle Group

  • Reduce bundle size (#5224) by @atomiks

Toolbar

  • Reduce bundle size (#5221) by @atomiks

Tooltip

  • Prevent <Tooltip.Root> from reopening after remounting with a reused handle (#5149) by @michaldudak

All contributors of this release in alphabetical order: @arikchakma, @atomiks, @bernardobelchior, @brijeshb42, @chuganzy, @DiegoAndai, @DreierF, @flaviendelangle, @jjenzz, @lyzno1, @m2na7, @mdm317, @michaldudak, @nami8824, @obeattie, @sai6855, @sarthakmalik0810

2026-06-18 20:04:16
base-ui

v1.6.0

General changes

  • Correct inaccurate prop JSDoc (#5036) by @atomiks
  • Update the hook value when store/arguments change (#4866) by @chuganzy
  • Restore viewport morphing after reopen for kept-mounted popups (#5010) by @atomiks
  • Fix pseudo-element bounds in dev mode (#5000) by @atomiks

Accordion

  • Fix trigger behavior bugs (#4833) by @atomiks
  • Remove region role from Accordion.Root (#4961) by @chuganzy
  • Align keyboard navigation with APG (#4965) by @chuganzy

Alert Dialog

  • Fix programmatic focus return (#4849) by @atomiks

Autocomplete

  • Keep ArrowLeft/ArrowRight on the input caret in grid mode (#4948) by @spokodev
  • Document open requirement for the inline prop (#5069) by @atomiks

Avatar

  • Fix image status edge cases (#4835) by @atomiks

Checkbox

  • Fix parent group cancellation and indeterminate state (#4941) by @atomiks
  • Ignore data-focused Field attribute when disabled (#4998) by @atomiks
  • Fix extra validate fn calls (#4911) by @mj12albert

Checkbox Group

  • Fix parent group cancellation and indeterminate state (#4941) by @atomiks
  • Fix parent checkbox with custom validate fn (#4912) by @mj12albert
  • Fix validation with multiple required checkboxes (#4958) by @atomiks
  • Forward group ids (#4997) by @atomiks

Collapsible

  • Fix trigger and panel state bugs (#4848) by @atomiks

Combobox

  • Fix chip context error (#4877) by @lyzno1
  • Keep ArrowLeft/ArrowRight on the input caret in grid mode (#4948) by @spokodev
  • Avoid re-rendering every item on each keystroke (#4964) by @flaviendelangle
  • Fix autofill and selected state edge cases (#4972) by @atomiks
  • Document open requirement for the inline prop (#5069) by @atomiks

Dialog

  • Fix confirmation return focus (#5024) by @atomiks
  • Fix programmatic focus return (#4849) by @atomiks
  • Fix positioning and viewport edge cases (#4925) by @atomiks
  • Fix non-modal focus-out close and tabindex management (#5030) by @atomiks

Drawer

  • Fix confirmation return focus (#5024) by @atomiks
  • Improve swipe dismiss drag performance (#4867) by @atomiks
  • Drive swipe gestures natively to stop per-frame re-rasterization (#4980) by @atomiks
  • Add virtual keyboard provider (#4353) by @atomiks
  • Commit swipe on primary-button release (#5057) by @atomiks

Field

  • Fix form validation bugs (#4873) by @atomiks
  • Reflect disabled Field.Item state in Field.Label (#4916) by @chuganzy
  • Reflect disabled Field.Item state in Field.Description (#4960) by @chuganzy
  • Fix valueMissing revalidation (#4995) by @atomiks
  • Fix validation bugs (#4894) by @atomiks

Fieldset

  • Fix disabled fieldset form bugs (#4890) by @atomiks

Form

  • Fix form validation bugs (#4873) by @atomiks

Menu

  • Fix submenu trigger interactions (#4892) by @atomiks
  • Open submenus on hover after a plain delay (#4990) by @atomiks
  • Fix controlled hover leave close (#4893) by @atomiks
  • Fix positioning and viewport edge cases (#4925) by @atomiks

Menubar

  • Fix vertical menu focus behavior (#4922) by @atomiks

Meter

  • Sync value text with indicator (#4904) by @atomiks

Navigation Menu

  • Preserve exit transition when controlled (#4855) by @mattrothenberg
  • Fix interaction, value, and styling-hook bugs (#4942) by @atomiks

Number Field

  • Handle unreadable clipboard paste (#4876) by @lyzno1
  • Fix committed values and keyboard stepping (#4905) by @atomiks
  • Respect Intl rounding options on blur (#4804) by @atomiks
  • Fix formatter locale cache (#4999) by @atomiks
  • Preserve numeric precision while keeping default display formatting (#5040) by @atomiks
  • Fix input and scrub edge cases (#5046) by @atomiks

OTP Field

  • 🚨 Breaking change: Unmark preview the namespace export is renamed OTPFieldPreviewOTPField and should be imported as: { OTPField } from '@base-ui/react/otp-field' (#5029) by @atomiks
  • Avoid password manager bubbles after first input (#4868) by @atomiks

Popover

  • Fix controlled hover leave close (#4893) by @atomiks
  • Fix programmatic focus return (#4849) by @atomiks
  • Fix positioning and viewport edge cases (#4925) by @atomiks
  • Fix non-modal focus-out close and tabindex management (#5030) by @atomiks

Preview Card

  • Fix controlled hover leave close (#4893) by @atomiks
  • Fix positioning and viewport edge cases (#4925) by @atomiks
  • Keep inline preview anchored while open (#4836) by @atomiks
  • Close when active trigger unmounts (#4886) by @michaldudak

Radio Group

  • Forward group ids (#4997) by @atomiks
  • Fix selection on space key press (#4930) by @chuganzy
  • Fix disabled selected form submission (#4926) by @atomiks
  • Honor canceled value changes (#4996) by @atomiks

Scroll Area

  • Fix overflow and scrolling state (#4936) by @atomiks
  • Add scrolling state to Thumb (#4982) by @aarongarciah

Select

  • Fix autofill and selected state edge cases (#4934) by @atomiks
  • Fix dirty state not clearing in multiple mode (#4971) by @atomiks
  • Skip disabled items in typeahead and fix multiple-mode serialization (#5025) by @atomiks

Slider

  • Fix extra validate fn calls (#4911) by @mj12albert
  • Fix interaction edge cases (#4937) by @atomiks
  • Fix touchend listener accumulation leak (#5070) by @atomiks

Switch

  • Fix extra validate fn calls (#4911) by @mj12albert

Tabs

  • Fix state edge cases (#4935) by @atomiks
  • Fix suspended panel activation (#4903) by @atomiks

Toast

  • Fix timer and limit edge cases (#4933) by @atomiks

Toggle

  • Fix grouped cancelation and JSDoc (#4940) by @atomiks

Toggle Group

  • Fix grouped cancelation and JSDoc (#4940) by @atomiks
  • Remove invalid aria-orientation from role="group" element (#4628) by @sernstberger
  • Fix disabled state and roving focus bugs (#4968) by @atomiks

Toolbar

  • Do not forward disabled to default toolbar button (#4967) by @mj12albert
  • Fix disabled state and roving focus bugs (#4968) by @atomiks

Tooltip

  • Fix positioning and viewport edge cases (#4925) by @atomiks
  • Fix provider delay group lifecycle (#4887) by @michaldudak
  • Reset preventUnmountOnClose on reopen (#4885) by @michaldudak
  • Close when active trigger unmounts (#4886) by @michaldudak

All contributors of this release in alphabetical order: @aarongarciah, @atomiks, @chuganzy, @flaviendelangle, @lyzno1, @mattrothenberg, @michaldudak, @mj12albert, @sernstberger, @spokodev

2026-05-19 21:22:49
base-ui

v1.5.0

General changes

  • Improve mount performance with interaction splitting, including closed popup mount performance by up to 50% and unmounting performance by up to 85% (#4661) by @atomiks
  • Use local document for virtual arrow (#4662) by @lyzno1
  • Fix macOS Safari and Firefox minimizing fullscreen when closing popups with Esc (#4695) by @arturbien
  • Drop unnecessary memoization (#4693) by @flaviendelangle
  • Do not use Math.random() in useStableCallback() (#4732) by @michaldudak
  • Fix return focus when reference disconnects (#4655) by @atomiks
  • Don't steal initial focus if focus already moved inside a popup (#4775) by @stefee

Alert Dialog

  • Fix handle defaults (#4834) by @atomiks

Autocomplete

  • Fix native FormData for popup inputs (#4725) by @lunaxislu

Checkbox

  • Submit the associated form when pressing Enter (#4713) by @michaldudak

Combobox

  • Expose clear visibility state (#4664) by @atomiks
  • Fix popup input form submit (#4687) by @atomiks
  • Preserve closeQuery when closing multiple input-inside-popup combobox (#4715) by @mj12albert
  • Fix RTL component behavior (#4840) by @atomiks
  • Ignore hidden-input changes while readonly or disabled (#4810) by @lunaxislu

Dialog

  • Consider the controlled open prop for open state detection (#4712) by @michaldudak

Drawer

  • Forward style prop in <Drawer.Viewport> (#4841) by @atomiks

Field

  • Avoid flushSync during validation (#4685) by @atomiks

Form

  • Avoid flushSync during validation (#4685) by @atomiks

Menu

  • Fix submenu pointer-events scope for keepMounted portals (#4723) by @twillhorn
  • Support <Menu.GroupLabel> in <Menu.RadioGroup> (#4826) by @nami8824
  • Consider the controlled open prop for open state detection (#4712) by @michaldudak

Navigation Menu

  • Fix RTL component behavior (#4840) by @atomiks
  • Fix keepMounted content sizing (#4817) by @atomiks

Number Field

  • Allow Persian digits in keyboard input (#4719) by @lunaxislu
  • Sync pasted input during step interactions (#4824) by @lunaxislu

OTP Field

  • Breaking change: Rename sanitizeValue() to normalizeValue() and allow composing with validation (#4717) by @atomiks
  • Avoid flushSync during validation (#4685) by @atomiks
  • Support Ctrl and Cmd shortcuts (#4606) by @atomiks
  • Fire onValueComplete() for full paste (#4690) by @atomiks
  • Fix vertical arrow slot navigation (#4844) by @atomiks
  • Ignore hidden input changes while readonly or disabled (#4806) by @lunaxislu
  • Prevent locked hidden autofill validation (#4827) by @lunaxislu
  • Fix RTL arrow navigation (#4847) by @atomiks

Popover

  • Fix RTL component behavior (#4840) by @atomiks
  • Preserve active trigger on close press (#4741) by @mj12albert
  • Consider the controlled open prop for open state detection (#4712) by @michaldudak

Preview Card

  • Consider the controlled open prop for open state detection (#4712) by @michaldudak
  • Integrate inline positioning (#2074) by @atomiks

Scroll Area

  • Fix RTL component behavior (#4840) by @atomiks

Select

  • Clear stale item text ref (#4683) by @atomiks
  • Add data-popup-side to trigger (#4671) by @mj12albert
  • Allow mouse selection without highlight (#4699) by @atomiks
  • Ignore hidden-input changes while readonly or disabled (#4810) by @lunaxislu
  • Fix nested Select requiring extra outside clicks to dismiss parent (#4820) by @mattrothenberg

Tabs

  • Fire onValueChange() for automatic tab selection (#4704) by @michaldudak

Toast

  • Re-use getElementTransform() and remove local implementation (#4749) by @sai6855
  • Fix stuck drag state on release (#4742) by @aeterno-caspian
  • Remove memoized selector (#4751) by @atomiks

Tooltip

  • Consider the controlled open prop for open state detection (#4712) by @michaldudak
  • Fix flickering when nesting tooltip inside another tooltip's trigger (#4501) by @michaldudak

All contributors of this release in alphabetical order: @aeterno-caspian, @arturbien, @atomiks, @flaviendelangle, @Janpot, @lunaxislu, @lyzno1, @mattrothenberg, @michaldudak, @mj12albert, @nami8824, @sai6855, @stefee, @twillhorn

2026-04-20 20:24:36
base-ui

v1.4.1

General changes

  • Clear highlight on pointer leave when item is clipped by scroll container (#4604) by @atomiks
  • Fix display: contents tabbability (#4642) by @atomiks
  • Fix multi-argument event handler forwarding in mergeProps (#4598) by @atomiks
  • Mark date-fns peer dependencies as optional (#4639) by @LukasTy

Navigation Menu

  • Fix stale popup size on rapid trigger hover (#4646) by @atomiks

All contributors of this release in alphabetical order: @atomiks, @LukasTy

2026-04-13 15:22:07
base-ui

v1.4.0

General changes

  • Improve render prop warning accuracy (#4324, #4363) by @atomiks
  • Fix preventBaseUIHandler runtime wrapping (#4330) by @atomiks
  • Fix Uncaught TypeError: Converting circular structure to JSON (#4452) by @Profesor08
  • Expose form prop on hidden inputs (#4352) by @atomiks
  • Add suppressHydrationWarning to hidden inputs (#4482) by @devxoul
  • Fix outside-press dismissal in a shared shadow root (#4333) by @atomiks
  • Fix Positioner not repositioning to a different trigger when reopened with keepMounted (#4407) by @mdm317
  • Lock scroll of full-width anchored modal popups with touch input (#3100) by @atomiks

Alert Dialog

  • Fix detached trigger HMR with recreated handles (#4472) by @atomiks

Autocomplete

  • Fix initial live region announcements (#4286) by @atomiks

Avatar

  • Fix flash when image is cached (#4469) by @mj12albert

Checkbox

  • Fix uncontrolled default initialization (#4535) by @atomiks
  • Prevent input state changes in readOnly mode (#4551) by @tsbehlman

Collapsible

  • Fix open state when keepMounted has no transitions (#4555) by @mj12albert

Combobox

  • Fix clicks in Chips/InputGroup areas not focusing the input or opening the popup (#4296) by @CiscoFran10
  • Fix iOS viewport settling (#4351) by @atomiks
  • Fix initial live region announcements (#4286) by @atomiks
  • Prevent scroll lock when a controlled value triggers a re-render (#4507) by @ryanrhee
  • Fix browser autofill with object values when autofill uses the label (#4560) by @mattrothenberg
  • Prevent item taps from blurring the input (#4578) by @atomiks
  • Respect rendered chips for keyboard navigation (#4572) by @atomiks

Dialog

  • Fix detached trigger HMR with recreated handles (#4472) by @atomiks

Drawer

  • Fix touch scroll in portaled popups (#4382) by @atomiks
  • Fix nested swipe cancel state (#4410) by @atomiks
  • Fix interrupted swipe dismiss cleanup (#4467) by @lunaxislu
  • Warn when a popup is missing Viewport (#4495) by @atomiks
  • Prevent dialogs from affecting nested drawer stack (#4493) by @atomiks

Field

  • Fix form error matching in <Field.Error> (#4494) by @atomiks

Menu

  • Fix SubmenuTrigger not respecting disabled state from render (#3858) by @CiscoFran10
  • Preserve dialog focus on pointer leave (#4581) by @atomiks

Navigation Menu

  • Remove invalid aria-orientation attribute (#4355) by @atomiks
  • Add generic Value typing (#4328) by @atomiks
  • Fix initial trigger switch size snap (#4327) by @atomiks
  • Fix top-level trigger pointer events blocking (#4362) by @atomiks
  • Fix reverse Shift+Tab submenu re-entry (#4464) by @atomiks
  • Fix nested inline submenu hover handoff (#4413) by @atomiks
  • Fix transition width when reopening (#4587) by @mdm317

Number Field

  • Fix format rounding error on blur (#4557) by @atomiks

OTP Field

  • Add preview OTPField component for one-time password and verification code entry (#4365) by @atomiks

Popover

  • Remove stray focus guards around trigger when modal (#4350) by @atomiks
  • Sync hover open event state (#4526) by @atomiks

Preview Card

  • Fix hover reopen race conditions across close transitions (#4446) by @arturbien

Select

  • Fix browser autofill with object values when autofill uses the label (#4560) by @mattrothenberg
  • Preserve touch exit animations (#4325) by @atomiks
  • Fix touch reopen highlight (#4356) by @atomiks
  • Fix scroll arrows stopping short of the edges (#4447) by @atomiks
  • Fix RTL-aligned popup positioning with alignItemWithTrigger (#4531) by @atomiks

Slider

  • Fix edge thumb alignment after reveal (#4354) by @atomiks
  • Remove extra TalkBack focus targets (#4242) by @atomiks
  • Fix keyboard floating-point rounding (#4548) by @atomiks
  • Skip client-only prehydration scripts (#4530) by @atomiks

Switch

  • Prevent input state changes in readOnly mode (#4551) by @tsbehlman

Tabs

  • Fix activationDirection not updating on programmatic value changes (#4347) by @LukasTy
  • Fix activation direction on first render (#4532) by @atomiks
  • Skip client-only prehydration scripts (#4530) by @atomiks

Toast

  • Keep viewport expanded while touch swiping (#4411) by @atomiks
  • Add upsert support to add method (#4440) by @atomiks
  • Fix timers not resuming after window regains focus (#4438) by @kyrregjerstad

Toggle Group

  • Fix incorrect keyboard nav on cross axis (#4488) by @mj12albert

All contributors of this release in alphabetical order: @arturbien, @atomiks, @CiscoFran10, @devxoul, @flaviendelangle, @kyrregjerstad, @LukasTy, @lunaxislu, @mattrothenberg, @mdm317, @michaldudak, @mj12albert, @Profesor08, @ryanrhee, @sai6855, @tsbehlman

2026-03-12 21:40:02
base-ui

v1.3.0

General changes

  • Warn when a component function is rendered directly (#4077) by @atomiks
  • Reset openMethod after close transition (#4128) by @atomiks
  • Fire Space activation on keydown in composite widgets (#4053) by @atomiks
  • Skip CSS-hidden items during keyboard navigation in composite widgets (#4195) by @atomiks
  • Optimize hot paths in useHover hooks and safePolygon (#4199) by @atomiks
  • Snap --anchor-width and --anchor-height to device pixel grid (#4082) by @flaviendelangle
  • Fix outside press dismissal when a component is portaled into a shadow DOM (#4230) by @dmitri-gb
  • Fix nested hoverable popups (#4206) by @dmitri-gb
  • Apply data-base-ui-inert to highest-level node (#3955) by @atomiks
  • Fix portable types (#4058) by @cgatian

Accordion

  • Add generic Value typing (#4138) by @atomiks

Autocomplete

  • Respect a null filter prop (#4117) by @atomiks
  • Add InputGroup part (#3745) by @atomiks

Avatar

  • Remove fallback transition logic and prevent premature image display (#4110) by @atomiks

Button

  • Avoid checking disabled twice in onKeyDown and onKeyUp (#4132) by @flaviendelangle

Checkbox

  • Add automatic aria-labelledby support (#4142) by @atomiks

Combobox

  • Avoid applying field attributes to input when it is inside popup (#4154) by @atomiks
  • Preserve inline input on Enter when nothing is highlighted (#4235) by @atomiks
  • Fix ARIA attributes during SSR (#4179) by @atomiks
  • Fix wrapping in virtualized grid arrow-key navigation (#4164) by @atomiks
  • Add InputGroup part (#3745) by @atomiks
  • Add support for a visually hidden close button and improve modal focus trapping (#4084) by @atomiks
  • Add Label part (#4167) by @atomiks

Context Menu

  • Ignore mouseup on non-Mac platforms (#3944) by @atomiks

Drawer

  • Breaking change: Drawer is no longer marked as preview
    Drawer is now stable and should be imported as { Drawer } from '@base-ui/react/drawer' (#4293) by @atomiks
  • Fix React 17 support (#4178) by @atomiks
  • Include border in frontmost height variable (#4202) by @atomiks
  • Improve touch selection (#4104) by @atomiks
  • Preserve cross-axis scrolling during touch gestures (#4187) by @atomiks
  • Prevent swipe dismissal when component is controlled (#4133) by @flaviendelangle
  • Add SwipeArea part (#4102) by @atomiks
  • Make data-base-ui-swipe-ignore explicit for touch interactions (#4295) by @atomiks
  • Disable inheritance for swipe CSS variables (#4099) by @atomiks

Field

  • Fix field validation when Form errors or invalid prop are present at same time (#4112) by @mj12albert

Menu

  • Prevent pointerleave from stealing focus from dialogs (#4125) by @atomiks
  • Optimize pointer-events for submenu hover interactions (#4231) by @atomiks
  • Fix closeDelay not being applied to Menu.SubmenuTrigger (#4134) by @flaviendelangle
  • Implement content transitions with Viewport (#4060) by @michaldudak

Meter

  • Fix label announcements in NVDA (#4200) by @mj12albert

Navigation Menu

  • Fix support for nested inline menus (#4198) by @atomiks
  • Fix close propagation in nested hover menus (#4285) by @atomiks
  • Close parent menus when nested link with closeOnClick is clicked (#4276) by @CiscoFran10
  • Fix duplicate aria-orientation (#4309) by @atomiks
  • Fix delayed trigger switches in Safari (#4310) by @atomiks

Number Field

  • Fix increment/decrement press reason values in onValueCommitted (#4259) by @jijiseong

Popover

  • Trap focus when <Popover.Close> is rendered inside and modal is true, and add support for a visually hidden close button (#4084) by @atomiks
  • Fix nested hoverable popups (#3798) by @flaviendelangle

Preview Card

  • Fix nested hoverable popups (#3798) by @flaviendelangle

Progress

  • Fix label announcements in NVDA (#4200) by @mj12albert

Radio Group

  • Add automatic aria-labelledby support (#4142) by @atomiks

Scroll Area

  • Fix focus trapping with a non-scrollable viewport (#4220) by @atomiks
  • Fix thumb size after remounting (#4107) by @atomiks

Select

  • Fix hidden input id fallback (#4135) by @atomiks
  • Fix Value placeholder not rendering with Record items (#4137) by @vcode-sh
  • Fire onClick during drag-to-select (#3969) by @obeattie
  • Fix items type definition for groups (#3884) by @aarongarciah
  • Fix alignItemWithTrigger fallback with browser zoom (#4292) by @atomiks
  • Add Label part (#4167) by @atomiks

Slider

  • Add Label part (#4167) by @atomiks
  • Stop committing validation on touchend (#4091) by @jijiseong

Switch

  • Add automatic aria-labelledby support (#4142) by @atomiks

Tabs

  • Re-render indicator position on tab resize (#4165) by @atomiks

Toast

  • Enable closing all toasts (#3979) by @chuganzy
  • Prevent duplicate onClose calls for ending toasts (#4280) by @chuganzy

Tooltip

  • Add closeOnClick prop (#4140) by @atomiks

All contributors of this release in alphabetical order: @aarongarciah, @atomiks, @cgatian, @chuganzy, @CiscoFran10, @dmitri-gb, @flaviendelangle, @jijiseong, @michaldudak, @mj12albert, @obeattie, @vcode-sh

2026-02-12 23:52:51
base-ui

v1.2.0

General changes

  • Do not memoize state when not needed (#3812) by @flaviendelangle
  • Support lazy element in render prop (#3856) by @oliviertassinari
  • Replace Firefox deprecated mozInputSource check for virtual click detection (#3942) by @CiscoFran10
  • Use WeakRef for previously focused elements (#3916) by @atomiks
  • Fix page scroll jump when input has focus on unmount in Safari (#3925) by @atomiks
  • Fix flash at origin before positioning completes in Preact (#3975) by @OliverSpeir
  • Reduce style recalculation with classic scrollbars (#3854) by @mdm317
  • Fix event handling in useEnhancedClickHandler (#3981) by @sai6855

Autocomplete

  • Fix filter method's useMemo dependency (#3862) by @ZeeshanTamboli
  • Fix Autocomplete not using its internal filter method when mode is list (#3936) by @ZeeshanTamboli
  • Remove unnecessary double stringification of item in filtering logic (#3945) by @ZeeshanTamboli
  • Add useFilteredItems hook (#3732) by @guisehn
  • Fix popup closing on iOS VoiceOver (#3859) by @atomiks
  • Remove aria-readonly prop from Clear and Popup components when readOnly (#3907) by @markocupic024

Avatar

  • Add transition attributes (#3939) by @atomiks

Button

  • Capture component stack for nativeButton error message (#3861) by @atomiks

Checkbox

  • Cleanup disabled state tracking (#3913) by @atomiks
  • Preserve modifier key properties in the change event (#3935) by @mj12albert
  • Allow exit animations on <Checkbox.Indicator> when keepMounted={false} (#3939) by @atomiks

Combobox

  • Fix the type of the ref of the Icon part (#3796) by @flaviendelangle
  • Avoid clearing selected value if item is not present in items array (#3824) by @atomiks
  • Fix highlight change reason in ChipRemove (#3980) by @sai6855
  • Keep highlight on last deselect (#3923) by @atomiks
  • Fix inline filtering after selection in single mode (#3978) by @atomiks
  • Clear highlight on inline blur when inline (#3973) by @atomiks
  • Prevent opening popup on autofill change (#3924) by @atomiks
  • Distinguish input-press from trigger-press in onOpenChange reason (#4015) by @jijiseong
  • Fix async items while popup is open (#4034) by @atomiks
  • Prevent Chip from receiving focus when disabled (#4044) by @jijiseong
  • Add useFilteredItems hook (#3732) by @guisehn
  • Fix popup closing on iOS VoiceOver (#3859) by @atomiks
  • Remove aria-readonly prop from Clear and Popup components when readOnly (#3907) by @markocupic024
  • Fix onClick Item type (#3964) by @atomiks
  • Use reactive domReferenceElement subscriptions (#4017) by @atomiks
  • Add autoComplete prop for explicit browser autofill support (#4005) by @mattrothenberg
  • Fix inconsistent isItemEqualToValue argument order (#4056) by @atomiks

Context Menu

  • Fix disabled prop not working (#3806) by @arturbien
  • Fix explicit collisionAvoidance with side: 'flip' not working (#3877) by @obeattie

Drawer

  • Create new Drawer / Sheet component (#3680) by @atomiks

Field

  • Prevent re-renders when Field.Control is uncontrolled (#3820) by @atomiks
  • Fix autofocus in SSR environments (#3871) by @mj12albert
  • Fix max update depth loop when using <React.Activity> (#3931) by @atomiks
  • Add transition attributes (#3939) by @atomiks

Input

  • Fix autofocus in SSR environments (#3871) by @mj12albert
  • Update ref type to HTMLElement (#3866) by @mj12albert

Menu

  • Fix onClick Item type (#3964) by @atomiks
  • Fix submenu stuck glitch (#3783) by @atomiks
  • Fix race conditions (#3821) by @atomiks
  • Add <Menu.LinkItem> part (#3400) by @mj12albert

Navigation Menu

  • Fix forwarded ref types (#3775) by @CrawlerCode
  • Add keepMounted prop to Content part (#3794) by @atomiks

Number Field

  • Fix click handlers on ScrubArea (#3827) by @mj12albert
  • Remove event.isTrusted (#3920) by @atomiks
  • Stop repeat change at bounds (#3915) by @atomiks
  • Add allowOutOfRange prop (#3919) by @atomiks
  • Fix pen pointer handling (#3917) by @atomiks
  • Fix missing field state data attributes (#3909) by @mj12albert

Popover

  • Fix missing aria-owns element (#3959) by @atomiks
  • Use reactive domReferenceElement subscriptions (#4017) by @atomiks
  • Fix broken scale transition with detached triggers (#3810) by @michaldudak

Preview Card

  • Fix broken scale transition with detached triggers (#3810) by @michaldudak

Progress

  • De-duplicate formatValue function (#3805) by @sai6855

Radio Group

  • Preserve modifier key properties in the change event (#3935) by @mj12albert
  • Allow exit animations on <Radio.Indicator> when keepMounted={false} (#3939) by @atomiks
  • Rely on individual radio hidden inputs (#3826) by @atomiks
  • Add generic Value typing to Radio (#4033) by @atomiks

Scroll Area

  • Add data-scrolling state attribute to Root and Viewport parts (#3823) by @arturbien
  • Fix overflow edge rounding (#3888) by @atomiks

Select

  • Add finalFocus prop (#3785) by @markocupic024
  • Fix alignItemWithTrigger transform with CSS animations (#3831) by @atomiks
  • Fix highlightItemOnHover not being respected (#3868) by @sarthakmalik0810
  • Reset typeahead on external blur (#2618) by @antonfrolovsky
  • Fix scroll height loop (#3795) by @atomiks
  • Add autoComplete prop for explicit browser autofill support (#4005) by @mattrothenberg
  • Fix inconsistent isItemEqualToValue argument order (#4056) by @atomiks

Slider

  • Fix missing field state data attributes (#3909) by @mj12albert
  • Fix change event cloning (#3960) by @atomiks

Switch

  • Preserve modifier key properties in the change event (#3935) by @mj12albert

Tabs

  • Add transition attributes to <Tabs.Panel> part (#3880) by @atomiks

Toast

  • Make useToastManager and createToastManager generic functions (#3882) by @solastley
  • Prevent dismissed promise toast from reopening on updates (#4040) by @atomiks
  • Introduce a store (#3464) by @flaviendelangle

Toggle

  • Improve type safety and inference (#3173) by @michaelhazan

Toggle Group

  • Type value as string to match Toggle (#3770) by @markocupic024
  • Enable Home/End key navigation (#3971) by @jijiseong
  • Improve type safety and inference (#3173) by @michaelhazan

Tooltip

  • Prevent opening when focusing a disabled Trigger (#3902) by @michaldudak
  • Fix broken scale transition with detached triggers (#3810) by @michaldudak
  • Fix disabled prop on Triggers (#4049) by @michaldudak

All contributors of this release in alphabetical order: @antonfrolovsky, @arturbien, @atomiks, @CiscoFran10, @CrawlerCode, @flaviendelangle, @guisehn, @jijiseong, @LukasTy, @markocupic024, @mattrothenberg, @mdm317, @michaelhazan, @michaldudak, @mj12albert, @obeattie, @OliverSpeir, @oliviertassinari, @sai6855, @sarthakmalik0810, @solastley, @ZeeshanTamboli

2026-01-16 00:09:05
base-ui

v1.1.0

General changes

  • Fix onOpenChangeComplete(true) timing (#3558) by @atomiks
  • Fix touch openMethod when tapping outside element bounds on Safari (#3541) by @atomiks
  • Fix visually hidden input styles across form components (#3606) by @atomiks
  • Fix click and drags outside a nested popup component from closing its parents (#3571) by @atomiks
  • Fix forwarded ref types (#3638) by @atomiks
  • Fix detached trigger remounting (#3724) by @atomiks
  • Include ref in BaseUIComponentProps (#2813) by @atomiks
  • Remove duplicated disabled prop (#3650) by @seongminn
  • Allow actionsRef to be null (#3682) by @mj12albert

Accordion

  • Fix keyboard navigation with non-interactive trigger elements (#3684) by @ZeeshanTamboli

Autocomplete

  • Add data-popup-side and data-list-empty state attributes to <Autocomplete.Trigger> (#3491) by @atomiks
  • Add loopFocus prop (#3592) by @atomiks
  • Fix hidden input id and required props (#3640) by @atomiks

Button

  • Remove discriminated props union (#3643) by @atomiks

Checkbox

  • Fix hidden input id and required props (#3640) by @atomiks

Combobox

  • Add data-popup-side and data-list-empty state attributes to <Combobox.Trigger> (#3491) by @atomiks
  • Add loopFocus prop (#3592) by @atomiks
  • Add toolbar role to <Combobox.Chips> to prevent NVDA from entering browse mode (#3647) by @atomiks
  • Add placeholder prop to <Combobox.Value> (#3604) by @atomiks
  • Fix controlled value prop when items change (#3607) by @atomiks
  • Fix multiple values label resolution in <Combobox.Value> (#3314) by @atomiks
  • Forward root id to visible form element (#3722) by @atomiks
  • Do not trigger Field onBlur handlers when opening popup (#3609) by @atomiks

Context Menu

  • Avoid creating sibling elements next to trigger (#3645) by @atomiks

CSP Provider

  • Add CSPProvider (#3553) by @atomiks

Dialog

  • Fix Maximum update depth exceeded error with Suspense (#3700) by @michaldudak
  • Fix <Dialog.Title> forwardedRef type (#3736) by @ZeeshanTamboli

Field

  • Add actionsRef prop (#3395) by @mj12albert
  • Add nativeLabel prop to <Field.Label> (#3723) by @atomiks
  • Add missing type export (#3702) by @DiegoAndai

Form

  • Add actionsRef prop (#3395) by @mj12albert

Menu

  • Fix focus guard handling (#3654) by @atomiks
  • Avoid disabling modality on click after hover-open (#3455) by @atomiks

Menubar

  • Fix submenu outside-press dismiss on touch (#3556) by @atomiks

Number Field

  • Fix Field data-focused state (#3563) by @atomiks
  • Fix hidden input focus on submit (#3581) by @atomiks

Popover

  • Fix popup auto resize glitches (#3591) by @atomiks
  • Fix focus guard handling (#3654) by @atomiks
  • Prevent disabling focus management when clicking trigger before hover delay completes (#3572) by @atomiks
  • Refactor popup auto resize logic. It is no longer necessary to specify --positioner-width/--positioner-height CSS variables on <Popover.Positioner> when using detached triggers unless the Viewport part has been added to the JSX. (#3652) by @atomiks

Preview Card

  • Support detached triggers (#3566) by @michaldudak and @atomiks

Radio Group

  • Fix value type (#3582) by @atomiks
  • Fix hidden input id and required props (#3640) by @atomiks

Scroll Area

  • Perf improvements (#3536) by @atomiks

Select

  • Add placeholder prop to <Select.Value> (#3604) by @atomiks
  • Fix support for transform animations when alignItemWithTrigger is active (#3532) by @atomiks
  • Fix support for max-height popup style when alignItemWithTrigger is active (#3573) by @atomiks
  • Fix data-filled state in multiple mode (#3608) by @atomiks
  • Fix highlight being removed on popup mouseout when highlightItemOnHover is disabled (#3492) by @atomiks
  • Fix support for individual transform animations when alignItemWithTrigger is active (#3637) by @atomiks
  • Fix multiple values label resolution in <Select.Value> (#3314) by @atomiks
  • Forward root id to visible form element (#3722) by @atomiks
  • Do not trigger Field onBlur handlers when opening popup (#3609) by @atomiks

Slider

  • Fix onValueCommitted not called for range sliders (#3600) by @mj12albert

Switch

  • Add value prop (#3676) by @Grafikart
  • Fix hidden input id and required props (#3640) by @atomiks

Toast

  • Fix timers not being rescheduled when updated (#3564) by @atomiks

Tooltip

  • Fix popup auto resize glitches (#3591) by @atomiks
  • Fix trackCursorAxis handling (#3679) by @atomiks
  • Refactor popup auto resize logic. It is no longer necessary to specify --positioner-width/--positioner-height CSS variables on <Tooltip.Positioner> when using detached triggers unless the Viewport part has been added to the JSX. (#3652) by @atomiks

mergeProps

  • Make mergeProps public (#3642) by @michaldudak and @LukasTy

useRender

  • Export missing types (#3565) by @michaldudak

All contributors of this release in alphabetical order: @albertdugba, @atomiks, @brijeshb42, @chuganzy, @colmtuite, @dav-is, @DiegoAndai, @Grafikart, @Janpot, @LukasTy, @michaldudak, @mj12albert, @oliviertassinari, @seongminn, @updbqn, @ZeeshanTamboli

2025-12-11 23:56:19
base-ui

v1.0.0

General changes

  • Breaking change: Rename packages to use the @base-ui org. The package name has changed from @base-ui-components/react to @base-ui/react. (#3462) by @mnajdova

Combobox

  • Respect itemToStringValue for onFormSubmit (#3441) by @atomiks
  • Add null as an option for the value prop (#3488) by @mnajdova

Menu

  • Fix submenu opens with 0 delay (#3459) by @atomiks
  • Fix focus not returning to trigger on Esc while pointer rests on popup (#3482) by @atomiks
  • Fix always null open method (#3486) by @atomiks
  • Allow side axis fallback for submenus by default (#3470) by @atomiks

Navigation Menu

  • Fix mount transitions on Positioner in Firefox (#3424) by @atomiks

Number Field

  • Fix multiple scrub area support (#3471) by @atomiks

Popover

  • Fix mount transitions on Positioner in Firefox (#3424) by @atomiks
  • Fix skipped viewport transitions (#3453) by @atomiks

Select

  • Respect itemToStringValue for onFormSubmit (#3441) by @atomiks
  • Add null as an option for the value prop (#3488) by @mnajdova

Tabs

  • Fix indicator positioning in transformed containers (#3439) by @atomiks
  • Do not initially select a disabled tab (#3475) by @michaldudak

Toast

  • Fix flushSync dev error when toast is added (#3443) by @atomiks
  • Fix <Toast.Close> emitting aria-hidden warning on click (#3469) by @atomiks

Toggle Group

  • More permissive towards falsy toggle values (#3477) by @mj12albert

Tooltip

  • Fix mount transitions on Positioner in Firefox (#3424) by @atomiks
  • Fix ignored "modal" setting in Popovers experiment (#3474) by @michaldudak
  • Fix shared tooltip closing with trigger gaps (#3452) by @atomiks
  • Fix skipped viewport transitions (#3453) by @atomiks

All contributors of this release in alphabetical order: @atomiks, @LukasTy, @michaldudak, @mj12albert, @mnajdova, @oliviertassinari, @pondorasti, @romgrk, @ZeeshanTamboli

2025-12-04 19:39:05
base-ui

v1.0.0-rc.0

General changes

  • Fix missing 'use client' directives (#3408) by @atomiks

Autocomplete

  • Fix keepHighlight focus sync (#3399) by @atomiks

Checkbox

  • Breaking change: Match native unchecked state in form submission. The Checkbox will not submit the "off" value with a form when unchecked anymore, unless the new uncheckedValue prop is set. (#3406) by @atomiks

Collapsible

  • Remove render={null} (#3407) by @mj12albert

Combobox

  • Breaking change: Removed the keepHighlight prop (#3377) by @atomiks

Dialog

  • Close when pressing focusable element outside (#3380) by @atomiks
  • Fix closing after pointer lock exit in Firefox (#3379) by @atomiks

Menu

  • Add highlightItemOnHover prop (#3377) by @atomiks
  • Do not import client components from MenuStore (#3409) by @michaldudak

Number Field

  • Ensure hidden input participates in form validation (#3374) by @atomiks
  • Improve symbol replacement logic (#3376) by @atomiks
  • Fix fractional step snapping (#3375) by @atomiks
  • Fix parsing numbers with Swiss locale (#3361) by @michaldudak
  • Fix pointer lock release when soft clicking in Firefox (#3378) by @atomiks

Popover

  • Close when pressing focusable element outside (#3380) by @atomiks
  • Fix modal backdrop on touch (#3383) by @atomiks
  • Fix popover glitching when flipped (#3364) by @michaldudak

Select

  • Add highlightItemOnHover prop (#3377) by @atomiks

Switch

  • Breaking change: Match native off state in form submission. The Switch will not submit the "off" value with a form when unchecked anymore, unless the new uncheckedValue prop is set. (#3406) by @atomiks

Tabs

  • Breaking change: Fix Panel keepMounted behavior. The value prop is now required on <Tabs.Tab> and <Tabs.Panel> parts. (#3372) by @atomiks

Toast

  • Recalculate content height when layout size is fixed (#3359) by @atomiks
  • Fix multiple swipe directions on same axis (#3392) by @mj12albert

Tooltip

  • Improve contained triggers performance (#3385) by @michaldudak

All contributors of this release in alphabetical order: @atomiks, @michaldudak, @mj12albert, @oliviertassinari, @pondorasti, @romgrk