ref prop to all components (#1116)Popover.Panel components (#1153)Tab component (#1155)hover scroll issue in Listbox, Combobox and Menu components (#1161)Listbox, Combobox and Menu actions (#1168)<Transition> flickering issue (#1118)appear prop on the <Transition> component works regardless of multiple rerenders (#1179)Combobox.Input when the value gets reset (#1181)beforeEnter callback on the <Transition> component caused by SSR (#1183)item/option index on Listbox, Combobox and Menu components (#1184)Tab on mouseup (#1192)focus() from Listbox.Option (#1218)ownerDocument instead of document (#1158)Tab and Dialog components (#1231)Combobox.Input value (#1248)Popover.Button (#1263)active option in the Listbox and Combobox components (#1264)Dialog component (#1268)Tab component (#1272)Combobox (#1279, #1281)RadioGroup, Switch and Combobox components (#1285)Dialog (#1360)Listbox and Combobox components (#1243, #1355)Combobox (#1295)Dialog.Panel to resolve issues when scrolling long dialogs that use Dialog.Overlay (#1333)Dialog.Overlay to Dialog.PanelIn previous versions of Headless UI, closing a dialog was handled by a click handler that lived on the Dialog.Overlay component, so as long as your overlay was rendered behind your panel, clicking outside the panel would close the dialog.
This created an issue with scrollable dialogs, because it became easy to accidentally position your overlay on top of the scrollbar, which made it impossible to click the scrollbar without closing the dialog. You also couldn't scroll the dialog when your mouse was hovering over the overlay — only when your mouse was hovering over the actual panel.
We've fixed this in Headless UI v1.6 by adding a dedicated Dialog.Panel component, and changing how "click outside" is handled. Now, if you're using a Dialog.Panel, the dialog is closed any time you click any element outside of it, rather than closing only when a Dialog.Overlay is explicitly clicked.
If you're using Dialog.Overlay and not using Dialog.Panel, everything will continue to work exactly as it did before (including the bug I described above) to preserve backwards compatibility, but we highly encourage you to migrate to using Dialog.Panel, and to stop using Dialog.Overlay, instead using a simple div element:
<Dialog
open={isOpen}
onClose={closeModal}
className="fixed inset-0 flex items-center justify-center ..."
>
- <Dialog.Overlay className="fixed inset-0 bg-black/25" />
+ <div className="fixed inset-0 bg-black/25" />
- <div className="bg-white shadow-xl rounded-2xl ...">
+ <Dialog.Panel className="bg-white shadow-xl rounded-2xl ...">
<Dialog.Title>Payment successful</Dialog.Title>
{/* ... */}
- </div>
+ </Dialog.Panel>
</Dialog>
Read through the updated Dialog documentation for more examples of using Dialog.Panel.
Listbox and ComboboxIf you have been using the insiders build for the new multiple value support for the Listbox and/or Combobox component, then you will have to add a new multiple prop to those components to tell the component that you are using multiple values. Previously this was automatically detected based on whether you were passing an array to the value prop or not.
- <Listbox value={selectedPeople} onChange={setSelectedPeople} />
+ <Listbox value={selectedPeople} onChange={setSelectedPeople} multiple />
Fetched March 30, 2026