{"_id":"react-hanger","_rev":"34-f42f98d4ab2b5dd3d0da9331be9b6d50","name":"react-hanger","dist-tags":{"latest":"2.4.5","beta":"2.0.0-beta.4","do-not-use":"2.3.0-0"},"versions":{"1.0.0":{"name":"react-hanger","version":"1.0.0","description":">","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"main":"dist/index.js","module":"dist/index.es.js","jsnext:main":"dist/index.es.js","engines":{"node":">=8","npm":">=5"},"scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","prepare":"yarn run build","predeploy":"cd example && yarn install && yarn run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.7.0-alpha.0","react-dom":"^16.7.0-alpha.0"},"devDependencies":{"babel-core":"^6.26.3","babel-eslint":"^8.2.5","babel-plugin-external-helpers":"^6.22.0","babel-preset-env":"^1.7.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","cross-env":"^5.1.4","eslint":"^5.0.1","eslint-config-standard":"^11.0.0","eslint-config-standard-react":"^6.0.0","eslint-plugin-import":"^2.13.0","eslint-plugin-node":"^7.0.1","eslint-plugin-promise":"^4.0.0","eslint-plugin-react":"^7.10.0","eslint-plugin-standard":"^3.1.0","gh-pages":"^1.2.0","react-scripts":"^1.1.4","rollup":"^0.64.1","rollup-plugin-babel":"^3.0.7","rollup-plugin-commonjs":"^9.1.3","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-peer-deps-external":"^2.2.0","rollup-plugin-postcss":"^1.6.2","rollup-plugin-url":"^1.4.0"},"gitHead":"a76e110f675c05a0059ced698657904a3764666c","bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@1.0.0","_npmVersion":"6.4.1","_nodeVersion":"10.12.0","_npmUser":{"name":"kitze","email":"kristijan.mkd@gmail.com"},"dist":{"integrity":"sha512-lZFQzSqX2ZnsDVWDMXuEATxln6Y4rnEwOo7PidGaAY5onH6MJxpqc2Lt0veZbo74lsKOnL2Zh3Hg3WO22eLyYw==","shasum":"bacef71e54bfded414c48ba95637a6a273d15034","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-1.0.0.tgz","fileCount":6,"unpackedSize":15196,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0xe5CRA9TVsSAnZWagAAOEIQAKCSgl82IiXQq1PEKiHn\nF4nVr7UT4i5cH060O+3FtkRC3B869ZAZ3bks596sJ81dcXamy4R+RW1Wo+Wo\nGKDa0ZWvzh+G/hvY34+NkF0iq9+Ar1aOQLlUHlmdZu+fvwB6aratuh/0UK0X\nLoPJhrb1huVWJ10DJU304qGpA1rpNkC81M/izBMYB8H9Iy61Q/SgMICOr46f\noGjFZFwq1+FXXQ2iFjgxpAetH5zyAylVpzg9zB72ngBXrspdLHPGdnCMOjTG\n9GOWvr0NAguHvVTO0Bct0ITt1W9MdCBPvxq1GnuG2A+nU20u05piZ2TAtlAo\nPrs6vUlHC0RLnSHxkHPYoK61Vril2sB/VNimZZrXxhVx5Cec10PpkWpPIAaS\nMcNOvOpUiD5sP1ZoDrqFMQoYOkzLK80XiPnP0j/QZm8yEQnEejTzTtmy5Hzd\nIZqAXhb+mtHG0d19h2lr/nTVU6k85qSNPVjxziroFB2qZHc/x85pSYECI/5l\ng44Oazi/bF5uePEU42zo27pW+FScwOd1jtWg4a63vOM6+VoZSlQ2KWjHO3w/\nkF6xes/etPnyfhJgYfArfdU+rU3iFBykKwBYLGoHi/bruxjeOpomIqKAZfsb\nt9vaJUele90bAQyAHiKqdx7M2WW3d9VTqGylR1oc8qm/4BnMEAhpjKSs3CpR\nFkoE\r\n=drPh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwDzIjZDX/JXmDimQvjTTC9D2FB2Pxj+fHxhZSg9FmtgIgZrBO+nMn0WlySsMKVgz824sZ0yOTy+BxwM8Ysbo7HlE="}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_1.0.0_1540560824591_0.4540350057988327"},"_hasShrinkwrap":false},"1.0.1":{"name":"react-hanger","version":"1.0.1","description":"## Install","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"main":"dist/index.js","module":"dist/index.es.js","jsnext:main":"dist/index.es.js","engines":{"node":">=8","npm":">=5"},"scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","prepare":"yarn run build","predeploy":"cd example && yarn install && yarn run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.7.0-alpha.0","react-dom":"^16.7.0-alpha.0"},"devDependencies":{"babel-core":"^6.26.3","babel-eslint":"^8.2.5","babel-plugin-external-helpers":"^6.22.0","babel-preset-env":"^1.7.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","cross-env":"^5.1.4","eslint":"^5.0.1","eslint-config-standard":"^11.0.0","eslint-config-standard-react":"^6.0.0","eslint-plugin-import":"^2.13.0","eslint-plugin-node":"^7.0.1","eslint-plugin-promise":"^4.0.0","eslint-plugin-react":"^7.10.0","eslint-plugin-standard":"^3.1.0","gh-pages":"^1.2.0","react-scripts":"^1.1.4","rollup":"^0.64.1","rollup-plugin-babel":"^3.0.7","rollup-plugin-commonjs":"^9.1.3","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-peer-deps-external":"^2.2.0","rollup-plugin-postcss":"^1.6.2","rollup-plugin-url":"^1.4.0"},"gitHead":"4d015018912c806b4fb977329568f470b61f9d96","bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@1.0.1","_npmVersion":"6.4.1","_nodeVersion":"10.12.0","_npmUser":{"name":"kitze","email":"kristijan.mkd@gmail.com"},"dist":{"integrity":"sha512-H9VzuPDs3fX7a2F0nBH98nk9FOl2id0jBqvXoYL6niAnzKlF/VQRkUHt8eedkbAIemaU3uqChCLHwEGFD8eDhg==","shasum":"a16543e74551ac67d4335167354e937ba932b55f","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-1.0.1.tgz","fileCount":6,"unpackedSize":19952,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0x52CRA9TVsSAnZWagAAfQoP/iI5brVebx3hPOy9OhGN\n2+uwkO5oB7DFW7fpSkd88FzQma+xknMxxH/zGPPtMblUTJulL68MA4S3awID\nXYJ4FiUux5zTKIqOlmIN9p9IQ2TwY4uzu2MxE+cmyqAP4F054D2QptUha1UC\nCreSyWq9WwKU5jFqFsAc4lqoMAHvf1WY6TqLGaqTWFp7txCHLJiLD5DYPaVk\n/mNEjd6zGLGx/XgfVVT4oUOBuUyt6IOEUshotSYxZvCM9jGrqOm+eJnKE3et\ngI5T1XAwCoax02vBIFttcJBTknonBcaUH/mJoO+vMRF06EBqWayBWdwCBWm3\ndvJEu1VwGI1fD/KLR80wj0YHwXF/+c/8DfYroL6bJ5gNpIXycPbhAy8Ma8sc\n8DGAbp/sJ5sEYx2T5QJkjGk8g2aoR+HFFKTFrU2X6KhnE4ByawRzdvpE35pW\nO8hwgUkL1M3wLo4LiVz+9Krm0JFdgPs9+I1GR0VvkDw7qqT5Go2amdeurPqz\nRXxijeHyro9F8GxKiRPw6gK+JNyYk/bB4PXU1xMqVm6Wk2tclh2l+40wz50W\nh7TyF0LS1G7StJUW9yShxC6qhH0alF/RM2CPvDYy0CeGD93i2baKq1XH8T+y\nIhN5ADlKhS2GbgZ7+Ljjc2XwtjcaLzPd27jHhhxlC1WjLnu255pinK0Xmil+\nx8Eq\r\n=4GtC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDlDiYLfLMJQQNNJc9rYqHD5j27W9bJPZcj99Ik6gXxuwIhANXMVH7cqMZkcF8xHnkAUPEkxLLB2+Cl38EdhUfbCzSL"}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_1.0.1_1540562550011_0.43192007515683906"},"_hasShrinkwrap":false},"1.0.2":{"name":"react-hanger","version":"1.0.2","description":"## Install","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"main":"dist/index.js","module":"dist/index.es.js","jsnext:main":"dist/index.es.js","engines":{"node":">=8","npm":">=5"},"scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","prepare":"yarn run build","predeploy":"cd example && yarn install && yarn run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.7.0-alpha.0","react-dom":"^16.7.0-alpha.0"},"devDependencies":{"babel-core":"^6.26.3","babel-eslint":"^8.2.5","babel-plugin-external-helpers":"^6.22.0","babel-preset-env":"^1.7.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","cross-env":"^5.1.4","eslint":"^5.0.1","eslint-config-standard":"^11.0.0","eslint-config-standard-react":"^6.0.0","eslint-plugin-import":"^2.13.0","eslint-plugin-node":"^7.0.1","eslint-plugin-promise":"^4.0.0","eslint-plugin-react":"^7.10.0","eslint-plugin-standard":"^3.1.0","gh-pages":"^1.2.0","react-scripts":"^1.1.4","rollup":"^0.64.1","rollup-plugin-babel":"^3.0.7","rollup-plugin-commonjs":"^9.1.3","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-peer-deps-external":"^2.2.0","rollup-plugin-postcss":"^1.6.2","rollup-plugin-url":"^1.4.0"},"gitHead":"a616a546c113eb370a07239029bd96a239bf83b2","bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@1.0.2","_npmVersion":"6.4.1","_nodeVersion":"10.12.0","_npmUser":{"name":"kitze","email":"kristijan.mkd@gmail.com"},"dist":{"integrity":"sha512-M/9lbbIw9YN1T0DVmspckyX/p1YadyhLRmqPtwAInd71QeeVqDLZsm+AyOzUs7aR3euxAy9/MppqorelbtZlYQ==","shasum":"01ed59c41fa16c42ab7d62dc0a836dd3e48d958f","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-1.0.2.tgz","fileCount":6,"unpackedSize":20693,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0yGXCRA9TVsSAnZWagAAivMP+QAi4Ra91IeoDysjpQ/g\n7hDCgI1UTu//EHriPdFGbnmQvzqq3pV54Ib/O0L/XAbqtjt+tL2qEAQWTfbe\nBb+BFq9s6KQF5GJNmk7lYW7Gv0oo7MCUjc4DPnfI77ZF9SZbZhw41rSGBQgg\nJ+U42N7bVvOwAiZAuN9IeaGODRKIqt3sdFQVSVJP6GtWr7ooHLhT2+XBxF7a\no9195U0GSdBqgQqwbvtoBU9b67+vc91VH/2j+9BMQxuIp8C5ogLfO/sHXZMf\n8fsviZTUcghZqJ5Ka+8bYkIf6i1It03Nu9OTrrxYXqjshD+e/9ib5GewqfBH\nkTTMwyXLEYM/w6z/Aun+mhvw6aAcxXqG1BvVwO9H1iJkGMUdnJMSi0g/YHst\n02NfuQ0uitndBLAc9ijFFHKLokVEJ30NJzBS0IoEmRQSduxudJ654AWMrYMX\n9EreueRp9PENnAjU5rbQW4KMOjL+NDckuUU01plgAUJ9XE1wPNpFCGAY2JbD\n9eZgAB1gkuiHduVCOkOiMtQogBlb6P1HNQ8jgn49PhBXIxG2HJqncDen8WUs\nkqb1w5zyTDZxHAswXLGZD4zZAcgJ2rS/0T3l1Ghc9jAGfUdjfBGmMXiVytcf\n3oK0lsZPO0gtFB17GORgPm1EYFqV6RopBz5jUSNq8svIZQ2D4/NzUep/OVUu\n1Yzt\r\n=iMaG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDmRxSoLoBlwUq1K6Jn2I4WLvkEsqLPs+ZYToAIO4EMqAiEAzmGcgZQ5u9xeLNhLWUeQiUUERAfNAmh8IisZ+xjeB9A="}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_1.0.2_1540563350432_0.4407326265179303"},"_hasShrinkwrap":false},"1.0.3":{"name":"react-hanger","version":"1.0.3","description":"## Install","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"main":"dist/index.js","module":"dist/index.es.js","jsnext:main":"dist/index.es.js","engines":{"node":">=8","npm":">=5"},"scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","prepare":"yarn run build","predeploy":"cd example && yarn install && yarn run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.7.0-alpha.0","react-dom":"^16.7.0-alpha.0"},"devDependencies":{"babel-core":"^6.26.3","babel-eslint":"^8.2.5","babel-plugin-external-helpers":"^6.22.0","babel-preset-env":"^1.7.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","cross-env":"^5.1.4","eslint":"^5.0.1","eslint-config-standard":"^11.0.0","eslint-config-standard-react":"^6.0.0","eslint-plugin-import":"^2.13.0","eslint-plugin-node":"^7.0.1","eslint-plugin-promise":"^4.0.0","eslint-plugin-react":"^7.10.0","eslint-plugin-standard":"^3.1.0","gh-pages":"^1.2.0","react-scripts":"^1.1.4","rollup":"^0.64.1","rollup-plugin-babel":"^3.0.7","rollup-plugin-commonjs":"^9.1.3","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-peer-deps-external":"^2.2.0","rollup-plugin-postcss":"^1.6.2","rollup-plugin-url":"^1.4.0"},"gitHead":"36c44c7e4349614228127e8583039a7916b9ae30","bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@1.0.3","_npmVersion":"6.4.1","_nodeVersion":"10.12.0","_npmUser":{"name":"kitze","email":"kristijan.mkd@gmail.com"},"dist":{"integrity":"sha512-ULuGngG/3N8acj4maOcwwJR2iSkzjDk+isByCeSDIHqh9fiaGTWXKIsAsPKMPsF8R3LmLyAt3M+gjf7MA3OW3g==","shasum":"caa461903e201fea45b78b5945beeb30022746ca","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-1.0.3.tgz","fileCount":6,"unpackedSize":22493,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0yvlCRA9TVsSAnZWagAAcLIP/jpeYvjY+ki9Uuby1pGp\n0lsb5lQc93Kxe6f/l/7AhbFNQ3JVPoISz8ot+Jpva/plSzvHdC+8Iyu6KCwg\nOVHmpHIaH2kW+LvhXTXQii83pAOVNhzo1dJvJExCsqp/mziPWfmBrtRrLZ+J\nAI8BfzDhyDzxnqqi9ls8oWj7k1Sgwebh/gMt9aoY5dU277xau02WfArgelMs\ne/5GSnOMLKYzS4XdCTHYoUoV+p+Rr8kneJuMqjTdQN5Omwq+9uP1bH6csTJB\nCPZzq4/DNCi4Dmjgz7Kr25JBWEFStij6pE7JuGmn1DaktS1N8//8zv6byZIm\n3K3FCokVNVXFfVGnnug5jHHZFwI+L+aEdCl1UHmETLvcU5cpl5lKwAHQcS2e\n30jxmB6ABKK0/e1YfiCUFYmPuQ7wshf2BFYFFwfz7boe+qjgJBFUNIn7aJrt\nmkZm7w8A/DGQfUN016fserxm6kdNbUxRFl8y3O+EHZBKKef2OqZJ3zTgJil1\nrxZJ1FD2U7V4PX1CRifMi+gomIhMUVOgbV8tac9bzqcmBgrISG7qimJV6qCG\nxxFr3T7IEAanJr3zz4bBNQ09JdK56lRg7y+3fKYCtIKWwV7K6yk8uwC3iwUg\ncT5gki3RMo9HHCG5A8WHLghIIudbb6TGrl4SJCqP4ztv1WdohICr7vWDz3k7\n4E2s\r\n=EEV9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFroe8r6tbp7lB9nc1BgkUWl05ysbGXays4rVXlQXEPtAiEA89c5vsPdoU//oMTKxlIhHdzOi2Gu3ah1OrsO4amv9rg="}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_1.0.3_1540565988656_0.8512823971359391"},"_hasShrinkwrap":false},"1.0.4":{"name":"react-hanger","version":"1.0.4","description":"## Install","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"main":"dist/index.js","module":"dist/index.es.js","jsnext:main":"dist/index.es.js","engines":{"node":">=8","npm":">=5"},"scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","prepare":"yarn run build","predeploy":"cd example && yarn install && yarn run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.7.0-alpha.0","react-dom":"^16.7.0-alpha.0"},"devDependencies":{"babel-core":"^6.26.3","babel-eslint":"^8.2.5","babel-plugin-external-helpers":"^6.22.0","babel-preset-env":"^1.7.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","cross-env":"^5.1.4","eslint":"^5.0.1","eslint-config-standard":"^11.0.0","eslint-config-standard-react":"^6.0.0","eslint-plugin-import":"^2.13.0","eslint-plugin-node":"^7.0.1","eslint-plugin-promise":"^4.0.0","eslint-plugin-react":"^7.10.0","eslint-plugin-standard":"^3.1.0","gh-pages":"^1.2.0","react-scripts":"^1.1.4","rollup":"^0.64.1","rollup-plugin-babel":"^3.0.7","rollup-plugin-commonjs":"^9.1.3","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-peer-deps-external":"^2.2.0","rollup-plugin-postcss":"^1.6.2","rollup-plugin-url":"^1.4.0"},"gitHead":"adb3dabb53812f9c7b3c2824cbacc04fc8d4f952","bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@1.0.4","_npmVersion":"6.4.1","_nodeVersion":"10.12.0","_npmUser":{"name":"kitze","email":"kristijan.mkd@gmail.com"},"dist":{"integrity":"sha512-53dc78LvyOAi3ehMO0mYcconvty7Xh5+u+q8qsEQ8AY9GtKy2CqVsOgqIG5jNrRGZR77Qa0uBL1MkkSsESQO4Q==","shasum":"bc28c4907fc9478cf01d358f46f58d5ccd3c123c","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-1.0.4.tgz","fileCount":6,"unpackedSize":24467,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0y4iCRA9TVsSAnZWagAAQxMP/R4q6k85DMuPjtbqAnVL\nxu7k+I8Mx/QOKpuAm7TGfSzW+Ata0QzPn7g9tjz1IcjCrVb47t06MnTznj74\n0Nc1dPR9GdTEQCAOZIU+QSB2PPqFtb7l5vfTkk78P80dkPD09AKd/EniqNOM\nZg0qPiXCdBpzEUH4JzM3mQp3e5CQS6M+1Ur1DM/kl4jnd6CI4ajmKARB96RT\nzuyLu0EqG1GweQpU0EzA8xFfExizUSO1eA31qZhMLcaW47CjM6Jt2s0MhzRj\nzSsRi7TW6dVDtKbuwaIRdW9t3VOw5dMK95w9126yqlTTT+j4vkDyXOwYKLT/\nYasRBpzo3rQpmHFrUO/VU/kTCWGTrvSQVgOUTNTeFaBBcmeR7xH165km2djG\nzqobT7PyWdecYG1kYlwJsIXLfSj5ECPc0hgR9Izc0QlmF4Vccr6ZSgUIJkaL\nvEt/YQRPMAP6BUp0Rp9EcynTqpFY6p3uSUGwVR8Y8x06tWFO81dXU91Zd/Xq\niQqbxz+NP3snKABDIvDekEoK7k7GI6NddVVWAlXFcq46ZMzwQ+USIPnxiPjE\nzMMo0eZvzNKuTtgQ2XkqykrFvPD7VFsbemtfRVmjuTIakjZUoAvwjrE0r8Ro\nWJv9ZTqzUy8clm6eueB01mvhzwIIzBogCouaXqMCxoayJNJyA4zpNionhU93\n0Npd\r\n=tKSc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCoiWwZNuNOYtM4rMovVrhLOYdDB/pdb7uVEPpwIkGtCwIhANpiJi02xdfGXRvTAtQCIqUvIdAZa2LEbk0nMP96GAYD"}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_1.0.4_1540566561713_0.5408904917555988"},"_hasShrinkwrap":false},"1.0.5":{"name":"react-hanger","version":"1.0.5","description":"> ⚠️ Warning: hooks are not part of a stable React release yet, so use this library only for experiments","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"main":"dist/index.js","module":"dist/index.es.js","jsnext:main":"dist/index.es.js","engines":{"node":">=8","npm":">=5"},"scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","prepare":"yarn run build","predeploy":"cd example && yarn install && yarn run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.7.0-alpha.0","react-dom":"^16.7.0-alpha.0"},"devDependencies":{"babel-core":"^6.26.3","babel-eslint":"^8.2.5","babel-plugin-external-helpers":"^6.22.0","babel-preset-env":"^1.7.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","cross-env":"^5.1.4","eslint":"^5.0.1","eslint-config-standard":"^11.0.0","eslint-config-standard-react":"^6.0.0","eslint-plugin-import":"^2.13.0","eslint-plugin-node":"^7.0.1","eslint-plugin-promise":"^4.0.0","eslint-plugin-react":"^7.10.0","eslint-plugin-standard":"^3.1.0","gh-pages":"^1.2.0","react-scripts":"^1.1.4","rollup":"^0.64.1","rollup-plugin-babel":"^3.0.7","rollup-plugin-commonjs":"^9.1.3","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-peer-deps-external":"^2.2.0","rollup-plugin-postcss":"^1.6.2","rollup-plugin-url":"^1.4.0"},"gitHead":"7b2556bca29147f2c73349b785e3ed54628e9a6e","bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@1.0.5","_npmVersion":"6.4.1","_nodeVersion":"10.12.0","_npmUser":{"name":"kitze","email":"kristijan.mkd@gmail.com"},"dist":{"integrity":"sha512-HgNptK5XPY/dePdPsbUwc5/iZlTYC9+LLU1sNKuGz7na7kTxgZAV5EyJEnYmICnpT99eYhy3VlCsRmad8HF+DA==","shasum":"9901a4c8303d280fa843dcdc75e06b883dfa47c7","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-1.0.5.tgz","fileCount":6,"unpackedSize":26459,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0zltCRA9TVsSAnZWagAA2QYP/RxF58hbl5ng2qj69dFJ\nWFFPpkdQ/sPFbgj8NCQ+bb90qj7OvNx2KyJ1seVNlbt1JwKlkqhA2YHvsrnw\n9pzp5bqyhxJsDgPSxdgV5JwskbqhnvWkyAH2nyz00EtnOhViV4B8lU4wSSi+\nxTOMPHJbBvFC+UHcTq9HNYk2GAHteYsAbHrKbUkYtVu75S0mFCdlCKPZl3yJ\n8SVsPtAllPS3kLyiOX9deZLQL4P0VdpIr1l5BSTf+4FOUv1Yn74IOBCWIKHZ\nqBhppGGDlVcXSQrMY3QjjO+xypLbRtBZL13CLfkH/peBJvVcyGLOuLNplk7T\nUJyb1IkAvMpdlP5gfAalZ9OySlcG2Uv2JcuD5ywQKWLDjm3qxp/lBYyOsbml\nKtUPS28Gr96pMmBbNNAXovLJ4tsTWExtqU1JjJiVzuJnA3Na031tKY2G7Pc/\nQ8Pxfd+IqB4UviRYo5Q013+uHuHy0blOvAQ5nVrcsdmEStGE0/O9zXsuL13v\nmZJBmdOpgSN4Hk968zOAYGwIxXkfTer9q/K7Hqqvj6PCwq9qyNIL3tKnktUg\n0yBQQRH0LESJGsV08Xgsnw31PPyeysYCw0qr9oKPe9GO7lOCmX5Jfyal+oPb\nUrenpw3KtQb8AdwSSuGjDwcm2AVItijbfqV0D3aIV8i8AnD8ZpIA+W8IiTV4\n+hqN\r\n=n47T\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCiXDTAFw7I204IfJevRBS7m1rJ2QnaYRAUz2nZaEsWVgIhAOkHwoR30zxTB5RW7ZBmyygCpi7sYw+kHyXPTK+GKw72"}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_1.0.5_1540569452406_0.2697711050544529"},"_hasShrinkwrap":false},"1.0.6":{"name":"react-hanger","version":"1.0.6","description":"> ⚠️ Warning: hooks are not part of a stable React release yet, so use this library only for experiments","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"main":"dist/index.js","module":"dist/index.es.js","jsnext:main":"dist/index.es.js","engines":{"node":">=8","npm":">=5"},"scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","prepare":"yarn run build","predeploy":"cd example && yarn install && yarn run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.7.0-alpha.0","react-dom":"^16.7.0-alpha.0"},"devDependencies":{"babel-core":"^6.26.3","babel-eslint":"^8.2.5","babel-plugin-external-helpers":"^6.22.0","babel-preset-env":"^1.7.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","cross-env":"^5.1.4","eslint":"^5.0.1","eslint-config-standard":"^11.0.0","eslint-config-standard-react":"^6.0.0","eslint-plugin-import":"^2.13.0","eslint-plugin-node":"^7.0.1","eslint-plugin-promise":"^4.0.0","eslint-plugin-react":"^7.10.0","eslint-plugin-standard":"^3.1.0","gh-pages":"^1.2.0","react-scripts":"^1.1.4","rollup":"^0.64.1","rollup-plugin-babel":"^3.0.7","rollup-plugin-commonjs":"^9.1.3","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-peer-deps-external":"^2.2.0","rollup-plugin-postcss":"^1.6.2","rollup-plugin-url":"^1.4.0"},"gitHead":"17767657a23c34a95dbac676ee7564e044281901","bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@1.0.6","_npmVersion":"6.4.1","_nodeVersion":"10.12.0","_npmUser":{"name":"kitze","email":"kristijan.mkd@gmail.com"},"dist":{"integrity":"sha512-LKnq99XOQ58AhiGS+wfGSB2R4tLcyOIvZ5ptvPvew2ne2ih/Z7mqAaTEHsXXQAkewUo4pcnF1m4LNWLVYSQYfQ==","shasum":"213234dc92b2988af77a48508bfc3cb7f5606d7d","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-1.0.6.tgz","fileCount":6,"unpackedSize":30589,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb1CMICRA9TVsSAnZWagAAaFEP/1HXKM6h31INukomoa1S\nl3C3th6jd6uBShHFl1YnmJcBi59Q1c1bXT9RTD3b9Cbv1hxW3FX6to/Pki1Y\n7dZ5i/mbDNZO6EiYYumA0Iw/p5ICzHEk6OF39uHJsh/nYMTz4u4PXFebpczH\npIssJIu7wwidLjQ9vWfp8KOe/wgbV1UXHpbvlxcxHuaPxw+EnGb30m0SBOsf\np4qyTGq90j+GcT3zwsBtj9nssPSzHv7maEkt3/mPBm0PH+BZnvJlI5Q/atWO\n8V4kmSATfFirrUkaEu00KEaRptGlgYdxRkZYmjJJ9ZXOETV7/qSsYsUMAEXP\nOhmNmH2hKlG9+JRnJgd46oxlKAS/4KYfTPQjNXH74tZqCrvFiMpzN16ua/Ii\nhshEEyBuiMfVcBKr5g/43Ub+mZPekP0NXYM0+nBkDgoxa2Xc0OKaS+n3IMME\nXYVu0fBwv36c/j0iTUzb4kwsyAnEe/i6YxHbp21zmeTczcfY70joL3Alx/uS\neRlBA0thquKoEZhSa+Ns6qhgPdcNyVnr8WEUZ9mJvLQwD068+k2R8JaS3Olq\n2ZzJBXed7Ab1+g7nTS7HkV0nc8dhcoenFZ/Xo5Py1oKoheMJPw0x7hqkUOzE\nbm/TrYBhYGsW014B+IONrcPrducJ28fZY/DOjWoNGVsJphIFzxRWeqxxi9se\nl4Ij\r\n=9fm/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDHf66ln3gGs3A2XQliVbGzxpiR0H+Z3u/4XdybCHfRCQIhALgWl0KroAn29cZbNohBwPmUaGTAdT/R2g7AZ2BNsi9H"}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_1.0.6_1540629256117_0.6772060472514276"},"_hasShrinkwrap":false},"1.0.7":{"name":"react-hanger","version":"1.0.7","description":"> ⚠️ Warning: hooks are not part of a stable React release yet, so use this library only for experiments","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"main":"dist/index.js","module":"dist/index.es.js","jsnext:main":"dist/index.es.js","engines":{"node":">=8","npm":">=5"},"scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","example":"cd ./example && yarn start","prepare":"yarn run build","predeploy":"cd example && yarn install && yarn run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.7.0-alpha.0","react-dom":"^16.7.0-alpha.0"},"devDependencies":{"babel-core":"^6.26.3","babel-eslint":"^8.2.5","babel-plugin-external-helpers":"^6.22.0","babel-preset-env":"^1.7.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","cross-env":"^5.1.4","eslint":"^5.0.1","eslint-config-standard":"^11.0.0","eslint-config-standard-react":"^6.0.0","eslint-plugin-import":"^2.13.0","eslint-plugin-node":"^7.0.1","eslint-plugin-promise":"^4.0.0","eslint-plugin-react":"^7.10.0","eslint-plugin-standard":"^3.1.0","gh-pages":"^1.2.0","react-scripts":"^1.1.4","rollup":"^0.64.1","rollup-plugin-babel":"^3.0.7","rollup-plugin-commonjs":"^9.1.3","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-peer-deps-external":"^2.2.0","rollup-plugin-postcss":"^1.6.2","rollup-plugin-url":"^1.4.0"},"favoriteScripts":["example","start"],"gitHead":"2cd2edba3b90e942cfcfc46c416c8db6f4eda7c9","bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@1.0.7","_npmVersion":"6.4.1","_nodeVersion":"10.12.0","_npmUser":{"name":"kitze","email":"kristijan.mkd@gmail.com"},"dist":{"integrity":"sha512-Am63kjwMPG8A2EyLJT321wkcdURXHmpeN1dcmAfWQqif6xRqmlOuXlbQJRd/6Yv5R8rntZ61NTwVNY1JcB7uww==","shasum":"e2b0f5e183a79a5e90c28f96a071713200b58ee4","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-1.0.7.tgz","fileCount":6,"unpackedSize":31882,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb1W64CRA9TVsSAnZWagAAxTAP/A1cqHB6RgpVs9AxdReW\nwvhQ85b1lSoVectkNltEAxdrjj5ESaKhyh4qOSLzuGHBuro0eGF0XsEqvWds\nrjgT78v6Eylygq2eq5KcCklyx8RVdetPAVl4OQHeXZSoCDpXz7RUiwo1+Kol\nM2HBSxPZJYWKIDeLuNcG9Hy5+J+ke1KtPkMnjgS+HjwRKbqETQGjK7CbVOaM\nydZSjAdZAeeIiKWASzmVHauBVw/+2fB0W3pOTtGtyzvDbEofXG/HAsYCxBLL\nKAiFTwanaK9KwO1cd0YrboPIUWUdBdhzJW7ed4lwCrtQ235dhhdoPVAHkCJ4\nXKfNwWJdmhRxNeyW+rnBnNTbA+SfYwA2ImT0/0BkXjvkf+PaoyBgwhDd7Ixh\ny0PdiGJ354xtSUK94wCBqRB6HRgAjiS9dqzMhoUXqWwdztzBxhPBl4thhNO0\nIJnWVxlOqfJx7tRsfZG1+GR67KUBFrclKIynLlivfkEiwzTR4u5WXqFXtDg7\n9CEg6cH1MYWMcHVB8f9x7LMe7WR1kI5WbJqXnVpTY8mkZClJ68PsJGRT7eGj\ngA7TS24kKMF12ll0VjakTfk9K5xTA7JED1FsEr6x2FxrbW2w72PU75782XMH\n3dSi6EpTh3Iafv7CQF6s9iM25k2pfE7sBbBNwqdCqaYvvcIZzLtaCK6pv5+z\nxZVn\r\n=oDle\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFQcoKXogssGbtNb3ZC3qCCBuwscoflWvDVRlwdC5SaFAiB66pqUGdYOo5apyPcB1VNpsKrIAaoN7Q+aJK+U9E4XQg=="}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_1.0.7_1540714167573_0.26014695405958044"},"_hasShrinkwrap":false},"1.0.8":{"name":"react-hanger","version":"1.0.8","description":"> ⚠️ Warning: hooks are not part of a stable React release yet, so use this library only for experiments","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"main":"dist/index.js","module":"dist/index.es.js","jsnext:main":"dist/index.es.js","engines":{"node":">=8","npm":">=5"},"scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","example":"cd ./example && yarn start","prepare":"yarn run build","predeploy":"cd example && yarn install && yarn run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.7.0-alpha.0","react-dom":"^16.7.0-alpha.0"},"devDependencies":{"babel-core":"^6.26.3","babel-eslint":"^8.2.5","babel-plugin-external-helpers":"^6.22.0","babel-preset-env":"^1.7.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","cross-env":"^5.1.4","eslint":"^5.0.1","eslint-config-standard":"^11.0.0","eslint-config-standard-react":"^6.0.0","eslint-plugin-import":"^2.13.0","eslint-plugin-node":"^7.0.1","eslint-plugin-promise":"^4.0.0","eslint-plugin-react":"^7.10.0","eslint-plugin-standard":"^3.1.0","gh-pages":"^1.2.0","react-scripts":"^1.1.4","rollup":"^0.64.1","rollup-plugin-babel":"^3.0.7","rollup-plugin-commonjs":"^9.1.3","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-peer-deps-external":"^2.2.0","rollup-plugin-postcss":"^1.6.2","rollup-plugin-url":"^1.4.0"},"favoriteScripts":["example","start"],"gitHead":"35ceee62c155612bb19edaf721c50b3cf7bf603a","bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@1.0.8","_npmVersion":"6.4.1","_nodeVersion":"10.12.0","_npmUser":{"name":"kitze","email":"kristijan.mkd@gmail.com"},"dist":{"integrity":"sha512-CvxRjIuIUg3SQTGeA1WjaYyaS8jRo7od3wNEuiEzG1i6+a0jwzX21Xs5/jXBXGqdzY+j2OrC6Zq7vwEIuBilUg==","shasum":"8cdf776f7a04b0b74444e8a9dcf3f2c6d63b9b3b","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-1.0.8.tgz","fileCount":7,"unpackedSize":35340,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb1pCPCRA9TVsSAnZWagAAdQ8QAJH3c8K4HjA/yum/X3K5\n9kBC3fNubrMGPkKWBOWAxRmJfDDKuWYBtage6GVDEo865Gg9o/qkAHZJrCuB\npMhGfD81gJI3dG9TEMwo40w3iPqtyueJ1/dCGHfdu89m3X6c3ywu8DfRoa4O\nOx5CzQAXQOcG8qOfLbdngTdxe0pdA9kDwQbgRSiabhTlLawGZGis/JZxzqHY\ns73m5acD5/KqgYK9ghOCGCza5mAec8kqjvbLLo8A7+ovXEU7bDw4rRcf0zW+\nLU4bHK2I6tHADszMeTVA87p3iMLPGWfVOTTS+2XSKh4qvsq6+IbpG80Ynhf/\ns+ewFRK2cMC6Pz6atmB0ISm5oXMLb1bur/z+j7cxljUKUD3Yvfam/tJbVtyC\nHEoOOQiTM0XxrAj8rdalNTt5dUAuTNSi02dvA4SBR0KjeVWaxmqG1EGCcuJ0\nKB2CQ4N0bqJGA73CD8SU2e45o1V1y0MQomOIzZQFgRFnw/7JaVoN1rTNcWGd\n3gL9PdsJrt4KiuUstlMzpE96d+EGkle7zyWhj7oOW31PQonTP65as0p+Aeln\nNYD/JYSWZh0ck5jTb/s/9GXnPdGP2zXN/9Cx/UT9WEKJmZ8P27beKKgDrI8a\nDG5MMT1xMj1DkfsNy7nGCpgDXXPkXT2e8J+qq2leNOC+yb5Ew/Totv21hEt3\nzlQI\r\n=koPi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFKbZPwnaPyYz54SnCCEinX9Q5qflLUJcNclNmsZWeEcAiB1HKpyo4XNWzDpJPJAKpCm+X8BRxiNkcIsEJ/6DG/H8Q=="}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_1.0.8_1540788366448_0.969884652509923"},"_hasShrinkwrap":false},"1.1.0":{"name":"react-hanger","version":"1.1.0","description":"> ⚠️ Warning: hooks are not part of a stable React release yet, so use this library only for experiments ⚠️","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"https://github.com/kitze/react-hanger.git"},"main":"dist/index.js","module":"dist/index.es.js","jsnext:main":"dist/index.es.js","typings":"src/index.d.ts","engines":{"node":">=8","npm":">=5"},"scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","example":"cd ./example && yarn start","prepare":"yarn run build","predeploy":"cd example && yarn install && yarn run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"react":"^16.7.0-alpha.0","react-dom":"^16.7.0-alpha.0"},"devDependencies":{"babel-core":"^6.26.3","babel-eslint":"^8.2.5","babel-plugin-external-helpers":"^6.22.0","babel-preset-env":"^1.7.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","cross-env":"^5.1.4","eslint":"^5.0.1","eslint-config-standard":"^11.0.0","eslint-config-standard-react":"^6.0.0","eslint-plugin-import":"^2.13.0","eslint-plugin-node":"^7.0.1","eslint-plugin-promise":"^4.0.0","eslint-plugin-react":"^7.10.0","eslint-plugin-standard":"^3.1.0","gh-pages":"^1.2.0","react":"^16.7.0-alpha.0","react-dom":"^16.7.0-alpha.0","react-scripts":"^1.1.4","rollup":"^0.64.1","rollup-plugin-babel":"^3.0.7","rollup-plugin-commonjs":"^9.1.3","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-peer-deps-external":"^2.2.0","rollup-plugin-postcss":"^1.6.2","rollup-plugin-url":"^1.4.0"},"favoriteScripts":["example","start"],"licenseText":"MIT License\n\nCopyright (c) 2018 Kitze\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"react-hanger@1.1.0","dist":{"shasum":"2cbadd9b883aac0db0c9a23643a95f9b41fddf15","integrity":"sha512-mU5oiVYqZJxXaRrPv4cWMSV576L9NzwevtbLoQDVchj9u1cqHkQJkIg2VMY93g/mxzgsvEC/KdlFuZTm5cD10g==","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-1.1.0.tgz","fileCount":9,"unpackedSize":35343,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcLG+HCRA9TVsSAnZWagAANgAP/RD3jEHC/5afRzEUpUVu\nrXjbizTBt8zKRn5x55ujzcPaSa+wHqaGy2hl6YDmH41dhrOQeffsbVsMyLJB\nwVH7nCjL4SVweUGeh1IE0/POJPSfrPLXbv0CB1q/upzezxG2FVXEwqkt/ul5\nKmjwS9RE/1MgHM1VMUG9WHMJbGFEgXdO5stmq7R+eRlmtkJSR5KECuZ5PxX0\nQ/9uLfgn1CvwVHwHcEvmQHX8C4BgUYe4YoJlZUF0zk6hWP7LN+RcKIirrEz7\nb0+8oNW5jWGR8yBDQnpYYMVGvJe4GRreI2L7rUMRFX8ii/TmzeFaEPSZ3MTS\n43Ltqo0kMybNjP4nkY66I66AZMXZc2bvY4rm/FKSKSXLr3wIlybpyKXlBvhS\nZeV4AVjp1hUlJPopKg20wHtYMkHZz1sxn7WE3Eke1h132PHSH/xTYGWGhBOa\ntwtjnuZWGE6LcPzIBBQJTMsRPbDbTGuBV7/qGnCco40UXSfs73ekRsw5s7/P\nsFwb8CsS02FKCPhXhZvDrWB3Tj57sQpCbN4v5GnWbabm8DXmS8lKazQHvSHM\nBXsRlAdr1QjiB9ArI9wQKoxmbOiLgHcPD6n9ZF2yS7DrzCO6dVO9iw9BV17S\nCFLnNDzPly423dPPTkCc1ruyNzw0L0po+AB5/JoAI6Hk6gSwjjQTB62DKIto\nxIPE\r\n=n0xk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD5JBeXWAe15wSYkp7U/PuB8h6ejnMFSsJ9GSuCO4nQEgIhAOx7ShEhRaokaBGwxWlytllEQhvfD9zOGzF+peyi2Ioe"}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"_npmUser":{"name":"kitze","email":"kristijan.mkd@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_1.1.0_1546416006591_0.05342283084907917"},"_hasShrinkwrap":false},"1.1.1":{"name":"react-hanger","version":"1.1.1","description":"> ⚠️ Warning: hooks are not part of a stable React release yet, so use this library only for experiments ⚠️","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"https://github.com/kitze/react-hanger.git"},"main":"dist/index.js","module":"dist/index.es.js","jsnext:main":"dist/index.es.js","typings":"dist/index.d.ts","engines":{"node":">=8","npm":">=5"},"scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","postbuild":"cp src/index.d.ts dist/index.d.ts","start":"rollup -c -w","example":"cd ./example && yarn start","prepare":"yarn run build","predeploy":"cd example && yarn install && yarn run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"react":"^16.7.0-alpha.0","react-dom":"^16.7.0-alpha.0"},"devDependencies":{"babel-core":"^6.26.3","babel-eslint":"^8.2.5","babel-plugin-external-helpers":"^6.22.0","babel-preset-env":"^1.7.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","cross-env":"^5.1.4","eslint":"^5.0.1","eslint-config-standard":"^11.0.0","eslint-config-standard-react":"^6.0.0","eslint-plugin-import":"^2.13.0","eslint-plugin-node":"^7.0.1","eslint-plugin-promise":"^4.0.0","eslint-plugin-react":"^7.10.0","eslint-plugin-standard":"^3.1.0","gh-pages":"^1.2.0","react":"^16.7.0-alpha.0","react-dom":"^16.7.0-alpha.0","react-scripts":"^1.1.4","rollup":"^0.64.1","rollup-plugin-babel":"^3.0.7","rollup-plugin-commonjs":"^9.1.3","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-peer-deps-external":"^2.2.0","rollup-plugin-postcss":"^1.6.2","rollup-plugin-url":"^1.4.0"},"favoriteScripts":["example","start"],"licenseText":"MIT License\n\nCopyright (c) 2018 Kitze\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"react-hanger@1.1.1","dist":{"shasum":"f4f740fb200bdab87922d14f42b87c57e2acf4f5","integrity":"sha512-hBbzJladOEUXMQGkVf7gsP6YpsTvXLvT9ku9wLl7jpQa2LlLtlX6BQv6NoBAJzBSGlIiM3TiGwpUXIZR6UjcqQ==","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-1.1.1.tgz","fileCount":10,"unpackedSize":37118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcLOTPCRA9TVsSAnZWagAA2lcP/0pmEhS/RUArOKIi7bpb\nj4XDZJFbyAUtpQWIDX3r/fbNLUE0SlkxNWsc2EmdEBN4i3Lp2GOZ1P8pPLAp\n3Cvfs55a4WW//9JVKzCZiYA4ZgK7tHp+PQt1Rrp80IOAi41SKJaoc6bWb+iE\n8pUdqcBnECpt6PdMN5G9kLsFmpSbICNqbcaDrHjx/7mIPhfQsGWVHzLX+76c\nHlbiz33H78mOBYxYZQyoxM9aTynS5OYWw7uSm7i3ACiJw7mZaI59Vzawz6Bv\nnGWasjvWHOiqILgZ1k9Px8M1WPtjIi28RFfQxBsINMqxObSR4qe6FSVH04PF\nPtBNgq22s86O2L+Bg2adNuvBbbRCU6PO3OpaheLn39Nzss+6DkdqpT3vWW8C\nOmxFDgKoiE4Jg+Mn5C//4CWsmPlgCVskGIQrAr+Ym4As1iyL2GmdCH/FjuPE\ncXov6t8xzB/sfp/SbepVI7OtDJcYVAl1A3C7CxOCTAM8jChgxIwYpFQFAQVg\npeKhTmdUV/kP6KS3i3GzPWgafU1oR2/1usonhxnqjUtAKlpNPIvx2ZQ/+L89\nd4gzPTStuGn2C59Jb+r7H4HDDTpHxj8nvPd1sSvtzjsKousgMbCcTzyzEtqe\nft4o0v/VHph03Um4Bx/9Fv6+Ck70toVbvp0z+cMFbcOtrS1kF9pZECp9TgmL\nn6fH\r\n=VsIV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC2ZdtRE9Cffk/YAdURyDpb/kV+SgIABB5RGRmGkbQcEwIgJII5LQMXF4foriFvPmFnWyQt+99Vuvgg0qgBiIDjbpg="}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"_npmUser":{"name":"kitze","email":"kristijan.mkd@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_1.1.1_1546446030269_0.2218917126266291"},"_hasShrinkwrap":false},"1.1.2":{"name":"react-hanger","version":"1.1.2","description":"### Other projects: - 🏫 [React Academy](https://reactacademy.io) - Interactive React and GraphQL workshops - 💌 [Twizzy](https://twizzy.app) - A standalone app for Twitter DM - 💻 [Sizzy](https://sizzy.co) - A tool for testing responsive design on multip","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"https://github.com/kitze/react-hanger.git"},"main":"dist/index.js","module":"dist/index.es.js","jsnext:main":"dist/index.es.js","typings":"dist/index.d.ts","engines":{"node":">=8","npm":">=5"},"scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","postbuild":"cp src/index.d.ts dist/index.d.ts","start":"rollup -c -w","example":"cd ./example && yarn start","prepare":"yarn run build","predeploy":"cd example && yarn install && yarn run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"react":"^16.7.0-alpha.0","react-dom":"^16.7.0-alpha.0"},"devDependencies":{"babel-core":"^6.26.3","babel-eslint":"^8.2.5","babel-plugin-external-helpers":"^6.22.0","babel-preset-env":"^1.7.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","cross-env":"^5.1.4","eslint":"^5.0.1","eslint-config-standard":"^11.0.0","eslint-config-standard-react":"^6.0.0","eslint-plugin-import":"^2.13.0","eslint-plugin-node":"^7.0.1","eslint-plugin-promise":"^4.0.0","eslint-plugin-react":"^7.10.0","eslint-plugin-standard":"^3.1.0","gh-pages":"^1.2.0","react":"^16.7.0-alpha.0","react-dom":"^16.7.0-alpha.0","react-scripts":"^1.1.4","rollup":"^0.64.1","rollup-plugin-babel":"^3.0.7","rollup-plugin-commonjs":"^9.1.3","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-peer-deps-external":"^2.2.0","rollup-plugin-postcss":"^1.6.2","rollup-plugin-url":"^1.4.0"},"favoriteScripts":["example","start"],"licenseText":"MIT License\n\nCopyright (c) 2018 Kitze\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"react-hanger@1.1.2","dist":{"shasum":"6487ae9b125b7cea9dd0db52c1b1102733957a05","integrity":"sha512-TkVYaSsrFAE1k73zFl/gfuMa29Xmu2+I77Tw1T7ofFsxsbkZ257qVKpZBilBiR2smyM4Vk3hG0rfSaTcnTgWpw==","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-1.1.2.tgz","fileCount":10,"unpackedSize":37885,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcUqfNCRA9TVsSAnZWagAAkPEP/3ehyKoCafe/2YnkpBGF\nYXPjqqIZU9UBLeqWOTWpjry2ECv/BA89an6RlHhZ+c6LpIhdSAeRQz1JDH9R\nEwzr3VdxIlBdZpQBQRXItoPUBhhXkCwkYfpIUtXC7Qr7G/zst45cfgwmJBAe\nSRqvZI6ljgmhgbXtt4RiIoPk7DOvy/G0zP8cwwLoAagN1/KS7ogo1lIvQvf9\n+Ct64+PhZQtu3vnGXvBmlUnF84CnI/TeNO/PLe/U/h0E9oqkQOqtCiuSz5xj\nnmpyCmpUzqNV8KJKWQqgkwpL38og3hp0xyYnXljtH35HxmEwKE/5qfVPr9uf\ntLdu1xhqr6vipklo3mdWmJeMz/5LTymfifmAlN+6/8qro7GafAHWcJz3e/FI\ncU40ahNYFPraYuT6qVqneRnGEGUFK23N8+pWS/YNMrP5c/MJS3mN7KSk2Glt\n23fUrh8Lze9Z+dsZE8WImVBDLttRGM0ySMTafsnvTcS/nj/HXcXeZwhYkrni\n0G+5i2iSw3WX1GGfAPxPnd0hWQ3bspelW6uuQR7rg0kM2pp9BvuGMCaX3d9r\niTGo7BBp2eZTwxwDdVpwrDGAzlSi1kyNH9wRf8jqXnFfVvwjsibMQV+u7uqL\nVoTNW+AwxuuA6N2GdodWQQKHDu2dQqsjtOMJEViSw8sg2ETcs8iWPSOC6FC0\nWvMz\r\n=Sdwo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDlYRBSivzGPmfL0FRs1mJLi/dWRoYJWHIYiE+Q9jdGxAIhAP1lV3xWhdLOV8NNxAQDP2UKKCCpQ+sWXlj9LsUN97E8"}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"_npmUser":{"name":"kitze","email":"kristijan.mkd@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_1.1.2_1548920781215_0.48802395854512315"},"_hasShrinkwrap":false},"1.1.4":{"name":"react-hanger","version":"1.1.4","description":"### Other projects: - 🏫 [React Academy](https://reactacademy.io) - Interactive React and GraphQL workshops - 💌 [Twizzy](https://twizzy.app) - A standalone app for Twitter DM - 💻 [Sizzy](https://sizzy.co) - A tool for testing responsive design on multip","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"https://github.com/kitze/react-hanger.git"},"main":"dist/index.js","module":"dist/index.es.js","jsnext:main":"dist/index.es.js","typings":"dist/index.d.ts","engines":{"node":">=8","npm":">=5"},"scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","postbuild":"cp src/index.d.ts dist/index.d.ts","start":"rollup -c -w","example":"cd ./example && yarn start","prepare":"yarn run build","predeploy":"cd example && yarn install && yarn run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"react":"^16.8.0","react-dom":"^16.8.0"},"devDependencies":{"babel-core":"^6.26.3","babel-eslint":"^8.2.5","babel-plugin-external-helpers":"^6.22.0","babel-preset-env":"^1.7.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","cross-env":"^5.1.4","eslint":"^5.0.1","eslint-config-standard":"^11.0.0","eslint-config-standard-react":"^6.0.0","eslint-plugin-import":"^2.13.0","eslint-plugin-node":"^7.0.1","eslint-plugin-promise":"^4.0.0","eslint-plugin-react":"^7.10.0","eslint-plugin-standard":"^3.1.0","gh-pages":"^1.2.0","react":"^16.8.3","react-dom":"^16.8.3","react-scripts":"^1.1.4","rollup":"^0.64.1","rollup-plugin-babel":"^3.0.7","rollup-plugin-commonjs":"^9.1.3","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-peer-deps-external":"^2.2.0","rollup-plugin-postcss":"^1.6.2","rollup-plugin-url":"^1.4.0"},"favoriteScripts":["example","start"],"licenseText":"MIT License\n\nCopyright (c) 2018 Kitze\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"react-hanger@1.1.4","dist":{"shasum":"4017e692d011a518299dc156d9ed9644f85ff5cb","integrity":"sha512-qn3WhFT6b1SeK0FIEaDtVs0TTT/xyyIOXMIaqqwzxWRnrQERU3aDx9EETaOTm4MIp4zSZH6v/UKKBG1Wh3gBJg==","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-1.1.4.tgz","fileCount":10,"unpackedSize":37728,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJccEXXCRA9TVsSAnZWagAAIqYP/3v2/hKvdwywjutuOMTQ\nWMf0t6MTvkHMKC4iiqyru0G/ZMLs1JFBKlngC8DWJXpXXBMn7DzYWA3bbKiR\ngwpQIBXResvH8+O6Z4bY+5zQgQg6EGxNDOGZZonLBYfjsGcSC+fIxzuprly9\nTxF7vfKwe00fu2BV4v1IpA8d/3w45zmgmRUKCk/0ykpVbWeZtrANa/76hNJl\n3hk0+JDiFF1we1Lli0UjF5WiAfnJwTqFr0oRzYnHIVvw5CDzBLVP9KpLPcOD\nZ4IN0AzHV30mkVg94fr6VGqulax1HTu8jezvCub8aaotRveifu3obiCsstYw\n8s990jtgf+nIhgRMkGzsFdrtmhdGBNKgDSubaxPo4BVll4CSovReg+sMflGL\n7A5Ts/AAK8CcctiKwkaSiU7DOolG4tjO5mk4mkUdWUSGQFlCOzmaF5baCCSE\nC+nrEtKJHgiMTKEeeDYTcrOj6/asmJcqZVFZl5+cFfugDoFWewuGc2VoCovr\nINeA0aTQuBc4+2dHgFJIJO9qw33pdEsWpq294rLBZSUFDkqZ1aBUViKdtMVI\nGF6YWj1nBZFTDaNZnTFDm0NgjXbLM8SZjmZR5eOLdYoEjc+4dXghbyJwWLqG\nPVMZx8rdprS2rtuqCX7m73WtXAI8nuIMecsUTP22d1HU1YLTHtjsk/FLpBqp\nocFw\r\n=9uso\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEWusnRHCcdYmxo4CbSGkyUe9zQmpeMDodw7T/p+oSo/AiEAhFaWUu5f68/D0jeLcHSZXfYvhPbqYoO6WieIm261MDc="}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"_npmUser":{"name":"rip21","email":"puha212@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_1.1.4_1550861782937_0.05482116533851866"},"_hasShrinkwrap":false},"1.2.0":{"name":"react-hanger","version":"1.2.0","description":"### Other projects:","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"https://github.com/kitze/react-hanger.git"},"contributors":[{"name":"Andrii Los","email":"puha212@gmail.com","url":"https://github.com/RIP21"}],"main":"dist/index.js","module":"dist/index.es.js","jsnext:main":"dist/index.es.js","typings":"dist/index.d.ts","engines":{"node":">=8","npm":">=5"},"scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","generate-dts":"tsc -p tsconfig-dts.json","prebuild":"rimraf dist","build":"npm run generate-dts && rollup -c","start":"rollup -c -w","example":"cd ./example && yarn start","prepare":"yarn run build","predeploy":"cd example && yarn install && yarn run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"react":"^16.8.0","react-dom":"^16.8.0"},"devDependencies":{"@babel/core":"^7.4.3","@babel/plugin-syntax-typescript":"^7.3.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@types/jest":"^24.0.11","@types/react":"^16.8.13","cross-env":"^5.2.0","gh-pages":"^1.2.0","prettier":"1.16.4","react":"^16.8.6","react-dom":"^16.8.6","react-hooks-testing-library":"^0.4.0","react-testing-library":"^6.1.2","revolut-react-scripts":"^2.1.8-2","rimraf":"^2.6.3","rollup":"^1.9.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.3.4","rollup-plugin-node-resolve":"^4.2.1","rollup-plugin-peer-deps-external":"^2.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-url":"^2.2.0","typescript":"^3.4.2"},"resolutions":{"babel-jest":"24.5.0"},"favoriteScripts":["example","start"],"licenseText":"MIT License\n\nCopyright (c) 2018 Kitze\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"react-hanger@1.2.0","dist":{"shasum":"26d3ccdebc7bd561640de6239fb9250a9c4834cd","integrity":"sha512-YKMFa4wkWb8pvsxSX9F6atEpsvxfddbfyIv5TmReYs/0oWOZrGIYmVY95kQOX0bnsyy3xRSnjyv62+uZqzZrlQ==","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-1.2.0.tgz","fileCount":10,"unpackedSize":44463,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcq9N4CRA9TVsSAnZWagAASWMQAJ3GKsWqVC8xN/YEy8ds\neWkqzrEW0L2iMMmAd6vioAJw+OIMkUcHa/EvLV/IRCbyKQk/lYNlGCj6YiVC\n+Jf0ByB8plZk37zhMjaa2XIbMYBGBjNRf6g7D340CWhc8rz09v7mgkDb4vNX\nVmh8WUnCmSP00/9iajWVr/6ckLGzvLLJJcOPn3jg0u0ngy7ek2ZrVEuwKPRu\n+0jJYktQPNiLwHGEXPbJy4eUfWblUIVVFasUhGP3LZ2BIbHxJg9zhjNxmG12\nvhCWrcibD9eesj9TK2g4vLCKUqAcbziDxTD9miIvrwHlKIZMo+Bdd6NfgDA6\n6j7Js1xwVjRHBS2p/uK7b8xXI/hHD+7GJ42YohsqOWohNVmWMwuqBb1XaCeD\nscRaTKtl8MLegKwILPXnry6Zhqjq3496Q4mJijTnO1PX4BtSAajfTqoIFPIQ\nAbP9Bve4il7TKCaCudDT+j8NIfqW46sRKGlSxeVb9JUvZeZ4+Oe+NdvVOk3b\nHg5arJzWj0sEx7wjKOYTO9nQA+VuEAiE6teXdUawZIbX53pyT5CsUvfussKL\nZ263/p3PwHd2X59qx4gg7CrxrGivnZraZ5RdZPcPvY1R+zggPKdAzbQDv37T\n6jcdgcaYoiEttT7e1ZphEgxFUYJnAdp2Dpjq4lVo9rBlYNVuhlL8SXV4kFwo\ncBXp\r\n=zWgi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDm5aeiRwcZK5KpeYXp1FaFKKOuA4VDjwn17n3BAE42/wIgOWhNE3dkFRSuAJIgckjBgE0V6SMYQrp8KjOkCtfW2FE="}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"_npmUser":{"name":"rip21","email":"puha212@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_1.2.0_1554764663727_0.20205898981620063"},"_hasShrinkwrap":false},"2.0.0-beta.1":{"name":"react-hanger","version":"2.0.0-beta.1","description":"### Other projects:","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"contributors":[{"name":"Andrii Los","email":"puha212@gmail.com","url":"https://github.com/RIP21"}],"main":"main/index.js","module":"es6/index.es.js","jsnext:main":"es6/index.js","typings":"es6/index.d.ts","engines":{"node":">=8","npm":">=5"},"scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build:es6":"tsc -p tsconfig.json","build:require":"tsc -p tsconfig-require.json","prebuild":"rimraf lib && mkdir lib","build":"npm run build:es6 && npm run build:require","postbuild":"node copyPackageJsonAndReadme.js","release":"cd lib && npm run publish && cd..","example":"cd ./example && yarn start","predeploy":"cd example && yarn install && yarn run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"react":"^16.8.0","react-dom":"^16.8.0"},"devDependencies":{"@babel/core":"^7.4.3","@babel/plugin-syntax-typescript":"^7.3.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@types/jest":"^24.0.11","@types/react":"^16.8.13","cross-env":"^5.2.0","gh-pages":"^1.2.0","prettier":"1.16.4","react":"^16.8.6","react-dom":"^16.8.6","react-hooks-testing-library":"^0.4.0","react-testing-library":"^6.1.2","revolut-react-scripts":"^2.1.8-2","rimraf":"^2.6.3","rollup":"^1.9.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.3.4","rollup-plugin-node-resolve":"^4.2.1","rollup-plugin-peer-deps-external":"^2.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-url":"^2.2.0","typescript":"^3.4.2"},"resolutions":{"babel-jest":"24.5.0"},"favoriteScripts":["example","start"],"readme":"### 🙋‍♂️ Made by [@thekitze](https://twitter.com/thekitze)\n\n### Other projects:\n\n- 🏫 [React Academy](https://reactacademy.io) - Interactive React and GraphQL workshops\n- 💌 [Twizzy](https://twizzy.app) - A standalone app for Twitter DM\n- 💻 [Sizzy](https://sizzy.co) - A tool for testing responsive design on multiple devices at once\n- 🤖 [JSUI](https://github.com/kitze/JSUI) - A powerful UI toolkit for managing JavaScript apps\n\n---\n\n# react-hanger\n[![npm version](https://badge.fury.io/js/react-hanger.svg)](https://badge.fury.io/js/react-hanger)\n\n<img width=\"450\" src=\"https://i.imgur.com/JoBWJxS.png\"/>\n\n## Install\n\n```bash\nyarn add react-hanger\n```\n\n## Usage\n\n```jsx\nimport React, { Component } from \"react\";\n\nimport {\n  useInput,\n  useBoolean,\n  useNumber,\n  useArray,\n  useOnMount,\n  useOnUnmount\n} from \"react-hanger\";\n\nconst App = () => {\n  const newTodo = useInput(\"\");\n  const showCounter = useBoolean(true);\n  const limitedNumber = useNumber(3, { lowerLimit: 0, upperLimit: 5 });\n  const counter = useNumber(0);\n  const todos = useArray([\"hi there\", \"sup\", \"world\"]);\n\n  const rotatingNumber = useNumber(0, {\n    lowerLimit: 0,\n    upperLimit: 4,\n    loop: true\n  });\n\n  useOnMount(() => console.log(\"hello world\"));\n  useOnUnmount(() => console.log(\"goodbye world\"));\n\n  return (\n    <div>\n      <button onClick={showCounter.toggle}> toggle counter </button>\n      <button onClick={counter.increase}> increase </button>\n      {showCounter.value && <span> {counter.value} </span>}\n      <button onClick={counter.decrease}> decrease </button>\n      <button onClick={todos.clear}> clear todos </button>\n      <input type=\"text\" value={newTodo.value} onChange={newTodo.onChange} />\n    </div>\n  );\n};\n```\n### Example\n\n[Open in CodeSandbox](https://codesandbox.io/s/44m70xm70)\n\n### useStateful\n\nJust an alternative syntax to `useState`, because it doesn't need array destructuring.  \nIt returns an object with `value` and a `setValue` method.\n\n```typescript\ntype UseStateful<T = any> = {\n  value: T\n  setValue: React.Dispatch<React.SetStateAction<T>>\n}\n```\n\n```jsx\nconst username = useStateful(\"test\");\n\nusername.setValue(\"tom\");\nconsole.log(username.value);\n```\n\n### useOnMount\n\n```jsx\nconst App = () => {\n  useOnMount(() => console.log(\"hello world\"));\n  return <div> hello world </div>;\n};\n```\n\n### useOnUnmount\n\n```jsx\nconst App = () => {\n  useOnUnmount(() => console.log(\"goodbye world\"));\n  return <div> goodbye world </div>;\n};\n```\n\n### useLifecycleHooks\n\n```jsx\nconst App = () => {\n  useLifecycleHooks({\n    onMount: () => console.log(\"mounted!\"),\n    onUnmount: () => console.log(\"unmounted!\")\n  });\n\n  return <div> hello world </div>;\n};\n```\n\n### useBoolean\n\n```jsx\nconst [showCounter, actions] = useBoolean(true);\n```\n\nActions:\n\n- `toggle`\n- `setTrue`\n- `setFalse`\n\n### useNumber\n\n```jsx\nconst counter = useNumber(0);\nconst limitedNumber = useNumber(3, { upperLimit: 5, lowerLimit: 3 });\nconst rotatingNumber = useNumber(0, {\n  upperLimit: 5,\n  lowerLimit: 0,\n  loop: true\n});\n```\n\nActions:\n\nBoth `increase` and `decrease` take an optional `amount` argument which is 1 by default, and will override the `step` property if it's used in the options.\n\n- `increase(amount = 1)`\n- `decrease(amount = 1 )`\n\nOptions:\n\n- `lowerLimit`\n- `upperLimit`\n- `loop`\n- `step` - sets the increase/decrease amount of the number upfront, but it can still be overriden by `number.increase(3)` or `number.decrease(5)`\n\n### useInput\n\nThis one is unique, since it returns tuple as a first element, where first element is `value` and second is `hasValue`\nSecond element is `actions` as usual\n\n```typescript\ntype UseInputActions = {\n  setValue: UseStateful<string>['setValue'] // Look above\n  onChange: (e: React.SyntheticEvent) => void\n  clear: () => void\n}\ntype UseInput = [[string, boolean], UseInputActions]\n```\n\n```jsx\nconst [[newTodo], actions] = useInput(\"\");\n```\n\n```jsx\n<input value={newTodo} onChange={actions.onChange} />\n```\nActions:\n\n- `clear`\n- `onChange` - default native event.target.value handler\n\nProperties:\n\n- `hasValue` -\n\n### useBindToInput\n\nDesigned to be used in composition with `useInput`.\nFirst and second elements are the same as `useInput.\nThird are bindings to spread.\n\n```jsx\nconst [[newTodo], actions, { nativeBind, valueBind }] = useBindToInput(useInput(\"\"));\n```\n\n```jsx\n<input value={newTodo} onChange={actions.onChange} />\n<input {...nativeBind} />\n<Slider {...valueBind} />\n```\n\nActions:\n\n- `nativeBind` - binds the `value` and `onChange` props to an input that has `e.target.value`\n- `valueBind` - binds the `value` and `onChange` props to an input that's using only `value` in `onChange` (like most external components)\n\n### useArray\n\n```jsx\nconst [todos, actions] = useArray([]);\n```\n\nActions:\n\n- `add`\n- `clear`\n- `removeIndex`\n- `removeById` - if array consists of objects with some specific `id` that you pass\nall of them will be removed\n- `move` - moves item from position to position shifting other elements. \n```\n    So if input is [1, 2, 3, 4, 5]\n    \n    from  | to    | expected\n    3     | 0     | [4, 1, 2, 3, 5]\n    -1    | 0     | [5, 1, 2, 3, 4]\n    1     | -2    | [1, 3, 4, 2, 5]\n    -3    | -4    | [1, 3, 2, 4, 5]\n```\n\n### useMap\n\n```jsx\nconst [someMap, someMapActions] = useMap([[\"key\", \"value\"]]);\nconst [anotherMap, anotherMapActions] = useMap(new Map([[\"key\", \"value\"]]));\n```\n\nActions:\n\n- `set`\n- `delete`\n- `clear`\n- `initialize` - applies tuples or map instances\n- `setValue`\n \n\n## useSetState\n\n```jsx\nconst [state, setState] = useSetState({ loading: false });\nsetState({ loading: true, data: [1, 2, 3] });\n```\n\nActions:\n\n- `setState(value)` - will merge the `value` with the current `state` (like this.setState works in React)\n\nProperties:\n\n- `state` - the current state\n\n## usePrevious\n\nUse it to get the previous value of a prop or a state value.  \nIt's from the official [React Docs](https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state).  \nIt might come out of the box in the future.\n\n```jsx\nconst Counter = () => {\n  const [count, setCount] = useState(0);\n  const prevCount = usePrevious(count);\n  return (\n    <h1>\n      Now: {count}, before: {prevCount}\n    </h1>\n  );\n};\n```\n\n### Migration from v1 to v2\n\nAll value based hooks like `useBoolean`, `useNumber` etc. Are changed to \nbe using arrays, since it's more safe for reference equality, and also \nmakes it easier to use many `useSmth` without renaming `value` in destructuring.\n\nSo if you had \n```javascript\nconst { value: showHeader, ...showHeaderActions } = useBoolean(true)\nconst { value: showFooter, ...setShowFooterActions } = useBoolean(true)\n```\nIt will become\n```javascript\nconst [showHeader, showHeaderActions] = useBoolean(true)\nconst [showFooter, showFooterActions] = useBoolean(true)\n```\n\nNote that despite this code seems to be looking the same, it's not. Cause `showHeaderActions` in v1 will result\nin new object reference every rerender. While in v2 actions are memoized using `useMemo` and their reference will not\nchange.\nIt enables us passing `actions` down the props without useless re-renders, also it prevents `useEffects` and\nother hooks from re-run/new reference if autofix of ESLint rule `react-hooks/extraneous-deps` will add them as dependencies.\n\n### useInput migration\nAlso big change to the `useInput`\nIf before you was not using `bind` and `bindToInput` from them, then using the same approach from above\nyou will get what you want. \nBut if you need bindings you need to compose `useInput` with `useBindToInput` like that:\nSo if you had\n```jsx\nconst { value, bindToInput, bind, onChange, hasValue } = useInput(\"\")\n\n<input value={value} onChange={onChange} />\n<input {...bindToInput} />\n{hasValue && <Slider {...bind} />}\n```\nIt will become\n```jsx\nconst [[value, hasValue], actions, { nativeBind, valueBind }] = useBindToInput(useInput(\"\"))\n\n<input value={value} onChange={actions.onChange} />\n<input {...nativeBind} />\n{hasValue && <Slider {...valueBind} />}\n```\n\nNote that first element in destructured array has tuple of `[value, hasValue]` since it's for values\nand second argument is for `action` e.g. only for functions.","readmeFilename":"README.md","bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@2.0.0-beta.1","_nodeVersion":"11.12.0","_npmVersion":"6.8.0","dist":{"integrity":"sha512-gwVA7qImwWT1MVu0koqva93hawAE8u6T984do3Wi/RruyKCNkAwH3BlQcymUCSao0XGOt9Rf6Y45Kln0pGvEeA==","shasum":"791f3d79b2ac083b2fac43c772c96429309e3a6f","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-2.0.0-beta.1.tgz","fileCount":2,"unpackedSize":10258,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcx3rfCRA9TVsSAnZWagAADB8QAJvC4/OF1q5BDqlrzRDq\nEiKFGNbQ57Xavuj3ZVvbewcxpKkM/AtYwFuFQjA8xxM4zMju6W/TUSq7HDFb\nn9CNQAqBsJDHFMP5f/2/aFQ9bj+6ZpJuOTDiUDFJIdimdsjH/jhbHTUhRkTh\nXPUH42CsqxuyaQ/l4cHvSqaMSd3MywNmRfXo/e+PoWQcfkbUDFIg34hjmlq3\nLS/dNTsG7tq2IDvQT92iUQIK2FX9VCRK6S7i92hn/N8bRWDZzGhmsmNVYBIG\nChj+4bUHyd41+yaM+UTt95CHsgWXfVSl4e0eULeKZ6LvprcMeC8ZW96lHHZB\njNuJn+VSHIWu+RkcYLNpqB/f4K+15VqbYfOSfsk1fRSbq+CEUeHe9Jpxvvlu\ncIBPYSw5vaX5VcaSl4p90eR54ymW+6A7KH8iSXOjd4jqJh9WMsPR+HD44bCa\n4V2Oz3gaO9MJI/jbov34XYYUHRw+4Fb2DiXR79Cr0Jg3ByhI1HAfhLXG01FC\nmkIcILju7XRg9sXpl4EYrIVQYSf1RJWCvh4wPh0oSg5YEmvpvKRcTQShL+6Y\n2YAILENzjcI/QQzGqvARAcwUSihs4ipfI9DnyGeLDR1ZrMwLO3wEsmhyrtHC\ncZ8etS5K+MuLnW7jvspKoOXVpJZ821eY7lBwJ1VtwgdukzXClfanG/phdCMB\nCzRw\r\n=LpLL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEej/nPv+IqV9oVaK6+j2PgPJQ5ComE2sOz03FRCcSqAAiEA6DwCMBSfh0uTRkc0O8SGhTKT+oGYTDyY3qWfNt0Gq+0="}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"_npmUser":{"name":"rip21","email":"puha212@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_2.0.0-beta.1_1556576990469_0.2018347274579031"},"_hasShrinkwrap":false},"2.0.0-beta.2":{"name":"react-hanger","version":"2.0.0-beta.2","description":"### Other projects:","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"contributors":[{"name":"Andrii Los","email":"puha212@gmail.com","url":"https://github.com/RIP21"}],"main":"index.js","module":"es6/index.js","jsnext:main":"es6/index.js","typings":"index.d.ts","engines":{"node":">=8","npm":">=5"},"scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build:es6":"tsc -p tsconfig.json","build:require":"tsc -p tsconfig-require.json","prebuild":"rimraf lib && mkdir lib","build":"npm run build:es6 && npm run build:require","postbuild":"node copyPackageJsonAndReadme.js","release":"cd lib && npm run publish && cd..","example":"cd ./example && yarn start","predeploy":"cd example && yarn install && yarn run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"react":"^16.8.0","react-dom":"^16.8.0"},"devDependencies":{"@babel/core":"^7.4.3","@babel/plugin-syntax-typescript":"^7.3.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@types/jest":"^24.0.11","@types/react":"^16.8.13","cross-env":"^5.2.0","gh-pages":"^1.2.0","prettier":"1.16.4","react":"^16.8.6","react-dom":"^16.8.6","react-hooks-testing-library":"^0.4.0","react-testing-library":"^6.1.2","revolut-react-scripts":"^2.1.8-2","rimraf":"^2.6.3","rollup":"^1.9.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.3.4","rollup-plugin-node-resolve":"^4.2.1","rollup-plugin-peer-deps-external":"^2.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-url":"^2.2.0","typescript":"^3.4.2"},"resolutions":{"babel-jest":"24.5.0"},"favoriteScripts":["example","start"],"readme":"### 🙋‍♂️ Made by [@thekitze](https://twitter.com/thekitze)\n\n### Other projects:\n\n- 🏫 [React Academy](https://reactacademy.io) - Interactive React and GraphQL workshops\n- 💌 [Twizzy](https://twizzy.app) - A standalone app for Twitter DM\n- 💻 [Sizzy](https://sizzy.co) - A tool for testing responsive design on multiple devices at once\n- 🤖 [JSUI](https://github.com/kitze/JSUI) - A powerful UI toolkit for managing JavaScript apps\n\n---\n\n# react-hanger\n[![npm version](https://badge.fury.io/js/react-hanger.svg)](https://badge.fury.io/js/react-hanger)\n\n<img width=\"450\" src=\"https://i.imgur.com/JoBWJxS.png\"/>\n\n## Install\n\n```bash\nyarn add react-hanger\n```\n\n## Usage\n\n```jsx\nimport React, { Component } from \"react\";\n\nimport {\n  useInput,\n  useBoolean,\n  useNumber,\n  useArray,\n  useOnMount,\n  useOnUnmount\n} from \"react-hanger\";\n\nconst App = () => {\n  const newTodo = useInput(\"\");\n  const showCounter = useBoolean(true);\n  const limitedNumber = useNumber(3, { lowerLimit: 0, upperLimit: 5 });\n  const counter = useNumber(0);\n  const todos = useArray([\"hi there\", \"sup\", \"world\"]);\n\n  const rotatingNumber = useNumber(0, {\n    lowerLimit: 0,\n    upperLimit: 4,\n    loop: true\n  });\n\n  useOnMount(() => console.log(\"hello world\"));\n  useOnUnmount(() => console.log(\"goodbye world\"));\n\n  return (\n    <div>\n      <button onClick={showCounter.toggle}> toggle counter </button>\n      <button onClick={counter.increase}> increase </button>\n      {showCounter.value && <span> {counter.value} </span>}\n      <button onClick={counter.decrease}> decrease </button>\n      <button onClick={todos.clear}> clear todos </button>\n      <input type=\"text\" value={newTodo.value} onChange={newTodo.onChange} />\n    </div>\n  );\n};\n```\n### Example\n\n[Open in CodeSandbox](https://codesandbox.io/s/44m70xm70)\n\n### useStateful\n\nJust an alternative syntax to `useState`, because it doesn't need array destructuring.  \nIt returns an object with `value` and a `setValue` method.\n\n```typescript\ntype UseStateful<T = any> = {\n  value: T\n  setValue: React.Dispatch<React.SetStateAction<T>>\n}\n```\n\n```jsx\nconst username = useStateful(\"test\");\n\nusername.setValue(\"tom\");\nconsole.log(username.value);\n```\n\n### useOnMount\n\n```jsx\nconst App = () => {\n  useOnMount(() => console.log(\"hello world\"));\n  return <div> hello world </div>;\n};\n```\n\n### useOnUnmount\n\n```jsx\nconst App = () => {\n  useOnUnmount(() => console.log(\"goodbye world\"));\n  return <div> goodbye world </div>;\n};\n```\n\n### useLifecycleHooks\n\n```jsx\nconst App = () => {\n  useLifecycleHooks({\n    onMount: () => console.log(\"mounted!\"),\n    onUnmount: () => console.log(\"unmounted!\")\n  });\n\n  return <div> hello world </div>;\n};\n```\n\n### useBoolean\n\n```jsx\nconst [showCounter, actions] = useBoolean(true);\n```\n\nActions:\n\n- `toggle`\n- `setTrue`\n- `setFalse`\n\n### useNumber\n\n```jsx\nconst counter = useNumber(0);\nconst limitedNumber = useNumber(3, { upperLimit: 5, lowerLimit: 3 });\nconst rotatingNumber = useNumber(0, {\n  upperLimit: 5,\n  lowerLimit: 0,\n  loop: true\n});\n```\n\nActions:\n\nBoth `increase` and `decrease` take an optional `amount` argument which is 1 by default, and will override the `step` property if it's used in the options.\n\n- `increase(amount = 1)`\n- `decrease(amount = 1 )`\n\nOptions:\n\n- `lowerLimit`\n- `upperLimit`\n- `loop`\n- `step` - sets the increase/decrease amount of the number upfront, but it can still be overriden by `number.increase(3)` or `number.decrease(5)`\n\n### useInput\n\nThis one is unique, since it returns tuple as a first element, where first element is `value` and second is `hasValue`\nSecond element is `actions` as usual\n\n```typescript\ntype UseInputActions = {\n  setValue: UseStateful<string>['setValue'] // Look above\n  onChange: (e: React.SyntheticEvent) => void\n  clear: () => void\n}\ntype UseInput = [[string, boolean], UseInputActions]\n```\n\n```jsx\nconst [[newTodo], actions] = useInput(\"\");\n```\n\n```jsx\n<input value={newTodo} onChange={actions.onChange} />\n```\nActions:\n\n- `clear`\n- `onChange` - default native event.target.value handler\n\nProperties:\n\n- `hasValue` -\n\n### useBindToInput\n\nDesigned to be used in composition with `useInput`.\nFirst and second elements are the same as `useInput.\nThird are bindings to spread.\n\n```jsx\nconst [[newTodo], actions, { nativeBind, valueBind }] = useBindToInput(useInput(\"\"));\n```\n\n```jsx\n<input value={newTodo} onChange={actions.onChange} />\n<input {...nativeBind} />\n<Slider {...valueBind} />\n```\n\nActions:\n\n- `nativeBind` - binds the `value` and `onChange` props to an input that has `e.target.value`\n- `valueBind` - binds the `value` and `onChange` props to an input that's using only `value` in `onChange` (like most external components)\n\n### useArray\n\n```jsx\nconst [todos, actions] = useArray([]);\n```\n\nActions:\n\n- `add`\n- `clear`\n- `removeIndex`\n- `removeById` - if array consists of objects with some specific `id` that you pass\nall of them will be removed\n- `move` - moves item from position to position shifting other elements. \n```\n    So if input is [1, 2, 3, 4, 5]\n    \n    from  | to    | expected\n    3     | 0     | [4, 1, 2, 3, 5]\n    -1    | 0     | [5, 1, 2, 3, 4]\n    1     | -2    | [1, 3, 4, 2, 5]\n    -3    | -4    | [1, 3, 2, 4, 5]\n```\n\n### useMap\n\n```jsx\nconst [someMap, someMapActions] = useMap([[\"key\", \"value\"]]);\nconst [anotherMap, anotherMapActions] = useMap(new Map([[\"key\", \"value\"]]));\n```\n\nActions:\n\n- `set`\n- `delete`\n- `clear`\n- `initialize` - applies tuples or map instances\n- `setValue`\n \n\n## useSetState\n\n```jsx\nconst [state, setState] = useSetState({ loading: false });\nsetState({ loading: true, data: [1, 2, 3] });\n```\n\nActions:\n\n- `setState(value)` - will merge the `value` with the current `state` (like this.setState works in React)\n\nProperties:\n\n- `state` - the current state\n\n## usePrevious\n\nUse it to get the previous value of a prop or a state value.  \nIt's from the official [React Docs](https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state).  \nIt might come out of the box in the future.\n\n```jsx\nconst Counter = () => {\n  const [count, setCount] = useState(0);\n  const prevCount = usePrevious(count);\n  return (\n    <h1>\n      Now: {count}, before: {prevCount}\n    </h1>\n  );\n};\n```\n\n### Migration from v1 to v2\n\nAll value based hooks like `useBoolean`, `useNumber` etc. Are changed to \nbe using arrays, since it's more safe for reference equality, and also \nmakes it easier to use many `useSmth` without renaming `value` in destructuring.\n\nSo if you had \n```javascript\nconst { value: showHeader, ...showHeaderActions } = useBoolean(true)\nconst { value: showFooter, ...setShowFooterActions } = useBoolean(true)\n```\nIt will become\n```javascript\nconst [showHeader, showHeaderActions] = useBoolean(true)\nconst [showFooter, showFooterActions] = useBoolean(true)\n```\n\nNote that despite this code seems to be looking the same, it's not. Cause `showHeaderActions` in v1 will result\nin new object reference every rerender. While in v2 actions are memoized using `useMemo` and their reference will not\nchange.\nIt enables us passing `actions` down the props without useless re-renders, also it prevents `useEffects` and\nother hooks from re-run/new reference if autofix of ESLint rule `react-hooks/extraneous-deps` will add them as dependencies.\n\n### useInput migration\nAlso big change to the `useInput`\nIf before you was not using `bind` and `bindToInput` from them, then using the same approach from above\nyou will get what you want. \nBut if you need bindings you need to compose `useInput` with `useBindToInput` like that:\nSo if you had\n```jsx\nconst { value, bindToInput, bind, onChange, hasValue } = useInput(\"\")\n\n<input value={value} onChange={onChange} />\n<input {...bindToInput} />\n{hasValue && <Slider {...bind} />}\n```\nIt will become\n```jsx\nconst [[value, hasValue], actions, { nativeBind, valueBind }] = useBindToInput(useInput(\"\"))\n\n<input value={value} onChange={actions.onChange} />\n<input {...nativeBind} />\n{hasValue && <Slider {...valueBind} />}\n```\n\nNote that first element in destructured array has tuple of `[value, hasValue]` since it's for values\nand second argument is for `action` e.g. only for functions.","readmeFilename":"README.md","bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@2.0.0-beta.2","_nodeVersion":"11.12.0","_npmVersion":"6.8.0","dist":{"integrity":"sha512-kifnisTRV1B/lIiGMvhN+2OH/kzqr4xUmI+rfstnTWydTTorADQ1Mz0lp8DIKCcNfR/l+LNi0RU3mrhjubi1Tw==","shasum":"fda21788b8a8fa2b4a9027a86ab9484f9975030c","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-2.0.0-beta.2.tgz","fileCount":110,"unpackedSize":83129,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcx3voCRA9TVsSAnZWagAAkygP/0GubERDpY38aLpDo3mT\npHYEumTGmy2ujzSet3oI8Ba4uMbgE8QJei9hKvlOxPRUCL+Ql/cg4zB3dNyu\nwYCqjQ+D++wXREYrdq9b+7jZhlfVmstephn4XBH1Zr0WvsTRTXZS0PIRFv20\nktttZofWcTpoclAVMMDPNeC3s9WD11Id5gntGFCp8cbmsE10s9m9AUMvbHaw\nLYm5K8bG7A/kTdo+xyXbKBMnINrkg5LYQzu/eVIuTBWLjVLmt114QJxfXseT\n4FHTsnjjjql1vTmQJkiW31tNf2lQhZ8eUA9uFdvL+0CfEblA8pq3ORwG31pp\njjmq6oN7RqVD1wcLmTy/kEVJlLp66X7MF822JBYitJp8C5iB5oFhXot1CT9O\n54oIK6nqROge6WRXzmKyhfkwBJszrf/tCSQLP+vc3bXRKpTOW/Ut+iaDYpkF\n9uu3bZ0suco+xRIAjnQ/nEls+qLWXdYoA/HxlNC0TbovipU2jnm05D5Gd+VH\npe6QcCHiPdC3Qm1rJIo+uHHtDxN9CzoW0k88qAiJoRDpiSmkHf8//hM+hRD/\npJiw+VeSRnd3nBX3H4r1Fm4zkQ3EOQyqzE4ymwArCKxl2PIV0hvXYcNjRzkx\nJCLQJyBTWM2RBuXqMTJgPi8kEIaF3iIeZ6dHClYy7vsQ+rIMem8N9Q62H7as\n96Rf\r\n=UFKo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCzmfe6EAPEez0da6msVI2/xKAt5LZ8SYEgTAdHbKcRAQIhANckZahs43gJFR4oXJaDGLVp3cBYWlqPiV+qTuIiiYx6"}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"_npmUser":{"name":"rip21","email":"puha212@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_2.0.0-beta.2_1556577255517_0.7458626823481063"},"_hasShrinkwrap":false},"2.0.0-beta.3":{"name":"react-hanger","version":"2.0.0-beta.3","description":"### Other projects:","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"contributors":[{"name":"Andrii Los","email":"puha212@gmail.com","url":"https://github.com/RIP21"}],"main":"index.js","module":"es6/index.js","jsnext:main":"es6/index.js","typings":"index.d.ts","engines":{"node":">=8","npm":">=5"},"scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build:es6":"tsc -p tsconfig.json","build:require":"tsc -p tsconfig-require.json","prebuild":"rimraf lib && mkdir lib","build":"npm run build:es6 && npm run build:require","postbuild":"node copyPackageJsonAndReadme.js","release":"cd lib && npm run publish && cd..","example":"cd ./example && yarn start","predeploy":"cd example && yarn install && yarn run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"react":"^16.8.0","react-dom":"^16.8.0"},"devDependencies":{"@babel/core":"^7.4.3","@babel/plugin-syntax-typescript":"^7.3.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@types/jest":"^24.0.11","@types/react":"^16.8.13","cross-env":"^5.2.0","gh-pages":"^1.2.0","prettier":"1.16.4","react":"^16.8.6","react-dom":"^16.8.6","react-hooks-testing-library":"^0.4.0","react-testing-library":"^6.1.2","revolut-react-scripts":"^2.1.8-2","rimraf":"^2.6.3","rollup":"^1.9.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.3.4","rollup-plugin-node-resolve":"^4.2.1","rollup-plugin-peer-deps-external":"^2.2.0","rollup-plugin-postcss":"^2.0.3","rollup-plugin-url":"^2.2.0","typescript":"^3.4.2"},"resolutions":{"babel-jest":"24.5.0"},"favoriteScripts":["example","start"],"readme":"### 🙋‍♂️ Made by [@thekitze](https://twitter.com/thekitze)\n\n### Other projects:\n\n- 🏫 [React Academy](https://reactacademy.io) - Interactive React and GraphQL workshops\n- 💌 [Twizzy](https://twizzy.app) - A standalone app for Twitter DM\n- 💻 [Sizzy](https://sizzy.co) - A tool for testing responsive design on multiple devices at once\n- 🤖 [JSUI](https://github.com/kitze/JSUI) - A powerful UI toolkit for managing JavaScript apps\n\n---\n\n# react-hanger\n[![npm version](https://badge.fury.io/js/react-hanger.svg)](https://badge.fury.io/js/react-hanger)\n\n<img width=\"450\" src=\"https://i.imgur.com/JoBWJxS.png\"/>\n\n## Install\n\n```bash\nyarn add react-hanger\n```\n\n## Usage\n\n```jsx\nimport React, { Component } from \"react\";\n\nimport {\n  useInput,\n  useBoolean,\n  useNumber,\n  useArray,\n  useOnMount,\n  useOnUnmount\n} from \"react-hanger\";\n\nconst App = () => {\n  const newTodo = useInput(\"\");\n  const showCounter = useBoolean(true);\n  const limitedNumber = useNumber(3, { lowerLimit: 0, upperLimit: 5 });\n  const counter = useNumber(0);\n  const todos = useArray([\"hi there\", \"sup\", \"world\"]);\n\n  const rotatingNumber = useNumber(0, {\n    lowerLimit: 0,\n    upperLimit: 4,\n    loop: true\n  });\n\n  useOnMount(() => console.log(\"hello world\"));\n  useOnUnmount(() => console.log(\"goodbye world\"));\n\n  return (\n    <div>\n      <button onClick={showCounter.toggle}> toggle counter </button>\n      <button onClick={counter.increase}> increase </button>\n      {showCounter.value && <span> {counter.value} </span>}\n      <button onClick={counter.decrease}> decrease </button>\n      <button onClick={todos.clear}> clear todos </button>\n      <input type=\"text\" value={newTodo.value} onChange={newTodo.onChange} />\n    </div>\n  );\n};\n```\n### Example\n\n[Open in CodeSandbox](https://codesandbox.io/s/44m70xm70)\n\n### useStateful\n\nJust an alternative syntax to `useState`, because it doesn't need array destructuring.  \nIt returns an object with `value` and a `setValue` method.\n\n```typescript\ntype UseStateful<T = any> = {\n  value: T\n  setValue: React.Dispatch<React.SetStateAction<T>>\n}\n```\n\n```jsx\nconst username = useStateful(\"test\");\n\nusername.setValue(\"tom\");\nconsole.log(username.value);\n```\n\n### useOnMount\n\n```jsx\nconst App = () => {\n  useOnMount(() => console.log(\"hello world\"));\n  return <div> hello world </div>;\n};\n```\n\n### useOnUnmount\n\n```jsx\nconst App = () => {\n  useOnUnmount(() => console.log(\"goodbye world\"));\n  return <div> goodbye world </div>;\n};\n```\n\n### useLifecycleHooks\n\n```jsx\nconst App = () => {\n  useLifecycleHooks({\n    onMount: () => console.log(\"mounted!\"),\n    onUnmount: () => console.log(\"unmounted!\")\n  });\n\n  return <div> hello world </div>;\n};\n```\n\n### useBoolean\n\n```jsx\nconst [showCounter, actions] = useBoolean(true);\n```\n\nActions:\n\n- `toggle`\n- `setTrue`\n- `setFalse`\n\n### useNumber\n\n```jsx\nconst counter = useNumber(0);\nconst limitedNumber = useNumber(3, { upperLimit: 5, lowerLimit: 3 });\nconst rotatingNumber = useNumber(0, {\n  upperLimit: 5,\n  lowerLimit: 0,\n  loop: true\n});\n```\n\nActions:\n\nBoth `increase` and `decrease` take an optional `amount` argument which is 1 by default, and will override the `step` property if it's used in the options.\n\n- `increase(amount = 1)`\n- `decrease(amount = 1 )`\n\nOptions:\n\n- `lowerLimit`\n- `upperLimit`\n- `loop`\n- `step` - sets the increase/decrease amount of the number upfront, but it can still be overriden by `number.increase(3)` or `number.decrease(5)`\n\n### useInput\n\nThis one is unique, since it returns tuple as a first element, where first element is `value` and second is `hasValue`\nSecond element is `actions` as usual\n\n```typescript\ntype UseInputActions = {\n  setValue: UseStateful<string>['setValue'] // Look above\n  onChange: (e: React.SyntheticEvent) => void\n  clear: () => void\n}\ntype UseInput = [[string, boolean], UseInputActions]\n```\n\n```jsx\nconst [[newTodo], actions] = useInput(\"\");\n```\n\n```jsx\n<input value={newTodo} onChange={actions.onChange} />\n```\nActions:\n\n- `clear`\n- `onChange` - default native event.target.value handler\n\nProperties:\n\n- `hasValue` -\n\n### useBindToInput\n\nDesigned to be used in composition with `useInput`.\nFirst and second elements are the same as `useInput.\nThird are bindings to spread.\n\n```jsx\nconst [[newTodo], actions, { nativeBind, valueBind }] = useBindToInput(useInput(\"\"));\n```\n\n```jsx\n<input value={newTodo} onChange={actions.onChange} />\n<input {...nativeBind} />\n<Slider {...valueBind} />\n```\n\nActions:\n\n- `nativeBind` - binds the `value` and `onChange` props to an input that has `e.target.value`\n- `valueBind` - binds the `value` and `onChange` props to an input that's using only `value` in `onChange` (like most external components)\n\n### useArray\n\n```jsx\nconst [todos, actions] = useArray([]);\n```\n\nActions:\n\n- `add`\n- `clear`\n- `removeIndex`\n- `removeById` - if array consists of objects with some specific `id` that you pass\nall of them will be removed\n- `move` - moves item from position to position shifting other elements. \n```\n    So if input is [1, 2, 3, 4, 5]\n    \n    from  | to    | expected\n    3     | 0     | [4, 1, 2, 3, 5]\n    -1    | 0     | [5, 1, 2, 3, 4]\n    1     | -2    | [1, 3, 4, 2, 5]\n    -3    | -4    | [1, 3, 2, 4, 5]\n```\n\n### useMap\n\n```jsx\nconst [someMap, someMapActions] = useMap([[\"key\", \"value\"]]);\nconst [anotherMap, anotherMapActions] = useMap(new Map([[\"key\", \"value\"]]));\n```\n\nActions:\n\n- `set`\n- `delete`\n- `clear`\n- `initialize` - applies tuples or map instances\n- `setValue`\n \n\n## useSetState\n\n```jsx\nconst [state, setState] = useSetState({ loading: false });\nsetState({ loading: true, data: [1, 2, 3] });\n```\n\nActions:\n\n- `setState(value)` - will merge the `value` with the current `state` (like this.setState works in React)\n\nProperties:\n\n- `state` - the current state\n\n## usePrevious\n\nUse it to get the previous value of a prop or a state value.  \nIt's from the official [React Docs](https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state).  \nIt might come out of the box in the future.\n\n```jsx\nconst Counter = () => {\n  const [count, setCount] = useState(0);\n  const prevCount = usePrevious(count);\n  return (\n    <h1>\n      Now: {count}, before: {prevCount}\n    </h1>\n  );\n};\n```\n\n### Migration from v1 to v2\n\nAll value based hooks like `useBoolean`, `useNumber` etc. Are changed to \nbe using arrays, since it's more safe for reference equality, and also \nmakes it easier to use many `useSmth` without renaming `value` in destructuring.\n\nSo if you had \n```javascript\nconst { value: showHeader, ...showHeaderActions } = useBoolean(true)\nconst { value: showFooter, ...setShowFooterActions } = useBoolean(true)\n```\nIt will become\n```javascript\nconst [showHeader, showHeaderActions] = useBoolean(true)\nconst [showFooter, showFooterActions] = useBoolean(true)\n```\n\nNote that despite this code seems to be looking the same, it's not. Cause `showHeaderActions` in v1 will result\nin new object reference every rerender. While in v2 actions are memoized using `useMemo` and their reference will not\nchange.\nIt enables us passing `actions` down the props without useless re-renders, also it prevents `useEffects` and\nother hooks from re-run/new reference if autofix of ESLint rule `react-hooks/extraneous-deps` will add them as dependencies.\n\n### useInput migration\nAlso big change to the `useInput`\nIf before you was not using `bind` and `bindToInput` from them, then using the same approach from above\nyou will get what you want. \nBut if you need bindings you need to compose `useInput` with `useBindToInput` like that:\nSo if you had\n```jsx\nconst { value, bindToInput, bind, onChange, hasValue } = useInput(\"\")\n\n<input value={value} onChange={onChange} />\n<input {...bindToInput} />\n{hasValue && <Slider {...bind} />}\n```\nIt will become\n```jsx\nconst [[value, hasValue], actions, { nativeBind, valueBind }] = useBindToInput(useInput(\"\"))\n\n<input value={value} onChange={actions.onChange} />\n<input {...nativeBind} />\n{hasValue && <Slider {...valueBind} />}\n```\n\nNote that first element in destructured array has tuple of `[value, hasValue]` since it's for values\nand second argument is for `action` e.g. only for functions.","readmeFilename":"README.md","bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@2.0.0-beta.3","_nodeVersion":"11.12.0","_npmVersion":"6.8.0","dist":{"integrity":"sha512-6M6kSh5AN2S3W8c81oDO8nRE/NoAHrGRJp5s+ESLNARNNU8UPg7ho9Bjmu+wCbm9MnYSXl8xEekVNaY/YUN8ag==","shasum":"637737de5d78d02b5018c9acea28267291a9904d","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-2.0.0-beta.3.tgz","fileCount":110,"unpackedSize":83465,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcx4EcCRA9TVsSAnZWagAAuKwP/2og7drSCPvJN2zM09nL\nS6d9Wwrv6E74TRahMYwnPBFlrkXUdBHZzcK8TmOemv3k91/DHHLwLghgfO1L\nx9a7kz52/vkyTVNTPSqgy1jeZ3tZJDPvXAeREkwJ1LnEcqz691XbGSykOYNG\nXKnSxQBh3QD6JVNWusQ6igJnkAxSKT8VgZ+sB8XqJ97FNOiyzKmv8FYlY31b\ne4ACJ20jU40/Ub90XGD4mnSZHLSHFobVXuuj9VPcevE6CTs4mUtNtq8nKniY\nZzMzsyxcoy8g4J9gagrwQ3ceBbyvTbA3Wt8gIp2uMoFhjVlbUrfUOLYtk44R\nDJKYUc7y/FrxU4r6o9XEmLj38A9ubRpm+PfcMPlr28S6gNJLOfDIK8OCZ4qN\nANACycW4ltNT33SKL1u/K4m0fb6tVBsvRLk8LKKbxsIk9hRdY2vpL312n4LD\nhh7/mPgW49XkvJgF044gSJma45as1ezOXTUEzXkNNJus+5OQqekSqzUaU7FC\nvNdZvdUNzQxIL2w/PhDAvzRTou8gTWQIHXtAmqUPBNYdFIRwS3BXtnRZVUuA\n4s993Ns3sv0Nr+NAG8GmMfz/wlLimxlUo+n7izSsL4BlKG6VTDVV6BEy6XKd\nUmYt3w5E7muTUuO1TC2I8bKg7fD7s6yndtSBIuEy5+8Y1t/wHANktAdpGxyI\nkNfU\r\n=rzvO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQxx6R8hm/o5Hni5QE17mpAiyHGy7NMY+/ezT9iYcJ3gIhALqvjk5NEEy2weaztRqBg1xhgvrfX12kP9eoC9amKqch"}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"_npmUser":{"name":"rip21","email":"puha212@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_2.0.0-beta.3_1556578587474_0.5652805174565945"},"_hasShrinkwrap":false},"2.0.0-beta.4":{"name":"react-hanger","version":"2.0.0-beta.4","description":"### Other projects:","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"contributors":[{"name":"Andrii Los","email":"puha212@gmail.com","url":"https://github.com/RIP21"}],"main":"index.js","module":"es6/index.js","jsnext:main":"es6/index.js","typings":"index.d.ts","engines":{"node":">=8","npm":">=5"},"scripts":{"test":"jest src","test:watch":"npm run test -- --watch","build:es6":"tsc -p tsconfig.json","build:require":"tsc -p tsconfig-require.json","prebuild":"rimraf lib && mkdir lib","build":"npm run build:es6 && npm run build:require","postbuild":"node copyPackageJsonAndReadme.js","prerelease":"build","release":"npm publish lib","release:beta":"npm publish lib --tag beta"},"peerDependencies":{"react":"^16.8.0","react-dom":"^16.8.0"},"devDependencies":{"@types/jest":"^24.0.11","@types/react":"^16.8.13","cross-env":"^5.2.0","gh-pages":"^1.2.0","react":"^16.8.6","react-dom":"^16.8.6","react-hooks-testing-library":"^0.4.0","react-testing-library":"^6.1.2","rimraf":"^2.6.3","typescript":"^3.4.2","jest":"^24.5.0","ts-jest":"^24.0.2","babel-eslint":"10.0.1","@typescript-eslint/parser":"1.5.0","@typescript-eslint/eslint-plugin":"1.5.0","eslint-plugin-react-hooks":"1.5.1","eslint":"5.16.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"4.1.0","eslint-plugin-jest":"22.3.2","eslint-plugin-prettier":"3.0.1","eslint-plugin-flowtype":"2.50.3","eslint-plugin-import":"2.16.0","eslint-plugin-jsx-a11y":"6.2.1","eslint-plugin-react":"7.12.4","eslint-config-react-app":"3.0.8","eslint-config-revolut-react":"0.0.22","prettier":"1.16.4"},"favoriteScripts":["test:watch"],"readme":"### 🙋‍♂️ Made by [@thekitze](https://twitter.com/thekitze)\n\n### Other projects:\n\n- 🏫 [React Academy](https://reactacademy.io) - Interactive React and GraphQL workshops\n- 💌 [Twizzy](https://twizzy.app) - A standalone app for Twitter DM\n- 💻 [Sizzy](https://sizzy.co) - A tool for testing responsive design on multiple devices at once\n- 🤖 [JSUI](https://github.com/kitze/JSUI) - A powerful UI toolkit for managing JavaScript apps\n\n---\n\n# react-hanger\n[![npm version](https://badge.fury.io/js/react-hanger.svg)](https://badge.fury.io/js/react-hanger)\n\n<img width=\"450\" src=\"https://i.imgur.com/JoBWJxS.png\"/>\n\n## Install\n\n```bash\nyarn add react-hanger\n```\n\n## Usage\n\n```jsx\nimport React, { Component } from \"react\";\n\nimport {\n  useInput,\n  useBoolean,\n  useNumber,\n  useArray,\n  useOnMount,\n  useOnUnmount\n} from \"react-hanger\";\n\nconst App = () => {\n  const newTodo = useInput(\"\");\n  const showCounter = useBoolean(true);\n  const limitedNumber = useNumber(3, { lowerLimit: 0, upperLimit: 5 });\n  const counter = useNumber(0);\n  const todos = useArray([\"hi there\", \"sup\", \"world\"]);\n\n  const rotatingNumber = useNumber(0, {\n    lowerLimit: 0,\n    upperLimit: 4,\n    loop: true\n  });\n\n  useOnMount(() => console.log(\"hello world\"));\n  useOnUnmount(() => console.log(\"goodbye world\"));\n\n  return (\n    <div>\n      <button onClick={showCounter.toggle}> toggle counter </button>\n      <button onClick={counter.increase}> increase </button>\n      {showCounter.value && <span> {counter.value} </span>}\n      <button onClick={counter.decrease}> decrease </button>\n      <button onClick={todos.clear}> clear todos </button>\n      <input type=\"text\" value={newTodo.value} onChange={newTodo.onChange} />\n    </div>\n  );\n};\n```\n### Example\n\n[Open in CodeSandbox](https://codesandbox.io/s/44m70xm70)\n\n### useStateful\n\nJust an alternative syntax to `useState`, because it doesn't need array destructuring.  \nIt returns an object with `value` and a `setValue` method.\n\n```typescript\ntype UseStateful<T = any> = {\n  value: T\n  setValue: React.Dispatch<React.SetStateAction<T>>\n}\n```\n\n```jsx\nconst username = useStateful(\"test\");\n\nusername.setValue(\"tom\");\nconsole.log(username.value);\n```\n\n### useOnMount\n\n```jsx\nconst App = () => {\n  useOnMount(() => console.log(\"hello world\"));\n  return <div> hello world </div>;\n};\n```\n\n### useOnUnmount\n\n```jsx\nconst App = () => {\n  useOnUnmount(() => console.log(\"goodbye world\"));\n  return <div> goodbye world </div>;\n};\n```\n\n### useLifecycleHooks\n\n```jsx\nconst App = () => {\n  useLifecycleHooks({\n    onMount: () => console.log(\"mounted!\"),\n    onUnmount: () => console.log(\"unmounted!\")\n  });\n\n  return <div> hello world </div>;\n};\n```\n\n### useBoolean\n\n```jsx\nconst [showCounter, actions] = useBoolean(true);\n```\n\nActions:\n\n- `toggle`\n- `setTrue`\n- `setFalse`\n\n### useNumber\n\n```jsx\nconst counter = useNumber(0);\nconst limitedNumber = useNumber(3, { upperLimit: 5, lowerLimit: 3 });\nconst rotatingNumber = useNumber(0, {\n  upperLimit: 5,\n  lowerLimit: 0,\n  loop: true\n});\n```\n\nActions:\n\nBoth `increase` and `decrease` take an optional `amount` argument which is 1 by default, and will override the `step` property if it's used in the options.\n\n- `increase(amount = 1)`\n- `decrease(amount = 1 )`\n\nOptions:\n\n- `lowerLimit`\n- `upperLimit`\n- `loop`\n- `step` - sets the increase/decrease amount of the number upfront, but it can still be overriden by `number.increase(3)` or `number.decrease(5)`\n\n### useInput\n\nThis one is unique, since it returns tuple as a first element, where first element is `value` and second is `hasValue`\nSecond element is `actions` as usual\n\n```typescript\ntype UseInputActions = {\n  setValue: UseStateful<string>['setValue'] // Look above\n  onChange: (e: React.SyntheticEvent) => void\n  clear: () => void\n}\ntype UseInput = [[string, boolean], UseInputActions]\n```\n\n```jsx\nconst [[newTodo], actions] = useInput(\"\");\n```\n\n```jsx\n<input value={newTodo} onChange={actions.onChange} />\n```\nActions:\n\n- `clear`\n- `onChange` - default native event.target.value handler\n\nProperties:\n\n- `hasValue` -\n\n### useBindToInput\n\nDesigned to be used in composition with `useInput`.\nFirst and second elements are the same as `useInput.\nThird are bindings to spread.\n\n```jsx\nconst [[newTodo], actions, { nativeBind, valueBind }] = useBindToInput(useInput(\"\"));\n```\n\n```jsx\n<input value={newTodo} onChange={actions.onChange} />\n<input {...nativeBind} />\n<Slider {...valueBind} />\n```\n\nActions:\n\n- `nativeBind` - binds the `value` and `onChange` props to an input that has `e.target.value`\n- `valueBind` - binds the `value` and `onChange` props to an input that's using only `value` in `onChange` (like most external components)\n\n### useArray\n\n```jsx\nconst [todos, actions] = useArray([]);\n```\n\nActions:\n\n- `add`\n- `clear`\n- `removeIndex`\n- `removeById` - if array consists of objects with some specific `id` that you pass\nall of them will be removed\n- `move` - moves item from position to position shifting other elements. \n```\n    So if input is [1, 2, 3, 4, 5]\n    \n    from  | to    | expected\n    3     | 0     | [4, 1, 2, 3, 5]\n    -1    | 0     | [5, 1, 2, 3, 4]\n    1     | -2    | [1, 3, 4, 2, 5]\n    -3    | -4    | [1, 3, 2, 4, 5]\n```\n\n### useMap\n\n```jsx\nconst [someMap, someMapActions] = useMap([[\"key\", \"value\"]]);\nconst [anotherMap, anotherMapActions] = useMap(new Map([[\"key\", \"value\"]]));\n```\n\nActions:\n\n- `set`\n- `delete`\n- `clear`\n- `initialize` - applies tuples or map instances\n- `setValue`\n \n\n## useSetState\n\n```jsx\nconst [state, setState] = useSetState({ loading: false });\nsetState({ loading: true, data: [1, 2, 3] });\n```\n\nActions:\n\n- `setState(value)` - will merge the `value` with the current `state` (like this.setState works in React)\n\nProperties:\n\n- `state` - the current state\n\n## usePrevious\n\nUse it to get the previous value of a prop or a state value.  \nIt's from the official [React Docs](https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state).  \nIt might come out of the box in the future.\n\n```jsx\nconst Counter = () => {\n  const [count, setCount] = useState(0);\n  const prevCount = usePrevious(count);\n  return (\n    <h1>\n      Now: {count}, before: {prevCount}\n    </h1>\n  );\n};\n```\n\n### Migration from v1 to v2\n\nAll value based hooks like `useBoolean`, `useNumber` etc. Are changed to \nbe using arrays, since it's more safe for reference equality, and also \nmakes it easier to use many `useSmth` without renaming `value` in destructuring.\n\nSo if you had \n```javascript\nconst { value: showHeader, ...showHeaderActions } = useBoolean(true)\nconst { value: showFooter, ...setShowFooterActions } = useBoolean(true)\n```\nIt will become\n```javascript\nconst [showHeader, showHeaderActions] = useBoolean(true)\nconst [showFooter, showFooterActions] = useBoolean(true)\n```\n\nNote that despite this code seems to be looking the same, it's not. Cause `showHeaderActions` in v1 will result\nin new object reference every rerender. While in v2 actions are memoized using `useMemo` and their reference will not\nchange.\nIt enables us passing `actions` down the props without useless re-renders, also it prevents `useEffects` and\nother hooks from re-run/new reference if autofix of ESLint rule `react-hooks/extraneous-deps` will add them as dependencies.\n\n### useInput migration\nAlso big change to the `useInput`\nIf before you was not using `bind` and `bindToInput` from them, then using the same approach from above\nyou will get what you want. \nBut if you need bindings you need to compose `useInput` with `useBindToInput` like that:\nSo if you had\n```jsx\nconst { value, bindToInput, bind, onChange, hasValue } = useInput(\"\")\n\n<input value={value} onChange={onChange} />\n<input {...bindToInput} />\n{hasValue && <Slider {...bind} />}\n```\nIt will become\n```jsx\nconst [[value, hasValue], actions, { nativeBind, valueBind }] = useBindToInput(useInput(\"\"))\n\n<input value={value} onChange={actions.onChange} />\n<input {...nativeBind} />\n{hasValue && <Slider {...valueBind} />}\n```\n\nNote that first element in destructured array has tuple of `[value, hasValue]` since it's for values\nand second argument is for `action` e.g. only for functions.","readmeFilename":"README.md","bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@2.0.0-beta.4","_nodeVersion":"11.12.0","_npmVersion":"6.8.0","_npmUser":{"name":"rip21","email":"puha212@gmail.com"},"dist":{"integrity":"sha512-LCYlyvWGX49Jezl2DcalmJpov5LmBjBA+oNkM8MiObzIVXG0nvkqq7k8caecdCLhADfHORYuPfnYHc3UtfYE3g==","shasum":"e3a19b503f240a22ca9946173cb39a19f66f25c4","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-2.0.0-beta.4.tgz","fileCount":110,"unpackedSize":83393,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcx4vQCRA9TVsSAnZWagAAW5oP/j4WN7fQnvsTa04ABYUD\nvV2VIcSfoRDBZoIJ9U2sjFehrXl06omffmOhHlJkfluTmq1m46S+rrZKCzxx\n1NHirLOX1TArPeu5D7F5KdhvYZnjSU0xsyLmYb8tk5FaFwtQxVTwYPMjbw5j\njZ5Z7RF6Q7/V7S7Je5muEgJ5Z9X6JU1hyBjq+WfSFYl/nyEMmK7C1tokmk23\npDJT4uRWt1U82OXA/BPbfuFMaktUQaFL1MAuZewrJyc1TFEuLVDidEP23ePN\no2dNSMhBYKAmuCDjGLZUSJfYYKxtQ2ru41rzKqNlQXzV6oZ1ZszN+fYWw9rc\nrmlMdWxKcyBRXXn0wWfI5FUWu80D9KUWfBPxpGKgcIya0lsMKmxyHm6ySvFc\nZn33mJVaY5eoLe+wtASB+YHSzDl8stJ9d0JBdjPprzTXryps1G95WaOx2Zbr\nzg+9h7Jy8j1usC1VYzNK6T5WNLxibCxIW8cclBjPBaewuhNmtMZfN1Kz8lXA\njYwkuPRyGCzuVHIJIt8g7KFOInC3SKqTd574Z+0YBrSawfmmK8Lpx0Tw0t1t\n9oWFfYR5zBlyFFvPmZKn7YH/O4PTs+3lrNnqVNZA2R/w4i/ACT5bYTAa6L6C\nzAvOHWTa9Vgdx0u3gVcaIMtHIpS2QK02zO0Ej+5dWG9GAyJ5bvp9TmYQem3q\nD/VL\r\n=9VtT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEcRlqFPJMaswgSEPBHjwUpZx4Xqd0PE7SdVfQQuazkbAiEAyLO8lnoC3OdBLbtdhMVYcosRHdGV/vTFXEe2+9+phog="}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_2.0.0-beta.4_1556581327601_0.04808211181599864"},"_hasShrinkwrap":false},"2.0.0":{"name":"react-hanger","version":"2.0.0","description":"Set of a helpful hooks, for different specific to some primitives types state changing helpers","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"contributors":[{"name":"Andrii Los","email":"puha212@gmail.com","url":"https://github.com/RIP21"}],"main":"index.js","module":"es6/index.js","jsnext:main":"es6/index.js","typings":"index.d.ts","engines":{"node":">=8","npm":">=5"},"scripts":{"test":"jest src","test:watch":"npm run test -- --watch","build:es6":"tsc -p tsconfig.json","build:require":"tsc -p tsconfig-require.json","prebuild":"rimraf lib && mkdir lib && npm run test","build":"npm run build:es6 && npm run build:require","postbuild":"node copyPackageJsonAndReadme.js","prerelease":"npm run build","release":"npm publish lib","release:beta":"prerelease && npm publish lib --tag beta"},"peerDependencies":{"react":"^16.8.0","react-dom":"^16.8.0"},"devDependencies":{"@types/jest":"^24.0.11","@types/react":"^16.8.13","cross-env":"^5.2.0","gh-pages":"^1.2.0","react":"^16.8.6","react-dom":"^16.8.6","react-hooks-testing-library":"^0.4.0","react-testing-library":"^6.1.2","rimraf":"^2.6.3","typescript":"^3.4.2","jest":"^24.5.0","ts-jest":"^24.0.2","babel-eslint":"10.0.1","@typescript-eslint/parser":"1.5.0","@typescript-eslint/eslint-plugin":"1.5.0","eslint-plugin-react-hooks":"1.5.1","eslint":"5.16.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"4.1.0","eslint-plugin-jest":"22.3.2","eslint-plugin-prettier":"3.0.1","eslint-plugin-flowtype":"2.50.3","eslint-plugin-import":"2.16.0","eslint-plugin-jsx-a11y":"6.2.1","eslint-plugin-react":"7.12.4","eslint-config-react-app":"3.0.8","eslint-config-revolut-react":"0.0.22","prettier":"1.17.0"},"favoriteScripts":["test:watch"],"bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@2.0.0","_nodeVersion":"11.12.0","_npmVersion":"6.8.0","_npmUser":{"name":"rip21","email":"puha212@gmail.com"},"dist":{"integrity":"sha512-lJsnEgZl+01N9WLPjbv2HZllKIyfNDh4TKZ3tudEVY8VpRmO2gtDp3fWUKuUmp05uwQL/4xf+q10yzPK3/dQ0g==","shasum":"c0d3e71f09995d5c9434ca85e743b0fa38058c33","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-2.0.0.tgz","fileCount":111,"unpackedSize":87629,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcyAlfCRA9TVsSAnZWagAAJ7cP/2Ojp1DGBZ/Y9wEphFby\nRicYxm7159OKDbW7C2Zi9JacTmzsKKKA3OO3qIBiR/z5dyyRQzteJnuAiAm4\n/fNHOEd89ftAmwzIv6NiooLUct9w8q7mQn7WhX2aCuuzphADCsbIjlscIOkY\nMq2PX9HogkbHQSqA2MASCq3H13MbwJGmxKJHkzD3SLwrhOZ2SkKr+ppbwwlJ\n+H6ow06jlcbkKUKtttUCZiHX4sR45ydZ2V8jn103WgLTYnir0jSi2cVe+eGr\nDJO2yyJ+y8m5d/O2x3N8NvSM0fansTmglLbhwCtPiWNu8M8864E92VN2o/1A\nOQrR2oShIerFQBp2ce/rjePeit0mDwI3/2L+n6cn0Au8VFxhKMICV0edkzuZ\nuoC5QQrqi9tVr7vQ/ckxH5t8vDsYhitNbtRoY/jRjd9yPRoLP4GYppx0GbNd\nXCPHXVQVo2grpfkvHN9SSAM7EXeabVeZr7xYX4d8GfY48HGuGOqlPPMFue9Y\nmPDe9U9ALqOLK28v+gCOmxDUkfrjd1oRFzxKq33nwQaYbzQ2vGgcqeALa8ry\nyacvQOzymLrPkIfZRgY4e+hnSFdV8q9YPEmSuHTejYs8GPKW+pOk4zssjf2u\n9SUaK9YNuBrzbxf2TieShpSgSk6v6OxwM24dm2PZ518I6NSiOjQMFutsKVKr\ncgyN\r\n=UCOP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF4TWXQcU61FZSNQj0TjnFC3XwX+doScZX/jnHfLLhHxAiEAtwCpajSdBsOxngWfxtovGi5BWR9fCjXLtUO5o20J9X8="}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_2.0.0_1556613471250_0.006719782192976309"},"_hasShrinkwrap":false},"2.1.0":{"name":"react-hanger","version":"2.1.0","description":"Set of a helpful hooks, for different specific to some primitives types state changing helpers","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"contributors":[{"name":"Andrii Los","email":"puha212@gmail.com","url":"https://github.com/RIP21"}],"main":"index.js","module":"es6/index.js","jsnext:main":"es6/index.js","typings":"index.d.ts","engines":{"node":">=8","npm":">=5"},"scripts":{"test":"jest src","test:watch":"npm run test -- --watch","build:es6":"tsc -p tsconfig.json","build:require":"tsc -p tsconfig-require.json","prebuild":"rimraf lib && mkdir lib && npm run test","build":"npm run build:es6 && npm run build:require","postbuild":"node copyPackageJsonAndReadme.js","prerelease":"npm run build","release":"npm publish lib","release:beta":"prerelease && npm publish lib --tag beta"},"peerDependencies":{"react":"^16.8.0","react-dom":"^16.8.0"},"devDependencies":{"@types/jest":"^24.0.15","@types/react":"^16.8.23","cross-env":"^5.2.0","gh-pages":"^1.2.0","react":"^16.8.6","react-dom":"^16.8.6","@testing-library/react":"^8.0.5","@testing-library/react-hooks":"^1.1.0","react-test-renderer":"^16.8.6","rimraf":"^2.6.3","typescript":"^3.5.3","jest":"^24.8.0","ts-jest":"^24.0.2","babel-eslint":"10.0.2","@typescript-eslint/parser":"1.5.0","@typescript-eslint/eslint-plugin":"1.5.0","eslint-plugin-react-hooks":"1.5.1","eslint":"5.16.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"4.1.0","eslint-plugin-jest":"22.3.2","eslint-plugin-prettier":"3.0.1","eslint-plugin-flowtype":"2.50.3","eslint-plugin-import":"2.16.0","eslint-plugin-jsx-a11y":"6.2.1","eslint-plugin-react":"7.12.4","eslint-config-react-app":"3.0.8","eslint-config-revolut-react":"0.0.22","prettier":"1.18.2"},"favoriteScripts":["test:watch"],"bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@2.1.0","_nodeVersion":"12.3.1","_npmVersion":"6.9.0","_npmUser":{"name":"rip21","email":"puha212@gmail.com"},"dist":{"integrity":"sha512-9HlFSYvKMmjcfyllNNK09q47tXvS+TIT9C3OKkp4RgCSA/ebewzVBxum7FvhcVJKcmjMTW48AW9CG6Li7RE1ug==","shasum":"81ddc8f716c236ab6bc39bac9b49e05cb850eb68","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-2.1.0.tgz","fileCount":118,"unpackedSize":143152,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLgoeCRA9TVsSAnZWagAAi7sP/3d4dNP9DvPgZFghpNJz\nkP/fEgDEx/ddcYw52/1sW+ekANojVl8Hg944LBQ9rcctV2H0FSx7Iyp7PjnA\nzD95A9wlPB7v4Najh+UdgH5+x2m2h+jSGrjnLXKR8s93cXQR/10VT+pYfFc+\nEH9IurUz/ZSSeCcrxUDFHuyRdxU2sXvFd9iQlUTxbJ28NpRGdtgWcFxqwlVF\ncDbZuCjvSBLTLMvhadL0t5GLU3B/+Hm4e8EbX49rgI444voSbrHWLYwmORYU\nb6gqsyDgSK7As+iN1wsdII4P6adaCcnExN02YztVidWan2UGweAWJAOamh7i\nLZ4If+ywPaL6Vyop14xscjzbXXSAlPY0TEZ+teuJRUgqd49C/qUTRnm6nLpH\nUvocenVxKXcdlhzpRskN13RUmCJ4Vvj1HLLj0Ush3h4VxSFCjBHFp7Ho96N0\nh5xrhZpIZF0x78HWl4Vomg45kEkbPVb2MjyM5BZ2WBV+bmqoADHGjhFfdZrh\njhbR6kncFswChv/WJQIOEe1uBztrepBnVcSe9iHqxR5Jkydm0xPxi6laPBz+\njRuJUzyiMmLFKL6B3HcGcN/6L2TzwfMwSrUeAubrmnk3uEDleA2ajaCM9/5B\n0fzZ6c9fxT0DiOCT471SxxhS4wWvWse5pER92YyuTKWvLTCUfjSGOaisJF+q\nNc8/\r\n=ndyb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLFgKUTu9gr3lrVMHXbvo0RoDnSYSPunJxW356pf2FpwIhAOFqsS0/y8UVoyyhB0JCgiWTK/AsvNlGPG/bGjryeT/i"}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_2.1.0_1563298333911_0.24019852841545508"},"_hasShrinkwrap":false},"2.1.1":{"name":"react-hanger","version":"2.1.1","description":"Set of a helpful hooks, for different specific to some primitives types state changing helpers","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"contributors":[{"name":"Andrii Los","email":"puha212@gmail.com","url":"https://github.com/RIP21"}],"main":"index.js","module":"es6/index.js","jsnext:main":"es6/index.js","typings":"index.d.ts","engines":{"node":">=8","npm":">=5"},"scripts":{"test":"jest src","test:watch":"npm run test -- --watch","build:es6":"tsc -p tsconfig.json","build:require":"tsc -p tsconfig-require.json","prebuild":"rimraf lib && mkdir lib && npm run test","build":"eslint ./src --ext ts,tsx --max-warnings 0 && npm run build:es6 && npm run build:require","postbuild":"node copyPackageJsonAndReadme.js","prerelease":"npm run build","release":"npm publish lib","release:beta":"prerelease && npm publish lib --tag beta"},"peerDependencies":{"react":"^16.8.0","react-dom":"^16.8.0"},"devDependencies":{"@types/jest":"^24.0.15","@types/react":"^16.8.23","cross-env":"^5.2.0","gh-pages":"^1.2.0","react":"^16.8.6","react-dom":"^16.8.6","@testing-library/react":"^8.0.5","@testing-library/react-hooks":"^1.1.0","react-test-renderer":"^16.8.6","rimraf":"^2.6.3","typescript":"^3.5.3","jest":"^24.8.0","ts-jest":"^24.0.2","babel-eslint":"10.0.2","@typescript-eslint/parser":"1.5.0","@typescript-eslint/eslint-plugin":"1.5.0","eslint-plugin-react-hooks":"1.5.1","eslint":"5.16.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"4.1.0","eslint-plugin-jest":"22.3.2","eslint-plugin-prettier":"3.0.1","eslint-plugin-flowtype":"2.50.3","eslint-plugin-import":"2.16.0","eslint-plugin-jsx-a11y":"6.2.1","eslint-plugin-react":"7.12.4","eslint-config-react-app":"3.0.8","eslint-config-revolut-react":"0.0.22","prettier":"1.18.2"},"favoriteScripts":["test:watch"],"bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@2.1.1","_nodeVersion":"12.3.1","_npmVersion":"6.9.0","_npmUser":{"name":"rip21","email":"puha212@gmail.com"},"dist":{"integrity":"sha512-EoLGSZFg+Dn9kS4cT4MRGWhpnk1urO07pNJgcwf0ilktkQmpK7fHY03q64QTn625N3CqxSu0zwstG6QNJpyuUA==","shasum":"7c6879d29ec034fdc74a72d9fad79ff7d2357e94","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-2.1.1.tgz","fileCount":61,"unpackedSize":98377,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJddkv6CRA9TVsSAnZWagAA+voQAIxx1cGFWt/YOyqmGa5a\nPz/1/taMiB3h0cLOYffXTzm6HIc9Ll60nKBaX+OdVDIheIoX32J+ceh7PVbY\ncHfl/2Z2mhxKuOLbZR96jORnFozJPg3/9ZfysG0pHQGlRsCzTc5LNv+HuB7K\ntHb6JzsMn5cqx1WqUV4QzZp2JmNh4zb9m/3qbCY2hY6rfVvVTziopr9hb055\n7SDRGjM3uQrx3fo+IKkyqtCZzZfw21nsK170FGYw1pdoLN25jhbl9uyLljVC\n9ivE387slcaS7jkTXxQ0DtTLmFraI5Vt9ucwD9Yi3FG2g4Y2shzBzU1XABin\nsDXI0+5jCRI+SWIEBmQbHPyQK59MIr8B7yty9m6PasmbXFhbpcKDnHdP0Kyh\nbr9/lD3smp/GGo1ojnQiO++5lzpQTSHJrZC3RDDjq4Nd2aBeWRzhUGkjBe4D\nQow4Ktqcw4b+CUSdc+5t9o+EqmSyAXyw995N9CQZEuujpD0kG+IYF6EfWwr8\nLjDzvlksezzeGI6k1UPh7S3IdMl8DRIr0zOnkoyZw9IbRWKRp6QZYZrICLys\n+0iPWktyVK8xLGrf8QMnkx6jOpwa/GqBta3yRGVowiKC1Yw5bSTO7J82pih7\nxyhqrNNJPhHhJB4u3sjvGVDArCPvLXMmYoTXBUPoCXmgFkEe/FMT3LPtkCqz\n/6x0\r\n=/y0G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCAY/jXeTWrO8yEodTOILPC43f/xS9Uj+D0JdtyjgOG6wIhAOLU5/PhVkDCNVB32opZYEJ1cbGgRtlooli1S65er5y+"}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_2.1.1_1568033785533_0.7368745613172585"},"_hasShrinkwrap":false},"2.1.2":{"name":"react-hanger","version":"2.1.2","description":"Set of a helpful hooks, for different specific to some primitives types state changing helpers","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"contributors":[{"name":"Andrii Los","email":"puha212@gmail.com","url":"https://github.com/RIP21"}],"main":"index.js","module":"es6/index.js","jsnext:main":"es6/index.js","typings":"index.d.ts","engines":{"node":">=8","npm":">=5"},"scripts":{"test":"jest src","test:watch":"npm run test -- --watch","build:es6":"tsc","build:require":"tsc -p tsconfig-require.json","prebuild":"rimraf lib && npm run test","build":"eslint ./src --ext ts,tsx --max-warnings 0 && npm run build:es6 && npm run build:require","postbuild":"node copyPackageJsonAndReadme.js","prerelease":"npm run build","release":"npm publish lib","release:beta":"prerelease && npm publish lib --tag beta"},"peerDependencies":{"react":"^16.8.0","react-dom":"^16.8.0"},"devDependencies":{"@types/jest":"^24.0.15","@types/react":"^16.8.23","cross-env":"^5.2.0","gh-pages":"^1.2.0","react":"^16.8.6","react-dom":"^16.8.6","@testing-library/react":"^8.0.5","@testing-library/react-hooks":"^1.1.0","react-test-renderer":"^16.8.6","rimraf":"^2.6.3","typescript":"^3.5.3","jest":"^24.8.0","ts-jest":"^24.0.2","babel-eslint":"10.0.2","@typescript-eslint/parser":"1.5.0","@typescript-eslint/eslint-plugin":"1.5.0","eslint-plugin-react-hooks":"1.5.1","eslint":"5.16.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"4.1.0","eslint-plugin-jest":"22.3.2","eslint-plugin-prettier":"3.0.1","eslint-plugin-flowtype":"2.50.3","eslint-plugin-import":"2.16.0","eslint-plugin-jsx-a11y":"6.2.1","eslint-plugin-react":"7.12.4","eslint-config-react-app":"3.0.8","eslint-config-revolut-react":"0.0.22","prettier":"1.18.2"},"favoriteScripts":["test:watch"],"gitHead":"d7cefdf67bff3f12a94b1057336e3dda07d8f445","bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@2.1.2","_nodeVersion":"12.3.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-HOcIjX4+r4nbC0k2Fbz5o5PZFsGyhMm7uNzvCRskLLgfX+IX+vGmhcvIHxPOg+ow6jnR9OCTsmFr5DmQnR1jeg==","shasum":"d548942801f62849904a674e3a64bbf4f04e83bb","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-2.1.2.tgz","fileCount":40,"unpackedSize":608805,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdd5bfCRA9TVsSAnZWagAA2EMP/jR0tj2GJLlqxVbZr3p2\n6iTOMM64ezOxqxM6DMP0bja7UZotH1TNgtzuljFGRMaVsSDskV7vnvj9jmsQ\nM0Wd9RsvCXQltVkv+0YvV2QF8Gdr+BWIDlZdgI5/A5DxJvUlj2TFgT3XVywl\nrXDgbXTsTND0ogJ3q5/g+5+l9zoLlz9jf4AoQm9rSPlnLzcYPd3+bjE+450O\n8XdDncDhZIZcb4sNJ5Im3qctM3vk5A8/kVdND3sxLz6y43egoKkhr3c1tdMS\nbcpQ09nLYycpIj/A1BybqP2L9FGb7HxLcRQ9VeVKGfm8Tz5bxwhFoLvjJXml\nDKPk5MvecXgYqy11YOCgAGMqPmsBb1cZ8q6ORusNsqnhTcrOyGUocesDMr95\nEgez9ZPJ9SIaAehmzufXRevapX4KBx3nBpVTmeT5h28RNBxkAdWMAmXEcjuF\nLJRppExqnJmDrk5gNJOymjMxMan5TkAhNzqTXhNGWfdyCdI4M2WPHwDvKCYy\nHRsTNqnf41Vo1SImpiq93neaTghnOmYQTkvFwL7OIJne198xfR9ar8KhyqYR\nR2LZoGvLUt1BAiaQysvULl01udq8uFBwBo3UPq8HLYS+TLs+9FzZdtmAyol6\n7A3IMXfepBqP0nkOPZP2WcBW0FYKRgfIghQ1W6p2BjWVswkJBoA8UF77O60X\ntvNb\r\n=sDeh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdel/9lAvCdV34o2XxbySBNRsTQjQXJDvYgxPPbyV8lwIgAy7sGzk1ZCnG1GAvFqTRAnEylQVGbtow2ZhPuUm3bcs="}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"_npmUser":{"name":"rip21","email":"puha212@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_2.1.2_1568118494264_0.26727628641995316"},"_hasShrinkwrap":false},"2.1.3":{"name":"react-hanger","version":"2.1.3","description":"Set of a helpful hooks, for different specific to some primitives types state changing helpers","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"contributors":[{"name":"Andrii Los","email":"puha212@gmail.com","url":"https://github.com/RIP21"}],"main":"./index.js","module":"./es6/index.js","jsnext:main":"./es6/index.js","typings":"./index.d.ts","engines":{"node":">=8","npm":">=5"},"scripts":{"test":"jest src","test:watch":"npm run test -- --watch","build:es6":"tsc","build:require":"tsc -p tsconfig-require.json","prebuild":"rimraf lib && npm run test","build":"eslint ./src --ext ts,tsx --max-warnings 0 && npm run build:es6 && npm run build:require","postbuild":"node copyPackageJsonAndReadme.js","prerelease":"npm run build","release":"npm publish lib","release:beta":"prerelease && npm publish lib --tag beta"},"peerDependencies":{"react":"^16.8.0","react-dom":"^16.8.0"},"devDependencies":{"@types/jest":"^24.0.15","@types/react":"^16.8.23","cross-env":"^5.2.0","gh-pages":"^1.2.0","react":"^16.8.6","react-dom":"^16.8.6","@testing-library/react":"^8.0.5","@testing-library/react-hooks":"^1.1.0","react-test-renderer":"^16.8.6","rimraf":"^2.6.3","typescript":"^3.5.3","jest":"^24.8.0","ts-jest":"^24.0.2","babel-eslint":"10.0.2","@typescript-eslint/parser":"1.5.0","@typescript-eslint/eslint-plugin":"1.5.0","eslint-plugin-react-hooks":"1.5.1","eslint":"5.16.0","eslint-config-airbnb":"17.1.0","eslint-config-prettier":"4.1.0","eslint-plugin-jest":"22.3.2","eslint-plugin-prettier":"3.0.1","eslint-plugin-flowtype":"2.50.3","eslint-plugin-import":"2.16.0","eslint-plugin-jsx-a11y":"6.2.1","eslint-plugin-react":"7.12.4","eslint-config-react-app":"3.0.8","eslint-config-revolut-react":"0.0.22","prettier":"1.18.2"},"favoriteScripts":["test:watch"],"bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@2.1.3","_nodeVersion":"12.3.1","_npmVersion":"6.9.0","_npmUser":{"name":"rip21","email":"puha212@gmail.com"},"dist":{"integrity":"sha512-F9EnmgMz+7LUCkFmaRpgYvYAKcGj/6gY7hm8kq/MOkumnxxO/RukJKnYhyQbsYOh2dMrsE7s8IcsWFiGwKF8Kg==","shasum":"16290f75386c7e7bd7a86e45bcf885ba89438ee9","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-2.1.3.tgz","fileCount":117,"unpackedSize":104906,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdd6SRCRA9TVsSAnZWagAAf/wQAIMcUTI9yBdWrGBWAtHP\nL7GdUcdsofshTNPi1Srq1b16Syx/v8h+5n5ceQvK8aYa4PV4X5RAkMa6Hi57\n1odrgGkJXc3tOcbGjPljOrqlu3Ps/Kx14UKywAcJZimdAH4p9SbBS7Bwod19\n4aZ9uXZPThDjY8q6nMMmKi+PuxpY4gWH2mtQ4EgwEq1FAaKXYXh4uLPm/IG8\nUGzH1Z99HxMdTshZe+Y7fmPCsz4BbYwSktRB2sC5ntA2e+HN0fHfyPlsO1y5\ndwccr5+YyF4JlmmeHehrfJ7hZbolbdgPCHHvfa3hGdyurUXpq78gpY/joSOh\n74xRaRhJU80Zb/l/FvI5phmzlqWkrHNWxVZxVszOdS/i7CHucvbsFk103Az6\nxb+4yRUCYoZccaJwj/brAsUqjSuf6PhuejqtYWjpxqhehU9YIqiYYrAw0YVU\npjS36uClLaR8RBEBWXo4Y87uKav0Y7cDD5GV2BApMQABf9sSONSvL0ISvi6Z\naKsK5bH/i0M4QUk11XlTzZtaBd17fM2QLP37KCKLpdOhSsvpBqmpv8npGSmA\ny0RwAW+OzS5Ththdp5enAAaAO+5Aa7BPcfSj1KpBNkL+yZW7/WFQ82gDYdxJ\nsyIlwuC2HrNAIOU0Cg62HnjEJCyAuJBxW5IzeYHr4qRS301sZSnupAsMvKuG\n6dyY\r\n=xX6/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC0/54ELW3XHzlrTYBC2bh3eX8OH8cjJDM0WYpVnLIzogIgVfgobLmdaWV9Gt9nh1uyGj60Y2gc9sSbhe0ON9XJkio="}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_2.1.3_1568122000382_0.08287097407754063"},"_hasShrinkwrap":false},"2.2.0":{"name":"react-hanger","version":"2.2.0","description":"Set of a helpful hooks, for different specific to some primitives types state changing helpers","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"https://github.com/kitze/react-hanger.git"},"sideEffects":false,"contributors":[{"name":"Andrii Los","email":"puha212@gmail.com","url":"https://github.com/RIP21"}],"main":"./index.js","module":"./esm/index.js","typings":"./index.d.ts","scripts":{"lint":"eslint ./src --ext ts,tsx --max-warnings 0","lint:fix":"yarn lint --fix","test":"jest src","test:watch":"npm run test -- --watch","build:esm":"tsc","build:cjs":"tsc -p tsconfig-require.json","clean":"rimraf lib","build":"npm run build:esm && npm run build:cjs","postbuild":"node copyPackageJsonAndReadme.js","prepublish":"npm run clean && npm run build","release":"np  --contents lib"},"peerDependencies":{"react":">16.8.0","react-dom":">16.8.0"},"devDependencies":{"@testing-library/react":"^8.0.5","@testing-library/react-hooks":"^1.1.0","@types/jest":"^25.2.1","@types/react":"^16.9.34","@typescript-eslint/eslint-plugin":"2.28.0","@typescript-eslint/parser":"2.28.0","babel-eslint":"10.1.0","eslint":"6.8.0","eslint-config-prettier":"6.10.1","eslint-config-react-app":"5.2.1","eslint-plugin-flowtype":"4.7.0","eslint-plugin-import":"2.20.2","eslint-plugin-jsx-a11y":"6.2.3","eslint-plugin-prettier":"3.1.3","eslint-plugin-react":"7.19.0","eslint-plugin-react-hooks":"2.5.1","jest":"^25.3.0","np":"6.2.1","prettier":"2.0.4","react":"^16.13.1","react-dom":"^16.13.1","react-test-renderer":"^16.13.1","rimraf":"^3.0.2","ts-jest":"^25.4.0","typescript":"^3.8.3"},"favoriteScripts":["test:watch"],"licenseText":"MIT License\n\nCopyright (c) 2018 Kitze\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"react-hanger@2.2.0","dist":{"shasum":"fbfa0d4d30c0eb18b162750d5f6d982b444e319d","integrity":"sha512-pUQW2X6Ar8WgPG13BmES8COFyIm9oBNnMhUMxSzucKPRyfhPDi7zsosUOaZy2Fmzkdtitgi+ZM6COT26jE7CXg==","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-2.2.0.tgz","fileCount":45,"unpackedSize":183177,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJenHbmCRA9TVsSAnZWagAAGXIP/2PAR83K5WTBMcPpMXF/\nMdzkbhz7ztyE6e8uGgjUDigw7SBsyDMeARtAG6JRKLARpmigkS51uwGXc50r\ngsLr6jzmRlFzxzfwpzghsym9s1lazfQXfi2CkIUofAoE6TUclwMfcnqV3eqf\nWxrD3Ku4RR8YYNJlFKWbObqPg4Inr+uVxaq6zuS+hedFT1/fU/1Fv1Ygo6gs\nftDbuxC9T/Xz4qjibqH/lrwyQQgNdm/6jfCial5z/8SfLPZv3uQ+wWE9Vj/y\n1hT66bOgqLC1MwpGpHdXVMm5JiNG8aPHrmVKCuosdiBIo3k+9YD5gkJ2q0/E\n/jTE/BfZRY5Fr78R3ivh6lLkIqytFjaBzg7tcmdg3P15aCs+w3JM0Y6Qh/M8\n4chBnIgfGuXj+hPg00Y7jPgUOtJ7Yh3KtZIvF9RVNkifKIAqKfw5lKQWPRJ9\nHK4nLB81DbNP3IGIsQTHv58HX1AmmG/StAkew5Q6NYJxQ93EJLmkkOMmKDbD\nCPSTxUQBf1B3yhKaRsUvc7G/DsvFePUTZRDJ4//Vyn4hjVuQq0cjbxR6SGkB\nsCRmPiqd9WIuZFt5B65urtmVVml3N2r/NgXVvMEx8wgL9VhzckLDqZJ25aTn\nuxxadTXPPHsrY9TgVDAkQ2dguLWcCZrab83FUcyBZEb+giKQx/DHwr0IphRj\nAUZn\r\n=SO2N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBNjXdBYlecYCWsDK1AheEfLWK98scs/MeBjJTp0pg6AIhAOpnvM8VbfGOgZxMS64Cl2JGxMdOJG7+sTlwkl5V9osd"}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"_npmUser":{"name":"rip21","email":"puha212@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_2.2.0_1587312358020_0.48307467235750146"},"_hasShrinkwrap":false},"2.2.1":{"name":"react-hanger","version":"2.2.1","description":"Set of a helpful hooks, for different specific to some primitives types state changing helpers","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"https://github.com/kitze/react-hanger.git"},"sideEffects":false,"contributors":[{"name":"Andrii Los","email":"puha212@gmail.com","url":"https://github.com/RIP21"}],"main":"./index.js","module":"./esm/index.js","typings":"./index.d.ts","scripts":{"lint":"eslint ./src --ext ts,tsx --max-warnings 0","lint:fix":"yarn lint --fix","test":"jest src","test:watch":"yarn test -- --watch","build:esm":"tsc","build:cjs":"tsc -p tsconfig-require.json","clean":"rimraf lib","build":"yarn build:esm && npm run build:cjs","postbuild":"node copyPackageJsonAndReadme.js","postversion":"yarn clean && yarn build","release":"np --contents lib"},"peerDependencies":{"react":">16.8.0","react-dom":">16.8.0"},"devDependencies":{"@testing-library/react":"^8.0.5","@testing-library/react-hooks":"^1.1.0","@types/jest":"^25.2.1","@types/react":"^16.9.34","@typescript-eslint/eslint-plugin":"2.28.0","@typescript-eslint/parser":"2.28.0","babel-eslint":"10.1.0","eslint":"6.8.0","eslint-config-prettier":"6.10.1","eslint-config-react-app":"5.2.1","eslint-plugin-flowtype":"4.7.0","eslint-plugin-import":"2.20.2","eslint-plugin-jsx-a11y":"6.2.3","eslint-plugin-prettier":"3.1.3","eslint-plugin-react":"7.19.0","eslint-plugin-react-hooks":"2.5.1","jest":"^25.3.0","np":"6.2.1","prettier":"2.0.4","react":"^16.13.1","react-dom":"^16.13.1","react-test-renderer":"^16.13.1","rimraf":"^3.0.2","ts-jest":"^25.4.0","typescript":"^3.8.3"},"favoriteScripts":["test:watch"],"_id":"react-hanger@2.2.1","dist":{"shasum":"127214a95319956be97eae640eda91d4b1b16124","integrity":"sha512-SHJX2bMaF0fiXws7eHnSngJuznoqM7Wy0HQdLP9BqAacVasNPLvlcJkBEEIVj6zo7QfH6ZO6uvoQ2GhbvgGVhQ==","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-2.2.1.tgz","fileCount":121,"unpackedSize":109756,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJenINgCRA9TVsSAnZWagAAqigP/0Jxrn8XJqeiXgICZQkS\n4UGRNgZ9UUU/6KA+7eyvK+yS1b5g7l1L1pY+jfVRpx2Zna4Vw8zqz8XLjDUk\nifNJ26sljqhy1Ga1HCnGfHcKDLeUlGXJkcRUkeDGcWLIK6dYLEqwtFWiLG29\nZMrs5QhN1uttnuTceu995Sotj85DpjG5hIfqph2D7bnCJPY0AEBoYR5CKq4G\nLefHd/j+y0pTj6Bw6Uah7djQMhJfAzOqW6afbvWh6lSvROKIDeMcdNy+DCNi\ntB7LRw+5uNkvgqx25rXVhYH5p2CnBRmVUkBc7TQtRUQmeU+AcZzjFv4Y8xGW\ndR89w+FTv7K2NKJMLjSbIhoSqmMc+LTKgEURBkEEQAqdG47TM81fv/qpDQBk\nDhV6psZZXZU6kz28ByXI8F4uzsZowXrD0yYNClUSEW1ZiTC4z3UP7aBi8Bql\nku0u2C2jHQrRgvWbX7/uGbImQIcAcZhH7J3S4uQ1crnGiy5KzWtXNRPqzItC\n4PdfqHgZrJ2CZHwxlZF/XrscGGqWw80tMVtoh8zW4uTHp2TRfGONglln5U/u\niADe9yGj5+zxzHOeArwqIZj+BjcfSidZJqEiPjKAw2m8753kSWho+C9K7rTK\n7TzrYUNJ0QNPbNuuSVEzij2OeYELqfWu4Q5o8a9XEt5QImZwAfj5gm9isKf/\nTNYP\r\n=ReTd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGYOYpM/B7LtZWgsu2fQrN5XxPk/uz2M5WqkU3qe75MMAiB5GvmpXlcqEJXjKvCzRthhFXEeKvsPAKB5TY2IhRb7WA=="}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"_npmUser":{"name":"rip21","email":"puha212@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_2.2.1_1587315551843_0.9118691093142659"},"_hasShrinkwrap":false},"2.3.0-0":{"name":"react-hanger","version":"2.3.0-0","description":"Set of a helpful hooks, for different specific to some primitives types state changing helpers","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"sideEffects":false,"contributors":[{"name":"Andrii Los","email":"puha212@gmail.com","url":"https://github.com/RIP21"}],"main":"./index.js","module":"./esm/index.js","typings":"./index.d.ts","scripts":{"lint":"eslint ./src --ext ts,tsx --max-warnings 0","lint:fix":"yarn lint --fix","test":"jest src","test:watch":"yarn test -- --watch","build:esm":"tsc","build:cjs":"tsc -p tsconfig-require.json","clean":"rimraf lib","build":"yarn build:esm && npm run build:cjs","postbuild":"node copyPackageJsonAndReadme.js","postversion":"yarn clean && yarn build","release":"np --contents lib"},"peerDependencies":{"react":">16.8.0","react-dom":">16.8.0"},"devDependencies":{"@testing-library/react":"^8.0.5","@testing-library/react-hooks":"^1.1.0","@types/jest":"^25.2.1","@types/react":"^16.9.34","@typescript-eslint/eslint-plugin":"2.28.0","@typescript-eslint/parser":"2.28.0","babel-eslint":"10.1.0","eslint":"6.8.0","eslint-config-prettier":"6.10.1","eslint-config-react-app":"5.2.1","eslint-plugin-flowtype":"4.7.0","eslint-plugin-import":"2.20.2","eslint-plugin-jsx-a11y":"6.2.3","eslint-plugin-prettier":"3.1.3","eslint-plugin-react":"7.19.0","eslint-plugin-react-hooks":"2.5.1","jest":"^25.3.0","np":"6.2.1","prettier":"2.0.4","react":"^16.13.1","react-dom":"^16.13.1","react-test-renderer":"^16.13.1","rimraf":"^3.0.2","ts-jest":"^25.4.0","typescript":"^3.8.3"},"favoriteScripts":["test:watch"],"readme":"### 🙋‍♂️ Made by [@thekitze](https://twitter.com/thekitze), improved by [@rip212](https://twitter.com/los_codes)\r\n\r\n\r\n### Other projects:\r\n\r\n- 🏫 [React Academy](https://reactacademy.io) - Interactive React and GraphQL workshops\r\n- 💌 [Twizzy](https://twizzy.app) - A standalone app for Twitter DM\r\n- 💻 [Sizzy](https://sizzy.co) - A tool for testing responsive design on multiple devices at once\r\n- 🤖 [JSUI](https://github.com/kitze/JSUI) - A powerful UI toolkit for managing JavaScript apps\r\n\r\n---\r\n\r\n# react-hanger\r\n[![npm version](https://badge.fury.io/js/react-hanger.svg)](https://badge.fury.io/js/react-hanger)\r\n\r\nSet of a helpful hooks, for different specific to some primitives types state changing helpers.\r\nHas two APIs:\r\n- [First](#Example) and original from v1 is based on object destructuring e.g. `const { value, toggle } = useBoolean(false)` (Docs below)\r\n- [Second API](./README-ARRAY.md) (recommended [why?](./README-ARRAY.md#migration-from-object-to-array-based)) is based on more idiomatic to React hooks API, e.g. like `useState` with array destructuring\r\n`const [value, actions] = useBoolean(false)` [(Docs)](./README-ARRAY.md)\r\n\r\n\r\n## Install\r\n\r\n```bash\r\nyarn add react-hanger\r\n```\r\n\r\n## Usage\r\n\r\n```jsx\r\nimport React, { Component } from \"react\";\r\n\r\nimport {\r\n  useInput,\r\n  useBoolean,\r\n  useNumber,\r\n  useArray,\r\n  useOnMount,\r\n  useOnUnmount\r\n} from \"react-hanger\";\r\n\r\nconst App = () => {\r\n  const newTodo = useInput(\"\");\r\n  const showCounter = useBoolean(true);\r\n  const limitedNumber = useNumber(3, { lowerLimit: 0, upperLimit: 5 });\r\n  const counter = useNumber(0);\r\n  const todos = useArray([\"hi there\", \"sup\", \"world\"]);\r\n\r\n  const rotatingNumber = useNumber(0, {\r\n    lowerLimit: 0,\r\n    upperLimit: 4,\r\n    loop: true\r\n  });\r\n\r\n  return (\r\n    <div>\r\n      <button onClick={showCounter.toggle}> toggle counter </button>\r\n      <button onClick={() => counter.increase()}> increase </button>\r\n      {showCounter.value && <span> {counter.value} </span>}\r\n      <button onClick={() => counter.decrease()}> decrease </button>\r\n      <button onClick={todos.clear}> clear todos </button>\r\n      <input type=\"text\" value={newTodo.value} onChange={newTodo.onChange} />\r\n    </div>\r\n  );\r\n};\r\n```\r\n\r\n### Example\r\n\r\n[Open in CodeSandbox](https://codesandbox.io/s/44m70xm70)\r\n\r\n## API reference (object destructuring)\r\n\r\n### How to import?\r\n\r\n```\r\nimport { useBoolean } from 'react-hanger' // will import all of functions\r\nimport useBoolean from 'react-hanger/useBoolean' // will import only this function\r\n```\r\n\r\n### useStateful\r\n\r\nJust an alternative syntax to `useState`, because it doesn't need array destructuring.\r\nIt returns an object with `value` and a `setValue` method.\r\n\r\n```jsx\r\nconst username = useStateful(\"test\");\r\n\r\nusername.setValue(\"tom\");\r\nconsole.log(username.value);\r\n```\r\n\r\n### useBoolean\r\n\r\n```jsx\r\nconst showCounter = useBoolean(true);\r\n```\r\n\r\nMethods:\r\n\r\n- `toggle`\r\n- `setTrue`\r\n- `setFalse`\r\n\r\n### useNumber\r\n\r\n```jsx\r\nconst counter = useNumber(0);\r\nconst limitedNumber = useNumber(3, { upperLimit: 5, lowerLimit: 3 });\r\nconst rotatingNumber = useNumber(0, {\r\n  upperLimit: 5,\r\n  lowerLimit: 0,\r\n  loop: true\r\n});\r\n```\r\n\r\nMethods:\r\n\r\nBoth `increase` and `decrease` take an optional `amount` argument which is 1 by default, and will override the `step` property if it's used in the options.\r\n\r\n- `increase(amount = 1)`\r\n- `decrease(amount = 1 )`\r\n\r\nOptions:\r\n\r\n- `lowerLimit`\r\n- `upperLimit`\r\n- `loop`\r\n- `step` - sets the increase/decrease amount of the number upfront, but it can still be overriden by `number.increase(3)` or `number.decrease(5)`\r\n\r\n### useInput\r\n\r\n```jsx\r\nconst newTodo = useInput(\"\");\r\n```\r\n\r\n```jsx\r\n<input value={newTodo.value} onChange={newTodo.onChange} />\r\n```\r\n\r\n```jsx\r\n<input {...newTodo.eventBind} />\r\n<Slider {...newTodo.valueBind} />\r\n```\r\n\r\nMethods:\r\n\r\n- `clear`\r\n- `onChange`\r\n- `eventBind` - binds the `value` and `onChange` props to an input that has `e.target.value`\r\n- `valueBind` - binds the `value` and `onChange` props to an input that's using only `value` in `onChange` (like most external components)\r\n\r\nProperties:\r\n\r\n- `hasValue`\r\n\r\n### useArray\r\n\r\n```jsx\r\nconst todos = useArray([]);\r\n```\r\n\r\nMethods:\r\n\r\n- `push` - similar to native doesn't return length tho\r\n- `unshift` - similar to native doesn't return length tho\r\n- `pop` - similar to native doesn't return element tho\r\n- `shift` - similar to native doesn't return element tho\r\n- `clear`\r\n- `removeIndex`\r\n- `removeById` - if array consists of objects with some specific `id` that you pass\r\nall of them will be removed\r\n- `modifyById` - if array consists of objects with some specific `id` that you pass\r\nthese elements will be modified.\r\n- `move` - moves item from position to position shifting other elements.\r\n```\r\n    So if input is [1, 2, 3, 4, 5]\r\n\r\n    from  | to    | expected\r\n    3     | 0     | [4, 1, 2, 3, 5]\r\n    -1    | 0     | [5, 1, 2, 3, 4]\r\n    1     | -2    | [1, 3, 4, 2, 5]\r\n    -3    | -4    | [1, 3, 2, 4, 5]\r\n```\r\n\r\n### useMap\r\n\r\n```jsx\r\nconst { value, set } = useMap([[\"key\", \"value\"]]);\r\nconst { value: anotherValue, remove } = useMap(new Map([[\"key\", \"value\"]]));\r\n```\r\n\r\nActions:\r\n\r\n- `set`\r\n- `delete`\r\n- `clear`\r\n- `initialize` - applies tuples or map instances\r\n- `setValue`\r\n\r\n### useSetState\r\n\r\n```jsx\r\nconst { state, setState, resetState } = useSetState({ loading: false });\r\nsetState({ loading: true, data: [1, 2, 3] });\r\nresetState()\r\n```\r\n\r\nMethods:\r\n\r\n- `setState(value)` - will merge the `value` with the current `state` (like this.setState works in React)\r\n- `resetState()` - will reset the current `state` to the `value` which you pass to the `useSetState` hook\r\n\r\nProperties:\r\n\r\n- `state` - the current state\r\n\r\n### usePrevious\r\n\r\nUse it to get the previous value of a prop or a state value.\r\nIt's from the official [React Docs](https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state).\r\nIt might come out of the box in the future.\r\n\r\n```jsx\r\nconst Counter = () => {\r\n  const [count, setCount] = useState(0);\r\n  const prevCount = usePrevious(count);\r\n  return (\r\n    <h1>\r\n      Now: {count}, before: {prevCount}\r\n    </h1>\r\n  );\r\n};\r\n```\r\n\r\n## Migration from v1 to v2\r\n\r\n- Migration to array based API is a bit more complex but recommended (especially if you're using ESLint rules for hooks).\r\nTake a look at [this section](./README-ARRAY.md#migration-from-object-to-array-based) in array API docs.\r\n- All lifecycle helpers are removed. Please replace `useOnMount`, `useOnUnmount` and `useLifecycleHooks` with `useEffect`.\r\nThis:\r\n```javascript\r\nuseOnMount(() => console.log(\"I'm mounted!\"))\r\nuseOnUnmount(() =>  console.log(\"I'm unmounted\"))\r\n// OR\r\nuseLifecycleHooks({\r\n  onMount: () => console.log(\"I'm mounted!\"),\r\n  onUnmount: () => console.log(\"I'm unmounted!\")\r\n})\r\n```\r\nto:\r\n```javascript\r\nuseEffect(() => {\r\n  console.log(\"I'm mounted!\");\r\n  return () =>  console.log(\"I'm unmounted\");\r\n}, []);\r\n```\r\n- `bind` and `bindToInput` are got renamed to `valueBind` and `eventBind` respectively on `useInput` hook\r\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@2.3.0-0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-s/g8iKnNX6zT4fMoautBHOxzrynl+q01DH7X/IPoGoPcVLIrYQYZByDJ6gZaoE0wt7f9ig8FhpnSYLfaoO/6eg==","shasum":"1e518209c3bf42e3982ad370b9620a74a74aaf07","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-2.3.0-0.tgz","fileCount":117,"unpackedSize":109758,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJenI2xCRA9TVsSAnZWagAAB0QP/1x5CgLHtjeVDij8TBJd\nJnBJJuJRhhpsAPzpRtfUP+x8+yjrQFlCiYzkzn4K+Vy+XKJ60PLEKXFiKI/j\n0oLPXwovkjsnx8rv8wmYFZIjZC9+Wu7IuMmHQJPhFKCfDJHlrkozyM0eyayn\nLcK1WWc3Nel5Q0WMVBOnUam2xbxLxgTrueVz84lylHcSQcPHTs0P59tDbO2c\nQ7tFJhTma3N3jk03udRAXKlHb30NYHhw+JeI3O5O5XfrwvpK7xIIPrcxRluj\nGVj213AjPR7yU5+r5tyInysnMZMhmBKRToaneHRLOwbaIjHjqmVqDD0ZcIDx\nV8yyBPG0lzWNPlIMGELR6C/i6VdkB5zAx/5KJf9wH0Nm2YLVmeCVu3Q97NKC\n38Dyf9XSjFBoEB8F2Dn/pqY6UkqGP6NSkTcVy768N5TV5vY3QaF3j1RSOnyo\nBhv7F6q3+L/e1nb9AAFR/TQLp1O8bQpp2L8aylDZCc7f8QD8K3G0pHtlX4kj\n3dHS2KIk4SLTe+7xfEseDD7YNfUVpYRdnozfAtkGA/+uCOs69wyykLwgecAb\nUgxKgBsq7ce9YsaSRK81cz47ItJs1POA4TKScMoCHkKIRjdL1L8vyVOsAwRD\nC1uej4zfCnfJDapz6nz/oJNdZhU9PjaE7309iUEhDbC2z4oZQLruseln+0m1\n9R45\r\n=C1Af\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDIg7B13wmXQcjjLeg02sVpkrxYnNvr87Ih5zIldFS/mAiEAoFnVLuw5HrSMFygKfEitF2BG5MN7wI0MlYQKixNrQTw="}]},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"}],"_npmUser":{"name":"rip21","email":"puha212@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_2.3.0-0_1587318193273_0.5903690830237169"},"_hasShrinkwrap":false},"2.3.2":{"name":"react-hanger","version":"2.3.2","description":"Set of a helpful hooks, for different specific to some primitives types state changing helpers","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"sideEffects":false,"contributors":[{"name":"Andrii Los","email":"puha212@gmail.com","url":"https://github.com/RIP21"}],"main":"./index.js","module":"./esm/index.js","typings":"./index.d.ts","scripts":{"lint":"eslint ./src --ext ts,tsx --max-warnings 0","lint:fix":"yarn lint --fix","test":"jest src","test:watch":"yarn test -- --watch","build:esm":"tsc","build:cjs":"tsc -p tsconfig-require.json","clean":"rimraf lib","build":"yarn build:esm && npm run build:cjs","postbuild":"node copyPackageJsonAndReadme.js","postversion":"yarn clean && yarn build","release":"np --contents lib --no-yarn"},"peerDependencies":{"react":">16.8.0","react-dom":">16.8.0"},"devDependencies":{"@testing-library/react":"^8.0.5","@testing-library/react-hooks":"^1.1.0","@types/jest":"^25.2.1","@types/react":"^16.9.34","@typescript-eslint/eslint-plugin":"2.28.0","@typescript-eslint/parser":"2.28.0","babel-eslint":"10.1.0","eslint":"6.8.0","eslint-config-prettier":"6.10.1","eslint-config-react-app":"5.2.1","eslint-plugin-flowtype":"4.7.0","eslint-plugin-import":"2.20.2","eslint-plugin-jsx-a11y":"6.2.3","eslint-plugin-prettier":"3.1.3","eslint-plugin-react":"7.19.0","eslint-plugin-react-hooks":"2.5.1","jest":"^25.3.0","np":"6.2.1","prettier":"2.0.4","react":"^16.13.1","react-dom":"^16.13.1","react-test-renderer":"^16.13.1","rimraf":"^3.0.2","ts-jest":"^25.4.0","typescript":"^3.8.3"},"favoriteScripts":["test:watch"],"bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@2.3.2","_nodeVersion":"14.15.4","_npmVersion":"6.14.10","dist":{"integrity":"sha512-z7Sb1eFited7yuO2qDe4+R4oVHhVv/pZJ1V9SvFbc9+abaZlg5lRQRK7hHWpdKeeq63H5pvajMrnZUzc1lBZYg==","shasum":"d1c6e16a866457bf00ba7bbb4b1bfbc8acee1108","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-2.3.2.tgz","fileCount":117,"unpackedSize":112095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEZB2CRA9TVsSAnZWagAApDMP/iFm8SJ/KMYCVez/BjBL\n7le6DpWfRYQp7ekvoC43bISsmzzvY+IjiyhU9DVfx3I7mVi3W+cvNn17IZz7\nb8KdiqJgicr1i1nKeVa4Y7fBRDf6dpLqrKYTD6dzWsN1Lb3Q1u8+8iph2H7H\nUWde6ndmOdTmsVlSK1/NM4lhkiEkWqmvPsk5niIFkqLOQcBzhdUUgkz+AAXc\nLiSFmcUx6JHKHHWZjxyUvRCavJcBzTj76WQ1EWOWFZOm1Hza1M3Vt/7yICif\nM8dyySLdGHI4qoAWuanLdJacmTNBs6QNWij+9xvrIbWElDIVr71jhFPHvyh1\ns4Rh7I4Ylswf7+8srQn/yGHWpnkTfnHNx0CcnYfS1ei/sIi3LNE+nwjEQcEz\nUwhRIfTkrlFnfQ0HCxlRGSxp+W0hUusrBxArfN18HhMZWNe0WsYbm11VxXDK\nXlUoehsaWFqEjYLGc1Z49XM7LbONqlXIhH6o88SEJWFRqAwVfYu0+gF50Iqv\nh9Q66HOZx7BRnFYQsSgCSlr/RRYhAd7+9Rh/L950dcZTDb2ZKUWUXZVzD2fm\nNlqEiBWP0kget+hlK/BOlsvejzaiIAbFZ6OgA2kxRwjTdaBnNSyjwKIBCLg5\nQhSKwx5M9Genv3QbdaLql7F8HC4OEWMKv9ql9y2gyakRDKYxsGI6M3pFePg8\nAzNj\r\n=/zuP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBTv6ooj6bH6bAJTizweaTK149ebAtg9/UtS9wpWqBbaAiEA5NziiUhztVKKIBJMpKPCaF3uds2z20wTp2tCtD8dwxY="}]},"_npmUser":{"name":"rip21","email":"puha212@gmail.com"},"directories":{},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"},{"name":"rip21","email":"puha212@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_2.3.2_1611763830359_0.7476269373881204"},"_hasShrinkwrap":false},"2.4.0":{"name":"react-hanger","version":"2.4.0","description":"Set of a helpful hooks, for different specific to some primitives types state changing helpers","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"sideEffects":false,"contributors":[{"name":"Andrii Los","email":"puha212@gmail.com","url":"https://github.com/RIP21"}],"main":"./index.js","module":"./esm/index.js","typings":"./index.d.ts","scripts":{"lint":"eslint ./src --ext ts,tsx --max-warnings 0","lint:fix":"yarn lint --fix","test":"jest src","test:watch":"yarn test -- --watch","build:esm":"tsc","build:cjs":"tsc -p tsconfig-require.json","clean":"rimraf lib","build":"yarn build:esm && yarn build:cjs","postbuild":"node copyPackageJsonAndReadme.js","postversion":"yarn clean && yarn build","release":"np --contents lib --no-yarn"},"peerDependencies":{"react":">16.8.0","react-dom":">16.8.0"},"devDependencies":{"@testing-library/react":"^8.0.5","@testing-library/react-hooks":"^1.1.0","@types/jest":"^25.2.1","@types/react":"^17.0.3","@typescript-eslint/eslint-plugin":"4.22.0","@typescript-eslint/parser":"4.22.0","babel-eslint":"10.1.0","eslint":"7.24.0","eslint-config-prettier":"8.2.0","eslint-config-react-app":"6.0.0","eslint-plugin-flowtype":"5.7.1","eslint-plugin-import":"2.22.1","eslint-plugin-jsx-a11y":"6.4.1","eslint-plugin-prettier":"3.4.0","eslint-plugin-react":"7.23.2","eslint-plugin-react-hooks":"4.2.0","jest":"^25.3.0","np":"6.2.1","prettier":"2.2.1","react":"^16.13.1","react-dom":"^16.13.1","react-test-renderer":"^16.13.1","rimraf":"^3.0.2","ts-jest":"^25.4.0","typescript":"^4.2.4"},"favoriteScripts":["test:watch"],"bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@2.4.0","_nodeVersion":"14.15.4","_npmVersion":"6.14.10","dist":{"integrity":"sha512-m6kw/uKza/pz+dMaRjz3UscCfGUKGTFWyoDG5jxYGOq8ZbpCHLlakcpXbeE8rXgkdmj0oky1oJpsUx4er4v8uw==","shasum":"20bc28830a54d619a37af90f48494fda884c841d","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-2.4.0.tgz","fileCount":201,"unpackedSize":156873,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggYkYCRA9TVsSAnZWagAAKegP/ik0/YyL9PT8FHD9enm3\nYl8dyJz3AlPLlqoQZqyMXRwoJD4tKcDSC9eUBNV1WT9bcQJ76jj95emU04dE\n+9FPS4t1k/JW0ZG9SijVxspycXY0pyd/ZL4PhvRQFRd1DhOtw3MAUEyd3WQd\n3UPTmY/ESjFIj7MeU60u4hLLQHaCyH3f22Wev3U2peTtUgUqKUGSRYpcnbr8\nFgvyl+UEuJlX8zxj9irwAxmg7Ykh9I9ERDcdgGgCAGvPNFCTXL0gPC9+7RkR\nNrRmTdYmlJne+rRr9UjMfgU35BqNvcnqxTgK4ixKuU94yiAWMeDozHAS/VfK\ngZC12rT6d8+fWSyRqmWuHwKwMSYGI2ZGPCSMruAT5HWT7LwMLNehAP4WGFSD\n2tSSzh3h3LXikgt9tzv/efGwj1fZVh8MUGADQsW4jaXPG582Yksc8cyR6cgx\nyDLyN01h2/XBhuT3x8Ho9AxC4xIaXzeyDA3SekmBFYpYN53jLcxTRDMoHjzo\n23vELaIYFgzUwREQsXJo62MViuUnZzxNpBAoIuIGVeLWg99XFXenhw5K0QVe\nz+5iCnD3QNYgbHfudOYxiaMMDojaiPyICBNyN7ph10eR5ppJcMYo6eT93IQt\noZ5UPZu1ZrKfOlH7pOlV0KloiuK5JaTYVTw3KsWmBTzoxAwPAuigOXQ5qm7d\nkvDY\r\n=vVxu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID5Q77msRWTgnCSGzhx9ODsb3LcWZxejoXua6nFYim1GAiBTSewoWvQLGLse8DCGMewEhwmXTH1o43QG6blB2Vo/7Q=="}]},"_npmUser":{"name":"rip21","email":"puha212@gmail.com"},"directories":{},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"},{"name":"rip21","email":"puha212@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_2.4.0_1619101975680_0.005616629490670988"},"_hasShrinkwrap":false},"2.4.1":{"name":"react-hanger","version":"2.4.1","description":"Set of a helpful hooks, for different specific to some primitives types state changing helpers","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"sideEffects":false,"contributors":[{"name":"Andrii Los","email":"puha212@gmail.com","url":"https://github.com/RIP21"}],"main":"./index.js","module":"./esm/index.js","typings":"./index.d.ts","scripts":{"lint":"eslint ./src --ext ts,tsx --max-warnings 0","lint:fix":"yarn lint --fix","test":"jest src","test:watch":"yarn test -- --watch","build:esm":"tsc","build:cjs":"tsc -p tsconfig-require.json","clean":"rimraf lib","build":"yarn build:esm && yarn build:cjs","postbuild":"node copyPackageJsonAndReadme.js","postversion":"yarn clean && yarn build","release":"np --contents lib --no-yarn"},"peerDependencies":{"react":">16.8.0","react-dom":">16.8.0"},"devDependencies":{"@testing-library/react":"^8.0.5","@testing-library/react-hooks":"^1.1.0","@types/jest":"^25.2.1","@types/react":"^17.0.3","@typescript-eslint/eslint-plugin":"4.22.0","@typescript-eslint/parser":"4.22.0","babel-eslint":"10.1.0","eslint":"7.24.0","eslint-config-prettier":"8.2.0","eslint-config-react-app":"6.0.0","eslint-plugin-flowtype":"5.7.1","eslint-plugin-import":"2.22.1","eslint-plugin-jsx-a11y":"6.4.1","eslint-plugin-prettier":"3.4.0","eslint-plugin-react":"7.23.2","eslint-plugin-react-hooks":"4.2.0","jest":"^25.3.0","np":"6.2.1","prettier":"2.2.1","react":"^16.13.1","react-dom":"^16.13.1","react-test-renderer":"^16.13.1","rimraf":"^3.0.2","ts-jest":"^25.4.0","typescript":"^4.2.4"},"favoriteScripts":["test:watch"],"bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@2.4.1","_nodeVersion":"14.15.4","_npmVersion":"6.14.10","dist":{"integrity":"sha512-7/8bOKDMKQ8DufpKXvq8+HURAB50pODBFJ9oDDOj6SQqmlIGXstWT9anZprNi78c9DEdvKmW62mm8OImwiNS8A==","shasum":"c9dfaf917f26b0b9dccc147c339a8dc3d3e038a2","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-2.4.1.tgz","fileCount":201,"unpackedSize":156885,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggbCFCRA9TVsSAnZWagAASrAP/iSC70MHvs8dyaGvXFyB\nfAg5gR5jPMlPjgq1CUM5lxb61DY9S+R5wVTYmIWJraBjoBJczrM7skakr3Kp\n9yYOoSh+f7zZEZxha0/pwqsV0dZ4BHtN5t+GDUHriK6cokbiHimKdn99xk6r\njLxIuv5bbl8mNF7D1kDpF3JRgqeIbtIeNMirbJQZ6lsmnZXUCf2bvUlMHOZ5\nRu+CUb4x8H0fL9HotW7pMX0ck/MwK3qd8wecXFPc04PiIae84tgZEw+p6j+b\nep593HdGyMQg1uz/cDt1X1zWr+qL86knK1mnTIPw1tY1V683GdWyN/VvEqNY\noVQdOg2IdgiVxKXUi9mzTw0kSGRmCBoN1pOs1pSJj67Gqi4znc8qFzVQ3QwG\ntJfahEdMBbC0xM3N6/rpm7Df56F9C+sqSKZiA8xkuTPrPgxDArqcIC2Csn5S\nlhQNV4g0S9Kdcxg7+iJCv0ooYonYMQvRLpt8tStzJjD7ism7d0bQ/nVNVm8x\nhKGT5+Akfv90hl2dsMQXzkO4hh72K+IyCwASBZhjf3U+9ufXJRm9x8KdeUX2\n8wZXnu89NWCh6agYJcGSUu2z++6hMwVIuwty10jscplnyp9dLO7aO/RlIEd6\nrtnBtuR7IhLtDdJi7F2TTdcZVNuTF7GDw6ydlw8g+vJx8WTgdGYG7n7Eim2K\nOSAS\r\n=OUDq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDpY0P7QXyK8Q26AaB4qjFthhrOvfuyYOgHhtShieY1pwIgFrh1x6G2gchv3KiBOBl4k5i9KyOFgeXeG/fklOUZ2Nc="}]},"_npmUser":{"name":"rip21","email":"puha212@gmail.com"},"directories":{},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"},{"name":"rip21","email":"puha212@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_2.4.1_1619112069165_0.6872734183562927"},"_hasShrinkwrap":false},"2.4.2":{"name":"react-hanger","version":"2.4.2","description":"Set of a helpful hooks, for different specific to some primitives types state changing helpers","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"sideEffects":false,"contributors":[{"name":"Andrii Los","email":"puha212@gmail.com","url":"https://github.com/RIP21"}],"main":"./index.js","module":"./esm/index.js","typings":"./index.d.ts","scripts":{"lint":"eslint ./src --ext ts,tsx --max-warnings 0","lint:fix":"yarn lint --fix","test":"jest src","test:watch":"yarn test -- --watch","build:esm":"tsc","build:cjs":"tsc -p tsconfig-require.json","clean":"rimraf lib","build":"yarn build:esm && yarn build:cjs","postbuild":"node copyPackageJsonAndReadme.js","postversion":"yarn clean && yarn build","release":"np --contents lib --no-yarn"},"peerDependencies":{"react":">16.8.0","react-dom":">16.8.0"},"devDependencies":{"@testing-library/react":"^8.0.5","@testing-library/react-hooks":"^1.1.0","@types/jest":"^25.2.1","@types/react":"^17.0.3","@typescript-eslint/eslint-plugin":"4.22.0","@typescript-eslint/parser":"4.22.0","babel-eslint":"10.1.0","eslint":"7.24.0","eslint-config-prettier":"8.2.0","eslint-config-react-app":"6.0.0","eslint-plugin-flowtype":"5.7.1","eslint-plugin-import":"2.22.1","eslint-plugin-jsx-a11y":"6.4.1","eslint-plugin-prettier":"3.4.0","eslint-plugin-react":"7.23.2","eslint-plugin-react-hooks":"4.2.0","jest":"^25.3.0","np":"6.2.1","prettier":"2.2.1","react":"^16.13.1","react-dom":"^16.13.1","react-test-renderer":"^16.13.1","rimraf":"^3.0.2","ts-jest":"^25.4.0","typescript":"^4.2.4"},"favoriteScripts":["test:watch"],"bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@2.4.2","_nodeVersion":"14.15.4","_npmVersion":"6.14.10","dist":{"integrity":"sha512-rSjnXnM0rIrnWxguN6OWWnVn9pUwQOpoHG9Wwq5KSDJlij1jixQ4zleNw5Mryx+gWcASbeTAgvtkq0dgrNQTSA==","shasum":"6afef1c05c0a3b26a69c62a47a85537509b71bf4","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-2.4.2.tgz","fileCount":201,"unpackedSize":156889,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgg1JnCRA9TVsSAnZWagAAZSgP/2Cv02ui5+6M2dsHOY0U\nWlZijKjdHOV6C+PNpRyGPJjm9qjQc1GgPj3qDLQov420gVanKtDYl4fRB2Ai\nFxbCO87jHKLtptbctPPUlR+ZAJAIzzUf6mdjTQdvcG6PdTMKtDRd2ty584Sg\nIsbcnedCSW4t1owqtYjbliLeYIzjV9tIQXb/VAENQuKTtufyhMEpZU4vAV76\nXnRZPnGuT0HCwpHYT6gq3vrAXcy1KltunTrXhWdoY7CP2+ip/zXe3Ja6/5z0\nmRlsts79Jrx5YB6gIY1vWBs3U85K19QHGV+5Mj5t+oLPk0bM0rgRoFXPgFhc\n3mn/BDUSPMse29ANjcZaiMw2G973wTRASQr4T9JVS8rDRC6/NP9JRHffciWC\ngRK7Tf+8j21tABCyvT2zLVL2vr9nskrLcu+NjhKIrcwg5f+WkqQ6cWW9pNM8\n+NqRpHBWi2qVGIhYIjSyc3Q4aNopvABxI6uA2V0c+41xyDV2KKzyPh+cAq2O\nVeLV0aqxRF+d3h9sEPVK0SBelMp5LrMnw1Oj3UpXJx5axzi3ds0uZmcX/6iL\n/gCQ7X2YMtMcFA48l/hk18gobWVhGoX30YuFKnBmted5rTfaGvuUbOTLn8WI\nYryhYx33C1UvK6BxlRbxJ2HA2ccixzIwrWdimwr9kQpWMck/Q+9Pou4DKDcF\nKvTv\r\n=w+og\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAgDtkHIjcYpqi6PlorJjb4fyTT4egjO4bfzcPg/8m0bAiAP5SzcPCb0xcLbm7sKe8MZz8WeClsrEM6uVf/sQ3aMxg=="}]},"_npmUser":{"name":"rip21","email":"puha212@gmail.com"},"directories":{},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"},{"name":"rip21","email":"puha212@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_2.4.2_1619219046301_0.12154954885557134"},"_hasShrinkwrap":false},"2.4.3":{"name":"react-hanger","version":"2.4.3","description":"Set of a helpful hooks, for different specific to some primitives types state changing helpers","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"sideEffects":false,"contributors":[{"name":"Andrii Los","email":"puha212@gmail.com","url":"https://github.com/RIP21"}],"main":"./index.js","module":"./esm/index.js","typings":"./index.d.ts","scripts":{"lint":"eslint ./src --ext ts,tsx --max-warnings 0","lint:fix":"yarn lint --fix","test":"jest src","test:watch":"yarn test -- --watch","build:esm":"tsc","build:cjs":"tsc -p tsconfig-require.json","clean":"rimraf lib","build":"yarn build:esm && yarn build:cjs","postbuild":"node copyPackageJsonAndReadme.js","postversion":"yarn clean && yarn build","release":"np --contents lib --no-yarn"},"peerDependencies":{"react":">16.8.0","react-dom":">16.8.0"},"devDependencies":{"@testing-library/react":"^8.0.5","@testing-library/react-hooks":"^1.1.0","@types/jest":"^25.2.1","@types/react":"^17.0.3","@typescript-eslint/eslint-plugin":"4.22.0","@typescript-eslint/parser":"4.22.0","babel-eslint":"10.1.0","eslint":"7.24.0","eslint-config-prettier":"8.2.0","eslint-config-react-app":"6.0.0","eslint-plugin-flowtype":"5.7.1","eslint-plugin-import":"2.22.1","eslint-plugin-jsx-a11y":"6.4.1","eslint-plugin-prettier":"3.4.0","eslint-plugin-react":"7.23.2","eslint-plugin-react-hooks":"4.2.0","jest":"^25.3.0","np":"6.2.1","prettier":"2.2.1","react":"^16.13.1","react-dom":"^16.13.1","react-test-renderer":"^16.13.1","rimraf":"^3.0.2","ts-jest":"^25.4.0","typescript":"^4.2.4"},"favoriteScripts":["test:watch"],"gitHead":"74464891f638ef28ddca4e9e6f1addc03607585b","bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@2.4.3","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-R5aYYODzusD2t28PZo/muxI6M/QLq6tdxrcKt2+STor35FY27xwweEElsqeQSh5K/37mypG8bTUUYpWDsin/Gg==","shasum":"186eced96efb048baa83971d6be25a3793003e54","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-2.4.3.tgz","fileCount":48,"unpackedSize":83450,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg+BXHCRA9TVsSAnZWagAAviEP/in7gVGL7OnfFvwZryGR\nVTl+51JNoQEVJf0ujb7lGdo15VxJnZCaNMyOhBYzX0OyWS7rF7uXBi9so8hP\ncJvgxbLzfaKADu+y8BBTRSx7CeCr6M6ZMetkcYJzu3VtltQVqc10hJDKlIxC\nd/NVRhl3I/VpuqT/Q4P2I1AkyQslGS+TM/sNBaJQ2NTai2BOUSiaeHtUW9J5\ncc36eMHvePF+aivNPkVrFz0acxzFu1XaBFooAozmvy9f9sgKRqLVLOkcwvPS\n64hKIkvEDZT/CMKPFAAC3+jGL+1u0q2FavSIQyxQbWTzJHaSrHwFfWNzUcGm\nVmBF8ZxGr0vu9U+t65DbgLEnOH9DVRGBo81T2+87yEaYDkJrUlUfSAzZHvHn\nQ/tSijoIesvBJXC1zbrSu54MMmBnqh7xocEIY4IlIDvZysT07S+HcmphSZZJ\ntFY6QmOMd08DYJwuGFR0yGUVbQd8dDUFZu+Th5S22fWkjY6wrM8+LCdPlj4X\nfmevJfgkjwgWJIHcPRjooJbwXsoZuVIH1DwQSXeqwXY+Rd7z5SdwnaN4YyCQ\nty+SlSPbY/JPn4qzLBiarB1LkyS7WhbZbw2J/eQLtuWI5DK4KBKJDWbOCtOr\nml/97fxnAlQCoDSs8YhBF6GSCuFu1eM5FpdgJR3B4yXVyZLewZHXXq0AgMhy\nwkvh\r\n=iF2f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDt5bnqKXPiDagSQkp+51bJwL+Vq7szO8Z6TuS/GqUHdAiAVbvAWQKSi7CtVylOnqyPKH2WHY7jdVCf2bMmeEHicfQ=="}]},"_npmUser":{"name":"rip21","email":"puha212@gmail.com"},"directories":{},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"},{"name":"rip21","email":"puha212@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_2.4.3_1626871239737_0.2521591845409217"},"_hasShrinkwrap":false},"2.4.4":{"name":"react-hanger","version":"2.4.4","description":"Set of a helpful hooks, for different specific to some primitives types state changing helpers","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"sideEffects":false,"contributors":[{"name":"Andrii Los","email":"puha212@gmail.com","url":"https://github.com/RIP21"}],"main":"./index.js","module":"./esm/index.js","typings":"./index.d.ts","scripts":{"lint":"eslint ./src --ext ts,tsx --max-warnings 0","lint:fix":"yarn lint --fix","test":"jest src","test:watch":"yarn test -- --watch","build:esm":"tsc","build:cjs":"tsc -p tsconfig-require.json","clean":"rimraf lib","build":"yarn build:esm && yarn build:cjs","postbuild":"node copyPackageJsonAndReadme.js","postversion":"yarn clean && yarn build","release":"np --contents lib --no-yarn"},"peerDependencies":{"react":">16.8.0","react-dom":">16.8.0"},"devDependencies":{"@testing-library/react":"^8.0.5","@testing-library/react-hooks":"^1.1.0","@types/jest":"^25.2.1","@types/react":"^17.0.3","@typescript-eslint/eslint-plugin":"4.22.0","@typescript-eslint/parser":"4.22.0","babel-eslint":"10.1.0","eslint":"7.24.0","eslint-config-prettier":"8.2.0","eslint-config-react-app":"6.0.0","eslint-plugin-flowtype":"5.7.1","eslint-plugin-import":"2.22.1","eslint-plugin-jsx-a11y":"6.4.1","eslint-plugin-prettier":"3.4.0","eslint-plugin-react":"7.23.2","eslint-plugin-react-hooks":"4.2.0","jest":"^25.3.0","np":"6.2.1","prettier":"2.2.1","react":"^16.13.1","react-dom":"^16.13.1","react-test-renderer":"^16.13.1","rimraf":"^3.0.2","ts-jest":"^25.4.0","typescript":"^4.2.4"},"favoriteScripts":["test:watch"],"bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@2.4.4","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-2sHrQBw8TrWsthby9aofhmYrg/ovva9zQXEROmEoQASWYAlwQvJdrJ7EfBZ1NddKzHm8CUM4RiPvMRkhWFsi/A==","shasum":"daf72b5aac2a247dc04cfbfd4140f10a6e1da28c","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-2.4.4.tgz","fileCount":201,"unpackedSize":156884,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg/rl3CRA9TVsSAnZWagAAFwYQAKPJ9S92kNDRONwREiIp\nuEy+XpFoTuHdNNDpZWVsiTp9MKgy2uv7bZawUVd0okprPdIBKZzmE0ApF3jN\nU65MhOVHEQjtdt/Vnj6lnW1xOqN5UkRXd2XblPuRLgh+pVsohGM4uAJilQ0U\nMA3o5keZBTkuKffJzdlBrl0P/xwxOFO195ig2+kETPNyRoYQn+R2+KEuM81o\nxzzORA2Av8xw6dlrh3f1DpuiCeCa8chIH7l44ys8ajQq1YsAYHm/HIfVhoOe\n9Q1Gk7N+iq56ntiBBGON50+k85MpIy98EPgJRkyde90CQKr0lM/lFdAxbtjP\nVfiO9169lQI9naPrUg68TcQ7rIGbs80FqYAMM1ca0LJwd3gCv7NW8WWIXb+Y\nUJCBMIlbZfZP5T2XOScx0wF6Yq08qcQ4COvxACHsncN0ue2P/FENC/rYV5q0\n+klS5ICVJQ2IO4EgHYb67jGNOwlxquDpJ+ly03MgK78Kf/Btcj6bVffB1TcE\n8PUWdSWlareB43lm5nlBIaCRZcHAA/YLx72+KgduIhXci0Hf1W9Epo+aSLec\nPmeCpcuUAB44o+DzRgUdVJZdsMFDtMq+Sg1J1VRLDKqTXKPhpadmjOiQleok\nJ1WgaLEhmzZSGSG8Rp1Slq1aZhMt+ZvNISBscZrvN6oCmGZqswmxs8S3NlWr\nO3Ui\r\n=JlYJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDroJQS6CPKT7smZM1n33P/r/TMgQVch0o717KgwafjAAIga+2xq05uNBftZLFnUcpqfpKXw7aEa16Dp/E/fp47cKc="}]},"_npmUser":{"name":"rip21","email":"puha212@gmail.com"},"directories":{},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"},{"name":"rip21","email":"puha212@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_2.4.4_1627306358913_0.6527490259471496"},"_hasShrinkwrap":false},"2.4.5":{"name":"react-hanger","version":"2.4.5","description":"Set of a helpful hooks, for different specific to some primitives types state changing helpers","author":{"name":"kitze"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"sideEffects":false,"contributors":[{"name":"Andrii Los","email":"puha212@gmail.com","url":"https://github.com/RIP21"}],"main":"./index.js","module":"./esm/index.js","typings":"./index.d.ts","peerDependencies":{"react":">16.8.0","react-dom":">16.8.0"},"devDependencies":{"@testing-library/react":"^8.0.5","@testing-library/react-hooks":"^1.1.0","@types/jest":"^25.2.1","@types/react":"^17.0.3","@typescript-eslint/eslint-plugin":"4.22.0","@typescript-eslint/parser":"4.22.0","babel-eslint":"10.1.0","eslint":"7.24.0","eslint-config-prettier":"8.2.0","eslint-config-react-app":"6.0.0","eslint-plugin-flowtype":"5.7.1","eslint-plugin-import":"2.22.1","eslint-plugin-jsx-a11y":"6.4.1","eslint-plugin-prettier":"3.4.0","eslint-plugin-react":"7.23.2","eslint-plugin-react-hooks":"4.2.0","jest":"^25.3.0","np":"6.2.1","prettier":"2.2.1","react":"^16.13.1","react-dom":"^16.13.1","react-test-renderer":"^16.13.1","rimraf":"^3.0.2","ts-jest":"^25.4.0","typescript":"^4.2.4"},"favoriteScripts":["test:watch"],"scripts":{"lint":"eslint ./src --ext ts,tsx --max-warnings 0","lint:fix":"yarn lint --fix","test":"jest src","test:watch":"yarn test -- --watch","build:esm":"tsc","build:cjs":"tsc -p tsconfig-require.json","clean":"rimraf lib","build":"yarn build:esm && yarn build:cjs","postbuild":"node copyPackageJsonAndReadme.js","postversion":"yarn clean && yarn build","release":"np --contents lib --no-yarn"},"bugs":{"url":"https://github.com/kitze/react-hanger/issues"},"homepage":"https://github.com/kitze/react-hanger#readme","_id":"react-hanger@2.4.5","_integrity":"sha512-4OdWmLiYUpYDlPuK69/1HN1Sfqb1MdkOhP9a6MqGK+dqNhHNGteBnb6OINbOXFKITUqVfZong6Q7gfmnTwHHMQ==","_resolved":"/private/var/folders/d_/l_3qlmwj6536g7v09r5vbcnw0000gn/T/bd9bdd9882bcecdcdade0caf567442a8/react-hanger-2.4.5.tgz","_from":"file:react-hanger-2.4.5.tgz","_nodeVersion":"16.16.0","_npmVersion":"8.11.0","dist":{"integrity":"sha512-4OdWmLiYUpYDlPuK69/1HN1Sfqb1MdkOhP9a6MqGK+dqNhHNGteBnb6OINbOXFKITUqVfZong6Q7gfmnTwHHMQ==","shasum":"d6850cae1ed7fcf075a0294cff2796b9a05bc008","tarball":"https://registry.npmjs.org/react-hanger/-/react-hanger-2.4.5.tgz","fileCount":201,"unpackedSize":157243,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLNegyf0jHfFLjKRJWOsmeGgniPeIUZixgD7JHqblb5AIga0DpX0T+nGVsk9+e15BecqYHuJBg1lvAH1FxU68zUvc="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjONTZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo/Bg/+JvrpRN+HVre4HPa5IyjBoE/F3d01iuIDxLn4dKYJJc7b2tPz\r\n8fc0KV0aNHkbuAbUBwZ2uupeCh9ncoaY4/bjGeX5biBJ43tVGGxhXFfFYR/F\r\nwyJlUfIUHHhMvuEcdKqYvgALTgSV08hYrFTpFdkgAQdTUDT6PEgrgWSAN4Kd\r\nx+WewIJ5ncWbq4DlVg0CVyuEvJVdyAYt1AiS82UhAv6GX6Zzm7Mz07Er2VyO\r\nklF9Z8EFTQIxoaMDVpKIacNByohv9n/Hs3Qbfpk9iKzgX29P3UhtT6iyVMvG\r\nrtH0tiw3XPlExPWq2XvmjsN6rhM5wdIj7fJu59HSpfUNP0YElGRhy+ewsmm0\r\nEaw0O3aoMxa3ACah1ZZqysGJ8tA8PzLF5wfsgEzxOEGosey7bbmXtopDfIWr\r\nlIfVpsqiwlJ69ZHFh6uIhI1QmHpBgLO7R7DL573GP3pQPG/q5pIGGAQp1r8F\r\nx+9kKB9V1DjQn+f992M0RI6sFN1GNd0EyIOIH1/kiwgWJD2iDIqtTgO6AwYg\r\nquvuPMJD2ng0uNbgFlBnlru1fTMF42GMmexFQBtp6iyorSQrLudPSgAHcRvQ\r\n5Q12bNy2xZDEQqrHAuyfC1e9+QVRMKqpCCbHF3uGsNZZL9mmx+cuuQWcK3x5\r\nfsIxHxJcsv6YxubbLh0IVZo5tbZaGp6AjOE=\r\n=bDdg\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"rip21","email":"puha212@gmail.com"},"directories":{},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"},{"name":"rip21","email":"puha212@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-hanger_2.4.5_1664668889420_0.48071194733967304"},"_hasShrinkwrap":false}},"time":{"created":"2018-10-26T13:33:44.590Z","1.0.0":"2018-10-26T13:33:44.695Z","modified":"2022-10-02T00:01:29.715Z","1.0.1":"2018-10-26T14:02:30.234Z","1.0.2":"2018-10-26T14:15:50.605Z","1.0.3":"2018-10-26T14:59:48.863Z","1.0.4":"2018-10-26T15:09:21.899Z","1.0.5":"2018-10-26T15:57:32.547Z","1.0.6":"2018-10-27T08:34:16.318Z","1.0.7":"2018-10-28T08:09:27.751Z","1.0.8":"2018-10-29T04:46:06.578Z","1.1.0":"2019-01-02T08:00:06.729Z","1.1.1":"2019-01-02T16:20:30.397Z","1.1.2":"2019-01-31T07:46:21.320Z","1.1.4":"2019-02-22T18:56:23.199Z","1.2.0":"2019-04-08T23:04:23.944Z","2.0.0-beta.1":"2019-04-29T22:29:50.668Z","2.0.0-beta.2":"2019-04-29T22:34:15.630Z","2.0.0-beta.3":"2019-04-29T22:56:27.621Z","2.0.0-beta.4":"2019-04-29T23:42:07.833Z","2.0.0":"2019-04-30T08:37:51.358Z","2.1.0":"2019-07-16T17:32:14.056Z","2.1.1":"2019-09-09T12:56:25.697Z","2.1.2":"2019-09-10T12:28:14.521Z","2.1.3":"2019-09-10T13:26:40.542Z","2.2.0":"2020-04-19T16:05:58.153Z","2.2.1":"2020-04-19T16:59:11.946Z","2.3.0-0":"2020-04-19T17:43:13.410Z","2.3.2":"2021-01-27T16:10:30.498Z","2.4.0":"2021-04-22T14:32:55.835Z","2.4.1":"2021-04-22T17:21:09.359Z","2.4.2":"2021-04-23T23:04:06.437Z","2.4.3":"2021-07-21T12:40:39.916Z","2.4.4":"2021-07-26T13:32:39.132Z","2.4.5":"2022-10-02T00:01:29.628Z"},"maintainers":[{"name":"kitze","email":"kristijan.mkd@gmail.com"},{"name":"rip21","email":"puha212@gmail.com"}],"description":"Set of a helpful hooks, for different specific to some primitives types state changing helpers","repository":{"type":"git","url":"git+https://github.com/kitze/react-hanger.git"},"author":{"name":"kitze"},"license":"MIT","readme":"# react-hanger\n\n[![npm version](https://badge.fury.io/js/react-hanger.svg)](https://badge.fury.io/js/react-hanger)\n<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->\n[![All Contributors](https://img.shields.io/badge/all_contributors-2-orange.svg?style=flat-square)](#contributors-)\n<!-- ALL-CONTRIBUTORS-BADGE:END -->\n\nSet of a helpful hooks, for different specific to some primitives types state changing helpers.\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"http://liveflow.io\"><img src=\"https://avatars.githubusercontent.com/u/3940079?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Andrey Los</b></sub></a><br /><a href=\"#ideas-RIP21\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-RIP21\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"https://github.com/kitze/react-hanger/commits?author=RIP21\" title=\"Tests\">⚠️</a> <a href=\"https://github.com/kitze/react-hanger/commits?author=RIP21\" title=\"Code\">💻</a></td>\n    <td align=\"center\"><a href=\"https://praneet.dev\"><img src=\"https://avatars.githubusercontent.com/u/23721710?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Praneet Rohida</b></sub></a><br /><a href=\"#infra-praneetrohida\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"https://github.com/kitze/react-hanger/commits?author=praneetrohida\" title=\"Tests\">⚠️</a> <a href=\"https://github.com/kitze/react-hanger/commits?author=praneetrohida\" title=\"Code\">💻</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-restore -->\n<!-- prettier-ignore-end -->\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n\n### Check out:\n\n- 💻 [Sizzy](https://sizzy.co) - The Browser For Developers\n- 🔮 [Fungarzione](https://fungarzione.com) - Keep your users in the loop (Changelogs, Roadmap, Issues)\n- 💌 [Twizzle](https://twizzle.app) - A standalone app for Twitter DM\n\n---\n\n\nHas two APIs:\n\n- [First](#Example) and original from v1 is based on object destructuring e.g. `const { value, toggle } = useBoolean(false)` (Docs below)\n- [Second API](./README-ARRAY.md) (recommended [why?](./README-ARRAY.md#migration-from-object-to-array-based)) is based on more idiomatic to React hooks API, e.g. like `useState` with array destructuring\n  `const [value, actions] = useBoolean(false)` [(Docs)](./README-ARRAY.md)\n\n## Install\n\n```bash\nyarn add react-hanger\n```\n\n## Usage\n\n```jsx\nimport React, { Component } from 'react';\n\nimport { useInput, useBoolean, useNumber, useArray, useOnMount, useOnUnmount } from 'react-hanger';\n\nconst App = () => {\n  const newTodo = useInput('');\n  const showCounter = useBoolean(true);\n  const limitedNumber = useNumber(3, { lowerLimit: 0, upperLimit: 5 });\n  const counter = useNumber(0);\n  const todos = useArray(['hi there', 'sup', 'world']);\n\n  const rotatingNumber = useNumber(0, {\n    lowerLimit: 0,\n    upperLimit: 4,\n    loop: true,\n  });\n\n  return (\n    <div>\n      <button onClick={showCounter.toggle}> toggle counter </button>\n      <button onClick={() => counter.increase()}> increase </button>\n      {showCounter.value && <span> {counter.value} </span>}\n      <button onClick={() => counter.decrease()}> decrease </button>\n      <button onClick={todos.clear}> clear todos </button>\n      <input type=\"text\" value={newTodo.value} onChange={newTodo.onChange} />\n    </div>\n  );\n};\n```\n\n### Example\n\n[![Edit react-hanger example](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/react-hanger-example-ize89?fontsize=14&hidenavigation=1&theme=dark)\n\n## API reference (object destructuring)\n\n### How to import?\n\n```\nimport { useBoolean } from 'react-hanger' // will import all of functions\nimport useBoolean from 'react-hanger/useBoolean' // will import only this function\n```\n\n### useStateful\n\nJust an alternative syntax to `useState`, because it doesn't need array destructuring.\nIt returns an object with `value` and a `setValue` method.\n\n```jsx\nconst username = useStateful('test');\n\nusername.setValue('tom');\nconsole.log(username.value);\n```\n\n### useBoolean\n\n```jsx\nconst showCounter = useBoolean(true);\n```\n\nMethods:\n\n- `toggle`\n- `setTrue`\n- `setFalse`\n\n### useNumber\n\n```jsx\nconst counter = useNumber(0);\nconst limitedNumber = useNumber(3, { upperLimit: 5, lowerLimit: 3 });\nconst rotatingNumber = useNumber(0, {\n  upperLimit: 5,\n  lowerLimit: 0,\n  loop: true,\n});\n```\n\nMethods:\n\nBoth `increase` and `decrease` take an optional `amount` argument which is 1 by default, and will override the `step` property if it's used in the options.\n\n- `increase(amount = 1)`\n- `decrease(amount = 1 )`\n\nOptions:\n\n- `lowerLimit`\n- `upperLimit`\n- `loop`\n- `step` - sets the increase/decrease amount of the number upfront, but it can still be overriden by `number.increase(3)` or `number.decrease(5)`\n\n### useInput\n\n```jsx\nconst newTodo = useInput('');\n```\n\n```jsx\n<input value={newTodo.value} onChange={newTodo.onChange} />\n```\n\n```jsx\n<input {...newTodo.eventBind} />\n<Slider {...newTodo.valueBind} />\n```\n\nMethods:\n\n- `clear`\n- `onChange`\n- `eventBind` - binds the `value` and `onChange` props to an input that has `e.target.value`\n- `valueBind` - binds the `value` and `onChange` props to an input that's using only `value` in `onChange` (like most external components)\n\nProperties:\n\n- `hasValue`\n\n### useArray\n\n```jsx\nconst todos = useArray([]);\n```\n\nMethods:\n\n- `push` - similar to native doesn't return length tho\n- `unshift` - similar to native doesn't return length tho\n- `pop` - similar to native doesn't return element tho\n- `shift` - similar to native doesn't return element tho\n- `clear`\n- `removeIndex`\n- `removeById` - if array consists of objects with some specific `id` that you pass\n  all of them will be removed\n- `modifyById` - if array consists of objects with some specific `id` that you pass\n  these elements will be modified.\n- `move` - moves item from position to position shifting other elements.\n\n```\n    So if input is [1, 2, 3, 4, 5]\n\n    from  | to    | expected\n    3     | 0     | [4, 1, 2, 3, 5]\n    -1    | 0     | [5, 1, 2, 3, 4]\n    1     | -2    | [1, 3, 4, 2, 5]\n    -3    | -4    | [1, 3, 2, 4, 5]\n```\n\n### useMap\n\n```jsx\nconst { value, set } = useMap([['key', 'value']]);\nconst { value: anotherValue, remove } = useMap(new Map([['key', 'value']]));\n```\n\nActions:\n\n- `set`\n- `delete`\n- `clear`\n- `initialize` - applies tuples or map instances\n- `setValue`\n\n### useSet\n\n```jsx\nconst set = useSet(new Set<number>([1, 2]));\n```\n\n### useSetState\n\n```jsx\nconst { state, setState, resetState } = useSetState({ loading: false });\nsetState({ loading: true, data: [1, 2, 3] });\nresetState();\n```\n\nMethods:\n\n- `setState(value)` - will merge the `value` with the current `state` (like this.setState works in React)\n- `resetState()` - will reset the current `state` to the `value` which you pass to the `useSetState` hook\n\nProperties:\n\n- `state` - the current state\n\n### usePrevious\n\nUse it to get the previous value of a prop or a state value.\nIt's from the official [React Docs](https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state).\nIt might come out of the box in the future.\n\n```jsx\nconst Counter = () => {\n  const [count, setCount] = useState(0);\n  const prevCount = usePrevious(count);\n  return (\n    <h1>\n      Now: {count}, before: {prevCount}\n    </h1>\n  );\n};\n```\n\n### usePageLoad\n\n```jsx\nconst isPageLoaded = usePageLoad();\n```\n\n### useScript\n\n```jsx\nconst { ready, error } = useScript({\n  src: 'https://example.com/script.js',\n  startLoading: true,\n  delay: 100,\n  onReady: () => {\n    console.log('Ready');\n  },\n  onError: (error) => {\n    console.log('Error loading script ', error);\n  },\n});\n```\n\n### useDocumentReady\n\n```jsx\nconst isDocumentReady = useDocumentReady();\n```\n\n### useGoogleAnalytics\n\n```jsx\nuseGoogleAnalytics({\n  id: googleAnalyticsId,\n  startLoading: true,\n  delay: 500,\n});\n```\n\n### useWindowSize\n\n```jsx\nconst { width, height } = useWindowSize();\n```\n\n### useDelay\n\n```jsx\nconst done = useDelay(1000);\n```\n\n### usePersist\n\n```jsx\nconst tokenValue = usePersist('auth-token', 'value');\n```\n\n### useToggleBodyClass\n\n```jsx\nuseToggleBodyClass(true, 'dark-mode');\n```\n\n### useOnClick\n\n```jsx\nuseOnClick((event) => {\n  console.log('Click event fired: ', event);\n});\n```\n\n### useOnClickOutside\n\n```jsx\n// Pass ref to the element\nconst containerRef = useOnClickOutside(() => {\n  console.log('Clicked outside container');\n});\n```\n\n### useFocus\n\n```jsx\n// pass ref to the element\n// call focusElement to focus the element\nconst [elementRef, focusElement] = useFocus();\n```\n\n### useImage\n\n```jsx\nconst { imageVisible, bindToImage } = useImage(src, onLoad, onError);\n```\n\n## Migration from v1 to v2\n\n- Migration to array based API is a bit more complex but recommended (especially if you're using ESLint rules for hooks).\n  Take a look at [this section](./README-ARRAY.md#migration-from-object-to-array-based) in array API docs.\n- All lifecycle helpers are removed. Please replace `useOnMount`, `useOnUnmount` and `useLifecycleHooks` with `useEffect`.\n  This:\n\n```javascript\nuseOnMount(() => console.log(\"I'm mounted!\"));\nuseOnUnmount(() => console.log(\"I'm unmounted\"));\n// OR\nuseLifecycleHooks({\n  onMount: () => console.log(\"I'm mounted!\"),\n  onUnmount: () => console.log(\"I'm unmounted!\"),\n});\n```\n\nto:\n\n```javascript\nuseEffect(() => {\n  console.log(\"I'm mounted!\");\n  return () => console.log(\"I'm unmounted\");\n}, []);\n```\n\n- `bind` and `bindToInput` are got renamed to `valueBind` and `eventBind` respectively on `useInput` hook\n","readmeFilename":"README.md","contributors":[{"name":"Andrii Los","email":"puha212@gmail.com","url":"https://github.com/RIP21"}],"homepage":"https://github.com/kitze/react-hanger#readme","bugs":{"url":"https://github.com/kitze/react-hanger/issues"}}