eo-n/ui
UIComponentsPreview Card

Preview Card

Displays a compact, visually appealing preview of content.

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>

On this page