{"version":3,"file":"index.mjs","sources":["../../src/dialog/index.ts"],"sourcesContent":["import { createApp, h, App, ref, nextTick, reactive } from 'vue';\n\nimport Dialog from './dialog';\nimport { isBrowser } from '../shared';\nimport { DialogCloseContext, TdDialogProps, DialogInstance } from './type';\n\nimport './style';\n\nexport type DialogType = 'alert' | 'confirm' | 'show';\n\nconst DialogPropsDefault = {\n  title: '',\n  content: '',\n  confirmBtn: '',\n  cancelBtn: '',\n  visible: false,\n  zIndex: 2500,\n  showOverlay: true,\n  width: '320px',\n  closeOnOverlayClick: false,\n};\n\nconst propsFn = ['onConfirm', 'onCancel', 'onOverlayClick', 'onClose', 'onClosed'] as const;\ntype DialogPropsFnName = (typeof propsFn)[number];\n\nfunction create(options: Partial<TdDialogProps> | string): DialogInstance {\n  if (!isBrowser) return;\n\n  const root = document.createElement('div');\n  document.body.appendChild(root);\n\n  const props = ref<Partial<TdDialogProps>>({});\n  const propsObject = {\n    ...DialogPropsDefault,\n    ...(typeof options === 'string' ? { content: options } : options),\n  };\n\n  function callFn<T>(fnType: DialogPropsFnName, context?: T): void {\n    const fn = props.value[fnType] || propsObject[fnType];\n    typeof fn === 'function' && fn(context as any);\n  }\n\n  const params = reactive({\n    ...propsObject,\n    onConfirm: (context: { e: MouseEvent }) => {\n      callFn('onConfirm', context);\n      params.visible = false;\n    },\n    onCancel: (context: { e: MouseEvent }) => {\n      callFn('onCancel', context);\n      params.visible = false;\n    },\n    onOverlayClick: (context: { e: MouseEvent }) => {\n      callFn('onOverlayClick', context);\n      params.visible = false;\n    },\n    onClose: (context: DialogCloseContext) => {\n      callFn('onClose', context);\n      params.visible = false;\n    },\n    onClosed: () => {\n      callFn('onClosed');\n      // 卸载创建的app\n      // 修复调用destroy未清除滚动锁定问题\n      nextTick(() => {\n        params.destroyOnClose && app.unmount();\n      });\n    },\n  });\n\n  const app = createApp(() => h(Dialog, params));\n  app.mount(root);\n\n  const handler = {\n    destroy() {\n      params.destroyOnClose = true;\n      nextTick(() => {\n        params.visible = false;\n        root.remove();\n      });\n    },\n    hide() {\n      params.visible = false;\n    },\n    show() {\n      params.visible = true;\n    },\n    update(options: Partial<TdDialogProps> | string) {\n      if (typeof options === 'string') {\n        params.content = options;\n      } else {\n        for (const key in options) {\n          if (propsFn.includes(key as DialogPropsFnName)) {\n            // @ts-ignore type safe\n            props.value[key] = options[key];\n          } else {\n            // @ts-ignore type safe\n            params[key] = options[key];\n          }\n        }\n      }\n    },\n  };\n\n  nextTick(() => (params.visible = true));\n\n  return handler;\n}\n\n(['show', 'alert', 'confirm'] as DialogType[]).forEach((type: DialogType): void => {\n  Dialog[type] = (options: Partial<TdDialogProps> | string): DialogInstance => {\n    let props: any = { content: '' };\n\n    if (typeof options === 'string') {\n      props.content = options;\n    } else {\n      props = { ...props, ...options };\n    }\n\n    if (type === 'alert') {\n      props.cancelBtn = null;\n    }\n\n    return create(props);\n  };\n});\n\nDialog.install = (app: App, name = '') => {\n  app.component(name || Dialog.name, Dialog);\n\n  // 添加插件入口\n  app.config.globalProperties.$dialog = Dialog as any;\n  app.provide('$dialog', Dialog);\n};\n\ntype DialogApi = {\n  /** 通用对话框 */\n  show: (options: Partial<TdDialogProps> | string) => DialogInstance;\n  /** 基础对话框 */\n  alert: (options: Partial<TdDialogProps> | string) => DialogInstance;\n  /** 选择对话框 */\n  confirm: (options: Partial<TdDialogProps> | string) => DialogInstance;\n};\n\nexport const DialogPlugin = Dialog as typeof Dialog & DialogApi;\nexport default DialogPlugin;\n\ndeclare module 'vue' {\n  // Bind to `this` keyword\n  export interface ComponentCustomProperties {\n    $dialog: DialogApi;\n  }\n}\n"],"names":["DialogPropsDefault","title","content","confirmBtn","cancelBtn","visible","zIndex","showOverlay","width","closeOnOverlayClick","propsFn","create","options","isBrowser","root","document","createElement","body","appendChild","props","ref","propsObject","_objectSpread","callFn","fnType","context","fn","value","params","reactive","onConfirm","onCancel","onOverlayClick","onClose","onClosed","nextTick","destroyOnClose","app","unmount","createApp","h","Dialog","mount","handler","destroy","remove","hide","show","update","key","includes","forEach","type","install","name","arguments","length","undefined","component","config","globalProperties","$dialog","provide","DialogPlugin"],"mappings":"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"}