{"version":3,"file":"modal.cjs","sources":["../../../src/components/modal.tsx"],"sourcesContent":["import React, { type ReactNode, useEffect, useRef } from \"react\";\nimport { mergedCva } from \"../utils/components\";\n\nconst rootStyles = mergedCva(\n    [\n        \"cui-fixed\",\n        \"cui-top-0\",\n        \"cui-left-0\",\n        \"cui-w-screen\",\n        \"cui-h-screen\",\n        \"cui-z-50\",\n        \"cui-flex\",\n        \"cui-justify-center\",\n        \"cui-items-center\",\n        \"cui-bg-black/30\",\n        \"cui-backdrop-blur\",\n        \"cui-transition-opacity\",\n    ],\n    {\n        variants: {\n            open: {\n                true: [\n                    \"cui-will-change-contents\",\n                    \"cui-opacity-100\",\n                    \"cui-pointer-events-auto\",\n                ],\n                false: [\n                    \"cui-will-change-auto\",\n                    \"cui-opacity-0\",\n                    \"cui-pointer-events-none\",\n                ],\n            },\n        },\n    },\n);\n\nexport interface ModalProps {\n    open?: boolean;\n    onDismiss?: () => void;\n    children?: ReactNode;\n    className?: { root?: string };\n}\n\nexport const Modal = ({\n    open,\n    onDismiss,\n    children,\n    className,\n    ...rest\n}: ModalProps) => {\n    const overlayRef = useRef<HTMLDivElement>(null);\n\n    useEffect(() => {\n        if (!open || !onDismiss) return;\n        const handleCloseOnClick = (event: MouseEvent) => {\n            if (\n                event.button === 0 && // don't close the modal on double clicks\n                !!overlayRef.current &&\n                overlayRef.current.isSameNode(event.target as Node)\n            )\n                onDismiss();\n        };\n        const handleCloseOnKeyDown = (event: KeyboardEvent) => {\n            if (event.key === \"Escape\") onDismiss();\n        };\n        document.addEventListener(\"mousedown\", handleCloseOnClick);\n        document.addEventListener(\"keydown\", handleCloseOnKeyDown);\n        return () => {\n            document.removeEventListener(\"mousedown\", handleCloseOnClick);\n            document.removeEventListener(\"keydown\", handleCloseOnKeyDown);\n        };\n    }, [onDismiss, open]);\n\n    return (\n        <div\n            className={rootStyles({ open, className: className?.root })}\n            ref={overlayRef}\n            {...rest}\n        >\n            {children}\n        </div>\n    );\n};\n"],"names":["mergedCva","useRef","useEffect"],"mappings":";;;;;AAGA,MAAM,UAAa,GAAAA,oBAAA;AAAA,EACf;AAAA,IACI,WAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,oBAAA;AAAA,IACA,kBAAA;AAAA,IACA,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA,wBAAA;AAAA,GACJ;AAAA,EACA;AAAA,IACI,QAAU,EAAA;AAAA,MACN,IAAM,EAAA;AAAA,QACF,IAAM,EAAA;AAAA,UACF,0BAAA;AAAA,UACA,iBAAA;AAAA,UACA,yBAAA;AAAA,SACJ;AAAA,QACA,KAAO,EAAA;AAAA,UACH,sBAAA;AAAA,UACA,eAAA;AAAA,UACA,yBAAA;AAAA,SACJ;AAAA,OACJ;AAAA,KACJ;AAAA,GACJ;AACJ,CAAA,CAAA;AASO,MAAM,QAAQ,CAAC;AAAA,EAClB,IAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG,IAAA;AACP,CAAkB,KAAA;AACd,EAAM,MAAA,UAAA,GAAaC,aAAuB,IAAI,CAAA,CAAA;AAE9C,EAAAC,eAAA,CAAU,MAAM;AACZ,IAAI,IAAA,CAAC,QAAQ,CAAC,SAAA;AAAW,MAAA,OAAA;AACzB,IAAM,MAAA,kBAAA,GAAqB,CAAC,KAAsB,KAAA;AAC9C,MAAA,IACI,MAAM,MAAW,KAAA,CAAA;AAAA,MACjB,CAAC,CAAC,UAAW,CAAA,OAAA,IACb,WAAW,OAAQ,CAAA,UAAA,CAAW,MAAM,MAAc,CAAA;AAElD,QAAU,SAAA,EAAA,CAAA;AAAA,KAClB,CAAA;AACA,IAAM,MAAA,oBAAA,GAAuB,CAAC,KAAyB,KAAA;AACnD,MAAA,IAAI,MAAM,GAAQ,KAAA,QAAA;AAAU,QAAU,SAAA,EAAA,CAAA;AAAA,KAC1C,CAAA;AACA,IAAS,QAAA,CAAA,gBAAA,CAAiB,aAAa,kBAAkB,CAAA,CAAA;AACzD,IAAS,QAAA,CAAA,gBAAA,CAAiB,WAAW,oBAAoB,CAAA,CAAA;AACzD,IAAA,OAAO,MAAM;AACT,MAAS,QAAA,CAAA,mBAAA,CAAoB,aAAa,kBAAkB,CAAA,CAAA;AAC5D,MAAS,QAAA,CAAA,mBAAA,CAAoB,WAAW,oBAAoB,CAAA,CAAA;AAAA,KAChE,CAAA;AAAA,GACD,EAAA,CAAC,SAAW,EAAA,IAAI,CAAC,CAAA,CAAA;AAEpB,EACI,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAW,UAAW,CAAA,EAAE,MAAM,SAAW,EAAA,SAAA,EAAW,MAAM,CAAA;AAAA,MAC1D,GAAK,EAAA,UAAA;AAAA,MACJ,GAAG,IAAA;AAAA,KAAA;AAAA,IAEH,QAAA;AAAA,GACL,CAAA;AAER;;;;"}