@uiw/react-signature
Version:
A signature board component for react.
66 lines (64 loc) • 2.34 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getClinetXY = exports.getBoundingClientRect = exports.defaultStyle = void 0;
exports.getSvgPathFromStroke = getSvgPathFromStroke;
exports.useEvent = useEvent;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = require("react");
/**
* Turn the points returned from perfect-freehand into SVG path data.
*/
function getSvgPathFromStroke(stroke) {
if (!stroke.length) return '';
var d = stroke.reduce(function (acc, _ref, i, arr) {
var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
x0 = _ref2[0],
y0 = _ref2[1];
var _arr = (0, _slicedToArray2["default"])(arr[(i + 1) % arr.length], 2),
x1 = _arr[0],
y1 = _arr[1];
acc.push(x0, y0, (x0 + x1) / 2, (y0 + y1) / 2);
return acc;
}, ['M'].concat((0, _toConsumableArray2["default"])(stroke[0]), ['Q']));
d.push('Z');
return d.join(' ');
}
var getBoundingClientRect = exports.getBoundingClientRect = function getBoundingClientRect(el) {
var rect = el === null || el === void 0 ? void 0 : el.getBoundingClientRect();
var offsetX = (rect === null || rect === void 0 ? void 0 : rect.left) || 0;
var offsetY = (rect === null || rect === void 0 ? void 0 : rect.top) || 0;
return {
offsetX: offsetX,
offsetY: offsetY
};
};
var getClinetXY = exports.getClinetXY = function getClinetXY(_ref3) {
var clientX = _ref3.clientX,
clientY = _ref3.clientY;
return {
clientX: clientX,
clientY: clientY
};
};
var defaultStyle = exports.defaultStyle = {
'--w-signature-background': '#fff',
touchAction: 'none',
position: 'relative',
width: '100%',
height: '100%',
backgroundColor: 'var(--w-signature-background)'
};
// Saves incoming handler to the ref in order to avoid "useCallback hell"
function useEvent(handler) {
var callbackRef = (0, _react.useRef)(handler);
(0, _react.useEffect)(function () {
callbackRef.current = handler;
});
return (0, _react.useCallback)(function (event) {
return callbackRef.current && callbackRef.current(event);
}, []);
}