import React, { CSSProperties, HTMLAttributes, ReactNode } from 'react' import RcDialog from 'rc-dialog' import { usePrefix } from '../ConfigProvider' import Mask from '../internal/Mask' import { useModalProps } from './hooks' import { WithRef } from '../utils/type' export interface Props { /** 是否可见 */ visible?: boolean /** 标题 */ title: ReactNode /** * 固定宽度 * * @default 600 */ width?: number /** * 自定义底部区域(按钮所在的位置) */ footer?: ReactNode /** * 点击确定回调 */ onOk?: () => Promise | void /** * 点击模态框右上角叉、取消按钮、遮罩层或键盘按下 Esc 时的回调 */ onCancel?: () => void /** * 不可见时是否自动销毁 * * @default false */ autoDestroy?: boolean /** 自定义样式名 */ className?: string /** 自定义样式 */ style?: CSSProperties /** 模态框内容 */ children?: ReactNode /** * 根元素的 html 属性 */ rootHtmlProps?: WithRef, HTMLDivElement> /** * 遮罩的 html 属性 */ maskHtmlProps?: WithRef, HTMLDivElement> /** * 点击 mask 是否允许关闭对话框;默认使用全局配置 mask.modal.clickable (false) */ maskClickable?: boolean /** * 是否允许通过键盘的 `esc` 按钮关闭对话框 * * @default true */ keyboard?: boolean /** * 是否垂直居中展示 * * @default false */ centered?: boolean } export interface InternalModalProps extends Props { /** 自定义 modal render 逻辑 */ renderModal?: (node: ReactNode) => ReactNode } /** 对(icecream)内的 Modal 实现,相比对外的 Modal 提供更高的可定制化程度 */ export function InternalModal(props: InternalModalProps) { const prefix = usePrefix('modal') const { maskProps, rcDialogProps } = useModalProps(props, prefix) return ( ) } export default function Modal(props: Props) { return }