UNPKG

tdesign-mobile-vue

Version:
292 lines (284 loc) 12.4 kB
/** * tdesign v1.9.3 * (c) 2025 TDesign Group * @license MIT */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _defineProperty = require('@babel/runtime/helpers/defineProperty'); var _slicedToArray = require('@babel/runtime/helpers/slicedToArray'); var vue = require('vue'); var tdesignIconsVueNext = require('tdesign-icons-vue-next'); var swiper_index = require('../swiper/index.js'); var noticeBar_props = require('./props.js'); var config = require('../config.js'); var hooks_useVModel = require('../hooks/useVModel.js'); var hooks_tnode = require('../hooks/tnode.js'); var hooks_useClass = require('../hooks/useClass.js'); var isObject = require('../_chunks/dep-ef223206.js'); var isArray = require('../_chunks/dep-757b152c.js'); require('../swiper/swiper.js'); require('@babel/runtime/helpers/typeof'); require('../swipe-cell/useSwipe.js'); require('@vueuse/core'); require('../shared/dom.js'); require('../_chunks/dep-88fe047a.js'); require('../_chunks/dep-2f809ed9.js'); require('../_chunks/dep-c3cb976c.js'); require('../_chunks/dep-5be9198d.js'); require('../shared/util.js'); require('../_chunks/dep-ff4786c0.js'); require('../_chunks/dep-21f18d3b.js'); require('../_chunks/dep-b9642a56.js'); require('../_common/js/global-config/mobile/default-config.js'); require('../_common/js/global-config/mobile/locale/zh_CN.js'); require('../_chunks/dep-28b1e09d.js'); require('../_chunks/dep-57aa1aa0.js'); require('dayjs'); require('../_chunks/dep-85204fa0.js'); require('../_chunks/dep-f6b14f80.js'); require('../_chunks/dep-a8d60643.js'); require('../_chunks/dep-7c911ba3.js'); require('../_chunks/dep-49f0a63e.js'); require('../_chunks/dep-d950aa21.js'); require('../_chunks/dep-a697b1b9.js'); require('../_chunks/dep-4dfb9b9c.js'); require('../_chunks/dep-c65deed7.js'); require('../_chunks/dep-94eeec5a.js'); require('../_chunks/dep-060bf1cf.js'); require('../_chunks/dep-0e05e959.js'); require('../_chunks/dep-324da301.js'); require('../_chunks/dep-da6dc2cf.js'); require('../_chunks/dep-ccc9ad3d.js'); require('../swiper/props.js'); require('../_chunks/dep-6df33aaf.js'); require('../_chunks/dep-3d4c38f1.js'); require('../_chunks/dep-afa9f3f2.js'); require('../_chunks/dep-ae809b86.js'); require('../_chunks/dep-2b08c0a6.js'); require('../hooks/render-tnode.js'); require('../_chunks/dep-a7319409.js'); require('../_chunks/dep-288156c7.js'); require('../_chunks/dep-675798b4.js'); require('../_common/js/utils/general.js'); require('../swiper/swiper-item.js'); require('../shared/component.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty); var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _isSlot(s) { return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !vue.isVNode(s); } var prefix = config["default"].prefix; var iconDefault = { info: vue.createVNode(tdesignIconsVueNext.InfoCircleFilledIcon, null, null), success: vue.createVNode(tdesignIconsVueNext.CheckCircleFilledIcon, null, null), warning: vue.createVNode(tdesignIconsVueNext.InfoCircleFilledIcon, null, null), error: vue.createVNode(tdesignIconsVueNext.InfoCircleFilledIcon, null, null) }; var _NoticeBar = vue.defineComponent({ name: "".concat(prefix, "-notice-bar"), props: noticeBar_props["default"], emits: ["change"], setup: function setup(props2) { var noticeBarClass = hooks_useClass.usePrefixClass("notice-bar"); var renderTNodeJSX = hooks_tnode.useTNodeJSX(); var state = vue.reactive({ duration: 0, offset: 0, listWidth: 0, itemWidth: 0, timer: null, nextTimer: null, scroll: { marquee: false, speed: 50, loop: -1, delay: 0 } }); var rootClasses = vue.computed(function () { return ["".concat(noticeBarClass.value), "".concat(noticeBarClass.value, "--").concat(props2.theme)]; }); var handleClick = function handleClick(trigger) { var _props2$onClick; (_props2$onClick = props2.onClick) === null || _props2$onClick === void 0 || _props2$onClick.call(props2, trigger); }; var animateStyle = vue.computed(function () { return { transform: state.offset ? "translateX(".concat(state.offset, "px)") : "", transitionDuration: "".concat(state.duration, "s"), transitionTimingFunction: "linear" }; }); var listDOM = vue.ref(); var itemDOM = vue.ref(); var _toRefs = vue.toRefs(props2), visible = _toRefs.visible, modelValue = _toRefs.modelValue; var _useVModel = hooks_useVModel["default"](visible, modelValue, props2.defaultVisible), _useVModel2 = _slicedToArray__default["default"](_useVModel, 2), isShow = _useVModel2[0]; _useVModel2[1]; var handleScrolling = function handleScrolling() { var _ref; if (!(props2 !== null && props2 !== void 0 && props2.marquee) || ((_ref = isObject.isObject(props2 === null || props2 === void 0 ? void 0 : props2.marquee) && (props2 === null || props2 === void 0 ? void 0 : props2.marquee)) === null || _ref === void 0 ? void 0 : _ref.loop) === 0) { return; } if (typeof props2.marquee === "boolean") { state.scroll = _objectSpread(_objectSpread({}, state.scroll), {}, { marquee: props2.marquee }); } if (isObject.isObject(props2.marquee)) { var _marquee$speed, _marquee$delay; var marquee = props2.marquee; state.scroll = { marquee: true, loop: typeof (marquee === null || marquee === void 0 ? void 0 : marquee.loop) === "undefined" ? state.scroll.loop : marquee.loop, speed: (_marquee$speed = marquee.speed) !== null && _marquee$speed !== void 0 ? _marquee$speed : state.scroll.speed, delay: (_marquee$delay = marquee.delay) !== null && _marquee$delay !== void 0 ? _marquee$delay : state.scroll.delay }; } setTimeout(function () { var _listDOM$value, _itemDOM$value; var listDOMWidth = (_listDOM$value = listDOM.value) === null || _listDOM$value === void 0 ? void 0 : _listDOM$value.getBoundingClientRect().width; var itemDOMWidth = (_itemDOM$value = itemDOM.value) === null || _itemDOM$value === void 0 ? void 0 : _itemDOM$value.getBoundingClientRect().width; if (itemDOMWidth >= listDOMWidth) { state.offset = -itemDOMWidth; state.duration = itemDOMWidth / state.scroll.speed; state.listWidth = listDOMWidth; state.itemWidth = itemDOMWidth; } }, state.scroll.delay); }; var handleTransitionend = function handleTransitionend() { state.scroll.loop = --state.scroll.loop; if (state.scroll.loop === 0) { state.scroll = _objectSpread(_objectSpread({}, state.scroll), {}, { marquee: false }); return; } state.offset = state.listWidth; state.duration = 0; setTimeout(function () { state.offset = -state.itemWidth; state.duration = (state.itemWidth + state.listWidth) / state.scroll.speed; }, 0); }; vue.onMounted(function () { vue.nextTick(function () { if (isShow.value) { handleScrolling(); } }); }); vue.watch(function () { return isShow.value; }, function () { vue.nextTick(function () { if (isShow.value) { state.offset = state.listWidth; state.duration = 0; handleScrolling(); } }); }); return function () { if (isShow.value) { var renderPrefixIcon = function renderPrefixIcon() { var prefixIconContent = renderTNodeJSX("prefixIcon", { defaultNode: iconDefault[props2.theme || "info"] }); if (props2.prefixIcon && prefixIconContent) { return vue.createVNode("div", { "class": "".concat(noticeBarClass.value, "__prefix-icon"), "onClick": function onClick() { return handleClick("prefix-icon"); } }, [prefixIconContent]); } }; var renderContent = function renderContent() { var _slot; var renderShowContent = function renderShowContent() { var showContent = renderTNodeJSX("content"); if (!showContent) { return null; } return showContent; }; var renderOperationContent = function renderOperationContent() { var operationContent = renderTNodeJSX("operation"); if (!operationContent) { return null; } return vue.createVNode("span", { "class": "".concat(noticeBarClass.value, "__operation"), "onClick": function onClick(event) { event.stopPropagation(); handleClick("operation"); } }, [operationContent]); }; return vue.createVNode("div", { "ref": listDOM, "class": "".concat(noticeBarClass.value, "__content-wrap"), "onClick": function onClick() { return handleClick("content"); } }, [props2.direction === "vertical" && isArray.isArray(props2.content) ? vue.createVNode("div", null, [vue.createVNode(swiper_index.Swiper, { "autoplay": true, "loop": true, "direction": "vertical", "duration": 2e3, "height": 22, "interval": props2 === null || props2 === void 0 ? void 0 : props2.interval, "onChange": props2 === null || props2 === void 0 ? void 0 : props2.onChange, "class": "".concat(noticeBarClass.value, "__content--vertical") }, _isSlot(_slot = props2.content.map(function (item, index) { return vue.createVNode(swiper_index.SwiperItem, { "key": index }, { default: function _default() { return [vue.createVNode("div", { "class": "".concat(noticeBarClass.value, "__content--vertical-item") }, [item])]; } }); })) ? _slot : { default: function _default() { return [_slot]; } })]) : vue.createVNode("div", { "ref": itemDOM, "class": ["".concat(noticeBarClass.value, "__content"), !state.scroll.marquee ? "".concat(noticeBarClass.value, "__content-wrapable") : ""], "style": state.scroll.marquee ? animateStyle.value : "", "onTransitionend": handleTransitionend }, [renderShowContent(), renderOperationContent()])]); }; var renderSuffixIconContent = function renderSuffixIconContent() { var suffixIconContent = renderTNodeJSX("suffixIcon"); if (!suffixIconContent) { return null; } return vue.createVNode("div", { "class": "".concat(noticeBarClass.value, "__suffix-icon"), "onClick": function onClick() { return handleClick("suffix-icon"); } }, [suffixIconContent]); }; return vue.createVNode("div", { "class": rootClasses.value }, [renderPrefixIcon(), renderContent(), renderSuffixIconContent()]); } return null; }; } }); exports["default"] = _NoticeBar; //# sourceMappingURL=notice-bar.js.map