tdesign-vue-next
Version:
TDesign Component for vue-next
124 lines (120 loc) • 4.35 kB
JavaScript
/**
* tdesign v1.19.2
* (c) 2026 tdesign
* @license MIT
*/
import { isFunction } from 'lodash-es';
import { ref, toRefs, onMounted, onUnmounted } from 'vue';
import '@babel/runtime/helpers/toConsumableArray';
import '@babel/runtime/helpers/typeof';
import '../../_chunks/dep-c68ea098.js';
import { u as usePrefixClass } from '../../_chunks/dep-e8dd47a9.js';
import '@babel/runtime/helpers/slicedToArray';
import '../../_chunks/dep-91fc762d.js';
import '@babel/runtime/helpers/defineProperty';
import '../../_chunks/dep-f0f392fb.js';
import '../../config-provider/hooks/useConfig.js';
import '../../config-provider/utils/context.js';
import '../../_chunks/dep-509ddbe3.js';
import 'dayjs';
import '@babel/runtime/helpers/createClass';
import '@babel/runtime/helpers/classCallCheck';
function useTagScroll(props) {
var tagInputRef = ref();
var classPrefix = usePrefixClass();
var _toRefs = toRefs(props),
excessTagsDisplayType = _toRefs.excessTagsDisplayType,
readonly = _toRefs.readonly,
disabled = _toRefs.disabled;
var scrollDistance = ref(0);
var scrollElement = ref();
var mouseEnterTimer = ref();
var isScrollable = ref(false);
var updateScrollElement = function updateScrollElement(element) {
var prefixElement = element.querySelector(".".concat(classPrefix.value, "-input__prefix"));
scrollElement.value = prefixElement;
};
var updateScrollDistance = function updateScrollDistance() {
scrollDistance.value = scrollElement.value.scrollWidth - scrollElement.value.clientWidth;
};
var scrollTo = function scrollTo(distance) {
var _scrollElement$value;
if (!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() {
var _tagInputRef$value;
var element = (_tagInputRef$value = tagInputRef.value) === null || _tagInputRef$value === void 0 ? void 0 : _tagInputRef$value.$el;
if (element) {
updateScrollElement(element);
}
if (!scrollElement.value) return;
setTimeout(function () {
updateScrollDistance();
scrollTo(scrollDistance.value);
setTimeout(function () {
isScrollable.value = true;
}, 200);
}, 0);
};
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;
var delta = Math.abs(e.deltaX) >= Math.abs(e.deltaY) ? e.deltaX : e.deltaY;
if (delta > 0) {
updateScrollDistance();
var distance = Math.min(scrollElement.value.scrollLeft + 120, scrollDistance.value);
scrollTo(distance);
} else if (delta < 0) {
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$value2;
var element = (_tagInputRef$value2 = tagInputRef.value) === null || _tagInputRef$value2 === void 0 ? void 0 : _tagInputRef$value2.$el;
if (!element) return;
updateScrollElement(element);
};
var clear = function clear() {
clearTimeout(mouseEnterTimer.value);
};
onMounted(init);
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
};
}
export { useTagScroll };
//# sourceMappingURL=useTagScroll.js.map