UNPKG

hongluan-ui

Version:
128 lines (123 loc) 3.91 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var vue = require('vue'); require('../../../utils/index.js'); var index$1 = require('../../spinner/index.js'); require('../../../hooks/index.js'); var index = require('../../../hooks/use-namespace/index.js'); var style = require('../../../utils/dom/style.js'); function createLoadingComponent(options) { const { namespace } = index.useNamespace("loading-mask"); let afterLeaveTimer; const afterLeaveFlag = vue.ref(false); const data = vue.reactive({ ...options, originalPosition: "", originalOverflow: "", visible: false }); function setText(text) { data.text = text; } function destroySelf() { const target = data.parent; if (!target.vLoadingAddClassList) { let loadingNumber = target.getAttribute("loading-number"); loadingNumber = Number.parseInt(loadingNumber) - 1; if (!loadingNumber) { style.removeClass(target, "loading-parent-relative"); target.removeAttribute("loading-number"); } else { target.setAttribute("loading-number", loadingNumber.toString()); } style.removeClass(target, "loading-parent-hidden"); } removeLoadingChild(); loadingInstance.unmount(); } function removeLoadingChild() { var _a, _b; (_b = (_a = vm.$el) == null ? void 0 : _a.parentNode) == null ? void 0 : _b.removeChild(vm.$el); } function close() { var _a; if (options.beforeClose && !options.beforeClose()) return; afterLeaveFlag.value = true; clearTimeout(afterLeaveTimer); afterLeaveTimer = setTimeout(handleAfterLeave, 400); data.visible = false; (_a = options.closed) == null ? void 0 : _a.call(options); } function handleAfterLeave() { if (!afterLeaveFlag.value) return; const target = data.parent; afterLeaveFlag.value = false; target.vLoadingAddClassList = void 0; destroySelf(); } const hlLoadingComponent = { name: "Loading", setup() { return () => { const svg = data.svg; const spinner = vue.h("svg", { class: "circular", viewBox: data.svgViewBox ? data.svgViewBox : "0 0 50 50", ...svg ? { innerHTML: svg } : {} }, [ vue.h("circle", { class: "path", cx: "25", cy: "25", r: "20", fill: "none" }) ]); const noSpinner = vue.h("i", { class: data.spinner }); const definedSpinner = vue.h(index$1.HlSpinner, typeof data.spinner === "object" ? data.spinner : {}); const spinnerText = data.text ? vue.h("p", { class: "loading-text" }, [data.text]) : void 0; return vue.h(vue.Transition, { name: "loading-fade", onAfterLeave: handleAfterLeave }, { default: vue.withCtx(() => [ vue.withDirectives(vue.createVNode("div", { style: { backgroundColor: data.background || "" }, class: [ namespace.value, data.customClass, data.fullscreen ? "is-fullscreen" : "" ] }, [ vue.h("div", { class: "loading-spinner" }, [ !data.spinner ? spinner : typeof data.spinner === "object" ? definedSpinner : noSpinner, spinnerText ]) ]), [[vue.vShow, data.visible]]) ]) }); }; } }; const loadingInstance = vue.createApp(hlLoadingComponent); const vm = loadingInstance.mount(document.createElement("div")); return { ...vue.toRefs(data), removeLoadingChild, setText, close, handleAfterLeave, vm, get $el() { return vm.$el; } }; } exports.createLoadingComponent = createLoadingComponent; //# sourceMappingURL=loading.js.map