{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/loading/src/index.ts"],"sourcesContent":["import { nextTick } from 'vue'\nimport { hasOwn } from '@vue/shared'\nimport { addClass, getStyle, removeClass } from '@element-plus/utils/dom'\nimport PopupManager from '@element-plus/utils/popup-manager'\nimport isServer from '@element-plus/utils/isServer'\nimport { createLoadingComponent } from './createLoadingComponent'\n\nimport type { CSSProperties } from 'vue'\n\nimport type {\n  ILoadingGlobalConfig,\n  ILoadingInstance,\n  ILoadingOptions,\n} from './loading.type'\n\nconst defaults: ILoadingOptions = {\n  parent: null,\n  background: '',\n  svg: null,\n  svgViewBox: null,\n  spinner: false,\n  text: null,\n  fullscreen: true,\n  body: false,\n  lock: false,\n  customClass: '',\n}\n\nconst globalLoadingOption: ILoadingGlobalConfig = {\n  fullscreenLoading: null,\n}\n\nconst addStyle = async (\n  options: ILoadingOptions,\n  parent: HTMLElement,\n  instance: ILoadingInstance\n) => {\n  const maskStyle: Partial<CSSProperties> = {}\n  if (options.fullscreen) {\n    instance.originalPosition.value = getStyle(document.body, 'position')\n    instance.originalOverflow.value = getStyle(document.body, 'overflow')\n    maskStyle.zIndex = PopupManager.nextZIndex()\n  } else if (options.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    ;['top', 'left'].forEach((property) => {\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        parseInt(getStyle(document.body, `margin-${property}`), 10)\n      }px`\n    })\n    ;['height', 'width'].forEach((property) => {\n      maskStyle[property] = `${\n        (options.target as HTMLElement).getBoundingClientRect()[property]\n      }px`\n    })\n  } else {\n    instance.originalPosition.value = getStyle(parent, 'position')\n  }\n  Object.keys(maskStyle).forEach((property) => {\n    instance.$el.style[property] = maskStyle[property]\n  })\n}\n\nconst addClassList = (\n  options: ILoadingOptions,\n  parent: HTMLElement,\n  instance: ILoadingInstance\n) => {\n  if (\n    instance.originalPosition.value !== 'absolute' &&\n    instance.originalPosition.value !== 'fixed'\n  ) {\n    addClass(parent, 'el-loading-parent--relative')\n  } else {\n    removeClass(parent, 'el-loading-parent--relative')\n  }\n  if (options.fullscreen && options.lock) {\n    addClass(parent, 'el-loading-parent--hidden')\n  } else {\n    removeClass(parent, 'el-loading-parent--hidden')\n  }\n}\n\nconst Loading = function (options: ILoadingOptions = {}): ILoadingInstance {\n  if (isServer) return\n  options = {\n    ...defaults,\n    ...options,\n  }\n\n  if (typeof options.target === 'string') {\n    options.target = document.querySelector(options.target) as HTMLElement\n  }\n  options.target = options.target || document.body\n  if (options.target !== document.body) {\n    options.fullscreen = false\n  } else {\n    options.body = true\n  }\n\n  if (options.fullscreen && globalLoadingOption.fullscreenLoading) {\n    globalLoadingOption.fullscreenLoading.close()\n  }\n\n  const parent = options.body ? document.body : options.target\n  options.parent = parent\n\n  const instance = createLoadingComponent({\n    options,\n    globalLoadingOption,\n  })\n\n  addStyle(options, parent, instance)\n  addClassList(options, parent, instance)\n\n  options.parent.vLoadingAddClassList = () => {\n    addClassList(options, parent, instance)\n  }\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: number | string = parent.getAttribute('loading-number')\n  if (!loadingNumber) {\n    loadingNumber = 1\n  } else {\n    loadingNumber = Number.parseInt(loadingNumber) + 1\n  }\n  parent.setAttribute('loading-number', loadingNumber.toString())\n\n  parent.appendChild(instance.$el)\n\n  // after instance render, then modify visible to trigger transition\n  nextTick().then(() => {\n    instance.visible.value = hasOwn(options, 'visible') ? options.visible : true\n  })\n\n  if (options.fullscreen) {\n    globalLoadingOption.fullscreenLoading = instance\n  }\n  return instance\n}\n\nexport default Loading\n"],"names":[],"mappings":";;;;;;;AAeA,MAAM,WAA4B;AAAA,EAChC,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,KAAK;AAAA,EACL,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA;AAGf,MAAM,sBAA4C;AAAA,EAChD,mBAAmB;AAAA;AAGrB,MAAM,WAAW,OACf,SACA,QACA,aACG;AACH,QAAM,YAAoC;AAC1C,MAAI,QAAQ,YAAY;AACtB,aAAS,iBAAiB,QAAQ,SAAS,SAAS,MAAM;AAC1D,aAAS,iBAAiB,QAAQ,SAAS,SAAS,MAAM;AAC1D,cAAU,SAAS,aAAa;AAAA,aACvB,QAAQ,MAAM;AACvB,aAAS,iBAAiB,QAAQ,SAAS,SAAS,MAAM;AAM1D,UAAM;AACL,KAAC,OAAO,QAAQ,QAAQ,CAAC,aAAa;AACrC,YAAM,SAAS,aAAa,QAAQ,cAAc;AAClD,gBAAU,YAAY,GACnB,QAAQ,OAAuB,wBAAwB,YACxD,SAAS,KAAK,UACd,SAAS,gBAAgB,UACzB,SAAS,SAAS,SAAS,MAAM,UAAU,aAAa;AAAA;AAG3D,KAAC,UAAU,SAAS,QAAQ,CAAC,aAAa;AACzC,gBAAU,YAAY,GACnB,QAAQ,OAAuB,wBAAwB;AAAA;AAAA,SAGvD;AACL,aAAS,iBAAiB,QAAQ,SAAS,QAAQ;AAAA;AAErD,SAAO,KAAK,WAAW,QAAQ,CAAC,aAAa;AAC3C,aAAS,IAAI,MAAM,YAAY,UAAU;AAAA;AAAA;AAI7C,MAAM,eAAe,CACnB,SACA,QACA,aACG;AACH,MACE,SAAS,iBAAiB,UAAU,cACpC,SAAS,iBAAiB,UAAU,SACpC;AACA,aAAS,QAAQ;AAAA,SACZ;AACL,gBAAY,QAAQ;AAAA;AAEtB,MAAI,QAAQ,cAAc,QAAQ,MAAM;AACtC,aAAS,QAAQ;AAAA,SACZ;AACL,gBAAY,QAAQ;AAAA;AAAA;MAIlB,UAAU,SAAU,UAA2B,IAAsB;AACzE,MAAI;AAAU;AACd,YAAU;AAAA,OACL;AAAA,OACA;AAAA;AAGL,MAAI,OAAO,QAAQ,WAAW,UAAU;AACtC,YAAQ,SAAS,SAAS,cAAc,QAAQ;AAAA;AAElD,UAAQ,SAAS,QAAQ,UAAU,SAAS;AAC5C,MAAI,QAAQ,WAAW,SAAS,MAAM;AACpC,YAAQ,aAAa;AAAA,SAChB;AACL,YAAQ,OAAO;AAAA;AAGjB,MAAI,QAAQ,cAAc,oBAAoB,mBAAmB;AAC/D,wBAAoB,kBAAkB;AAAA;AAGxC,QAAM,SAAS,QAAQ,OAAO,SAAS,OAAO,QAAQ;AACtD,UAAQ,SAAS;AAEjB,QAAM,WAAW,uBAAuB;AAAA,IACtC;AAAA,IACA;AAAA;AAGF,WAAS,SAAS,QAAQ;AAC1B,eAAa,SAAS,QAAQ;AAE9B,UAAQ,OAAO,uBAAuB,MAAM;AAC1C,iBAAa,SAAS,QAAQ;AAAA;AAWhC,MAAI,gBAAiC,OAAO,aAAa;AACzD,MAAI,CAAC,eAAe;AAClB,oBAAgB;AAAA,SACX;AACL,oBAAgB,OAAO,SAAS,iBAAiB;AAAA;AAEnD,SAAO,aAAa,kBAAkB,cAAc;AAEpD,SAAO,YAAY,SAAS;AAG5B,aAAW,KAAK,MAAM;AACpB,aAAS,QAAQ,QAAQ,OAAO,SAAS,aAAa,QAAQ,UAAU;AAAA;AAG1E,MAAI,QAAQ,YAAY;AACtB,wBAAoB,oBAAoB;AAAA;AAE1C,SAAO;AAAA;;;;"}