{"_id":"@1px.one/react-hooks","_rev":"7-0833a88fcec9a221771f6c6702949a6e","name":"@1px.one/react-hooks","dist-tags":{"latest":"1.0.5"},"versions":{"1.0.0":{"name":"@1px.one/react-hooks","version":"1.0.0","description":"Helpfull react hooks","keywords":["react","react","hook","hooks","react-hooks"],"author":{"name":"Artemiy Vereshchinskiy","email":"a.vereshchinskiy@netris.ru"},"homepage":"https://github.com/1pxone/react-hooks#readme","license":"ISC","main":"lib/react-hooks.js","directories":{"lib":"lib","test":"__tests__"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/1pxone/react-hooks.git"},"scripts":{"test":"echo \"Error: run tests from root\" && exit 1"},"bugs":{"url":"https://github.com/1pxone/react-hooks/issues"},"gitHead":"67c5b688eecd932da65b6e9f7aabba3650d1aa0c","_id":"@1px.one/react-hooks@1.0.0","_nodeVersion":"10.16.0","_npmVersion":"lerna/3.20.2/node@v10.16.0+x64 (darwin)","dist":{"integrity":"sha512-g5FonPVXOYQ/ZX4XjK65eAMqNhKah9r93jg/UxmdizShwyM1HOTjrmalfu+YdeUcMkBhtkwCwhzzQJ6QqHtvrg==","shasum":"c3740621ff70410a73c6145bdc13baf550cc075b","tarball":"https://registry.npmjs.org/@1px.one/react-hooks/-/react-hooks-1.0.0.tgz","fileCount":3,"unpackedSize":1053,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXSc4CRA9TVsSAnZWagAAKaIP/38t8IIJ9hbvJ2YkPxmF\nEOFLNAGH0rr1j/6lAlUGw063J+zh5NQNcyV6SD31ZU9WTmjjAenF+AwmVGKu\nQa894fCDaBgBhF5vdhYgYNCmFf/oFuNyA74Rf7idey7QNIW4auU1MpB9bMoW\nJnqxHbFjGpyCtppKMF8xnYL6X4CUcdiPA4vmR3eK9hzq2pnVOZwDmdHFHm20\nNMVSDAz4LvtzCFv6IvFQNwogRbD2MCSQFmybpXLh5mP++91TiSNUeCUfAzu3\nxvImmxqR7y8mV8Mzxt/wKbWwyN06lQPpgkvjwo7b93v8uF5EIUhwjwDf3bSn\n3DDIoVAGZhFv+eyk3W8rwK4tY0r41IY1ub2TacfNJ99Um0vEnZE37LWOogFZ\nEuNW1sOdNIjXhKRVPgdUExuNsTDHTTqWuFV2DezYXQHZKbz8lsp6lPKpsbsh\n4rf1DyViCoqUMnZjB/Fb/osvCkP7n5T0/g4ZKCEBCxU+O8ZWzoFqPnKABQOv\nXcVA6PAlalNt963noZXJy6i8XeVy8RZcTnKT+Se8zDoPX19MDBJdkoFEWjmB\nmaXVPw3fHSfforqYx2xgPjyDZQ7s8hKQgJhTG053jqT8/DfPb8Ib/87mEDdq\nv8MaanXfA9xY9CDxahKxnrOE7C4bbFdEsGKc4Rhd+SIKpliKQ1d4UVYGlbO7\nZAx+\r\n=gqHW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDt+sEUwuyqXY1wmjzYxjoXhrsB2Hymbytve4E+cv/P9gIhAN1VG+7wgrqmvE6Ky8HJZWyewXf844jvwM6fceIUhykF"}]},"maintainers":[{"name":"1px.one","email":"hlebb@mail.ru"}],"_npmUser":{"name":"1px.one","email":"hlebb@mail.ru"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hooks_1.0.0_1583163192182_0.19482807895686038"},"_hasShrinkwrap":false},"1.0.1":{"name":"@1px.one/react-hooks","version":"1.0.1","description":"Helpful react hooks","keywords":["react","hook","hooks","react-hooks"],"author":{"name":"Artemiy Vereshchinskiy","email":"artemiy.vereshchinskiy@gmail.com"},"homepage":"https://github.com/1pxone/react-hooks#readme","license":"ISC","main":"lib/index.js","directories":{"lib":"lib","test":"__tests__"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/1pxone/react-hooks.git"},"scripts":{"build":"npx tsc && npx babel ./src --out-dir lib","test":"echo \"Error: run tests from root\" && exit 1"},"bugs":{"url":"https://github.com/1pxone/react-hooks/issues"},"dependencies":{"resize-observer-polyfill":"1.5.1"},"peerDependencies":{"react":">=16.9.0","react-dom":">=16.9.0"},"devDependencies":{"@babel/cli":"^7.6.2","@babel/core":"^7.6.2","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-decorators":"^7.6.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-optional-chaining":"^7.6.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-react-display-name":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.0","@babel/plugin-transform-typescript":"^7.6.0","@babel/preset-env":"^7.6.0","@babel/preset-react":"^7.0.0","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","babel-jest":"^24.9.0","babel-plugin-add-react-displayname":"^0.0.5","babel-plugin-styled-components":"^1.10.6","babel-plugin-transform-object-assign":"^6.22.0","babel-plugin-typescript-to-proptypes":"^1.0.0","npx":"^10.2.2","react":"^16.13.0","react-dom":"^16.13.0","tsc":"^1.20150623.0","tslint":"^5.20.0","typescript":"^3.8.3"},"gitHead":"8fb74acb3483d6d691026b3a3bf41a041b46933d","_id":"@1px.one/react-hooks@1.0.1","_nodeVersion":"10.16.0","_npmVersion":"lerna/3.20.2/node@v10.16.0+x64 (darwin)","dist":{"integrity":"sha512-IdLwUyeOqr9Hs8eYmIz8dxclk08MqDWTC8HXoizVGHceS2Ql3nSAShDmMGyGnlnrmgVyE1t4DP7Ho6oRWcxW8w==","shasum":"fd1aa233314522107df0313b36a422392355b907","tarball":"https://registry.npmjs.org/@1px.one/react-hooks/-/react-hooks-1.0.1.tgz","fileCount":44,"unpackedSize":47916,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeanUZCRA9TVsSAnZWagAAhJEP/1RF7BrWzEaJEi3T5ERU\nKgP+0TmgyUPRmAWZ+3bhqtuxNmZKBV4zIfWYVHO1O16uTFmE+ztFQAgkH2/T\nr6BoKDGDlRD8tdWEfp91XmUILLghuukMnIMjsuKUig9p1y6IexYRaymYaZW1\nY6gzGJc1Hnvhaw2FfbfnAJf1woU7xgh6GK4c8n7B/zUZwehfMTP+roKnXTJw\n85Bvz4rWEMxBTuE4qc+JbWi3Z4uti23QPn9gxbarIoddC+BUjhuH4Qg4V1eQ\n1SXJ1rCRDxsI+yyoJp5isKwvlik3Fx8drSoWnb1Xqt/pYuk5n4c4aDV2iLSl\nKpHewwOU99ImHWE4PHXcj4mCcQnkkeqAe26W4s5t1xrxzLXAxeOUD9hdcY5Q\nqtCzF5fZfqJE3F2mhfj0F7GqRhntMQ10b4gg4qqXbn7fc/6F2OR30JLBkBdS\nKY3LmalFXJ9QaprDDovlK3wMuQHLA5sqzggx/tDBvC2AvHjQ0qpPrx/F6GT9\nJwb0og1YvVQ23kgJi6AbAuF8VUbdUFh7TEnt1jszyzkIYZTvq+/L+ygW+ed+\nR1A3qz6FBidjYZXP/KQwaB+t58h46e3hW5zvkdUe6TtowJR7dLTgsayTGe+F\nkJgsid3gcw3Mfli7V3WbY71TA9HQi/CV6YK7DlaiWkVYTl+pIUm7aPg1Cash\ndGet\r\n=RosY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDgK5JsqNSRIcN5ZaWzi/g4VfqETnB1YUuXz9zdH0encQIhAJxY9HAzidJNR8u5VWRsEjtg1tCXpptuxVb5212/U0ow"}]},"maintainers":[{"name":"1px.one","email":"hlebb@mail.ru"}],"_npmUser":{"name":"1px.one","email":"hlebb@mail.ru"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hooks_1.0.1_1584035097057_0.15114540169312507"},"_hasShrinkwrap":false},"1.0.3":{"name":"@1px.one/react-hooks","version":"1.0.3","description":"Helpful react hooks","keywords":["react","hook","hooks","react-hooks"],"author":{"name":"Artemiy Vereshchinskiy","email":"artemiy.vereshchinskiy@gmail.com"},"homepage":"https://github.com/1pxone/react-hooks#readme","license":"ISC","main":"./lib/index.js","types":"./lib/index.d.ts","directories":{"lib":"lib","test":"__tests__"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/1pxone/react-hooks.git"},"scripts":{"build":"npx tsc && npx babel ./src --out-dir lib","test":"echo \"No tests to execute\" && exit 0","prebuild":"rimraf ./dist"},"bugs":{"url":"https://github.com/1pxone/react-hooks/issues"},"config":{"commitizen":{"path":"cz-conventional-changelog"}},"husky":{"hooks":{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"dependencies":{"resize-observer-polyfill":"^1.5.1"},"peerDependencies":{"react":">=16.9.0","react-dom":">=16.9.0"},"devDependencies":{"@babel/cli":"^7.6.2","@babel/core":"^7.6.2","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-decorators":"^7.6.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-optional-chaining":"^7.6.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-react-display-name":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.0","@babel/plugin-transform-typescript":"^7.6.0","@babel/preset-env":"^7.6.0","@babel/preset-react":"^7.0.0","@commitlint/cli":"^8.3.5","@commitlint/config-conventional":"^8.3.4","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","babel-jest":"^24.9.0","babel-plugin-add-react-displayname":"^0.0.5","babel-plugin-transform-object-assign":"^6.22.0","babel-plugin-typescript-to-proptypes":"^1.0.0","dot-json":"^1.2.0","husky":"^4.2.5","npx":"^10.2.2","prettier":"^2.0.5","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","tsc":"^1.20150623.0","tslint":"^5.20.0","typescript":"^3.8.3"},"_id":"@1px.one/react-hooks@1.0.3","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"1px.one","email":"hlebb@mail.ru"},"dist":{"integrity":"sha512-iH314ilZkzLr6/k0JPc/WrIvtvaJW77faYNXFumSZEyHHzU4kDnqERxvVlgKiczcXF31KdQ+Lb63zIzZab3/Rw==","shasum":"4efc2fe2a0e0c54654fec2933c1660f890281330","tarball":"https://registry.npmjs.org/@1px.one/react-hooks/-/react-hooks-1.0.3.tgz","fileCount":35,"unpackedSize":47651,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeyZUKCRA9TVsSAnZWagAAZU0QAJDxi6swv1Ts88SPL/PE\nPHWZ9vsiKx3o7+7IR5XpJ2THkCOifTNpPUfQkHrnJMf86EuatjoLxZLO1knI\nKckDc7Zf7i7wF6NVVffu3tBjYKlzSHGAoJbaWiWDYYhpNFJskIGrmIIrQnKX\nSVN2CGmJS+SXQWi4Hnc8uHu7W3isyXjLO6gQvujiMqAJOGnb3BtCI3cqREoG\n2vbEpvZgZCMvjWaRFzG6fHtp+EAcIhRY92cpqIRBEuJmbuKwhP4jIVxneKg0\n0YIhn6V6dLntp0QwdcZTWT39rNHoxP9YfIjr2OvIND10mh1Atb5S+6haQEz0\ndWlQocI/cpWugQ22LLVM9ZgvJfFEVz+i7/1Pdl78wi9wFwpWrNGI9lW3Bcg0\nlznpDjhd8BnRrDMZ48o9VASRvOYVEgMdee15Eabz3qAXZEz71K2frFbvV57c\n/7EkGQyrMa95BZPOSn7LOlz/ATjqaD2TGnU7jDmRixtXhPo3qgGaBOn24HB6\nbK6wRi5DhDW0btL4tlidPLrqXhj1ahxHPwkB/A1kHdoLcBWNrz3wdG4K6sp3\nQC0NmHYiYAqxgQivRbd1E6URa+9VZ6RjJzfDaIXMG9m1/K+CoRLf4QaPLw/v\nCqoisLPnK+eEnmFFMPkKHtN1oBOpYwJjhRbY7/Zy4Kc8L0iBcip2Z3gJhTdo\nRNkK\r\n=WKbk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFrFhoN90RZS/ZkJLtc+x9NHGao8V47uryUHcaesB1NqAiBdGnoHgtXmTTkiPVLAJ85eTE1akqRuIT9LPtnhSKi9lA=="}]},"maintainers":[{"name":"1px.one","email":"hlebb@mail.ru"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hooks_1.0.3_1590269194365_0.18127766460564687"},"_hasShrinkwrap":false},"1.0.4":{"name":"@1px.one/react-hooks","version":"1.0.4","description":"Helpful react hooks","keywords":["react","hook","hooks","react-hooks"],"author":{"name":"Artemiy Vereshchinskiy","email":"artemiy.vereshchinskiy@gmail.com"},"homepage":"https://github.com/1pxone/react-hooks#readme","license":"ISC","main":"./lib/index.js","types":"./lib/index.d.ts","directories":{"lib":"lib","test":"__tests__"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/1pxone/react-hooks.git"},"scripts":{"build":"npx tsc && npx babel ./src --out-dir lib","test":"echo \"No tests to execute\" && exit 0","prebuild":"rimraf ./dist"},"bugs":{"url":"https://github.com/1pxone/react-hooks/issues"},"config":{"commitizen":{"path":"cz-conventional-changelog"}},"husky":{"hooks":{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"dependencies":{"resize-observer-polyfill":"^1.5.1"},"peerDependencies":{"react":">=16.9.0","react-dom":">=16.9.0"},"devDependencies":{"@babel/cli":"^7.6.2","@babel/core":"^7.6.2","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-decorators":"^7.6.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-optional-chaining":"^7.6.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-react-display-name":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.0","@babel/plugin-transform-typescript":"^7.6.0","@babel/preset-env":"^7.6.0","@babel/preset-react":"^7.0.0","@commitlint/cli":"^8.3.5","@commitlint/config-conventional":"^8.3.4","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","babel-jest":"^24.9.0","babel-plugin-add-react-displayname":"^0.0.5","babel-plugin-transform-object-assign":"^6.22.0","babel-plugin-typescript-to-proptypes":"^1.0.0","dot-json":"^1.2.1","husky":"^4.2.5","npx":"^10.2.2","prettier":"^2.0.5","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","tsc":"^1.20150623.0","tslint":"^5.20.0","typescript":"^3.8.3"},"_id":"@1px.one/react-hooks@1.0.4","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"1px.one","email":"hlebb@mail.ru"},"dist":{"integrity":"sha512-VUttuOsGozB3JrIzT/DpE7B5STEGYE3VGcGmqPV8btTXIwSbmYhusVM1FHDLkwjP06gyJJaJM8/zyAumvfLMSQ==","shasum":"49fe63bebbef9964566f929dc6b5049412282f42","tarball":"https://registry.npmjs.org/@1px.one/react-hooks/-/react-hooks-1.0.4.tgz","fileCount":35,"unpackedSize":56653,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfZLf0CRA9TVsSAnZWagAAKeoQAIxtq5oEliCR2QWMUuVz\n5ZHKEKaIbJJDXsdPuqWL0rP2eXP5IRudqRH7SQism5/y+3eBpMOz7EJyV2RW\nd7NLpZKtfQeoejSepvIns3DhSOBKFs03ffWpuUXxWB1LCB+G2PmFl7YeWZmJ\noxqmcXtgGoZ8CZA1mO8V8+kOUBp5BOs8ae5kcukI14mYHl/ZupCSZEZ29a0I\nNtSRAkIvoubbBMJt6qAz5NrcPTyW/i+BXIGV8o9LvJc7LAy5gMe8GLbmpMbw\nBaixnna12QzTCNIFsuF7IQXXpITTUhs0npbvCpqc7M+tqrXkWCZTIA0xVWYT\nGeqJhk8GkISIoEi8lR8oklOqSOptpIPFgCahfRJTAh3O2G+iXLnCOlQUQ1Gq\nJ8QKN7rMKtH/OzG7wc3Z5vKekGyITthkla+h2VtwMZw1EzY9NdrrLaPa6Qrd\nb9Nys3Vu4dmBmqCsReyi8u8FA0yUr8eIFUbeRuZzs2HF95r4TUF2wwzEjhiI\nc93TzKfCPhiKb15TA8V6tZ/M6lc0D3Tj/NyuqgQVcA5BZVJLWoQwpZwFrIWv\nlOFEZKrxJbjuyNZi0bCIm43eqZWhID281VeBjtaojXf1EYB+0d4Uix2ImlWC\n8p2bEWpJyaI4Fdmja5XYmAgMzQ2urafYPJ+Cg39WDNRAGfDBZ7zbAj30IvBH\nQJzL\r\n=0eGr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDZo0MtfAUY6SWiKCU2EVzYvM0GJf8paQ2ffWnPjUGamAiEAvsSBaQExg2jUX6bhiXd30Vkovob5X3q/Brl0JHe3VME="}]},"maintainers":[{"name":"1px.one","email":"hlebb@mail.ru"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hooks_1.0.4_1600436211849_0.3851332954673454"},"_hasShrinkwrap":false},"1.0.5":{"name":"@1px.one/react-hooks","version":"1.0.5","description":"Helpful react hooks","keywords":["react","hook","hooks","react-hooks"],"author":{"name":"Artemiy Vereshchinskiy","email":"artemiy.vereshchinskiy@gmail.com"},"homepage":"https://github.com/1pxone/react-hooks#readme","license":"ISC","main":"./lib/index.js","types":"./lib/index.d.ts","directories":{"lib":"lib","test":"__tests__"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/1pxone/react-hooks.git"},"scripts":{"build":"npx tsc && npx babel ./src --out-dir lib","test":"echo \"No tests to execute\" && exit 0","prebuild":"rimraf ./dist"},"bugs":{"url":"https://github.com/1pxone/react-hooks/issues"},"config":{"commitizen":{"path":"cz-conventional-changelog"}},"husky":{"hooks":{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"dependencies":{"resize-observer-polyfill":"^1.5.1"},"peerDependencies":{"react":">=16.9.0","react-dom":">=16.9.0"},"devDependencies":{"@babel/cli":"^7.6.2","@babel/core":"^7.6.2","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-decorators":"^7.6.0","@babel/plugin-proposal-nullish-coalescing-operator":"^7.4.4","@babel/plugin-proposal-optional-chaining":"^7.6.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/plugin-transform-react-display-name":"^7.2.0","@babel/plugin-transform-runtime":"^7.6.0","@babel/plugin-transform-typescript":"^7.6.0","@babel/preset-env":"^7.6.0","@babel/preset-react":"^7.0.0","@commitlint/cli":"^8.3.5","@commitlint/config-conventional":"^8.3.4","@types/react":"^16.9.23","@types/react-dom":"^16.9.5","babel-jest":"^24.9.0","babel-plugin-add-react-displayname":"^0.0.5","babel-plugin-transform-object-assign":"^6.22.0","babel-plugin-typescript-to-proptypes":"^1.0.0","dot-json":"^1.2.1","husky":"^4.2.5","npx":"^10.2.2","prettier":"^2.0.5","react":"^16.13.0","react-dom":"^16.13.0","rimraf":"^3.0.2","tsc":"^1.20150623.0","tslint":"^5.20.0","typescript":"^3.8.3"},"_id":"@1px.one/react-hooks@1.0.5","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"1px.one","email":"hlebb@mail.ru"},"dist":{"integrity":"sha512-2FSSGQPzu1/h1W+IHA5GfYPfQ5Ihw+OKeaS1wtHd1jcbZRAYNKXGI6RV+1b2VsGVfNc8yzFx5sdwCFzQypmqqA==","shasum":"57c56c862a05ed8c17f03a55f7e0ee0b951aef07","tarball":"https://registry.npmjs.org/@1px.one/react-hooks/-/react-hooks-1.0.5.tgz","fileCount":38,"unpackedSize":61196,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhLiBCRA9TVsSAnZWagAAAoUP/27ZZLy591vNsvPJ736G\n+gHcEJLw59KX4i0s3UngWEEngZ9ePQeiWH96BXFjUqlml9SkR5hJvyC6SlE4\n8ErQs7sMNX3gcw5+KK021IGmr1/sZ3/gmtKpdA6TBAcXIL8kSE+4HRKEwSJC\nt6hjUqV4JgYcpg0R8S2AYEG9ieKNhKU9RJdoBS8YCWqabA3wjXDIbchPb6lK\nBONa5P4+958NMqJL4YHnX2H8TMdVdR2OLsNl1jifeZKuK+z01d7QbvHChjL3\ndQBcgsiWrKbopC25/YkLHA16Z0MqQBxeMB2SBvAkwxQXLtMmAXbckhY2bfcl\nxUqKZnUZB+UUPqVwPgVUP1fDbpn4bGFNijoNUbaOgyNHZ0B7acaPjxx2ntg1\nOr1zyaEEZTOtEPwLEs18K6bg2A7E2CK+1LTvqzAQMnVUy/hkQnrByiQJD5Ej\nAsaTr3EAAHDNSVm2MFs6wCV6kRFlluTi73O9bb5J2DqgNPDAVzCxFRfE8uYh\nQrNNb20uSrzhckTjBG0JoSdZqhlYU3GHdqZOFfJNou1CwALxD+HL65UYaQZg\n2xEVXWr396jJP5YECMwurphh4s2fHNm7oBw8qLeWSqRl178Q+Uq/bg+3ly3U\nCG2x9kbf3g/fja7c45mtGdEDCGlkMBYwh+1JnYv+IRxd890ZKa+SJUsUrWgU\n0H/4\r\n=MVnZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDqQOHqxV5FPsi9PJ0fgImBjnXtijNY3+nHvNcBAuzegAIhAPgzXV1Fq5jtR027uqq7oeYqufZZ8jk3rfIs8+bfExlg"}]},"maintainers":[{"name":"1px.one","email":"hlebb@mail.ru"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hooks_1.0.5_1602533504919_0.04741389867391543"},"_hasShrinkwrap":false}},"time":{"created":"2020-03-02T15:33:12.158Z","1.0.0":"2020-03-02T15:33:12.302Z","modified":"2022-04-04T10:34:21.014Z","1.0.1":"2020-03-12T17:44:57.220Z","1.0.2":"2020-05-23T00:26:24.842Z","1.0.3":"2020-05-23T21:26:34.506Z","1.0.4":"2020-09-18T13:36:52.075Z","1.0.5":"2020-10-12T20:11:45.072Z"},"maintainers":[{"name":"1px.one","email":"hlebb@mail.ru"}],"description":"Helpful react hooks","homepage":"https://github.com/1pxone/react-hooks#readme","keywords":["react","hook","hooks","react-hooks"],"repository":{"type":"git","url":"git+https://github.com/1pxone/react-hooks.git"},"author":{"name":"Artemiy Vereshchinskiy","email":"artemiy.vereshchinskiy@gmail.com"},"bugs":{"url":"https://github.com/1pxone/react-hooks/issues"},"license":"ISC","readme":"## React Hooks | 1px.one\n\nBunch of React hooks mostly built on top of Web APIs\n\n[![npm version](https://img.shields.io/npm/v/@1px.one/react-hooks.svg?style=flat-square)](https://www.npmjs.com/package/@1px.one/react-hooks)\n\n## Installation\n    yarn add @1px.one/react-hooks\n    \n  or\n    \n    npm i @1px.one/react-hooks\n\n\n## Description\n* [`useNetworkStatus`](#network-status-hook) - Hook to detect online/offline network status.\n\n* [`usePageVisibility`](#page-visibility-hook) - Hook built on top of Page Visibility API. Helps to detect active tab.\n\n* [`useResizeObserver`](#resize-observer-hook) - Hook build on top Resize Observer API. It requires to pass callback to detect size changes of specified Element.\n\n* [`useObservedSize`](#observed-size-hook) - Hook build on top `useResizeObserver` hook. Additionally returns `size` of specified Element. No callback needed.\n\n* [`useFullscreen`](#fullscreen-hook) - Hook built on top of Fullscreen API. Used to present specified Element (and its descendants) in full-screen mode. \n\n* [`useLocalStorage`](#local-storage-hook) - Hook to set and get localstorage values.\n\n* [`useDisclosure`](#disclosure-hook) - Hook to set toggle opened/closed state with additional callbacks.\n\n* [`useClipboard`](#clipboard-hook) - Hook to copy text to clipboard.\n\n* [`useElementHighlight`](#element-highlight-hook) - Hook to wrap specified Element with backdrop.\n\n* [`useImagePreload`](#image-preload-hook) - Hook to preload image with loading and error states.\n\n* [`useIdleTimeout`](#idle-timeout-hook) - Hook to call function after N-seconds of user inactivity.\n\n* [`useWhyDidYouUpdate`](#debug-hook) - Hook to log updated props and state inside components and other hooks. Helpful for development.\n\n\n# Network Status Hook\n\n```javascript\n...\n\nimport { useNetworkStatus } from '@1px.one/react-hooks';\n\nfunction SomeComponent() {\n    const online = useNetworkStatus();\n\n    useEffect(() => {\n        if (!online) {\n            // save form to localstorage\n        } else {\n            // restore form from localstorage\n        }\n    }, [online]);\n\n    return online ? <span>Connected</span> : <span>Connection lost</span>;\n}\n```\n\n# Page Visibility Hook\n\n```javascript\n...\n\nimport { useNetworkStatus } from '@1px.one/react-hooks';\n\nfunction SomeComponent() {\n    const online = useNetworkStatus();\n\n    useEffect(() => {\n        if (!online) {\n            // save form to localstorage\n        } else {\n            // restore form from localstorage\n        }\n    }, [online]);\n\n    return online ? <span>Connected</span> : <span>Connection lost</span>;\n}\n```\n\n# Resize Observer Hook\n\nThis hook built on top of [ResizeObserver API](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver)\n\n```javascript\n...\n\nimport { useResizeObserver } from '@1px.one/react-hooks';\n\nfunction SomeComponent() {\n    const [wrapperHeight, setHeight] = useState<number | undefined>();\n    const ref = useResizeObserver<HTMLDivElement>({\n        onResize: ({ height, width }) => setHeight(height),\n    });\n    const [blocks, addBlock] = useState([]);\n\n    const onAdd = () => {\n        addBlock([...blocks, (Math.random() * 100 + 50).toFixed(0) + 'px']);\n    };\n    const onDelete = (index) => {\n        addBlock(blocks.filter((_, i) => index !== i));\n    };\n    return (\n        <>\n            <p>Height: {wrapperHeight}</p>\n            <button onClick={onAdd}>Add +</button>\n            <div ref={ref}>\n                {blocks.map((block, index) => (\n                    <div\n                        style={{\n                            height: block,\n                            backgroundColor: index % 2 ? 'gray' : 'lightgray',\n                        }}\n                    >\n                        Block height: {block}\n                        <br />\n                        <button onClick={() => onDelete(index)}>Delete</button>\n                    </div>\n                ))}\n            </div>\n        </>\n    );\n}\n```\n\n# Observed Size Hook\n\nThis hook built on top of [ResizeObserver API](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver)\nand uses `useResizeObserver` hook inside to automate getting `size` of specified element.\nOptionally, you can path `deboubceMs` argument to hook, it will slowdown changing `size` value if needed, but not\neffects on visual element size changing. Could be useful to prevent expensive re-rendering.\n\n\n```javascript\n...\n\nimport { useResizeObserver } from '@1px.one/react-hooks';\n\nfunction SomeComponent() {\n    const [ref, size] = useObservedSize<HTMLDivElement>(100);\n    const [blocks, addBlock] = useState([]);\n\n    const onAdd = () => {\n        addBlock([...blocks, (Math.random() * 100 + 50).toFixed(0) + 'px']);\n    };\n    const onDelete = (index) => {\n        addBlock(blocks.filter((_, i) => index !== i));\n    };\n    return (\n        <>\n            <p>Height: {size.heigth}</p>\n            <button onClick={onAdd}>Add +</button>\n            <div ref={ref}>\n                {blocks.map((block, index) => (\n                    <div\n                        style={{\n                            height: block,\n                            backgroundColor: index % 2 ? 'gray' : 'lightgray',\n                        }}\n                    >\n                        Block height: {block}\n                        <br />\n                        <button onClick={() => onDelete(index)}>Delete</button>\n                    </div>\n                ))}\n            </div>\n        </>\n    );\n}\n\n```\n\n# Fullscreen Hook\n\n```javascript\n...\n\nimport { useFullScreen } from '@1px.one/react-hooks';\n\nfunction SomeComponent() {\n    const playerElement = useRef<HTMLVideoElement>(null);\n\n    const { open, close, toggleFullScreen, isFullScreen } = useFullScreen({\n        element: playerElement,\n    });\n\n    return (\n        <>\n            <button onClick={toggleFullScreen}>Toggle fullscreen</button>\n            <video poster=\"video/preview.jpg\" ref={playerElement}>\n                <source src=\"video/cats.ogv\" type='video/ogg; codecs=\"theora, vorbis\"' />\n                <source src=\"video/cats.mp4\" type='video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"' />\n                <source src=\"video/cats.webm\" type='video/webm; codecs=\"vp8, vorbis\"' />\n            </video>\n        </>\n    );\n}\n```\n\n# Local Storage Hook\n\n```javascript\n...\n\nimport { useLocalStorage } from '@1px.one/react-hooks';\n\nfunction SomeComponent() {\n    const [value, setValue] = useLocalStorage('lastSubmit'); // store under the 'lastSubmit' key in LS\n\n    const onSubmit = () => {\n        const submitPayload = {\n            user: 'John Doe',\n            items: ['1', { foo: 'bar' }, 'baz'],\n            date: new Date().getUTCDate(),\n        };\n        setValue(submitPayload);\n    };\n\n    const status = value ? (\n        <span>\n            {value.user} submited at {value.date}\n        </span>\n    ) : (\n        <span>Not submited yet!</span>\n    );\n\n    return (\n        <>\n            <button onClick={onSubmit}>Submit</button>\n            {status}\n        </>\n    );\n}\n```\n\n# Disclosure hook\n\n```javascript\n...\n\nimport { useDisclosure } from '@1px.one/react-hooks';\n\nfunction SomeComponent() {\n    const onOpenCb = () => {\n        console.log('content opened');\n    };\n\n    const onCloseCb = () => {\n        console.log('content closed');\n    };\n\n    const { isOpen, open, close } = useDisclosure(false, onOpenCb, onCloseCb);\n\n    const content = isOpen ? <span>Hello world!</span> : null;\n\n    return (\n        <>\n            <button onClick={isOpen ? close : open}>toggle content</button>\n            {content}\n        </>\n    );\n}\n```\n\n# Clipboard hook\n\n```javascript\n...\n\nimport { useClipboard } from '@1px.one/react-hooks';\n\nfunction SomeComponent() {\n    const onCopyCb = () => {\n        console.log('Copied');\n    };\n\n    // optional successResetIntervalMs parameter\n    // to set hasCopied to false in timeout\n    // defaults = 500 ms\n    const { copy, hasCopied } = useClipboard(onCopyCb, 1000);\n\n    const onCopyClick = () => {\n        copy('Hello world!'); // any text\n    };\n\n    useEffect(() => {\n        if (hasCopied) {\n            alert('Successfully copied!');\n        }\n    }, [hasCopied]);\n\n    return <button onClick={onCopyClick}>Copy text</button>;\n}\n```\n\n# Element Highlight Hook\n\nCould be used to build onboarding scenario or learning interactive guide.\nThis hook renders `Backdrop` to highlight selected element and provides callbacks\nto set elements by calling `setElement` returned second from hook.\n\nIt allows to set additional props to `Backdrop` but also supports all default `HTMLDivElement` props.\n\nYou can configure `Backdrop` view by setting\n\n`backdropColor` (defaults: `rgba(0,0,0,0.75)`),\n\n `zIndex` (defaults: `999`) and \n \n `overlay` (defaults: `false`).\n \nIf `overlay` set to `true` it will render overlaying `<div />` to block user iteration with selected element.\n\n\n@TODO: Smooth animation, resizing, highlighting dynamic elements\n\n```javascript\n...\n\nimport { useElementHighLight } from '@1px.one/react-hooks';\n\nfunction SomeComponent() {\n    const [value, setValue] = useState('');\n    const inputRef = React.useRef();\n\n    const [currentElement, setElement, Backdrop] = useElementHighLight<\n        HTMLDivElement,\n        { someExtraPropsToBackDrop: string }\n    >({ overlay: false, backdropColor: 'rgba(0,0,0,0.75)', zIndex: 999 });\n\n    React.useEffect(() => {\n        setElement(inputRef.current);\n    }, [inputRef]);\n\n    const onChange = (e) => {\n        setValue(e.target.value);\n    };\n\n    useEffect(() => {\n        if (value.length > 3) {\n            setElement(null);\n        }\n    }, [value]);\n\n    const onBackdropClick = () => {\n        if (inputRef.current) {\n            inputRef.current.focus();\n        }\n    };\n\n    return (\n        <>\n            <Backdrop onClick={onBackdropClick} someExtraPropsToBackDrop={'foo'} />\n            <input value={value} onChange={onChange} ref={inputRef} />\n        </>\n    );\n}\n```\n\n# Image preload Hook\n\n```javascript\n...\n\nimport { useImagePreload } from '@1px.one/react-hooks';\n\nconst imgSrc = 'https://example.com/static/dog.jpg';\nconst imgPlaceholder = 'https://example.com/static/placeholder.jpg'; // optionally\n\nexport const SomeComponent = () => {\n    const { source, loading, error } = useImagePreload(imgSrc, imgPlaceholder);\n\n    if (loading) {\n        return <span>Image loading...</span>;\n    } else if (error) {\n        return <span>Error occured</span>;\n    } else {\n        return <img src={source} alt=\"dog\" />;\n    }\n}\n```\n\n# Idle Timeout Hook\n\nThis component will fire `onClose` callback after 5 seconds of user inactivity.\nIt listens to `load`, `mousemove`, `mousedown`, `click`, `scroll`, `keypress`, `touchcancel`, \n`touchend`, `touchmove`, `touchstart` events.\n\n```javascript\n...\n\nimport { useIdleTimeOut } from '@1px.one/react-hooks';\n\nexport const SomeComponent = ({ onClose, isOpen }) => {\n    useIdleTimeOut(5000, onClose);\n\n    if (isOpen) {\n        return <p>This is autoclosing notification</p>;\n    }\n    return null;\n}\n```\n\n# Debug Hook\nThis hook will show in console difference between props on each render.\nIt helps to debug complicated components.\nThis hook supports nested objects compare. Use it only in development mode.\n\n```javascript\n...\n\nimport { useWhyDidYouUpdate } from '@1px.one/react-hooks';\n\nfunction SomeComponent(props) {\n    \n\n    useWhyDidYouUpdate(props, 'my complicated component to debug');\n\n    // also you can specify console prefix to identify current hook usage\n\n    // For example if props.name changed it will log:\n    // [why-did-you-update] my complicated component to debug {name: { from: 'Jim', to: 'Joe' }}\n\n    return <>...</>;\n}\n```\n\n### TODO\n* Add SSR support\n* Add demo\n* Tests\n* Add useAccelerometer\n* Add useParallax\n","readmeFilename":"README.md"}