tdesign-react
Version:
TDesign Component for React
126 lines (121 loc) • 3.94 kB
JavaScript
/**
* tdesign v1.13.2
* (c) 2025 tdesign
* @license MIT
*/
import { _ as _defineProperty } from '../../_chunks/dep-8618a2f1.js';
import { _ as _slicedToArray } from '../../_chunks/dep-118954e6.js';
import { useState, useRef, useCallback, useMemo } from 'react';
import '../../_chunks/dep-c37cc2fd.js';
import '../../_chunks/dep-61f5e3d1.js';
function getSizeDraggable(sizeDraggable, limit) {
if (typeof sizeDraggable === "boolean") {
return {
allowSizeDraggable: sizeDraggable,
max: limit.max,
min: limit.min
};
}
return {
allowSizeDraggable: true,
max: sizeDraggable.max,
min: sizeDraggable.min
};
}
function calcSizeRange(size, min, max) {
return Math.min(Math.max(size, min), max);
}
function calcMoveSize(placement, opts) {
var x = opts.x,
y = opts.y,
max = opts.max,
min = opts.min,
maxWidth = opts.maxWidth,
maxHeight = opts.maxHeight;
var moveSize;
switch (placement) {
case "right":
moveSize = calcSizeRange(maxWidth - x, min, max);
break;
case "left":
moveSize = calcSizeRange(x, min, max);
break;
case "top":
moveSize = calcSizeRange(y, min, max);
break;
case "bottom":
moveSize = calcSizeRange(maxHeight - y, min, max);
break;
default:
return moveSize;
}
return moveSize;
}
var useDrag = function useDrag(placement, sizeDraggable, onSizeDragEnd) {
var _useState = useState(null),
_useState2 = _slicedToArray(_useState, 2),
dragSizeValue = _useState2[0],
changeDragSizeValue = _useState2[1];
var dragSizeRef = useRef(0);
var handleMousemove = useCallback(function (e) {
if (sizeDraggable === false) return;
var x = e.x,
y = e.y;
var maxHeight = document.documentElement.clientHeight;
var maxWidth = document.documentElement.clientWidth;
var offsetHeight = 8;
var offsetWidth = 8;
var max = placement === "left" || placement === "right" ? maxWidth : maxHeight;
var min = placement === "left" || placement === "right" ? offsetWidth : offsetHeight;
var _getSizeDraggable = getSizeDraggable(sizeDraggable, {
max: max,
min: min
}),
limitMax = _getSizeDraggable.max,
limitMin = _getSizeDraggable.min;
var moveSize = calcMoveSize(placement, {
x: x,
y: y,
maxWidth: maxWidth,
maxHeight: maxHeight,
max: limitMax,
min: limitMin
});
if (typeof moveSize === "undefined") return;
changeDragSizeValue("".concat(moveSize, "px"));
dragSizeRef.current = moveSize;
}, [placement, sizeDraggable]);
var draggableLineStyles = useMemo(function () {
var isHorizontal = ["right", "left"].includes(placement);
var oppositeMap = {
left: "right",
right: "left",
top: "bottom",
bottom: "top"
};
return _defineProperty(_defineProperty(_defineProperty(_defineProperty({
zIndex: 1,
position: "absolute",
background: "transparent"
}, oppositeMap[placement], 0), "width", isHorizontal ? "16px" : "100%"), "height", isHorizontal ? "100%" : "16px"), "cursor", isHorizontal ? "col-resize" : "row-resize");
}, [placement]);
var handleMouseup = useCallback(function (e) {
document.removeEventListener("mouseup", handleMouseup, true);
document.removeEventListener("mousemove", handleMousemove, true);
onSizeDragEnd === null || onSizeDragEnd === void 0 || onSizeDragEnd({
e: e,
size: dragSizeRef.current
});
}, [handleMousemove, onSizeDragEnd]);
var enableDrag = useCallback(function () {
document.addEventListener("mouseup", handleMouseup, true);
document.addEventListener("mousemove", handleMousemove, true);
}, [handleMousemove, handleMouseup]);
return {
dragSizeValue: dragSizeValue,
enableDrag: enableDrag,
draggableLineStyles: draggableLineStyles
};
};
export { useDrag as default };
//# sourceMappingURL=useDrag.js.map