import React, {FC, ReactNode} from "react"; import {createPortal} from "react-dom"; import {AnimatePresence, motion} from "motion/react"; import {Button} from "./tree/cards/Button"; import {__} from "./globals"; const SPRING = {type: 'spring', stiffness: 380, damping: 17, mass: 0.4} as const; const BACKDROP_TRANSITION = {duration: 0.24, ease: [0.22, 1, 0.36, 1]} as const; export type TargetedConfirmDialogProps = { isOpen: boolean, title: ReactNode, description?: ReactNode, confirmLabel?: ReactNode, cancelLabel?: ReactNode, onConfirm: () => void, onCancel: () => void, originRect?: DOMRect | null, zIndex?: number, } export const TargetedConfirmDialog: FC = ({ isOpen, title, description, confirmLabel = __('Yes'), cancelLabel = __('No'), onConfirm, onCancel, originRect, zIndex = 999998, }) => { if (typeof document === 'undefined') { return null; } const viewportCenterX = typeof window !== 'undefined' ? window.innerWidth / 2 : 0; const viewportCenterY = typeof window !== 'undefined' ? window.innerHeight / 2 : 0; const sourceCenter = originRect ? { x: originRect.left + originRect.width / 2, y: originRect.top + originRect.height / 2, } : { x: viewportCenterX, y: viewportCenterY, }; const offsetX = sourceCenter.x - viewportCenterX; const offsetY = sourceCenter.y - viewportCenterY; return createPortal( {isOpen && (
event.stopPropagation()} >

{title}

{description &&

{description}

}
)}
, document.body ); }