UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 6.75 kB
{"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;;;;"}