releases.shpreview
Tailwind CSS/Headless UI

Headless UI

$npx -y @buildinternet/releases show headless-ui
Mon
Wed
Fri
AprMayJunJulAugSepOctNovDecJanFebMarApr
Less
More
Releases1Avg0/wkVersions@headlessui/react@v2.2.10
Aug 23, 2024

Fixed

  • Ensure Transition component state doesn't change when it becomes hidden (#3372)
  • Fix closing components using the transition prop, and after scrolling the page (#3407)
  • Ensure all client components are marked correctly to avoid a crash with React 19 and Turbopack (#3429)
Jul 5, 2024

Fixed

  • Fix prematurely added anchoring styles on ListboxOptions (#3337)
  • Ensure unmount on Dialog works in combination with the transition prop on DialogBackdrop and DialogPanel components (#3352)
  • Fix crash in Combobox component when in virtual mode when options are empty (#3356)
  • Fix hanging tests when using anchor prop (#3357)
  • Fix transition and focus prop combination for PopoverPanel component (#3361)
  • Fix outside click in nested portalled Popover components (#3362)
  • Fix restoring focus to correct element when closing Dialog component (#3365)
  • Fix flushSync warning for Combobox component with immediate prop enabled (#3366)
Jun 26, 2024

Fixed

  • Fix issues spreading omitted props onto components (#3313)
  • Fix initial anchor="selection" positioning (#3324)
  • Fix render prop in ComboboxOptions to use any instead of unknown (#3327)
  • Fix incorrect Transition boundary for Dialog component (#3331)
Jun 21, 2024

We just released Headless UI v2.1 for React, which dramatically simplifies our transition APIs and adds support for rendering multiple dialogs as siblings. See our announcement blog to learn more.

Changelog

Added

  • Add ability to render multiple Dialog components at once (without nesting them) (#3242)
  • Add new data-attribute-based transition API (#3273, #3285, #3307, #3309, #3312)
  • Add DialogBackdrop component (#3307, #3310)
  • Add PopoverBackdrop component to replace PopoverOverlay (#3308)

Fixed

  • Keep Combobox open when clicking scrollbar in ComboboxOptions (#3249)
  • Ensure ComboboxInput does not sync with current value while typing (#3259)
  • Fix visual jitter in Combobox component when using native scrollbar (#3190)
  • Improve UX by freezing ComboboxOptions while closing (#3304)
  • Merge incoming style prop on ComboboxOptions, ListboxOptions, MenuItems, and PopoverPanel components (#3250)
  • Prevent focus on Checkbox when it is disabled (#3251)
  • Use useId instead of React internals (for React 19 compatibility) (#3254)
  • Cancel outside click behavior on touch devices when scrolling (#3266)
  • Correctly apply conditional classes when using Transition and TransitionChild components (#3303)

Changed

  • Allow using the Tab and Shift+Tab keys when the Listbox component is open (#3284)
May 29, 2024

Fixed

  • Improve CJS types (#2880)
  • Improve ESM types (#3051)
May 24, 2024

Fixed

  • [internal] Don’t set a focus fallback for Dialog’s in demo mode (#3194)
  • Ensure page doesn't scroll down when pressing Escape to close the Dialog component (#3218)
  • Fix crash when toggling between virtual and non-virtual mode in Combobox component (#3236)
  • Ensure tabbing to a portalled PopoverPanel component moves focus inside (without using PortalGroup) (#3239)
  • Only handle form reset when defaultValue is used (#3240)

Deprecated

  • Mark SwitchGroup as deprecated, prefer Field instead (#3232)

Changed

  • Use native fieldset instead of div by default for Fieldset component (#3237)
May 8, 2024

Fixed

  • Don’t cancel touchmove on input elements inside a dialog (#3166)
  • Ensure clicking a ComboboxOption after filtering the options, correctly triggers a change (#3180)
May 7, 2024

Fixed

  • Make sure disabling demo mode on Combobox works (#3182)

Fixed

  • Improve performance of internal useInertOthers hook (#3181)
May 6, 2024

Fixed

  • Remove accidental deprecation comments on DialogPanel and DialogTitle (#3176)

We just released Headless UI v2.0 for React which includes a ton of new stuff:

  • Built-in anchor positioning — using Floating UI, components like Menu, Listbox, and more can now automatically position their popovers to be anchored to their trigger, adapting as needed to changes in the viewport.
  • Headless checkbox component — we've added a headless Checkbox component to complement our existing RadioGroup component, making it easy to build totally custom checkbox controls.
  • HTML form components — we've added Input, Select, Textarea, Label, Description, Fieldset, and Legend components that handle all of the ID generation and aria-* attribute mapping you need to do to connect form fields together.
  • Improved hover and focus-visible detection — using hooks from the awesome React Aria library under the hood, Headless UI now adds smarter data-hover and data-focus attributes to your controls that behave more consistently across different devices than the native pseudo-classes.
  • Combobox list virtualization — the Combobox component can now handle giant lists of options with no performance issues.

Changelog

Added

  • Add new Checkbox component (#2887, #2962)
  • Add new Button component (#2887)
  • Add new Input component (#2887, #2902, #2940)
  • Add new Textarea component (#2887, #2902, #2940)
  • Add new Select component (#2887, #2902)
  • Add new Fieldset and Legend components (#2887)
  • Add new Field, Label, Description components (#2887, #2941)
  • Add new MenuSection, MenuHeading, and MenuSeparator components (#2887)
  • Add new ListboxSelectedOption component (#2887)
  • Add new DataInteractive component (#2887)
  • Add new CloseButton component and useClose hook (#3096)
  • Add new anchor, modal, and portal props to Combobox, Listbox, Menu and Popover components (#2887, #3075, #3097, #3111, #3115, #3121, #3124, #3133, #3138, #3148, #3152, #3154, #3157)
  • Add new autoFocus prop to focusable components (#2887)
  • Add new virtual prop to Combobox component (#2779, #3128, #3160, #3161, #3163)
  • Add new onClose prop to Combobox component (#3122)
  • Add new immediate prop to Combobox for immediately opening the Combobox when the input receives focus (#2686)
  • Add new --button-width CSS variable on the ListboxOptions, MenuItems, and PopoverPanel components (#2887, #3058)
  • Add new --input-width and --button-width CSS variables on the ComboboxOptions component (#3057)
  • Add new data-* attributes as an alternative to the existing data-headlessui-state attribute (#2887, #3035, #3061)

Fixed

  • Fix scroll-locking on iOS (#2891)
  • Fix cancellation of events when using disabled or aria-disabled attributes (#2890)
  • Fix unnecessary execution of the displayValue callback in ComboboxInput component (#3048)
  • Fix types for multiple prop in Combobox component (#3099)
  • Fix focus handling in ComboboxInput component (#3065, #3073)
  • Fix enter transitions in Transition component (#3074)
  • Fix focus handling in ListboxOptions and MenuItems components (#3112)
  • Fix horizontal scrolling inside the Dialog component (#2889)

Changed

  • Require React 18 (#2887, #3092, #3131)
  • Always render hidden form input fields for Checkbox, Switch and RadioGroup components (#3095)
  • Deprecate the RadioGroup.Option component in favor of new Radio component (#2887)
  • Deprecate the active prop in favor of new focus prop (#2887)
  • Dialog is now focused by default instead of the first focusable element (#2887)
  • Change default tags for ListboxOptions, ListboxOption, ComboboxOptions, ComboboxOption, and TabGroup components (#3109)
  • Change default tag from div to Fragment on Transition components (#3110, #3147)
  • Allow Combobox component to have null value (#3064, #3100)
  • Attempt form submission when pressing enter on the ListboxButton component (#2972)
  • Deprecate the entered prop on the Transition component (#3089)
  • Add frozen value to ComboboxOptions component (#3126)
<h2 id="upgrading-from-v1">Upgrading from v1</h2>

Update dependencies

Install the latest version of the package via npm:

npm install @headlessui/react@latest

Default element changes

The default rendered element has changed for a number of components in v2.0:

Componentv1.x elementv2.0 element
TransitiondivFragment
TransitionChilddivFragment
ListboxOptionsuldiv
ListboxOptionlidiv
ComboboxOptionsuldiv
ComboboxOptionlidiv
TabGroupFragmentdiv

If you are using any of these components without the as prop, you'll need to add the as prop and render the component with the element you need:

- <Transition ...>
+ <Transition as="div" ...>

Comboboxes now always support empty values

Previously the Combobox component required an option to always be set, and you could opt out of this behavior using the nullable prop. In v2.0 comboboxes support empty values by default so you can remove this prop:

- <Combobox value={selected} onChange={setSelected} nullable>
+ <Combobox value={selected} onChange={setSelected}>

If you'd like to keep the previous behavior, update your onChange callback to only set the selected value if an option has actually been selected:

 <Combobox
   value={selected}
-  onChange={setSelected}
+  onChange={(newValue) => setSelected((oldValue) => newValue ?? oldValue)}
   onClose={() => setQuery('')}
 >

Dialogs no longer require a focusable child

Previously the Dialog component would automatically focus the first focusable child on open. This meant that you had to have at least one focusable element within your dialog, otherwise you would see a warning in your console.

In v2.0 that is no longer the case and the dialog's root element is focused instead on open.

If you'd like a child element to receive focus when your dialog is opened, you can add the autoFocus prop to any Headless UI form control:

 <Dialog>
   <DialogPanel>
-    <Listbox ... />
+    <Listbox autoFocus ... />
   </DialogPanel>
 </Dialog>

For non-Headless UI components, you can add the data-autofocus attribute to any focusable element:

 <Dialog>
   <DialogPanel>
-    <button>...</button>
+    <button data-autofocus>...</button>
   </DialogPanel>
 </Dialog>

Dropdown components are now modal by default

The Menu, Combobox, and Listbox dropdowns are now rendered modal by default. When the dropdown is open the page is scroll-locked and all other page content is made inert.

While this is generally recommended behavior for these components, you can disable this using the modal prop:

- <ComboboxOptions ...>
+ <ComboboxOptions modal={false} ...>

Dialog.Overlay and Dialog.Backdrop components removed

In Headless UI v1.6 we deprecated the Dialog.Overlay and Dialog.Backdrop components. These have now been removed in v2.0.

If you're using either of these components, you can update your app to use the new DialogPanel approach:

  <Dialog>
-    <Dialog.Overlay className="..." />
+    <div className="..." />
+    <DialogPanel>
       {/* ... */}
+    </DialogPanel>
   </Dialog>

Deprecated component dot-notation

The previous component dot-notation has been deprecated in favor of using explicit imports for each individual component. This is to improve compatibility with RSC (React Server Components) and tree-shaking.

We recommend updating to this new API:

- import { Menu } from '@headlessui/react'
+ import { Menu, MenuButton, MenuItems, MenuItem } from '@headlessui/react'

  function Example() {
    return (
      <Menu>
-       <Menu.Button>My account</Menu.Button>
-       <Menu.Items>
-         <Menu.Item><a href="/settings">Settings</a></Menu.Item>
-         <Menu.Item><a href="/support">Support</a></Menu.Item>
-         <Menu.Item><a href="/license">License</a></Menu.Item>
-       </Menu.Items>
+       <MenuButton>My account</MenuButton>
+       <MenuItems>
+         <MenuItem><a href="/settings">Settings</a></MenuItem>
+         <MenuItem><a href="/support">Support</a></MenuItem>
+         <MenuItem><a href="/license">License</a></MenuItem>
+       </MenuItems>
      </Menu>
    )
  }

Deprecated component-specific label and description components

With the addition of the multi-purpose Field, Label and Description components in v2, we've deprecated the component-specific versions.

v1.x componentv2.0 replacement
Combobox.LabelLabel
Dialog.DescriptionDescription
Listbox.LabelLabel
RadioGroup.DescriptionDescription
RadioGroup.LabelLabel
Switch.DescriptionDescription
Switch.GroupField
Switch.LabelLabel

We recommend updating to these new components:

- import { Combobox } from '@headlessui/react'
+ import { Combobox, ComboboxInput, ComboboxOptions, Field, Label } from '@headlessui/react'

  function Example() {
    return (
-     <Combobox>
-       <Combobox.Label>Assignee:</Combobox.Label>
-       <Combobox.Input />
-       <Combobox.Options>{/* ... */}</Combobox.Options>
-     </Combobox>
+     <Field>
+       <Label>Assignee:</Label>
+       <Combobox>
+         <ComboboxInput />
+         <ComboboxOptions>{/* ... */}</ComboboxOptions>
+       </Combobox>
+     <Field>
    )
  }

Deprecated RadioGroup.Option component

We've deprecated the RadioGroup.Option in favor of the more terse Radio component.

We recommend updating to this new component:

  <RadioGroup>
-   <RadioGroup.Option>{*/ ...*/}</RadioGroup.Option>
+   <Radio>{*/ ...*/}</Radio>
  </RadioGroup>

We've also changed the default tag from div to span.

Deprecated active prop in favor of focus

We've deprecated the active prop in favor of the new focus prop on the ComboboxOption, ListboxOption, ListboxOption, MenuItem, MenuItem, RadioOption, and RadioOption components.

We recommend updating to this new prop:

  <MenuItem >
-   {({ active }) => (
+   {({ focus }) => (
      {/* ... */}    
    )}
  </MenuItem>

Deprecated @headlessui/tailwindcss package

With the availability of the new data-* attributes in v2.0, we've deprecated the @headlessui/tailwindcss package.

We recommend updating to use the new data-* attributes instead. Start by removing this package:

npm remove @headlessui/tailwindcss

Next, replace the ui-* class modifiers with data-[*] modifiers:

  <MenuItem
    as="a"
    href="#"
-   className="ui-active:bg-blue-500 ui-active:text-white"
+   className="data-[active]:bg-blue-500 data-[active]:text-white"
  >
    {*/ ...*/}
  </MenuItem>
Apr 26, 2024

Fixed

  • Prevent closing the Combobox component when clicking inside the scrollbar area (#3104)
  • Don’t unmount portal targets used by other portals (#3144)
Apr 15, 2024

Fixed

  • Make sure panels re-register when IDs are calculated in React < 18 (#2883)
  • Expose disabled state on Tab component (#2918)
  • Prevent default behaviour when clicking outside of a Dialog.Panel (#2919)
  • Add hidden attribute to internal Hidden component when the Features.Hidden feature is used (#2955)
  • Allow setting custom tabIndex on the Switch component (#2966)
  • Forward disabled state to hidden inputs in form-like components (#3004)
  • Respect selectedIndex for controlled Tab components (#3037)

Fixed

  • Expose disabled state on Tab component (#2918)
  • Prevent default behaviour when clicking outside of a DialogPanel (#2919)
  • Don’t override explicit disabled prop for components inside MenuItem (#2929)
  • Add hidden attribute to internal Hidden component when the Features.Hidden feature is used (#2955)
  • Allow setting custom tabIndex on the Switch component (#2966)
  • Forward disabled state to hidden inputs in form-like components (#3004)
  • Respect selectedIndex for controlled Tab components (#3037)
Feb 7, 2024
  • Fix Combobox activeOption render prop (#2973)
Feb 2, 2024

Added

  • Allow users customize ID generation (#2959)
Jan 8, 2024

Fixed

  • Don't call <Dialog>'s onClose twice on mobile devices (#2690)
  • Fix Portal SSR hydration mismatches (#2700)
  • Ensure hidden TabPanel components are hidden from the accessibility tree (#2708)
  • Add support for role="alertdialog" to <Dialog> component (#2709)
  • Ensure blurring the ComboboxInput component closes the Combobox (#2712)
  • Allow <button> to be in nested components in <PopoverButton> (#2715)
  • Don't overwrite user-defined template refs when rendering (#2720)
  • Fix missing data-headlessui-state attribute when as="template" (#2787)
  • Fix VoiceOver bug for Listbox component in Chrome (#2824)
  • Fix outside click detection when component is mounted in the Shadow DOM (6846231)
  • Fix CJS types (#2880)
  • Fix error when transition classes contain new lines (#2871)

Fixed

  • Don't call <Dialog>'s onClose twice on mobile devices (#2690)
  • Lazily resolve default containers in <Dialog> (#2697)
  • Ensure hidden Tab.Panel components are hidden from the accessibility tree (#2708)
  • Add support for role="alertdialog" to <Dialog> component (#2709)
  • Ensure blurring the Combobox.Input component closes the Combobox (#2712)
  • Allow changes to the className prop when the <Transition /> component is currently not transitioning (#2722)
  • Export (internal-only) component interfaces for TypeScript compiler (#2313)
  • Fix infinite render-loop for <Disclosure.Panel> and <Popover.Panel> when as={Fragment} (#2760)
  • Fix VoiceOver bug for Listbox component in Chrome (#2824)
  • Fix outside click detection when component is mounted in the Shadow DOM (#2866)
  • Fix CJS types (#2880)
  • Fix error when transition classes contain new lines (#2871)
  • Improve iOS locking (7721aca)
Jan 3, 2024

Fixed

  • Ensure Input, Select and Textarea expose Ref related types (#2902)
Dec 21, 2023

Fixed

  • Further fine tune scroll locking on iOS (#2891)
Latest
@headlessui/react@v2.2.10
Tracking Since
Sep 24, 2020
Last fetched Apr 18, 2026