{"_id":"react-adaptive-hooks","_rev":"8-f1bc9d835190642d8f830b4ea48482cb","name":"react-adaptive-hooks","dist-tags":{"latest":"0.0.8"},"versions":{"0.0.1":{"name":"react-adaptive-hooks","version":"0.0.1","description":"Give users a great experience best suited to their device and network constraints","main":"index.js","repository":{"type":"git","url":"git+https://github.com/GoogleChromeLabs/react-adaptive-hooks.git"},"author":{"name":"Google Chrome"},"license":"Apache-2.0","private":false,"scripts":{"test":"jest"},"devDependencies":{"@babel/core":"^7.5.5","@babel/node":"^7.5.5","@babel/preset-env":"^7.5.5","react":"16.9.0","react-dom":"16.9.0","ua-parser-js":"^0.7.20","@testing-library/react-hooks":"^1.1.0","babel-polyfill":"^6.26.0","jest":"^24.8.0","react-test-renderer":"16.9.0"},"gitHead":"e9409b1d85bc2ef81878c46c2ddc3c7c82e281a1","bugs":{"url":"https://github.com/GoogleChromeLabs/react-adaptive-hooks/issues"},"homepage":"https://github.com/GoogleChromeLabs/react-adaptive-hooks#readme","_id":"react-adaptive-hooks@0.0.1","_nodeVersion":"13.0.1","_npmVersion":"6.12.0","dist":{"integrity":"sha512-SULCEqCvogOP/ijIMpPnihadZh7WrQyW294Q/xn5L47dLz7FcS2HSz3CVLAZiJP/qx/Vj56V+LtYin/E7n2Mnw==","shasum":"824f11f45ab43475d36457a6b712be7432ca1e4f","tarball":"https://registry.npmjs.org/react-adaptive-hooks/-/react-adaptive-hooks-0.0.1.tgz","fileCount":14,"unpackedSize":35095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdx2mlCRA9TVsSAnZWagAAXtgP/0Pfw2tfyiKPw9zJnRvD\n7AyD+Up2rWv5t8X/CSis7QGvfIZqIY1bUZ49KwqnZGPkpGWn2CizCUT+Z7GP\nxEcCo+EW3yNHPmjb8Z8CE5zfDs6+UnSbknF3QtBuFNGbT2g8pHBqyIdLk7z+\nTE/DI2DIz8W0dkZb+bwpMGB0iC+JCGDLSJ6UIpfFm5+/iPHdBFTNrIEkEW0i\n4O4Z7Dq4m7FxhVpnAooPZRp7ff48eArWEJfrfWNzx8WtAH1T8TEuAyEvEQ2x\nFYqxO9KqcMvlSL2Zw8XCMFgamkEQk2yWed4btF5Gl7xF7v6Hx+4qFZiLRsSn\nVPP+EKNcy6G4rppyrNPKrSzBqJdGi0+QGKDlpkQFlKYTjUhe6EpKJi75ymLs\nFp/yHdp6/jeLyPlNdWnnb1LEz9Lh+ba77qqBk4oFWr0PLSYbQAoEYUkBEfWu\n/ZCrnB/Yqch4FlSDMDGasuVMcNlxPZeOduRA/gn5bT3IN8jtT0mwz67mOwAq\n14l0E/5rthtt2LQezZGWf+X/08We5DMz7dzjboUaY/HlapDonabNUq1kw5gN\nTxxY4Z5vD8JpgKHUm2Rx9hOLPIMnDz61mdoQqwnTRi/Ek3y1H6P9DnnNMo8H\nQPL6IOVteAF4ANhET9DhWLflz0YgEZJRpEp9r7g15BAvUm7M+hHzv80/ke3C\nmRMp\r\n=3hWx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYqc7FwUwhx0Czd/9+xx1jLaFqxBn9io5pg6YZ8d3yYQIgR4lvToDAUOgsood42eThT5WXBzRXsHVxm2JCnZtnGrg="}]},"maintainers":[{"name":"addyosmani","email":"addyosmani@gmail.com"}],"_npmUser":{"name":"addyosmani","email":"addyosmani@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-adaptive-hooks_0.0.1_1573349797205_0.8339436143783971"},"_hasShrinkwrap":false},"0.0.2":{"name":"react-adaptive-hooks","version":"0.0.2","description":"Give users a great experience best suited to their device and network constraints","main":"index.js","repository":{"type":"git","url":"git+https://github.com/GoogleChromeLabs/react-adaptive-hooks.git"},"author":{"name":"Google Chrome"},"license":"Apache-2.0","private":false,"scripts":{"test":"jest"},"peerDependencies":{"react":"^16.8.0"},"devDependencies":{"@babel/core":"^7.5.5","@babel/node":"^7.5.5","@babel/preset-env":"^7.5.5","react":"16.9.0","react-dom":"16.9.0","ua-parser-js":"^0.7.20","@testing-library/react-hooks":"^1.1.0","babel-polyfill":"^6.26.0","jest":"^24.8.0","react-test-renderer":"16.9.0"},"keywords":["react-hooks","hooks","react","performance"],"gitHead":"ffd2e1f85e711df875ba0fd5d94d92a72d47298b","bugs":{"url":"https://github.com/GoogleChromeLabs/react-adaptive-hooks/issues"},"homepage":"https://github.com/GoogleChromeLabs/react-adaptive-hooks#readme","_id":"react-adaptive-hooks@0.0.2","_nodeVersion":"13.0.1","_npmVersion":"6.12.0","dist":{"integrity":"sha512-jYk/Oa0e2OFkthuRyINZdQxK7VNpLgvomRPU21vsoVFxwV/xmejpeZ4qAp5dJ5E5O5/WuAofGX3G9DB+Z73w6A==","shasum":"5b21a612b910c5c1da3c406d52bd492a6e6800b8","tarball":"https://registry.npmjs.org/react-adaptive-hooks/-/react-adaptive-hooks-0.0.2.tgz","fileCount":14,"unpackedSize":35231,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdx2qwCRA9TVsSAnZWagAAlYEP/2ETbERznPfxlfBxMvYG\n8DMufjvy6GMGuQrlLRdPAmaMDYiHx/1jeqyh0cYa3A+6madADpRC974hCm2t\nALgqxBDtZmSHCHCAjsFbCcaR21luaf/z67gO2gFBiEBXqhIjFPKMrydHo2F+\nG+7aDEy6PYLChxnjIy4ZkuhkYjBlgBWU5T5xgMn38bpfhiN57M+z6GcIgI6C\ndGQ0QDY23kxcu8XJ8st6njEawSetogPl+jCg6BhfZLW09OdTTFLTdFIyWeT7\nHikl7LfZkL9cB5RL8bMEOId1O2GIPy1WT+blZEa70eo89tP6BTTfcjzFkEBF\nd/y6p0UFlM2KXz9Q3QQAKGJbd7TimmXy3iCpsdu+lU9K2eyKSh7ltfmgU8qi\nCw8bINUHYGJBmNSk9Rw0t/ED0sGON1GQLmLzYfP3kgZK9PJAv/mf3vGhOnNs\nx8H/4RoRRwBVQpMS04BCLm1X2tFvpKOmZoyQzDOGc7zY0BJEjdHH/K3hQSGl\ncxBgExyxixOyySAICDgT9gkuHG9haly6kQUX/v9I/gMRfTyBr4gzZgL1q/VP\nznkfaUYsZyyWQIQr9l7kCLLybmj4sSWrk7pYOz9TBNIRb3wDaVZUczrg0nFw\nzLBQiDOmFakgDCumbGeaYQsXeV1JozYcz3NFTVR4W5QAoc01aGr+bsePdkU2\nF3oW\r\n=iYb8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG7n9FUF96zp2GM52B7y6Tvjb8QAdHXo0HajzgSf68WvAiEAlN5Zt3NA/6rOz0ccNmRKQZDVedXVEJblVaPdC/pMEsg="}]},"maintainers":[{"name":"addyosmani","email":"addyosmani@gmail.com"}],"_npmUser":{"name":"addyosmani","email":"addyosmani@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-adaptive-hooks_0.0.2_1573350064200_0.44886139212298315"},"_hasShrinkwrap":false},"0.0.3":{"name":"react-adaptive-hooks","version":"0.0.3","description":"Give users a great experience best suited to their device and network constraints","main":"index.js","repository":{"type":"git","url":"git+https://github.com/GoogleChromeLabs/react-adaptive-hooks.git"},"author":{"name":"Google Chrome"},"license":"Apache-2.0","private":false,"scripts":{"test":"jest"},"peerDependencies":{"react":"^16.8.0"},"devDependencies":{"@babel/core":"^7.5.5","@babel/node":"^7.5.5","@babel/preset-env":"^7.5.5","react":"16.9.0","react-dom":"16.9.0","ua-parser-js":"^0.7.20","@testing-library/react-hooks":"^1.1.0","babel-polyfill":"^6.26.0","jest":"^24.8.0","react-test-renderer":"16.9.0"},"keywords":["react-hooks","hooks","react","performance"],"gitHead":"47f1441f2754b7c3d6a8a8766b94decf245e138e","bugs":{"url":"https://github.com/GoogleChromeLabs/react-adaptive-hooks/issues"},"homepage":"https://github.com/GoogleChromeLabs/react-adaptive-hooks#readme","_id":"react-adaptive-hooks@0.0.3","_nodeVersion":"13.0.1","_npmVersion":"6.12.0","dist":{"integrity":"sha512-pbm+L3Cwjdn0sgenCzWXkGqOwKwCOeT/mWR38vZ5kCXQQZNVQR7SycVCAkBHjbF4VpDzHZflYaOx/2fJvg/jlg==","shasum":"88f36c16539b40f7d04e3add0a708db6d97c86cb","tarball":"https://registry.npmjs.org/react-adaptive-hooks/-/react-adaptive-hooks-0.0.3.tgz","fileCount":14,"unpackedSize":35174,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdx2tMCRA9TVsSAnZWagAAdUkP/Aqkvb+cF0a50qSnNeeu\nGvf6uergqfSA0+w1HqxRI7FcwJP/P+GvGB0tVUWVJcPtgY0CBHXiJh1wWaoh\n9zkcOa8H0ErWkF3p3aTbyqrbOsWhHc7aJSCG6gLJrubgnBq76MC4jO+Qk970\nue9qXY8sYqp7+MqpnBeVpM2POuNVQQUfHITDCfxH3k/oaj/8sKQOO55e3hym\nNEUG4iTc0hKUd2nfH76yrTDGP2ddBpUx3J9lt1fUYobA07OQnGEVggLhs2FL\npObbyH4QoaCcadTeE6VPyqCOUatODI6lSRFSTRRkG8WUIbsn2uOrE4xSbZHi\nNXziPKxhVI7hzSXiZ2ueekR3xKQKHS46gTpZIvjdgtfNQmpEWrfdNcMak4SU\nKsTb388WiDLBBmk/YRZAzl73ntwMirhHleoQgWgcTXcbTODrteTGncsYJfzW\neutZL2GzdMGFgQ85Y8xhud0PoRiMDGGyJJieosM1tF2VcBIyI1A8W6JvIK3+\n9IVtmFO7p7UzlsP9ISeFn+89yx4AHX70igTohQaIB1YUmXA6gI6k9sLZ4cmc\nU9Eqobd798KF5pHZsDlbTuTQw4aPXc4TCDPXk0Ic2o0COEep47QNpFevZZWW\nKraANOxyxkPRkTvP1ZiZPTZPFsERCGiaV1VMed12sHhHqbcPJHzkVXDjSnJz\nl65H\r\n=OKzo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC/oRnJ1yr9Yyk1lsYQUxkANNAhFb+vUgzuI/1F7XD83gIhAMOOBfQytVPL5dg6qyqDDPM9MFnkQMx74fpO2DA37iOj"}]},"maintainers":[{"name":"addyosmani","email":"addyosmani@gmail.com"}],"_npmUser":{"name":"addyosmani","email":"addyosmani@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-adaptive-hooks_0.0.3_1573350220516_0.13667028297518247"},"_hasShrinkwrap":false},"0.0.4":{"name":"react-adaptive-hooks","version":"0.0.4","description":"Give users a great experience best suited to their device and network constraints","main":"index.js","repository":{"type":"git","url":"git+https://github.com/GoogleChromeLabs/react-adaptive-hooks.git"},"author":{"name":"Google Chrome"},"license":"Apache-2.0","private":false,"scripts":{"test":"jest"},"peerDependencies":{"react":"^16.8.0"},"devDependencies":{"@babel/core":"^7.5.5","@babel/node":"^7.5.5","@babel/preset-env":"^7.5.5","react":"16.9.0","react-dom":"16.9.0","ua-parser-js":"^0.7.20","@testing-library/react-hooks":"^1.1.0","babel-polyfill":"^6.26.0","jest":"^24.8.0","react-test-renderer":"16.9.0"},"keywords":["react-hooks","hooks","react","performance"],"gitHead":"b964f3e237f6dd0a6b744f865894c594b2dc6d9e","bugs":{"url":"https://github.com/GoogleChromeLabs/react-adaptive-hooks/issues"},"homepage":"https://github.com/GoogleChromeLabs/react-adaptive-hooks#readme","_id":"react-adaptive-hooks@0.0.4","_nodeVersion":"13.0.1","_npmVersion":"6.12.0","dist":{"integrity":"sha512-sP1rrOhzwdF1ycFiMgZxlmeWexoSJF5dokWjMz4R4srJC7PATrvlydW2zPFpTDqmTnjZI/Q/5ORuWX9q0rWt9Q==","shasum":"cb7a7f64a379c87ee41dc87d6a5737a88f08e866","tarball":"https://registry.npmjs.org/react-adaptive-hooks/-/react-adaptive-hooks-0.0.4.tgz","fileCount":15,"unpackedSize":38167,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdymE3CRA9TVsSAnZWagAAo9MQAIbHmNR6i7odnVq+zME+\nWBp5r7wq+YJlno5KArHX5LXA8xRim0CfavVDaBiA3Z82SkvlpKdQujWnmBjg\n3r0hobQ2kkQt/Xa+Q1VIXhhpSdibH0Wb0JywIPwvEncHdVshw1L6w+eGWJ2S\ny+vCwDrWV1HFl5ecPXXbI2BIZub6Tp1UxtyV9Ky4CmT1nqC/Ic4dQ7WwKyhh\n5iqNjd3S333fvFY/wesrl5Cw+laNcXLaDOmJPLvfx33HoitMPq05YpkKGoLD\nKrfKdGcmEacKmOBlNc0Ma1PBZB+DTReiCvZpf51N5jfMmAdK0LskuHNHcbQh\niULRYtzw1y1qn8dlBlAIh+RKvtAaPX+4eoU1incCDtC4KYwSAahYzaqkxxUy\nzcno/5mspKozifksDTN6ybike9inewK92wIDHB4nWyoBKI9t0eHv5llJBoXu\nCtXCaNgqTtOvuoqLQWWJE5gQji7NQdpPiZYzy786qWm2fOKl2gEQ8q/xg3Yt\n/tUoHumMu/GpckOPleQHCBVQrCFdkaAnIAF0cJfiCGzAB88o3FiuuMv/pTmL\n0ZHCPxJPBmh4D2OCF7mMuJSzXMGyX5MKMUpkp3KTy0mzrVWEU5AqWKc2sdu3\nF6BesVrdgbojfKen0vKSMN34BSTHAmKs9JvPyUh+KZgNUaAyjEsR+4uiWHvn\n9iKj\r\n=Gd6b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCdMMUXVSjPTBoGHr6w7AsXx7lRdwVYOamg31YqCeQkSgIhAICphZPnVKlES1r3qsVrO9atyT4Zz7C9PEplChdB4HbA"}]},"maintainers":[{"name":"addyosmani","email":"addyosmani@gmail.com"}],"_npmUser":{"name":"addyosmani","email":"addyosmani@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-adaptive-hooks_0.0.4_1573544246761_0.9468164369247134"},"_hasShrinkwrap":false},"0.0.5":{"name":"react-adaptive-hooks","version":"0.0.5","description":"Give users a great experience best suited to their device and network constraints","main":"index.js","repository":{"type":"git","url":"git+https://github.com/GoogleChromeLabs/react-adaptive-hooks.git"},"author":{"name":"Google Chrome"},"license":"Apache-2.0","private":false,"scripts":{"test":"jest"},"peerDependencies":{"react":"^16.8.0"},"devDependencies":{"@babel/core":"^7.5.5","@babel/node":"^7.5.5","@babel/preset-env":"^7.5.5","react":"16.9.0","react-dom":"16.9.0","ua-parser-js":"^0.7.20","@testing-library/react-hooks":"^1.1.0","babel-polyfill":"^6.26.0","jest":"^24.8.0","react-test-renderer":"16.9.0"},"keywords":["react-hooks","hooks","react","performance"],"gitHead":"f253809dc6e5c1ed967819f7cf88394ac4773be9","bugs":{"url":"https://github.com/GoogleChromeLabs/react-adaptive-hooks/issues"},"homepage":"https://github.com/GoogleChromeLabs/react-adaptive-hooks#readme","_id":"react-adaptive-hooks@0.0.5","_nodeVersion":"13.0.1","_npmVersion":"6.12.0","dist":{"integrity":"sha512-voZSslyRG5qBJJka4lGivlEB+q8+1fjxmqznOq8K/+/LDlAu2bKx7NvihX85WdUhw3kOkQm6/oO7Ec0lHUutFg==","shasum":"7156e688f7164dca4866a5f78ad172c8ffeb3d04","tarball":"https://registry.npmjs.org/react-adaptive-hooks/-/react-adaptive-hooks-0.0.5.tgz","fileCount":15,"unpackedSize":38348,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdyuIuCRA9TVsSAnZWagAASzsQAIAZmQLKqpPzFtdaHlDV\nFL3h63gzlHFlheZ5X7FYJHGQASQs3XT9u/zkpidmY6g5Oy1YgpfcRkU+GyAB\ny9jg0sO5PY+ti2ectRhlfb7qwpb5Y0iw0fWNKbRLNDDHCkV0rEx6CnHK9gfr\nF++eFjEMVq/oJ5ITha6qwUFq0j1rO+KD1DUFQSQsyVuj4/Kzt+BsRcCcyPUx\n57yy6edWhUba9H1AGVlU+Ge+M6SDQFVPvfLKCYrpRoDJMx6eq+PHQ0S+1UQH\nMuCE3TJTypcgS5k8CTZJKRdYuNxGtq3B9uXmsbdexCvvjbKLfjj1XR+49oPz\nW/G9OFyi0tcjE6TyUsZATg4x9vxumbbOWd/c3vMCjHcaC1EYfoy1GPpyylpS\nF0l/Ws89cN250/rSrdhH9uqqgd6G2hxpEtm2CIipQmD5V91SJpcK7DWtQEzs\n+X5/4pAiNR20o6O0MYoIJcLWrgw4fVVL5ja8pZV8472qBrHQghIvrbKVCCV+\nVOX0/a5fQygCwQzLEADRVsnrGrRGVMVtCDSqqGqnDxcRTcf+8zCbRC5nyEE6\nZfL30x80lbfZmm91ZpSJP6qgovU45+rR7ZSNu7GbdpvBE40vgMpwOQu/MxLd\nsZHqSHn0/pI477yG2bT/hiPvyFUtSMUlCx+0iJCRvakq/NN2bXTks8l07b4W\n9vVE\r\n=4Sa3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA1tf40yfZEnFGpIJ6Xqw7Qw3rHI5VJDxalIHpKdKgEbAiAb5sbG+zUBzxA+Dt2K2bvqhCyZ7/mVSfeYYFJr8hwwMQ=="}]},"maintainers":[{"name":"addyosmani","email":"addyosmani@gmail.com"}],"_npmUser":{"name":"addyosmani","email":"addyosmani@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-adaptive-hooks_0.0.5_1573577261541_0.6602553064171515"},"_hasShrinkwrap":false},"0.0.6":{"name":"react-adaptive-hooks","version":"0.0.6","description":"Give users a great experience best suited to their device and network constraints","repository":{"type":"git","url":"git+https://github.com/GoogleChromeLabs/react-adaptive-hooks.git"},"author":{"name":"Google Chrome"},"license":"Apache-2.0","private":false,"main":"dist/index.js","module":"dist/index.mjs","unpkg":"dist/index.umd.js","source":"index.js","scripts":{"build":"microbundle","dev":"microbundle watch","prepare":"npm run build","test":"jest","test:coverage":"jest --coverage"},"peerDependencies":{"react":"^16.8.0"},"devDependencies":{"@babel/preset-env":"^7.5.5","@testing-library/react-hooks":"^1.1.0","jest":"^24.8.0","microbundle":"0.11.0","react":"16.9.0","react-dom":"16.9.0","react-test-renderer":"16.9.0"},"keywords":["react-hooks","hooks","react","performance"],"gitHead":"61f923e24f56d1d87de819feb11823219fc4a466","bugs":{"url":"https://github.com/GoogleChromeLabs/react-adaptive-hooks/issues"},"homepage":"https://github.com/GoogleChromeLabs/react-adaptive-hooks#readme","_id":"react-adaptive-hooks@0.0.6","_nodeVersion":"13.0.1","_npmVersion":"6.12.0","dist":{"integrity":"sha512-tqwTjzh6ZJcjH60bkk8MrOMkbyVi7zrC/1TRwx9KZVs3zZkzaUyi5gPkZGeJm4oZvKhzoFZ5CfhFmxHJI0b8Hw==","shasum":"df26eac6c57ce94513ebc9ef596aa7fb15335bbf","tarball":"https://registry.npmjs.org/react-adaptive-hooks/-/react-adaptive-hooks-0.0.6.tgz","fileCount":21,"unpackedSize":75585,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd3abPCRA9TVsSAnZWagAAt2wP/jXq/vWzD3RMHBWEtP+i\nQ+gD6/FGTO4RU0um3tPyRdKVVzPoGNMB1Ju6IKPC2/txJl8z/yXmxyQUc4bY\nes1358W0S3x4GR7gsLag7BeiPvpPyyxD+1jL4RIxqDzWqrGTwqO+5+cF+9fP\nTgaNcU7KH9py108dB1Q03EzAiA4Xfj27Lu1rhxeb8o3W0ul/oB6tEtyqoaae\nE1/MKtLY6LWFe87xG+eZMheVn6Hm7twQvkdFRPYeylg7iZsj8c3hyBfzMQAQ\n+rvFgHSVHShZ8hmERLbHt/ddf0x6RQDZuutO8irh9Zc92zzmB95BhCANlJbc\n3b1CJTouw9RISlY/W1Npdy6a8XLm/nyG/Blf/RJP7JhBTel2LNLyikiLdY8M\nBRzBTayaMeWX3h9fmmKsNs2+ZP/JN56KpiELFUSAHcVmi26EA1geTbmgzu4u\nwx0QcL2osvnS8RecGSp4iIx+lhcx99B0DxBNUqCcpEsaBSGDQ+pnPokv1UkL\naPR5coqFubATZKVEx8vahsJjndtCNjE+ZZw59fH7ZSI+osao8rgFpqGsPkvN\nvadkyOaX1lgib4O8aQebKtaB69lZl4qISfjsr0vIciYWcQrFzZqNxu/2vrPv\nvuq94WYhJxWDigrWfRVlBGy0TDbLABE8AnCBB0Lu2zOrv3se732Srl+DIqeF\nzlpC\r\n=9y2r\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG7PihIEqJQgwDXq/H5ev0IFaBCruKc02Ia+MT1WXaysAiEA/m3dOY7hue2rPUxGQcLlaTVA1nPkocF1XPSnwBTAlZg="}]},"maintainers":[{"name":"addyosmani","email":"addyosmani@gmail.com"}],"_npmUser":{"name":"addyosmani","email":"addyosmani@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-adaptive-hooks_0.0.6_1574807246935_0.7100237212455469"},"_hasShrinkwrap":false},"0.0.7":{"name":"react-adaptive-hooks","version":"0.0.7","description":"Give users a great experience best suited to their device and network constraints","repository":{"type":"git","url":"git+https://github.com/GoogleChromeLabs/react-adaptive-hooks.git"},"author":{"name":"Google Chrome"},"license":"Apache-2.0","private":false,"main":"dist/index.js","module":"dist/index.module.js","unpkg":"dist/index.umd.js","source":"index.js","scripts":{"build":"microbundle","dev":"microbundle watch","prepare":"npm run build","test":"jest","test:coverage":"jest --coverage"},"peerDependencies":{"react":"^16.8.0"},"devDependencies":{"@babel/preset-env":"^7.5.5","@testing-library/react-hooks":"^1.1.0","jest":"^24.8.0","microbundle":"0.11.0","react":"16.9.0","react-dom":"16.9.0","react-test-renderer":"16.9.0"},"keywords":["react-hooks","hooks","react","performance"],"gitHead":"45aee683f10a9ef47b3837ae5da72a9af206269c","bugs":{"url":"https://github.com/GoogleChromeLabs/react-adaptive-hooks/issues"},"homepage":"https://github.com/GoogleChromeLabs/react-adaptive-hooks#readme","_id":"react-adaptive-hooks@0.0.7","_nodeVersion":"13.0.1","_npmVersion":"6.12.0","dist":{"integrity":"sha512-BXGQhSf/m0fzvG9qoqLt13KAXtZhssNlZbXevFgFvb1TCj06E8G0XCf4JYWKdAifkbDVyZJ401ziU+40Q2ySMA==","shasum":"7fea8b56fe88e6b73f943bd696814f226d67037b","tarball":"https://registry.npmjs.org/react-adaptive-hooks/-/react-adaptive-hooks-0.0.7.tgz","fileCount":23,"unpackedSize":85074,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd5xPMCRA9TVsSAnZWagAAM2wP/1mC1nhyrisvp3nCSQ/g\neo5I0naGBqqBfmrMAgBpgfBcKvoF8CAesLzmpdDQSAeLnn0iufR+TdqsJ70h\nJsQaPMy6Nj4iupSHSUXM+yw+WGn03qKSs8WG5uL5ee7pMX8aovcEq6jAmOTt\nv7wXwM0FG3g+Qo498quPnNMISHDkeQjVT+MVo00AQ6SOktUqcavJrrt0JLbX\n6zDNvIaduWmorE1v1PEgfi+A/M6vT8m7E+sgKEx3rBMBYO7fT8WAQjturj7Q\npU3t+9UXioE6EYxReuOG77rJSqlUittLLxsHWLIiaHD/RuOTbQGp19QcyYl5\nneW4aTmoa9WaafWAggbLvbfpYzpJAwhcZOpZRICReUSeSm+UJQy+TGBeEey5\n/DR3qE0M5GDj2cqqoejHqMfs0Pj89TVg8rBHyyMtoSPDLoQxB9t57gN5f/7Y\njR+alq3Vu4IQTdhITH1tUpq2kB6LstaNJ3TP0qI9lNSOIAnjK1PYxVvGNpHm\n6XtF52spVX4y0SgHFanZkZ9lSrKp5ZekRCIFs3Jwt2fuICs8X3trv96baEMp\nop6kDPV+2zoFpzmy86qe6fLmgHNA8YYbyp+4K1GQsbds3hifkZUBFZDdfHQQ\n8A5mI4xs02EVg1Y5Y0peu+RmMexWkxiETjougF244ufHG1AzbxikMRfJUZgO\nTBj2\r\n=XqAS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCX07dTS4xoX6djcIpMZq8DMslu3tVWD4/FT1/TIdKsjgIhANib9U0xFHTWDvbma9jHhOJOFKXqx3NDySirIhz6wa6g"}]},"maintainers":[{"name":"addyosmani","email":"addyosmani@gmail.com"}],"_npmUser":{"name":"addyosmani","email":"addyosmani@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-adaptive-hooks_0.0.7_1575424972076_0.5735954752709123"},"_hasShrinkwrap":false},"0.0.8":{"name":"react-adaptive-hooks","version":"0.0.8","description":"Give users a great experience best suited to their device and network constraints","repository":{"type":"git","url":"git+https://github.com/GoogleChromeLabs/react-adaptive-hooks.git"},"author":{"name":"Google Chrome"},"license":"Apache-2.0","private":false,"main":"dist/index.js","module":"dist/index.module.js","unpkg":"dist/index.umd.js","source":"index.js","scripts":{"build":"microbundle","dev":"microbundle watch","prepare":"npm run build","test":"jest","test:coverage":"jest --coverage"},"peerDependencies":{"react":"^16.8.0"},"devDependencies":{"@babel/preset-env":"^7.5.5","@testing-library/react-hooks":"^1.1.0","jest":"^24.8.0","microbundle":"0.11.0","react":"16.9.0","react-dom":"16.9.0","react-test-renderer":"16.9.0"},"keywords":["react-hooks","hooks","react","performance"],"gitHead":"d70fb69b16a4fe87bfaca29face115359599b9e9","bugs":{"url":"https://github.com/GoogleChromeLabs/react-adaptive-hooks/issues"},"homepage":"https://github.com/GoogleChromeLabs/react-adaptive-hooks#readme","_id":"react-adaptive-hooks@0.0.8","_nodeVersion":"13.0.1","_npmVersion":"6.12.0","dist":{"integrity":"sha512-akbhO9JrE3ACpjNJpvHKgeWtM9YSNH73tBuBeSCxECGG8SkXMm1ZW51Dr2957zUMK3Mxx8G/MYejoHGWZNCQAg==","shasum":"f23d9232eb7f6f4d782c631bbf029f15b4d01eb1","tarball":"https://registry.npmjs.org/react-adaptive-hooks/-/react-adaptive-hooks-0.0.8.tgz","fileCount":23,"unpackedSize":85632,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd7saOCRA9TVsSAnZWagAACCYP/Rfuyup9oh4IUn92U28V\nmhL8pZy4vD1knRGxVkmeko8U7iMoa5JIk40ctfNkpkHXCWl7n1a+73XsyDH5\nfwuSV2TqZk9X9Er/KM4xnkW02L0SY3GnENurgDSoLnC0qXzDmP6xmPo8RH/A\nryGaWP3riOe/CiVm/tFsYYvK6g4a23UXKk6QWruViI6NFGBmiZl4g90AYAg9\nXb0QsDgmztf9F11EVcdOgc4X9X+wv8ULpyLB618UsW9MpciujijXNOmGPVz5\nnjeUsH4ciY6OBnkCLlAuIqsP1tP5ZPv7a0EOEtTRoPAxgxiEJeCdMAXoJzHN\n6FfjoIRkDVg540KGhyDiwXyVQ4upLDY5ubX9LbbzPXFvU2qUbvDb8G7JGdaK\nBdMjhV6MxFY23eW0vHK5LQga/IR3c80RFLNEd81A005MrgiIADr1tNGt8g7i\na2mJKFG4MghlQ+PaL04RdlIC15o75MWLipxj8KxVXXnTI/XMhYmWXyy3e7EN\n1gvf+oo1D3FzGowm5kudVJMa2fjWtS2dlblK41Bn/oTGaCV+OUxBjf2+8xkq\nxvtJ6Fs7S+MoMnM4yCl9nSb9/JFs3R4GDbbAVcTK7Nq3Dbp2XsJUZZnUAIfZ\n0M2d+ZfnfKv8Ov3mE2xiUe9XOdsUimqY39Pkghj2OWWoBFWR16YceJehOFPU\niFyv\r\n=7mA/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDd9dsJWmAhXDsA9/zP4mChENi3oJ8mA7BZiTytqU8lJAiBQSzd+T2gLO7uYU6M1j71oVVgCf/CAdnqxamGsD5Kt7Q=="}]},"maintainers":[{"name":"addyosmani","email":"addyosmani@gmail.com"}],"_npmUser":{"name":"addyosmani","email":"addyosmani@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-adaptive-hooks_0.0.8_1575929485967_0.3872651079927183"},"_hasShrinkwrap":false}},"time":{"created":"2019-11-10T01:36:37.204Z","0.0.1":"2019-11-10T01:36:37.352Z","modified":"2022-05-14T05:48:34.092Z","0.0.2":"2019-11-10T01:41:04.331Z","0.0.3":"2019-11-10T01:43:40.652Z","0.0.4":"2019-11-12T07:37:26.991Z","0.0.5":"2019-11-12T16:47:41.721Z","0.0.6":"2019-11-26T22:27:27.066Z","0.0.7":"2019-12-04T02:02:52.279Z","0.0.8":"2019-12-09T22:11:26.078Z"},"maintainers":[{"name":"addyosmani","email":"addyosmani@gmail.com"}],"description":"Give users a great experience best suited to their device and network constraints","homepage":"https://github.com/GoogleChromeLabs/react-adaptive-hooks#readme","repository":{"type":"git","url":"git+https://github.com/GoogleChromeLabs/react-adaptive-hooks.git"},"author":{"name":"Google Chrome"},"bugs":{"url":"https://github.com/GoogleChromeLabs/react-adaptive-hooks/issues"},"license":"Apache-2.0","readme":"# React Adaptive Loading Hooks &amp; Utilities &middot; ![](https://img.shields.io/github/license/GoogleChromeLabs/react-adaptive-hooks.svg) [![Build Status](https://travis-ci.org/GoogleChromeLabs/react-adaptive-hooks.svg?branch=master)](https://travis-ci.org/GoogleChromeLabs/react-adaptive-hooks) ![npm bundle size](https://img.shields.io/bundlephobia/minzip/react-adaptive-hooks)\n\n> Deliver experiences best suited to a user's device and network constraints (experimental)\n\nThis is a suite of [React Hooks](https://reactjs.org/docs/hooks-overview.html) and utilities for adaptive loading based on a user's:\n\n* [Network via effective connection type](https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation/effectiveType)\n* [Data Saver preferences](https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation/saveData)\n* [Device memory](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/deviceMemory)\n* [Logical CPU cores](https://developer.mozilla.org/en-US/docs/Web/API/NavigatorConcurrentHardware/hardwareConcurrency)\n\nIt can be used to add patterns for adaptive resource loading, data-fetching, code-splitting and capability toggling.\n\n## Objective\n\nMake it easier to target low-end devices while progressively adding high-end-only features on top. Using these hooks and utilities can help you give users a great experience best suited to their device and network constraints.\n\n## Installation\n\n`npm i react-adaptive-hooks --save` or `yarn add react-adaptive-hooks`\n\n## Usage\n\nYou can import the hooks you wish to use as follows:\n\n```js\nimport { useNetworkStatus } from 'react-adaptive-hooks/network';\nimport { useSaveData } from 'react-adaptive-hooks/save-data';\nimport { useHardwareConcurrency } from 'react-adaptive-hooks/hardware-concurrency';\nimport { useMemoryStatus } from 'react-adaptive-hooks/memory';\n```\n\nand then use them in your components. Examples for each hook and utility can be found below:\n\n### Network\n\n`useNetworkStatus` React hook for adapting based on network status (effective connection type)\n\n```js\nimport React from 'react';\n\nimport { useNetworkStatus } from 'react-adaptive-hooks/network';\n\nconst MyComponent = () => {\n  const { effectiveConnectionType } = useNetworkStatus();\n\n  let media;\n  switch(effectiveConnectionType) {\n    case 'slow-2g':\n      media = <img src='...' alt='low resolution' />;\n      break;\n    case '2g':\n      media = <img src='...' alt='medium resolution' />;\n      break;\n    case '3g':\n      media = <img src='...' alt='high resolution' />;\n      break;\n    case '4g':\n      media = <video muted controls>...</video>;\n      break;\n    default:\n      media = <video muted controls>...</video>;\n      break;\n  }\n  \n  return <div>{media}</div>;\n};\n```\n\n`effectiveConnectionType` values can be `slow-2g`, `2g`, `3g`, or `4g`.\n\nThis hook accepts an optional `initialEffectiveConnectionType` string argument, which can be used to provide a `effectiveConnectionType` state value when the user's browser does not support the relevant [NetworkInformation API](https://wicg.github.io/netinfo/). Passing an initial value can also prove useful for server-side rendering, where the developer can pass an [ECT Client Hint](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/client-hints#ect) to detect the effective network connection type.\n\n```js\n// Inside of a functional React component\nconst initialEffectiveConnectionType = '4g';\nconst { effectiveConnectionType } = useNetworkStatus(initialEffectiveConnectionType);\n```\n\n### Save Data\n\n`useSaveData` utility for adapting based on the user's browser Data Saver preferences.\n\n```js\nimport React from 'react';\n\nimport { useSaveData } from 'react-adaptive-hooks/save-data';\n\nconst MyComponent = () => {\n  const { saveData } = useSaveData();\n  return (\n    <div>\n      { saveData ? <img src='...' /> : <video muted controls>...</video> }\n    </div>\n  );\n};\n```\n\n`saveData` values can be `true` or `false`.\n\nThis hook accepts an optional `initialSaveDataStatus` boolean argument, which can be used to provide a `saveData` state value when the user's browser does not support the relevant [NetworkInformation API](https://wicg.github.io/netinfo/). Passing an initial value can also prove useful for server-side rendering, where the developer can pass a server [Save-Data Client Hint](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/client-hints#save-data) that has been converted to a boolean to detect the user's data saving preference.\n\n```js\n// Inside of a functional React component\nconst initialSaveDataStatus = true;\nconst { saveData } = useSaveData(initialSaveDataStatus);\n```\n\n### CPU Cores / Hardware Concurrency\n\n`useHardwareConcurrency` utility for adapting to the number of logical CPU processor cores on the user's device.\n\n```js\nimport React from 'react';\n\nimport { useHardwareConcurrency } from 'react-adaptive-hooks/hardware-concurrency';\n\nconst MyComponent = () => {\n  const { numberOfLogicalProcessors } = useHardwareConcurrency();\n  return (\n    <div>\n      { numberOfLogicalProcessors <= 4 ? <img src='...' /> : <video muted controls>...</video> }\n    </div>\n  );\n};\n```\n\n`numberOfLogicalProcessors` values can be the number of logical processors available to run threads on the user's device. \n\n### Memory\n\n`useMemoryStatus` utility for adapting based on the user's device memory (RAM)\n\n```js\nimport React from 'react';\n\nimport { useMemoryStatus } from 'react-adaptive-hooks/memory';\n\nconst MyComponent = () => {\n  const { deviceMemory } = useMemoryStatus();\n  return (\n    <div>\n      { deviceMemory < 4 ? <img src='...' /> : <video muted controls>...</video> }\n    </div>\n  );\n};\n```\n\n`deviceMemory` values can be the approximate amount of device memory in gigabytes.\n\nThis hook accepts an optional `initialMemoryStatus` object argument, which can be used to provide a `deviceMemory` state value when the user's browser does not support the relevant [DeviceMemory API](https://github.com/w3c/device-memory). Passing an initial value can also prove useful for server-side rendering, where the developer can pass a server [Device-Memory Client Hint](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/client-hints#save-data) to detect the memory capacity of the user's device.\n\n```js\n// Inside of a functional React component\nconst initialMemoryStatus = { deviceMemory: 4 };\nconst { deviceMemory } = useMemoryStatus(initialMemoryStatus);\n```\n\n### Adaptive Code-loading & Code-splitting\n\n#### Code-loading\n\nDeliver a light, interactive core experience to users and progressively add high-end-only features on top, if a user's hardware can handle it. Below is an example using the Network Status hook:\n\n```js\nimport React, { Suspense, lazy } from 'react';\n\nimport { useNetworkStatus } from 'react-adaptive-hooks/network';\n\nconst Full = lazy(() => import(/* webpackChunkName: \"full\" */ './Full.js'));\nconst Light = lazy(() => import(/* webpackChunkName: \"light\" */ './Light.js'));\n\nconst MyComponent = () => {\n  const { effectiveConnectionType } = useNetworkStatus();\n  return (\n    <div>\n      <Suspense fallback={<div>Loading...</div>}>\n        { effectiveConnectionType === '4g' ? <Full /> : <Light /> }\n      </Suspense>\n    </div>\n  );\n};\n\nexport default MyComponent;\n```\n\nLight.js:\n```js\nimport React from 'react';\n\nconst Light = ({ imageUrl, ...rest }) => (\n  <img src={imageUrl} {...rest} />\n);\n\nexport default Light;\n```\n\nFull.js:\n```js\nimport React from 'react';\nimport Magnifier from 'react-magnifier';\n\nconst Full = ({ imageUrl, ...rest }) => (\n  <Magnifier src={imageUrl} {...rest} />\n);\n\nexport default Full;\n```\n\n#### Code-splitting\n\nWe can extend `React.lazy()` by incorporating a check for a device or network signal. Below is an example of network-aware code-splitting. This allows us to conditionally load a light core experience or full-fat experience depending on the user's effective connection speed (via `navigator.connection.effectiveType`).\n\n```js\nimport React, { Suspense } from 'react';\n\nconst Component = React.lazy(() => {\n  const effectiveType = navigator.connection ? navigator.connection.effectiveType : null\n\n  let module;\n  switch (effectiveType) {\n    case '3g':\n      module = import(/* webpackChunkName: \"light\" */ './Light.js');\n      break;\n    case '4g':\n      module = import(/* webpackChunkName: \"full\" */ './Full.js');\n      break;\n    default:\n      module = import(/* webpackChunkName: \"full\" */ './Full.js');\n      break;\n  }\n\n  return module;\n});\n\nconst App = () => {\n  return (\n    <div className='App'>\n      <Suspense fallback={<div>Loading...</div>}>\n        <Component />\n      </Suspense>\n    </div>\n  );\n};\n\nexport default App;\n```\n\n## Browser Support\n\n* [Network Information API - effectiveType](https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation/effectiveType) is available in [Chrome 61+, Opera 48+, Edge 76+, Chrome for Android 76+, Firefox for Android 68+](https://caniuse.com/#search=effectiveType)\n\n* [Save Data API](https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation/saveData) is available in [Chrome 65+, Opera 62+, Chrome for Android 76+, Opera for Android 46+](https://caniuse.com/#search=saveData)\n\n* [Hardware Concurrency API](https://developer.mozilla.org/en-US/docs/Web/API/NavigatorConcurrentHardware/hardwareConcurrency) is available in [Chrome 37+, Safari 10.1+, Firefox 48+, Opera 24+, Edge 15+, Chrome for Android 76+, Safari on iOS 10.3+, Firefox for Android 68+, Opera for Android 46+](https://caniuse.com/#search=navigator.hardwareConcurrency)\n\n* [Performance memory API](https://developer.mozilla.org/en-US/docs/Web/API/Performance) is a non-standard and only available in [Chrome 7+, Opera, Chrome for Android 18+, Opera for Android](https://developer.mozilla.org/en-US/docs/Web/API/Performance/memory)\n\n* [Device Memory API](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/deviceMemory) is available in [Chrome 63+, Opera 50+, Chrome for Android 76+, Opera for Android 46+](https://caniuse.com/#search=deviceMemory)\n\n## Demos\n\n### Network\n\n* [Network-aware loading](https://github.com/GoogleChromeLabs/adaptive-loading/tree/master/cra-network-aware-loading) with create-react-app ([Live](https://adaptive-loading.web.app/cra-network-aware-loading/))\n* [Network-aware code-splitting](https://github.com/GoogleChromeLabs/adaptive-loading/tree/master/cra-network-aware-code-splitting) with create-react-app ([Live](https://adaptive-loading.web.app/cra-network-aware-code-splitting/))\n* [Network-aware data-fetching](https://github.com/GoogleChromeLabs/adaptive-loading/tree/master/cra-network-aware-data-fetching) with create-react-app ([Live](https://adaptive-loading.web.app/cra-network-aware-data-fetching/))\n\n* [React Movie - network-aware loading](https://github.com/GoogleChromeLabs/adaptive-loading/tree/master/react-movie-network-aware-loading) ([Live](https://adaptive-loading.web.app/react-movie-network-aware-loading/))\n* [React Shrine - network-aware code-splitting](https://github.com/GoogleChromeLabs/adaptive-loading/tree/master/react-shrine-network-aware-code-splitting) ([Live](https://adaptive-loading.web.app/react-shrine-network-aware-code-splitting/))\n* [React eBay - network-aware code-splitting](https://github.com/GoogleChromeLabs/adaptive-loading/tree/master/react-ebay-network-aware-code-splitting) ([Live](https://adaptive-loading.web.app/react-ebay-network-aware-code-splitting/))\n* [React Lottie - network-aware loading](https://github.com/GoogleChromeLabs/adaptive-loading/tree/master/react-lottie-network-aware-loading) ([Live](https://adaptive-loading.web.app/react-lottie-network-aware-loading/))\n\n### Save Data\n\n* [React Twitter - save-data loading based on Client Hint](https://github.com/GoogleChromeLabs/adaptive-loading/tree/master/react-twitter-save-data-loading(client-hint)) ([Live](https://adaptive-loading.web.app/react-twitter-save-data-loading(client-hint)/))\n* [React Twitter - save-data loading based on Hook](https://github.com/GoogleChromeLabs/adaptive-loading/tree/master/react-twitter-save-data-loading(hook)) ([Live](https://adaptive-loading.web.app/react-twitter-save-data-loading(hook)/))\n\n### CPU Cores / Hardware Concurrency\n\n* [Hardware concurrency considerate code-splitting](https://github.com/GoogleChromeLabs/adaptive-loading/tree/master/cra-hardware-concurrency-considerate-code-splitting) with create-react-app ([Live](https://adaptive-loading.web.app/cra-hardware-concurrency-considerate-code-splitting/))\n* [Hardware concurrency considerate loading](https://github.com/GoogleChromeLabs/adaptive-loading/tree/master/cra-hardware-concurrency-considerate-loading) with create-react-app ([Live](https://adaptive-loading.web.app/cra-hardware-concurrency-considerate-loading/))\n\n### Memory\n\n* [Memory considerate loading](https://github.com/GoogleChromeLabs/adaptive-loading/tree/master/cra-memory-considerate-loading) with create-react-app ([Live](https://adaptive-loading.web.app/cra-memory-considerate-loading/))\n* [Memory considerate loading (SketchFab version)](https://github.com/GoogleChromeLabs/adaptive-loading/tree/master/cra-memory-considerate-loading-sketchfab) with create-react-app ([Live](https://adaptive-loading.web.app/cra-memory-considerate-loading-sketchfab/))\n* [Memory-considerate animation-toggling](https://github.com/GoogleChromeLabs/adaptive-loading/tree/master/cna-memory-considerate-animation) with create-next-app ([Live](https://adaptive-loading.web.app/cna-memory-considerate-animation/))\n\n* [React Dixie Mesh - memory considerate loading](https://github.com/GoogleChromeLabs/adaptive-loading/tree/master/react-dixie-memory-considerate-loading) ([Live](https://adaptive-loading.web.app/react-dixie-memory-considerate-loading/))\n\n### Hybrid\n\n* [React Youtube - adaptive loading with mix of network, memory and hardware concurrency](https://github.com/GoogleChromeLabs/adaptive-loading/tree/master/react-youtube-adaptive-loading) ([Live](https://adaptive-loading.web.app/react-youtube-adaptive-loading/))\n\n\n## References\n\n* [Adaptive serving based on network quality](https://web.dev/adaptive-serving-based-on-network-quality/)\n* [Adaptive Serving using JavaScript and the Network Information API](https://addyosmani.com/blog/adaptive-serving/)\n* [Serving Adaptive Components Using the Network Information API](https://dev.to/vorillaz/serving-adaptive-components-using-the-network-information-api-lbo)\n\n## License\n\nLicensed under the Apache-2.0 license.\n\n## Team\n\nThis project is brought to you by [Addy Osmani](https://github.com/addyosmani) and [Anton Karlovskiy](https://github.com/anton-karlovskiy).\n","readmeFilename":"README.md","keywords":["react-hooks","hooks","react","performance"]}