element-plus
Version:
A Component Library for Vue 3
1 lines • 6.7 kB
Source Map (JSON)
{"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"}