{"version":3,"file":"service.mjs","sources":["../../../../../../packages/components/loading/src/service.ts"],"sourcesContent":["import { nextTick } from 'vue'\r\nimport { isString } from '@vue/shared'\r\nimport { isClient } from '@vueuse/core'\r\nimport { addClass, getStyle, removeClass } from '@sgui-plus/utils/dom'\r\nimport { createLoadingComponent } from './createLoading'\r\nimport type { LoadingInstance } from './createLoading'\r\nimport type { LoadingOptionsResolved, LoadingOptions } from './types'\r\nimport type { CSSProperties } from 'vue'\r\nimport { isArray } from 'lodash'\r\nimport { getLockTargetEl } from './getLockTargetEl'\r\n\r\nlet fullscreenInstance: LoadingInstance | undefined = undefined\r\n\r\nexport const LoadingService = function (\r\n  options: LoadingOptions = {}\r\n): LoadingInstance {\r\n  if (!isClient) return undefined as any\r\n\r\n  const resolved = resolveOptions(options)\r\n\r\n  if (resolved.fullscreen && fullscreenInstance) {\r\n    return fullscreenInstance\r\n  }\r\n\r\n  const instance = createLoadingComponent({\r\n    ...resolved,\r\n    closed: () => {\r\n      resolved.closed?.()\r\n      if (resolved.fullscreen) fullscreenInstance = undefined\r\n    },\r\n  })\r\n\r\n  addStyle(resolved, resolved.parentEl, instance)\r\n  addClassList(resolved, resolved.parentEl, instance, resolved.lockTargetEl)\r\n\r\n  resolved.parentEl.vLoadingAddClassList = () =>\r\n    addClassList(resolved, resolved.parentEl, instance, resolved.lockTargetEl)\r\n\r\n  /**\r\n   * add loading-number to parent.\r\n   * because if a fullscreen loading is triggered when somewhere\r\n   * a v-loading.body was triggered before and it's parent is\r\n   * document.body which with a margin , the fullscreen loading's\r\n   * destroySelf function will remove 'sg-loading-parent--relative',\r\n   * and then the position of v-loading.body will be error.\r\n   */\r\n  let loadingNumber: string | null =\r\n    resolved.parentEl.getAttribute('loading-number')\r\n  if (!loadingNumber) {\r\n    loadingNumber = '1'\r\n  } else {\r\n    loadingNumber = `${Number.parseInt(loadingNumber) + 1}`\r\n  }\r\n  resolved.parentEl.setAttribute('loading-number', loadingNumber)\r\n\r\n  resolved.parentEl.appendChild(instance.$el)\r\n\r\n  // after instance render, then modify visible to trigger transition\r\n  nextTick(() => (instance.visible.value = resolved.visible))\r\n\r\n  if (resolved.fullscreen) {\r\n    fullscreenInstance = instance\r\n  }\r\n  return instance\r\n}\r\n\r\nexport const LoadingServiceMap = {\r\n  show: LoadingService,\r\n  hide: () => {\r\n    fullscreenInstance && fullscreenInstance.hide()\r\n  }\r\n}\r\n\r\n\r\nconst resolveOptions = (options: LoadingOptions): LoadingOptionsResolved => {\r\n  let target: HTMLElement\r\n  if (isString(options.parent) || isArray(options.parent)) {\r\n    let temp = isString(options.parent)\r\n      ? document.querySelector<HTMLElement>(`#${options.parent}`)\r\n      : document.querySelector<HTMLElement>(options.parent.map((item, index) => {\r\n        if (!index) return `#${item}`\r\n        return `.${item}`\r\n      }).join(' '))\r\n    target = temp ?? document.body\r\n  } else {\r\n    target = options.parent || document.body\r\n  }\r\n  return {\r\n    id: options.id ?? '',\r\n    parentEl: target === document.body || options.transfer ? document.body : target,\r\n    backgroundColor: options.backgroundColor || '',\r\n    color: options.color || '',\r\n    size: options.size || 'large',\r\n    fix: options.fix ?? true,\r\n    spinner: options.spinner || false,\r\n    text: options.text || '',\r\n    fullscreen: target === document.body && (options.fullscreen ?? true),\r\n    lock: options.lock ?? false,\r\n    lockTarget: options.lockTarget ?? 'body',\r\n    lockTargetEl: getLockTargetEl(options.lockTarget ?? ''),\r\n    customClass: options.customClass || '',\r\n    visible: options.visible ?? true,\r\n    render: options.render ?? undefined,\r\n    parent: target,\r\n  }\r\n}\r\n\r\nconst addStyle = async (\r\n  options: LoadingOptionsResolved,\r\n  parent: HTMLElement,\r\n  instance: LoadingInstance\r\n) => {\r\n  const { nextZIndex } = (instance.vm.component as any).zIndex || instance.vm.component?.exposed?.zIndex\r\n\r\n  const maskStyle: CSSProperties = {}\r\n  if (options.fullscreen) {\r\n    instance.originalPosition.value = getStyle(document.body, 'position')\r\n    instance.originalOverflow.value = getStyle(document.body, 'overflow')\r\n    maskStyle.zIndex = nextZIndex()\r\n  } else if (options.parentEl === document.body) {\r\n    instance.originalPosition.value = getStyle(document.body, 'position')\r\n    /**\r\n     * await dom render when visible is true in init,\r\n     * because some component's height maybe 0.\r\n     * e.g. sg-table.\r\n     */\r\n    await nextTick()\r\n    for (const property of ['top', 'left']) {\r\n      const scroll = property === 'top' ? 'scrollTop' : 'scrollLeft'\r\n      maskStyle[property] = `${\r\n        (options.parent as HTMLElement).getBoundingClientRect()[property] +\r\n        document.body[scroll] +\r\n        document.documentElement[scroll] -\r\n        Number.parseInt(getStyle(document.body, `margin-${property}`), 10)\r\n      }px`\r\n    }\r\n    for (const property of ['height', 'width']) {\r\n      maskStyle[property] = `${\r\n        (options.parent as HTMLElement).getBoundingClientRect()[property]\r\n      }px`\r\n    }\r\n  } else {\r\n    instance.originalPosition.value = getStyle(parent, 'position')\r\n  }\r\n  for (const [key, value] of Object.entries(maskStyle)) {\r\n    instance.$el.style[key] = value\r\n  }\r\n}\r\n\r\nconst addClassList = (\r\n  options: LoadingOptionsResolved,\r\n  parent: HTMLElement,\r\n  instance: LoadingInstance,\r\n  lockTargetEl: HTMLElement | null\r\n) => {\r\n  if (\r\n    instance.originalPosition.value !== 'absolute' &&\r\n    instance.originalPosition.value !== 'fixed'\r\n  ) {\r\n    addClass(parent, 'sg-loading-parent--relative')\r\n  } else {\r\n    removeClass(parent, 'sg-loading-parent--relative')\r\n  }\r\n  if (options.fullscreen && options.lock) {\r\n    lockTargetEl && addClass(lockTargetEl, 'sg-loading-parent--hidden')\r\n  } else {\r\n    lockTargetEl && removeClass(lockTargetEl, 'sg-loading-parent--hidden')\r\n  }\r\n}\r\n"],"names":[],"mappings":"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"}