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