Hover Card
A popover card revealed on hover. Built on Radix UI HoverCard — handles open/close delays, portal rendering, and ARIA attributes automatically.
Built on Radix UI.
- ✓Opens on hover with a configurable open/close delay
- ✓Positioned via Floating UI — avoids viewport clipping
- ✓Animated open/close transitions
- ✓Rendered in a portal to avoid z-index conflicts
- ✓Configurable side, alignment, and offset
- ✓Accessible — announced as a dialog to screen readers
import { Hover Card }from "@aetherstack/ui"
hover card.tsx
import {
HoverCard,
HoverCardTrigger,
HoverCardContent,
} from "@/components/ui/hover-card"
import { CalendarDays, User } from "lucide-react"
export function HoverCardDemo() {
return (
<HoverCard>
<HoverCardTrigger asChild>
<a href="#" className="text-primary underline underline-offset-4">
Hover over me
</a>
</HoverCardTrigger>
<HoverCardContent className="w-64">
<div className="flex items-center gap-3">
<div className="flex h-10 w-10 items-center justify-center rounded-full bg-muted">
<User className="h-5 w-5" />
</div>
<div>
<p className="text-sm font-semibold">@johndoe</p>
<p className="text-xs text-muted-foreground">Joined December 2021</p>
</div>
</div>
<p className="mt-2 text-sm text-muted-foreground">
Full-stack developer. Building cool things on the web.
</p>
<div className="mt-3 flex items-center gap-1 text-xs text-muted-foreground">
<CalendarDays className="h-3 w-3" />
Joined December 2021
</div>
</HoverCardContent>
</HoverCard>
)
}Usage
User profile preview
Show a mini profile card when hovering over a username or avatar link.
Props
| Prop | Type | Default | Description |
|---|
HoverCard (Root)
| Prop | Type | Default | Description |
|---|---|---|---|
| openDelay | number | 700 | Milliseconds to wait before opening after the pointer enters. |
| closeDelay | number | 300 | Milliseconds to wait before closing after the pointer leaves. |
| open | boolean | — | Controlled open state. |
| onOpenChange | (open: boolean) => void | — | Callback when the open state changes. |
HoverCardTrigger
| Prop | Type | Default | Description |
|---|---|---|---|
| asChild | boolean | false | Render as the child element. Use with an <a> tag or Button for correct semantics. |
HoverCardContent
| Prop | Type | Default | Description |
|---|---|---|---|
| align | "start" | "center" | "end" | "center" | Alignment of the card relative to the trigger. |
| side | "top" | "right" | "bottom" | "left" | "bottom" | Preferred side for the card to appear on. |
| sideOffset | number | 4 | Offset in pixels between the card and the trigger. |
* Required props
Accessibility
- →Intended for supplementary preview content — do not place critical actions inside.
- →Not keyboard accessible by design — hover cards are invisible to keyboard-only users.
- →Content inside the card is read by screen readers when the card is open.
- →Use a Dialog or Popover instead if the content needs to be keyboard accessible.