{"version":3,"file":"plugin.mjs","sources":["../../../components/notification/plugin.ts"],"sourcesContent":["import { App, Plugin, createApp, nextTick, ComponentPublicInstance } from 'vue';\nimport NotificationList from './notification-list';\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: NotificationInstance[] = ins.notificationList;\n      resolve(notificationList?.find((notify) => notify.$?.vnode?.key === hackOptions.id));\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};\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: keyof ExtraApi) => {\n    app.config.globalProperties.$notify[funcName] = extraApi[funcName];\n  });\n};\n\nObject.keys(extraApi).forEach((funcName: keyof ExtraApi) => {\n  // @ts-ignore\n  // TODO https://github.com/microsoft/TypeScript/issues/32693\n  NotificationPlugin[funcName] = extraApi[funcName];\n});\n\nexport const NotifyPlugin = NotificationPlugin;\n\nexport default NotificationPlugin;\n"],"names":["seed","instanceMap","Map","NotificationFunction","options","hackOptions","_objectSpread","placement","zIndex","attach","id","content","attachEl","getAttach","get","set","tmpInstance","wrapper","document","createElement","instance","createApp","NotificationList","mount","add","appendChild","$el","Promise","resolve","ins","nextTick","notificationList","find","notify","_notify$$","$","vnode","key","showThemeNotification","theme","extraApi","info","success","warning","error","close","promise","then","closeAll","forEach","Object","keys","removeAll","NotificationPlugin","install","app","config","globalProperties","$notify","funcName","NotifyPlugin"],"mappings":"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"}