components / overlay
Popover
A floating panel anchored to a button that can hold interactive content.
478 B gzip client componentbase ui · popover
popover-default.tsx
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Popover, PopoverDescription, PopoverPopup, PopoverTitle, PopoverTrigger } from "@/components/ui/popover";
export default function PopoverDefault() {
return (
<Popover>
<PopoverTrigger render={<Button variant="outline" />}>dimensions</PopoverTrigger>
<PopoverPopup>
<div className="flex flex-col gap-3">
<div className="flex flex-col gap-1">
<PopoverTitle>Dimensions</PopoverTitle>
<PopoverDescription>Set the size of the layer.</PopoverDescription>
</div>
<div className="grid grid-cols-2 gap-2">
<Input aria-label="Width" defaultValue="320" inputMode="numeric" />
<Input aria-label="Height" defaultValue="240" inputMode="numeric" />
</div>
</div>
</PopoverPopup>
</Popover>
);
}Installation
$ npx shadcn@latest add https://cd-ui.vercel.app/r/popover.jsonfirst time? set up components.json and the theme first: see installation.
Usage
import { Popover, PopoverDescription, PopoverPopup, PopoverTitle, PopoverTrigger } from "@/components/ui/popover"
<Popover>
<PopoverTrigger render={<Button />}>Open</PopoverTrigger>
<PopoverPopup>
<PopoverTitle>Title</PopoverTitle>
<PopoverDescription>Description</PopoverDescription>
</PopoverPopup>
</Popover>API
Popover
Base UI · Popover.RootRoot.
| prop | type | default |
|---|---|---|
open · defaultOpen · onOpenChangeOpen state control. | boolean / (open) => void | - |
PopoverTrigger · PopoverClose
Base UI · Popover.Trigger · Popover.CloseOpen and close. Use render to use your own Button.
| prop | type | default |
|---|---|---|
renderSwaps the rendered element while keeping behavior and style (e.g. become an | ReactElement | (props) => ReactElement | - |
PopoverPopup
Base UI · Popover.PopupPanel that grows from the trigger in 160ms and closes in 120ms.
| prop | type | default |
|---|---|---|
sidePreferred side. | "top" | "bottom" | "left" | "right" | "bottom" |
alignAlignment relative to the trigger. | "start" | "center" | "end" | "center" |
sideOffsetDistance from the trigger (px). | number | 8 |
classNameExtra classes, merged with | string | - |
PopoverTitle · PopoverDescription
Base UI · Popover.Title · Popover.DescriptionTitle and description are linked to the panel for screen readers.
| prop | type | default |
|---|---|---|
classNameExtra classes, merged with | string | - |
Keyboard
| key | action |
|---|---|
| EnterSpace | Opens or closes from the trigger. |
| Esc | Closes and returns focus to the trigger. |
| Tab | Moves through the content of the panel. |
Accessibility
- Unlike a Tooltip, a Popover can hold buttons and fields. Use
PopoverTitleso the panel has a name.