ProductBrand
Join us
Foundations
  • Introduction
  • Colors
  • Typography
  • Icons
  • Illustrations
  • Logos
  • Shadows
Components
  • Accordion
  • Alert Dialog
  • Avatar
  • Badge
  • Button
  • Calendar
  • Card
  • Chart
  • Checkbox
  • Collapsible
  • Combobox
  • Context Menu
  • Date Picker
  • Dialog
  • Drawer
  • Dropdown Menu
  • Fluid Avatar
  • Hover Scroll Text
  • Input
  • Kbd
  • Popover
  • Progress Bar
  • Radio Group
  • Scroll Area
  • Select
  • Selectors
  • Separator
  • Separator Dot
  • Shimmer Text
  • Skeleton
  • Slider
  • Switch
  • Tabs
  • Textarea
  • Toast
  • Tooltip
Compositions
  • Empty State
  • File Attachment
  • Floating Bar
  • Input Banner
  • Markdown Editor
  • Media Controls
  • Product Feature Banner
  • Panels
  • Sidebar
  • Reasoning Trace
  • Pagination
  • Data Table
  • Breadcrumb
  • Thread Outline
Inline
  • Overview
  • Stat Tile
  • Metric Row
  • Comparison Table
  • Chart Card
  • Trend Tile
  • Cite
  • Custom
  • Agent skill

Popover

Displays rich content in a floating panel, triggered by a button.

Examples

Close button

Controlled

State: closed

Rich content

Overview

Popover displays rich interactive content anchored to a trigger element. Built on Base UI. Unlike tooltips, popovers can contain interactive elements like forms, buttons, and links.

tsx
import { Popover, PopoverContent, PopoverTrigger } from "@rogo-technologies/ui/popover";

<Popover>
  <PopoverTrigger>Open</PopoverTrigger>
  <PopoverContent>Content goes here</PopoverContent>
</Popover>;

Usage

Sides

Use side on PopoverContent to position the popover. It auto-flips if there isn't enough space.

tsx
<PopoverContent side="bottom">Appears below</PopoverContent>

Alignment

align controls position along the cross axis.

tsx
<PopoverContent side="bottom" align="start">
  …
</PopoverContent>

Close button

Render PopoverClose inside the content to give the user an explicit dismiss control.

tsx
<PopoverContent className="relative">
  <PopoverClose className="absolute top-2 right-2 …">
    <IconCrossMedium className="size-4" />
  </PopoverClose>
  <p>Content here</p>
</PopoverContent>

Controlled

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

<Popover open={open} onOpenChange={setOpen}>
  <PopoverTrigger>Toggle</PopoverTrigger>
  <PopoverContent>
    <Button onClick={() => setOpen(false)}>Dismiss</Button>
  </PopoverContent>
</Popover>;

Composition

For advanced cases, compose lower-level primitives instead of using PopoverContent.

tsx
import {
  Popover,
  PopoverTrigger,
  PopoverPortal,
  PopoverPositioner,
  PopoverPopup,
} from "@rogo-technologies/ui/popover";

<Popover>
  <PopoverTrigger>Click me</PopoverTrigger>
  <PopoverPortal>
    <PopoverPositioner side="bottom" sideOffset={8}>
      <PopoverPopup>Custom popover content</PopoverPopup>
    </PopoverPositioner>
  </PopoverPortal>
</Popover>;

API

Popover (Root)

PropTypeDefaultDescription
openboolean-Controlled open state.
defaultOpenbooleanfalseInitial open state (uncontrolled).
onOpenChange(open: boolean) => void-Callback when open state changes.
modalbooleanfalseLimits interaction to popover content when open.

PopoverTrigger

PropTypeDefaultDescription
asChildbooleanfalseMerges props onto child element instead of wrapping.
renderReactElement-Base UI render prop, an alternative to asChild.
disabledbooleanfalsePrevents the popover from opening.

PopoverContent

Convenience wrapper composing PopoverPortal, PopoverPositioner, and PopoverPopup.

PropTypeDefaultDescription
side"top" | "right" | "bottom" | "left""bottom"Which side of the trigger to position on.
sideOffsetnumber4Distance from the trigger in pixels.
align"start" | "center" | "end""center"Alignment along the cross axis.
alignOffsetnumber0Offset along the alignment axis.
collisionPaddingnumber-Distance from viewport edge before flipping.
classNamestring-Additional CSS classes for the popup.

PopoverClose

PropTypeDefaultDescription
asChildbooleanfalseMerges props onto child element.

PopoverAnchor

Positions the popover relative to this element instead of the trigger.

PropTypeDefaultDescription
classNamestring-CSS classes for the anchor wrapper.

All components accept standard HTML attributes for their underlying elements.

Guidelines

Do

  • Use popovers for interactive content that requires user action (forms, settings, menus)
  • Keep popover content focused on a single task
  • Provide a clear way to dismiss the popover (close button or clicking outside)
  • Use PopoverTitle and PopoverDescription for accessible labeling
  • Use asChild when wrapping interactive elements like buttons

Don't

  • Don't use popovers for simple non-interactive text: use a tooltip instead
  • Don't nest popovers inside popovers
  • Don't put critical workflow steps only inside a popover
  • Don't make popover content wider than the viewport on mobile
  • Don't use modal unless you need to trap focus for accessibility reasons
PreviousKbd
NextProgress Bar
Made in NYC© 2026 Rogo Technologies Inc.

Design at Rogo

We’re redesigning an entire industry. Come design it with us.

See open roles

Design at Rogo

  • How we workThe mission of design at Rogo, and the open roles
  • About RogoThe company and the product