{"version":3,"file":"plugin.mjs","sources":["../../src/dialog/plugin.tsx"],"sourcesContent":["import { App, createApp, ref, Plugin, defineComponent, h, onMounted } from 'vue';\nimport DialogComponent from './dialog';\nimport { getAttach } from '../utils/dom';\nimport { DialogOptions, DialogMethod, DialogConfirmMethod, DialogAlertMethod, DialogInstance } from './type';\n\nconst createDialog: DialogMethod = (props: DialogOptions) => {\n  const options = { ...props };\n  const wrapper = document.createElement('div');\n  const visible = ref(false);\n  const { className, style } = options;\n  const component = defineComponent({\n    setup(props, { expose }) {\n      const dialogOptions = ref<Record<string, any>>(options);\n      onMounted(() => {\n        visible.value = true;\n        // 处理 https://github.com/Tencent/tdesign-vue-next/issues/394\n        (document.activeElement as HTMLElement).blur();\n      });\n      const update = (newOptions: DialogOptions) => {\n        dialogOptions.value = {\n          ...options,\n          ...newOptions,\n        };\n      };\n\n      expose({\n        update,\n      });\n\n      return () => {\n        const onClose =\n          options.onClose ||\n          function () {\n            visible.value = false;\n          };\n        delete options.className;\n        delete options.style;\n        return h(DialogComponent, {\n          onClose,\n          visible: visible.value,\n          ...dialogOptions.value,\n        });\n      };\n    },\n  });\n  const dialogComponent = createApp(component);\n  const dialog = dialogComponent.mount(wrapper);\n\n  let preClassName = className;\n\n  const updateClassNameStyle = (className: string, style: DialogOptions['style']) => {\n    if (className) {\n      if (preClassName !== className) {\n        wrapper.firstElementChild.classList.remove(...preClassName.split(' ').map((name) => name.trim()));\n      }\n      className.split(' ').forEach((name) => {\n        wrapper.firstElementChild.classList.add(name.trim());\n      });\n    }\n\n    if (style) {\n      (wrapper.firstElementChild as HTMLElement).style.cssText += style;\n    }\n\n    preClassName = className;\n  };\n\n  updateClassNameStyle(className, style);\n\n  const container = getAttach(options.attach);\n  if (container) {\n    container.appendChild(wrapper);\n  } else {\n    console.error('attach is not exist');\n  }\n\n  const dialogNode: DialogInstance = {\n    show: () => {\n      visible.value = true;\n    },\n    hide: () => {\n      visible.value = false;\n    },\n    update: (newOptions: DialogOptions) => {\n      dialog.update(newOptions);\n      updateClassNameStyle(newOptions.className, newOptions.style);\n    },\n    destroy: () => {\n      visible.value = false;\n      setTimeout(() => {\n        dialogComponent.unmount();\n      }, 300);\n    },\n  };\n  return dialogNode;\n};\ninterface ExtraApi {\n  confirm: DialogConfirmMethod;\n  alert: DialogAlertMethod;\n}\n\nconst confirm: DialogConfirmMethod = (props: DialogOptions) => createDialog(props);\n\nconst alert: DialogAlertMethod = (props: Omit<DialogOptions, 'confirmBtn'>) => {\n  const options = { ...props };\n  options.cancelBtn = null;\n  return createDialog(options);\n};\n\nconst extraApi: ExtraApi = {\n  confirm,\n  alert,\n};\n\nexport type DialogPluginType = Plugin & ExtraApi & DialogAlertMethod;\n\nexport const DialogPlugin: DialogPluginType = createDialog as DialogPluginType;\n\nDialogPlugin.install = (app: App): void => {\n  app.config.globalProperties.$dialog = createDialog;\n  Object.keys(extraApi).forEach((funcName) => {\n    app.config.globalProperties.$dialog[funcName] = extraApi[funcName];\n  });\n};\n\nObject.keys(extraApi).forEach((funcName) => {\n  DialogPlugin[funcName] = extraApi[funcName];\n});\n\nexport default DialogPlugin;\n"],"names":["setup","onMounted","document","expose","update","DialogComponent","onClose","wrapper","className","updateClassNameStyle","container","console","dialog","setTimeout","confirm","alert","DialogPlugin","app","Object"],"mappings":"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"}