UNPKG

test-nut-ui

Version:

<p align="center"> <img alt="logo" src="https://img11.360buyimg.com/imagetools/jfs/t1/211965/25/7152/22022/61b16785E433119bb/aa41d7a9f7e823f3.png" width="150" style="margin-bottom: 10px;"> </p>

115 lines (114 loc) 4.5 kB
import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties"; import _defineProperty from "@babel/runtime/helpers/defineProperty"; var _excluded = ["attract", "direction", "boundary", "children", "className", "style"]; function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function(sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), true).forEach(function(key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function(key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } import React__default, { useState, useRef, useEffect } from "react"; import { useDrag } from "@use-gesture/react"; import { useSpring, animated } from "@react-spring/web"; import { C as ComponentDefaults } from "./typings.js"; var defaultProps = _objectSpread(_objectSpread({}, ComponentDefaults), {}, { attract: false, direction: void 0, boundary: { top: 0, left: 0, right: 0, bottom: 0 } }); var Drag = function Drag2(props) { var _defaultProps$props = _objectSpread(_objectSpread({}, defaultProps), props), attract = _defaultProps$props.attract, direction = _defaultProps$props.direction, boundary = _defaultProps$props.boundary, children = _defaultProps$props.children, className = _defaultProps$props.className, style = _defaultProps$props.style, reset = _objectWithoutProperties(_defaultProps$props, _excluded); var classPrefix = "nut-drag"; var _useState = useState(boundary), _useState2 = _slicedToArray(_useState, 2), boundaryState = _useState2[0], setBoundaryState = _useState2[1]; var myDrag = useRef(null); var _useSpring = useSpring(function() { return { x: 0, y: 0 }; }), _useSpring2 = _slicedToArray(_useSpring, 2), currstyle = _useSpring2[0], api = _useSpring2[1]; var middleLine = useRef(0); var getInfo = function getInfo2() { var el = myDrag.current; if (el) { var offsetWidth = el.offsetWidth, offsetHeight = el.offsetHeight, offsetTop = el.offsetTop, offsetLeft = el.offsetLeft; var _document$documentEle = document.documentElement, clientWidth = _document$documentEle.clientWidth, clientHeight = _document$documentEle.clientHeight; var top = boundary.top, left = boundary.left, bottom = boundary.bottom, right = boundary.right; setBoundaryState({ top: -offsetTop + top, left: -offsetLeft + left, bottom: clientHeight - offsetHeight - offsetTop - bottom, right: clientWidth - offsetWidth - offsetLeft - right }); middleLine.current = clientWidth - offsetWidth - offsetLeft - (clientWidth - offsetWidth) / 2; } }; var bind = useDrag(function(_ref) { var down = _ref.down, last = _ref.last, _ref$offset = _slicedToArray(_ref.offset, 2), x = _ref$offset[0], y = _ref$offset[1]; api.start({ x, y, immediate: down }); if (last) { if (props.direction !== "y" && props.attract) { if (x < middleLine.current) { api.start({ x: boundaryState.left, y, immediate: down }); } else { api.start({ x: boundaryState.right, y, immediate: down }); } } } }, { from: function from() { return [currstyle.x.get(), currstyle.y.get()]; }, axis: direction, bounds: boundaryState }); useEffect(function() { getInfo(); }, [myDrag]); return React__default.createElement("div", _objectSpread(_objectSpread({ style, className: "".concat(classPrefix, " ").concat(className) }, reset), {}, { ref: myDrag }), React__default.createElement(animated.div, _objectSpread({ style: currstyle }, bind()), children)); }; Drag.defaultProps = defaultProps; Drag.displayName = "NutDrag"; export { Drag as default };