{"version":3,"file":"plugin.mjs","sources":["../../../components/dialog/plugin.tsx"],"sourcesContent":["import { App, ref, Plugin, defineComponent, h, onMounted, nextTick, AppContext, createVNode, render } from 'vue';\nimport DialogComponent from './dialog';\nimport { getAttach } from '@tdesign/shared-utils';\nimport { DialogOptions, DialogMethod, DialogConfirmMethod, DialogAlertMethod, DialogInstance } from './type';\nimport { omit } from 'lodash-es';\n\nconst createDialog: DialogMethod = (props, context) => {\n  const options = { ...props };\n  const wrapper = document.createElement('div');\n  const visible = ref(false);\n  const { className, style } = options;\n\n  let preClassName = className;\n\n  const updateClassNameStyle = (className: string, style: DialogOptions['style']) => {\n    if (className) {\n      if (preClassName && 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  function destroySelf() {\n    render(null, wrapper);\n    wrapper.remove();\n  }\n\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        nextTick(() => {\n          updateClassNameStyle(className, style);\n        });\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            if (options.destroyOnClose) {\n              setTimeout(() => {\n                destroySelf();\n              }, 300);\n            }\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 dialog = createVNode(component);\n  // eslint-disable-next-line no-underscore-dangle\n  if (context ?? DialogPlugin._context) {\n    // eslint-disable-next-line no-underscore-dangle\n    dialog.appContext = context ?? DialogPlugin._context;\n  }\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  render(dialog, wrapper);\n\n  const dialogNode: DialogInstance = {\n    show: () => {\n      visible.value = true;\n    },\n    hide: () => {\n      visible.value = false;\n    },\n    update: (newOptions: DialogOptions) => {\n      // className & style由updateClassNameStyle来处理\n      dialog.component.exposed.update(omit(newOptions, ['className', 'style']));\n      updateClassNameStyle(newOptions.className, newOptions.style);\n    },\n    destroy: () => {\n      visible.value = false;\n      setTimeout(() => {\n        destroySelf();\n      }, 300);\n    },\n    setConfirmLoading: (val: boolean) => {\n      dialog.component.exposed.update({ confirmLoading: val });\n    },\n  };\n  return dialogNode;\n};\ninterface ExtraApi {\n  confirm: DialogConfirmMethod;\n  alert: DialogAlertMethod;\n}\n\ntype ExtraApiType = keyof ExtraApi;\n\nconst confirm: DialogConfirmMethod = (props: DialogOptions, context?: AppContext) => createDialog(props, context);\n\nconst alert: DialogAlertMethod = (props: Omit<DialogOptions, 'confirmBtn'>, context?: AppContext) => {\n  const options = { ...props };\n  options.cancelBtn = null;\n  return createDialog(options, context);\n};\n\nconst extraApi: ExtraApi = {\n  confirm,\n  alert,\n};\n\nexport type DialogPluginType = Plugin &\n  ExtraApi &\n  DialogMethod & {\n    _context?: AppContext;\n  };\n\nexport const DialogPlugin = createDialog as DialogPluginType;\n\nDialogPlugin.install = (app: App): void => {\n  app.config.globalProperties.$dialog = createDialog;\n  // 如果使用 use 方法，自动绑定当前 App 的 context\n  // eslint-disable-next-line no-underscore-dangle\n  DialogPlugin._context = app._context;\n  Object.keys(extraApi).forEach((funcName: ExtraApiType) => {\n    app.config.globalProperties.$dialog[funcName] = extraApi[funcName];\n  });\n};\n\nObject.keys(extraApi).forEach((funcName: ExtraApiType) => {\n  DialogPlugin[funcName] = extraApi[funcName];\n});\n\nexport default DialogPlugin;\n"],"names":["createDialog","props","context","options","_objectSpread","wrapper","document","createElement","visible","ref","className","style","preClassName","updateClassNameStyle","_wrapper$firstElement","firstElementChild","classList","remove","apply","_toConsumableArray","split","map","name","trim","forEach","add","cssText","destroySelf","render","component","defineComponent","setup","expose","_ref","dialogOptions","onMounted","value","activeElement","blur","nextTick","update","newOptions","onClose","destroyOnClose","setTimeout","h","DialogComponent","dialog","createVNode","DialogPlugin","_context","appContext","container","getAttach","attach","appendChild","console","error","dialogNode","show","hide","exposed","omit","destroy","setConfirmLoading","val","confirmLoading","confirm","alert","cancelBtn","extraApi","install","app","config","globalProperties","$dialog","Object","keys","funcName"],"mappings":"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"}