{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/hooks/useIdle/index.ts"],"sourcesContent":["import { useState } from 'react';\nimport { useEventListener } from '../useEventListener';\nimport { useTimeout } from '../useTimeout';\nimport { useVisibilityChange } from '../useVisibilityChange';\nimport { useThrottle } from '../useThrottle';\n\ninterface UseIdleProps {\n  timeout: number;\n  onIdle?: () => void;\n  onActive?: () => void;\n}\n\n/**\n * @description 사용자의 `비활성(idle)` 상태를 감지하는 훅입니다.\n *\n * 지정된 시간 동안 사용자 활동이 없으면 `idle` 상태로 판단하며, 마우스 움직임, 키보드 입력, 터치 이벤트 등 사용자 활동을 감지합니다.\n * 페이지 visibility 변경도 감지하여 탭이 다시 활성화되면 `active` 상태로 전환됩니다.\n *\n * 모든 이벤트는 `500ms`로 스로틀링되어 불필요한 이벤트 호출을 방지합니다.\n *\n * @param {UseIdleProps} props - idle 감지 설정을 위한 객체입니다.\n * @param {number} props.timeout - 비활성 상태로 간주되기까지의 시간(밀리초)\n * @param {() => void} [props.onIdle] - idle 상태 진입 시 콜백\n * @param {() => void} [props.onActive] - active 상태 진입 시 콜백\n *\n * @returns {boolean} 현재 사용자가 idle 상태인지 여부를 반환합니다.\n *\n * @example\n * const isIdle = useIdle({\n *   timeout: 5000, // 5초\n *   onIdle: () => console.log('사용자가 비활성 상태입니다'),\n *   onActive: () => console.log('사용자가 활성 상태입니다')\n * });\n */\nexport function useIdle({ timeout, onIdle, onActive }: UseIdleProps): boolean {\n  const [isIdle, setIsIdle] = useState(false);\n\n  const { reset: resetTimer } = useTimeout(() => {\n    setIsIdle(true);\n    onIdle?.();\n  }, timeout);\n\n  const handleActive = useThrottle(\n    () => {\n      if (isIdle) {\n        setIsIdle(false);\n        onActive?.();\n      }\n      resetTimer();\n    },\n    500,\n    { trailing: false }\n  );\n\n  const windowElement = typeof window !== 'undefined' ? window : null;\n\n  useEventListener(windowElement, 'pointermove', handleActive);\n  useEventListener(windowElement, 'pointerdown', handleActive);\n  useEventListener(windowElement, 'resize', handleActive);\n  useEventListener(windowElement, 'keydown', handleActive);\n  useEventListener(windowElement, 'wheel', handleActive);\n  useVisibilityChange({ onShow: handleActive });\n\n  return isIdle;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,SAAgB,QAAQ,EAAE,SAAS,QAAQ,YAAmC;CAC5E,MAAM,CAAC,QAAQ,aAAa,SAAS,MAAM;CAE3C,MAAM,EAAE,OAAO,eAAe,iBAAiB;EAC7C,UAAU,KAAK;EACf,UAAU;IACT,QAAQ;CAEX,MAAM,eAAe,kBACb;EACJ,IAAI,QAAQ;GACV,UAAU,MAAM;GAChB,YAAY;;EAEd,YAAY;IAEd,KACA,EAAE,UAAU,OAAO,CACpB;CAED,MAAM,gBAAgB,OAAO,WAAW,cAAc,SAAS;CAE/D,iBAAiB,eAAe,eAAe,aAAa;CAC5D,iBAAiB,eAAe,eAAe,aAAa;CAC5D,iBAAiB,eAAe,UAAU,aAAa;CACvD,iBAAiB,eAAe,WAAW,aAAa;CACxD,iBAAiB,eAAe,SAAS,aAAa;CACtD,oBAAoB,EAAE,QAAQ,cAAc,CAAC;CAE7C,OAAO"}