{"version":3,"sources":["../../src/use-raf-fn/index.ts"],"sourcesContent":["import { useRef } from 'react'\nimport { useLatest } from '../use-latest'\nimport { useStableFn } from '../use-stable-fn'\nimport { useUnmount } from '../use-unmount'\nimport { isClient } from '../utils/basic'\n\nimport type { AnyFunc } from '../utils/basic'\n\n/**\n * A React Hook that run a function only once on the next frame using [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame).\n */\nexport function useRafFn<T extends AnyFunc>(callback: T, autoClean = true): (...args: Parameters<T>) => void {\n  const latest = useLatest({ callback, autoClean })\n  const rafIdRef = useRef<number | null>(null)\n\n  useUnmount(() => {\n    if (isClient && rafIdRef.current && latest.current.autoClean) {\n      window.cancelAnimationFrame(rafIdRef.current)\n      rafIdRef.current = null\n    }\n  })\n\n  const rafFn = useStableFn((...args: Parameters<T>) => {\n    if (isClient && 'requestAnimationFrame' in window) {\n      rafIdRef.current && window.cancelAnimationFrame(rafIdRef.current)\n      rafIdRef.current = window.requestAnimationFrame(() => latest.current.callback(...args))\n    } else {\n      // fallback to pure callback\n      return latest.current.callback(...args)\n    }\n  }) as (...args: Parameters<T>) => void\n\n  return rafFn\n}\n"],"names":["useRafFn","callback","autoClean","latest","useLatest","rafIdRef","useRef","useUnmount","isClient","current","window","cancelAnimationFrame","rafFn","useStableFn","args","requestAnimationFrame"],"mappings":";;;;+BAWgBA;;;eAAAA;;;qBAXO;yBACG;2BACE;0BACD;qBACF;;;;;;;;;;;;;;;;;;;;;;;;;;AAOlB,SAASA,SAA4BC,QAAW;QAAEC,YAAAA,iEAAY;IACnE,IAAMC,SAASC,IAAAA,oBAAS,EAAC;QAAEH,UAAAA;QAAUC,WAAAA;IAAU;IAC/C,IAAMG,WAAWC,IAAAA,aAAM,EAAgB;IAEvCC,IAAAA,sBAAU,EAAC;QACT,IAAIC,eAAQ,IAAIH,SAASI,OAAO,IAAIN,OAAOM,OAAO,CAACP,SAAS,EAAE;YAC5DQ,OAAOC,oBAAoB,CAACN,SAASI,OAAO;YAC5CJ,SAASI,OAAO,GAAG;QACrB;IACF;IAEA,IAAMG,QAAQC,IAAAA,wBAAW,EAAC;yCAAIC;YAAAA;;QAC5B,IAAIN,eAAQ,IAAI,2BAA2BE,QAAQ;gBAEKP;YADtDE,SAASI,OAAO,IAAIC,OAAOC,oBAAoB,CAACN,SAASI,OAAO;YAChEJ,SAASI,OAAO,GAAGC,OAAOK,qBAAqB,CAAC;uBAAMZ,CAAAA,kBAAAA,OAAOM,OAAO,EAACR,QAAQ,OAAvBE,iBAAwB,qBAAGW;;QACnF,OAAO;gBAEEX;YADP,4BAA4B;YAC5B,OAAOA,CAAAA,mBAAAA,OAAOM,OAAO,EAACR,QAAQ,OAAvBE,kBAAwB,qBAAGW;QACpC;IACF;IAEA,OAAOF;AACT"}