Popover displays floating content anchored to a trigger element, useful for tooltips, menus, forms, or additional information that appears on demand. It provides a flexible floating content interface that positions itself relative to a trigger element, supporting various positioning options and interaction patterns. Built on Radix UI's Popover component, it ensures consistent popover patterns across the interface with full keyboard and screen reader accessibility.
PopoverAnchor uses the Radix UI Popover primitive (not Themes Popover.Anchor) so it can nest under a Themes Popover.Root while positioning content relative to a non-trigger surface—for example a multi-select chips field that opens from focus or typing rather than a dedicated trigger button.
Basic Popover
Use for simple content overlays triggered by user interaction.
Popover with Form
Use popovers for contextual forms or input fields.
Popover with Menu
Use popovers for contextual menus or option lists.
Positioning
Control where the popover appears relative to the trigger.
Side Positioning
Position the popover on different sides of the trigger.
Alignment
Control how the popover aligns with the trigger.
Custom Offsets
Adjust spacing using offset props.
Controlled Popover
Control popover state programmatically.
Non-Dismissible Popover
Prevent the popover from closing when clicking outside.
Popover with Close Button
Include a close button within the popover content.
Custom Trigger
Use any element as a trigger, including custom components.
Virtual Anchor
Use a virtual anchor for fixed positioning or custom placement.
Prevent Auto Focus
Control focus behavior when the popover opens.
@prepared911/ui Popover
The design-system popover is not a path-only rewrite of this page. sideOffset is a space step (0, 4, 8, 12, 16, 20, or 24); the annotation popover uses 20. Outside dismiss that must skip a marker or a portaled menu uses isOutsideExempt(target) instead of ignoreOutsideCloseSelector. The platform reports an outside press as light-dismiss, and that change is not cancelable, so details.cancel() does not keep the popover open. A press the predicate accepts stays open; Escape still closes and returns focus to the trigger.
In a toolbar
Put ToolbarItem outside PopoverTrigger, with Popover wrapping both the item and PopoverContent. PopoverTrigger forwards the item's roving props to the control child.
PopoverManager Setup
Include PopoverManager in your application to enable proper popover rendering.