{"version":3,"file":"index.cjs","names":["useTheme","X"],"sources":["../../../src/components/Modal/Modal.tsx"],"sourcesContent":["\"use client\";\n\nimport clsx from \"clsx\";\nimport { X } from \"lucide-react\";\nimport React, { useCallback, useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useTheme } from \"../ThemeProvider\";\n\nexport interface ModalProps {\n  title: string;\n  open: boolean;\n  onOpenChange: (open: boolean) => void;\n  size?: \"sm\" | \"md\" | \"lg\";\n  children?: React.ReactNode;\n}\n\nconst sizeClass: Record<string, string> = {\n  sm: \"openui-modal-sm\",\n  md: \"openui-modal-md\",\n  lg: \"openui-modal-lg\",\n};\n\nexport const Modal: React.FC<ModalProps> = ({\n  title,\n  open,\n  onOpenChange,\n  size = \"md\",\n  children,\n}) => {\n  const { portalThemeClassName } = useTheme();\n  const contentRef = useRef<HTMLDivElement>(null);\n\n  const handleClose = useCallback(() => onOpenChange(false), [onOpenChange]);\n\n  // Escape key\n  useEffect(() => {\n    if (!open) return;\n    const onKey = (e: KeyboardEvent) => {\n      if (e.key === \"Escape\") handleClose();\n    };\n    document.addEventListener(\"keydown\", onKey);\n    return () => document.removeEventListener(\"keydown\", onKey);\n  }, [open, handleClose]);\n\n  // Focus trap — focus the content on open\n  useEffect(() => {\n    if (open && contentRef.current) {\n      contentRef.current.focus();\n    }\n  }, [open]);\n\n  if (!open) return null;\n\n  return createPortal(\n    <div className={clsx(\"openui-modal-root\", portalThemeClassName)}>\n      <div className=\"openui-modal-overlay\" onClick={handleClose} />\n      <div\n        ref={contentRef}\n        className={clsx(\"openui-modal-content\", sizeClass[size])}\n        role=\"dialog\"\n        aria-modal=\"true\"\n        aria-labelledby=\"openui-modal-title\"\n        tabIndex={-1}\n      >\n        <div className=\"openui-modal-header\">\n          <h2 id=\"openui-modal-title\" className=\"openui-modal-title\">\n            {title}\n          </h2>\n          <button className=\"openui-modal-close\" aria-label=\"Close\" onClick={handleClose}>\n            <X size={18} />\n          </button>\n        </div>\n        <div className=\"openui-modal-body\">{children}</div>\n      </div>\n    </div>,\n    document.body,\n  );\n};\n"],"mappings":";;;;;;;;;;;AAgBA,MAAM,YAAoC;CACxC,IAAI;CACJ,IAAI;CACJ,IAAI;CACL;AAED,MAAa,SAA+B,EAC1C,OACA,MACA,cACA,OAAO,MACP,eACI;CACJ,MAAM,EAAE,yBAAyBA,sBAAAA,UAAU;CAC3C,MAAM,cAAA,GAAA,MAAA,QAAoC,KAAK;CAE/C,MAAM,eAAA,GAAA,MAAA,mBAAgC,aAAa,MAAM,EAAE,CAAC,aAAa,CAAC;AAG1E,EAAA,GAAA,MAAA,iBAAgB;AACd,MAAI,CAAC,KAAM;EACX,MAAM,SAAS,MAAqB;AAClC,OAAI,EAAE,QAAQ,SAAU,cAAa;;AAEvC,WAAS,iBAAiB,WAAW,MAAM;AAC3C,eAAa,SAAS,oBAAoB,WAAW,MAAM;IAC1D,CAAC,MAAM,YAAY,CAAC;AAGvB,EAAA,GAAA,MAAA,iBAAgB;AACd,MAAI,QAAQ,WAAW,QACrB,YAAW,QAAQ,OAAO;IAE3B,CAAC,KAAK,CAAC;AAEV,KAAI,CAAC,KAAM,QAAO;AAElB,SAAA,GAAA,UAAA,cACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EAAK,YAAA,GAAA,KAAA,SAAgB,qBAAqB,qBAAqB;YAA/D,CACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;GAAK,WAAU;GAAuB,SAAS;GAAe,CAAA,EAC9D,iBAAA,GAAA,kBAAA,MAAC,OAAD;GACE,KAAK;GACL,YAAA,GAAA,KAAA,SAAgB,wBAAwB,UAAU,MAAM;GACxD,MAAK;GACL,cAAW;GACX,mBAAgB;GAChB,UAAU;aANZ,CAQE,iBAAA,GAAA,kBAAA,MAAC,OAAD;IAAK,WAAU;cAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,MAAD;KAAI,IAAG;KAAqB,WAAU;eACnC;KACE,CAAA,EACL,iBAAA,GAAA,kBAAA,KAAC,UAAD;KAAQ,WAAU;KAAqB,cAAW;KAAQ,SAAS;eACjE,iBAAA,GAAA,kBAAA,KAACC,aAAAA,GAAD,EAAG,MAAM,IAAM,CAAA;KACR,CAAA,CACL;OACN,iBAAA,GAAA,kBAAA,KAAC,OAAD;IAAK,WAAU;IAAqB;IAAe,CAAA,CAC/C;KACF;KACN,SAAS,KACV"}