{"_id":"@supunlakmal/hooks","_rev":"29-aab6be021e94a41aefb6ae928baa1809","name":"@supunlakmal/hooks","dist-tags":{"latest":"1.3.1"},"versions":{"0.1.6":{"name":"@supunlakmal/hooks","version":"0.1.6","keywords":["react","hooks"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@0.1.6","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooksReadMe","bugs":{"url":"https://github.com/supunlakmal/hooksReadMe/issues"},"dist":{"shasum":"d40d504a36d313098f89e745df9956636783c3a2","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-0.1.6.tgz","fileCount":239,"integrity":"sha512-jYfD8KwVNFJcmKtMtjk7k/0KsMmxgpEo6JwHpcwDNtoKTPz2i6X5a5HhlzfGZkAuPN7JXSkQtfcdVQfuukLUcg==","signatures":[{"sig":"MEQCIH0XxC99RRtG5PrgSezoQVhBdPhqTI8ejMFxAWGIzwVcAiBpcSh4xnScLgKJxPjeDD90tKvPFISXyhd2mIV9DmrUXA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":500295},"main":"dist/index.js","types":"dist/types/index.d.ts","gitHead":"833124c6f9e3c7a35d180474afc6009639149ece","scripts":{"test":"jest","build":"tsc","test:watch":"jest --watch"},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooksReadMe.git","type":"git"},"_npmVersion":"10.8.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"20.18.0","dependencies":{"xlsx":"^0.18.5","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","next":"^15.3.0","react":"^19.1.0","ts-jest":"^29.3.2","react-dom":"^19.1.0","typescript":"^5.0.0","@types/jest":"^29.5.14","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^29.7.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.1.6_1744868227840_0.05968546860994306","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@supunlakmal/hooks","version":"0.1.7","keywords":["react","hooks"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@0.1.7","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooksReadMe","bugs":{"url":"https://github.com/supunlakmal/hooksReadMe/issues"},"dist":{"shasum":"d18ccad437c2da45d01108b2100016810bca47cf","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-0.1.7.tgz","fileCount":239,"integrity":"sha512-AlTMT+EBbDP9rjsO+doed7PbffewqqwS5JQPoIG4seN20Cc4YvpQa16IztX9CXz9WwmfJK6arh6pzR0hmhvlog==","signatures":[{"sig":"MEUCIQDlYg2qzaAqTthpIakFyAYDfuZXGtIWDXNsJJ+gmQaEaAIgFHBnu5m8je0OkRkz32FFqhC6zhi3b3B2S/MJUsRbZV8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":500293},"main":"dist/index.js","types":"dist/types/index.d.ts","gitHead":"833124c6f9e3c7a35d180474afc6009639149ece","scripts":{"p":"npm publish --access public","test":"jest","build":"tsc","test:watch":"jest --watch"},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooksReadMe.git","type":"git"},"_npmVersion":"10.8.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"20.18.0","dependencies":{"xlsx":"^0.18.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","next":"^15.3.0","react":"^19.1.0","ts-jest":"^29.3.2","react-dom":"^19.1.0","typescript":"^5.0.0","@types/jest":"^29.5.14","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^29.7.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.1.7_1744868861518_0.11048507099856919","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@supunlakmal/hooks","version":"0.1.8","keywords":["react","hooks"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@0.1.8","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooksReadMe","bugs":{"url":"https://github.com/supunlakmal/hooksReadMe/issues"},"dist":{"shasum":"7f63fbba91a7cbf9cadc8874f7503758097161c6","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-0.1.8.tgz","fileCount":239,"integrity":"sha512-nDNb0QpgjNaApVzbfzVqLAvvKMODD0L95E5XZAfv7BqXxCsU6wayOPtTYTRuq8Xo4pFS4+jJyRgMFqUbYRIa8A==","signatures":[{"sig":"MEYCIQDWSVjVc+PaflPzElRlXu1PP/WQ9kHauBXlcXNVDXRkYwIhAM8iF7XtKqBfsVwqGI9Ure/lkfWI+hILazMSG4lTstoF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":500116},"main":"dist/index.js","types":"dist/types/index.d.ts","gitHead":"833124c6f9e3c7a35d180474afc6009639149ece","scripts":{"p":"npm publish --access public","test":"jest","build":"tsc","test:watch":"jest --watch"},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooksReadMe.git","type":"git"},"_npmVersion":"10.8.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"20.18.0","dependencies":{"xlsx":"^0.18.5"},"_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.1.8_1744869147953_0.3416187272228397","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@supunlakmal/hooks","version":"0.1.9","keywords":["react","hooks"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@0.1.9","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooksReadMe","bugs":{"url":"https://github.com/supunlakmal/hooksReadMe/issues"},"dist":{"shasum":"7daa91a928b88fb25632dff3132c76836fb07190","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-0.1.9.tgz","fileCount":239,"integrity":"sha512-Q5knCT9vf5yAsVm6UENpGuLO3LI/APe6ANLCmw6NZ64yLW1nyOASJ4tUWaHLfYYnGyxiBeP9f4qoNtz8y6Q1Ng==","signatures":[{"sig":"MEUCIQCEQMfHXrKVU/3gMS7De/f5ixlbQbbUnf9HbVHRHuMHJQIgeLnWEqa6UR5w+yxtlJbE2tTgYgPIt6avJt5/d+3Wq2Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":498825},"main":"dist/index.js","types":"dist/types/index.d.ts","gitHead":"833124c6f9e3c7a35d180474afc6009639149ece","scripts":{"p":"npm publish --access public","test":"jest","build":"tsc","test:watch":"jest --watch"},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooksReadMe.git","type":"git"},"_npmVersion":"10.8.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.1.9_1744869294006_0.7908743910321632","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@supunlakmal/hooks","version":"0.1.10","keywords":["react","hooks","custom hooks","utility hooks","react hooks","typescript","state management","performance","accessibility","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@0.1.10","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooksReadMe","bugs":{"url":"https://github.com/supunlakmal/hooksReadMe/issues"},"dist":{"shasum":"5aa4bb313e5e9a9fb36952cfc54899f3d244e7f5","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-0.1.10.tgz","fileCount":239,"integrity":"sha512-DD/DgyeB52S1l+cX8pHXc+ltmwzl58aulGsgrc/1toJf1W/huKFoL9fTsIqY+PsqWlALIorW6FYNY3LqkwLcGw==","signatures":[{"sig":"MEUCIFVyesBihXN3Vo2NE7Gy1TDbNJb/9xRVEnGbghpvmFdVAiEA7NR5zIxTjP83A9wdJeVGV26lDqRB98bt1HNe9+4l55M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":501988},"main":"dist/index.js","types":"dist/types/index.d.ts","gitHead":"6073142c98590b59263b0749fa93806d2a4f2e3e","scripts":{"p":"npm publish --access public","build":"tsc"},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooksReadMe.git","type":"git"},"_npmVersion":"10.8.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.1.10_1744872524050_0.383231354031383","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@supunlakmal/hooks","version":"0.1.11","keywords":["react","hooks","custom hooks","utility hooks","react hooks","typescript","state management","performance","accessibility","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@0.1.11","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooksReadMe","bugs":{"url":"https://github.com/supunlakmal/hooksReadMe/issues"},"dist":{"shasum":"2be93510658d24cf75d5a8e94b49583b9c09a835","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-0.1.11.tgz","fileCount":239,"integrity":"sha512-rs7AMQWvR8DAqNp/LFjyrci9ygZxzZ1T9MkA5WagZo+8vzEhSXkzOgcOGEe3sdQYqHVtluG8rAypH5yf3M44qg==","signatures":[{"sig":"MEUCIQDR0Co/xZUjNsY8VyYApnHaOED1mQV1oY69OJGZenAq6gIgY0sKuAEXbw4cnuc+d2szZBIXmXpjBMx3dB+v+oeSiHk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":501411},"main":"dist/index.js","types":"dist/types/index.d.ts","gitHead":"65861a3cd95c25fefcec34d7d777b603fe1b9df8","scripts":{"p":"npm publish --access public","build":"tsc"},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooksReadMe.git","type":"git"},"_npmVersion":"10.8.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.1.11_1744872903123_0.8355908918432056","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@supunlakmal/hooks","version":"0.1.12","keywords":["react","hooks","custom hooks","utility hooks","react hooks","typescript","state management","performance","accessibility","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@0.1.12","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooks","bugs":{"url":"https://github.com/supunlakmal/hooks/issues"},"dist":{"shasum":"a3ff6682b858abe16d1978547027995b3dd5db47","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-0.1.12.tgz","fileCount":236,"integrity":"sha512-zfgD97bOyZY/buV1zVsiq9Z3RIhX/+LwOD0gSI1s+6+5KzijArpsP8BUTTeQnUp1AlWNb6RxJ6s0AQWaQzBTuQ==","signatures":[{"sig":"MEQCIH2k+zuSj64viaUSg+uKlqQ0VdKoKYDVYJUZPgDvbveYAiAjKPwWcRffLHQEikDzdyY4ogrNoeZllET1tj2rXrPODw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":498819},"main":"dist/index.js","types":"dist/types/index.d.ts","gitHead":"4b0ea770fdba408db6670ea5db2b67075a34588f","scripts":{"p":"npm publish --access public","build":"tsc"},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooks.git","type":"git"},"_npmVersion":"10.8.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.1.12_1744874663787_0.0027474454156521944","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"@supunlakmal/hooks","version":"0.1.13","keywords":["react","hooks","custom hooks","utility hooks","react hooks","typescript","state management","performance","accessibility","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@0.1.13","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooks","bugs":{"url":"https://github.com/supunlakmal/hooks/issues"},"dist":{"shasum":"115549322c301d32f8821ce85f900790bb3f71fa","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-0.1.13.tgz","fileCount":236,"integrity":"sha512-H80SzejAuxWokEviQdADoOWy5jnqiVTZSfSuJMWI7Yxm3LGAMcnW92gIbKj0/pM+700d1HPSQ5BPp3cuJ9iToQ==","signatures":[{"sig":"MEQCIGp/hE8Rfq/oj08tMk75OejbtiNucNNfAZyjkVJ3TZ3qAiBaXM69Xd4roOC0fcwz4uOuMBH0yU777X5bfZ95VwHOaw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":499204},"main":"dist/index.js","types":"dist/types/index.d.ts","gitHead":"9c954f5ba91cd66530982edc352d03794bd8fab9","scripts":{"p":"npm publish --access public","build":"tsc"},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooks.git","type":"git"},"_npmVersion":"10.8.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.1.13_1744886023026_0.43362209427523335","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"@supunlakmal/hooks","version":"0.1.14","keywords":["react","hooks","custom hooks","utility hooks","react hooks","typescript","state management","performance","accessibility","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@0.1.14","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooks","bugs":{"url":"https://github.com/supunlakmal/hooks/issues"},"dist":{"shasum":"96f0d6b44dc96c0ff70cddb8e4fb4473e1c679e9","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-0.1.14.tgz","fileCount":236,"integrity":"sha512-Ni0BWXdzcu6aVIrWG5XuLs7iM1EI26gT1NOpV2tec1c3NTM5Mgpxof3nTRaOibLEmugdJpHwLG7In4dEF8gm/g==","signatures":[{"sig":"MEYCIQCbUX+NK/1eyYkC0r0hT73RLXkUKvRTyLmCCcuM7R34TQIhAJyKoLD2ai+6hAikpUEYu4aA8+rzgvsrcXCYOoHkvSyS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":499257},"main":"dist/index.js","types":"dist/types/index.d.ts","gitHead":"4ef1896000371d04b7a5a7196aa43b5374d97f73","scripts":{"p":"npm publish --access public","build":"tsc"},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooks.git","type":"git"},"_npmVersion":"10.8.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.1.14_1744959203187_0.7883244013285842","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@supunlakmal/hooks","version":"0.2.0","keywords":["react","hooks","custom hooks","utility hooks","react hooks","typescript","state management","performance","accessibility","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@0.2.0","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooks","bugs":{"url":"https://github.com/supunlakmal/hooks/issues"},"dist":{"shasum":"cdf9c85c6707d2e164d6c06019ebb2736d2479a0","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-0.2.0.tgz","fileCount":236,"integrity":"sha512-z+8yx7g71f8babhWFWh5g78UmSakqkS66HipzZxtm7aPqHRWVEbTOU5eKt1cbIw4wOdf0ANDHIB7mVVZWy7a/w==","signatures":[{"sig":"MEUCIQCjLBlUHrM1PvA8fD74caSFYHAuIJrKraSa9NQD4AarkwIgP4mmUmuseptEVS0yY9hTjLR3EJrs3LR84kMKYpEy1i4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":499449},"main":"dist/index.js","types":"dist/types/index.d.ts","gitHead":"c83e4e520b147b30e5672b02798e748cad1b58ee","scripts":{"p":"npm publish --access public","build":"tsc"},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooks.git","type":"git"},"_npmVersion":"10.8.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.0_1745496823775_0.40377590504702976","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@supunlakmal/hooks","version":"0.2.1","keywords":["react","hooks","custom hooks","utility hooks","react hooks","typescript","state management","performance","accessibility","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@0.2.1","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooks","bugs":{"url":"https://github.com/supunlakmal/hooks/issues"},"dist":{"shasum":"2bfaa116246969a7703751bbb88b8e43a576e064","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-0.2.1.tgz","fileCount":428,"integrity":"sha512-DOudhKJ33vGfDR/GOnu4YgxOHECSfpfS9+8BXrZMUrRZre3CK4RZi9SwAh8oKQNVuJrWmBrhbCvoe20iaC/9Uw==","signatures":[{"sig":"MEYCIQD9P8/63+K2+NkH/RO2AIHBvO1LvlT8n7N11XOrBy7bZAIhANeuJAW/9UHlkA0EO99CfSNNQ7bfwBIWkideZY5XEyLP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":510468},"main":"dist/index.js","types":"dist/types/index.d.ts","gitHead":"c83e4e520b147b30e5672b02798e748cad1b58ee","scripts":{"p":"npm publish --access public","build":"tsc"},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooks.git","type":"git"},"_npmVersion":"10.8.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.1_1745496992958_0.1658243447305654","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@supunlakmal/hooks","version":"0.3.0","keywords":["react","hooks","custom hooks","utility hooks","react hooks","typescript","state management","performance","accessibility","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@0.3.0","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooks","bugs":{"url":"https://github.com/supunlakmal/hooks/issues"},"dist":{"shasum":"b265acef7621c0393cc3bd2c3a8ff38245d9b6ee","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-0.3.0.tgz","fileCount":2,"integrity":"sha512-C2M26cnbbd7wwnzLNPq7XUk1UAOkX3V7ynv1UHNI1aJHXRpYw3t7TMLtdIXR1+HzjX9ZTvclOxkAUzkEQZvvVA==","signatures":[{"sig":"MEUCIQD4kEq9bbbjds7HngytX69/xfGZlYlGeGF8GLSbe2ToegIgPtBLhLMD4CQgm+5IeR+0oYj34wZU/FspdE15IgBvPeg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23770},"main":"dist/index.js","types":"dist/types/index.d.ts","gitHead":"36c28203324f697308a00e99688511bb43f4b1be","scripts":{"p":"npm publish --access public","build":"tsc"},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooks.git","type":"git"},"_npmVersion":"10.8.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.3.0_1745613471917_0.5323460160437332","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@supunlakmal/hooks","version":"0.4.0","keywords":["react","hooks","custom hooks","utility hooks","react hooks","typescript","state management","performance","accessibility","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@0.4.0","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooks","bugs":{"url":"https://github.com/supunlakmal/hooks/issues"},"dist":{"shasum":"7ae8c8179c0e2e9a1ba47dac4052d121fb69868e","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-0.4.0.tgz","fileCount":254,"integrity":"sha512-EOSRBwVYZ+CVxcTfxE32KVA/tKIUBBiUssfjvuyQUdKp8O3AH//XTSoWa+eUmorSMKezepCtNVw4nTZGBHMPPA==","signatures":[{"sig":"MEQCIDGrqNSTA2o4wOwjL19Yi69cOLMllLJU7cnwfYwqOnOQAiBebljEYcWbNKdPYw7eZZEhlIjkLqsoCPLoxynHcoxHyg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":517982},"main":"dist/index.js","types":"dist/types/index.d.ts","gitHead":"883a50806dcf0094ac8141ac65af7c810fb3af6f","scripts":{"p":"npm publish --access public","build":"tsc"},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooks.git","type":"git"},"_npmVersion":"10.8.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.4.0_1745902856100_0.795640429251905","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@supunlakmal/hooks","version":"0.5.0","keywords":["react","hooks","custom hooks","utility hooks","react hooks","typescript","state management","performance","accessibility","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@0.5.0","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooks","bugs":{"url":"https://github.com/supunlakmal/hooks/issues"},"dist":{"shasum":"2a0559dfd174d004b8244dcad89f73dae10a6bf0","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-0.5.0.tgz","fileCount":266,"integrity":"sha512-rgUx2Vec4oALYfZFtw+X2xyLKfq0qElgoNZtUQiHHWqdAr+T6ouYoy0tgxHpZ1XTwApJVKYEcvBN0Pvk6BiQew==","signatures":[{"sig":"MEYCIQCrdHpoW/dvywOgTID5Nf6kRZlqO6GYcyl+s51nXDLJhAIhAP1koFzAlZENwGHVzrwdhr4WxgsfCbjFFCq0Oj0YQGYC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":559483},"main":"dist/index.js","types":"dist/types/index.d.ts","gitHead":"f99bb388852fb9c5be71166b988aee9c1210e20f","scripts":{"p":"npm publish --access public","build":"tsc"},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooks.git","type":"git"},"_npmVersion":"10.8.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.5.0_1745991677963_0.9921307999619486","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@supunlakmal/hooks","version":"0.6.0","keywords":["react","hooks","custom hooks","utility hooks","react hooks","typescript","state management","performance","accessibility","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@0.6.0","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooks","bugs":{"url":"https://github.com/supunlakmal/hooks/issues"},"dist":{"shasum":"0dd177a87003ab4ad3e4a1987215bd04c4d95184","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-0.6.0.tgz","fileCount":341,"integrity":"sha512-tHe2hKPjW+BMv6AJUftc21hraeS3FSTtj+Glpa9jR21qCSbd9Jmx4Spb8ov9+rf4Edks4fF+pSYrGkttR4QWbQ==","signatures":[{"sig":"MEUCIQCM3zjRkG1g33yQbTt2OGz3RKSv6AEw7BmXGtYnf4jyEgIgSLeE25u+IIkqYutgRpTQC7maWcyTD1SnrLQoiNq5Fp0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":596053},"main":"dist/index.js","types":"dist/types/index.d.ts","gitHead":"5e7a97b6ea3858e33da36ceb22c35db73510891c","scripts":{"p":"npm publish --access public","build":"tsc"},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooks.git","type":"git"},"_npmVersion":"10.8.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.6.0_1746017988115_0.16356732129548446","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@supunlakmal/hooks","version":"0.7.0","keywords":["react","hooks","custom hooks","utility hooks","react hooks","typescript","state management","performance","accessibility","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@0.7.0","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooks","bugs":{"url":"https://github.com/supunlakmal/hooks/issues"},"dist":{"shasum":"1b29f508f6b0370b688a974947d146e97a9dcaca","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-0.7.0.tgz","fileCount":344,"integrity":"sha512-XS9KgSb7mCZ2tOEA0xRlsdLhLrys1Rz/TIgfkBXNbGgnuaO58mndBpIy2Oyxvhfkqe7PrDjZi9bFM2I+rbbLgQ==","signatures":[{"sig":"MEQCIB6kJCrqkYRum0LC8IDERHr8beHBAsdfHXfRRzTqDQx3AiB42kdKoypUvgCRpRyistnALcvvu1ikdAeHgqup4XnV/g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":588001},"main":"dist/index.js","types":"dist/types/index.d.ts","gitHead":"6243eca5688bb473f98a5c9aa77bff47823fa9fc","scripts":{"p":"npm publish --access public","lint":"eslint . --ext .ts,.tsx","build":"tsc","format":"prettier --write ."},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooks.git","type":"git"},"_npmVersion":"10.8.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.7.0_1746178896509_0.8260415819193923","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@supunlakmal/hooks","version":"0.8.0","keywords":["react","hooks","custom hooks","utility hooks","react hooks","typescript","state management","performance","accessibility","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@0.8.0","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooks","bugs":{"url":"https://github.com/supunlakmal/hooks/issues"},"dist":{"shasum":"1e301d0b65bc2ffa0ed140785ddd1475016a3b01","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-0.8.0.tgz","fileCount":344,"integrity":"sha512-7aBRjKjbxK3yhiBZt+7490mPma4En66LsNfkQUm/LDCHO2JdAxcf28rtdtYAFvYzaXiQuPTNELBtlIgLywdtJw==","signatures":[{"sig":"MEUCIGcLPbVT2HZ+0wC0juAQU0GhNMEGDTKcWUU43+xn0VI1AiEAuzFPJdOHD2arax/9hkNP9TRNJDjBqSNyCsir7PekKYI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":595007},"main":"dist/index.js","types":"dist/types/index.d.ts","gitHead":"ebeab49adf752df48b35efdb4f34284bde940769","scripts":{"p":"npm publish --access public","lint":"eslint . --ext .ts,.tsx","build":"tsc","format":"prettier --write ."},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooks.git","type":"git"},"_npmVersion":"10.8.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.8.0_1746349493330_0.8417034248800794","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@supunlakmal/hooks","version":"0.9.0","keywords":["react","hooks","custom hooks","utility hooks","react hooks","typescript","state management","performance","accessibility","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@0.9.0","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooks","bugs":{"url":"https://github.com/supunlakmal/hooks/issues"},"dist":{"shasum":"718aee075aaa1605399d44304ea048268da37b2d","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-0.9.0.tgz","fileCount":344,"integrity":"sha512-HXqP5Ip523bxh43A+wO75Q2a62g+sumYecJGqd0CZPu3dxmzaWlLQuRsQFuIa4SIEcnoCOwL53D1Q5QYt7iNeA==","signatures":[{"sig":"MEQCIFszXPta0EN2VxJ8bu8PF0pZDoT1PLRgnup+HBSuSWoHAiAIU1a4N0vKtFJ75SIy/sfBMkMqd2h8a1xpq89Qqku4jA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":597190},"main":"dist/index.js","types":"dist/types/index.d.ts","gitHead":"8ea68d1c500da1240ab20d92c1899cf5c01e87d1","scripts":{"p":"npm publish --access public","lint":"eslint . --ext .ts,.tsx","build":"tsc","format":"prettier --write ."},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooks.git","type":"git"},"_npmVersion":"10.8.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","prettier":"^3.5.3","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.9.0_1746424636813_0.15776809280205217","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@supunlakmal/hooks","version":"0.10.0","keywords":["react","hooks","custom hooks","utility hooks","react hooks","typescript","state management","performance","accessibility","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@0.10.0","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooks","bugs":{"url":"https://github.com/supunlakmal/hooks/issues"},"dist":{"shasum":"7c3a56d3cb610db134d8d0149558a7e54ed9f31e","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-0.10.0.tgz","fileCount":344,"integrity":"sha512-oG+eCV5ELReMahbBOOWeVdxDf1yB6qwKrFE1kybZ8AX/jRxzJLa3nGZdQjZWG4U2FEILVWv+u883U13P7gMT0A==","signatures":[{"sig":"MEQCIDY78mq1AKHiZu+11AwRLq1QjKWgW3YoEgsR5rnMBhyOAiAuYYxMq5zYP3qnmuA+d1ZrzZowhf2P2eNxQPvzEQN8sQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":597046},"main":"dist/index.js","types":"dist/types/index.d.ts","gitHead":"451ecc67e641cec954cd86fd4a59084f746aef10","scripts":{"p":"npm publish --access public","build":"tsc","format":"prettier --write ."},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooks.git","type":"git"},"_npmVersion":"10.8.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","prettier":"^3.5.3","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.10.0_1746428418233_0.9405721335098025","host":"s3://npm-registry-packages-npm-production"}},"0.10.1":{"name":"@supunlakmal/hooks","version":"0.10.1","keywords":["react","hooks","custom hooks","utility hooks","react hooks","typescript","state management","performance","accessibility","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@0.10.1","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooks","bugs":{"url":"https://github.com/supunlakmal/hooks/issues"},"dist":{"shasum":"6b870d6543525f0677991958097dd24d8b39938b","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-0.10.1.tgz","fileCount":344,"integrity":"sha512-H/ARCOHrGSYtwX9b1ABIO9+K22OGtGTUUEVBn4kkVT7q1nicTx/RPK6jTtXn0W1cWuEl9oknmcqxpSb8U0f7fg==","signatures":[{"sig":"MEQCICEzjmRSBC9TZsheu3Ij7KDZTqOgaJ/6IyQx+QBfMO4oAiAtmDBSwyxSE95IBNCGCLt9D/SyyauhKmnili8GaOgNkA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":595262},"main":"dist/index.js","types":"dist/types/index.d.ts","gitHead":"ca98f484c0db20a8da38539eafe94d9df25401c9","scripts":{"p":"npm publish --access public","build":"tsc","format":"prettier --write ."},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooks.git","type":"git"},"_npmVersion":"10.8.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","prettier":"^3.5.3","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.10.1_1746429920683_0.2517720288423615","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@supunlakmal/hooks","version":"0.11.0","keywords":["react","hooks","custom hooks","utility hooks","react hooks","typescript","state management","performance","accessibility","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@0.11.0","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooks","bugs":{"url":"https://github.com/supunlakmal/hooks/issues"},"dist":{"shasum":"8139929d83ccabd0b4f59728eff3db94897a15c8","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-0.11.0.tgz","fileCount":488,"integrity":"sha512-olXh2QAN0QMY5JkKrdqW9b3t0xnSTS/AsVuwvmpcSM2O1Z+DZxysVbnE9OfZSlfpynCndoBmkvi8qLlE5MjPfg==","signatures":[{"sig":"MEUCIQC1S1kMBb+ETUluc1GwvFvkSkxVur+1fEWoK9b4a1yWCAIge9jtzOvMJ3mQIfLS4MYIhGaRZsBapaTmQxWWwuMP4SE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":833443},"main":"dist/index.js","types":"dist/types/index.d.ts","gitHead":"83a21039eb27416fbcf61acce592866940330538","scripts":{"p":"npm publish --access public","build":"tsc","format":"prettier --write ."},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooks.git","type":"git"},"_npmVersion":"10.8.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","prettier":"^3.5.3","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.11.0_1746462974376_0.7924251138889389","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@supunlakmal/hooks","version":"0.12.0","keywords":["react","react hooks","custom hooks","react utilities","react state management","typescript","frontend","web development","javascript","es6","npm package","open source","ui components","user interface","performance optimization","accessibility","developer tools","software development","web apps","single page application","spa","reactjs","react development","component library","react toolkit","react component","react patterns","hooks library","hooks collection","functional programming","state hooks","effect hooks","react context","react router","react performance","react optimization","react form","form validation","responsive design","mobile friendly","cross platform","progressive web app","pwa","frontend development","modern javascript","babel","webpack","esnext","nodejs","npm","yarn","monorepo","code quality","linting","testing","jest","react testing library","continuous integration","ci cd","devops","typescript hooks","react typescript","react 18","concurrent mode","suspense","react suspense","hooks best practices","react best practices","react community","frontend tools","web performance","react animation","drag and drop","accessibility hooks","keyboard navigation","seo friendly","code reuse","modular code","clean code","react state","immutable state","react lifecycle","react hooks tutorial","react hooks examples","react hooks library","hooks","utility hooks","state management","performance","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api","useAnimation","useAsyncAbortable","useBreakpoint","useBroadcastChannel","useCachedFetch","useClipboard","useContextMenu","useCopyToClipboard","useControlledRerenderState","useCountdown","useCounter","useConditionalEffect","useDarkMode","useDebouncedState","useDebouncedFetch","useDebouncedGeolocation","useDebouncedMediaQuery","useDeepCompareEffect","useDebouncedCallback","useDebouncedEffect","useDerivedState","useDefault","useDocumentTitle","useDeviceMotion","useLocationBasedFetch","useDeviceOrientation","useEyeDropper","useFavicon","useGeolocationContinuous","useErrorBoundary","useMobile","useNewFullscreen","useElementSize","useFirstMountState","useFiniteStateMachine","useFormValidation","useFullscreen","useGeolocation","useHover","useFunctionalState","useHookableRef","useIsMounted","useIsomorphicLayoutEffect","useLifecycleLogger","useList","useLocalStorageValue","useLocalStorageQueue","useMediaStream","useMeasure","useMediatedState","useCustomCompareEffect","useCustomCompareMemo","usePreviousDifferent","usePersistentToggle","useInfiniteScroll","useIsFirstRender","useKeyCombo","useKeyPress","useLogger"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@0.12.0","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooks","bugs":{"url":"https://github.com/supunlakmal/hooks/issues"},"dist":{"shasum":"4b4e095b25c741665d0daab3dd323ee18f3092e9","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-0.12.0.tgz","fileCount":524,"integrity":"sha512-VBhMUVUZMmwH9r4QObYfL4HGW0paOV5RqZLeqWIEqHj0ONttXPgusd2P3m7G6yclTujf0BBABcx5mG/Gc60CQw==","signatures":[{"sig":"MEUCIQD4BxRtEyCMsLpYbPcPRXbjlm9a+vbpbPUH2SCRbixR+wIgR2561LX/nMyVG/VSvMpvKoiTL56HXgA7LP6dnZ8U3ik=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":881049},"main":"dist/index.js","types":"dist/types/index.d.ts","gitHead":"f8dc324ee301e7f5af7b7cb98b917a083626e03d","scripts":{"p":"npm publish --access public","build":"tsc","format":"prettier --write ."},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooks.git","type":"git"},"_npmVersion":"10.8.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","prettier":"^3.5.3","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.12.0_1746700174887_0.43951693264048086","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@supunlakmal/hooks","version":"1.0.0","keywords":["react","react hooks","custom hooks","react utilities","react state management","typescript","frontend","web development","javascript","es6","npm package","open source","ui components","user interface","performance optimization","accessibility","developer tools","software development","web apps","single page application","spa","reactjs","react development","component library","react toolkit","react component","react patterns","hooks library","hooks collection","functional programming","state hooks","effect hooks","react context","react router","react performance","react optimization","react form","form validation","responsive design","mobile friendly","cross platform","progressive web app","pwa","frontend development","modern javascript","babel","webpack","esnext","nodejs","npm","yarn","monorepo","code quality","linting","testing","jest","react testing library","continuous integration","ci cd","devops","typescript hooks","react typescript","react 18","concurrent mode","suspense","react suspense","hooks best practices","react best practices","react community","frontend tools","web performance","react animation","drag and drop","accessibility hooks","keyboard navigation","seo friendly","code reuse","modular code","clean code","react state","immutable state","react lifecycle","react hooks tutorial","react hooks examples","react hooks library","hooks","utility hooks","state management","performance","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api","useAnimation","useAsyncAbortable","useBreakpoint","useBroadcastChannel","useCachedFetch","useClipboard","useContextMenu","useCopyToClipboard","useControlledRerenderState","useCountdown","useCounter","useConditionalEffect","useDarkMode","useDebouncedState","useDebouncedFetch","useDebouncedGeolocation","useDebouncedMediaQuery","useDeepCompareEffect","useDebouncedCallback","useDebouncedEffect","useDerivedState","useDefault","useDocumentTitle","useDeviceMotion","useLocationBasedFetch","useDeviceOrientation","useEyeDropper","useFavicon","useGeolocationContinuous","useErrorBoundary","useMobile","useNewFullscreen","useElementSize","useFirstMountState","useFiniteStateMachine","useFormValidation","useFullscreen","useGeolocation","useHover","useFunctionalState","useHookableRef","useIsMounted","useIsomorphicLayoutEffect","useLifecycleLogger","useList","useLocalStorageValue","useLocalStorageQueue","useMediaStream","useMeasure","useMediatedState","useCustomCompareEffect","useCustomCompareMemo","usePreviousDifferent","usePersistentToggle","useInfiniteScroll","useIsFirstRender","useKeyCombo","useKeyPress","useLogger"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@1.0.0","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooks","bugs":{"url":"https://github.com/supunlakmal/hooks/issues"},"dist":{"shasum":"29810e8c24e254bbb6592d8f52574e6a58119f69","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-1.0.0.tgz","fileCount":524,"integrity":"sha512-VASpJAa6NCuAmFOyAkIaQ49rxn050R/1hGa2J88jwhSpzNPN9iRCX7v8HktTSWirRmjMkcMVo/aFYZSCvMpVgw==","signatures":[{"sig":"MEQCIBxPSw90wgm8Y2glQxCvle+k41ExtRendJcwZsl4ayVKAiBkgyEZUoUtEQVE/rvfoQTlFJB5Bb4ZbR3P3FZKJtI5cg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":881593},"main":"dist/index.js","types":"dist/types/index.d.ts","funding":{"url":"https://github.com/sponsors/supunlakmal","type":"individual"},"gitHead":"b507c1eb69016ded39882ae98975f9c3d6281b9e","scripts":{"p":"npm publish --access public","build":"tsc","format":"prettier --write ."},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooks.git","type":"git"},"_npmVersion":"10.8.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","prettier":"^3.5.3","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_1.0.0_1746782122863_0.7537394245309978","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@supunlakmal/hooks","version":"1.0.3","keywords":["react","react hooks","custom hooks","react utilities","react state management","typescript","frontend","web development","javascript","es6","npm package","open source","ui components","user interface","performance optimization","accessibility","developer tools","software development","web apps","single page application","spa","reactjs","react development","component library","react toolkit","react component","react patterns","hooks library","hooks collection","functional programming","state hooks","effect hooks","react context","react router","react performance","react optimization","react form","form validation","responsive design","mobile friendly","cross platform","progressive web app","pwa","frontend development","modern javascript","babel","webpack","esnext","nodejs","npm","yarn","monorepo","code quality","linting","testing","jest","react testing library","continuous integration","ci cd","devops","typescript hooks","react typescript","react 18","concurrent mode","suspense","react suspense","hooks best practices","react best practices","react community","frontend tools","web performance","react animation","drag and drop","accessibility hooks","keyboard navigation","seo friendly","code reuse","modular code","clean code","react state","immutable state","react lifecycle","react hooks tutorial","react hooks examples","react hooks library","hooks","utility hooks","state management","performance","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api","useAnimation","useAsyncAbortable","useBreakpoint","useBroadcastChannel","useCachedFetch","useClipboard","useContextMenu","useCopyToClipboard","useControlledRerenderState","useCountdown","useCounter","useConditionalEffect","useDarkMode","useDebouncedState","useDebouncedFetch","useDebouncedGeolocation","useDebouncedMediaQuery","useDeepCompareEffect","useDebouncedCallback","useDebouncedEffect","useDerivedState","useDefault","useDocumentTitle","useDeviceMotion","useLocationBasedFetch","useDeviceOrientation","useEyeDropper","useFavicon","useGeolocationContinuous","useErrorBoundary","useMobile","useNewFullscreen","useElementSize","useFirstMountState","useFiniteStateMachine","useFormValidation","useFullscreen","useGeolocation","useHover","useFunctionalState","useHookableRef","useIsMounted","useIsomorphicLayoutEffect","useLifecycleLogger","useList","useLocalStorageValue","useLocalStorageQueue","useMediaStream","useMeasure","useMediatedState","useCustomCompareEffect","useCustomCompareMemo","usePreviousDifferent","usePersistentToggle","useInfiniteScroll","useIsFirstRender","useKeyCombo","useKeyPress","useLogger"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@1.0.3","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooks","bugs":{"url":"https://github.com/supunlakmal/hooks/issues"},"dist":{"shasum":"b461bd6cb856bfc521d7f4bae6fbc108712468f9","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-1.0.3.tgz","fileCount":539,"integrity":"sha512-T+QB9jEN8w/inKK9XVTsgshiIw0MaOcCaVuLesVRj4yci7lItHKlSIhxpmxLFeXl8yp7LDtykH5xabi4sh/NZQ==","signatures":[{"sig":"MEUCIQDCqLZwXFlt8tZ0QB0cwLUTbPFDKU/+XfJdUCcHYr084wIgCKGY+OXBZamej0kMwPQwTjIhmfgDgSXFXdlcalWudXI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":885274},"main":"dist/index.js","types":"dist/types/index.d.ts","funding":{"url":"https://github.com/sponsors/supunlakmal","type":"individual"},"gitHead":"e01c1dab98a002194475841b90bc1d7473e8a7f0","scripts":{"p":"npm publish --access public","build":"tsc","format":"prettier --write ."},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooks.git","type":"git"},"_npmVersion":"10.9.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"22.15.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","prettier":"^3.5.3","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_1.0.3_1747195248723_0.3369516801374477","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@supunlakmal/hooks","version":"1.0.4","keywords":["react","react hooks","custom hooks","react utilities","react state management","typescript","frontend","web development","javascript","es6","npm package","open source","ui components","user interface","performance optimization","accessibility","developer tools","software development","web apps","single page application","spa","reactjs","react development","component library","react toolkit","react component","react patterns","hooks library","hooks collection","functional programming","state hooks","effect hooks","react context","react router","react performance","react optimization","react form","form validation","responsive design","mobile friendly","cross platform","progressive web app","pwa","frontend development","modern javascript","babel","webpack","esnext","nodejs","npm","yarn","monorepo","code quality","linting","testing","jest","react testing library","continuous integration","ci cd","devops","typescript hooks","react typescript","react 18","concurrent mode","suspense","react suspense","hooks best practices","react best practices","react community","frontend tools","web performance","react animation","drag and drop","accessibility hooks","keyboard navigation","seo friendly","code reuse","modular code","clean code","react state","immutable state","react lifecycle","react hooks tutorial","react hooks examples","react hooks library","hooks","utility hooks","state management","performance","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api","useAnimation","useAsyncAbortable","useBreakpoint","useBroadcastChannel","useCachedFetch","useClipboard","useContextMenu","useCopyToClipboard","useControlledRerenderState","useCountdown","useCounter","useConditionalEffect","useDarkMode","useDebouncedState","useDebouncedFetch","useDebouncedGeolocation","useDebouncedMediaQuery","useDeepCompareEffect","useDebouncedCallback","useDebouncedEffect","useDerivedState","useDefault","useDocumentTitle","useDeviceMotion","useLocationBasedFetch","useDeviceOrientation","useEyeDropper","useFavicon","useGeolocationContinuous","useErrorBoundary","useMobile","useNewFullscreen","useElementSize","useFirstMountState","useFiniteStateMachine","useFormValidation","useFullscreen","useGeolocation","useHover","useFunctionalState","useHookableRef","useIsMounted","useIsomorphicLayoutEffect","useLifecycleLogger","useList","useLocalStorageValue","useLocalStorageQueue","useMediaStream","useMeasure","useMediatedState","useCustomCompareEffect","useCustomCompareMemo","usePreviousDifferent","usePersistentToggle","useInfiniteScroll","useIsFirstRender","useKeyCombo","useKeyPress","useLogger"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@1.0.4","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooks","bugs":{"url":"https://github.com/supunlakmal/hooks/issues"},"dist":{"shasum":"4434f9ef4a3752e0982a6eeb9ed681b58a4ae0af","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-1.0.4.tgz","fileCount":539,"integrity":"sha512-3QU6JmPbaNsLmeM7kZ7+rA5STc4QL9K4oPixJqqSFC3rioScfk4FWiVF2xyq9ThdMF7p0QasEtXzI4OnjW/dkQ==","signatures":[{"sig":"MEUCIDWc8fL+ujLu8wZQBfSuz8ucX4UGENMQgf0y+pSbJ1BgAiEAjypBQHwen0myVFq4myMHvMGKxWRej9Jj0S+ASdFtx5I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":885274},"main":"dist/index.js","types":"dist/types/index.d.ts","funding":{"url":"https://github.com/sponsors/supunlakmal","type":"individual"},"gitHead":"362f716039db639667a6a296cc81f9748b84043d","scripts":{"p":"npm publish --access public","build":"tsc","format":"prettier --write ."},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooks.git","type":"git"},"_npmVersion":"10.9.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"22.15.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","prettier":"^3.5.3","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_1.0.4_1747195949032_0.6453865261612783","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@supunlakmal/hooks","version":"1.0.5","keywords":["react","react hooks","custom hooks","react utilities","react state management","typescript","frontend","web development","javascript","es6","npm package","open source","ui components","user interface","performance optimization","accessibility","developer tools","software development","web apps","single page application","spa","reactjs","react development","component library","react toolkit","react component","react patterns","hooks library","hooks collection","functional programming","state hooks","effect hooks","react context","react router","react performance","react optimization","react form","form validation","responsive design","mobile friendly","cross platform","progressive web app","pwa","frontend development","modern javascript","babel","webpack","esnext","nodejs","npm","yarn","monorepo","code quality","linting","testing","jest","react testing library","continuous integration","ci cd","devops","typescript hooks","react typescript","react 18","concurrent mode","suspense","react suspense","hooks best practices","react best practices","react community","frontend tools","web performance","react animation","drag and drop","accessibility hooks","keyboard navigation","seo friendly","code reuse","modular code","clean code","react state","immutable state","react lifecycle","react hooks tutorial","react hooks examples","react hooks library","hooks","utility hooks","state management","performance","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api","useAnimation","useAsyncAbortable","useBreakpoint","useBroadcastChannel","useCachedFetch","useClipboard","useContextMenu","useCopyToClipboard","useControlledRerenderState","useCountdown","useCounter","useConditionalEffect","useDarkMode","useDebouncedState","useDebouncedFetch","useDebouncedGeolocation","useDebouncedMediaQuery","useDeepCompareEffect","useDebouncedCallback","useDebouncedEffect","useDerivedState","useDefault","useDocumentTitle","useDeviceMotion","useLocationBasedFetch","useDeviceOrientation","useEyeDropper","useFavicon","useGeolocationContinuous","useErrorBoundary","useMobile","useNewFullscreen","useElementSize","useFirstMountState","useFiniteStateMachine","useFormValidation","useFullscreen","useGeolocation","useHover","useFunctionalState","useHookableRef","useIsMounted","useIsomorphicLayoutEffect","useLifecycleLogger","useList","useLocalStorageValue","useLocalStorageQueue","useMediaStream","useMeasure","useMediatedState","useCustomCompareEffect","useCustomCompareMemo","usePreviousDifferent","usePersistentToggle","useInfiniteScroll","useIsFirstRender","useKeyCombo","useKeyPress","useLogger"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@1.0.5","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooks","bugs":{"url":"https://github.com/supunlakmal/hooks/issues"},"dist":{"shasum":"30b7e982f99bf67e5072d9bdecc1f2e31ca8e641","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-1.0.5.tgz","fileCount":539,"integrity":"sha512-eS5/wIi41w66jVyjdbOS+v/lfdDBamJWOPFvDEO/ybYSfqKgfQkoyM3O/wckAOVQRi2lLROuR1bQik1H/Icwpg==","signatures":[{"sig":"MEYCIQCZarQF0OjzN3dNR6mjlDFjjhwJHjTa8W+CyK51j08cEAIhAMpSra+MTiWJEWKRaK3LU8ZGClycgCEixDfvtwtu/G7o","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":885274},"main":"dist/index.js","types":"dist/types/index.d.ts","funding":{"url":"https://github.com/sponsors/supunlakmal","type":"individual"},"gitHead":"23fc57660983bebeb65e6d7474f790bb4e437782","scripts":{"p":"npm publish --access public","build":"tsc","format":"prettier --write ."},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooks.git","type":"git"},"_npmVersion":"10.9.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"22.15.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","prettier":"^3.5.3","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_1.0.5_1747196775942_0.24065909559894982","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@supunlakmal/hooks","version":"1.2.0","keywords":["react","react hooks","custom hooks","react utilities","react state management","typescript","frontend","web development","javascript","es6","npm package","open source","ui components","user interface","performance optimization","accessibility","developer tools","software development","web apps","single page application","spa","reactjs","react development","component library","react toolkit","react component","react patterns","hooks library","hooks collection","functional programming","state hooks","effect hooks","react context","react router","react performance","react optimization","react form","form validation","responsive design","mobile friendly","cross platform","progressive web app","pwa","frontend development","modern javascript","babel","webpack","esnext","nodejs","npm","yarn","monorepo","code quality","linting","testing","jest","react testing library","continuous integration","ci cd","devops","typescript hooks","react typescript","react 18","concurrent mode","suspense","react suspense","hooks best practices","react best practices","react community","frontend tools","web performance","react animation","drag and drop","accessibility hooks","keyboard navigation","seo friendly","code reuse","modular code","clean code","react state","immutable state","react lifecycle","react hooks tutorial","react hooks examples","react hooks library","hooks","utility hooks","state management","performance","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api","useAnimation","useAsyncAbortable","useBreakpoint","useBroadcastChannel","useCachedFetch","useClipboard","useContextMenu","useCopyToClipboard","useControlledRerenderState","useCountdown","useCounter","useConditionalEffect","useDarkMode","useDebouncedState","useDebouncedFetch","useDebouncedGeolocation","useDebouncedMediaQuery","useDeepCompareEffect","useDebouncedCallback","useDebouncedEffect","useDerivedState","useDefault","useDocumentTitle","useDeviceMotion","useLocationBasedFetch","useDeviceOrientation","useEyeDropper","useFavicon","useGeolocationContinuous","useErrorBoundary","useMobile","useNewFullscreen","useElementSize","useFirstMountState","useFiniteStateMachine","useFormValidation","useFullscreen","useGeolocation","useHover","useFunctionalState","useHookableRef","useIsMounted","useIsomorphicLayoutEffect","useLifecycleLogger","useList","useLocalStorageValue","useLocalStorageQueue","useMediaStream","useMeasure","useMediatedState","useCustomCompareEffect","useCustomCompareMemo","usePreviousDifferent","usePersistentToggle","useInfiniteScroll","useIsFirstRender","useKeyCombo","useKeyPress","useLogger"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@1.2.0","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooks","bugs":{"url":"https://github.com/supunlakmal/hooks/issues"},"dist":{"shasum":"8abfc9feca364bfab1e600f287785ebbb44033c7","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-1.2.0.tgz","fileCount":539,"integrity":"sha512-/ARHAzBXMtIXbaRvbs1ZwDqNYG4JFPgprPO5l+ZcERnhKWkXEiazZWZTDGSWj3NV0Swg8r5JptuXS0bIBklyzQ==","signatures":[{"sig":"MEUCIQC4zgPeCnBCVdOQlQWQHevX11Wf9vc9Vp17dqMMRzulRgIgAnvAtwy+2Me7iXgDYjj10IaxMrxArGdUhzvkweDL2yw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":891644},"main":"dist/index.js","types":"dist/types/index.d.ts","funding":{"url":"https://github.com/sponsors/supunlakmal","type":"individual"},"gitHead":"5cf98b2ffbf5a5415d12181f4e9b20620f22def0","scripts":{"p":"npm publish --access public","build":"tsc","format":"prettier --write ."},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooks.git","type":"git"},"_npmVersion":"10.9.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"22.15.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","prettier":"^3.5.3","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_1.2.0_1747200597288_0.7858296554005197","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@supunlakmal/hooks","version":"1.3.0","keywords":["react","react hooks","custom hooks","react utilities","react state management","typescript","frontend","web development","javascript","es6","npm package","open source","ui components","user interface","performance optimization","accessibility","developer tools","software development","web apps","single page application","spa","reactjs","react development","component library","react toolkit","react component","react patterns","hooks library","hooks collection","functional programming","state hooks","effect hooks","react context","react router","react performance","react optimization","react form","form validation","responsive design","mobile friendly","cross platform","progressive web app","pwa","frontend development","modern javascript","babel","webpack","esnext","nodejs","npm","yarn","monorepo","code quality","linting","testing","jest","react testing library","continuous integration","ci cd","devops","typescript hooks","react typescript","react 18","concurrent mode","suspense","react suspense","hooks best practices","react best practices","react community","frontend tools","web performance","react animation","drag and drop","accessibility hooks","keyboard navigation","seo friendly","code reuse","modular code","clean code","react state","immutable state","react lifecycle","react hooks tutorial","react hooks examples","react hooks library","hooks","utility hooks","state management","performance","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api","useAnimation","useAsyncAbortable","useBreakpoint","useBroadcastChannel","useCachedFetch","useClipboard","useContextMenu","useCopyToClipboard","useControlledRerenderState","useCountdown","useCounter","useConditionalEffect","useDarkMode","useDebouncedState","useDebouncedFetch","useDebouncedGeolocation","useDebouncedMediaQuery","useDeepCompareEffect","useDebouncedCallback","useDebouncedEffect","useDerivedState","useDefault","useDocumentTitle","useDeviceMotion","useLocationBasedFetch","useDeviceOrientation","useEyeDropper","useFavicon","useGeolocationContinuous","useErrorBoundary","useMobile","useNewFullscreen","useElementSize","useFirstMountState","useFiniteStateMachine","useFormValidation","useFullscreen","useGeolocation","useHover","useFunctionalState","useHookableRef","useIsMounted","useIsomorphicLayoutEffect","useLifecycleLogger","useList","useLocalStorageValue","useLocalStorageQueue","useMediaStream","useMeasure","useMediatedState","useCustomCompareEffect","useCustomCompareMemo","usePreviousDifferent","usePersistentToggle","useInfiniteScroll","useIsFirstRender","useKeyCombo","useKeyPress","useLogger"],"author":{"name":"supunlakmal"},"license":"ISC","_id":"@supunlakmal/hooks@1.3.0","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"homepage":"https://github.com/supunlakmal/hooks","bugs":{"url":"https://github.com/supunlakmal/hooks/issues"},"dist":{"shasum":"a883c3b6e21eb9a588a7a965f00bd1e57773f8bf","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-1.3.0.tgz","fileCount":539,"integrity":"sha512-ReuKxMIHiMo737Z6HWG/vBXXxVtQz2DPKSkuE4+SmAY7kA3TztieECpCcU7HIFAt36ZfABeHebKnAKyGhrHyOg==","signatures":[{"sig":"MEUCICFn3LFdhX5oX3AXTyFgLTPeIm3BCeqrwRq3DkSW5kRxAiEA8E350OxRS4L8AgPHHkTZ3SOhFDt8yAgR42hqDOG2RCg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":891638},"main":"dist/index.js","types":"dist/types/index.d.ts","funding":{"url":"https://github.com/sponsors/supunlakmal","type":"individual"},"gitHead":"280f16e59c684e5855aa35bc9cd3149e7fe27013","scripts":{"p":"npm publish --access public","build":"tsc","format":"prettier --write ."},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"repository":{"url":"git+https://github.com/supunlakmal/hooks.git","type":"git"},"_npmVersion":"10.9.2","description":"A collection of reusable React hooks","directories":{"doc":"docs"},"_nodeVersion":"22.15.0","_hasShrinkwrap":false,"devDependencies":{"next":"^15.3.0","react":"^19.1.0","prettier":"^3.5.3","react-dom":"^19.1.0","typescript":"^5.0.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_1.3.0_1747984303391_0.44172415932300724","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@supunlakmal/hooks","version":"1.3.1","description":"A collection of reusable React hooks","main":"dist/index.js","types":"dist/types/index.d.ts","scripts":{"build":"tsc","format":"prettier --write .","p":"npm publish --access public"},"funding":{"type":"individual","url":"https://github.com/sponsors/supunlakmal"},"homepage":"https://github.com/supunlakmal/hooks","repository":{"type":"git","url":"git+https://github.com/supunlakmal/hooks.git"},"keywords":["react","react hooks","custom hooks","react utilities","react state management","typescript","frontend","web development","javascript","es6","npm package","open source","ui components","user interface","performance optimization","accessibility","developer tools","software development","web apps","single page application","spa","reactjs","react development","component library","react toolkit","react component","react patterns","hooks library","hooks collection","functional programming","state hooks","effect hooks","react context","react router","react performance","react optimization","react form","form validation","responsive design","mobile friendly","cross platform","progressive web app","pwa","frontend development","modern javascript","babel","webpack","esnext","nodejs","npm","yarn","monorepo","code quality","linting","testing","jest","react testing library","continuous integration","ci cd","devops","typescript hooks","react typescript","react 18","concurrent mode","suspense","react suspense","hooks best practices","react best practices","react community","frontend tools","web performance","react animation","drag and drop","accessibility hooks","keyboard navigation","seo friendly","code reuse","modular code","clean code","react state","immutable state","react lifecycle","react hooks tutorial","react hooks examples","react hooks library","hooks","utility hooks","state management","performance","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api","useAnimation","useAsyncAbortable","useBreakpoint","useBroadcastChannel","useCachedFetch","useClipboard","useContextMenu","useCopyToClipboard","useControlledRerenderState","useCountdown","useCounter","useConditionalEffect","useDarkMode","useDebouncedState","useDebouncedFetch","useDebouncedGeolocation","useDebouncedMediaQuery","useDeepCompareEffect","useDebouncedCallback","useDebouncedEffect","useDerivedState","useDefault","useDocumentTitle","useDeviceMotion","useLocationBasedFetch","useDeviceOrientation","useEyeDropper","useFavicon","useGeolocationContinuous","useErrorBoundary","useMobile","useNewFullscreen","useElementSize","useFirstMountState","useFiniteStateMachine","useFormValidation","useFullscreen","useGeolocation","useHover","useFunctionalState","useHookableRef","useIsMounted","useIsomorphicLayoutEffect","useLifecycleLogger","useList","useLocalStorageValue","useLocalStorageQueue","useMediaStream","useMeasure","useMediatedState","useCustomCompareEffect","useCustomCompareMemo","usePreviousDifferent","usePersistentToggle","useInfiniteScroll","useIsFirstRender","useKeyCombo","useKeyPress","useLogger"],"author":{"name":"supunlakmal"},"license":"ISC","bugs":{"url":"https://github.com/supunlakmal/hooks/issues"},"devDependencies":{"@testing-library/react":"^16.3.0","@types/node":"^22.14.1","@types/react":"^19.1.1","@types/react-dom":"^19.1.2","next":"^15.3.0","prettier":"^3.5.3","react":"^19.1.0","react-dom":"^19.1.0","typescript":"^5.0.0"},"peerDependencies":{"react":"^19.1.0","react-dom":"^19.1.0"},"directories":{"doc":"docs"},"_id":"@supunlakmal/hooks@1.3.1","gitHead":"280f16e59c684e5855aa35bc9cd3149e7fe27013","_nodeVersion":"20.18.0","_npmVersion":"11.4.2","dist":{"integrity":"sha512-eOWM/lrQ96ZnbmpX5nfjGIkSSXc8Dy2UvSRocwWxQf+2vGfdq/mFa3vgnhrX9jSN0Y54QH4dywWKh7vskviuMw==","shasum":"61ae1f6d1d1c40f815bde535e576146112978020","tarball":"https://registry.npmjs.org/@supunlakmal/hooks/-/hooks-1.3.1.tgz","fileCount":539,"unpackedSize":891403,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBKw/y9l3BTnwTW8UuTHC7TmMZz57nD11J9oVQUpiMf5AiB4iDdyB7ZUH1IxqthutEz2GtFiVAlb6zrGthSxScgg6A=="}]},"_npmUser":{"name":"supunlakmal","email":"supunlakmal61@gmail.com"},"maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/hooks_1.3.1_1762583664407_0.6967590709506291"},"_hasShrinkwrap":false}},"time":{"created":"2025-04-17T05:37:07.781Z","modified":"2025-11-08T06:34:24.917Z","0.1.6":"2025-04-17T05:37:08.023Z","0.1.7":"2025-04-17T05:47:41.747Z","0.1.8":"2025-04-17T05:52:28.141Z","0.1.9":"2025-04-17T05:54:54.232Z","0.1.10":"2025-04-17T06:48:44.217Z","0.1.11":"2025-04-17T06:55:03.406Z","0.1.12":"2025-04-17T07:24:23.981Z","0.1.13":"2025-04-17T10:33:43.195Z","0.1.14":"2025-04-18T06:53:23.366Z","0.2.0":"2025-04-24T12:13:44.011Z","0.2.1":"2025-04-24T12:16:33.212Z","0.3.0":"2025-04-25T20:37:52.096Z","0.4.0":"2025-04-29T05:00:56.291Z","0.5.0":"2025-04-30T05:41:18.155Z","0.6.0":"2025-04-30T12:59:48.361Z","0.7.0":"2025-05-02T09:41:36.752Z","0.8.0":"2025-05-04T09:04:53.525Z","0.9.0":"2025-05-05T05:57:17.051Z","0.10.0":"2025-05-05T07:00:18.458Z","0.10.1":"2025-05-05T07:25:20.911Z","0.11.0":"2025-05-05T16:36:14.695Z","0.12.0":"2025-05-08T10:29:35.115Z","1.0.0":"2025-05-09T09:15:23.147Z","1.0.3":"2025-05-14T04:00:48.965Z","1.0.4":"2025-05-14T04:12:29.295Z","1.0.5":"2025-05-14T04:26:16.202Z","1.2.0":"2025-05-14T05:29:57.550Z","1.3.0":"2025-05-23T07:11:43.673Z","1.3.1":"2025-11-08T06:34:24.660Z"},"bugs":{"url":"https://github.com/supunlakmal/hooks/issues"},"author":{"name":"supunlakmal"},"license":"ISC","homepage":"https://github.com/supunlakmal/hooks","keywords":["react","react hooks","custom hooks","react utilities","react state management","typescript","frontend","web development","javascript","es6","npm package","open source","ui components","user interface","performance optimization","accessibility","developer tools","software development","web apps","single page application","spa","reactjs","react development","component library","react toolkit","react component","react patterns","hooks library","hooks collection","functional programming","state hooks","effect hooks","react context","react router","react performance","react optimization","react form","form validation","responsive design","mobile friendly","cross platform","progressive web app","pwa","frontend development","modern javascript","babel","webpack","esnext","nodejs","npm","yarn","monorepo","code quality","linting","testing","jest","react testing library","continuous integration","ci cd","devops","typescript hooks","react typescript","react 18","concurrent mode","suspense","react suspense","hooks best practices","react best practices","react community","frontend tools","web performance","react animation","drag and drop","accessibility hooks","keyboard navigation","seo friendly","code reuse","modular code","clean code","react state","immutable state","react lifecycle","react hooks tutorial","react hooks examples","react hooks library","hooks","utility hooks","state management","performance","useToggle","useDebounce","useFetch","useAsync","useLocalStorage","useSessionStorage","useClickOutside","useEventListener","useWindowSize","useForm","useValidation","useInterval","useTimeout","usePrevious","useIntersectionObserver","useVirtualList","usePagination","useDarkMode","useClipboard","useWebSocket","useScroll","useAnimation","useDrag","useDraggable","useFocusTrap","useMediaQuery","browser api","useAnimation","useAsyncAbortable","useBreakpoint","useBroadcastChannel","useCachedFetch","useClipboard","useContextMenu","useCopyToClipboard","useControlledRerenderState","useCountdown","useCounter","useConditionalEffect","useDarkMode","useDebouncedState","useDebouncedFetch","useDebouncedGeolocation","useDebouncedMediaQuery","useDeepCompareEffect","useDebouncedCallback","useDebouncedEffect","useDerivedState","useDefault","useDocumentTitle","useDeviceMotion","useLocationBasedFetch","useDeviceOrientation","useEyeDropper","useFavicon","useGeolocationContinuous","useErrorBoundary","useMobile","useNewFullscreen","useElementSize","useFirstMountState","useFiniteStateMachine","useFormValidation","useFullscreen","useGeolocation","useHover","useFunctionalState","useHookableRef","useIsMounted","useIsomorphicLayoutEffect","useLifecycleLogger","useList","useLocalStorageValue","useLocalStorageQueue","useMediaStream","useMeasure","useMediatedState","useCustomCompareEffect","useCustomCompareMemo","usePreviousDifferent","usePersistentToggle","useInfiniteScroll","useIsFirstRender","useKeyCombo","useKeyPress","useLogger"],"repository":{"type":"git","url":"git+https://github.com/supunlakmal/hooks.git"},"description":"A collection of reusable React hooks","maintainers":[{"name":"supunlakmal","email":"supunlakmal61@gmail.com"}],"readme":"# @supunlakmal/hooks\n\n[![NPM Version](https://img.shields.io/npm/v/@supunlakmal/hooks.svg)](https://www.npmjs.com/package/@supunlakmal/hooks)\n[![License: ISC](https://img.shields.io/npm/l/@supunlakmal/hooks.svg)](https://opensource.org/licenses/ISC)\n[![TypeScript](https://img.shields.io/badge/%3C%2F%3E-TypeScript-%230074c1.svg)](http://www.typescriptlang.org/)\n![npm](https://img.shields.io/npm/dt/@supunlakmal/hooks?label=Total%20Downloads&color=brightgreen)\n[![GitHub last commit](https://img.shields.io/github/last-commit/supunlakmal/hooks)](https://github.com/supunlakmal/hooks/commits/main)\n[![bundle size](https://img.shields.io/bundlephobia/minzip/@supunlakmal/hooks)](https://bundlephobia.com/package/@supunlakmal/hooks)\n[![Install Size](https://packagephobia.com/badge?p=@supunlakmal/hooks)](https://packagephobia.com/result?p=@supunlakmal/hooks)\n\n<!-- Add other badges as applicable: Downloads, Build Status, Coverage -->\n\n**A comprehensive collection of production-ready, reusable React hooks written in TypeScript to simplify common UI patterns and browser API interactions.**\n\nStop reinventing the wheel! `@supunlakmal/hooks` provides a wide arrays, easy-to-use hooks covering everything from state management enhancements and side effects to browser APIs and performance optimizations.\n\n**Why choose `@supunlakmal/hooks`?**\n\n- **🚀 Extensive Collection:** Over 60+ hooks covering a vast range of common React development needs.\n- **🛡️ Type-Safe:** Written entirely in TypeScript for robust development.\n- **✨ Simple API:** Designed for ease of use and minimal boilerplate.\n- **🌍 SSR Compatible:** Hooks are designed to work safely in server-side rendering environments.\n- **🧹 Automatic Cleanup:** Handles listeners, timers, and observers correctly.\n- **⚡ Performance Focused:** Includes hooks like `useDebounce`, `useThrottle`, and `useVirtualList` for optimization.\n- **🧩 Minimal Dependencies:** Core hooks have zero runtime dependencies (unless specified in individual hook docs).\n\n## Installation\n\n```bash\nnpm install @supunlakmal/hooks\n# or\nyarn add @supunlakmal/hooks\n```\n\n## Quick Start Example\n\n```jsx\nimport React, { useState } from 'react';\nimport { useToggle, useDebounce, useWindowSize } from '@supunlakmal/hooks';\n\nfunction ExampleComponent() {\n  // Effortlessly manage boolean state\n  const [isOpen, toggle] = useToggle(false);\n\n  // Debounce rapid input changes\n  const [inputValue, setInputValue] = useState('');\n  const debouncedSearchTerm = useDebounce(inputValue, 500);\n\n  // Get window dimensions easily\n  const { width, height } = useWindowSize();\n\n  // Use debounced value for API calls, etc.\n  React.useEffect(() => {\n    if (debouncedSearchTerm) {\n      console.log(`Searching for: ${debouncedSearchTerm}`);\n      // Fetch API call here...\n    }\n  }, [debouncedSearchTerm]);\n\n  return (\n    <div>\n      {/* useToggle Example */}\n      <button onClick={toggle}>{isOpen ? 'Close' : 'Open'}</button>\n      {isOpen && <p>Content is visible!</p>}\n\n      <hr />\n\n      {/* useDebounce Example */}\n      <input\n        type=\"text\"\n        placeholder=\"Search...\"\n        value={inputValue}\n        onChange={(e) => setInputValue(e.target.value)}\n      />\n      <p>Typing: {inputValue}</p>\n      <p>Debounced: {debouncedSearchTerm}</p>\n\n      <hr />\n\n      {/* useWindowSize Example */}\n      <p>\n        Window Size: {width}px x {height}px\n      </p>\n    </div>\n  );\n}\n```\n\n## Available Hooks\n\nHooks are organized into thematic categories so you can quickly jump to the patterns you need. Every entry links to its detailed guide in `docs/`.\n\n### 1. State Management\n\nEnhanced `useState`-style primitives for toggles, lists, finite state machines, and other complex data structures.\n\n| Hook | Description |\n| :--- | :--- |\n| [`useBoolean`](./docs/useBoolean.md) | Manages a boolean state with explicit `setTrue`, `setFalse`, and `toggle` functions. |\n| [`useConst`](./docs/useConst.md) | Initializes and returns a constant value that persists across renders. |\n| [`useControlledRerenderState`](./docs/useControlledRerenderState.md) | A `useState` alternative where the state setter can cancel a re-render. |\n| [`useCounter`](./docs/useCounter.md) | Manages a number state with `increment`, `decrement`, `set`, and `reset` actions. |\n| [`useCycle`](./docs/useCycle.md) | Cycles through a predefined list of values. |\n| [`useDefault`](./docs/useDefault.md) | Returns a default value if the provided value is `null` or `undefined`. |\n| [`useDerivedState`](./docs/useDerivedState.md) | A semantic wrapper around `useMemo` for creating state based on other values. |\n| [`useEnum`](./docs/useEnum.md) | Manages state that is constrained to the values of a given enum object. |\n| [`useFiniteStateMachine`](./docs/useFiniteStateMachine.md) | Manages complex state using an explicit finite state machine definition. |\n| [`useFirstMountState`](./docs/useFirstMountState.md) | Returns `true` only on the first render of a component. |\n| [`useFunctionalState`](./docs/useFunctionalState.md) | A `useState` variant that returns a getter function for the state. |\n| [`useHistoryState`](./docs/useHistoryState.md) | Manages state with a history, allowing for undo and redo operations. |\n| [`useIsFirstRender`](./docs/useIsFirstRender.md) | Returns `true` only on the initial render of a component. |\n| [`useIsMounted`](./docs/useIsMounted.md) | Returns a function that indicates if the component is currently mounted. |\n| [`useList`](./docs/useList.md) | Manages an array state with a comprehensive set of list manipulation actions. |\n| [`useListState`](./docs/useListState.md) | Manages an array state with basic list manipulation functions. |\n| [`useMap`](./docs/useMap.md) | Manages a `Map` object as state with actions to manipulate it. |\n| [`useMapState`](./docs/useMapState.md) | Manages a key-value object as state with `set`, `remove`, and `reset` functions. |\n| [`useMediatedState`](./docs/useMediatedState.md) | A `useState` variant where every value set is passed through a mediator function. |\n| [`usePrevious`](./docs/usePrevious.md) | Returns the value of a prop or state from the previous render. |\n| [`usePreviousDifferent`](./docs/usePreviousDifferent.md) | Returns the last value that was different from the current value. |\n| [`useQueue`](./docs/useQueue.md) | Manages a queue (First-In, First-Out) with methods to `add`, `remove`, and `peek`. |\n| [`useResetState`](./docs/useResetState.md) | A `useState` variant that includes a function to reset the state to its initial value. |\n| [`useSet`](./docs/useSet.md) | Manages a `Set` object as state with actions to manipulate it. |\n| [`useSetState`](./docs/useSetState.md) | Manages an object state, merging updates similarly to `this.setState` in class components. |\n| [`useStateWithHistory`](./docs/useStateWithHistory.md) | Manages state with a history of changes, allowing for undo and redo operations. |\n| [`useStepper`](./docs/useStepper.md) | Manages state for multi-step forms or wizards. |\n| [`useToggle`](./docs/useToggle.md) | Manages a boolean state with a toggle function. |\n\n### 2. Side Effects & Lifecycle\n\nHooks that orchestrate effects, logging, and lifecycle nuances beyond vanilla `useEffect`.\n\n| Hook | Description |\n| :--- | :--- |\n| [`useConditionalEffect`](./docs/useConditionalEffect.md) | A `useEffect` that only runs its callback if a set of conditions are met. |\n| [`useCustomCompareEffect`](./docs/useCustomCompareEffect.md) | A `useEffect` that uses a custom comparator function for its dependency array. |\n| [`useDeepCompareEffect`](./docs/useDeepCompareEffect.md) | A `useEffect` that performs a deep comparison of its dependencies. |\n| [`useDebouncedEffect`](./docs/useDebouncedEffect.md) | A `useEffect` whose callback function is debounced. |\n| [`useIsomorphicLayoutEffect`](./docs/useIsomorphicLayoutEffect.md) | A hook that uses `useLayoutEffect` in the browser and `useEffect` on the server. |\n| [`useLifecycleLogger`](./docs/useLifecycleLogger.md) | Logs component lifecycle events (mount, update, unmount) to the console. |\n| [`useLogger`](./docs/useLogger.md) | Logs component lifecycle events and prop changes. |\n| [`useMount`](./docs/useMount.md) | Runs a callback function once when the component mounts. |\n| `useThrottledEffect` | A `useEffect` whose callback function is throttled. |\n| [`useUnmount`](./docs/useUnmount.md) | Runs a callback function when the component unmounts. |\n| [`useUnmountEffect`](./docs/useUnmountEffect.md) | Runs an effect only when the component is unmounted. |\n| [`useUpdateEffect`](./docs/useUpdateEffect.md) | A `useEffect` that skips the initial render and only runs on updates. |\n| [`useWhyDidYouUpdate`](./docs/useWhyDidYouUpdate.md) | A debugging tool that logs which props changed on a component re-render. |\n| [`useErrorBoundary`](./docs/useErrorBoundary.md) | Imperative helpers for programmatically triggering and resetting React error boundaries. |\n| [`useReducerLogger`](./docs/useReducerLogger.md) | Wraps `useReducer` to log every action and resulting state, aiding debugging. |\n\n### 3. Data Fetching\n\nHelpers for REST-style data loading, request cancellation, debouncing, and network-aware flows.\n\n| Hook | Description |\n| :--- | :--- |\n| [`useAsync`](./docs/useAsync.md) | Manages the state of an asynchronous function call. |\n| [`useAsyncAbortable`](./docs/useAsyncAbortable.md) | An `useAsync` variant that provides an `AbortSignal` to the async function. |\n| [`useCachedFetch`](./docs/useCachedFetch.md) | A `useFetch` variant with in-memory caching to avoid redundant requests. |\n| [`useDebouncedFetch`](./docs/useDebouncedFetch.md) | A `useFetch` variant that debounces the request trigger. |\n| [`useDelete`](./docs/useDelete.md) | A specialized `useFetch` for making DELETE requests. |\n| [`useFetch`](./docs/useFetch.md) | A general-purpose hook for fetching data from an API. |\n| [`useGet`](./docs/useGet.md) | A specialized `useFetch` for making GET requests. |\n| [`useIdleFetch`](./docs/useIdleFetch.md) | Triggers a data fetch when the user becomes active after a period of inactivity. |\n| [`useLocationBasedFetch`](./docs/useLocationBasedFetch.md) | Fetches data from an API based on the user's current geolocation. |\n| [`useMutation`](./docs/useMutation.md) | Manages asynchronous operations that modify data (e.g., POST, PUT, DELETE). |\n| [`useNetworkAwareFetch`](./docs/useNetworkAwareFetch.md) | A `useFetch` variant that only runs when the user is online. |\n| [`usePatch`](./docs/usePatch.md) | A specialized `useFetch` for making PATCH requests. |\n| [`usePost`](./docs/usePost.md) | A specialized `useFetch` for making POST requests. |\n| [`usePromise`](./docs/usePromise.md) | Manages the state of a promise-based function. |\n| [`usePut`](./docs/usePut.md) | A specialized `useFetch` for making PUT requests. |\n\n### 4. Browser & Web APIs\n\nWrappers around platform APIs such as Clipboard, Storage, Battery, Permissions, and Web Workers.\n\n| Hook | Description |\n| :--- | :--- |\n| [`useBatteryStatus`](./docs/useBatteryStatus.md) | Tracks the device's battery status using the Battery Status API. |\n| [`useBroadcastChannel`](./docs/useBroadcastChannel.md) | Enables cross-tab/window communication using the Broadcast Channel API. |\n| [`useClipboard`](./docs/useClipboard.md) | Interacts with the system clipboard for copying and pasting. |\n| [`useClipboardWithFeedback`](./docs/useClipboardWithFeedback.md) | An extension of `useClipboard` that provides feedback when text is copied. |\n| [`useCookie`](./docs/useCookie.md) | Manages a specific browser cookie. |\n| [`useCopyToClipboard`](./docs/useCopyToClipboard.md) | A hook specifically for copying text to the clipboard. |\n| [`useDeviceMotion`](./docs/useDeviceMotion.md) | Tracks device motion information like acceleration and rotation rate. |\n| [`useDeviceOrientation`](./docs/useDeviceOrientation.md) | Tracks the physical orientation of the device. |\n| [`useDocumentTitle`](./docs/useDocumentTitle.md) | Sets the `document.title` of the page. |\n| [`useEventSource`](./docs/useEventSource.md) | Connects to a Server-Sent Events (SSE) endpoint. |\n| [`useEyeDropper`](./docs/useEyeDropper.md) | Uses the experimental EyeDropper API to sample colors from the screen. |\n| [`useFavicon`](./docs/useFavicon.md) | Dynamically sets the website's favicon. |\n| [`useFullscreen`](./docs/useFullscreen.md) | Manages the fullscreen state for a specific element. |\n| [`useGeolocation`](./docs/useGeolocation.md) | Tracks the user's geolocation. |\n| [`useGeolocationContinuous`](./docs/useGeolocationContinuous.md) | Provides a continuous stream of geolocation data. |\n| [`useIdleCallback`](./docs/useIdleCallback.md) | Schedules a function to be executed during browser idle periods. |\n| [`useIdleDetection`](./docs/useIdleDetection.md) | Detects user idle state and screen lock status using the Idle Detection API. |\n| [`useLocalStorage`](./docs/useLocalStorage.md) | Manages state with `localStorage`, automatically syncing between state and storage. |\n| [`useLocalStorageQueue`](./docs/useLocalStorageQueue.md) | Manages a queue that is persisted in `localStorage`. |\n| [`useLocalStorageValue`](./docs/useLocalStorageValue.md) | Manages a single `localStorage` key. |\n| [`useMediaStream`](./docs/useMediaStream.md) | Manages access to the user's media devices (camera, microphone). |\n| [`useNetworkAwareWebSocket`](./docs/useNetworkAwareWebSocket.md) | Manages a WebSocket connection that is only active when the user is online. |\n| [`useNetworkSpeed`](./docs/useNetworkSpeed.md) | Gets information about the user's network connection speed and type. |\n| [`useNetworkState`](./docs/useNetworkState.md) | Tracks the state of the browser's network connection. |\n| [`useNotification`](./docs/useNotification.md) | Manages web notifications. |\n| [`useOnlineStatus`](./docs/useOnlineStatus.md) | Tracks the browser's online status. |\n| [`useOrientation`](./docs/useOrientation.md) | Tracks the device's screen orientation. |\n| [`usePageVisibility`](./docs/usePageVisibility.md) | Tracks the visibility state of the browser page/tab. |\n| [`usePermission`](./docs/usePermission.md) | Queries the status of a browser permission using the Permissions API. |\n| [`usePersistentCounter`](./docs/usePersistentCounter.md) | A counter that persists its state in `localStorage`. |\n| [`usePersistentToggle`](./docs/usePersistentToggle.md) | A boolean state that persists in `localStorage`. |\n| [`usePreferredLanguages`](./docs/usePreferredLanguages.md) | Retrieves the user's preferred languages from the browser. |\n| [`usePrefersReducedMotion`](./docs/usePrefersReducedMotion.md) | Detects if the user prefers reduced motion. |\n| [`useQueryParam`](./docs/useQueryParam.md) | Synchronizes a state variable with a URL query parameter. |\n| [`useScreenOrientation`](./docs/useScreenOrientation.md) | Tracks the screen orientation state. |\n| [`useScript`](./docs/useScript.md) | Dynamically loads an external script and tracks its loading state. |\n| [`useSessionStorage`](./docs/useSessionStorage.md) | Manages state with `sessionStorage`, automatically syncing between state and storage. |\n| [`useSpeechSynthesis`](./docs/useSpeechSynthesis.md) | Utilizes the browser's Speech Synthesis API (Text-to-Speech). |\n| [`useStorageValue`](./docs/useStorageValue.md) | A generic hook for managing a single key in a `Storage` object. |\n| [`useSyncedLocalStorage`](./docs/useSyncedLocalStorage.md) | A `useLocalStorage` variant that syncs its state across multiple tabs/windows. |\n| [`useVibration`](./docs/useVibration.md) | Interacts with the browser's Vibration API. |\n| [`useWakeLock`](./docs/useWakeLock.md) | Manages a screen wake lock to prevent the device from sleeping. |\n| [`useWebSocket`](./docs/useWebSocket.md) | Manages WebSocket connections. |\n| [`useWebWorker`](./docs/useWebWorker.md) | Runs a function in a web worker to avoid blocking the main thread. |\n| [`useWorker`](./docs/useWorker.md) | Another hook for running functions in a web worker. |\n| [`useDarkMode`](./docs/useDarkMode.md) | Synchronizes the UI theme with system preferences and persists overrides in `localStorage`. |\n| [`useDebouncedGeolocation`](./docs/useDebouncedGeolocation.md) | Throttles high-frequency geolocation updates so downstream effects run at a manageable cadence. |\n\n### 5. User Interface & DOM\n\nDOM-centric hooks for layout measurements, interactions, viewport tracking, and accessibility patterns.\n\n| Hook | Description |\n| :--- | :--- |\n| [`useBreakpoint`](./docs/useBreakpoint.md) | Determines the currently active responsive breakpoint. |\n| [`useClickOutside`](./docs/useClickOutside.md) | Detects clicks outside of a specified element. |\n| [`useClickOutsideWithEscape`](./docs/useClickOutsideWithEscape.md) | Triggers a callback on a click outside an element or on pressing the 'Escape' key. |\n| [`useContextMenu`](./docs/useContextMenu.md) | Manages the state for a custom context menu. |\n| [`useDebouncedMediaQuery`](./docs/useDebouncedMediaQuery.md) | A `useMediaQuery` variant that debounces the result. |\n| [`useDebouncedWindowSize`](./docs/useDebouncedWindowSize.md) | A `useWindowSize` variant that provides debounced dimensions. |\n| [`useDrag`](./docs/useDrag.md) | Provides basic drag-and-drop event handling for an element. |\n| [`useDraggable`](./docs/useDraggable.md) | Makes a DOM element draggable. |\n| [`useElementSize`](./docs/useElementSize.md) | Observes an element's size and provides its width and height. |\n| [`useFocusTrap`](./docs/useFocusTrap.md) | Traps focus within a specified container element. |\n| [`useFocusWithinState`](./docs/useFocusWithinState.md) | Tracks whether an element or any of its descendants has focus. |\n| [`useHasBeenVisible`](./docs/useHasBeenVisible.md) | Tracks if an element has ever become visible in the viewport. |\n| [`useHover`](./docs/useHover.md) | Detects whether a DOM element is being hovered over. |\n| [`useHoverDelay`](./docs/useHoverDelay.md) | Tracks if an element has been hovered for a minimum specified duration. |\n| [`useImageOnLoad`](./docs/useImageOnLoad.md) | Tracks the loading status and dimensions of an image. |\n| [`useInfiniteScroll`](./docs/useInfiniteScroll.md) | Implements infinite scrolling. |\n| [`useIntersectionObserver`](./docs/useIntersectionObserver.md) | Tracks the visibility of an element within the viewport. |\n| [`useMeasure`](./docs/useMeasure.md) | Tracks element dimensions using `ResizeObserver`. |\n| [`useMediaQuery`](./docs/useMediaQuery.md) | Tracks the state of a CSS media query. |\n| [`useMergeRefs`](./docs/useMergeRefs.md) | Merges multiple refs into a single callback ref. |\n| [`useMobile`](./docs/use-mobile.md) | Returns whether the current viewport is mobile-sized. |\n| [`useMousePosition`](./docs/useMousePosition.md) | Tracks the current position of the mouse pointer. |\n| [`usePageLeave`](./docs/usePageLeave.md) | Triggers a callback when the user's mouse cursor leaves the viewport. |\n| [`usePagination`](./docs/usePagination.md) | Manages pagination state and controls. |\n| [`usePinchZoom`](./docs/usePinchZoom.md) | Detects pinch-to-zoom gestures on a target element. |\n| [`usePortal`](./docs/usePortal.md) | Manages a React Portal. |\n| [`useResizeObserver`](./docs/useResizeObserver.md) | Monitors changes to an element's size using `ResizeObserver`. |\n| [`useRovingTabIndex`](./docs/useRovingTabIndex.md) | Implements the roving tabindex accessibility pattern. |\n| [`useScrollLock`](./docs/useScrollLock.md) | Locks and unlocks body scroll. |\n| [`useScrollPosition`](./docs/useScrollPosition.md) | Tracks the scroll position of the window or a specific element. |\n| [`useScrollSpy`](./docs/useScrollSpy.md) | Monitors scroll position to determine which element is currently active. |\n| [`useScrollToTop`](./docs/useScrollToTop.md) | Provides a function to scroll the window to the top. |\n| [`useSwipe`](./docs/useSwipe.md) | Detects swipe gestures on a target element. |\n| [`useTextSelection`](./docs/useTextSelection.md) | Tracks the user's text selection within the document. |\n| [`useVirtualList`](./docs/useVirtualList.md) | Optimizes the rendering of long lists by only rendering visible items. |\n| [`useVisibility`](./docs/useVisibility.md) | Tracks whether an element is visible in the viewport. |\n| [`useWindowSize`](./docs/useWindowSize.md) | Tracks the browser window's dimensions. |\n| [`useHookableRef`](./docs/useHookableRef.md) | Combines refs with callbacks so consumers can observe element mount/unmount events. |\n| [`useIsomorphicId`](./docs/useIsomorphicId.md) | Creates a stable ID that works consistently in SSR and CSR environments. |\n\n### 6. Event Handling\n\nUtilities that simplify attaching listeners, key combos, long presses, and history changes.\n\n| Hook | Description |\n| :--- | :--- |\n| [`useEventListener`](./docs/useEventListener.md) | Attaches an event listener to a target element. |\n| [`useEventCallback`](./docs/useEventCallback.md) | Creates a stable callback function that always calls the latest version of the provided callback. |\n| [`useKeyCombo`](./docs/useKeyCombo.md) | Detects specific keyboard combinations (shortcuts). |\n| [`useKeyPress`](./docs/useKeyPress.md) | Detects when a specific key is pressed down. |\n| [`useLongPress`](./docs/useLongPress.md) | Detects long press events on an element. |\n| [`useRouteChange`](./docs/useRouteChange.md) | Executes a callback when the browser's route changes. |\n| [`useThrottledEventListener`](./docs/useThrottledEventListener.md) | Attaches an event listener with a throttled callback. |\n\n### 7. Performance & Optimization\n\nDebounce/throttle utilities, RAF helpers, and render diagnostics that keep components snappy.\n\n| Hook | Description |\n| :--- | :--- |\n| [`useDebounce`](./docs/useDebounce.md) | Debounces a value, delaying its update until a specified time has passed without change. |\n| [`useDebouncedCallback`](./docs/useDebouncedCallback.md) | Creates a debounced version of a callback function. |\n| [`useDebouncedState`](./docs/useDebouncedState.md) | A `useState` variant where the state updates are debounced. |\n| [`useForceUpdate`](./docs/useForceUpdate.md) | Provides a function to manually force a component to re-render. |\n| [`useRafCallback`](./docs/useRafCallback.md) | Schedules a callback to be executed on the next animation frame. |\n| [`useRafState`](./docs/useRafState.md) | A `useState` variant that updates state on the next animation frame. |\n| [`useRenderCount`](./docs/useRenderCount.md) | Tracks the number of times a component has rendered. |\n| [`useRerender`](./docs/useRerender.md) | Provides a function to manually trigger a re-render. |\n| [`useThrottle`](./docs/useThrottle.md) | Throttles a value, ensuring it updates at most once per specified interval. |\n| [`useThrottledCallback`](./docs/useThrottledCallback.md) | Creates a throttled version of a callback function. |\n| [`useThrottledScroll`](./docs/useThrottledScroll.md) | Tracks window scroll position with throttled updates. |\n| [`useThrottledState`](./docs/useThrottledState.md) | A `useState` variant where state updates are throttled. |\n| [`useCustomCompareMemo`](./docs/useCustomCompareMemo.md) | Memo variant that reruns its factory only when a custom comparator reports dependency changes. |\n| [`useSyncedRef`](./docs/useSyncedRef.md) | Keeps a mutable ref in sync with the latest value without re-rendering consumers. |\n\n### 8. Forms\n\nForm-centric hooks for managing inputs, validation, and lightweight i18n.\n\n| Hook | Description |\n| :--- | :--- |\n| [`useForm`](./docs/useForm.md) | Manages form state, input changes, and submission handling. |\n| [`useFormValidation`](./docs/useFormValidation.md) | Manages form state with built-in validation and submission logic. |\n| [`useTranslation`](./docs/useTranslation.md) | A basic internationalization (i18n) hook for translating form labels and messages. |\n\n### 9. Timers & Intervals\n\nDeclarative abstractions over `setTimeout` and `setInterval`, including countdowns and idle timers.\n\n| Hook | Description |\n| :--- | :--- |\n| [`useCountdown`](./docs/useCountdown.md) | Manages a countdown timer with start, pause, and reset controls. |\n| [`useIdleTimer`](./docs/useIdleTimer.md) | Detects user inactivity. |\n| [`useInterval`](./docs/useInterval.md) | Sets up an interval that repeatedly calls a function. |\n| [`useIntervalWhen`](./docs/useIntervalWhen.md) | An `useInterval` variant that only runs when a specific condition is true. |\n| [`useTimeout`](./docs/useTimeout.md) | Sets up a timeout that calls a function after a delay. |\n\n### 10. Animation\n\nHooks powered by `requestAnimationFrame` for smooth motion primitives.\n\n| Hook | Description |\n| :--- | :--- |\n| [`useAnimation`](./docs/useAnimation.md) | Manages a basic animation loop using `requestAnimationFrame`. |\n| [`useAnimationFrame`](./docs/useAnimationFrame.md) | Runs a callback function repeatedly using `requestAnimationFrame`. |\n","readmeFilename":"README.md"}