{"version":3,"file":"plugin.mjs","sources":["../../src/notification/plugin.ts"],"sourcesContent":["import { App, Plugin, createApp, nextTick, ComponentPublicInstance } from 'vue';\nimport NotificationList from './notificationList';\nimport { getAttach } from '../utils/dom';\nimport {\n  NotificationOptions,\n  NotificationInstance,\n  NotificationMethod,\n  NotificationInfoMethod,\n  NotificationWarningMethod,\n  NotificationErrorMethod,\n  NotificationSuccessMethod,\n  NotificationCloseMethod,\n  NotificationCloseAllMethod,\n} from './type';\nimport { AttachNodeReturnValue } from '../common';\nimport './style';\n\nlet seed = 0;\n// 存储不同 attach 和 不同 placement 消息列表实例\nconst instanceMap: Map<AttachNodeReturnValue, Record<string, ComponentPublicInstance>> = new Map();\n\nconst NotificationFunction = (options: NotificationOptions): Promise<NotificationInstance> => {\n  seed += 1;\n  const hackOptions = {\n    placement: 'top-right',\n    zIndex: 6000,\n    attach: 'body',\n    id: seed,\n    ...options,\n  };\n  hackOptions.content = options.content ? options.content : '';\n\n  const attachEl = getAttach(hackOptions.attach);\n\n  if (!instanceMap.get(attachEl)) {\n    instanceMap.set(attachEl, {});\n  }\n  let tmpInstance = instanceMap.get(attachEl)[hackOptions.placement];\n  if (!tmpInstance) {\n    const wrapper = document.createElement('div');\n\n    const instance = createApp(NotificationList, {\n      placement: hackOptions.placement,\n    }).mount(wrapper);\n\n    instance.add(hackOptions);\n    instanceMap.get(attachEl)[hackOptions.placement] = instance;\n    tmpInstance = instance;\n    attachEl.appendChild(instance.$el);\n  } else {\n    tmpInstance.add(hackOptions);\n  }\n\n  return new Promise((resolve) => {\n    const ins = instanceMap.get(attachEl)[hackOptions.placement];\n    nextTick(() => {\n      const { notificationList } = ins;\n      resolve(notificationList[notificationList.length - 1]);\n    });\n  });\n};\n\nconst showThemeNotification: NotificationMethod = (theme, options) => {\n  const hackOptions = { ...options, theme };\n  return NotificationFunction(hackOptions);\n};\n\ninterface ExtraApi {\n  info: NotificationInfoMethod;\n  success: NotificationSuccessMethod;\n  warning: NotificationWarningMethod;\n  error: NotificationErrorMethod;\n  close: NotificationCloseMethod;\n  closeAll: NotificationCloseAllMethod;\n}\n\nconst extraApi: ExtraApi = {\n  info: (options) => showThemeNotification('info', options),\n  success: (options) => showThemeNotification('success', options),\n  warning: (options) => showThemeNotification('warning', options),\n  error: (options) => showThemeNotification('error', options),\n  close: (promise) => {\n    promise.then((instance) => instance.close());\n  },\n  closeAll: () => {\n    instanceMap.forEach((attach) => {\n      Object.keys(attach).forEach((placement) => {\n        attach[placement].removeAll();\n      });\n    });\n  },\n};\nexport type NotificationPluginType = Plugin & ExtraApi & NotificationMethod;\n\nconst NotificationPlugin: NotificationPluginType = showThemeNotification as NotificationPluginType;\n\nNotificationPlugin.install = (app: App) => {\n  app.config.globalProperties.$notify = showThemeNotification;\n  Object.keys(extraApi).forEach((funcName) => {\n    app.config.globalProperties.$notify[funcName] = extraApi[funcName];\n  });\n};\n\nObject.keys(extraApi).forEach((funcName) => {\n  NotificationPlugin[funcName] = extraApi[funcName];\n});\n\nexport default NotificationPlugin;\n"],"names":["seed","placement","zIndex","attach","id","instanceMap","instance","tmpInstance","attachEl","nextTick","theme","close","promise","NotificationPlugin","app","Object"],"mappings":"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"}