{"version":3,"file":"use-idle.cjs","names":[],"sources":["../../src/hooks/use-idle.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\nconst DEFAULT_EVENTS: (keyof WindowEventMap)[] = [\n    \"mousemove\",\n    \"mousedown\",\n    \"keydown\",\n    \"touchstart\",\n    \"wheel\",\n    \"scroll\",\n];\n\n/**\n * Detect when the user has been idle for `timeout` ms (no interaction).\n * Returns `true` once the threshold elapses and back to `false` on activity.\n */\nexport function useIdle(timeout = 60_000): boolean {\n    const [idle, setIdle] = useState<boolean>(false);\n\n    useEffect(() => {\n        if (typeof window === \"undefined\") return;\n        let timer = setTimeout(() => setIdle(true), timeout);\n\n        function reset(): void {\n            setIdle(false);\n            clearTimeout(timer);\n            timer = setTimeout(() => setIdle(true), timeout);\n        }\n\n        for (const event of DEFAULT_EVENTS) {\n            window.addEventListener(event, reset, { passive: true });\n        }\n        return () => {\n            clearTimeout(timer);\n            for (const event of DEFAULT_EVENTS) {\n                window.removeEventListener(event, reset);\n            }\n        };\n    }, [timeout]);\n\n    return idle;\n}\n"],"mappings":"uBAEA,IAAM,EAA2C,CAC7C,YACA,YACA,UACA,aACA,QACA,QACJ,EAMA,SAAgB,EAAQ,EAAU,IAAiB,CAC/C,GAAM,CAAC,EAAM,IAAA,EAAW,EAAA,SAAA,CAAkB,EAAK,EAuB/C,OArBA,EAAA,EAAA,UAAA,KAAgB,CACZ,GAAI,OAAO,OAAW,IAAa,OACnC,IAAI,EAAQ,eAAiB,EAAQ,EAAI,EAAG,CAAO,EAEnD,SAAS,GAAc,CACnB,EAAQ,EAAK,EACb,aAAa,CAAK,EAClB,EAAQ,eAAiB,EAAQ,EAAI,EAAG,CAAO,CACnD,CAEA,IAAK,IAAM,KAAS,EAChB,OAAO,iBAAiB,EAAO,EAAO,CAAE,QAAS,EAAK,CAAC,EAE3D,UAAa,CACT,aAAa,CAAK,EAClB,IAAK,IAAM,KAAS,EAChB,OAAO,oBAAoB,EAAO,CAAK,CAE/C,CACJ,EAAG,CAAC,CAAO,CAAC,EAEL,CACX"}