{"version":3,"file":"messageBox.mjs","sources":["../../../../../../packages/components/message-box/src/messageBox.ts"],"sourcesContent":["import { h, watch, render } from 'vue'\nimport { isClient } from '@vueuse/core'\nimport { isVNode, isString, hasOwn } from '@element-plus/utils'\nimport MessageBoxConstructor from './index.vue'\n\nimport type { ComponentPublicInstance, VNode } from 'vue'\nimport type {\n  Action,\n  Callback,\n  MessageBoxState,\n  IElMessageBox,\n  ElMessageBoxOptions,\n  MessageBoxData,\n} from './message-box.type'\n\n// component default merge props & data\n\nconst messageInstance = new Map<\n  ComponentPublicInstance<{ doClose: () => void }>, // marking doClose as function\n  {\n    options: any\n    callback: Callback\n    resolve: (res: any) => void\n    reject: (reason?: any) => void\n  }\n>()\n\nconst initInstance = (props: any, container: HTMLElement) => {\n  const vnode = h(MessageBoxConstructor, props)\n  render(vnode, container)\n  document.body.appendChild(container.firstElementChild)\n  return vnode.component\n}\n\nconst genContainer = () => {\n  return document.createElement('div')\n}\n\nconst showMessage = (options: any) => {\n  const container = genContainer()\n  // Adding destruct method.\n  // when transition leaves emitting `vanish` evt. so that we can do the clean job.\n  options.onVanish = () => {\n    // not sure if this causes mem leak, need proof to verify that.\n    // maybe calling out like 1000 msg-box then close them all.\n    render(null, container)\n    messageInstance.delete(vm) // Remove vm to avoid mem leak.\n    // here we were suppose to call document.body.removeChild(container.firstElementChild)\n    // but render(null, container) did that job for us. so that we do not call that directly\n  }\n\n  options.onAction = (action: Action) => {\n    const currentMsg = messageInstance.get(vm)\n    let resolve: Action | { value: string; action: Action }\n    if (options.showInput) {\n      resolve = { value: vm.inputValue, action }\n    } else {\n      resolve = action\n    }\n    if (options.callback) {\n      options.callback(resolve, instance.proxy)\n    } else {\n      if (action === 'cancel' || action === 'close') {\n        if (options.distinguishCancelAndClose && action !== 'cancel') {\n          currentMsg.reject('close')\n        } else {\n          currentMsg.reject('cancel')\n        }\n      } else {\n        currentMsg.resolve(resolve)\n      }\n    }\n  }\n\n  const instance = initInstance(options, container)\n\n  // This is how we use message box programmably.\n  // Maybe consider releasing a template version?\n  // get component instance like v2.\n  const vm = instance.proxy as ComponentPublicInstance<\n    {\n      visible: boolean\n      doClose: () => void\n    } & MessageBoxState\n  >\n\n  for (const prop in options) {\n    if (hasOwn(options, prop) && !hasOwn(vm.$props, prop)) {\n      vm[prop as string] = options[prop]\n    }\n  }\n\n  watch(\n    () => vm.message,\n    (newVal, oldVal) => {\n      if (isVNode(newVal)) {\n        // Override slots since message is vnode type.\n        instance.slots.default = () => [newVal]\n      } else if (isVNode(oldVal) && !isVNode(newVal)) {\n        delete instance.slots.default\n      }\n    },\n    {\n      immediate: true,\n    }\n  )\n\n  // change visibility after everything is settled\n  vm.visible = true\n  return vm\n}\n\nasync function MessageBox(options: ElMessageBoxOptions): Promise<MessageBoxData>\nfunction MessageBox(\n  options: ElMessageBoxOptions | string | VNode\n): Promise<{ value: string; action: Action } | Action> {\n  if (!isClient) return\n  let callback\n  if (isString(options) || isVNode(options)) {\n    options = {\n      message: options,\n    }\n  } else {\n    callback = options.callback\n  }\n\n  return new Promise((resolve, reject) => {\n    const vm = showMessage(options)\n    // collect this vm in order to handle upcoming events.\n    messageInstance.set(vm, {\n      options,\n      callback,\n      resolve,\n      reject,\n    })\n  })\n}\n\nMessageBox.alert = (\n  message: string,\n  title: string,\n  options?: ElMessageBoxOptions\n) => {\n  if (typeof title === 'object') {\n    options = title\n    title = ''\n  } else if (title === undefined) {\n    title = ''\n  }\n\n  return MessageBox(\n    Object.assign(\n      {\n        title,\n        message,\n        type: '',\n        closeOnPressEscape: false,\n        closeOnClickModal: false,\n      },\n      options,\n      {\n        boxType: 'alert',\n      }\n    )\n  )\n}\n\nMessageBox.confirm = (\n  message: string,\n  title: string,\n  options?: ElMessageBoxOptions\n) => {\n  if (typeof title === 'object') {\n    options = title\n    title = ''\n  } else if (title === undefined) {\n    title = ''\n  }\n  return MessageBox(\n    Object.assign(\n      {\n        title,\n        message,\n        type: '',\n        showCancelButton: true,\n      },\n      options,\n      {\n        boxType: 'confirm',\n      }\n    )\n  )\n}\n\nMessageBox.prompt = (\n  message: string,\n  title: string,\n  options?: ElMessageBoxOptions\n) => {\n  if (typeof title === 'object') {\n    options = title\n    title = ''\n  } else if (title === undefined) {\n    title = ''\n  }\n  return MessageBox(\n    Object.assign(\n      {\n        title,\n        message,\n        showCancelButton: true,\n        showInput: true,\n        type: '',\n      },\n      options,\n      {\n        boxType: 'prompt',\n      }\n    )\n  )\n}\n\nMessageBox.close = () => {\n  // instance.setupInstall.doClose()\n  // instance.setupInstall.state.visible = false\n\n  messageInstance.forEach((_, vm) => {\n    vm.doClose()\n  })\n\n  messageInstance.clear()\n}\n\nexport default MessageBox as IElMessageBox\n"],"names":[],"mappings":"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"}