Docs
Hover Card
Hover Card
For sighted users to preview content available behind a link.
import type { HoverCardTriggerProps } from "@kobalte/core/hover-card";
import { Button } from "@repo/tailwindcss/ui/button";
import {
HoverCard,
HoverCardContent,
HoverCardTrigger,
} from "@repo/tailwindcss/ui/hover-card";
import { Image, ImageFallback, ImageRoot } from "@repo/tailwindcss/ui/image";
const HoverCardDemo = () => {
return (
<HoverCard>
<HoverCardTrigger
as={(props: HoverCardTriggerProps) => (
<Button variant="link" {...props}>
@solid_js
</Button>
)}
/>
<HoverCardContent class="w-80">
<div class="flex justify-between space-x-4">
<ImageRoot fallbackDelay={400}>
<Image src="https://github.com/solidjs.png" />
<ImageFallback>SJ</ImageFallback>
</ImageRoot>
<div class="space-y-1">
<h4 class="text-sm font-semibold">@solid_js</h4>
<p class="text-sm">
Simple and performant reactivity for building user interfaces.
</p>
<div class="flex items-center pt-2">
<svg
xmlns="http://www.w3.org/2000/svg"
class="mr-2 h-4 w-4 opacity-70"
viewBox="0 0 24 24"
>
<path
fill="none"
stroke="currentColor"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M4 7a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2zm12-4v4M8 3v4m-4 4h16m-9 4h1m0 0v3"
/>
</svg>
<span class="text-xs text-muted-foreground">
Joined March 2021
</span>
</div>
</div>
</div>
</HoverCardContent>
</HoverCard>
);
};
export default HoverCardDemo;
Installation
npx shadcn-solid@latest add hover-card
Install the following dependencies:
npm install @kobalte/core
Copy and paste the following code into your project:
import { cn } from "@/libs/cn";
import type { HoverCardContentProps } from "@kobalte/core/hover-card";
import { HoverCard as HoverCardPrimitive } from "@kobalte/core/hover-card";
import type { PolymorphicProps } from "@kobalte/core/polymorphic";
import type { ValidComponent } from "solid-js";
import { splitProps } from "solid-js";
export const HoverCard = HoverCardPrimitive;
export const HoverCardTrigger = HoverCardPrimitive.Trigger;
type hoverCardContentProps<T extends ValidComponent = "div"> =
HoverCardContentProps<T> & {
class?: string;
};
export const HoverCardContent = <T extends ValidComponent = "div">(
props: PolymorphicProps<T, hoverCardContentProps<T>>,
) => {
const [local, rest] = splitProps(props as hoverCardContentProps, ["class"]);
return (
<HoverCardPrimitive.Portal>
<HoverCardPrimitive.Content
class={cn(
"z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[expanded]:animate-in data-[closed]:animate-out data-[closed]:fade-out-0 data-[expanded]:fade-in-0 data-[closed]:zoom-out-95 data-[expanded]:zoom-in-95",
local.class,
)}
{...rest}
/>
</HoverCardPrimitive.Portal>
);
};
Install the following dependencies:
npm install @kobalte/core
Copy and paste the following code into your project:
import { cn } from "@/libs/cn";
import type { HoverCardContentProps } from "@kobalte/core/hover-card";
import { HoverCard as HoverCardPrimitive } from "@kobalte/core/hover-card";
import type { PolymorphicProps } from "@kobalte/core/polymorphic";
import type { ValidComponent } from "solid-js";
import { splitProps } from "solid-js";
export const HoverCard = HoverCardPrimitive;
export const HoverCardTrigger = HoverCardPrimitive.Trigger;
type hoverCardContentProps<T extends ValidComponent = "div"> =
HoverCardContentProps<T> & {
class?: string;
};
export const HoverCardContent = <T extends ValidComponent = "div">(
props: PolymorphicProps<T, hoverCardContentProps<T>>,
) => {
const [local, rest] = splitProps(props as hoverCardContentProps, ["class"]);
return (
<HoverCardPrimitive.Portal>
<HoverCardPrimitive.Content
class={cn(
"z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[expanded]:(animate-in fade-in-0 zoom-in-95) data-[closed]:(animate-out fade-out-0 zoom-out-95)",
local.class,
)}
{...rest}
/>
</HoverCardPrimitive.Portal>
);
};
Usage
import { HoverCard, HoverCardContent, HoverCardTrigger } from "@/components/ui/hover-card";
<HoverCard>
<HoverCardTrigger>Hover</HoverCardTrigger>
<HoverCardContent>
SolidJS - Simple and performant reactivity for building user interfaces.
</HoverCardContent>
</HoverCard>