{"version":3,"file":"index.mjs","sources":["../../../components/loading/index.ts"],"sourcesContent":["import { createApp, createVNode, render } from 'vue'\r\n\r\nimport Component from './loading.vue'\r\nimport { proxyExposed, unrefElement } from '@vexip-ui/hooks'\r\nimport { destroyObject, isClient } from '@vexip-ui/utils'\r\n\r\nimport type { App, MaybeRef } from 'vue'\r\nimport type { MaybeInstance } from '@vexip-ui/hooks'\r\nimport type { LoadingInstance, LoadingOptions, LoadingState } from './symbol'\r\n\r\nexport type { LoadingState, LoadingOptions }\r\n\r\ntype InitLoadingOptions = Omit<LoadingOptions, 'percent'>\r\n\r\nexport class LoadingManager {\r\n  name: string\r\n  defaults: InitLoadingOptions\r\n\r\n  private _mountedApp: App<unknown> | null\r\n  private _instance: LoadingInstance | null\r\n  private _innerApp: App<unknown> | null\r\n  private _container: HTMLElement | null\r\n  private _wrapper: HTMLElement | SVGElement | null\r\n  private _mountedEl: HTMLElement | null\r\n\r\n  constructor(options: InitLoadingOptions = {}) {\r\n    this._mountedApp = null\r\n    this._instance = null\r\n    this._innerApp = null\r\n    this._container = null\r\n    this._wrapper = null\r\n    this._mountedEl = null\r\n    this.name = 'Loading'\r\n    this.defaults = {}\r\n\r\n    this.config(options)\r\n  }\r\n\r\n  open(percent: number): void\r\n  open(options: LoadingOptions): void\r\n  open(options: number | LoadingOptions) {\r\n    if (!isClient) return\r\n\r\n    if (typeof options === 'number') {\r\n      options = { percent: options }\r\n    }\r\n\r\n    this._getInstance()!.startLoading({ ...this.defaults, ...options })\r\n  }\r\n\r\n  close() {\r\n    this.open(100)\r\n  }\r\n\r\n  config(options: InitLoadingOptions) {\r\n    this.defaults = { ...this.defaults, ...options }\r\n  }\r\n\r\n  clone() {\r\n    const manager = new LoadingManager(this.defaults)\r\n\r\n    manager._mountedApp = this._mountedApp\r\n\r\n    return manager\r\n  }\r\n\r\n  destroy() {\r\n    this._mountedEl && this._wrapper?.removeChild(this._mountedEl)\r\n    this._innerApp?.unmount()\r\n    this._container && render(null, this._container)\r\n    destroyObject(this)\r\n  }\r\n\r\n  isDestroyed() {\r\n    return false\r\n  }\r\n\r\n  install(app: App, options: InitLoadingOptions & { property?: string } = {}) {\r\n    const { property, ...others } = options\r\n\r\n    this.config(others)\r\n    this._mountedApp = app\r\n\r\n    if (property || !app.config.globalProperties.$loading) {\r\n      app.config.globalProperties[property || '$loading'] = this\r\n    }\r\n  }\r\n\r\n  transferTo(target: MaybeRef<string | MaybeInstance>) {\r\n    if (!isClient) return\r\n\r\n    const el = unrefElement(target)\r\n\r\n    if (el) {\r\n      this._wrapper = el\r\n\r\n      if (this._instance) {\r\n        this._mountedEl && this._wrapper.appendChild(this._mountedEl)\r\n      } else {\r\n        this._getInstance()\r\n      }\r\n    }\r\n  }\r\n\r\n  private _getInstance() {\r\n    if (!this._instance && isClient) {\r\n      if (!this._mountedApp) {\r\n        console.warn('[vexip-ui:Loading]: App missing, the plugin maybe not installed.')\r\n\r\n        this._container = document.createElement('div')\r\n        this._innerApp = createApp(Component)\r\n        this._instance = this._innerApp.mount(this._container) as LoadingInstance\r\n      } else {\r\n        const vnode = createVNode(Component, null, null)\r\n\r\n        this._container = document.createElement('div')\r\n        vnode.appContext = this._mountedApp._context\r\n\r\n        render(vnode, this._container)\r\n\r\n        this._instance = proxyExposed<LoadingInstance>(vnode)\r\n      }\r\n\r\n      this._mountedEl = this._container.firstElementChild as HTMLElement\r\n      ;(this._wrapper || document.body).appendChild(this._mountedEl)\r\n    }\r\n\r\n    return this._instance\r\n  }\r\n}\r\n\r\nexport const Loading = new LoadingManager()\r\n"],"names":["LoadingManager","options","__publicField","isClient","manager","_a","_b","render","destroyObject","app","property","others","target","el","unrefElement","createApp","Component","vnode","createVNode","proxyExposed","Loading"],"mappings":";;;;;;;;AAcO,MAAMA,EAAe;AAAA,EAW1B,YAAYC,IAA8B,IAAI;AAV9C,IAAAC,EAAA;AACA,IAAAA,EAAA;AAEQ,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AAGN,SAAK,cAAc,MACnB,KAAK,YAAY,MACjB,KAAK,YAAY,MACjB,KAAK,aAAa,MAClB,KAAK,WAAW,MAChB,KAAK,aAAa,MAClB,KAAK,OAAO,WACZ,KAAK,WAAW,CAAC,GAEjB,KAAK,OAAOD,CAAO;AAAA,EAAA;AAAA,EAKrB,KAAKA,GAAkC;AACrC,IAAKE,MAED,OAAOF,KAAY,aACXA,IAAA,EAAE,SAASA,EAAQ,IAG1B,KAAA,eAAgB,aAAa,EAAE,GAAG,KAAK,UAAU,GAAGA,GAAS;AAAA,EAAA;AAAA,EAGpE,QAAQ;AACN,SAAK,KAAK,GAAG;AAAA,EAAA;AAAA,EAGf,OAAOA,GAA6B;AAClC,SAAK,WAAW,EAAE,GAAG,KAAK,UAAU,GAAGA,EAAQ;AAAA,EAAA;AAAA,EAGjD,QAAQ;AACN,UAAMG,IAAU,IAAIJ,EAAe,KAAK,QAAQ;AAEhD,WAAAI,EAAQ,cAAc,KAAK,aAEpBA;AAAA,EAAA;AAAA,EAGT,UAAU;;AACR,SAAK,gBAAcC,IAAA,KAAK,aAAL,QAAAA,EAAe,YAAY,KAAK,eACnDC,IAAA,KAAK,cAAL,QAAAA,EAAgB,WAChB,KAAK,cAAcC,EAAO,MAAM,KAAK,UAAU,GAC/CC,EAAc,IAAI;AAAA,EAAA;AAAA,EAGpB,cAAc;AACL,WAAA;AAAA,EAAA;AAAA,EAGT,QAAQC,GAAUR,IAAsD,IAAI;AAC1E,UAAM,EAAE,UAAAS,GAAU,GAAGC,EAAA,IAAWV;AAEhC,SAAK,OAAOU,CAAM,GAClB,KAAK,cAAcF,IAEfC,KAAY,CAACD,EAAI,OAAO,iBAAiB,cAC3CA,EAAI,OAAO,iBAAiBC,KAAY,UAAU,IAAI;AAAA,EACxD;AAAA,EAGF,WAAWE,GAA0C;AACnD,QAAI,CAACT,EAAU;AAET,UAAAU,IAAKC,EAAaF,CAAM;AAE9B,IAAIC,MACF,KAAK,WAAWA,GAEZ,KAAK,YACP,KAAK,cAAc,KAAK,SAAS,YAAY,KAAK,UAAU,IAE5D,KAAK,aAAa;AAAA,EAEtB;AAAA,EAGM,eAAe;AACjB,QAAA,CAAC,KAAK,aAAaV,GAAU;AAC3B,UAAA,CAAC,KAAK;AACR,gBAAQ,KAAK,kEAAkE,GAE1E,KAAA,aAAa,SAAS,cAAc,KAAK,GACzC,KAAA,YAAYY,EAAUC,CAAS,GACpC,KAAK,YAAY,KAAK,UAAU,MAAM,KAAK,UAAU;AAAA,WAChD;AACL,cAAMC,IAAQC,EAAYF,GAAW,MAAM,IAAI;AAE1C,aAAA,aAAa,SAAS,cAAc,KAAK,GACxCC,EAAA,aAAa,KAAK,YAAY,UAE7BV,EAAAU,GAAO,KAAK,UAAU,GAExB,KAAA,YAAYE,EAA8BF,CAAK;AAAA,MAAA;AAGjD,WAAA,aAAa,KAAK,WAAW,oBAChC,KAAK,YAAY,SAAS,MAAM,YAAY,KAAK,UAAU;AAAA,IAAA;AAG/D,WAAO,KAAK;AAAA,EAAA;AAEhB;AAEa,MAAAG,IAAU,IAAIpB,EAAe;"}