{"version":3,"file":"plugin.mjs","sources":["../../src/toast/plugin.ts"],"sourcesContent":["import { createApp, App, DefineComponent } from 'vue';\nimport { isObject } from 'lodash-es';\nimport vueToast from './toast';\nimport { ToastOptions } from './type';\nimport { WithInstallType, isBrowser } from '../shared';\nimport { getAttach } from '../shared/dom';\n\nexport type ToastProps = ToastOptions;\n\nlet instance: any = null;\nlet app: App<Element>;\n\n/** 展示提示 */\nfunction Toast(props: string | Partial<ToastOptions>): DefineComponent<ToastOptions> {\n  if (!isBrowser) return;\n  const root = document.createElement('div');\n\n  const container = getAttach(isObject(props) ? props.attach : 'body');\n  if (container) {\n    container.appendChild(root);\n  } else {\n    console.error('attach is not exist');\n  }\n\n  const propsObject = {\n    duration: 2000,\n    ...parseOptions(props),\n  };\n\n  if (instance) {\n    instance.clear();\n  }\n\n  instance = vueToast;\n\n  instance.clear = () => {\n    clearTimeout(instance.timer);\n    app.unmount();\n    root.remove();\n    if (propsObject.onClose) {\n      propsObject.onClose();\n    }\n    instance = null;\n  };\n\n  if (propsObject.duration && propsObject.duration > 0) {\n    instance.timer = setTimeout(() => {\n      instance.clear();\n      if (propsObject.onDestroy) {\n        propsObject.onDestroy();\n      }\n    }, propsObject.duration);\n  }\n\n  app = createApp(instance, { ...propsObject });\n  app.mount(root);\n\n  return instance;\n}\n\nToast.clear = () => {\n  if (instance) {\n    instance.clear();\n  }\n};\n\n(['loading', 'success', 'warning', 'error'] as ToastOptions['theme'][]).forEach((type): void => {\n  if (!type) {\n    return;\n  }\n  Toast[type] = (options: ToastOptions | string) => {\n    let props = { message: '', theme: type } as unknown as ToastOptions;\n\n    if (typeof options === 'string') {\n      props.message = options;\n    } else {\n      props = { ...props, ...options };\n    }\n\n    return Toast(props);\n  };\n});\n\nfunction parseOptions(message?: Partial<ToastOptions> | string) {\n  if (typeof message === 'string') {\n    return { message };\n  }\n  return message;\n}\n\nToast.install = (app: App) => {\n  // 添加插件入口\n  // eslint-disable-next-line no-param-reassign\n  app.config.globalProperties.$toast = Toast as any;\n};\n\ntype ToastApi = {\n  /** 展示提示 */\n  (options?: Partial<ToastOptions> | string): void;\n  /** 展示加载提示 */\n  loading: (options?: Partial<ToastOptions> | string) => void;\n  /** 展示成功提示 */\n  success: (options?: Partial<ToastOptions> | string) => void;\n  /** 展示警告提示 */\n  warning: (options?: Partial<ToastOptions> | string) => void;\n  /** 展示失败提示 */\n  error: (options?: Partial<ToastOptions> | string) => void;\n  /** 关闭提示 */\n  clear: () => void;\n};\n\nexport const ToastPlugin: WithInstallType<typeof vueToast> & ToastApi = Toast as any;\nexport default ToastPlugin;\n\ndeclare module 'vue' {\n  // Bind to `this` keyword\n  export interface ComponentCustomProperties {\n    $toast: ToastApi;\n  }\n}\n"],"names":["instance","app","Toast","props","isBrowser","root","document","createElement","container","getAttach","isObject","attach","appendChild","console","error","propsObject","_objectSpread","duration","parseOptions","clear","vueToast","clearTimeout","timer","unmount","remove","onClose","setTimeout","onDestroy","createApp","mount","forEach","type","options","message","theme","install","config","globalProperties","$toast","ToastPlugin"],"mappings":"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"}