UNPKG

tdesign-mobile-vue

Version:
196 lines (188 loc) 7.31 kB
/** * tdesign v1.7.0 * (c) 2024 TDesign Group * @license MIT */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _defineProperty = require('@babel/runtime/helpers/defineProperty'); var vue = require('vue'); var loading_icon_gradient = require('./icon/gradient.js'); var loading_icon_spinner = require('./icon/spinner.js'); var config = require('../config.js'); var loading_props = require('./props.js'); var hooks_tnode = require('../hooks/tnode.js'); var hooks_useClass = require('../hooks/useClass.js'); var shared_dom = require('../shared/dom.js'); require('../_common/js/loading/circle-adapter.js'); require('../_common/js/utils/set-style.js'); require('../_common/js/utils/helper.js'); require('@babel/runtime/helpers/toConsumableArray'); require('@babel/runtime/helpers/objectWithoutProperties'); require('@babel/runtime/helpers/slicedToArray'); require('lodash/isString'); require('lodash/isNull'); require('lodash/isUndefined'); require('lodash/isNumber'); require('lodash/isArray'); require('lodash/isFunction'); require('lodash/camelCase'); require('lodash/kebabCase'); require('../hooks/render-tnode.js'); require('lodash/isEmpty'); require('lodash/isObject'); require('../config-provider/useConfig.js'); require('lodash/cloneDeep'); require('../config-provider/context.js'); require('lodash/mergeWith'); require('lodash/merge'); require('../_common/js/global-config/mobile/default-config.js'); require('../_common/js/global-config/mobile/locale/zh_CN.js'); require('../_chunks/dep-8d930798.js'); require('@babel/runtime/helpers/typeof'); require('../_chunks/dep-a20a5149.js'); require('dayjs'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty); var prefix = config["default"].prefix; var _Loading = vue.defineComponent({ name: "".concat(prefix, "-loading"), props: loading_props["default"], setup: function setup(props2) { var renderTNodeJSX = hooks_tnode.useTNodeJSX(); var renderTNodeContent = hooks_tnode.useContent(); var loadingClass = hooks_useClass.usePrefixClass("loading"); var delayShowLoading = vue.ref(false); var teleportElement = vue.ref(); var countDelay = function countDelay() { delayShowLoading.value = false; var timer = setTimeout(function () { delayShowLoading.value = true; clearTimeout(timer); }, props2.delay); }; var realLoading = vue.computed(function () { return (!props2.delay || delayShowLoading.value) && props2.loading; }); vue.watch(function () { return props2.loading; }, function (value) { if (value) { props2.delay && countDelay(); } }, { immediate: true }); var rootClass = vue.computed(function () { return [loadingClass.value, _defineProperty__default["default"]({}, "".concat(loadingClass.value, "--vertical"), props2.layout === "vertical"), _defineProperty__default["default"]({}, "".concat(loadingClass.value, "--fullscreen"), props2.fullscreen), _defineProperty__default["default"]({}, "".concat(loadingClass.value, "--full"), !props2.fullscreen && !!props2.attach)]; }); var textClass = vue.computed(function () { return ["".concat(loadingClass.value, "__text"), _defineProperty__default["default"]({}, "".concat(loadingClass.value, "__text--only"), !props2.indicator)]; }); var rootStyle = vue.computed(function () { var style = []; if (props2.inheritColor) { style.push("color: inherit"); } if (props2.size) { style.push("font-size: ".concat(props2.size, ";")); } return style.join(";"); }); var defaultIndicator = { circular: loading_icon_gradient["default"], spinner: loading_icon_spinner["default"] }; vue.onMounted(function () { if (props2.attach) { var attach = shared_dom.getAttach(props2.attach); if (!attach) { console.error("attach is not exist"); } else { teleportElement.value = attach; } } if (props2.fullscreen) { teleportElement.value = shared_dom.getAttach("body"); } }); var dotsLoading = vue.computed(function () { vue.setBlockTracking(-1); var node = vue.createVNode("div", { "class": "".concat(loadingClass.value, "__dots"), "style": { animationPlayState: props2.pause ? "paused" : "", animationDirection: props2.reverse ? "reverse" : "", animationDuration: "".concat(props2.duration, "ms"), width: props2.size, height: props2.size } }, [Array.from({ length: 3 }).map(function (val, i) { return vue.createVNode("div", { "class": "".concat(loadingClass.value, "__dot"), "style": props2.duration ? "animation-duration: ".concat(props2.duration / 1e3, "s; animation-delay: ").concat(props2.duration * i / 3e3, "s") : "" }, null); })]); vue.setBlockTracking(1); return node; }); var defaultLoading = vue.computed(function () { vue.setBlockTracking(-1); var TIndicator = defaultIndicator[props2.theme || "circular"]; var node = vue.createVNode(TIndicator, { "style": { animationPlayState: props2.pause ? "paused" : "", animationDirection: props2.reverse ? "reverse" : "", animationDuration: "".concat(props2.duration, "ms"), width: props2.size, height: props2.size } }, null); vue.setBlockTracking(1); return node; }); vue.watch(function () { return props2.loading; }, function (isLoading) { if (isLoading && props2.fullscreen) { countDelay(); shared_dom.addClass(document.body, "".concat(loadingClass.value, "--lock")); } else { shared_dom.removeClass(document.body, "".concat(loadingClass.value, "--lock")); } }); return function () { var indicator = renderTNodeJSX("indicator", { defaultNode: props2.theme === "dots" ? dotsLoading.value : defaultLoading.value }); var text = renderTNodeJSX("text"); var TNodeContent = renderTNodeContent("default", "content"); if (props2.fullscreen || props2.attach) { if (!props2.loading) return null; return vue.createVNode(vue.Teleport, { "disabled": !props2.attach || !teleportElement.value, "to": teleportElement.value }, { default: function _default() { return [vue.createVNode("div", { "class": rootClass.value, "style": rootStyle.value }, [realLoading.value && indicator, text && realLoading.value && vue.createVNode("span", { "class": textClass.value }, [text]), TNodeContent])]; } }); } return vue.createVNode("div", { "class": rootClass.value, "style": rootStyle.value }, [realLoading.value && indicator, text && realLoading.value && vue.createVNode("span", { "class": textClass.value }, [text]), TNodeContent]); }; } }); exports["default"] = _Loading; //# sourceMappingURL=loading.js.map