{"version":3,"file":"plugin.mjs","sources":["../../../components/loading/plugin.tsx"],"sourcesContent":["import { App, Plugin, createApp, defineComponent, h, reactive } from 'vue';\nimport { merge } from 'lodash-es';\nimport LoadingComponent from './loading';\nimport { getAttach, removeClass, addClass } from '../utils/dom';\nimport { TdLoadingProps, LoadingInstance, LoadingMethod } from './type';\nimport { usePrefixClass } from '../hooks/useConfig';\n\nlet fullScreenLoadingInstance: LoadingInstance = null;\n\nfunction mergeDefaultProps(props: TdLoadingProps): TdLoadingProps {\n  const options: TdLoadingProps = merge(\n    {\n      fullscreen: false,\n      attach: 'body',\n      loading: true,\n      preventScrollThrough: true,\n    },\n    props,\n  );\n\n  return options;\n}\n\nfunction createLoading(props: TdLoadingProps): LoadingInstance {\n  const mergedProps = mergeDefaultProps(props);\n\n  if (mergedProps.fullscreen && fullScreenLoadingInstance) {\n    return fullScreenLoadingInstance;\n  }\n\n  const component = defineComponent({\n    setup() {\n      const loadingOptions = reactive(mergedProps);\n      return {\n        loadingOptions,\n      };\n    },\n    render() {\n      return h(LoadingComponent, {\n        ...this.loadingOptions,\n      });\n    },\n  });\n\n  const attach = getAttach(mergedProps.fullscreen ? 'body' : mergedProps.attach);\n\n  const app = createApp(component);\n  const loading = app.mount(document.createElement('div'));\n  const parentRelativeClass = usePrefixClass('loading__parent--relative').value;\n  const lockClass = usePrefixClass('loading--lock');\n  const lockFullscreen = mergedProps.preventScrollThrough && mergedProps.fullscreen;\n\n  if (lockFullscreen) {\n    addClass(document.body, lockClass.value);\n  }\n\n  if (attach) {\n    addClass(attach, parentRelativeClass);\n  } else {\n    console.error('attach is not exist');\n  }\n\n  const loadingInstance: LoadingInstance = {\n    hide: () => {\n      loading.loading = false;\n      removeClass(attach, parentRelativeClass);\n      removeClass(document.body, lockClass.value);\n      app.unmount();\n    },\n  };\n  return loadingInstance;\n}\n\nfunction produceLoading(props: boolean | TdLoadingProps): LoadingInstance {\n  // 全屏加载\n  if (props === true) {\n    fullScreenLoadingInstance = createLoading({\n      fullscreen: true,\n      loading: true,\n      attach: 'body',\n      preventScrollThrough: true,\n    });\n    return fullScreenLoadingInstance;\n  }\n\n  if (props === false) {\n    // 销毁全屏实例\n    fullScreenLoadingInstance?.hide();\n    fullScreenLoadingInstance = null;\n    return;\n  }\n  return createLoading(props);\n}\n\nexport type LoadingPluginType = Plugin & LoadingMethod;\n\nexport const LoadingPlugin: LoadingPluginType = produceLoading as LoadingPluginType;\n\nLoadingPlugin.install = (app: App) => {\n  // eslint-disable-next-line no-param-reassign\n  app.config.globalProperties.$loading = produceLoading;\n};\n\nexport default LoadingPlugin;\n"],"names":["fullScreenLoadingInstance","mergeDefaultProps","props","options","merge","fullscreen","attach","loading","preventScrollThrough","createLoading","mergedProps","component","defineComponent","setup","loadingOptions","reactive","render","h","LoadingComponent","_objectSpread","getAttach","app","createApp","mount","document","createElement","parentRelativeClass","usePrefixClass","value","lockClass","lockFullscreen","addClass","body","console","error","loadingInstance","hide","removeClass","unmount","produceLoading","_fullScreenLoadingIns","LoadingPlugin","install","config","globalProperties","$loading"],"mappings":"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"}