Documentation Index
Fetch the complete documentation index at: https://mintlify.com/shadcn-ui/ui/llms.txt
Use this file to discover all available pages before exploring further.
Installation
npm install @base-ui/react
Or use the CLI:
npx shadcn@latest add hover-card
import {
HoverCard,
HoverCardContent,
HoverCardTrigger,
} from "@/components/ui/hover-card"
<HoverCard>
<HoverCardTrigger>Hover</HoverCardTrigger>
<HoverCardContent>
The React Framework – created and maintained by @vercel.
</HoverCardContent>
</HoverCard>
Component API
HoverCard
The root hover card component built on Radix UI.
Props:
open - Control hover card open state
onOpenChange - Callback when open state changes
defaultOpen - Initial open state
openDelay - Delay before opening (default: 700ms)
closeDelay - Delay before closing (default: 300ms)
HoverCardTrigger
The element that triggers the hover card.
Props:
asChild - Compose with child element
HoverCardContent
The hover card content container.
Props:
side - Placement side (default: "bottom")
- Options:
"top", "right", "bottom", "left"
align - Alignment (default: "center")
- Options:
"start", "center", "end"
sideOffset - Offset from trigger (default: 4)
alignOffset - Alignment offset
Examples
A simple hover card with user information:
import { CalendarDays } from "lucide-react"
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"
import { Button } from "@/components/ui/button"
import {
HoverCard,
HoverCardContent,
HoverCardTrigger,
} from "@/components/ui/hover-card"
export function HoverCardDemo() {
return (
<HoverCard>
<HoverCardTrigger asChild>
<Button variant="link">@nextjs</Button>
</HoverCardTrigger>
<HoverCardContent className="w-80">
<div className="flex justify-between space-x-4">
<Avatar>
<AvatarImage src="https://github.com/vercel.png" />
<AvatarFallback>VC</AvatarFallback>
</Avatar>
<div className="space-y-1">
<h4 className="text-sm font-semibold">@nextjs</h4>
<p className="text-sm">
The React Framework – created and maintained by @vercel.
</p>
<div className="flex items-center pt-2">
<CalendarDays className="mr-2 h-4 w-4 opacity-70" />
<span className="text-xs text-muted-foreground">
Joined December 2021
</span>
</div>
</div>
</div>
</HoverCardContent>
</HoverCard>
)
}
With Custom Delays
Control when the card opens and closes:
<HoverCard openDelay={300} closeDelay={100}>
<HoverCardTrigger asChild>
<Button variant="link">Quick preview</Button>
</HoverCardTrigger>
<HoverCardContent>
This opens faster and closes quicker.
</HoverCardContent>
</HoverCard>
Different Sides
Control the placement side:
Different Alignments
Control the alignment:
<HoverCard>
<HoverCardTrigger>Hover</HoverCardTrigger>
<HoverCardContent side="top" align="start">
Content aligned to start
</HoverCardContent>
</HoverCard>
Controlled
Control the hover card open state:
import * as React from "react"
import { Button } from "@/components/ui/button"
import {
HoverCard,
HoverCardContent,
HoverCardTrigger,
} from "@/components/ui/hover-card"
export function ControlledHoverCard() {
const [open, setOpen] = React.useState(false)
return (
<div className="space-x-2">
<HoverCard open={open} onOpenChange={setOpen}>
<HoverCardTrigger asChild>
<Button variant="outline">Hover or click</Button>
</HoverCardTrigger>
<HoverCardContent>
This hover card's state is controlled.
</HoverCardContent>
</HoverCard>
<Button onClick={() => setOpen(!open)}>
{open ? "Close" : "Open"}
</Button>
</div>
)
}
Rich Content
Display rich content in the hover card:
import { HoverCard, HoverCardContent, HoverCardTrigger } from "@/components/ui/hover-card"
import { Button } from "@/components/ui/button"
export function RichContentHoverCard() {
return (
<HoverCard>
<HoverCardTrigger asChild>
<Button variant="link">View details</Button>
</HoverCardTrigger>
<HoverCardContent className="w-96">
<div className="space-y-2">
<div>
<h4 className="text-sm font-semibold">Feature Preview</h4>
<p className="text-sm text-muted-foreground">
Get a sneak peek at our upcoming features.
</p>
</div>
<div className="grid gap-2">
<div className="flex items-center space-x-2">
<div className="h-2 w-2 rounded-full bg-green-500" />
<span className="text-xs">AI-powered search</span>
</div>
<div className="flex items-center space-x-2">
<div className="h-2 w-2 rounded-full bg-blue-500" />
<span className="text-xs">Real-time collaboration</span>
</div>
<div className="flex items-center space-x-2">
<div className="h-2 w-2 rounded-full bg-purple-500" />
<span className="text-xs">Advanced analytics</span>
</div>
</div>
</div>
</HoverCardContent>
</HoverCard>
)
}
Accessibility
- Built on Radix UI for full accessibility
- Can be triggered via keyboard focus
- Screen reader compatible
- ARIA attributes automatically applied
- Focus management
API Reference
See the Base UI Hover Card documentation for complete API details.