import { VNode, RenderFunction, SetupContext, ComponentPublicInstance, Ref } from 'vue' import { XComponent, XComponentBase, XEvent, SizeType, ValueOf } from './component' /** * 组件 - 弹窗 * @example import { Modal as XModal } from 'X-table' */ export const XModal: XComponent export type XModalInstance = ComponentPublicInstance export interface XModalConstructor extends XComponentBase, XModalMethods { props: XModalProps context: SetupContext reactData: ModalReactData getRefMaps(): ModalPrivateRef renderVN: RenderFunction } export type SlotVNodeType = JSX.Element | VNode | string | number export interface ModalPrivateRef { refElem: Ref } export interface XModalPrivateRef extends ModalPrivateRef { } export interface ModalReactData { inited: boolean visible: boolean contentVisible: boolean modalTop: number modalZindex: number zoomLocat: { left: number top: number width: number height: number } | null firstOpen: boolean okButton: object cancelButton: object } export interface ModalMethods { dispatchEvent(type: ValueOf, params: any, evnt?: Event): void /** * 手动打开窗口 */ open(): Promise /** * 手动关闭窗口 */ close(): Promise /** * 获取当前窗口元素 */ getBox(): HTMLElement /** * 更新主题 */ updateTheme(theme): void } export interface XModalMethods extends ModalMethods { } export interface ModalPrivateMethods { } export interface XModalPrivateMethods extends ModalPrivateMethods { } /** * 窗口类型 */ export type ModalType = 'alert' | 'confirm' | 'message' | 'modal' /** * 窗口状态 */ export type ModalStatus = 'info' | 'success' | 'warning' | 'question' | 'error' | 'loading' | '' export type ModalPosition = { top?: number left?: number } /** * 窗口事件类型 */ export type ModalEventTypes = 'model' | 'mask' | 'close' | 'confirm' | 'cancel' | 'exit' | 'exist' export namespace XModalPropTypes { export type Size = SizeType export type ModelValue = boolean export type ID = string | null export type Type = ModalType export type Loading = boolean export type Status = ModalStatus export type IconStatus = string export type ClassName = string[] export type Top = number | string export type Position = 'center' | ModalPosition export type Title = string | number export type Duration = number | string // export type Content = number | string export type ClassName = string export type Message = number | string export type CancelButtonText = string export type ConfirmButtonText = string export type LockView = boolean export type LockScroll = boolean export type Mask = boolean export type MaskClosable = boolean export type EscClosable = boolean export type Resize = boolean export type ShowHeader = boolean export type ShowFooter = boolean export type ShowZoom = boolean export type ShowClose = boolean export type DblclickZoom = boolean export type Width = number | string export type Height = number | string export type MinWidth = number | string export type MinHeight = number | string export type ZIndex = number export type MarginSize = number | string export type Fullscreen = boolean export type Draggable = boolean export type Remember = boolean export type DestroyOnClose = boolean export type ShowTitleOverflow = boolean export type Transfer = boolean export type Storage = boolean export type StorageKey = string export type Animat = boolean export type BeforeHideMethod = (params: ModalVisibleParams) => Promise export type Slots = ModalSlots export type Theme = "dark" | "light" | '' } export type XModalProps = { modelValue?: XModalPropTypes.ModelValue title?: XModalPropTypes.Title width?: XModalPropTypes.Width height?: XModalPropTypes.Height minWidth?: XModalPropTypes.MinWidth minHeight?: XModalPropTypes.MinHeight type?: XModalPropTypes.Type position?: XModalPropTypes.Position marginSize?: XModalPropTypes.MarginSize mask?: XModalPropTypes.Mask slots?: XModalPropTypes.Slots destroyOnClose?: XModalPropTypes.DestroyOnClose showHeader?: XModalPropTypes.ShowHeader showFooter?: XModalPropTypes.ShowFooter showClose?: XModalPropTypes.ShowClose draggable?: XModalPropTypes.Draggable resize?: XModalPropTypes.Resize maskClosable?: XModalPropTypes.MaskClosable zIndex?: XModalPropTypes.ZIndex size?: XModalPropTypes.Size className?: XModalPropTypes.ClassName theme?: XModalPropTypes.Theme id?: XModalPropTypes.ID loading?: XModalPropTypes.Loading status?: XModalPropTypes.Status iconStatus?: XModalPropTypes.IconStatus className?: XModalPropTypes.ClassName top?: XModalPropTypes.Top duration?: XModalPropTypes.Duration content?: XModalPropTypes.Content cancelButtonText?: XModalPropTypes.CancelButtonText confirmButtonText?: XModalPropTypes.ConfirmButtonText lockView?: XModalPropTypes.LockView lockScroll?: XModalPropTypes.LockScroll escClosable?: XModalPropTypes.EscClosable showZoom?: XModalPropTypes.ShowZoom dblclickZoom?: XModalPropTypes.DblclickZoom fullscreen?: XModalPropTypes.Fullscreen remember?: XModalPropTypes.Remember showTitleOverflow?: XModalPropTypes.ShowTitleOverflow transfer?: XModalPropTypes.Transfer storage?: XModalPropTypes.Storage storageKey?: XModalPropTypes.StorageKey animat?: XModalPropTypes.Animat beforeHideMethod?: XModalPropTypes.BeforeHideMethod /** * @deprecated 已废弃,请使用 content */ message?: XModalPropTypes.Content } export type ModalSlots = { default?(params: ModalDefaultSlotParams): JSX.Element[] | VNode[] | string[] header?(params: ModalHeaderSlotParams): JSX.Element[] | VNode[] | string[] title?(params: ModalTitleSlotParams): JSX.Element[] | VNode[] | string[] footer?(params: ModalFooterSlotParams): JSX.Element[] | VNode[] | string[] } export type XModalEmits = [ 'update:modelValue', 'show', 'hide', 'before-hide', 'close', 'confirm', 'cancel', 'zoom' ] /** * 全局窗口控制器 */ export interface ModalController { /** * 创建窗口 * @param options 参数 */ open(options: XModalDefines.ModalOptions): Promise /** * 创建提示框 * @param content 消息内容 * @param title 标题 * @param options 参数 */ alert(content: XModalPropTypes.Content, title?: XModalPropTypes.Title, options?: XModalDefines.ModalOptions): Promise /** * 创建提示框 * @param options 参数 */ alert(options: XModalDefines.ModalOptions): Promise /** * 创建确认框 * @param content 消息内容 * @param title 标题 * @param options 参数 */ confirm(content: XModalPropTypes.Content, title?: XModalPropTypes.Title, options?: XModalDefines.ModalOptions): Promise /** * 创建确认框 * @param options 参数 */ confirm(options: XModalDefines.ModalOptions): Promise /** * 创建消息提示 * @param content 消息内容 * @param title 标题 * @param options 参数 */ message(content: XModalPropTypes.Content, options?: XModalDefines.ModalOptions): Promise /** * 创建消息提示 * @param options 参数 */ message(options: XModalDefines.ModalOptions): Promise /** * 获取动态的活动窗口 * @param id 窗口唯一标识 */ get(id: string): XModalConstructor & XModalMethods /** * 关闭动态的活动窗口,如果为空则关闭所有 * @param id 窗口唯一标识 */ close(id?: XModalPropTypes.ID): Promise } export interface ModalDefaultSlotParams { $modal: XModalConstructor & XModalMethods } export interface ModalHeaderSlotParams extends ModalDefaultSlotParams { } export interface ModalTitleSlotParams extends ModalDefaultSlotParams { } export interface ModalFooterSlotParams extends ModalDefaultSlotParams { } interface ModalVisibleParams { type: ModalEventTypes } export namespace XModalDefines { export interface ModalOptions extends XModalProps, XModalEventProps { key?: string | number } interface ModalEventParams extends XEvent { $modal: XModalConstructor & XModalMethods } interface ModalBaseParams extends ModalVisibleParams { } export interface ShowParams extends ModalBaseParams { } export interface ShowEventParams extends ModalEventParams, ShowParams { } export interface HideParams extends ModalBaseParams { } export interface HideEventParams extends ModalEventParams, HideParams { } export interface BeforeHideParams extends ModalBaseParams { } export interface BeforeHideEventParams extends ModalEventParams, BeforeHideParams { } export interface ConfirmParams extends ModalBaseParams { } export interface ConfirmEventParams extends ModalEventParams, ConfirmParams { } export interface CancelParams extends ModalBaseParams { } export interface CancelEventParams extends ModalEventParams, CancelParams { } export interface CloseParams extends ModalBaseParams { } export interface CloseEventParams extends ModalEventParams, CloseParams { } export interface ZoomParams extends ModalBaseParams { } export interface ZoomEventParams extends ModalEventParams, ZoomParams { } } export type XModalEventProps = { onShow?: XModalEvents.Show onHide?: XModalEvents.Hide onBeforeHide?: XModalEvents.BeforeHide onConfirm?: XModalEvents.Confirm onCancel?: XModalEvents.Cancel onClose?: XModalEvents.Close onZoom?: XModalEvents.Zoom } export interface XModalListeners { show?: XModalEvents.Show hide?: XModalEvents.Hide beforeHide?: XModalEvents.BeforeHide confirm?: XModalEvents.Confirm cancel?: XModalEvents.Cancel close?: XModalEvents.Close zoom?: XModalEvents.Zoom } export namespace XModalEvents { export type Show = (params: XModalDefines.ShowEventParams) => void export type Hide = (params: XModalDefines.HideEventParams) => void export type BeforeHide = (params: XModalDefines.BeforeHideEventParams) => void export type Confirm = (params: XModalDefines.ConfirmEventParams) => void export type Cancel = (params: XModalDefines.CancelEventParams) => void export type Close = (params: XModalDefines.CloseEventParams) => void export type Zoom = (params: XModalDefines.ZoomEventParams) => void }