{"version":3,"file":"plugin.mjs","sources":["../../src/message/plugin.tsx"],"sourcesContent":["/**\n * Vue.prototype.$message = MessagePlugin;\n *\n * this.$message({ theme: 'info', default: '这是信息', duration: 3000 })\n * this.$message.info('这是信息')\n * this.$message.info('这是信息', 3000)\n * this.$message.info({ content: '这是信息', duration: 3000 })\n * this.$message.success({ content: '这是信息', duration: 3000 })\n * this.$message.warning()\n * this.$message.error()\n * this.$message.question()\n * this.$message.loading()\n * 上述函数返回值：promise: Promise<{close: Function}>\n *\n * // close all message\n * this.$message.closeAll()\n *\n * // close one message. 参数 p 为 this.$message 系列函数返回值，promise: Promise<{close: Function}>\n * this.$message.close(p)\n *\n * // close one message.\n * const msg = this.$message.info({ content: '这是信息', duration: 0 })\n * msg.then(instance => instance.close())\n *\n */\nimport { App, createApp, nextTick, Plugin, ComponentPublicInstance } from 'vue';\nimport MessageList, { DEFAULT_Z_INDEX } from './messageList';\nimport { getAttach } from '../utils/dom';\nimport {\n  MessageOptions,\n  MessageMethod,\n  MessageInstance,\n  MessageInfoMethod,\n  MessageErrorMethod,\n  MessageWarningMethod,\n  MessageSuccessMethod,\n  MessageLoadingMethod,\n  MessageQuestionMethod,\n  MessageCloseMethod,\n  MessageCloseAllMethod,\n} from './type';\nimport { AttachNodeReturnValue } from '../common';\nimport isObject from 'lodash/isObject';\nimport isString from 'lodash/isString';\n\n// 存储不同 attach 和 不同 placement 消息列表实例\nconst instanceMap: Map<AttachNodeReturnValue, Record<string, ComponentPublicInstance>> = new Map();\n\nfunction handleParams(params: MessageOptions): MessageOptions {\n  const options: MessageOptions = {\n    duration: 3000,\n    attach: 'body',\n    zIndex: DEFAULT_Z_INDEX,\n    placement: 'top',\n    ...params,\n  };\n  options.content = params.content;\n  return options;\n}\n\nconst MessageFunction = (props: MessageOptions): Promise<MessageInstance> => {\n  const options = handleParams(props);\n  const { attach, placement } = options;\n  const attachDom = getAttach(attach);\n  if (!instanceMap.get(attachDom)) {\n    instanceMap.set(attachDom, {});\n  }\n  const p = instanceMap.get(attachDom)[placement];\n  let mgKey: number;\n  if (!p) {\n    const wrapper = document.createElement('div');\n\n    const instance = createApp(MessageList, {\n      zIndex: options.zIndex,\n      placement: options.placement,\n    }).mount(wrapper);\n\n    mgKey = instance.add(options);\n    instanceMap.get(attachDom)[placement] = instance;\n    attachDom.appendChild(wrapper);\n  } else {\n    mgKey = p.add(options);\n  }\n  // 返回最新消息的 Element\n  return new Promise((resolve) => {\n    const ins = instanceMap.get(attachDom)[placement];\n    nextTick(() => {\n      const msg: Array<MessageInstance> = ins.messageList;\n      resolve(msg?.find((mg) => mg.$?.vnode?.key === mgKey));\n    });\n  });\n};\n\nconst showThemeMessage: MessageMethod = (theme, params, duration) => {\n  let options: MessageOptions = { theme };\n  if (isString(params)) {\n    options.content = params;\n  } else if (isObject(params) && !(params instanceof Array)) {\n    options = { ...options, ...params };\n  }\n  (duration || duration === 0) && (options.duration = duration);\n  return MessageFunction(options);\n};\n\ninterface ExtraApi {\n  info: MessageInfoMethod;\n  success: MessageSuccessMethod;\n  warning: MessageWarningMethod;\n  error: MessageErrorMethod;\n  question: MessageQuestionMethod;\n  loading: MessageLoadingMethod;\n  close: MessageCloseMethod;\n  closeAll: MessageCloseAllMethod;\n}\n\nexport type MessagePluginType = Plugin & ExtraApi & MessageMethod;\n\nconst extraApi: ExtraApi = {\n  info: (params, duration) => showThemeMessage('info', params, duration),\n  success: (params, duration) => showThemeMessage('success', params, duration),\n  warning: (params, duration) => showThemeMessage('warning', params, duration),\n  error: (params, duration) => showThemeMessage('error', params, duration),\n  question: (params, duration) => showThemeMessage('question', params, duration),\n  loading: (params, duration) => showThemeMessage('loading', params, duration),\n  close: (promise) => {\n    promise.then((instance) => instance?.close());\n  },\n  closeAll: () => {\n    if (instanceMap instanceof Map) {\n      instanceMap.forEach((attach) => {\n        Object.keys(attach).forEach((placement) => {\n          const instance = attach[placement];\n          instance.list = [];\n        });\n      });\n    }\n  },\n};\n\nconst MessagePlugin: MessagePluginType = showThemeMessage as MessagePluginType;\n\nMessagePlugin.install = (app: App): void => {\n  app.config.globalProperties.$message = showThemeMessage;\n  // 这样定义后，可以通过 this.$message 调用插件\n  Object.keys(extraApi).forEach((funcName) => {\n    app.config.globalProperties.$message[funcName] = extraApi[funcName];\n  });\n};\n\n/**\n * 这样定义后，用户可以直接引入方法然后调用，示例如下：\n * import { showMessage } from 'message/index.ts';\n * showMessage();\n */\nObject.keys(extraApi).forEach((funcName) => {\n  MessagePlugin[funcName] = extraApi[funcName];\n});\n\nexport default MessagePlugin;\n"],"names":["duration","attach","zIndex","placement","options","instanceMap","mgKey","attachDom","nextTick","theme","isString","isObject","info","success","warning","error","question","loading","close","promise","MessagePlugin","app","Object"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,IAAA,WAAA,kBAAA,IAAA,GAAA,EAAA,CAAA;AAEA,SAAA,YAAA,CAAA,MAAA,EAAA;;AAEIA,IAAAA,QAAAA,EAAAA,GAAAA;AACAC,IAAAA,MAAAA,EAAAA,MAAAA;AACAC,IAAAA,MAAAA,EAAAA,eAAAA;AACAC,IAAAA,SAAAA,EAAAA,KAAAA;AAAW,GAAA,EAAA,MAAA,CAAA,CAAA;AAGbC,EAAAA,OAAAA,CAAAA,OAAAA,GAAAA,MAAAA,CAAAA,OAAAA,CAAAA;AACO,EAAA,OAAA,OAAA,CAAA;AACT,CAAA;AAEA,IAAA,eAAA,GAAA,SAAA,eAAA,CAAA,KAAA,EAAA;AACQ,EAAA,IAAA,OAAA,GAAA,YAAA,CAAA,KAAA,CAAA,CAAA;AACA,EAAA,IAAA,MAAA,GAAA,OAAA,CAAA,MAAA;;AACA,EAAA,IAAA,SAAA,GAAA,SAAA,CAAA,MAAA,CAAA,CAAA;AACN,EAAA,IAAA,CAAA,WAAA,CAAA,GAAA,CAAA,SAAA,CAAA,EAAA;AACcC,IAAAA,WAAAA,CAAAA,GAAAA,CAAAA,SAAAA,EAAAA,EAAAA,CAAAA,CAAAA;AACd,GAAA;;AAEI,EAAA,IAAA,KAAA,CAAA;;AAEI,IAAA,IAAA,OAAA,GAAA,QAAA,CAAA,aAAA,CAAA,KAAA,CAAA,CAAA;AAEA,IAAA,IAAA,QAAA,GAAA,SAAA,CAAA,WAAA,EAAA;;;AAGN,KAAA,CAAA,CAAA,KAAA,CAAA,OAAA,CAAA,CAAA;AAEQC,IAAAA,KAAAA,GAAAA,QAAAA,CAAAA,GAAAA,CAAAA,OAAAA,CAAAA,CAAAA;;AAERC,IAAAA,SAAAA,CAAAA,WAAAA,CAAAA,OAAAA,CAAAA,CAAAA;AACF,GAAA,MAAA;AACUD,IAAAA,KAAAA,GAAAA,CAAAA,CAAAA,GAAAA,CAAAA,OAAAA,CAAAA,CAAAA;AACV,GAAA;AAEO,EAAA,OAAA,IAAA,OAAA,CAAA,UAAA,OAAA,EAAA;;AAELE,IAAAA,QAAAA,CAAAA,YAAAA;AACE,MAAA,IAAA,GAAA,GAAA,GAAA,CAAA,WAAA,CAAA;;AACmB,QAAA,IAAA,KAAA,CAAA;;AAAiC,OAAA,CAAA,CAAA,CAAA;AACtD,KAAA,CAAA,CAAA;AACF,GAAA,CAAA,CAAA;AACF,CAAA,CAAA;AAEA,IAAA,gBAAA,GAAA,SAAA,gBAAA,CAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA;AACM,EAAA,IAAA,OAAA,GAAA;AAA4BC,IAAAA,KAAAA,EAAAA,KAAAA;;AAC5B,EAAA,IAAAC,UAAA,CAAA,MAAA,CAAA,EAAA;;AAEJ,GAAA,MAAA,IAAAC,UAAA,CAAA,MAAA,CAAA,IAAA,EAAA,MAAA,YAAA,KAAA,CAAA,EAAA;;AAEA,GAAA;;;AAGF,CAAA,CAAA;AAeA,IAAA,QAAA,GAAA;AACEC,EAAAA,IAAAA,EAAAA,SAAAA,IAAAA,CAAAA,MAAAA,EAAAA,QAAAA,EAAAA;;AAAqE,GAAA;AACrEC,EAAAA,OAAAA,EAAAA,SAAAA,OAAAA,CAAAA,MAAAA,EAAAA,QAAAA,EAAAA;;AAA2E,GAAA;AAC3EC,EAAAA,OAAAA,EAAAA,SAAAA,OAAAA,CAAAA,MAAAA,EAAAA,QAAAA,EAAAA;;AAA2E,GAAA;AAC3EC,EAAAA,KAAAA,EAAAA,SAAAA,KAAAA,CAAAA,MAAAA,EAAAA,QAAAA,EAAAA;;AAAuE,GAAA;AACvEC,EAAAA,QAAAA,EAAAA,SAAAA,QAAAA,CAAAA,MAAAA,EAAAA,QAAAA,EAAAA;;AAA6E,GAAA;AAC7EC,EAAAA,OAAAA,EAAAA,SAAAA,OAAAA,CAAAA,MAAAA,EAAAA,QAAAA,EAAAA;;AAA2E,GAAA;AAC3EC,EAAAA,KAAAA,EAAAA,SAAAA,KAAAA,CAAAA,OAAAA,EAAAA;AACEC,IAAAA,OAAAA,CAAAA,IAAAA,CAAAA,UAAAA,QAAAA,EAAAA;;;;;;AAIcd,MAAAA,WAAAA,CAAAA,OAAAA,CAAAA,UAAAA,MAAAA,EAAAA;;AAER,UAAA,IAAA,QAAA,GAAA,MAAA,CAAA,SAAA,CAAA,CAAA;;AAEF,SAAA,CAAA,CAAA;AACF,OAAA,CAAA,CAAA;AACF,KAAA;AACF,GAAA;AACF,CAAA,CAAA;AAEA,IAAA,aAAA,GAAA,iBAAA;AAEAe,aAAAA,CAAAA,OAAAA,GAAAA,UAAAA,GAAAA,EAAAA;AACMC,EAAAA,GAAAA,CAAAA,MAAAA,CAAAA,gBAAAA,CAAAA,QAAAA,GAAAA,gBAAAA,CAAAA;;AAGFA,IAAAA,GAAAA,CAAAA,MAAAA,CAAAA,gBAAAA,CAAAA,QAAAA,CAAAA,QAAAA,CAAAA,GAAAA,QAAAA,CAAAA,QAAAA,CAAAA,CAAAA;AACF,GAAA,CAAA,CAAA;AACF,CAAA,CAAA;AAOAC,MAAAA,CAAAA,IAAAA,CAAAA,QAAAA,CAAAA,CAAAA,OAAAA,CAAAA,UAAAA,QAAAA,EAAAA;AACEF,EAAAA,aAAAA,CAAAA,QAAAA,CAAAA,GAAAA,QAAAA,CAAAA,QAAAA,CAAAA,CAAAA;AACF,CAAA,CAAA;;;;"}