🐛 Bug: headlessui dropdowns render at top-left corner and options are unclickable (React 19 + headlessui v2)
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 59.6k
- Forks
- 5.8k
- Avg merge
- 1d 22h
- Merged PRs (30d)
- 49
Description
Is there an existing issue for this?
- I have searched the existing issues
Current behavior
On the current preview branch (React 19 + @headlessui/react 2.2.10), headlessui-based dropdowns (state, priority, member, module, cycle, date, etc.) are broken in two ways:
- Wrong position: dropdown content renders at the top-left corner of the page (
left: 0; top: 0) instead of next to its trigger button. - Options not clickable: for combobox-style dropdowns that render
Combobox.Inputinside the portaledCombobox.Options, clicking an option does nothing — the options wrapper is markedinert+aria-hidden.
Expected: dropdowns open anchored to their trigger and options are clickable.
Steps to reproduce
- Run the current
previewbranch (React 19.2.x,@headlessui/react2.2.10). - Open any work item detail page.
- Click the state / priority / assignee dropdown trigger.
- Observe the dropdown content appearing at the top-left corner of the page; in combobox dropdowns (e.g. member select with search input), options cannot be clicked.
Root cause analysis
Two separate upstream headlessui v2 behaviors combine here:
-
Frozenclobbers child refs.Combobox.Options(and other overlays) wrap children in the internalFrozencomponent, which doescloneElement(child, { ref }). Since no ref is forwarded toFrozen, that config ref isnulland it overrides the child's own ref, soref={setPopperElement}on popper content never fires. WithpopperElementstuck atnull,react-poppernever creates an instance and the dropdown keeps its initialleft:0/top:0position. (Became visible after the React 19 upgrade in #9530, which bumped headlessui v1 → v2.2.10.) -
useInertOthersover-marks inert subtrees.Combobox.Optionsis modal by default and marks every element that does not contain an allowed element as inert. Because these dropdowns renderCombobox.Inputinside the portaled options and wrap options in a scrollable div, that wrapper receivesinert+aria-hidden, making all options unclickable. Upstream: https://github.com/tailwindlabs/headlessui/issues/3421 (open since Aug 2024).
Related: #9694 fixed the headlessui v2 Fragment-check crash from the same React 19 upgrade; this issue covers the remaining positioning/interactivity regressions.
I have a fix ready as a pnpm patch for @headlessui/react@2.2.10 and will open a PR referencing this issue.
Environment
Production / self-hosted and local dev on preview branch
Browser
Google Chrome
Version
preview branch (post React 19 upgrade, @headlessui/react 2.2.10)
Screenshots
Dropdown content rendered at the top-left corner of the page instead of next to its trigger:

Date picker options not clickable (options wrapper marked inert + aria-hidden):

All headlessui-based dropdowns in the work item properties panel are affected:

Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start on the preview branch by reproducing the issue on a work item detail page with the state, priority, assignee, and date dropdowns. Inspect the @headlessui/react 2.2.10 behavior described in the report and the proposed pnpm patch. Done means dropdowns are anchored beside their triggers and combobox options are clickable without inert or aria-hidden blocking them.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- react, typescript
- Domain
- frontend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 35/100