DS0
Components

Popover

A non-modal overlay anchored to a trigger element, for rich interactive content.

Overview

Popover displays a floating panel attached to a trigger element. Unlike Tooltip (which is for brief labels), Popover can contain interactive content like forms, actions, and navigation. It is non-modal — the rest of the page remains interactive.

Usage

<Popover>
  <Popover.Trigger>Open</Popover.Trigger>
  <Popover.Content>
    <p>Rich content, forms, or actions here.</p>
  </Popover.Content>
</Popover>

With Form Content

<Popover>
  <Popover.Trigger>
    <Button variant="outline">Edit</Button>
  </Popover.Trigger>
  <Popover.Content>
    <TextField label="Name" defaultValue="John" />
    <Button size="sm" className="mt-2">Save</Button>
  </Popover.Content>
</Popover>

Controlled

const [open, setOpen] = useState(false);

<Popover open={open} onOpenChange={setOpen}>
  <Popover.Trigger>Toggle</Popover.Trigger>
  <Popover.Content>Controlled content</Popover.Content>
</Popover>

Accessibility

Keyboard Interactions

KeyAction
Enter / SpaceOpens the popover when trigger is focused
EscapeCloses the popover
TabMoves focus within the popover content

ARIA

  • Trigger has aria-expanded and aria-haspopup
  • Content receives focus when opened
  • Focus returns to trigger on close

API Reference

PropTypeDefaultDescription
openbooleanControlled open state
onOpenChange(open: boolean) => voidCallback when open state changes
childrenReactNodeTrigger and Content elements

Popover.Content Props

PropTypeDefaultDescription
side'top' | 'right' | 'bottom' | 'left''bottom'Preferred placement
align'start' | 'center' | 'end''center'Alignment relative to trigger
classNamestringAdditional CSS classes

AI Decision Guide

Use Popover when:

  • Displaying supplementary content that requires interaction (forms, filters)
  • Showing contextual actions or settings
  • Building dropdown menus with custom content

Don't use Popover when:

  • Content is a brief label → use Tooltip
  • Content requires full user attention → use Dialog
  • Content needs to slide in from an edge → use Drawer
ComponentWhen to Use Instead
TooltipBrief, non-interactive text labels
DialogModal overlay requiring user action
DrawerSlide-out panel from screen edge
SelectChoosing from a list of options

On this page