Radix popover in a Sheet

Keep Radix positioning and focus behavior while enrolling its portaled Content in Velvet dismissal ownership.

Local preview
Play in StackBlitz

Team access

Radix owns positioning; Velvet owns dismissal order.

What stays true

  • Wrap Content, not Portal
  • Shared scope
  • First Escape closes the popover

Try it deliberately

  • The adapter is headless and adds no Radix peer dependency to Velvet.
  • forceMount keeps the DOM-bearing surface available through its controlled lifecycle.