Skip to content

v0.31.0

@fredericrous fredericrous tagged this 07 May 14:30
Dialog.popup uses overflow:hidden plus a transform-based open animation,
which creates a containing block that traps any descendant — even one
positioned `fixed`. So a Combobox inside a Dialog had its dropdown clipped
behind the dialog footer, making options unclickable and selections
appear to silently fail.

ThemeProvider now renders a sibling `<div data-portal-mount>` (fixed,
inset 0, pointer-events:none, z-index 1100) and exposes it via the new
`usePortalMount()` hook. Living inside ThemeProvider keeps theme CSS
variables cascading; being a sibling of consumers escapes their
overflow/transform contexts.

Combobox.Popup now portals into that mount and positions itself with
viewport coordinates from the root's bounding rect, re-measured on
window resize and capture-phase scroll so the dropdown follows the input
when scrolled inside a Dialog body. The previous absolute-anchored popup
falls away.

Other floating components (Dialog, Drawer, Tooltip, Menu) continue to
render in-tree as before — they don't sit inside a transform/overflow
trap, so the simpler approach still applies.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Assets 2
Loading