fomantic-ui-react
Version:
Fomantic-UI React -- A React Component Library.
188 lines (152 loc) • 5.06 kB
JavaScript
/**
* fomantic-ui-react v0.0.1-alpha.10
* (c) 2022 FireLoong <fireloong@foxmail.com>
* @license MIT
*/
;
Object.defineProperty(exports, '__esModule', { value: true });
var slicedToArray = require('../_chunks/dep-640599ea.js');
var React = require('react');
var reactUse = require('react-use');
var util = {};
Object.defineProperty(util, "__esModule", {
value: true
});
util.isNavigator = isBrowser = util.isBrowser = off_1 = util.off = on_1 = util.on = noop_1 = util.noop = void 0;
var noop = function noop() {};
var noop_1 = util.noop = noop;
function on(obj) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
if (obj && obj.addEventListener) {
obj.addEventListener.apply(obj, args);
}
}
var on_1 = util.on = on;
function off(obj) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
if (obj && obj.removeEventListener) {
obj.removeEventListener.apply(obj, args);
}
}
var off_1 = util.off = off;
var isBrowser = util.isBrowser = typeof window !== 'undefined';
util.isNavigator = typeof navigator !== 'undefined';
var useSlider = function useSlider(ref) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
start: 0
};
var isMounted = reactUse.useMountedState();
var isSliding = React.useRef(false);
var valueRef = React.useRef(0);
var frame = React.useRef(0);
var _useSetState = reactUse.useSetState({
isSliding: false,
value: options.start || 0
}),
_useSetState2 = slicedToArray._slicedToArray(_useSetState, 2),
state = _useSetState2[0],
setState = _useSetState2[1];
valueRef.current = state.value;
React.useEffect(function () {
if (isBrowser) {
var styles = options.styles === void 0 ? true : options.styles;
var reverse = options.reverse === void 0 ? false : options.reverse;
if (ref.current && styles) {
ref.current.style.userSelect = "none";
}
var startScrubbing = function startScrubbing() {
if (!isSliding.current && isMounted()) {
(options.onScrubStart || noop_1)();
isSliding.current = true;
setState({
isSliding: true
});
bindEvents();
}
};
var stopScrubbing = function stopScrubbing() {
if (isSliding.current && isMounted()) {
(options.onScrubStop || noop_1)(valueRef.current);
isSliding.current = false;
setState({
isSliding: false
});
unbindEvents();
}
};
var onMouseDown = function onMouseDown(event) {
startScrubbing();
onMouseMove(event);
};
var onMouseMove = options.vertical ? function (event) {
return onScrub(event.clientY);
} : function (event) {
return onScrub(event.clientX);
};
var onTouchStart = function onTouchStart(event) {
startScrubbing();
onTouchMove(event);
};
var onTouchMove = options.vertical ? function (event) {
return onScrub(event.changedTouches[0].clientY);
} : function (event) {
return onScrub(event.changedTouches[0].clientX);
};
var bindEvents = function bindEvents() {
on_1(document, "mousemove", onMouseMove);
on_1(document, "mouseup", stopScrubbing);
on_1(document, "touchmove", onTouchMove);
on_1(document, "touchend", stopScrubbing);
};
var unbindEvents = function unbindEvents() {
off_1(document, "mousemove", onMouseMove);
off_1(document, "mouseup", stopScrubbing);
off_1(document, "touchmove", onTouchMove);
off_1(document, "touchend", stopScrubbing);
};
var onScrub = function onScrub(clientXY) {
cancelAnimationFrame(frame.current);
frame.current = requestAnimationFrame(function () {
if (isMounted() && ref.current) {
var rect = ref.current.getBoundingClientRect();
var pos = options.vertical ? rect.top : rect.left;
var length = options.vertical ? rect.height : rect.width;
if (!length) {
return;
}
var value = (clientXY - pos) / length;
if (value > 1) {
value = 1;
} else if (value < 0) {
value = 0;
}
if (reverse) {
value = 1 - value;
}
setState({
value: value
});
(options.onScrub || noop_1)(value);
}
});
};
on_1(ref.current, "mousedown", onMouseDown);
on_1(ref.current, "touchstart", onTouchStart);
return function () {
off_1(ref.current, "mousedown", onMouseDown);
off_1(ref.current, "touchstart", onTouchStart);
};
} else {
return void 0;
}
}, [ref, options.vertical]);
return state;
};
exports["default"] = useSlider;
//# sourceMappingURL=useSlider.js.map