{"_id":"3box-profile-edit-react","_rev":"28-b7c22fa7602e8265c3cd2b54253e14a1","name":"3box-profile-edit-react","dist-tags":{"beta":"0.0.6-beta.3","latest":"0.0.9"},"versions":{"0.0.1-beta.1":{"name":"3box-profile-edit-react","version":"0.0.1-beta.1","keywords":["edit profile","3Box","decentralized","ethereum"],"author":{"name":"3box.io"},"license":"MIT","_id":"3box-profile-edit-react@0.0.1-beta.1","maintainers":[{"name":"oznekenzo","email":"mkn293@nyu.edu"}],"contributors":[{"name":"Kenzo Nakamura","email":"kenzo@nyu.edu"}],"dist":{"shasum":"45dcb9136d08d5ba26fda7c7761df7e92ba29ec6","tarball":"https://registry.npmjs.org/3box-profile-edit-react/-/3box-profile-edit-react-0.0.1-beta.1.tgz","fileCount":13,"integrity":"sha512-DNkW/d42MznsDMP5lKOkdoiidUiYksbBqp/mUECRyreuxtbk/EGM+Ecx4OFOd4KRM1ZhcP+kpn1x+PQ1N1kNMA==","signatures":[{"sig":"MEUCIAwy7sLCgpQ0QPc6rjCBMc9N9MmxW+xJWGV12UyfdBW8AiEAkOn1syYLioFdyGZV0nyO/8xnr43ktOd+ZHKt7OZevzE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4513710,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd5nAGCRA9TVsSAnZWagAAgT8QAKDJk74xbQ2nC82y23U2\ntP++yDyGs5xRb43BAhhuvjmWaI4PuOFVqkRQu+RBMLlIJiIjM6pWznOfuEBy\nQxGyImvHRmSt81z8Wflf8SgnHTZHz5R2LMK0wpvc+zOSLup3vYYjZW2gAF7r\nSWMmzdXAI9CqaGSBHV1hhI5h0YROMXb8M+Ab82HEegshlNe41I7Vvglj5Vio\ny+5r+N969krRm+ZZcwCeQ2X6pQCr5/7TXBO2YFVSbWkTWLl+EWZv7QP773bP\n1BRidc96X4g8P7IvBdsJkUB38pakoKkUn8awN+I7xFKKAdeKWXVsm70iN/vb\nY5MYLwwWI3tXKXnB62jD+zrApeqRX1SEalSUIJ195zTpgzHfwIhy6dYuNnaD\nA1NimlXQ3QjrNm/mAEAFGENGH9SEu0EYDIOOYrdP8lP8aLFdKhKU34PruR8Y\nqb3XjfDJYW6zJUd84pq6MrXPIDssbTkrBR2+OQ6ON9BrlyZkM2xsOLB1OwQZ\nTym+iLP2MA+JM9gLaP+4mvBU55cCzejZlJiWurU5nfgFJI3d7Nah8YwzUiKO\ndEYkaJrK4CpcWha0DNxwJUnNfji2TPS70zAf8O2osQArABRRanV/WJ7IKKdX\nfdf3uX05V0drqSQ9kWs+rykP20pfHtOqNVIFtkJv/5Ekj4ecRtPlwhNP7b/I\nKCOZ\r\n=tVBt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","gitHead":"53dae04a7bc07296ca67162c4b19e326c424e40b","scripts":{"lint":"eslint ./src","test":"npm run lint && npm run coverage","build":"webpack --config webpack.config.babel.js","clean":"rm -rf dist coverage","start":"webpack-dev-server --config examples/webpack.config.live.babel.js","coverage":"jest --coverage","prepublish":"npm run clean && npm run test && npm run build","build-examples":"webpack --config examples/webpack.config.babel.js --progress"},"_npmUser":{"name":"oznekenzo","email":"mkn293@nyu.edu"},"_npmVersion":"6.4.1","description":"A drop in component for editing 3Box profiles.","directories":{},"resolutions":{"babel-core":"7.0.0-bridge.0"},"_nodeVersion":"8.12.0","dependencies":{"async":"^3.1.0","emoji-js":"^3.4.1","orbit-db":"^0.21.4","babel-core":"^7.0.0-bridge.0","emoji-mart":"^2.11.1","3id-resolver":"0.0.6","@babel/runtime":"^7.6.0","svg-inline-loader":"^0.8.0","ethereum-blockies-base64":"^1.0.2","react-addons-css-transition-group":"^15.6.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","react":"^16.6.0","enzyme":"^3.3.0","eslint":"^5.8.0","webpack":"^4.9.1","jest-cli":"^23.6.0","node-sass":"^4.7.2","react-dom":"^16.6.0","babel-jest":"^23.6.0","css-loader":"^1.0.1","prop-types":"^15.6.0","@babel/core":"^7.1.2","file-loader":"^4.2.0","sass-loader":"^7.0.1","webpack-cli":"^3.1.2","babel-eslint":"^10.0.1","babel-loader":"^8.0.4","did-resolver":"0.0.7","style-loader":"^0.23.1","@babel/register":"^7.0.0","react-inlinesvg":"^1.1.6","react-hot-loader":"next","@babel/preset-env":"^7.1.0","webpack-dev-server":"^3.1.4","@babel/preset-react":"^7.0.0","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.0.0","regenerator-runtime":"^0.12.1","clean-webpack-plugin":"^0.1.16","enzyme-adapter-react-16":"^1.1.1","react-addons-test-utils":"^15.5.1","@babel/plugin-proposal-class-properties":"^7.5.5"},"peerDependencies":{"3box":"^1.13.2","react":">= 16.3.0","react-dom":">= 16.3.0"},"_npmOperationalInternal":{"tmp":"tmp/3box-profile-edit-react_0.0.1-beta.1_1575383045915_0.6825013542030893","host":"s3://npm-registry-packages"}},"0.0.1-beta.2":{"name":"3box-profile-edit-react","version":"0.0.1-beta.2","keywords":["edit profile","3Box","decentralized","ethereum"],"author":{"name":"3box.io"},"license":"MIT","_id":"3box-profile-edit-react@0.0.1-beta.2","maintainers":[{"name":"oznekenzo","email":"mkn293@nyu.edu"}],"contributors":[{"name":"Kenzo Nakamura","email":"kenzo@nyu.edu"}],"dist":{"shasum":"061953beb8b0208606933cd03d23458d70815ce1","tarball":"https://registry.npmjs.org/3box-profile-edit-react/-/3box-profile-edit-react-0.0.1-beta.2.tgz","fileCount":13,"integrity":"sha512-98H5LHHDBS2N4HkAkYm+B61OtItQgSthxzAn8+IWZtdAFDdSUPQZh7WarXTqx2RleOdkN4heDYO0sr3xwat6Gw==","signatures":[{"sig":"MEYCIQDTO9QfqMryTG8KR162r35bXGo9GxQRxAZFeBpq6BL7RwIhANHPkRBSc/rkV3PmZGs8MJ1H/2T9ej9bDTJYrKIVF9Tc","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4514961,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd5qmLCRA9TVsSAnZWagAArXkQAJqkhp/sCPuViakBj02G\nGH+h4VIOWtcRTUhet/QAiHMDM7TTEwXqporiSnox4tnpZA2dwGym16MqU5A4\nSQZeQkco0dAVl7UXmBLWpMkbi57kfeYRx6V1Fl0NpiYWX5X4sIX1L0Bn6ZJQ\nUKzwrPvMlUr+OcoEm5yz/sZllTNWwKV9TXwDCGpBUW/iQDdp6mnkElr/ZrNv\nvHKNJOknPURY8FB4xzN4eM9aMecvabRmqOqVXtcGW4FfOPh1XFNQnl0zmZM3\nmN/qGm5adToaZdx6ziIEPdOvZ9bwey9CAjJ31EdmpbWAfMthxRbZk8HPrYsr\nPEnSPTbnUQNVrcn+JIa/jwetF2FoG0F+SlpjQLf6q4FcjvfECPF42BqwbFZ3\nqezLmJ1udp12lw8yCNOjaId5gaNteGLSJo8bUc42HrNZmbSIVdUpbP+9nLvm\naEexeghxvo+iEWxThPuU5wKR8Gp1a2rW5I8THOJ0pzYAVHB44CgVPIXgaSz+\nbPeAxlu67qkZkCIzWV07U8bNZMDXe7/EyfxDFI1Q3yjze+n7f7OSRutHhwGl\nOXsWXfnbd9pCWD2B2W4rTnY9URYbHgvulu/kNAfajb1TE4k39JY25gOkAXDw\nBzJ9aIDcQDjPfYn95q5CNRDb3XxXeceU5plKLpCP+mTo4+CnWDsMriDlheiZ\ninME\r\n=KXho\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","gitHead":"4dc11cc52f116de34ea3f09cea5c90ac43249f8f","scripts":{"lint":"eslint ./src","test":"npm run lint && npm run coverage","build":"webpack --config webpack.config.babel.js","clean":"rm -rf dist coverage","start":"webpack-dev-server --config examples/webpack.config.live.babel.js","coverage":"jest --coverage","prepublish":"npm run clean && npm run test && npm run build","build-examples":"webpack --config examples/webpack.config.babel.js --progress"},"_npmUser":{"name":"oznekenzo","email":"mkn293@nyu.edu"},"_npmVersion":"6.4.1","description":"A drop in component for editing 3Box profiles.","directories":{},"resolutions":{"babel-core":"7.0.0-bridge.0"},"_nodeVersion":"8.12.0","dependencies":{"async":"^3.1.0","emoji-js":"^3.4.1","orbit-db":"^0.21.4","babel-core":"^7.0.0-bridge.0","emoji-mart":"^2.11.1","3id-resolver":"0.0.6","@babel/runtime":"^7.6.0","svg-inline-loader":"^0.8.0","ethereum-blockies-base64":"^1.0.2","react-addons-css-transition-group":"^15.6.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","react":"^16.6.0","enzyme":"^3.3.0","eslint":"^5.8.0","webpack":"^4.9.1","jest-cli":"^23.6.0","node-sass":"^4.7.2","react-dom":"^16.6.0","babel-jest":"^23.6.0","css-loader":"^1.0.1","prop-types":"^15.6.0","@babel/core":"^7.1.2","file-loader":"^4.2.0","sass-loader":"^7.0.1","webpack-cli":"^3.1.2","babel-eslint":"^10.0.1","babel-loader":"^8.0.4","did-resolver":"0.0.7","style-loader":"^0.23.1","@babel/register":"^7.0.0","react-inlinesvg":"^1.1.6","react-hot-loader":"next","@babel/preset-env":"^7.1.0","webpack-dev-server":"^3.1.4","@babel/preset-react":"^7.0.0","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.0.0","regenerator-runtime":"^0.12.1","clean-webpack-plugin":"^0.1.16","enzyme-adapter-react-16":"^1.1.1","react-addons-test-utils":"^15.5.1","@babel/plugin-proposal-class-properties":"^7.5.5"},"peerDependencies":{"3box":"^1.13.2","react":">= 16.3.0","react-dom":">= 16.3.0"},"_npmOperationalInternal":{"tmp":"tmp/3box-profile-edit-react_0.0.1-beta.2_1575397770447_0.5515663068076753","host":"s3://npm-registry-packages"}},"0.0.1-beta.3":{"name":"3box-profile-edit-react","version":"0.0.1-beta.3","keywords":["edit profile","3Box","decentralized","ethereum"],"author":{"name":"3box.io"},"license":"MIT","_id":"3box-profile-edit-react@0.0.1-beta.3","maintainers":[{"name":"oznekenzo","email":"mkn293@nyu.edu"}],"contributors":[{"name":"Kenzo Nakamura","email":"kenzo@nyu.edu"}],"dist":{"shasum":"bbab288a9017225f9fdef5569dce882a43e38b61","tarball":"https://registry.npmjs.org/3box-profile-edit-react/-/3box-profile-edit-react-0.0.1-beta.3.tgz","fileCount":13,"integrity":"sha512-k6rDFK9Md7IKFyDB/mvbm0i9Y7QooyR1sr7r/6yuSiRNRcH2EsF/MdwVT3CKMk+sGRK2kyTGsFulOM2pQH6sFg==","signatures":[{"sig":"MEYCIQDTGYDoQr+jhgNNh5+AFnevRg1VhLHXPSR5A2QRNuqizgIhAOKB4YGgRWZmeGJYUihNM487oGJ5Azc6VhXd1PVwxCe5","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4602759,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6FjsCRA9TVsSAnZWagAAc6oQAKQTW3/jE4HVxQS0hxj6\nSfYBIG+xummfRq4l7hHgMWZeRVmnTv4IcZvUAdHxdZRSghcJ21VXx47u/lTC\ngZiS3iZSMW2RXcMGz9Q2oIrypb+A947gGeXgpHHLA2D/kDN76f0ijerxpSOJ\nq9QEYc3d0tWxUr4aUBP6hFD90y8Ttoreoq7vHOHeiQtEBc4ztbTdqZvFwBew\ntDMROKqRX+9N0ExIb0gUSKeve6Og0DZMvkQhe/LnHX2U1vk0bTydHxRO3iYX\nYzsWgT+aM601TSvynMXfHSIpdZ4NpNTLTHFkM516CRx9zo5pwhJvz/jCQfxW\n+zGs0WQt2Q+4EKcG+FasjO4pobjhT8Grd9fXK9pn4EHwI1C9ECq6n5TAslye\nFMBP0Y7Q7aA+ehPzYW/og28ZuCjRgD7c3ONMq3ziKtP3xgOl2eoHToY/YkwJ\nno4BlivNfXksMlu5WOfIfG+6PcxpgMUUzkhfO5LT1XIl0+Kfs+ylBFRLfPF5\noZ5Iy+R7XcR2zNMhmInpZT7rsDyjjK9wTodBOmB3L0KGL6qYUQRcIDTgbWSs\nQBCHvc0t4ieVfB8uuxUAnJjmXDMkftfnpmBQDO5JhjL8sk7TB+t6t4HiOhZG\nFZmkY7GtMAxaKh3LPqFCLnjIMbAVd8NS0duMa/0hPGw/CpNPx/MNAH+BpiHo\naeeL\r\n=0vWr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","gitHead":"ebc148cac81e19fc7802c5e1c388b99c534d35a3","scripts":{"lint":"eslint ./src","test":"npm run lint && npm run coverage","build":"webpack --config webpack.config.babel.js","clean":"rm -rf dist coverage","start":"webpack-dev-server --config examples/webpack.config.live.babel.js","coverage":"jest --coverage","prepublish":"npm run clean && npm run test && npm run build","build-examples":"webpack --config examples/webpack.config.babel.js --progress"},"_npmUser":{"name":"oznekenzo","email":"mkn293@nyu.edu"},"_npmVersion":"6.4.1","description":"A drop in component for editing 3Box profiles.","directories":{},"resolutions":{"babel-core":"7.0.0-bridge.0"},"_nodeVersion":"8.12.0","dependencies":{"3box":"^1.14.0","async":"^3.1.0","emoji-js":"^3.4.1","orbit-db":"^0.21.4","babel-core":"^7.0.0-bridge.0","emoji-mart":"^2.11.1","3id-resolver":"0.0.6","@babel/runtime":"^7.6.0","svg-inline-loader":"^0.8.0","ethereum-blockies-base64":"^1.0.2","react-addons-css-transition-group":"^15.6.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","react":"^16.6.0","enzyme":"^3.3.0","eslint":"^5.8.0","webpack":"^4.9.1","jest-cli":"^23.6.0","node-sass":"^4.7.2","react-dom":"^16.6.0","babel-jest":"^23.6.0","css-loader":"^1.0.1","prop-types":"^15.6.0","@babel/core":"^7.1.2","file-loader":"^4.2.0","sass-loader":"^7.0.1","webpack-cli":"^3.1.2","babel-eslint":"^10.0.1","babel-loader":"^8.0.4","did-resolver":"0.0.7","style-loader":"^0.23.1","@babel/register":"^7.0.0","react-inlinesvg":"^1.1.6","react-hot-loader":"next","@babel/preset-env":"^7.1.0","webpack-dev-server":"^3.1.4","@babel/preset-react":"^7.0.0","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.0.0","regenerator-runtime":"^0.12.1","clean-webpack-plugin":"^0.1.16","enzyme-adapter-react-16":"^1.1.1","react-addons-test-utils":"^15.5.1","@babel/plugin-proposal-class-properties":"^7.5.5"},"peerDependencies":{"3box":"^1.13.2","react":">= 16.3.0","react-dom":">= 16.3.0"},"_npmOperationalInternal":{"tmp":"tmp/3box-profile-edit-react_0.0.1-beta.3_1575508203483_0.35907328812124173","host":"s3://npm-registry-packages"}},"0.0.1-beta.4":{"name":"3box-profile-edit-react","version":"0.0.1-beta.4","keywords":["edit profile","3Box","decentralized","ethereum"],"author":{"name":"3box.io"},"license":"MIT","_id":"3box-profile-edit-react@0.0.1-beta.4","maintainers":[{"name":"oznekenzo","email":"mkn293@nyu.edu"}],"contributors":[{"name":"Kenzo Nakamura","email":"kenzo@nyu.edu"}],"dist":{"shasum":"540fa166266643f8492703aa15a70a68e6c92f91","tarball":"https://registry.npmjs.org/3box-profile-edit-react/-/3box-profile-edit-react-0.0.1-beta.4.tgz","fileCount":13,"integrity":"sha512-dxhYf5AZFHaDWSg9hsRjTkIkJboYoaG6Nu1v0Y//uAzuApIY9oDC+P5G6cUXTVw6ImqtipJwGTyBYk21jJUwzg==","signatures":[{"sig":"MEUCIC0qzBbKbPy78S6XSxVRA20Lv0I/iohrWz8zjDlccG4mAiEA2/SIGtk+2DQOoENOm0WFxgmo3atEAbM/TOteJbhXYaQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4602738,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6RTiCRA9TVsSAnZWagAAtV0QAJ1i1QTb+Cm+g+0u+HeH\nufulxAnCdMebGErP7eiRoOZWxSyghrJRWzVk0TORyQZ6enWjpPhIKS4CbB0a\npYP35+LCRYe/jGSpV3MHnQsXxXx13RNBakIX+1tlSpORTvZKcPN3siQAbZhu\nytdBTTZNjTktRxQNWH/jrb7lEyy0b2+WdMK1d+AfuzyFH6gs6L4NA9Luy78E\npadNTbhwdL3JeSFYx90qEQv64WwjfuRbWbalSp5arNEbvb4RcrlID9MxD3Ec\nF5MrVzYKkjXN53JPxUKSvJNVnHlFJ+jadFzHBq8FDTjcEwRhDioPYbFcCdHi\n7u+H3Jba/INZ0j3FkwCfFxUOM5N6JNx/4/Xpvp/y8UB4N2eryM7EfEBsBkmL\noE0j2hl2n4NVLAmViIlceNMUwxe10HZYVp6mrAnRrZfipV4iy6W6Rj4N6HIk\nYtTVjeY5M0KIMpeQMGKyUsVXn2VBxTBoef5I37HxZbwJTxXbw54/0YOLbMDU\n2LD2pyPY4wJWZCC50Qq5QHXWe81zhMkhSjIYQ2UedYCwBdRCZ70wAa+wm/yO\nskANx3N2ZtbHuC0Kn/k57Sf8nuTO7AYFtbRAdcCcYDTtUq4M+ULj+LNB9/Ts\nbzX3ZwX0b7jVVf85MQr3vz20tBZJgyB9+kvgTxWp+NWQJT9AB63rDxtu3haf\n7Mno\r\n=hZzF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","gitHead":"4cdb4692e7f6847d95544f7d9f9acc10481e5f53","scripts":{"lint":"eslint ./src","test":"npm run lint && npm run coverage","build":"webpack --config webpack.config.babel.js","clean":"rm -rf dist coverage","start":"webpack-dev-server --config examples/webpack.config.live.babel.js","coverage":"jest --coverage","prepublish":"npm run clean && npm run test && npm run build","build-examples":"webpack --config examples/webpack.config.babel.js --progress"},"_npmUser":{"name":"oznekenzo","email":"mkn293@nyu.edu"},"_npmVersion":"6.4.1","description":"A drop in component for editing 3Box profiles.","directories":{},"resolutions":{"babel-core":"7.0.0-bridge.0"},"_nodeVersion":"8.12.0","dependencies":{"async":"^3.1.0","emoji-js":"^3.4.1","orbit-db":"^0.21.4","babel-core":"^7.0.0-bridge.0","emoji-mart":"^2.11.1","3id-resolver":"0.0.6","@babel/runtime":"^7.6.0","svg-inline-loader":"^0.8.0","ethereum-blockies-base64":"^1.0.2","react-addons-css-transition-group":"^15.6.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","react":"^16.6.0","enzyme":"^3.3.0","eslint":"^5.8.0","webpack":"^4.9.1","jest-cli":"^23.6.0","node-sass":"^4.7.2","react-dom":"^16.6.0","babel-jest":"^23.6.0","css-loader":"^1.0.1","prop-types":"^15.6.0","@babel/core":"^7.1.2","file-loader":"^4.2.0","sass-loader":"^7.0.1","webpack-cli":"^3.1.2","babel-eslint":"^10.0.1","babel-loader":"^8.0.4","did-resolver":"0.0.7","style-loader":"^0.23.1","@babel/register":"^7.0.0","react-inlinesvg":"^1.1.6","react-hot-loader":"next","@babel/preset-env":"^7.1.0","webpack-dev-server":"^3.1.4","@babel/preset-react":"^7.0.0","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.0.0","regenerator-runtime":"^0.12.1","clean-webpack-plugin":"^0.1.16","enzyme-adapter-react-16":"^1.1.1","react-addons-test-utils":"^15.5.1","@babel/plugin-proposal-class-properties":"^7.5.5"},"peerDependencies":{"3box":"^1.14.0","react":">= 16.3.0","react-dom":">= 16.3.0"},"_npmOperationalInternal":{"tmp":"tmp/3box-profile-edit-react_0.0.1-beta.4_1575556322077_0.5580885237182849","host":"s3://npm-registry-packages"}},"0.0.1-beta.5":{"name":"3box-profile-edit-react","version":"0.0.1-beta.5","keywords":["edit profile","3Box","decentralized","ethereum"],"author":{"name":"3box.io"},"license":"MIT","_id":"3box-profile-edit-react@0.0.1-beta.5","maintainers":[{"name":"oznekenzo","email":"mkn293@nyu.edu"}],"contributors":[{"name":"Kenzo Nakamura","email":"kenzo@nyu.edu"}],"dist":{"shasum":"493ad7b7b4b10af7931b648465a2cdbd70a08b66","tarball":"https://registry.npmjs.org/3box-profile-edit-react/-/3box-profile-edit-react-0.0.1-beta.5.tgz","fileCount":13,"integrity":"sha512-E/vu+sLTwt26goAzHiV/oKrgTv3QTWnrHJFFsAy6WavF7RSG05OQCkhkAtDvlFz23zzYaLgXzc91N0qryHkY7g==","signatures":[{"sig":"MEQCIFnfCRTN6cskRuYLnylqVsXBXZaT2jNWP7YQ1beH2kOXAiBF1Mu31m/+OffObv8ax25VcgRQcvhFfO/OGuMYluon/A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4602606,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6RWVCRA9TVsSAnZWagAAw+UQAKUdB68RLjIMOTSWM/Bd\nIglrdjvKhI3YhhzCpnasnOnMWgTblFjf7gESjNRpZ0I5yghLqpPARMYoKNMR\nCJTIiY4iZP9f6eQbkxckLnS6R+x1zv2gjFY1D+di9kfYYiNGPwODVBCPFu8r\n5pYqs1KBRM9wtaXd+zvv9hY+mIZdzZu5uIgvYMU1NShWcOM6HTdIZ73hFcXe\n5/H1ubcD+ne/jFg6Z9IKOZOQHMon2RqBN3PuGD6a9+9iN0jXqc73gR/Wc7or\nGe3eppl/YbQrNhMuQTNfrUQf9rKz5pefBujgJEkLkDlvkTZ16J0FG07NmliX\nfyJYnHOBbYepScBixm4PKh4XxrTQy8A0Enipzs5nscGycd/bHK//rfVDdvph\nhdzEytkSy9ecj/EPB+cQYdBLRE4I8okVA4MAfGs5zBczmK9tax5Xg/7/gfKy\n8yY2C9ts9EOibDQg2b6cAKM8Fpwyz9SIfDkCWds6pqFieCOWiNdvZAJYPMyL\nQDaGCc7I6uO514/3RyrBfhcoZD43ZWbgstJvnbXm+jB7WS7VHBEBVtwpGWLs\ntOcqUAdj2fG4A6gRM7v/qrljpFzT80IW6C6E6N29taPfbEqV5GZnARAudul8\nSHQ05+pk2iX5YnKwyXnDqKSIZoJTQElexWq+fLXH7ihD/CO5mP7cykeYiUr/\nGKMO\r\n=5iTg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","gitHead":"427a3a7528e64ab32627e22dd1b048d2f2072348","scripts":{"lint":"eslint ./src","test":"npm run lint && npm run coverage","build":"webpack --config webpack.config.babel.js","clean":"rm -rf dist coverage","start":"webpack-dev-server --config examples/webpack.config.live.babel.js","coverage":"jest --coverage","prepublish":"npm run clean && npm run test && npm run build","build-examples":"webpack --config examples/webpack.config.babel.js --progress"},"_npmUser":{"name":"oznekenzo","email":"mkn293@nyu.edu"},"_npmVersion":"6.4.1","description":"A drop in component for editing 3Box profiles.","directories":{},"resolutions":{"babel-core":"7.0.0-bridge.0"},"_nodeVersion":"8.12.0","dependencies":{"async":"^3.1.0","emoji-js":"^3.4.1","orbit-db":"^0.21.4","babel-core":"^7.0.0-bridge.0","emoji-mart":"^2.11.1","3id-resolver":"0.0.6","@babel/runtime":"^7.6.0","svg-inline-loader":"^0.8.0","ethereum-blockies-base64":"^1.0.2","react-addons-css-transition-group":"^15.6.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","react":"^16.6.0","enzyme":"^3.3.0","eslint":"^5.8.0","webpack":"^4.9.1","jest-cli":"^23.6.0","node-sass":"^4.7.2","react-dom":"^16.6.0","babel-jest":"^23.6.0","css-loader":"^1.0.1","prop-types":"^15.6.0","@babel/core":"^7.1.2","file-loader":"^4.2.0","sass-loader":"^7.0.1","webpack-cli":"^3.1.2","babel-eslint":"^10.0.1","babel-loader":"^8.0.4","did-resolver":"0.0.7","style-loader":"^0.23.1","@babel/register":"^7.0.0","react-inlinesvg":"^1.1.6","react-hot-loader":"next","@babel/preset-env":"^7.1.0","webpack-dev-server":"^3.1.4","@babel/preset-react":"^7.0.0","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.0.0","regenerator-runtime":"^0.12.1","clean-webpack-plugin":"^0.1.16","enzyme-adapter-react-16":"^1.1.1","react-addons-test-utils":"^15.5.1","@babel/plugin-proposal-class-properties":"^7.5.5"},"peerDependencies":{"3box":"^1.14.0","react":">= 16.3.0","react-dom":">= 16.3.0"},"_npmOperationalInternal":{"tmp":"tmp/3box-profile-edit-react_0.0.1-beta.5_1575556501406_0.2810036271250764","host":"s3://npm-registry-packages"}},"0.0.1-beta.6":{"name":"3box-profile-edit-react","version":"0.0.1-beta.6","keywords":["edit profile","3Box","decentralized","ethereum"],"author":{"name":"3box.io"},"license":"MIT","_id":"3box-profile-edit-react@0.0.1-beta.6","maintainers":[{"name":"oznekenzo","email":"mkn293@nyu.edu"}],"contributors":[{"name":"Kenzo Nakamura","email":"kenzo@nyu.edu"}],"dist":{"shasum":"e615926d544c3ec59a39a933f4b0961eebe49d97","tarball":"https://registry.npmjs.org/3box-profile-edit-react/-/3box-profile-edit-react-0.0.1-beta.6.tgz","fileCount":13,"integrity":"sha512-5JD54b8j2CXdoFWakBF8PO5cHtWtgRT7I5zD+RNFwHN/WqaHq0oLmCK3ABWOmSfvvhxwLrM8w1ZsqrtHMQJc2A==","signatures":[{"sig":"MEQCIC6cZtPp49/GDdE/+qJIN1FHPFbsT+Kj9WR3HgOCrqX8AiBoZFKy3gsFUCgtA9WFt45hxf6EpCGnFyFod9YQQlZjtA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4602552,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6mHPCRA9TVsSAnZWagAAUM4P/REsuGqWY8IxZoQMnqI3\nIaduSOVj0YIF+fkBbhAv4hgTA5R8K4BMWf/RpLLNPjYmLvNAvtHsCOQAbuXT\nDci96e90HRzXrV/iN+mS54foA7Jf2LtOKHhX4zc7ugNUAAyZcJFIHcTJwRMZ\nZEaSWQI/0RiA1V9WzBDD/3IymR6GaABFiYizxcpjuqzxFuCe//5piRYbf3E+\ngXnuosjJ5C4SZWTbbpB2urSFacnsJmSn98gIA2+Y8wCRNnL0rTyP8QW1kBxW\nOQGNT4ZwzQB7miqaMw9L9+LEZ/KfMXRfPze//1D9/+ChWwH5sZfIn/CweT7a\nG7QzWDFWUy7p8Sk9GfM0dp/rNs+Rs1zI+FhV/AC8wzHpkiF+PfqeG2bgn3YE\nd+WXIfIG2i1wBleyguVyOgX9ZFq2laKO4Vx7iRp+jNbJ220TnOwtoSz8YJ7c\nN1SXCoKjIRyhvPUJmxYU2V1oXXsl945Xwnsa6v3YDVIreEdGdWLABwnoIdOX\npjfqCeWvlPK++mbyhJpsu1rFMhlEnnH+DVeMncgNqI0DOmoxCZXWS1w/8zw6\nP7On+9zC5Bp/YNalAcDnsMHZH5SHgIWtlcQRT88iqcp52MbCpeNihTewIFaS\nh4zV8T3y3ei35uXvYIFSkxEB6Ehv/C5z+xItIu4AB6lQzSGFJA3HmwG9umYw\njKCU\r\n=1fxR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","gitHead":"41830df0b19d89ec4cd44b689dbe0597abf00b38","scripts":{"lint":"eslint ./src","test":"npm run lint && npm run coverage","build":"webpack --config webpack.config.babel.js","clean":"rm -rf dist coverage","start":"webpack-dev-server --config examples/webpack.config.live.babel.js","coverage":"jest --coverage","prepublish":"npm run clean && npm run test && npm run build","build-examples":"webpack --config examples/webpack.config.babel.js --progress"},"_npmUser":{"name":"oznekenzo","email":"mkn293@nyu.edu"},"_npmVersion":"6.4.1","description":"A drop in component for editing 3Box profiles.","directories":{},"resolutions":{"babel-core":"7.0.0-bridge.0"},"_nodeVersion":"8.12.0","dependencies":{"async":"^3.1.0","emoji-js":"^3.4.1","orbit-db":"^0.21.4","babel-core":"^7.0.0-bridge.0","emoji-mart":"^2.11.1","3id-resolver":"0.0.6","@babel/runtime":"^7.6.0","svg-inline-loader":"^0.8.0","ethereum-blockies-base64":"^1.0.2","react-addons-css-transition-group":"^15.6.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","react":"^16.6.0","enzyme":"^3.3.0","eslint":"^5.8.0","webpack":"^4.9.1","jest-cli":"^23.6.0","node-sass":"^4.7.2","react-dom":"^16.6.0","babel-jest":"^23.6.0","css-loader":"^1.0.1","prop-types":"^15.6.0","@babel/core":"^7.1.2","file-loader":"^4.2.0","sass-loader":"^7.0.1","webpack-cli":"^3.1.2","babel-eslint":"^10.0.1","babel-loader":"^8.0.4","did-resolver":"0.0.7","style-loader":"^0.23.1","@babel/register":"^7.0.0","react-inlinesvg":"^1.1.6","react-hot-loader":"next","@babel/preset-env":"^7.1.0","webpack-dev-server":"^3.1.4","@babel/preset-react":"^7.0.0","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.0.0","regenerator-runtime":"^0.12.1","clean-webpack-plugin":"^0.1.16","enzyme-adapter-react-16":"^1.1.1","react-addons-test-utils":"^15.5.1","@babel/plugin-proposal-class-properties":"^7.5.5"},"peerDependencies":{"3box":"^1.14.0","react":">= 16.3.0","react-dom":">= 16.3.0"},"_npmOperationalInternal":{"tmp":"tmp/3box-profile-edit-react_0.0.1-beta.6_1575641550499_0.8163579171668272","host":"s3://npm-registry-packages"}},"0.0.1-beta.7":{"name":"3box-profile-edit-react","version":"0.0.1-beta.7","keywords":["edit profile","3Box","decentralized","ethereum"],"author":{"name":"3box.io"},"license":"MIT","_id":"3box-profile-edit-react@0.0.1-beta.7","maintainers":[{"name":"oznekenzo","email":"mkn293@nyu.edu"}],"contributors":[{"name":"Kenzo Nakamura","email":"kenzo@nyu.edu"}],"dist":{"shasum":"77ed125f8a39f936ea6f4fb5bfbf74575bdaf478","tarball":"https://registry.npmjs.org/3box-profile-edit-react/-/3box-profile-edit-react-0.0.1-beta.7.tgz","fileCount":13,"integrity":"sha512-kksl98JHGemhpI0/H+57eXRH7wZCdIZ75ET6DD/jFXmrMIU2N1dLJcjz0sg5nVBwMy+CXsIIEaS8/pPAE6TbKw==","signatures":[{"sig":"MEQCIHy7EZDLPiEPsSZ9xw2o4BXKBPrlklwM0l3jp5xKC+K0AiBjZcMrtcLP4kJyWbLLKnGX5aC/8YCZyfcjUA42suFxYA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4602551,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeD06UCRA9TVsSAnZWagAA+VsP/1wNiccZ8jwphFaydKaI\n710uIfUEnhQiHWuJACExXGfgjOjzHg5VGUndqtaoWOxj5w5HQi87h4CmuJCc\nh72X7Nk871E0EyAtkgkX0/sJQ2qw5GhEWbmfH6UmZ+XyWe9BARQHonQufqfA\nLeRLSfd803VfSnOZe1fS6j8aXov4sXalHylZkDQ3HMy1WT8U3NWKS4HOoX0T\nkDYvCivcJyaeEHwRf9jeTHFc5wZFdw9Rc107UGbwStvyqyFpusq/dDahUXSi\ne/K6nviANjDnM4eTXQ5w7MzWHVMBHBdjSsD2EVBkEA0xV2YF5zSRi54PYja+\noXR1BJhgmompMvNx02aWr7UWlFI56WhdShhIFTXVkDhZpLXiGZt6BAZW4u9x\nJMPkwGNuWuETF7LH6WgeppOmXCRbDsZ7URBch8RJNpRP0ME5EvfrmlXpHkdw\n6EEPR1S791JP2V167nyD7jWDaxA73BST9D81iFckoplqhp0YTfaX3aFeutmj\nuQ6ab8TYXFLgVjlPjRewUyc/SfK/RPFZ6zC0vZg1A4YGKjyFnaKFDeWWG5Tx\nlASR3bCOsiAlF/sdE1XA6pENmmb+rJd+A5B/ROAlA4LcURScc+4Nk2DAy+Qt\n+aCAVXoY2D45ttax0MldZMbGWRj0COvh3pLON3qC404g2MXTsnne8GFwQJ/h\nFhT4\r\n=jA6J\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","readme":"[![Discord](https://img.shields.io/discord/484729862368526356.svg?style=for-the-badge)](https://discordapp.com/invite/Z3f3Cxy)\r\n[![npm](https://img.shields.io/npm/v/3box-chatbox-react.svg?style=for-the-badge)](https://www.npmjs.com/package/3box-profile-edit-react)\r\n[![Twitter Follow](https://img.shields.io/twitter/follow/3boxdb.svg?style=for-the-badge&label=Twitter)](https://twitter.com/3boxdb)\r\n\r\n# 3Box Profile Edit Plugin 📝\r\n\r\nThe `3box-profile-edit-react` node package is a drop-in react component that provides Web3 developers with UI and logic for editing user profiles in their Ethereum application. Quickly add customizable fields that are pertinent to your dapp on top of basic input fields, with the option of `text`, `textarea`, and `select` (dropdown) style inputs. The 3Box Edit Profile plugin is built using 3Box infrastructure. *Read the docs on [docs.3box.io](https://docs.3box.io/build/plugins/chatbox)*.\r\n\r\n### Try the demo [here](https://3box.github.io/3box-profile-edit-react/examples/dist/)\r\n![Example Screenshot](EditProfile.png)\r\n</br>\r\n\r\n## How it Works\r\n#### Architecture\r\nThe Edit Profile plugin implements simple `set` & `get` methods on both the [Profiles API](https://docs.3box.io/api/profiles) and the [Spaces API](https://docs.3box.io/api/storage) for standard fields (`name`, `image`, `coverPhoto`, `emoji`, `description`) depending on which profile the user chooses as their default (`3Box` or `App`), but will use only the Spaces API for custom fields added by the developer passed as a prop to the component. Both methods are made available via the [`3Box.js SDK`](https://github.com/3box/3box-js). After a user has set which default profile they'd like to use, by setting a boolean to the key `isAppProfileDefault` in the space's public store, the dapp should appropriately fetch from that profile elsewhere in the dapp.\r\n\r\n#### Authentication\r\nPrior to first render of the Edit Profile component, the dapp should have already run `const box = await Box.openBox(userAddress, ethereumProvider)` and `const space = await box.openSpace(spaceName)` and passed both the `box` and `space` objects as props of the same name.\r\n</br>\r\n</br>\r\n\r\n## Getting Started\r\n1. Install the component\r\n2. Configure application settings and props to component\r\n3. Usage\r\n4. Display correct profile in your app\r\n\r\n### 1. Install the component\r\n\r\n```shell\r\nnpm i -S 3box-profile-edit-react\r\n```\r\n\r\n### 2. Configure application settings and props to component\r\n**First, choose a name for your application's 3Box space.**\r\n\r\nAlthough you are free to choose whichever name you'd like for your app's space, we recommend using the name of your app. If your application already has a 3Box space, you are welcome to use that same one for the chatbox.\r\n\r\n**Then, configure the custom fields you'd like to add to the component**\r\n\r\nThe `customFields` prop must receive an ***array*** of *any* number of objects in the following structures:\r\n```javascript\r\n    { // for a field with a text input\r\n        inputType: 'text',\r\n        key: 'backupAddress', // the key used to save the value\r\n        field: 'Backup Address' // how to display the key in the UI\r\n      }, \r\n\r\n      { // for a field with a textarea input\r\n        inputType: 'textarea',\r\n        key: 'spiritCryptoKittie',\r\n        field: 'Spirit CryptoKitty'\r\n      },\r\n\r\n      { // for a field with a dropdown input\r\n        inputType: 'dropdown',\r\n        key: 'preferredCoin',\r\n        field: 'Preferred Coin',\r\n        options: [{ // dropdown input requires an array of objects\r\n          value: 'eth', // value passed after selection\r\n          display: 'Ethereum' // what the user will see in the dropdown\r\n        }, {\r\n          value: 'btc',\r\n          display: 'Bitcoin'\r\n        }, {\r\n          value: 'ltc',\r\n          display: 'Litecoin'\r\n        }]\r\n      }\r\n```\r\nThe Edit Profile component comes standard with `Name`, `Emoji`, and `Description` fields.  The component defaults to using the 3Box profile (as the `isAppProfileDefault` boolean in the space is still undefined). Fields passed to `customFields` however will always be saved to the app's space.\r\n\r\n</br>\r\n</br>\r\n\r\n\r\n### 3. Usage\r\nThe Edit Profile component can of course be used in any way the developer pleases, though we recommend it be used on a dedicated edit profile page or in a popup modal (not included) of the developer's design.  Remember, both the `box` and `space` instance must be passed to the component before it mounts.\r\n\r\n#### Example\r\n\r\n```jsx\r\nimport EditProfile from '3box-profile-edit-react';\r\n\r\nconst MyComponent = ({ customFields, box, space, myAddress, myProfile, redirectFn }) => (\r\n    <EditProfile\r\n        // required\r\n        box={box}\r\n        space={space}\r\n        currentUserAddr={myAddress}\r\n\r\n        // optional\r\n        customFields={customFields}\r\n        currentUser3BoxProfile={myProfile}\r\n        redirectFn={redirectFn}\r\n    />\r\n);\r\n```\r\n\r\n### 4. Display correct profile in your app\r\nOnce a user selects a default profile (3Box or app) the decision should reflect elsewhere in your dapp.  To do this, you should check `isAppProfileDefault` flag, then call `get` on the respective profile for fields `name`, `image`, `coverPhoto`, `emoji`, and `description`.  Custom fields added to the Edit Profile component, however, are all saved to the application profile in the `space` used by your dapp and should `get` from there.\r\n\r\nChecking and getting from the appropriate default profile should look something like this:\r\n```javascript\r\n  const isAppProfileDefault = await space.public.get('isAppProfileDefault');\r\n\r\n  let profile;\r\n  if (isAppProfileDefault) {\r\n    profile = await Box.getProfile(currentUserAddr);\r\n  } else {\r\n    profile = await space.public.all();\r\n  }\r\n\r\n  this.setState({\r\n    name: profile.name,\r\n    image: profile.image,\r\n    coverPhoto: profile.coverPhoto,\r\n    emoji: profile.emoji,\r\n    description: profile.description,\r\n  })\r\n```\r\n\r\n\r\n#### Prop Types\r\n\r\n| Property | Type            | Required          | Description |\r\n| :-------------------------------- | :-------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\r\n| `box`    | Object         |    True   | The `box` instance returned from running `await Box.openBox(address, web3)` somewhere in your dApp.|\r\n| `space`    | Object         |   True    | The `space` instance returned from running `await box.openSpace(spaceName)` somewhere in your dApp.|\r\n| `currentUserAddr`    | String (Ethereum Address)             | True| The current user's Ethereum address. Used to fetch the user's profile if it's not provided and for other various uses in the component. |\r\n| `customFields`    | Array       |        | An array of any amount of objects structured in one of three ways outlined above.  |\r\n| `currentUser3BoxProfile`    | Object       |       | If passed, it must be the object returned from calling `const currentUser3BoxProfile = await Box.getProfile(myAddress);`.  If this is not passed, the component runs the same static method using the `currentUserAddr` prop |\r\n| `redirectFn`    | Function      |    | A function that runs after saving the fields in the UI is complete, or when a user hits `cancel`.  The user's ethereum address will be passed as a param in the event that the dapp uses this in the route |\r\n\r\n## License\r\n\r\nMIT\r\n","gitHead":"41830df0b19d89ec4cd44b689dbe0597abf00b38","scripts":{"lint":"eslint ./src","test":"npm run lint && npm run coverage","build":"webpack --config webpack.config.babel.js","clean":"rm -rf dist coverage","start":"webpack-dev-server --config examples/webpack.config.live.babel.js","coverage":"jest --coverage","prepublish":"npm run clean && npm run test && npm run build","build-examples":"webpack --config examples/webpack.config.babel.js --progress"},"_npmUser":{"name":"oznekenzo","email":"mkn293@nyu.edu"},"_npmVersion":"6.4.1","description":"A drop in component for editing 3Box profiles.","directories":{},"resolutions":{"babel-core":"7.0.0-bridge.0"},"_nodeVersion":"8.12.0","dependencies":{"async":"^3.1.0","emoji-js":"^3.4.1","orbit-db":"^0.21.4","babel-core":"^7.0.0-bridge.0","emoji-mart":"^2.11.1","3id-resolver":"0.0.6","@babel/runtime":"^7.6.0","svg-inline-loader":"^0.8.0","ethereum-blockies-base64":"^1.0.2","react-addons-css-transition-group":"^15.6.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"chai":"^4.1.2","react":"^16.6.0","enzyme":"^3.3.0","eslint":"^5.8.0","webpack":"^4.9.1","jest-cli":"^23.6.0","node-sass":"^4.7.2","react-dom":"^16.6.0","babel-jest":"^23.6.0","css-loader":"^1.0.1","prop-types":"^15.6.0","@babel/core":"^7.1.2","file-loader":"^4.2.0","sass-loader":"^7.0.1","webpack-cli":"^3.1.2","babel-eslint":"^10.0.1","babel-loader":"^8.0.4","did-resolver":"0.0.7","style-loader":"^0.23.1","@babel/register":"^7.0.0","react-inlinesvg":"^1.1.6","react-hot-loader":"next","@babel/preset-env":"^7.1.0","webpack-dev-server":"^3.1.4","@babel/preset-react":"^7.0.0","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.0.0","regenerator-runtime":"^0.12.1","clean-webpack-plugin":"^0.1.16","enzyme-adapter-react-16":"^1.1.1","react-addons-test-utils":"^15.5.1","@babel/plugin-proposal-class-properties":"^7.5.5"},"peerDependencies":{"3box":"^1.14.0","react":">= 16.3.0","react-dom":">= 16.3.0"},"_npmOperationalInternal":{"tmp":"tmp/3box-profile-edit-react_0.0.1-beta.7_1578061459671_0.42292909074423934","host":"s3://npm-registry-packages"}},"0.0.1-beta.8":{"name":"3box-profile-edit-react","version":"0.0.1-beta.8","keywords":["edit profile","3Box","decentralized","ethereum"],"author":{"name":"3box.io"},"license":"MIT","_id":"3box-profile-edit-react@0.0.1-beta.8","maintainers":[{"name":"oznekenzo","email":"mkn293@nyu.edu"}],"contributors":[{"name":"Kenzo Nakamura","email":"kenzo@nyu.edu"}],"dist":{"shasum":"b21144d5f234701053697f99ffdd2f41d5edeba6","tarball":"https://registry.npmjs.org/3box-profile-edit-react/-/3box-profile-edit-react-0.0.1-beta.8.tgz","fileCount":46,"integrity":"sha512-FkAylces1C0UV88yBo8FvHttl9pXKF+0LvlzHKj8Ui0RxfochxvM1hIsAHFeD62nB9V+hHlhjrZrBLKtNDBhaQ==","signatures":[{"sig":"MEUCIQCTbSaLMY7nnIbB+ttIVO5nVIA6fjKBGwzrmIRPm8aTjAIgC46nQ/ZfwN6bDOzHEl/hFOO6VipzbHIU7D8aF17evQg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":5007947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeE3rdCRA9TVsSAnZWagAA89kP/Rvgc/U4NWju9H90DtDa\nrLnpoLM6di5X+7NXBGzvU54uTpKCEvwTajY8awZDvjF5Bue4fts4BlrAcXNS\nL+zQin1/fFgR9qk5hU/312VMav+fktAb9+ScGAM6IWdGPwEr153W4B86YuH/\np0F+apF33vXz1SxfYa7s2kCpBV+OOt+hyGinA7XBHte2UczmQwJ3MwtoVnMG\nhESxQGfgphP4maSgwnrXpI2cYz7JOzAg+3JVR50pWNWfVZVth2/pzD73Le6p\nj4tfyNnlg0JVMkDLaK3o1+IQQgx8VP3qbn4IjS5kpqRih9i8nSiIfTlmxzDk\nyCNgViCpYHLWqbAm93Ma9jC6KM7Zsf2z6ic35LTVM4ZbyeVd0YJ4GAuJMOrk\niPJIXrM07lFR4YdXrG3LProCdX5y/8gqkq43Bh07Qcf+Y9mkGOdehp+6nKlV\n+m+GCpfoGUFvDQkb5F8l0FBW9RZAGYNdd/dnMAFtM0WnuxflTBNTOMHyamoc\nloiQRDR7RUv7dC/1oialvfFgv+edrdRBauOA4t5Y9kdi+7/YucuZfuFriZQq\nSxj648b1Wg/+Oi9NBP3B/3J0eXRvtm6k/MPI4hLSKbhwnNph79EJcDPdwFL5\n0kg9t8jLolQhUKDamYwplYqaF4WPEbkmb9VEGqJQ/t/m7UlBHzo/x1c219p8\n3rGv\r\n=rt8n\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./lib/index.js","readme":"[![Discord](https://img.shields.io/discord/484729862368526356.svg?style=for-the-badge)](https://discordapp.com/invite/Z3f3Cxy)\r\n[![npm](https://img.shields.io/npm/v/3box-chatbox-react.svg?style=for-the-badge)](https://www.npmjs.com/package/3box-profile-edit-react)\r\n[![Twitter Follow](https://img.shields.io/twitter/follow/3boxdb.svg?style=for-the-badge&label=Twitter)](https://twitter.com/3boxdb)\r\n\r\n# 3Box Profile Edit Plugin 📝\r\n\r\nThe `3box-profile-edit-react` node package is a drop-in react component that provides Web3 developers with UI and logic for editing user profiles in their Ethereum application. Quickly add customizable fields that are pertinent to your dapp on top of basic input fields, with the option of `text`, `textarea`, and `select` (dropdown) style inputs. The 3Box Edit Profile plugin is built using 3Box infrastructure. *Read the docs on [docs.3box.io](https://docs.3box.io/build/plugins/chatbox)*.\r\n\r\n### Try the demo [here](https://3box.github.io/3box-profile-edit-react/examples/dist/)\r\n![Example Screenshot](EditProfile.png)\r\n</br>\r\n\r\n## How it Works\r\n#### Architecture\r\nThe Edit Profile plugin implements simple `set` & `get` methods on both the [Profiles API](https://docs.3box.io/api/profiles) and the [Spaces API](https://docs.3box.io/api/storage) for standard fields (`name`, `image`, `coverPhoto`, `emoji`, `description`) depending on which profile the user chooses as their default (`3Box` or `App`), but will use only the Spaces API for custom fields added by the developer passed as a prop to the component. Both methods are made available via the [`3Box.js SDK`](https://github.com/3box/3box-js). After a user has set which default profile they'd like to use, by setting a boolean to the key `isAppProfileDefault` in the space's public store, the dapp should appropriately fetch from that profile elsewhere in the dapp.\r\n\r\n#### Authentication\r\nPrior to first render of the Edit Profile component, the dapp should have already run `const box = await Box.openBox(userAddress, ethereumProvider)` and `const space = await box.openSpace(spaceName)` and passed both the `box` and `space` objects as props of the same name.\r\n</br>\r\n</br>\r\n\r\n## Getting Started\r\n1. Install the component\r\n2. Configure application settings and props to component\r\n3. Usage\r\n4. Display correct profile in your app\r\n\r\n### 1. Install the component\r\n\r\n```shell\r\nnpm i -S 3box-profile-edit-react\r\n```\r\n\r\n### 2. Configure application settings and props to component\r\n**First, choose a name for your application's 3Box space.**\r\n\r\nAlthough you are free to choose whichever name you'd like for your app's space, we recommend using the name of your app. If your application already has a 3Box space, you are welcome to use that same one for the chatbox.\r\n\r\n**Then, configure the custom fields you'd like to add to the component**\r\n\r\nThe `customFields` prop must receive an ***array*** of *any* number of objects in the following structures:\r\n```javascript\r\n    { // for a field with a text input\r\n        inputType: 'text',\r\n        key: 'backupAddress', // the key used to save the value\r\n        field: 'Backup Address' // how to display the key in the UI\r\n      }, \r\n\r\n      { // for a field with a textarea input\r\n        inputType: 'textarea',\r\n        key: 'spiritCryptoKittie',\r\n        field: 'Spirit CryptoKitty'\r\n      },\r\n\r\n      { // for a field with a dropdown input\r\n        inputType: 'dropdown',\r\n        key: 'preferredCoin',\r\n        field: 'Preferred Coin',\r\n        options: [{ // dropdown input requires an array of objects\r\n          value: 'eth', // value passed after selection\r\n          display: 'Ethereum' // what the user will see in the dropdown\r\n        }, {\r\n          value: 'btc',\r\n          display: 'Bitcoin'\r\n        }, {\r\n          value: 'ltc',\r\n          display: 'Litecoin'\r\n        }]\r\n      }\r\n```\r\nThe Edit Profile component comes standard with `Name`, `Emoji`, and `Description` fields.  The component defaults to using the 3Box profile (as the `isAppProfileDefault` boolean in the space is still undefined). Fields passed to `customFields` however will always be saved to the app's space.\r\n\r\n</br>\r\n</br>\r\n\r\n\r\n### 3. Usage\r\nThe Edit Profile component can of course be used in any way the developer pleases, though we recommend it be used on a dedicated edit profile page or in a popup modal (not included) of the developer's design.  Remember, both the `box` and `space` instance must be passed to the component before it mounts.\r\n\r\n#### Example\r\n\r\n```jsx\r\nimport EditProfile from '3box-profile-edit-react';\r\n\r\nconst MyComponent = ({ customFields, box, space, myAddress, myProfile, redirectFn }) => (\r\n    <EditProfile\r\n        // required\r\n        box={box}\r\n        space={space}\r\n        currentUserAddr={myAddress}\r\n\r\n        // optional\r\n        customFields={customFields}\r\n        currentUser3BoxProfile={myProfile}\r\n        redirectFn={redirectFn}\r\n    />\r\n);\r\n```\r\n\r\n### 4. Display correct profile in your app\r\nOnce a user selects a default profile (3Box or app) the decision should reflect elsewhere in your dapp.  To do this, you should check `isAppProfileDefault` flag, then call `get` on the respective profile for fields `name`, `image`, `coverPhoto`, `emoji`, and `description`.  Custom fields added to the Edit Profile component, however, are all saved to the application profile in the `space` used by your dapp and should `get` from there.\r\n\r\nChecking and getting from the appropriate default profile should look something like this:\r\n```javascript\r\n  const isAppProfileDefault = await space.public.get('isAppProfileDefault');\r\n\r\n  let profile;\r\n  if (isAppProfileDefault) {\r\n    profile = await Box.getProfile(currentUserAddr);\r\n  } else {\r\n    profile = await space.public.all();\r\n  }\r\n\r\n  this.setState({\r\n    name: profile.name,\r\n    image: profile.image,\r\n    coverPhoto: profile.coverPhoto,\r\n    emoji: profile.emoji,\r\n    description: profile.description,\r\n  })\r\n```\r\n\r\n\r\n#### Prop Types\r\n\r\n| Property | Type            | Required          | Description |\r\n| :-------------------------------- | :-------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\r\n| `box`    | Object         |    True   | The `box` instance returned from running `await Box.openBox(address, web3)` somewhere in your dApp.|\r\n| `space`    | Object         |   True    | The `space` instance returned from running `await box.openSpace(spaceName)` somewhere in your dApp.|\r\n| `currentUserAddr`    | String (Ethereum Address)             | True| The current user's Ethereum address. Used to fetch the user's profile if it's not provided and for other various uses in the component. |\r\n| `customFields`    | Array       |        | An array of any amount of objects structured in one of three ways outlined above.  |\r\n| `currentUser3BoxProfile`    | Object       |       | If passed, it must be the object returned from calling `const currentUser3BoxProfile = await Box.getProfile(myAddress);`.  If this is not passed, the component runs the same static method using the `currentUserAddr` prop |\r\n| `redirectFn`    | Function      |    | A function that runs after saving the fields in the UI is complete, or when a user hits `cancel`.  The user's ethereum address will be passed as a param in the event that the dapp uses this in the route |\r\n\r\n## License\r\n\r\nMIT\r\n","gitHead":"41830df0b19d89ec4cd44b689dbe0597abf00b38","scripts":{"lint":"eslint ./src","test":"npm run lint && npm run coverage","build":"webpack --config webpack.config.babel.js","clean":"rm -rf dist coverage","start":"webpack-dev-server --config examples/webpack.config.live.babel.js","coverage":"jest --coverage","build:es5":"rm -rf ./lib; ./node_modules/.bin/babel src --out-dir lib --source-maps inline --copy-files --ignore=src/__tests__/,src/__mocks__/","prepublish":"npm run clean && npm run test && npm run build","build-examples":"webpack --config examples/webpack.config.babel.js --progress"},"_npmUser":{"name":"oznekenzo","email":"mkn293@nyu.edu"},"_npmVersion":"6.4.1","description":"A drop in component for editing 3Box profiles.","directories":{},"resolutions":{"babel-core":"7.0.0-bridge.0"},"_nodeVersion":"8.12.0","dependencies":{"3box":"^1.15.0","async":"^3.1.0","emoji-js":"^3.4.1","orbit-db":"^0.21.4","babel-core":"^7.0.0-bridge.0","emoji-mart":"^2.11.1","3id-resolver":"0.0.6","@babel/runtime":"^7.6.0","svg-inline-loader":"^0.8.0","ethereum-blockies-base64":"^1.0.2","react-addons-css-transition-group":"^15.6.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"chai":"^4.1.2","react":"^16.6.0","enzyme":"^3.3.0","eslint":"^5.8.0","webpack":"^4.9.1","jest-cli":"^23.6.0","node-sass":"^4.7.2","react-dom":"^16.6.0","@babel/cli":"^7.7.7","babel-jest":"^23.6.0","css-loader":"^1.0.1","prop-types":"^15.6.0","@babel/core":"^7.1.2","file-loader":"^4.2.0","sass-loader":"^7.0.1","webpack-cli":"^3.1.2","babel-eslint":"^10.0.1","babel-loader":"^8.0.4","did-resolver":"0.0.7","style-loader":"^0.23.1","@babel/register":"^7.0.0","react-inlinesvg":"^1.1.6","react-hot-loader":"next","@babel/preset-env":"^7.1.0","webpack-dev-server":"^3.1.4","@babel/preset-react":"^7.0.0","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.0.0","regenerator-runtime":"^0.12.1","clean-webpack-plugin":"^0.1.16","enzyme-adapter-react-16":"^1.1.1","react-addons-test-utils":"^15.5.1","@babel/plugin-proposal-class-properties":"^7.5.5"},"peerDependencies":{"3box":"^1.14.0","react":">= 16.3.0","react-dom":">= 16.3.0"},"_npmOperationalInternal":{"tmp":"tmp/3box-profile-edit-react_0.0.1-beta.8_1578334940681_0.9508470557728277","host":"s3://npm-registry-packages"}},"0.0.1-beta.9":{"name":"3box-profile-edit-react","version":"0.0.1-beta.9","keywords":["edit profile","3Box","decentralized","ethereum"],"author":{"name":"3box.io"},"license":"MIT","_id":"3box-profile-edit-react@0.0.1-beta.9","maintainers":[{"name":"oznekenzo","email":"mkn293@nyu.edu"}],"contributors":[{"name":"Kenzo Nakamura","email":"kenzo@nyu.edu"}],"dist":{"shasum":"e4f787b0f612c9efeb4b2562fe60d2fb8527a971","tarball":"https://registry.npmjs.org/3box-profile-edit-react/-/3box-profile-edit-react-0.0.1-beta.9.tgz","fileCount":46,"integrity":"sha512-xQTYc44rywmuNkWkgwO+IB3/v3e0YHSxrFsVli2VA7z0I0lBb//8n26Gxt8oI6YUE+bpBVFFp27iRukw0eH5ng==","signatures":[{"sig":"MEUCIHDLKDBYJV46oN3sNwkGcqtSU/PILQA/ItiqS5pa06fpAiEA3D7IHHwT48dE7QWSl5FRK4UC+Uzttv/92uRX43UlR0w=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":5007947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeE3v+CRA9TVsSAnZWagAAQ9QP/1Ej7SiMWlO/tTL2X7EN\nsjA3uJ2+ftUnQ8iL8Oz7ytkYiQBq0p9U6t5vAAiZ1CI9+i6xbGPTitbzODFB\nSWIxA/r8c+PzG1960KYB+BcvlPPcX0ELj9KuIus436FrgA7aUsQ2qmwlhg+U\nlkDhp8npiWH4+EyoEQxuTCOtquZVo69YSUbX4ADoTKQUYpb1EUQHYRcv2zDK\nauLBOTpOERmlWlXr5bnhmm9Ny9800JQPeU88iww9M4OTPqmS0sDX77RDVRoP\ntBI9HyE0Am30+XCPifC5hruw2Pid9BqYlcE5lDmsLZ4h9aIxGnIKN21lJPut\ndE2cZR8hzku4k9OeOvsJk7JNwNY2ssXDDOHm/4KONVWm633bBftbFpzBbi/j\nD9QyUFY98jeaZR85Er64K0T0Fikl/SyHtdzi3oC9JuSL5pyI7hNHXcZOuQcV\n8zNuB6YIDNKaJ4KUsUE2MBeT1/5bTRa2ZP3Vu4Toay7pDFhlR8ZG4iqZ6Dgf\nPQus3vHZxnS7jcOp0tWkOGJs0ZlqDTJA85Gi+hofUvzb7R+L9ux6tsdkwJXY\ngtcVCMs6FHD0UB2TABwMXqZAGS84zrfEiBQGcH6aoLJCX7VL8wqMt1w5KVHP\n/MISH1gbIQjWWlqnOWDoQz9B8D5lA5NUHct/gy2eYgqM7BFuAixwV6Z80ShC\nDqSg\r\n=WAok\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./lib/index.js","readme":"[![Discord](https://img.shields.io/discord/484729862368526356.svg?style=for-the-badge)](https://discordapp.com/invite/Z3f3Cxy)\r\n[![npm](https://img.shields.io/npm/v/3box-chatbox-react.svg?style=for-the-badge)](https://www.npmjs.com/package/3box-profile-edit-react)\r\n[![Twitter Follow](https://img.shields.io/twitter/follow/3boxdb.svg?style=for-the-badge&label=Twitter)](https://twitter.com/3boxdb)\r\n\r\n# 3Box Profile Edit Plugin 📝\r\n\r\nThe `3box-profile-edit-react` node package is a drop-in react component that provides Web3 developers with UI and logic for editing user profiles in their Ethereum application. Quickly add customizable fields that are pertinent to your dapp on top of basic input fields, with the option of `text`, `textarea`, and `select` (dropdown) style inputs. The 3Box Edit Profile plugin is built using 3Box infrastructure. *Read the docs on [docs.3box.io](https://docs.3box.io/build/plugins/chatbox)*.\r\n\r\n### Try the demo [here](https://3box.github.io/3box-profile-edit-react/examples/dist/)\r\n![Example Screenshot](EditProfile.png)\r\n</br>\r\n\r\n## How it Works\r\n#### Architecture\r\nThe Edit Profile plugin implements simple `set` & `get` methods on both the [Profiles API](https://docs.3box.io/api/profiles) and the [Spaces API](https://docs.3box.io/api/storage) for standard fields (`name`, `image`, `coverPhoto`, `emoji`, `description`) depending on which profile the user chooses as their default (`3Box` or `App`), but will use only the Spaces API for custom fields added by the developer passed as a prop to the component. Both methods are made available via the [`3Box.js SDK`](https://github.com/3box/3box-js). After a user has set which default profile they'd like to use, by setting a boolean to the key `isAppProfileDefault` in the space's public store, the dapp should appropriately fetch from that profile elsewhere in the dapp.\r\n\r\n#### Authentication\r\nPrior to first render of the Edit Profile component, the dapp should have already run `const box = await Box.openBox(userAddress, ethereumProvider)` and `const space = await box.openSpace(spaceName)` and passed both the `box` and `space` objects as props of the same name.\r\n</br>\r\n</br>\r\n\r\n## Getting Started\r\n1. Install the component\r\n2. Configure application settings and props to component\r\n3. Usage\r\n4. Display correct profile in your app\r\n\r\n### 1. Install the component\r\n\r\n```shell\r\nnpm i -S 3box-profile-edit-react\r\n```\r\n\r\n### 2. Configure application settings and props to component\r\n**First, choose a name for your application's 3Box space.**\r\n\r\nAlthough you are free to choose whichever name you'd like for your app's space, we recommend using the name of your app. If your application already has a 3Box space, you are welcome to use that same one for the chatbox.\r\n\r\n**Then, configure the custom fields you'd like to add to the component**\r\n\r\nThe `customFields` prop must receive an ***array*** of *any* number of objects in the following structures:\r\n```javascript\r\n    { // for a field with a text input\r\n        inputType: 'text',\r\n        key: 'backupAddress', // the key used to save the value\r\n        field: 'Backup Address' // how to display the key in the UI\r\n      }, \r\n\r\n      { // for a field with a textarea input\r\n        inputType: 'textarea',\r\n        key: 'spiritCryptoKittie',\r\n        field: 'Spirit CryptoKitty'\r\n      },\r\n\r\n      { // for a field with a dropdown input\r\n        inputType: 'dropdown',\r\n        key: 'preferredCoin',\r\n        field: 'Preferred Coin',\r\n        options: [{ // dropdown input requires an array of objects\r\n          value: 'eth', // value passed after selection\r\n          display: 'Ethereum' // what the user will see in the dropdown\r\n        }, {\r\n          value: 'btc',\r\n          display: 'Bitcoin'\r\n        }, {\r\n          value: 'ltc',\r\n          display: 'Litecoin'\r\n        }]\r\n      }\r\n```\r\nThe Edit Profile component comes standard with `Name`, `Emoji`, and `Description` fields.  The component defaults to using the 3Box profile (as the `isAppProfileDefault` boolean in the space is still undefined). Fields passed to `customFields` however will always be saved to the app's space.\r\n\r\n</br>\r\n</br>\r\n\r\n\r\n### 3. Usage\r\nThe Edit Profile component can of course be used in any way the developer pleases, though we recommend it be used on a dedicated edit profile page or in a popup modal (not included) of the developer's design.  Remember, both the `box` and `space` instance must be passed to the component before it mounts.\r\n\r\n#### Example\r\n\r\n```jsx\r\nimport EditProfile from '3box-profile-edit-react';\r\n\r\nconst MyComponent = ({ customFields, box, space, myAddress, myProfile, redirectFn }) => (\r\n    <EditProfile\r\n        // required\r\n        box={box}\r\n        space={space}\r\n        currentUserAddr={myAddress}\r\n\r\n        // optional\r\n        customFields={customFields}\r\n        currentUser3BoxProfile={myProfile}\r\n        redirectFn={redirectFn}\r\n    />\r\n);\r\n```\r\n\r\n### 4. Display correct profile in your app\r\nOnce a user selects a default profile (3Box or app) the decision should reflect elsewhere in your dapp.  To do this, you should check `isAppProfileDefault` flag, then call `get` on the respective profile for fields `name`, `image`, `coverPhoto`, `emoji`, and `description`.  Custom fields added to the Edit Profile component, however, are all saved to the application profile in the `space` used by your dapp and should `get` from there.\r\n\r\nChecking and getting from the appropriate default profile should look something like this:\r\n```javascript\r\n  const isAppProfileDefault = await space.public.get('isAppProfileDefault');\r\n\r\n  let profile;\r\n  if (isAppProfileDefault) {\r\n    profile = await Box.getProfile(currentUserAddr);\r\n  } else {\r\n    profile = await space.public.all();\r\n  }\r\n\r\n  this.setState({\r\n    name: profile.name,\r\n    image: profile.image,\r\n    coverPhoto: profile.coverPhoto,\r\n    emoji: profile.emoji,\r\n    description: profile.description,\r\n  })\r\n```\r\n\r\n\r\n#### Prop Types\r\n\r\n| Property | Type            | Required          | Description |\r\n| :-------------------------------- | :-------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\r\n| `box`    | Object         |    True   | The `box` instance returned from running `await Box.openBox(address, web3)` somewhere in your dApp.|\r\n| `space`    | Object         |   True    | The `space` instance returned from running `await box.openSpace(spaceName)` somewhere in your dApp.|\r\n| `currentUserAddr`    | String (Ethereum Address)             | True| The current user's Ethereum address. Used to fetch the user's profile if it's not provided and for other various uses in the component. |\r\n| `customFields`    | Array       |        | An array of any amount of objects structured in one of three ways outlined above.  |\r\n| `currentUser3BoxProfile`    | Object       |       | If passed, it must be the object returned from calling `const currentUser3BoxProfile = await Box.getProfile(myAddress);`.  If this is not passed, the component runs the same static method using the `currentUserAddr` prop |\r\n| `redirectFn`    | Function      |    | A function that runs after saving the fields in the UI is complete, or when a user hits `cancel`.  The user's ethereum address will be passed as a param in the event that the dapp uses this in the route |\r\n\r\n## License\r\n\r\nMIT\r\n","gitHead":"41830df0b19d89ec4cd44b689dbe0597abf00b38","scripts":{"lint":"eslint ./src","test":"npm run lint && npm run coverage","build":"webpack --config webpack.config.babel.js","clean":"rm -rf dist coverage","start":"webpack-dev-server --config examples/webpack.config.live.babel.js","coverage":"jest --coverage","build:es5":"rm -rf ./lib; ./node_modules/.bin/babel src --out-dir lib --source-maps inline --copy-files --ignore=src/__tests__/,src/__mocks__/","prepublish":"npm run clean && npm run test && npm run build","build-examples":"webpack --config examples/webpack.config.babel.js --progress"},"_npmUser":{"name":"oznekenzo","email":"mkn293@nyu.edu"},"_npmVersion":"6.4.1","description":"A drop in component for editing 3Box profiles.","directories":{},"resolutions":{"babel-core":"7.0.0-bridge.0"},"_nodeVersion":"8.12.0","dependencies":{"3box":"^1.15.0","async":"^3.1.0","emoji-js":"^3.4.1","orbit-db":"^0.21.4","babel-core":"^7.0.0-bridge.0","emoji-mart":"^2.11.1","3id-resolver":"0.0.6","@babel/runtime":"^7.6.0","svg-inline-loader":"^0.8.0","ethereum-blockies-base64":"^1.0.2","react-addons-css-transition-group":"^15.6.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"chai":"^4.1.2","react":"^16.6.0","enzyme":"^3.3.0","eslint":"^5.8.0","webpack":"^4.9.1","jest-cli":"^23.6.0","node-sass":"^4.7.2","react-dom":"^16.6.0","@babel/cli":"^7.7.7","babel-jest":"^23.6.0","css-loader":"^1.0.1","prop-types":"^15.6.0","@babel/core":"^7.1.2","file-loader":"^4.2.0","sass-loader":"^7.0.1","webpack-cli":"^3.1.2","babel-eslint":"^10.0.1","babel-loader":"^8.0.4","did-resolver":"0.0.7","style-loader":"^0.23.1","@babel/register":"^7.0.0","react-inlinesvg":"^1.1.6","react-hot-loader":"next","@babel/preset-env":"^7.1.0","webpack-dev-server":"^3.1.4","@babel/preset-react":"^7.0.0","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.0.0","regenerator-runtime":"^0.12.1","clean-webpack-plugin":"^0.1.16","enzyme-adapter-react-16":"^1.1.1","react-addons-test-utils":"^15.5.1","@babel/plugin-proposal-class-properties":"^7.5.5"},"peerDependencies":{"3box":"^1.14.0","react":">= 16.3.0","react-dom":">= 16.3.0"},"_npmOperationalInternal":{"tmp":"tmp/3box-profile-edit-react_0.0.1-beta.9_1578335229699_0.7995368087384731","host":"s3://npm-registry-packages"}},"0.0.1-beta.10":{"name":"3box-profile-edit-react","version":"0.0.1-beta.10","keywords":["edit profile","3Box","decentralized","ethereum"],"author":{"name":"3box.io"},"license":"MIT","_id":"3box-profile-edit-react@0.0.1-beta.10","maintainers":[{"name":"oznekenzo","email":"mkn293@nyu.edu"}],"contributors":[{"name":"Kenzo Nakamura","email":"kenzo@nyu.edu"}],"dist":{"shasum":"eabc4b5b2d0304ee28618fb91b923d6b389348d2","tarball":"https://registry.npmjs.org/3box-profile-edit-react/-/3box-profile-edit-react-0.0.1-beta.10.tgz","fileCount":46,"integrity":"sha512-7wFPSb+VPQRFbNsoXy0/yXGcxJLx5esUP8MnMjoN98/SCTJhTz0LcXE35mEMWxYcaFr/GGe/WuZ8j9r6NKFtgg==","signatures":[{"sig":"MEYCIQDu8UUGwl+3pxqn9vjLHDS904qZMfqjqQtWiphEU0AHIAIhAPtsnWbp2M6TIiNjxbcFC14Ckys4oB+iy1vJrFdzngZm","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":5007943,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeE32MCRA9TVsSAnZWagAA3YQQAIh9AVRBQ9YFA+S1G2uw\nEidXAdJ+WPgu7YumT1qO5eUdgAQuaTIoD9KPdxJjVg09uyp2/RYGOJIsmY6g\npb4UFvvzYIm/wphJ/nTnfJ9yudAqWmrk7ETyNMUY2p8+R8d5vmzMZoSnva3K\n01DtsX4H7AngNLwk8odQJ/ruaag/b91hzxqKhUpuNj1R6rQWg2sXD4qeAsZw\nWhp94flOiRKsac1Jo5gvb+m1PrLxKj6hZs1Yr4Eh40Yyo/1Dbw7MVAFcmqGK\neaf4n8WSHY9ABP67pJZS4NoVI5VDjfhFFC5Lf0WpWct0Ys2CoymxJo1/HIen\nPYeA7lgUDZswX/fZ3KpPkL0soS6Y+FzpsGIG0EO4nWeb4i6Bg1wD62oNYrzg\nci6WkiFP1T0NHJr18P/TcIU0300qP/TkXvuxkWLa4jgY42Ymm5DeztMkcw/l\n3qMIQ13USgzw4VvcCVP2QArftiLpuHDSiTZIWOohX5ZmW79RduFqNwgyjUvp\nRVjBpc6oSoaIqmhOJ0np5zH+hdOwzE4c9e57VqKEgp8qY1QzaItPWkY1DSqK\nxBE1IMI8592ZGsEHvrOg3hzfbz7bsdRjN5FRwNN/wWBv97nOpTFQ8daapvnS\nf6+prIAWCNBzeJEno63zZEyfeUxv3RJo34qCsLR3zdq2yUvYhK0tXigvzQRQ\nZDoN\r\n=904x\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./lib/index.js","readme":"[![Discord](https://img.shields.io/discord/484729862368526356.svg?style=for-the-badge)](https://discordapp.com/invite/Z3f3Cxy)\r\n[![npm](https://img.shields.io/npm/v/3box-chatbox-react.svg?style=for-the-badge)](https://www.npmjs.com/package/3box-profile-edit-react)\r\n[![Twitter Follow](https://img.shields.io/twitter/follow/3boxdb.svg?style=for-the-badge&label=Twitter)](https://twitter.com/3boxdb)\r\n\r\n# 3Box Profile Edit Plugin 📝\r\n\r\nThe `3box-profile-edit-react` node package is a drop-in react component that provides Web3 developers with UI and logic for editing user profiles in their Ethereum application. Quickly add customizable fields that are pertinent to your dapp on top of basic input fields, with the option of `text`, `textarea`, and `select` (dropdown) style inputs. The 3Box Edit Profile plugin is built using 3Box infrastructure. *Read the docs on [docs.3box.io](https://docs.3box.io/build/plugins/chatbox)*.\r\n\r\n### Try the demo [here](https://3box.github.io/3box-profile-edit-react/examples/dist/)\r\n![Example Screenshot](EditProfile.png)\r\n</br>\r\n\r\n## How it Works\r\n#### Architecture\r\nThe Edit Profile plugin implements simple `set` & `get` methods on both the [Profiles API](https://docs.3box.io/api/profiles) and the [Spaces API](https://docs.3box.io/api/storage) for standard fields (`name`, `image`, `coverPhoto`, `emoji`, `description`) depending on which profile the user chooses as their default (`3Box` or `App`), but will use only the Spaces API for custom fields added by the developer passed as a prop to the component. Both methods are made available via the [`3Box.js SDK`](https://github.com/3box/3box-js). After a user has set which default profile they'd like to use, by setting a boolean to the key `isAppProfileDefault` in the space's public store, the dapp should appropriately fetch from that profile elsewhere in the dapp.\r\n\r\n#### Authentication\r\nPrior to first render of the Edit Profile component, the dapp should have already run `const box = await Box.openBox(userAddress, ethereumProvider)` and `const space = await box.openSpace(spaceName)` and passed both the `box` and `space` objects as props of the same name.\r\n</br>\r\n</br>\r\n\r\n## Getting Started\r\n1. Install the component\r\n2. Configure application settings and props to component\r\n3. Usage\r\n4. Display correct profile in your app\r\n\r\n### 1. Install the component\r\n\r\n```shell\r\nnpm i -S 3box-profile-edit-react\r\n```\r\n\r\n### 2. Configure application settings and props to component\r\n**First, choose a name for your application's 3Box space.**\r\n\r\nAlthough you are free to choose whichever name you'd like for your app's space, we recommend using the name of your app. If your application already has a 3Box space, you are welcome to use that same one for the chatbox.\r\n\r\n**Then, configure the custom fields you'd like to add to the component**\r\n\r\nThe `customFields` prop must receive an ***array*** of *any* number of objects in the following structures:\r\n```javascript\r\n    { // for a field with a text input\r\n        inputType: 'text',\r\n        key: 'backupAddress', // the key used to save the value\r\n        field: 'Backup Address' // how to display the key in the UI\r\n      }, \r\n\r\n      { // for a field with a textarea input\r\n        inputType: 'textarea',\r\n        key: 'spiritCryptoKittie',\r\n        field: 'Spirit CryptoKitty'\r\n      },\r\n\r\n      { // for a field with a dropdown input\r\n        inputType: 'dropdown',\r\n        key: 'preferredCoin',\r\n        field: 'Preferred Coin',\r\n        options: [{ // dropdown input requires an array of objects\r\n          value: 'eth', // value passed after selection\r\n          display: 'Ethereum' // what the user will see in the dropdown\r\n        }, {\r\n          value: 'btc',\r\n          display: 'Bitcoin'\r\n        }, {\r\n          value: 'ltc',\r\n          display: 'Litecoin'\r\n        }]\r\n      }\r\n```\r\nThe Edit Profile component comes standard with `Name`, `Emoji`, and `Description` fields.  The component defaults to using the 3Box profile (as the `isAppProfileDefault` boolean in the space is still undefined). Fields passed to `customFields` however will always be saved to the app's space.\r\n\r\n</br>\r\n</br>\r\n\r\n\r\n### 3. Usage\r\nThe Edit Profile component can of course be used in any way the developer pleases, though we recommend it be used on a dedicated edit profile page or in a popup modal (not included) of the developer's design.  Remember, both the `box` and `space` instance must be passed to the component before it mounts.\r\n\r\n#### Example\r\n\r\n```jsx\r\nimport EditProfile from '3box-profile-edit-react';\r\n\r\nconst MyComponent = ({ customFields, box, space, myAddress, myProfile, redirectFn }) => (\r\n    <EditProfile\r\n        // required\r\n        box={box}\r\n        space={space}\r\n        currentUserAddr={myAddress}\r\n\r\n        // optional\r\n        customFields={customFields}\r\n        currentUser3BoxProfile={myProfile}\r\n        redirectFn={redirectFn}\r\n    />\r\n);\r\n```\r\n\r\n### 4. Display correct profile in your app\r\nOnce a user selects a default profile (3Box or app) the decision should reflect elsewhere in your dapp.  To do this, you should check `isAppProfileDefault` flag, then call `get` on the respective profile for fields `name`, `image`, `coverPhoto`, `emoji`, and `description`.  Custom fields added to the Edit Profile component, however, are all saved to the application profile in the `space` used by your dapp and should `get` from there.\r\n\r\nChecking and getting from the appropriate default profile should look something like this:\r\n```javascript\r\n  const isAppProfileDefault = await space.public.get('isAppProfileDefault');\r\n\r\n  let profile;\r\n  if (isAppProfileDefault) {\r\n    profile = await Box.getProfile(currentUserAddr);\r\n  } else {\r\n    profile = await space.public.all();\r\n  }\r\n\r\n  this.setState({\r\n    name: profile.name,\r\n    image: profile.image,\r\n    coverPhoto: profile.coverPhoto,\r\n    emoji: profile.emoji,\r\n    description: profile.description,\r\n  })\r\n```\r\n\r\n\r\n#### Prop Types\r\n\r\n| Property | Type            | Required          | Description |\r\n| :-------------------------------- | :-------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\r\n| `box`    | Object         |    True   | The `box` instance returned from running `await Box.openBox(address, web3)` somewhere in your dApp.|\r\n| `space`    | Object         |   True    | The `space` instance returned from running `await box.openSpace(spaceName)` somewhere in your dApp.|\r\n| `currentUserAddr`    | String (Ethereum Address)             | True| The current user's Ethereum address. Used to fetch the user's profile if it's not provided and for other various uses in the component. |\r\n| `customFields`    | Array       |        | An array of any amount of objects structured in one of three ways outlined above.  |\r\n| `currentUser3BoxProfile`    | Object       |       | If passed, it must be the object returned from calling `const currentUser3BoxProfile = await Box.getProfile(myAddress);`.  If this is not passed, the component runs the same static method using the `currentUserAddr` prop |\r\n| `redirectFn`    | Function      |    | A function that runs after saving the fields in the UI is complete, or when a user hits `cancel`.  The user's ethereum address will be passed as a param in the event that the dapp uses this in the route |\r\n\r\n## License\r\n\r\nMIT\r\n","gitHead":"41830df0b19d89ec4cd44b689dbe0597abf00b38","scripts":{"lint":"eslint ./src","test":"npm run lint && npm run coverage","build":"webpack --config webpack.config.babel.js","clean":"rm -rf dist coverage","start":"webpack-dev-server --config examples/webpack.config.live.babel.js","coverage":"jest --coverage","build:es5":"rm -rf ./lib; ./node_modules/.bin/babel src --out-dir lib --source-maps inline --copy-files --ignore=src/__tests__/,src/__mocks__/","prepublish":"npm run clean && npm run test && npm run build","build-examples":"webpack --config examples/webpack.config.babel.js --progress"},"_npmUser":{"name":"oznekenzo","email":"mkn293@nyu.edu"},"_npmVersion":"6.4.1","description":"A drop in component for editing 3Box profiles.","directories":{},"resolutions":{"babel-core":"7.0.0-bridge.0"},"_nodeVersion":"8.12.0","dependencies":{"3box":"^1.15.0","async":"^3.1.0","emoji-js":"^3.4.1","orbit-db":"^0.21.4","babel-core":"^7.0.0-bridge.0","emoji-mart":"^2.11.1","3id-resolver":"0.0.6","@babel/runtime":"^7.6.0","svg-inline-loader":"^0.8.0","ethereum-blockies-base64":"^1.0.2","react-addons-css-transition-group":"^15.6.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"chai":"^4.1.2","react":"^16.6.0","enzyme":"^3.3.0","eslint":"^5.8.0","webpack":"^4.9.1","jest-cli":"^23.6.0","node-sass":"^4.7.2","react-dom":"^16.6.0","@babel/cli":"^7.7.7","babel-jest":"^23.6.0","css-loader":"^1.0.1","prop-types":"^15.6.0","@babel/core":"^7.1.2","file-loader":"^4.2.0","sass-loader":"^7.0.1","webpack-cli":"^3.1.2","babel-eslint":"^10.0.1","babel-loader":"^8.0.4","did-resolver":"0.0.7","style-loader":"^0.23.1","@babel/register":"^7.0.0","react-inlinesvg":"^1.1.6","react-hot-loader":"next","@babel/preset-env":"^7.1.0","webpack-dev-server":"^3.1.4","@babel/preset-react":"^7.0.0","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.0.0","regenerator-runtime":"^0.12.1","clean-webpack-plugin":"^0.1.16","enzyme-adapter-react-16":"^1.1.1","react-addons-test-utils":"^15.5.1","@babel/plugin-proposal-class-properties":"^7.5.5"},"peerDependencies":{"3box":"^1.14.0","react":">= 16.3.0","react-dom":">= 16.3.0"},"_npmOperationalInternal":{"tmp":"tmp/3box-profile-edit-react_0.0.1-beta.10_1578335628008_0.803312817640434","host":"s3://npm-registry-packages"}},"0.0.2":{"name":"3box-profile-edit-react","version":"0.0.2","keywords":["edit profile","3Box","decentralized","ethereum"],"author":{"name":"3box.io"},"license":"MIT","_id":"3box-profile-edit-react@0.0.2","maintainers":[{"name":"oznekenzo","email":"mkn293@nyu.edu"}],"contributors":[{"name":"Kenzo Nakamura","email":"kenzo@nyu.edu"}],"dist":{"shasum":"6e9d536ec9eb320cbef15074d46b269b11fee10a","tarball":"https://registry.npmjs.org/3box-profile-edit-react/-/3box-profile-edit-react-0.0.2.tgz","fileCount":47,"integrity":"sha512-iS+J+6pz2bfgMyLN9zavT3RGnimLRC/HMVeC1TI9ETv5TYBpWC0m1CrPMN9DkSGVV61wSR05kX9G2VcdLTzwSQ==","signatures":[{"sig":"MEYCIQDLBPM4ihg91YiAqdm2AMiEn7kw40gbeQ9BnEzvwc8lswIhAIGWZ+KwNH2CD/Q/x+f7FEhgH0uL1plKdzzkgYvlcTtX","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":5008017,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeE4x8CRA9TVsSAnZWagAAypAP/1oUCjRfFxyxy7G1i8k0\nESKIXQfwcDATJ3Q4jozYMO7BxIY93OGV+UoDXqnB767iBGklpUQdQ3sq8lcr\nyR8x8JXHUjTW+APvKj/GH2nNzWPrT9gd0J6IsdFj1x3z3eyoo8N6YtqVLkop\nMJZPS9ySm74RiATuvU/63nCbNV/8DExGFmda41Gnbkm9TGcAsAnl6mgLBGUk\n4qjUjfpMOK2jTJEAeo/PjKY/K3JFgUPnpzmQy1rjga7zOxrO4njY3+YSzGl2\npOjXoKyFolXlCzR/zWEukyJqJNRIVERJUzhMnDed9OlxVcW1FGN1AY7s6JbV\nPsnjOOJXjxwxyfMomHeKLrRc7sahxML+F4QC9Q7j1Jqr+0AEkrmDrm4/Fn3r\ntOcyyol8Ro+hT00Pv5pZPGAhAtAlvq0mX9NUGcmixxiAc1u5YO3+Y4N66SSr\nJuAbPQmbFWTGqi7ZhPGkXbldsNzj+kSRtIbqcXaQOg4y0af6VGTjtMACiGcG\nMcwxbM9InaeAX9CXiuunIagz/REY11zNpsMspPxV+J9JrrI0mVLXihi1dYnb\nY1iuyvNFXpykn25S7eEqb04tLmewUDffqWjLGfDslMa2yX/Oax82yYHiSXrk\nO6d+VgYgSgLVfhTf3H+Y8pxRRFQG504BNcTOTDMzoJML20iOWTEdUhKJpale\nS/NJ\r\n=iYti\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./lib/index.js","gitHead":"41830df0b19d89ec4cd44b689dbe0597abf00b38","scripts":{"lint":"eslint ./src","test":"npm run lint && npm run coverage","build":"webpack --config webpack.config.babel.js","clean":"rm -rf dist coverage","start":"webpack-dev-server --config examples/webpack.config.live.babel.js","coverage":"jest --coverage","build:es5":"rm -rf ./lib; ./node_modules/.bin/babel src --out-dir lib --source-maps inline --copy-files --ignore=src/__tests__/,src/__mocks__/","prepublish":"npm run clean && npm run test && npm run build","build-examples":"webpack --config examples/webpack.config.babel.js --progress"},"_npmUser":{"name":"oznekenzo","email":"mkn293@nyu.edu"},"deprecated":"Deprecated in favor of Ceramic: https://developers.ceramic.network","_npmVersion":"6.4.1","description":"A drop in component for editing 3Box profiles.","directories":{},"resolutions":{"babel-core":"7.0.0-bridge.0"},"_nodeVersion":"8.12.0","dependencies":{"3box":"^1.15.0","async":"^3.1.0","emoji-js":"^3.4.1","orbit-db":"^0.21.4","babel-core":"^7.0.0-bridge.0","emoji-mart":"^2.11.1","3id-resolver":"0.0.6","@babel/runtime":"^7.6.0","svg-inline-loader":"^0.8.0","ethereum-blockies-base64":"^1.0.2","react-addons-css-transition-group":"^15.6.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","react":"^16.6.0","enzyme":"^3.3.0","eslint":"^5.8.0","webpack":"^4.9.1","jest-cli":"^23.6.0","node-sass":"^4.7.2","react-dom":"^16.6.0","@babel/cli":"^7.7.7","babel-jest":"^23.6.0","css-loader":"^1.0.1","prop-types":"^15.6.0","@babel/core":"^7.1.2","file-loader":"^4.2.0","sass-loader":"^7.0.1","webpack-cli":"^3.1.2","babel-eslint":"^10.0.1","babel-loader":"^8.0.4","did-resolver":"0.0.7","style-loader":"^0.23.1","@babel/register":"^7.0.0","react-inlinesvg":"^1.1.6","react-hot-loader":"next","@babel/preset-env":"^7.1.0","webpack-dev-server":"^3.1.4","@babel/preset-react":"^7.0.0","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.0.0","regenerator-runtime":"^0.12.1","clean-webpack-plugin":"^0.1.16","enzyme-adapter-react-16":"^1.1.1","react-addons-test-utils":"^15.5.1","@babel/plugin-proposal-class-properties":"^7.5.5"},"peerDependencies":{"3box":"^1.14.0","react":">= 16.3.0","react-dom":">= 16.3.0"},"_npmOperationalInternal":{"tmp":"tmp/3box-profile-edit-react_0.0.2_1578339451844_0.12691027109582276","host":"s3://npm-registry-packages"}},"0.0.3":{"name":"3box-profile-edit-react","version":"0.0.3","keywords":["edit profile","3Box","decentralized","ethereum"],"author":{"name":"3box.io"},"license":"MIT","_id":"3box-profile-edit-react@0.0.3","maintainers":[{"name":"oznekenzo","email":"mkn293@nyu.edu"}],"contributors":[{"name":"Kenzo Nakamura","email":"kenzo@nyu.edu"}],"dist":{"shasum":"4375671723f7ae917853133af125f56309696ae4","tarball":"https://registry.npmjs.org/3box-profile-edit-react/-/3box-profile-edit-react-0.0.3.tgz","fileCount":46,"integrity":"sha512-C80iVBy6dklz018wF5ca/NuIF6QQW8WWFJ+qcsYgfv6fYT8ikBjeNfS0JEq/w5zM5OwGjXDnat7GSB+kH/X1KA==","signatures":[{"sig":"MEYCIQD8oF8zjONOwBFj6UoBXN0066TBDq4USh1q1FiQLD/YowIhANUMT4c6Pp4Wg/eoCbPJMysi0tugg9Z+K+/hH/9mRvBT","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1479531,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeFpgqCRA9TVsSAnZWagAAZTwP/RObbzTHZQk+ygBq2n8f\nxfkDeMnLhFStvuZrysZYDSGIB8UNblfMNk2Ut4+GwIZCprHoH2GXs/Sk5SyJ\nPJVvJzMM462urHjRm8CJy8riFGB+WWfwJvUXhr85wZwF/962edaaxugk2Eck\n6klWeWIczJAdzz5YbGkiUS+gtctBbMGc7e021/15UGsYnuw8CvmUsOHJTd6T\n+i0MAJmYJfA2i2cHbFcJfWOTbNdQ5JwOjRsjw4AsfgWN3cdxLo+rea0bxD2U\nNvrdt3Cmxlc5pdnCL5pVE5mYEjw93eYufcWf1ou9kyN3oGMgt514XfqRSnfB\nxbFEnIYUMkjIOA1E8p4lqd2TbJMbJEq329k6YZb3wUS6DTTP/qK9WkA+Dlf5\nGp8HHAIQbpkxbaAlWWy7KxRrYQ+NOotQaqdsNKEaU9lxDtBsG4AsXpwwYoxf\ne14uZlLIweTqrBACKvJl+vvtStnladMIqCcAbcQXPbo6+29aiNYOd9bsK/IR\ntpAlaPOxQaiL5SX6AGudYktQ5ktf+xAEPSWh2HOQuMPYaVPBSrE2UXcNdDZf\naYLO3xij90oheszRagnw6eUJcQ7lv4yj9gzBZDT2AwK34rZo5lMc/LBzAHsU\n0WRm3Sth5KOUHxBIyKKx/C9+a+y/UwBUbt8nK4VW6UdpKKoOoWvHW3pF7lL7\nAakt\r\n=aCbS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./lib/index.js","gitHead":"8b17f49da42f98824384c28c34eb2cda71b5c3d0","scripts":{"lint":"eslint ./src","test":"npm run lint && npm run coverage","build":"webpack --config webpack.config.babel.js","clean":"rm -rf dist coverage","start":"webpack-dev-server --config examples/webpack.config.live.babel.js","coverage":"jest --coverage","build:es5":"rm -rf ./lib; ./node_modules/.bin/babel src --out-dir lib --source-maps inline --copy-files --ignore=src/__tests__/,src/__mocks__/","prepublish":"npm run clean && npm run test && npm run build","build-examples":"webpack --config examples/webpack.config.babel.js --progress"},"_npmUser":{"name":"oznekenzo","email":"mkn293@nyu.edu"},"deprecated":"Deprecated in favor of Ceramic: https://developers.ceramic.network","_npmVersion":"6.4.1","description":"A drop in component for editing 3Box profiles.","directories":{},"resolutions":{"babel-core":"7.0.0-bridge.0"},"_nodeVersion":"8.12.0","dependencies":{"3box":"^1.15.0","async":"^3.1.0","emoji-js":"^3.4.1","orbit-db":"^0.21.4","babel-core":"^7.0.0-bridge.0","emoji-mart":"^2.11.1","multicodec":"^0.5.6","3id-resolver":"0.0.6","@babel/runtime":"^7.6.0","react-inlinesvg":"^1.2.0","svg-inline-loader":"^0.8.0","ethereum-blockies-base64":"^1.0.2","react-addons-css-transition-group":"^15.6.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","react":"^16.6.0","enzyme":"^3.3.0","eslint":"^5.8.0","webpack":"^4.9.1","jest-cli":"^23.6.0","node-sass":"^4.7.2","react-dom":"^16.6.0","@babel/cli":"^7.7.7","babel-jest":"^23.6.0","css-loader":"^1.0.1","prop-types":"^15.6.0","@babel/core":"^7.1.2","file-loader":"^4.2.0","sass-loader":"^7.0.1","webpack-cli":"^3.1.2","babel-eslint":"^10.0.1","babel-loader":"^8.0.4","did-resolver":"0.0.7","style-loader":"^0.23.1","@babel/register":"^7.0.0","react-hot-loader":"next","@babel/preset-env":"^7.1.0","webpack-dev-server":"^3.1.4","@babel/preset-react":"^7.0.0","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.0.0","regenerator-runtime":"^0.12.1","clean-webpack-plugin":"^0.1.16","enzyme-adapter-react-16":"^1.1.1","react-addons-test-utils":"^15.5.1","@babel/plugin-proposal-class-properties":"^7.5.5"},"peerDependencies":{"3box":"^1.14.0","react":">= 16.3.0","react-dom":">= 16.3.0"},"_npmOperationalInternal":{"tmp":"tmp/3box-profile-edit-react_0.0.3_1578539049796_0.04668218089938514","host":"s3://npm-registry-packages"}},"0.0.4":{"name":"3box-profile-edit-react","version":"0.0.4","keywords":["edit profile","3Box","decentralized","ethereum"],"author":{"name":"3box.io"},"license":"MIT","_id":"3box-profile-edit-react@0.0.4","maintainers":[{"name":"oznekenzo","email":"mkn293@nyu.edu"}],"contributors":[{"name":"Kenzo Nakamura","email":"kenzo@nyu.edu"}],"dist":{"shasum":"972b2d4e37da98375c5e8d277895c8fe4924f2e7","tarball":"https://registry.npmjs.org/3box-profile-edit-react/-/3box-profile-edit-react-0.0.4.tgz","fileCount":46,"integrity":"sha512-H6MUv6xH35Ed/c0RV8lQizdET+STJPgP1GepidxYwNuxGSW+M3t4jnEqViba9cPVoP2B9lwaqWStmpatehG2pQ==","signatures":[{"sig":"MEQCIHYtpQj5jRh/jjd8N/hPO6UlVGxgzcY9PMQRrJVeQDNdAiBwgCfDXu1wILq3koolxrfEn43rvtlFB01vMXccsxxSnQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1479596,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeHi03CRA9TVsSAnZWagAA/pYP/2CMETX/QlUH45FpgDvE\n2Fkasw9rN1FyFPY9zwysDSRWdRV6EP/WaOu/eEkJT/kVpt1uN3/fGwjuGryO\nPBltlZQc3zsXZ526EvCw7BTqv+dRbIOa66N++vysaMWMoY+boAypxgE8lQZS\nRgnjpvnGoacjK3nl+MSAnDGxBJKES9LegXq8eV8zAsYvvKcDxJ9ez48zGf40\n5Jt2pxtegsK844EsatANYIn9F25ko22Q+d1ok2h03hS9VMLjoXl8HSunLRsh\nirsEcw3HVd7x2nqt2Miut8M6S8Ukoz4M05Krm98sXXpXrSFmdqpv6YJX1N0o\n0aFs+EdC0l33IlKuL0YEtLrezxj/ZalpUv+SW02OPC1oh8t6gJ6segC+6s/e\npmb+++bqANkeW3fFO47fG0i7ajwpkD+K2RhOM6WgJCWFKwWbE/W0w8byHxBY\nszng+oBjRGHgiNxpmGFzf8OfKN5ihn3vS6ZsNgAr4ycMBKeV4O1pOO+WF1eH\n01ROKOHMMWKoT/eN7CE4oXx5AFROw5YE1v8oSvtHSd7eEoIO5qrkUBXkrhSI\nYrz32T7N6FUL4lHp13oH6QK6eiVsT1V0zV1hp+C3+YlOf/s60jA8dK0SlHYG\n1x6a5a58xZ2FDTN7/CJis9JdAF+JvA6gjnEpy+eb8wYsN/gmCHqYHeltseK8\nW+RY\r\n=FHM4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./lib/index.js","gitHead":"8b17f49da42f98824384c28c34eb2cda71b5c3d0","scripts":{"lint":"eslint ./src","test":"npm run lint && npm run coverage","build":"webpack --config webpack.config.babel.js","clean":"rm -rf dist coverage","start":"webpack-dev-server --config examples/webpack.config.live.babel.js","coverage":"jest --coverage","build:es5":"rm -rf ./lib; ./node_modules/.bin/babel src --out-dir lib --source-maps inline --copy-files --ignore=src/__tests__/,src/__mocks__/","prepublish":"npm run clean && npm run test && npm run build","build-examples":"webpack --config examples/webpack.config.babel.js --progress"},"_npmUser":{"name":"oznekenzo","email":"mkn293@nyu.edu"},"deprecated":"Deprecated in favor of Ceramic: https://developers.ceramic.network","_npmVersion":"6.4.1","description":"A drop in component for editing 3Box profiles.","directories":{},"resolutions":{"babel-core":"7.0.0-bridge.0"},"_nodeVersion":"8.12.0","dependencies":{"3box":"^1.15.0","async":"^3.1.0","emoji-js":"^3.4.1","orbit-db":"^0.21.4","node-sass":"^4.7.2","babel-core":"^7.0.0-bridge.0","emoji-mart":"^2.11.1","multicodec":"^0.5.6","3id-resolver":"0.0.6","@babel/runtime":"^7.6.0","react-inlinesvg":"^1.2.0","svg-inline-loader":"^0.8.0","ethereum-blockies-base64":"^1.0.2","react-addons-css-transition-group":"^15.6.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","react":"^16.6.0","enzyme":"^3.3.0","eslint":"^5.8.0","webpack":"^4.9.1","jest-cli":"^23.6.0","react-dom":"^16.6.0","@babel/cli":"^7.7.7","babel-jest":"^23.6.0","css-loader":"^1.0.1","prop-types":"^15.6.0","@babel/core":"^7.1.2","file-loader":"^4.2.0","sass-loader":"^7.0.1","webpack-cli":"^3.1.2","babel-eslint":"^10.0.1","babel-loader":"^8.0.4","did-resolver":"0.0.7","style-loader":"^0.23.1","@babel/register":"^7.0.0","react-hot-loader":"next","@babel/preset-env":"^7.1.0","webpack-dev-server":"^3.1.4","@babel/preset-react":"^7.0.0","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.0.0","regenerator-runtime":"^0.12.1","clean-webpack-plugin":"^0.1.16","enzyme-adapter-react-16":"^1.1.1","react-addons-test-utils":"^15.5.1","@babel/plugin-proposal-class-properties":"^7.5.5"},"peerDependencies":{"3box":"^1.14.0","react":">= 16.3.0","react-dom":">= 16.3.0"},"_npmOperationalInternal":{"tmp":"tmp/3box-profile-edit-react_0.0.4_1579035959178_0.6222630792769377","host":"s3://npm-registry-packages"}},"0.0.5":{"name":"3box-profile-edit-react","version":"0.0.5","keywords":["edit profile","3Box","decentralized","ethereum"],"author":{"name":"3box.io"},"license":"MIT","_id":"3box-profile-edit-react@0.0.5","maintainers":[{"name":"oznekenzo","email":"mkn293@nyu.edu"}],"contributors":[{"name":"Kenzo Nakamura","email":"kenzo@nyu.edu"}],"dist":{"shasum":"29a366f641c26e6161bfc32280a281ad5522d9ce","tarball":"https://registry.npmjs.org/3box-profile-edit-react/-/3box-profile-edit-react-0.0.5.tgz","fileCount":46,"integrity":"sha512-lTW5Y+j9Nurqxx2lhMAq25IsixWyC3qd9XG/nW8oLogVwfS4lefjeGcN3PrAvPFy2qlpYOVVdboiOLZeou2H9A==","signatures":[{"sig":"MEUCIQDvrGuRq8lOOUHETjZX0Nrmw0GStGZnr4s4UxgNUQNwjQIgDaEWi5J56hReV4S4clHx4yQB2H1Hyk6WKwr9SXyEMnk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1479666,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeMxXoCRA9TVsSAnZWagAAB8AP/2evCllX+pp/DNyWAmcu\n4HHh99obsWMMTrNFwifesfuCcvkpQewygVFuSg1/8xlcxz5kU6Nt6UjjK0ST\nMNLgio9EZa/Q5Nxl5vVgAssp6lzbk/FZd8pFTLL6xwqd5xyM9GWDzW+8MRnO\nTEhsNGomk9M4GZEnCDtqnOpW/eLMLZvtvyOjr7fs5XzIqKh0sMNBzLs8SwwR\nDBLCctGuPeM5nKh9xhBX8KK8AyQGP9cRViZd7Jd2zSNuKy300GoDxXbXMybI\n0PTJpGw1rG3FttGJRG8acRGTo+9VzQtra5d6825GwC2WXiuVITMputr5Wc+V\nhjribfeClhGkcpdHiZEi2JKX1YjabxQecUWZO0a1RXxzDvW8OyPzfP6ZmwSg\noseqOWfZpJX75AmQjaCInTn7SlvmLsjIbAu8y4buSk/UbnL6NAlz71E1ieLC\nPSQJi8XdlcAzYNOF7jMEcrC6oYIf5Bq6hDaYGenOzYXp78O54Z4doPk+gBSr\nKbBnsTpgD67i1o81zq+B47MaJ6e3gwU6Lw4G4VkwxstnrhORn1tknB0EMdIT\n0Pak/UePmPCOqsNbGhwefa68BvR3IbqzQzrPjXhg5mWC8KsFixqr9gX0bH8V\nXVt5dfh3jU7BJLuwQ/ByDDEKz2jQUonKQrKo5YoqI9LKu2SwtA+BtFTw0ESF\nXnjh\r\n=UB9Z\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./lib/index.js","gitHead":"8b17f49da42f98824384c28c34eb2cda71b5c3d0","scripts":{"lint":"eslint ./src","test":"npm run lint && npm run coverage","build":"webpack --config webpack.config.babel.js","clean":"rm -rf dist coverage","start":"webpack-dev-server --config examples/webpack.config.live.babel.js","coverage":"jest --coverage","build:es5":"rm -rf ./lib; ./node_modules/.bin/babel src --out-dir lib --source-maps inline --copy-files --ignore=src/__tests__/,src/__mocks__/","prepublish":"npm run clean && npm run test && npm run build","build-examples":"webpack --config examples/webpack.config.babel.js --progress"},"_npmUser":{"name":"oznekenzo","email":"mkn293@nyu.edu"},"deprecated":"Deprecated in favor of Ceramic: https://developers.ceramic.network","_npmVersion":"6.13.4","description":"A drop in component for editing 3Box profiles.","directories":{},"resolutions":{"babel-core":"7.0.0-bridge.0"},"_nodeVersion":"12.14.1","dependencies":{"3box":"^1.15.0","async":"^3.1.0","emoji-js":"^3.4.1","orbit-db":"^0.21.4","node-sass":"^4.13.0","babel-core":"^7.0.0-bridge.0","emoji-mart":"^2.11.1","multicodec":"^0.5.6","3id-resolver":"0.0.6","@babel/runtime":"^7.6.0","react-inlinesvg":"^1.2.0","svg-inline-loader":"^0.8.0","ethereum-blockies-base64":"^1.0.2","react-addons-css-transition-group":"^15.6.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","react":"^16.6.0","enzyme":"^3.3.0","eslint":"^5.8.0","webpack":"^4.9.1","jest-cli":"^23.6.0","react-dom":"^16.6.0","@babel/cli":"^7.7.7","babel-jest":"^23.6.0","css-loader":"^1.0.1","prop-types":"^15.6.0","@babel/core":"^7.1.2","file-loader":"^4.2.0","sass-loader":"^7.0.1","webpack-cli":"^3.1.2","babel-eslint":"^10.0.1","babel-loader":"^8.0.4","did-resolver":"0.0.7","style-loader":"^0.23.1","@babel/register":"^7.0.0","react-hot-loader":"next","@babel/preset-env":"^7.1.0","webpack-dev-server":"^3.1.4","@babel/preset-react":"^7.0.0","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.0.0","regenerator-runtime":"^0.12.1","clean-webpack-plugin":"^0.1.16","enzyme-adapter-react-16":"^1.1.1","react-addons-test-utils":"^15.5.1","@babel/plugin-proposal-class-properties":"^7.5.5"},"peerDependencies":{"3box":"^1.14.0","react":">= 16.3.0","react-dom":">= 16.3.0"},"_npmOperationalInternal":{"tmp":"tmp/3box-profile-edit-react_0.0.5_1580406247548_0.4039800326689853","host":"s3://npm-registry-packages"}},"0.0.6-beta.0":{"name":"3box-profile-edit-react","version":"0.0.6-beta.0","keywords":["edit profile","3Box","decentralized","ethereum"],"author":{"name":"3box.io"},"license":"MIT","_id":"3box-profile-edit-react@0.0.6-beta.0","maintainers":[{"name":"oznekenzo","email":"mkn293@nyu.edu"}],"contributors":[{"name":"Kenzo Nakamura","email":"kenzo@nyu.edu"}],"dist":{"shasum":"968336760b13d3efe8152622bdf06fd0b9c18681","tarball":"https://registry.npmjs.org/3box-profile-edit-react/-/3box-profile-edit-react-0.0.6-beta.0.tgz","fileCount":46,"integrity":"sha512-aONAM44JVmrs2TCodKxbLwhZSm16ZP2RESmZVXdlUTK5rwzGliiMW46zklP1etno5eFC+pef6zp2qn1gj6y8vg==","signatures":[{"sig":"MEQCIDbAmpOXN0/O4n6gxcPIPjx6Rin9C1iWgHAHR/UFtL2+AiAVNyA9T6U0WnMvLyTWT8/blRUrmD0bNINkzZ9d14C30g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1479729,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJePDrJCRA9TVsSAnZWagAAPngP/juZK4n9JJy1X2edfEZ6\n43MB1dUBOe+SLl65xoi0uOaV4VPNaPZr4PZ5ygOwd5EY42Q5+qgB+sGjqZcy\nYyb3smdLY2H7d78ljpbomwWKL5OJoDIhCwI0S4efbRFPAXNRE31srZRej4hM\nDF3HFKii5UraZzhsAoa3JyAuBQDr6k2D/uv07o6go5MtxGEL6wH9loh6RfBR\n7FneWZ5M7iVHVvJchJwjp2acmSxuvQrTmcRFrRWZPu+q676krPgwL4QnbiZ8\n2C+OjAkUwdi1VWLqhgZKrnq007y7AS+U1WNSQ3orITnmgc+5NCwKncOgZAAB\nIqGbPPqS7kzWCJBosdRm8Ta/DZJM2qfOS6zB+bVyVcE0bWTm7K5dOnB+ZD8b\nYC8M3968x4fBQmrxaA5EkXp+9MtDH/PX8FhGfLYiTtV9+MpjJggMTog/oEV0\n3fHigg5sTk7lt33GZIriTbEO/7608m715TA/J4ewU/RXp4Dh8Wo24zGmpeDU\nc+JlDXqO3/b93h4S2pEa+xM2q7hSv7+dkRbgHOiRC3f4RfkB0iMltZCF02Ij\nJcoYNCrPD+zQh+6W/BFnAXvei9rIBYXDdRbWf84OEwLoYciSJjUKtSewHCZ5\nVOGc402OhK66NOfIMvAiK1yPewpgYprTmVba7WyzKB1NLqHugoLKKtVGkk9/\n3HTR\r\n=wwor\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./lib/index.js","readme":"[![Discord](https://img.shields.io/discord/484729862368526356.svg?style=for-the-badge)](https://discordapp.com/invite/Z3f3Cxy)\r\n[![npm](https://img.shields.io/npm/v/3box-chatbox-react.svg?style=for-the-badge)](https://www.npmjs.com/package/3box-profile-edit-react)\r\n[![Twitter Follow](https://img.shields.io/twitter/follow/3boxdb.svg?style=for-the-badge&label=Twitter)](https://twitter.com/3boxdb)\r\n\r\n# 3Box Profile Edit Plugin 📝\r\n\r\nThe `3box-profile-edit-react` node package is a drop-in react component that provides Web3 developers with UI and logic for editing user profiles in their Ethereum application. Quickly add customizable fields that are pertinent to your dapp on top of basic input fields, with the option of `text`, `textarea`, and `select` (dropdown) style inputs. The 3Box Edit Profile plugin is built using 3Box infrastructure. *Read the docs on [docs.3box.io](https://docs.3box.io/build/plugins/chatbox)*.\r\n\r\n### Try the demo [here](https://3box.github.io/3box-profile-edit-react/examples/dist/)\r\n![Example Screenshot](EditProfile.png)\r\n</br>\r\n\r\n## How it Works\r\n#### Architecture\r\nThe Edit Profile plugin implements simple `set` & `get` methods on both the [Profiles API](https://docs.3box.io/api/profiles) and the [Spaces API](https://docs.3box.io/api/storage) for standard fields (`name`, `image`, `coverPhoto`, `emoji`, `description`) depending on which profile the user chooses as their default (`3Box` or `App`), but will use only the Spaces API for custom fields added by the developer passed as a prop to the component. Both methods are made available via the [`3Box.js SDK`](https://github.com/3box/3box-js). After a user has set which default profile they'd like to use, by setting a boolean to the key `isAppProfileDefault` in the space's public store, the dapp should appropriately fetch from that profile elsewhere in the dapp.\r\n\r\n#### Authentication\r\nPrior to first render of the Edit Profile component, the dapp should have already run `const box = await Box.openBox(userAddress, ethereumProvider)` and `const space = await box.openSpace(spaceName)` and passed both the `box` and `space` objects as props of the same name.\r\n</br>\r\n</br>\r\n\r\n## Getting Started\r\n1. Install the component\r\n2. Configure application settings and props to component\r\n3. Usage\r\n4. Display correct profile in your app\r\n\r\n### 1. Install the component\r\n\r\n```shell\r\nnpm i -S 3box-profile-edit-react\r\n```\r\n\r\n### 2. Configure application settings and props to component\r\n**First, choose a name for your application's 3Box space.**\r\n\r\nAlthough you are free to choose whichever name you'd like for your app's space, we recommend using the name of your app. If your application already has a 3Box space, you are welcome to use that same one for the chatbox.\r\n\r\n**Then, configure the custom fields you'd like to add to the component**\r\n\r\nThe `customFields` prop must receive an ***array*** of *any* number of objects in the following structures:\r\n```javascript\r\n    { // for a field with a text input\r\n        inputType: 'text',\r\n        key: 'backupAddress', // the key used to save the value\r\n        field: 'Backup Address' // how to display the key in the UI\r\n      }, \r\n\r\n      { // for a field with a textarea input\r\n        inputType: 'textarea',\r\n        key: 'spiritCryptoKittie',\r\n        field: 'Spirit CryptoKitty'\r\n      },\r\n\r\n      { // for a field with a dropdown input\r\n        inputType: 'dropdown',\r\n        key: 'preferredCoin',\r\n        field: 'Preferred Coin',\r\n        options: [{ // dropdown input requires an array of objects\r\n          value: 'eth', // value passed after selection\r\n          display: 'Ethereum' // what the user will see in the dropdown\r\n        }, {\r\n          value: 'btc',\r\n          display: 'Bitcoin'\r\n        }, {\r\n          value: 'ltc',\r\n          display: 'Litecoin'\r\n        }]\r\n      }\r\n```\r\nThe Edit Profile component comes standard with `Name`, `Emoji`, and `Description` fields.  The component defaults to using the 3Box profile (as the `isAppProfileDefault` boolean in the space is still undefined). Fields passed to `customFields` however will always be saved to the app's space.\r\n\r\n</br>\r\n</br>\r\n\r\n\r\n### 3. Usage\r\nThe Edit Profile component can of course be used in any way the developer pleases, though we recommend it be used on a dedicated edit profile page or in a popup modal (not included) of the developer's design.  Remember, both the `box` and `space` instance must be passed to the component before it mounts.\r\n\r\n#### Example\r\n\r\n```jsx\r\nimport EditProfile from '3box-profile-edit-react';\r\n\r\nconst MyComponent = ({ customFields, box, space, myAddress, myProfile, redirectFn }) => (\r\n    <EditProfile\r\n        // required\r\n        box={box}\r\n        space={space}\r\n        currentUserAddr={myAddress}\r\n\r\n        // optional\r\n        customFields={customFields}\r\n        currentUser3BoxProfile={myProfile}\r\n        redirectFn={redirectFn}\r\n    />\r\n);\r\n```\r\n\r\n### 4. Display correct profile in your app\r\nOnce a user selects a default profile (3Box or app) the decision should reflect elsewhere in your dapp.  To do this, you should check `isAppProfileDefault` flag, then call `get` on the respective profile for fields `name`, `image`, `coverPhoto`, `emoji`, and `description`.  Custom fields added to the Edit Profile component, however, are all saved to the application profile in the `space` used by your dapp and should `get` from there.\r\n\r\nChecking and getting from the appropriate default profile should look something like this:\r\n```javascript\r\n  const isAppProfileDefault = await space.public.get('isAppProfileDefault');\r\n\r\n  let profile;\r\n  if (isAppProfileDefault) {\r\n    profile = await Box.getProfile(currentUserAddr);\r\n  } else {\r\n    profile = await space.public.all();\r\n  }\r\n\r\n  this.setState({\r\n    name: profile.name,\r\n    image: profile.image,\r\n    coverPhoto: profile.coverPhoto,\r\n    emoji: profile.emoji,\r\n    description: profile.description,\r\n  })\r\n```\r\n\r\n\r\n#### Prop Types\r\n\r\n| Property | Type            | Required          | Description |\r\n| :-------------------------------- | :-------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\r\n| `box`    | Object         |    True   | The `box` instance returned from running `await Box.openBox(address, web3)` somewhere in your dApp.|\r\n| `space`    | Object         |   True    | The `space` instance returned from running `await box.openSpace(spaceName)` somewhere in your dApp.|\r\n| `currentUserAddr`    | String (Ethereum Address)             | True| The current user's Ethereum address. Used to fetch the user's profile if it's not provided and for other various uses in the component. |\r\n| `customFields`    | Array       |        | An array of any amount of objects structured in one of three ways outlined above.  |\r\n| `currentUser3BoxProfile`    | Object       |       | If passed, it must be the object returned from calling `const currentUser3BoxProfile = await Box.getProfile(myAddress);`.  If this is not passed, the component runs the same static method using the `currentUserAddr` prop |\r\n| `redirectFn`    | Function      |    | A function that runs after saving the fields in the UI is complete, or when a user hits `cancel`.  The user's ethereum address will be passed as a param in the event that the dapp uses this in the route |\r\n\r\n## License\r\n\r\nMIT\r\n","gitHead":"8b17f49da42f98824384c28c34eb2cda71b5c3d0","scripts":{"lint":"eslint ./src","test":"npm run lint && npm run coverage","build":"webpack --config webpack.config.babel.js","clean":"rm -rf dist coverage","start":"webpack-dev-server --config examples/webpack.config.live.babel.js","coverage":"jest --coverage","build:es5":"rm -rf ./lib; ./node_modules/.bin/babel src --out-dir lib --source-maps inline --copy-files --ignore=src/__tests__/,src/__mocks__/","prepublish":"npm run clean && npm run test && npm run build","build-examples":"webpack --config examples/webpack.config.babel.js --progress"},"_npmUser":{"name":"oznekenzo","email":"mkn293@nyu.edu"},"_npmVersion":"6.13.4","description":"A drop in component for editing 3Box profiles.","directories":{},"resolutions":{"babel-core":"7.0.0-bridge.0"},"_nodeVersion":"12.14.1","dependencies":{"3box":"^1.15.0","async":"^3.1.0","emoji-js":"^3.4.1","orbit-db":"^0.21.4","node-sass":"^4.13.0","babel-core":"^7.0.0-bridge.0","emoji-mart":"^2.11.1","multicodec":"^0.5.6","3id-resolver":"0.0.6","@babel/runtime":"^7.6.0","react-inlinesvg":"^1.2.0","svg-inline-loader":"^0.8.0","ethereum-blockies-base64":"^1.0.2","react-addons-css-transition-group":"^15.6.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"chai":"^4.1.2","react":"^16.6.0","enzyme":"^3.3.0","eslint":"^5.8.0","webpack":"^4.9.1","jest-cli":"^23.6.0","react-dom":"^16.6.0","@babel/cli":"^7.7.7","babel-jest":"^23.6.0","css-loader":"^1.0.1","prop-types":"^15.6.0","@babel/core":"^7.1.2","file-loader":"^4.2.0","sass-loader":"^7.0.1","webpack-cli":"^3.1.2","babel-eslint":"^10.0.1","babel-loader":"^8.0.4","did-resolver":"0.0.7","style-loader":"^0.23.1","@babel/register":"^7.0.0","react-hot-loader":"next","@babel/preset-env":"^7.1.0","webpack-dev-server":"^3.1.4","@babel/preset-react":"^7.0.0","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.0.0","regenerator-runtime":"^0.12.1","clean-webpack-plugin":"^0.1.16","enzyme-adapter-react-16":"^1.1.1","react-addons-test-utils":"^15.5.1","@babel/plugin-proposal-class-properties":"^7.5.5"},"peerDependencies":{"3box":"^1.14.0","react":">= 16.3.0","react-dom":">= 16.3.0"},"_npmOperationalInternal":{"tmp":"tmp/3box-profile-edit-react_0.0.6-beta.0_1581005513529_0.3329098646144464","host":"s3://npm-registry-packages"}},"0.0.6-beta.1":{"name":"3box-profile-edit-react","version":"0.0.6-beta.1","keywords":["edit profile","3Box","decentralized","ethereum"],"author":{"name":"3box.io"},"license":"MIT","_id":"3box-profile-edit-react@0.0.6-beta.1","maintainers":[{"name":"oznekenzo","email":"mkn293@nyu.edu"}],"contributors":[{"name":"Kenzo Nakamura","email":"kenzo@nyu.edu"}],"dist":{"shasum":"04020225b34f889c817072334066ef4ec3de42bd","tarball":"https://registry.npmjs.org/3box-profile-edit-react/-/3box-profile-edit-react-0.0.6-beta.1.tgz","fileCount":46,"integrity":"sha512-aU5HzW5OVZXFiZ1sYxCUW044DQaFoM0X5iKo5CKE/OXmPIdvTdici4lkl/ZSFe0wHGmv6WLK8vImofp91cfTfQ==","signatures":[{"sig":"MEQCIDZGfS5gJP6/iebxeyMddK984ct0ry/AnVZG6szr/Bk5AiBLv/wf5kgIVOFj6p7TG//8MfGskrwGSDaA04Rwls1MmA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1480093,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJePD0iCRA9TVsSAnZWagAARToQAJL4BSSyYATvHRPnH1X5\nGRCHqygJSjWh2w/ygzT/X1bMrLNLrzokSzT1IWUGRGIfgnjhtY+Ertu6+tQe\nZsHQohC/giIOll5raoZ3PlxmAhL3j61uLvrtSxfBNYMicBDbkn4YoX/MwdEv\n6kn6AoTIc6fu4rRHGGNf/8ozfeLwJ6mpLLXqcxBM1t55cwY5ZYMpJ0IyBu2g\n/T72BXp9P/Y7zVPVukedlx0F8F3KbYzvIAb5UDYYIy91Wc9oS/sneJggOc1O\n7oO22xwP3L+KL63BEomUQAvr/3qmrL4wT2AMDGsf0/FhFTSLbcWTmJvo5D4Q\nXVyQd3dCmwHLfNv0vTsTpiG8YfmKiFEow3F2jUpsaMUuU8EPbr4F60I5ou7v\nbV1S16BlQlZ1q3CedIUx4PWa7kMc7BoyVhLpg0dqEvT+DIFZtQpuKJWx4obL\nafVsqlBaq1LfIAx6LCyU1xuEfNnozM4shFCaERANK5uwyXkeD9PE24qe52Jk\nezYzGoAWcfVt4pgwzKhYRrcUY72D0s8tBUosY2sdo3S4H7c4RVV/mKwgQ+OE\nJTXZTEmV02S0Tz7oY874ZPSjjC45MMUN9b8k4GDnmTcmGgsFrOZLIvtPfHUC\nIh1/PDba5TMlhVcxOQziBsGq0cIcYGIOGwgg5qQMu5y+tB0mhX66vd3tUcNK\nRTst\r\n=MASr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./lib/index.js","gitHead":"8b17f49da42f98824384c28c34eb2cda71b5c3d0","scripts":{"lint":"eslint ./src","test":"npm run lint && npm run coverage","build":"webpack --config webpack.config.babel.js","clean":"rm -rf dist coverage","start":"webpack-dev-server --config examples/webpack.config.live.babel.js","coverage":"jest --coverage","build:es5":"rm -rf ./lib; ./node_modules/.bin/babel src --out-dir lib --source-maps inline --copy-files --ignore=src/__tests__/,src/__mocks__/","prepublish":"npm run clean && npm run test && npm run build","build-examples":"webpack --config examples/webpack.config.babel.js --progress"},"_npmUser":{"name":"oznekenzo","email":"mkn293@nyu.edu"},"_npmVersion":"6.13.4","description":"A drop in component for editing 3Box profiles.","directories":{},"resolutions":{"babel-core":"7.0.0-bridge.0"},"_nodeVersion":"12.14.1","dependencies":{"3box":"^1.15.0","async":"^3.1.0","emoji-js":"^3.4.1","orbit-db":"^0.21.4","node-sass":"^4.13.0","babel-core":"^7.0.0-bridge.0","emoji-mart":"^2.11.1","multicodec":"^0.5.6","3id-resolver":"0.0.6","@babel/runtime":"^7.6.0","react-inlinesvg":"^1.2.0","svg-inline-loader":"^0.8.0","ethereum-blockies-base64":"^1.0.2","react-addons-css-transition-group":"^15.6.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","react":"^16.6.0","enzyme":"^3.3.0","eslint":"^5.8.0","webpack":"^4.9.1","jest-cli":"^23.6.0","react-dom":"^16.6.0","@babel/cli":"^7.7.7","babel-jest":"^23.6.0","css-loader":"^1.0.1","prop-types":"^15.6.0","@babel/core":"^7.1.2","file-loader":"^4.2.0","sass-loader":"^7.0.1","webpack-cli":"^3.1.2","babel-eslint":"^10.0.1","babel-loader":"^8.0.4","did-resolver":"0.0.7","style-loader":"^0.23.1","@babel/register":"^7.0.0","react-hot-loader":"next","@babel/preset-env":"^7.1.0","webpack-dev-server":"^3.1.4","@babel/preset-react":"^7.0.0","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.0.0","regenerator-runtime":"^0.12.1","clean-webpack-plugin":"^0.1.16","enzyme-adapter-react-16":"^1.1.1","react-addons-test-utils":"^15.5.1","@babel/plugin-proposal-class-properties":"^7.5.5"},"peerDependencies":{"3box":"^1.14.0","react":">= 16.3.0","react-dom":">= 16.3.0"},"_npmOperationalInternal":{"tmp":"tmp/3box-profile-edit-react_0.0.6-beta.1_1581006113768_0.4602672752377803","host":"s3://npm-registry-packages"}},"0.0.6-beta.2":{"name":"3box-profile-edit-react","version":"0.0.6-beta.2","keywords":["edit profile","3Box","decentralized","ethereum"],"author":{"name":"3box.io"},"license":"MIT","_id":"3box-profile-edit-react@0.0.6-beta.2","maintainers":[{"name":"oznekenzo","email":"mkn293@nyu.edu"}],"contributors":[{"name":"Kenzo Nakamura","email":"kenzo@nyu.edu"}],"dist":{"shasum":"d978b9971d409350093114c203f494ece8732d93","tarball":"https://registry.npmjs.org/3box-profile-edit-react/-/3box-profile-edit-react-0.0.6-beta.2.tgz","fileCount":46,"integrity":"sha512-UuWW9zBQ+O2BIZvCLR6+cTrvr0jaeQom9+Y6Ax4NSDoOuSLYmySVp/Yak9OwueQX/UUbOsTCitZHmguHl6dedQ==","signatures":[{"sig":"MEQCID9FAqwgscMcfNZM4eN1/HSuS3VwAdJCS3SurtfqFbsiAiBmPPzb5PH6+KiMaz4GIM9vtAOgAbe6IIS9N/0bl+dOjg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1480096,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJePEETCRA9TVsSAnZWagAAm3EQAJ/e/iXgxQEFDheINKVG\nf9TgZCSqDFymxXIQJ2QNUHN3JTWZTMjkmZuObxh58LVrdjLGgjqjRvydaKiZ\nJ/dsjNA00z9eItZTwyh94QswVf7LFJW0D3AML3/dGE74bzyyDe6/1wKLTkPv\nmRCAHCJkXEUS+6ivDxxgJDKytc5Z8cYISoA35utDgU9t23Sekvn8KP6bg2xK\nGNwzNgKqTnASspvcU9VL+7JJnWEAPTu0+sISEtcVGI49kX1UpFv7ORQLTbo6\nUnKJFYcTzbdVLpIdeajjbqJDbBdrLmGRLrOwswgqJeqFAtgHJxtJLsUjBXqg\nzXA6FGnIHfTVGg7oRGHhtSCN3HczNMyiu9VZUI+YkdEdoozUQna4v30+HxZm\nP4999WcPEXkjBTxWsx+VRM9P+yqZBF27zV2XsukAMEmwUQpyhAPmAkOI7LYg\nbw+IwbPCn96DO/P3mWLXqo+TtiXgdOObAtHJNcPE08LGDCQHR+IH25GbSDRe\nbXvR0Fhe3p+Y5b6JLAvFf34n4QRX5PfB7K8FD/33FAD0s8NAS+GaJ/+5fYMn\nxVFCFX/Ld7nXfxfpNTt5k91i/6ff3H0Lw8lnI8ndFuDimftQWVNkbo/gJz7R\n0O/OjKiUEdoLo6FDH7HMjQ3IcTFSiFh71K1wI6dS/tZTZrc/l+dg+8KvThUC\nT28y\r\n=+iBi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./lib/index.js","gitHead":"8b17f49da42f98824384c28c34eb2cda71b5c3d0","scripts":{"lint":"eslint ./src","test":"npm run lint && npm run coverage","build":"webpack --config webpack.config.babel.js","clean":"rm -rf dist coverage","start":"webpack-dev-server --config examples/webpack.config.live.babel.js","coverage":"jest --coverage","build:es5":"rm -rf ./lib; ./node_modules/.bin/babel src --out-dir lib --source-maps inline --copy-files --ignore=src/__tests__/,src/__mocks__/","prepublish":"npm run clean && npm run test && npm run build","build-examples":"webpack --config examples/webpack.config.babel.js --progress"},"_npmUser":{"name":"oznekenzo","email":"mkn293@nyu.edu"},"_npmVersion":"6.13.4","description":"A drop in component for editing 3Box profiles.","directories":{},"resolutions":{"babel-core":"7.0.0-bridge.0"},"_nodeVersion":"12.14.1","dependencies":{"3box":"^1.15.0","async":"^3.1.0","emoji-js":"^3.4.1","orbit-db":"^0.21.4","node-sass":"^4.13.0","babel-core":"^7.0.0-bridge.0","emoji-mart":"^2.11.1","multicodec":"^0.5.6","3id-resolver":"0.0.6","@babel/runtime":"^7.6.0","react-inlinesvg":"^1.2.0","svg-inline-loader":"^0.8.0","ethereum-blockies-base64":"^1.0.2","react-addons-css-transition-group":"^15.6.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","react":"^16.6.0","enzyme":"^3.3.0","eslint":"^5.8.0","webpack":"^4.9.1","jest-cli":"^23.6.0","react-dom":"^16.6.0","@babel/cli":"^7.7.7","babel-jest":"^23.6.0","css-loader":"^1.0.1","prop-types":"^15.6.0","@babel/core":"^7.1.2","file-loader":"^4.2.0","sass-loader":"^7.0.1","webpack-cli":"^3.1.2","babel-eslint":"^10.0.1","babel-loader":"^8.0.4","did-resolver":"0.0.7","style-loader":"^0.23.1","@babel/register":"^7.0.0","react-hot-loader":"next","@babel/preset-env":"^7.1.0","webpack-dev-server":"^3.1.4","@babel/preset-react":"^7.0.0","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.0.0","regenerator-runtime":"^0.12.1","clean-webpack-plugin":"^0.1.16","enzyme-adapter-react-16":"^1.1.1","react-addons-test-utils":"^15.5.1","@babel/plugin-proposal-class-properties":"^7.5.5"},"peerDependencies":{"3box":"^1.14.0","react":">= 16.3.0","react-dom":">= 16.3.0"},"_npmOperationalInternal":{"tmp":"tmp/3box-profile-edit-react_0.0.6-beta.2_1581007122748_0.021093011772104875","host":"s3://npm-registry-packages"}},"0.0.6-beta.3":{"name":"3box-profile-edit-react","version":"0.0.6-beta.3","keywords":["edit profile","3Box","decentralized","ethereum"],"author":{"name":"3box.io"},"license":"MIT","_id":"3box-profile-edit-react@0.0.6-beta.3","maintainers":[{"name":"oznekenzo","email":"mkn293@nyu.edu"}],"contributors":[{"name":"Kenzo Nakamura","email":"kenzo@nyu.edu"}],"dist":{"shasum":"13ed6b8a9eef3e8d7b7c87e4710a1d66ac8dee69","tarball":"https://registry.npmjs.org/3box-profile-edit-react/-/3box-profile-edit-react-0.0.6-beta.3.tgz","fileCount":46,"integrity":"sha512-NUvRoaVueCsDBPg1bk8FZUoJZVVvIAtLutLlJZqYI5vY6dLDNUf3EtRGNawx/SmvaXpoxHjmgzgumqm2/fr8Bg==","signatures":[{"sig":"MEYCIQDXsyHTzJKqZWOu+HK0hz2CFfg8Nu7PLLGpft1X9vYpGgIhANQGCpKXMctb00LS8pjMiwO73UScCP3VZIff916dC8pY","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1483657,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJePEtnCRA9TVsSAnZWagAANfIP/0WgUnNdSMJJzooGUfol\nrQ3JIJwoR+j74ohCxHO29wl/9BRulKWMFgQGol0Kziiiltn81qhj4WTypEF0\ngNhwy8wSBtaYtcS4uYMGxJRFwX7IjlfeWHJdSHahTj2kaTvTnBx1w/dCNRR5\n9LoIaCh5wjpz19ciITrZS/14QSzDkYzHWrUr3PwWFMBSmTvtMg2yhBoBZnrb\nkDxineFQudASn57efHaKit9gN5wHhyVdz03iSVjjRRVKGZIIl798klZZ6yob\nu2H7hiAOAcvrV1Jhlm77tTlGwvmaXPN79qgwkXRILv8OXGOL4gyqd+blC5UQ\nmjrUDIqBcwtpeJzKQHH1fm5fwaHBr82NjneR2doXDLjdNNLkl5IC0/13jJOW\nqyia1rL98n6nIe5vXE0zY9LSjyZ2I2EL6FxZOYfZfJVftsuyQYvPnBzGJru5\niNPSAQF8V7PWuuLQF6ye/QSOo9IMac9bQTzssOYRcuDKULZ7ydS0GSkFMlF8\nUFY624J80PGmuLOhCygGVOivH7yFun4gPmS0Sv7MyDLUf/g46F3U8oCUzCe/\nDnHMFq5hAO0tQ6xAfciwu3/KEadFw9Pbsbv6oo0wSWP3Tt/lUWwizK3J56am\n6yX9l36SdZWXaJ5I86c8+lNy3IoleHmdpqOuDoE/vN/rXmnafmLsF9VquLFl\nSXNJ\r\n=s5wB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./lib/index.js","readme":"[![Discord](https://img.shields.io/discord/484729862368526356.svg?style=for-the-badge)](https://discordapp.com/invite/Z3f3Cxy)\r\n[![npm](https://img.shields.io/npm/v/3box-chatbox-react.svg?style=for-the-badge)](https://www.npmjs.com/package/3box-profile-edit-react)\r\n[![Twitter Follow](https://img.shields.io/twitter/follow/3boxdb.svg?style=for-the-badge&label=Twitter)](https://twitter.com/3boxdb)\r\n\r\n# 3Box Profile Edit Plugin 📝\r\n\r\nThe `3box-profile-edit-react` node package is a drop-in react component that provides Web3 developers with UI and logic for editing user profiles in their Ethereum application. Quickly add customizable fields that are pertinent to your dapp on top of basic input fields, with the option of `text`, `textarea`, and `select` (dropdown) style inputs. The 3Box Edit Profile plugin is built using 3Box infrastructure. *Read the docs on [docs.3box.io](https://docs.3box.io/build/plugins/chatbox)*.\r\n\r\n### Try the demo [here](https://3box.github.io/3box-profile-edit-react/examples/dist/)\r\n![Example Screenshot](EditProfile.png)\r\n</br>\r\n\r\n## How it Works\r\n#### Architecture\r\nThe Edit Profile plugin implements simple `set` & `get` methods on both the [Profiles API](https://docs.3box.io/api/profiles) and the [Spaces API](https://docs.3box.io/api/storage) for standard fields (`name`, `image`, `coverPhoto`, `emoji`, `description`) depending on which profile the user chooses as their default (`3Box` or `App`), but will use only the Spaces API for custom fields added by the developer passed as a prop to the component. Both methods are made available via the [`3Box.js SDK`](https://github.com/3box/3box-js). After a user has set which default profile they'd like to use, by setting a boolean to the key `isAppProfileDefault` in the space's public store, the dapp should appropriately fetch from that profile elsewhere in the dapp.\r\n\r\n#### Authentication\r\nPrior to first render of the Edit Profile component, the dapp should have already run `const box = await Box.openBox(userAddress, ethereumProvider)` and `const space = await box.openSpace(spaceName)` and passed both the `box` and `space` objects as props of the same name.\r\n</br>\r\n</br>\r\n\r\n## Getting Started\r\n1. Install the component\r\n2. Configure application settings and props to component\r\n3. Usage\r\n4. Display correct profile in your app\r\n\r\n### 1. Install the component\r\n\r\n```shell\r\nnpm i -S 3box-profile-edit-react\r\n```\r\n\r\n### 2. Configure application settings and props to component\r\n**First, choose a name for your application's 3Box space.**\r\n\r\nAlthough you are free to choose whichever name you'd like for your app's space, we recommend using the name of your app. If your application already has a 3Box space, you are welcome to use that same one for the chatbox.\r\n\r\n**Then, configure the custom fields you'd like to add to the component**\r\n\r\nThe `customFields` prop must receive an ***array*** of *any* number of objects in the following structures:\r\n```javascript\r\n    { // for a field with a text input\r\n        inputType: 'text',\r\n        key: 'backupAddress', // the key used to save the value\r\n        field: 'Backup Address' // how to display the key in the UI\r\n      }, \r\n\r\n      { // for a field with a textarea input\r\n        inputType: 'textarea',\r\n        key: 'spiritCryptoKittie',\r\n        field: 'Spirit CryptoKitty'\r\n      },\r\n\r\n      { // for a field with a dropdown input\r\n        inputType: 'dropdown',\r\n        key: 'preferredCoin',\r\n        field: 'Preferred Coin',\r\n        options: [{ // dropdown input requires an array of objects\r\n          value: 'eth', // value passed after selection\r\n          display: 'Ethereum' // what the user will see in the dropdown\r\n        }, {\r\n          value: 'btc',\r\n          display: 'Bitcoin'\r\n        }, {\r\n          value: 'ltc',\r\n          display: 'Litecoin'\r\n        }]\r\n      }\r\n```\r\nThe Edit Profile component comes standard with `Name`, `Emoji`, and `Description` fields.  The component defaults to using the 3Box profile (as the `isAppProfileDefault` boolean in the space is still undefined). Fields passed to `customFields` however will always be saved to the app's space.\r\n\r\n</br>\r\n</br>\r\n\r\n\r\n### 3. Usage\r\nThe Edit Profile component can of course be used in any way the developer pleases, though we recommend it be used on a dedicated edit profile page or in a popup modal (not included) of the developer's design.  Remember, both the `box` and `space` instance must be passed to the component before it mounts.\r\n\r\n#### Example\r\n\r\n```jsx\r\nimport EditProfile from '3box-profile-edit-react';\r\n\r\nconst MyComponent = ({ customFields, box, space, myAddress, myProfile, redirectFn }) => (\r\n    <EditProfile\r\n        // required\r\n        box={box}\r\n        space={space}\r\n        currentUserAddr={myAddress}\r\n\r\n        // optional\r\n        customFields={customFields}\r\n        currentUser3BoxProfile={myProfile}\r\n        redirectFn={redirectFn}\r\n    />\r\n);\r\n```\r\n\r\n### 4. Display correct profile in your app\r\nOnce a user selects a default profile (3Box or app) the decision should reflect elsewhere in your dapp.  To do this, you should check `isAppProfileDefault` flag, then call `get` on the respective profile for fields `name`, `image`, `coverPhoto`, `emoji`, and `description`.  Custom fields added to the Edit Profile component, however, are all saved to the application profile in the `space` used by your dapp and should `get` from there.\r\n\r\nChecking and getting from the appropriate default profile should look something like this:\r\n```javascript\r\n  const isAppProfileDefault = await space.public.get('isAppProfileDefault');\r\n\r\n  let profile;\r\n  if (isAppProfileDefault) {\r\n    profile = await Box.getProfile(currentUserAddr);\r\n  } else {\r\n    profile = await space.public.all();\r\n  }\r\n\r\n  this.setState({\r\n    name: profile.name,\r\n    image: profile.image,\r\n    coverPhoto: profile.coverPhoto,\r\n    emoji: profile.emoji,\r\n    description: profile.description,\r\n  })\r\n```\r\n\r\n\r\n#### Prop Types\r\n\r\n| Property | Type            | Required          | Description |\r\n| :-------------------------------- | :-------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\r\n| `box`    | Object         |    True   | The `box` instance returned from running `await Box.openBox(address, web3)` somewhere in your dApp.|\r\n| `space`    | Object         |   True    | The `space` instance returned from running `await box.openSpace(spaceName)` somewhere in your dApp.|\r\n| `currentUserAddr`    | String (Ethereum Address)             | True| The current user's Ethereum address. Used to fetch the user's profile if it's not provided and for other various uses in the component. |\r\n| `customFields`    | Array       |        | An array of any amount of objects structured in one of three ways outlined above.  |\r\n| `currentUser3BoxProfile`    | Object       |       | If passed, it must be the object returned from calling `const currentUser3BoxProfile = await Box.getProfile(myAddress);`.  If this is not passed, the component runs the same static method using the `currentUserAddr` prop |\r\n| `redirectFn`    | Function      |    | A function that runs after the user hits `cancel`.  If no redirect function has been provided, then the cancel button will not be present in the form.  The user's ethereum address will be passed as a param in the event that the dapp uses this in the route |\r\n| `onSaveComplete`    | Function      |    | A function that runs after all updated fields in the form have been saved. You may also pass your redirect function to this prop should you choose to. If no function is passed to this prop,the form will save as usual. |\r\n\r\n## License\r\n\r\nMIT\r\n","gitHead":"8b17f49da42f98824384c28c34eb2cda71b5c3d0","scripts":{"lint":"eslint ./src","test":"npm run lint && npm run coverage","build":"webpack --config webpack.config.babel.js","clean":"rm -rf dist coverage","start":"webpack-dev-server --config examples/webpack.config.live.babel.js","coverage":"jest --coverage","build:es5":"rm -rf ./lib; ./node_modules/.bin/babel src --out-dir lib --source-maps inline --copy-files --ignore=src/__tests__/,src/__mocks__/","prepublish":"npm run clean && npm run test && npm run build","build-examples":"webpack --config examples/webpack.config.babel.js --progress"},"_npmUser":{"name":"oznekenzo","email":"mkn293@nyu.edu"},"_npmVersion":"6.13.4","description":"A drop in component for editing 3Box profiles.","directories":{},"resolutions":{"babel-core":"7.0.0-bridge.0"},"_nodeVersion":"12.14.1","dependencies":{"3box":"^1.15.0","async":"^3.1.0","emoji-js":"^3.4.1","orbit-db":"^0.21.4","node-sass":"^4.13.0","babel-core":"^7.0.0-bridge.0","emoji-mart":"^2.11.1","multicodec":"^0.5.6","3id-resolver":"0.0.6","@babel/runtime":"^7.6.0","react-inlinesvg":"^1.2.0","svg-inline-loader":"^0.8.0","ethereum-blockies-base64":"^1.0.2","react-addons-css-transition-group":"^15.6.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"chai":"^4.1.2","react":"^16.6.0","enzyme":"^3.3.0","eslint":"^5.8.0","webpack":"^4.9.1","jest-cli":"^23.6.0","react-dom":"^16.6.0","@babel/cli":"^7.7.7","babel-jest":"^23.6.0","css-loader":"^1.0.1","prop-types":"^15.6.0","@babel/core":"^7.1.2","file-loader":"^4.2.0","sass-loader":"^7.0.1","webpack-cli":"^3.1.2","babel-eslint":"^10.0.1","babel-loader":"^8.0.4","did-resolver":"0.0.7","style-loader":"^0.23.1","@babel/register":"^7.0.0","react-hot-loader":"next","@babel/preset-env":"^7.1.0","webpack-dev-server":"^3.1.4","@babel/preset-react":"^7.0.0","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.0.0","regenerator-runtime":"^0.12.1","clean-webpack-plugin":"^0.1.16","enzyme-adapter-react-16":"^1.1.1","react-addons-test-utils":"^15.5.1","@babel/plugin-proposal-class-properties":"^7.5.5"},"peerDependencies":{"3box":"^1.14.0","react":">= 16.3.0","react-dom":">= 16.3.0"},"_npmOperationalInternal":{"tmp":"tmp/3box-profile-edit-react_0.0.6-beta.3_1581009767131_0.592089996929777","host":"s3://npm-registry-packages"}},"0.0.6":{"name":"3box-profile-edit-react","version":"0.0.6","keywords":["edit profile","3Box","decentralized","ethereum"],"author":{"name":"3box.io"},"license":"MIT","_id":"3box-profile-edit-react@0.0.6","maintainers":[{"name":"oznekenzo","email":"mkn293@nyu.edu"}],"contributors":[{"name":"Kenzo Nakamura","email":"kenzo@nyu.edu"}],"dist":{"shasum":"195fe91f41ebb46ae295554c16eaca9300f95956","tarball":"https://registry.npmjs.org/3box-profile-edit-react/-/3box-profile-edit-react-0.0.6.tgz","fileCount":46,"integrity":"sha512-zVO3fwTUxcmWIm7dobwQQqcDPwwDBrklJhame/WpR9LkDxSOOp7+QTcvErUmFq9nxCSIMgtZRCjkptRv9hxL+w==","signatures":[{"sig":"MEUCIQCmT9T+J1ub9i8/5/ptHvfFuL7aQXqLYysjOE+DOXqy+gIgLK0hB3u7+RMzDZvkV/2gqJ2gw4fuKOPn01aKZ0xJeNQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1483651,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJePFJHCRA9TVsSAnZWagAAwbIP/iDLv/asybGEtZZOTizw\nktQSz/m5mIgUBTCvLu1TgEdVEH3JdlanQQgEGdJ2jN05u7TfntZROY4Q9Y8V\notfXACe2Ixj89XVGxZoz6Ewrl7f6Vl5ozBVHqCV87a4Efrt13QEL18sEj9TC\n2FEZ7EOB58RNLBqt/X0J5wZJ0p76zMgs9f30MERqca6OHRRSkZBQVsS8rIoZ\nPmMrZycqynFKxpkIhdPFz8PS4buY+poC/hsQhNuzMIG/HpDPoYNUMPZ+/IUB\n7ZhWLziYfeC+1rpGxZtONUAypxiifIGxswoz6s0AYV1TQkqgwv3+Gf3trXqJ\nGtgo/JSvYBIu9FFO6DY8WU3YNzUfUqbXBG3x+8N/wXqID21KTjHHqwo47Chu\njOR3H6aAO51g5dahuOxJvjDRJOzDvVeZx3rZDJfraPOcGXxAgEr+Bs+ciY7/\nhkEIoECfTsz7+cLQeaHD6CGwZX1At1GvL6eVCuFFtCX+OURPJ0DiX0cqS446\niqrppglO7vIWfmaFl/PpH1mknVG83E60pRfNy/YqqaG/zVckwWvzBaWRVeE6\nfcobPoIu0SPrpkkknIPcoDGl9Jkjiu+zL+RbsuJ7n/Qp3bfzTO0/misgIqTm\ngZ0j6zbtGrBfWecLw8ElBfwbRAVRf5AXs6rfHH9Md5KWxUNQuecezHyQFhVE\nLnl1\r\n=oMcv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./lib/index.js","gitHead":"e24a1de564bb974ccbb5bc692954b385ea44f383","scripts":{"lint":"eslint ./src","test":"npm run lint && npm run coverage","build":"webpack --config webpack.config.babel.js","clean":"rm -rf dist coverage","start":"webpack-dev-server --config examples/webpack.config.live.babel.js","coverage":"jest --coverage","build:es5":"rm -rf ./lib; ./node_modules/.bin/babel src --out-dir lib --source-maps inline --copy-files --ignore=src/__tests__/,src/__mocks__/","prepublish":"npm run clean && npm run test && npm run build","build-examples":"webpack --config examples/webpack.config.babel.js --progress"},"_npmUser":{"name":"oznekenzo","email":"mkn293@nyu.edu"},"deprecated":"Deprecated in favor of Ceramic: https://developers.ceramic.network","_npmVersion":"6.13.4","description":"A drop in component for editing 3Box profiles.","directories":{},"resolutions":{"babel-core":"7.0.0-bridge.0"},"_nodeVersion":"12.14.1","dependencies":{"3box":"^1.15.0","async":"^3.1.0","emoji-js":"^3.4.1","orbit-db":"^0.21.4","node-sass":"^4.13.0","babel-core":"^7.0.0-bridge.0","emoji-mart":"^2.11.1","multicodec":"^0.5.6","3id-resolver":"0.0.6","@babel/runtime":"^7.6.0","react-inlinesvg":"^1.2.0","svg-inline-loader":"^0.8.0","ethereum-blockies-base64":"^1.0.2","react-addons-css-transition-group":"^15.6.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","react":"^16.6.0","enzyme":"^3.3.0","eslint":"^5.8.0","webpack":"^4.9.1","jest-cli":"^23.6.0","react-dom":"^16.6.0","@babel/cli":"^7.7.7","babel-jest":"^23.6.0","css-loader":"^1.0.1","prop-types":"^15.6.0","@babel/core":"^7.1.2","file-loader":"^4.2.0","sass-loader":"^7.0.1","webpack-cli":"^3.1.2","babel-eslint":"^10.0.1","babel-loader":"^8.0.4","did-resolver":"0.0.7","style-loader":"^0.23.1","@babel/register":"^7.0.0","react-hot-loader":"next","@babel/preset-env":"^7.1.0","webpack-dev-server":"^3.1.4","@babel/preset-react":"^7.0.0","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.0.0","regenerator-runtime":"^0.12.1","clean-webpack-plugin":"^0.1.16","enzyme-adapter-react-16":"^1.1.1","react-addons-test-utils":"^15.5.1","@babel/plugin-proposal-class-properties":"^7.5.5"},"peerDependencies":{"3box":"^1.14.0","react":">= 16.3.0","react-dom":">= 16.3.0"},"_npmOperationalInternal":{"tmp":"tmp/3box-profile-edit-react_0.0.6_1581011527392_0.24496649257305458","host":"s3://npm-registry-packages"}},"0.0.7":{"name":"3box-profile-edit-react","version":"0.0.7","keywords":["edit profile","3Box","decentralized","ethereum"],"author":{"name":"3box.io"},"license":"MIT","_id":"3box-profile-edit-react@0.0.7","maintainers":[{"name":"oznekenzo","email":"mkn293@nyu.edu"}],"contributors":[{"name":"Kenzo Nakamura","email":"kenzo@nyu.edu"}],"dist":{"shasum":"c5ee565e23fdb747a0bb1ad91caa9522af8783eb","tarball":"https://registry.npmjs.org/3box-profile-edit-react/-/3box-profile-edit-react-0.0.7.tgz","fileCount":46,"integrity":"sha512-ZU76z5yhfi81CXsBIfQavqKc3tpoe3Kg6l650r6VOHsd2Capxjf3NXgnb+gVmdCi9IuTU2DrYgTJiuUMsWaZSA==","signatures":[{"sig":"MEYCIQDK2Hri7xHqbVA5dnZgdpMSBzTtOamdKae2EKrXpvbPcAIhAPeurx4b4zWQUShTNvfl7R6tNsNXLmX9f3vgIzN8d/Uw","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1483706,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeRxCaCRA9TVsSAnZWagAAjo4P/R84ohQ2x41umsTmLY+A\neY1gMvpfOqq/RSh0x/H56LnFtBON98sfTXzoisq8vm2KC+BiTi5bI7WPizsp\n0FFrpMflAToKH+/X3yxOFkZU/HT7/iYsD/eMx0klu42JX1KzMXBzZ/Ns8cGe\neiA5BWiIAwTOBCX+M8efPsiqv/MheEd3pw/dfXcngLfN/cDhQBZG0srYahXx\nAbx9MCx538/UsFQ8nAnJOaUQuZ0WbxhWLEU/e/7DoWLtQ1LCRfzAA0shzX3d\nyIUZlzRQcA8ysMASw/O5HVB+UctQuTO1QjR9DvpReeTpIDQzvX2SjYnbW0fw\nMArBmhHfHstLljxMB4KgoEcFDabvK+IzPfOqRgvSteXB2tke+gCwnAnwqCIx\nLkWFDCTKTR+JnGj1vN8O6kYiBZJA4Yhctd3TdhuvWH6UO6/niu2QrmRZ83/s\nQQ2asPY8Mm/v5QwM6LieCHgPrYBmoeickI6PclrDLPo/ypyWrfsGm3slSp38\nIW2WDemB3sk6QfgTpr3HU+yRnXVJ5GWtn+yx5Gn4Zb0YR4HffynrNuupsCaT\nD/QndJbeTSEdssl4Z7P2SS8jvdj8hIzb+RuhCePvq7Kuk5Ep+dcKciABAKhJ\nxDo9bykUid5Xs5dVH/uSiW/Vp5imiEXHMxVtPRm4nACg4UYbECH9EIVDJM/E\njNOa\r\n=W2x4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./lib/index.js","gitHead":"3e839cf6899e0b72f0243801362cf44183b54b13","scripts":{"lint":"eslint ./src","test":"npm run lint && npm run coverage","build":"webpack --config webpack.config.babel.js","clean":"rm -rf dist coverage","start":"webpack-dev-server --config examples/webpack.config.live.babel.js","coverage":"jest --coverage","build:es5":"rm -rf ./lib; ./node_modules/.bin/babel src --out-dir lib --source-maps inline --copy-files --ignore=src/__tests__/,src/__mocks__/","prepublish":"npm run clean && npm run test && npm run build","build-examples":"webpack --config examples/webpack.config.babel.js --progress"},"_npmUser":{"name":"oznekenzo","email":"mkn293@nyu.edu"},"deprecated":"Deprecated in favor of Ceramic: https://developers.ceramic.network","_npmVersion":"6.13.4","description":"A drop in component for editing 3Box profiles.","directories":{},"resolutions":{"babel-core":"7.0.0-bridge.0"},"_nodeVersion":"12.14.1","dependencies":{"3box":"^1.17.0","async":"^3.1.0","emoji-js":"^3.4.1","orbit-db":"^0.21.4","node-sass":"^4.13.0","babel-core":"^7.0.0-bridge.0","emoji-mart":"^2.11.1","multicodec":"^0.5.6","3id-resolver":"0.0.6","@babel/runtime":"^7.6.0","react-inlinesvg":"^1.2.0","svg-inline-loader":"^0.8.0","ethereum-blockies-base64":"^1.0.2","react-addons-css-transition-group":"^15.6.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","react":"^16.6.0","enzyme":"^3.3.0","eslint":"^5.8.0","webpack":"^4.9.1","jest-cli":"^23.6.0","react-dom":"^16.6.0","@babel/cli":"^7.7.7","babel-jest":"^23.6.0","css-loader":"^1.0.1","prop-types":"^15.6.0","@babel/core":"^7.1.2","file-loader":"^4.2.0","sass-loader":"^7.0.1","webpack-cli":"^3.1.2","babel-eslint":"^10.0.1","babel-loader":"^8.0.4","did-resolver":"0.0.7","style-loader":"^0.23.1","@babel/register":"^7.0.0","react-hot-loader":"next","@babel/preset-env":"^7.1.0","webpack-dev-server":"^3.1.4","@babel/preset-react":"^7.0.0","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.0.0","regenerator-runtime":"^0.12.1","clean-webpack-plugin":"^0.1.16","enzyme-adapter-react-16":"^1.1.1","react-addons-test-utils":"^15.5.1","@babel/plugin-proposal-class-properties":"^7.5.5"},"peerDependencies":{"3box":"^1.14.0","react":">= 16.3.0","react-dom":">= 16.3.0"},"_npmOperationalInternal":{"tmp":"tmp/3box-profile-edit-react_0.0.7_1581715610131_0.2458149256729587","host":"s3://npm-registry-packages"}},"0.0.8":{"name":"3box-profile-edit-react","version":"0.0.8","keywords":["edit profile","3Box","decentralized","ethereum"],"author":{"name":"3box.io"},"license":"MIT","_id":"3box-profile-edit-react@0.0.8","maintainers":[{"name":"oznekenzo","email":"mkn293@nyu.edu"}],"contributors":[{"name":"Kenzo Nakamura","email":"kenzo@nyu.edu"}],"dist":{"shasum":"cb99ef5f62971385f279b2b9e2ce3700daa6b466","tarball":"https://registry.npmjs.org/3box-profile-edit-react/-/3box-profile-edit-react-0.0.8.tgz","fileCount":46,"integrity":"sha512-4IgWgjVMIpj1ew7g4vJfb7a08B+s7ulRnOQTQlBafE26BbQjudB5EvYh/G4E8JzMOEn2WOHVrhBhh+deC9/dGw==","signatures":[{"sig":"MEQCIDHl+TZ7FkPBxn1yAwoLD0tSEYVrWEMgcVqMpAp4osTtAiA4LMZxZZ+XtmLjpuhlaYTL1izVJTMJONpGWYFP2vBdFw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1483739,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeSDtDCRA9TVsSAnZWagAAy10P/2NCcaLkNjUOTx4Z+bDA\ntdU7RVUIG4muSN+q0BkBbwXsEjB0FiV/uYETY0onU2yHxwRq0RAiWacpMBjQ\n0vDng9aDLpF87cDzQzd47zNA1zklA3GJ/QZXlSonqW140+6vz9EW2KMthje7\nDFQgdKXNuvHnOcuvb8NXkb3t2TMs0l8IXB+z8TvvLE5yfTyqcpR/L4K3ZyOk\nhvzeDpP9fYC3uhj9rgL1tyk0HWrppLfwlTifpY3ReqCUd6xcWTnP30qpq4dt\nGCYVFrTuO714COXmAEqS9G5yFvvtXOAf4KY1Hb9t3fvv3h1sJafxYERXZiGk\n7dFz4Wde027qtTsriE4xsb7G0oYkQKlxRq2NRL+he363zwe0eDXhybm6qDcT\n6vA9vAui1X8lesUqKG9rY2rBqhIRN0apWiTrBIq/yhMql1ZssHWwiWoELQWW\np2v69f+3GkA6KgGYRQIWACjocbUe0xmawbk6GPdatOTVlr/TZj/Rm/+CYtp7\n6AUC2lfQ7fMB04rx8ayXTpj4xmZDs5ohoID9PK4FcVlWre+O10lUpz/P2wnD\nwFKbHUjGiqqGW8slvnGIkxTIg2UsE5ncZMf1GwN237qjW4w7/vHgGGFDHg/x\nbuaUqnxELZlYOraIl6t0TNxc1HtIpDdJE7x9scbq2Q+Ty8+niPChojgN24yN\nDnuC\r\n=L/nC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./lib/index.js","gitHead":"610ae6f0f0ca0b24a9c5a517694d37a6a7d97a6b","scripts":{"lint":"eslint ./src","test":"npm run lint && npm run coverage","build":"webpack --config webpack.config.babel.js","clean":"rm -rf dist coverage","start":"webpack-dev-server --config examples/webpack.config.live.babel.js","coverage":"jest --coverage","build:es5":"rm -rf ./lib; ./node_modules/.bin/babel src --out-dir lib --source-maps inline --copy-files --ignore=src/__tests__/,src/__mocks__/","prepublish":"npm run clean && npm run test && npm run build","build-examples":"webpack --config examples/webpack.config.babel.js --progress"},"_npmUser":{"name":"oznekenzo","email":"mkn293@nyu.edu"},"deprecated":"Deprecated in favor of Ceramic: https://developers.ceramic.network","_npmVersion":"6.13.4","description":"A drop in component for editing 3Box profiles.","directories":{},"resolutions":{"babel-core":"7.0.0-bridge.0"},"_nodeVersion":"12.14.1","dependencies":{"3box":"^1.17.0","async":"^3.1.0","emoji-js":"^3.4.1","node-sass":"^4.13.0","babel-core":"^7.0.0-bridge.0","emoji-mart":"^2.11.1","multicodec":"^0.5.6","3id-resolver":"0.0.6","@babel/runtime":"^7.6.0","react-inlinesvg":"^1.2.0","svg-inline-loader":"^0.8.0","ethereum-blockies-base64":"^1.0.2","react-addons-css-transition-group":"^15.6.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","react":"^16.6.0","enzyme":"^3.3.0","eslint":"^5.8.0","webpack":"^4.9.1","jest-cli":"^23.6.0","react-dom":"^16.6.0","@babel/cli":"^7.7.7","babel-jest":"^23.6.0","css-loader":"^1.0.1","prop-types":"^15.6.0","@babel/core":"^7.1.2","file-loader":"^4.2.0","sass-loader":"^7.0.1","webpack-cli":"^3.1.2","babel-eslint":"^10.0.1","babel-loader":"^8.0.4","did-resolver":"0.0.7","style-loader":"^0.23.1","@babel/register":"^7.0.0","react-hot-loader":"next","@babel/preset-env":"^7.1.0","webpack-dev-server":"^3.1.4","@babel/preset-react":"^7.0.0","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.0.0","regenerator-runtime":"^0.12.1","clean-webpack-plugin":"^0.1.16","enzyme-adapter-react-16":"^1.1.1","react-addons-test-utils":"^15.5.1","@babel/plugin-proposal-class-properties":"^7.5.5"},"peerDependencies":{"3box":"^1.14.0","react":">= 16.3.0","react-dom":">= 16.3.0"},"_npmOperationalInternal":{"tmp":"tmp/3box-profile-edit-react_0.0.8_1581792066534_0.11209583738476248","host":"s3://npm-registry-packages"}},"0.0.9":{"name":"3box-profile-edit-react","version":"0.0.9","keywords":["edit profile","3Box","decentralized","ethereum"],"author":{"name":"3box.io"},"license":"MIT","_id":"3box-profile-edit-react@0.0.9","maintainers":[{"name":"oznekenzo","email":"mkn293@nyu.edu"}],"contributors":[{"name":"Kenzo Nakamura","email":"kenzo@nyu.edu"}],"dist":{"shasum":"86f4af779c59f843742121251cd3c04e8ba3cb1b","tarball":"https://registry.npmjs.org/3box-profile-edit-react/-/3box-profile-edit-react-0.0.9.tgz","fileCount":46,"integrity":"sha512-YdsRw7vvn355RTax6SQBs1HSVi/neqQ2661Vx5q/yaeAYJusi6W0bUyogcwHZ5+LEq0NioT6ZLfVqOk4HgGeog==","signatures":[{"sig":"MEQCIFchy7sysP1o3YLKYDCUjaY3joqeeB9lQs3BZ/y/3iTcAiA39cMjgWov2h6eYIkXPxV04giIRIHfmC43aYuh/4mYsg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1483794,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeh0kSCRA9TVsSAnZWagAAHJkQAICwmzA8V3NIQeQBoZJR\nsmGXk4f5wv9jKynFJ603DAHJ+U9vSqOhxU+PeGd0OcdpgWJ76eqW8wth/opg\n7Fcj98XSHYwlKBcIibbonvgrDEjY/4TaOTVZ/mOyxq6H/NaLoPR7GXd2x/eA\nDxgoriqs01yHNBcEoVQsXuP/NMN3gyOIYr5V3IIUkMPG09jLj/jB70zWn11s\n/FNe4XsbiMHLmA+XNwnYr0ns5YkLeuH/8AdRzV6+1KXZbW3GeDgPLFzpkBSW\nOrJPJrun2UdsTYBG0b3lCyE95myBp8L3imjpfXH3Gh/Wi8wthUO+IPw/K8Y4\nJW6zPiyxd40mX7hiZyuH1nN33pMzK7k/ksGqwVfg3YC0D8NlgMFhUEBB7D2D\nxmS1M4E1zTt5JGbcSSOJ05ivEgNUzAFQfsWy9GIvIG1mKPB7QwZ66wAzSpHL\nW42Ay8Xjnc7RzBbBWnjKvWLu3qOFJkhHXY3HpWkUbwrum9w4F7EC65IE7GY3\nMk1Jsrx7KhHEyOOWoTdpN2rVRpzlA5Gy1j3hQvKbf5E5y2Hdikwm6rm0TEI7\nWXzv60Tw8kbqaksoFJQVIprQjtXin+5TrcCqc4fwGJld9DmYSAcm8jEn/AXN\n3kw53zwtAEEFEkZnRSKzDih4Cj0QqlaCyfBPp3CGYSpAk3CopjJlnkdwQF0l\nIqyn\r\n=n3w5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./lib/index.js","gitHead":"62c38c0e447d5f4d390184d5c5cd6ee8306c1529","scripts":{"lint":"eslint ./src","test":"npm run lint && npm run coverage","build":"webpack --config webpack.config.babel.js","clean":"rm -rf dist coverage","start":"webpack-dev-server --config examples/webpack.config.live.babel.js","coverage":"jest --coverage","build:es5":"rm -rf ./lib; ./node_modules/.bin/babel src --out-dir lib --source-maps inline --copy-files --ignore=src/__tests__/,src/__mocks__/","prepublish":"npm run clean && npm run test && npm run build","build-examples":"webpack --config examples/webpack.config.babel.js --progress"},"_npmUser":{"name":"oznekenzo","email":"mkn293@nyu.edu"},"deprecated":"Deprecated in favor of Ceramic: https://developers.ceramic.network","_npmVersion":"6.13.4","description":"A drop in component for editing 3Box profiles.","directories":{},"resolutions":{"babel-core":"7.0.0-bridge.0"},"_nodeVersion":"10.18.0","dependencies":{"3box":"^1.17.1","async":"^3.1.0","emoji-js":"^3.4.1","node-sass":"^4.13.0","babel-core":"^7.0.0-bridge.0","emoji-mart":"^2.11.1","multicodec":"^0.5.6","3id-resolver":"0.0.6","@babel/runtime":"^7.6.0","react-inlinesvg":"^1.2.0","svg-inline-loader":"^0.8.0","ethereum-blockies-base64":"^1.0.2","react-addons-css-transition-group":"^15.6.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","react":"^16.6.0","enzyme":"^3.3.0","eslint":"^5.8.0","webpack":"^4.9.1","jest-cli":"^23.6.0","react-dom":"^16.6.0","@babel/cli":"^7.7.7","babel-jest":"^23.6.0","css-loader":"^1.0.1","prop-types":"^15.6.0","@babel/core":"^7.1.2","file-loader":"^4.2.0","sass-loader":"^7.0.1","webpack-cli":"^3.1.2","babel-eslint":"^10.0.1","babel-loader":"^8.0.4","did-resolver":"0.0.7","style-loader":"^0.23.1","@babel/register":"^7.0.0","react-hot-loader":"next","@babel/preset-env":"^7.1.0","webpack-dev-server":"^3.1.4","@babel/preset-react":"^7.0.0","eslint-plugin-react":"^7.4.0","react-test-renderer":"^16.0.0","regenerator-runtime":"^0.12.1","clean-webpack-plugin":"^0.1.16","enzyme-adapter-react-16":"^1.1.1","react-addons-test-utils":"^15.5.1","@babel/plugin-proposal-class-properties":"^7.5.5"},"peerDependencies":{"3box":"^1.14.0","react":">= 16.3.0","react-dom":">= 16.3.0"},"_npmOperationalInternal":{"tmp":"tmp/3box-profile-edit-react_0.0.9_1585924370339_0.5163744942844781","host":"s3://npm-registry-packages"}}},"time":{"created":"2019-12-03T14:24:05.913Z","modified":"2024-10-23T15:43:14.708Z","0.0.1-beta.1":"2019-12-03T14:24:06.169Z","0.0.1-beta.2":"2019-12-03T18:29:30.726Z","0.0.1-beta.3":"2019-12-05T01:10:03.734Z","0.0.1-beta.4":"2019-12-05T14:32:02.308Z","0.0.1-beta.5":"2019-12-05T14:35:01.595Z","0.0.1-beta.6":"2019-12-06T14:12:30.778Z","0.0.1-beta.7":"2020-01-03T14:24:19.881Z","0.0.1-beta.8":"2020-01-06T18:22:20.896Z","0.0.1-beta.9":"2020-01-06T18:27:09.952Z","0.0.1-beta.10":"2020-01-06T18:33:48.202Z","0.0.2":"2020-01-06T19:37:32.070Z","0.0.3":"2020-01-09T03:04:10.011Z","0.0.4":"2020-01-14T21:05:59.367Z","0.0.5":"2020-01-30T17:44:07.745Z","0.0.6-beta.0":"2020-02-06T16:11:53.740Z","0.0.6-beta.1":"2020-02-06T16:21:54.245Z","0.0.6-beta.2":"2020-02-06T16:38:42.956Z","0.0.6-beta.3":"2020-02-06T17:22:47.324Z","0.0.6":"2020-02-06T17:52:07.587Z","0.0.7":"2020-02-14T21:26:50.344Z","0.0.8":"2020-02-15T18:41:06.738Z","0.0.9":"2020-04-03T14:32:50.517Z"},"author":{"name":"3box.io"},"license":"MIT","keywords":["edit profile","3Box","decentralized","ethereum"],"description":"A drop in component for editing 3Box profiles.","contributors":[{"name":"Kenzo Nakamura","email":"kenzo@nyu.edu"}],"maintainers":[{"email":"oed@3box.io","name":"oed"}],"readme":"[![Discord](https://img.shields.io/discord/484729862368526356.svg?style=for-the-badge)](https://discordapp.com/invite/Z3f3Cxy)\r\n[![npm](https://img.shields.io/npm/v/3box-chatbox-react.svg?style=for-the-badge)](https://www.npmjs.com/package/3box-profile-edit-react)\r\n[![Twitter Follow](https://img.shields.io/twitter/follow/3boxdb.svg?style=for-the-badge&label=Twitter)](https://twitter.com/3boxdb)\r\n\r\n# 3Box Profile Edit Plugin 📝\r\n\r\nThe `3box-profile-edit-react` node package is a drop-in react component that provides Web3 developers with UI and logic for editing user profiles in their Ethereum application. Quickly add customizable fields that are pertinent to your dapp on top of basic input fields, with the option of `text`, `textarea`, and `select` (dropdown) style inputs. The 3Box Edit Profile plugin is built using 3Box infrastructure. *Read the docs on [docs.3box.io](https://docs.3box.io/build/plugins/chatbox)*.\r\n\r\n### Try the demo [here](https://3box.github.io/3box-profile-edit-react/examples/dist/)\r\n![Example Screenshot](EditProfile.png)\r\n</br>\r\n\r\n## How it Works\r\n#### Architecture\r\nThe Edit Profile plugin implements simple `set` & `get` methods on both the [Profiles API](https://docs.3box.io/api/profiles) and the [Spaces API](https://docs.3box.io/api/storage) for standard fields (`name`, `image`, `coverPhoto`, `emoji`, `description`) depending on which profile the user chooses as their default (`3Box` or `App`), but will use only the Spaces API for custom fields added by the developer passed as a prop to the component. Both methods are made available via the [`3Box.js SDK`](https://github.com/3box/3box-js). After a user has set which default profile they'd like to use, by setting a boolean to the key `isAppProfileDefault` in the space's public store, the dapp should appropriately fetch from that profile elsewhere in the dapp.\r\n\r\n#### Authentication\r\nPrior to first render of the Edit Profile component, the dapp should have already run `const box = await Box.openBox(userAddress, ethereumProvider)` and `const space = await box.openSpace(spaceName)` and passed both the `box` and `space` objects as props of the same name.\r\n</br>\r\n</br>\r\n\r\n## Getting Started\r\n1. Install the component\r\n2. Configure application settings and props to component\r\n3. Usage\r\n4. Display correct profile in your app\r\n\r\n### 1. Install the component\r\n\r\n```shell\r\nnpm i -S 3box-profile-edit-react\r\n```\r\n\r\n### 2. Configure application settings and props to component\r\n**First, choose a name for your application's 3Box space.**\r\n\r\nAlthough you are free to choose whichever name you'd like for your app's space, we recommend using the name of your app. If your application already has a 3Box space, you are welcome to use that same one for the chatbox.\r\n\r\n**Then, configure the custom fields you'd like to add to the component**\r\n\r\nThe `customFields` prop must receive an ***array*** of *any* number of objects in the following structures:\r\n```javascript\r\n    { // for a field with a text input\r\n        inputType: 'text',\r\n        key: 'backupAddress', // the key used to save the value\r\n        field: 'Backup Address' // how to display the key in the UI\r\n      }, \r\n\r\n      { // for a field with a textarea input\r\n        inputType: 'textarea',\r\n        key: 'spiritCryptoKittie',\r\n        field: 'Spirit CryptoKitty'\r\n      },\r\n\r\n      { // for a field with a dropdown input\r\n        inputType: 'dropdown',\r\n        key: 'preferredCoin',\r\n        field: 'Preferred Coin',\r\n        options: [{ // dropdown input requires an array of objects\r\n          value: 'eth', // value passed after selection\r\n          display: 'Ethereum' // what the user will see in the dropdown\r\n        }, {\r\n          value: 'btc',\r\n          display: 'Bitcoin'\r\n        }, {\r\n          value: 'ltc',\r\n          display: 'Litecoin'\r\n        }]\r\n      }\r\n```\r\nThe Edit Profile component comes standard with `Name`, `Emoji`, and `Description` fields.  The component defaults to using the 3Box profile (as the `isAppProfileDefault` boolean in the space is still undefined). Fields passed to `customFields` however will always be saved to the app's space.\r\n\r\n</br>\r\n</br>\r\n\r\n\r\n### 3. Usage\r\nThe Edit Profile component can of course be used in any way the developer pleases, though we recommend it be used on a dedicated edit profile page or in a popup modal (not included) of the developer's design.  Remember, both the `box` and `space` instance must be passed to the component before it mounts.\r\n\r\n#### Example\r\n\r\n```jsx\r\nimport EditProfile from '3box-profile-edit-react';\r\n\r\nconst MyComponent = ({ customFields, box, space, myAddress, myProfile, redirectFn }) => (\r\n    <EditProfile\r\n        // required\r\n        box={box}\r\n        space={space}\r\n        currentUserAddr={myAddress}\r\n\r\n        // optional\r\n        customFields={customFields}\r\n        currentUser3BoxProfile={myProfile}\r\n        redirectFn={redirectFn}\r\n    />\r\n);\r\n```\r\n\r\n### 4. Display correct profile in your app\r\nOnce a user selects a default profile (3Box or app) the decision should reflect elsewhere in your dapp.  To do this, you should check `isAppProfileDefault` flag, then call `get` on the respective profile for fields `name`, `image`, `coverPhoto`, `emoji`, and `description`.  Custom fields added to the Edit Profile component, however, are all saved to the application profile in the `space` used by your dapp and should `get` from there.\r\n\r\nChecking and getting from the appropriate default profile should look something like this:\r\n```javascript\r\n  const isAppProfileDefault = await space.public.get('isAppProfileDefault');\r\n\r\n  let profile;\r\n  if (isAppProfileDefault) {\r\n    profile = await Box.getProfile(currentUserAddr);\r\n  } else {\r\n    profile = await space.public.all();\r\n  }\r\n\r\n  this.setState({\r\n    name: profile.name,\r\n    image: profile.image,\r\n    coverPhoto: profile.coverPhoto,\r\n    emoji: profile.emoji,\r\n    description: profile.description,\r\n  })\r\n```\r\n\r\n\r\n#### Prop Types\r\n\r\n| Property | Type            | Required          | Description |\r\n| :-------------------------------- | :-------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\r\n| `box`    | Object         |    True   | The `box` instance returned from running `await Box.openBox(address, web3)` somewhere in your dApp.|\r\n| `space`    | Object         |   True    | The `space` instance returned from running `await box.openSpace(spaceName)` somewhere in your dApp.|\r\n| `currentUserAddr`    | String (Ethereum Address)             | True| The current user's Ethereum address. Used to fetch the user's profile if it's not provided and for other various uses in the component. |\r\n| `customFields`    | Array       |        | An array of any amount of objects structured in one of three ways outlined above.  |\r\n| `currentUser3BoxProfile`    | Object       |       | If passed, it must be the object returned from calling `const currentUser3BoxProfile = await Box.getProfile(myAddress);`.  If this is not passed, the component runs the same static method using the `currentUserAddr` prop |\r\n| `redirectFn`    | Function      |    | A function that runs after the user hits `cancel`.  If no redirect function has been provided, then the cancel button will not be present in the form.  The user's ethereum address will be passed as a param in the event that the dapp uses this in the route |\r\n| `onSaveComplete`    | Function      |    | A function that runs after all updated fields in the form have been saved. You may also pass your redirect function to this prop should you choose to. If no function is passed to this prop, the form will save as usual. |\r\n\r\n## License\r\n\r\nMIT\r\n","readmeFilename":"README.md"}