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.

Link preview

Preview metadata for a link — package name, description, and stats.

Props

PropTypeDefaultDescription

HoverCard (Root)

PropTypeDefaultDescription
openDelaynumber700Milliseconds to wait before opening after the pointer enters.
closeDelaynumber300Milliseconds to wait before closing after the pointer leaves.
openbooleanControlled open state.
onOpenChange(open: boolean) => voidCallback when the open state changes.

HoverCardTrigger

PropTypeDefaultDescription
asChildbooleanfalseRender as the child element. Use with an <a> tag or Button for correct semantics.

HoverCardContent

PropTypeDefaultDescription
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.
sideOffsetnumber4Offset 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.