A non-modal anchored panel you style yourself - flips sides and clamps to the viewport as the trigger moves.
Popover playground
Install Popover
1. New project? One command installs the package and wires everything - see Installation:
pnpm dlx zyncat-ui init2. Import the component - it loads its own stylesheet:
import { Popover } from '@zyncat/ui/popover';Usage
import { Popover } from '@zyncat/ui/popover'; <Popover trigger={<Button variant="secondary">Snooze</Button>} side="bottom" align="start" open={open} onOpenChange={setOpen}> <div className="snooze-panel">...</div></Popover>Compose Popover in your application. No Tailwind or external styling library is required; every value resolves from Zyncat UI's token vocabulary.
Popover props
Popover
VirtualAnchor
Frequently asked questions
Drive it yourself with open and onOpenChange - children is a plain ReactNode, not a function that hands you a close callback, so a row's own onClick calls your own setOpen(false). Left uncontrolled, dismissible (on by default) already closes it on Escape or an outside press with no extra wiring.
Pass anchor - anything with a getBoundingClientRect() method, which a plain element also satisfies - and drive open yourself; trigger becomes optional. Passing a new anchor object re-places it, which is how you follow a moving target like a context-menu point.
Yes - it flips to the opposite side when the preferred side is cramped and the opposite side has more room, and it clamps both axes so the panel never renders past the viewport edge. Position re-runs on scroll and resize.
Popover is headless - children is the entire surface, paint and semantics both, so you build the menu or card yourself. Dropdown is the pre-styled menu built on that same anchored positioning, with grouped rows, shortcuts and nested submenus; Tooltip is a single transient hint bubble that travels between triggers rather than a persistent panel.