{"version":3,"file":"loading.mjs","names":[],"sources":["../../../../../../packages/components/loading/src/loading.ts"],"sourcesContent":["import {\n  Transition,\n  createApp,\n  createVNode,\n  defineComponent,\n  h,\n  reactive,\n  ref,\n  toRefs,\n  vShow,\n  withCtx,\n  withDirectives,\n} from 'vue'\nimport { removeClass } from '@element-plus/utils'\nimport { useGlobalComponentSettings } from '@element-plus/components/config-provider'\n\nimport type { AppContext, VNode } from 'vue'\nimport type { UseNamespaceReturn } from '@element-plus/hooks'\nimport type { LoadingOptionsResolved } from './types'\n\nexport function createLoadingComponent(\n  options: LoadingOptionsResolved,\n  appContext: AppContext | null\n) {\n  let afterLeaveTimer: ReturnType<typeof setTimeout>\n  let destroyed = false\n  // IMPORTANT NOTE: this is only a hacking way to expose the injections on an\n  // instance, DO NOT FOLLOW this pattern in your own code.\n  const afterLeaveFlag = ref(false)\n  const data = reactive({\n    ...options,\n    originalPosition: '',\n    originalOverflow: '',\n    visible: false,\n  })\n\n  function setText(text: string | VNode | VNode[]) {\n    data.text = text\n  }\n\n  function destroySelf() {\n    if (destroyed) return\n    destroyed = true\n    const target = data.parent\n    // Compatible with the instance data format of vue@3.2.12 and earlier versions #12351\n    const ns =\n      ((vm as any).ns as UseNamespaceReturn) || (vm as any)._.exposed.ns\n    if (!target.vLoadingAddClassList) {\n      let loadingNumber: number | string | null =\n        target.getAttribute('loading-number')\n      loadingNumber = Number.parseInt(loadingNumber as any) - 1\n      if (!loadingNumber) {\n        removeClass(target, ns.bm('parent', 'relative'))\n        target.removeAttribute('loading-number')\n      } else {\n        target.setAttribute('loading-number', loadingNumber.toString())\n      }\n      removeClass(target, ns.bm('parent', 'hidden'))\n    }\n    removeElLoadingChild()\n    loadingInstance.unmount()\n\n    const internalInstance = vm.$ as any\n    internalInstance.vnode.el = null\n    internalInstance.subTree = null\n    loadingInstance._container = null\n  }\n  function removeElLoadingChild(): void {\n    vm.$el?.parentNode?.removeChild(vm.$el)\n  }\n  function close() {\n    if (options.beforeClose && !options.beforeClose()) return\n\n    afterLeaveFlag.value = true\n    clearTimeout(afterLeaveTimer)\n\n    afterLeaveTimer = setTimeout(handleAfterLeave, 400)\n    data.visible = false\n\n    options.closed?.()\n  }\n\n  function handleAfterLeave() {\n    if (!afterLeaveFlag.value) return\n    const target = data.parent\n    afterLeaveFlag.value = false\n    target.vLoadingAddClassList = undefined\n    destroySelf()\n  }\n\n  const elLoadingComponent = defineComponent({\n    name: 'ElLoading',\n    setup(_, { expose }) {\n      const { ns, zIndex } = useGlobalComponentSettings('loading')\n\n      expose({\n        ns,\n        zIndex,\n      })\n\n      return () => {\n        const svg = data.spinner || data.svg\n        const spinner = h(\n          'svg',\n          {\n            class: 'circular',\n            viewBox: data.svgViewBox ? data.svgViewBox : '0 0 50 50',\n            ...(svg ? { innerHTML: svg } : {}),\n          },\n          svg\n            ? undefined\n            : [\n                h('circle', {\n                  class: 'path',\n                  cx: '25',\n                  cy: '25',\n                  r: '20',\n                  fill: 'none',\n                }),\n              ]\n        )\n\n        const spinnerText = data.text\n          ? h('p', { class: ns.b('text') }, [data.text])\n          : undefined\n\n        return h(\n          Transition,\n          {\n            name: ns.b('fade'),\n            onAfterLeave: handleAfterLeave,\n          },\n          {\n            default: withCtx(() => [\n              withDirectives(\n                createVNode(\n                  'div',\n                  {\n                    style: {\n                      backgroundColor: data.background || '',\n                    },\n                    class: [\n                      ns.b('mask'),\n                      data.customClass,\n                      ns.is('fullscreen', data.fullscreen),\n                    ],\n                  },\n                  [\n                    h(\n                      'div',\n                      {\n                        class: ns.b('spinner'),\n                      },\n                      [spinner, spinnerText]\n                    ),\n                  ]\n                ),\n                [[vShow, data.visible]]\n              ),\n            ]),\n          }\n        )\n      }\n    },\n  })\n\n  const loadingInstance = createApp(elLoadingComponent)\n  Object.assign(loadingInstance._context, appContext ?? {})\n  const vm = loadingInstance.mount(document.createElement('div'))\n\n  return {\n    ...toRefs(data),\n    setText,\n    removeElLoadingChild,\n    close,\n    handleAfterLeave,\n    vm,\n    get $el(): HTMLElement | null {\n      return destroyed ? null : vm.$el\n    },\n  }\n}\n\nexport type LoadingInstance = ReturnType<typeof createLoadingComponent>\n"],"mappings":";;;;AAoBA,SAAgB,uBACd,SACA,YACA;CACA,IAAI;CACJ,IAAI,YAAY;CAGhB,MAAM,iBAAiB,IAAI,KAAK;CAChC,MAAM,OAAO,SAAS;EACpB,GAAG;EACH,kBAAkB;EAClB,kBAAkB;EAClB,SAAS;CACX,CAAC;CAED,SAAS,QAAQ,MAAgC;EAC/C,KAAK,OAAO;CACd;CAEA,SAAS,cAAc;EACrB,IAAI,WAAW;EACf,YAAY;EACZ,MAAM,SAAS,KAAK;EAEpB,MAAM,KACF,GAAW,MAA8B,GAAW,EAAE,QAAQ;EAClE,IAAI,CAAC,OAAO,sBAAsB;GAChC,IAAI,gBACF,OAAO,aAAa,gBAAgB;GACtC,gBAAgB,OAAO,SAAS,aAAoB,IAAI;GACxD,IAAI,CAAC,eAAe;IAClB,YAAY,QAAQ,GAAG,GAAG,UAAU,UAAU,CAAC;IAC/C,OAAO,gBAAgB,gBAAgB;GACzC,OACE,OAAO,aAAa,kBAAkB,cAAc,SAAS,CAAC;GAEhE,YAAY,QAAQ,GAAG,GAAG,UAAU,QAAQ,CAAC;EAC/C;EACA,qBAAqB;EACrB,gBAAgB,QAAQ;EAExB,MAAM,mBAAmB,GAAG;EAC5B,iBAAiB,MAAM,KAAK;EAC5B,iBAAiB,UAAU;EAC3B,gBAAgB,aAAa;CAC/B;CACA,SAAS,uBAA6B;EACpC,GAAG,KAAK,YAAY,YAAY,GAAG,GAAG;CACxC;CACA,SAAS,QAAQ;EACf,IAAI,QAAQ,eAAe,CAAC,QAAQ,YAAY,GAAG;EAEnD,eAAe,QAAQ;EACvB,aAAa,eAAe;EAE5B,kBAAkB,WAAW,kBAAkB,GAAG;EAClD,KAAK,UAAU;EAEf,QAAQ,SAAS;CACnB;CAEA,SAAS,mBAAmB;EAC1B,IAAI,CAAC,eAAe,OAAO;EAC3B,MAAM,SAAS,KAAK;EACpB,eAAe,QAAQ;EACvB,OAAO,uBAAuB,KAAA;EAC9B,YAAY;CACd;CAEA,MAAM,qBAAqB,gBAAgB;EACzC,MAAM;EACN,MAAM,GAAG,EAAE,UAAU;GACnB,MAAM,EAAE,IAAI,WAAW,2BAA2B,SAAS;GAE3D,OAAO;IACL;IACA;GACF,CAAC;GAED,aAAa;IACX,MAAM,MAAM,KAAK,WAAW,KAAK;IACjC,MAAM,UAAU,EACd,OACA;KACE,OAAO;KACP,SAAS,KAAK,aAAa,KAAK,aAAa;KAC7C,GAAI,MAAM,EAAE,WAAW,IAAI,IAAI,CAAC;IAClC,GACA,MACI,KAAA,IACA,CACE,EAAE,UAAU;KACV,OAAO;KACP,IAAI;KACJ,IAAI;KACJ,GAAG;KACH,MAAM;IACR,CAAC,CACH,CACN;IAEA,MAAM,cAAc,KAAK,OACrB,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,IAC3C,KAAA;IAEJ,OAAO,EACL,YACA;KACE,MAAM,GAAG,EAAE,MAAM;KACjB,cAAc;IAChB,GACA,EACE,SAAS,cAAc,CACrB,eACE,YACE,OACA;KACE,OAAO,EACL,iBAAiB,KAAK,cAAc,GACtC;KACA,OAAO;MACL,GAAG,EAAE,MAAM;MACX,KAAK;MACL,GAAG,GAAG,cAAc,KAAK,UAAU;KACrC;IACF,GACA,CACE,EACE,OACA,EACE,OAAO,GAAG,EAAE,SAAS,EACvB,GACA,CAAC,SAAS,WAAW,CACvB,CACF,CACF,GACA,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CACxB,CACF,CAAC,EACH,CACF;GACF;EACF;CACF,CAAC;CAED,MAAM,kBAAkB,UAAU,kBAAkB;CACpD,OAAO,OAAO,gBAAgB,UAAU,cAAc,CAAC,CAAC;CACxD,MAAM,KAAK,gBAAgB,MAAM,SAAS,cAAc,KAAK,CAAC;CAE9D,OAAO;EACL,GAAG,OAAO,IAAI;EACd;EACA;EACA;EACA;EACA;EACA,IAAI,MAA0B;GAC5B,OAAO,YAAY,OAAO,GAAG;EAC/B;CACF;AACF"}