| description | Use when picking between Popover, Tooltip, and HoverCard for any floating panel above the page : a click-to-open form panel, a short hover hint on an icon button, a rich preview card that appears when the cursor lingers on a user mention, a date picker container, a filter popover, or any other "small panel anchored to an element" UX. Use when debugging why a Tooltip never appears (missing `TooltipProvider` at the app root), why a HoverCard flickers as the cursor passes over an avatar list (zero `openDelay`), why a Tooltip works on desktop but is invisible on iPad (Radix hides Tooltip on touch by design), why focus jumps to the body after a Popover closes (`modal={true}` focus-trap on a non-modal panel), or why a Popover refuses to close when controlled (passing `open` without `onOpenChange`). Use when choosing which primitive to install for an emoji-picker, a colour-picker, a notification preview, a profile-card preview on hover, a help-text hint on a form label, or a confirm-action popover. Prevents the canonical floating-panel mismatches : reaching for Tooltip when the content is interactive (links / buttons / inputs inside a Tooltip lose keyboard navigation and disappear on touch devices), reaching for HoverCard when the trigger is itself interactive AND the content must be reachable by keyboard-only users (hover-only is an a11y violation), reaching for Popover when a one-line non-interactive hint would suffice (Popover forces a click and steals focus on open), forgetting to wrap the React tree in `<TooltipProvider>` so every `<Tooltip>` is a silent no-op, nesting a Popover inside a Dialog without re-portalling so the popover renders behind the Dialog overlay, and setting `modal={true}` on a Popover that contains a `<form>` Submit so focus restoration fights the form-state machine on close. Covers the three Radix-backed primitives shipped in shadcn ui new-york-v4 (`apps/v4/registry/new-york-v4/ui/{popover,tooltip,hover-card}.tsx`), including the full export surface (Popover : Popover / PopoverTrigger / PopoverContent / PopoverAnchor / PopoverHeader / PopoverTitle / PopoverDescription, Tooltip : TooltipProvider / Tooltip / TooltipTrigger / TooltipContent, HoverCard : HoverCard / HoverCardTrigger / HoverCardContent), the shadcn-specific default overrides (TooltipProvider `delayDuration={0}` shadcn default vs Radix-700 underlying default, PopoverContent `sideOffset={4}`, TooltipContent `sideOffset={0}`, HoverCardContent `sideOffset={4}`, all three `align="center"`), the controlled-state pattern (`open` + `onOpenChange`), the `modal` prop on Popover (focus-trap on vs off), the touch-device behaviour matrix (Tooltip hidden, HoverCard tap-to-open, Popover always-on), the accessibility matrix (`aria-describedby` for Tooltip, `aria-haspopup` for HoverCard, focus management for Popover), and the `"use client"` requirement that applies to all three. Keywords: shadcn popover, shadcn tooltip, shadcn hover card, shadcn hovercard, Popover vs Tooltip, Tooltip vs HoverCard, HoverCard vs Popover, when to use popover, when to use tooltip, when to use hovercard, click popup, hover content, hover popup, floating panel, TooltipProvider, TooltipProvider missing, tooltip not showing, tooltip not appearing, tooltip silent fail, why is my tooltip blank, tooltip not appearing on touch, tooltip on mobile, tooltip on iPad, tooltip hidden touch device, delayDuration, openDelay, closeDelay, hover-card delay, hover card flicker, hover-card instant, PopoverAnchor, Popover modal, modal popover, modal=true Popover, popover focus trap, popover form submit focus, popover with form, popover with input, popover with date picker, popover with colour picker, popover with emoji picker, tooltip on icon button, tooltip on disabled button, hover card user profile, hover card profile preview, hover card mention, hover card avatar preview, Tooltip with interactive content, HoverCard keyboard accessibility, Popover behind Dialog, Popover inside Dialog, Popover z-index, Portal Popover, controlled Popover, controlled Tooltip, controlled HoverCard, open and onOpenCha… |