import React from "react"; import { usePopper } from "react-popper"; import { Popover as HeadlessPopover } from "@headlessui/react"; import clsx from "clsx"; import ReactDOM from "react-dom"; import { Placement } from "@popperjs/core"; interface PopoverProps { trigger: React.ReactNode; children?: React.ReactNode; placement?: Placement; } const Popover: React.VoidFunctionComponent = ({ children, trigger, placement, }) => { const [referenceElement, setReferenceElement] = React.useState(null); const [popperElement, setPopperElement] = React.useState(null); const { styles, attributes } = usePopper(referenceElement, popperElement, { placement, modifiers: [ { name: "offset", options: { offset: [0, 5], }, }, ], }); const portal = document.getElementById("portal"); return ( {trigger} {portal && ReactDOM.createPortal( {children} , portal, )} ); }; export default Popover;