1
5import * as React from "react";
6import * as RadixPopover from "@radix-ui/react-popover";
7import { clsx } from "clsx";
8
9export const Popover = RadixPopover.Root;
10export const PopoverTrigger = RadixPopover.Trigger;
11export const PopoverAnchor = RadixPopover.Anchor;
12export const PopoverClose = RadixPopover.Close;
13export const PopoverContent = React.forwardRef<
14 React.ElementRef<typeof RadixPopover.Content>,
15 React.ComponentPropsWithoutRef<typeof RadixPopover.Content>
16>(({ className, align = "start", sideOffset = 4, ...props }, ref) => (
17 <RadixPopover.Portal>
18 <RadixPopover.Content
19 ref={ref}
20 align={align}
21 sideOffset={sideOffset}
22 className={clsx(
23 "z-50 w-72 rounded-md border border-border bg-popover p-4",
24 "text-popover-foreground shadow-md focus:outline-none",
25 className,
26 )}
27 {...props}
28 />
29 </RadixPopover.Portal>
30));
31PopoverContent.displayName = "PopoverContent";
32
33export const PopoverHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (
34 <div className={clsx("mb-2 text-sm font-semibold text-foreground", className)} {...props} />
35);
36
37export const PopoverDescription = ({
38 className,
39 ...props
40}: React.HTMLAttributes<HTMLDivElement>) => (
41 <div className={clsx("text-sm text-muted-foreground", className)} {...props} />
42);
43