{"_id":"@afex-dapps/idle-timer","_rev":"6-ba877034ceecafc05b3ad8ef74363de1","name":"@afex-dapps/idle-timer","dist-tags":{"latest":"1.1.4"},"versions":{"1.0.0":{"name":"@afex-dapps/idle-timer","version":"1.0.0","keywords":["idle-timer","inactivity","session-timeout","react","typescript","AFEX"],"author":{"url":"https://afex.africa","name":"AFEX","email":"designapps@africaexchange.com"},"license":"MIT","_id":"@afex-dapps/idle-timer@1.0.0","maintainers":[{"name":"afex-dapps","email":"afexdesignapps@gmail.com"}],"dist":{"shasum":"278c72e243dd3ce57dfc7aa20551ccaba51cc407","tarball":"https://registry.npmjs.org/@afex-dapps/idle-timer/-/idle-timer-1.0.0.tgz","fileCount":9,"integrity":"sha512-0dLoB6XS6EQf1kSo2rpzhxwgxm37nTPXRCUHND2Kc8GzLFH3/IjGR0R34nS0oq4CfcHjnHmK82Qp5nhfgV7ICA==","signatures":[{"sig":"MEQCIF1EkGvMsUdqe4ABL+xgrTXkx4Y36YyFKuxao04o90c1AiAD52EvaEHj6knh5r9hwSEFqlx0ZpYnPmAmDno8rUrgLg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57025},"type":"module","_from":"file:afex-dapps-idle-timer-1.0.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"private":false,"scripts":{"test":"vitest --run coverage","build":"tsup","major":"pnpm version major","minor":"pnpm version minor","patch":"pnpm version patch","commit":"git add .","dry-run":"pnpm publish --dry-run --no-git-checks","version":"pnpm run commit","pre-major":"pnpm version premajor","pre-minor":"pnpm version preminor","pre-patch":"pnpm version prepatch","precommit":"standard-changelog","postcommit":"git commit --message $npm_package_version","preversion":"tsc --noEmit","postversion":"pnpm publish --access public"},"_npmUser":{"name":"afex-dapps","actor":{"name":"afex-dapps","type":"user","email":"afexdesignapps@gmail.com"},"email":"afexdesignapps@gmail.com"},"_resolved":"/private/var/folders/4k/vkkh8s8s2j1bcn38k3fpb0jh0000gn/T/9d398c7c9de9c66426c03ff59734f03d/afex-dapps-idle-timer-1.0.0.tgz","_integrity":"sha512-0dLoB6XS6EQf1kSo2rpzhxwgxm37nTPXRCUHND2Kc8GzLFH3/IjGR0R34nS0oq4CfcHjnHmK82Qp5nhfgV7ICA==","_npmVersion":"10.5.0","description":"Idle Timer library for detecting user inactivity and managing session timeouts","directories":{},"_nodeVersion":"20.12.1","dependencies":{"date-fns":"^4.1.0","react-idle-timer":"^5.7.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^2.0.0","typescript":"^5.8.3","@tabler/icons-react":"^3.34.0"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/idle-timer_1.0.0_1750755357348_0.8178289929284883","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@afex-dapps/idle-timer","version":"1.1.0","keywords":["idle-timer","inactivity","session-timeout","react","typescript","AFEX"],"author":{"url":"https://afex.africa","name":"AFEX","email":"designapps@africaexchange.com"},"license":"MIT","_id":"@afex-dapps/idle-timer@1.1.0","maintainers":[{"name":"afex-dapps","email":"afexdesignapps@gmail.com"}],"dist":{"shasum":"17b2e8ee8992578db128b6ff8c303a4e4b626061","tarball":"https://registry.npmjs.org/@afex-dapps/idle-timer/-/idle-timer-1.1.0.tgz","fileCount":9,"integrity":"sha512-4bgbiKFVwuJTKi5a1/j7RadU4M2LUbXh8z469fsIbdLRldzGyv1dvdU197oksO2BocQu28rFj5MYXsLPJ/SeCw==","signatures":[{"sig":"MEQCIFxFKudL5FtCbK8RL7duyw0+VCAk8iNRTDGtsQUy2ZIkAiB8NhsoU8874ebkxJrnL1ltV5i/lsUAWMpsx33yP0aufg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55874},"type":"module","_from":"file:afex-dapps-idle-timer-1.1.0.tgz","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"private":false,"scripts":{"test":"vitest --run coverage","build":"tsup","major":"pnpm version major","minor":"pnpm version minor","patch":"pnpm version patch","commit":"git add .","dry-run":"pnpm publish --dry-run --no-git-checks","version":"pnpm run commit","pre-major":"pnpm version premajor","pre-minor":"pnpm version preminor","pre-patch":"pnpm version prepatch","precommit":"standard-changelog","postcommit":"git commit --message $npm_package_version","preversion":"tsc --noEmit","postversion":"pnpm publish --access public"},"_npmUser":{"name":"afex-dapps","actor":{"name":"afex-dapps","type":"user","email":"afexdesignapps@gmail.com"},"email":"afexdesignapps@gmail.com"},"_resolved":"/private/var/folders/4k/vkkh8s8s2j1bcn38k3fpb0jh0000gn/T/ed14378bda597254f7360127cf8519f8/afex-dapps-idle-timer-1.1.0.tgz","_integrity":"sha512-4bgbiKFVwuJTKi5a1/j7RadU4M2LUbXh8z469fsIbdLRldzGyv1dvdU197oksO2BocQu28rFj5MYXsLPJ/SeCw==","_npmVersion":"10.5.0","description":"Idle Timer library for detecting user inactivity and managing session timeouts","directories":{},"_nodeVersion":"20.12.1","dependencies":{"date-fns":"^4.1.0","react-idle-timer":"^5.7.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^2.0.0","typescript":"^5.8.3","@tabler/icons-react":"^3.34.0"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/idle-timer_1.1.0_1750758299540_0.3383909864513024","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@afex-dapps/idle-timer","version":"1.1.1","keywords":["idle-timer","inactivity","session-timeout","react","typescript","AFEX"],"author":{"url":"https://afex.africa","name":"AFEX","email":"designapps@africaexchange.com"},"license":"MIT","_id":"@afex-dapps/idle-timer@1.1.1","maintainers":[{"name":"afex-dapps","email":"afexdesignapps@gmail.com"}],"dist":{"shasum":"b5b934a9a6c3f3e818d0c1f82507498780819aef","tarball":"https://registry.npmjs.org/@afex-dapps/idle-timer/-/idle-timer-1.1.1.tgz","fileCount":9,"integrity":"sha512-SQr5FSuYHCsu2IjL6ZH7yoRjuGbGaPWwyPe7xNZ2rllZO94w4URg+TlIck0ND+fe1v4UPqnWyuRbtMO5hlJibQ==","signatures":[{"sig":"MEUCIGK/vF9K2vurGYDyPMZZJKuHLf/dgBZWTIONkLtQFuAdAiEA2BZOVYrKYknFWfc3miv4MXNTtLBgfJM9crvvJxUcTaw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58163},"type":"module","_from":"file:afex-dapps-idle-timer-1.1.1.tgz","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"private":false,"scripts":{"test":"vitest --run coverage","build":"tsup","major":"pnpm version major","minor":"pnpm version minor","patch":"pnpm version patch","commit":"git add .","dry-run":"pnpm publish --dry-run --no-git-checks","version":"pnpm run commit","pre-major":"pnpm version premajor","pre-minor":"pnpm version preminor","pre-patch":"pnpm version prepatch","precommit":"standard-changelog --path apps/idle-timer","postcommit":"git commit --message $npm_package_version","preversion":"tsc --noEmit","postversion":"pnpm publish --access public"},"_npmUser":{"name":"afex-dapps","actor":{"name":"afex-dapps","type":"user","email":"afexdesignapps@gmail.com"},"email":"afexdesignapps@gmail.com"},"_resolved":"/private/var/folders/4k/vkkh8s8s2j1bcn38k3fpb0jh0000gn/T/ab8f61c3386f95f3d9d8b7653dfb1dbf/afex-dapps-idle-timer-1.1.1.tgz","_integrity":"sha512-SQr5FSuYHCsu2IjL6ZH7yoRjuGbGaPWwyPe7xNZ2rllZO94w4URg+TlIck0ND+fe1v4UPqnWyuRbtMO5hlJibQ==","_npmVersion":"10.5.0","description":"Idle Timer library for detecting user inactivity and managing session timeouts","directories":{},"_nodeVersion":"20.12.1","dependencies":{"date-fns":"^4.1.0","react-idle-timer":"^5.7.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^2.0.0","typescript":"^5.8.3","@tabler/icons-react":"^3.34.0"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/idle-timer_1.1.1_1750759884181_0.718886444105926","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@afex-dapps/idle-timer","version":"1.1.2","keywords":["idle-timer","inactivity","session-timeout","react","typescript","AFEX"],"author":{"url":"https://afex.africa","name":"AFEX","email":"designapps@africaexchange.com"},"license":"MIT","_id":"@afex-dapps/idle-timer@1.1.2","maintainers":[{"name":"afex-dapps","email":"afexdesignapps@gmail.com"}],"dist":{"shasum":"c983041e1fe7ff63852be050d3cb0d4c4eb0b926","tarball":"https://registry.npmjs.org/@afex-dapps/idle-timer/-/idle-timer-1.1.2.tgz","fileCount":9,"integrity":"sha512-o7UTC71Jwxeo6EdZGcRnLKVc4c8UKZK5mgpGSZHZe2aqPJYT8cQ5rFmiBes6olAsAmAsu4jVNpCIiJevk5Q90Q==","signatures":[{"sig":"MEUCIH4H5JqOZIZSCDYkrL/Ak9RseZkUiu1To3UYmpHA3s1bAiEA2iuz27vuEVdQbps1oIae0gvswvv8wh0yFsylB1orwGU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58268},"type":"module","_from":"file:afex-dapps-idle-timer-1.1.2.tgz","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"private":false,"scripts":{"test":"vitest --run coverage","build":"tsup","major":"pnpm version major","minor":"pnpm version minor","patch":"pnpm version patch","commit":"git add .","dry-run":"pnpm publish --dry-run --no-git-checks","version":"pnpm run commit","pre-major":"pnpm version premajor","pre-minor":"pnpm version preminor","pre-patch":"pnpm version prepatch","precommit":"standard-changelog --path apps/idle-timer","postcommit":"git commit --message $npm_package_version","preversion":"tsc --noEmit","postversion":"pnpm publish --access public"},"_npmUser":{"name":"afex-dapps","actor":{"name":"afex-dapps","type":"user","email":"afexdesignapps@gmail.com"},"email":"afexdesignapps@gmail.com"},"_resolved":"/private/var/folders/4k/vkkh8s8s2j1bcn38k3fpb0jh0000gn/T/d953e52f3ff455e9f778be979dc24e9a/afex-dapps-idle-timer-1.1.2.tgz","_integrity":"sha512-o7UTC71Jwxeo6EdZGcRnLKVc4c8UKZK5mgpGSZHZe2aqPJYT8cQ5rFmiBes6olAsAmAsu4jVNpCIiJevk5Q90Q==","_npmVersion":"10.5.0","description":"Idle Timer library for detecting user inactivity and managing session timeouts","directories":{},"_nodeVersion":"20.12.1","dependencies":{"date-fns":"^4.1.0","react-idle-timer":"^5.7.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"^2.0.0","typescript":"^5.8.3","@tabler/icons-react":"^3.34.0"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/idle-timer_1.1.2_1750760350403_0.8959638491753124","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@afex-dapps/idle-timer","version":"1.1.3","keywords":["idle-timer","inactivity","session-timeout","react","typescript","AFEX"],"author":{"url":"https://afex.africa","name":"AFEX","email":"designapps@africaexchange.com"},"license":"MIT","_id":"@afex-dapps/idle-timer@1.1.3","maintainers":[{"name":"afex-dapps","email":"afexdesignapps@gmail.com"}],"dist":{"shasum":"8e9b3621ebf2229419d38760823245efff88ed66","tarball":"https://registry.npmjs.org/@afex-dapps/idle-timer/-/idle-timer-1.1.3.tgz","fileCount":9,"integrity":"sha512-qzqSg0umnx2MO228hwbgxzw+xMuUpQ3MXGP1NiGruHYLMKMT41GVY+qLvpOqUDhve5hvKGM0D8tLfQ0JQS5/KQ==","signatures":[{"sig":"MEUCID8wbCp7D/5zM/vQkflKOq6Xi55fRKr23xA9b44eZBaNAiEAgKyoBdYfXDyHI2UA0Td2+e7mB8ZOxllb4rTxDBz6Zp4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":186203},"type":"module","_from":"file:afex-dapps-idle-timer-1.1.3.tgz","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"private":false,"scripts":{"test":"vitest --run coverage","build":"tsup","major":"pnpm version major","minor":"pnpm version minor","patch":"pnpm version patch","commit":"git add .","dry-run":"pnpm publish --dry-run --no-git-checks","version":"pnpm run commit","pre-major":"pnpm version premajor","pre-minor":"pnpm version preminor","pre-patch":"pnpm version prepatch","precommit":"standard-changelog --path apps/idle-timer","postcommit":"git commit --message $npm_package_version","preversion":"tsc --noEmit","postversion":"pnpm publish --access public"},"_npmUser":{"name":"afex-dapps","actor":{"name":"afex-dapps","type":"user","email":"afexdesignapps@gmail.com"},"email":"afexdesignapps@gmail.com"},"_resolved":"/private/var/folders/4k/vkkh8s8s2j1bcn38k3fpb0jh0000gn/T/9a6cd6a3769b5d218f017b70a56dbb5f/afex-dapps-idle-timer-1.1.3.tgz","_integrity":"sha512-qzqSg0umnx2MO228hwbgxzw+xMuUpQ3MXGP1NiGruHYLMKMT41GVY+qLvpOqUDhve5hvKGM0D8tLfQ0JQS5/KQ==","_npmVersion":"10.5.0","description":"Idle Timer library for detecting user inactivity and managing session timeouts","directories":{},"_nodeVersion":"20.12.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"react-idle-timer":"^5.7.2"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/idle-timer_1.1.3_1750762488347_0.2541407656395356","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@afex-dapps/idle-timer","description":"Idle Timer library for detecting user inactivity and managing session timeouts","version":"1.1.4","type":"module","module":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"author":{"name":"AFEX","email":"designapps@africaexchange.com","url":"https://afex.africa"},"private":false,"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"devDependencies":{"react-idle-timer":"^5.7.2"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"license":"MIT","keywords":["idle-timer","inactivity","session-timeout","react","typescript","AFEX"],"scripts":{"test":"vitest --run coverage","build":"tsup","dry-run":"pnpm publish --dry-run --no-git-checks","pre-patch":"pnpm version prepatch","patch":"pnpm version patch","pre-minor":"pnpm version preminor","minor":"pnpm version minor","pre-major":"pnpm version premajor","major":"pnpm version major","preversion":"tsc --noEmit","version":"pnpm run commit","precommit":"standard-changelog --path apps/idle-timer","commit":"git add .","postcommit":"git commit --message $npm_package_version","postversion":"pnpm publish --access public"},"_id":"@afex-dapps/idle-timer@1.1.4","_integrity":"sha512-bA0YFIl+YM2ej3O8orLfx6m6iWFXihTV10lZEHR1HtaomiPKv8jN653ISyQt+1Q2JYPgSihGdpdiz3aPioCS5Q==","_resolved":"/private/var/folders/4k/vkkh8s8s2j1bcn38k3fpb0jh0000gn/T/023fcd700b992ec0433a26decee31304/afex-dapps-idle-timer-1.1.4.tgz","_from":"file:afex-dapps-idle-timer-1.1.4.tgz","_nodeVersion":"20.12.1","_npmVersion":"10.5.0","dist":{"integrity":"sha512-bA0YFIl+YM2ej3O8orLfx6m6iWFXihTV10lZEHR1HtaomiPKv8jN653ISyQt+1Q2JYPgSihGdpdiz3aPioCS5Q==","shasum":"ffd899cad93506eff12774b14b8c3645aed7621a","tarball":"https://registry.npmjs.org/@afex-dapps/idle-timer/-/idle-timer-1.1.4.tgz","fileCount":9,"unpackedSize":206575,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC8ZHfyeX58YuqiisV2pWgQnwm8y4wFloBi8LDL8+fW0gIgBRxLY2tGwdOj1MPoganMqPhHexSyJqtqovlEtUzPqaY="}]},"_npmUser":{"name":"afex-dapps","email":"afexdesignapps@gmail.com","actor":{"name":"afex-dapps","email":"afexdesignapps@gmail.com","type":"user"}},"directories":{},"maintainers":[{"name":"afex-dapps","email":"afexdesignapps@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/idle-timer_1.1.4_1750763835713_0.8269159542343751"},"_hasShrinkwrap":false}},"time":{"created":"2025-06-24T08:55:57.267Z","modified":"2025-06-24T11:17:16.084Z","1.0.0":"2025-06-24T08:55:57.519Z","1.1.0":"2025-06-24T09:44:59.736Z","1.1.1":"2025-06-24T10:11:24.391Z","1.1.2":"2025-06-24T10:19:10.568Z","1.1.3":"2025-06-24T10:54:48.510Z","1.1.4":"2025-06-24T11:17:15.889Z"},"author":{"name":"AFEX","email":"designapps@africaexchange.com","url":"https://afex.africa"},"license":"MIT","keywords":["idle-timer","inactivity","session-timeout","react","typescript","AFEX"],"description":"Idle Timer library for detecting user inactivity and managing session timeouts","maintainers":[{"name":"afex-dapps","email":"afexdesignapps@gmail.com"}],"readme":"# @afex-dapps/idle-timer\n\nA React library for detecting user inactivity and managing session timeouts with customizable UI components.\n\n## Features\n\n- 🕐 Configurable inactivity detection\n- ⚠️ Customizable timeout warning prompts\n- 🔄 Cross-tab synchronization\n- 🎨 Bring your own UI components\n- 📱 TypeScript support\n- 🪝 React hooks API\n- ⏱️ Built-in countdown timer functionality\n- 🎯 Modal/prompt management utilities\n\n## Installation\n\n```bash\nnpm install @afex-dapps/idle-timer\n# or\nyarn add @afex-dapps/idle-timer\n# or\npnpm add @afex-dapps/idle-timer\n```\n\n> **Note:** This library requires `react` and `react-dom` as a peer dependency.\n\n## Quick Start\n\n### Basic Usage with useIdleTimeout Hook\n\n```tsx\nimport { useState } from \"react\";\nimport { IdleTimerProvider, useIdleTimeout } from \"@afex-dapps/idle-timer\";\n\nfunction MyComponent() {\n  const [isLoggedIn, setIsLoggedIn] = useState(true);\n\n  const { remainingTime, continueUserSession, showIdleTimerPrompt } =\n    useIdleTimeout({\n      timeout: 5 * 60 * 1000, // 5 minutes\n      promptBeforeIdle: 1 * 60 * 1000, // 1 minute warning\n      onIdle: () => {\n        setIsLoggedIn(false);\n        console.log(\"User logged out due to inactivity\");\n      },\n      disabled: !isLoggedIn, // Only run when logged in\n    });\n\n  return (\n    <IdleTimerProvider>\n      <div>\n        <h1>{isLoggedIn ? \"Welcome!\" : \"Please log in\"}</h1>\n\n        {showIdleTimerPrompt && (\n          <div className=\"warning-modal\">\n            <p>Session expires in {remainingTime} seconds</p>\n            <button onClick={continueUserSession}>Continue Session</button>\n          </div>\n        )}\n      </div>\n    </IdleTimerProvider>\n  );\n}\n```\n\n### Advanced Usage with Custom Modal\n\n```tsx\nimport { useState } from \"react\";\nimport {\n  IdleTimerProvider,\n  useIdleTimeout,\n  formatTime,\n} from \"@afex-dapps/idle-timer\";\n\n// Custom prompt component\nconst SessionTimeoutModal = ({\n  isOpen,\n  remainingTime,\n  onContinue,\n  onLogout,\n}) => {\n  if (!isOpen) return null;\n\n  return (\n    <div className=\"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50\">\n      <div className=\"bg-white p-6 rounded-lg max-w-md\">\n        <h2 className=\"text-xl font-bold mb-4\">⚠️ Session Timeout Warning</h2>\n        <p className=\"mb-4\">\n          Your session will expire in{\" \"}\n          <span className=\"font-mono text-2xl text-red-600\">\n            {formatTime(remainingTime)}\n          </span>\n        </p>\n        <div className=\"flex gap-3\">\n          <button\n            onClick={onContinue}\n            className=\"px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600\"\n          >\n            Continue Session\n          </button>\n          <button\n            onClick={onLogout}\n            className=\"px-4 py-2 bg-gray-500 text-white rounded hover:bg-gray-600\"\n          >\n            Logout Now\n          </button>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nfunction App() {\n  const [isAuthenticated, setIsAuthenticated] = useState(true);\n\n  const handleLogout = () => {\n    setIsAuthenticated(false);\n    // Your logout logic here\n    console.log(\"Logging out...\");\n  };\n\n  const { remainingTime, continueUserSession, showIdleTimerPrompt } =\n    useIdleTimeout({\n      timeout: 300000, // 5 minutes\n      promptBeforeIdle: 60000, // 1 minute\n      crossTab: true,\n      leaderElection: true,\n      onIdle: handleLogout,\n      disabled: !isAuthenticated,\n    });\n\n  return (\n    <IdleTimerProvider>\n      <div>\n        <h1>{isAuthenticated ? \"Dashboard\" : \"Login Required\"}</h1>\n\n        <SessionTimeoutModal\n          isOpen={showIdleTimerPrompt}\n          remainingTime={remainingTime}\n          onContinue={continueUserSession}\n          onLogout={handleLogout}\n        />\n      </div>\n    </IdleTimerProvider>\n  );\n}\n```\n\n### Using Hooks Directly\n\n```tsx\nimport { useIdleTimeout } from \"@afex-dapps/idle-timer\";\n\nfunction MyComponent() {\n  const { remainingTime, continueUserSession, showIdleTimerPrompt, idleTimer } =\n    useIdleTimeout({\n      timeout: 300000, // 5 minutes\n      promptBeforeIdle: 60000, // 1 minute\n      onIdle: () => console.log(\"User is idle\"),\n      onPrompt: () => console.log(\"Showing prompt\"),\n    });\n\n  if (showIdleTimerPrompt) {\n    return (\n      <div>\n        <p>You'll be logged out in {remainingTime} seconds</p>\n        <button onClick={continueUserSession}>Stay Active</button>\n      </div>\n    );\n  }\n\n  return <div>Your content here</div>;\n}\n```\n\n## API Reference\n\n### useIdleTimeout Hook\n\nThe main hook that provides idle timeout functionality.\n\n**Parameters:**\n\n- `config: IIdleTimerProps` - Configuration object from react-idle-timer\n\n**Returns:**\n\n```tsx\n{\n  remainingTime: number;           // Time remaining in seconds\n  continueUserSession: () => void; // Function to reset timer and continue session\n  showIdleTimerPrompt: boolean;    // Whether to show the timeout prompt\n  idleTimer: IIdleTimer;          // The underlying idle timer instance\n}\n```\n\n### IdleTimerProvider\n\nProvider component from react-idle-timer. Wrap your app with this component.\n\n```tsx\nimport { IdleTimerProvider } from \"@afex-dapps/idle-timer\";\n\n<IdleTimerProvider>\n  <YourApp />\n</IdleTimerProvider>;\n```\n\n### Configuration Options\n\nAll configuration options are passed directly to react-idle-timer. Common options include:\n\n| Property           | Type       | Default          | Description                       |\n| ------------------ | ---------- | ---------------- | --------------------------------- |\n| `timeout`          | `number`   | `300000` (5 min) | Time in ms before user is idle    |\n| `promptBeforeIdle` | `number`   | `60000` (1 min)  | Time in ms to show warning        |\n| `crossTab`         | `boolean`  | `true`           | Sync across browser tabs          |\n| `leaderElection`   | `boolean`  | `true`           | Use leader election for cross-tab |\n| `syncTimers`       | `number`   | `500`            | Sync interval in ms               |\n| `disabled`         | `boolean`  | `false`          | Disable the timer                 |\n| `onIdle`           | `function` | -                | Callback when user becomes idle   |\n| `onPrompt`         | `function` | -                | Callback when prompt is shown     |\n| `onAction`         | `function` | -                | Callback when user is active      |\n\nFor a complete list of options, see the [react-idle-timer documentation](https://github.com/supremetechnopriest/react-idle-timer).\n\n### Utility Functions\n\n- `formatTime(ms: number): string` - Format time as MM:SS\n- `millisecondsToSeconds(ms: number): number` - Convert ms to seconds\n- `secondsToMilliseconds(seconds: number): number` - Convert seconds to ms\n\n### Debug Hook\n\n```tsx\nimport { useIdleTimerDebug } from \"@afex-dapps/idle-timer\";\n\nfunction MyComponent() {\n  const { idleTimer } = useIdleTimeout({\n    /* config */\n  });\n\n  // Enable debug logging (logs timer state every second)\n  useIdleTimerDebug(idleTimer, true);\n\n  return <div>Your component</div>;\n}\n```\n\n## Migration from Original Code\n\nIf you're migrating from the original `InactivityProvider` code, here's how to adapt it:\n\n```tsx\n// Before (original code)\nfunction InacitivityProvider({ children }) {\n  const { asPath } = useRouter();\n  const [opened, disclosure] = useDisclosure(false);\n  const logout = useLogout();\n  const disabled = asPath === \"/\" || asPath.startsWith(\"/auth\");\n\n  const handleContinueSession = () => {\n    disclosure.close();\n    interval.stop();\n    timer.reset();\n  };\n\n  // ... rest of original code\n}\n\n// After (using this library)\nfunction InactivityProvider({ children }) {\n  const { asPath } = useRouter();\n  const logout = useLogout();\n  const disabled = asPath === \"/\" || asPath.startsWith(\"/auth\");\n\n  const { remainingTime, continueUserSession, showIdleTimerPrompt } =\n    useIdleTimeout({\n      timeout: 1000 * 60 * 5, // 5 minutes\n      promptBeforeIdle: 1000 * 60, // 1 minute\n      onIdle: logout,\n      disabled,\n    });\n\n  return (\n    <IdleTimerProvider>\n      {children}\n      <YourCustomModal\n        opened={showIdleTimerPrompt}\n        remainingTime={remainingTime}\n        onContinue={continueUserSession}\n        onLogout={logout}\n      />\n    </IdleTimerProvider>\n  );\n}\n```\n\n## Constants\n\nThe library exports several useful constants:\n\n```tsx\nimport {\n  DEFAULT_INACTIVITY_TIME, // 300000ms (5 minutes)\n  DEFAULT_PROMPT_TIME, // 60000ms (1 minute)\n  DEFAULT_DISCLOSURE_TIME, // 59 seconds\n} from \"@afex-dapps/idle-timer\";\n```\n\n## TypeScript Support\n\nThe library is fully typed. Key types include:\n\n```tsx\nimport type {\n  UseIdleTimer, // Return type of useIdleTimeout\n  IdleTimerHandler, // Event handler type\n  IdleTimerCountdownCallback, // Countdown callback type\n  UseIdleTimerCountdown, // Countdown hook return type\n} from \"@afex-dapps/idle-timer\";\n```\n\n## Best Practices\n\n1. **Always wrap your app with IdleTimerProvider**:\n\n   ```tsx\n   import { IdleTimerProvider } from \"@afex-dapps/idle-timer\";\n\n   function App() {\n     return (\n       <IdleTimerProvider>\n         <YourApp />\n       </IdleTimerProvider>\n     );\n   }\n   ```\n\n2. **Use the disabled prop for auth pages**:\n\n   ```tsx\n   const disabled = !isAuthenticated || isOnAuthPage;\n   useIdleTimeout({ disabled, ...config });\n   ```\n\n3. **Handle the continueUserSession properly**:\n\n   ```tsx\n   const handleContinue = () => {\n     // This automatically:\n     // - Closes the prompt\n     // - Stops the countdown\n     // - Resets the idle timer\n     continueUserSession();\n   };\n   ```\n\n4. **Customize timeout values for your use case**:\n\n   ```tsx\n   // For development (shorter timeouts)\n   const config = {\n     timeout: 30 * 1000, // 30 seconds\n     promptBeforeIdle: 10 * 1000, // 10 seconds\n   };\n\n   // For production (longer timeouts)\n   const config = {\n     timeout: 15 * 60 * 1000, // 15 minutes\n     promptBeforeIdle: 2 * 60 * 1000, // 2 minutes\n   };\n   ```\n\n## License\n\nMIT\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## Dependencies\n\nThis library depends on:\n\n- `react-idle-timer` - The core idle timer functionality\n- `react` & `react-dom` - React framework (peer dependencies)\n","readmeFilename":"README.md"}