import type { Component, Ref } from 'vue'; import type { ModalApi } from './modal-api'; export interface ModalProps { /** * 是否要挂载到内容区域 * @default false */ appendToMain?: boolean; /** * 是否显示边框 * @default false */ bordered?: boolean; /** * 取消按钮文字 */ cancelText?: string; /** * 是否居中 * @default false */ centered?: boolean; class?: string; /** * 是否显示右上角的关闭按钮 * @default true */ closable?: boolean; /** * 点击弹窗遮罩是否关闭弹窗 * @default true */ closeOnClickModal?: boolean; /** * 按下 ESC 键是否关闭弹窗 * @default true */ closeOnPressEscape?: boolean; /** * 禁用确认按钮 */ confirmDisabled?: boolean; /** * 确定按钮 loading * @default false */ confirmLoading?: boolean; /** * 确定按钮文字 */ confirmText?: string; contentClass?: string; /** * 弹窗描述 */ description?: string; /** * 是否可拖拽 * @default false */ draggable?: boolean; /** * 是否显示底部 * @default true */ footer?: boolean; footerClass?: string; /** * 是否全屏 * @default false */ fullscreen?: boolean; /** * 是否显示全屏按钮 * @default true */ fullscreenButton?: boolean; /** * 是否显示顶栏 * @default true */ header?: boolean; headerClass?: string; /** * 弹窗是否显示 * @default false */ loading?: boolean; /** * 是否显示遮罩 * @default true */ modal?: boolean; /** * 是否自动聚焦 */ openAutoFocus?: boolean; /** * 弹窗遮罩模糊效果 */ overlayBlur?: number; /** * 是否显示取消按钮 * @default true */ showCancelButton?: boolean; /** * 是否显示确认按钮 * @default true */ showConfirmButton?: boolean; /** * 弹窗标题 */ title?: string; /** * 弹窗标题提示 */ titleTooltip?: string; /** * 弹窗层级 */ zIndex?: number; } export interface ModalState extends ModalProps { /** 弹窗打开状态 */ isOpen?: boolean; /** * 共享数据 */ sharedData?: Record; } export type ExtendedModalApi = ModalApi & { useStore: >( selector?: (state: NoInfer) => T, ) => Readonly>; }; export interface ModalApiOptions extends ModalState { /** * 独立的弹窗组件 */ connectedComponent?: Component; /** * 在关闭时销毁弹窗。仅在使用 connectedComponent 时有效 */ destroyOnClose?: boolean; /** * 关闭前的回调,返回 false 可以阻止关闭 * @returns */ onBeforeClose?: () => void; /** * 点击取消按钮的回调 */ onCancel?: () => void; /** * 弹窗关闭动画结束的回调 * @returns */ onClosed?: () => void; /** * 点击确定按钮的回调 */ onConfirm?: () => void; /** * 弹窗状态变化回调 * @param isOpen * @returns */ onOpenChange?: (isOpen: boolean) => void; /** * 弹窗打开动画结束的回调 * @returns */ onOpened?: () => void; }