{"version":3,"file":"service.mjs","sources":["../../../../../../../packages/components/loading/src/service.ts"],"sourcesContent":["// @ts-nocheck\nimport { nextTick } from 'vue'\nimport {\n  addClass,\n  getStyle,\n  isClient,\n  isString,\n  removeClass,\n} from '@hd-front-end/utils'\nimport { createLoadingComponent } from './loading'\n\nimport type { UseNamespaceReturn, UseZIndexReturn } from '@hd-front-end/hooks'\nimport type { LoadingInstance } from './loading'\nimport type { LoadingOptionsResolved } from '..'\nimport type { LoadingOptions } from './types'\nimport type { AppContext, CSSProperties } from 'vue'\n\nlet fullscreenInstance: LoadingInstance | undefined = undefined\n\nconst Loading = function (\n  options: LoadingOptions = {},\n  context?: AppContext | null\n): LoadingInstance {\n  if (!isClient) return undefined as any\n\n  const resolved = resolveOptions(options)\n\n  if (resolved.fullscreen && fullscreenInstance) {\n    return fullscreenInstance\n  }\n\n  const instance = createLoadingComponent(\n    {\n      ...resolved,\n      closed: () => {\n        resolved.closed?.()\n        if (resolved.fullscreen) fullscreenInstance = undefined\n      },\n    },\n    context ?? Loading._context\n  )\n\n  addStyle(resolved, resolved.parent, instance)\n  addClassList(resolved, resolved.parent, instance)\n\n  resolved.parent.vLoadingAddClassList = () =>\n    addClassList(resolved, resolved.parent, instance)\n\n  /**\n   * add loading-number to parent.\n   * because if a fullscreen loading is triggered when somewhere\n   * a v-loading.body was triggered before and it's parent is\n   * document.body which with a margin , the fullscreen loading's\n   * destroySelf function will remove 'el-loading-parent--relative',\n   * and then the position of v-loading.body will be error.\n   */\n  let loadingNumber: string | null =\n    resolved.parent.getAttribute('loading-number')\n  if (!loadingNumber) {\n    loadingNumber = '1'\n  } else {\n    loadingNumber = `${Number.parseInt(loadingNumber) + 1}`\n  }\n  resolved.parent.setAttribute('loading-number', loadingNumber)\n\n  resolved.parent.appendChild(instance.$el)\n\n  // after instance render, then modify visible to trigger transition\n  nextTick(() => (instance.visible.value = resolved.visible))\n\n  if (resolved.fullscreen) {\n    fullscreenInstance = instance\n  }\n  return instance\n}\n\nconst resolveOptions = (options: LoadingOptions): LoadingOptionsResolved => {\n  let target: HTMLElement\n  if (isString(options.target)) {\n    target =\n      document.querySelector<HTMLElement>(options.target) ?? document.body\n  } else {\n    target = options.target || document.body\n  }\n  return {\n    parent: target === document.body || options.body ? document.body : target,\n    background: options.background || '',\n    svg: options.svg || '',\n    svgViewBox: options.svgViewBox || '',\n    spinner: options.spinner || false,\n    text: options.text || '',\n    fullscreen: target === document.body && (options.fullscreen ?? true),\n    lock: options.lock ?? false,\n    customClass: options.customClass || '',\n    visible: options.visible ?? true,\n    beforeClose: options.beforeClose,\n    closed: options.closed,\n    target,\n  }\n}\n\nconst addStyle = async (\n  options: LoadingOptionsResolved,\n  parent: HTMLElement,\n  instance: LoadingInstance\n) => {\n  // Compatible with the instance data format of vue@3.2.12 and earlier versions #12351\n  const { nextZIndex } =\n    ((instance.vm as any).zIndex as UseZIndexReturn) ||\n    (instance.vm as any)._.exposed.zIndex\n\n  const maskStyle: CSSProperties = {}\n  if (options.fullscreen) {\n    instance.originalPosition.value = getStyle(document.body, 'position')\n    instance.originalOverflow.value = getStyle(document.body, 'overflow')\n    maskStyle.zIndex = nextZIndex()\n  } else if (options.parent === document.body) {\n    instance.originalPosition.value = getStyle(document.body, 'position')\n    /**\n     * await dom render when visible is true in init,\n     * because some component's height maybe 0.\n     * e.g. el-table.\n     */\n    await nextTick()\n    for (const property of ['top', 'left']) {\n      const scroll = property === 'top' ? 'scrollTop' : 'scrollLeft'\n      maskStyle[property] = `${\n        (options.target as HTMLElement).getBoundingClientRect()[property] +\n        document.body[scroll] +\n        document.documentElement[scroll] -\n        Number.parseInt(getStyle(document.body, `margin-${property}`), 10)\n      }px`\n    }\n    for (const property of ['height', 'width']) {\n      maskStyle[property] = `${\n        (options.target as HTMLElement).getBoundingClientRect()[property]\n      }px`\n    }\n  } else {\n    instance.originalPosition.value = getStyle(parent, 'position')\n  }\n  for (const [key, value] of Object.entries(maskStyle)) {\n    instance.$el.style[key] = value\n  }\n}\n\nconst addClassList = (\n  options: LoadingOptions,\n  parent: HTMLElement,\n  instance: LoadingInstance\n) => {\n  // Compatible with the instance data format of vue@3.2.12 and earlier versions #12351\n  const ns =\n    ((instance.vm as any).ns as UseNamespaceReturn) ||\n    (instance.vm as any)._.exposed.ns\n\n  if (\n    !['absolute', 'fixed', 'sticky'].includes(instance.originalPosition.value)\n  ) {\n    addClass(parent, ns.bm('parent', 'relative'))\n  } else {\n    removeClass(parent, ns.bm('parent', 'relative'))\n  }\n  if (options.fullscreen && options.lock) {\n    addClass(parent, ns.bm('parent', 'hidden'))\n  } else {\n    removeClass(parent, ns.bm('parent', 'hidden'))\n  }\n}\n\nLoading._context = null as AppContext | null\nexport default Loading\n"],"names":[],"mappings":";;;;;;AAiBA,IAAI,kBAAkD,GAAA,KAAA,CAAA,CAAA;AAEtD,MAAM,OAAU,GAAA,SACd,OAA0B,GAAA,IAC1B,OACiB,EAAA;AACjB,EAAA,IAAI,CAAC,QAAA;AAAU,IAAO,OAAA,KAAA,CAAA,CAAA;AAEtB,EAAM,MAAA,QAAA,GAAW,eAAe,OAAO,CAAA,CAAA;AAEvC,EAAI,IAAA,QAAA,CAAS,cAAc,kBAAoB,EAAA;AAC7C,IAAO,OAAA,kBAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,QAAW,GAAA,sBAAA;AAAA,IACf;AAAA,MACE,GAAG,QAAA;AAAA,MACH,QAAQ,MAAM;AAlCpB,QAAA,IAAA,EAAA,CAAA;AAmCQ,QAAA,CAAA,EAAA,GAAA,QAAA,CAAS,MAAT,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,QAAA,CAAA,CAAA;AACA,QAAA,IAAI,QAAS,CAAA,UAAA;AAAY,UAAqB,kBAAA,GAAA,KAAA,CAAA,CAAA;AAAA,OAChD;AAAA,KACF;AAAA,IACA,4BAAW,OAAQ,CAAA,QAAA;AAAA,GACrB,CAAA;AAEA,EAAS,QAAA,CAAA,QAAA,EAAU,QAAS,CAAA,MAAA,EAAQ,QAAQ,CAAA,CAAA;AAC5C,EAAa,YAAA,CAAA,QAAA,EAAU,QAAS,CAAA,MAAA,EAAQ,QAAQ,CAAA,CAAA;AAEhD,EAAA,QAAA,CAAS,OAAO,oBAAuB,GAAA,MACrC,aAAa,QAAU,EAAA,QAAA,CAAS,QAAQ,QAAQ,CAAA,CAAA;AAUlD,EAAA,IAAI,aACF,GAAA,QAAA,CAAS,MAAO,CAAA,YAAA,CAAa,gBAAgB,CAAA,CAAA;AAC/C,EAAA,IAAI,CAAC,aAAe,EAAA;AAClB,IAAgB,aAAA,GAAA,GAAA,CAAA;AAAA,GACX,MAAA;AACL,IAAA,aAAA,GAAgB,CAAG,EAAA,MAAA,CAAO,QAAS,CAAA,aAAa,CAAI,GAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GACtD;AACA,EAAS,QAAA,CAAA,MAAA,CAAO,YAAa,CAAA,gBAAA,EAAkB,aAAa,CAAA,CAAA;AAE5D,EAAS,QAAA,CAAA,MAAA,CAAO,WAAY,CAAA,QAAA,CAAS,GAAG,CAAA,CAAA;AAGxC,EAAA,QAAA,CAAS,MAAO,QAAA,CAAS,OAAQ,CAAA,KAAA,GAAQ,SAAS,OAAQ,CAAA,CAAA;AAE1D,EAAA,IAAI,SAAS,UAAY,EAAA;AACvB,IAAqB,kBAAA,GAAA,QAAA,CAAA;AAAA,GACvB;AACA,EAAO,OAAA,QAAA,CAAA;AACT,EAAA;AAEA,MAAM,cAAA,GAAiB,CAAC,OAAoD,KAAA;AA5E5E,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AA6EE,EAAI,IAAA,MAAA,CAAA;AACJ,EAAI,IAAA,QAAA,CAAS,OAAQ,CAAA,MAAM,CAAG,EAAA;AAC5B,IAAA,MAAA,GAAA,CACE,cAAS,aAA2B,CAAA,OAAA,CAAQ,MAAM,CAAA,KAAlD,YAAuD,QAAS,CAAA,IAAA,CAAA;AAAA,GAC7D,MAAA;AACL,IAAS,MAAA,GAAA,OAAA,CAAQ,UAAU,QAAS,CAAA,IAAA,CAAA;AAAA,GACtC;AACA,EAAO,OAAA;AAAA,IACL,QAAQ,MAAW,KAAA,QAAA,CAAS,QAAQ,OAAQ,CAAA,IAAA,GAAO,SAAS,IAAO,GAAA,MAAA;AAAA,IACnE,UAAA,EAAY,QAAQ,UAAc,IAAA,EAAA;AAAA,IAClC,GAAA,EAAK,QAAQ,GAAO,IAAA,EAAA;AAAA,IACpB,UAAA,EAAY,QAAQ,UAAc,IAAA,EAAA;AAAA,IAClC,OAAA,EAAS,QAAQ,OAAW,IAAA,KAAA;AAAA,IAC5B,IAAA,EAAM,QAAQ,IAAQ,IAAA,EAAA;AAAA,IACtB,YAAY,MAAW,KAAA,QAAA,CAAS,IAAS,KAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,eAAR,IAAsB,GAAA,EAAA,GAAA,IAAA,CAAA;AAAA,IAC/D,IAAA,EAAA,CAAM,EAAQ,GAAA,OAAA,CAAA,IAAA,KAAR,IAAgB,GAAA,EAAA,GAAA,KAAA;AAAA,IACtB,WAAA,EAAa,QAAQ,WAAe,IAAA,EAAA;AAAA,IACpC,OAAA,EAAA,CAAS,EAAQ,GAAA,OAAA,CAAA,OAAA,KAAR,IAAmB,GAAA,EAAA,GAAA,IAAA;AAAA,IAC5B,aAAa,OAAQ,CAAA,WAAA;AAAA,IACrB,QAAQ,OAAQ,CAAA,MAAA;AAAA,IAChB,MAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;AAEA,MAAM,QAAW,GAAA,OACf,OACA,EAAA,MAAA,EACA,QACG,KAAA;AAEH,EAAM,MAAA,EAAE,YACJ,GAAA,QAAA,CAAS,GAAW,MACrB,IAAA,QAAA,CAAS,EAAW,CAAA,CAAA,CAAE,OAAQ,CAAA,MAAA,CAAA;AAEjC,EAAA,MAAM,YAA2B,EAAC,CAAA;AAClC,EAAA,IAAI,QAAQ,UAAY,EAAA;AACtB,IAAA,QAAA,CAAS,gBAAiB,CAAA,KAAA,GAAQ,QAAS,CAAA,QAAA,CAAS,MAAM,UAAU,CAAA,CAAA;AACpE,IAAA,QAAA,CAAS,gBAAiB,CAAA,KAAA,GAAQ,QAAS,CAAA,QAAA,CAAS,MAAM,UAAU,CAAA,CAAA;AACpE,IAAA,SAAA,CAAU,SAAS,UAAW,EAAA,CAAA;AAAA,GACrB,MAAA,IAAA,OAAA,CAAQ,MAAW,KAAA,QAAA,CAAS,IAAM,EAAA;AAC3C,IAAA,QAAA,CAAS,gBAAiB,CAAA,KAAA,GAAQ,QAAS,CAAA,QAAA,CAAS,MAAM,UAAU,CAAA,CAAA;AAMpE,IAAA,MAAM,QAAS,EAAA,CAAA;AACf,IAAA,KAAA,MAAW,QAAY,IAAA,CAAC,KAAO,EAAA,MAAM,CAAG,EAAA;AACtC,MAAM,MAAA,MAAA,GAAS,QAAa,KAAA,KAAA,GAAQ,WAAc,GAAA,YAAA,CAAA;AAClD,MAAU,SAAA,CAAA,QAAA,CAAA,GAAY,GACnB,OAAQ,CAAA,MAAA,CAAuB,uBAAwB,CAAA,QAAA,CAAA,GACxD,SAAS,IAAK,CAAA,MAAA,CAAA,GACd,SAAS,eAAgB,CAAA,MAAA,CAAA,GACzB,OAAO,QAAS,CAAA,QAAA,CAAS,SAAS,IAAM,EAAA,CAAA,OAAA,EAAU,QAAU,CAAA,CAAA,CAAA,EAAG,EAAE,CAAA,CAAA,EAAA,CAAA,CAAA;AAAA,KAErE;AACA,IAAA,KAAA,MAAW,QAAY,IAAA,CAAC,QAAU,EAAA,OAAO,CAAG,EAAA;AAC1C,MAAA,SAAA,CAAU,QAAY,CAAA,GAAA,CAAA,EACnB,OAAQ,CAAA,MAAA,CAAuB,uBAAwB,CAAA,QAAA,CAAA,CAAA,EAAA,CAAA,CAAA;AAAA,KAE5D;AAAA,GACK,MAAA;AACL,IAAA,QAAA,CAAS,gBAAiB,CAAA,KAAA,GAAQ,QAAS,CAAA,MAAA,EAAQ,UAAU,CAAA,CAAA;AAAA,GAC/D;AACA,EAAA,KAAA,MAAW,CAAC,GAAK,EAAA,KAAK,KAAK,MAAO,CAAA,OAAA,CAAQ,SAAS,CAAG,EAAA;AACpD,IAAS,QAAA,CAAA,GAAA,CAAI,MAAM,GAAO,CAAA,GAAA,KAAA,CAAA;AAAA,GAC5B;AACF,CAAA,CAAA;AAEA,MAAM,YAAe,GAAA,CACnB,OACA,EAAA,MAAA,EACA,QACG,KAAA;AAEH,EAAA,MAAM,KACF,QAAS,CAAA,EAAA,CAAW,MACrB,QAAS,CAAA,EAAA,CAAW,EAAE,OAAQ,CAAA,EAAA,CAAA;AAEjC,EACE,IAAA,CAAC,CAAC,UAAA,EAAY,OAAS,EAAA,QAAQ,EAAE,QAAS,CAAA,QAAA,CAAS,gBAAiB,CAAA,KAAK,CACzE,EAAA;AACA,IAAA,QAAA,CAAS,MAAQ,EAAA,EAAA,CAAG,EAAG,CAAA,QAAA,EAAU,UAAU,CAAC,CAAA,CAAA;AAAA,GACvC,MAAA;AACL,IAAA,WAAA,CAAY,MAAQ,EAAA,EAAA,CAAG,EAAG,CAAA,QAAA,EAAU,UAAU,CAAC,CAAA,CAAA;AAAA,GACjD;AACA,EAAI,IAAA,OAAA,CAAQ,UAAc,IAAA,OAAA,CAAQ,IAAM,EAAA;AACtC,IAAA,QAAA,CAAS,MAAQ,EAAA,EAAA,CAAG,EAAG,CAAA,QAAA,EAAU,QAAQ,CAAC,CAAA,CAAA;AAAA,GACrC,MAAA;AACL,IAAA,WAAA,CAAY,MAAQ,EAAA,EAAA,CAAG,EAAG,CAAA,QAAA,EAAU,QAAQ,CAAC,CAAA,CAAA;AAAA,GAC/C;AACF,CAAA,CAAA;AAEA,OAAA,CAAQ,QAAW,GAAA,IAAA;;;;"}