import React, { Fragment, ReactNode } from "react"; import classNames from "./lib/classNames"; import { Popover as PopoverPrimitive, Transition } from "@headlessui/react"; export type PopoverAlign = "left" | "center" | "right"; export interface PopoverProps { content: ({ onClose }: { onClose: () => void }) => ReactNode; wrapperClassName?: string; panelClassName?: string; align?: PopoverAlign; children: ReactNode; } export function getPopoverStyles(align: PopoverAlign = "left") { const popoverStyles = { base: "w-screen max-w-lg transform bg-white p-4 rounded-md shadow-lg border border-gray-100 focus:outline-none absolute z-10 transform mt-2", align: { center: "-translate-x-1/2 left-1/2", right: "right-0", left: "left-0", }, }; return classNames(popoverStyles.base, popoverStyles.align[align]); } export default function Popover({ panelClassName, children, content, align, }: PopoverProps) { return ( {children} {typeof content === "function" ? ({ close }) => content({ onClose: close }) : content} ); }