Skip to content

HoverCard

Floating panel that opens on hover, with a built-in grace area for the cursor traveling between the trigger and the content. Built on Reka UI's HoverCard primitives.

<VCHoverCard> is for hover-triggered previews (mention chips, profile cards, glossary pop-ups). For click-triggered floating panels use <VCPopover>; for hover-triggered short text use <VCTooltip>.

bash
npm install @vuecs/overlays
vue
<script setup lang="ts">
import {
    VCHoverCard,
    VCHoverCardArrow,
    VCHoverCardContent,
    VCHoverCardTrigger,
} from '@vuecs/overlays';
</script>

<template>
    <p>
        Built by
        <VCHoverCard :open-delay="300">
            <VCHoverCardTrigger as="a" href="#">@octocat</VCHoverCardTrigger>
            <VCHoverCardContent :side-offset="8">
                <p class="font-semibold">@octocat</p>
                <p class="text-xs text-fg-muted">
                    The mascot of GitHub. Joined in 2008.
                </p>
                <VCHoverCardArrow />
            </VCHoverCardContent>
        </VCHoverCard>
    </p>
</template>
css
@import "tailwindcss";
@import "@vuecs/design";

@custom-variant dark (&:where(.dark, .dark *));

Compound API

ComponentWrapsNotes
VCHoverCardHoverCardRootHolds open state. v-models open. Configures openDelay / closeDelay.
VCHoverCardTriggerHoverCardTriggerAnchor element. Defaults to as="a" because hover-card triggers are typically links.
VCHoverCardContentHoverCardPortal + HoverCardContentFloating panel. inline skips the portal. Position via side / sideOffset / align / alignOffset / avoidCollisions.
VCHoverCardArrowHoverCardArrowOptional pointer arrow.

Theme keys

KeyDefault classNotes
triggervc-hover-card-trigger
contentvc-hover-card-contentFloating panel; supports data-state="open|closed" for animation.
arrowvc-hover-card-arrow

API Reference

<VCHoverCard>

PropTypeDefaultDescription
openboolean | undefinedundefinedControlled open state.
defaultOpenbooleanfalseInitial open state for uncontrolled usage.
openDelaynumber700Delay (ms) from pointer-enter to opening.
closeDelaynumber300Delay (ms) from pointer-leave to closing — covers grace-area travel between trigger and content.
EmitPayloadDescription
update:openbooleanFired on open / close changes.

<VCHoverCardTrigger>

PropTypeDefaultDescription
asstring'a'HTML tag to render.
asChildbooleanfalseRender via the default slot's child element.

<VCHoverCardContent>

PropTypeDefaultDescription
inlinebooleanfalseSkip the portal and render in-place.
side'top' | 'right' | 'bottom' | 'left''bottom'Preferred side relative to the trigger.
sideOffsetnumber4Distance in pixels between trigger and panel.
align'start' | 'center' | 'end''center'Alignment along the chosen side.
alignOffsetnumber0Offset in pixels along the alignment axis.
avoidCollisionsbooleantrueFlip / shift to stay inside the viewport.

<VCHoverCardArrow>

PropTypeDefaultDescription
widthnumber10Arrow width in pixels.
heightnumber5Arrow height in pixels.

Released under the Apache 2.0 License.