A premium hover/focus popover for quick previews — users, files and extra details — with blur entrance, an animated arrow and staggered content.
Reviewed by @sofia and attached to the thread.
pnpm dlx shadcn@latest add https://matos-ui.com/r/popover-card.jsonimport {
PopoverCard,
PopoverCardTrigger,
PopoverCardContent,
PopoverCardHeader,
PopoverCardTitle,
PopoverCardDescription,
PopoverCardBody,
PopoverCardFooter,
PopoverCardItem
} from '@/components/matos-ui/popover-card'<PopoverCard>
<PopoverCardTrigger underline>@sofia</PopoverCardTrigger>
<PopoverCardContent side="top">
<PopoverCardHeader>
<PopoverCardTitle>Sofia Ramos</PopoverCardTitle>
<PopoverCardDescription>Product Designer</PopoverCardDescription>
</PopoverCardHeader>
<PopoverCardBody>Crafting the design system.</PopoverCardBody>
</PopoverCardContent>
</PopoverCard>The card opens on hover and on keyboard focus, so it works for pointer and keyboard users alike. It is built on Base UI's Preview Card, so positioning, collision handling, portalling and focus management come for free.
Reach for the Popover Card to surface non-essential, contextual information without navigating away:
For information the user must act on, use a dialog or popover with a click trigger instead.
The trigger renders an <a> by default. Use the render prop to turn any
element (a button, an avatar) into the trigger.
<PopoverCardTrigger
render={<button type="button" className="rounded-lg border px-2 py-0.5" />}
>
report.pdf
</PopoverCardTrigger><PopoverCardContent side="right" align="start" size="lg" sideOffset={12}>
...
</PopoverCardContent>delay and closeDelay live on the trigger (in milliseconds).
<PopoverCardTrigger delay={200} closeDelay={120}>
Hover me
</PopoverCardTrigger>Header, Body, Footer and Item rise and
de-blur one after another via Framer Motion.Wraps Base UI PreviewCard.Root. Accepts open, defaultOpen and
onOpenChange for controlled usage.
| Prop | Type | Default | Description |
|---|---|---|---|
render | element | <a> | Render the trigger as a different element. |
underline | boolean | false | Dotted underline styling for inline text triggers. |
delay | number | 600 | Time to wait before opening (ms). |
closeDelay | number | 300 | Time to wait before closing (ms). |
| Prop | Type | Default | Description |
|---|---|---|---|
size | "sm" | "md" | "lg" | "md" | Width of the card. |
side | "top" | "right" | "bottom" | "left" | "bottom" | Preferred side relative to the trigger. |
align | "start" | "center" | "end" | "center" | Alignment along the side. |
sideOffset | number | 10 | Gap between trigger and card. |
alignOffset | number | 0 | Offset along the alignment axis. |
showArrow | boolean | true | Render the animated arrow. |
| Component | Description |
|---|---|
PopoverCardHeader | Staggered row, ideal for an avatar + title block. |
PopoverCardTitle | Primary label. |
PopoverCardDescription | Muted secondary label. |
PopoverCardBody | Staggered body text block. |
PopoverCardItem | Generic staggered row for custom content. |
PopoverCardFooter | Staggered footer with a top divider for actions. |
Also exported: popoverCardTriggerVariants and popoverCardPopupVariants.
side="top" for triggers near the bottom of the viewport.Install Matos UI
Choose a package manager and copy one command for every component.