fomantic-ui-react
Version:
Fomantic-UI React -- A React Component Library.
83 lines (67 loc) • 2.27 kB
JavaScript
/**
* fomantic-ui-react v0.0.1-alpha.10
* (c) 2022 FireLoong <fireloong@foxmail.com>
* @license MIT
*/
import { _ as _slicedToArray } from '../_chunks/dep-dc9b74a1.js';
import { useState } from 'react';
import { useIsomorphicLayoutEffect } from 'react-use';
var useRaf = function useRaf() {
var ms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1e12;
var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
var e = arguments.length > 2 ? arguments[2] : undefined;
var _useState = useState(0),
_useState2 = _slicedToArray(_useState, 2),
elapsed = _useState2[0],
set = _useState2[1];
var _useState3 = useState(false),
_useState4 = _slicedToArray(_useState3, 2),
active = _useState4[0],
setActive = _useState4[1];
var _useState5 = useState(false),
_useState6 = _slicedToArray(_useState5, 2),
startup = _useState6[0],
setStartup = _useState6[1];
var action = function action(isActive) {
setActive(isActive);
setStartup(true);
};
useIsomorphicLayoutEffect(function () {
var raf;
var timerStop;
var start;
var timerDelay;
var onFrame = function onFrame() {
var time = Math.min(1, (Date.now() - start) / ms);
set(active ? time : 1 - time);
loop();
};
var loop = function loop() {
raf = requestAnimationFrame(onFrame);
};
var onStart = function onStart() {
var _e$start;
e === null || e === void 0 ? void 0 : (_e$start = e.start) === null || _e$start === void 0 ? void 0 : _e$start.call(e);
timerStop = setTimeout(function () {
var _e$end;
cancelAnimationFrame(raf);
set(active ? 1 : 0);
setStartup(false);
e === null || e === void 0 ? void 0 : (_e$end = e.end) === null || _e$end === void 0 ? void 0 : _e$end.call(e);
}, ms);
start = Date.now();
loop();
};
if (startup) {
timerDelay = setTimeout(onStart, delay);
}
return function () {
clearTimeout(timerStop);
clearTimeout(timerDelay);
cancelAnimationFrame(raf);
};
}, [ms, delay, startup, active]);
return [elapsed, action];
};
export { useRaf as default };
//# sourceMappingURL=useRaf.js.map