import { cancelFrame, frame } from "motion-dom"; import { onBeforeUpdate, onUnmounted } from "vue"; //#region src/utils/use-animation-frame.ts function useAnimationFrame(callback) { let initialTimestamp = 0; const provideTimeSinceStart = ({ timestamp, delta }) => { if (!initialTimestamp) initialTimestamp = timestamp; callback(timestamp - initialTimestamp, delta); }; const cancel = () => cancelFrame(provideTimeSinceStart); onBeforeUpdate(() => { cancel(); frame.update(provideTimeSinceStart, true); }); onUnmounted(() => cancel()); frame.update(provideTimeSinceStart, true); } //#endregion export { useAnimationFrame };