{"_id":"react-media-hooks","_rev":"28-3dfc4096ba24ac303899a840e905053b","name":"react-media-hooks","dist-tags":{"latest":"1.4.0"},"versions":{"1.1.0":{"name":"react-media-hooks","version":"1.1.0","_id":"react-media-hooks@1.1.0","maintainers":[{"name":"dcollien","email":"me@dcollien.com"}],"dist":{"shasum":"ed7ee237e291d598344345a1c2f525940cc4659d","tarball":"https://registry.npmjs.org/react-media-hooks/-/react-media-hooks-1.1.0.tgz","fileCount":23,"integrity":"sha512-nei4cvcZMJIlUKX4crhVVNm0hyjQ645g4nn+Yp148dJQNvRv39MAZVtxHC/aNR37HlUD835cSZ3TmBNepuwnxg==","signatures":[{"sig":"MEUCIQC6JcvdPG8xQADQCiqfTKpPIyMSc4uQtThV9U2js7xDPAIgJ+mRCAqK7yXiClAKh0FLngue+Vr+2AbIlQS51hdNLkg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45479},"main":"./dist/use-all.cjs.js","type":"module","_from":"file:react-media-hooks-1.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/use-all.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/use-all.es.js","require":"./dist/use-all.cjs.js"},"./use-all":{"types":"./dist/index.d.ts","import":"./dist/use-all.es.js","require":"./dist/use-all.cjs.js"},"./use-blob":{"types":"./dist/hooks/blob.d.ts","import":"./dist/use-blob.es.js","require":"./dist/use-blob.cjs.js"},"./use-audio":{"types":"./dist/hooks/audio.d.ts","import":"./dist/use-audio.es.js","require":"./dist/use-audio.cjs.js"},"./use-media":{"types":"./dist/hooks/media.d.ts","import":"./dist/use-media.es.js","require":"./dist/use-media.cjs.js"},"./use-interval":{"types":"./dist/hooks/interval.d.ts","import":"./dist/use-interval.es.js","require":"./dist/use-interval.cjs.js"}},"private":false,"scripts":{"dev":"vite","lint":"eslint .","build":"tsc -b && vite build","preview":"vite preview"},"_npmUser":{"name":"dcollien","email":"me@dcollien.com"},"_resolved":"/tmp/594d7be5313d609a1cffb698befea127/react-media-hooks-1.1.0.tgz","_integrity":"sha512-nei4cvcZMJIlUKX4crhVVNm0hyjQ645g4nn+Yp148dJQNvRv39MAZVtxHC/aNR37HlUD835cSZ3TmBNepuwnxg==","_npmVersion":"10.5.0","description":"A React hook library for media and audio utilities","directories":{},"sideEffects":false,"_nodeVersion":"20.12.2","dependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.1.0","eslint":"^9.19.0","globals":"^15.14.0","@eslint/js":"^9.19.0","typescript":"~5.7.3","@types/node":"^22.13.5","@types/react":"^19.0.8","vite-plugin-dts":"^4.5.0","@types/react-dom":"^19.0.3","typescript-eslint":"^8.22.0","@vitejs/plugin-react":"^4.3.4","eslint-plugin-react-hooks":"^5.0.0","eslint-plugin-react-refresh":"^0.4.18"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-media-hooks_1.1.0_1740557011081_0.4815763173622205","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"react-media-hooks","version":"1.1.1","_id":"react-media-hooks@1.1.1","maintainers":[{"name":"dcollien","email":"me@dcollien.com"}],"dist":{"shasum":"207d82aa80161acd820b39f74355fc70b8f1ebb3","tarball":"https://registry.npmjs.org/react-media-hooks/-/react-media-hooks-1.1.1.tgz","fileCount":23,"integrity":"sha512-BiA2TXp2zojdHSesuN/6Rlx9gHwc+B3ZmTlq+XmjOxkQgDOD2KsP3WQQZjh7c0vJBzTzn8bYu+OTvrTjMDCWvQ==","signatures":[{"sig":"MEQCIGqKB66Kzjf9kXyK3KGkccibQmyd3VfM9w+8M5BNttJ2AiB/8pWfgk2BgAI+aXUN/fR/lSUJUoqsyoWUbhHf0LcwGg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46592},"main":"./dist/use-all.cjs.js","type":"module","_from":"file:react-media-hooks-1.1.1.tgz","types":"./dist/index.d.ts","module":"./dist/use-all.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/use-all.es.js","require":"./dist/use-all.cjs.js"},"./use-all":{"types":"./dist/index.d.ts","import":"./dist/use-all.es.js","require":"./dist/use-all.cjs.js"},"./use-blob":{"types":"./dist/hooks/blob.d.ts","import":"./dist/use-blob.es.js","require":"./dist/use-blob.cjs.js"},"./use-audio":{"types":"./dist/hooks/audio.d.ts","import":"./dist/use-audio.es.js","require":"./dist/use-audio.cjs.js"},"./use-media":{"types":"./dist/hooks/media.d.ts","import":"./dist/use-media.es.js","require":"./dist/use-media.cjs.js"},"./use-interval":{"types":"./dist/hooks/interval.d.ts","import":"./dist/use-interval.es.js","require":"./dist/use-interval.cjs.js"}},"private":false,"scripts":{"dev":"vite","lint":"eslint .","build":"tsc -b && vite build","preview":"vite preview"},"_npmUser":{"name":"dcollien","email":"me@dcollien.com"},"_resolved":"/tmp/e3b8051a9f90280e6bc22f200fa97093/react-media-hooks-1.1.1.tgz","_integrity":"sha512-BiA2TXp2zojdHSesuN/6Rlx9gHwc+B3ZmTlq+XmjOxkQgDOD2KsP3WQQZjh7c0vJBzTzn8bYu+OTvrTjMDCWvQ==","_npmVersion":"10.5.0","description":"A React hook library for media and audio utilities","directories":{},"sideEffects":false,"_nodeVersion":"20.12.2","dependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.1.0","eslint":"^9.19.0","globals":"^15.14.0","@eslint/js":"^9.19.0","typescript":"~5.7.3","@types/node":"^22.13.5","@types/react":"^19.0.8","vite-plugin-dts":"^4.5.0","@types/react-dom":"^19.0.3","typescript-eslint":"^8.22.0","@vitejs/plugin-react":"^4.3.4","eslint-plugin-react-hooks":"^5.0.0","eslint-plugin-react-refresh":"^0.4.18"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-media-hooks_1.1.1_1740557713641_0.599549987541002","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"react-media-hooks","version":"1.1.2","license":"MIT","_id":"react-media-hooks@1.1.2","maintainers":[{"name":"dcollien","email":"me@dcollien.com"}],"dist":{"shasum":"c310efa49be71d596477633b81981641a37dfa1e","tarball":"https://registry.npmjs.org/react-media-hooks/-/react-media-hooks-1.1.2.tgz","fileCount":23,"integrity":"sha512-yoigm2EKH6kbKdU+s9dp+w9/koyp34jjkoMTpgY7X+LA1xb8ySSB3m2jxJDzacQY3nVR5oWw9yTJKYkvPWL5mQ==","signatures":[{"sig":"MEUCIAtbD9A1ZvJfWMoGtmPQQevqSV4i8ndF5pKIcMZQQ4skAiEAs3JQBelPa2y1apTdNBxGWcNOr7La+0yXc+e+x5v621Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46612},"main":"./dist/use-all.cjs.js","type":"module","_from":"file:react-media-hooks-1.1.2.tgz","types":"./dist/index.d.ts","module":"./dist/use-all.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/use-all.es.js","require":"./dist/use-all.cjs.js"},"./use-all":{"types":"./dist/index.d.ts","import":"./dist/use-all.es.js","require":"./dist/use-all.cjs.js"},"./use-blob":{"types":"./dist/hooks/blob.d.ts","import":"./dist/use-blob.es.js","require":"./dist/use-blob.cjs.js"},"./use-audio":{"types":"./dist/hooks/audio.d.ts","import":"./dist/use-audio.es.js","require":"./dist/use-audio.cjs.js"},"./use-media":{"types":"./dist/hooks/media.d.ts","import":"./dist/use-media.es.js","require":"./dist/use-media.cjs.js"},"./use-interval":{"types":"./dist/hooks/interval.d.ts","import":"./dist/use-interval.es.js","require":"./dist/use-interval.cjs.js"}},"private":false,"scripts":{"dev":"vite","lint":"eslint .","build":"tsc -b && vite build","preview":"vite preview"},"_npmUser":{"name":"dcollien","email":"me@dcollien.com"},"_resolved":"/tmp/07f84c0fa6cc3e530eeb211c1770caf7/react-media-hooks-1.1.2.tgz","_integrity":"sha512-yoigm2EKH6kbKdU+s9dp+w9/koyp34jjkoMTpgY7X+LA1xb8ySSB3m2jxJDzacQY3nVR5oWw9yTJKYkvPWL5mQ==","_npmVersion":"10.5.0","description":"A React hook library for media and audio utilities","directories":{},"sideEffects":false,"_nodeVersion":"20.12.2","dependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.1.0","eslint":"^9.19.0","globals":"^15.14.0","@eslint/js":"^9.19.0","typescript":"~5.7.3","@types/node":"^22.13.5","@types/react":"^19.0.8","vite-plugin-dts":"^4.5.0","@types/react-dom":"^19.0.3","typescript-eslint":"^8.22.0","@vitejs/plugin-react":"^4.3.4","eslint-plugin-react-hooks":"^5.0.0","eslint-plugin-react-refresh":"^0.4.18"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-media-hooks_1.1.2_1740557828899_0.9862716389902086","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"react-media-hooks","version":"1.1.3","license":"MIT","_id":"react-media-hooks@1.1.3","maintainers":[{"name":"dcollien","email":"me@dcollien.com"}],"dist":{"shasum":"a4bad42ea509664cb741303bba071dd15dd770cb","tarball":"https://registry.npmjs.org/react-media-hooks/-/react-media-hooks-1.1.3.tgz","fileCount":38,"integrity":"sha512-ukDJ1+HtJe4zs7jpVlncRhM1YU2ZETm74aagPru8CNS8yC6ROQKOzFiJL7GANdhLCI9yyxX05r2Z3sJV1LMxAw==","signatures":[{"sig":"MEYCIQCwR+0s3yL+l5Hee8xdoUTJDCixIvAkMm5guJcozEOOJwIhALmsGFFDehKWq7GudXqjjpKWGye4SWnp8AWqGyltSiym","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62460},"main":"./dist/use-all.cjs.js","type":"module","_from":"file:react-media-hooks-1.1.3.tgz","types":"./dist/index.d.ts","module":"./dist/use-all.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/use-all.es.js","require":"./dist/use-all.cjs.js"},"./use-all":{"types":"./dist/index.d.ts","import":"./dist/use-all.es.js","require":"./dist/use-all.cjs.js"},"./use-blob":{"types":"./dist/hooks/blob.d.ts","import":"./dist/use-blob.es.js","require":"./dist/use-blob.cjs.js"},"./use-audio":{"types":"./dist/hooks/audio.d.ts","import":"./dist/use-audio.es.js","require":"./dist/use-audio.cjs.js"},"./use-media":{"types":"./dist/hooks/media.d.ts","import":"./dist/use-media.es.js","require":"./dist/use-media.cjs.js"},"./use-interval":{"types":"./dist/hooks/interval.d.ts","import":"./dist/use-interval.es.js","require":"./dist/use-interval.cjs.js"}},"private":false,"scripts":{"dev":"vite","lint":"eslint .","build":"tsc -b && vite build","preview":"vite preview"},"_npmUser":{"name":"dcollien","email":"me@dcollien.com"},"_resolved":"/tmp/e02bc778270fbb3f5bba9b0f187840d0/react-media-hooks-1.1.3.tgz","_integrity":"sha512-ukDJ1+HtJe4zs7jpVlncRhM1YU2ZETm74aagPru8CNS8yC6ROQKOzFiJL7GANdhLCI9yyxX05r2Z3sJV1LMxAw==","_npmVersion":"10.9.2","description":"A React hook library for media and audio utilities","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.1.0","eslint":"^9.19.0","globals":"^15.14.0","@eslint/js":"^9.19.0","typescript":"~5.7.3","@types/node":"^22.13.5","@types/react":"^19.0.8","vite-plugin-dts":"^4.5.0","@types/react-dom":"^19.0.3","typescript-eslint":"^8.22.0","@vitejs/plugin-react":"^4.3.4","eslint-plugin-react-hooks":"^5.0.0","eslint-plugin-react-refresh":"^0.4.18"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-media-hooks_1.1.3_1740630957843_0.5473537969136373","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"react-media-hooks","version":"1.1.4","license":"MIT","_id":"react-media-hooks@1.1.4","maintainers":[{"name":"dcollien","email":"me@dcollien.com"}],"dist":{"shasum":"982f17e19cd989d4008988e823793e3b6773113d","tarball":"https://registry.npmjs.org/react-media-hooks/-/react-media-hooks-1.1.4.tgz","fileCount":38,"integrity":"sha512-5zvqugL4/+m6VkvUC2rfDgNQVv+JAtZZDNtwKhSPeQccwYM+gmgWnCzEeVIKWeptXCKM4PfX/CnBF05JAJpYsw==","signatures":[{"sig":"MEUCIBBcP1Py2yEbeyGYeElMwzDOnmHn8fw3Z2jGlHXhx5K8AiEAg63VppEnChPYmbi7pHM2nmI24L2oYA4Q3iZpLJNCwOA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62449},"main":"./dist/use-all.cjs.js","type":"module","_from":"file:react-media-hooks-1.1.4.tgz","types":"./dist/index.d.ts","module":"./dist/use-all.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/use-all.es.js","require":"./dist/use-all.cjs.js"},"./use-all":{"types":"./dist/index.d.ts","import":"./dist/use-all.es.js","require":"./dist/use-all.cjs.js"},"./use-blob":{"types":"./dist/hooks/blob.d.ts","import":"./dist/use-blob.es.js","require":"./dist/use-blob.cjs.js"},"./use-audio":{"types":"./dist/hooks/audio.d.ts","import":"./dist/use-audio.es.js","require":"./dist/use-audio.cjs.js"},"./use-media":{"types":"./dist/hooks/media.d.ts","import":"./dist/use-media.es.js","require":"./dist/use-media.cjs.js"},"./use-interval":{"types":"./dist/hooks/interval.d.ts","import":"./dist/use-interval.es.js","require":"./dist/use-interval.cjs.js"}},"private":false,"scripts":{"dev":"vite","lint":"eslint .","build":"tsc -b && vite build","preview":"vite preview"},"_npmUser":{"name":"dcollien","email":"me@dcollien.com"},"_resolved":"/tmp/e9d1bc8eae7c5a6e4577495c32fcb88b/react-media-hooks-1.1.4.tgz","_integrity":"sha512-5zvqugL4/+m6VkvUC2rfDgNQVv+JAtZZDNtwKhSPeQccwYM+gmgWnCzEeVIKWeptXCKM4PfX/CnBF05JAJpYsw==","_npmVersion":"10.9.2","description":"A React hook library for media and audio utilities","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.1.0","eslint":"^9.19.0","globals":"^15.14.0","@eslint/js":"^9.19.0","typescript":"~5.7.3","@types/node":"^22.13.5","@types/react":"^19.0.8","vite-plugin-dts":"^4.5.0","@types/react-dom":"^19.0.3","typescript-eslint":"^8.22.0","@vitejs/plugin-react":"^4.3.4","eslint-plugin-react-hooks":"^5.0.0","eslint-plugin-react-refresh":"^0.4.18"},"peerDependencies":{"react":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-media-hooks_1.1.4_1740631208992_0.972704605150543","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"react-media-hooks","version":"1.1.5","license":"MIT","_id":"react-media-hooks@1.1.5","maintainers":[{"name":"dcollien","email":"me@dcollien.com"}],"dist":{"shasum":"0e7997025e2cbda56083f5c2c2e71ebde9bb88b0","tarball":"https://registry.npmjs.org/react-media-hooks/-/react-media-hooks-1.1.5.tgz","fileCount":38,"integrity":"sha512-tne4hYNjk8Yvh8Fr+LI9L57GhfMqz2QrzgTmcmoErJsa+sF+6f7fBLgXswNBq83NslnRS71yTPAhTCpn8469VQ==","signatures":[{"sig":"MEQCIGG2xmqKFORwJmD5EhrMQu2LEpRLdUYrOVu0D0AcXwEDAiAQot25fsEwBboWJUK06oAw+T2056Mr3c2c69sNvb1+jw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62447},"main":"./dist/use-all.cjs.js","type":"module","_from":"file:react-media-hooks-1.1.5.tgz","types":"./dist/use-all.d.ts","module":"./dist/use-all.es.js","exports":{".":{"types":"./dist/use-all.d.ts","import":"./dist/use-all.es.js","require":"./dist/use-all.cjs.js"},"./use-all":{"types":"./dist/use-all.d.ts","import":"./dist/use-all.es.js","require":"./dist/use-all.cjs.js"},"./use-blob":{"types":"./dist/use-blob.d.ts","import":"./dist/use-blob.es.js","require":"./dist/use-blob.cjs.js"},"./use-audio":{"types":"./dist/use-audio.d.ts","import":"./dist/use-audio.es.js","require":"./dist/use-audio.cjs.js"},"./use-media":{"types":"./dist/use-media.d.ts","import":"./dist/use-media.es.js","require":"./dist/use-media.cjs.js"},"./use-interval":{"types":"./dist/use-interval.d.ts","import":"./dist/use-interval.es.js","require":"./dist/use-interval.cjs.js"}},"private":false,"scripts":{"dev":"vite","lint":"eslint .","build":"tsc -b && vite build","preview":"vite preview"},"_npmUser":{"name":"dcollien","email":"me@dcollien.com"},"_resolved":"/tmp/a65490fe8d7d3180cf056efa25ce6147/react-media-hooks-1.1.5.tgz","_integrity":"sha512-tne4hYNjk8Yvh8Fr+LI9L57GhfMqz2QrzgTmcmoErJsa+sF+6f7fBLgXswNBq83NslnRS71yTPAhTCpn8469VQ==","_npmVersion":"10.9.2","description":"A React hook library for media and audio utilities","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.1.0","eslint":"^9.19.0","globals":"^15.14.0","@eslint/js":"^9.19.0","typescript":"~5.7.3","@types/node":"^22.13.5","@types/react":"^19.0.8","vite-plugin-dts":"^4.5.0","@types/react-dom":"^19.0.3","typescript-eslint":"^8.22.0","@vitejs/plugin-react":"^4.3.4","eslint-plugin-react-hooks":"^5.0.0","eslint-plugin-react-refresh":"^0.4.18"},"peerDependencies":{"react":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-media-hooks_1.1.5_1740631534826_0.6477497148752591","host":"s3://npm-registry-packages-npm-production"}},"1.1.6":{"name":"react-media-hooks","version":"1.1.6","license":"MIT","_id":"react-media-hooks@1.1.6","maintainers":[{"name":"dcollien","email":"me@dcollien.com"}],"dist":{"shasum":"606b5f61ea708f8e278fc52ca23a453eb2f90cd5","tarball":"https://registry.npmjs.org/react-media-hooks/-/react-media-hooks-1.1.6.tgz","fileCount":51,"integrity":"sha512-Vi0Ehw3GlCe7mwaUSwoAnhKa0WgRKIOUS+Qw0QDh1i+HrZLEu8j8j49qGiu/mUOt92HpcuEteuhAxDKck3W1jg==","signatures":[{"sig":"MEQCICdQutXZB4CIhTBCLCX4kEcSYQDqh+CGqIfDpr4mYSoSAiACt+NS5tGHiijQ9FNkdHSVZ3tzv0kOCBJo8ko3+Z01aQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68053},"main":"./dist/use-all.cjs.js","type":"module","_from":"file:react-media-hooks-1.1.6.tgz","types":"./dist/use-all.d.ts","module":"./dist/use-all.es.js","exports":{".":{"types":"./dist/use-all.d.ts","import":"./dist/use-all.es.js","require":"./dist/use-all.cjs.js"},"./use-all":{"types":"./dist/use-all.d.ts","import":"./dist/use-all.es.js","require":"./dist/use-all.cjs.js"},"./use-blob":{"types":"./dist/use-blob.d.ts","import":"./dist/use-blob.es.js","require":"./dist/use-blob.cjs.js"},"./use-audio":{"types":"./dist/use-audio.d.ts","import":"./dist/use-audio.es.js","require":"./dist/use-audio.cjs.js"},"./use-media":{"types":"./dist/use-media.d.ts","import":"./dist/use-media.es.js","require":"./dist/use-media.cjs.js"},"./use-interval":{"types":"./dist/use-interval.d.ts","import":"./dist/use-interval.es.js","require":"./dist/use-interval.cjs.js"}},"private":false,"scripts":{"dev":"vite","lint":"eslint .","build":"tsc -b && vite build","preview":"vite preview"},"_npmUser":{"name":"dcollien","email":"me@dcollien.com"},"_resolved":"/tmp/3ff40f69d0e3ee92e3440e8f6c53cb92/react-media-hooks-1.1.6.tgz","_integrity":"sha512-Vi0Ehw3GlCe7mwaUSwoAnhKa0WgRKIOUS+Qw0QDh1i+HrZLEu8j8j49qGiu/mUOt92HpcuEteuhAxDKck3W1jg==","_npmVersion":"10.9.2","description":"A React hook library for media and audio utilities","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.1.0","eslint":"^9.19.0","globals":"^15.14.0","@eslint/js":"^9.19.0","typescript":"~5.7.3","@types/node":"^22.13.5","@types/react":"^19.0.8","vite-plugin-dts":"^4.5.0","@types/react-dom":"^19.0.3","typescript-eslint":"^8.22.0","@vitejs/plugin-react":"^4.3.4","eslint-plugin-react-hooks":"^5.0.0","eslint-plugin-react-refresh":"^0.4.18"},"peerDependencies":{"react":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-media-hooks_1.1.6_1740631987790_0.439994635895979","host":"s3://npm-registry-packages-npm-production"}},"1.1.7":{"name":"react-media-hooks","version":"1.1.7","license":"MIT","_id":"react-media-hooks@1.1.7","maintainers":[{"name":"dcollien","email":"me@dcollien.com"}],"dist":{"shasum":"e3d822b6d5d8b313acd5bfd9f97dc81cc5542245","tarball":"https://registry.npmjs.org/react-media-hooks/-/react-media-hooks-1.1.7.tgz","fileCount":51,"integrity":"sha512-ObsumASGCW+9yFsIjPPv5UyMfHak8Y2YrgLcG6gQTBKNhzgtB1KyF/B/rLnh00fgM601x+Ej6QwCRGhMgwnimg==","signatures":[{"sig":"MEUCICdfc/uaTMo7cQ++jKQGKCy50mVA20l/ZjvViwIpINF8AiEA/poYZgxRWMhatF/kty0OCQ4ga0ex9I4C+ls8VP3SIjM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68011},"main":"./dist/use-all.cjs","type":"module","_from":"file:react-media-hooks-1.1.7.tgz","types":"./dist/use-all.d.ts","module":"./dist/use-all.js","exports":{".":{"types":"./dist/use-all.d.ts","import":"./dist/use-all.js","require":"./dist/use-all.cjs"},"./use-all":{"types":"./dist/use-all.d.ts","import":"./dist/use-all.js","require":"./dist/use-all.cjs"},"./use-blob":{"types":"./dist/use-blob.d.ts","import":"./dist/use-blob.js","require":"./dist/use-blob.cjs"},"./use-audio":{"types":"./dist/use-audio.d.ts","import":"./dist/use-audio.js","require":"./dist/use-audio.cjs"},"./use-media":{"types":"./dist/use-media.d.ts","import":"./dist/use-media.js","require":"./dist/use-media.cjs"},"./use-interval":{"types":"./dist/use-interval.d.ts","import":"./dist/use-interval.js","require":"./dist/use-interval.cjs"}},"private":false,"scripts":{"dev":"vite","lint":"eslint .","build":"tsc -b && vite build","preview":"vite preview"},"_npmUser":{"name":"dcollien","email":"me@dcollien.com"},"_resolved":"/tmp/92e4253f9759294c5ee2ae1d4a2d4aa9/react-media-hooks-1.1.7.tgz","_integrity":"sha512-ObsumASGCW+9yFsIjPPv5UyMfHak8Y2YrgLcG6gQTBKNhzgtB1KyF/B/rLnh00fgM601x+Ej6QwCRGhMgwnimg==","_npmVersion":"10.9.2","description":"A React hook library for media and audio utilities","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.1.0","eslint":"^9.19.0","globals":"^15.14.0","@eslint/js":"^9.19.0","typescript":"~5.7.3","@types/node":"^22.13.5","@types/react":"^19.0.8","vite-plugin-dts":"^4.5.0","@types/react-dom":"^19.0.3","typescript-eslint":"^8.22.0","@vitejs/plugin-react":"^4.3.4","eslint-plugin-react-hooks":"^5.0.0","eslint-plugin-react-refresh":"^0.4.18"},"peerDependencies":{"react":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-media-hooks_1.1.7_1740632422129_0.5435683578072943","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"react-media-hooks","version":"1.2.1","license":"MIT","_id":"react-media-hooks@1.2.1","maintainers":[{"name":"dcollien","email":"me@dcollien.com"}],"dist":{"shasum":"781926b560f425fc3aa440540e2aea14a94fb05d","tarball":"https://registry.npmjs.org/react-media-hooks/-/react-media-hooks-1.2.1.tgz","fileCount":51,"integrity":"sha512-j2bZyh+RRnGC7GurHsof3CJK6axDxvdFuDzBYXo1HfwfrL/LyRMrsbuSfMHvNiOO8Hq5npde4NW+644FU16McQ==","signatures":[{"sig":"MEMCIFbYoYIcc8D1O3ZfRTjhSFe+XsbbP2kxqzxIoq/b3LUXAh86LSq4/RVpVJzZj2REVLMlaoMeRbjrNKYBs0LyxSz0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71464},"main":"./dist/use-all.cjs","type":"module","_from":"file:react-media-hooks-1.2.1.tgz","types":"./dist/use-all.d.ts","module":"./dist/use-all.js","exports":{".":{"types":"./dist/use-all.d.ts","import":"./dist/use-all.js","require":"./dist/use-all.cjs"},"./use-all":{"types":"./dist/use-all.d.ts","import":"./dist/use-all.js","require":"./dist/use-all.cjs"},"./use-blob":{"types":"./dist/use-blob.d.ts","import":"./dist/use-blob.js","require":"./dist/use-blob.cjs"},"./use-audio":{"types":"./dist/use-audio.d.ts","import":"./dist/use-audio.js","require":"./dist/use-audio.cjs"},"./use-media":{"types":"./dist/use-media.d.ts","import":"./dist/use-media.js","require":"./dist/use-media.cjs"},"./use-interval":{"types":"./dist/use-interval.d.ts","import":"./dist/use-interval.js","require":"./dist/use-interval.cjs"}},"private":false,"scripts":{"dev":"vite","lint":"eslint .","build":"tsc -b && vite build","preview":"vite preview"},"_npmUser":{"name":"dcollien","email":"me@dcollien.com"},"_resolved":"/tmp/ab75e6b4763e300d3d804ca17e912ea4/react-media-hooks-1.2.1.tgz","_integrity":"sha512-j2bZyh+RRnGC7GurHsof3CJK6axDxvdFuDzBYXo1HfwfrL/LyRMrsbuSfMHvNiOO8Hq5npde4NW+644FU16McQ==","_npmVersion":"10.9.2","description":"A React hook library for media and audio utilities","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.1.0","eslint":"^9.19.0","globals":"^15.14.0","@eslint/js":"^9.19.0","typescript":"~5.7.3","@types/node":"^22.13.5","@types/react":"^19.0.8","vite-plugin-dts":"^4.5.0","@types/react-dom":"^19.0.3","typescript-eslint":"^8.22.0","@vitejs/plugin-react":"^4.3.4","eslint-plugin-react-hooks":"^5.0.0","eslint-plugin-react-refresh":"^0.4.18"},"peerDependencies":{"react":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-media-hooks_1.2.1_1740751524415_0.5516843972591561","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"react-media-hooks","version":"1.2.2","license":"MIT","_id":"react-media-hooks@1.2.2","maintainers":[{"name":"dcollien","email":"me@dcollien.com"}],"dist":{"shasum":"162f5870663d29437bdf476fa0b5df8e7802b432","tarball":"https://registry.npmjs.org/react-media-hooks/-/react-media-hooks-1.2.2.tgz","fileCount":51,"integrity":"sha512-+xY5bCSlWwvXb0mwHGjOvvAgn2/sht66ScK1ZPB4mnPyArg8QG07jBPNqG99gS1y3QECFNvPRGiuyfXlOTlqIA==","signatures":[{"sig":"MEYCIQCAE43riB6q3KggnKIjQDpWgQkPAzEL7jyNCK/M46jFxQIhALm7ru9D3rkl+sOQl00qg5I3zjXdMGzeD7KkF3t0amiN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71638},"main":"./dist/use-all.cjs","type":"module","_from":"file:react-media-hooks-1.2.2.tgz","types":"./dist/use-all.d.ts","module":"./dist/use-all.js","exports":{".":{"types":"./dist/use-all.d.ts","import":"./dist/use-all.js","require":"./dist/use-all.cjs"},"./use-all":{"types":"./dist/use-all.d.ts","import":"./dist/use-all.js","require":"./dist/use-all.cjs"},"./use-blob":{"types":"./dist/use-blob.d.ts","import":"./dist/use-blob.js","require":"./dist/use-blob.cjs"},"./use-audio":{"types":"./dist/use-audio.d.ts","import":"./dist/use-audio.js","require":"./dist/use-audio.cjs"},"./use-media":{"types":"./dist/use-media.d.ts","import":"./dist/use-media.js","require":"./dist/use-media.cjs"},"./use-interval":{"types":"./dist/use-interval.d.ts","import":"./dist/use-interval.js","require":"./dist/use-interval.cjs"}},"private":false,"scripts":{"dev":"vite","lint":"eslint .","build":"tsc -b && vite build","preview":"vite preview"},"_npmUser":{"name":"dcollien","email":"me@dcollien.com"},"_resolved":"/tmp/7661ec62b6fb19f6fef2a82cdd56f8bc/react-media-hooks-1.2.2.tgz","_integrity":"sha512-+xY5bCSlWwvXb0mwHGjOvvAgn2/sht66ScK1ZPB4mnPyArg8QG07jBPNqG99gS1y3QECFNvPRGiuyfXlOTlqIA==","_npmVersion":"10.9.2","description":"A React hook library for media and audio utilities","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.1.0","eslint":"^9.19.0","globals":"^15.14.0","@eslint/js":"^9.19.0","typescript":"~5.7.3","@types/node":"^22.13.5","@types/react":"^19.0.8","vite-plugin-dts":"^4.5.0","@types/react-dom":"^19.0.3","typescript-eslint":"^8.22.0","@vitejs/plugin-react":"^4.3.4","eslint-plugin-react-hooks":"^5.0.0","eslint-plugin-react-refresh":"^0.4.18"},"peerDependencies":{"react":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-media-hooks_1.2.2_1740754779497_0.7043799966927626","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"react-media-hooks","version":"1.3.0","license":"MIT","_id":"react-media-hooks@1.3.0","maintainers":[{"name":"dcollien","email":"me@dcollien.com"}],"dist":{"shasum":"7019a2280f0fcfa54fbc3f9efdf16f138e0ee2c4","tarball":"https://registry.npmjs.org/react-media-hooks/-/react-media-hooks-1.3.0.tgz","fileCount":51,"integrity":"sha512-hX9lgnhBBBTWpkkaST7p7SCamBaCjbyVDumO6o9MQvu7uoqATC2zNeACWo/mi4G3o6pfV3NMT5Q5FhRaaEnIRA==","signatures":[{"sig":"MEUCIDgEB2vM8aOX15RWq7JJLqzedAvUB/wYOvmTPFWy56h9AiEAxebjL3ozOiXEqp7zfK8YP9lN5cY74Uy6AxVcTjK6tc0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77223},"main":"./dist/use-all.cjs","type":"module","_from":"file:react-media-hooks-1.3.0.tgz","types":"./dist/use-all.d.ts","module":"./dist/use-all.js","exports":{".":{"types":"./dist/use-all.d.ts","import":"./dist/use-all.js","require":"./dist/use-all.cjs"},"./use-all":{"types":"./dist/use-all.d.ts","import":"./dist/use-all.js","require":"./dist/use-all.cjs"},"./use-blob":{"types":"./dist/use-blob.d.ts","import":"./dist/use-blob.js","require":"./dist/use-blob.cjs"},"./use-audio":{"types":"./dist/use-audio.d.ts","import":"./dist/use-audio.js","require":"./dist/use-audio.cjs"},"./use-media":{"types":"./dist/use-media.d.ts","import":"./dist/use-media.js","require":"./dist/use-media.cjs"},"./use-interval":{"types":"./dist/use-interval.d.ts","import":"./dist/use-interval.js","require":"./dist/use-interval.cjs"}},"private":false,"scripts":{"dev":"vite","lint":"eslint .","build":"tsc -b && vite build","preview":"vite preview"},"_npmUser":{"name":"dcollien","email":"me@dcollien.com"},"_resolved":"/tmp/5bd83a083213d9530597cbd34ef9aa6c/react-media-hooks-1.3.0.tgz","_integrity":"sha512-hX9lgnhBBBTWpkkaST7p7SCamBaCjbyVDumO6o9MQvu7uoqATC2zNeACWo/mi4G3o6pfV3NMT5Q5FhRaaEnIRA==","_npmVersion":"10.9.2","description":"A React hook library for media and audio utilities","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.1.0","eslint":"^9.19.0","globals":"^15.14.0","@eslint/js":"^9.19.0","typescript":"~5.7.3","@types/node":"^22.13.5","@types/react":"^19.0.8","vite-plugin-dts":"^4.5.0","@types/react-dom":"^19.0.3","typescript-eslint":"^8.22.0","@vitejs/plugin-react":"^4.3.4","eslint-plugin-react-hooks":"^5.0.0","eslint-plugin-react-refresh":"^0.4.18"},"peerDependencies":{"react":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-media-hooks_1.3.0_1740811350018_0.19306177387177925","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"react-media-hooks","version":"1.3.1","license":"MIT","_id":"react-media-hooks@1.3.1","maintainers":[{"name":"dcollien","email":"me@dcollien.com"}],"dist":{"shasum":"2be0b3679f70ca7472f17751a8dd62c1c318cd04","tarball":"https://registry.npmjs.org/react-media-hooks/-/react-media-hooks-1.3.1.tgz","fileCount":51,"integrity":"sha512-DNjyawbacPdO5mcNWngCwInevivl24dr3oh8t6oRizXQPvnZ5ldGktPrkAdLteFMOwTpBHI7Z5P7guswP5KILw==","signatures":[{"sig":"MEYCIQD5H57x7mb7pz/d7zHrfSlircGG1TYmq5sd+fannJOuEwIhAJSwWbe7z6ZKNuVeqWsOnAI8BU4+sbV8uFEDvq07OTiE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78588},"main":"./dist/use-all.cjs","type":"module","_from":"file:react-media-hooks-1.3.1.tgz","types":"./dist/use-all.d.ts","module":"./dist/use-all.js","exports":{".":{"types":"./dist/use-all.d.ts","import":"./dist/use-all.js","require":"./dist/use-all.cjs"},"./use-all":{"types":"./dist/use-all.d.ts","import":"./dist/use-all.js","require":"./dist/use-all.cjs"},"./use-blob":{"types":"./dist/use-blob.d.ts","import":"./dist/use-blob.js","require":"./dist/use-blob.cjs"},"./use-audio":{"types":"./dist/use-audio.d.ts","import":"./dist/use-audio.js","require":"./dist/use-audio.cjs"},"./use-media":{"types":"./dist/use-media.d.ts","import":"./dist/use-media.js","require":"./dist/use-media.cjs"},"./use-interval":{"types":"./dist/use-interval.d.ts","import":"./dist/use-interval.js","require":"./dist/use-interval.cjs"}},"private":false,"scripts":{"dev":"vite","lint":"eslint .","build":"tsc -b && vite build","preview":"vite preview"},"_npmUser":{"name":"dcollien","email":"me@dcollien.com"},"_resolved":"/tmp/430879cb947d83ac39bcf42aa20a4aff/react-media-hooks-1.3.1.tgz","_integrity":"sha512-DNjyawbacPdO5mcNWngCwInevivl24dr3oh8t6oRizXQPvnZ5ldGktPrkAdLteFMOwTpBHI7Z5P7guswP5KILw==","_npmVersion":"10.9.2","description":"A React hook library for media and audio utilities","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.1.0","eslint":"^9.19.0","globals":"^15.14.0","@eslint/js":"^9.19.0","typescript":"~5.7.3","@types/node":"^22.13.5","@types/react":"^19.0.8","vite-plugin-dts":"^4.5.0","@types/react-dom":"^19.0.3","typescript-eslint":"^8.22.0","@vitejs/plugin-react":"^4.3.4","eslint-plugin-react-hooks":"^5.0.0","eslint-plugin-react-refresh":"^0.4.18"},"peerDependencies":{"react":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-media-hooks_1.3.1_1740978754431_0.569328262721192","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"react-media-hooks","version":"1.3.2","license":"MIT","_id":"react-media-hooks@1.3.2","maintainers":[{"name":"dcollien","email":"me@dcollien.com"}],"dist":{"shasum":"8becd43357f6650d10e89695677a2bcd97e1352a","tarball":"https://registry.npmjs.org/react-media-hooks/-/react-media-hooks-1.3.2.tgz","fileCount":63,"integrity":"sha512-pl3BjVRFGin+W42IfOC21vNAp6WJQvEASyzIcH+OZLLn+2qhW+FsXcMUwMcGOfrEB5XDCeKIVQNxltEerVfxIQ==","signatures":[{"sig":"MEYCIQCjpefwcMHPUy/Ee1zZeLYmlWB3b5fuetFHZY+Z0O3FPAIhAI1ezqsjFE4cpOMdRjmOT7Uu+wIxYpX6OpWJMUv8Bn9O","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":113546},"main":"./dist/use-all.cjs","type":"module","_from":"file:react-media-hooks-1.3.2.tgz","types":"./dist/use-all.d.ts","module":"./dist/use-all.js","exports":{".":{"types":"./dist/use-all.d.ts","import":"./dist/use-all.js","require":"./dist/use-all.cjs"},"./use-all":{"types":"./dist/use-all.d.ts","import":"./dist/use-all.js","require":"./dist/use-all.cjs"},"./use-blob":{"types":"./dist/use-blob.d.ts","import":"./dist/use-blob.js","require":"./dist/use-blob.cjs"},"./use-audio":{"types":"./dist/use-audio.d.ts","import":"./dist/use-audio.js","require":"./dist/use-audio.cjs"},"./use-media":{"types":"./dist/use-media.d.ts","import":"./dist/use-media.js","require":"./dist/use-media.cjs"},"./use-interval":{"types":"./dist/use-interval.d.ts","import":"./dist/use-interval.js","require":"./dist/use-interval.cjs"},"./audio-context":{"types":"./dist/audio-context.d.ts","import":"./dist/audio-context.js","require":"./dist/audio-context.cjs"}},"private":false,"scripts":{"dev":"vite","lint":"eslint .","build":"tsc -b && vite build","preview":"vite preview"},"_npmUser":{"name":"dcollien","email":"me@dcollien.com"},"_resolved":"/tmp/b6e50fe4be83cbe5a91352556ef4b86e/react-media-hooks-1.3.2.tgz","_integrity":"sha512-pl3BjVRFGin+W42IfOC21vNAp6WJQvEASyzIcH+OZLLn+2qhW+FsXcMUwMcGOfrEB5XDCeKIVQNxltEerVfxIQ==","_npmVersion":"10.9.2","description":"A React hook library for media and audio utilities","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.1.0","eslint":"^9.19.0","globals":"^15.14.0","@eslint/js":"^9.19.0","typescript":"~5.7.3","@types/node":"^22.13.5","@types/react":"^19.0.8","vite-plugin-dts":"^4.5.0","@types/react-dom":"^19.0.3","typescript-eslint":"^8.22.0","@vitejs/plugin-react":"^4.3.4","eslint-plugin-react-hooks":"^5.0.0","eslint-plugin-react-refresh":"^0.4.18"},"peerDependencies":{"react":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-media-hooks_1.3.2_1741321009577_0.6896435363763536","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"react-media-hooks","version":"1.3.3","license":"MIT","_id":"react-media-hooks@1.3.3","maintainers":[{"name":"dcollien","email":"me@dcollien.com"}],"dist":{"shasum":"9f7fad27176ef351471cbe8f5adaba67a7011349","tarball":"https://registry.npmjs.org/react-media-hooks/-/react-media-hooks-1.3.3.tgz","fileCount":63,"integrity":"sha512-xRz4awRD1i/O5+wooqK4rHFsrvZtpjQXxFL9F/H+MoQqnpjjRSOnXm0hx/x20oblI64PSYkto3DLnl1DUh2/1g==","signatures":[{"sig":"MEYCIQCPNwI62Lo6Azl377utAnunSC4ixSRSh0fW3bW1VxJn3wIhAKAREiQNNnSXQVnkv4YPVpQyZaSysV5Wcwik1ZZdjdxv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":123982},"main":"./dist/use-all.cjs","type":"module","_from":"file:react-media-hooks-1.3.3.tgz","types":"./dist/use-all.d.ts","module":"./dist/use-all.js","exports":{".":{"types":"./dist/use-all.d.ts","import":"./dist/use-all.js","require":"./dist/use-all.cjs"},"./use-all":{"types":"./dist/use-all.d.ts","import":"./dist/use-all.js","require":"./dist/use-all.cjs"},"./use-blob":{"types":"./dist/use-blob.d.ts","import":"./dist/use-blob.js","require":"./dist/use-blob.cjs"},"./use-audio":{"types":"./dist/use-audio.d.ts","import":"./dist/use-audio.js","require":"./dist/use-audio.cjs"},"./use-media":{"types":"./dist/use-media.d.ts","import":"./dist/use-media.js","require":"./dist/use-media.cjs"},"./use-interval":{"types":"./dist/use-interval.d.ts","import":"./dist/use-interval.js","require":"./dist/use-interval.cjs"},"./audio-context":{"types":"./dist/audio-context.d.ts","import":"./dist/audio-context.js","require":"./dist/audio-context.cjs"}},"private":false,"scripts":{"dev":"vite","lint":"eslint .","build":"tsc -b && vite build","preview":"vite preview"},"_npmUser":{"name":"dcollien","email":"me@dcollien.com"},"_resolved":"/tmp/82ce1398fc92a02aa933867661fa9afe/react-media-hooks-1.3.3.tgz","_integrity":"sha512-xRz4awRD1i/O5+wooqK4rHFsrvZtpjQXxFL9F/H+MoQqnpjjRSOnXm0hx/x20oblI64PSYkto3DLnl1DUh2/1g==","_npmVersion":"10.9.2","description":"A React hook library for media and audio utilities","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.1.0","eslint":"^9.19.0","globals":"^15.14.0","@eslint/js":"^9.19.0","typescript":"~5.7.3","@types/node":"^22.13.5","@types/react":"^19.0.8","vite-plugin-dts":"^4.5.0","@types/react-dom":"^19.0.3","typescript-eslint":"^8.22.0","@vitejs/plugin-react":"^4.3.4","eslint-plugin-react-hooks":"^5.0.0","eslint-plugin-react-refresh":"^0.4.18"},"peerDependencies":{"react":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-media-hooks_1.3.3_1741329269940_0.6537781641051628","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"react-media-hooks","private":false,"version":"1.4.0","description":"A React hook library for media and audio utilities","type":"module","license":"MIT","types":"./dist/use-all.d.ts","module":"./dist/use-all.js","main":"./dist/use-all.cjs","exports":{"./use-all":{"types":"./dist/use-all.d.ts","import":"./dist/use-all.js","require":"./dist/use-all.cjs"},"./use-audio":{"types":"./dist/use-audio.d.ts","import":"./dist/use-audio.js","require":"./dist/use-audio.cjs"},"./use-media":{"types":"./dist/use-media.d.ts","import":"./dist/use-media.js","require":"./dist/use-media.cjs"},"./use-blob":{"types":"./dist/use-blob.d.ts","import":"./dist/use-blob.js","require":"./dist/use-blob.cjs"},"./use-interval":{"types":"./dist/use-interval.d.ts","import":"./dist/use-interval.js","require":"./dist/use-interval.cjs"},"./audio-context":{"types":"./dist/audio-context.d.ts","import":"./dist/audio-context.js","require":"./dist/audio-context.cjs"},".":{"types":"./dist/use-all.d.ts","import":"./dist/use-all.js","require":"./dist/use-all.cjs"}},"sideEffects":false,"peerDependencies":{"react":"^19.0.0"},"dependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"devDependencies":{"@eslint/js":"^9.19.0","@types/node":"^22.13.5","@types/react":"^19.0.8","@types/react-dom":"^19.0.3","@vitejs/plugin-react":"^4.3.4","eslint":"^9.19.0","eslint-plugin-react-hooks":"^5.0.0","eslint-plugin-react-refresh":"^0.4.18","globals":"^15.14.0","typescript":"~5.7.3","typescript-eslint":"^8.22.0","vite":"^6.1.0","vite-plugin-dts":"^4.5.0"},"scripts":{"dev":"vite","build-demo":"vite build --mode demo","build":"tsc -b && vite build","lint":"eslint .","preview":"vite preview"},"_id":"react-media-hooks@1.4.0","_integrity":"sha512-xK8voddupaqJXmz3pGduOifoI6ps1nFZeXB9io2olzUOR/bdyIb7wyQIFt3kLGdsZn1dfwyt684Iu+rib9iFqA==","_resolved":"/private/var/folders/pd/hrc1wq397_l8wfpy4wlyh1g40000gn/T/4f87ad4b1b93dddda45bf4a884ad6c13/react-media-hooks-1.4.0.tgz","_from":"file:react-media-hooks-1.4.0.tgz","_nodeVersion":"22.13.1","_npmVersion":"11.1.0","dist":{"integrity":"sha512-xK8voddupaqJXmz3pGduOifoI6ps1nFZeXB9io2olzUOR/bdyIb7wyQIFt3kLGdsZn1dfwyt684Iu+rib9iFqA==","shasum":"686a3f56584715ebf8c158301cb2ab1b02c75678","tarball":"https://registry.npmjs.org/react-media-hooks/-/react-media-hooks-1.4.0.tgz","fileCount":63,"unpackedSize":323992,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHllT7ma+jXQ3Wt02bBAXpRhqG21FDl/wjeFJ9Y+SgUGAiEAtqPAXsBWRxr0sHkaxiZtDZq3czoGsAcIu8WQ72nOqsg="}]},"_npmUser":{"name":"dcollien","email":"me@dcollien.com"},"directories":{},"maintainers":[{"name":"dcollien","email":"me@dcollien.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react-media-hooks_1.4.0_1747701576472_0.7491357022115337"},"_hasShrinkwrap":false}},"time":{"created":"2025-02-26T08:03:30.968Z","modified":"2025-05-20T00:39:36.842Z","1.0.0":"2022-11-06T15:29:45.562Z","1.0.1":"2022-11-06T18:31:27.136Z","1.0.2":"2022-11-06T19:47:24.384Z","1.0.3":"2022-11-06T20:02:08.341Z","1.0.4":"2022-11-06T20:26:52.691Z","1.0.5":"2022-11-06T20:29:47.045Z","1.0.6":"2022-11-06T20:33:25.389Z","1.0.7":"2022-11-07T20:59:41.991Z","1.0.8":"2022-11-08T23:31:18.131Z","1.1.0":"2025-02-26T08:03:31.262Z","1.1.1":"2025-02-26T08:15:13.890Z","1.1.2":"2025-02-26T08:17:09.123Z","1.1.3":"2025-02-27T04:35:58.053Z","1.1.4":"2025-02-27T04:40:09.211Z","1.1.5":"2025-02-27T04:45:35.038Z","1.1.6":"2025-02-27T04:53:07.978Z","1.1.7":"2025-02-27T05:00:22.312Z","1.2.0":"2025-02-28T14:04:09.264Z","1.2.1":"2025-02-28T14:05:24.626Z","1.2.2":"2025-02-28T14:59:39.723Z","1.3.0":"2025-03-01T06:42:30.252Z","1.3.1":"2025-03-03T05:12:34.611Z","1.3.2":"2025-03-07T04:16:49.760Z","1.3.3":"2025-03-07T06:34:30.264Z","1.4.0":"2025-05-20T00:39:36.679Z"},"license":"MIT","description":"A React hook library for media and audio utilities","maintainers":[{"name":"dcollien","email":"me@dcollien.com"}],"readme":"# React Hooks for media and audio\n\nA React hook library for media and audio utilities\n\n```\nnpm install react-media-hooks\n```\n\n```typescript\nimport { useMediaRecorder, useAudioContext } from \"react-media-hooks\";\n\n// or\nimport { useMediaRecorder } from \"react-media-hooks/use-media\";\nimport { useAudioContext } from \"react-media-hooks/use-audio\";\n```\n\n## Example Usage\n\n```tsx\nimport { useCallback, useState } from \"react\";\n\nimport {\n  useAudioContext,\n  useAudioLevel,\n  useAudioStreamSource,\n} from \"react-media-hooks/use-audio\";\n\nimport {\n  useMediaBlobRecorder,\n  useElapsedTime,\n  useMediaStream,\n} from \"react-media-hooks/use-media\";\n\nimport { useBlobUrls } from \"react-media-hooks/use-blob\";\n\nexport function AudioRecorder({\n  audioDeviceId,\n  videoDeviceId,\n}: {\n  audioDeviceId: string | null;\n  videoDeviceId: string | null;\n}) {\n  const [isRecording, setIsRecording] = useState(false);\n\n  const constraints =\n    audioDeviceId && videoDeviceId\n      ? {\n          audio: { deviceId: { exact: audioDeviceId } },\n          video: { deviceId: { exact: videoDeviceId } },\n        }\n      : null;\n\n  // Create the media stream from the constraints\n  const stream = useMediaStream(constraints);\n\n  // Create the media recorder from the stream\n  const result = useMediaBlobRecorder(stream, isRecording);\n\n  // Calculate the time elapsed from the result\n  const timeElapsed = useElapsedTime(result, isRecording);\n\n  // Create the blob urls from the blobs in the result\n  const blobUrls = useBlobUrls(result.blobs);\n\n  // Create the audio source on the audio context, from the stream\n  const audioSource = useAudioStreamSource(stream);\n\n  // Update the audio level (between 0 and 1) from the audio source\n  // 60 times per second\n  const { level, timestamp } = useAudioLevel(\n    audioSource,\n    1000 / 60 // update 60 times per second\n  );\n\n  // Create the video ref to attach the stream to the video element\n  const videoRef = useCallback(\n    (node: HTMLVideoElement) => {\n      if (node) node.srcObject = stream;\n    },\n    [stream]\n  );\n\n  const minutes = timeElapsed.minutes.toFixed(0).padStart(2, \"0\");\n  const seconds = timeElapsed.seconds.toFixed(0).padStart(2, \"0\");\n  const milliseconds = timeElapsed.millis.toFixed(0).padStart(3, \"0\");\n\n  return (\n    <div>\n      <video ref={videoRef} autoPlay playsInline muted></video>\n      <button onClick={() => setIsRecording(true)}>Record</button>\n      <button onClick={() => setIsRecording(false)}>Stop</button>\n      <hr />\n      <p>Audio level:</p>\n      <div>\n        <div\n          style={{\n            width: `${200 * level}px`,\n            height: \"10px\",\n            background: \"black\",\n          }}\n        ></div>\n      </div>\n      <pre>\n        {minutes}:{seconds}.{milliseconds}\n      </pre>\n\n      <p>\n        Changing the audioDeviceId or videoDeviceId will create a new file\n        below. Stopping/Starting the recording will clear all files and start a\n        new recording.\n      </p>\n      {blobUrls.map((url) => (\n        <div key={url}>\n          <audio controls src={url}></audio>\n        </div>\n      ))}\n    </div>\n  );\n}\n```\n\n## Demo App\n\n```\npnpm run dev\n```\n\n## Hooks\n\n### Audio\n\nHooks for WebAudio\n\n```typescript\nimport {...} from 'react-media-hooks/use-audio`\n```\n\n#### useAudioContext\n\n```typescript\nuseAudioContext(): AudioContext | null\n```\n\nA global audio context is used by default. As per MDN:\n\n> It's recommended to create one AudioContext and reuse it instead of initializing a new one each time, and it's OK to use a single AudioContext for several different audio sources and pipeline concurrently.\n\nBrowser vendors decided that Web Audio contexts should not be allowed to automatically play audio; they should instead be started by a user. As such, the `useAudioContext` hook waits for any user interaction before initializing the `AudioContext` so that the context does not get created in suspended mode.\n\nThe context is stored as component state so component renders will be triggered when the context initializes and changes from `null` to the initialized `AudioContext` object.\n\ne.g.\n\n```tsx\nimport { useAudioContext } from \"react-media-hooks/use-audio\";\n\nfunction Component() {\n  const context = useAudioContext(); // will use the global audio context\n\n  return <></>;\n}\n```\n\nOptionally, a React Context Provider can be used to create separate audio contexts. e.g.\n\n```tsx\nimport { useAudioContext } from \"react-media-hooks/use-audio\";\nimport { AudioContextProvider } from \"react-media-hooks/audio-context\";\n\nfunction SubComponent() {\n  const context = useAudioContext(); // will use the context provider's AudioContext\n  const deviceId = ...;\n\n  useEffect(() => {\n    // Change only the context provider's sink\n    context.setSinkId(deviceId);\n  }, [deviceId]);\n\n  return <></>;\n}\n\nfunction Component() {\n  // Create a new AudioContext and initialize it on user interaction\n  return (\n    <AudioContextProvider>\n      <SubComponent />\n    </AudioContextProvider>\n  );\n}\n```\n\nOptionally, your own audio context can be given:\n\n```tsx\nfunction Component() {\n  // Create a new AudioContext and initialize it on user interaction\n  return (\n    <AudioContextProvider audioContext={myAudioContext}>\n      <SubComponent />\n    </AudioContextProvider>\n  );\n}\n```\n\nIf the given context is suspended, it will be automatically woken up on next user interaction.\n\n#### useAudioStreamSource\n\n```typescript\nuseAudioStreamSource(\n    stream: MediaStream | null\n): MediaStreamAudioSourceNode`\n```\n\nGiven a MediaStream, creates a MediaStreamSourceNode using `audioContext.createMediaStreamSource(stream)` when both `audioContext` and `stream` become initialized.\n\nThe returned source node is stored as component state so component renders will be triggered when the audio source node becomes available.\n\n#### useAudioAnalyser\n\n```typescript\nuseAudioAnalyser(\n    source: MediaStreamAudioSourceNode | null,\n    fftSize = 256\n): AnalyserNode | null\n```\n\nGiven a MediaStreamAudioSourceNode, returns an AnalyserNode. When the `source` changes, the old source will disconnect the analyser (if it exists), and the new source will be connected to the analyser.\n\n#### useAudioLevel\n\n```typescript\nuseAudioLevel(\n    source: MediaStreamAudioSourceNode | null,\n    updateInterval: number | null = 1000 / 60\n): {\n    level: number,\n    timestamp: number\n}\n```\n\nGiven a MediaStreamAudioSourceNode, returns the current volume level and the timestamp that the volume was last sampled (uses `Date.now()`).\n\nThe `updateInterval` controls how frequently the volume level is sampled, and can be set to `null` to pause updates.\n\n#### useAudioDataSource\n\n```typescript\nuseAudioDataSource(\n    data: ArrayBuffer | AudioBuffer | Blob | null,\n    detune?: number,\n    loop?: boolean,\n    loopStart?: number,\n    loopEnd?: number,\n    playbackRate?: number\n): AudioBufferSourceNode | null\n```\n\nReturns a AudioBufferSourceNode (when one has initialized) from given audio data: either ArrayBuffer, AudioBuffer, or Blob.\n\n#### useAudioDataPlayback\n\n```typescript\nuseAudioDataPlayback(\n    data: ArrayBuffer | AudioBuffer | Blob | null,\n    detune?: number,\n    loop?: boolean,\n    loopStart?: number,\n    loopEnd?: number,\n    playbackRate?: number\n): (when?: number, offset?: number, duration?: number) => Promise<void>\n```\n\nGiven audio data (ArrayBuffer, AudioBuffer, or Blob), returns a `start` function. When called this function will start playing the audio.\n\n### Media\n\nHooks for dealing with MediaDevices\n\n```typescript\nimport {...} from 'react-media-hooks/use-media`\n```\n\n#### useMediaStreamInputDevices\n\n```typescript\nuseMediaStreamInputDevices(\n    constraints: MediaStreamConstraints | null.\n    onAddTrack?: (track: MediaStreamTrack) => void,\n    onRemoveTrack?: (track: MediaStreamTrack) => void,\n    onEnded?: () => void,\n    onAudioEnded?: () => void,\n    onVideoEnded?: () => void,\n    onTrackMuted?: (\n      track: MediaStreamTrack,\n      mutedTracks: MediaStreamTrack[]\n    ) => void,\n    onTrackUnmuted?: (\n      track: MediaStreamTrack,\n      mutedTracks: MediaStreamTrack[]\n    ) => void\n): {\n    stream: MediaStream | null;\n    audioDevices: MediaDeviceInfo[];\n    videoDevices: MediaDeviceInfo[];\n    reload: () => void;\n}\n```\n\nGiven MediaStreamConstraints, returns a MediaStream and two lists of device info for audio and video respectively. When the constraints change (either the object reference, the value of its `audio` or `video` properties, or their respective `deviceId` properties), then the stream will be replaced with a new MediaStream for that set of constraints.\n\n`useMediaStreamInputDevices` will request permission to use the available devices and update the stream and device lists when permission is granted. If a new device is connected, the lists will update.\n\nSetting `constraints` to `null` will stop the stream.\n\nCalling `reload` will re-initialize the stream and device lists (same as setting constraints to `null` and back to its original value).\n\nThe same event handlers can be given as `useMediaStreamWithEvents`.\n\n#### useMediaInputDevicesRequest\n\n```typescript\nuseMediaInputDevicesRequest(constraints?: {\n    audio: boolean;\n    video: boolean;\n}): {\n    audioDevices: MediaDeviceInfo[];\n    videoDevices: MediaDeviceInfo[];\n}\n```\n\nChecks whether permissions have already been given, and if not it opens a stream only momentarily, enough to trigger a permissions request and enumerate audio and video devices. The stream is then closed.\n\nChanging the constraints will re-request the devices. If a new device is connected, the lists will update.\n\n#### useMediaPermissionsQuery\n\n```typescript\nuseMediaPermissionsQuery(): {\n    microphone: PermissionState | \"unsupported\" | null;\n    camera: PermissionState | \"unsupported\" | null;\n}\n```\n\nQueries the permissions available.\n\n`microphone` and `camera` will switch from `null` to one of:\n\n- \"granted\": Permission has already been given\n- \"denied\": Permission was explicitly denied\n- \"prompt\": Permission has not been requested\n- \"unsupported\": The browser doesn't support querying for permissions\n\n#### useMediaDevices\n\n```typescript\nuseMediaDevices(isPermissionGranted?: boolean): {\n    readonly reload: () => void;\n    readonly audioInput: MediaDeviceInfo[];\n    readonly videoInput: MediaDeviceInfo[];\n    readonly audioOutput: MediaDeviceInfo[];\n}\n```\n\nGiven a flag for if permission has been granted, returns three lists of media devices: audio inputs, video inputs, and audio outputs. Does not request permissions itself.\n\nChanging the `isPermissionGranted` flag will re-initialize the lists, as will calling `reload()`;\n\nNew lists will be automatically set when a new device is made available.\n\n#### useMediaInputDevices\n\n```typescript\nuseMediaInputDevices(\n    isPermissionGranted: boolean\n): readonly [MediaDeviceInfo[], MediaDeviceInfo[]]\n```\n\nGiven a flag for if permission has been granted, returns two lists of media input devices: audio and video (in order). Does not request permissions itself.\n\nChanging the `isPermissionGranted` flag will re-initialize the lists.\n\nNew lists will be automatically set when a new device is made available.\n\n#### useMediaStream\n\n```typescript\nuseMediaStream(\n    constraints: MediaStreamConstraints | null\n): MediaStream\n```\n\n`useMediaStream` can be used to initialize the media stream (or request permissions) for a set of constraints, separately.\n\nSetting `constraints` to `null` will stop the stream.\n\n#### useMediaStreamWithEvents\n\n```typescript\nuseMediaStreamWithEvents(\n    constraints: MediaStreamConstraints | null,\n    onAddTrack?: (track: MediaStreamTrack) => void,\n    onRemoveTrack?: (track: MediaStreamTrack) => void,\n    onEnded?: () => void,\n    onAudioEnded?: () => void,\n    onVideoEnded?: () => void,\n    onTrackMuted?: (\n      track: MediaStreamTrack,\n      mutedTracks: MediaStreamTrack[]\n    ) => void,\n    onTrackUnmuted?: (\n      track: MediaStreamTrack,\n      mutedTracks: MediaStreamTrack[]\n    ) => void\n): {\n  stream: MediaStream | null;\n  reload: () => void;\n  stopAudio: () => void;\n  stopVideo: () => void;\n  stopTrack: (trackId: string) => void;\n}\n```\n\nSimilar to `useMediaStream` but with more options. Calling `reload` will re-initialize the stream.\nCalling `stopAudio` will stop all audio tracks, `stopVideo` will stop all video tracks, `stopTrack` to specify a track ID to stop.\n\nEvent handlers:\n\n- onAddTrack: when a track is added to the stream\n- onRemoveTrack: when a track is removed from the stram\n- onEnded: when all tracks are in `readyState = \"ended\"`\n- onAudioEnded: when all audio tracks are in `readyState = \"ended\"`\n- onVideoEnded: when all video tracks are in `readyState = \"ended\"`\n- onTrackMuted: when a track becomes muted\n- onTrackUnmuted: when a track becomes unmuted\n\n#### useMediaBlobRecorder\n\n```typescript\nuseMediaBlobRecorder(\n    stream: MediaStream | null,\n    isRecording: boolean,\n    options?: MediaRecorderOptions\n): {\n    startTime: number | null;\n    blobs: Blob[];\n} as RecordedMediaResult\n```\n\nStart recording on a stream. Toggle `isRecording` to start/stop recording. Starting a new recording will re-initialize the `blobs` array. Stopping recording will populate the `blobs` array with new data.\n\nIf a stream changes during recording, a new audio file Blob will be added to the `blobs` output array.\n\nThe `startTime` is the ms since the `timeOrigin`, i.e. compare against `performance.now()`.\n\n```typescript\nuseElapsedTime(\n    result: RecordedMediaResult,\n    isRecording: boolean,\n    updateInterval?: number | null\n): {\n    elapsed: number;\n    minutes: number;\n    seconds: number;\n    millis: number;\n}\n```\n\nCan be used as a shortcut to retrieve the elapsed time since a result was created, updating every `updateInterval`.\n\n### useMediaRecorder\n\n```typescript\nuseMediaRecorder(\n    stream: MediaStream | null,\n    isRecording: boolean,\n    callbacks?: {\n      onDataAvailable?: (event: BlobEvent) => void,\n      onStart?: (event: MediaRecorderEvent, isResuming: boolean) => void,\n      onStop?: (event: MediaRecorderEvent) => void,\n    },\n    options?: UseMediaRecorderOptions\n): void\n```\n\nStart recording on a stream. Toggle `isRecording` to start/stop recording. \n\nStream changes: if the stream changes mid-recording, `onStop` will be called, then `onStart` will be called with `isResuming = true` when the new stream starts.\n\n`onDataAvailable` sends `event.data` that can be combined into an audio file `onStop` using:\n\n```typescript\nconst blob = new Blob([data0, data1, ...], {\n    type: event.recorder.mimeType,\n});\n```\n\n`UseMediaRecorderOptions` has a `timeSlice` property which controls how many ms are recorded until `onDataAvailable` is called.\n\n### Utility Hooks used in the Demo App\n\n#### useInterval\n\n```typescript\nimport { useInterval } from \"react-media-hooks/use-interval\";\n```\n\n```typescript\nuseInterval(callback: () => void, delay: number | null): void\n```\n\nCalls `callback` every `delay` ms.\n\nSetting `delay` to `null` will stop it.\n\n#### useBlobUrls\n\n```typescript\nimport { useBlobUrls, downloadBlobs } from \"react-media-hooks/use-blob\";\n```\n\n```typescript\nuseBlobUrls(blobs: Blob[]): string[]\n```\n\nCreate blob urls for each blob whenever the `blobs` array changes. Revokes old URLs.\n\nAlso utility function:\n\n```typescript\ndownloadBlobs(blobs: Blob[], filePrefix?: string): void\n```\n\nWhich triggers downloads of an array of blobs.\n","readmeFilename":"README.md"}