import React from 'react'; import * as DialogPrimitive from '@radix-ui/react-dialog'; import clsx from 'clsx'; import CloseIcon from './icons/CloseIcon'; type ModalProps = { overlayClassName?: string; }; type ModalContentProps = { title?: string | JSX.Element; includingHeader?: boolean; headerClassName?: string; titleClassName?: string; isIcon?: boolean; canClose?: boolean; }; type ModalType = React.FC & { Content: React.FC & ModalContentProps>; Trigger: React.FC; Close: React.FC; Portal: React.FC; }; const Modal: ModalType = ({ children, overlayClassName, ...props }) => { return ( {children} ); }; type ExtractProps = T extends React.FC ? P : never; const ModalContent = React.forwardRef>( ( { title, className, children, includingHeader = true, headerClassName, titleClassName, isIcon = false, canClose = true, ...props }, forwardedRef ) => { return (
{includingHeader && (
{title} {isIcon && ( {' '} )}
{canClose && ( )}
)} {children}
); } ); ModalContent.displayName = 'ModalContent'; Modal.Content = ModalContent; Modal.Trigger = DialogPrimitive.Trigger; Modal.Close = DialogPrimitive.Close; Modal.Portal = DialogPrimitive.Portal; export default Modal;