import React from "react"; import { createRoot } from "react-dom/client"; export default function showPopup(content: React.ReactNode, element: HTMLElement) { const eRect = element.getBoundingClientRect(); const div = document.createElement("div"); div.style.position = "fixed"; if (eRect.x > window.innerWidth / 2) { div.style.right = `${window.innerWidth - eRect.x}px`; } else { div.style.left = `${eRect.x}px`; } if (eRect.y > window.innerHeight / 2) { div.style.bottom = `${window.innerHeight - eRect.y}px`; } else { div.style.top = `${eRect.y}px`; } div.style.zIndex = "9999"; div.className = "animate-appearance-in"; document.body.appendChild(div); const mask = document.createElement("div"); const close = () => { console.log("close popup"); document.body.removeChild(div); document.body.removeChild(mask); }; mask.style.position = "fixed"; mask.style.top = "0"; mask.style.left = "0"; mask.style.width = "100%"; mask.style.height = "100%"; mask.style.zIndex = "9998"; mask.onclick = close; document.body.appendChild(mask); createRoot(div).render( {content} ) } const context = React.createContext<() => void>(() => { }); export function useClosePopup() { return React.useContext(context); } export function PopupMenuItem({ children, onClick }: { children: React.ReactNode, onClick: () => void }) { const close = useClosePopup(); return
  • { close(); onClick(); }}> {children}
  • }