Hover Card
For displaying additional content that appears when hovering over a trigger element.
Preview
Installation
npx sigma-ui@latest add hover-cardUsage
<script setup lang="ts">
import {
HoverCard,
HoverCardContent,
HoverCardTrigger,
} from '@/components/ui/hover-card';
</script>
<template>
<HoverCard>
<HoverCardTrigger>Hover</HoverCardTrigger>
<HoverCardContent>
The Vue Framework - created and maintained by @vuejs.
</HoverCardContent>
</HoverCard>
</template>- Use
open-delayandclose-delayon<HoverCard>to tune how long the pointer has to stay on the trigger before the card opens or closes. - Use
v-model:opento control the open state.
Examples
Custom Delays
Opens immediately and stays open a little longer after the pointer leaves the trigger.
<script setup lang="ts">
import {
HoverCard,
HoverCardContent,
HoverCardTrigger,
} from '@/components/ui/hover-card';
</script>
<template>
<HoverCard
:open-delay="0"
:close-delay="500"
>
<HoverCardTrigger href="https://vuejs.org">
@vuejs
</HoverCardTrigger>
<HoverCardContent side="top">
The Progressive JavaScript Framework.
</HoverCardContent>
</HoverCard>
</template>API Reference
HoverCard
Props
| Prop | Type | Default |
|---|---|---|
defaultOpenThe open state of the hover card when it is initially rendered. Use when you do not need to control its open state. | boolean | - |
openThe controlled open state of the hover card. Can be binded as | boolean | - |
openDelayThe duration from when the mouse enters the trigger until the hover card opens. | number | - |
closeDelayThe duration from when the mouse leaves the trigger or content until the hover card closes. | number | - |
enableTouchWhen | boolean | - |
Events
| Event | Payload |
|---|---|
update:openEvent handler called when the open state of the hover card changes. | [value: boolean] |
Slots
| Slot | Scope |
|---|---|
defaultThe content of the component. | - |
HoverCardTrigger
Props
| Prop | Type | Default |
|---|---|---|
referenceThe reference (or anchor) element that is being referred to for positioning. If not provided will use the current component as anchor. | ReferenceElement | - |
asChildChange the default rendered element for the one passed as a child, merging their props and behavior. Read our Composition guide for more details. | boolean | - |
asThe element or component this component should render as. Can be overwritten by | AsTag | Component | "div" |
Slots
| Slot | Scope |
|---|---|
defaultThe content of the component. | - |
HoverCardContent
Props
| Prop | Type | Default |
|---|---|---|
forceMountUsed to force mounting when more control is needed. Useful when controlling animation with Vue animation libraries. | boolean | - |
memoDependenciesReactive dependencies that should invalidate the memoized content subtree. | unknown[] | - |
sideThe preferred side of the trigger to render against when open. Will be reversed when collisions occur and avoidCollisions is enabled. | "top" | "right" | "bottom" | "left" | "bottom" |
sideOffsetThe distance in pixels from the trigger. | number | 4 |
sideFlipFlip to the opposite side when colliding with boundary. | boolean | true |
alignThe preferred alignment against the trigger. May change when collisions occur. | "center" | "start" | "end" | "center" |
alignOffsetAn offset in pixels from the | number | 0 |
alignFlipFlip alignment when colliding with boundary.
May only occur when | boolean | true |
avoidCollisionsWhen | boolean | true |
collisionBoundaryThe element used as the collision boundary. By default this is the viewport, though you can provide additional element(s) to be included in this check. | Element | (Element | null)[] | null | [] |
collisionPaddingThe distance in pixels from the boundary edges where collision detection should occur. Accepts a number (same for all sides), or a partial padding object, for example: { top: 20, left: 20 }. | number | Partial<Record<"top" | "right" | "bottom" | "left", number>> | 0 |
arrowPaddingThe padding between the arrow and the edges of the content. If your content has border-radius, this will prevent it from overflowing the corners. | number | 0 |
hideShiftedArrowWhen | boolean | true |
stickyThe sticky behavior on the align axis. | "partial" | "always" | "partial" |
hideWhenDetachedWhether to hide the content when the trigger becomes fully occluded. | boolean | false |
positionStrategyThe type of CSS position property to use. | "absolute" | "fixed" | - |
updatePositionStrategyStrategy to update the position of the floating element on every animation frame. | "always" | "optimized" | 'optimized' |
disableUpdateOnLayoutShiftWhether to disable the update position for the content when the layout shifted. | boolean | false |
prioritizePositionForce content to be position within the viewport. Might overlap the reference element, which may not be desired. | boolean | false |
referenceThe custom element or virtual element that will be set as the reference to position the floating element. If provided, it will replace the default anchor element. | ReferenceElement | - |
dirThe reading direction of the popper content when applicable. <br> If omitted, inherits globally from | Direction | - |
asChildChange the default rendered element for the one passed as a child, merging their props and behavior. Read our Composition guide for more details. | boolean | - |
asThe element or component this component should render as. Can be overwritten by | AsTag | Component | "div" |
Slots
| Slot | Scope |
|---|---|
defaultThe content of the component. | - |
Accessibility
The hover card is intended for sighted pointer users and is ignored by screen readers, so don't put content in it that is only available there. Reka UI opens it on keyboard focus of the trigger as well.
| Key | Description |
|---|---|
| Tab | Opens or closes the hover card when the trigger receives or loses focus. |
| Enter | Follows the trigger link. |