{"version":3,"file":"plugin.mjs","sources":["../../../components/drawer/plugin.tsx"],"sourcesContent":["import { App, ref, Plugin, defineComponent, h, onMounted, nextTick, render, createVNode, AppContext } from 'vue';\nimport DrawerComponent from './drawer';\nimport { getAttach } from '@tdesign/shared-utils';\nimport { DrawerOptions, DrawerMethod, DrawerInstance } from './type';\nimport { omit } from 'lodash-es';\n\nconst createDrawer: DrawerMethod = (props, context) => {\n  const options = { ...props };\n  const wrapper = document.createElement('div');\n  const visible = ref(false);\n  const { style } = options;\n\n  const updateStyle = (style: DrawerOptions['style']) => {\n    if (style) {\n      (wrapper.firstElementChild as HTMLElement).style.cssText += style;\n    }\n  };\n\n  function destroySelf() {\n    render(null, wrapper);\n    wrapper.remove();\n  }\n\n  const component = defineComponent({\n    setup(props, { expose }) {\n      const drawerOptions = ref<Record<string, any>>(options);\n      onMounted(() => {\n        nextTick(() => {\n          visible.value = true;\n        });\n        (document.activeElement as HTMLElement).blur();\n        nextTick(() => {\n          updateStyle(style);\n        });\n      });\n      const update = (newOptions: DrawerOptions) => {\n        drawerOptions.value = {\n          ...options,\n          drawerClassName: drawerOptions.value?.className,\n          ...omit(newOptions, ['className', 'style']),\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.style;\n        return h(DrawerComponent, {\n          onClose,\n          visible: visible.value,\n          drawerClassName: drawerOptions.value?.className,\n          ...omit(drawerOptions.value, 'className', 'style'),\n        });\n      };\n    },\n  });\n  const drawerComponent = createVNode(component);\n  // eslint-disable-next-line no-underscore-dangle\n  if (context ?? DrawerPlugin._context) {\n    // eslint-disable-next-line no-underscore-dangle\n    drawerComponent.appContext = context ?? DrawerPlugin._context;\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(drawerComponent, wrapper);\n\n  const destroyDrawer = () => {\n    visible.value = false;\n    setTimeout(() => {\n      destroySelf();\n    }, 400);\n  };\n\n  const drawerNode: DrawerInstance = {\n    show: () => {\n      visible.value = true;\n    },\n    hide: () => {\n      visible.value = false;\n    },\n    update: (newOptions: DrawerOptions) => {\n      drawerComponent.component.exposed.update(newOptions);\n      //style 由 updateStyle 来处理\n      updateStyle(newOptions.style);\n    },\n    destroy: () => {\n      destroyDrawer();\n    },\n  };\n  return drawerNode;\n};\n\nexport type DrawerPluginType = Plugin &\n  DrawerMethod & {\n    _context?: AppContext;\n  };\n\nexport const DrawerPlugin = createDrawer as DrawerPluginType;\n\nDrawerPlugin.install = (app: App): void => {\n  // 如果使用 use 方法，自动绑定当前 App 的 context\n  // eslint-disable-next-line no-underscore-dangle\n  DrawerPlugin._context = app._context;\n  app.config.globalProperties.$drawer = createDrawer;\n};\n\nexport default DrawerPlugin;\n"],"names":["createDrawer","props","context","options","_objectSpread","wrapper","document","createElement","visible","ref","style","updateStyle","firstElementChild","cssText","destroySelf","render","remove","component","defineComponent","setup","expose","_ref","drawerOptions","onMounted","nextTick","value","activeElement","blur","update","newOptions","_drawerOptions$value","drawerClassName","className","omit","_drawerOptions$value2","onClose","destroyOnClose","setTimeout","h","DrawerComponent","drawerComponent","createVNode","DrawerPlugin","_context","appContext","container","getAttach","attach","appendChild","console","error","destroyDrawer","drawerNode","show","hide","exposed","destroy","install","app","config","globalProperties","$drawer"],"mappings":"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"}