{"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  // 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    const target = data.parent\n    const ns = (vm as any).ns as UseNamespaceReturn\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  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          [\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 {\n      return vm.$el\n    },\n  }\n}\n\nexport type LoadingInstance = ReturnType<typeof createLoadingComponent>\n"],"mappings":";;;;;AAoBA,SAAgB,uBACd,SACA,YACA;CACA,IAAI;CAGJ,MAAM,iBAAiB,IAAI,MAAM;CACjC,MAAM,OAAO,SAAS;EACpB,GAAG;EACH,kBAAkB;EAClB,kBAAkB;EAClB,SAAS;EACV,CAAC;CAEF,SAAS,QAAQ,MAAgC;AAC/C,OAAK,OAAO;;CAGd,SAAS,cAAc;EACrB,MAAM,SAAS,KAAK;EACpB,MAAM,KAAM,GAAW;AACvB,MAAI,CAAC,OAAO,sBAAsB;GAChC,IAAI,gBACF,OAAO,aAAa,iBAAiB;AACvC,mBAAgB,OAAO,SAAS,cAAqB,GAAG;AACxD,OAAI,CAAC,eAAe;AAClB,gBAAY,QAAQ,GAAG,GAAG,UAAU,WAAW,CAAC;AAChD,WAAO,gBAAgB,iBAAiB;SAExC,QAAO,aAAa,kBAAkB,cAAc,UAAU,CAAC;AAEjE,eAAY,QAAQ,GAAG,GAAG,UAAU,SAAS,CAAC;;AAEhD,wBAAsB;AACtB,kBAAgB,SAAS;;CAE3B,SAAS,uBAA6B;AACpC,KAAG,KAAK,YAAY,YAAY,GAAG,IAAI;;CAEzC,SAAS,QAAQ;AACf,MAAI,QAAQ,eAAe,CAAC,QAAQ,aAAa,CAAE;AAEnD,iBAAe,QAAQ;AACvB,eAAa,gBAAgB;AAE7B,oBAAkB,WAAW,kBAAkB,IAAI;AACnD,OAAK,UAAU;AAEf,UAAQ,UAAU;;CAGpB,SAAS,mBAAmB;AAC1B,MAAI,CAAC,eAAe,MAAO;EAC3B,MAAM,SAAS,KAAK;AACpB,iBAAe,QAAQ;AACvB,SAAO,uBAAuB;AAC9B,eAAa;;CA6Ef,MAAM,kBAAkB,UA1EG,gBAAgB;EACzC,MAAM;EACN,MAAM,GAAG,EAAE,UAAU;GACnB,MAAM,EAAE,IAAI,WAAW,2BAA2B,UAAU;AAE5D,UAAO;IACL;IACA;IACD,CAAC;AAEF,gBAAa;IACX,MAAM,MAAM,KAAK,WAAW,KAAK;IACjC,MAAM,UAAU,EACd,OACA;KACE,OAAO;KACP,SAAS,KAAK,aAAa,KAAK,aAAa;KAC7C,GAAI,MAAM,EAAE,WAAW,KAAK,GAAG,EAAE;KAClC,EACD,CACE,EAAE,UAAU;KACV,OAAO;KACP,IAAI;KACJ,IAAI;KACJ,GAAG;KACH,MAAM;KACP,CAAC,CACH,CACF;IAED,MAAM,cAAc,KAAK,OACrB,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,GAC5C;AAEJ,WAAO,EACL,YACA;KACE,MAAM,GAAG,EAAE,OAAO;KAClB,cAAc;KACf,EACD,EACE,SAAS,cAAc,CACrB,eACE,YACE,OACA;KACE,OAAO,EACL,iBAAiB,KAAK,cAAc,IACrC;KACD,OAAO;MACL,GAAG,EAAE,OAAO;MACZ,KAAK;MACL,GAAG,GAAG,cAAc,KAAK,WAAW;MACrC;KACF,EACD,CACE,EACE,OACA,EACE,OAAO,GAAG,EAAE,UAAU,EACvB,EACD,CAAC,SAAS,YAAY,CACvB,CACF,CACF,EACD,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CACxB,CACF,CAAC,EACH,CACF;;;EAGN,CAAC,CAEmD;AACrD,QAAO,OAAO,gBAAgB,UAAU,cAAc,EAAE,CAAC;CACzD,MAAM,KAAK,gBAAgB,MAAM,SAAS,cAAc,MAAM,CAAC;AAE/D,QAAO;EACL,GAAG,OAAO,KAAK;EACf;EACA;EACA;EACA;EACA;EACA,IAAI,MAAmB;AACrB,UAAO,GAAG;;EAEb"}