Popover

Anchored free-form overlay — optional header (title + close), scrollable body, optional footer. Portals to body with viewport-aware placement (flips up when cramped).

View in Figma
<Popover
  title="Notifications"
  description="3 unread"
  trigger={
    <Button variant="outline">
      Open popover
    </Button>
  }
  footer={<LinkButton>View all</LinkButton>}
>
  <div className="flex flex-col">
    {/* notification rows */}
  </div>
</Popover>
<Popover
  align="end"
  width={240}
  trigger={
    <IconButton
      icon={faFilter}
      type="outline"
      aria-label="Quick filters"
    />
  }
>
  <div className="flex flex-col gap-xs p-md">
    <Checkbox label="High priority" />
    <Checkbox label="Overdue" />
    <Checkbox label="Unassigned" />
  </div>
</Popover>
Props
trigger:ReactNode
Element that toggles the popover (rendered inline).
title:string
Header title — omit (with description) for a header-less popover.
description:string
Sub-title under the title.
footer:ReactNode
Footer behind a top border (e.g. a 'View all' link).
align:"start" | "end"= "start"
Align the panel's left or right edge to the trigger.
width:number= 320
Panel width in px.
maxHeight:number= 420
Max height before the body scrolls (capped by viewport).
Tokens