{"_id":"@usefy/hooks","_rev":"44-76494e16b6859f90ab44cd0a9fea017f","name":"@usefy/hooks","dist-tags":{"latest":"1.1.0"},"versions":{"0.0.35":{"name":"@usefy/hooks","version":"0.0.35","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.0.35","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"585ca91caf00d9db4f5e52fcdafba96e7a5f0883","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.0.35.tgz","fileCount":8,"integrity":"sha512-M7041LL4iLun/zBm6RSJ/Lrj8KTQtO3yA497y7sI6RRLtNXUZkPCmLHchDM9Zz++Vci9mZ2gUPkh8/Zzk2zrpw==","signatures":[{"sig":"MEUCIG2ozBFDg3pILPq6FfY6Uy6NclLFLrqjNCi0cclznI59AiEA8FtMKNXe6vt30AiqP1NspjEIuOSlY8UK5++RY8j+u7M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53722},"main":"./dist/index.js","_from":"file:usefy-hooks-0.0.35.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/06c223ba83bfae9ebb11025fea7854d3/usefy-hooks-0.0.35.tgz","_integrity":"sha512-M7041LL4iLun/zBm6RSJ/Lrj8KTQtO3yA497y7sI6RRLtNXUZkPCmLHchDM9Zz++Vci9mZ2gUPkh8/Zzk2zrpw==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"10.8.2","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"20.19.6","dependencies":{"@usefy/use-init":"0.0.36","@usefy/use-timer":"0.0.36","@usefy/use-signal":"0.0.36","@usefy/use-toggle":"0.0.36","@usefy/use-counter":"0.0.36","@usefy/use-unmount":"0.0.36","@usefy/use-debounce":"0.0.36","@usefy/use-throttle":"0.0.36","@usefy/use-geolocation":"0.0.36","@usefy/use-local-storage":"0.0.36","@usefy/use-event-listener":"0.0.36","@usefy/use-memory-monitor":"0.0.36","@usefy/use-click-any-where":"0.0.36","@usefy/use-session-storage":"0.0.36","@usefy/use-on-click-outside":"0.0.36","@usefy/use-copy-to-clipboard":"0.0.36","@usefy/use-debounce-callback":"0.0.36","@usefy/use-throttle-callback":"0.0.36","@usefy/use-intersection-observer":"0.0.36"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.0.35_1767920341196_0.33816520788572824","host":"s3://npm-registry-packages-npm-production"}},"0.0.37":{"name":"@usefy/hooks","version":"0.0.37","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.0.37","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"50f1fc8cd190c87fff33e3e16929d8e81948a885","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.0.37.tgz","fileCount":8,"integrity":"sha512-/lHqhw8nVFP1VLSmTrQP0bs1iN8C+EpoadxlOQFbfTkbGXiBK0xTl+ajtKIbcZu2yMmV+VDLNXSAR7kV9YoF3Q==","signatures":[{"sig":"MEUCIQCK3I9KmPypABvhD1kx1RI+xExTR+vDOJGVaLEdtPTyBgIgON45sxJHe7qzp4xcQWY6XigH/L0Nb9jw3tpY+QLXg3E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53722},"main":"./dist/index.js","_from":"file:usefy-hooks-0.0.37.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/718304bef0e0383480c3df3fe23c9478/usefy-hooks-0.0.37.tgz","_integrity":"sha512-/lHqhw8nVFP1VLSmTrQP0bs1iN8C+EpoadxlOQFbfTkbGXiBK0xTl+ajtKIbcZu2yMmV+VDLNXSAR7kV9YoF3Q==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"10.8.2","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"20.19.6","dependencies":{"@usefy/use-init":"0.0.37","@usefy/use-timer":"0.0.37","@usefy/use-signal":"0.0.37","@usefy/use-toggle":"0.0.37","@usefy/use-counter":"0.0.37","@usefy/use-unmount":"0.0.37","@usefy/use-debounce":"0.0.37","@usefy/use-throttle":"0.0.37","@usefy/use-geolocation":"0.0.37","@usefy/use-local-storage":"0.0.37","@usefy/use-event-listener":"0.0.37","@usefy/use-memory-monitor":"0.0.37","@usefy/use-click-any-where":"0.0.37","@usefy/use-session-storage":"0.0.37","@usefy/use-on-click-outside":"0.0.37","@usefy/use-copy-to-clipboard":"0.0.37","@usefy/use-debounce-callback":"0.0.37","@usefy/use-throttle-callback":"0.0.37","@usefy/use-intersection-observer":"0.0.37"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.0.37_1767920522355_0.5146473633587225","host":"s3://npm-registry-packages-npm-production"}},"0.0.38":{"name":"@usefy/hooks","version":"0.0.38","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.0.38","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"c3463d5875899bc7392428f75de719c4c692addd","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.0.38.tgz","fileCount":8,"integrity":"sha512-nZdaRYeiEqiKdzFj0I5MKNVV0mvRBcXEUdAYNB5r5jHcU8oQkM5p/ynfXePIJ5CHjDYGbA6TqiFFgLVLG2NHSQ==","signatures":[{"sig":"MEUCIQCt8L/33stb0nwDE47hHTPHI0HjzbCH/NgJihpm3d7gfAIgLM7609ddJaWydhEg1vuftaiJ0i7NdaJgl2hbRDhPPYk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53722},"main":"./dist/index.js","_from":"file:usefy-hooks-0.0.38.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/671b76c5def18547bef172093f03e5fd/usefy-hooks-0.0.38.tgz","_integrity":"sha512-nZdaRYeiEqiKdzFj0I5MKNVV0mvRBcXEUdAYNB5r5jHcU8oQkM5p/ynfXePIJ5CHjDYGbA6TqiFFgLVLG2NHSQ==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"10.8.2","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"20.19.6","dependencies":{"@usefy/use-init":"0.0.38","@usefy/use-timer":"0.0.38","@usefy/use-signal":"0.0.38","@usefy/use-toggle":"0.0.38","@usefy/use-counter":"0.0.38","@usefy/use-unmount":"0.0.38","@usefy/use-debounce":"0.0.38","@usefy/use-throttle":"0.0.38","@usefy/use-geolocation":"0.0.38","@usefy/use-local-storage":"0.0.38","@usefy/use-event-listener":"0.0.38","@usefy/use-memory-monitor":"0.0.38","@usefy/use-click-any-where":"0.0.38","@usefy/use-session-storage":"0.0.38","@usefy/use-on-click-outside":"0.0.38","@usefy/use-copy-to-clipboard":"0.0.38","@usefy/use-debounce-callback":"0.0.38","@usefy/use-throttle-callback":"0.0.38","@usefy/use-intersection-observer":"0.0.38"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.0.38_1767922640235_0.6085011419296462","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@usefy/hooks","version":"0.1.1","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.1.1","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"9af4393ecc313274c687273dbc6bc7c0dea4d4b4","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.1.1.tgz","fileCount":8,"integrity":"sha512-5WTVQWiJqwPWjwcWJdMDuWMtY72v9HdLZ6jdAb5mj2IP8mCFuIw2qg1dI4WwcwJ1sRt/FceRvyGdXPuv2rkInA==","signatures":[{"sig":"MEUCIQDO3NnT/H8T7iDuPS5O+/dK9g7LBJEvacOAgyZrLoF/MwIgBWVhcpqCIVhru4A0fugqfn7FJE/1Nc3duxSiOkII+Ec=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53702},"main":"./dist/index.js","_from":"file:usefy-hooks-0.1.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/9d3a36459271ebe7500e71157a05043d/usefy-hooks-0.1.1.tgz","_integrity":"sha512-5WTVQWiJqwPWjwcWJdMDuWMtY72v9HdLZ6jdAb5mj2IP8mCFuIw2qg1dI4WwcwJ1sRt/FceRvyGdXPuv2rkInA==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"10.8.2","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"20.19.6","dependencies":{"@usefy/use-init":"0.1.1","@usefy/use-timer":"0.1.1","@usefy/use-signal":"0.1.1","@usefy/use-toggle":"0.1.1","@usefy/use-counter":"0.1.1","@usefy/use-unmount":"0.1.1","@usefy/use-debounce":"0.1.1","@usefy/use-throttle":"0.1.1","@usefy/use-geolocation":"0.1.1","@usefy/use-local-storage":"0.1.1","@usefy/use-event-listener":"0.1.1","@usefy/use-memory-monitor":"0.1.1","@usefy/use-click-any-where":"0.1.1","@usefy/use-session-storage":"0.1.1","@usefy/use-on-click-outside":"0.1.1","@usefy/use-copy-to-clipboard":"0.1.1","@usefy/use-debounce-callback":"0.1.1","@usefy/use-throttle-callback":"0.1.1","@usefy/use-intersection-observer":"0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.1.1_1768128890451_0.8196522322866417","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@usefy/hooks","version":"0.1.2","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.1.2","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"281e4b8c77a20b9057ab03ac2793c2eb45e1d9a4","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.1.2.tgz","fileCount":8,"integrity":"sha512-jt/WxuyQNeBWkcDNC3AVWpnLMWbqU9OwohE+Ue8VZcX8V94ThrZjeYcbRyLGL+qZ4rUvSHWyFKRxK8K/jPdiQQ==","signatures":[{"sig":"MEUCIQCs1O+KcRv5DpoB3Pf+/q2Fr7QT+tMc4kOBHfLHieb1oAIgKWwuGkHxvOHLONoMLdvNaK+1SW2Atv4bw0uMQ9GzalM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53702},"main":"./dist/index.js","_from":"file:usefy-hooks-0.1.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/57fa41a6c7170c013c5411491116c5ab/usefy-hooks-0.1.2.tgz","_integrity":"sha512-jt/WxuyQNeBWkcDNC3AVWpnLMWbqU9OwohE+Ue8VZcX8V94ThrZjeYcbRyLGL+qZ4rUvSHWyFKRxK8K/jPdiQQ==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"10.8.2","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"20.19.6","dependencies":{"@usefy/use-init":"0.1.2","@usefy/use-timer":"0.1.2","@usefy/use-signal":"0.1.2","@usefy/use-toggle":"0.1.2","@usefy/use-counter":"0.1.2","@usefy/use-unmount":"0.1.2","@usefy/use-debounce":"0.1.2","@usefy/use-throttle":"0.1.2","@usefy/use-geolocation":"0.1.2","@usefy/use-local-storage":"0.1.2","@usefy/use-event-listener":"0.1.2","@usefy/use-memory-monitor":"0.1.2","@usefy/use-click-any-where":"0.1.2","@usefy/use-session-storage":"0.1.2","@usefy/use-on-click-outside":"0.1.2","@usefy/use-copy-to-clipboard":"0.1.2","@usefy/use-debounce-callback":"0.1.2","@usefy/use-throttle-callback":"0.1.2","@usefy/use-intersection-observer":"0.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.1.2_1768130081151_0.8792668266689323","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@usefy/hooks","version":"0.1.3","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.1.3","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"d80b6f61f8baacbd1467ec2d11b2bac2de563e1a","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.1.3.tgz","fileCount":8,"integrity":"sha512-gofCTOAPTGy7WnxuE0kzB0rUnmIdoN5M1HlxNuiff97pHh/HR/9DKnQJStAcE+Yjo06NGSMfrkpM7RXbOL2U/w==","signatures":[{"sig":"MEUCICh4zLbEeTpKUrkO/N5cr6vlNrIL7LVNr14AyE6p1n/ZAiEA5ugjYrCLmQyqvkqRGRwTMNpCaCL+WJoVsDvE96Hb8xI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53702},"main":"./dist/index.js","_from":"file:usefy-hooks-0.1.3.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/35775fe3fa9f2c831f6df878d8106483/usefy-hooks-0.1.3.tgz","_integrity":"sha512-gofCTOAPTGy7WnxuE0kzB0rUnmIdoN5M1HlxNuiff97pHh/HR/9DKnQJStAcE+Yjo06NGSMfrkpM7RXbOL2U/w==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"10.8.2","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"20.19.6","dependencies":{"@usefy/use-init":"0.1.3","@usefy/use-timer":"0.1.3","@usefy/use-signal":"0.1.3","@usefy/use-toggle":"0.1.3","@usefy/use-counter":"0.1.3","@usefy/use-unmount":"0.1.3","@usefy/use-debounce":"0.1.3","@usefy/use-throttle":"0.1.3","@usefy/use-geolocation":"0.1.3","@usefy/use-local-storage":"0.1.3","@usefy/use-event-listener":"0.1.3","@usefy/use-memory-monitor":"0.1.3","@usefy/use-click-any-where":"0.1.3","@usefy/use-session-storage":"0.1.3","@usefy/use-on-click-outside":"0.1.3","@usefy/use-copy-to-clipboard":"0.1.3","@usefy/use-debounce-callback":"0.1.3","@usefy/use-throttle-callback":"0.1.3","@usefy/use-intersection-observer":"0.1.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.1.3_1768140813700_0.850854550264984","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@usefy/hooks","version":"0.1.4","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.1.4","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"2f0767455db9479e217a6a49b0c9c88c90e4e942","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.1.4.tgz","fileCount":8,"integrity":"sha512-i+hqyjyoCyLKJXN4m9X8bP7Vhvv6wJt33DnqjK093ZXO0yG43nGJQcISO0/TyxhTn9+y6hBpomt2haOvJAsLBA==","signatures":[{"sig":"MEYCIQD3vdmxDrJR7co6ApQ5g/ngTQQSh+Me2cm6N+TkJUUiogIhAO77u7DQyP8C8h67Mk5DO0KcNZXJX+bG+hHo5TCF7BZ4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53702},"main":"./dist/index.js","_from":"file:usefy-hooks-0.1.4.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/ad45d297fcbf60a60544450f3ac3adf6/usefy-hooks-0.1.4.tgz","_integrity":"sha512-i+hqyjyoCyLKJXN4m9X8bP7Vhvv6wJt33DnqjK093ZXO0yG43nGJQcISO0/TyxhTn9+y6hBpomt2haOvJAsLBA==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"10.8.2","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"20.19.6","dependencies":{"@usefy/use-init":"0.1.4","@usefy/use-timer":"0.1.4","@usefy/use-signal":"0.1.4","@usefy/use-toggle":"0.1.4","@usefy/use-counter":"0.1.4","@usefy/use-unmount":"0.1.4","@usefy/use-debounce":"0.1.4","@usefy/use-throttle":"0.1.4","@usefy/use-geolocation":"0.1.4","@usefy/use-local-storage":"0.1.4","@usefy/use-event-listener":"0.1.4","@usefy/use-memory-monitor":"0.1.4","@usefy/use-click-any-where":"0.1.4","@usefy/use-session-storage":"0.1.4","@usefy/use-on-click-outside":"0.1.4","@usefy/use-copy-to-clipboard":"0.1.4","@usefy/use-debounce-callback":"0.1.4","@usefy/use-throttle-callback":"0.1.4","@usefy/use-intersection-observer":"0.1.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.1.4_1768141443479_0.9018779912073791","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@usefy/hooks","version":"0.1.5","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.1.5","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"fc3974e2b390a649fc17a5fb79a67b81e65657c9","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.1.5.tgz","fileCount":8,"integrity":"sha512-Q6hIu0LCc9dOfbKaJyZ2GHXUZDcPNRrTPB+yOYDMibRmp+tcFBPU9qv3vsuaFy7CXZdRHEXbL4hthkyS/l3N4Q==","signatures":[{"sig":"MEUCIE4ns2Zo/c752UK7NoKBowpsy4/5dg2HCkPY5dXD8XgJAiEAjSZlUF68iIoKG5Gsnsk81GUfW+NfsCybe8eZM5GnZrs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53702},"main":"./dist/index.js","_from":"file:usefy-hooks-0.1.5.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/0731ac1ebe94aedb0e316ea73b64fefe/usefy-hooks-0.1.5.tgz","_integrity":"sha512-Q6hIu0LCc9dOfbKaJyZ2GHXUZDcPNRrTPB+yOYDMibRmp+tcFBPU9qv3vsuaFy7CXZdRHEXbL4hthkyS/l3N4Q==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"10.8.2","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"20.19.6","dependencies":{"@usefy/use-init":"0.1.5","@usefy/use-timer":"0.1.5","@usefy/use-signal":"0.1.5","@usefy/use-toggle":"0.1.5","@usefy/use-counter":"0.1.5","@usefy/use-unmount":"0.1.5","@usefy/use-debounce":"0.1.5","@usefy/use-throttle":"0.1.5","@usefy/use-geolocation":"0.1.5","@usefy/use-local-storage":"0.1.5","@usefy/use-event-listener":"0.1.5","@usefy/use-memory-monitor":"0.1.5","@usefy/use-click-any-where":"0.1.5","@usefy/use-session-storage":"0.1.5","@usefy/use-on-click-outside":"0.1.5","@usefy/use-copy-to-clipboard":"0.1.5","@usefy/use-debounce-callback":"0.1.5","@usefy/use-throttle-callback":"0.1.5","@usefy/use-intersection-observer":"0.1.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.1.5_1768181486910_0.4035594048599256","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@usefy/hooks","version":"0.2.0","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.2.0","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"0b40927689e9b954050aecef98f2d2a311e43692","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.2.0.tgz","fileCount":8,"integrity":"sha512-Vn1NkA2Y6yg2O1eH30oETeT76X+8te2Ssf759pu5+bW2sPr12fDgyYtR59xwR1aQoojoq5HxAIS40NrmEYvfiQ==","signatures":[{"sig":"MEUCIAubKWeEGln02xPRW4SUM/anjLrL5XffoaBQKRNwO1biAiEA74fAayrxFZs05YApvwdFamlo9XEGoSnWjpNH8GG24LM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53702},"main":"./dist/index.js","_from":"file:usefy-hooks-0.2.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/218a4857cf4aa50f13cb79c1ea1ca112/usefy-hooks-0.2.0.tgz","_integrity":"sha512-Vn1NkA2Y6yg2O1eH30oETeT76X+8te2Ssf759pu5+bW2sPr12fDgyYtR59xwR1aQoojoq5HxAIS40NrmEYvfiQ==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"10.8.2","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"20.19.6","dependencies":{"@usefy/use-init":"0.2.0","@usefy/use-timer":"0.2.0","@usefy/use-signal":"0.2.0","@usefy/use-toggle":"0.2.0","@usefy/use-counter":"0.2.0","@usefy/use-unmount":"0.2.0","@usefy/use-debounce":"0.2.0","@usefy/use-throttle":"0.2.0","@usefy/use-geolocation":"0.2.0","@usefy/use-local-storage":"0.2.0","@usefy/use-event-listener":"0.2.0","@usefy/use-memory-monitor":"0.2.0","@usefy/use-click-any-where":"0.2.0","@usefy/use-session-storage":"0.2.0","@usefy/use-on-click-outside":"0.2.0","@usefy/use-copy-to-clipboard":"0.2.0","@usefy/use-debounce-callback":"0.2.0","@usefy/use-throttle-callback":"0.2.0","@usefy/use-intersection-observer":"0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.0_1768184684503_0.2641653348901545","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@usefy/hooks","version":"0.2.1","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.2.1","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"e3aec03f9b7672b94deb81cab0a49681c4944d84","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.2.1.tgz","fileCount":8,"integrity":"sha512-TFbYT2gaGnJzdWatcsuWX2NEjLQ1/VdsnekmhQ//De0wFMqJUsZ9OOg6SEczckWIY26wKcs9L1gu5zvke6ex4g==","signatures":[{"sig":"MEUCIQD9Lb5uLzHc4zxT/9wtoVldC0eOEVz4omaaZ4Ppoy8MKAIgPSK/YcHtqe/4qTTeh5U6/rTrxbw0xzuqt/lcnEgJWKQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53702},"main":"./dist/index.js","_from":"file:usefy-hooks-0.2.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/c4866c0a3d66113acb800dc873d932da/usefy-hooks-0.2.1.tgz","_integrity":"sha512-TFbYT2gaGnJzdWatcsuWX2NEjLQ1/VdsnekmhQ//De0wFMqJUsZ9OOg6SEczckWIY26wKcs9L1gu5zvke6ex4g==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"10.8.2","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"20.19.6","dependencies":{"@usefy/use-init":"0.2.1","@usefy/use-timer":"0.2.1","@usefy/use-signal":"0.2.1","@usefy/use-toggle":"0.2.1","@usefy/use-counter":"0.2.1","@usefy/use-unmount":"0.2.1","@usefy/use-debounce":"0.2.1","@usefy/use-throttle":"0.2.1","@usefy/use-geolocation":"0.2.1","@usefy/use-local-storage":"0.2.1","@usefy/use-event-listener":"0.2.1","@usefy/use-memory-monitor":"0.2.1","@usefy/use-click-any-where":"0.2.1","@usefy/use-session-storage":"0.2.1","@usefy/use-on-click-outside":"0.2.1","@usefy/use-copy-to-clipboard":"0.2.1","@usefy/use-debounce-callback":"0.2.1","@usefy/use-throttle-callback":"0.2.1","@usefy/use-intersection-observer":"0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.1_1768200189028_0.6245462330984084","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@usefy/hooks","version":"0.2.2","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.2.2","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"ad7161d553a738c4e84f68984f008b34e0180355","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.2.2.tgz","fileCount":8,"integrity":"sha512-RqqOBQlhMglz93ds9OX9nX3R4S0JZ0T6F8AIGq023ivi1RMPpfkaad8hLoqKd+WM85/rnPms7qDpoOfCLCikUA==","signatures":[{"sig":"MEQCID/nNi5HFowF/Un9BCH/9SgvZmvWr/ePGTKXPuzHxLSDAiAaDhhtqqimsC+eJ1nOrsnv1Vz1BXEe+PAbtHpXe3EpKA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53702},"main":"./dist/index.js","_from":"file:usefy-hooks-0.2.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/915d38b8c1fb09470e1ad7038829f4a0/usefy-hooks-0.2.2.tgz","_integrity":"sha512-RqqOBQlhMglz93ds9OX9nX3R4S0JZ0T6F8AIGq023ivi1RMPpfkaad8hLoqKd+WM85/rnPms7qDpoOfCLCikUA==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"10.8.2","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"20.19.6","dependencies":{"@usefy/use-init":"0.2.2","@usefy/use-timer":"0.2.2","@usefy/use-signal":"0.2.2","@usefy/use-toggle":"0.2.2","@usefy/use-counter":"0.2.2","@usefy/use-unmount":"0.2.2","@usefy/use-debounce":"0.2.2","@usefy/use-throttle":"0.2.2","@usefy/use-geolocation":"0.2.2","@usefy/use-local-storage":"0.2.2","@usefy/use-event-listener":"0.2.2","@usefy/use-memory-monitor":"0.2.2","@usefy/use-click-any-where":"0.2.2","@usefy/use-session-storage":"0.2.2","@usefy/use-on-click-outside":"0.2.2","@usefy/use-copy-to-clipboard":"0.2.2","@usefy/use-debounce-callback":"0.2.2","@usefy/use-throttle-callback":"0.2.2","@usefy/use-intersection-observer":"0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.2_1768204237694_0.3751448938729227","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@usefy/hooks","version":"0.2.3","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.2.3","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"48409483d1524bf6f2b171ecd40a984079d51b29","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.2.3.tgz","fileCount":8,"integrity":"sha512-EO43kkGvRwsllmVY8yVfC2YtvoHoVS/lwouHADnh6zj/rI8tKT/zcznZdChR4yv/74TRzIYfH7Fe2a1ETAoYFQ==","signatures":[{"sig":"MEYCIQCyZbpkTpRi23mIL80g3Fp6bRBrOUbcjmSg/WVf0X6wrQIhANOQDxcPHp2Hv9puywKAi1impY0C8TLd0U+6F52n+FVD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53702},"main":"./dist/index.js","_from":"file:usefy-hooks-0.2.3.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/54f458ebe8391e1b131b96f0068781a3/usefy-hooks-0.2.3.tgz","_integrity":"sha512-EO43kkGvRwsllmVY8yVfC2YtvoHoVS/lwouHADnh6zj/rI8tKT/zcznZdChR4yv/74TRzIYfH7Fe2a1ETAoYFQ==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"10.8.2","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"20.19.6","dependencies":{"@usefy/use-init":"0.2.3","@usefy/use-timer":"0.2.3","@usefy/use-signal":"0.2.3","@usefy/use-toggle":"0.2.3","@usefy/use-counter":"0.2.3","@usefy/use-unmount":"0.2.3","@usefy/use-debounce":"0.2.3","@usefy/use-throttle":"0.2.3","@usefy/use-geolocation":"0.2.3","@usefy/use-local-storage":"0.2.3","@usefy/use-event-listener":"0.2.3","@usefy/use-memory-monitor":"0.2.3","@usefy/use-click-any-where":"0.2.3","@usefy/use-session-storage":"0.2.3","@usefy/use-on-click-outside":"0.2.3","@usefy/use-copy-to-clipboard":"0.2.3","@usefy/use-debounce-callback":"0.2.3","@usefy/use-throttle-callback":"0.2.3","@usefy/use-intersection-observer":"0.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.3_1768224332885_0.9117832956707443","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@usefy/hooks","version":"0.2.4","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.2.4","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"418181f123bcf81d10fc6f98c21e758ef4cf39e6","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.2.4.tgz","fileCount":8,"integrity":"sha512-sg/hQXv2YxbIPDxRfIrcUxGPTO0oql+wPdluZ1LISfydecR+N5K4+rTq6CaTsB/Yp4bz4k3hwXYN7UpASOx7xQ==","signatures":[{"sig":"MEUCIQD+p/kqlHygjFDyfeI/k/0iRWLZu5YKXfoGMJeB6c7wPgIgb0AawjPIpKElbSINaAubuDuAGF9q3a3ZfeohLiBS1Rw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53702},"main":"./dist/index.js","_from":"file:usefy-hooks-0.2.4.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/d510ffbfb235b712acec91e2517ce61e/usefy-hooks-0.2.4.tgz","_integrity":"sha512-sg/hQXv2YxbIPDxRfIrcUxGPTO0oql+wPdluZ1LISfydecR+N5K4+rTq6CaTsB/Yp4bz4k3hwXYN7UpASOx7xQ==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"10.8.2","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"20.19.6","dependencies":{"@usefy/use-init":"0.2.4","@usefy/use-timer":"0.2.4","@usefy/use-signal":"0.2.4","@usefy/use-toggle":"0.2.4","@usefy/use-counter":"0.2.4","@usefy/use-unmount":"0.2.4","@usefy/use-debounce":"0.2.4","@usefy/use-throttle":"0.2.4","@usefy/use-geolocation":"0.2.4","@usefy/use-local-storage":"0.2.4","@usefy/use-event-listener":"0.2.4","@usefy/use-memory-monitor":"0.2.4","@usefy/use-click-any-where":"0.2.4","@usefy/use-session-storage":"0.2.4","@usefy/use-on-click-outside":"0.2.4","@usefy/use-copy-to-clipboard":"0.2.4","@usefy/use-debounce-callback":"0.2.4","@usefy/use-throttle-callback":"0.2.4","@usefy/use-intersection-observer":"0.2.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.4_1768273653836_0.8057719512170434","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@usefy/hooks","version":"0.2.5","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.2.5","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"3e242f488a099212904da37511ac2a05476150e4","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.2.5.tgz","fileCount":8,"integrity":"sha512-x94d9nhXPXIlCNbF+zaVJ35vW9efZRD669b6YNVbidujauRVE3sFo4O7IbsMQp9wGkaLZLpTNwZdooU8AiQfaw==","signatures":[{"sig":"MEUCIQCu2K/f4hdiGBv7BPf3eThUFqF99CxawAtZAqWZPydD6gIgDH62DO/ix5rXGV5oPjNhnO2E5xHSkLBVkb7sQ9azavM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54466},"main":"./dist/index.js","_from":"file:usefy-hooks-0.2.5.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/44125342fbba06ae373d7088c9796513/usefy-hooks-0.2.5.tgz","_integrity":"sha512-x94d9nhXPXIlCNbF+zaVJ35vW9efZRD669b6YNVbidujauRVE3sFo4O7IbsMQp9wGkaLZLpTNwZdooU8AiQfaw==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"10.8.2","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"20.19.6","dependencies":{"@usefy/use-init":"0.2.5","@usefy/use-timer":"0.2.5","@usefy/use-signal":"0.2.5","@usefy/use-toggle":"0.2.5","@usefy/use-counter":"0.2.5","@usefy/use-timeout":"0.2.5","@usefy/use-unmount":"0.2.5","@usefy/use-debounce":"0.2.5","@usefy/use-throttle":"0.2.5","@usefy/use-geolocation":"0.2.5","@usefy/use-local-storage":"0.2.5","@usefy/use-event-listener":"0.2.5","@usefy/use-memory-monitor":"0.2.5","@usefy/use-click-any-where":"0.2.5","@usefy/use-session-storage":"0.2.5","@usefy/use-on-click-outside":"0.2.5","@usefy/use-copy-to-clipboard":"0.2.5","@usefy/use-debounce-callback":"0.2.5","@usefy/use-throttle-callback":"0.2.5","@usefy/use-intersection-observer":"0.2.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.5_1768972561262_0.23567268237063232","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@usefy/hooks","version":"0.2.6","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.2.6","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"5e629d7dad5769fb345f983fcb5ce3bbe06cf724","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.2.6.tgz","fileCount":8,"integrity":"sha512-+qkvciA4lCfSInO0Ouj+PzP6nir811Ysss00i1Pnmq8aBkJmVwF2MndVoHzfNrvMK4DcGhCqJsRq9uEqvVGtSg==","signatures":[{"sig":"MEQCIBWHuc7djOyv742oK8nA0Hx9K/rdZ9v5vDVj/axdrQSLAiBBkTshpYh0YHfADgQ7knTLGGhA/MHKL5Nv0Ib9mgLsFQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55926},"main":"./dist/index.js","_from":"file:usefy-hooks-0.2.6.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/7dac7baf915c396de85085dba8ddaf34/usefy-hooks-0.2.6.tgz","_integrity":"sha512-+qkvciA4lCfSInO0Ouj+PzP6nir811Ysss00i1Pnmq8aBkJmVwF2MndVoHzfNrvMK4DcGhCqJsRq9uEqvVGtSg==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"10.8.2","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"@usefy/use-init":"0.2.6","@usefy/use-hover":"0.2.6","@usefy/use-timer":"0.2.6","@usefy/use-signal":"0.2.6","@usefy/use-toggle":"0.2.6","@usefy/use-counter":"0.2.6","@usefy/use-timeout":"0.2.6","@usefy/use-unmount":"0.2.6","@usefy/use-debounce":"0.2.6","@usefy/use-throttle":"0.2.6","@usefy/use-geolocation":"0.2.6","@usefy/use-local-storage":"0.2.6","@usefy/use-event-listener":"0.2.6","@usefy/use-memory-monitor":"0.2.6","@usefy/use-click-any-where":"0.2.6","@usefy/use-session-storage":"0.2.6","@usefy/use-on-click-outside":"0.2.6","@usefy/use-copy-to-clipboard":"0.2.6","@usefy/use-debounce-callback":"0.2.6","@usefy/use-throttle-callback":"0.2.6","@usefy/use-intersection-observer":"0.2.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.2.6_1769681913716_0.6381510066046909","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@usefy/hooks","version":"0.3.1","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.3.1","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"731134cab52bfb3eda6b7061e6e87c1555bee96e","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.3.1.tgz","fileCount":8,"integrity":"sha512-vzOMWGWbakVDtwfQHbHJI2TZdBbAqm94spNFz9Sog5H9h6GMjdZ5KA5ZNXrZ0fO49UmwFMqklJCFhrAJJlwKIA==","signatures":[{"sig":"MEUCIQDKaYzmCv4Ji+EixnNa2fEhc1zMNXGjVnKleVY6L8XW2gIgMEJlU25KP4rjVJk+BKkZE321DzMolbMA3zauUCQxpNw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59378},"main":"./dist/index.js","_from":"file:usefy-hooks-0.3.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/d663295dceb898649efa08ef52d04c9a/usefy-hooks-0.3.1.tgz","_integrity":"sha512-vzOMWGWbakVDtwfQHbHJI2TZdBbAqm94spNFz9Sog5H9h6GMjdZ5KA5ZNXrZ0fO49UmwFMqklJCFhrAJJlwKIA==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"10.8.2","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","dependencies":{"@usefy/use-init":"0.3.1","@usefy/use-hover":"0.3.1","@usefy/use-timer":"0.3.1","@usefy/use-signal":"0.3.1","@usefy/use-toggle":"0.3.1","@usefy/use-counter":"0.3.1","@usefy/use-timeout":"0.3.1","@usefy/use-unmount":"0.3.1","@usefy/use-debounce":"0.3.1","@usefy/use-throttle":"0.3.1","@usefy/use-key-press":"0.3.1","@usefy/use-geolocation":"0.3.1","@usefy/use-local-storage":"0.3.1","@usefy/use-event-listener":"0.3.1","@usefy/use-memory-monitor":"0.3.1","@usefy/use-click-any-where":"0.3.1","@usefy/use-session-storage":"0.3.1","@usefy/use-on-click-outside":"0.3.1","@usefy/use-copy-to-clipboard":"0.3.1","@usefy/use-debounce-callback":"0.3.1","@usefy/use-throttle-callback":"0.3.1","@usefy/use-intersection-observer":"0.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.3.1_1782887950452_0.5627387611239234","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@usefy/hooks","version":"0.4.0","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.4.0","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"c28daeee394e72c2006e8cd15a6435a6f50adea8","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.4.0.tgz","fileCount":8,"integrity":"sha512-57Hrt7oAicCtJBW3jucf9gIs45n1xmBIQXBUnvwdVnVYT3tfaocDy/lNbG/mHjwrsyUPzrWXjYotu+3KkXxNUw==","signatures":[{"sig":"MEUCIQDOb9gNyxDdSGSdAULfCPihSWDP2ZU1ceD//TR7VnV2rgIgP2K2F1P+e65jYSJI+JVJqoliwofpACPSS7FCaTEDD2A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61329},"main":"./dist/index.js","_from":"file:usefy-hooks-0.4.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/cd7a7c10bb177bc8ad23b92c82817752/usefy-hooks-0.4.0.tgz","_integrity":"sha512-57Hrt7oAicCtJBW3jucf9gIs45n1xmBIQXBUnvwdVnVYT3tfaocDy/lNbG/mHjwrsyUPzrWXjYotu+3KkXxNUw==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"10.8.2","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","dependencies":{"@usefy/use-map":"0.4.0","@usefy/use-init":"0.4.0","@usefy/use-hover":"0.4.0","@usefy/use-timer":"0.4.0","@usefy/use-signal":"0.4.0","@usefy/use-toggle":"0.4.0","@usefy/use-counter":"0.4.0","@usefy/use-timeout":"0.4.0","@usefy/use-unmount":"0.4.0","@usefy/use-debounce":"0.4.0","@usefy/use-throttle":"0.4.0","@usefy/use-key-press":"0.4.0","@usefy/use-geolocation":"0.4.0","@usefy/use-local-storage":"0.4.0","@usefy/use-event-listener":"0.4.0","@usefy/use-memory-monitor":"0.4.0","@usefy/use-click-any-where":"0.4.0","@usefy/use-session-storage":"0.4.0","@usefy/use-on-click-outside":"0.4.0","@usefy/use-copy-to-clipboard":"0.4.0","@usefy/use-debounce-callback":"0.4.0","@usefy/use-throttle-callback":"0.4.0","@usefy/use-intersection-observer":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.4.0_1782891333993_0.8553647154786406","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@usefy/hooks","version":"0.5.0","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.5.0","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"cec5956be9d67bfbd433c57b8528d407d2172adf","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.5.0.tgz","fileCount":8,"integrity":"sha512-yYvfbd8oliGoSEyhtuFBAaRxjdhM7NTP2zEyB/osukbAuHV8fBtKu9Lp4NbYjtcjp79rypy0S59n7wOT3aeWbA==","signatures":[{"sig":"MEYCIQD5M2/5F6vZaho+qoZtGQaTRUj7ybCrYc7k3M6WGNgyGQIhANeXjJ1qTUhGG4KEF7wGH5JfgPLkOWcJ+4Y7BUu/1jwA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63230},"main":"./dist/index.js","_from":"file:usefy-hooks-0.5.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/904cfb792cf1fb9a6bee6f107c351cc3/usefy-hooks-0.5.0.tgz","_integrity":"sha512-yYvfbd8oliGoSEyhtuFBAaRxjdhM7NTP2zEyB/osukbAuHV8fBtKu9Lp4NbYjtcjp79rypy0S59n7wOT3aeWbA==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"10.8.2","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","dependencies":{"@usefy/use-map":"0.5.0","@usefy/use-set":"0.5.0","@usefy/use-init":"0.5.0","@usefy/use-hover":"0.5.0","@usefy/use-timer":"0.5.0","@usefy/use-signal":"0.5.0","@usefy/use-toggle":"0.5.0","@usefy/use-counter":"0.5.0","@usefy/use-timeout":"0.5.0","@usefy/use-unmount":"0.5.0","@usefy/use-debounce":"0.5.0","@usefy/use-throttle":"0.5.0","@usefy/use-key-press":"0.5.0","@usefy/use-geolocation":"0.5.0","@usefy/use-local-storage":"0.5.0","@usefy/use-event-listener":"0.5.0","@usefy/use-memory-monitor":"0.5.0","@usefy/use-click-any-where":"0.5.0","@usefy/use-session-storage":"0.5.0","@usefy/use-on-click-outside":"0.5.0","@usefy/use-copy-to-clipboard":"0.5.0","@usefy/use-debounce-callback":"0.5.0","@usefy/use-throttle-callback":"0.5.0","@usefy/use-intersection-observer":"0.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.5.0_1782895521070_0.11161482433595005","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@usefy/hooks","version":"0.6.0","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.6.0","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"f00d98ddde7a54327f31c660b889dd716c0ea50d","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.6.0.tgz","fileCount":8,"integrity":"sha512-HcaLohXHxj5r05vtxSS1xVFJSqDr3sDARiEmqzlsSJR57X+i2cSkGph5DekFL+Rye9/mYhpPxfgj//iYcB1tHg==","signatures":[{"sig":"MEUCIQCaxv2l/8syOGAe77klLZJMrNHrFr0Nv7D1ORHPn3QCjgIgQN4gqPVH2btK9P6hr1nE6apLqdfydQA0lh31LIQPN8Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65325},"main":"./dist/index.js","_from":"file:usefy-hooks-0.6.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/7a8cb99e879df22fb7cfb8424b215794/usefy-hooks-0.6.0.tgz","_integrity":"sha512-HcaLohXHxj5r05vtxSS1xVFJSqDr3sDARiEmqzlsSJR57X+i2cSkGph5DekFL+Rye9/mYhpPxfgj//iYcB1tHg==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"10.8.2","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","dependencies":{"@usefy/use-map":"0.6.0","@usefy/use-set":"0.6.0","@usefy/use-init":"0.6.0","@usefy/use-list":"0.6.0","@usefy/use-hover":"0.6.0","@usefy/use-timer":"0.6.0","@usefy/use-signal":"0.6.0","@usefy/use-toggle":"0.6.0","@usefy/use-counter":"0.6.0","@usefy/use-timeout":"0.6.0","@usefy/use-unmount":"0.6.0","@usefy/use-debounce":"0.6.0","@usefy/use-throttle":"0.6.0","@usefy/use-key-press":"0.6.0","@usefy/use-geolocation":"0.6.0","@usefy/use-local-storage":"0.6.0","@usefy/use-event-listener":"0.6.0","@usefy/use-memory-monitor":"0.6.0","@usefy/use-click-any-where":"0.6.0","@usefy/use-session-storage":"0.6.0","@usefy/use-on-click-outside":"0.6.0","@usefy/use-copy-to-clipboard":"0.6.0","@usefy/use-debounce-callback":"0.6.0","@usefy/use-throttle-callback":"0.6.0","@usefy/use-intersection-observer":"0.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.6.0_1782912658172_0.8190254709132416","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@usefy/hooks","version":"0.7.0","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.7.0","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"f735a6762a2277fb8d018ed67468e67fb61fac2d","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.7.0.tgz","fileCount":8,"integrity":"sha512-ZQu+ljcDa4VANMjYtwOgVWPeFWRqffOhJeEVN05KZepYXdKTpSWGfVtevD3veCJiv2n9D0GlhRUISor3l6c/xw==","signatures":[{"sig":"MEUCIDm0unPloXaEwci5rlw1Ecgb8q0UKvjrJUiYzlwzj2e8AiEA0xuOvZDO29YJM08O9euKxqkM82JyQHkK65uP+hxKvyw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67517},"main":"./dist/index.js","_from":"file:usefy-hooks-0.7.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/cb997a0646432c327b2cf7cf91031b8d/usefy-hooks-0.7.0.tgz","_integrity":"sha512-ZQu+ljcDa4VANMjYtwOgVWPeFWRqffOhJeEVN05KZepYXdKTpSWGfVtevD3veCJiv2n9D0GlhRUISor3l6c/xw==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"10.8.2","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","dependencies":{"@usefy/use-map":"0.7.0","@usefy/use-set":"0.7.0","@usefy/use-init":"0.7.0","@usefy/use-list":"0.7.0","@usefy/use-hover":"0.7.0","@usefy/use-queue":"0.7.0","@usefy/use-timer":"0.7.0","@usefy/use-signal":"0.7.0","@usefy/use-toggle":"0.7.0","@usefy/use-counter":"0.7.0","@usefy/use-timeout":"0.7.0","@usefy/use-unmount":"0.7.0","@usefy/use-debounce":"0.7.0","@usefy/use-throttle":"0.7.0","@usefy/use-key-press":"0.7.0","@usefy/use-geolocation":"0.7.0","@usefy/use-local-storage":"0.7.0","@usefy/use-event-listener":"0.7.0","@usefy/use-memory-monitor":"0.7.0","@usefy/use-click-any-where":"0.7.0","@usefy/use-session-storage":"0.7.0","@usefy/use-on-click-outside":"0.7.0","@usefy/use-copy-to-clipboard":"0.7.0","@usefy/use-debounce-callback":"0.7.0","@usefy/use-throttle-callback":"0.7.0","@usefy/use-intersection-observer":"0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.7.0_1782957061341_0.02268466113702372","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@usefy/hooks","version":"0.8.0","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.8.0","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"b70705c36215e970222f71657998045d44e2b4e8","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.8.0.tgz","fileCount":8,"integrity":"sha512-LNchx5DzPvuDzPcuOFmBwhX4xAg6adypcsy+vrjRWVozGpv0WcfyxGYZPyoybQ5NiD2Ow3Eicr7M0JdOLc4mGA==","signatures":[{"sig":"MEUCIQDyEl26FuewAIWF7sdunS9o+2GvHEPF1LLmAACzQUQQGgIgA6J/HXkcJWtRgdDOnN2FEn93g4aBRII7+wYLahREoZs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70108},"main":"./dist/index.js","_from":"file:usefy-hooks-0.8.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/f6d4972aba9a17654d2b81e5d31db469/usefy-hooks-0.8.0.tgz","_integrity":"sha512-LNchx5DzPvuDzPcuOFmBwhX4xAg6adypcsy+vrjRWVozGpv0WcfyxGYZPyoybQ5NiD2Ow3Eicr7M0JdOLc4mGA==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"10.8.2","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","dependencies":{"@usefy/use-map":"0.8.0","@usefy/use-set":"0.8.0","@usefy/use-init":"0.8.0","@usefy/use-list":"0.8.0","@usefy/use-hover":"0.8.0","@usefy/use-queue":"0.8.0","@usefy/use-timer":"0.8.0","@usefy/use-signal":"0.8.0","@usefy/use-toggle":"0.8.0","@usefy/use-counter":"0.8.0","@usefy/use-timeout":"0.8.0","@usefy/use-unmount":"0.8.0","@usefy/use-debounce":"0.8.0","@usefy/use-throttle":"0.8.0","@usefy/use-key-press":"0.8.0","@usefy/use-geolocation":"0.8.0","@usefy/use-history-state":"0.8.0","@usefy/use-local-storage":"0.8.0","@usefy/use-event-listener":"0.8.0","@usefy/use-memory-monitor":"0.8.0","@usefy/use-click-any-where":"0.8.0","@usefy/use-session-storage":"0.8.0","@usefy/use-on-click-outside":"0.8.0","@usefy/use-copy-to-clipboard":"0.8.0","@usefy/use-debounce-callback":"0.8.0","@usefy/use-throttle-callback":"0.8.0","@usefy/use-intersection-observer":"0.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.8.0_1782972502040_0.662527776650665","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@usefy/hooks","version":"0.9.0","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.9.0","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"636678699fbded1394b0c8902ffd976b0c1eabbe","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.9.0.tgz","fileCount":8,"integrity":"sha512-J6veFV1fKUtG5dK8uYSqwAj2zPdpHDDnnkuTevIsFJPp3MJ3UQK9PuqBdcCG+GXCuPGHUG9WKVsclJWdZnc1ww==","signatures":[{"sig":"MEQCIHbZVq1WfIrurwBCXJG5Gi4ZB8Mf3/83EgrMMnSSSBs+AiA4Z1qzEUD16LZrAv3TR0fbl9BmiZOdvcfga7xJtQeYlg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72201},"main":"./dist/index.js","_from":"file:usefy-hooks-0.9.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/c1e04e2f9a0b326642c3ccb4b550db35/usefy-hooks-0.9.0.tgz","_integrity":"sha512-J6veFV1fKUtG5dK8uYSqwAj2zPdpHDDnnkuTevIsFJPp3MJ3UQK9PuqBdcCG+GXCuPGHUG9WKVsclJWdZnc1ww==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"10.8.2","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","dependencies":{"@usefy/use-map":"0.9.0","@usefy/use-set":"0.9.0","@usefy/use-init":"0.9.0","@usefy/use-list":"0.9.0","@usefy/use-step":"0.9.0","@usefy/use-hover":"0.9.0","@usefy/use-queue":"0.9.0","@usefy/use-timer":"0.9.0","@usefy/use-signal":"0.9.0","@usefy/use-toggle":"0.9.0","@usefy/use-counter":"0.9.0","@usefy/use-timeout":"0.9.0","@usefy/use-unmount":"0.9.0","@usefy/use-debounce":"0.9.0","@usefy/use-throttle":"0.9.0","@usefy/use-key-press":"0.9.0","@usefy/use-geolocation":"0.9.0","@usefy/use-history-state":"0.9.0","@usefy/use-local-storage":"0.9.0","@usefy/use-event-listener":"0.9.0","@usefy/use-memory-monitor":"0.9.0","@usefy/use-click-any-where":"0.9.0","@usefy/use-session-storage":"0.9.0","@usefy/use-on-click-outside":"0.9.0","@usefy/use-copy-to-clipboard":"0.9.0","@usefy/use-debounce-callback":"0.9.0","@usefy/use-throttle-callback":"0.9.0","@usefy/use-intersection-observer":"0.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.9.0_1783043221206_0.4213558844444545","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@usefy/hooks","version":"0.10.0","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.10.0","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"80c69bb4389268835c87d3feb96cad388fda7351","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.10.0.tgz","fileCount":8,"integrity":"sha512-CfLyx0sWSlmFEEXtgwZi1ucrbfYK7hCmOF3ZqeXCBngmWztyokbnng8NzdZsjIK6quZkaPVwrGP3qsACQnNoPQ==","signatures":[{"sig":"MEUCIQDsA75fhsAVNw3uBvrdHY9n4T5WOAFzcZDlk17IlTr7dAIgWHFqRXrstjSkhzS8tFHuhXzikA0uAx/HGNpRXAAJbuc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75478},"main":"./dist/index.js","_from":"file:usefy-hooks-0.10.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/f99e5338633a8670f8a0b574f6e280ff/usefy-hooks-0.10.0.tgz","_integrity":"sha512-CfLyx0sWSlmFEEXtgwZi1ucrbfYK7hCmOF3ZqeXCBngmWztyokbnng8NzdZsjIK6quZkaPVwrGP3qsACQnNoPQ==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"10.8.2","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","dependencies":{"@usefy/use-map":"0.10.0","@usefy/use-set":"0.10.0","@usefy/use-init":"0.10.0","@usefy/use-list":"0.10.0","@usefy/use-step":"0.10.0","@usefy/use-hover":"0.10.0","@usefy/use-queue":"0.10.0","@usefy/use-timer":"0.10.0","@usefy/use-signal":"0.10.0","@usefy/use-toggle":"0.10.0","@usefy/use-counter":"0.10.0","@usefy/use-timeout":"0.10.0","@usefy/use-unmount":"0.10.0","@usefy/use-debounce":"0.10.0","@usefy/use-throttle":"0.10.0","@usefy/use-key-press":"0.10.0","@usefy/use-geolocation":"0.10.0","@usefy/use-window-size":"0.10.0","@usefy/use-history-state":"0.10.0","@usefy/use-local-storage":"0.10.0","@usefy/use-event-listener":"0.10.0","@usefy/use-memory-monitor":"0.10.0","@usefy/use-click-any-where":"0.10.0","@usefy/use-session-storage":"0.10.0","@usefy/use-on-click-outside":"0.10.0","@usefy/use-copy-to-clipboard":"0.10.0","@usefy/use-debounce-callback":"0.10.0","@usefy/use-throttle-callback":"0.10.0","@usefy/use-intersection-observer":"0.10.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.10.0_1783048385101_0.5534555325225445","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@usefy/hooks","version":"0.11.0","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.11.0","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"d2ffeeeea1d232a67a12904330962056a7775875","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.11.0.tgz","fileCount":8,"integrity":"sha512-LnVXgRkQLjJabK13dJXAmoaEVXlIF9kwr9ET3KNmjwiD5lxGMFTAz5d/XQG+10cqJcLqutz9pUI7dMcTulLVxw==","signatures":[{"sig":"MEUCIBVy0eXrzAGljKltyS+Z7ki7GtrQ/Ck+8QSZwzgyKSjLAiEA6xSTWnlJ0mrqZUsYe/ojZZr5pg/L2FmtkXF6aQkY4MM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87008},"main":"./dist/index.js","_from":"file:usefy-hooks-0.11.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/c4e3a85f28aa572257ed4c76b7b664df/usefy-hooks-0.11.0.tgz","_integrity":"sha512-LnVXgRkQLjJabK13dJXAmoaEVXlIF9kwr9ET3KNmjwiD5lxGMFTAz5d/XQG+10cqJcLqutz9pUI7dMcTulLVxw==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"10.8.2","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","dependencies":{"@usefy/use-map":"0.11.0","@usefy/use-set":"0.11.0","@usefy/use-init":"0.11.0","@usefy/use-list":"0.11.0","@usefy/use-step":"0.11.0","@usefy/use-hover":"0.11.0","@usefy/use-mount":"0.11.0","@usefy/use-queue":"0.11.0","@usefy/use-timer":"0.11.0","@usefy/use-latest":"0.11.0","@usefy/use-signal":"0.11.0","@usefy/use-toggle":"0.11.0","@usefy/use-counter":"0.11.0","@usefy/use-timeout":"0.11.0","@usefy/use-unmount":"0.11.0","@usefy/use-debounce":"0.11.0","@usefy/use-previous":"0.11.0","@usefy/use-throttle":"0.11.0","@usefy/use-is-client":"0.11.0","@usefy/use-key-press":"0.11.0","@usefy/use-geolocation":"0.11.0","@usefy/use-window-size":"0.11.0","@usefy/use-history-state":"0.11.0","@usefy/use-local-storage":"0.11.0","@usefy/use-update-effect":"0.11.0","@usefy/use-event-callback":"0.11.0","@usefy/use-event-listener":"0.11.0","@usefy/use-memory-monitor":"0.11.0","@usefy/use-click-any-where":"0.11.0","@usefy/use-is-first-render":"0.11.0","@usefy/use-session-storage":"0.11.0","@usefy/use-on-click-outside":"0.11.0","@usefy/use-copy-to-clipboard":"0.11.0","@usefy/use-debounce-callback":"0.11.0","@usefy/use-throttle-callback":"0.11.0","@usefy/use-intersection-observer":"0.11.0","@usefy/use-isomorphic-layout-effect":"0.11.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.11.0_1783057597733_0.05320904032988483","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@usefy/hooks","version":"0.12.0","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.12.0","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"f128bddb428a70237bfc88fe97cd91ef3372a34c","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.12.0.tgz","fileCount":8,"integrity":"sha512-1MvMcu9Qgkz7LOv8gpaHqIGMiskl4HkG91IHC7qThnpA3N8uY6k7B6PlJCOxyTES4oBB7HFf4aCrFzjZu8FPnA==","signatures":[{"sig":"MEYCIQC2lKO6yhS+NlTZ5X0vVXE21yqAu0RkrBQWeBXnTs4zpAIhAL1gjCsALC95zDzlY9PD2Rz83HMkWH/ISKkQSk2Clumj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97603},"main":"./dist/index.js","_from":"file:usefy-hooks-0.12.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/eaaadc07f88d2f918bb5b9f6185ce5d9/usefy-hooks-0.12.0.tgz","_integrity":"sha512-1MvMcu9Qgkz7LOv8gpaHqIGMiskl4HkG91IHC7qThnpA3N8uY6k7B6PlJCOxyTES4oBB7HFf4aCrFzjZu8FPnA==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"11.16.0","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@usefy/use-map":"0.12.0","@usefy/use-set":"0.12.0","@usefy/use-init":"0.12.0","@usefy/use-list":"0.12.0","@usefy/use-step":"0.12.0","@usefy/use-hover":"0.12.0","@usefy/use-mount":"0.12.0","@usefy/use-queue":"0.12.0","@usefy/use-timer":"0.12.0","@usefy/use-latest":"0.12.0","@usefy/use-signal":"0.12.0","@usefy/use-toggle":"0.12.0","@usefy/use-counter":"0.12.0","@usefy/use-timeout":"0.12.0","@usefy/use-unmount":"0.12.0","@usefy/use-debounce":"0.12.0","@usefy/use-previous":"0.12.0","@usefy/use-throttle":"0.12.0","@usefy/use-dark-mode":"0.12.0","@usefy/use-is-client":"0.12.0","@usefy/use-key-press":"0.12.0","@usefy/use-geolocation":"0.12.0","@usefy/use-media-query":"0.12.0","@usefy/use-window-size":"0.12.0","@usefy/use-history-state":"0.12.0","@usefy/use-local-storage":"0.12.0","@usefy/use-update-effect":"0.12.0","@usefy/use-document-title":"0.12.0","@usefy/use-event-callback":"0.12.0","@usefy/use-event-listener":"0.12.0","@usefy/use-memory-monitor":"0.12.0","@usefy/use-reduced-motion":"0.12.0","@usefy/use-click-any-where":"0.12.0","@usefy/use-is-first-render":"0.12.0","@usefy/use-session-storage":"0.12.0","@usefy/use-on-click-outside":"0.12.0","@usefy/use-copy-to-clipboard":"0.12.0","@usefy/use-debounce-callback":"0.12.0","@usefy/use-throttle-callback":"0.12.0","@usefy/use-intersection-observer":"0.12.0","@usefy/use-preferred-color-scheme":"0.12.0","@usefy/use-isomorphic-layout-effect":"0.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.12.0_1783063833885_0.9305472206980492","host":"s3://npm-registry-packages-npm-production"}},"0.12.1":{"name":"@usefy/hooks","version":"0.12.1","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.12.1","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"5e80831242cb50e0fe5d9822d9825a8a7d1f0fed","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.12.1.tgz","fileCount":8,"integrity":"sha512-/oZBzXeDoR7+Tkk0ielpQ29uYS1SIWpz66Gisy10rC7Vi/Oe9RiFegBUi1P98tsDT88mDSK5Z50q8JREOtFunQ==","signatures":[{"sig":"MEYCIQCrmabrP5J850RI3Mk6OI+WeLr3OU/JN3grevyuahqS9QIhAMCjga24ycGS/r3b3arpsKN4uo6kHzgGgAuiAPs5GN8p","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97603},"main":"./dist/index.js","_from":"file:usefy-hooks-0.12.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/497308967859b971f769e030d7b57de4/usefy-hooks-0.12.1.tgz","_integrity":"sha512-/oZBzXeDoR7+Tkk0ielpQ29uYS1SIWpz66Gisy10rC7Vi/Oe9RiFegBUi1P98tsDT88mDSK5Z50q8JREOtFunQ==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"11.16.0","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@usefy/use-map":"0.12.1","@usefy/use-set":"0.12.1","@usefy/use-init":"0.12.1","@usefy/use-list":"0.12.1","@usefy/use-step":"0.12.1","@usefy/use-hover":"0.12.1","@usefy/use-mount":"0.12.1","@usefy/use-queue":"0.12.1","@usefy/use-timer":"0.12.1","@usefy/use-latest":"0.12.1","@usefy/use-signal":"0.12.1","@usefy/use-toggle":"0.12.1","@usefy/use-counter":"0.12.1","@usefy/use-timeout":"0.12.1","@usefy/use-unmount":"0.12.1","@usefy/use-debounce":"0.12.1","@usefy/use-previous":"0.12.1","@usefy/use-throttle":"0.12.1","@usefy/use-dark-mode":"0.12.1","@usefy/use-is-client":"0.12.1","@usefy/use-key-press":"0.12.1","@usefy/use-geolocation":"0.12.1","@usefy/use-media-query":"0.12.1","@usefy/use-window-size":"0.12.1","@usefy/use-history-state":"0.12.1","@usefy/use-local-storage":"0.12.1","@usefy/use-update-effect":"0.12.1","@usefy/use-document-title":"0.12.1","@usefy/use-event-callback":"0.12.1","@usefy/use-event-listener":"0.12.1","@usefy/use-memory-monitor":"0.12.1","@usefy/use-reduced-motion":"0.12.1","@usefy/use-click-any-where":"0.12.1","@usefy/use-is-first-render":"0.12.1","@usefy/use-session-storage":"0.12.1","@usefy/use-on-click-outside":"0.12.1","@usefy/use-copy-to-clipboard":"0.12.1","@usefy/use-debounce-callback":"0.12.1","@usefy/use-throttle-callback":"0.12.1","@usefy/use-intersection-observer":"0.12.1","@usefy/use-preferred-color-scheme":"0.12.1","@usefy/use-isomorphic-layout-effect":"0.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.12.1_1783065579765_0.652161363425918","host":"s3://npm-registry-packages-npm-production"}},"0.12.2":{"name":"@usefy/hooks","version":"0.12.2","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.12.2","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"9620a5d18775aa7deb382e452d37d78b82402459","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.12.2.tgz","fileCount":8,"integrity":"sha512-8tQJRttLFS55xOmsIxSHingvzqMrFQ5T2WnYTyDT5Tvum58hrDZoyMMucbjqfK7zOstM1a1FcPDHgZ3YUAeMAA==","signatures":[{"sig":"MEUCIQDZrTiIBiPLrFJ8dcLisYrxzqRBQn/GmaXLd7DXdeVBGwIgNC/eTVOx1hSV50ffVydc2JZd9u1imdnh5m/bJA47OYg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97603},"main":"./dist/index.js","_from":"file:usefy-hooks-0.12.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/18fe48bb234850031f5636f46e5d7682/usefy-hooks-0.12.2.tgz","_integrity":"sha512-8tQJRttLFS55xOmsIxSHingvzqMrFQ5T2WnYTyDT5Tvum58hrDZoyMMucbjqfK7zOstM1a1FcPDHgZ3YUAeMAA==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"11.16.0","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@usefy/use-map":"0.12.2","@usefy/use-set":"0.12.2","@usefy/use-init":"0.12.2","@usefy/use-list":"0.12.2","@usefy/use-step":"0.12.2","@usefy/use-hover":"0.12.2","@usefy/use-mount":"0.12.2","@usefy/use-queue":"0.12.2","@usefy/use-timer":"0.12.2","@usefy/use-latest":"0.12.2","@usefy/use-signal":"0.12.2","@usefy/use-toggle":"0.12.2","@usefy/use-counter":"0.12.2","@usefy/use-timeout":"0.12.2","@usefy/use-unmount":"0.12.2","@usefy/use-debounce":"0.12.2","@usefy/use-previous":"0.12.2","@usefy/use-throttle":"0.12.2","@usefy/use-dark-mode":"0.12.2","@usefy/use-is-client":"0.12.2","@usefy/use-key-press":"0.12.2","@usefy/use-geolocation":"0.12.2","@usefy/use-media-query":"0.12.2","@usefy/use-window-size":"0.12.2","@usefy/use-history-state":"0.12.2","@usefy/use-local-storage":"0.12.2","@usefy/use-update-effect":"0.12.2","@usefy/use-document-title":"0.12.2","@usefy/use-event-callback":"0.12.2","@usefy/use-event-listener":"0.12.2","@usefy/use-memory-monitor":"0.12.2","@usefy/use-reduced-motion":"0.12.2","@usefy/use-click-any-where":"0.12.2","@usefy/use-is-first-render":"0.12.2","@usefy/use-session-storage":"0.12.2","@usefy/use-on-click-outside":"0.12.2","@usefy/use-copy-to-clipboard":"0.12.2","@usefy/use-debounce-callback":"0.12.2","@usefy/use-throttle-callback":"0.12.2","@usefy/use-intersection-observer":"0.12.2","@usefy/use-preferred-color-scheme":"0.12.2","@usefy/use-isomorphic-layout-effect":"0.12.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.12.2_1783070633123_0.29687225606492684","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@usefy/hooks","version":"0.13.0","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.13.0","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"38e0b36725035a08a116fab054ddba2fe03879bd","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.13.0.tgz","fileCount":8,"integrity":"sha512-y/wC3QoMq/JdofvV3HPx7Z7Q9/cGeqbVs2c6CgaNsKV65sTOb8uS75baNoLH7fNu3u8IwwaTI+uEPN+MUeKHeg==","signatures":[{"sig":"MEYCIQDPmQ/eJyxkN+Iinu8XqjsdvJEKhbc+NaPRwqfP7pA04gIhAPc87Bi1bkioCJnokT2G1Xn1QQiRfn9GFakJUfYkmS+o","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104143},"main":"./dist/index.js","_from":"file:usefy-hooks-0.13.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/a678ed0b73a512b9d534b863e1d295e3/usefy-hooks-0.13.0.tgz","_integrity":"sha512-y/wC3QoMq/JdofvV3HPx7Z7Q9/cGeqbVs2c6CgaNsKV65sTOb8uS75baNoLH7fNu3u8IwwaTI+uEPN+MUeKHeg==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"11.16.0","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@usefy/use-map":"0.13.0","@usefy/use-set":"0.13.0","@usefy/use-init":"0.13.0","@usefy/use-list":"0.13.0","@usefy/use-step":"0.13.0","@usefy/use-hover":"0.13.0","@usefy/use-mount":"0.13.0","@usefy/use-queue":"0.13.0","@usefy/use-timer":"0.13.0","@usefy/use-latest":"0.13.0","@usefy/use-signal":"0.13.0","@usefy/use-toggle":"0.13.0","@usefy/use-counter":"0.13.0","@usefy/use-timeout":"0.13.0","@usefy/use-unmount":"0.13.0","@usefy/use-debounce":"0.13.0","@usefy/use-previous":"0.13.0","@usefy/use-throttle":"0.13.0","@usefy/use-dark-mode":"0.13.0","@usefy/use-is-client":"0.13.0","@usefy/use-key-press":"0.13.0","@usefy/use-disclosure":"0.13.0","@usefy/use-geolocation":"0.13.0","@usefy/use-media-query":"0.13.0","@usefy/use-merged-refs":"0.13.0","@usefy/use-window-size":"0.13.0","@usefy/use-history-state":"0.13.0","@usefy/use-local-storage":"0.13.0","@usefy/use-update-effect":"0.13.0","@usefy/use-document-title":"0.13.0","@usefy/use-event-callback":"0.13.0","@usefy/use-event-listener":"0.13.0","@usefy/use-memory-monitor":"0.13.0","@usefy/use-reduced-motion":"0.13.0","@usefy/use-click-any-where":"0.13.0","@usefy/use-is-first-render":"0.13.0","@usefy/use-session-storage":"0.13.0","@usefy/use-on-click-outside":"0.13.0","@usefy/use-copy-to-clipboard":"0.13.0","@usefy/use-debounce-callback":"0.13.0","@usefy/use-throttle-callback":"0.13.0","@usefy/use-controllable-state":"0.13.0","@usefy/use-intersection-observer":"0.13.0","@usefy/use-preferred-color-scheme":"0.13.0","@usefy/use-isomorphic-layout-effect":"0.13.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.13.0_1783129955095_0.8120684446066597","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@usefy/hooks","version":"0.14.0","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.14.0","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"63e8caa4532505e9a77e6def95367c914146ed67","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.14.0.tgz","fileCount":8,"integrity":"sha512-EbymlRxzX00dhy60O1K4Cu05TlkzMZTW4K22xiSquc13VkyHZmTVrA2VrB27wiu48HZDSgY076fGZ9z0jkmPEw==","signatures":[{"sig":"MEYCIQCtN/3E3DlznN6yHVhMxQfK1MeHOkNv1ev6qeTQiHSQDQIhAOrggaEsuaQiYWkrElX74kgLay180ZnF2iWc1zwh+1v5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106548},"main":"./dist/index.js","_from":"file:usefy-hooks-0.14.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/29515dece585fd22df79d9e298b7c7a6/usefy-hooks-0.14.0.tgz","_integrity":"sha512-EbymlRxzX00dhy60O1K4Cu05TlkzMZTW4K22xiSquc13VkyHZmTVrA2VrB27wiu48HZDSgY076fGZ9z0jkmPEw==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"11.16.0","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@usefy/use-map":"0.14.0","@usefy/use-set":"0.14.0","@usefy/use-init":"0.14.0","@usefy/use-list":"0.14.0","@usefy/use-step":"0.14.0","@usefy/use-hover":"0.14.0","@usefy/use-mount":"0.14.0","@usefy/use-queue":"0.14.0","@usefy/use-timer":"0.14.0","@usefy/use-latest":"0.14.0","@usefy/use-signal":"0.14.0","@usefy/use-toggle":"0.14.0","@usefy/use-counter":"0.14.0","@usefy/use-measure":"0.14.0","@usefy/use-timeout":"0.14.0","@usefy/use-unmount":"0.14.0","@usefy/use-debounce":"0.14.0","@usefy/use-previous":"0.14.0","@usefy/use-throttle":"0.14.0","@usefy/use-dark-mode":"0.14.0","@usefy/use-is-client":"0.14.0","@usefy/use-key-press":"0.14.0","@usefy/use-disclosure":"0.14.0","@usefy/use-geolocation":"0.14.0","@usefy/use-media-query":"0.14.0","@usefy/use-merged-refs":"0.14.0","@usefy/use-window-size":"0.14.0","@usefy/use-history-state":"0.14.0","@usefy/use-local-storage":"0.14.0","@usefy/use-update-effect":"0.14.0","@usefy/use-document-title":"0.14.0","@usefy/use-event-callback":"0.14.0","@usefy/use-event-listener":"0.14.0","@usefy/use-memory-monitor":"0.14.0","@usefy/use-reduced-motion":"0.14.0","@usefy/use-click-any-where":"0.14.0","@usefy/use-is-first-render":"0.14.0","@usefy/use-session-storage":"0.14.0","@usefy/use-on-click-outside":"0.14.0","@usefy/use-copy-to-clipboard":"0.14.0","@usefy/use-debounce-callback":"0.14.0","@usefy/use-throttle-callback":"0.14.0","@usefy/use-controllable-state":"0.14.0","@usefy/use-intersection-observer":"0.14.0","@usefy/use-preferred-color-scheme":"0.14.0","@usefy/use-isomorphic-layout-effect":"0.14.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.14.0_1783134808104_0.9539547906927455","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@usefy/hooks","version":"0.15.0","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.15.0","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"e21425c1002b5617d7874f535298d32ce40e8cd4","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.15.0.tgz","fileCount":8,"integrity":"sha512-uKnA8LTOdprukNIyZ18D7Nb/tlCgPu/hb5nYLzlIvtpQnlfxepsA3WCvUf1880LM7R9CbylMcmBIeW7ZexwtlQ==","signatures":[{"sig":"MEYCIQCLOHZPuwk++ovym0NXrPGY9JLVXS/2387rmmNqt+y7BgIhAMxuAMQpTM2kLZ7Yfb5rmo51MRJwjrrh3aaD8hToHaBP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110239},"main":"./dist/index.js","_from":"file:usefy-hooks-0.15.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/6d3a3bdf552c9f0f0c4f8053ca1ed1e9/usefy-hooks-0.15.0.tgz","_integrity":"sha512-uKnA8LTOdprukNIyZ18D7Nb/tlCgPu/hb5nYLzlIvtpQnlfxepsA3WCvUf1880LM7R9CbylMcmBIeW7ZexwtlQ==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"11.16.0","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@usefy/use-map":"0.15.0","@usefy/use-set":"0.15.0","@usefy/use-init":"0.15.0","@usefy/use-list":"0.15.0","@usefy/use-step":"0.15.0","@usefy/use-hover":"0.15.0","@usefy/use-mount":"0.15.0","@usefy/use-queue":"0.15.0","@usefy/use-timer":"0.15.0","@usefy/use-latest":"0.15.0","@usefy/use-signal":"0.15.0","@usefy/use-toggle":"0.15.0","@usefy/use-counter":"0.15.0","@usefy/use-measure":"0.15.0","@usefy/use-timeout":"0.15.0","@usefy/use-unmount":"0.15.0","@usefy/use-debounce":"0.15.0","@usefy/use-previous":"0.15.0","@usefy/use-throttle":"0.15.0","@usefy/use-dark-mode":"0.15.0","@usefy/use-is-client":"0.15.0","@usefy/use-key-press":"0.15.0","@usefy/use-disclosure":"0.15.0","@usefy/use-geolocation":"0.15.0","@usefy/use-media-query":"0.15.0","@usefy/use-merged-refs":"0.15.0","@usefy/use-window-size":"0.15.0","@usefy/use-history-state":"0.15.0","@usefy/use-local-storage":"0.15.0","@usefy/use-update-effect":"0.15.0","@usefy/use-document-title":"0.15.0","@usefy/use-event-callback":"0.15.0","@usefy/use-event-listener":"0.15.0","@usefy/use-memory-monitor":"0.15.0","@usefy/use-reduced-motion":"0.15.0","@usefy/use-click-any-where":"0.15.0","@usefy/use-is-first-render":"0.15.0","@usefy/use-session-storage":"0.15.0","@usefy/use-on-click-outside":"0.15.0","@usefy/use-copy-to-clipboard":"0.15.0","@usefy/use-debounce-callback":"0.15.0","@usefy/use-mutation-observer":"0.15.0","@usefy/use-throttle-callback":"0.15.0","@usefy/use-controllable-state":"0.15.0","@usefy/use-intersection-observer":"0.15.0","@usefy/use-preferred-color-scheme":"0.15.0","@usefy/use-isomorphic-layout-effect":"0.15.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.15.0_1783138377559_0.23629043356651147","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@usefy/hooks","version":"0.16.0","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.16.0","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"67457098ce5dfa9a6ed5ee90108481e6259b3d2b","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.16.0.tgz","fileCount":8,"integrity":"sha512-atXCaP01ZuIAr/KI9KzZ4rmTNUxdTylyoK0DYXFfg0RGZ2YD+Qx2Y7pXuefw+R1Fn34CMvuqO2XKkDXVr4TNSw==","signatures":[{"sig":"MEUCIDoEVjZA4dZmkEQhu1rxEWR7Jkx4ED5Of2DC3IHsJdVMAiEA1ceXinCfih3BQJr0+Sec5fnG8NbNrPttO+L+xbmhyiY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":115599},"main":"./dist/index.js","_from":"file:usefy-hooks-0.16.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/ba1b0a4159aa9263c593731a341ac5c9/usefy-hooks-0.16.0.tgz","_integrity":"sha512-atXCaP01ZuIAr/KI9KzZ4rmTNUxdTylyoK0DYXFfg0RGZ2YD+Qx2Y7pXuefw+R1Fn34CMvuqO2XKkDXVr4TNSw==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"11.16.0","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@usefy/use-map":"0.16.0","@usefy/use-set":"0.16.0","@usefy/use-init":"0.16.0","@usefy/use-list":"0.16.0","@usefy/use-step":"0.16.0","@usefy/use-hover":"0.16.0","@usefy/use-mount":"0.16.0","@usefy/use-queue":"0.16.0","@usefy/use-timer":"0.16.0","@usefy/use-latest":"0.16.0","@usefy/use-signal":"0.16.0","@usefy/use-toggle":"0.16.0","@usefy/use-counter":"0.16.0","@usefy/use-measure":"0.16.0","@usefy/use-timeout":"0.16.0","@usefy/use-unmount":"0.16.0","@usefy/use-debounce":"0.16.0","@usefy/use-previous":"0.16.0","@usefy/use-throttle":"0.16.0","@usefy/use-dark-mode":"0.16.0","@usefy/use-is-client":"0.16.0","@usefy/use-key-press":"0.16.0","@usefy/use-disclosure":"0.16.0","@usefy/use-geolocation":"0.16.0","@usefy/use-media-query":"0.16.0","@usefy/use-merged-refs":"0.16.0","@usefy/use-scroll-lock":"0.16.0","@usefy/use-window-size":"0.16.0","@usefy/use-history-state":"0.16.0","@usefy/use-local-storage":"0.16.0","@usefy/use-update-effect":"0.16.0","@usefy/use-document-title":"0.16.0","@usefy/use-event-callback":"0.16.0","@usefy/use-event-listener":"0.16.0","@usefy/use-memory-monitor":"0.16.0","@usefy/use-reduced-motion":"0.16.0","@usefy/use-click-any-where":"0.16.0","@usefy/use-is-first-render":"0.16.0","@usefy/use-scroll-position":"0.16.0","@usefy/use-session-storage":"0.16.0","@usefy/use-on-click-outside":"0.16.0","@usefy/use-copy-to-clipboard":"0.16.0","@usefy/use-debounce-callback":"0.16.0","@usefy/use-mutation-observer":"0.16.0","@usefy/use-throttle-callback":"0.16.0","@usefy/use-controllable-state":"0.16.0","@usefy/use-intersection-observer":"0.16.0","@usefy/use-preferred-color-scheme":"0.16.0","@usefy/use-isomorphic-layout-effect":"0.16.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.16.0_1783142223762_0.9635218514768038","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@usefy/hooks","version":"0.17.0","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.17.0","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"56b57a80562ef6c087e3d8cf81d4703c5c527ee4","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.17.0.tgz","fileCount":8,"integrity":"sha512-0q5OKU0hQCdYI3ufVNp9yLjI5BAXarzdEHowe4mI/gzWkuJROvj4BV4BO/bbG+fQH1T0/vdvgg0KJ44mkmT4Ew==","signatures":[{"sig":"MEUCIC4W+WGwUP8CQ6eaS9ri8xbwAV56apm7SASaiZklFxc2AiEA0gvsU5alntPFHGl1xzip3IHXWtI4Apm5tjCsauVcvdA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":127871},"main":"./dist/index.js","_from":"file:usefy-hooks-0.17.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/dd6078d1f37bba5c2afacdec376f93eb/usefy-hooks-0.17.0.tgz","_integrity":"sha512-0q5OKU0hQCdYI3ufVNp9yLjI5BAXarzdEHowe4mI/gzWkuJROvj4BV4BO/bbG+fQH1T0/vdvgg0KJ44mkmT4Ew==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"11.16.0","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@usefy/use-map":"0.17.0","@usefy/use-set":"0.17.0","@usefy/use-init":"0.17.0","@usefy/use-list":"0.17.0","@usefy/use-step":"0.17.0","@usefy/use-hover":"0.17.0","@usefy/use-mount":"0.17.0","@usefy/use-queue":"0.17.0","@usefy/use-timer":"0.17.0","@usefy/use-latest":"0.17.0","@usefy/use-signal":"0.17.0","@usefy/use-toggle":"0.17.0","@usefy/use-counter":"0.17.0","@usefy/use-hotkeys":"0.17.0","@usefy/use-measure":"0.17.0","@usefy/use-timeout":"0.17.0","@usefy/use-unmount":"0.17.0","@usefy/use-debounce":"0.17.0","@usefy/use-previous":"0.17.0","@usefy/use-throttle":"0.17.0","@usefy/use-dark-mode":"0.17.0","@usefy/use-is-client":"0.17.0","@usefy/use-key-press":"0.17.0","@usefy/use-disclosure":"0.17.0","@usefy/use-focus-trap":"0.17.0","@usefy/use-long-press":"0.17.0","@usefy/use-geolocation":"0.17.0","@usefy/use-media-query":"0.17.0","@usefy/use-merged-refs":"0.17.0","@usefy/use-scroll-lock":"0.17.0","@usefy/use-window-size":"0.17.0","@usefy/use-focus-within":"0.17.0","@usefy/use-history-state":"0.17.0","@usefy/use-local-storage":"0.17.0","@usefy/use-update-effect":"0.17.0","@usefy/use-document-title":"0.17.0","@usefy/use-event-callback":"0.17.0","@usefy/use-event-listener":"0.17.0","@usefy/use-memory-monitor":"0.17.0","@usefy/use-reduced-motion":"0.17.0","@usefy/use-click-any-where":"0.17.0","@usefy/use-is-first-render":"0.17.0","@usefy/use-scroll-position":"0.17.0","@usefy/use-session-storage":"0.17.0","@usefy/use-on-click-outside":"0.17.0","@usefy/use-copy-to-clipboard":"0.17.0","@usefy/use-debounce-callback":"0.17.0","@usefy/use-mutation-observer":"0.17.0","@usefy/use-throttle-callback":"0.17.0","@usefy/use-controllable-state":"0.17.0","@usefy/use-intersection-observer":"0.17.0","@usefy/use-preferred-color-scheme":"0.17.0","@usefy/use-isomorphic-layout-effect":"0.17.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.17.0_1783230025962_0.44893931736744297","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"@usefy/hooks","version":"0.18.0","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.18.0","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"fc9d4016b46e26c57e6d932670dd37f6417a83d3","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.18.0.tgz","fileCount":8,"integrity":"sha512-d486TlvLTGDs6WWJmGC2HY69P5kjK007XXTxJWq7518K8FOT20MrFIk8b7Qtk9R/+6kcxlrW1885vm0Dn0vP/A==","signatures":[{"sig":"MEYCIQCC1bM9CO8ikl4KKyPGaDKvnIn1Zf8+AwcVAkXtdJ4OswIhAJ+ddAwF39zo5AdPYv8ne3qf9Gh5++WX8L7bHf4O3m52","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":142427},"main":"./dist/index.js","_from":"file:usefy-hooks-0.18.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/0a102a1b48fca62ac3914ac328c09c99/usefy-hooks-0.18.0.tgz","_integrity":"sha512-d486TlvLTGDs6WWJmGC2HY69P5kjK007XXTxJWq7518K8FOT20MrFIk8b7Qtk9R/+6kcxlrW1885vm0Dn0vP/A==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"11.16.0","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@usefy/use-map":"0.18.0","@usefy/use-set":"0.18.0","@usefy/use-init":"0.18.0","@usefy/use-list":"0.18.0","@usefy/use-step":"0.18.0","@usefy/use-async":"0.18.0","@usefy/use-hover":"0.18.0","@usefy/use-mount":"0.18.0","@usefy/use-queue":"0.18.0","@usefy/use-timer":"0.18.0","@usefy/use-latest":"0.18.0","@usefy/use-signal":"0.18.0","@usefy/use-toggle":"0.18.0","@usefy/use-counter":"0.18.0","@usefy/use-hotkeys":"0.18.0","@usefy/use-measure":"0.18.0","@usefy/use-polling":"0.18.0","@usefy/use-timeout":"0.18.0","@usefy/use-unmount":"0.18.0","@usefy/use-async-fn":"0.18.0","@usefy/use-debounce":"0.18.0","@usefy/use-previous":"0.18.0","@usefy/use-throttle":"0.18.0","@usefy/use-dark-mode":"0.18.0","@usefy/use-is-client":"0.18.0","@usefy/use-key-press":"0.18.0","@usefy/use-raf-state":"0.18.0","@usefy/use-disclosure":"0.18.0","@usefy/use-focus-trap":"0.18.0","@usefy/use-long-press":"0.18.0","@usefy/use-geolocation":"0.18.0","@usefy/use-media-query":"0.18.0","@usefy/use-merged-refs":"0.18.0","@usefy/use-scroll-lock":"0.18.0","@usefy/use-window-size":"0.18.0","@usefy/use-focus-within":"0.18.0","@usefy/use-history-state":"0.18.0","@usefy/use-local-storage":"0.18.0","@usefy/use-update-effect":"0.18.0","@usefy/use-document-title":"0.18.0","@usefy/use-event-callback":"0.18.0","@usefy/use-event-listener":"0.18.0","@usefy/use-memory-monitor":"0.18.0","@usefy/use-reduced-motion":"0.18.0","@usefy/use-click-any-where":"0.18.0","@usefy/use-is-first-render":"0.18.0","@usefy/use-scroll-position":"0.18.0","@usefy/use-session-storage":"0.18.0","@usefy/use-on-click-outside":"0.18.0","@usefy/use-copy-to-clipboard":"0.18.0","@usefy/use-debounce-callback":"0.18.0","@usefy/use-mutation-observer":"0.18.0","@usefy/use-throttle-callback":"0.18.0","@usefy/use-controllable-state":"0.18.0","@usefy/use-intersection-observer":"0.18.0","@usefy/use-preferred-color-scheme":"0.18.0","@usefy/use-isomorphic-layout-effect":"0.18.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.18.0_1783252570834_0.0759513000447285","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"@usefy/hooks","version":"0.19.0","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.19.0","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"5cab9787fef2dbd63b70be1c487e8f9b435fa5ae","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.19.0.tgz","fileCount":8,"integrity":"sha512-qD3UBTpErbmGbdbXUxdSSebmqrAM53ENk7oo9KpuoyyIFOoV4n0en97PqORf9hqgSEqm+Ln1q5Ih839Psxs/1A==","signatures":[{"sig":"MEUCIBePqtS3BCBVkTRPv/mPBTSLtkTVwYpCpWAdJsjLj8kWAiEA4Yx8I6cPhtXXrjN2gGMW0mgIky8BuwmqSD1fe3Bk2x0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":155174},"main":"./dist/index.js","_from":"file:usefy-hooks-0.19.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/3a001c3b1fe39a943190def973ff17c7/usefy-hooks-0.19.0.tgz","_integrity":"sha512-qD3UBTpErbmGbdbXUxdSSebmqrAM53ENk7oo9KpuoyyIFOoV4n0en97PqORf9hqgSEqm+Ln1q5Ih839Psxs/1A==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"11.16.0","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@usefy/use-map":"0.19.0","@usefy/use-set":"0.19.0","@usefy/use-init":"0.19.0","@usefy/use-list":"0.19.0","@usefy/use-step":"0.19.0","@usefy/use-async":"0.19.0","@usefy/use-hover":"0.19.0","@usefy/use-mount":"0.19.0","@usefy/use-queue":"0.19.0","@usefy/use-stack":"0.19.0","@usefy/use-timer":"0.19.0","@usefy/use-cookie":"0.19.0","@usefy/use-latest":"0.19.0","@usefy/use-signal":"0.19.0","@usefy/use-toggle":"0.19.0","@usefy/use-counter":"0.19.0","@usefy/use-hotkeys":"0.19.0","@usefy/use-measure":"0.19.0","@usefy/use-polling":"0.19.0","@usefy/use-timeout":"0.19.0","@usefy/use-unmount":"0.19.0","@usefy/use-async-fn":"0.19.0","@usefy/use-debounce":"0.19.0","@usefy/use-previous":"0.19.0","@usefy/use-throttle":"0.19.0","@usefy/use-dark-mode":"0.19.0","@usefy/use-is-client":"0.19.0","@usefy/use-key-press":"0.19.0","@usefy/use-raf-state":"0.19.0","@usefy/use-selection":"0.19.0","@usefy/use-disclosure":"0.19.0","@usefy/use-focus-trap":"0.19.0","@usefy/use-long-press":"0.19.0","@usefy/use-geolocation":"0.19.0","@usefy/use-media-query":"0.19.0","@usefy/use-merged-refs":"0.19.0","@usefy/use-scroll-lock":"0.19.0","@usefy/use-window-size":"0.19.0","@usefy/use-focus-within":"0.19.0","@usefy/use-object-state":"0.19.0","@usefy/use-history-state":"0.19.0","@usefy/use-local-storage":"0.19.0","@usefy/use-update-effect":"0.19.0","@usefy/use-document-title":"0.19.0","@usefy/use-event-callback":"0.19.0","@usefy/use-event-listener":"0.19.0","@usefy/use-memory-monitor":"0.19.0","@usefy/use-reduced-motion":"0.19.0","@usefy/use-click-any-where":"0.19.0","@usefy/use-is-first-render":"0.19.0","@usefy/use-scroll-position":"0.19.0","@usefy/use-session-storage":"0.19.0","@usefy/use-on-click-outside":"0.19.0","@usefy/use-copy-to-clipboard":"0.19.0","@usefy/use-debounce-callback":"0.19.0","@usefy/use-mutation-observer":"0.19.0","@usefy/use-throttle-callback":"0.19.0","@usefy/use-controllable-state":"0.19.0","@usefy/use-intersection-observer":"0.19.0","@usefy/use-preferred-color-scheme":"0.19.0","@usefy/use-isomorphic-layout-effect":"0.19.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.19.0_1783259372819_0.7180578662039534","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"@usefy/hooks","version":"0.20.0","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.20.0","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"8b5ec3f837705a8044bb48b10788e018c5b8bb5d","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.20.0.tgz","fileCount":8,"integrity":"sha512-lzG2t8R0aEV6DG90chjasbINRv/QI9jll9/57nHyJKdjCAEErn/Dg+GCuzm64fkjtyHA1gtX5EY41HJNUdJTIw==","signatures":[{"sig":"MEUCIHbupcSk8+RG+IQd8jpaDdsdmksDRq6uWL9AsgpIeWzRAiEA03MmHPNs+8l/wUSz14xAM7Ru6WeWko53gXHHPy1p1BQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":184596},"main":"./dist/index.js","_from":"file:usefy-hooks-0.20.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/dfb0ff9b53435211bd8894866047dc7e/usefy-hooks-0.20.0.tgz","_integrity":"sha512-lzG2t8R0aEV6DG90chjasbINRv/QI9jll9/57nHyJKdjCAEErn/Dg+GCuzm64fkjtyHA1gtX5EY41HJNUdJTIw==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/usefy"},"_npmVersion":"11.16.0","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@usefy/use-map":"0.20.0","@usefy/use-set":"0.20.0","@usefy/use-idle":"0.20.0","@usefy/use-init":"0.20.0","@usefy/use-list":"0.20.0","@usefy/use-step":"0.20.0","@usefy/use-async":"0.20.0","@usefy/use-hover":"0.20.0","@usefy/use-mount":"0.20.0","@usefy/use-queue":"0.20.0","@usefy/use-stack":"0.20.0","@usefy/use-timer":"0.20.0","@usefy/use-cookie":"0.20.0","@usefy/use-latest":"0.20.0","@usefy/use-script":"0.20.0","@usefy/use-signal":"0.20.0","@usefy/use-toggle":"0.20.0","@usefy/use-counter":"0.20.0","@usefy/use-hotkeys":"0.20.0","@usefy/use-measure":"0.20.0","@usefy/use-polling":"0.20.0","@usefy/use-timeout":"0.20.0","@usefy/use-unmount":"0.20.0","@usefy/use-async-fn":"0.20.0","@usefy/use-debounce":"0.20.0","@usefy/use-previous":"0.20.0","@usefy/use-throttle":"0.20.0","@usefy/use-dark-mode":"0.20.0","@usefy/use-is-client":"0.20.0","@usefy/use-key-press":"0.20.0","@usefy/use-raf-state":"0.20.0","@usefy/use-selection":"0.20.0","@usefy/use-disclosure":"0.20.0","@usefy/use-focus-trap":"0.20.0","@usefy/use-long-press":"0.20.0","@usefy/use-pagination":"0.20.0","@usefy/use-permission":"0.20.0","@usefy/use-geolocation":"0.20.0","@usefy/use-media-query":"0.20.0","@usefy/use-merged-refs":"0.20.0","@usefy/use-scroll-lock":"0.20.0","@usefy/use-window-size":"0.20.0","@usefy/use-focus-within":"0.20.0","@usefy/use-object-state":"0.20.0","@usefy/use-history-state":"0.20.0","@usefy/use-local-storage":"0.20.0","@usefy/use-network-state":"0.20.0","@usefy/use-update-effect":"0.20.0","@usefy/use-document-title":"0.20.0","@usefy/use-event-callback":"0.20.0","@usefy/use-event-listener":"0.20.0","@usefy/use-memory-monitor":"0.20.0","@usefy/use-reduced-motion":"0.20.0","@usefy/use-click-any-where":"0.20.0","@usefy/use-infinite-scroll":"0.20.0","@usefy/use-is-first-render":"0.20.0","@usefy/use-page-visibility":"0.20.0","@usefy/use-scroll-position":"0.20.0","@usefy/use-session-storage":"0.20.0","@usefy/use-on-click-outside":"0.20.0","@usefy/use-copy-to-clipboard":"0.20.0","@usefy/use-debounce-callback":"0.20.0","@usefy/use-mutation-observer":"0.20.0","@usefy/use-throttle-callback":"0.20.0","@usefy/use-controllable-state":"0.20.0","@usefy/use-intersection-observer":"0.20.0","@usefy/use-preferred-color-scheme":"0.20.0","@usefy/use-isomorphic-layout-effect":"0.20.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.20.0_1783342861908_0.2142244941625595","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"name":"@usefy/hooks","version":"0.21.0","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.21.0","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"cd70e2c1a83ad151d2d882b17c7e21f966834ba0","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.21.0.tgz","fileCount":8,"integrity":"sha512-tSL9rz9PA80n4ykA4pOlxf3CvKD/2mzUe3HJ906g3u5lhUCEwv0XI5XKPri257JuEmILWVh9bKg7n8pebhYuqw==","signatures":[{"sig":"MEQCIEsc4BdFgPERSon5v15XTqbT8AdEFKKYFJpxPbTaOGjWAiBjT72DQ+IXD/KEHUw5Xn9EBHvoPVlyuqy0zPj/TQC1yA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":184540},"main":"./dist/index.js","_from":"file:usefy-hooks-0.21.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/0a96e0bcccc215998137227fed09e1e4/usefy-hooks-0.21.0.tgz","_integrity":"sha512-tSL9rz9PA80n4ykA4pOlxf3CvKD/2mzUe3HJ906g3u5lhUCEwv0XI5XKPri257JuEmILWVh9bKg7n8pebhYuqw==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/hooks"},"_npmVersion":"11.16.0","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@usefy/use-map":"0.21.0","@usefy/use-set":"0.21.0","@usefy/use-idle":"0.21.0","@usefy/use-init":"0.21.0","@usefy/use-list":"0.21.0","@usefy/use-step":"0.21.0","@usefy/use-async":"0.21.0","@usefy/use-hover":"0.21.0","@usefy/use-mount":"0.21.0","@usefy/use-queue":"0.21.0","@usefy/use-stack":"0.21.0","@usefy/use-timer":"0.21.0","@usefy/use-cookie":"0.21.0","@usefy/use-latest":"0.21.0","@usefy/use-script":"0.21.0","@usefy/use-signal":"0.21.0","@usefy/use-toggle":"0.21.0","@usefy/use-counter":"0.21.0","@usefy/use-hotkeys":"0.21.0","@usefy/use-measure":"0.21.0","@usefy/use-polling":"0.21.0","@usefy/use-timeout":"0.21.0","@usefy/use-unmount":"0.21.0","@usefy/use-async-fn":"0.21.0","@usefy/use-debounce":"0.21.0","@usefy/use-previous":"0.21.0","@usefy/use-throttle":"0.21.0","@usefy/use-dark-mode":"0.21.0","@usefy/use-is-client":"0.21.0","@usefy/use-key-press":"0.21.0","@usefy/use-raf-state":"0.21.0","@usefy/use-selection":"0.21.0","@usefy/use-disclosure":"0.21.0","@usefy/use-focus-trap":"0.21.0","@usefy/use-long-press":"0.21.0","@usefy/use-pagination":"0.21.0","@usefy/use-permission":"0.21.0","@usefy/use-geolocation":"0.21.0","@usefy/use-media-query":"0.21.0","@usefy/use-merged-refs":"0.21.0","@usefy/use-scroll-lock":"0.21.0","@usefy/use-window-size":"0.21.0","@usefy/use-focus-within":"0.21.0","@usefy/use-object-state":"0.21.0","@usefy/use-history-state":"0.21.0","@usefy/use-local-storage":"0.21.0","@usefy/use-network-state":"0.21.0","@usefy/use-update-effect":"0.21.0","@usefy/use-document-title":"0.21.0","@usefy/use-event-callback":"0.21.0","@usefy/use-event-listener":"0.21.0","@usefy/use-memory-monitor":"0.21.0","@usefy/use-reduced-motion":"0.21.0","@usefy/use-click-any-where":"0.21.0","@usefy/use-infinite-scroll":"0.21.0","@usefy/use-is-first-render":"0.21.0","@usefy/use-page-visibility":"0.21.0","@usefy/use-scroll-position":"0.21.0","@usefy/use-session-storage":"0.21.0","@usefy/use-on-click-outside":"0.21.0","@usefy/use-copy-to-clipboard":"0.21.0","@usefy/use-debounce-callback":"0.21.0","@usefy/use-mutation-observer":"0.21.0","@usefy/use-throttle-callback":"0.21.0","@usefy/use-controllable-state":"0.21.0","@usefy/use-intersection-observer":"0.21.0","@usefy/use-preferred-color-scheme":"0.21.0","@usefy/use-isomorphic-layout-effect":"0.21.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.21.0_1783350137090_0.08135525223324169","host":"s3://npm-registry-packages-npm-production"}},"0.21.1":{"name":"@usefy/hooks","version":"0.21.1","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.21.1","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"99d69a6fe4c0f4f86da38fbb9eb5914ab0fcbf79","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.21.1.tgz","fileCount":8,"integrity":"sha512-QL0e1be41HKlcSS8RlUHKY5nikHHugyDe3Oz+PaIlVA1jC8ZJkm8kWwNt8QpiUbvSkMdAfjIa7/qtPn2/vU6AQ==","signatures":[{"sig":"MEUCIFTsfJeWtKYXVCb+LxAf1hQq4u4ZinVX0UJvASan9FkLAiEAi+UnjGSuTOdDyVL2XEqoOBPxASHmBiAxuRAuq//2QS0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":184540},"main":"./dist/index.js","_from":"file:usefy-hooks-0.21.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/409eb8306316dda4030a152b9597c646/usefy-hooks-0.21.1.tgz","_integrity":"sha512-QL0e1be41HKlcSS8RlUHKY5nikHHugyDe3Oz+PaIlVA1jC8ZJkm8kWwNt8QpiUbvSkMdAfjIa7/qtPn2/vU6AQ==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/hooks"},"_npmVersion":"11.16.0","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@usefy/use-map":"0.21.1","@usefy/use-set":"0.21.1","@usefy/use-idle":"0.21.1","@usefy/use-init":"0.21.1","@usefy/use-list":"0.21.1","@usefy/use-step":"0.21.1","@usefy/use-async":"0.21.1","@usefy/use-hover":"0.21.1","@usefy/use-mount":"0.21.1","@usefy/use-queue":"0.21.1","@usefy/use-stack":"0.21.1","@usefy/use-timer":"0.21.1","@usefy/use-cookie":"0.21.1","@usefy/use-latest":"0.21.1","@usefy/use-script":"0.21.1","@usefy/use-signal":"0.21.1","@usefy/use-toggle":"0.21.1","@usefy/use-counter":"0.21.1","@usefy/use-hotkeys":"0.21.1","@usefy/use-measure":"0.21.1","@usefy/use-polling":"0.21.1","@usefy/use-timeout":"0.21.1","@usefy/use-unmount":"0.21.1","@usefy/use-async-fn":"0.21.1","@usefy/use-debounce":"0.21.1","@usefy/use-previous":"0.21.1","@usefy/use-throttle":"0.21.1","@usefy/use-dark-mode":"0.21.1","@usefy/use-is-client":"0.21.1","@usefy/use-key-press":"0.21.1","@usefy/use-raf-state":"0.21.1","@usefy/use-selection":"0.21.1","@usefy/use-disclosure":"0.21.1","@usefy/use-focus-trap":"0.21.1","@usefy/use-long-press":"0.21.1","@usefy/use-pagination":"0.21.1","@usefy/use-permission":"0.21.1","@usefy/use-geolocation":"0.21.1","@usefy/use-media-query":"0.21.1","@usefy/use-merged-refs":"0.21.1","@usefy/use-scroll-lock":"0.21.1","@usefy/use-window-size":"0.21.1","@usefy/use-focus-within":"0.21.1","@usefy/use-object-state":"0.21.1","@usefy/use-history-state":"0.21.1","@usefy/use-local-storage":"0.21.1","@usefy/use-network-state":"0.21.1","@usefy/use-update-effect":"0.21.1","@usefy/use-document-title":"0.21.1","@usefy/use-event-callback":"0.21.1","@usefy/use-event-listener":"0.21.1","@usefy/use-memory-monitor":"0.21.1","@usefy/use-reduced-motion":"0.21.1","@usefy/use-click-any-where":"0.21.1","@usefy/use-infinite-scroll":"0.21.1","@usefy/use-is-first-render":"0.21.1","@usefy/use-page-visibility":"0.21.1","@usefy/use-scroll-position":"0.21.1","@usefy/use-session-storage":"0.21.1","@usefy/use-on-click-outside":"0.21.1","@usefy/use-copy-to-clipboard":"0.21.1","@usefy/use-debounce-callback":"0.21.1","@usefy/use-mutation-observer":"0.21.1","@usefy/use-throttle-callback":"0.21.1","@usefy/use-controllable-state":"0.21.1","@usefy/use-intersection-observer":"0.21.1","@usefy/use-preferred-color-scheme":"0.21.1","@usefy/use-isomorphic-layout-effect":"0.21.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.21.1_1783428129196_0.44083294074397283","host":"s3://npm-registry-packages-npm-production"}},"0.22.0":{"name":"@usefy/hooks","version":"0.22.0","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.22.0","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"07c15240442fe967baa8e264c7359c94b9f7d2f8","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.22.0.tgz","fileCount":8,"integrity":"sha512-8vMu9GpxMWNlIFthlLuV2V7DohecWF0Q24XOOWCmf9Na/Ra1Jb/p5ZKDIA80gvn/T200l+jlBAQtrfcZ0qY0aw==","signatures":[{"sig":"MEQCIBiGKhQXD3gaXUceN1Yr8l5Y9CyI837Ih7fBUku1sBqgAiAKoV7WffiHrnQBLwG139BPYT59/b9/8I4DEEhoGfcR0Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189992},"main":"./dist/index.js","_from":"file:usefy-hooks-0.22.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/52a2717b775bce5c75dc872259211024/usefy-hooks-0.22.0.tgz","_integrity":"sha512-8vMu9GpxMWNlIFthlLuV2V7DohecWF0Q24XOOWCmf9Na/Ra1Jb/p5ZKDIA80gvn/T200l+jlBAQtrfcZ0qY0aw==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/hooks"},"_npmVersion":"11.16.0","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@usefy/use-map":"0.22.0","@usefy/use-set":"0.22.0","@usefy/use-idle":"0.22.0","@usefy/use-init":"0.22.0","@usefy/use-list":"0.22.0","@usefy/use-step":"0.22.0","@usefy/use-async":"0.22.0","@usefy/use-hover":"0.22.0","@usefy/use-mount":"0.22.0","@usefy/use-queue":"0.22.0","@usefy/use-stack":"0.22.0","@usefy/use-timer":"0.22.0","@usefy/use-cookie":"0.22.0","@usefy/use-latest":"0.22.0","@usefy/use-script":"0.22.0","@usefy/use-signal":"0.22.0","@usefy/use-toggle":"0.22.0","@usefy/use-counter":"0.22.0","@usefy/use-hotkeys":"0.22.0","@usefy/use-measure":"0.22.0","@usefy/use-polling":"0.22.0","@usefy/use-timeout":"0.22.0","@usefy/use-unmount":"0.22.0","@usefy/use-async-fn":"0.22.0","@usefy/use-debounce":"0.22.0","@usefy/use-interval":"0.22.0","@usefy/use-previous":"0.22.0","@usefy/use-throttle":"0.22.0","@usefy/use-dark-mode":"0.22.0","@usefy/use-is-client":"0.22.0","@usefy/use-key-press":"0.22.0","@usefy/use-raf-state":"0.22.0","@usefy/use-selection":"0.22.0","@usefy/use-disclosure":"0.22.0","@usefy/use-focus-trap":"0.22.0","@usefy/use-long-press":"0.22.0","@usefy/use-pagination":"0.22.0","@usefy/use-permission":"0.22.0","@usefy/use-geolocation":"0.22.0","@usefy/use-media-query":"0.22.0","@usefy/use-merged-refs":"0.22.0","@usefy/use-scroll-lock":"0.22.0","@usefy/use-window-size":"0.22.0","@usefy/use-focus-within":"0.22.0","@usefy/use-object-state":"0.22.0","@usefy/use-history-state":"0.22.0","@usefy/use-local-storage":"0.22.0","@usefy/use-network-state":"0.22.0","@usefy/use-update-effect":"0.22.0","@usefy/use-document-title":"0.22.0","@usefy/use-event-callback":"0.22.0","@usefy/use-event-listener":"0.22.0","@usefy/use-memory-monitor":"0.22.0","@usefy/use-reduced-motion":"0.22.0","@usefy/use-click-any-where":"0.22.0","@usefy/use-infinite-scroll":"0.22.0","@usefy/use-is-first-render":"0.22.0","@usefy/use-page-visibility":"0.22.0","@usefy/use-resize-observer":"0.22.0","@usefy/use-scroll-position":"0.22.0","@usefy/use-session-storage":"0.22.0","@usefy/use-on-click-outside":"0.22.0","@usefy/use-copy-to-clipboard":"0.22.0","@usefy/use-debounce-callback":"0.22.0","@usefy/use-mutation-observer":"0.22.0","@usefy/use-throttle-callback":"0.22.0","@usefy/use-controllable-state":"0.22.0","@usefy/use-intersection-observer":"0.22.0","@usefy/use-preferred-color-scheme":"0.22.0","@usefy/use-isomorphic-layout-effect":"0.22.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.22.0_1783474448325_0.26259459295563947","host":"s3://npm-registry-packages-npm-production"}},"0.23.0":{"name":"@usefy/hooks","version":"0.23.0","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.23.0","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"0444ee8c4177c9188cf1df86ce29b59ce383ba30","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.23.0.tgz","fileCount":8,"integrity":"sha512-+MgLzmHVuNW2X+9k8hFEe1w0gvFdPpjC4D4g98SyxTogypteXrxDkrumdn4v9Jk/5HKlOv6SuYcB91Lb82eRmw==","signatures":[{"sig":"MEUCIEAR5/rtcR4pWpX/SjWvuhkzGYzu/tSULsc8w2HUOzO7AiEAzKVescBmY49yVmokxbW/mjAOo9ljhedt+0Mlc88Z9f8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189992},"main":"./dist/index.js","_from":"file:usefy-hooks-0.23.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/2398198555146db0f92b9ebac3dbcb97/usefy-hooks-0.23.0.tgz","_integrity":"sha512-+MgLzmHVuNW2X+9k8hFEe1w0gvFdPpjC4D4g98SyxTogypteXrxDkrumdn4v9Jk/5HKlOv6SuYcB91Lb82eRmw==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/hooks"},"_npmVersion":"11.16.0","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@usefy/use-map":"0.23.0","@usefy/use-set":"0.23.0","@usefy/use-idle":"0.23.0","@usefy/use-init":"0.23.0","@usefy/use-list":"0.23.0","@usefy/use-step":"0.23.0","@usefy/use-async":"0.23.0","@usefy/use-hover":"0.23.0","@usefy/use-mount":"0.23.0","@usefy/use-queue":"0.23.0","@usefy/use-stack":"0.23.0","@usefy/use-timer":"0.23.0","@usefy/use-cookie":"0.23.0","@usefy/use-latest":"0.23.0","@usefy/use-script":"0.23.0","@usefy/use-signal":"0.23.0","@usefy/use-toggle":"0.23.0","@usefy/use-counter":"0.23.0","@usefy/use-hotkeys":"0.23.0","@usefy/use-measure":"0.23.0","@usefy/use-polling":"0.23.0","@usefy/use-timeout":"0.23.0","@usefy/use-unmount":"0.23.0","@usefy/use-async-fn":"0.23.0","@usefy/use-debounce":"0.23.0","@usefy/use-interval":"0.23.0","@usefy/use-previous":"0.23.0","@usefy/use-throttle":"0.23.0","@usefy/use-dark-mode":"0.23.0","@usefy/use-is-client":"0.23.0","@usefy/use-key-press":"0.23.0","@usefy/use-raf-state":"0.23.0","@usefy/use-selection":"0.23.0","@usefy/use-disclosure":"0.23.0","@usefy/use-focus-trap":"0.23.0","@usefy/use-long-press":"0.23.0","@usefy/use-pagination":"0.23.0","@usefy/use-permission":"0.23.0","@usefy/use-geolocation":"0.23.0","@usefy/use-media-query":"0.23.0","@usefy/use-merged-refs":"0.23.0","@usefy/use-scroll-lock":"0.23.0","@usefy/use-window-size":"0.23.0","@usefy/use-focus-within":"0.23.0","@usefy/use-object-state":"0.23.0","@usefy/use-history-state":"0.23.0","@usefy/use-local-storage":"0.23.0","@usefy/use-network-state":"0.23.0","@usefy/use-update-effect":"0.23.0","@usefy/use-document-title":"0.23.0","@usefy/use-event-callback":"0.23.0","@usefy/use-event-listener":"0.23.0","@usefy/use-memory-monitor":"0.23.0","@usefy/use-reduced-motion":"0.23.0","@usefy/use-click-any-where":"0.23.0","@usefy/use-infinite-scroll":"0.23.0","@usefy/use-is-first-render":"0.23.0","@usefy/use-page-visibility":"0.23.0","@usefy/use-resize-observer":"0.23.0","@usefy/use-scroll-position":"0.23.0","@usefy/use-session-storage":"0.23.0","@usefy/use-on-click-outside":"0.23.0","@usefy/use-copy-to-clipboard":"0.23.0","@usefy/use-debounce-callback":"0.23.0","@usefy/use-mutation-observer":"0.23.0","@usefy/use-throttle-callback":"0.23.0","@usefy/use-controllable-state":"0.23.0","@usefy/use-intersection-observer":"0.23.0","@usefy/use-preferred-color-scheme":"0.23.0","@usefy/use-isomorphic-layout-effect":"0.23.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.23.0_1783499602466_0.9030202102085558","host":"s3://npm-registry-packages-npm-production"}},"0.24.0":{"name":"@usefy/hooks","version":"0.24.0","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.24.0","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"76d456039473b5170581dc54a8105c597c8e906a","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.24.0.tgz","fileCount":8,"integrity":"sha512-pLIJIPn7CK/127jV4snOkWEDPP38GqMByUCadMBsd5HLte43yEdiCbwrHXT9/T3KndtsvDefOfg136RciNNMag==","signatures":[{"sig":"MEYCIQDds8voIpPILOfweXuUUypt1l97brkMRblO1eNaripfjgIhAPomiq/mzTjc+KIyRJTErFoJRVafaPUsrFZWzPy4Vt2i","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189992},"main":"./dist/index.js","_from":"file:usefy-hooks-0.24.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/8bf3704e1d7bb5c7900250fdef690909/usefy-hooks-0.24.0.tgz","_integrity":"sha512-pLIJIPn7CK/127jV4snOkWEDPP38GqMByUCadMBsd5HLte43yEdiCbwrHXT9/T3KndtsvDefOfg136RciNNMag==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/hooks"},"_npmVersion":"11.16.0","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@usefy/use-map":"0.24.0","@usefy/use-set":"0.24.0","@usefy/use-idle":"0.24.0","@usefy/use-init":"0.24.0","@usefy/use-list":"0.24.0","@usefy/use-step":"0.24.0","@usefy/use-async":"0.24.0","@usefy/use-hover":"0.24.0","@usefy/use-mount":"0.24.0","@usefy/use-queue":"0.24.0","@usefy/use-stack":"0.24.0","@usefy/use-timer":"0.24.0","@usefy/use-cookie":"0.24.0","@usefy/use-latest":"0.24.0","@usefy/use-script":"0.24.0","@usefy/use-signal":"0.24.0","@usefy/use-toggle":"0.24.0","@usefy/use-counter":"0.24.0","@usefy/use-hotkeys":"0.24.0","@usefy/use-measure":"0.24.0","@usefy/use-polling":"0.24.0","@usefy/use-timeout":"0.24.0","@usefy/use-unmount":"0.24.0","@usefy/use-async-fn":"0.24.0","@usefy/use-debounce":"0.24.0","@usefy/use-interval":"0.24.0","@usefy/use-previous":"0.24.0","@usefy/use-throttle":"0.24.0","@usefy/use-dark-mode":"0.24.0","@usefy/use-is-client":"0.24.0","@usefy/use-key-press":"0.24.0","@usefy/use-raf-state":"0.24.0","@usefy/use-selection":"0.24.0","@usefy/use-disclosure":"0.24.0","@usefy/use-focus-trap":"0.24.0","@usefy/use-long-press":"0.24.0","@usefy/use-pagination":"0.24.0","@usefy/use-permission":"0.24.0","@usefy/use-geolocation":"0.24.0","@usefy/use-media-query":"0.24.0","@usefy/use-merged-refs":"0.24.0","@usefy/use-scroll-lock":"0.24.0","@usefy/use-window-size":"0.24.0","@usefy/use-focus-within":"0.24.0","@usefy/use-object-state":"0.24.0","@usefy/use-history-state":"0.24.0","@usefy/use-local-storage":"0.24.0","@usefy/use-network-state":"0.24.0","@usefy/use-update-effect":"0.24.0","@usefy/use-document-title":"0.24.0","@usefy/use-event-callback":"0.24.0","@usefy/use-event-listener":"0.24.0","@usefy/use-memory-monitor":"0.24.0","@usefy/use-reduced-motion":"0.24.0","@usefy/use-click-any-where":"0.24.0","@usefy/use-infinite-scroll":"0.24.0","@usefy/use-is-first-render":"0.24.0","@usefy/use-page-visibility":"0.24.0","@usefy/use-resize-observer":"0.24.0","@usefy/use-scroll-position":"0.24.0","@usefy/use-session-storage":"0.24.0","@usefy/use-on-click-outside":"0.24.0","@usefy/use-copy-to-clipboard":"0.24.0","@usefy/use-debounce-callback":"0.24.0","@usefy/use-mutation-observer":"0.24.0","@usefy/use-throttle-callback":"0.24.0","@usefy/use-controllable-state":"0.24.0","@usefy/use-intersection-observer":"0.24.0","@usefy/use-preferred-color-scheme":"0.24.0","@usefy/use-isomorphic-layout-effect":"0.24.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.24.0_1783512233014_0.2699857460559014","host":"s3://npm-registry-packages-npm-production"}},"0.25.0":{"name":"@usefy/hooks","version":"0.25.0","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.25.0","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"fa02bff6f178e8148c22321a43f1ce51dd5e802a","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.25.0.tgz","fileCount":8,"integrity":"sha512-nAl5UXJD9r7xNVufT5UoIapafTaWzNy6w+KdVKXOIcqFRiGNZ6ZxIrCMw45t2hv+OP35BE3C+SCgco3Yzc+nmA==","signatures":[{"sig":"MEUCIHDFBrAh5ZVL8I4RQ8+2h2l4kDdfmO9lZJVwJU/Z01UyAiEAqRMdnRYf+zHdKuiClERB4dCyEl7b2qgGp5zibFw5rUA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189992},"main":"./dist/index.js","_from":"file:usefy-hooks-0.25.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/364640716a27c3406494ea7efb21efa1/usefy-hooks-0.25.0.tgz","_integrity":"sha512-nAl5UXJD9r7xNVufT5UoIapafTaWzNy6w+KdVKXOIcqFRiGNZ6ZxIrCMw45t2hv+OP35BE3C+SCgco3Yzc+nmA==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/hooks"},"_npmVersion":"11.16.0","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@usefy/use-map":"0.25.0","@usefy/use-set":"0.25.0","@usefy/use-idle":"0.25.0","@usefy/use-init":"0.25.0","@usefy/use-list":"0.25.0","@usefy/use-step":"0.25.0","@usefy/use-async":"0.25.0","@usefy/use-hover":"0.25.0","@usefy/use-mount":"0.25.0","@usefy/use-queue":"0.25.0","@usefy/use-stack":"0.25.0","@usefy/use-timer":"0.25.0","@usefy/use-cookie":"0.25.0","@usefy/use-latest":"0.25.0","@usefy/use-script":"0.25.0","@usefy/use-signal":"0.25.0","@usefy/use-toggle":"0.25.0","@usefy/use-counter":"0.25.0","@usefy/use-hotkeys":"0.25.0","@usefy/use-measure":"0.25.0","@usefy/use-polling":"0.25.0","@usefy/use-timeout":"0.25.0","@usefy/use-unmount":"0.25.0","@usefy/use-async-fn":"0.25.0","@usefy/use-debounce":"0.25.0","@usefy/use-interval":"0.25.0","@usefy/use-previous":"0.25.0","@usefy/use-throttle":"0.25.0","@usefy/use-dark-mode":"0.25.0","@usefy/use-is-client":"0.25.0","@usefy/use-key-press":"0.25.0","@usefy/use-raf-state":"0.25.0","@usefy/use-selection":"0.25.0","@usefy/use-disclosure":"0.25.0","@usefy/use-focus-trap":"0.25.0","@usefy/use-long-press":"0.25.0","@usefy/use-pagination":"0.25.0","@usefy/use-permission":"0.25.0","@usefy/use-geolocation":"0.25.0","@usefy/use-media-query":"0.25.0","@usefy/use-merged-refs":"0.25.0","@usefy/use-scroll-lock":"0.25.0","@usefy/use-window-size":"0.25.0","@usefy/use-focus-within":"0.25.0","@usefy/use-object-state":"0.25.0","@usefy/use-history-state":"0.25.0","@usefy/use-local-storage":"0.25.0","@usefy/use-network-state":"0.25.0","@usefy/use-update-effect":"0.25.0","@usefy/use-document-title":"0.25.0","@usefy/use-event-callback":"0.25.0","@usefy/use-event-listener":"0.25.0","@usefy/use-memory-monitor":"0.25.0","@usefy/use-reduced-motion":"0.25.0","@usefy/use-click-any-where":"0.25.0","@usefy/use-infinite-scroll":"0.25.0","@usefy/use-is-first-render":"0.25.0","@usefy/use-page-visibility":"0.25.0","@usefy/use-resize-observer":"0.25.0","@usefy/use-scroll-position":"0.25.0","@usefy/use-session-storage":"0.25.0","@usefy/use-on-click-outside":"0.25.0","@usefy/use-copy-to-clipboard":"0.25.0","@usefy/use-debounce-callback":"0.25.0","@usefy/use-mutation-observer":"0.25.0","@usefy/use-throttle-callback":"0.25.0","@usefy/use-controllable-state":"0.25.0","@usefy/use-intersection-observer":"0.25.0","@usefy/use-preferred-color-scheme":"0.25.0","@usefy/use-isomorphic-layout-effect":"0.25.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.25.0_1783516965714_0.8258894817439497","host":"s3://npm-registry-packages-npm-production"}},"0.25.1":{"name":"@usefy/hooks","version":"0.25.1","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@0.25.1","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://github.com/mirunamu00/usefy#readme","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"53b4ada68cb30abffb6417b893314cfcaa601970","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-0.25.1.tgz","fileCount":8,"integrity":"sha512-CAPTgL/fAiZjglmsEMBeIvTyFvf+e6Ov1I2XBsXRF3mi+Rmr1Y7LVeqBcxqYU847G4BmVn4GFdVJoYR2Bw4p5A==","signatures":[{"sig":"MEQCIEt1gl3XAoniyrOsSDxWzClMM58yj82Yab+M5MeYQHzKAiACSMIbfl+1m+12u9MFowoScqeRy2C0JsRqHiOrJC73tg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189992},"main":"./dist/index.js","_from":"file:usefy-hooks-0.25.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/6863aa93e28ad5b605378ff0a2a59925/usefy-hooks-0.25.1.tgz","_integrity":"sha512-CAPTgL/fAiZjglmsEMBeIvTyFvf+e6Ov1I2XBsXRF3mi+Rmr1Y7LVeqBcxqYU847G4BmVn4GFdVJoYR2Bw4p5A==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/hooks"},"_npmVersion":"11.16.0","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@usefy/use-map":"0.25.1","@usefy/use-set":"0.25.1","@usefy/use-idle":"0.25.1","@usefy/use-init":"0.25.1","@usefy/use-list":"0.25.1","@usefy/use-step":"0.25.1","@usefy/use-async":"0.25.1","@usefy/use-hover":"0.25.1","@usefy/use-mount":"0.25.1","@usefy/use-queue":"0.25.1","@usefy/use-stack":"0.25.1","@usefy/use-timer":"0.25.1","@usefy/use-cookie":"0.25.1","@usefy/use-latest":"0.25.1","@usefy/use-script":"0.25.1","@usefy/use-signal":"0.25.1","@usefy/use-toggle":"0.25.1","@usefy/use-counter":"0.25.1","@usefy/use-hotkeys":"0.25.1","@usefy/use-measure":"0.25.1","@usefy/use-polling":"0.25.1","@usefy/use-timeout":"0.25.1","@usefy/use-unmount":"0.25.1","@usefy/use-async-fn":"0.25.1","@usefy/use-debounce":"0.25.1","@usefy/use-interval":"0.25.1","@usefy/use-previous":"0.25.1","@usefy/use-throttle":"0.25.1","@usefy/use-dark-mode":"0.25.1","@usefy/use-is-client":"0.25.1","@usefy/use-key-press":"0.25.1","@usefy/use-raf-state":"0.25.1","@usefy/use-selection":"0.25.1","@usefy/use-disclosure":"0.25.1","@usefy/use-focus-trap":"0.25.1","@usefy/use-long-press":"0.25.1","@usefy/use-pagination":"0.25.1","@usefy/use-permission":"0.25.1","@usefy/use-geolocation":"0.25.1","@usefy/use-media-query":"0.25.1","@usefy/use-merged-refs":"0.25.1","@usefy/use-scroll-lock":"0.25.1","@usefy/use-window-size":"0.25.1","@usefy/use-focus-within":"0.25.1","@usefy/use-object-state":"0.25.1","@usefy/use-history-state":"0.25.1","@usefy/use-local-storage":"0.25.1","@usefy/use-network-state":"0.25.1","@usefy/use-update-effect":"0.25.1","@usefy/use-document-title":"0.25.1","@usefy/use-event-callback":"0.25.1","@usefy/use-event-listener":"0.25.1","@usefy/use-memory-monitor":"0.25.1","@usefy/use-reduced-motion":"0.25.1","@usefy/use-click-any-where":"0.25.1","@usefy/use-infinite-scroll":"0.25.1","@usefy/use-is-first-render":"0.25.1","@usefy/use-page-visibility":"0.25.1","@usefy/use-resize-observer":"0.25.1","@usefy/use-scroll-position":"0.25.1","@usefy/use-session-storage":"0.25.1","@usefy/use-on-click-outside":"0.25.1","@usefy/use-copy-to-clipboard":"0.25.1","@usefy/use-debounce-callback":"0.25.1","@usefy/use-mutation-observer":"0.25.1","@usefy/use-throttle-callback":"0.25.1","@usefy/use-controllable-state":"0.25.1","@usefy/use-intersection-observer":"0.25.1","@usefy/use-preferred-color-scheme":"0.25.1","@usefy/use-isomorphic-layout-effect":"0.25.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_0.25.1_1783523654673_0.26618206115996723","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@usefy/hooks","version":"1.0.0","keywords":["react","hooks","custom-hooks","usefy"],"license":"MIT","_id":"@usefy/hooks@1.0.0","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"homepage":"https://usefy-web.vercel.app/packages","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"dist":{"shasum":"2ec24470a2edf57887de305c8eb3a3ade64bd335","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-1.0.0.tgz","fileCount":8,"integrity":"sha512-sS40oKDV/S3EjhmQB3KxDaSbqbMf1dNQARMeIIsjcrgsqeqlfaWZQ+lWryedDGiOOjBY4xhEyqhjPoB2/6jLWg==","signatures":[{"sig":"MEYCIQCQ/eAbReY9R+TfpVa+VIM8Zw/AEhcvxmYsZ2KmQuQWawIhAN52WtsDPxxY5nxg1bi5XuirPQCQ3OF/K5Q3WcjGeQxJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189915},"main":"./dist/index.js","_from":"file:usefy-hooks-1.0.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"_resolved":"/tmp/fcadd0206ee5bd7bb577be55ee785a69/usefy-hooks-1.0.0.tgz","_integrity":"sha512-sS40oKDV/S3EjhmQB3KxDaSbqbMf1dNQARMeIIsjcrgsqeqlfaWZQ+lWryedDGiOOjBY4xhEyqhjPoB2/6jLWg==","repository":{"url":"git+https://github.com/mirunamu00/usefy.git","type":"git","directory":"packages/hooks"},"_npmVersion":"11.16.0","description":"A collection of useful React hooks","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@usefy/use-map":"1.0.0","@usefy/use-set":"1.0.0","@usefy/use-idle":"1.0.0","@usefy/use-init":"1.0.0","@usefy/use-list":"1.0.0","@usefy/use-step":"1.0.0","@usefy/use-async":"1.0.0","@usefy/use-hover":"1.0.0","@usefy/use-mount":"1.0.0","@usefy/use-queue":"1.0.0","@usefy/use-stack":"1.0.0","@usefy/use-timer":"1.0.0","@usefy/use-cookie":"1.0.0","@usefy/use-latest":"1.0.0","@usefy/use-script":"1.0.0","@usefy/use-signal":"1.0.0","@usefy/use-toggle":"1.0.0","@usefy/use-counter":"1.0.0","@usefy/use-hotkeys":"1.0.0","@usefy/use-measure":"1.0.0","@usefy/use-polling":"1.0.0","@usefy/use-timeout":"1.0.0","@usefy/use-unmount":"1.0.0","@usefy/use-async-fn":"1.0.0","@usefy/use-debounce":"1.0.0","@usefy/use-interval":"1.0.0","@usefy/use-previous":"1.0.0","@usefy/use-throttle":"1.0.0","@usefy/use-dark-mode":"1.0.0","@usefy/use-is-client":"1.0.0","@usefy/use-key-press":"1.0.0","@usefy/use-raf-state":"1.0.0","@usefy/use-selection":"1.0.0","@usefy/use-disclosure":"1.0.0","@usefy/use-focus-trap":"1.0.0","@usefy/use-long-press":"1.0.0","@usefy/use-pagination":"1.0.0","@usefy/use-permission":"1.0.0","@usefy/use-geolocation":"1.0.0","@usefy/use-media-query":"1.0.0","@usefy/use-merged-refs":"1.0.0","@usefy/use-scroll-lock":"1.0.0","@usefy/use-window-size":"1.0.0","@usefy/use-focus-within":"1.0.0","@usefy/use-object-state":"1.0.0","@usefy/use-history-state":"1.0.0","@usefy/use-local-storage":"1.0.0","@usefy/use-network-state":"1.0.0","@usefy/use-update-effect":"1.0.0","@usefy/use-document-title":"1.0.0","@usefy/use-event-callback":"1.0.0","@usefy/use-event-listener":"1.0.0","@usefy/use-memory-monitor":"1.0.0","@usefy/use-reduced-motion":"1.0.0","@usefy/use-click-any-where":"1.0.0","@usefy/use-infinite-scroll":"1.0.0","@usefy/use-is-first-render":"1.0.0","@usefy/use-page-visibility":"1.0.0","@usefy/use-resize-observer":"1.0.0","@usefy/use-scroll-position":"1.0.0","@usefy/use-session-storage":"1.0.0","@usefy/use-on-click-outside":"1.0.0","@usefy/use-copy-to-clipboard":"1.0.0","@usefy/use-debounce-callback":"1.0.0","@usefy/use-mutation-observer":"1.0.0","@usefy/use-throttle-callback":"1.0.0","@usefy/use-controllable-state":"1.0.0","@usefy/use-intersection-observer":"1.0.0","@usefy/use-preferred-color-scheme":"1.0.0","@usefy/use-isomorphic-layout-effect":"1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","rimraf":"^6.0.1","typescript":"^5.0.0","@types/react":"^19.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hooks_1.0.0_1784693219239_0.9821229560241236","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@usefy/hooks","version":"1.1.0","homepage":"https://usefy-web.vercel.app/packages","description":"A collection of useful React hooks","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"sideEffects":false,"dependencies":{"@usefy/use-click-any-where":"1.1.0","@usefy/use-copy-to-clipboard":"1.1.0","@usefy/use-counter":"1.1.0","@usefy/use-signal":"1.1.0","@usefy/use-toggle":"1.1.0","@usefy/use-debounce":"1.1.0","@usefy/use-debounce-callback":"1.1.0","@usefy/use-throttle":"1.1.0","@usefy/use-throttle-callback":"1.1.0","@usefy/use-local-storage":"1.1.0","@usefy/use-session-storage":"1.1.0","@usefy/use-on-click-outside":"1.1.0","@usefy/use-event-listener":"1.1.0","@usefy/use-timer":"1.1.0","@usefy/use-unmount":"1.1.0","@usefy/use-init":"1.1.0","@usefy/use-geolocation":"1.1.0","@usefy/use-intersection-observer":"1.1.0","@usefy/use-resize-observer":"1.1.0","@usefy/use-memory-monitor":"1.1.0","@usefy/use-timeout":"1.1.0","@usefy/use-interval":"1.1.0","@usefy/use-hover":"1.1.0","@usefy/use-key-press":"1.1.0","@usefy/use-map":"1.1.0","@usefy/use-set":"1.1.0","@usefy/use-list":"1.1.0","@usefy/use-queue":"1.1.0","@usefy/use-history-state":"1.1.0","@usefy/use-user-media":"1.1.0","@usefy/use-step":"1.1.0","@usefy/use-window-size":"1.1.0","@usefy/use-is-client":"1.1.0","@usefy/use-isomorphic-layout-effect":"1.1.0","@usefy/use-previous":"1.1.0","@usefy/use-latest":"1.1.0","@usefy/use-event-callback":"1.1.0","@usefy/use-update-effect":"1.1.0","@usefy/use-mount":"1.1.0","@usefy/use-is-first-render":"1.1.0","@usefy/use-media-query":"1.1.0","@usefy/use-preferred-color-scheme":"1.1.0","@usefy/use-reduced-motion":"1.1.0","@usefy/use-dark-mode":"1.1.0","@usefy/use-document-title":"1.1.0","@usefy/use-controllable-state":"1.1.0","@usefy/use-merged-refs":"1.1.0","@usefy/use-disclosure":"1.1.0","@usefy/use-measure":"1.1.0","@usefy/use-mutation-observer":"1.1.0","@usefy/use-scroll-position":"1.1.0","@usefy/use-scroll-lock":"1.1.0","@usefy/use-hotkeys":"1.1.0","@usefy/use-focus-trap":"1.1.0","@usefy/use-focus-within":"1.1.0","@usefy/use-long-press":"1.1.0","@usefy/use-async-fn":"1.1.0","@usefy/use-async":"1.1.0","@usefy/use-polling":"1.1.0","@usefy/use-raf-state":"1.1.0","@usefy/use-object-state":"1.1.0","@usefy/use-stack":"1.1.0","@usefy/use-selection":"1.1.0","@usefy/use-cookie":"1.1.0","@usefy/use-infinite-scroll":"1.1.0","@usefy/use-pagination":"1.1.0","@usefy/use-network-state":"1.1.0","@usefy/use-page-visibility":"1.1.0","@usefy/use-idle":"1.1.0","@usefy/use-permission":"1.1.0","@usefy/use-script":"1.1.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"devDependencies":{"@types/react":"^19.0.0","rimraf":"^6.0.1","tsup":"^8.0.0","typescript":"^5.0.0"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/mirunamu00/usefy.git","directory":"packages/hooks"},"license":"MIT","keywords":["react","hooks","custom-hooks","usefy"],"scripts":{"build":"tsup","dev":"tsup --watch","typecheck":"tsc --noEmit","clean":"rimraf dist"},"_id":"@usefy/hooks@1.1.0","bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"_integrity":"sha512-G2+rV42UGznJsLMwTbHIlPEvatoJtqmyIfZgr977/JnjHSX45SYNwniuz0StG6IT1O+abwwIlqsCX+klP2Ns1Q==","_resolved":"/tmp/f36e7120317293f352508dbe11236e11/usefy-hooks-1.1.0.tgz","_from":"file:usefy-hooks-1.1.0.tgz","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-G2+rV42UGznJsLMwTbHIlPEvatoJtqmyIfZgr977/JnjHSX45SYNwniuz0StG6IT1O+abwwIlqsCX+klP2Ns1Q==","shasum":"f8785fd8bc55e44c76fc710ba7a7f234e975e856","tarball":"https://registry.npmjs.org/@usefy/hooks/-/hooks-1.1.0.tgz","fileCount":8,"unpackedSize":195181,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBUZUalNvQHeb6TwmBBE8oRpX7CoXkXoykWVdxOqZzz0AiAOwS/xotavTsr7VR6CS4sWKqSPAqBTLrqsIw+Og5gIJA=="}]},"_npmUser":{"name":"mirunamu","email":"geon0529@gmail.com"},"directories":{},"maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/hooks_1.1.0_1785214674851_0.8439515048990192"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-09T00:59:01.078Z","modified":"2026-07-28T04:57:55.111Z","0.0.35":"2026-01-09T00:59:01.365Z","0.0.37":"2026-01-09T01:02:02.506Z","0.0.38":"2026-01-09T01:37:20.398Z","0.1.1":"2026-01-11T10:54:50.595Z","0.1.2":"2026-01-11T11:14:41.311Z","0.1.3":"2026-01-11T14:13:33.836Z","0.1.4":"2026-01-11T14:24:03.614Z","0.1.5":"2026-01-12T01:31:27.070Z","0.2.0":"2026-01-12T02:24:44.655Z","0.2.1":"2026-01-12T06:43:09.170Z","0.2.2":"2026-01-12T07:50:37.848Z","0.2.3":"2026-01-12T13:25:33.029Z","0.2.4":"2026-01-13T03:07:34.023Z","0.2.5":"2026-01-21T05:16:01.413Z","0.2.6":"2026-01-29T10:18:33.836Z","0.3.1":"2026-07-01T06:39:10.586Z","0.4.0":"2026-07-01T07:35:34.138Z","0.5.0":"2026-07-01T08:45:21.217Z","0.6.0":"2026-07-01T13:30:58.330Z","0.7.0":"2026-07-02T01:51:01.473Z","0.8.0":"2026-07-02T06:08:22.208Z","0.9.0":"2026-07-03T01:47:01.328Z","0.10.0":"2026-07-03T03:13:05.268Z","0.11.0":"2026-07-03T05:46:37.870Z","0.12.0":"2026-07-03T07:30:34.037Z","0.12.1":"2026-07-03T07:59:39.898Z","0.12.2":"2026-07-03T09:23:53.264Z","0.13.0":"2026-07-04T01:52:35.212Z","0.14.0":"2026-07-04T03:13:28.230Z","0.15.0":"2026-07-04T04:12:57.728Z","0.16.0":"2026-07-04T05:17:03.907Z","0.17.0":"2026-07-05T05:40:26.103Z","0.18.0":"2026-07-05T11:56:10.956Z","0.19.0":"2026-07-05T13:49:32.985Z","0.20.0":"2026-07-06T13:01:02.054Z","0.21.0":"2026-07-06T15:02:17.234Z","0.21.1":"2026-07-07T12:42:09.350Z","0.22.0":"2026-07-08T01:34:08.476Z","0.23.0":"2026-07-08T08:33:22.625Z","0.24.0":"2026-07-08T12:03:53.155Z","0.25.0":"2026-07-08T13:22:45.845Z","0.25.1":"2026-07-08T15:14:15.042Z","1.0.0":"2026-07-22T04:06:59.375Z","1.1.0":"2026-07-28T04:57:54.968Z"},"bugs":{"url":"https://github.com/mirunamu00/usefy/issues"},"license":"MIT","homepage":"https://usefy-web.vercel.app/packages","keywords":["react","hooks","custom-hooks","usefy"],"repository":{"type":"git","url":"git+https://github.com/mirunamu00/usefy.git","directory":"packages/hooks"},"description":"A collection of useful React hooks","maintainers":[{"name":"mirunamu","email":"geon0529@gmail.com"}],"readme":"<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/mirunamu00/usefy/master/assets/logo.png\" alt=\"usefy logo\" width=\"180\" />\n</p>\n\n<h1 align=\"center\">usefy</h1>\n\n<p align=\"center\">\n  <strong>🪝 A collection of production-ready React hooks for modern applications</strong>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@usefy/hooks\" target=\"_blank\" rel=\"noopener noreferrer\">\n    <img src=\"https://img.shields.io/npm/v/@usefy/hooks.svg?style=flat-square&color=007acc\" alt=\"npm version\" />\n  </a>\n  <a href=\"https://www.npmjs.com/package/@usefy/hooks\" target=\"_blank\" rel=\"noopener noreferrer\">\n    <img src=\"https://img.shields.io/npm/dm/@usefy/hooks.svg?style=flat-square&color=007acc\" alt=\"npm downloads\" />\n  </a>\n  <a href=\"https://bundlephobia.com/package/@usefy/hooks\" target=\"_blank\" rel=\"noopener noreferrer\">\n    <img src=\"https://img.shields.io/bundlephobia/minzip/@usefy/hooks?style=flat-square&color=007acc\" alt=\"bundle size\" />\n  </a>\n  <a href=\"https://github.com/mirunamu00/usefy/blob/master/LICENSE\" target=\"_blank\" rel=\"noopener noreferrer\">\n    <img src=\"https://img.shields.io/npm/l/@usefy/hooks.svg?style=flat-square&color=007acc\" alt=\"license\" />\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"#installation\">Installation</a> •\n  <a href=\"#packages\">Packages</a> •\n  <a href=\"#quick-start\">Quick Start</a> •\n  <a href=\"#features\">Features</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://mirunamu00.github.io/usefy/\" target=\"_blank\" rel=\"noopener noreferrer\">\n    <strong>📚 View Storybook Demo</strong>\n  </a>\n</p>\n\n---\n\n> ✅ **Stable & production-ready** — `@usefy/hooks` follows [semantic versioning](https://semver.org); breaking changes only ever land in a new major version.\n>\n> 🚧 **Actively developing**: new hooks are added regularly, and the umbrella re-exports every one.\n\n---\n\n## Overview\n\n**usefy** is a collection of production-ready custom hooks designed for modern React applications. All hooks are written in TypeScript, providing complete type safety, comprehensive testing, and minimal bundle size.\n\n### ✨ Why usefy?\n\n- **🚀 Zero Dependencies** — Pure React implementation with no external dependencies\n- **📦 Tree Shakeable** — Import only the hooks you need to optimize bundle size\n- **🔷 TypeScript First** — Complete type safety with full autocomplete support\n- **⚡ SSR Compatible** — Works seamlessly with Next.js, Remix, and other SSR frameworks\n- **🧪 Well Tested** — High test coverage ensures reliability and stability\n- **📖 Well Documented** — Detailed documentation with practical examples\n- **🎨 Interactive Demos** — Try all hooks in action with our Storybook playground\n\n---\n\n## Installation\n\n### All-in-One Package\n\nInstall all hooks at once:\n\n```bash\n# npm\nnpm install @usefy/hooks\n\n# yarn\nyarn add @usefy/hooks\n\n# pnpm\npnpm add @usefy/hooks\n```\n\n### Individual Packages\n\nYou can also install only the hooks you need:\n\n```bash\n# Example: Install only use-toggle\npnpm add @usefy/use-toggle\n\n# Install multiple packages\npnpm add @usefy/use-debounce @usefy/use-local-storage\n```\n\n### Peer Dependencies\n\nAll packages require React 18 or 19:\n\n```json\n{\n  \"peerDependencies\": {\n    \"react\": \"^18.0.0 || ^19.0.0\"\n  }\n}\n```\n\n---\n\n## Packages\n\n### 📦 Available Hooks\n\n| Hook                                                                                                                                                    | Description                                             | npm                                                                                                                                                                                                                                                     | Coverage                                                                            |\n| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-toggle\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-toggle</a>                               | Boolean state management with toggle, setTrue, setFalse | <a href=\"https://www.npmjs.com/package/@usefy/use-toggle\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-toggle.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>                               | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-counter\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-counter</a>                             | Counter state with increment, decrement, reset          | <a href=\"https://www.npmjs.com/package/@usefy/use-counter\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-counter.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>                             | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-debounce\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-debounce</a>                           | Value debouncing with leading/trailing edge             | <a href=\"https://www.npmjs.com/package/@usefy/use-debounce\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-debounce.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>                           | ![92%](https://img.shields.io/badge/coverage-92%25-brightgreen?style=flat-square)   |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-debounce-callback\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-debounce-callback</a>         | Debounced callbacks with cancel/flush/pending           | <a href=\"https://www.npmjs.com/package/@usefy/use-debounce-callback\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-debounce-callback.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>         | ![93%](https://img.shields.io/badge/coverage-93%25-brightgreen?style=flat-square)   |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-throttle\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-throttle</a>                           | Value throttling for rate-limiting updates              | <a href=\"https://www.npmjs.com/package/@usefy/use-throttle\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-throttle.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>                           | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-throttle-callback\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-throttle-callback</a>         | Throttled callbacks with cancel/flush/pending           | <a href=\"https://www.npmjs.com/package/@usefy/use-throttle-callback\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-throttle-callback.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>         | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-local-storage\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-local-storage</a>                 | localStorage persistence with cross-tab sync            | <a href=\"https://www.npmjs.com/package/@usefy/use-local-storage\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-local-storage.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>                 | ![95%](https://img.shields.io/badge/coverage-95%25-brightgreen?style=flat-square)   |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-session-storage\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-session-storage</a>             | sessionStorage persistence for tab lifetime             | <a href=\"https://www.npmjs.com/package/@usefy/use-session-storage\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-session-storage.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>             | ![95%](https://img.shields.io/badge/coverage-95%25-brightgreen?style=flat-square)   |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-cookie\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-cookie</a>                                   | Browser cookie as React state, SSR-aware                | <a href=\"https://www.npmjs.com/package/@usefy/use-cookie\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-cookie.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>                                   | ![96%](https://img.shields.io/badge/coverage-96%25-brightgreen?style=flat-square)   |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-click-any-where\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-click-any-where</a>             | Document-wide click event detection                     | <a href=\"https://www.npmjs.com/package/@usefy/use-click-any-where\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-click-any-where.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>             | ![92%](https://img.shields.io/badge/coverage-92%25-brightgreen?style=flat-square)   |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-copy-to-clipboard\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-copy-to-clipboard</a>         | Clipboard copy with fallback support                    | <a href=\"https://www.npmjs.com/package/@usefy/use-copy-to-clipboard\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-copy-to-clipboard.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>         | ![88%](https://img.shields.io/badge/coverage-88%25-brightgreen?style=flat-square)   |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-event-listener\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-event-listener</a>               | DOM event listener with auto cleanup                    | <a href=\"https://www.npmjs.com/package/@usefy/use-event-listener\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-event-listener.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>               | ![96%](https://img.shields.io/badge/coverage-96%25-brightgreen?style=flat-square)   |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-on-click-outside\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-on-click-outside</a>           | Outside click detection for modals/dropdowns            | <a href=\"https://www.npmjs.com/package/@usefy/use-on-click-outside\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-on-click-outside.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>           | ![98%](https://img.shields.io/badge/coverage-98%25-brightgreen?style=flat-square)   |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-unmount\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-unmount</a>                             | Execute callback on component unmount                   | <a href=\"https://www.npmjs.com/package/@usefy/use-unmount\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-unmount.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>                             | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-init\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-init</a>                                   | One-time initialization with async, retry, timeout      | <a href=\"https://www.npmjs.com/package/@usefy/use-init\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-init.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>                                   | ![96%](https://img.shields.io/badge/coverage-96%25-brightgreen?style=flat-square)   |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-timer\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-timer</a>                                 | Countdown timer with drift compensation and formats     | <a href=\"https://www.npmjs.com/package/@usefy/use-timer\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-timer.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>                                 | ![84%](https://img.shields.io/badge/coverage-84%25-brightgreen?style=flat-square)   |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-geolocation\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-geolocation</a>                     | Device geolocation with real-time tracking and distance | <a href=\"https://www.npmjs.com/package/@usefy/use-geolocation\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-geolocation.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>                     | ![90%](https://img.shields.io/badge/coverage-90%25-brightgreen?style=flat-square)   |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-intersection-observer\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-intersection-observer</a> | Element visibility detection with Intersection Observer | <a href=\"https://www.npmjs.com/package/@usefy/use-intersection-observer\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-intersection-observer.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![94%](https://img.shields.io/badge/coverage-94%25-brightgreen?style=flat-square)   |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-signal\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-signal</a>                                   | Event-driven communication between components           | <a href=\"https://www.npmjs.com/package/@usefy/use-signal\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-signal.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>                                   | ![98%](https://img.shields.io/badge/coverage-98%25-brightgreen?style=flat-square)   |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-memory-monitor\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-memory-monitor</a>                   | Real-time browser memory monitoring with leak detection | <a href=\"https://www.npmjs.com/package/@usefy/use-memory-monitor\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-memory-monitor.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>                   | ![90%](https://img.shields.io/badge/coverage-90%25-brightgreen?style=flat-square)   |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-hover\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-hover</a>                                     | Element hover detection with delay support              | <a href=\"https://www.npmjs.com/package/@usefy/use-hover\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-hover.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>                                     | ![92%](https://img.shields.io/badge/coverage-92%25-brightgreen?style=flat-square)   |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-key-press\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-key-press</a>                             | Keyboard key, shortcut, and combination detection       | <a href=\"https://www.npmjs.com/package/@usefy/use-key-press\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-key-press.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>                             | ![93%](https://img.shields.io/badge/coverage-93%25-brightgreen?style=flat-square)   |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-map\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-map</a>                                         | Map data structure state with immutable updates         | <a href=\"https://www.npmjs.com/package/@usefy/use-map\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-map.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>                                         | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-set\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-set</a>                                         | Set data structure state with immutable updates         | <a href=\"https://www.npmjs.com/package/@usefy/use-set\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-set.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>                                         | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-list\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-list</a>                                       | Array state with push/filter/sort/insertAt/updateAt     | <a href=\"https://www.npmjs.com/package/@usefy/use-list\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-list.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>                                       | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-queue\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-queue</a>                                     | FIFO queue state with enqueue/dequeue and immutable updates | <a href=\"https://www.npmjs.com/package/@usefy/use-queue\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-queue.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>                                     | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-history-state\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-history-state</a>                     | Undo/redo state history with time-travel                | <a href=\"https://www.npmjs.com/package/@usefy/use-history-state\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-history-state.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>                     | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-step\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-step</a>                                       | Multi-step navigation for wizards, forms, carousels     | <a href=\"https://www.npmjs.com/package/@usefy/use-step\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-step.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>                                       | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-window-size\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-window-size</a>                       | Window size tracking with debounce/throttle and SSR     | <a href=\"https://www.npmjs.com/package/@usefy/use-window-size\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-window-size.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a>                       | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-is-client\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-is-client</a> | True once hydrated on the client (SSR guard) | <a href=\"https://www.npmjs.com/package/@usefy/use-is-client\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-is-client.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-isomorphic-layout-effect\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-isomorphic-layout-effect</a> | SSR-safe useLayoutEffect | <a href=\"https://www.npmjs.com/package/@usefy/use-isomorphic-layout-effect\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-isomorphic-layout-effect.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-previous\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-previous</a> | Previous distinct value (last render it changed) | <a href=\"https://www.npmjs.com/package/@usefy/use-previous\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-previous.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-latest\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-latest</a> | Ref that always holds the latest value | <a href=\"https://www.npmjs.com/package/@usefy/use-latest\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-latest.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-event-callback\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-event-callback</a> | Stable callback that sees the latest state | <a href=\"https://www.npmjs.com/package/@usefy/use-event-callback\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-event-callback.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-update-effect\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-update-effect</a> | useEffect that skips the first render | <a href=\"https://www.npmjs.com/package/@usefy/use-update-effect\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-update-effect.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-mount\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-mount</a> | Run a callback once on mount | <a href=\"https://www.npmjs.com/package/@usefy/use-mount\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-mount.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-is-first-render\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-is-first-render</a> | True only on the first render | <a href=\"https://www.npmjs.com/package/@usefy/use-is-first-render\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-is-first-render.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-media-query\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-media-query</a> | Match CSS media queries (matchMedia, SSR-safe) | <a href=\"https://www.npmjs.com/package/@usefy/use-media-query\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-media-query.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-preferred-color-scheme\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-preferred-color-scheme</a> | System color scheme (prefers-color-scheme) | <a href=\"https://www.npmjs.com/package/@usefy/use-preferred-color-scheme\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-preferred-color-scheme.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-reduced-motion\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-reduced-motion</a> | Reduced-motion preference (a11y) | <a href=\"https://www.npmjs.com/package/@usefy/use-reduced-motion\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-reduced-motion.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-dark-mode\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-dark-mode</a> | Dark mode: system/light/dark, persistence, DOM apply | <a href=\"https://www.npmjs.com/package/@usefy/use-dark-mode\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-dark-mode.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![94.8%](https://img.shields.io/badge/coverage-94.8%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-document-title\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-document-title</a> | Set document.title with restore-on-unmount | <a href=\"https://www.npmjs.com/package/@usefy/use-document-title\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-document-title.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![92%](https://img.shields.io/badge/coverage-92%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-controllable-state\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-controllable-state</a> | Controlled/uncontrolled state primitive (Radix/Mantine pattern) | <a href=\"https://www.npmjs.com/package/@usefy/use-controllable-state\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-controllable-state.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-merged-refs\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-merged-refs</a> | Merge multiple refs into one (forwardRef helper) | <a href=\"https://www.npmjs.com/package/@usefy/use-merged-refs\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-merged-refs.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-disclosure\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-disclosure</a> | open/close/toggle state for modals, drawers, popovers | <a href=\"https://www.npmjs.com/package/@usefy/use-disclosure\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-disclosure.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-measure\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-measure</a> | Reactive element bounds (x, y, width, height, top, right, bottom, left) via ResizeObserver | <a href=\"https://www.npmjs.com/package/@usefy/use-measure\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-measure.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-mutation-observer\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-mutation-observer</a> | Watch an element for DOM mutations (childList/attributes/characterData) via MutationObserver | <a href=\"https://www.npmjs.com/package/@usefy/use-mutation-observer\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-mutation-observer.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![99%](https://img.shields.io/badge/coverage-99%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-scroll-position\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-scroll-position</a> | Throttled scroll offset (x, y) of the window or an element | <a href=\"https://www.npmjs.com/package/@usefy/use-scroll-position\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-scroll-position.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-scroll-lock\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-scroll-lock</a> | Lock body scroll for modals/drawers — iOS-aware, nested-lock counted, with scroll-position restore | <a href=\"https://www.npmjs.com/package/@usefy/use-scroll-lock\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-scroll-lock.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-hotkeys\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-hotkeys</a> | High-level keyboard shortcuts — combos, sequences, `mod` alias, scoping, input-field guard | <a href=\"https://www.npmjs.com/package/@usefy/use-hotkeys\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-hotkeys.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-focus-trap\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-focus-trap</a> | Trap keyboard focus inside a subtree (modals/dialogs) — Tab cycling, initial focus, restore on close | <a href=\"https://www.npmjs.com/package/@usefy/use-focus-trap\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-focus-trap.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-focus-within\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-focus-within</a> | Track whether keyboard focus is anywhere within a subtree — reactive `:focus-within` with `onFocus`/`onBlur` edges | <a href=\"https://www.npmjs.com/package/@usefy/use-focus-within\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-focus-within.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![98%](https://img.shields.io/badge/coverage-98%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-long-press\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-long-press</a> | Long-press (\"press and hold\") gestures for mouse and touch — time threshold, movement cancellation, `onStart`/`onFinish`/`onCancel` | <a href=\"https://www.npmjs.com/package/@usefy/use-long-press\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-long-press.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-async-fn\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-async-fn</a> | Run a manual-trigger async function with idle/pending/success/error lifecycle, race-safe stale-response guarding, and unmount safety | <a href=\"https://www.npmjs.com/package/@usefy/use-async-fn\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-async-fn.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-async\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-async</a> | Full async task lifecycle — object-style state, immediate auto-run, and AbortController cancellation | <a href=\"https://www.npmjs.com/package/@usefy/use-async\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-async.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-polling\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-polling</a> | Poll an async function on an interval — non-overlapping ticks, pause/resume, an `enabled` gate, and exponential backoff | <a href=\"https://www.npmjs.com/package/@usefy/use-polling\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-polling.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![97%](https://img.shields.io/badge/coverage-97%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-raf-state\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-raf-state</a> | A drop-in `useState` that batches updates to `requestAnimationFrame` — rapid scroll/resize/pointer/animation updates coalesce to at most one commit per frame | <a href=\"https://www.npmjs.com/package/@usefy/use-raf-state\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-raf-state.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-object-state\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-object-state</a> | Object state with immutable partial updates (patch/merge) and reset | <a href=\"https://www.npmjs.com/package/@usefy/use-object-state\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-object-state.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-stack\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-stack</a> | LIFO stack state with push/pop/peek and immutable updates | <a href=\"https://www.npmjs.com/package/@usefy/use-stack\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-stack.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-selection\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-selection</a> | Multi/single selection state for lists and tables — Set-based, checkbox-ready with indeterminate support | <a href=\"https://www.npmjs.com/package/@usefy/use-selection\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-selection.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-infinite-scroll\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-infinite-scroll</a> | Sentinel-driven infinite loading built on IntersectionObserver — fires `loadMore` once per intersection, respects `hasMore`/`loading`/`enabled` | <a href=\"https://www.npmjs.com/package/@usefy/use-infinite-scroll\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-infinite-scroll.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-pagination\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-pagination</a> | Headless pagination state machine — controlled/uncontrolled current page, derived `pageCount`, a slice-ready 0-based `range`, and an ellipsis-aware `items` pager model | <a href=\"https://www.npmjs.com/package/@usefy/use-pagination\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-pagination.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-network-state\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-network-state</a> | Online/offline status + Network Information API (`effectiveType`, `downlink`, `saveData`), SSR-safe via useSyncExternalStore | <a href=\"https://www.npmjs.com/package/@usefy/use-network-state\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-network-state.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![95%](https://img.shields.io/badge/coverage-95%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-page-visibility\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-page-visibility</a> | Track tab/window visibility (foreground vs. background) via the Page Visibility API, with optional `onChange` and SSR support | <a href=\"https://www.npmjs.com/package/@usefy/use-page-visibility\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-page-visibility.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![92%](https://img.shields.io/badge/coverage-92%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-idle\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-idle</a> | Report user inactivity after a timeout, with throttled activity listeners, visibility awareness, and SSR support | <a href=\"https://www.npmjs.com/package/@usefy/use-idle\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-idle.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![98%](https://img.shields.io/badge/coverage-98%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-permission\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-permission</a> | Read Permissions API status with live updates — `{ state, status, isSupported, error }`, keyed on descriptor contents, SSR-safe, accepts any permission name | <a href=\"https://www.npmjs.com/package/@usefy/use-permission\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-permission.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![100%](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-script\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-script</a> | Load an external script with `idle/loading/ready/error` status, `<script>` deduplication across components, and ref-counted cleanup — SSR-safe and StrictMode-safe | <a href=\"https://www.npmjs.com/package/@usefy/use-script\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-script.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![96%](https://img.shields.io/badge/coverage-96%25-brightgreen?style=flat-square) |\n| <a href=\"https://www.npmjs.com/package/@usefy/use-user-media\" target=\"_blank\" rel=\"noopener noreferrer\">@usefy/use-user-media</a> | Camera and microphone streams — `getUserMedia` lifecycle, device enumeration and switching, torch, normalized errors, and a teardown guarantee (no track outlives the component) | <a href=\"https://www.npmjs.com/package/@usefy/use-user-media\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/npm/v/@usefy/use-user-media.svg?style=flat-square&color=007acc\" alt=\"npm version\" /></a> | ![97%](https://img.shields.io/badge/coverage-97%25-brightgreen?style=flat-square) |\n\n---\n\n## Quick Start\n\n### Using the All-in-One Package\n\n```tsx\nimport {\n  useToggle,\n  useCounter,\n  useDebounce,\n  useLocalStorage,\n  useCookie,\n  useCopyToClipboard,\n  useEventListener,\n  useOnClickOutside,\n  useIntersectionObserver,\n  useHover,\n  useKeyPress,\n  useMap,\n  useSet,\n  useList,\n  useQueue,\n  useHistoryState,\n  useStep,\n  useWindowSize,\n  useNetworkState,\n  usePageVisibility,\n  useIdle,\n  usePermission,\n  useScript,\n  useSignal,\n  useUnmount,\n  useInit,\n  useIsClient,\n  useIsomorphicLayoutEffect,\n  usePrevious,\n  useLatest,\n  useEventCallback,\n  useUpdateEffect,\n  useMount,\n  useIsFirstRender,\n  useMediaQuery,\n  usePreferredColorScheme,\n  useReducedMotion,\n  useDarkMode,\n  useDocumentTitle,\n  useControllableState,\n  useMergedRefs,\n  useDisclosure,\n  useMeasure,\n  useMutationObserver,\n  useScrollPosition,\n  useScrollLock,\n  useHotkeys,\n  useFocusTrap,\n  useFocusWithin,\n  useLongPress,\n  useAsyncFn,\n  useAsync,\n  usePolling,\n  useRafState,\n  useObjectState,\n  useStack,\n  useSelection,\n  useInfiniteScroll,\n  usePagination,\n} from \"@usefy/hooks\";\n\nfunction App() {\n  // Boolean state management\n  const { value: isOpen, toggle, setFalse: close } = useToggle(false);\n\n  // Counter with controls\n  const { count, increment, decrement, reset } = useCounter(0);\n\n  // Debounced search\n  const [query, setQuery] = useState(\"\");\n  const debouncedQuery = useDebounce(query, 300);\n\n  // Persistent theme preference\n  const [theme, setTheme] = useLocalStorage(\"theme\", \"light\");\n\n  // Copy functionality\n  const [copiedText, copy] = useCopyToClipboard();\n\n  // Lazy loading image\n  const { ref: imageRef, inView } = useIntersectionObserver({\n    triggerOnce: true,\n    rootMargin: \"50px\",\n  });\n\n  return (\n    <div data-theme={theme}>\n      {/* Modal */}\n      <button onClick={toggle}>Open Modal</button>\n      {isOpen && (\n        <div className=\"modal\">\n          <button onClick={close}>Close</button>\n        </div>\n      )}\n\n      {/* Counter */}\n      <div>\n        <button onClick={decrement}>-</button>\n        <span>{count}</span>\n        <button onClick={increment}>+</button>\n      </div>\n\n      {/* Search */}\n      <input\n        value={query}\n        onChange={(e) => setQuery(e.target.value)}\n        placeholder=\"Search...\"\n      />\n\n      {/* Theme Toggle */}\n      <button onClick={() => setTheme(theme === \"light\" ? \"dark\" : \"light\")}>\n        Toggle Theme\n      </button>\n\n      {/* Copy */}\n      <button onClick={() => copy(\"Hello World!\")}>\n        {copiedText ? \"Copied!\" : \"Copy\"}\n      </button>\n\n      {/* Lazy Loading */}\n      <div ref={imageRef}>\n        {inView && <img src=\"large-image.jpg\" alt=\"Lazy loaded\" />}\n      </div>\n    </div>\n  );\n}\n```\n\n### Using Individual Packages\n\n```tsx\nimport { useToggle } from \"@usefy/use-toggle\";\nimport { useDebounce } from \"@usefy/use-debounce\";\n\nfunction SearchModal() {\n  const { value: isOpen, toggle } = useToggle(false);\n  const [query, setQuery] = useState(\"\");\n  const debouncedQuery = useDebounce(query, 300);\n\n  useEffect(() => {\n    if (debouncedQuery) {\n      searchAPI(debouncedQuery);\n    }\n  }, [debouncedQuery]);\n\n  return (\n    <>\n      <button onClick={toggle}>Search</button>\n      {isOpen && (\n        <input value={query} onChange={(e) => setQuery(e.target.value)} />\n      )}\n    </>\n  );\n}\n```\n\n---\n\n## Features\n\n### 🔄 State Management\n\n<details>\n<summary><strong>useToggle</strong> — Boolean state with utility functions</summary>\n\n```tsx\nconst { value, toggle, setTrue, setFalse, setValue } = useToggle(false);\n```\n\nPerfect for modals, dropdowns, accordions, and switches.\n\n</details>\n\n<details>\n<summary><strong>useCounter</strong> — Counter state with controls</summary>\n\n```tsx\nconst { count, increment, decrement, reset } = useCounter(0);\n```\n\nIdeal for quantity selectors, pagination, and score tracking.\n\n</details>\n\n<details>\n<summary><strong>useMap</strong> — Map state with immutable updates</summary>\n\n```tsx\nimport { useMap } from \"@usefy/use-map\";\n\nconst [users, { set, setAll, remove, reset, clear, get }] = useMap<string, User>([\n  [\"1\", { id: \"1\", name: \"Alice\" }],\n]);\n\nset(\"2\", { id: \"2\", name: \"Bob\" }); // add / overwrite\nremove(\"1\");                          // delete a key\nsetAll(entries);                      // replace everything\nreset();                              // back to initial\n```\n\nImmutable updates (new `Map` on every change), a `ReadonlyMap` return type, stable action identities, lazy initialization, and no-op skipping. Perfect for keyed collections, caches, form field maps, and feature flags.\n\n</details>\n\n<details>\n<summary><strong>useSet</strong> — Set state with immutable updates</summary>\n\n```tsx\nimport { useSet } from \"@usefy/use-set\";\n\nconst [selected, { add, remove, toggle, has, clear, reset }] = useSet<string>([\"1\"]);\n\ntoggle(\"2\");           // flip membership\ntoggle(\"3\", true);     // force add (like DOMTokenList.toggle)\nhas(\"1\");              // membership check\nremove(\"1\");           // delete\n```\n\nImmutable updates (new `Set` on every change), a `ReadonlySet` return type, `toggle` with an optional force argument, stable action identities, lazy initialization, and no-op skipping. Perfect for multi-select, tag filters, and tracking selected ids.\n\n</details>\n\n<details>\n<summary><strong>useList</strong> — Array state with immutable updates</summary>\n\n```tsx\nimport { useList } from \"@usefy/use-list\";\n\nconst [todos, { push, removeAt, updateAt, sort, filter, reset }] = useList<Todo>([]);\n\npush({ id: 1, text: \"Hi\", completed: false }); // append\nupdateAt(0, { ...todos[0], completed: true }); // replace at index\nremoveAt(0);                                    // delete at index\nsort((a, b) => a.id - b.id);                    // immutable sort\n```\n\nImmutable updates (new array on every change), a `readonly T[]` return type, a rich action set (`set`/`push`/`filter`/`sort`/`clear`/`removeAt`/`insertAt`/`updateAt`/`reset`), `set` with an updater function, stable action identities, lazy init, and no-op skipping. Perfect for todo lists, editable tables, and ordered collections.\n\n</details>\n\n<details>\n<summary><strong>useQueue</strong> — FIFO queue state with immutable updates</summary>\n\n```tsx\nimport { useQueue } from \"@usefy/use-queue\";\n\nconst [queue, { add, remove, peek, clear, reset }] = useQueue<Task>([]);\n\nadd(task);              // enqueue to the back (variadic: add(a, b, c))\nconst next = remove();  // dequeue the front and return it (undefined if empty)\npeek();                 // read the front without mutating\n```\n\nFIFO semantics (`add` to the back, `remove`/`peek` from the front), immutable updates (new array on every change), a `readonly T[]` return type, `remove` that returns the dequeued item, stable action identities, lazy init, and no-op skipping. Read `first`/`last`/`size` directly from the queue (`queue[0]`, `queue[queue.length - 1]`, `queue.length`). Perfect for task runners, print/job queues, message buffers, and breadth-first traversals.\n\n</details>\n\n<details>\n<summary><strong>useHistoryState</strong> — Undo/redo state history with time-travel</summary>\n\n```tsx\nimport { useHistoryState } from \"@usefy/use-history-state\";\n\nconst { state, set, undo, redo, canUndo, canRedo, goTo, history } =\n  useHistoryState(initialCanvas, { limit: 50 });\n\nset((s) => ({ ...s, dirty: true })); // record a new entry (value or updater)\nundo();                               // step back\nredo();                               // step forward\ngoTo(0);                              // jump to any point on the timeline\n```\n\nUndo/redo/`goTo` time travel over an immutable timeline, `set` with value-or-updater (like `useState`), `canUndo`/`canRedo` flags, the full `history` array + `currentIndex`, an optional `limit` to bound memory, `clear`/`reset`, stable control identities (safe as effect deps), and no-op skipping. Perfect for editors, drawing/design canvases, form builders, and any `Ctrl/Cmd+Z` experience.\n\n</details>\n\n<details>\n<summary><strong>useStep</strong> — Multi-step navigation for wizards, forms, and carousels</summary>\n\n```tsx\nimport { useStep } from \"@usefy/use-step\";\n\nconst [step, { goToNextStep, goToPrevStep, canGoToNextStep, canGoToPrevStep, setStep, reset }] =\n  useStep(4); // steps 0..3\n\ngoToNextStep();     // advance (no-op on the last step)\nsetStep(2);         // jump to a step (value or updater, clamped)\nsetStep((s) => s + 1);\n```\n\n0-based indexing with automatic range validation, `goToNextStep`/`goToPrevStep` plus ready-made `canGoToNextStep`/`canGoToPrevStep` flags for disabling buttons, `setStep` (value or updater), `reset`, stable control identities (safe as effect deps), resilience to a changing step `count`, and no-op skipping at the edges. Perfect for multi-step forms, wizards, onboarding flows, and carousels.\n\n</details>\n\n<details>\n<summary><strong>useObjectState</strong> — Object state with immutable partial updates (patch/merge) and reset</summary>\n\n```tsx\nimport { useObjectState } from \"@usefy/use-object-state\";\n\nconst [form, patch, reset] = useObjectState({\n  name: \"\",\n  email: \"\",\n  subscribe: false,\n});\n\npatch({ name: \"Alice\" });                     // shallow-merge a partial (immutably)\npatch((prev) => ({ subscribe: !prev.subscribe })); // functional updater form\nreset();                                       // back to the initial object\nreset({ name: \"Bob\", email: \"\", subscribe: true }); // reset to a provided object\n```\n\nA `useState`-style `[state, patch, reset]` tuple that sits between `useState` (replace the whole value) and `useReducer` (write a reducer). `patch` shallow-merges a `Partial<T>` immutably (`{ ...prev, ...partial }`) — update one field without spreading the whole object — or takes a functional updater; untouched keys are preserved by reference. `reset()` restores the captured initial value (lazy init is cached once), or `reset(next)` swaps in a provided object. `patch`/`reset` are referentially stable (safe as effect deps), and it's SSR- & StrictMode-safe. Shallow merge only — nested objects are replaced, not deep-merged; for array state use `useList`. Perfect for form state, settings panels, and filter/query objects.\n\n</details>\n\n<details>\n<summary><strong>useStack</strong> — LIFO stack state with immutable updates</summary>\n\n```tsx\nimport { useStack } from \"@usefy/use-stack\";\n\nconst [stack, { push, pop, peek, clear, reset }] = useStack<Snapshot>([]);\n\npush(snapshot);       // push onto the top (variadic: push(a, b, c))\nconst last = pop();   // pop the top and return it (undefined if empty)\npeek();               // read the top without mutating\n```\n\nThe LIFO sibling of `useQueue` — identical shape, but `push` and `pop` operate on the **same** end (the top). LIFO semantics, immutable updates (new array on every change), a `readonly T[]` return type, `pop` that returns the popped item, stable action identities, lazy init, and no-op skipping. Read `top`/`bottom`/`size` directly from the stack (`stack[stack.length - 1]`, `stack[0]`, `stack.length`). Perfect for undo history, navigation/back stacks, expression evaluation, and depth-first traversals.\n\n</details>\n\n<details>\n<summary><strong>useSelection</strong> — Multi/single selection state for lists and tables</summary>\n\n```tsx\nimport { useSelection } from \"@usefy/use-selection\";\n\nconst {\n  selected,             // selected items (derived from the current `items`)\n  isSelected,           // isSelected(item) → boolean\n  toggle,               // toggle(item)\n  selectAll,            // select every item (no-op in single-select mode)\n  clear,                // deselect all\n  isAllSelected,        // every item selected (false for an empty list)\n  isPartiallySelected,  // some-but-not-all → drive a header checkbox's indeterminate\n} = useSelection(users, { getKey: (u) => u.id });\n```\n\nSet-backed selection for checkbox lists and data tables. The backing `Set` stores **keys** (via `getKey`, default identity for primitives), so a selection survives new object identities across renders — rebuild `items` every render and the selection sticks. Item-facing values (`selected`, `isAllSelected`, …) are **derived from the current `items`**, so removing a row makes it drop out automatically. Ships `toggle`/`select`/`deselect`/`selectAll`/`clear`, the `isAllSelected`/`isPartiallySelected`/`isNoneSelected` flags for an indeterminate header checkbox, and a single-selection mode (`multiple: false`) that replaces the selection. Immutable Set updates, stable action identities, no-op skipping, and SSR/StrictMode safe.\n\n</details>\n\n### ⏱️ Timing Utilities\n\n<details>\n<summary><strong>useDebounce</strong> — Debounce value updates</summary>\n\n```tsx\nconst debouncedValue = useDebounce(value, 300, {\n  leading: false,\n  trailing: true,\n  maxWait: 1000,\n});\n```\n\nBest for search inputs, form validation, and API calls.\n\n</details>\n\n<details>\n<summary><strong>useDebounceCallback</strong> — Debounce function calls</summary>\n\n```tsx\nconst debouncedFn = useDebounceCallback(callback, 300);\n\ndebouncedFn(args); // Call debounced\ndebouncedFn.cancel(); // Cancel pending\ndebouncedFn.flush(); // Execute immediately\ndebouncedFn.pending(); // Check if pending\n```\n\n</details>\n\n<details>\n<summary><strong>useThrottle</strong> — Throttle value updates</summary>\n\n```tsx\nconst throttledValue = useThrottle(value, 100, {\n  leading: true,\n  trailing: true,\n});\n```\n\nPerfect for scroll events, resize handlers, and mouse tracking.\n\n</details>\n\n<details>\n<summary><strong>useThrottleCallback</strong> — Throttle function calls</summary>\n\n```tsx\nconst throttledFn = useThrottleCallback(callback, 100);\n```\n\n</details>\n\n<details>\n<summary><strong>useTimer</strong> — Countdown timer with accurate timing</summary>\n\n```tsx\nimport { useTimer, ms } from \"@usefy/use-timer\";\n\nconst timer = useTimer(ms.minutes(5), {\n  format: \"MM:SS\",\n  autoStart: false,\n  loop: false,\n  onComplete: () => console.log(\"Time's up!\"),\n});\n\n// Controls\ntimer.start();\ntimer.pause();\ntimer.reset();\ntimer.addTime(ms.seconds(10));\ntimer.subtractTime(ms.seconds(5));\n\n// State\ntimer.time; // \"05:00\"\ntimer.progress; // 0-100\ntimer.isRunning; // boolean\n```\n\nPerfect for countdown timers, Pomodoro apps, kitchen timers, and time-based UIs with smart render optimization.\n\n</details>\n\n<details>\n<summary><strong>useTimeout</strong> — Declarative setTimeout with reset/clear controls</summary>\n\n```tsx\nimport { useTimeout } from \"@usefy/use-timeout\";\n\nconst { reset, clear, isPending } = useTimeout(() => {\n  console.log(\"fired\");\n}, 3000);\n\n// Pass null to disable; reset() restarts, clear() cancels.\n```\n\nAutomatic cleanup on unmount, latest-callback ref, and conditional execution via a `null` delay.\n\n</details>\n\n<details>\n<summary><strong>useInterval</strong> — Declarative setInterval with start/stop/toggle</summary>\n\n```tsx\nimport { useInterval } from \"@usefy/use-interval\";\n\nconst { start, stop, toggle, isRunning } = useInterval(() => {\n  tick();\n}, 1000);\n\n// Pass null to disable; { immediate: true } fires once immediately;\n// { autoStart: false } starts stopped.\n```\n\nStrictMode-safe (no leaked/duplicate timers), latest-callback ref, and automatic cleanup on unmount.\n\n</details>\n\n### 💾 Storage\n\n<details>\n<summary><strong>useLocalStorage</strong> — Persistent storage with sync</summary>\n\n```tsx\nconst [value, setValue, removeValue] = useLocalStorage(\"key\", initialValue, {\n  serializer: JSON.stringify,\n  deserializer: JSON.parse,\n  syncTabs: true,\n  onError: (error) => console.error(error),\n});\n```\n\nSupports cross-tab synchronization and custom serialization.\n\n</details>\n\n<details>\n<summary><strong>useSessionStorage</strong> — Session-scoped storage</summary>\n\n```tsx\nconst [value, setValue, removeValue] = useSessionStorage(\"key\", initialValue);\n```\n\nData persists during tab lifetime, isolated per tab.\n\n</details>\n\n<details>\n<summary><strong>useCookie</strong> — Browser cookie as React state</summary>\n\n```tsx\nconst [value, setValue, remove] = useCookie(\"theme\", {\n  initialValue: \"light\",\n  maxAge: 60 * 60 * 24 * 7, // one week\n  sameSite: \"strict\",\n});\n```\n\nReads/writes `document.cookie` with a `useState`-like tuple. SSR-aware, JSON (de)serialization with a raw-string fallback, and full cookie attributes (`expires`/`maxAge`/`path`/`domain`/`secure`/`sameSite`). Same-document instances sync; cross-tab writes need polling (no `storage` event for cookies).\n\n</details>\n\n### 📡 Communication\n\n<details>\n<summary><strong>useSignal</strong> — Event-driven communication between components</summary>\n\n```tsx\nimport { useSignal } from \"@usefy/use-signal\";\n\n// Emitter component\nfunction RefreshButton() {\n  const { emit, info } = useSignal(\"dashboard-refresh\");\n  \n  return (\n    <button onClick={() => emit()}>\n      Refresh All ({info.subscriberCount} widgets)\n    </button>\n  );\n}\n\n// Subscriber component\nfunction DataWidget() {\n  const { signal } = useSignal(\"dashboard-refresh\");\n  \n  useEffect(() => {\n    fetchData(); // Refetch when signal changes\n  }, [signal]);\n  \n  return <div>Widget Content</div>;\n}\n\n// With typed data payload\ninterface NotificationData {\n  type: \"success\" | \"error\";\n  message: string;\n}\n\nfunction NotificationEmitter() {\n  const { emit } = useSignal<NotificationData>(\"notification\");\n  \n  return (\n    <button onClick={() => emit({ type: \"success\", message: \"Done!\" })}>\n      Notify\n    </button>\n  );\n}\n\nfunction NotificationReceiver() {\n  const { signal, info } = useSignal<NotificationData>(\"notification\");\n  \n  useEffect(() => {\n    if (signal > 0 && info.data) {\n      toast[info.data.type](info.data.message);\n    }\n  }, [signal]);\n  \n  return null;\n}\n```\n\n**Perfect for:** Dashboard refresh, form reset, cache invalidation, multi-step flows, and event broadcasting.\n\n> ⚠️ **Note:** `useSignal` is NOT a global state management solution. It's designed for lightweight event-driven communication. For complex state management, use Context, Zustand, Jotai, or Recoil.\n\n</details>\n\n### 🖱️ Events\n\n<details>\n<summary><strong>useEventListener</strong> — DOM event listener with auto cleanup</summary>\n\n```tsx\n// Window resize event (default target)\nuseEventListener(\"resize\", (e) => {\n  console.log(\"Window resized:\", window.innerWidth);\n});\n\n// Document keydown event\nuseEventListener(\n  \"keydown\",\n  (e) => {\n    if (e.key === \"Escape\") closeModal();\n  },\n  document\n);\n\n// Element with ref\nconst buttonRef = useRef<HTMLButtonElement>(null);\nuseEventListener(\"click\", handleClick, buttonRef);\n\n// With options\nuseEventListener(\"scroll\", handleScroll, window, {\n  passive: true,\n  capture: false,\n  enabled: isTracking,\n});\n```\n\nSupports window, document, HTMLElement, and RefObject targets with full TypeScript type inference.\n\n</details>\n\n<details>\n<summary><strong>useOnClickOutside</strong> — Outside click detection</summary>\n\n```tsx\n// Basic usage - close modal on outside click\nconst modalRef = useRef<HTMLDivElement>(null);\nuseOnClickOutside(modalRef, () => onClose(), { enabled: isOpen });\n\n// Multiple refs - button and dropdown menu\nconst buttonRef = useRef<HTMLButtonElement>(null);\nconst menuRef = useRef<HTMLDivElement>(null);\nuseOnClickOutside([buttonRef, menuRef], () => setIsOpen(false), {\n  enabled: isOpen,\n});\n\n// With exclude refs\nuseOnClickOutside(modalRef, onClose, {\n  excludeRefs: [toastRef], // Clicks on toast won't close modal\n});\n```\n\nPerfect for modals, dropdowns, popovers, tooltips, and context menus with mouse + touch support.\n\n</details>\n\n<details>\n<summary><strong>useClickAnyWhere</strong> — Global click detection</summary>\n\n```tsx\nuseClickAnyWhere(\n  (event) => {\n    if (!ref.current?.contains(event.target)) {\n      closeMenu();\n    }\n  },\n  { enabled: isOpen }\n);\n```\n\nIdeal for closing dropdowns, modals, and context menus.\n\n</details>\n\n<details>\n<summary><strong>useCopyToClipboard</strong> — Clipboard operations</summary>\n\n```tsx\nconst [copiedText, copy] = useCopyToClipboard({\n  timeout: 2000,\n  onSuccess: (text) => toast.success(\"Copied!\"),\n  onError: (error) => toast.error(\"Failed to copy\"),\n});\n\nconst success = await copy(\"text to copy\");\n```\n\nModern Clipboard API with automatic fallback for older browsers.\n\n</details>\n\n### ⌨️ Keyboard\n\n<details>\n<summary><strong>useKeyPress</strong> — Keyboard key, shortcut, and combination detection</summary>\n\n```tsx\nimport { useKeyPress } from \"@usefy/use-key-press\";\n\n// Single key — true while held\nconst escapePressed = useKeyPress(\"Escape\");\n\n// Combination (mod = Ctrl on Win/Linux, Cmd on macOS)\nuseKeyPress(\"mod+k\", {\n  preventDefault: true,\n  onPress: () => openCommandPalette(),\n});\n\n// Alternative bindings — array is OR\nuseKeyPress([\"ctrl+s\", \"meta+s\"], {\n  preventDefault: true,\n  onPress: () => save(),\n});\n\n// Physical keys for game controls (layout-independent)\nconst forward = useKeyPress(\"w\", { matchBy: \"code\" });\n\n// Custom predicate\nconst digitPressed = useKeyPress((e) => /^[0-9]$/.test(e.key));\n\n// Ignore shortcuts while typing in inputs\nuseKeyPress(\"f\", { ignoreInputElements: true, onPress: openFilter });\n```\n\nPerfect for command palettes, editor shortcuts, modal dismissal, and game controls — with cross-platform `mod`, `onPress`/`onRelease` callbacks, auto-repeat handling, and blur-safe held state.\n\n</details>\n\n<details>\n<summary><strong>useHotkeys</strong> — High-level keyboard shortcuts with combos, sequences, and an input-field guard</summary>\n\n```tsx\nimport { useHotkeys } from \"@usefy/use-hotkeys\";\n\n// Command palette (mod = Ctrl on Win/Linux, Cmd on macOS)\nuseHotkeys(\"mod+k\", () => openCommandPalette(), { preventDefault: true });\n\n// Multiple bindings for one handler (array is OR)\nuseHotkeys([\"mod+s\", \"ctrl+enter\"], save, { preventDefault: true });\n\n// A Gmail-style sequence: press \"g\" then \"i\"\nuseHotkeys(\"g i\", () => navigate(\"/inbox\"));\n\n// Scoped to an element, allowed inside inputs, only while enabled\nconst ref = useRef<HTMLDivElement>(null);\nuseHotkeys(\"Escape\", close, { target: ref, enableOnFormTags: true, enabled: isOpen });\n```\n\nThe high-level shortcut layer over the keyboard: combos (`\"ctrl+shift+p\"`, `\"shift+?\"`), space-separated **sequences** (`\"g i\"`, `\"g g\"`) with a configurable reset timeout, arrays of bindings on one handler, a cross-platform `mod` alias (overridable for tests), **exact** modifier matching (`\"a\"` never fires on `Ctrl+A`), and an input-field guard that ignores editable targets by default. Bind to `document`/`window`/an element/a ref. The handler is stored in a ref (no memoization needed), and it's SSR-safe and StrictMode-safe with full timer/listener cleanup.\n\n</details>\n\n### 📍 Location\n\n<details>\n<summary><strong>useGeolocation</strong> — Device geolocation with real-time tracking and distance calculation</summary>\n\n```tsx\nimport { useGeolocation } from \"@usefy/use-geolocation\";\n\n// Basic usage - get current position\nconst { position, loading, error } = useGeolocation();\n\n// Real-time tracking\nconst { position, watchPosition, clearWatch } = useGeolocation({\n  immediate: false,\n  watch: false,\n  onPositionChange: (pos) => console.log(\"Position updated:\", pos),\n});\n\n// Distance calculation\nconst { position, distanceFrom, bearingTo } = useGeolocation();\n\n// Calculate distance to New York (in meters)\nconst distance = distanceFrom(40.7128, -74.006);\n\n// Calculate bearing/direction to London (0-360 degrees)\nconst bearing = bearingTo(51.5074, -0.1278);\n\n// High accuracy mode\nconst { position } = useGeolocation({\n  enableHighAccuracy: true,\n  timeout: 10000,\n});\n\n// Permission tracking\nconst { permission } = useGeolocation({\n  onPermissionChange: (state) => {\n    console.log(\"Permission:\", state); // \"prompt\" | \"granted\" | \"denied\" | \"unavailable\"\n  },\n});\n```\n\nPerfect for location-based apps, maps, navigation, distance tracking, and geofencing with built-in Haversine distance calculation and bearing utilities.\n\n</details>\n\n### 👁️ Visibility\n\n<details>\n<summary><strong>useIntersectionObserver</strong> — Efficient element visibility detection with Intersection Observer API</summary>\n\n```tsx\nimport { useIntersectionObserver } from \"@usefy/use-intersection-observer\";\n\n// Basic usage - detect when element enters viewport\nconst { ref, inView, entry } = useIntersectionObserver();\n\n// Lazy l","readmeFilename":"README.md"}