{"version":3,"file":"plugin.mjs","sources":["../../src/loading/plugin.tsx"],"sourcesContent":["import { App, Plugin, createApp, defineComponent, h, reactive } from 'vue';\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 createLoading(props: TdLoadingProps): LoadingInstance {\n  const component = defineComponent({\n    setup() {\n      const loadingOptions = reactive(props);\n      return {\n        loadingOptions,\n      };\n    },\n    render() {\n      return h(LoadingComponent, {\n        ...this.loadingOptions,\n      });\n    },\n  });\n\n  const attach = getAttach(props.attach);\n\n  const loading = createApp(component).mount(document.createElement('div'));\n  const parentRelativeClass = usePrefixClass('loading__parent--relative').value;\n  const prefixClass = usePrefixClass('loading');\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      attach.querySelectorAll(`.${prefixClass.value}`)?.forEach((item) => {\n        item.remove();\n      });\n      removeClass(attach, parentRelativeClass);\n    },\n  };\n  return loadingInstance;\n}\n\nfunction produceLoading(props: boolean | TdLoadingProps): LoadingInstance {\n  const lockClass = usePrefixClass('loading--lock');\n\n  // 全屏加载\n  if (props === true) {\n    fullScreenLoadingInstance = createLoading({\n      fullscreen: true,\n      loading: true,\n      attach: 'body',\n    });\n    return fullScreenLoadingInstance;\n  }\n  removeClass(document.body, lockClass.value);\n\n  if (props === false) {\n    // 销毁全屏实例\n    removeClass(document.body, lockClass.value);\n    fullScreenLoadingInstance.hide();\n    fullScreenLoadingInstance = null;\n    return;\n  }\n  return createLoading(props);\n}\n\nexport type LoadingPluginType = Plugin & LoadingMethod;\n\nconst 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":["loadingOptions","addClass","console","removeClass","fullscreen","loading","attach","fullScreenLoadingInstance","LoadingPlugin","app"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,IAAA,yBAAA,GAAA,IAAA,CAAA;AAEA,SAAA,aAAA,CAAA,KAAA,EAAA;;;AAGY,MAAA,IAAA,cAAA,GAAA,QAAA,CAAA,KAAA,CAAA,CAAA;;AAEJA,QAAAA,cAAAA,EAAAA,cAAAA;;;;;AAOJ,KAAA;AACF,GAAA,CAAA,CAAA;AAEM,EAAA,IAAA,MAAA,GAAA,SAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA;AAEA,EAAA,IAAA,OAAA,GAAA,SAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,QAAA,CAAA,aAAA,CAAA,KAAA,CAAA,CAAA,CAAA;AACA,EAAA,IAAA,mBAAA,GAAA,cAAA,CAAA,2BAAA,CAAA,CAAA,KAAA,CAAA;AACA,EAAA,IAAA,WAAA,GAAA,cAAA,CAAA,SAAA,CAAA,CAAA;AAEN,EAAA,IAAA,MAAA,EAAA;AACEC,IAAAA,QAAAA,CAAAA,MAAAA,EAAAA,mBAAAA,CAAAA,CAAAA;AACF,GAAA,MAAA;AACEC,IAAAA,OAAAA,CAAAA,KAAAA,CAAAA,qBAAAA,CAAAA,CAAAA;AACF,GAAA;AAEA,EAAA,IAAA,eAAA,GAAA;;AACc,MAAA,IAAA,qBAAA,CAAA;;;;AAIV,OAAA,CAAA,CAAA;AACAC,MAAAA,WAAAA,CAAAA,MAAAA,EAAAA,mBAAAA,CAAAA,CAAAA;AACF,KAAA;;AAEK,EAAA,OAAA,eAAA,CAAA;AACT,CAAA;AAEA,SAAA,cAAA,CAAA,KAAA,EAAA;AACQ,EAAA,IAAA,SAAA,GAAA,cAAA,CAAA,eAAA,CAAA,CAAA;;;AAKFC,MAAAA,UAAAA,EAAAA,IAAAA;AACAC,MAAAA,OAAAA,EAAAA,IAAAA;AACAC,MAAAA,MAAAA,EAAAA,MAAAA;AACF,KAAA,CAAA,CAAA;AACO,IAAA,OAAA,yBAAA,CAAA;AACT,GAAA;;;;;AAO8BC,IAAAA,yBAAAA,GAAAA,IAAAA,CAAAA;AAC5B,IAAA,OAAA;AACF,GAAA;;AAEF,CAAA;AAIA,IAAA,aAAA,GAAA,eAAA;AAEAC,aAAAA,CAAAA,OAAAA,GAAAA,UAAAA,GAAAA,EAAAA;AAEMC,EAAAA,GAAAA,CAAAA,MAAAA,CAAAA,gBAAAA,CAAAA,QAAAA,GAAAA,cAAAA,CAAAA;AACN,CAAA;;;;"}