Installation
CLI
npx shadcn@latest add "https://eo-n.vercel.app/r/preview-card"
Manual
Copy and paste the following code into your project.
"use client";
import * as React from "react";
import { PreviewCard as PreviewCardPrimitive } from "@base-ui-components/react/preview-card";
import { cn } from "@/lib/utils";
function PreviewCard({
...props
}: React.ComponentProps<typeof PreviewCardPrimitive.Root>) {
return <PreviewCardPrimitive.Root data-slot="preview-card" {...props} />;
}
function PreviewCardTrigger({
...props
}: React.ComponentProps<typeof PreviewCardPrimitive.Trigger>) {
return (
<PreviewCardPrimitive.Trigger data-slot="preview-card-trigger" {...props} />
);
}
function PreviewCardPortal({
...props
}: React.ComponentProps<typeof PreviewCardPrimitive.Portal>) {
return (
<PreviewCardPrimitive.Portal data-slot="preview-card-portal" {...props} />
);
}
function PreviewCardBackdrop({
...props
}: React.ComponentProps<typeof PreviewCardPrimitive.Backdrop>) {
return (
<PreviewCardPrimitive.Backdrop
data-slot="preview-card-backdrop"
{...props}
/>
);
}
interface PreviewCardContentProps
extends Omit<
React.ComponentProps<typeof PreviewCardPrimitive.Positioner>,
"render"
> {}
function PreviewCardContent({
className,
sideOffset = 4,
children,
...props
}: PreviewCardContentProps) {
return (
<PreviewCardPortal>
<PreviewCardBackdrop />
<PreviewCardPrimitive.Positioner
data-slot="preview-card-positioner"
sideOffset={sideOffset}
className="z-50 size-auto"
{...props}
>
<PreviewCardPrimitive.Popup
data-slot="preview-card-content"
className={cn(
"bg-popover text-popover-foreground w-64 max-w-[var(--available-width)] overflow-x-hidden overflow-y-auto rounded-md border p-4 shadow-md transition-[transform,scale,opacity] duration-150 ease-out",
"origin-[var(--transform-origin)] data-[ending-style]:scale-95 data-[ending-style]:opacity-0 data-[starting-style]:scale-95 data-[starting-style]:opacity-0",
className
)}
>
{children}
</PreviewCardPrimitive.Popup>
</PreviewCardPrimitive.Positioner>
</PreviewCardPortal>
);
}
export {
PreviewCard,
PreviewCardTrigger,
PreviewCardPortal,
PreviewCardBackdrop,
PreviewCardContent,
};
Update the import paths to match your project setup.
Usage
Import all parts and piece them together.
import {
PreviewCard,
PreviewCardContent,
PreviewCardTrigger,
} from "@/components/ui/preview-card";
<HoverCard>
<HoverCardTrigger>Hover</HoverCardTrigger>
<HoverCardContent>Innovating in reverse.</HoverCardContent>
</HoverCard>