UNPKG

tdesign-vue-next

Version:
106 lines (100 loc) 3.44 kB
/** * tdesign v1.15.2 * (c) 2025 tdesign * @license MIT */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var Vue = require('vue'); var isFunction = require('../../_chunks/dep-3e1aa2e0.js'); require('../../_chunks/dep-79f734cc.js'); require('@babel/runtime/helpers/typeof'); require('../../_chunks/dep-63ff6e12.js'); function useTagScroll(props) { var tagInputRef = Vue.ref(); var _toRefs = Vue.toRefs(props), excessTagsDisplayType = _toRefs.excessTagsDisplayType, readonly = _toRefs.readonly, disabled = _toRefs.disabled; var scrollDistance = Vue.ref(0); var scrollElement = Vue.ref(); var mouseEnterTimer = Vue.ref(); var isScrollable = Vue.ref(false); var updateScrollElement = function updateScrollElement(element) { var inputElement = element.children[0]; scrollElement.value = inputElement; }; var updateScrollDistance = function updateScrollDistance() { scrollDistance.value = scrollElement.value.scrollWidth - scrollElement.value.clientWidth; }; var scrollTo = function scrollTo(distance) { var _scrollElement$value; if (!isFunction.isFunction((_scrollElement$value = scrollElement.value) === null || _scrollElement$value === void 0 ? void 0 : _scrollElement$value.scroll)) return; scrollElement.value.scroll({ left: distance, behavior: "smooth" }); }; var scrollToRight = function scrollToRight() { updateScrollDistance(); scrollTo(scrollDistance.value); setTimeout(function () { isScrollable.value = true; }, 200); }; var scrollToLeft = function scrollToLeft() { scrollTo(0); }; var onWheel = function onWheel(_ref) { var e = _ref.e; if (readonly.value || disabled.value) return; if (!scrollElement.value) return; if (e.deltaX > 0) { var distance = Math.min(scrollElement.value.scrollLeft + 120, scrollDistance.value); scrollTo(distance); } else { var _distance = Math.max(scrollElement.value.scrollLeft - 120, 0); scrollTo(_distance); } }; var scrollToRightOnEnter = function scrollToRightOnEnter() { if (excessTagsDisplayType.value !== "scroll") return; mouseEnterTimer.value = setTimeout(function () { scrollToRight(); clearTimeout(mouseEnterTimer.value); }, 100); }; var scrollToLeftOnLeave = function scrollToLeftOnLeave() { if (excessTagsDisplayType.value !== "scroll") return; isScrollable.value = false; scrollTo(0); clearTimeout(mouseEnterTimer.value); }; var init = function init() { var _tagInputRef$value; var element = (_tagInputRef$value = tagInputRef.value) === null || _tagInputRef$value === void 0 ? void 0 : _tagInputRef$value.$el; if (!element) return; updateScrollElement(element); }; var clear = function clear() { clearTimeout(mouseEnterTimer.value); }; Vue.onMounted(init); Vue.onUnmounted(clear); return { tagInputRef: tagInputRef, scrollElement: scrollElement, scrollDistance: scrollDistance, scrollTo: scrollTo, scrollToRight: scrollToRight, scrollToLeft: scrollToLeft, updateScrollElement: updateScrollElement, updateScrollDistance: updateScrollDistance, onWheel: onWheel, scrollToRightOnEnter: scrollToRightOnEnter, scrollToLeftOnLeave: scrollToLeftOnLeave, isScrollable: isScrollable }; } exports.useTagScroll = useTagScroll; //# sourceMappingURL=useTagScroll.js.map