Popover

Shows contextual information in an overlay anchored to another element.

import { Button } from "@/components/ui/button";
import {
  Popover,
  PopoverContent,
  PopoverDescription,
  PopoverHeader,
  PopoverTitle,
  PopoverTrigger,
} from "@/components/ui/popover";
 
export function PopoverDemo() {
  return (
    <Popover>
      <PopoverTrigger render={<Button variant="outline">Open</Button>} />
      <PopoverContent>
        <PopoverHeader>
          <PopoverTitle>Event Details</PopoverTitle>
          <PopoverDescription>
            Join us for an exclusive workshop on modern web development. Click
            below to register or learn more.
          </PopoverDescription>
        </PopoverHeader>
      </PopoverContent>
    </Popover>
  );
}

Installation

npx shadcn@latest add "https://eo-n.vercel.app/r/popover"

Usage

Import all parts and piece them together.

import {
  Popover,
  PopoverContent,
  PopoverDescription,
  PopoverTitle,
  PopoverTrigger,
} from "@/components/ui/popover";
<Popover>
  <PopoverTrigger>Open</PopoverTrigger>
  <PopoverContent>
    <PopoverTitle>Popover Title</PopoverTitle>
    <PopoverDescription>
      This is some content inside the popover.
    </PopoverDescription>
  </PopoverContent>
</Popover>

Examples

Open On Hover

import { Dot } from "lucide-react";
 
import { Button } from "@/components/ui/button";
import {
  Popover,
  PopoverContent,
  PopoverDescription,
  PopoverHeader,
  PopoverTitle,
  PopoverTrigger,
} from "@/components/ui/popover";
 
export function PopoverHover() {
  return (
    <Popover openOnHover>
      <PopoverTrigger
        render={<Button variant="outline">Event Details</Button>}
      />
      <PopoverContent className="w-[325px] space-y-3">
        <PopoverHeader>
          <PopoverTitle>React Summit 2025</PopoverTitle>
          <PopoverDescription>
            Join us for the biggest React conference of the year featuring
            workshops, keynotes, and networking opportunities.
          </PopoverDescription>
        </PopoverHeader>
        <div className="mb-3 space-y-2">
          <div className="flex items-start">
            <Dot className="mt-0.5 h-4 w-4 flex-shrink-0" />
            <p className="ml-2 text-sm">20+ speakers from top tech companies</p>
          </div>
          <div className="flex items-start">
            <Dot className="mt-0.5 h-4 w-4 flex-shrink-0" />
            <p className="ml-2 text-sm">Hands-on workshops on React 20</p>
          </div>
          <div className="flex items-start">
            <Dot className="mt-0.5 h-4 w-4 flex-shrink-0" />
            <p className="ml-2 text-sm">
              Early bird pricing available until Feb 15
            </p>
          </div>
        </div>
        <Button className="w-full">View Full Schedule</Button>
      </PopoverContent>
    </Popover>
  );
}