{"version":3,"file":"use-debounced-value.cjs","names":[],"sources":["../../src/use-debounced-value/use-debounced-value.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport interface UseDebouncedValueOptions {\n  leading?: boolean;\n}\n\nexport type UseDebouncedValueReturnValue<T> = [T, () => void];\n\nexport function useDebouncedValue<T = any>(\n  value: T,\n  wait: number,\n  options: UseDebouncedValueOptions = { leading: false }\n): UseDebouncedValueReturnValue<T> {\n  const [_value, setValue] = useState(value);\n  const mountedRef = useRef(false);\n  const timeoutRef = useRef<number | null>(null);\n  const cooldownRef = useRef(false);\n\n  const cancel = useCallback(() => window.clearTimeout(timeoutRef.current!), []);\n\n  useEffect(() => {\n    if (mountedRef.current) {\n      if (!cooldownRef.current && options.leading) {\n        cooldownRef.current = true;\n        setValue(value);\n      } else {\n        cancel();\n        timeoutRef.current = window.setTimeout(() => {\n          cooldownRef.current = false;\n          setValue(value);\n        }, wait);\n      }\n    }\n  }, [value, options.leading, wait]);\n\n  useEffect(() => {\n    mountedRef.current = true;\n    return cancel;\n  }, []);\n\n  return [_value, cancel];\n}\n\nexport namespace useDebouncedValue {\n  export type Options = UseDebouncedValueOptions;\n  export type ReturnValue<T> = UseDebouncedValueReturnValue<T>;\n}\n"],"mappings":";;;AAQA,SAAgB,kBACd,OACA,MACA,UAAoC,EAAE,SAAS,OAAO,EACrB;CACjC,MAAM,CAAC,QAAQ,aAAA,GAAA,MAAA,UAAqB,MAAM;CAC1C,MAAM,cAAA,GAAA,MAAA,QAAoB,MAAM;CAChC,MAAM,cAAA,GAAA,MAAA,QAAmC,KAAK;CAC9C,MAAM,eAAA,GAAA,MAAA,QAAqB,MAAM;CAEjC,MAAM,UAAA,GAAA,MAAA,mBAA2B,OAAO,aAAa,WAAW,QAAS,EAAE,EAAE,CAAC;AAE9E,EAAA,GAAA,MAAA,iBAAgB;AACd,MAAI,WAAW,QACb,KAAI,CAAC,YAAY,WAAW,QAAQ,SAAS;AAC3C,eAAY,UAAU;AACtB,YAAS,MAAM;SACV;AACL,WAAQ;AACR,cAAW,UAAU,OAAO,iBAAiB;AAC3C,gBAAY,UAAU;AACtB,aAAS,MAAM;MACd,KAAK;;IAGX;EAAC;EAAO,QAAQ;EAAS;EAAK,CAAC;AAElC,EAAA,GAAA,MAAA,iBAAgB;AACd,aAAW,UAAU;AACrB,SAAO;IACN,EAAE,CAAC;AAEN,QAAO,CAAC,QAAQ,OAAO"}