tdesign-mobile-vue
Version:
tdesign-mobile-vue
196 lines (188 loc) • 7.31 kB
JavaScript
/**
* tdesign v1.7.0
* (c) 2024 TDesign Group
* @license MIT
*/
;
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