@tempots/std
Version:
Std library for TypeScript. Natural complement to the Tempo libraries.
61 lines (60 loc) • 1.51 kB
JavaScript
const T = (n, e) => {
const t = setTimeout(n, e);
return () => clearTimeout(t);
}, I = (n, e) => {
const t = setInterval(n, e);
return () => clearInterval(t);
}, F = (n, e, t = {}) => {
const { noTrailing: a = !1, noLeading: l = !1, debounceMode: i } = t;
let o, f = !1, c = 0;
function m() {
o && clearTimeout(o);
}
function A(u) {
const { upcomingOnly: s = !1 } = u || {};
m(), f = !s;
}
function d(...u) {
if (f) return;
const s = this, p = Date.now() - c;
function r() {
c = Date.now(), e.apply(s, u);
}
function v() {
o = void 0;
}
!l && i && !o && r(), m(), i === void 0 && p > n ? l ? (c = Date.now(), a || (o = setTimeout(i ? v : r, n))) : r() : a || (o = setTimeout(
i ? v : r,
i === void 0 ? n - p : n
));
}
return d.cancel = A, d;
}, g = (n, e, { atBegin: t = !1 } = {}) => F(n, e, { debounceMode: t !== !1 }), w = (n) => {
let e = null;
const t = (l) => {
e = null, n(l);
};
return (() => {
e == null && (e = requestAnimationFrame(t));
})(), () => {
e != null && (cancelAnimationFrame(e), e = null);
};
}, x = (n) => {
let e = null;
const t = (l) => {
e = requestAnimationFrame(t), n(l);
};
return (() => {
e == null && (e = requestAnimationFrame(t));
})(), () => {
e != null && (cancelAnimationFrame(e), e = null);
};
};
export {
g as debounce,
T as delayed,
w as delayedAnimationFrame,
I as interval,
x as intervalAnimationFrame,
F as throttle
};