{"version":3,"file":"useAnimationFrame.cjs","names":[],"sources":["../../../../src/utils/hooks/useAnimationFrame.ts"],"sourcesContent":["import { useIsomorphicLayoutEffect } from '@siberiacancode/reactuse';\nimport { useEffect, useRef } from 'react';\n\nimport { cancelAnimationFrame, requestAnimationFrame } from '../helpers';\n\n/**\n * Helps request and cancel animation frame\n *\n * @param {Function} callback - frame request callback\n * @param {boolean} active - should animation frame be requested\n * @return {object} request/cancel animation frame handlers\n */\nexport const useAnimationFrame = (callback: (time: number) => void, active?: boolean) => {\n  const animationFrameRequestRef = useRef<number>(undefined);\n  const previousTimestampRef = useRef<number>(undefined);\n  const savedHandlerRef = useRef(callback);\n\n  useIsomorphicLayoutEffect(() => {\n    savedHandlerRef.current = callback;\n  }, [callback]);\n\n  const onFrameRequest = (timestamp?: DOMHighResTimeStamp) => {\n    if (timestamp) {\n      previousTimestampRef.current = timestamp;\n      if (previousTimestampRef.current === undefined) return;\n      savedHandlerRef.current(timestamp - previousTimestampRef.current);\n    }\n\n    animationFrameRequestRef.current = requestAnimationFrame(onFrameRequest);\n  };\n\n  const onFrameCancel = () => {\n    if (!animationFrameRequestRef.current) return;\n    cancelAnimationFrame(animationFrameRequestRef.current);\n  };\n\n  useEffect(() => {\n    if (active) {\n      animationFrameRequestRef.current = requestAnimationFrame(onFrameRequest);\n      return;\n    }\n\n    onFrameCancel();\n    return () => onFrameCancel();\n  }, [active]);\n\n  return {\n    request: onFrameRequest,\n    cancel: onFrameCancel\n  };\n};\n"],"mappings":"8GAYA,IAAa,GAAqB,EAAkC,IAAqB,CACvF,IAAM,GAAA,EAAA,EAAA,OAAA,CAA0C,IAAA,EAAS,EACnD,GAAA,EAAA,EAAA,OAAA,CAAsC,IAAA,EAAS,EAC/C,GAAA,EAAA,EAAA,OAAA,CAAyB,CAAQ,GAEvC,EAAA,EAAA,0BAAA,KAAgC,CAC9B,EAAgB,QAAU,CAC5B,EAAG,CAAC,CAAQ,CAAC,EAEb,IAAM,EAAkB,GAAoC,CAC1D,GAAI,EAAW,CAEb,GADA,EAAqB,QAAU,EAC3B,EAAqB,UAAY,IAAA,GAAW,OAChD,EAAgB,QAAQ,EAAY,EAAqB,OAAO,CAClE,CAEA,EAAyB,QAAU,EAAA,sBAAsB,CAAc,CACzE,EAEM,MAAsB,CACrB,EAAyB,SAC9B,EAAA,qBAAqB,EAAyB,OAAO,CACvD,EAYA,OAVA,EAAA,EAAA,UAAA,KAAgB,CACd,GAAI,EAAQ,CACV,EAAyB,QAAU,EAAA,sBAAsB,CAAc,EACvE,MACF,CAGA,OADA,EAAc,MACD,EAAc,CAC7B,EAAG,CAAC,CAAM,CAAC,EAEJ,CACL,QAAS,EACT,OAAQ,CACV,CACF"}