import { memo } from 'react' import { useTranslation } from 'react-i18next' import { RiCloseLine } from '@remixicon/react' import { PortalToFollowElem, PortalToFollowElemContent, } from '@/app/components/base/portal-to-follow-elem' import Button from '@/app/components/base/button' import type { ButtonProps } from '@/app/components/base/button' import cn from '@/utils/classnames' type ModalProps = { onClose?: () => void size?: 'sm' | 'md' title: string subTitle?: string children?: React.ReactNode confirmButtonText?: string onConfirm?: () => void cancelButtonText?: string onCancel?: () => void showExtraButton?: boolean extraButtonText?: string extraButtonVariant?: ButtonProps['variant'] onExtraButtonClick?: () => void footerSlot?: React.ReactNode bottomSlot?: React.ReactNode disabled?: boolean } const Modal = ({ onClose, size = 'sm', title, subTitle, children, confirmButtonText, onConfirm, cancelButtonText, onCancel, showExtraButton, extraButtonVariant = 'warning', extraButtonText, onExtraButtonClick, footerSlot, bottomSlot, disabled, }: ModalProps) => { const { t } = useTranslation() return (
e.stopPropagation()} >
{title} { subTitle && (
{subTitle}
) }
{ children && (
{children}
) }
{footerSlot}
{ showExtraButton && ( <>
) }
{bottomSlot}
) } export default memo(Modal)