{"version":3,"sources":["../../src/use-timeout/index.ts"],"sourcesContent":["import { useLatest } from '../use-latest'\nimport { useSafeState } from '../use-safe-state'\nimport { useStableFn } from '../use-stable-fn'\nimport { useTimeoutFn } from '../use-timeout-fn'\n\nimport type { Pausable } from '../use-pausable'\nimport type { UseTimeoutFnOptions } from '../use-timeout-fn'\nimport type { AnyFunc } from '../utils/basic'\n\nexport interface UseTimeoutOptions<Controls extends boolean, Callback extends AnyFunc = AnyFunc>\n  extends UseTimeoutFnOptions {\n  /**\n   * Expose more controls\n   *\n   * @defaultValue false\n   */\n  controls?: Controls\n  /**\n   * Callback on timeout\n   */\n  callback?: Callback\n}\n\nexport type UseTimeoutReturns<Controls extends boolean, C extends AnyFunc = AnyFunc> = Controls extends true\n  ? Pausable<[], Parameters<C> | []> & {\n      /**\n       * Timeout state\n       */\n      isTimeout: boolean\n      /**\n       * Reset the timeout\n       */\n      reset(): void\n    }\n  : boolean\n\n/**\n * A React Hook that create a state that changes after a specified delay.\n */\nexport function useTimeout(interval?: number, options?: UseTimeoutOptions<false>): UseTimeoutReturns<false>\nexport function useTimeout<C extends AnyFunc>(\n  interval: number,\n  options: UseTimeoutOptions<true, C>,\n): UseTimeoutReturns<true, C>\nexport function useTimeout<C extends AnyFunc>(interval = 1000, options: UseTimeoutOptions<boolean, C> = {}) {\n  const { controls: exposeControls = false, immediate, callback } = options\n  const [isTimeout, setIsTimeout] = useSafeState(false)\n  const latest = useLatest({ callback })\n\n  const controls = useTimeoutFn<C>(\n    ((...args) => {\n      setIsTimeout(true)\n      latest.current.callback?.(...args)\n    }) as C,\n    interval,\n    { immediate: immediate ?? !exposeControls, ...options },\n  )\n\n  const reset = useStableFn(() => {\n    setIsTimeout(false)\n    controls.pause()\n  })\n\n  return exposeControls ? { isTimeout, reset, ...controls } : isTimeout\n}\n"],"names":["useTimeout","interval","options","exposeControls","controls","immediate","callback","useSafeState","isTimeout","setIsTimeout","latest","useLatest","useTimeoutFn","args","current","reset","useStableFn","pause"],"mappings":";;;;+BA4CgBA;;;eAAAA;;;yBA5CU;4BACG;2BACD;4BACC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCtB,SAASA;QAA8BC,WAAAA,iEAAW,MAAMC,UAAAA,iEAAyC,CAAC;IACvG,IAAkBC,MAAgDD,QAA1DE,UAAUD,iBAAAA,iBAAiB,QAAjBA,KAAwBE,YAAwBH,QAAxBG,WAAWC,WAAaJ,QAAbI;IACrD,IAAkCC,iCAAAA,IAAAA,0BAAY,EAAC,YAAxCC,YAA2BD,kBAAhBE,eAAgBF;IAClC,IAAMG,SAASC,IAAAA,oBAAS,EAAC;QAAEL,UAAAA;IAAS;IAEpC,IAAMF,WAAWQ,IAAAA,0BAAY,EAC1B;yCAAIC;YAAAA;;YAEHH;YAAAA,2BAAAA;QADAD,aAAa;SACbC,4BAAAA,CAAAA,kBAAAA,OAAOI,OAAO,EAACR,QAAQ,cAAvBI,gDAAAA,CAAAA,2BAAAA,sCAAAA,0BAAAA;YAAAA;SAAkC,CAAlCA,OAA0B,qBAAGG;IAC/B,GACAZ,UACA;QAAEI,WAAWA,sBAAAA,uBAAAA,YAAa,CAACF;OAAmBD;IAGhD,IAAMa,QAAQC,IAAAA,wBAAW,EAAC;QACxBP,aAAa;QACbL,SAASa,KAAK;IAChB;IAEA,OAAOd,iBAAiB;QAAEK,WAAAA;QAAWO,OAAAA;OAAUX,YAAaI;AAC9D"}