{"version":3,"file":"use-idle.mjs","names":[],"sources":["../../src/use-idle/use-idle.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nexport interface UseIdleOptions {\n  events?: (keyof DocumentEventMap)[];\n  initialState?: boolean;\n}\n\nconst DEFAULT_OPTIONS: Required<UseIdleOptions> = {\n  events: ['keydown', 'mousemove', 'touchmove', 'click', 'scroll', 'wheel'],\n  initialState: true,\n};\n\nexport function useIdle(timeout: number, options?: UseIdleOptions) {\n  const { events, initialState } = { ...DEFAULT_OPTIONS, ...options };\n  const [idle, setIdle] = useState(initialState);\n  const timer = useRef(-1);\n\n  useEffect(() => {\n    const handleEvents = () => {\n      setIdle(false);\n\n      if (timer.current) {\n        window.clearTimeout(timer.current);\n      }\n\n      timer.current = window.setTimeout(() => {\n        setIdle(true);\n      }, timeout);\n    };\n\n    events.forEach((event) => document.addEventListener(event, handleEvents));\n\n    // Start the timer immediately instead of waiting for the first event to happen\n    timer.current = window.setTimeout(() => {\n      setIdle(true);\n    }, timeout);\n\n    return () => {\n      events.forEach((event) => document.removeEventListener(event, handleEvents));\n      window.clearTimeout(timer.current);\n      timer.current = -1;\n    };\n  }, [timeout]);\n\n  return idle;\n}\n\nexport namespace useIdle {\n  export type Options = UseIdleOptions;\n}\n"],"mappings":";;;AAOA,MAAM,kBAA4C;CAChD,QAAQ;EAAC;EAAW;EAAa;EAAa;EAAS;EAAU;EAAQ;CACzE,cAAc;CACf;AAED,SAAgB,QAAQ,SAAiB,SAA0B;CACjE,MAAM,EAAE,QAAQ,iBAAiB;EAAE,GAAG;EAAiB,GAAG;EAAS;CACnE,MAAM,CAAC,MAAM,WAAW,SAAS,aAAa;CAC9C,MAAM,QAAQ,OAAO,GAAG;AAExB,iBAAgB;EACd,MAAM,qBAAqB;AACzB,WAAQ,MAAM;AAEd,OAAI,MAAM,QACR,QAAO,aAAa,MAAM,QAAQ;AAGpC,SAAM,UAAU,OAAO,iBAAiB;AACtC,YAAQ,KAAK;MACZ,QAAQ;;AAGb,SAAO,SAAS,UAAU,SAAS,iBAAiB,OAAO,aAAa,CAAC;AAGzE,QAAM,UAAU,OAAO,iBAAiB;AACtC,WAAQ,KAAK;KACZ,QAAQ;AAEX,eAAa;AACX,UAAO,SAAS,UAAU,SAAS,oBAAoB,OAAO,aAAa,CAAC;AAC5E,UAAO,aAAa,MAAM,QAAQ;AAClC,SAAM,UAAU;;IAEjB,CAAC,QAAQ,CAAC;AAEb,QAAO"}