{"version":3,"file":"index.mjs","sources":["../../src/index.tsx"],"sourcesContent":["import * as React from 'react'\nimport useLatest from '@react-hook/latest'\n\nconst perf = typeof performance !== 'undefined' ? performance : Date\nconst now = () => perf.now()\n\nexport function useThrottleCallback<CallbackArguments extends any[]>(\n  callback: (...args: CallbackArguments) => void,\n  fps = 30,\n  leading = false\n): (...args: CallbackArguments) => void {\n  const storedCallback = useLatest(callback)\n  const ms = 1000 / fps\n  const prev = React.useRef(0)\n  const trailingTimeout = React.useRef<ReturnType<typeof setTimeout>>()\n  const clearTrailing = () =>\n    trailingTimeout.current && clearTimeout(trailingTimeout.current)\n  const deps = [fps, leading, storedCallback]\n\n  // Reset any time the deps change\n  React.useEffect(\n    () => () => {\n      prev.current = 0\n      clearTrailing()\n    },\n    deps\n  )\n\n  return React.useCallback(function () {\n    // eslint-disable-next-line prefer-rest-params\n    const args = arguments\n    const rightNow = now()\n    const call = () => {\n      prev.current = rightNow\n      clearTrailing()\n      storedCallback.current.apply(null, args as any)\n    }\n    const current = prev.current\n    // leading\n    if (leading && current === 0) return call()\n    // body\n    if (rightNow - current > ms) {\n      if (current > 0) return call()\n      prev.current = rightNow\n    }\n    // trailing\n    clearTrailing()\n    trailingTimeout.current = setTimeout(() => {\n      call()\n      prev.current = 0\n    }, ms)\n  }, deps)\n}\n\nexport function useThrottle<State>(\n  initialState: State | (() => State),\n  fps?: number,\n  leading?: boolean\n): [State, React.Dispatch<React.SetStateAction<State>>] {\n  const state = React.useState<State>(initialState)\n  return [state[0], useThrottleCallback(state[1], fps, leading)]\n}\n"],"names":["useThrottleCallback","callback","fps","leading","prev","current","clearTrailing","storedCallback","useLatest","ms","React","trailingTimeout","clearTimeout","deps","args","arguments","rightNow","now","call","apply","setTimeout","useThrottle","initialState","state","perf","performance","Date"],"mappings":"AAMO,SAASA,EACdC,EACAC,EACAC,gBAaIC,EAAKC,QAAU,EACfC,aAfJJ,IAAAA,EAAM,aACNC,IAAAA,EAAU,OAEJI,EAAiBC,EAAUP,GAC3BQ,EAAK,IAAOP,EACZE,EAAOM,EAAa,GACpBC,EAAkBD,IAClBJ,EAAgB,IACpBK,EAAgBN,SAAWO,aAAaD,EAAgBN,SACpDQ,EAAO,CAACX,EAAKC,EAASI,UAG5BG,EACE,MAIAG,GAGKH,GAAkB,eAEjBI,EAAOC,UACPC,EAAWC,IACXC,EAAO,KACXd,EAAKC,QAAUW,EACfV,IACAC,EAAeF,QAAQc,MAAM,KAAML,IAE/BT,EAAUD,EAAKC,WAEjBF,GAAuB,IAAZE,EAAe,OAAOa,OAEjCF,EAAWX,EAAUI,EAAI,IACvBJ,EAAU,EAAG,OAAOa,IACxBd,EAAKC,QAAUW,EAGjBV,IACAK,EAAgBN,QAAUe,WAAW,KACnCF,IACAd,EAAKC,QAAU,GACdI,KACFI,GAGE,SAASQ,EACdC,EACApB,EACAC,OAEMoB,EAAQb,EAAsBY,SAC7B,CAACC,EAAM,GAAIvB,EAAoBuB,EAAM,GAAIrB,EAAKC,mHAzDvD,IAAMqB,EAA8B,oBAAhBC,YAA8BA,YAAcC,KAC1DT,EAAM,IAAMO,EAAKP"}