@primer/react-brand
Version:
Primer Brand is a GitHub's design system for creating React-based marketing websites and digital experiences.
52 lines (51 loc) • 1.24 kB
JavaScript
import { useReducedMotion as e } from "./useReducedMotion.js";
import { useCallback as t, useEffect as n, useState as r } from "react";
//#region src/hooks/useCursorAnimation.ts
function i({ text: i, animate: a, duration: o = 500, delay: s = 500, waitForPageLoad: c = !0 }) {
let l = e(), u = a === !0 && !l && i.length > 0, [d, f] = r(u), [p, m] = r(+!u), h = t(() => {
if (!u) {
m(1), f(!1);
return;
}
f(!0), m(0);
let e = performance.now(), t = (n) => {
let r = n - e, i = Math.min(r / o, 1);
m(i), i < 1 ? requestAnimationFrame(t) : f(!1);
};
requestAnimationFrame(t);
}, [u, o]);
return n(() => {
if (!u) {
m(1), f(!1);
return;
}
let e = () => setTimeout(() => {
h();
}, s), t;
if (c && typeof window < "u") if (document.readyState === "complete") t = e();
else {
let n = () => {
t = e();
};
return window.addEventListener("load", n), () => {
window.removeEventListener("load", n), t && clearTimeout(t);
};
}
else t = e();
return () => {
t && clearTimeout(t);
};
}, [
h,
s,
u,
c
]), {
isAnimating: d,
showCursor: !l && a === !0,
progress: p
};
}
//#endregion
export { i as useCursorAnimation };
//# sourceMappingURL=useCursorAnimation.js.map